@caupulican/pi-agent-core 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.
Files changed (45) hide show
  1. package/dist/agent-loop.d.ts +1 -1
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +18 -2
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/agent.d.ts +2 -0
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +4 -0
  8. package/dist/agent.js.map +1 -1
  9. package/dist/compaction/compaction.d.ts.map +1 -1
  10. package/dist/compaction/compaction.js +1 -34
  11. package/dist/compaction/compaction.js.map +1 -1
  12. package/dist/compaction/extraction.d.ts +1 -0
  13. package/dist/compaction/extraction.d.ts.map +1 -1
  14. package/dist/compaction/extraction.js +1 -1
  15. package/dist/compaction/extraction.js.map +1 -1
  16. package/dist/compaction/utils.d.ts +13 -1
  17. package/dist/compaction/utils.d.ts.map +1 -1
  18. package/dist/compaction/utils.js +49 -1
  19. package/dist/compaction/utils.js.map +1 -1
  20. package/dist/compaction/verification.d.ts.map +1 -1
  21. package/dist/compaction/verification.js +154 -6
  22. package/dist/compaction/verification.js.map +1 -1
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/provider-request-planner.d.ts +8 -0
  28. package/dist/provider-request-planner.d.ts.map +1 -1
  29. package/dist/provider-request-planner.js +8 -1
  30. package/dist/provider-request-planner.js.map +1 -1
  31. package/dist/provider-tool-projection.d.ts.map +1 -1
  32. package/dist/provider-tool-projection.js +4 -11
  33. package/dist/provider-tool-projection.js.map +1 -1
  34. package/dist/tool-failure-memory.d.ts +12 -0
  35. package/dist/tool-failure-memory.d.ts.map +1 -1
  36. package/dist/tool-failure-memory.js +102 -3
  37. package/dist/tool-failure-memory.js.map +1 -1
  38. package/dist/tool-failure-recovery-gate.d.ts +9 -2
  39. package/dist/tool-failure-recovery-gate.d.ts.map +1 -1
  40. package/dist/tool-failure-recovery-gate.js +59 -2
  41. package/dist/tool-failure-recovery-gate.js.map +1 -1
  42. package/dist/tool-protocol-residue.d.ts.map +1 -1
  43. package/dist/tool-protocol-residue.js +58 -18
  44. package/dist/tool-protocol-residue.js.map +1 -1
  45. package/package.json +2 -2
@@ -279,6 +279,81 @@ export function getToolFailureRecordExecutionKey(record) {
279
279
  export function getUnresolvedToolFailure(tracker, tool, args) {
280
280
  return tracker.get(getToolFailureKey(tool, args));
281
281
  }
282
+ export function readVisibleToolFailureCode(result) {
283
+ for (const block of result.content) {
284
+ if (block.type !== "text")
285
+ continue;
286
+ const match = /"failure_code"\s*:\s*"([^"]+)"/.exec(block.text);
287
+ if (match)
288
+ return match[1];
289
+ }
290
+ return undefined;
291
+ }
292
+ export function isClosedOperationFailureCode(code) {
293
+ return code === "operation_recovery_exhausted" || code === "recovery_exhausted";
294
+ }
295
+ export function restoreToolFailureRecord(result, tool, args) {
296
+ const executionKey = getToolExecutionKey(tool, args);
297
+ const persisted = readFailureRecord(result.details);
298
+ if (persisted) {
299
+ return {
300
+ ...persisted,
301
+ [TOOL_FAILURE_EXECUTION_KEY]: getToolFailureRecordExecutionKey(persisted) ?? executionKey,
302
+ };
303
+ }
304
+ const identity = operationIdentity(tool, args);
305
+ return {
306
+ version: TOOL_FAILURE_MEMORY_VERSION,
307
+ failureKey: identity.failureKey,
308
+ [TOOL_FAILURE_EXECUTION_KEY]: executionKey,
309
+ tool: identity.tool,
310
+ operation: identity.operation,
311
+ occurrence: 1,
312
+ state: "failed",
313
+ phase: "execution",
314
+ failureCode: boundedFailureCode(readVisibleToolFailureCode(result) ?? "tool_error"),
315
+ correction: fallbackFailureGuidance("failed", false, "execution"),
316
+ };
317
+ }
318
+ export function forEachPairedToolResult(messages, visit) {
319
+ const callsById = new Map();
320
+ for (const message of messages) {
321
+ if (message.role === "assistant") {
322
+ for (const block of message.content) {
323
+ if (block.type === "toolCall") {
324
+ callsById.set(block.id, { name: block.name, args: block.arguments });
325
+ }
326
+ }
327
+ continue;
328
+ }
329
+ if (message.role !== "toolResult")
330
+ continue;
331
+ const call = callsById.get(message.toolCallId);
332
+ if (!call)
333
+ continue;
334
+ if (visit({
335
+ tool: call.name,
336
+ args: call.args,
337
+ executionKey: getToolExecutionKey(call.name, call.args),
338
+ result: message,
339
+ }) === false) {
340
+ return;
341
+ }
342
+ }
343
+ }
344
+ export function transcriptHasClosedToolOperation(messages) {
345
+ const closedByExecutionKey = new Map();
346
+ forEachPairedToolResult(messages, ({ executionKey, result }) => {
347
+ if (!result.isError) {
348
+ closedByExecutionKey.delete(executionKey);
349
+ return;
350
+ }
351
+ if (isClosedOperationFailureCode(readVisibleToolFailureCode(result))) {
352
+ closedByExecutionKey.set(executionKey, true);
353
+ }
354
+ });
355
+ return closedByExecutionKey.size > 0;
356
+ }
282
357
  function boundedFailureCode(value) {
283
358
  const normalized = value
284
359
  .trim()
@@ -287,9 +362,24 @@ function boundedFailureCode(value) {
287
362
  .replace(/^_+|_+$/g, "");
288
363
  return truncate(normalized || "tool_error", MAX_FAILURE_CODE_CHARS);
289
364
  }
365
+ /**
366
+ * bash.ts's own trailer (`appendStatus`) always ends the message with a line like "Command
367
+ * exited with code 1"; a structured result (e.g. run_process) instead puts "exitCode: 1" on its
368
+ * own line near the top. Both are anchored to the START of their own line, with at most one
369
+ * leading tool-name token ("Command"/"Python"/...) — ordinary stdout/stderr prose is never
370
+ * anchored that way, so a captured line like "container will exit 0 on SIGTERM" can never be
371
+ * read as the process exit status. Scan from the end of the message so the tool's own trailer —
372
+ * always the last line it appends — outranks any earlier, non-authoritative line that matches.
373
+ */
374
+ const EXIT_STATUS_LINE_PATTERN = /^(?:\S+\s+)?(?:exit(?:ed)?(?:\s+with)?(?:\s+code)?|exitcode)\s*[:=]?\s*(-?\d+)\b/i;
290
375
  function processExitFailureCode(message) {
291
- const exitCode = /\b(?:exit(?:ed)?(?: with)?(?: code)?|exitcode)\s*[:=]?\s*(-?\d+)\b/i.exec(message)?.[1];
292
- return exitCode === undefined ? undefined : boundedFailureCode(`exit_${exitCode}`);
376
+ const lines = message.split(/\r\n|\n/);
377
+ for (let index = lines.length - 1; index >= 0; index--) {
378
+ const match = EXIT_STATUS_LINE_PATTERN.exec(lines[index].trim());
379
+ if (match)
380
+ return boundedFailureCode(`exit_${match[1]}`);
381
+ }
382
+ return undefined;
293
383
  }
294
384
  export function classifyToolFailure(message, errorClass) {
295
385
  // A tool-owned terminal status is authoritative; stdout may contain arbitrary all-caps identifiers.
@@ -366,7 +456,16 @@ function extractFailureDiagnostic(message, allowUnclassifiedFallback, requireStr
366
456
  .filter((line) => line.length > 0 && !/^command (?:exited with code|timed out after|aborted|killed after)\b/i.test(line));
367
457
  if (stderrLines.length > 0) {
368
458
  const classified = stderrLines.find((line) => strongDiagnosticPattern.test(line));
369
- return truncateMiddle(classified ?? stderrLines.slice(-4).join(" | "), MAX_DIAGNOSTIC_CHARS);
459
+ if (classified)
460
+ return truncateMiddle(classified, MAX_DIAGNOSTIC_CHARS);
461
+ // No stderr line carries a strong signal. Under requireStrongSignal, the caller has
462
+ // already decided uncatalogued output must never be fabricated into a diagnostic (see
463
+ // assessToolFailure) — falling back to the last raw stderr lines here would defeat that
464
+ // guarantee for the common bash case, so fall through to the same allowUnclassifiedFallback
465
+ // gate the no-stderr path below applies.
466
+ if (!requireStrongSignal) {
467
+ return truncateMiddle(stderrLines.slice(-4).join(" | "), MAX_DIAGNOSTIC_CHARS);
468
+ }
370
469
  }
371
470
  }
372
471
  const lines = rawLines
@@ -1 +1 @@
1
- {"version":3,"file":"tool-failure-memory.js","sourceRoot":"","sources":["../src/tool-failure-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tgetToolExecutionAttemptMemory,\n\tgetToolExecutionErrorPolicy,\n\ttype ToolFailurePhase,\n} from \"@caupulican/pi-ai/tool-repair-registry\";\nimport type { AssistantMessage, ToolResultMessage } from \"@caupulican/pi-ai/types\";\nimport {\n\tMANDATORY_TOOL_FAILURE_RECOVERY_PROTOCOL_PROMPT,\n\tmandatoryToolFailureRecoveryMetadata,\n} from \"./tool-failure-recovery-protocol.ts\";\nimport type { AgentMessage, AgentToolCall, AgentToolResult } from \"./types.ts\";\nimport { sanitizeBinaryOutput } from \"./utils/shell-output.ts\";\n\nconst TOOL_FAILURE_MEMORY_VERSION = 1;\nconst TOOL_FAILURE_DIRECTIVE_VERSION = 1;\nconst TOOL_FAILURE_EXECUTION_KEY = Symbol(\"ToolFailureExecutionKey\");\nconst MAX_OPERATION_CHARS = 240;\nconst MAX_FAILURE_CODE_CHARS = 48;\nconst MAX_DIAGNOSTIC_CHARS = 240;\nconst MAX_CORRECTION_CHARS = 320;\nconst MAX_TOOL_NAME_CHARS = 64;\nconst TOOL_SIGNATURE_HEX_CHARS = 32;\nconst MAX_ACTIVE_FAILURES = 8;\nconst MAX_TRACKED_FAILURES = 64;\nconst REPAIRABLE_REJECTION_CODES = new Set([\"invalid_arguments\", \"malformed_call\", \"unknown_tool\"]);\nconst LEGACY_GENERIC_EXECUTION_CORRECTION =\n\t\"Change the arguments or approach before retrying; do not resend the unchanged operation.\";\nconst BLOCKED_REPLAY_CAVEMAN_CORRECTION =\n\t\"CAVEMAN MODE - MANDATORY. SAME OPERATION BLOCKED. Do not repeat an unchanged operation. NEVER call it again with the same arguments in this run. This is not a harness loop or failure.\";\nconst CLOSED_OPERATION_CAVEMAN_CORRECTION =\n\t\"CAVEMAN MODE - MANDATORY: OPERATION CLOSED; not executed. Do not repeat an unchanged operation. NEVER call it again with the same arguments in this run. Use a different operation/tool or continue independent work. The recovery guard prevented a loop; this is not harness failure.\";\n\nexport type ToolFailureState = \"failed\" | \"rejected\";\n\nexport interface ToolFailureMemoryRecord {\n\tversion: typeof TOOL_FAILURE_MEMORY_VERSION;\n\tfailureKey: string;\n\t/** Exact identity is process-internal and omitted from serialized failure memory. */\n\treadonly [TOOL_FAILURE_EXECUTION_KEY]?: string;\n\ttool: string;\n\toperation: string;\n\toccurrence: number;\n\tkindMistakes?: number;\n\tmistakeKind?: string;\n\tstate: ToolFailureState;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tdiagnostic?: string;\n\tcorrection: string;\n\tattemptMemory?: \"discard\";\n}\n\nexport interface ToolFailureMemoryDetails {\n\tpiToolFailureMemory: ToolFailureMemoryRecord;\n}\n\nexport interface ToolFailureDirectiveDetails {\n\tpiToolFailureDirective: {\n\t\tversion: typeof TOOL_FAILURE_DIRECTIVE_VERSION;\n\t\tstate: ToolFailureState;\n\t\tphase: ToolFailurePhase;\n\t\tfailureCode: string;\n\t\tdiagnostic?: string;\n\t\tnextAction: string;\n\t};\n}\n\nexport type ToolFailureResultDetails = ToolFailureMemoryDetails | ToolFailureDirectiveDetails;\n\nexport type ToolFailureMemoryTracker = Map<string, ToolFailureMemoryRecord>;\n\ninterface ToolOperationIdentity {\n\tfailureKey: string;\n\texecutionKey: string;\n\ttool: string;\n\toperation: string;\n}\n\ninterface ActiveFailure {\n\trecord: ToolFailureMemoryRecord;\n\tsequence: number;\n}\n\ninterface FailureContextAnalysis {\n\tmessages: AgentMessage[];\n\tactiveRecords: ToolFailureMemoryRecord[];\n\tactiveDirectives: ToolFailureDirectiveDetails[\"piToolFailureDirective\"][];\n\tkindMistakesSummary: Record<string, number>;\n}\n\nfunction truncate(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\tlet end = maxChars - 1;\n\tconst code = value.charCodeAt(end - 1);\n\tif (code >= 0xd800 && code <= 0xdbff) end--;\n\treturn `${value.slice(0, end)}…`;\n}\n\nfunction truncateMiddle(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\tconst available = maxChars - 1;\n\tlet headEnd = Math.ceil(available / 2);\n\tlet tailStart = value.length - Math.floor(available / 2);\n\tconst headCode = value.charCodeAt(headEnd - 1);\n\tif (headCode >= 0xd800 && headCode <= 0xdbff) headEnd--;\n\tconst tailCode = value.charCodeAt(tailStart);\n\tif (tailCode >= 0xdc00 && tailCode <= 0xdfff) tailStart++;\n\treturn `${value.slice(0, headEnd)}…${value.slice(tailStart)}`;\n}\n\nfunction safeJson(value: unknown): string {\n\ttry {\n\t\treturn JSON.stringify(value) ?? \"null\";\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\ninterface SignatureHash {\n\tfirst: number;\n\tsecond: number;\n\tthird: number;\n\tfourth: number;\n}\n\nconst VOLATILE_SIGNATURE_PATTERN =\n\t/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|(\\d{4}-\\d{2}-\\d{2}[tT][0-9:.]+(?:z|[+-]\\d{2}:?\\d{2})?)|(\\b[0-9a-f]{16,}\\b)|(\\d{10,})/gi;\nconst MAX_SIGNATURE_DEPTH = 128;\nconst MAX_PREVIEW_DEPTH = 6;\nconst MAX_PREVIEW_ITEMS = 8;\nconst MAX_PREVIEW_STRING_CHARS = 96;\n\nfunction updateHashCode(hash: SignatureHash, code: number): void {\n\thash.first = Math.imul(hash.first ^ code, 0x01000193);\n\thash.second = Math.imul(hash.second ^ code, 0x85ebca6b);\n\thash.third = Math.imul(hash.third ^ code, 0x27d4eb2d);\n\thash.fourth = Math.imul(hash.fourth ^ code, 0x165667b1);\n}\n\nfunction updateHashRange(hash: SignatureHash, value: string, start = 0, end = value.length): void {\n\tfor (let index = start; index < end; index++) updateHashCode(hash, value.charCodeAt(index));\n}\n\nfunction updateNormalizedHashString(hash: SignatureHash, value: string): void {\n\tif (value.length < 10) {\n\t\tupdateExactHashString(hash, value);\n\t\treturn;\n\t}\n\tVOLATILE_SIGNATURE_PATTERN.lastIndex = 0;\n\tlet offset = 0;\n\tlet normalizedLength = value.length;\n\tfor (const match of value.matchAll(VOLATILE_SIGNATURE_PATTERN)) {\n\t\tconst index = match.index;\n\t\tupdateHashRange(hash, value, offset, index);\n\t\tconst replacement = match[1] ? \"<uuid>\" : match[2] ? \"<ts>\" : match[3] ? \"<hex>\" : \"<num>\";\n\t\tupdateHashRange(hash, replacement);\n\t\tnormalizedLength += replacement.length - match[0].length;\n\t\toffset = index + match[0].length;\n\t}\n\tupdateHashRange(hash, value, offset);\n\tupdateHashRange(hash, `:${normalizedLength};`);\n}\n\nfunction updateExactHashString(hash: SignatureHash, value: string): void {\n\tupdateHashRange(hash, value);\n\tupdateHashRange(hash, `:${value.length};`);\n}\n\nfunction updateStructuredHash(\n\thash: SignatureHash,\n\tvalue: unknown,\n\tactive: Set<object>,\n\tdepth: number,\n\tupdateHashString: (hash: SignatureHash, value: string) => void,\n): void {\n\tif (depth > MAX_SIGNATURE_DEPTH) {\n\t\tupdateHashRange(hash, \"depth;\");\n\t\treturn;\n\t}\n\tif (value === null) {\n\t\tupdateHashRange(hash, \"null;\");\n\t\treturn;\n\t}\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\tupdateHashRange(hash, \"string:\");\n\t\t\tupdateHashString(hash, value);\n\t\t\treturn;\n\t\tcase \"number\":\n\t\t\tupdateHashRange(hash, \"number:\");\n\t\t\tupdateHashString(hash, Object.is(value, -0) ? \"-0\" : String(value));\n\t\t\treturn;\n\t\tcase \"boolean\":\n\t\t\tupdateHashRange(hash, value ? \"true;\" : \"false;\");\n\t\t\treturn;\n\t\tcase \"undefined\":\n\t\t\tupdateHashRange(hash, \"undefined;\");\n\t\t\treturn;\n\t\tcase \"bigint\":\n\t\t\tupdateHashRange(hash, `bigint:${value.toString()};`);\n\t\t\treturn;\n\t\tcase \"symbol\":\n\t\t\tupdateHashRange(hash, `symbol:${String(value.description ?? \"\")};`);\n\t\t\treturn;\n\t\tcase \"function\":\n\t\t\tupdateHashRange(hash, `function:${value.name};`);\n\t\t\treturn;\n\t\tcase \"object\":\n\t\t\tbreak;\n\t}\n\n\tif (active.has(value)) {\n\t\tupdateHashRange(hash, \"circular;\");\n\t\treturn;\n\t}\n\tactive.add(value);\n\tif (Array.isArray(value)) {\n\t\tupdateHashRange(hash, `array:${value.length}[`);\n\t\tfor (const item of value) updateStructuredHash(hash, item, active, depth + 1, updateHashString);\n\t\tupdateHashRange(hash, \"];\");\n\t} else {\n\t\tconst keys = Object.keys(value).sort();\n\t\tupdateHashRange(hash, `object:${keys.length}{`);\n\t\tfor (const key of keys) {\n\t\t\tupdateHashString(hash, key);\n\t\t\tupdateStructuredHash(hash, (value as Record<string, unknown>)[key], active, depth + 1, updateHashString);\n\t\t}\n\t\tupdateHashRange(hash, \"};\");\n\t}\n\tactive.delete(value);\n}\n\nfunction createSignatureHash(): SignatureHash {\n\treturn {\n\t\tfirst: 0x811c9dc5,\n\t\tsecond: 0x9e3779b9,\n\t\tthird: 0x85ebca6b,\n\t\tfourth: 0xc2b2ae35,\n\t};\n}\n\nfunction renderSignatureHash(hash: SignatureHash): string {\n\treturn [hash.first, hash.second, hash.third, hash.fourth]\n\t\t.map((part) => (part >>> 0).toString(16).padStart(8, \"0\"))\n\t\t.join(\"\");\n}\n\nfunction structuredHash(value: unknown, normalizeVolatile: boolean): string {\n\tconst hash = createSignatureHash();\n\tupdateStructuredHash(\n\t\thash,\n\t\tvalue,\n\t\tnew Set(),\n\t\t0,\n\t\tnormalizeVolatile ? updateNormalizedHashString : updateExactHashString,\n\t);\n\treturn renderSignatureHash(hash);\n}\n\nfunction boundedJsonPreview(value: unknown, maxChars: number): string {\n\tlet output = \"\";\n\tlet exhausted = false;\n\tconst active = new Set<object>();\n\tconst append = (text: string): void => {\n\t\tif (exhausted) return;\n\t\tconst available = maxChars - output.length;\n\t\tif (text.length <= available) {\n\t\t\toutput += text;\n\t\t\treturn;\n\t\t}\n\t\tif (available > 1) output += `${text.slice(0, available - 1)}…`;\n\t\texhausted = true;\n\t};\n\tconst visit = (item: unknown, depth: number): void => {\n\t\tif (exhausted) return;\n\t\tif (depth > MAX_PREVIEW_DEPTH) {\n\t\t\tappend('\"[depth]\"');\n\t\t\treturn;\n\t\t}\n\t\tif (typeof item === \"string\") {\n\t\t\tappend(safeJson(truncateMiddle(item, MAX_PREVIEW_STRING_CHARS)));\n\t\t\treturn;\n\t\t}\n\t\tif (item === null || typeof item === \"number\" || typeof item === \"boolean\") {\n\t\t\tappend(String(item));\n\t\t\treturn;\n\t\t}\n\t\tif (typeof item !== \"object\") {\n\t\t\tappend(safeJson(`[${typeof item}]`));\n\t\t\treturn;\n\t\t}\n\t\tif (active.has(item)) {\n\t\t\tappend('\"[circular]\"');\n\t\t\treturn;\n\t\t}\n\t\tactive.add(item);\n\t\tif (Array.isArray(item)) {\n\t\t\tappend(\"[\");\n\t\t\tconst count = Math.min(item.length, MAX_PREVIEW_ITEMS);\n\t\t\tfor (let index = 0; index < count && !exhausted; index++) {\n\t\t\t\tif (index > 0) append(\",\");\n\t\t\t\tvisit(item[index], depth + 1);\n\t\t\t}\n\t\t\tif (item.length > count) append(`${count > 0 ? \",\" : \"\"}\"[+${item.length - count} items]\"`);\n\t\t\tappend(\"]\");\n\t\t} else {\n\t\t\tappend(\"{\");\n\t\t\tlet count = 0;\n\t\t\tlet omitted = 0;\n\t\t\tconst keys = Object.keys(item).sort();\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (count >= MAX_PREVIEW_ITEMS) {\n\t\t\t\t\tomitted++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (count > 0) append(\",\");\n\t\t\t\tappend(safeJson(truncateMiddle(key, MAX_PREVIEW_STRING_CHARS)));\n\t\t\t\tappend(\":\");\n\t\t\t\tvisit((item as Record<string, unknown>)[key], depth + 1);\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\tif (omitted > 0) append(`${count > 0 ? \",\" : \"\"}\"[omitted]\":${omitted}`);\n\t\t\tappend(\"}\");\n\t\t}\n\t\tactive.delete(item);\n\t};\n\tvisit(value, 0);\n\treturn truncateMiddle(output || \"null\", maxChars);\n}\n\n/**\n * Fingerprint a tool operation without materializing or retaining its serialized payload.\n * Volatile identifiers normalize before hashing; short numbers and ordinary paths remain significant.\n */\nexport function normalizeToolSignature(pairs: Array<[string, unknown]>): string {\n\treturn structuredHash(pairs, true);\n}\n\nfunction toolOperationKey(tool: string, args: unknown, normalizeVolatile: boolean): string {\n\tconst boundedTool = truncate(tool, MAX_TOOL_NAME_CHARS);\n\tconst hash = createSignatureHash();\n\tconst updateHashString = normalizeVolatile ? updateNormalizedHashString : updateExactHashString;\n\tconst active = new Set<object>();\n\t// Preserve the stable structured-hash wire identity without allocating the two synthetic arrays.\n\tupdateHashRange(hash, \"array:1[array:2[\");\n\tupdateStructuredHash(hash, tool, active, 2, updateHashString);\n\tupdateStructuredHash(hash, args, active, 2, updateHashString);\n\tupdateHashRange(hash, \"];];\");\n\tconst signature = renderSignatureHash(hash);\n\treturn `${boundedTool}:${signature}`;\n}\n\nfunction operationIdentity(tool: string, args: unknown): ToolOperationIdentity {\n\treturn {\n\t\tfailureKey: toolOperationKey(tool, args, true),\n\t\texecutionKey: toolOperationKey(tool, args, false),\n\t\ttool: truncate(tool, MAX_TOOL_NAME_CHARS),\n\t\toperation: boundedJsonPreview(args, MAX_OPERATION_CHARS),\n\t};\n}\n\nfunction getToolFailureKey(tool: string, args: unknown): string {\n\treturn toolOperationKey(tool, args, true);\n}\n\nexport function getToolExecutionKey(tool: string, args: unknown): string {\n\treturn toolOperationKey(tool, args, false);\n}\n\nexport function getToolFailureRecordExecutionKey(record: ToolFailureMemoryRecord): string | undefined {\n\treturn record[TOOL_FAILURE_EXECUTION_KEY];\n}\n\nexport function getUnresolvedToolFailure(\n\ttracker: ToolFailureMemoryTracker,\n\ttool: string,\n\targs: unknown,\n): ToolFailureMemoryRecord | undefined {\n\treturn tracker.get(getToolFailureKey(tool, args));\n}\n\nfunction boundedFailureCode(value: string): string {\n\tconst normalized = value\n\t\t.trim()\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9_.:-]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\");\n\treturn truncate(normalized || \"tool_error\", MAX_FAILURE_CODE_CHARS);\n}\n\nfunction processExitFailureCode(message: string): string | undefined {\n\tconst exitCode = /\\b(?:exit(?:ed)?(?: with)?(?: code)?|exitcode)\\s*[:=]?\\s*(-?\\d+)\\b/i.exec(message)?.[1];\n\treturn exitCode === undefined ? undefined : boundedFailureCode(`exit_${exitCode}`);\n}\n\nexport function classifyToolFailure(message: string, errorClass?: string): string {\n\t// A tool-owned terminal status is authoritative; stdout may contain arbitrary all-caps identifiers.\n\tconst exitFailureCode = processExitFailureCode(message);\n\tif (exitFailureCode) return exitFailureCode;\n\tconst errno = /\\b(E[A-Z][A-Z0-9_]{2,})\\b/.exec(message)?.[1];\n\tif (errno) return boundedFailureCode(errno);\n\treturn boundedFailureCode(errorClass ?? \"tool_error\");\n}\n\nfunction isToolFailurePhase(value: unknown): value is ToolFailurePhase {\n\treturn (\n\t\tvalue === \"validation\" ||\n\t\tvalue === \"policy\" ||\n\t\tvalue === \"preflight\" ||\n\t\tvalue === \"execution\" ||\n\t\tvalue === \"timeout\" ||\n\t\tvalue === \"cancelled\" ||\n\t\tvalue === \"provisioning\"\n\t);\n}\n\nfunction inferToolFailurePhase(state: ToolFailureState, failureCode: string): ToolFailurePhase {\n\tif (failureCode === \"malformed_call\" || failureCode === \"unknown_tool\" || failureCode === \"invalid_arguments\") {\n\t\treturn \"validation\";\n\t}\n\tif (failureCode === \"blocked\" || failureCode === \"permission_denied\") return \"policy\";\n\tif (failureCode === \"preflight_error\") return \"preflight\";\n\tif (failureCode === \"aborted\" || failureCode === \"cancelled\") return \"cancelled\";\n\tif (failureCode === \"timeout\" || failureCode === \"etimedout\") return \"timeout\";\n\tif (failureCode === \"provisioning_failed\" || failureCode === \"command_not_found\") return \"provisioning\";\n\treturn state === \"rejected\" ? \"validation\" : \"execution\";\n}\n\nfunction fallbackFailureGuidance(state: ToolFailureState, hasDiagnostic: boolean, phase: ToolFailurePhase): string {\n\tif (phase === \"preflight\") {\n\t\treturn hasDiagnostic\n\t\t\t? \"Arguments valid; preflight failed before execution. Resolve diagnostic/host condition before retry.\"\n\t\t\t: \"Arguments valid; preflight failed before execution. Inspect host policy/capability before retry.\";\n\t}\n\tif (phase === \"policy\") return \"Resolve authority/policy restriction or choose allowed approach before retry.\";\n\tif (phase === \"cancelled\") return \"Retry only when operation remains required, cancellation condition cleared.\";\n\tif (phase === \"timeout\") return \"Narrow/split work; retry once only when safe.\";\n\tif (phase === \"provisioning\") {\n\t\treturn hasDiagnostic\n\t\t\t? \"Fix provisioning diagnostic; retry only after environment changes.\"\n\t\t\t: \"Inspect tool availability; request bounded provisioning diagnostic before retry.\";\n\t}\n\treturn state === \"rejected\"\n\t\t? \"Re-read current tool schema; change invalid operation before retry.\"\n\t\t: hasDiagnostic\n\t\t\t? \"Read diagnostic; identify cause; repair parameters or corrective state before retry.\"\n\t\t\t: \"No diagnostic output. Inspect tool contract or request bounded diagnostic before retry.\";\n}\n\nexport function toolFailureCorrection(\n\tmessage: string,\n\tstate: ToolFailureState,\n\tphase: ToolFailurePhase = state === \"rejected\" ? \"validation\" : \"execution\",\n): string {\n\tconst policy = getToolExecutionErrorPolicy(message);\n\treturn policy\n\t\t? truncate(policy.guidance, MAX_CORRECTION_CHARS)\n\t\t: fallbackFailureGuidance(state, message.trim().length > 0, phase);\n}\n\nfunction extractFailureDiagnostic(\n\tmessage: string,\n\tallowUnclassifiedFallback: boolean,\n\trequireStrongSignal = false,\n): string | undefined {\n\tconst rawLines = sanitizeBinaryOutput(message).replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n\tconst strongDiagnosticPattern =\n\t\t/^(?:(?:error(?:\\[[^\\]]+\\])?|fatal(?: error)?|panic|fail(?:ed|ure)?|invalid|unknown|unsupported|not found|no such|cannot|can't|missing|denied|refused|usage)(?:\\b|:)|[a-z][a-z0-9_.]*error(?::|$)|thread .+ panicked at\\b|--- fail:|\\[fail(?:ed)?\\]|not ok\\b|[×✗]\\s|.{1,160}:\\s+(?:error(?:\\[[^\\]]+\\])?|fatal(?: error)?)(?:\\b|:))/i;\n\tconst stderrMarkerIndex = rawLines.findLastIndex((line) => /^stderr:\\s*$/i.test(line.trim()));\n\tif (stderrMarkerIndex >= 0) {\n\t\tconst stderrLines = rawLines\n\t\t\t.slice(stderrMarkerIndex + 1)\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(\n\t\t\t\t(line) =>\n\t\t\t\t\tline.length > 0 && !/^command (?:exited with code|timed out after|aborted|killed after)\\b/i.test(line),\n\t\t\t);\n\t\tif (stderrLines.length > 0) {\n\t\t\tconst classified = stderrLines.find((line) => strongDiagnosticPattern.test(line));\n\t\t\treturn truncateMiddle(classified ?? stderrLines.slice(-4).join(\" | \"), MAX_DIAGNOSTIC_CHARS);\n\t\t}\n\t}\n\tconst lines = rawLines\n\t\t.map((line) => line.trim())\n\t\t.filter(\n\t\t\t(line) =>\n\t\t\t\tline.length > 0 &&\n\t\t\t\t!/^command (?:exited with code|timed out after|aborted|killed after)\\b/i.test(line) &&\n\t\t\t\t!/^outcome:\\s*(?:failed|aborted|timeout|output_limit)\\b/i.test(line) &&\n\t\t\t\t!/^exitcode:\\s*-?\\d+\\b/i.test(line) &&\n\t\t\t\t!/^(?:stdout|stderr):(?:\\s*\\(empty\\))?$/i.test(line),\n\t\t);\n\tif (lines.length === 0) return undefined;\n\tconst diagnosticPattern = requireStrongSignal\n\t\t? strongDiagnosticPattern\n\t\t: /(?:^|\\b)(?:error|fatal|fail(?:ed|ure)?|invalid|unknown|unsupported|not found|no such|cannot|can't|missing|denied|refused|usage)(?:\\b|:)/i;\n\tconst classified = requireStrongSignal\n\t\t? lines.find((line) => diagnosticPattern.test(line))\n\t\t: [...lines].reverse().find((line) => diagnosticPattern.test(line));\n\tconst diagnostic = classified ?? (allowUnclassifiedFallback ? lines.at(-1) : undefined);\n\treturn diagnostic ? truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined;\n}\n\nexport interface ToolFailureAssessment {\n\tfailureCode: string;\n\tphase: ToolFailurePhase;\n\tdiagnostic?: string;\n\tguidance: string;\n\tattemptMemory?: \"discard\";\n}\n\nexport function assessToolFailure(\n\tmessage: string,\n\tstate: ToolFailureState,\n\terrorClass?: string,\n): ToolFailureAssessment {\n\tconst policy = getToolExecutionErrorPolicy(message);\n\tconst exitFailureCode = processExitFailureCode(message);\n\tconst retainPolicyDiagnostic = policy?.retainDiagnostic === true;\n\tconst diagnostic =\n\t\tstate === \"failed\" && (!policy || policy.retainDiagnostic)\n\t\t\t? extractFailureDiagnostic(\n\t\t\t\t\tmessage,\n\t\t\t\t\texitFailureCode === undefined && (errorClass !== undefined || retainPolicyDiagnostic),\n\t\t\t\t\texitFailureCode !== undefined && !retainPolicyDiagnostic,\n\t\t\t\t)\n\t\t\t: undefined;\n\tconst failureCode = policy?.failureCode ?? classifyToolFailure(message, errorClass);\n\treturn {\n\t\tfailureCode,\n\t\tphase: policy?.phase ?? inferToolFailurePhase(state, failureCode),\n\t\t...(diagnostic ? { diagnostic } : {}),\n\t\tguidance: policy\n\t\t\t? truncate(policy.guidance, MAX_CORRECTION_CHARS)\n\t\t\t: fallbackFailureGuidance(state, diagnostic !== undefined, inferToolFailurePhase(state, failureCode)),\n\t\t...(policy?.attemptMemory === \"discard\" ? { attemptMemory: \"discard\" as const } : {}),\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readFailureRecord(details: unknown): ToolFailureMemoryRecord | undefined {\n\tif (!isRecord(details) || !isRecord(details.piToolFailureMemory)) return undefined;\n\tconst candidate = details.piToolFailureMemory;\n\tif (\n\t\tcandidate.version !== TOOL_FAILURE_MEMORY_VERSION ||\n\t\ttypeof candidate.failureKey !== \"string\" ||\n\t\ttypeof candidate.tool !== \"string\" ||\n\t\ttypeof candidate.operation !== \"string\" ||\n\t\ttypeof candidate.occurrence !== \"number\" ||\n\t\t!Number.isSafeInteger(candidate.occurrence) ||\n\t\tcandidate.occurrence < 1 ||\n\t\t(candidate.state !== \"failed\" && candidate.state !== \"rejected\") ||\n\t\ttypeof candidate.failureCode !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\tconst diagnostic =\n\t\ttypeof candidate.diagnostic === \"string\" ? truncate(candidate.diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined;\n\tconst retainedCorrection =\n\t\ttypeof candidate.correction === \"string\" ? truncate(candidate.correction, MAX_CORRECTION_CHARS) : undefined;\n\tconst correction =\n\t\tcandidate.state === \"failed\" && retainedCorrection === LEGACY_GENERIC_EXECUTION_CORRECTION\n\t\t\t? fallbackFailureGuidance(\"failed\", diagnostic !== undefined, \"execution\")\n\t\t\t: (retainedCorrection ?? toolFailureCorrection(\"\", candidate.state));\n\tconst phase = isToolFailurePhase(candidate.phase)\n\t\t? candidate.phase\n\t\t: inferToolFailurePhase(candidate.state, candidate.failureCode);\n\tconst candidateExecutionKey: unknown = Reflect.get(candidate, TOOL_FAILURE_EXECUTION_KEY);\n\treturn {\n\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\tfailureKey: truncate(candidate.failureKey, MAX_TOOL_NAME_CHARS + 1 + TOOL_SIGNATURE_HEX_CHARS),\n\t\t...(typeof candidateExecutionKey === \"string\"\n\t\t\t? {\n\t\t\t\t\t[TOOL_FAILURE_EXECUTION_KEY]: truncate(\n\t\t\t\t\t\tcandidateExecutionKey,\n\t\t\t\t\t\tMAX_TOOL_NAME_CHARS + 1 + TOOL_SIGNATURE_HEX_CHARS,\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\ttool: truncate(candidate.tool, MAX_TOOL_NAME_CHARS),\n\t\toperation: truncateMiddle(candidate.operation, MAX_OPERATION_CHARS),\n\t\toccurrence: candidate.occurrence,\n\t\tstate: candidate.state,\n\t\tphase,\n\t\tfailureCode: boundedFailureCode(candidate.failureCode),\n\t\tdiagnostic,\n\t\tcorrection,\n\t};\n}\n\nfunction readFailureDirective(details: unknown): ToolFailureDirectiveDetails[\"piToolFailureDirective\"] | undefined {\n\tif (!isRecord(details) || !isRecord(details.piToolFailureDirective)) return undefined;\n\tconst candidate = details.piToolFailureDirective;\n\tif (\n\t\tcandidate.version !== TOOL_FAILURE_DIRECTIVE_VERSION ||\n\t\ttypeof candidate.failureCode !== \"string\" ||\n\t\ttypeof candidate.nextAction !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tversion: TOOL_FAILURE_DIRECTIVE_VERSION,\n\t\tstate: candidate.state === \"rejected\" ? \"rejected\" : \"failed\",\n\t\tphase: isToolFailurePhase(candidate.phase)\n\t\t\t? candidate.phase\n\t\t\t: inferToolFailurePhase(\"failed\", candidate.failureCode),\n\t\tfailureCode: boundedFailureCode(candidate.failureCode),\n\t\tdiagnostic:\n\t\t\ttypeof candidate.diagnostic === \"string\" ? truncate(candidate.diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\tnextAction: truncate(candidate.nextAction, MAX_CORRECTION_CHARS),\n\t};\n}\n\nexport interface ToolFailureTelemetry {\n\tstate: ToolFailureState;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tdiagnostic?: string;\n\tnextAction: string;\n}\n\n/** Read only bounded failure identity and guidance; operation arguments never cross this telemetry boundary. */\nexport function readToolFailureTelemetry(details: unknown): ToolFailureTelemetry | undefined {\n\tconst record = readFailureRecord(details);\n\tif (record) {\n\t\treturn {\n\t\t\tstate: record.state,\n\t\t\tphase: record.phase,\n\t\t\tfailureCode: record.failureCode,\n\t\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t\tnextAction: record.correction,\n\t\t};\n\t}\n\tconst directive = readFailureDirective(details);\n\tif (!directive) return undefined;\n\treturn {\n\t\tstate: directive.state,\n\t\tphase: directive.phase,\n\t\tfailureCode: directive.failureCode,\n\t\t...(directive.diagnostic ? { diagnostic: directive.diagnostic } : {}),\n\t\tnextAction: directive.nextAction,\n\t};\n}\n\nfunction firstText(message: ToolResultMessage): string {\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tif (Array.isArray(content)) {\n\t\tfor (let index = 0; index < content.length; index++) {\n\t\t\tconst block = content[index];\n\t\t\tif (block.type === \"text\") return block.text;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction fastTextSignature(text: string): string {\n\tif (text.length <= 128) return text;\n\treturn `${text.length}:${text.slice(0, 48)}:${text.slice(-48)}`;\n}\n\nfunction analyzeToolFailureContext(messages: AgentMessage[]): FailureContextAnalysis {\n\tconst callById = new Map<string, AgentToolCall>();\n\tconst omittedCallIds = new Set<string>();\n\tconst orphanFailedResults = new Set<ToolResultMessage>();\n\tconst active = new Map<string, ActiveFailure>();\n\tconst activeDirectives = new Map<string, ToolFailureDirectiveDetails[\"piToolFailureDirective\"]>();\n\tlet sequence = 0;\n\tconst kindMistakesMap = new Map<string, number>();\n\n\tconst latestSuccessfulByOpKey = new Map<string, string>();\n\tconst latestSuccessfulByPayloadKey = new Map<string, string>();\n\n\tfor (let index = 0; index < messages.length; index++) {\n\t\tconst message = messages[index];\n\t\tif (message.role === \"assistant\") {\n\t\t\tactiveDirectives.clear();\n\t\t\tconst content = message.content;\n\t\t\tfor (let blockIdx = 0; blockIdx < content.length; blockIdx++) {\n\t\t\t\tconst block = content[blockIdx];\n\t\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\t\tcallById.set(block.id, block);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"toolResult\") continue;\n\n\t\tconst call = callById.get(message.toolCallId);\n\t\tcallById.delete(message.toolCallId);\n\t\tconst textPayload = firstText(message);\n\t\tconst isFailure = message.isError === true || textPayload.startsWith(\"[harness] \");\n\t\tif (isFailure) {\n\t\t\tconst toolName = call?.name ?? message.toolName;\n\t\t\tconst kindCount = (kindMistakesMap.get(toolName) ?? 0) + 1;\n\t\t\tkindMistakesMap.set(toolName, kindCount);\n\n\t\t\tconst directive = readFailureDirective(message.details);\n\t\t\tif (directive) {\n\t\t\t\tactiveDirectives.delete(directive.failureCode);\n\t\t\t\tactiveDirectives.set(directive.failureCode, directive);\n\t\t\t\tif (call) omittedCallIds.add(call.id);\n\t\t\t\telse orphanFailedResults.add(message);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst retained = readFailureRecord(message.details);\n\t\t\tconst state = retained?.state ?? \"failed\";\n\t\t\tconst assessment = retained ? undefined : assessToolFailure(textPayload, state);\n\t\t\tlet failureKey: string;\n\t\t\tlet executionKey: string | undefined;\n\t\t\tlet tool: string;\n\t\t\tlet operation: string;\n\t\t\tif (retained) {\n\t\t\t\tfailureKey = retained.failureKey;\n\t\t\t\texecutionKey = call\n\t\t\t\t\t? getToolExecutionKey(call.name, call.arguments)\n\t\t\t\t\t: getToolFailureRecordExecutionKey(retained);\n\t\t\t\ttool = retained.tool;\n\t\t\t\toperation = retained.operation;\n\t\t\t} else {\n\t\t\t\tconst identity = operationIdentity(\n\t\t\t\t\tcall?.name ?? message.toolName,\n\t\t\t\t\tcall?.arguments ?? { toolCallId: message.toolCallId },\n\t\t\t\t);\n\t\t\t\tfailureKey = identity.failureKey;\n\t\t\t\texecutionKey = identity.executionKey;\n\t\t\t\ttool = identity.tool;\n\t\t\t\toperation = identity.operation;\n\t\t\t}\n\t\t\tconst previous = active.get(failureKey)?.record;\n\t\t\tconst occurrence = Math.max(retained?.occurrence ?? 0, (previous?.occurrence ?? 0) + 1);\n\t\t\tconst record: ToolFailureMemoryRecord = {\n\t\t\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\t\t\tfailureKey,\n\t\t\t\t...(executionKey ? { [TOOL_FAILURE_EXECUTION_KEY]: executionKey } : {}),\n\t\t\t\ttool,\n\t\t\t\toperation,\n\t\t\t\toccurrence,\n\t\t\t\tkindMistakes: kindCount,\n\t\t\t\tmistakeKind: toolName,\n\t\t\t\tstate,\n\t\t\t\tphase: retained?.phase ?? assessment?.phase ?? inferToolFailurePhase(state, \"tool_error\"),\n\t\t\t\tfailureCode: retained?.failureCode ?? assessment?.failureCode ?? \"tool_error\",\n\t\t\t\tdiagnostic: retained?.diagnostic ?? assessment?.diagnostic,\n\t\t\t\tcorrection:\n\t\t\t\t\tretained?.correction ??\n\t\t\t\t\tassessment?.guidance ??\n\t\t\t\t\tfallbackFailureGuidance(state, false, inferToolFailurePhase(state, \"tool_error\")),\n\t\t\t};\n\t\t\tactive.delete(failureKey);\n\t\t\tactive.set(failureKey, { record, sequence: sequence++ });\n\t\t\twhile (active.size > MAX_TRACKED_FAILURES) {\n\t\t\t\tconst oldest = active.keys().next().value;\n\t\t\t\tif (oldest === undefined) break;\n\t\t\t\tactive.delete(oldest);\n\t\t\t}\n\t\t\tif (call) omittedCallIds.add(call.id);\n\t\t\telse orphanFailedResults.add(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (call) {\n\t\t\tconst opKey = getToolFailureKey(call.name, call.arguments);\n\t\t\tactive.delete(opKey);\n\t\t\tconst previousOperationCallId = latestSuccessfulByOpKey.get(opKey);\n\t\t\tif (previousOperationCallId) omittedCallIds.add(previousOperationCallId);\n\t\t\tlatestSuccessfulByOpKey.set(opKey, call.id);\n\n\t\t\tconst textPayload = firstText(message);\n\t\t\tif (textPayload.length >= 64) {\n\t\t\t\tconst payloadKey = `payload:${fastTextSignature(textPayload)}`;\n\t\t\t\tconst previousPayloadCallId = latestSuccessfulByPayloadKey.get(payloadKey);\n\t\t\t\tif (previousPayloadCallId) omittedCallIds.add(previousPayloadCallId);\n\t\t\t\tlatestSuccessfulByPayloadKey.set(payloadKey, call.id);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst kindMistakesSummary = Object.fromEntries(kindMistakesMap);\n\n\tif (omittedCallIds.size === 0 && orphanFailedResults.size === 0) {\n\t\treturn { messages, activeRecords: [], activeDirectives: [], kindMistakesSummary };\n\t}\n\n\tconst filteredMessages: AgentMessage[] = [];\n\tfor (let index = 0; index < messages.length; index++) {\n\t\tconst message = messages[index];\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (omittedCallIds.has(message.toolCallId) || orphanFailedResults.has(message)) continue;\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"assistant\") {\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tconst content = message.content;\n\t\tif (content.length === 1) {\n\t\t\tconst block = content[0];\n\t\t\tif (block.type === \"toolCall\" && omittedCallIds.has(block.id)) continue;\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tlet hasOmitted = false;\n\t\tfor (let blockIdx = 0; blockIdx < content.length; blockIdx++) {\n\t\t\tconst block = content[blockIdx];\n\t\t\tif (block.type === \"toolCall\" && omittedCallIds.has(block.id)) {\n\t\t\t\thasOmitted = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!hasOmitted) {\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tconst retainedContent = content.filter((block) => block.type !== \"toolCall\" || !omittedCallIds.has(block.id));\n\t\tif (retainedContent.length > 0) {\n\t\t\tfilteredMessages.push({ ...message, content: retainedContent } satisfies AssistantMessage);\n\t\t}\n\t}\n\tconst activeRecords = [...active.values()]\n\t\t.sort((left, right) => left.sequence - right.sequence)\n\t\t.map(({ record }) => record);\n\treturn {\n\t\tmessages: filteredMessages,\n\t\tactiveRecords,\n\t\tactiveDirectives: [...activeDirectives.values()],\n\t\tkindMistakesSummary,\n\t};\n}\n\nexport function createToolFailureMemoryTracker(messages: AgentMessage[]): ToolFailureMemoryTracker {\n\treturn new Map(analyzeToolFailureContext(messages).activeRecords.map((record) => [record.failureKey, record]));\n}\n\nexport function rememberToolFailure(\n\ttracker: ToolFailureMemoryTracker,\n\ttool: string,\n\targs: unknown,\n\tstate: ToolFailureState,\n\tfailureCode: string,\n\tcorrection: string,\n\tdiagnostic?: string,\n\tphase: ToolFailurePhase = inferToolFailurePhase(state, failureCode),\n): ToolFailureMemoryRecord {\n\tlet kindCount = 1;\n\tfor (const previous of tracker.values()) {\n\t\tif (previous.tool === tool) {\n\t\t\tkindCount = Math.max(kindCount, (previous.kindMistakes ?? previous.occurrence) + 1);\n\t\t}\n\t}\n\tif (getToolExecutionAttemptMemory(failureCode) === \"discard\") {\n\t\tfor (const [failureKey, previous] of tracker) {\n\t\t\tif (previous.tool === tool && previous.failureCode === failureCode) tracker.delete(failureKey);\n\t\t}\n\t\treturn {\n\t\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\t\tfailureKey: `directive:${boundedFailureCode(failureCode)}`,\n\t\t\t[TOOL_FAILURE_EXECUTION_KEY]: getToolExecutionKey(tool, args),\n\t\t\ttool: truncate(tool, MAX_TOOL_NAME_CHARS),\n\t\t\toperation: \"[discarded]\",\n\t\t\toccurrence: 1,\n\t\t\tkindMistakes: kindCount,\n\t\t\tmistakeKind: tool,\n\t\t\tstate,\n\t\t\tphase,\n\t\t\tfailureCode: boundedFailureCode(failureCode),\n\t\t\tdiagnostic: diagnostic ? truncate(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\t\tcorrection: truncate(correction, MAX_CORRECTION_CHARS),\n\t\t\tattemptMemory: \"discard\",\n\t\t};\n\t}\n\tconst identity = operationIdentity(tool, args);\n\tconst previous = tracker.get(identity.failureKey);\n\tconst record: ToolFailureMemoryRecord = {\n\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\tfailureKey: identity.failureKey,\n\t\t[TOOL_FAILURE_EXECUTION_KEY]: identity.executionKey,\n\t\ttool: identity.tool,\n\t\toperation: identity.operation,\n\t\toccurrence: (previous?.occurrence ?? 0) + 1,\n\t\tkindMistakes: kindCount,\n\t\tmistakeKind: tool,\n\t\tstate,\n\t\tphase,\n\t\tfailureCode: boundedFailureCode(failureCode),\n\t\tdiagnostic: diagnostic ? truncate(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\tcorrection: truncate(correction, MAX_CORRECTION_CHARS),\n\t};\n\ttracker.delete(identity.failureKey);\n\ttracker.set(identity.failureKey, record);\n\twhile (tracker.size > MAX_TRACKED_FAILURES) {\n\t\tconst oldest = tracker.keys().next().value;\n\t\tif (oldest === undefined) break;\n\t\ttracker.delete(oldest);\n\t}\n\treturn record;\n}\n\nexport function clearToolFailure(tracker: ToolFailureMemoryTracker, tool: string, args: unknown): void {\n\tconst failureKey = getToolFailureKey(tool, args);\n\tconst record = tracker.get(failureKey);\n\tconst executionKey = record ? getToolFailureRecordExecutionKey(record) : undefined;\n\tif (!executionKey || executionKey === getToolExecutionKey(tool, args)) tracker.delete(failureKey);\n}\n\nfunction failureGuidance(record: ToolFailureMemoryRecord): { repair: string } | { next_action: string } {\n\treturn record.state === \"rejected\" && REPAIRABLE_REJECTION_CODES.has(record.failureCode)\n\t\t? { repair: record.correction }\n\t\t: { next_action: record.correction };\n}\n\nfunction formatRecordJson(record: ToolFailureMemoryRecord, includeOperation = false): string {\n\tconst guidance = failureGuidance(record);\n\treturn JSON.stringify({\n\t\t...mandatoryToolFailureRecoveryMetadata(),\n\t\tfailure_key: record.failureKey,\n\t\tocc: record.occurrence,\n\t\tkind_mistakes: record.kindMistakes ?? record.occurrence,\n\t\tmistake_kind: record.mistakeKind ?? record.tool,\n\t\tstate: record.state,\n\t\tphase: record.phase,\n\t\ttool: record.tool,\n\t\t...(includeOperation ? { operation: record.operation } : {}),\n\t\tfailure_code: record.failureCode,\n\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t...guidance,\n\t\t...(record.attemptMemory === \"discard\" ? { attempt_memory: \"discarded\" } : {}),\n\t});\n}\n\nexport function createToolFailureResult(\n\trecord: ToolFailureMemoryRecord,\n\tterminate?: boolean,\n): AgentToolResult<ToolFailureResultDetails> {\n\tconst discardAttempt = record.attemptMemory === \"discard\";\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: `[harness] ${formatRecordJson(record, false)}`,\n\t\t\t},\n\t\t],\n\t\tdetails: discardAttempt\n\t\t\t? {\n\t\t\t\t\tpiToolFailureDirective: {\n\t\t\t\t\t\tversion: TOOL_FAILURE_DIRECTIVE_VERSION,\n\t\t\t\t\t\tstate: record.state,\n\t\t\t\t\t\tphase: record.phase,\n\t\t\t\t\t\tfailureCode: record.failureCode,\n\t\t\t\t\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t\t\t\t\tnextAction: record.correction,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: { piToolFailureMemory: record },\n\t\t...(terminate === undefined ? {} : { terminate }),\n\t};\n}\n\nexport function createRepeatedToolFailureResult(\n\trecord: ToolFailureMemoryRecord,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = {\n\t\t...retainBlockedToolFailure(record),\n\t\tcorrection: BLOCKED_REPLAY_CAVEMAN_CORRECTION,\n\t};\n\tconst diagnostic = truncateMiddle(\n\t\t`The unchanged operation was not executed. Unchanged replay blocked after ${record.failureCode}`,\n\t\tMAX_DIAGNOSTIC_CHARS,\n\t);\n\tconst blockedResult = createToolFailureResult({\n\t\t...retainedRecord,\n\t\tstate: \"rejected\",\n\t\tfailureCode: \"repeated_failed_operation\",\n\t\tdiagnostic,\n\t\tcorrection: retainedRecord.correction,\n\t});\n\treturn {\n\t\t...blockedResult,\n\t\t// The visible result describes this rejected replay, while retained memory keeps the\n\t\t// authoritative cause so later blocks do not recursively wrap synthetic failures.\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nexport function createToolFailureRecoveryExhaustedResult(\n\trecord: ToolFailureMemoryRecord,\n\tdiagnostic: string,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = retainBlockedToolFailure(record);\n\tconst exhaustedResult = createToolFailureResult(\n\t\t{\n\t\t\t...retainedRecord,\n\t\t\tstate: \"rejected\",\n\t\t\tfailureCode: \"recovery_exhausted\",\n\t\t\tdiagnostic: truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS),\n\t\t\tcorrection:\n\t\t\t\t\"Stop retrying tools in this run. Report the unresolved failure and the user or environment action required to continue.\",\n\t\t},\n\t\ttrue,\n\t);\n\treturn {\n\t\t...exhaustedResult,\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nexport function createToolFailureOperationExhaustedResult(\n\trecord: ToolFailureMemoryRecord,\n\tdiagnostic: string,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = {\n\t\t...retainBlockedToolFailure(record),\n\t\tcorrection: CLOSED_OPERATION_CAVEMAN_CORRECTION,\n\t};\n\tconst exhaustedResult = createToolFailureResult(\n\t\t{\n\t\t\t...retainedRecord,\n\t\t\tstate: \"rejected\",\n\t\t\tfailureCode: \"operation_recovery_exhausted\",\n\t\t\tdiagnostic: truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS),\n\t\t},\n\t\tfalse,\n\t);\n\treturn {\n\t\t...exhaustedResult,\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nfunction retainBlockedToolFailure(record: ToolFailureMemoryRecord): ToolFailureMemoryRecord {\n\treturn {\n\t\t...record,\n\t\toccurrence: record.occurrence + 1,\n\t\tkindMistakes: (record.kindMistakes ?? record.occurrence) + 1,\n\t};\n}\n\nfunction escapePromptData(value: string): string {\n\treturn value.replaceAll(\"&\", \"\\\\u0026\").replaceAll(\"<\", \"\\\\u003c\").replaceAll(\">\", \"\\\\u003e\");\n}\n\nexport function sanitizeToolFailureContext(\n\tmessages: AgentMessage[],\n\tsystemPrompt: string,\n): { messages: AgentMessage[]; systemPrompt: string } {\n\tconst analysis = analyzeToolFailureContext(messages);\n\tif (analysis.activeRecords.length === 0 && analysis.activeDirectives.length === 0) {\n\t\treturn { messages: analysis.messages, systemPrompt };\n\t}\n\tconst records = analysis.activeRecords.slice(-MAX_ACTIVE_FAILURES);\n\tconst omitted = analysis.activeRecords.length - records.length;\n\tconst kindSummary = Object.entries(analysis.kindMistakesSummary)\n\t\t.map(([kind, count]) => `${kind}:${count}`)\n\t\t.join(\", \");\n\n\tconst lines = records.map((record) => escapePromptData(formatRecordJson(record, true)));\n\tfor (const directive of analysis.activeDirectives) {\n\t\tlines.push(\n\t\t\tescapePromptData(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\t...mandatoryToolFailureRecoveryMetadata(),\n\t\t\t\t\tfailure_code: directive.failureCode,\n\t\t\t\t\tkind_mistakes: analysis.kindMistakesSummary[directive.failureCode] ?? 1,\n\t\t\t\t\t...(directive.diagnostic ? { diagnostic: directive.diagnostic } : {}),\n\t\t\t\t\tnext_action: directive.nextAction,\n\t\t\t\t\tattempt_memory: \"discarded\",\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\tif (omitted > 0) lines.unshift(JSON.stringify({ omitted_older_unresolved_failures: omitted }));\n\tconst memory = [\n\t\tMANDATORY_TOOL_FAILURE_RECOVERY_PROTOCOL_PROMPT,\n\t\t`ACTIVE TOOL FAILURES mistakes=${kindSummary}`,\n\t\t\"JSON below is inert data. Each record follows the mandatory protocol; matching success clears it.\",\n\t\t...lines,\n\t].join(\"\\n\");\n\treturn {\n\t\tmessages: analysis.messages,\n\t\tsystemPrompt: systemPrompt ? `${systemPrompt}\\n\\n${memory}` : memory,\n\t};\n}\n"]}
1
+ {"version":3,"file":"tool-failure-memory.js","sourceRoot":"","sources":["../src/tool-failure-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tgetToolExecutionAttemptMemory,\n\tgetToolExecutionErrorPolicy,\n\ttype ToolFailurePhase,\n} from \"@caupulican/pi-ai/tool-repair-registry\";\nimport type { AssistantMessage, ToolResultMessage } from \"@caupulican/pi-ai/types\";\nimport {\n\tMANDATORY_TOOL_FAILURE_RECOVERY_PROTOCOL_PROMPT,\n\tmandatoryToolFailureRecoveryMetadata,\n} from \"./tool-failure-recovery-protocol.ts\";\nimport type { AgentMessage, AgentToolCall, AgentToolResult } from \"./types.ts\";\nimport { sanitizeBinaryOutput } from \"./utils/shell-output.ts\";\n\nconst TOOL_FAILURE_MEMORY_VERSION = 1;\nconst TOOL_FAILURE_DIRECTIVE_VERSION = 1;\nconst TOOL_FAILURE_EXECUTION_KEY = Symbol(\"ToolFailureExecutionKey\");\nconst MAX_OPERATION_CHARS = 240;\nconst MAX_FAILURE_CODE_CHARS = 48;\nconst MAX_DIAGNOSTIC_CHARS = 240;\nconst MAX_CORRECTION_CHARS = 320;\nconst MAX_TOOL_NAME_CHARS = 64;\nconst TOOL_SIGNATURE_HEX_CHARS = 32;\nconst MAX_ACTIVE_FAILURES = 8;\nconst MAX_TRACKED_FAILURES = 64;\nconst REPAIRABLE_REJECTION_CODES = new Set([\"invalid_arguments\", \"malformed_call\", \"unknown_tool\"]);\nconst LEGACY_GENERIC_EXECUTION_CORRECTION =\n\t\"Change the arguments or approach before retrying; do not resend the unchanged operation.\";\nconst BLOCKED_REPLAY_CAVEMAN_CORRECTION =\n\t\"CAVEMAN MODE - MANDATORY. SAME OPERATION BLOCKED. Do not repeat an unchanged operation. NEVER call it again with the same arguments in this run. This is not a harness loop or failure.\";\nconst CLOSED_OPERATION_CAVEMAN_CORRECTION =\n\t\"CAVEMAN MODE - MANDATORY: OPERATION CLOSED; not executed. Do not repeat an unchanged operation. NEVER call it again with the same arguments in this run. Use a different operation/tool or continue independent work. The recovery guard prevented a loop; this is not harness failure.\";\n\nexport type ToolFailureState = \"failed\" | \"rejected\";\n\nexport interface ToolFailureMemoryRecord {\n\tversion: typeof TOOL_FAILURE_MEMORY_VERSION;\n\tfailureKey: string;\n\t/** Exact identity is process-internal and omitted from serialized failure memory. */\n\treadonly [TOOL_FAILURE_EXECUTION_KEY]?: string;\n\ttool: string;\n\toperation: string;\n\toccurrence: number;\n\tkindMistakes?: number;\n\tmistakeKind?: string;\n\tstate: ToolFailureState;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tdiagnostic?: string;\n\tcorrection: string;\n\tattemptMemory?: \"discard\";\n}\n\nexport interface ToolFailureMemoryDetails {\n\tpiToolFailureMemory: ToolFailureMemoryRecord;\n}\n\nexport interface ToolFailureDirectiveDetails {\n\tpiToolFailureDirective: {\n\t\tversion: typeof TOOL_FAILURE_DIRECTIVE_VERSION;\n\t\tstate: ToolFailureState;\n\t\tphase: ToolFailurePhase;\n\t\tfailureCode: string;\n\t\tdiagnostic?: string;\n\t\tnextAction: string;\n\t};\n}\n\nexport type ToolFailureResultDetails = ToolFailureMemoryDetails | ToolFailureDirectiveDetails;\n\nexport type ToolFailureMemoryTracker = Map<string, ToolFailureMemoryRecord>;\n\ninterface ToolOperationIdentity {\n\tfailureKey: string;\n\texecutionKey: string;\n\ttool: string;\n\toperation: string;\n}\n\ninterface ActiveFailure {\n\trecord: ToolFailureMemoryRecord;\n\tsequence: number;\n}\n\ninterface FailureContextAnalysis {\n\tmessages: AgentMessage[];\n\tactiveRecords: ToolFailureMemoryRecord[];\n\tactiveDirectives: ToolFailureDirectiveDetails[\"piToolFailureDirective\"][];\n\tkindMistakesSummary: Record<string, number>;\n}\n\nfunction truncate(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\tlet end = maxChars - 1;\n\tconst code = value.charCodeAt(end - 1);\n\tif (code >= 0xd800 && code <= 0xdbff) end--;\n\treturn `${value.slice(0, end)}…`;\n}\n\nfunction truncateMiddle(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\tconst available = maxChars - 1;\n\tlet headEnd = Math.ceil(available / 2);\n\tlet tailStart = value.length - Math.floor(available / 2);\n\tconst headCode = value.charCodeAt(headEnd - 1);\n\tif (headCode >= 0xd800 && headCode <= 0xdbff) headEnd--;\n\tconst tailCode = value.charCodeAt(tailStart);\n\tif (tailCode >= 0xdc00 && tailCode <= 0xdfff) tailStart++;\n\treturn `${value.slice(0, headEnd)}…${value.slice(tailStart)}`;\n}\n\nfunction safeJson(value: unknown): string {\n\ttry {\n\t\treturn JSON.stringify(value) ?? \"null\";\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\ninterface SignatureHash {\n\tfirst: number;\n\tsecond: number;\n\tthird: number;\n\tfourth: number;\n}\n\nconst VOLATILE_SIGNATURE_PATTERN =\n\t/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|(\\d{4}-\\d{2}-\\d{2}[tT][0-9:.]+(?:z|[+-]\\d{2}:?\\d{2})?)|(\\b[0-9a-f]{16,}\\b)|(\\d{10,})/gi;\nconst MAX_SIGNATURE_DEPTH = 128;\nconst MAX_PREVIEW_DEPTH = 6;\nconst MAX_PREVIEW_ITEMS = 8;\nconst MAX_PREVIEW_STRING_CHARS = 96;\n\nfunction updateHashCode(hash: SignatureHash, code: number): void {\n\thash.first = Math.imul(hash.first ^ code, 0x01000193);\n\thash.second = Math.imul(hash.second ^ code, 0x85ebca6b);\n\thash.third = Math.imul(hash.third ^ code, 0x27d4eb2d);\n\thash.fourth = Math.imul(hash.fourth ^ code, 0x165667b1);\n}\n\nfunction updateHashRange(hash: SignatureHash, value: string, start = 0, end = value.length): void {\n\tfor (let index = start; index < end; index++) updateHashCode(hash, value.charCodeAt(index));\n}\n\nfunction updateNormalizedHashString(hash: SignatureHash, value: string): void {\n\tif (value.length < 10) {\n\t\tupdateExactHashString(hash, value);\n\t\treturn;\n\t}\n\tVOLATILE_SIGNATURE_PATTERN.lastIndex = 0;\n\tlet offset = 0;\n\tlet normalizedLength = value.length;\n\tfor (const match of value.matchAll(VOLATILE_SIGNATURE_PATTERN)) {\n\t\tconst index = match.index;\n\t\tupdateHashRange(hash, value, offset, index);\n\t\tconst replacement = match[1] ? \"<uuid>\" : match[2] ? \"<ts>\" : match[3] ? \"<hex>\" : \"<num>\";\n\t\tupdateHashRange(hash, replacement);\n\t\tnormalizedLength += replacement.length - match[0].length;\n\t\toffset = index + match[0].length;\n\t}\n\tupdateHashRange(hash, value, offset);\n\tupdateHashRange(hash, `:${normalizedLength};`);\n}\n\nfunction updateExactHashString(hash: SignatureHash, value: string): void {\n\tupdateHashRange(hash, value);\n\tupdateHashRange(hash, `:${value.length};`);\n}\n\nfunction updateStructuredHash(\n\thash: SignatureHash,\n\tvalue: unknown,\n\tactive: Set<object>,\n\tdepth: number,\n\tupdateHashString: (hash: SignatureHash, value: string) => void,\n): void {\n\tif (depth > MAX_SIGNATURE_DEPTH) {\n\t\tupdateHashRange(hash, \"depth;\");\n\t\treturn;\n\t}\n\tif (value === null) {\n\t\tupdateHashRange(hash, \"null;\");\n\t\treturn;\n\t}\n\tswitch (typeof value) {\n\t\tcase \"string\":\n\t\t\tupdateHashRange(hash, \"string:\");\n\t\t\tupdateHashString(hash, value);\n\t\t\treturn;\n\t\tcase \"number\":\n\t\t\tupdateHashRange(hash, \"number:\");\n\t\t\tupdateHashString(hash, Object.is(value, -0) ? \"-0\" : String(value));\n\t\t\treturn;\n\t\tcase \"boolean\":\n\t\t\tupdateHashRange(hash, value ? \"true;\" : \"false;\");\n\t\t\treturn;\n\t\tcase \"undefined\":\n\t\t\tupdateHashRange(hash, \"undefined;\");\n\t\t\treturn;\n\t\tcase \"bigint\":\n\t\t\tupdateHashRange(hash, `bigint:${value.toString()};`);\n\t\t\treturn;\n\t\tcase \"symbol\":\n\t\t\tupdateHashRange(hash, `symbol:${String(value.description ?? \"\")};`);\n\t\t\treturn;\n\t\tcase \"function\":\n\t\t\tupdateHashRange(hash, `function:${value.name};`);\n\t\t\treturn;\n\t\tcase \"object\":\n\t\t\tbreak;\n\t}\n\n\tif (active.has(value)) {\n\t\tupdateHashRange(hash, \"circular;\");\n\t\treturn;\n\t}\n\tactive.add(value);\n\tif (Array.isArray(value)) {\n\t\tupdateHashRange(hash, `array:${value.length}[`);\n\t\tfor (const item of value) updateStructuredHash(hash, item, active, depth + 1, updateHashString);\n\t\tupdateHashRange(hash, \"];\");\n\t} else {\n\t\tconst keys = Object.keys(value).sort();\n\t\tupdateHashRange(hash, `object:${keys.length}{`);\n\t\tfor (const key of keys) {\n\t\t\tupdateHashString(hash, key);\n\t\t\tupdateStructuredHash(hash, (value as Record<string, unknown>)[key], active, depth + 1, updateHashString);\n\t\t}\n\t\tupdateHashRange(hash, \"};\");\n\t}\n\tactive.delete(value);\n}\n\nfunction createSignatureHash(): SignatureHash {\n\treturn {\n\t\tfirst: 0x811c9dc5,\n\t\tsecond: 0x9e3779b9,\n\t\tthird: 0x85ebca6b,\n\t\tfourth: 0xc2b2ae35,\n\t};\n}\n\nfunction renderSignatureHash(hash: SignatureHash): string {\n\treturn [hash.first, hash.second, hash.third, hash.fourth]\n\t\t.map((part) => (part >>> 0).toString(16).padStart(8, \"0\"))\n\t\t.join(\"\");\n}\n\nfunction structuredHash(value: unknown, normalizeVolatile: boolean): string {\n\tconst hash = createSignatureHash();\n\tupdateStructuredHash(\n\t\thash,\n\t\tvalue,\n\t\tnew Set(),\n\t\t0,\n\t\tnormalizeVolatile ? updateNormalizedHashString : updateExactHashString,\n\t);\n\treturn renderSignatureHash(hash);\n}\n\nfunction boundedJsonPreview(value: unknown, maxChars: number): string {\n\tlet output = \"\";\n\tlet exhausted = false;\n\tconst active = new Set<object>();\n\tconst append = (text: string): void => {\n\t\tif (exhausted) return;\n\t\tconst available = maxChars - output.length;\n\t\tif (text.length <= available) {\n\t\t\toutput += text;\n\t\t\treturn;\n\t\t}\n\t\tif (available > 1) output += `${text.slice(0, available - 1)}…`;\n\t\texhausted = true;\n\t};\n\tconst visit = (item: unknown, depth: number): void => {\n\t\tif (exhausted) return;\n\t\tif (depth > MAX_PREVIEW_DEPTH) {\n\t\t\tappend('\"[depth]\"');\n\t\t\treturn;\n\t\t}\n\t\tif (typeof item === \"string\") {\n\t\t\tappend(safeJson(truncateMiddle(item, MAX_PREVIEW_STRING_CHARS)));\n\t\t\treturn;\n\t\t}\n\t\tif (item === null || typeof item === \"number\" || typeof item === \"boolean\") {\n\t\t\tappend(String(item));\n\t\t\treturn;\n\t\t}\n\t\tif (typeof item !== \"object\") {\n\t\t\tappend(safeJson(`[${typeof item}]`));\n\t\t\treturn;\n\t\t}\n\t\tif (active.has(item)) {\n\t\t\tappend('\"[circular]\"');\n\t\t\treturn;\n\t\t}\n\t\tactive.add(item);\n\t\tif (Array.isArray(item)) {\n\t\t\tappend(\"[\");\n\t\t\tconst count = Math.min(item.length, MAX_PREVIEW_ITEMS);\n\t\t\tfor (let index = 0; index < count && !exhausted; index++) {\n\t\t\t\tif (index > 0) append(\",\");\n\t\t\t\tvisit(item[index], depth + 1);\n\t\t\t}\n\t\t\tif (item.length > count) append(`${count > 0 ? \",\" : \"\"}\"[+${item.length - count} items]\"`);\n\t\t\tappend(\"]\");\n\t\t} else {\n\t\t\tappend(\"{\");\n\t\t\tlet count = 0;\n\t\t\tlet omitted = 0;\n\t\t\tconst keys = Object.keys(item).sort();\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (count >= MAX_PREVIEW_ITEMS) {\n\t\t\t\t\tomitted++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (count > 0) append(\",\");\n\t\t\t\tappend(safeJson(truncateMiddle(key, MAX_PREVIEW_STRING_CHARS)));\n\t\t\t\tappend(\":\");\n\t\t\t\tvisit((item as Record<string, unknown>)[key], depth + 1);\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\tif (omitted > 0) append(`${count > 0 ? \",\" : \"\"}\"[omitted]\":${omitted}`);\n\t\t\tappend(\"}\");\n\t\t}\n\t\tactive.delete(item);\n\t};\n\tvisit(value, 0);\n\treturn truncateMiddle(output || \"null\", maxChars);\n}\n\n/**\n * Fingerprint a tool operation without materializing or retaining its serialized payload.\n * Volatile identifiers normalize before hashing; short numbers and ordinary paths remain significant.\n */\nexport function normalizeToolSignature(pairs: Array<[string, unknown]>): string {\n\treturn structuredHash(pairs, true);\n}\n\nfunction toolOperationKey(tool: string, args: unknown, normalizeVolatile: boolean): string {\n\tconst boundedTool = truncate(tool, MAX_TOOL_NAME_CHARS);\n\tconst hash = createSignatureHash();\n\tconst updateHashString = normalizeVolatile ? updateNormalizedHashString : updateExactHashString;\n\tconst active = new Set<object>();\n\t// Preserve the stable structured-hash wire identity without allocating the two synthetic arrays.\n\tupdateHashRange(hash, \"array:1[array:2[\");\n\tupdateStructuredHash(hash, tool, active, 2, updateHashString);\n\tupdateStructuredHash(hash, args, active, 2, updateHashString);\n\tupdateHashRange(hash, \"];];\");\n\tconst signature = renderSignatureHash(hash);\n\treturn `${boundedTool}:${signature}`;\n}\n\nfunction operationIdentity(tool: string, args: unknown): ToolOperationIdentity {\n\treturn {\n\t\tfailureKey: toolOperationKey(tool, args, true),\n\t\texecutionKey: toolOperationKey(tool, args, false),\n\t\ttool: truncate(tool, MAX_TOOL_NAME_CHARS),\n\t\toperation: boundedJsonPreview(args, MAX_OPERATION_CHARS),\n\t};\n}\n\nfunction getToolFailureKey(tool: string, args: unknown): string {\n\treturn toolOperationKey(tool, args, true);\n}\n\nexport function getToolExecutionKey(tool: string, args: unknown): string {\n\treturn toolOperationKey(tool, args, false);\n}\n\nexport function getToolFailureRecordExecutionKey(record: ToolFailureMemoryRecord): string | undefined {\n\treturn record[TOOL_FAILURE_EXECUTION_KEY];\n}\n\nexport function getUnresolvedToolFailure(\n\ttracker: ToolFailureMemoryTracker,\n\ttool: string,\n\targs: unknown,\n): ToolFailureMemoryRecord | undefined {\n\treturn tracker.get(getToolFailureKey(tool, args));\n}\n\nexport function readVisibleToolFailureCode(result: ToolResultMessage): string | undefined {\n\tfor (const block of result.content) {\n\t\tif (block.type !== \"text\") continue;\n\t\tconst match = /\"failure_code\"\\s*:\\s*\"([^\"]+)\"/.exec(block.text);\n\t\tif (match) return match[1];\n\t}\n\treturn undefined;\n}\n\nexport function isClosedOperationFailureCode(code: string | undefined): boolean {\n\treturn code === \"operation_recovery_exhausted\" || code === \"recovery_exhausted\";\n}\n\nexport function restoreToolFailureRecord(\n\tresult: ToolResultMessage,\n\ttool: string,\n\targs: unknown,\n): ToolFailureMemoryRecord {\n\tconst executionKey = getToolExecutionKey(tool, args);\n\tconst persisted = readFailureRecord(result.details);\n\tif (persisted) {\n\t\treturn {\n\t\t\t...persisted,\n\t\t\t[TOOL_FAILURE_EXECUTION_KEY]: getToolFailureRecordExecutionKey(persisted) ?? executionKey,\n\t\t};\n\t}\n\tconst identity = operationIdentity(tool, args);\n\treturn {\n\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\tfailureKey: identity.failureKey,\n\t\t[TOOL_FAILURE_EXECUTION_KEY]: executionKey,\n\t\ttool: identity.tool,\n\t\toperation: identity.operation,\n\t\toccurrence: 1,\n\t\tstate: \"failed\",\n\t\tphase: \"execution\",\n\t\tfailureCode: boundedFailureCode(readVisibleToolFailureCode(result) ?? \"tool_error\"),\n\t\tcorrection: fallbackFailureGuidance(\"failed\", false, \"execution\"),\n\t};\n}\n\nexport interface PairedToolResult {\n\ttool: string;\n\targs: unknown;\n\texecutionKey: string;\n\tresult: ToolResultMessage;\n}\n\nexport function forEachPairedToolResult(\n\tmessages: readonly AgentMessage[],\n\tvisit: (pair: PairedToolResult) => boolean | undefined,\n): void {\n\tconst callsById = new Map<string, { name: string; args: unknown }>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") {\n\t\t\t\t\tcallsById.set(block.id, { name: block.name, args: block.arguments });\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"toolResult\") continue;\n\t\tconst call = callsById.get(message.toolCallId);\n\t\tif (!call) continue;\n\t\tif (\n\t\t\tvisit({\n\t\t\t\ttool: call.name,\n\t\t\t\targs: call.args,\n\t\t\t\texecutionKey: getToolExecutionKey(call.name, call.args),\n\t\t\t\tresult: message,\n\t\t\t}) === false\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nexport function transcriptHasClosedToolOperation(messages: readonly AgentMessage[]): boolean {\n\tconst closedByExecutionKey = new Map<string, true>();\n\tforEachPairedToolResult(messages, ({ executionKey, result }) => {\n\t\tif (!result.isError) {\n\t\t\tclosedByExecutionKey.delete(executionKey);\n\t\t\treturn;\n\t\t}\n\t\tif (isClosedOperationFailureCode(readVisibleToolFailureCode(result))) {\n\t\t\tclosedByExecutionKey.set(executionKey, true);\n\t\t}\n\t});\n\treturn closedByExecutionKey.size > 0;\n}\n\nfunction boundedFailureCode(value: string): string {\n\tconst normalized = value\n\t\t.trim()\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9_.:-]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\");\n\treturn truncate(normalized || \"tool_error\", MAX_FAILURE_CODE_CHARS);\n}\n\n/**\n * bash.ts's own trailer (`appendStatus`) always ends the message with a line like \"Command\n * exited with code 1\"; a structured result (e.g. run_process) instead puts \"exitCode: 1\" on its\n * own line near the top. Both are anchored to the START of their own line, with at most one\n * leading tool-name token (\"Command\"/\"Python\"/...) — ordinary stdout/stderr prose is never\n * anchored that way, so a captured line like \"container will exit 0 on SIGTERM\" can never be\n * read as the process exit status. Scan from the end of the message so the tool's own trailer —\n * always the last line it appends — outranks any earlier, non-authoritative line that matches.\n */\nconst EXIT_STATUS_LINE_PATTERN = /^(?:\\S+\\s+)?(?:exit(?:ed)?(?:\\s+with)?(?:\\s+code)?|exitcode)\\s*[:=]?\\s*(-?\\d+)\\b/i;\n\nfunction processExitFailureCode(message: string): string | undefined {\n\tconst lines = message.split(/\\r\\n|\\n/);\n\tfor (let index = lines.length - 1; index >= 0; index--) {\n\t\tconst match = EXIT_STATUS_LINE_PATTERN.exec(lines[index].trim());\n\t\tif (match) return boundedFailureCode(`exit_${match[1]}`);\n\t}\n\treturn undefined;\n}\n\nexport function classifyToolFailure(message: string, errorClass?: string): string {\n\t// A tool-owned terminal status is authoritative; stdout may contain arbitrary all-caps identifiers.\n\tconst exitFailureCode = processExitFailureCode(message);\n\tif (exitFailureCode) return exitFailureCode;\n\tconst errno = /\\b(E[A-Z][A-Z0-9_]{2,})\\b/.exec(message)?.[1];\n\tif (errno) return boundedFailureCode(errno);\n\treturn boundedFailureCode(errorClass ?? \"tool_error\");\n}\n\nfunction isToolFailurePhase(value: unknown): value is ToolFailurePhase {\n\treturn (\n\t\tvalue === \"validation\" ||\n\t\tvalue === \"policy\" ||\n\t\tvalue === \"preflight\" ||\n\t\tvalue === \"execution\" ||\n\t\tvalue === \"timeout\" ||\n\t\tvalue === \"cancelled\" ||\n\t\tvalue === \"provisioning\"\n\t);\n}\n\nfunction inferToolFailurePhase(state: ToolFailureState, failureCode: string): ToolFailurePhase {\n\tif (failureCode === \"malformed_call\" || failureCode === \"unknown_tool\" || failureCode === \"invalid_arguments\") {\n\t\treturn \"validation\";\n\t}\n\tif (failureCode === \"blocked\" || failureCode === \"permission_denied\") return \"policy\";\n\tif (failureCode === \"preflight_error\") return \"preflight\";\n\tif (failureCode === \"aborted\" || failureCode === \"cancelled\") return \"cancelled\";\n\tif (failureCode === \"timeout\" || failureCode === \"etimedout\") return \"timeout\";\n\tif (failureCode === \"provisioning_failed\" || failureCode === \"command_not_found\") return \"provisioning\";\n\treturn state === \"rejected\" ? \"validation\" : \"execution\";\n}\n\nfunction fallbackFailureGuidance(state: ToolFailureState, hasDiagnostic: boolean, phase: ToolFailurePhase): string {\n\tif (phase === \"preflight\") {\n\t\treturn hasDiagnostic\n\t\t\t? \"Arguments valid; preflight failed before execution. Resolve diagnostic/host condition before retry.\"\n\t\t\t: \"Arguments valid; preflight failed before execution. Inspect host policy/capability before retry.\";\n\t}\n\tif (phase === \"policy\") return \"Resolve authority/policy restriction or choose allowed approach before retry.\";\n\tif (phase === \"cancelled\") return \"Retry only when operation remains required, cancellation condition cleared.\";\n\tif (phase === \"timeout\") return \"Narrow/split work; retry once only when safe.\";\n\tif (phase === \"provisioning\") {\n\t\treturn hasDiagnostic\n\t\t\t? \"Fix provisioning diagnostic; retry only after environment changes.\"\n\t\t\t: \"Inspect tool availability; request bounded provisioning diagnostic before retry.\";\n\t}\n\treturn state === \"rejected\"\n\t\t? \"Re-read current tool schema; change invalid operation before retry.\"\n\t\t: hasDiagnostic\n\t\t\t? \"Read diagnostic; identify cause; repair parameters or corrective state before retry.\"\n\t\t\t: \"No diagnostic output. Inspect tool contract or request bounded diagnostic before retry.\";\n}\n\nexport function toolFailureCorrection(\n\tmessage: string,\n\tstate: ToolFailureState,\n\tphase: ToolFailurePhase = state === \"rejected\" ? \"validation\" : \"execution\",\n): string {\n\tconst policy = getToolExecutionErrorPolicy(message);\n\treturn policy\n\t\t? truncate(policy.guidance, MAX_CORRECTION_CHARS)\n\t\t: fallbackFailureGuidance(state, message.trim().length > 0, phase);\n}\n\nfunction extractFailureDiagnostic(\n\tmessage: string,\n\tallowUnclassifiedFallback: boolean,\n\trequireStrongSignal = false,\n): string | undefined {\n\tconst rawLines = sanitizeBinaryOutput(message).replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n\tconst strongDiagnosticPattern =\n\t\t/^(?:(?:error(?:\\[[^\\]]+\\])?|fatal(?: error)?|panic|fail(?:ed|ure)?|invalid|unknown|unsupported|not found|no such|cannot|can't|missing|denied|refused|usage)(?:\\b|:)|[a-z][a-z0-9_.]*error(?::|$)|thread .+ panicked at\\b|--- fail:|\\[fail(?:ed)?\\]|not ok\\b|[×✗]\\s|.{1,160}:\\s+(?:error(?:\\[[^\\]]+\\])?|fatal(?: error)?)(?:\\b|:))/i;\n\tconst stderrMarkerIndex = rawLines.findLastIndex((line) => /^stderr:\\s*$/i.test(line.trim()));\n\tif (stderrMarkerIndex >= 0) {\n\t\tconst stderrLines = rawLines\n\t\t\t.slice(stderrMarkerIndex + 1)\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(\n\t\t\t\t(line) =>\n\t\t\t\t\tline.length > 0 && !/^command (?:exited with code|timed out after|aborted|killed after)\\b/i.test(line),\n\t\t\t);\n\t\tif (stderrLines.length > 0) {\n\t\t\tconst classified = stderrLines.find((line) => strongDiagnosticPattern.test(line));\n\t\t\tif (classified) return truncateMiddle(classified, MAX_DIAGNOSTIC_CHARS);\n\t\t\t// No stderr line carries a strong signal. Under requireStrongSignal, the caller has\n\t\t\t// already decided uncatalogued output must never be fabricated into a diagnostic (see\n\t\t\t// assessToolFailure) — falling back to the last raw stderr lines here would defeat that\n\t\t\t// guarantee for the common bash case, so fall through to the same allowUnclassifiedFallback\n\t\t\t// gate the no-stderr path below applies.\n\t\t\tif (!requireStrongSignal) {\n\t\t\t\treturn truncateMiddle(stderrLines.slice(-4).join(\" | \"), MAX_DIAGNOSTIC_CHARS);\n\t\t\t}\n\t\t}\n\t}\n\tconst lines = rawLines\n\t\t.map((line) => line.trim())\n\t\t.filter(\n\t\t\t(line) =>\n\t\t\t\tline.length > 0 &&\n\t\t\t\t!/^command (?:exited with code|timed out after|aborted|killed after)\\b/i.test(line) &&\n\t\t\t\t!/^outcome:\\s*(?:failed|aborted|timeout|output_limit)\\b/i.test(line) &&\n\t\t\t\t!/^exitcode:\\s*-?\\d+\\b/i.test(line) &&\n\t\t\t\t!/^(?:stdout|stderr):(?:\\s*\\(empty\\))?$/i.test(line),\n\t\t);\n\tif (lines.length === 0) return undefined;\n\tconst diagnosticPattern = requireStrongSignal\n\t\t? strongDiagnosticPattern\n\t\t: /(?:^|\\b)(?:error|fatal|fail(?:ed|ure)?|invalid|unknown|unsupported|not found|no such|cannot|can't|missing|denied|refused|usage)(?:\\b|:)/i;\n\tconst classified = requireStrongSignal\n\t\t? lines.find((line) => diagnosticPattern.test(line))\n\t\t: [...lines].reverse().find((line) => diagnosticPattern.test(line));\n\tconst diagnostic = classified ?? (allowUnclassifiedFallback ? lines.at(-1) : undefined);\n\treturn diagnostic ? truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined;\n}\n\nexport interface ToolFailureAssessment {\n\tfailureCode: string;\n\tphase: ToolFailurePhase;\n\tdiagnostic?: string;\n\tguidance: string;\n\tattemptMemory?: \"discard\";\n}\n\nexport function assessToolFailure(\n\tmessage: string,\n\tstate: ToolFailureState,\n\terrorClass?: string,\n): ToolFailureAssessment {\n\tconst policy = getToolExecutionErrorPolicy(message);\n\tconst exitFailureCode = processExitFailureCode(message);\n\tconst retainPolicyDiagnostic = policy?.retainDiagnostic === true;\n\tconst diagnostic =\n\t\tstate === \"failed\" && (!policy || policy.retainDiagnostic)\n\t\t\t? extractFailureDiagnostic(\n\t\t\t\t\tmessage,\n\t\t\t\t\texitFailureCode === undefined && (errorClass !== undefined || retainPolicyDiagnostic),\n\t\t\t\t\texitFailureCode !== undefined && !retainPolicyDiagnostic,\n\t\t\t\t)\n\t\t\t: undefined;\n\tconst failureCode = policy?.failureCode ?? classifyToolFailure(message, errorClass);\n\treturn {\n\t\tfailureCode,\n\t\tphase: policy?.phase ?? inferToolFailurePhase(state, failureCode),\n\t\t...(diagnostic ? { diagnostic } : {}),\n\t\tguidance: policy\n\t\t\t? truncate(policy.guidance, MAX_CORRECTION_CHARS)\n\t\t\t: fallbackFailureGuidance(state, diagnostic !== undefined, inferToolFailurePhase(state, failureCode)),\n\t\t...(policy?.attemptMemory === \"discard\" ? { attemptMemory: \"discard\" as const } : {}),\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readFailureRecord(details: unknown): ToolFailureMemoryRecord | undefined {\n\tif (!isRecord(details) || !isRecord(details.piToolFailureMemory)) return undefined;\n\tconst candidate = details.piToolFailureMemory;\n\tif (\n\t\tcandidate.version !== TOOL_FAILURE_MEMORY_VERSION ||\n\t\ttypeof candidate.failureKey !== \"string\" ||\n\t\ttypeof candidate.tool !== \"string\" ||\n\t\ttypeof candidate.operation !== \"string\" ||\n\t\ttypeof candidate.occurrence !== \"number\" ||\n\t\t!Number.isSafeInteger(candidate.occurrence) ||\n\t\tcandidate.occurrence < 1 ||\n\t\t(candidate.state !== \"failed\" && candidate.state !== \"rejected\") ||\n\t\ttypeof candidate.failureCode !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\tconst diagnostic =\n\t\ttypeof candidate.diagnostic === \"string\" ? truncate(candidate.diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined;\n\tconst retainedCorrection =\n\t\ttypeof candidate.correction === \"string\" ? truncate(candidate.correction, MAX_CORRECTION_CHARS) : undefined;\n\tconst correction =\n\t\tcandidate.state === \"failed\" && retainedCorrection === LEGACY_GENERIC_EXECUTION_CORRECTION\n\t\t\t? fallbackFailureGuidance(\"failed\", diagnostic !== undefined, \"execution\")\n\t\t\t: (retainedCorrection ?? toolFailureCorrection(\"\", candidate.state));\n\tconst phase = isToolFailurePhase(candidate.phase)\n\t\t? candidate.phase\n\t\t: inferToolFailurePhase(candidate.state, candidate.failureCode);\n\tconst candidateExecutionKey: unknown = Reflect.get(candidate, TOOL_FAILURE_EXECUTION_KEY);\n\treturn {\n\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\tfailureKey: truncate(candidate.failureKey, MAX_TOOL_NAME_CHARS + 1 + TOOL_SIGNATURE_HEX_CHARS),\n\t\t...(typeof candidateExecutionKey === \"string\"\n\t\t\t? {\n\t\t\t\t\t[TOOL_FAILURE_EXECUTION_KEY]: truncate(\n\t\t\t\t\t\tcandidateExecutionKey,\n\t\t\t\t\t\tMAX_TOOL_NAME_CHARS + 1 + TOOL_SIGNATURE_HEX_CHARS,\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\ttool: truncate(candidate.tool, MAX_TOOL_NAME_CHARS),\n\t\toperation: truncateMiddle(candidate.operation, MAX_OPERATION_CHARS),\n\t\toccurrence: candidate.occurrence,\n\t\tstate: candidate.state,\n\t\tphase,\n\t\tfailureCode: boundedFailureCode(candidate.failureCode),\n\t\tdiagnostic,\n\t\tcorrection,\n\t};\n}\n\nfunction readFailureDirective(details: unknown): ToolFailureDirectiveDetails[\"piToolFailureDirective\"] | undefined {\n\tif (!isRecord(details) || !isRecord(details.piToolFailureDirective)) return undefined;\n\tconst candidate = details.piToolFailureDirective;\n\tif (\n\t\tcandidate.version !== TOOL_FAILURE_DIRECTIVE_VERSION ||\n\t\ttypeof candidate.failureCode !== \"string\" ||\n\t\ttypeof candidate.nextAction !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tversion: TOOL_FAILURE_DIRECTIVE_VERSION,\n\t\tstate: candidate.state === \"rejected\" ? \"rejected\" : \"failed\",\n\t\tphase: isToolFailurePhase(candidate.phase)\n\t\t\t? candidate.phase\n\t\t\t: inferToolFailurePhase(\"failed\", candidate.failureCode),\n\t\tfailureCode: boundedFailureCode(candidate.failureCode),\n\t\tdiagnostic:\n\t\t\ttypeof candidate.diagnostic === \"string\" ? truncate(candidate.diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\tnextAction: truncate(candidate.nextAction, MAX_CORRECTION_CHARS),\n\t};\n}\n\nexport interface ToolFailureTelemetry {\n\tstate: ToolFailureState;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tdiagnostic?: string;\n\tnextAction: string;\n}\n\n/** Read only bounded failure identity and guidance; operation arguments never cross this telemetry boundary. */\nexport function readToolFailureTelemetry(details: unknown): ToolFailureTelemetry | undefined {\n\tconst record = readFailureRecord(details);\n\tif (record) {\n\t\treturn {\n\t\t\tstate: record.state,\n\t\t\tphase: record.phase,\n\t\t\tfailureCode: record.failureCode,\n\t\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t\tnextAction: record.correction,\n\t\t};\n\t}\n\tconst directive = readFailureDirective(details);\n\tif (!directive) return undefined;\n\treturn {\n\t\tstate: directive.state,\n\t\tphase: directive.phase,\n\t\tfailureCode: directive.failureCode,\n\t\t...(directive.diagnostic ? { diagnostic: directive.diagnostic } : {}),\n\t\tnextAction: directive.nextAction,\n\t};\n}\n\nfunction firstText(message: ToolResultMessage): string {\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tif (Array.isArray(content)) {\n\t\tfor (let index = 0; index < content.length; index++) {\n\t\t\tconst block = content[index];\n\t\t\tif (block.type === \"text\") return block.text;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction fastTextSignature(text: string): string {\n\tif (text.length <= 128) return text;\n\treturn `${text.length}:${text.slice(0, 48)}:${text.slice(-48)}`;\n}\n\nfunction analyzeToolFailureContext(messages: AgentMessage[]): FailureContextAnalysis {\n\tconst callById = new Map<string, AgentToolCall>();\n\tconst omittedCallIds = new Set<string>();\n\tconst orphanFailedResults = new Set<ToolResultMessage>();\n\tconst active = new Map<string, ActiveFailure>();\n\tconst activeDirectives = new Map<string, ToolFailureDirectiveDetails[\"piToolFailureDirective\"]>();\n\tlet sequence = 0;\n\tconst kindMistakesMap = new Map<string, number>();\n\n\tconst latestSuccessfulByOpKey = new Map<string, string>();\n\tconst latestSuccessfulByPayloadKey = new Map<string, string>();\n\n\tfor (let index = 0; index < messages.length; index++) {\n\t\tconst message = messages[index];\n\t\tif (message.role === \"assistant\") {\n\t\t\tactiveDirectives.clear();\n\t\t\tconst content = message.content;\n\t\t\tfor (let blockIdx = 0; blockIdx < content.length; blockIdx++) {\n\t\t\t\tconst block = content[blockIdx];\n\t\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\t\tcallById.set(block.id, block);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"toolResult\") continue;\n\n\t\tconst call = callById.get(message.toolCallId);\n\t\tcallById.delete(message.toolCallId);\n\t\tconst textPayload = firstText(message);\n\t\tconst isFailure = message.isError === true || textPayload.startsWith(\"[harness] \");\n\t\tif (isFailure) {\n\t\t\tconst toolName = call?.name ?? message.toolName;\n\t\t\tconst kindCount = (kindMistakesMap.get(toolName) ?? 0) + 1;\n\t\t\tkindMistakesMap.set(toolName, kindCount);\n\n\t\t\tconst directive = readFailureDirective(message.details);\n\t\t\tif (directive) {\n\t\t\t\tactiveDirectives.delete(directive.failureCode);\n\t\t\t\tactiveDirectives.set(directive.failureCode, directive);\n\t\t\t\tif (call) omittedCallIds.add(call.id);\n\t\t\t\telse orphanFailedResults.add(message);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst retained = readFailureRecord(message.details);\n\t\t\tconst state = retained?.state ?? \"failed\";\n\t\t\tconst assessment = retained ? undefined : assessToolFailure(textPayload, state);\n\t\t\tlet failureKey: string;\n\t\t\tlet executionKey: string | undefined;\n\t\t\tlet tool: string;\n\t\t\tlet operation: string;\n\t\t\tif (retained) {\n\t\t\t\tfailureKey = retained.failureKey;\n\t\t\t\texecutionKey = call\n\t\t\t\t\t? getToolExecutionKey(call.name, call.arguments)\n\t\t\t\t\t: getToolFailureRecordExecutionKey(retained);\n\t\t\t\ttool = retained.tool;\n\t\t\t\toperation = retained.operation;\n\t\t\t} else {\n\t\t\t\tconst identity = operationIdentity(\n\t\t\t\t\tcall?.name ?? message.toolName,\n\t\t\t\t\tcall?.arguments ?? { toolCallId: message.toolCallId },\n\t\t\t\t);\n\t\t\t\tfailureKey = identity.failureKey;\n\t\t\t\texecutionKey = identity.executionKey;\n\t\t\t\ttool = identity.tool;\n\t\t\t\toperation = identity.operation;\n\t\t\t}\n\t\t\tconst previous = active.get(failureKey)?.record;\n\t\t\tconst occurrence = Math.max(retained?.occurrence ?? 0, (previous?.occurrence ?? 0) + 1);\n\t\t\tconst record: ToolFailureMemoryRecord = {\n\t\t\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\t\t\tfailureKey,\n\t\t\t\t...(executionKey ? { [TOOL_FAILURE_EXECUTION_KEY]: executionKey } : {}),\n\t\t\t\ttool,\n\t\t\t\toperation,\n\t\t\t\toccurrence,\n\t\t\t\tkindMistakes: kindCount,\n\t\t\t\tmistakeKind: toolName,\n\t\t\t\tstate,\n\t\t\t\tphase: retained?.phase ?? assessment?.phase ?? inferToolFailurePhase(state, \"tool_error\"),\n\t\t\t\tfailureCode: retained?.failureCode ?? assessment?.failureCode ?? \"tool_error\",\n\t\t\t\tdiagnostic: retained?.diagnostic ?? assessment?.diagnostic,\n\t\t\t\tcorrection:\n\t\t\t\t\tretained?.correction ??\n\t\t\t\t\tassessment?.guidance ??\n\t\t\t\t\tfallbackFailureGuidance(state, false, inferToolFailurePhase(state, \"tool_error\")),\n\t\t\t};\n\t\t\tactive.delete(failureKey);\n\t\t\tactive.set(failureKey, { record, sequence: sequence++ });\n\t\t\twhile (active.size > MAX_TRACKED_FAILURES) {\n\t\t\t\tconst oldest = active.keys().next().value;\n\t\t\t\tif (oldest === undefined) break;\n\t\t\t\tactive.delete(oldest);\n\t\t\t}\n\t\t\tif (call) omittedCallIds.add(call.id);\n\t\t\telse orphanFailedResults.add(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (call) {\n\t\t\tconst opKey = getToolFailureKey(call.name, call.arguments);\n\t\t\tactive.delete(opKey);\n\t\t\tconst previousOperationCallId = latestSuccessfulByOpKey.get(opKey);\n\t\t\tif (previousOperationCallId) omittedCallIds.add(previousOperationCallId);\n\t\t\tlatestSuccessfulByOpKey.set(opKey, call.id);\n\n\t\t\tconst textPayload = firstText(message);\n\t\t\tif (textPayload.length >= 64) {\n\t\t\t\tconst payloadKey = `payload:${fastTextSignature(textPayload)}`;\n\t\t\t\tconst previousPayloadCallId = latestSuccessfulByPayloadKey.get(payloadKey);\n\t\t\t\tif (previousPayloadCallId) omittedCallIds.add(previousPayloadCallId);\n\t\t\t\tlatestSuccessfulByPayloadKey.set(payloadKey, call.id);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst kindMistakesSummary = Object.fromEntries(kindMistakesMap);\n\n\tif (omittedCallIds.size === 0 && orphanFailedResults.size === 0) {\n\t\treturn { messages, activeRecords: [], activeDirectives: [], kindMistakesSummary };\n\t}\n\n\tconst filteredMessages: AgentMessage[] = [];\n\tfor (let index = 0; index < messages.length; index++) {\n\t\tconst message = messages[index];\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (omittedCallIds.has(message.toolCallId) || orphanFailedResults.has(message)) continue;\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"assistant\") {\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tconst content = message.content;\n\t\tif (content.length === 1) {\n\t\t\tconst block = content[0];\n\t\t\tif (block.type === \"toolCall\" && omittedCallIds.has(block.id)) continue;\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tlet hasOmitted = false;\n\t\tfor (let blockIdx = 0; blockIdx < content.length; blockIdx++) {\n\t\t\tconst block = content[blockIdx];\n\t\t\tif (block.type === \"toolCall\" && omittedCallIds.has(block.id)) {\n\t\t\t\thasOmitted = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!hasOmitted) {\n\t\t\tfilteredMessages.push(message);\n\t\t\tcontinue;\n\t\t}\n\t\tconst retainedContent = content.filter((block) => block.type !== \"toolCall\" || !omittedCallIds.has(block.id));\n\t\tif (retainedContent.length > 0) {\n\t\t\tfilteredMessages.push({ ...message, content: retainedContent } satisfies AssistantMessage);\n\t\t}\n\t}\n\tconst activeRecords = [...active.values()]\n\t\t.sort((left, right) => left.sequence - right.sequence)\n\t\t.map(({ record }) => record);\n\treturn {\n\t\tmessages: filteredMessages,\n\t\tactiveRecords,\n\t\tactiveDirectives: [...activeDirectives.values()],\n\t\tkindMistakesSummary,\n\t};\n}\n\nexport function createToolFailureMemoryTracker(messages: AgentMessage[]): ToolFailureMemoryTracker {\n\treturn new Map(analyzeToolFailureContext(messages).activeRecords.map((record) => [record.failureKey, record]));\n}\n\nexport function rememberToolFailure(\n\ttracker: ToolFailureMemoryTracker,\n\ttool: string,\n\targs: unknown,\n\tstate: ToolFailureState,\n\tfailureCode: string,\n\tcorrection: string,\n\tdiagnostic?: string,\n\tphase: ToolFailurePhase = inferToolFailurePhase(state, failureCode),\n): ToolFailureMemoryRecord {\n\tlet kindCount = 1;\n\tfor (const previous of tracker.values()) {\n\t\tif (previous.tool === tool) {\n\t\t\tkindCount = Math.max(kindCount, (previous.kindMistakes ?? previous.occurrence) + 1);\n\t\t}\n\t}\n\tif (getToolExecutionAttemptMemory(failureCode) === \"discard\") {\n\t\tfor (const [failureKey, previous] of tracker) {\n\t\t\tif (previous.tool === tool && previous.failureCode === failureCode) tracker.delete(failureKey);\n\t\t}\n\t\treturn {\n\t\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\t\tfailureKey: `directive:${boundedFailureCode(failureCode)}`,\n\t\t\t[TOOL_FAILURE_EXECUTION_KEY]: getToolExecutionKey(tool, args),\n\t\t\ttool: truncate(tool, MAX_TOOL_NAME_CHARS),\n\t\t\toperation: \"[discarded]\",\n\t\t\toccurrence: 1,\n\t\t\tkindMistakes: kindCount,\n\t\t\tmistakeKind: tool,\n\t\t\tstate,\n\t\t\tphase,\n\t\t\tfailureCode: boundedFailureCode(failureCode),\n\t\t\tdiagnostic: diagnostic ? truncate(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\t\tcorrection: truncate(correction, MAX_CORRECTION_CHARS),\n\t\t\tattemptMemory: \"discard\",\n\t\t};\n\t}\n\tconst identity = operationIdentity(tool, args);\n\tconst previous = tracker.get(identity.failureKey);\n\tconst record: ToolFailureMemoryRecord = {\n\t\tversion: TOOL_FAILURE_MEMORY_VERSION,\n\t\tfailureKey: identity.failureKey,\n\t\t[TOOL_FAILURE_EXECUTION_KEY]: identity.executionKey,\n\t\ttool: identity.tool,\n\t\toperation: identity.operation,\n\t\toccurrence: (previous?.occurrence ?? 0) + 1,\n\t\tkindMistakes: kindCount,\n\t\tmistakeKind: tool,\n\t\tstate,\n\t\tphase,\n\t\tfailureCode: boundedFailureCode(failureCode),\n\t\tdiagnostic: diagnostic ? truncate(diagnostic, MAX_DIAGNOSTIC_CHARS) : undefined,\n\t\tcorrection: truncate(correction, MAX_CORRECTION_CHARS),\n\t};\n\ttracker.delete(identity.failureKey);\n\ttracker.set(identity.failureKey, record);\n\twhile (tracker.size > MAX_TRACKED_FAILURES) {\n\t\tconst oldest = tracker.keys().next().value;\n\t\tif (oldest === undefined) break;\n\t\ttracker.delete(oldest);\n\t}\n\treturn record;\n}\n\nexport function clearToolFailure(tracker: ToolFailureMemoryTracker, tool: string, args: unknown): void {\n\tconst failureKey = getToolFailureKey(tool, args);\n\tconst record = tracker.get(failureKey);\n\tconst executionKey = record ? getToolFailureRecordExecutionKey(record) : undefined;\n\tif (!executionKey || executionKey === getToolExecutionKey(tool, args)) tracker.delete(failureKey);\n}\n\nfunction failureGuidance(record: ToolFailureMemoryRecord): { repair: string } | { next_action: string } {\n\treturn record.state === \"rejected\" && REPAIRABLE_REJECTION_CODES.has(record.failureCode)\n\t\t? { repair: record.correction }\n\t\t: { next_action: record.correction };\n}\n\nfunction formatRecordJson(record: ToolFailureMemoryRecord, includeOperation = false): string {\n\tconst guidance = failureGuidance(record);\n\treturn JSON.stringify({\n\t\t...mandatoryToolFailureRecoveryMetadata(),\n\t\tfailure_key: record.failureKey,\n\t\tocc: record.occurrence,\n\t\tkind_mistakes: record.kindMistakes ?? record.occurrence,\n\t\tmistake_kind: record.mistakeKind ?? record.tool,\n\t\tstate: record.state,\n\t\tphase: record.phase,\n\t\ttool: record.tool,\n\t\t...(includeOperation ? { operation: record.operation } : {}),\n\t\tfailure_code: record.failureCode,\n\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t...guidance,\n\t\t...(record.attemptMemory === \"discard\" ? { attempt_memory: \"discarded\" } : {}),\n\t});\n}\n\nexport function createToolFailureResult(\n\trecord: ToolFailureMemoryRecord,\n\tterminate?: boolean,\n): AgentToolResult<ToolFailureResultDetails> {\n\tconst discardAttempt = record.attemptMemory === \"discard\";\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: `[harness] ${formatRecordJson(record, false)}`,\n\t\t\t},\n\t\t],\n\t\tdetails: discardAttempt\n\t\t\t? {\n\t\t\t\t\tpiToolFailureDirective: {\n\t\t\t\t\t\tversion: TOOL_FAILURE_DIRECTIVE_VERSION,\n\t\t\t\t\t\tstate: record.state,\n\t\t\t\t\t\tphase: record.phase,\n\t\t\t\t\t\tfailureCode: record.failureCode,\n\t\t\t\t\t\t...(record.diagnostic ? { diagnostic: record.diagnostic } : {}),\n\t\t\t\t\t\tnextAction: record.correction,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: { piToolFailureMemory: record },\n\t\t...(terminate === undefined ? {} : { terminate }),\n\t};\n}\n\nexport function createRepeatedToolFailureResult(\n\trecord: ToolFailureMemoryRecord,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = {\n\t\t...retainBlockedToolFailure(record),\n\t\tcorrection: BLOCKED_REPLAY_CAVEMAN_CORRECTION,\n\t};\n\tconst diagnostic = truncateMiddle(\n\t\t`The unchanged operation was not executed. Unchanged replay blocked after ${record.failureCode}`,\n\t\tMAX_DIAGNOSTIC_CHARS,\n\t);\n\tconst blockedResult = createToolFailureResult({\n\t\t...retainedRecord,\n\t\tstate: \"rejected\",\n\t\tfailureCode: \"repeated_failed_operation\",\n\t\tdiagnostic,\n\t\tcorrection: retainedRecord.correction,\n\t});\n\treturn {\n\t\t...blockedResult,\n\t\t// The visible result describes this rejected replay, while retained memory keeps the\n\t\t// authoritative cause so later blocks do not recursively wrap synthetic failures.\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nexport function createToolFailureRecoveryExhaustedResult(\n\trecord: ToolFailureMemoryRecord,\n\tdiagnostic: string,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = retainBlockedToolFailure(record);\n\tconst exhaustedResult = createToolFailureResult(\n\t\t{\n\t\t\t...retainedRecord,\n\t\t\tstate: \"rejected\",\n\t\t\tfailureCode: \"recovery_exhausted\",\n\t\t\tdiagnostic: truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS),\n\t\t\tcorrection:\n\t\t\t\t\"Stop retrying tools in this run. Report the unresolved failure and the user or environment action required to continue.\",\n\t\t},\n\t\ttrue,\n\t);\n\treturn {\n\t\t...exhaustedResult,\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nexport function createToolFailureOperationExhaustedResult(\n\trecord: ToolFailureMemoryRecord,\n\tdiagnostic: string,\n): AgentToolResult<ToolFailureMemoryDetails> {\n\tconst retainedRecord = {\n\t\t...retainBlockedToolFailure(record),\n\t\tcorrection: CLOSED_OPERATION_CAVEMAN_CORRECTION,\n\t};\n\tconst exhaustedResult = createToolFailureResult(\n\t\t{\n\t\t\t...retainedRecord,\n\t\t\tstate: \"rejected\",\n\t\t\tfailureCode: \"operation_recovery_exhausted\",\n\t\t\tdiagnostic: truncateMiddle(diagnostic, MAX_DIAGNOSTIC_CHARS),\n\t\t},\n\t\tfalse,\n\t);\n\treturn {\n\t\t...exhaustedResult,\n\t\tdetails: { piToolFailureMemory: retainedRecord },\n\t};\n}\n\nfunction retainBlockedToolFailure(record: ToolFailureMemoryRecord): ToolFailureMemoryRecord {\n\treturn {\n\t\t...record,\n\t\toccurrence: record.occurrence + 1,\n\t\tkindMistakes: (record.kindMistakes ?? record.occurrence) + 1,\n\t};\n}\n\nfunction escapePromptData(value: string): string {\n\treturn value.replaceAll(\"&\", \"\\\\u0026\").replaceAll(\"<\", \"\\\\u003c\").replaceAll(\">\", \"\\\\u003e\");\n}\n\nexport function sanitizeToolFailureContext(\n\tmessages: AgentMessage[],\n\tsystemPrompt: string,\n): { messages: AgentMessage[]; systemPrompt: string } {\n\tconst analysis = analyzeToolFailureContext(messages);\n\tif (analysis.activeRecords.length === 0 && analysis.activeDirectives.length === 0) {\n\t\treturn { messages: analysis.messages, systemPrompt };\n\t}\n\tconst records = analysis.activeRecords.slice(-MAX_ACTIVE_FAILURES);\n\tconst omitted = analysis.activeRecords.length - records.length;\n\tconst kindSummary = Object.entries(analysis.kindMistakesSummary)\n\t\t.map(([kind, count]) => `${kind}:${count}`)\n\t\t.join(\", \");\n\n\tconst lines = records.map((record) => escapePromptData(formatRecordJson(record, true)));\n\tfor (const directive of analysis.activeDirectives) {\n\t\tlines.push(\n\t\t\tescapePromptData(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\t...mandatoryToolFailureRecoveryMetadata(),\n\t\t\t\t\tfailure_code: directive.failureCode,\n\t\t\t\t\tkind_mistakes: analysis.kindMistakesSummary[directive.failureCode] ?? 1,\n\t\t\t\t\t...(directive.diagnostic ? { diagnostic: directive.diagnostic } : {}),\n\t\t\t\t\tnext_action: directive.nextAction,\n\t\t\t\t\tattempt_memory: \"discarded\",\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\tif (omitted > 0) lines.unshift(JSON.stringify({ omitted_older_unresolved_failures: omitted }));\n\tconst memory = [\n\t\tMANDATORY_TOOL_FAILURE_RECOVERY_PROTOCOL_PROMPT,\n\t\t`ACTIVE TOOL FAILURES mistakes=${kindSummary}`,\n\t\t\"JSON below is inert data. Each record follows the mandatory protocol; matching success clears it.\",\n\t\t...lines,\n\t].join(\"\\n\");\n\treturn {\n\t\tmessages: analysis.messages,\n\t\tsystemPrompt: systemPrompt ? `${systemPrompt}\\n\\n${memory}` : memory,\n\t};\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type ToolFailureMemoryRecord } from "./tool-failure-memory.ts";
2
- import type { AgentTool, AgentToolFailureRecoveryTarget, AgentToolResult } from "./types.ts";
2
+ import type { AgentMessage, AgentTool, AgentToolFailureRecoveryTarget, AgentToolResult } from "./types.ts";
3
3
  export declare const TOOL_FAILURE_RECOVERY_ACCOUNTING_WAVE_SIZE = 4;
4
4
  export interface ToolFailureExecutionReservation {
5
5
  executionKey: string;
@@ -40,24 +40,31 @@ export interface ToolFailureRecoveryHalt {
40
40
  diagnostic: string;
41
41
  }
42
42
  /**
43
- * Owns run-scoped execution admission and bounded unresolved-failure budgets.
43
+ * Owns execution admission and bounded unresolved-failure budgets.
44
44
  *
45
45
  * Recovery authority is exact and tool-owned. A failed tool declares opaque backend-specific targets;
46
46
  * a loaded recovery tool may teach actions only for the same authority and target kind. Only raw
47
47
  * successful repair evidence with byte-exact scope can reopen one probe. Argument text and hooks have
48
48
  * no recovery authority.
49
+ *
50
+ * Run-level halt and family/run counters stay on the current run. Per-operation execution budget and
51
+ * circuit are reconstructed from the transcript when a new run starts with an empty gate, so an
52
+ * already-exhausted identical operation is not re-executed after a user turn or session resume.
49
53
  */
50
54
  export declare class ToolFailureRecoveryGate {
51
55
  private readonly statesByExecutionKey;
52
56
  private readonly failuresByFamily;
53
57
  private totalFailures;
54
58
  private halted;
59
+ isEmpty(): boolean;
60
+ restoreFromMessages(messages: readonly AgentMessage[]): void;
55
61
  planFailure(failedTool: AgentTool<any>, args: unknown, failureCode: string, availableTools: readonly AgentTool<any>[], reservation: ToolFailureExecutionReservation | undefined): ToolFailureRecoveryPlan;
56
62
  admit(tool: AgentTool<any>, args: unknown, record: ToolFailureMemoryRecord | undefined): ToolFailureRecoveryAdmission;
57
63
  apply(effect: ToolFailureRecoveryGateEffect | undefined): ToolFailureRecoveryHalt | undefined;
58
64
  isHalted(): boolean;
59
65
  getHalt(): ToolFailureRecoveryHalt | undefined;
60
66
  private hasUnchangedRetryRemaining;
67
+ private ensureRestoredState;
61
68
  private getOrCreateState;
62
69
  private observeFailure;
63
70
  private observeSuccess;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-failure-recovery-gate.d.ts","sourceRoot":"","sources":["../src/tool-failure-recovery-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,KAAK,uBAAuB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACX,SAAS,EAET,8BAA8B,EAC9B,eAAe,EACf,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,0CAA0C,IAAI,CAAC;AAY5D,MAAM,WAAW,+BAA+B;IAC/C,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,6BAA6B,GACtC;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACpD,WAAW,CAAC,EAAE,+BAA+B,CAAC;CAC7C,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,eAAe,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC;AAElG,MAAM,MAAM,4BAA4B,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,+BAA+B,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3F;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,uBAAuB,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA4BL,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2C;IAChF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAsC;IAEpD,WAAW,CACV,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,EAC1B,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,EACzC,WAAW,EAAE,+BAA+B,GAAG,SAAS,GACtD,uBAAuB,CAQzB;IAED,KAAK,CACJ,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EACpB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAAG,SAAS,GACzC,4BAA4B,CAgE9B;IAED,KAAK,CAAC,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAAG,uBAAuB,GAAG,SAAS,CAQ5F;IAED,QAAQ,IAAI,OAAO,CAElB;IAED,OAAO,IAAI,uBAAuB,GAAG,SAAS,CAE7C;IAED,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,cAAc;IAkDtB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,kBAAkB;CAS1B"}
1
+ {"version":3,"file":"tool-failure-recovery-gate.d.ts","sourceRoot":"","sources":["../src/tool-failure-recovery-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAON,KAAK,uBAAuB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACX,YAAY,EACZ,SAAS,EAET,8BAA8B,EAC9B,eAAe,EACf,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,0CAA0C,IAAI,CAAC;AAY5D,MAAM,WAAW,+BAA+B;IAC/C,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,6BAA6B,GACtC;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACpD,WAAW,CAAC,EAAE,+BAA+B,CAAC;CAC7C,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,eAAe,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC;AAElG,MAAM,MAAM,4BAA4B,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,+BAA+B,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3F;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,uBAAuB,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA4BL,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2C;IAChF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAsC;IAEpD,OAAO,IAAI,OAAO,CAEjB;IAED,mBAAmB,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAwB3D;IAED,WAAW,CACV,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,EAC1B,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,EACzC,WAAW,EAAE,+BAA+B,GAAG,SAAS,GACtD,uBAAuB,CAQzB;IAED,KAAK,CACJ,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EACpB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,uBAAuB,GAAG,SAAS,GACzC,4BAA4B,CAgE9B;IAED,KAAK,CAAC,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAAG,uBAAuB,GAAG,SAAS,CAQ5F;IAED,QAAQ,IAAI,OAAO,CAElB;IAED,OAAO,IAAI,uBAAuB,GAAG,SAAS,CAE7C;IAED,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,cAAc;IAkDtB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,kBAAkB;CAS1B"}