mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 22:19:41 +03:00
fix(skills): внятная диагностика разбора JSON вместо стектрейса (#80)
Неверный входной JSON ронял скрипты необработанным исключением: PS1 отдавал дамп
ConvertFrom-Json с CategoryInfo, py-порт — traceback с внутренностями json/decoder.py.
Имя файла в сообщении не фигурировало, а для полиморфного -Value не было видно, какую
форму ждёт операция.
Общий хелпер ConvertFrom-JsonInput / parse_json_input в 12 навыках × 2 порта (24 места),
зарегистрирован семьёй в check-inline-drift.mjs — копии держит гард. Сообщение в одну
строку: ожидаемая форма, полученное значение, текст парсера в скобках.
Эхо полученного значения нужно потому, что съеденные оболочкой кавычки дают почти тот же
JSON ({group:X} вместо {"group":"X"}), и без него агент считает свой вызов верным. PS 5.1
печатает лишь огрызок и локализованно, Python — только номер колонки.
Возврат в PS1 через Write-Output -NoEnumerate: вынос разбора в функцию добавляет второй
анруллинг, и одноэлементный JSON-массив стал бы скаляром. Импорты внутри тела py-хелпера —
skd-decompile импортирует json локально как _json, а тело семьи обязано быть одинаковым.
В раннер добавлен inputRaw (запись входного файла дословно): через case.input битый JSON
невыразим, JSON.stringify всегда даёт валидный документ.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
53fc16d2f1
commit
a44a29a7d8
+11
-3
@@ -799,7 +799,12 @@ async function runCaseAsync(testCase, opts) {
|
||||
}
|
||||
|
||||
// Write input
|
||||
if (caseData.input !== undefined) {
|
||||
// inputRaw пишется дословно: негативный кейс про битый JSON через case.input невыразим —
|
||||
// JSON.stringify всегда даёт валидный документ.
|
||||
if (caseData.inputRaw !== undefined) {
|
||||
inputFile = join(workDir, '__input.json');
|
||||
writeFileSync(inputFile, caseData.inputRaw, 'utf8');
|
||||
} else if (caseData.input !== undefined) {
|
||||
inputFile = join(workDir, '__input.json');
|
||||
writeFileSync(inputFile, JSON.stringify(caseData.input, null, 2), 'utf8');
|
||||
}
|
||||
@@ -1020,8 +1025,11 @@ function runCase(testCase, opts) {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Write input JSON if needed
|
||||
if (caseData.input !== undefined) {
|
||||
// 3. Write input JSON if needed (inputRaw — дословно, см. выше)
|
||||
if (caseData.inputRaw !== undefined) {
|
||||
inputFile = join(workDir, '__input.json');
|
||||
writeFileSync(inputFile, caseData.inputRaw, 'utf8');
|
||||
} else if (caseData.input !== undefined) {
|
||||
inputFile = join(workDir, '__input.json');
|
||||
writeFileSync(inputFile, JSON.stringify(caseData.input, null, 2), 'utf8');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user