@caupulican/pi-ai 0.90.7 → 0.90.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/image-models.generated.d.ts +15 -0
- package/dist/image-models.generated.d.ts.map +1 -1
- package/dist/image-models.generated.js +15 -0
- package/dist/image-models.generated.js.map +1 -1
- package/dist/models.generated.d.ts +245 -162
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +254 -208
- package/dist/models.generated.js.map +1 -1
- package/dist/providers/openai-responses.js +6 -0
- package/dist/providers/openai-responses.js.map +1 -1
- package/dist/utils/oauth/anthropic.d.ts.map +1 -1
- package/dist/utils/oauth/anthropic.js +1 -0
- package/dist/utils/oauth/anthropic.js.map +1 -1
- package/dist/utils/oauth/device-code.d.ts +3 -0
- package/dist/utils/oauth/device-code.d.ts.map +1 -1
- package/dist/utils/oauth/device-code.js +15 -2
- package/dist/utils/oauth/device-code.js.map +1 -1
- package/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/dist/utils/oauth/github-copilot.js +1 -0
- package/dist/utils/oauth/github-copilot.js.map +1 -1
- package/dist/utils/oauth/kimi-coding.d.ts.map +1 -1
- package/dist/utils/oauth/kimi-coding.js +2 -0
- package/dist/utils/oauth/kimi-coding.js.map +1 -1
- package/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/dist/utils/oauth/openai-codex.js +1 -0
- package/dist/utils/oauth/openai-codex.js.map +1 -1
- package/dist/utils/oauth/types.d.ts +4 -0
- package/dist/utils/oauth/types.d.ts.map +1 -1
- package/dist/utils/oauth/types.js.map +1 -1
- package/dist/utils/oauth/xai.d.ts.map +1 -1
- package/dist/utils/oauth/xai.js +15 -3
- package/dist/utils/oauth/xai.js.map +1 -1
- package/dist/utils/tool-repair/registry.d.ts +1 -1
- package/dist/utils/tool-repair/registry.d.ts.map +1 -1
- package/dist/utils/tool-repair/registry.js +14 -1
- package/dist/utils/tool-repair/registry.js.map +1 -1
- package/dist/utils/tool-repair/repairer.d.ts.map +1 -1
- package/dist/utils/tool-repair/repairer.js +62 -9
- package/dist/utils/tool-repair/repairer.js.map +1 -1
- package/package.json +1 -1
|
@@ -266,6 +266,45 @@ function applyTransform(candidate, issue, mode) {
|
|
|
266
266
|
function refreshIssueValue(candidate, issue) {
|
|
267
267
|
return { ...issue, value: getValueAtPath(candidate, issue.path) };
|
|
268
268
|
}
|
|
269
|
+
const PROPERTY_ALIAS_GROUPS = [
|
|
270
|
+
["replacementContent", "newText", "replacement_content", "new_text"],
|
|
271
|
+
["targetContent", "targetText", "oldText", "target_content", "target_text", "old_text"],
|
|
272
|
+
["startLine", "start_line"],
|
|
273
|
+
["endLine", "end_line"],
|
|
274
|
+
["path", "file_path", "filePath", "filename", "file"],
|
|
275
|
+
["edits", "changes", "replacements"],
|
|
276
|
+
];
|
|
277
|
+
function collectSchemaProperties(schema) {
|
|
278
|
+
const properties = {};
|
|
279
|
+
if (schema.properties) {
|
|
280
|
+
for (const [key, prop] of Object.entries(schema.properties)) {
|
|
281
|
+
if (isJsonSchemaObject(prop))
|
|
282
|
+
properties[key] = prop;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
for (const sub of [schema.allOf, schema.anyOf, schema.oneOf]) {
|
|
286
|
+
if (Array.isArray(sub)) {
|
|
287
|
+
for (const item of sub) {
|
|
288
|
+
if (isJsonSchemaObject(item)) {
|
|
289
|
+
Object.assign(properties, collectSchemaProperties(item));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return properties;
|
|
295
|
+
}
|
|
296
|
+
function findAliasCanonicalKey(key, schemaKeys) {
|
|
297
|
+
for (const group of PROPERTY_ALIAS_GROUPS) {
|
|
298
|
+
if (group.includes(key)) {
|
|
299
|
+
for (const targetKey of group) {
|
|
300
|
+
if (targetKey !== key && schemaKeys.has(targetKey)) {
|
|
301
|
+
return targetKey;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
269
308
|
function normalizePropertyCaseAtPath(value, schema, path, repairs) {
|
|
270
309
|
if (Array.isArray(value)) {
|
|
271
310
|
if (!isJsonSchemaObject(schema.items))
|
|
@@ -275,23 +314,37 @@ function normalizePropertyCaseAtPath(value, schema, path, repairs) {
|
|
|
275
314
|
}
|
|
276
315
|
return;
|
|
277
316
|
}
|
|
278
|
-
if (!isRecord(value)
|
|
317
|
+
if (!isRecord(value))
|
|
318
|
+
return;
|
|
319
|
+
const schemaProps = collectSchemaProperties(schema);
|
|
320
|
+
const schemaKeys = new Set(Object.keys(schemaProps));
|
|
321
|
+
if (schemaKeys.size === 0)
|
|
279
322
|
return;
|
|
280
323
|
const canonicalByLower = new Map();
|
|
281
|
-
for (const key of
|
|
324
|
+
for (const key of schemaKeys) {
|
|
282
325
|
const lower = key.toLowerCase();
|
|
283
326
|
canonicalByLower.set(lower, [...(canonicalByLower.get(lower) ?? []), key]);
|
|
284
327
|
}
|
|
285
328
|
for (const key of Object.keys(value)) {
|
|
286
|
-
|
|
287
|
-
const canonical = matches.length === 1 ? matches[0] : undefined;
|
|
288
|
-
if (!canonical || canonical === key || canonical in value)
|
|
329
|
+
if (key in schemaProps)
|
|
289
330
|
continue;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
331
|
+
const lower = key.toLowerCase();
|
|
332
|
+
const stripped = lower.replace(/_/g, "");
|
|
333
|
+
const canonical = (canonicalByLower.get(lower) ?? [])[0] ?? (canonicalByLower.get(stripped) ?? [])[0];
|
|
334
|
+
if (canonical && !(canonical in value)) {
|
|
335
|
+
value[canonical] = value[key];
|
|
336
|
+
delete value[key];
|
|
337
|
+
repairs.push({ name: "propertyCaseNormalize", path: formatRepairPath([...path, canonical]) });
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
const aliasCanonical = findAliasCanonicalKey(key, schemaKeys);
|
|
341
|
+
if (aliasCanonical && !(aliasCanonical in value)) {
|
|
342
|
+
value[aliasCanonical] = value[key];
|
|
343
|
+
delete value[key];
|
|
344
|
+
repairs.push({ name: "propertyAliasNormalize", path: formatRepairPath([...path, aliasCanonical]) });
|
|
345
|
+
}
|
|
293
346
|
}
|
|
294
|
-
for (const [key, propertySchema] of Object.entries(
|
|
347
|
+
for (const [key, propertySchema] of Object.entries(schemaProps)) {
|
|
295
348
|
if (!(key in value))
|
|
296
349
|
continue;
|
|
297
350
|
normalizePropertyCaseAtPath(value[key], propertySchema, [...path, key], repairs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repairer.js","sourceRoot":"","sources":["../../../src/utils/tool-repair/repairer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACN,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,QAAQ,GAIR,MAAM,eAAe,CAAC;AAQvB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAerE,SAAS,uBAAuB,CAC/B,MAA+B,EAC/B,IAAuB;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,MAAM,GAAY,MAAM,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACP,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B,EAAE,IAAuB,EAAE,KAAc;IAC/F,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAa,CAAC,GAAG,KAAK,CAAC;IACpD,CAAC;SAAM,CAAC;QACP,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAa,CAAC,GAAG,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA+B,EAAE,IAAuB;IAClF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAa,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACP,OAAO,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAa,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAwB,EAAE,KAAa;IACvE,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,CAAC;IAC1G,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAe,EAAE,MAAwB;IAClF,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnG,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,gBAAgB,CAAC,OAAO,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC3C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAA+B,CAAC;AAEvE,SAAS,kBAAkB,CAC1B,MAAwB,EACxB,UAA4C;IAE5C,MAAM,GAAG,GAAG,MAAgB,CAAC;IAC7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,GAAG,CACX,WAAW,EACX,IAAI,MAAM,CACT,IAAI,YAAY,CAAC,WAAW,CAAC,wFAAwF,EACrH,GAAG,CACH,CACD,CAAC;IACH,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAa,EAAE,MAAwB;IAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAC/D,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,MAAwB;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC;gBAAE,SAAS;YAChE,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,MAAwB;IAC3D,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;AAC/G,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc,EAAE,MAAwB;IAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjF,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACzF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CACtB,KAAsB,EACtB,IAAwB;IAExB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,iBAAiB,EAAE,CAAC;YACxB,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBACrC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACvE,CAAC,CAAC,SAAS,CAAC;QACd,CAAC;QACD,KAAK,2BAA2B;YAC/B,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBACrC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACpF,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,kBAAkB;YACtB,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,KAAK,gBAAgB;YACpB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC;gBAClE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvC,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,wBAAwB;YAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBACvF,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACpB,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,kBAAkB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1E,CAAC;QACD,KAAK,gBAAgB,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,IAAI,UAAU,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/D,IAAI,UAAU,KAAK,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACjE,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,mBAAmB,EAAE,CAAC;YAC1B,MAAM,SAAS,GACd,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAChF,CAAC;QACD,KAAK,qBAAqB;YACzB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACxC,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,0BAA0B,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5E,CAAC;QACD,KAAK,kBAAkB;YACtB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,KAAK,oBAAoB;YACxB,OAAO,SAAS,CAAC;QAClB,KAAK,qBAAqB;YACzB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBACzF,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC/C,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,mBAAmB,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5E,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CACtB,SAAkC,EAClC,KAAsB,EACtB,IAAwB;IAExB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IACD,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAkC,EAAE,KAAsB;IACpF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,2BAA2B,CACnC,KAAc,EACd,MAAwB,EACxB,IAAuB,EACvB,OAA4B;IAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,2BAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO;IACR,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO;IAEnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,IAAI,KAAK;YAAE,SAAS;QACpE,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;YAAE,SAAS;QAC9B,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,IAA6B,EAAE,MAA0B;IACvF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CACpC,MAA0B,EAC1B,SAAkC;IAElC,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAgB,EAChB,MAA0B,EAC1B,IAA6B,EAC7B,MAAsC,EACtC,cAA+D,EAC/D,OAAoC;IAEpC,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,cAAc,GAAyB,EAAE,CAAC;IAChD,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,aAAa,GAAmC,MAAM,CAAC;IAE3D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,WAAW,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YAC7B,IAAI,cAAc,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;YACnF,aAAa,GAAG,4BAA4B,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,aAAa,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACrF,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAAE,SAAS;YACzD,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACzD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,IAAI,KAAK,oBAAoB;oBAAE,SAAS;gBAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,CAAC,aAAa;oBAAE,SAAS;gBAC7B,SAAS,GAAG,aAAa,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxE,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM;YACP,CAAC;QACF,CAAC;QAED,IAAI,cAAc,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;QACnF,IAAI,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7D,aAAa,GAAG,UAAU,CAAC;IAC5B,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,cAA6C;IAChF,OAAO,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACxD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["import type { Tool } from \"../../types.ts\";\nimport { getValidator } from \"../validation.ts\";\nimport {\n\tanalyzeToolArgumentErrors,\n\tformatRepairPath,\n\tgetEnumValues,\n\tgetSchemaTypes,\n\tgetValueAtPath,\n\tisJsonSchemaObject,\n\tisRecord,\n\ttype JsonSchemaObject,\n\ttype ToolRepairIssue,\n\ttype ValidationErrorLike,\n} from \"./analyzer.ts\";\nimport type { ToolRepairModeName } from \"./registry.ts\";\n\nexport interface AppliedToolRepair {\n\tname: ToolRepairModeName;\n\tpath: string;\n}\n\n/**\n * Bound on the repairer's transform passes (decision D1, tool-call-repair doctrine). Each pass\n * re-checks the whole args once, so this is also the max number of extra `Check` calls a failed\n * call can cost. Measured deepest tested cascade (outer json-string-parse revealing a nested\n * property-case + scalar-coercion pass) converges in 2 passes; this bound is that plus one\n * margin layer, not an arbitrary ceiling.\n */\nexport const MAX_REPAIR_PASSES = 3;\n\nconst bashCommandWrapperKeys = new Set([\"cmd\", \"command\", \"script\"]);\n\nexport interface ToolRepairResult {\n\targs: Record<string, unknown>;\n\trepairsApplied: ToolRepairModeName[];\n\trepairs: AppliedToolRepair[];\n}\n\nexport interface RepairToolArgumentsOptions {\n\t/** Test-only instrumentation: called once per attempted pass with its zero-based index. */\n\tonPass?: (pass: number) => void;\n}\n\ntype RepairPathTarget = { container: unknown[]; key: number } | { container: Record<string, unknown>; key: string };\n\nfunction resolveRepairPathTarget(\n\ttarget: Record<string, unknown>,\n\tpath: readonly string[],\n): RepairPathTarget | undefined {\n\tif (path.length === 0) return undefined;\n\tlet cursor: unknown = target;\n\tfor (let index = 0; index < path.length - 1; index++) {\n\t\tconst segment = path[index];\n\t\tif (Array.isArray(cursor)) {\n\t\t\tconst arrayIndex = Number(segment);\n\t\t\tif (!Number.isInteger(arrayIndex)) return undefined;\n\t\t\tcursor = cursor[arrayIndex];\n\t\t} else if (isRecord(cursor)) {\n\t\t\tcursor = cursor[segment];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tconst finalSegment = path[path.length - 1];\n\tif (Array.isArray(cursor)) {\n\t\tconst arrayIndex = Number(finalSegment);\n\t\treturn Number.isInteger(arrayIndex) ? { container: cursor, key: arrayIndex } : undefined;\n\t}\n\tif (isRecord(cursor)) {\n\t\treturn { container: cursor, key: finalSegment };\n\t}\n\treturn undefined;\n}\n\nfunction setValueAtPath(target: Record<string, unknown>, path: readonly string[], value: unknown): boolean {\n\tconst resolved = resolveRepairPathTarget(target, path);\n\tif (!resolved) return false;\n\tif (Array.isArray(resolved.container)) {\n\t\tresolved.container[resolved.key as number] = value;\n\t} else {\n\t\tresolved.container[resolved.key as string] = value;\n\t}\n\treturn true;\n}\n\nfunction deleteValueAtPath(target: Record<string, unknown>, path: readonly string[]): boolean {\n\tconst resolved = resolveRepairPathTarget(target, path);\n\tif (!resolved) return false;\n\tif (Array.isArray(resolved.container)) {\n\t\tresolved.container.splice(resolved.key as number, 1);\n\t} else {\n\t\tdelete resolved.container[resolved.key as string];\n\t}\n\treturn true;\n}\n\nfunction normalizeEnumValue(value: string): string {\n\treturn value.trim().replace(/\\s+/g, \" \").toLowerCase();\n}\n\nfunction findNormalizedEnumValue(schema: JsonSchemaObject, value: string): string | undefined {\n\tconst normalized = normalizeEnumValue(value);\n\tconst matches = getEnumValues(schema).filter((candidate) => normalizeEnumValue(candidate) === normalized);\n\treturn matches.length === 1 ? matches[0] : undefined;\n}\n\nfunction parsedContainerMatchesSchemaType(parsed: unknown, schema: JsonSchemaObject): boolean {\n\tconst expectedTypes = getSchemaTypes(schema);\n\tif (expectedTypes.includes(\"array\") && !Array.isArray(parsed)) return false;\n\tif (expectedTypes.includes(\"object\") && (!isRecord(parsed) || Array.isArray(parsed))) return false;\n\treturn true;\n}\n\nfunction normalizeJsonQuoteDrift(value: string): string | undefined {\n\tif (!/[“”]/.test(value)) return undefined;\n\tconst normalizedQuotes = value.replaceAll(\"“\", '\"').replaceAll(\"”\", '\"');\n\treturn normalizedQuotes.replace(/\"([A-Za-z_][A-Za-z0-9_-]*)\\s*:\\s*\"/g, '\"$1\":\"');\n}\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction parseJsonLiteralToken(token: string): unknown | undefined {\n\ttry {\n\t\treturn JSON.parse(token) as unknown;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Per-schema cache of the declared-property salvage matchers (decision D4, tool-call-repair\n * doctrine): one `RegExp` per declared property, compiled once per schema object and reused\n * across every salvage attempt against that schema instead of rebuilding it per attempt. Each\n * regex keeps its global flag but is only ever driven via `matchAll`, which iterates over a\n * spec-cloned copy of the regex and never mutates the cached instance's `lastIndex` - safe to share.\n */\nconst salvageMatcherCache = new WeakMap<object, Map<string, RegExp>>();\n\nfunction getSalvageMatchers(\n\tschema: JsonSchemaObject,\n\tproperties: Record<string, JsonSchemaObject>,\n): Map<string, RegExp> {\n\tconst key = schema as object;\n\tconst cached = salvageMatcherCache.get(key);\n\tif (cached) return cached;\n\tconst matchers = new Map<string, RegExp>();\n\tfor (const propertyKey of Object.keys(properties)) {\n\t\tmatchers.set(\n\t\t\tpropertyKey,\n\t\t\tnew RegExp(\n\t\t\t\t`\"${escapeRegExp(propertyKey)}\"\\\\s*:\\\\s*(\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\"|-?\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?|true|false|null)`,\n\t\t\t\t\"g\",\n\t\t\t),\n\t\t);\n\t}\n\tsalvageMatcherCache.set(key, matchers);\n\treturn matchers;\n}\n\nfunction salvageDeclaredObjectProperties(value: string, schema: JsonSchemaObject): Record<string, unknown> | undefined {\n\tconst properties = schema.properties;\n\tif (!properties) return undefined;\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return undefined;\n\tconst normalized = normalizeJsonQuoteDrift(trimmed) ?? trimmed;\n\tconst matchers = getSalvageMatchers(schema, properties);\n\tconst salvaged: Record<string, unknown> = {};\n\tfor (const [key, pattern] of matchers) {\n\t\tconst matches = [...normalized.matchAll(pattern)];\n\t\tif (matches.length > 1) return undefined;\n\t\tconst token = matches[0]?.[1];\n\t\tif (token === undefined) continue;\n\t\tconst parsed = parseJsonLiteralToken(token);\n\t\tif (parsed === undefined && token !== \"null\") return undefined;\n\t\tsalvaged[key] = parsed;\n\t}\n\treturn Object.keys(salvaged).length > 0 ? salvaged : undefined;\n}\n\nfunction parseJsonContainer(value: string, schema: JsonSchemaObject): unknown | undefined {\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"[\") && !trimmed.startsWith(\"{\")) return undefined;\n\tfor (const candidate of [trimmed, normalizeJsonQuoteDrift(trimmed)]) {\n\t\tif (candidate === undefined) continue;\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(candidate);\n\t\t\tif (!parsedContainerMatchesSchemaType(parsed, schema)) continue;\n\t\t\treturn parsed;\n\t\t} catch {}\n\t}\n\treturn undefined;\n}\n\nfunction parseNumber(value: string, schema: JsonSchemaObject): number | undefined {\n\tif (value.trim() === \"\") return undefined;\n\tconst numberValue = Number(value);\n\tif (!Number.isFinite(numberValue)) return undefined;\n\treturn getSchemaTypes(schema).includes(\"integer\") && !Number.isInteger(numberValue) ? undefined : numberValue;\n}\n\nfunction coerceStringifiedNumberArray(value: unknown, schema: JsonSchemaObject): unknown[] | undefined {\n\tif (!Array.isArray(value) || !isJsonSchemaObject(schema.items)) return undefined;\n\tconst itemTypes = getSchemaTypes(schema.items);\n\tif (!itemTypes.some((type) => type === \"number\" || type === \"integer\")) return undefined;\n\tconst numbers: number[] = [];\n\tfor (const item of value) {\n\t\tif (typeof item !== \"string\") return undefined;\n\t\tconst parsed = parseNumber(item, schema.items);\n\t\tif (parsed === undefined) return undefined;\n\t\tnumbers.push(parsed);\n\t}\n\treturn numbers;\n}\n\nfunction unwrapBashCommand(value: unknown): string | undefined {\n\tif (!isRecord(value) || Object.keys(value).length !== 1) return undefined;\n\tconst [key] = Object.keys(value);\n\tif (!bashCommandWrapperKeys.has(key)) return undefined;\n\tconst command = value[key];\n\treturn typeof command === \"string\" ? command : undefined;\n}\n\nfunction transformValue(\n\tissue: ToolRepairIssue,\n\tmode: ToolRepairModeName,\n): { type: \"set\"; value: unknown } | { type: \"delete\" } | undefined {\n\tswitch (mode) {\n\t\tcase \"jsonStringParse\": {\n\t\t\treturn typeof issue.value === \"string\"\n\t\t\t\t? { type: \"set\", value: parseJsonContainer(issue.value, issue.schema) }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"jsonObjectPropertySalvage\":\n\t\t\treturn typeof issue.value === \"string\"\n\t\t\t\t? { type: \"set\", value: salvageDeclaredObjectProperties(issue.value, issue.schema) }\n\t\t\t\t: undefined;\n\t\tcase \"singleObjectWrap\":\n\t\t\treturn isRecord(issue.value) ? { type: \"set\", value: [issue.value] } : undefined;\n\t\tcase \"bareScalarWrap\":\n\t\t\treturn [\"string\", \"number\", \"boolean\"].includes(typeof issue.value)\n\t\t\t\t? { type: \"set\", value: [issue.value] }\n\t\t\t\t: undefined;\n\t\tcase \"emptyObjectPlaceholder\":\n\t\t\treturn !issue.required && isRecord(issue.value) && Object.keys(issue.value).length === 0\n\t\t\t\t? { type: \"delete\" }\n\t\t\t\t: undefined;\n\t\tcase \"numberFromString\": {\n\t\t\tconst parsed = typeof issue.value === \"string\" ? parseNumber(issue.value, issue.schema) : undefined;\n\t\t\treturn parsed === undefined ? undefined : { type: \"set\", value: parsed };\n\t\t}\n\t\tcase \"boolFromString\": {\n\t\t\tconst normalized = typeof issue.value === \"string\" ? issue.value.trim().toLowerCase() : undefined;\n\t\t\tif (normalized === \"true\") return { type: \"set\", value: true };\n\t\t\tif (normalized === \"false\") return { type: \"set\", value: false };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"enumCaseNormalize\": {\n\t\t\tconst enumValue =\n\t\t\t\ttypeof issue.value === \"string\" ? findNormalizedEnumValue(issue.schema, issue.value) : undefined;\n\t\t\treturn enumValue === undefined ? undefined : { type: \"set\", value: enumValue };\n\t\t}\n\t\tcase \"singleElementUnwrap\":\n\t\t\treturn Array.isArray(issue.value) && issue.value.length === 1\n\t\t\t\t? { type: \"set\", value: issue.value[0] }\n\t\t\t\t: undefined;\n\t\tcase \"stringifiedNumberInArray\": {\n\t\t\tconst coerced = coerceStringifiedNumberArray(issue.value, issue.schema);\n\t\t\treturn coerced === undefined ? undefined : { type: \"set\", value: coerced };\n\t\t}\n\t\tcase \"nullOptionalDrop\":\n\t\t\treturn !issue.required && issue.value === null ? { type: \"delete\" } : undefined;\n\t\tcase \"nullRequiredBounce\":\n\t\t\treturn undefined;\n\t\tcase \"bashCommandArgvJoin\":\n\t\t\treturn Array.isArray(issue.value) && issue.value.every((item) => typeof item === \"string\")\n\t\t\t\t? { type: \"set\", value: issue.value.join(\" \") }\n\t\t\t\t: undefined;\n\t\tcase \"bashCommandUnwrap\": {\n\t\t\tconst command = unwrapBashCommand(issue.value);\n\t\t\treturn command === undefined ? undefined : { type: \"set\", value: command };\n\t\t}\n\t}\n}\n\nfunction applyTransform(\n\tcandidate: Record<string, unknown>,\n\tissue: ToolRepairIssue,\n\tmode: ToolRepairModeName,\n): Record<string, unknown> | undefined {\n\tconst transform = transformValue(issue, mode);\n\tif (!transform) return undefined;\n\tif (transform.type === \"delete\") {\n\t\treturn deleteValueAtPath(candidate, issue.path) ? candidate : undefined;\n\t}\n\tif (transform.value === undefined) return undefined;\n\tif (issue.path.length === 0) {\n\t\treturn isRecord(transform.value) ? transform.value : undefined;\n\t}\n\treturn setValueAtPath(candidate, issue.path, transform.value) ? candidate : undefined;\n}\n\nfunction refreshIssueValue(candidate: Record<string, unknown>, issue: ToolRepairIssue): ToolRepairIssue {\n\treturn { ...issue, value: getValueAtPath(candidate, issue.path) };\n}\n\nfunction normalizePropertyCaseAtPath(\n\tvalue: unknown,\n\tschema: JsonSchemaObject,\n\tpath: readonly string[],\n\trepairs: AppliedToolRepair[],\n): void {\n\tif (Array.isArray(value)) {\n\t\tif (!isJsonSchemaObject(schema.items)) return;\n\t\tfor (let index = 0; index < value.length; index++) {\n\t\t\tnormalizePropertyCaseAtPath(value[index], schema.items, [...path, String(index)], repairs);\n\t\t}\n\t\treturn;\n\t}\n\tif (!isRecord(value) || !schema.properties) return;\n\n\tconst canonicalByLower = new Map<string, string[]>();\n\tfor (const key of Object.keys(schema.properties)) {\n\t\tconst lower = key.toLowerCase();\n\t\tcanonicalByLower.set(lower, [...(canonicalByLower.get(lower) ?? []), key]);\n\t}\n\tfor (const key of Object.keys(value)) {\n\t\tconst matches = canonicalByLower.get(key.toLowerCase()) ?? [];\n\t\tconst canonical = matches.length === 1 ? matches[0] : undefined;\n\t\tif (!canonical || canonical === key || canonical in value) continue;\n\t\tvalue[canonical] = value[key];\n\t\tdelete value[key];\n\t\trepairs.push({ name: \"propertyCaseNormalize\", path: formatRepairPath([...path, canonical]) });\n\t}\n\n\tfor (const [key, propertySchema] of Object.entries(schema.properties)) {\n\t\tif (!(key in value)) continue;\n\t\tnormalizePropertyCaseAtPath(value[key], propertySchema, [...path, key], repairs);\n\t}\n}\n\nfunction normalizePropertyCase(args: Record<string, unknown>, schema: Tool[\"parameters\"]): AppliedToolRepair[] {\n\tif (!isRecord(args) || !isJsonSchemaObject(schema)) return [];\n\tconst repairs: AppliedToolRepair[] = [];\n\tnormalizePropertyCaseAtPath(args, schema, [], repairs);\n\treturn repairs;\n}\n\nfunction validationErrorsForCandidate(\n\tschema: Tool[\"parameters\"],\n\tcandidate: Record<string, unknown>,\n): ValidationErrorLike[] | undefined {\n\ttry {\n\t\tconst validator = getValidator(schema);\n\t\treturn [...validator.Errors(candidate)].map((error) => ({\n\t\t\tinstancePath: error.instancePath,\n\t\t\tkeyword: error.keyword,\n\t\t\tmessage: error.message,\n\t\t}));\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function repairToolArguments(\n\ttoolName: string,\n\tschema: Tool[\"parameters\"],\n\targs: Record<string, unknown>,\n\terrors: readonly ValidationErrorLike[],\n\tcheckWholeArgs: (candidate: Record<string, unknown>) => boolean,\n\toptions?: RepairToolArgumentsOptions,\n): ToolRepairResult | undefined {\n\tlet candidate = structuredClone(args);\n\tconst repairsApplied: ToolRepairModeName[] = [];\n\tconst repairs: AppliedToolRepair[] = [];\n\tlet currentErrors: readonly ValidationErrorLike[] = errors;\n\n\tfor (let pass = 0; pass < MAX_REPAIR_PASSES; pass++) {\n\t\toptions?.onPass?.(pass);\n\t\tconst caseRepairs = normalizePropertyCase(candidate, schema);\n\t\tif (caseRepairs.length > 0) {\n\t\t\trepairsApplied.push(...caseRepairs.map((repair) => repair.name));\n\t\t\trepairs.push(...caseRepairs);\n\t\t\tif (checkWholeArgs(candidate)) return { args: candidate, repairsApplied, repairs };\n\t\t\tcurrentErrors = validationErrorsForCandidate(schema, candidate) ?? currentErrors;\n\t\t}\n\n\t\tconst issues = analyzeToolArgumentErrors(toolName, schema, candidate, currentErrors);\n\t\tlet transformed = false;\n\t\tfor (const issue of issues) {\n\t\t\tif (issue.modes.includes(\"nullRequiredBounce\")) continue;\n\t\t\tconst currentIssue = refreshIssueValue(candidate, issue);\n\t\t\tfor (const mode of currentIssue.modes) {\n\t\t\t\tif (mode === \"nullRequiredBounce\") continue;\n\t\t\t\tconst nextCandidate = applyTransform(candidate, currentIssue, mode);\n\t\t\t\tif (!nextCandidate) continue;\n\t\t\t\tcandidate = nextCandidate;\n\t\t\t\trepairsApplied.push(mode);\n\t\t\t\trepairs.push({ name: mode, path: formatRepairPath(currentIssue.path) });\n\t\t\t\ttransformed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (checkWholeArgs(candidate)) return { args: candidate, repairsApplied, repairs };\n\t\tif (!transformed) return undefined;\n\t\tconst nextErrors = validationErrorsForCandidate(schema, candidate);\n\t\tif (!nextErrors || nextErrors.length === 0) return undefined;\n\t\tcurrentErrors = nextErrors;\n\t}\n\n\treturn undefined;\n}\n\nexport function formatRepairSummary(repairsApplied: readonly ToolRepairModeName[]): string {\n\treturn repairsApplied.length === 0 ? \"none\" : repairsApplied.join(\", \");\n}\n\nexport function getRepairPathText(path: readonly string[]): string {\n\treturn formatRepairPath(path);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"repairer.js","sourceRoot":"","sources":["../../../src/utils/tool-repair/repairer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Tool } from \"../../types.ts\";\nimport { getValidator } from \"../validation.ts\";\nimport {\n\tanalyzeToolArgumentErrors,\n\tformatRepairPath,\n\tgetEnumValues,\n\tgetSchemaTypes,\n\tgetValueAtPath,\n\tisJsonSchemaObject,\n\tisRecord,\n\ttype JsonSchemaObject,\n\ttype ToolRepairIssue,\n\ttype ValidationErrorLike,\n} from \"./analyzer.ts\";\nimport type { ToolRepairModeName } from \"./registry.ts\";\n\nexport interface AppliedToolRepair {\n\tname: ToolRepairModeName;\n\tpath: string;\n}\n\n/**\n * Bound on the repairer's transform passes (decision D1, tool-call-repair doctrine). Each pass\n * re-checks the whole args once, so this is also the max number of extra `Check` calls a failed\n * call can cost. Measured deepest tested cascade (outer json-string-parse revealing a nested\n * property-case + scalar-coercion pass) converges in 2 passes; this bound is that plus one\n * margin layer, not an arbitrary ceiling.\n */\nexport const MAX_REPAIR_PASSES = 3;\n\nconst bashCommandWrapperKeys = new Set([\"cmd\", \"command\", \"script\"]);\n\nexport interface ToolRepairResult {\n\targs: Record<string, unknown>;\n\trepairsApplied: ToolRepairModeName[];\n\trepairs: AppliedToolRepair[];\n}\n\nexport interface RepairToolArgumentsOptions {\n\t/** Test-only instrumentation: called once per attempted pass with its zero-based index. */\n\tonPass?: (pass: number) => void;\n}\n\ntype RepairPathTarget = { container: unknown[]; key: number } | { container: Record<string, unknown>; key: string };\n\nfunction resolveRepairPathTarget(\n\ttarget: Record<string, unknown>,\n\tpath: readonly string[],\n): RepairPathTarget | undefined {\n\tif (path.length === 0) return undefined;\n\tlet cursor: unknown = target;\n\tfor (let index = 0; index < path.length - 1; index++) {\n\t\tconst segment = path[index];\n\t\tif (Array.isArray(cursor)) {\n\t\t\tconst arrayIndex = Number(segment);\n\t\t\tif (!Number.isInteger(arrayIndex)) return undefined;\n\t\t\tcursor = cursor[arrayIndex];\n\t\t} else if (isRecord(cursor)) {\n\t\t\tcursor = cursor[segment];\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tconst finalSegment = path[path.length - 1];\n\tif (Array.isArray(cursor)) {\n\t\tconst arrayIndex = Number(finalSegment);\n\t\treturn Number.isInteger(arrayIndex) ? { container: cursor, key: arrayIndex } : undefined;\n\t}\n\tif (isRecord(cursor)) {\n\t\treturn { container: cursor, key: finalSegment };\n\t}\n\treturn undefined;\n}\n\nfunction setValueAtPath(target: Record<string, unknown>, path: readonly string[], value: unknown): boolean {\n\tconst resolved = resolveRepairPathTarget(target, path);\n\tif (!resolved) return false;\n\tif (Array.isArray(resolved.container)) {\n\t\tresolved.container[resolved.key as number] = value;\n\t} else {\n\t\tresolved.container[resolved.key as string] = value;\n\t}\n\treturn true;\n}\n\nfunction deleteValueAtPath(target: Record<string, unknown>, path: readonly string[]): boolean {\n\tconst resolved = resolveRepairPathTarget(target, path);\n\tif (!resolved) return false;\n\tif (Array.isArray(resolved.container)) {\n\t\tresolved.container.splice(resolved.key as number, 1);\n\t} else {\n\t\tdelete resolved.container[resolved.key as string];\n\t}\n\treturn true;\n}\n\nfunction normalizeEnumValue(value: string): string {\n\treturn value.trim().replace(/\\s+/g, \" \").toLowerCase();\n}\n\nfunction findNormalizedEnumValue(schema: JsonSchemaObject, value: string): string | undefined {\n\tconst normalized = normalizeEnumValue(value);\n\tconst matches = getEnumValues(schema).filter((candidate) => normalizeEnumValue(candidate) === normalized);\n\treturn matches.length === 1 ? matches[0] : undefined;\n}\n\nfunction parsedContainerMatchesSchemaType(parsed: unknown, schema: JsonSchemaObject): boolean {\n\tconst expectedTypes = getSchemaTypes(schema);\n\tif (expectedTypes.includes(\"array\") && !Array.isArray(parsed)) return false;\n\tif (expectedTypes.includes(\"object\") && (!isRecord(parsed) || Array.isArray(parsed))) return false;\n\treturn true;\n}\n\nfunction normalizeJsonQuoteDrift(value: string): string | undefined {\n\tif (!/[“”]/.test(value)) return undefined;\n\tconst normalizedQuotes = value.replaceAll(\"“\", '\"').replaceAll(\"”\", '\"');\n\treturn normalizedQuotes.replace(/\"([A-Za-z_][A-Za-z0-9_-]*)\\s*:\\s*\"/g, '\"$1\":\"');\n}\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction parseJsonLiteralToken(token: string): unknown | undefined {\n\ttry {\n\t\treturn JSON.parse(token) as unknown;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Per-schema cache of the declared-property salvage matchers (decision D4, tool-call-repair\n * doctrine): one `RegExp` per declared property, compiled once per schema object and reused\n * across every salvage attempt against that schema instead of rebuilding it per attempt. Each\n * regex keeps its global flag but is only ever driven via `matchAll`, which iterates over a\n * spec-cloned copy of the regex and never mutates the cached instance's `lastIndex` - safe to share.\n */\nconst salvageMatcherCache = new WeakMap<object, Map<string, RegExp>>();\n\nfunction getSalvageMatchers(\n\tschema: JsonSchemaObject,\n\tproperties: Record<string, JsonSchemaObject>,\n): Map<string, RegExp> {\n\tconst key = schema as object;\n\tconst cached = salvageMatcherCache.get(key);\n\tif (cached) return cached;\n\tconst matchers = new Map<string, RegExp>();\n\tfor (const propertyKey of Object.keys(properties)) {\n\t\tmatchers.set(\n\t\t\tpropertyKey,\n\t\t\tnew RegExp(\n\t\t\t\t`\"${escapeRegExp(propertyKey)}\"\\\\s*:\\\\s*(\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\"|-?\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?|true|false|null)`,\n\t\t\t\t\"g\",\n\t\t\t),\n\t\t);\n\t}\n\tsalvageMatcherCache.set(key, matchers);\n\treturn matchers;\n}\n\nfunction salvageDeclaredObjectProperties(value: string, schema: JsonSchemaObject): Record<string, unknown> | undefined {\n\tconst properties = schema.properties;\n\tif (!properties) return undefined;\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return undefined;\n\tconst normalized = normalizeJsonQuoteDrift(trimmed) ?? trimmed;\n\tconst matchers = getSalvageMatchers(schema, properties);\n\tconst salvaged: Record<string, unknown> = {};\n\tfor (const [key, pattern] of matchers) {\n\t\tconst matches = [...normalized.matchAll(pattern)];\n\t\tif (matches.length > 1) return undefined;\n\t\tconst token = matches[0]?.[1];\n\t\tif (token === undefined) continue;\n\t\tconst parsed = parseJsonLiteralToken(token);\n\t\tif (parsed === undefined && token !== \"null\") return undefined;\n\t\tsalvaged[key] = parsed;\n\t}\n\treturn Object.keys(salvaged).length > 0 ? salvaged : undefined;\n}\n\nfunction parseJsonContainer(value: string, schema: JsonSchemaObject): unknown | undefined {\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith(\"[\") && !trimmed.startsWith(\"{\")) return undefined;\n\tfor (const candidate of [trimmed, normalizeJsonQuoteDrift(trimmed)]) {\n\t\tif (candidate === undefined) continue;\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(candidate);\n\t\t\tif (!parsedContainerMatchesSchemaType(parsed, schema)) continue;\n\t\t\treturn parsed;\n\t\t} catch {}\n\t}\n\treturn undefined;\n}\n\nfunction parseNumber(value: string, schema: JsonSchemaObject): number | undefined {\n\tif (value.trim() === \"\") return undefined;\n\tconst numberValue = Number(value);\n\tif (!Number.isFinite(numberValue)) return undefined;\n\treturn getSchemaTypes(schema).includes(\"integer\") && !Number.isInteger(numberValue) ? undefined : numberValue;\n}\n\nfunction coerceStringifiedNumberArray(value: unknown, schema: JsonSchemaObject): unknown[] | undefined {\n\tif (!Array.isArray(value) || !isJsonSchemaObject(schema.items)) return undefined;\n\tconst itemTypes = getSchemaTypes(schema.items);\n\tif (!itemTypes.some((type) => type === \"number\" || type === \"integer\")) return undefined;\n\tconst numbers: number[] = [];\n\tfor (const item of value) {\n\t\tif (typeof item !== \"string\") return undefined;\n\t\tconst parsed = parseNumber(item, schema.items);\n\t\tif (parsed === undefined) return undefined;\n\t\tnumbers.push(parsed);\n\t}\n\treturn numbers;\n}\n\nfunction unwrapBashCommand(value: unknown): string | undefined {\n\tif (!isRecord(value) || Object.keys(value).length !== 1) return undefined;\n\tconst [key] = Object.keys(value);\n\tif (!bashCommandWrapperKeys.has(key)) return undefined;\n\tconst command = value[key];\n\treturn typeof command === \"string\" ? command : undefined;\n}\n\nfunction transformValue(\n\tissue: ToolRepairIssue,\n\tmode: ToolRepairModeName,\n): { type: \"set\"; value: unknown } | { type: \"delete\" } | undefined {\n\tswitch (mode) {\n\t\tcase \"jsonStringParse\": {\n\t\t\treturn typeof issue.value === \"string\"\n\t\t\t\t? { type: \"set\", value: parseJsonContainer(issue.value, issue.schema) }\n\t\t\t\t: undefined;\n\t\t}\n\t\tcase \"jsonObjectPropertySalvage\":\n\t\t\treturn typeof issue.value === \"string\"\n\t\t\t\t? { type: \"set\", value: salvageDeclaredObjectProperties(issue.value, issue.schema) }\n\t\t\t\t: undefined;\n\t\tcase \"singleObjectWrap\":\n\t\t\treturn isRecord(issue.value) ? { type: \"set\", value: [issue.value] } : undefined;\n\t\tcase \"bareScalarWrap\":\n\t\t\treturn [\"string\", \"number\", \"boolean\"].includes(typeof issue.value)\n\t\t\t\t? { type: \"set\", value: [issue.value] }\n\t\t\t\t: undefined;\n\t\tcase \"emptyObjectPlaceholder\":\n\t\t\treturn !issue.required && isRecord(issue.value) && Object.keys(issue.value).length === 0\n\t\t\t\t? { type: \"delete\" }\n\t\t\t\t: undefined;\n\t\tcase \"numberFromString\": {\n\t\t\tconst parsed = typeof issue.value === \"string\" ? parseNumber(issue.value, issue.schema) : undefined;\n\t\t\treturn parsed === undefined ? undefined : { type: \"set\", value: parsed };\n\t\t}\n\t\tcase \"boolFromString\": {\n\t\t\tconst normalized = typeof issue.value === \"string\" ? issue.value.trim().toLowerCase() : undefined;\n\t\t\tif (normalized === \"true\") return { type: \"set\", value: true };\n\t\t\tif (normalized === \"false\") return { type: \"set\", value: false };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"enumCaseNormalize\": {\n\t\t\tconst enumValue =\n\t\t\t\ttypeof issue.value === \"string\" ? findNormalizedEnumValue(issue.schema, issue.value) : undefined;\n\t\t\treturn enumValue === undefined ? undefined : { type: \"set\", value: enumValue };\n\t\t}\n\t\tcase \"singleElementUnwrap\":\n\t\t\treturn Array.isArray(issue.value) && issue.value.length === 1\n\t\t\t\t? { type: \"set\", value: issue.value[0] }\n\t\t\t\t: undefined;\n\t\tcase \"stringifiedNumberInArray\": {\n\t\t\tconst coerced = coerceStringifiedNumberArray(issue.value, issue.schema);\n\t\t\treturn coerced === undefined ? undefined : { type: \"set\", value: coerced };\n\t\t}\n\t\tcase \"nullOptionalDrop\":\n\t\t\treturn !issue.required && issue.value === null ? { type: \"delete\" } : undefined;\n\t\tcase \"nullRequiredBounce\":\n\t\t\treturn undefined;\n\t\tcase \"bashCommandArgvJoin\":\n\t\t\treturn Array.isArray(issue.value) && issue.value.every((item) => typeof item === \"string\")\n\t\t\t\t? { type: \"set\", value: issue.value.join(\" \") }\n\t\t\t\t: undefined;\n\t\tcase \"bashCommandUnwrap\": {\n\t\t\tconst command = unwrapBashCommand(issue.value);\n\t\t\treturn command === undefined ? undefined : { type: \"set\", value: command };\n\t\t}\n\t}\n}\n\nfunction applyTransform(\n\tcandidate: Record<string, unknown>,\n\tissue: ToolRepairIssue,\n\tmode: ToolRepairModeName,\n): Record<string, unknown> | undefined {\n\tconst transform = transformValue(issue, mode);\n\tif (!transform) return undefined;\n\tif (transform.type === \"delete\") {\n\t\treturn deleteValueAtPath(candidate, issue.path) ? candidate : undefined;\n\t}\n\tif (transform.value === undefined) return undefined;\n\tif (issue.path.length === 0) {\n\t\treturn isRecord(transform.value) ? transform.value : undefined;\n\t}\n\treturn setValueAtPath(candidate, issue.path, transform.value) ? candidate : undefined;\n}\n\nfunction refreshIssueValue(candidate: Record<string, unknown>, issue: ToolRepairIssue): ToolRepairIssue {\n\treturn { ...issue, value: getValueAtPath(candidate, issue.path) };\n}\n\nconst PROPERTY_ALIAS_GROUPS: readonly (readonly string[])[] = [\n\t[\"replacementContent\", \"newText\", \"replacement_content\", \"new_text\"],\n\t[\"targetContent\", \"targetText\", \"oldText\", \"target_content\", \"target_text\", \"old_text\"],\n\t[\"startLine\", \"start_line\"],\n\t[\"endLine\", \"end_line\"],\n\t[\"path\", \"file_path\", \"filePath\", \"filename\", \"file\"],\n\t[\"edits\", \"changes\", \"replacements\"],\n];\n\nfunction collectSchemaProperties(schema: JsonSchemaObject): Record<string, JsonSchemaObject> {\n\tconst properties: Record<string, JsonSchemaObject> = {};\n\tif (schema.properties) {\n\t\tfor (const [key, prop] of Object.entries(schema.properties)) {\n\t\t\tif (isJsonSchemaObject(prop)) properties[key] = prop;\n\t\t}\n\t}\n\tfor (const sub of [schema.allOf, schema.anyOf, schema.oneOf]) {\n\t\tif (Array.isArray(sub)) {\n\t\t\tfor (const item of sub) {\n\t\t\t\tif (isJsonSchemaObject(item)) {\n\t\t\t\t\tObject.assign(properties, collectSchemaProperties(item));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn properties;\n}\n\nfunction findAliasCanonicalKey(key: string, schemaKeys: Set<string>): string | undefined {\n\tfor (const group of PROPERTY_ALIAS_GROUPS) {\n\t\tif (group.includes(key)) {\n\t\t\tfor (const targetKey of group) {\n\t\t\t\tif (targetKey !== key && schemaKeys.has(targetKey)) {\n\t\t\t\t\treturn targetKey;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizePropertyCaseAtPath(\n\tvalue: unknown,\n\tschema: JsonSchemaObject,\n\tpath: readonly string[],\n\trepairs: AppliedToolRepair[],\n): void {\n\tif (Array.isArray(value)) {\n\t\tif (!isJsonSchemaObject(schema.items)) return;\n\t\tfor (let index = 0; index < value.length; index++) {\n\t\t\tnormalizePropertyCaseAtPath(value[index], schema.items, [...path, String(index)], repairs);\n\t\t}\n\t\treturn;\n\t}\n\tif (!isRecord(value)) return;\n\n\tconst schemaProps = collectSchemaProperties(schema);\n\tconst schemaKeys = new Set(Object.keys(schemaProps));\n\tif (schemaKeys.size === 0) return;\n\n\tconst canonicalByLower = new Map<string, string[]>();\n\tfor (const key of schemaKeys) {\n\t\tconst lower = key.toLowerCase();\n\t\tcanonicalByLower.set(lower, [...(canonicalByLower.get(lower) ?? []), key]);\n\t}\n\n\tfor (const key of Object.keys(value)) {\n\t\tif (key in schemaProps) continue;\n\n\t\tconst lower = key.toLowerCase();\n\t\tconst stripped = lower.replace(/_/g, \"\");\n\t\tconst canonical = (canonicalByLower.get(lower) ?? [])[0] ?? (canonicalByLower.get(stripped) ?? [])[0];\n\n\t\tif (canonical && !(canonical in value)) {\n\t\t\tvalue[canonical] = value[key];\n\t\t\tdelete value[key];\n\t\t\trepairs.push({ name: \"propertyCaseNormalize\", path: formatRepairPath([...path, canonical]) });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst aliasCanonical = findAliasCanonicalKey(key, schemaKeys);\n\t\tif (aliasCanonical && !(aliasCanonical in value)) {\n\t\t\tvalue[aliasCanonical] = value[key];\n\t\t\tdelete value[key];\n\t\t\trepairs.push({ name: \"propertyAliasNormalize\", path: formatRepairPath([...path, aliasCanonical]) });\n\t\t}\n\t}\n\n\tfor (const [key, propertySchema] of Object.entries(schemaProps)) {\n\t\tif (!(key in value)) continue;\n\t\tnormalizePropertyCaseAtPath(value[key], propertySchema, [...path, key], repairs);\n\t}\n}\n\nfunction normalizePropertyCase(args: Record<string, unknown>, schema: Tool[\"parameters\"]): AppliedToolRepair[] {\n\tif (!isRecord(args) || !isJsonSchemaObject(schema)) return [];\n\tconst repairs: AppliedToolRepair[] = [];\n\tnormalizePropertyCaseAtPath(args, schema, [], repairs);\n\treturn repairs;\n}\n\nfunction validationErrorsForCandidate(\n\tschema: Tool[\"parameters\"],\n\tcandidate: Record<string, unknown>,\n): ValidationErrorLike[] | undefined {\n\ttry {\n\t\tconst validator = getValidator(schema);\n\t\treturn [...validator.Errors(candidate)].map((error) => ({\n\t\t\tinstancePath: error.instancePath,\n\t\t\tkeyword: error.keyword,\n\t\t\tmessage: error.message,\n\t\t}));\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function repairToolArguments(\n\ttoolName: string,\n\tschema: Tool[\"parameters\"],\n\targs: Record<string, unknown>,\n\terrors: readonly ValidationErrorLike[],\n\tcheckWholeArgs: (candidate: Record<string, unknown>) => boolean,\n\toptions?: RepairToolArgumentsOptions,\n): ToolRepairResult | undefined {\n\tlet candidate = structuredClone(args);\n\tconst repairsApplied: ToolRepairModeName[] = [];\n\tconst repairs: AppliedToolRepair[] = [];\n\tlet currentErrors: readonly ValidationErrorLike[] = errors;\n\n\tfor (let pass = 0; pass < MAX_REPAIR_PASSES; pass++) {\n\t\toptions?.onPass?.(pass);\n\t\tconst caseRepairs = normalizePropertyCase(candidate, schema);\n\t\tif (caseRepairs.length > 0) {\n\t\t\trepairsApplied.push(...caseRepairs.map((repair) => repair.name));\n\t\t\trepairs.push(...caseRepairs);\n\t\t\tif (checkWholeArgs(candidate)) return { args: candidate, repairsApplied, repairs };\n\t\t\tcurrentErrors = validationErrorsForCandidate(schema, candidate) ?? currentErrors;\n\t\t}\n\n\t\tconst issues = analyzeToolArgumentErrors(toolName, schema, candidate, currentErrors);\n\t\tlet transformed = false;\n\t\tfor (const issue of issues) {\n\t\t\tif (issue.modes.includes(\"nullRequiredBounce\")) continue;\n\t\t\tconst currentIssue = refreshIssueValue(candidate, issue);\n\t\t\tfor (const mode of currentIssue.modes) {\n\t\t\t\tif (mode === \"nullRequiredBounce\") continue;\n\t\t\t\tconst nextCandidate = applyTransform(candidate, currentIssue, mode);\n\t\t\t\tif (!nextCandidate) continue;\n\t\t\t\tcandidate = nextCandidate;\n\t\t\t\trepairsApplied.push(mode);\n\t\t\t\trepairs.push({ name: mode, path: formatRepairPath(currentIssue.path) });\n\t\t\t\ttransformed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (checkWholeArgs(candidate)) return { args: candidate, repairsApplied, repairs };\n\t\tif (!transformed) return undefined;\n\t\tconst nextErrors = validationErrorsForCandidate(schema, candidate);\n\t\tif (!nextErrors || nextErrors.length === 0) return undefined;\n\t\tcurrentErrors = nextErrors;\n\t}\n\n\treturn undefined;\n}\n\nexport function formatRepairSummary(repairsApplied: readonly ToolRepairModeName[]): string {\n\treturn repairsApplied.length === 0 ? \"none\" : repairsApplied.join(\", \");\n}\n\nexport function getRepairPathText(path: readonly string[]): string {\n\treturn formatRepairPath(path);\n}\n"]}
|