@caupulican/pi-agent-core 0.90.7 → 0.90.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-loop.d.ts +1 -1
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +1 -1
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +4 -0
- package/dist/agent.js.map +1 -1
- package/dist/compaction/compaction.d.ts.map +1 -1
- package/dist/compaction/compaction.js +1 -34
- package/dist/compaction/compaction.js.map +1 -1
- package/dist/compaction/extraction.d.ts +1 -0
- package/dist/compaction/extraction.d.ts.map +1 -1
- package/dist/compaction/extraction.js +1 -1
- package/dist/compaction/extraction.js.map +1 -1
- package/dist/compaction/utils.d.ts +13 -1
- package/dist/compaction/utils.d.ts.map +1 -1
- package/dist/compaction/utils.js +49 -1
- package/dist/compaction/utils.js.map +1 -1
- package/dist/compaction/verification.d.ts.map +1 -1
- package/dist/compaction/verification.js +154 -6
- package/dist/compaction/verification.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/provider-request-planner.d.ts +8 -0
- package/dist/provider-request-planner.d.ts.map +1 -1
- package/dist/provider-request-planner.js +8 -1
- package/dist/provider-request-planner.js.map +1 -1
- package/dist/provider-tool-projection.d.ts.map +1 -1
- package/dist/provider-tool-projection.js +4 -11
- package/dist/provider-tool-projection.js.map +1 -1
- package/dist/tool-failure-memory.d.ts.map +1 -1
- package/dist/tool-failure-memory.js +27 -3
- package/dist/tool-failure-memory.js.map +1 -1
- package/dist/tool-protocol-residue.d.ts.map +1 -1
- package/dist/tool-protocol-residue.js +58 -18
- package/dist/tool-protocol-residue.js.map +1 -1
- package/package.json +2 -2
package/dist/agent-loop.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { EventStream } from "@caupulican/pi-ai/event-stream";
|
|
6
6
|
import { ToolFailureRecoveryGate } from "./tool-failure-recovery-gate.ts";
|
|
7
7
|
import type { AgentContext, AgentEvent, AgentLoopConfig, AgentMessage, AgentToolCall, StreamFn, ToolCallRepairInfo } from "./types.ts";
|
|
8
|
-
export { resolveRequestPreflightMaxTokens } from "./provider-request-planner.ts";
|
|
8
|
+
export { narrowRequestMaxTokens, resolveRequestPreflightMaxTokens } from "./provider-request-planner.ts";
|
|
9
9
|
export type AgentEventSink = (event: AgentEvent) => Promise<void> | void;
|
|
10
10
|
/** Bounded no-progress state retained across host-owned continuations of one logical prompt. */
|
|
11
11
|
export interface AgentLoopContinuationState {
|
package/dist/agent-loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AA4B7D,OAAO,EAGN,uBAAuB,EAGvB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EAEZ,aAAa,EAEb,QAAQ,EACR,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AA4B7D,OAAO,EAGN,uBAAuB,EAGvB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EAEZ,aAAa,EAEb,QAAQ,EACR,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEzG,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzE,gGAAgG;AAChG,MAAM,WAAW,0BAA0B;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uBAAuB,EAAE,uBAAuB,CAAC;CACjD;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAEzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,GACjB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAIzC;AAuBD,wBAAsB,YAAY,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,EACnB,iBAAiB,GAAE,0BAA+D,GAChF,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBzB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,EACnB,iBAAiB,GAAE,0BAA+D,GAChF,OAAO,CAAC,YAAY,EAAE,CAAC,CAWzB;AAoVD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAExC;AAiiCD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAO7F"}
|
package/dist/agent-loop.js
CHANGED
|
@@ -12,7 +12,7 @@ import { appendMandatoryToolFailureDeliveryPrompt } from "./tool-failure-recover
|
|
|
12
12
|
import { rejectNativeToolProtocolResidue } from "./tool-protocol-residue.js";
|
|
13
13
|
import { DEFAULT_MAX_STALL_TURNS } from "./types.js";
|
|
14
14
|
import { createEmptyUsage } from "./usage.js";
|
|
15
|
-
export { resolveRequestPreflightMaxTokens } from "./provider-request-planner.js";
|
|
15
|
+
export { narrowRequestMaxTokens, resolveRequestPreflightMaxTokens } from "./provider-request-planner.js";
|
|
16
16
|
export function createAgentLoopContinuationState() {
|
|
17
17
|
return { stallWindow: [], toolFailureRecoveryGate: new ToolFailureRecoveryGate() };
|
|
18
18
|
}
|
package/dist/agent-loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent loop that works with AgentMessage throughout.\n * Transforms to Message[] only at the LLM call boundary.\n */\n\nimport { EventStream } from \"@caupulican/pi-ai/event-stream\";\nimport {\n\tformatToolRepairStandingRule,\n\tREPEATED_SUCCESSFUL_TOOL_CALL_FAILURE,\n\ttype ToolFailurePhase,\n} from \"@caupulican/pi-ai/tool-repair-registry\";\nimport type { AssistantMessage, ToolResultMessage } from \"@caupulican/pi-ai/types\";\nimport {\n\ttype ToolArgumentExecutionOutcome,\n\tToolArgumentValidationError,\n\ttype ToolArgumentValidationTelemetryEvent,\n\tvalidateToolArguments,\n} from \"@caupulican/pi-ai/validation\";\nimport { startPlannedAgentProviderRequest } from \"./provider-request-planner.ts\";\nimport {\n\tassessToolFailure,\n\tclearToolFailure,\n\tcreateRepeatedToolFailureResult,\n\tcreateToolFailureMemoryTracker,\n\tcreateToolFailureOperationExhaustedResult,\n\tcreateToolFailureRecoveryExhaustedResult,\n\tcreateToolFailureResult,\n\tgetUnresolvedToolFailure,\n\tnormalizeToolSignature,\n\trememberToolFailure,\n\ttype ToolFailureMemoryTracker,\n\ttoolFailureCorrection,\n} from \"./tool-failure-memory.ts\";\nimport {\n\tTOOL_FAILURE_RECOVERY_ACCOUNTING_WAVE_SIZE,\n\ttype ToolFailureExecutionReservation,\n\tToolFailureRecoveryGate,\n\ttype ToolFailureRecoveryGateEffect,\n\ttype ToolFailureRecoveryHalt,\n} from \"./tool-failure-recovery-gate.ts\";\nimport { appendMandatoryToolFailureDeliveryPrompt } from \"./tool-failure-recovery-protocol.ts\";\nimport { rejectNativeToolProtocolResidue } from \"./tool-protocol-residue.ts\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tAgentToolCall,\n\tAgentToolResult,\n\tStreamFn,\n\tToolCallRepairInfo,\n} from \"./types.ts\";\nimport { DEFAULT_MAX_STALL_TURNS } from \"./types.ts\";\nimport { createEmptyUsage } from \"./usage.ts\";\n\nexport { resolveRequestPreflightMaxTokens } from \"./provider-request-planner.ts\";\n\nexport type AgentEventSink = (event: AgentEvent) => Promise<void> | void;\n\n/** Bounded no-progress state retained across host-owned continuations of one logical prompt. */\nexport interface AgentLoopContinuationState {\n\tstallWindow: string[];\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate;\n}\n\nexport function createAgentLoopContinuationState(): AgentLoopContinuationState {\n\treturn { stallWindow: [], toolFailureRecoveryGate: new ToolFailureRecoveryGate() };\n}\n\n/**\n * Start an agent loop with a new prompt message.\n * The prompt is added to the context and events are emitted for it.\n */\nexport function agentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\treturn streamAgentLoop(config, signal, (emit) => runAgentLoop(prompts, context, config, emit, signal, streamFn));\n}\n\n/**\n * Continue an agent loop from the current context without adding a new message.\n * Used for retries - context already has user message or tool results.\n *\n * **Important:** The last message in context must convert to a `user` or `toolResult` message\n * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.\n * This cannot be validated here since `convertToLlm` is only called once per turn.\n */\nexport function agentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tassertContinuableContext(context);\n\n\treturn streamAgentLoop(config, signal, (emit) => runAgentLoopContinue(context, config, emit, signal, streamFn));\n}\n\nfunction streamAgentLoop(\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\trun: (emit: AgentEventSink) => Promise<AgentMessage[]>,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tconst stream = createAgentStream();\n\tvoid run(async (event) => {\n\t\tstream.push(event);\n\t})\n\t\t.catch(async (error) => {\n\t\t\tconst messages = [createLoopFailureMessage(error, config, signal?.aborted ?? false)];\n\t\t\tstream.push({ type: \"agent_end\", messages });\n\t\t\treturn messages;\n\t\t})\n\t\t.then((messages) => {\n\t\t\tstream.end(messages);\n\t\t});\n\n\treturn stream;\n}\n\nexport async function runAgentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\temit: AgentEventSink,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<AgentMessage[]> {\n\tconst newMessages: AgentMessage[] = [...prompts];\n\tconst currentContext: AgentContext = {\n\t\t...context,\n\t\tmessages: [...context.messages, ...prompts],\n\t};\n\n\tawait emit({ type: \"agent_start\" });\n\tawait emit({ type: \"turn_start\" });\n\tfor (const prompt of prompts) {\n\t\tawait emit({ type: \"message_start\", message: prompt });\n\t\tawait emit({ type: \"message_end\", message: prompt });\n\t}\n\n\tawait runLoop(currentContext, newMessages, config, signal, emit, streamFn, continuationState);\n\treturn newMessages;\n}\n\nexport async function runAgentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\temit: AgentEventSink,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<AgentMessage[]> {\n\tassertContinuableContext(context);\n\n\tconst newMessages: AgentMessage[] = [];\n\tconst currentContext: AgentContext = { ...context, messages: [...context.messages] };\n\n\tawait emit({ type: \"agent_start\" });\n\tawait emit({ type: \"turn_start\" });\n\n\tawait runLoop(currentContext, newMessages, config, signal, emit, streamFn, continuationState);\n\treturn newMessages;\n}\n\nfunction assertContinuableContext(context: AgentContext): void {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n}\n\nfunction createLoopFailureMessage(error: unknown, config: AgentLoopConfig, aborted: boolean): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text: \"\" }],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: aborted ? \"aborted\" : \"error\",\n\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createMandatoryRecoveryDeliveryFallback(\n\thalt: ToolFailureRecoveryHalt,\n\tconfig: AgentLoopConfig,\n): AssistantMessage {\n\tconst diagnostic = halt.record.diagnostic ?? halt.diagnostic;\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: `Tool recovery stopped for ${halt.record.tool}: ${diagnostic} Required recovery: ${halt.record.correction}`,\n\t\t\t},\n\t\t],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createAgentStream(): EventStream<AgentEvent, AgentMessage[]> {\n\treturn new EventStream<AgentEvent, AgentMessage[]>(\n\t\t(event: AgentEvent) => event.type === \"agent_end\",\n\t\t(event: AgentEvent) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\n/**\n * How many `stallLimit`-length periods the runaway-loop window spans. A window of `stallLimit * P`\n * turns lets the count-based detector catch oscillating cycles of period up to `P` (each signature in a\n * period-k cycle recurs ~window/k times), not just back-to-back repeats. Beyond this the cycle is loose\n * enough that it's indistinguishable from legitimate varied work, so we don't chase it.\n */\nconst STALL_WINDOW_PERIODS = 4;\n\nfunction textProtocolOperationArguments(toolCall: AgentToolCall): unknown {\n\tconst args: unknown = toolCall.arguments;\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) return args ?? null;\n\tconst record = args as Record<string, unknown>;\n\tif ((toolCall.name === \"write\" || toolCall.name === \"edit\") && typeof record.path === \"string\") {\n\t\treturn { path: record.path };\n\t}\n\treturn args;\n}\n\nfunction textProtocolBatchSignature(toolCalls: readonly AgentToolCall[]): string {\n\treturn normalizeToolSignature(\n\t\ttoolCalls.map((toolCall) => [toolCall.name, textProtocolOperationArguments(toolCall)]),\n\t);\n}\n\nfunction toolCallRecord(toolCall: AgentToolCall): Record<string, unknown> | undefined {\n\tconst args: unknown = toolCall.arguments;\n\treturn args && typeof args === \"object\" && !Array.isArray(args) ? (args as Record<string, unknown>) : undefined;\n}\n\nfunction toolResultPhase(result: ToolResultMessage): string | undefined {\n\tif (!result.details || typeof result.details !== \"object\" || Array.isArray(result.details)) return undefined;\n\tconst phase = (result.details as Record<string, unknown>).phase;\n\treturn typeof phase === \"string\" ? phase : undefined;\n}\n\nfunction repeatsSuccessfulTextProtocolBatch(\n\tincomingSignature: string,\n\ttoolCalls: readonly AgentToolCall[],\n\tprevious: SuccessfulTextProtocolBatch | undefined,\n): boolean {\n\tif (!previous) return false;\n\tif (incomingSignature === previous.signature) return true;\n\tif (toolCalls.length !== previous.calls.length || toolCalls.length !== previous.messages.length) return false;\n\treturn toolCalls.every((toolCall, index) => {\n\t\tconst previousCall = previous.calls[index];\n\t\tconst previousResult = previous.messages[index];\n\t\tif (!previousCall || !previousResult) return false;\n\t\tconst currentArgs = toolCallRecord(toolCall);\n\t\tconst previousArgs = toolCallRecord(previousCall);\n\t\tif (currentArgs?.path !== previousArgs?.path) return false;\n\t\tconst phase = toolResultPhase(previousResult);\n\t\tif (phase === \"written\") return toolCall.name === \"write\" && previousCall.name === \"write\";\n\t\treturn phase === \"edited\" && toolCall.name === \"edit\" && previousCall.name === \"edit\";\n\t});\n}\n\n/**\n * Main loop logic shared by agentLoop and agentLoopContinue.\n */\nasync function runLoop(\n\tinitialContext: AgentContext,\n\tnewMessages: AgentMessage[],\n\tinitialConfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<void> {\n\tlet currentContext = initialContext;\n\tlet config = initialConfig;\n\tlet firstTurn = true;\n\t// Runaway-loop backstop state: a sliding window of recent NORMALIZED tool-call signatures. A model\n\t// wedged repeating the same action makes no progress but keeps spending tokens; if one signature\n\t// recurs `stallLimit` times within the window we stop gracefully. Signatures are normalized so\n\t// volatile args (timestamps/UUIDs/nonces that change every call) can't disguise an otherwise-\n\t// identical call (bug #28). The window spans `stallLimit * STALL_WINDOW_PERIODS` turns so periodic\n\t// oscillation is caught too, not just back-to-back repeats: a cycle of period P repeats each\n\t// signature ~window/P times, so any P up to STALL_WINDOW_PERIODS reaches the threshold before the\n\t// window slides past it. Counts only turns that issued tool calls, so varied/long work never trips\n\t// it. `0` disables.\n\tconst stallLimit = config.maxStallTurns ?? DEFAULT_MAX_STALL_TURNS;\n\tconst stallWindow = continuationState.stallWindow;\n\tconst validationFailureTracker: ToolValidationFailureTracker = { repeats: 0 };\n\tconst repairTeachTracker: ToolRepairTeachTracker = new Map();\n\tlet toolFailureMemory = createToolFailureMemoryTracker(currentContext.messages);\n\tconst toolFailureRecoveryGate = continuationState.toolFailureRecoveryGate;\n\tlet mandatoryRecoveryDeliveryPending = false;\n\tlet lastSuccessfulTextProtocolBatch: SuccessfulTextProtocolBatch | undefined;\n\t// Check for steering messages at start (user may have typed while waiting)\n\tlet pendingMessages: AgentMessage[] = (await config.getSteeringMessages?.()) || [];\n\n\t// Outer loop: continues when queued follow-up messages arrive after agent would stop\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\n\t\t// Inner loop: process tool calls and steering messages\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tawait emit({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\t// Process pending messages (inject before next assistant response)\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tlastSuccessfulTextProtocolBatch = undefined;\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\tawait emit({ type: \"message_start\", message });\n\t\t\t\t\tawait emit({ type: \"message_end\", message });\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\t// Recovery exhaustion receives exactly one provider turn without tools so the mandatory\n\t\t\t// diagnostic can reach the user instead of terminating on an undelivered tool result.\n\t\t\tconst recoveryDeliveryTurn = mandatoryRecoveryDeliveryPending;\n\t\t\tconst recoveryDeliveryHalt = recoveryDeliveryTurn ? toolFailureRecoveryGate.getHalt() : undefined;\n\t\t\tif (recoveryDeliveryTurn && !recoveryDeliveryHalt) {\n\t\t\t\tthrow new Error(\"Mandatory recovery delivery started without a recovery halt\");\n\t\t\t}\n\t\t\tconst responseContext = recoveryDeliveryHalt\n\t\t\t\t? {\n\t\t\t\t\t\t...currentContext,\n\t\t\t\t\t\tsystemPrompt: appendMandatoryToolFailureDeliveryPrompt(currentContext.systemPrompt, {\n\t\t\t\t\t\t\ttool: recoveryDeliveryHalt.record.tool,\n\t\t\t\t\t\t\tfailureCode: recoveryDeliveryHalt.record.failureCode,\n\t\t\t\t\t\t\tdiagnostic: recoveryDeliveryHalt.record.diagnostic ?? recoveryDeliveryHalt.diagnostic,\n\t\t\t\t\t\t\trequiredAction: recoveryDeliveryHalt.record.correction,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t}\n\t\t\t\t: currentContext;\n\t\t\tconst message = await streamAssistantResponse(responseContext, config, signal, emit, streamFn);\n\t\t\tnewMessages.push(message);\n\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tawait emit({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check for tool calls\n\t\t\tconst toolCalls = message.content.filter((c) => c.type === \"toolCall\");\n\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tif (recoveryDeliveryTurn) {\n\t\t\t\tif (!recoveryDeliveryHalt) {\n\t\t\t\t\tthrow new Error(\"Mandatory recovery delivery continued without a recovery halt\");\n\t\t\t\t}\n\t\t\t\tif (toolCalls.length > 0) {\n\t\t\t\t\ttoolResults.push(...(await rejectRecoveryDeliveryToolCalls(toolCalls, recoveryDeliveryHalt, emit)));\n\t\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait emit({ type: \"turn_end\", message, toolResults });\n\t\t\t\tif (toolCalls.length > 0) {\n\t\t\t\t\tconst fallback = createMandatoryRecoveryDeliveryFallback(recoveryDeliveryHalt, config);\n\t\t\t\t\tcurrentContext.messages.push(fallback);\n\t\t\t\t\tnewMessages.push(fallback);\n\t\t\t\t\tawait emit({ type: \"turn_start\" });\n\t\t\t\t\tawait emit({ type: \"message_start\", message: fallback });\n\t\t\t\t\tawait emit({ type: \"message_end\", message: fallback });\n\t\t\t\t\tawait emit({ type: \"turn_end\", message: fallback, toolResults: [] });\n\t\t\t\t}\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thasMoreToolCalls = false;\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tconst textProtocolBatch = toolCalls.every((toolCall) => toolCall.source === \"text-protocol\");\n\t\t\t\tconst incomingBatchSignature = textProtocolBatchSignature(toolCalls);\n\t\t\t\tconst previousSuccessfulTextProtocolResults =\n\t\t\t\t\ttextProtocolBatch &&\n\t\t\t\t\trepeatsSuccessfulTextProtocolBatch(incomingBatchSignature, toolCalls, lastSuccessfulTextProtocolBatch)\n\t\t\t\t\t\t? lastSuccessfulTextProtocolBatch?.messages\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst executedToolBatch = await executeToolCalls(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tmessage,\n\t\t\t\t\tconfig,\n\t\t\t\t\tvalidationFailureTracker,\n\t\t\t\t\trepairTeachTracker,\n\t\t\t\t\ttoolFailureMemory,\n\t\t\t\t\ttoolFailureRecoveryGate,\n\t\t\t\t\tpreviousSuccessfulTextProtocolResults,\n\t\t\t\t\tsignal,\n\t\t\t\t\temit,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...executedToolBatch.messages);\n\t\t\t\tif (toolFailureRecoveryGate.isHalted()) {\n\t\t\t\t\tmandatoryRecoveryDeliveryPending = true;\n\t\t\t\t\thasMoreToolCalls = true;\n\t\t\t\t} else {\n\t\t\t\t\thasMoreToolCalls = !executedToolBatch.terminate;\n\t\t\t\t}\n\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t}\n\t\t\t\tif (!previousSuccessfulTextProtocolResults) {\n\t\t\t\t\tlastSuccessfulTextProtocolBatch =\n\t\t\t\t\t\ttextProtocolBatch &&\n\t\t\t\t\t\ttoolResults.length === toolCalls.length &&\n\t\t\t\t\t\ttoolResults.every((result) => !result.isError)\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tsignature: textProtocolBatchSignature(toolCalls),\n\t\t\t\t\t\t\t\t\tmessages: toolResults,\n\t\t\t\t\t\t\t\t\tcalls: toolCalls,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlastSuccessfulTextProtocolBatch = undefined;\n\t\t\t}\n\n\t\t\tawait emit({ type: \"turn_end\", message, toolResults });\n\n\t\t\t// Runaway-loop backstop (cost guard): detect a model stuck repeating one action.\n\t\t\tif (!mandatoryRecoveryDeliveryPending && stallLimit > 0 && toolCalls.length > 0) {\n\t\t\t\tconst signature = normalizeToolSignature(toolCalls.map((c) => [c.name, c.arguments ?? null]));\n\t\t\t\tstallWindow.push(signature);\n\t\t\t\tif (stallWindow.length > stallLimit * STALL_WINDOW_PERIODS) stallWindow.shift();\n\t\t\t\tconst repeats = stallWindow.reduce((n, s) => (s === signature ? n + 1 : n), 0);\n\t\t\t\tif (repeats >= stallLimit) {\n\t\t\t\t\tconfig.onRunawayStop?.({ signature, repeats });\n\t\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nextTurnContext = {\n\t\t\t\tmessage,\n\t\t\t\ttoolResults,\n\t\t\t\tcontext: currentContext,\n\t\t\t\tnewMessages,\n\t\t\t};\n\t\t\tconst nextTurnSnapshot = await config.prepareNextTurn?.(nextTurnContext);\n\t\t\tif (nextTurnSnapshot) {\n\t\t\t\tcurrentContext = nextTurnSnapshot.context ?? currentContext;\n\t\t\t\tif (nextTurnSnapshot.context) {\n\t\t\t\t\ttoolFailureMemory = createToolFailureMemoryTracker(currentContext.messages);\n\t\t\t\t}\n\t\t\t\tconfig = {\n\t\t\t\t\t...config,\n\t\t\t\t\tmodel: nextTurnSnapshot.model ?? config.model,\n\t\t\t\t\treasoning: nextTurnSnapshot.thinkingLevel ?? config.reasoning,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!mandatoryRecoveryDeliveryPending &&\n\t\t\t\t(await config.shouldStopAfterTurn?.({\n\t\t\t\t\tmessage,\n\t\t\t\t\ttoolResults,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t\tnewMessages,\n\t\t\t\t}))\n\t\t\t) {\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t}\n\n\t\t// Agent would stop here. Check for follow-up messages.\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\t// Set as pending so inner loop processes them\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// No more messages, exit\n\t\tbreak;\n\t}\n\n\tawait emit({ type: \"agent_end\", messages: newMessages });\n}\n\n/**\n * Start one provider request through the canonical agent-loop boundary.\n *\n * All callers, including host-owned tool-free finalization, receive the same failure-context\n * sanitization, context transformation/conversion, dynamic authentication, request-local reasoning,\n * and request preflight immediately before transport.\n */\nexport async function startAgentProviderRequest(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstreamFn?: StreamFn,\n): Promise<Awaited<ReturnType<StreamFn>>> {\n\treturn startPlannedAgentProviderRequest(context, config, signal, streamFn);\n}\n\n/**\n * Stream an assistant response from the LLM.\n * This is where AgentMessage[] gets transformed to Message[] for the LLM.\n */\nasync function streamAssistantResponse(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n\tstreamFn?: StreamFn,\n): Promise<AssistantMessage> {\n\tconst response = await startAgentProviderRequest(context, config, signal, streamFn);\n\n\tlet partialMessage: AssistantMessage | null = null;\n\tlet addedPartial = false;\n\n\tresponseEvents: for await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tawait emit({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tawait emit({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"done\":\n\t\t\tcase \"error\":\n\t\t\t\tbreak responseEvents;\n\t\t}\n\t}\n\n\tconst finalMessage = rejectNativeToolProtocolResidue(\n\t\tawait response.result(),\n\t\tcontext.tools ?? [],\n\t\tBoolean(config.textToolCallProtocol),\n\t);\n\tif (addedPartial) {\n\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t} else {\n\t\tcontext.messages.push(finalMessage);\n\t\tawait emit({ type: \"message_start\", message: { ...finalMessage } });\n\t}\n\tawait emit({ type: \"message_end\", message: finalMessage });\n\treturn finalMessage;\n}\n\ninterface ToolExecutionContext {\n\tcontext: AgentContext;\n\tassistantMessage: AssistantMessage;\n\tconfig: AgentLoopConfig;\n\tvalidationFailureTracker: ToolValidationFailureTracker;\n\trepairTeachTracker: ToolRepairTeachTracker;\n\ttoolFailureMemory: ToolFailureMemoryTracker;\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate;\n\tpreviousSuccessfulResults?: readonly ToolResultMessage[];\n\tsignal?: AbortSignal;\n\temit: AgentEventSink;\n}\n\n/**\n * Execute tool calls from an assistant message.\n */\nasync function executeToolCalls(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tconfig: AgentLoopConfig,\n\tvalidationFailureTracker: ToolValidationFailureTracker,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tpreviousSuccessfulTextProtocolResults: readonly ToolResultMessage[] | undefined,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<ExecutedToolCallBatch> {\n\tconst toolCalls = assistantMessage.content.filter((c) => c.type === \"toolCall\");\n\tconst hasSequentialToolCall = toolCalls.some(\n\t\t(tc) => currentContext.tools?.find((t) => t.name === tc.name)?.executionMode === \"sequential\",\n\t);\n\tconst execCtx: ToolExecutionContext = {\n\t\tcontext: currentContext,\n\t\tassistantMessage,\n\t\tconfig,\n\t\tvalidationFailureTracker,\n\t\trepairTeachTracker,\n\t\ttoolFailureMemory,\n\t\ttoolFailureRecoveryGate,\n\t\tpreviousSuccessfulResults: previousSuccessfulTextProtocolResults,\n\t\tsignal,\n\t\temit,\n\t};\n\tif (config.toolExecution === \"sequential\" || hasSequentialToolCall) {\n\t\treturn executeToolCallsSequential(execCtx, toolCalls);\n\t}\n\treturn executeToolCallsParallel(execCtx, toolCalls);\n}\n\ntype ExecutedToolCallBatch = {\n\tmessages: ToolResultMessage[];\n\tterminate: boolean;\n};\n\ntype SuccessfulTextProtocolBatch = {\n\tsignature: string;\n\tmessages: readonly ToolResultMessage[];\n\tcalls: readonly AgentToolCall[];\n};\n\ntype StartedToolCall =\n\t| { kind: \"finalized\"; finalized: FinalizedToolCallOutcome }\n\t| { kind: \"prepared\"; preparation: PreparedToolCall };\n\nasync function prepareAndStartToolCall(\n\texecCtx: ToolExecutionContext,\n\ttoolCall: AgentToolCall,\n\tindex: number,\n): Promise<StartedToolCall> {\n\tconst preparation = execCtx.previousSuccessfulResults\n\t\t? createRepeatedSuccessfulToolCallOutcome(execCtx.previousSuccessfulResults[index])\n\t\t: await prepareToolCall(\n\t\t\t\texecCtx.context,\n\t\t\t\texecCtx.assistantMessage,\n\t\t\t\ttoolCall,\n\t\t\t\texecCtx.config,\n\t\t\t\texecCtx.validationFailureTracker,\n\t\t\t\texecCtx.toolFailureMemory,\n\t\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\t\texecCtx.signal,\n\t\t\t);\n\tawait emitToolExecutionStart(toolCall, execCtx.emit);\n\tif (preparation.kind === \"immediate\") {\n\t\temitToolArgumentValidationTelemetry(execCtx.config, preparation.validationEvent, \"not_run\", \"none\");\n\t\treturn {\n\t\t\tkind: \"finalized\",\n\t\t\tfinalized: finalizeRejectedToolCall(\n\t\t\t\ttoolCall,\n\t\t\t\tpreparation,\n\t\t\t\texecCtx.toolFailureMemory,\n\t\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\t),\n\t\t};\n\t}\n\treturn { kind: \"prepared\", preparation };\n}\n\nasync function finalizeStartedToolCall(\n\texecCtx: ToolExecutionContext,\n\tstarted: StartedToolCall,\n): Promise<FinalizedToolCallOutcome> {\n\tif (started.kind === \"finalized\") return started.finalized;\n\treturn executeAndFinalizePreparedToolCall(\n\t\texecCtx.context,\n\t\texecCtx.assistantMessage,\n\t\tstarted.preparation,\n\t\texecCtx.config,\n\t\texecCtx.repairTeachTracker,\n\t\texecCtx.toolFailureMemory,\n\t\texecCtx.toolFailureRecoveryGate,\n\t\texecCtx.signal,\n\t\texecCtx.emit,\n\t);\n}\n\nasync function executeToolCallsSequential(\n\texecCtx: ToolExecutionContext,\n\ttoolCalls: AgentToolCall[],\n): Promise<ExecutedToolCallBatch> {\n\tconst finalizedCalls: FinalizedToolCallOutcome[] = [];\n\tconst messages: ToolResultMessage[] = [];\n\n\tfor (const [index, toolCall] of toolCalls.entries()) {\n\t\tconst started = await prepareAndStartToolCall(execCtx, toolCall, index);\n\t\tconst finalized = applyToolFailureRecoveryEffect(\n\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\tawait finalizeStartedToolCall(execCtx, started),\n\t\t);\n\n\t\tawait emitToolExecutionEnd(finalized, execCtx.emit);\n\t\tconst toolResultMessage = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(toolResultMessage, execCtx.emit);\n\t\tfinalizedCalls.push(finalized);\n\t\tmessages.push(toolResultMessage);\n\n\t\tif (execCtx.signal?.aborted) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\tmessages,\n\t\tterminate: execCtx.toolFailureRecoveryGate.isHalted() || shouldTerminateToolBatch(finalizedCalls),\n\t};\n}\n\nasync function executeToolCallsParallel(\n\texecCtx: ToolExecutionContext,\n\ttoolCalls: AgentToolCall[],\n): Promise<ExecutedToolCallBatch> {\n\tconst orderedFinalizedCalls: FinalizedToolCallOutcome[] = [];\n\tlet nextIndex = 0;\n\t// Account each bounded concurrent wave before launching more calls. Otherwise a single\n\t// assistant batch could start an unbounded number of failures before the circuit observes one.\n\twhile (nextIndex < toolCalls.length && !execCtx.signal?.aborted) {\n\t\tconst waveEnd = Math.min(nextIndex + TOOL_FAILURE_RECOVERY_ACCOUNTING_WAVE_SIZE, toolCalls.length);\n\t\tconst wave: FinalizedToolCallEntry[] = [];\n\t\tconst completionOrder: FinalizedToolCallOutcome[] = [];\n\t\tfor (; nextIndex < waveEnd; nextIndex++) {\n\t\t\tconst toolCall = toolCalls[nextIndex];\n\t\t\tconst started = await prepareAndStartToolCall(execCtx, toolCall, nextIndex);\n\t\t\tif (started.kind === \"finalized\") {\n\t\t\t\tawait emitToolExecutionEnd(started.finalized, execCtx.emit);\n\t\t\t\twave.push(started.finalized);\n\t\t\t} else {\n\t\t\t\twave.push(async () => {\n\t\t\t\t\tconst finalized = await finalizeStartedToolCall(execCtx, started);\n\t\t\t\t\tcompletionOrder.push(finalized);\n\t\t\t\t\treturn finalized;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (execCtx.signal?.aborted) {\n\t\t\t\tnextIndex++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst unappliedWave = await Promise.all(\n\t\t\twave.map((entry) => (typeof entry === \"function\" ? entry() : Promise.resolve(entry))),\n\t\t);\n\t\tconst appliedByOriginal = new Map<FinalizedToolCallOutcome, FinalizedToolCallOutcome>();\n\t\tconst finalizedWave = unappliedWave.map((finalized) => {\n\t\t\tconst applied = applyToolFailureRecoveryEffect(execCtx.toolFailureRecoveryGate, finalized);\n\t\t\tappliedByOriginal.set(finalized, applied);\n\t\t\treturn applied;\n\t\t});\n\t\tfor (const finalized of completionOrder) {\n\t\t\tawait emitToolExecutionEnd(appliedByOriginal.get(finalized) ?? finalized, execCtx.emit);\n\t\t}\n\t\torderedFinalizedCalls.push(...finalizedWave);\n\t}\n\tconst messages: ToolResultMessage[] = [];\n\tfor (const finalized of orderedFinalizedCalls) {\n\t\tconst toolResultMessage = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(toolResultMessage, execCtx.emit);\n\t\tmessages.push(toolResultMessage);\n\t}\n\n\treturn {\n\t\tmessages,\n\t\tterminate: execCtx.toolFailureRecoveryGate.isHalted() || shouldTerminateToolBatch(orderedFinalizedCalls),\n\t};\n}\n\ntype PreparedToolCall = {\n\tkind: \"prepared\";\n\ttoolCall: AgentToolCall;\n\ttool: AgentTool<any>;\n\targs: unknown;\n\texecutionGateReservation?: ToolFailureExecutionReservation;\n\tvalidationEvent?: ToolArgumentValidationTelemetryEvent;\n};\n\ntype ImmediateToolCallOutcome = {\n\tkind: \"immediate\";\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tcorrection: string;\n\tdiagnostic?: string;\n\trepeatedSuccessfulCall?: { previousToolCallId: string };\n\trepeatedToolFailure?: boolean;\n\texecutionGateReservation?: ToolFailureExecutionReservation;\n\tvalidationEvent?: ToolArgumentValidationTelemetryEvent;\n};\n\ntype ExecutedToolCallOutcome = {\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\terrorClass?: string;\n\tfailureMessage?: string;\n};\n\ntype FinalizedToolCallOutcome = {\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\texecutionGateEffect?: ToolFailureRecoveryGateEffect;\n};\n\nfunction applyToolFailureRecoveryEffect(\n\tgate: ToolFailureRecoveryGate,\n\tfinalized: FinalizedToolCallOutcome,\n): FinalizedToolCallOutcome {\n\tconst halt = gate.apply(finalized.executionGateEffect);\n\tif (!halt) return finalized;\n\treturn createRecoveryExhaustedToolCallOutcome(finalized, halt);\n}\n\nfunction createRecoveryExhaustedToolCallOutcome(\n\tfinalized: FinalizedToolCallOutcome,\n\thalt: ToolFailureRecoveryHalt,\n): FinalizedToolCallOutcome {\n\tconst exhaustedResult = createToolFailureRecoveryExhaustedResult(halt.record, halt.diagnostic);\n\treturn {\n\t\t...finalized,\n\t\tresult: {\n\t\t\t...exhaustedResult,\n\t\t\t...(finalized.result.usage ? { usage: finalized.result.usage } : {}),\n\t\t},\n\t\tisError: true,\n\t};\n}\n\ntype FinalizedToolCallEntry = FinalizedToolCallOutcome | (() => Promise<FinalizedToolCallOutcome>);\n\ntype ToolValidationFailureTracker = {\n\tsignature?: string;\n\trepeats: number;\n\tescalatedSignature?: string;\n};\n\ntype ToolRepairTeachTracker = Map<string, number>;\n\nconst DEFAULT_TOOL_VALIDATION_ESCALATION_THRESHOLD = 3;\nconst TOOL_REPAIR_TEACH_EVERY = 5;\nconst REPEATED_SUCCESS_RESULT_MAX_CHARS = 2_048;\n\nfunction createRepeatedSuccessfulToolCallOutcome(\n\tpreviousResult: ToolResultMessage | undefined,\n): ImmediateToolCallOutcome {\n\tconst previousText = previousResult?.content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\")\n\t\t.slice(0, REPEATED_SUCCESS_RESULT_MAX_CHARS);\n\tconst diagnostic = previousText\n\t\t? `${REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic} Previous successful result: ${previousText}`\n\t\t: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic;\n\treturn {\n\t\tkind: \"immediate\",\n\t\tresult: createErrorToolResult(diagnostic),\n\t\tisError: true,\n\t\tphase: \"execution\",\n\t\tfailureCode: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.failureCode,\n\t\tcorrection: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.guidance,\n\t\tdiagnostic,\n\t\t...(previousResult ? { repeatedSuccessfulCall: { previousToolCallId: previousResult.toolCallId } } : {}),\n\t};\n}\n\nfunction createAbortedToolCallOutcome(\n\tvalidationEvent: ToolArgumentValidationTelemetryEvent | undefined,\n\texecutionGateReservation: ToolFailureExecutionReservation | undefined,\n): ImmediateToolCallOutcome {\n\treturn {\n\t\tkind: \"immediate\",\n\t\tresult: createErrorToolResult(\"Operation aborted\"),\n\t\tisError: true,\n\t\tphase: \"cancelled\",\n\t\tfailureCode: \"aborted\",\n\t\tcorrection: \"Retry only if the operation is still required.\",\n\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\tvalidationEvent,\n\t};\n}\n\nfunction shouldTerminateToolBatch(finalizedCalls: FinalizedToolCallOutcome[]): boolean {\n\treturn finalizedCalls.length > 0 && finalizedCalls.every((finalized) => finalized.result.terminate === true);\n}\n\nfunction prepareToolCallArguments(tool: AgentTool<any>, toolCall: AgentToolCall): AgentToolCall {\n\tif (!tool.prepareArguments) {\n\t\treturn toolCall;\n\t}\n\tconst preparedArguments = tool.prepareArguments(toolCall.arguments);\n\tif (preparedArguments === toolCall.arguments) {\n\t\treturn toolCall;\n\t}\n\treturn {\n\t\t...toolCall,\n\t\targuments: preparedArguments as Record<string, any>,\n\t};\n}\n\nfunction createValidationBounceTelemetry(\n\tconfig: AgentLoopConfig,\n\ttoolCall: AgentToolCall,\n\terrorKeyword: string,\n): ToolArgumentValidationTelemetryEvent {\n\treturn {\n\t\toutcome: \"bounced\",\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\ttool: toolCall.name,\n\t\tsource: toolCall.source,\n\t\tfailureModes: [\"other\"],\n\t\trepairsApplied: [],\n\t\terrorKeywords: [errorKeyword],\n\t\ttaught: \"none\",\n\t\texecutionOutcome: \"not_run\",\n\t};\n}\n\nfunction validationFailureCorrection(\n\tevent: ToolArgumentValidationTelemetryEvent | undefined,\n\ttoolName: string,\n): string {\n\tconst shape = event?.failureShape\n\t\t?.slice(0, 3)\n\t\t.map((entry) => `${entry.path}: expected ${entry.expectedType}, received ${entry.receivedType}`)\n\t\t.join(\"; \");\n\tconst rules = [\n\t\t...new Set(\n\t\t\t(event?.failureModes ?? [])\n\t\t\t\t.filter((mode) => mode !== \"other\")\n\t\t\t\t.map((mode) => formatToolRepairStandingRule(mode)),\n\t\t),\n\t];\n\treturn [`Match ${toolName} arguments to its current schema.`, shape ? `Fix ${shape}.` : undefined, ...rules]\n\t\t.filter((part): part is string => part !== undefined)\n\t\t.join(\" \");\n}\n\nfunction resetValidationFailureTracker(tracker: ToolValidationFailureTracker): void {\n\ttracker.signature = undefined;\n\ttracker.repeats = 0;\n}\n\nfunction emitToolArgumentValidationTelemetry(\n\tconfig: AgentLoopConfig,\n\tevent: ToolArgumentValidationTelemetryEvent | undefined,\n\texecutionOutcome: ToolArgumentExecutionOutcome,\n\ttaught: ToolArgumentValidationTelemetryEvent[\"taught\"],\n): void {\n\tif (!event) return;\n\tconfig.onToolArgumentValidation?.({ ...event, executionOutcome, taught });\n}\n\nfunction toolValidationEscalationThreshold(config: AgentLoopConfig): number {\n\treturn config.toolValidationEscalationThreshold ?? DEFAULT_TOOL_VALIDATION_ESCALATION_THRESHOLD;\n}\n\nfunction isToolArgumentRepairEmergencyDisabled(): boolean {\n\tconst env = typeof process === \"object\" && process ? process.env : undefined;\n\tconst value = env?.PI_TOOL_REPAIR_DISABLED;\n\tif (!value) return false;\n\treturn [\"1\", \"true\", \"yes\", \"on\"].includes(value.trim().toLowerCase());\n}\n\nfunction isToolArgumentValidationError(error: unknown): error is ToolArgumentValidationError {\n\treturn (\n\t\terror instanceof ToolArgumentValidationError ||\n\t\t(error instanceof Error &&\n\t\t\terror.name === \"ToolArgumentValidationError\" &&\n\t\t\ttypeof (error as { toolName?: unknown }).toolName === \"string\" &&\n\t\t\ttypeof (error as { signature?: unknown }).signature === \"string\" &&\n\t\t\ttypeof (error as { enrichment?: unknown }).enrichment === \"string\")\n\t);\n}\n\nfunction handleValidationFailure(\n\terror: ToolArgumentValidationError,\n\tconfig: AgentLoopConfig,\n\ttracker: ToolValidationFailureTracker,\n): string {\n\tif (tracker.signature === error.signature) {\n\t\ttracker.repeats++;\n\t} else {\n\t\ttracker.signature = error.signature;\n\t\ttracker.repeats = 1;\n\t\ttracker.escalatedSignature = undefined;\n\t}\n\n\tconst threshold = toolValidationEscalationThreshold(config);\n\tif (threshold <= 0 || tracker.repeats < threshold || tracker.escalatedSignature === error.signature) {\n\t\treturn error.message;\n\t}\n\n\ttracker.escalatedSignature = error.signature;\n\tconfig.onToolValidationEscalation?.({\n\t\ttool: error.toolName,\n\t\tsignature: error.signature,\n\t\trepeats: tracker.repeats,\n\t\tmodel: config.model.id,\n\t\tprovider: config.model.provider,\n\t});\n\treturn `${error.message}\\n\\nRepeated validation failure (${tracker.repeats} identical attempts). Use this full schema and example before retrying:\\n${error.enrichment}`;\n}\n\nasync function prepareToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCall: AgentToolCall,\n\tconfig: AgentLoopConfig,\n\tvalidationFailureTracker: ToolValidationFailureTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tsignal: AbortSignal | undefined,\n): Promise<PreparedToolCall | ImmediateToolCallOutcome> {\n\tconst tool = currentContext.tools?.find((candidate) => candidate.name === toolCall.name);\n\tif (!tool) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(`Tool ${toolCall.name} not found`),\n\t\t\tisError: true,\n\t\t\tphase: \"validation\",\n\t\t\tfailureCode: \"unknown_tool\",\n\t\t\tcorrection: \"Choose a tool from the currently available tool list.\",\n\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, \"unknown_tool\"),\n\t\t};\n\t}\n\n\tif (toolCall.errorMessage) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(toolCall.errorMessage),\n\t\t\tisError: true,\n\t\t\tphase: \"validation\",\n\t\t\tfailureCode: \"malformed_call\",\n\t\t\tcorrection: \"Resend one complete JSON argument object matching the current tool schema.\",\n\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, \"malformed_call\"),\n\t\t};\n\t}\n\n\tlet validationEvent: ToolArgumentValidationTelemetryEvent | undefined;\n\tlet executionGateReservation: ToolFailureExecutionReservation | undefined;\n\ttry {\n\t\tconst preparedToolCall = prepareToolCallArguments(tool, toolCall);\n\t\tconst validatedArgs = validateToolArguments(tool, preparedToolCall, {\n\t\t\tmodel: config.model.id,\n\t\t\tprovider: config.model.provider,\n\t\t\trepairEnabled: !isToolArgumentRepairEmergencyDisabled(),\n\t\t\ttelemetry: (event) => {\n\t\t\t\tvalidationEvent = event;\n\t\t\t},\n\t\t});\n\t\tresetValidationFailureTracker(validationFailureTracker);\n\t\tif (preparedToolCall.repairNotes) {\n\t\t\ttoolCall.repairNotes = preparedToolCall.repairNotes;\n\t\t}\n\t\tif (validatedArgs !== toolCall.arguments) {\n\t\t\ttoolCall.rawArguments ??= toolCall.arguments;\n\t\t\ttoolCall.arguments = validatedArgs;\n\t\t}\n\t\tconst unresolvedRecord = getUnresolvedToolFailure(toolFailureMemory, toolCall.name, validatedArgs);\n\t\tconst admission = toolFailureRecoveryGate.admit(tool, validatedArgs, unresolvedRecord);\n\t\tif (admission.kind === \"blocked\") {\n\t\t\tconst failureCode = admission.exhausted\n\t\t\t\t? admission.scope === \"operation\"\n\t\t\t\t\t? \"operation_recovery_exhausted\"\n\t\t\t\t\t: \"recovery_exhausted\"\n\t\t\t\t: \"repeated_failed_operation\";\n\t\t\tconst result = admission.exhausted\n\t\t\t\t? admission.scope === \"operation\"\n\t\t\t\t\t? createToolFailureOperationExhaustedResult(\n\t\t\t\t\t\t\tadmission.record,\n\t\t\t\t\t\t\tadmission.diagnostic ?? \"Tool operation recovery budget exhausted.\",\n\t\t\t\t\t\t)\n\t\t\t\t\t: createToolFailureRecoveryExhaustedResult(\n\t\t\t\t\t\t\tadmission.record,\n\t\t\t\t\t\t\tadmission.diagnostic ?? \"Tool failure recovery budget exhausted.\",\n\t\t\t\t\t\t)\n\t\t\t\t: createRepeatedToolFailureResult(admission.record);\n\t\t\tconst memoryRecord = result.details.piToolFailureMemory;\n\t\t\ttoolFailureMemory.set(admission.record.failureKey, memoryRecord);\n\t\t\treturn {\n\t\t\t\tkind: \"immediate\",\n\t\t\t\tresult,\n\t\t\t\tisError: true,\n\t\t\t\tphase: admission.record.phase,\n\t\t\t\tfailureCode,\n\t\t\t\tcorrection: memoryRecord.correction,\n\t\t\t\tdiagnostic: memoryRecord.diagnostic,\n\t\t\t\trepeatedToolFailure: true,\n\t\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, failureCode),\n\t\t\t};\n\t\t}\n\t\texecutionGateReservation = admission.reservation;\n\t\tif (config.beforeToolCall) {\n\t\t\tconst beforeResult = await config.beforeToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall,\n\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (signal?.aborted) {\n\t\t\t\treturn createAbortedToolCallOutcome(validationEvent, executionGateReservation);\n\t\t\t}\n\t\t\tif (beforeResult?.block) {\n\t\t\t\tconst reason = beforeResult.reason || \"Tool execution was blocked\";\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"immediate\",\n\t\t\t\t\tresult: createErrorToolResult(reason),\n\t\t\t\t\tisError: true,\n\t\t\t\t\tphase: \"policy\",\n\t\t\t\t\tfailureCode: \"blocked\",\n\t\t\t\t\tcorrection: \"Choose an allowed approach or request the required authority before retrying.\",\n\t\t\t\t\tdiagnostic: reason,\n\t\t\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\t\t\tvalidationEvent,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\treturn createAbortedToolCallOutcome(validationEvent, executionGateReservation);\n\t\t}\n\t\treturn {\n\t\t\tkind: \"prepared\",\n\t\t\ttoolCall,\n\t\t\ttool,\n\t\t\targs: validatedArgs,\n\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\tvalidationEvent,\n\t\t};\n\t} catch (error) {\n\t\tconst message = isToolArgumentValidationError(error)\n\t\t\t? handleValidationFailure(error, config, validationFailureTracker)\n\t\t\t: error instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: String(error);\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(message),\n\t\t\tisError: true,\n\t\t\tphase: isToolArgumentValidationError(error) ? \"validation\" : \"preflight\",\n\t\t\tfailureCode: isToolArgumentValidationError(error) ? \"invalid_arguments\" : \"preflight_error\",\n\t\t\tcorrection: isToolArgumentValidationError(error)\n\t\t\t\t? validationFailureCorrection(validationEvent, toolCall.name)\n\t\t\t\t: toolFailureCorrection(message, \"rejected\", \"preflight\"),\n\t\t\tdiagnostic: isToolArgumentValidationError(error) ? undefined : message,\n\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\tvalidationEvent,\n\t\t};\n\t}\n}\n\nfunction finalizeRejectedToolCall(\n\ttoolCall: AgentToolCall,\n\toutcome: ImmediateToolCallOutcome,\n\ttracker: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n): FinalizedToolCallOutcome {\n\tif (outcome.repeatedToolFailure) {\n\t\treturn {\n\t\t\ttoolCall,\n\t\t\tresult: outcome.result,\n\t\t\tisError: true,\n\t\t};\n\t}\n\tconst record = rememberToolFailure(\n\t\ttracker,\n\t\ttoolCall.name,\n\t\ttoolCall.arguments,\n\t\t\"rejected\",\n\t\toutcome.failureCode,\n\t\toutcome.correction,\n\t\toutcome.diagnostic,\n\t\toutcome.phase,\n\t);\n\tconst halt = toolFailureRecoveryGate.apply({\n\t\tkind: \"failure\",\n\t\trecord,\n\t\targs: toolCall.arguments,\n\t\t...(outcome.executionGateReservation ? { reservation: outcome.executionGateReservation } : {}),\n\t});\n\tconst failureResult = halt\n\t\t? createToolFailureRecoveryExhaustedResult(halt.record, halt.diagnostic)\n\t\t: createToolFailureResult(record, outcome.result.terminate);\n\treturn {\n\t\ttoolCall,\n\t\tresult: outcome.repeatedSuccessfulCall\n\t\t\t? {\n\t\t\t\t\t...failureResult,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\t...failureResult.details,\n\t\t\t\t\t\tpiRepeatedSuccessfulCall: outcome.repeatedSuccessfulCall,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: failureResult,\n\t\tisError: true,\n\t};\n}\n\ntype LinkedToolAbort = {\n\tsignal: AbortSignal;\n\tdetachForeground(): void;\n\tcancel(): void;\n};\n\nfunction createLinkedToolAbort(foregroundSignal: AbortSignal | undefined): LinkedToolAbort {\n\tconst controller = new AbortController();\n\tconst abortFromForeground = (): void => controller.abort(foregroundSignal?.reason);\n\tlet linked = false;\n\tif (foregroundSignal?.aborted) {\n\t\tabortFromForeground();\n\t} else if (foregroundSignal) {\n\t\tforegroundSignal.addEventListener(\"abort\", abortFromForeground, { once: true });\n\t\tlinked = true;\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdetachForeground: () => {\n\t\t\tif (!linked || !foregroundSignal) return;\n\t\t\tforegroundSignal.removeEventListener(\"abort\", abortFromForeground);\n\t\t\tlinked = false;\n\t\t},\n\t\tcancel: () => controller.abort(),\n\t};\n}\n\nfunction getBackgroundToolCallDelay(config: AgentLoopConfig): number | undefined {\n\tconst delay = config.backgroundToolCallAfterMs;\n\tif (delay === undefined || !Number.isFinite(delay) || delay <= 0) return undefined;\n\treturn delay;\n}\n\nasync function executeAndFinalizePreparedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\tconfig: AgentLoopConfig,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tforegroundSignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<FinalizedToolCallOutcome> {\n\tconst backgroundDelay = getBackgroundToolCallDelay(config);\n\tif (\n\t\t!config.handoffToolCall ||\n\t\t(backgroundDelay === undefined && config.subscribeToolCallHandoffRequest === undefined)\n\t) {\n\t\tconst executed = await executePreparedToolCall(prepared, foregroundSignal, emit);\n\t\treturn finalizeExecutedToolCall(\n\t\t\tcurrentContext,\n\t\t\tassistantMessage,\n\t\t\tprepared,\n\t\t\texecuted,\n\t\t\tconfig,\n\t\t\trepairTeachTracker,\n\t\t\ttoolFailureMemory,\n\t\t\ttoolFailureRecoveryGate,\n\t\t\tforegroundSignal,\n\t\t);\n\t}\n\n\tconst executionAbort = createLinkedToolAbort(foregroundSignal);\n\tconst startedAt = Date.now();\n\tlet emitForegroundUpdates = true;\n\tconst completion = (async (): Promise<FinalizedToolCallOutcome> => {\n\t\tconst executed = await executePreparedToolCall(prepared, executionAbort.signal, (event) => {\n\t\t\tif (emitForegroundUpdates) return emit(event);\n\t\t});\n\t\tconst finalized = await finalizeExecutedToolCall(\n\t\t\tcurrentContext,\n\t\t\tassistantMessage,\n\t\t\tprepared,\n\t\t\texecuted,\n\t\t\tconfig,\n\t\t\trepairTeachTracker,\n\t\t\ttoolFailureMemory,\n\t\t\ttoolFailureRecoveryGate,\n\t\t\texecutionAbort.signal,\n\t\t);\n\t\treturn finalized;\n\t})();\n\tcompletion.then(executionAbort.detachForeground, executionAbort.detachForeground);\n\n\tlet deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst triggers: Array<Promise<{ kind: \"deadline\" | \"manual\" }>> = [];\n\tif (backgroundDelay !== undefined) {\n\t\ttriggers.push(\n\t\t\tnew Promise<{ kind: \"deadline\" }>((resolve) => {\n\t\t\t\tdeadlineTimer = setTimeout(() => resolve({ kind: \"deadline\" }), backgroundDelay);\n\t\t\t\t(deadlineTimer as { unref?: () => void }).unref?.();\n\t\t\t}),\n\t\t);\n\t}\n\tlet unsubscribeHandoffRequest: (() => void) | undefined;\n\tif (config.subscribeToolCallHandoffRequest) {\n\t\tconst manual = new Promise<{ kind: \"manual\" }>((resolve) => {\n\t\t\ttry {\n\t\t\t\tunsubscribeHandoffRequest = config.subscribeToolCallHandoffRequest?.(prepared.toolCall.id, () =>\n\t\t\t\t\tresolve({ kind: \"manual\" }),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\tunsubscribeHandoffRequest = undefined;\n\t\t\t}\n\t\t});\n\t\ttriggers.push(manual);\n\t}\n\tlet outcome: { kind: \"completed\"; value: FinalizedToolCallOutcome } | { kind: \"deadline\" | \"manual\" };\n\ttry {\n\t\toutcome = await Promise.race([completion.then((value) => ({ kind: \"completed\" as const, value })), ...triggers]);\n\t} finally {\n\t\tif (deadlineTimer !== undefined) clearTimeout(deadlineTimer);\n\t\tunsubscribeHandoffRequest?.();\n\t}\n\tif (outcome.kind === \"completed\") return outcome.value;\n\tif (executionAbort.signal.aborted) return completion;\n\n\tlet handoffAccepted = false;\n\tconst handedOffCompletion = completion.then((finalized) =>\n\t\thandoffAccepted ? applyToolFailureRecoveryEffect(toolFailureRecoveryGate, finalized) : finalized,\n\t);\n\tvoid handedOffCompletion.catch(() => undefined);\n\tlet handoff: ReturnType<NonNullable<AgentLoopConfig[\"handoffToolCall\"]>>;\n\ttry {\n\t\thandoff = config.handoffToolCall({\n\t\t\tassistantMessage,\n\t\t\ttoolCall: prepared.toolCall,\n\t\t\targs: prepared.args,\n\t\t\tcontext: currentContext,\n\t\t\telapsedMs: Math.max(0, Date.now() - startedAt),\n\t\t\tcompletion: handedOffCompletion,\n\t\t\tcancel: executionAbort.cancel,\n\t\t});\n\t} catch {\n\t\treturn completion;\n\t}\n\thandoffAccepted = handoff !== undefined;\n\tif (!handoff) return completion;\n\n\temitForegroundUpdates = false;\n\texecutionAbort.detachForeground();\n\treturn {\n\t\ttoolCall: prepared.toolCall,\n\t\tresult: handoff.result,\n\t\tisError: handoff.isError ?? handoff.result.isError === true,\n\t};\n}\n\nasync function executePreparedToolCall(\n\tprepared: PreparedToolCall,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<ExecutedToolCallOutcome> {\n\tconst updateEvents: Promise<void>[] = [];\n\n\ttry {\n\t\tconst result = await prepared.tool.execute(\n\t\t\tprepared.toolCall.id,\n\t\t\tprepared.args as never,\n\t\t\tsignal,\n\t\t\t(partialResult) => {\n\t\t\t\tupdateEvents.push(\n\t\t\t\t\tPromise.resolve(\n\t\t\t\t\t\temit({\n\t\t\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\t\t\ttoolCallId: prepared.toolCall.id,\n\t\t\t\t\t\t\ttoolName: prepared.toolCall.name,\n\t\t\t\t\t\t\targs: prepared.toolCall.arguments,\n\t\t\t\t\t\t\tpartialResult,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\tawait Promise.all(updateEvents);\n\t\treturn {\n\t\t\tresult,\n\t\t\t// Tool definitions can report an expected operation failure without\n\t\t\t// throwing. Keep the returned result intact through afterToolCall so\n\t\t\t// policy hooks can inspect its bounded diagnostics and metadata.\n\t\t\tisError: result.isError === true,\n\t\t\t...(result.isError === true ? { errorClass: \"tool_result_error\" } : {}),\n\t\t};\n\t} catch (error) {\n\t\tawait Promise.all(updateEvents);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tresult: createErrorToolResult(message),\n\t\t\tisError: true,\n\t\t\terrorClass: error instanceof Error ? error.name : typeof error,\n\t\t\tfailureMessage: message,\n\t\t};\n\t}\n}\n\nfunction repairTeachKey(toolName: string, note: string): string {\n\tconst repairName = /^\\[harness\\] ([^:]+):/.exec(note)?.[1] ?? note;\n\treturn `${toolName}\\0${repairName}`;\n}\n\nfunction shouldEmitRepairTeachNote(toolName: string, note: string, tracker: ToolRepairTeachTracker): boolean {\n\tconst key = repairTeachKey(toolName, note);\n\tconst count = (tracker.get(key) ?? 0) + 1;\n\ttracker.set(key, count);\n\treturn count === 1 || count % TOOL_REPAIR_TEACH_EVERY === 0;\n}\n\nfunction appendRepairTeachNotes(\n\tresult: AgentToolResult<any>,\n\ttoolCall: AgentToolCall,\n\ttracker: ToolRepairTeachTracker,\n\tconfig: AgentLoopConfig,\n): { result: AgentToolResult<any>; taught: boolean } {\n\tif (config.toolArgumentTeachEnabled === false) return { result, taught: false };\n\tconst notes = (toolCall.repairNotes ?? []).filter((note) => shouldEmitRepairTeachNote(toolCall.name, note, tracker));\n\tif (notes.length === 0) return { result, taught: false };\n\treturn {\n\t\tresult: {\n\t\t\t...result,\n\t\t\tcontent: [...result.content, { type: \"text\", text: notes.join(\"\\n\") }],\n\t\t},\n\t\ttaught: true,\n\t};\n}\n\nasync function finalizeExecutedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\texecuted: ExecutedToolCallOutcome,\n\tconfig: AgentLoopConfig,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tsignal: AbortSignal | undefined,\n): Promise<FinalizedToolCallOutcome> {\n\tlet result = executed.result;\n\tlet isError = executed.isError;\n\tlet failureMessage = executed.failureMessage ?? \"\";\n\tlet errorClass = executed.errorClass;\n\tlet executionGateEffect: ToolFailureRecoveryGateEffect | undefined;\n\n\tif (config.afterToolCall) {\n\t\ttry {\n\t\t\tconst afterResult = await config.afterToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall: prepared.toolCall,\n\t\t\t\t\targs: prepared.args,\n\t\t\t\t\tresult,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (afterResult) {\n\t\t\t\tresult = {\n\t\t\t\t\tcontent: afterResult.content ?? result.content,\n\t\t\t\t\tdetails: afterResult.details ?? result.details,\n\t\t\t\t\tusage: afterResult.usage ?? result.usage,\n\t\t\t\t\tterminate: afterResult.terminate ?? result.terminate,\n\t\t\t\t};\n\t\t\t\tisError = afterResult.isError ?? isError;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tfailureMessage = error instanceof Error ? error.message : String(error);\n\t\t\terrorClass = error instanceof Error ? error.name : typeof error;\n\t\t\tresult = { ...createErrorToolResult(failureMessage), usage: result.usage };\n\t\t\tisError = true;\n\t\t}\n\t}\n\n\tif (isError) {\n\t\tconst usage = result.usage;\n\t\tconst effectiveFailureMessage =\n\t\t\tfailureMessage || result.content.find((block) => block.type === \"text\")?.text || \"Tool execution failed\";\n\t\tconst assessment = assessToolFailure(effectiveFailureMessage, \"failed\", errorClass);\n\t\tconst recoveryPlan = toolFailureRecoveryGate.planFailure(\n\t\t\tprepared.tool,\n\t\t\tprepared.args,\n\t\t\tassessment.failureCode,\n\t\t\tcurrentContext.tools ?? [],\n\t\t\tprepared.executionGateReservation,\n\t\t);\n\t\tconst record = rememberToolFailure(\n\t\t\ttoolFailureMemory,\n\t\t\tprepared.toolCall.name,\n\t\t\tprepared.args,\n\t\t\t\"failed\",\n\t\t\tassessment.failureCode,\n\t\t\trecoveryPlan.guidance,\n\t\t\tassessment.diagnostic,\n\t\t\tassessment.phase,\n\t\t);\n\t\texecutionGateEffect = {\n\t\t\tkind: \"failure\",\n\t\t\trecord,\n\t\t\targs: prepared.args,\n\t\t\ttargets: recoveryPlan.targets,\n\t\t\t...(prepared.executionGateReservation ? { reservation: prepared.executionGateReservation } : {}),\n\t\t};\n\t\tresult = { ...createToolFailureResult(record, result.terminate), usage };\n\t} else {\n\t\tclearToolFailure(toolFailureMemory, prepared.toolCall.name, prepared.args);\n\t\tif (!executed.isError) {\n\t\t\texecutionGateEffect = {\n\t\t\t\tkind: \"success\",\n\t\t\t\ttool: prepared.tool,\n\t\t\t\targs: prepared.args,\n\t\t\t\tevidenceResult: executed.result,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst repaired = isError\n\t\t? { result, taught: false }\n\t\t: appendRepairTeachNotes(result, prepared.toolCall, repairTeachTracker, config);\n\temitToolArgumentValidationTelemetry(\n\t\tconfig,\n\t\tprepared.validationEvent,\n\t\tisError ? \"failed\" : \"succeeded\",\n\t\trepaired.taught ? \"note\" : \"none\",\n\t);\n\n\treturn {\n\t\ttoolCall: prepared.toolCall,\n\t\tresult: repaired.result,\n\t\tisError,\n\t\texecutionGateEffect,\n\t};\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<any> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: {},\n\t};\n}\n\nasync function emitToolExecutionStart(toolCall: AgentToolCall, emit: AgentEventSink): Promise<void> {\n\tawait emit({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: toolCall.arguments,\n\t\trepair: getToolCallRepairInfo(toolCall),\n\t});\n}\n\nexport function getToolCallRepairInfo(toolCall: AgentToolCall): ToolCallRepairInfo | undefined {\n\tif (!toolCall.rawArguments && !toolCall.repairNotes?.length) return undefined;\n\treturn {\n\t\trepaired: true,\n\t\t...(toolCall.rawArguments ? { rawArguments: toolCall.rawArguments } : {}),\n\t\t...(toolCall.repairNotes?.length ? { notes: toolCall.repairNotes } : {}),\n\t};\n}\n\nasync function emitToolExecutionEnd(finalized: FinalizedToolCallOutcome, emit: AgentEventSink): Promise<void> {\n\tawait emit({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: finalized.toolCall.id,\n\t\ttoolName: finalized.toolCall.name,\n\t\tresult: finalized.result,\n\t\tisError: finalized.isError,\n\t\trepair: getToolCallRepairInfo(finalized.toolCall),\n\t});\n}\n\nfunction createToolResultMessage(finalized: FinalizedToolCallOutcome): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: finalized.toolCall.id,\n\t\ttoolName: finalized.toolCall.name,\n\t\tcontent: finalized.result.content,\n\t\tdetails: finalized.result.details,\n\t\tusage: finalized.result.usage,\n\t\tisError: finalized.isError,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nasync function emitToolResultMessage(toolResultMessage: ToolResultMessage, emit: AgentEventSink): Promise<void> {\n\tawait emit({ type: \"message_start\", message: toolResultMessage });\n\tawait emit({ type: \"message_end\", message: toolResultMessage });\n}\n\nasync function rejectRecoveryDeliveryToolCalls(\n\ttoolCalls: readonly AgentToolCall[],\n\thalt: ToolFailureRecoveryHalt,\n\temit: AgentEventSink,\n): Promise<ToolResultMessage[]> {\n\tconst messages: ToolResultMessage[] = [];\n\tfor (const toolCall of toolCalls) {\n\t\tawait emitToolExecutionStart(toolCall, emit);\n\t\tconst finalized: FinalizedToolCallOutcome = {\n\t\t\ttoolCall,\n\t\t\tresult: createToolFailureRecoveryExhaustedResult(\n\t\t\t\thalt.record,\n\t\t\t\t\"Tool execution is disabled during the mandatory recovery delivery turn.\",\n\t\t\t),\n\t\t\tisError: true,\n\t\t};\n\t\tawait emitToolExecutionEnd(finalized, emit);\n\t\tconst message = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(message, emit);\n\t\tmessages.push(message);\n\t}\n\treturn messages;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent loop that works with AgentMessage throughout.\n * Transforms to Message[] only at the LLM call boundary.\n */\n\nimport { EventStream } from \"@caupulican/pi-ai/event-stream\";\nimport {\n\tformatToolRepairStandingRule,\n\tREPEATED_SUCCESSFUL_TOOL_CALL_FAILURE,\n\ttype ToolFailurePhase,\n} from \"@caupulican/pi-ai/tool-repair-registry\";\nimport type { AssistantMessage, ToolResultMessage } from \"@caupulican/pi-ai/types\";\nimport {\n\ttype ToolArgumentExecutionOutcome,\n\tToolArgumentValidationError,\n\ttype ToolArgumentValidationTelemetryEvent,\n\tvalidateToolArguments,\n} from \"@caupulican/pi-ai/validation\";\nimport { startPlannedAgentProviderRequest } from \"./provider-request-planner.ts\";\nimport {\n\tassessToolFailure,\n\tclearToolFailure,\n\tcreateRepeatedToolFailureResult,\n\tcreateToolFailureMemoryTracker,\n\tcreateToolFailureOperationExhaustedResult,\n\tcreateToolFailureRecoveryExhaustedResult,\n\tcreateToolFailureResult,\n\tgetUnresolvedToolFailure,\n\tnormalizeToolSignature,\n\trememberToolFailure,\n\ttype ToolFailureMemoryTracker,\n\ttoolFailureCorrection,\n} from \"./tool-failure-memory.ts\";\nimport {\n\tTOOL_FAILURE_RECOVERY_ACCOUNTING_WAVE_SIZE,\n\ttype ToolFailureExecutionReservation,\n\tToolFailureRecoveryGate,\n\ttype ToolFailureRecoveryGateEffect,\n\ttype ToolFailureRecoveryHalt,\n} from \"./tool-failure-recovery-gate.ts\";\nimport { appendMandatoryToolFailureDeliveryPrompt } from \"./tool-failure-recovery-protocol.ts\";\nimport { rejectNativeToolProtocolResidue } from \"./tool-protocol-residue.ts\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tAgentToolCall,\n\tAgentToolResult,\n\tStreamFn,\n\tToolCallRepairInfo,\n} from \"./types.ts\";\nimport { DEFAULT_MAX_STALL_TURNS } from \"./types.ts\";\nimport { createEmptyUsage } from \"./usage.ts\";\n\nexport { narrowRequestMaxTokens, resolveRequestPreflightMaxTokens } from \"./provider-request-planner.ts\";\n\nexport type AgentEventSink = (event: AgentEvent) => Promise<void> | void;\n\n/** Bounded no-progress state retained across host-owned continuations of one logical prompt. */\nexport interface AgentLoopContinuationState {\n\tstallWindow: string[];\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate;\n}\n\nexport function createAgentLoopContinuationState(): AgentLoopContinuationState {\n\treturn { stallWindow: [], toolFailureRecoveryGate: new ToolFailureRecoveryGate() };\n}\n\n/**\n * Start an agent loop with a new prompt message.\n * The prompt is added to the context and events are emitted for it.\n */\nexport function agentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\treturn streamAgentLoop(config, signal, (emit) => runAgentLoop(prompts, context, config, emit, signal, streamFn));\n}\n\n/**\n * Continue an agent loop from the current context without adding a new message.\n * Used for retries - context already has user message or tool results.\n *\n * **Important:** The last message in context must convert to a `user` or `toolResult` message\n * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.\n * This cannot be validated here since `convertToLlm` is only called once per turn.\n */\nexport function agentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tassertContinuableContext(context);\n\n\treturn streamAgentLoop(config, signal, (emit) => runAgentLoopContinue(context, config, emit, signal, streamFn));\n}\n\nfunction streamAgentLoop(\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\trun: (emit: AgentEventSink) => Promise<AgentMessage[]>,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tconst stream = createAgentStream();\n\tvoid run(async (event) => {\n\t\tstream.push(event);\n\t})\n\t\t.catch(async (error) => {\n\t\t\tconst messages = [createLoopFailureMessage(error, config, signal?.aborted ?? false)];\n\t\t\tstream.push({ type: \"agent_end\", messages });\n\t\t\treturn messages;\n\t\t})\n\t\t.then((messages) => {\n\t\t\tstream.end(messages);\n\t\t});\n\n\treturn stream;\n}\n\nexport async function runAgentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\temit: AgentEventSink,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<AgentMessage[]> {\n\tconst newMessages: AgentMessage[] = [...prompts];\n\tconst currentContext: AgentContext = {\n\t\t...context,\n\t\tmessages: [...context.messages, ...prompts],\n\t};\n\n\tawait emit({ type: \"agent_start\" });\n\tawait emit({ type: \"turn_start\" });\n\tfor (const prompt of prompts) {\n\t\tawait emit({ type: \"message_start\", message: prompt });\n\t\tawait emit({ type: \"message_end\", message: prompt });\n\t}\n\n\tawait runLoop(currentContext, newMessages, config, signal, emit, streamFn, continuationState);\n\treturn newMessages;\n}\n\nexport async function runAgentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\temit: AgentEventSink,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<AgentMessage[]> {\n\tassertContinuableContext(context);\n\n\tconst newMessages: AgentMessage[] = [];\n\tconst currentContext: AgentContext = { ...context, messages: [...context.messages] };\n\n\tawait emit({ type: \"agent_start\" });\n\tawait emit({ type: \"turn_start\" });\n\n\tawait runLoop(currentContext, newMessages, config, signal, emit, streamFn, continuationState);\n\treturn newMessages;\n}\n\nfunction assertContinuableContext(context: AgentContext): void {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n}\n\nfunction createLoopFailureMessage(error: unknown, config: AgentLoopConfig, aborted: boolean): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text: \"\" }],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: aborted ? \"aborted\" : \"error\",\n\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createMandatoryRecoveryDeliveryFallback(\n\thalt: ToolFailureRecoveryHalt,\n\tconfig: AgentLoopConfig,\n): AssistantMessage {\n\tconst diagnostic = halt.record.diagnostic ?? halt.diagnostic;\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: `Tool recovery stopped for ${halt.record.tool}: ${diagnostic} Required recovery: ${halt.record.correction}`,\n\t\t\t},\n\t\t],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction createAgentStream(): EventStream<AgentEvent, AgentMessage[]> {\n\treturn new EventStream<AgentEvent, AgentMessage[]>(\n\t\t(event: AgentEvent) => event.type === \"agent_end\",\n\t\t(event: AgentEvent) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\n/**\n * How many `stallLimit`-length periods the runaway-loop window spans. A window of `stallLimit * P`\n * turns lets the count-based detector catch oscillating cycles of period up to `P` (each signature in a\n * period-k cycle recurs ~window/k times), not just back-to-back repeats. Beyond this the cycle is loose\n * enough that it's indistinguishable from legitimate varied work, so we don't chase it.\n */\nconst STALL_WINDOW_PERIODS = 4;\n\nfunction textProtocolOperationArguments(toolCall: AgentToolCall): unknown {\n\tconst args: unknown = toolCall.arguments;\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) return args ?? null;\n\tconst record = args as Record<string, unknown>;\n\tif ((toolCall.name === \"write\" || toolCall.name === \"edit\") && typeof record.path === \"string\") {\n\t\treturn { path: record.path };\n\t}\n\treturn args;\n}\n\nfunction textProtocolBatchSignature(toolCalls: readonly AgentToolCall[]): string {\n\treturn normalizeToolSignature(\n\t\ttoolCalls.map((toolCall) => [toolCall.name, textProtocolOperationArguments(toolCall)]),\n\t);\n}\n\nfunction toolCallRecord(toolCall: AgentToolCall): Record<string, unknown> | undefined {\n\tconst args: unknown = toolCall.arguments;\n\treturn args && typeof args === \"object\" && !Array.isArray(args) ? (args as Record<string, unknown>) : undefined;\n}\n\nfunction toolResultPhase(result: ToolResultMessage): string | undefined {\n\tif (!result.details || typeof result.details !== \"object\" || Array.isArray(result.details)) return undefined;\n\tconst phase = (result.details as Record<string, unknown>).phase;\n\treturn typeof phase === \"string\" ? phase : undefined;\n}\n\nfunction repeatsSuccessfulTextProtocolBatch(\n\tincomingSignature: string,\n\ttoolCalls: readonly AgentToolCall[],\n\tprevious: SuccessfulTextProtocolBatch | undefined,\n): boolean {\n\tif (!previous) return false;\n\tif (incomingSignature === previous.signature) return true;\n\tif (toolCalls.length !== previous.calls.length || toolCalls.length !== previous.messages.length) return false;\n\treturn toolCalls.every((toolCall, index) => {\n\t\tconst previousCall = previous.calls[index];\n\t\tconst previousResult = previous.messages[index];\n\t\tif (!previousCall || !previousResult) return false;\n\t\tconst currentArgs = toolCallRecord(toolCall);\n\t\tconst previousArgs = toolCallRecord(previousCall);\n\t\tif (currentArgs?.path !== previousArgs?.path) return false;\n\t\tconst phase = toolResultPhase(previousResult);\n\t\tif (phase === \"written\") return toolCall.name === \"write\" && previousCall.name === \"write\";\n\t\treturn phase === \"edited\" && toolCall.name === \"edit\" && previousCall.name === \"edit\";\n\t});\n}\n\n/**\n * Main loop logic shared by agentLoop and agentLoopContinue.\n */\nasync function runLoop(\n\tinitialContext: AgentContext,\n\tnewMessages: AgentMessage[],\n\tinitialConfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n\tstreamFn?: StreamFn,\n\tcontinuationState: AgentLoopContinuationState = createAgentLoopContinuationState(),\n): Promise<void> {\n\tlet currentContext = initialContext;\n\tlet config = initialConfig;\n\tlet firstTurn = true;\n\t// Runaway-loop backstop state: a sliding window of recent NORMALIZED tool-call signatures. A model\n\t// wedged repeating the same action makes no progress but keeps spending tokens; if one signature\n\t// recurs `stallLimit` times within the window we stop gracefully. Signatures are normalized so\n\t// volatile args (timestamps/UUIDs/nonces that change every call) can't disguise an otherwise-\n\t// identical call (bug #28). The window spans `stallLimit * STALL_WINDOW_PERIODS` turns so periodic\n\t// oscillation is caught too, not just back-to-back repeats: a cycle of period P repeats each\n\t// signature ~window/P times, so any P up to STALL_WINDOW_PERIODS reaches the threshold before the\n\t// window slides past it. Counts only turns that issued tool calls, so varied/long work never trips\n\t// it. `0` disables.\n\tconst stallLimit = config.maxStallTurns ?? DEFAULT_MAX_STALL_TURNS;\n\tconst stallWindow = continuationState.stallWindow;\n\tconst validationFailureTracker: ToolValidationFailureTracker = { repeats: 0 };\n\tconst repairTeachTracker: ToolRepairTeachTracker = new Map();\n\tlet toolFailureMemory = createToolFailureMemoryTracker(currentContext.messages);\n\tconst toolFailureRecoveryGate = continuationState.toolFailureRecoveryGate;\n\tlet mandatoryRecoveryDeliveryPending = false;\n\tlet lastSuccessfulTextProtocolBatch: SuccessfulTextProtocolBatch | undefined;\n\t// Check for steering messages at start (user may have typed while waiting)\n\tlet pendingMessages: AgentMessage[] = (await config.getSteeringMessages?.()) || [];\n\n\t// Outer loop: continues when queued follow-up messages arrive after agent would stop\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\n\t\t// Inner loop: process tool calls and steering messages\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tawait emit({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\t// Process pending messages (inject before next assistant response)\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tlastSuccessfulTextProtocolBatch = undefined;\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\tawait emit({ type: \"message_start\", message });\n\t\t\t\t\tawait emit({ type: \"message_end\", message });\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\t// Recovery exhaustion receives exactly one provider turn without tools so the mandatory\n\t\t\t// diagnostic can reach the user instead of terminating on an undelivered tool result.\n\t\t\tconst recoveryDeliveryTurn = mandatoryRecoveryDeliveryPending;\n\t\t\tconst recoveryDeliveryHalt = recoveryDeliveryTurn ? toolFailureRecoveryGate.getHalt() : undefined;\n\t\t\tif (recoveryDeliveryTurn && !recoveryDeliveryHalt) {\n\t\t\t\tthrow new Error(\"Mandatory recovery delivery started without a recovery halt\");\n\t\t\t}\n\t\t\tconst responseContext = recoveryDeliveryHalt\n\t\t\t\t? {\n\t\t\t\t\t\t...currentContext,\n\t\t\t\t\t\tsystemPrompt: appendMandatoryToolFailureDeliveryPrompt(currentContext.systemPrompt, {\n\t\t\t\t\t\t\ttool: recoveryDeliveryHalt.record.tool,\n\t\t\t\t\t\t\tfailureCode: recoveryDeliveryHalt.record.failureCode,\n\t\t\t\t\t\t\tdiagnostic: recoveryDeliveryHalt.record.diagnostic ?? recoveryDeliveryHalt.diagnostic,\n\t\t\t\t\t\t\trequiredAction: recoveryDeliveryHalt.record.correction,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t}\n\t\t\t\t: currentContext;\n\t\t\tconst message = await streamAssistantResponse(responseContext, config, signal, emit, streamFn);\n\t\t\tnewMessages.push(message);\n\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tawait emit({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check for tool calls\n\t\t\tconst toolCalls = message.content.filter((c) => c.type === \"toolCall\");\n\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tif (recoveryDeliveryTurn) {\n\t\t\t\tif (!recoveryDeliveryHalt) {\n\t\t\t\t\tthrow new Error(\"Mandatory recovery delivery continued without a recovery halt\");\n\t\t\t\t}\n\t\t\t\tif (toolCalls.length > 0) {\n\t\t\t\t\ttoolResults.push(...(await rejectRecoveryDeliveryToolCalls(toolCalls, recoveryDeliveryHalt, emit)));\n\t\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait emit({ type: \"turn_end\", message, toolResults });\n\t\t\t\tif (toolCalls.length > 0) {\n\t\t\t\t\tconst fallback = createMandatoryRecoveryDeliveryFallback(recoveryDeliveryHalt, config);\n\t\t\t\t\tcurrentContext.messages.push(fallback);\n\t\t\t\t\tnewMessages.push(fallback);\n\t\t\t\t\tawait emit({ type: \"turn_start\" });\n\t\t\t\t\tawait emit({ type: \"message_start\", message: fallback });\n\t\t\t\t\tawait emit({ type: \"message_end\", message: fallback });\n\t\t\t\t\tawait emit({ type: \"turn_end\", message: fallback, toolResults: [] });\n\t\t\t\t}\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thasMoreToolCalls = false;\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tconst textProtocolBatch = toolCalls.every((toolCall) => toolCall.source === \"text-protocol\");\n\t\t\t\tconst incomingBatchSignature = textProtocolBatchSignature(toolCalls);\n\t\t\t\tconst previousSuccessfulTextProtocolResults =\n\t\t\t\t\ttextProtocolBatch &&\n\t\t\t\t\trepeatsSuccessfulTextProtocolBatch(incomingBatchSignature, toolCalls, lastSuccessfulTextProtocolBatch)\n\t\t\t\t\t\t? lastSuccessfulTextProtocolBatch?.messages\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst executedToolBatch = await executeToolCalls(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tmessage,\n\t\t\t\t\tconfig,\n\t\t\t\t\tvalidationFailureTracker,\n\t\t\t\t\trepairTeachTracker,\n\t\t\t\t\ttoolFailureMemory,\n\t\t\t\t\ttoolFailureRecoveryGate,\n\t\t\t\t\tpreviousSuccessfulTextProtocolResults,\n\t\t\t\t\tsignal,\n\t\t\t\t\temit,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...executedToolBatch.messages);\n\t\t\t\tif (toolFailureRecoveryGate.isHalted()) {\n\t\t\t\t\tmandatoryRecoveryDeliveryPending = true;\n\t\t\t\t\thasMoreToolCalls = true;\n\t\t\t\t} else {\n\t\t\t\t\thasMoreToolCalls = !executedToolBatch.terminate;\n\t\t\t\t}\n\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t}\n\t\t\t\tif (!previousSuccessfulTextProtocolResults) {\n\t\t\t\t\tlastSuccessfulTextProtocolBatch =\n\t\t\t\t\t\ttextProtocolBatch &&\n\t\t\t\t\t\ttoolResults.length === toolCalls.length &&\n\t\t\t\t\t\ttoolResults.every((result) => !result.isError)\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tsignature: textProtocolBatchSignature(toolCalls),\n\t\t\t\t\t\t\t\t\tmessages: toolResults,\n\t\t\t\t\t\t\t\t\tcalls: toolCalls,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlastSuccessfulTextProtocolBatch = undefined;\n\t\t\t}\n\n\t\t\tawait emit({ type: \"turn_end\", message, toolResults });\n\n\t\t\t// Runaway-loop backstop (cost guard): detect a model stuck repeating one action.\n\t\t\tif (!mandatoryRecoveryDeliveryPending && stallLimit > 0 && toolCalls.length > 0) {\n\t\t\t\tconst signature = normalizeToolSignature(toolCalls.map((c) => [c.name, c.arguments ?? null]));\n\t\t\t\tstallWindow.push(signature);\n\t\t\t\tif (stallWindow.length > stallLimit * STALL_WINDOW_PERIODS) stallWindow.shift();\n\t\t\t\tconst repeats = stallWindow.reduce((n, s) => (s === signature ? n + 1 : n), 0);\n\t\t\t\tif (repeats >= stallLimit) {\n\t\t\t\t\tconfig.onRunawayStop?.({ signature, repeats });\n\t\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nextTurnContext = {\n\t\t\t\tmessage,\n\t\t\t\ttoolResults,\n\t\t\t\tcontext: currentContext,\n\t\t\t\tnewMessages,\n\t\t\t};\n\t\t\tconst nextTurnSnapshot = await config.prepareNextTurn?.(nextTurnContext);\n\t\t\tif (nextTurnSnapshot) {\n\t\t\t\tcurrentContext = nextTurnSnapshot.context ?? currentContext;\n\t\t\t\tif (nextTurnSnapshot.context) {\n\t\t\t\t\ttoolFailureMemory = createToolFailureMemoryTracker(currentContext.messages);\n\t\t\t\t}\n\t\t\t\tconfig = {\n\t\t\t\t\t...config,\n\t\t\t\t\tmodel: nextTurnSnapshot.model ?? config.model,\n\t\t\t\t\treasoning: nextTurnSnapshot.thinkingLevel ?? config.reasoning,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!mandatoryRecoveryDeliveryPending &&\n\t\t\t\t(await config.shouldStopAfterTurn?.({\n\t\t\t\t\tmessage,\n\t\t\t\t\ttoolResults,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t\tnewMessages,\n\t\t\t\t}))\n\t\t\t) {\n\t\t\t\tawait emit({ type: \"agent_end\", messages: newMessages });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t}\n\n\t\t// Agent would stop here. Check for follow-up messages.\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\t// Set as pending so inner loop processes them\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// No more messages, exit\n\t\tbreak;\n\t}\n\n\tawait emit({ type: \"agent_end\", messages: newMessages });\n}\n\n/**\n * Start one provider request through the canonical agent-loop boundary.\n *\n * All callers, including host-owned tool-free finalization, receive the same failure-context\n * sanitization, context transformation/conversion, dynamic authentication, request-local reasoning,\n * and request preflight immediately before transport.\n */\nexport async function startAgentProviderRequest(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstreamFn?: StreamFn,\n): Promise<Awaited<ReturnType<StreamFn>>> {\n\treturn startPlannedAgentProviderRequest(context, config, signal, streamFn);\n}\n\n/**\n * Stream an assistant response from the LLM.\n * This is where AgentMessage[] gets transformed to Message[] for the LLM.\n */\nasync function streamAssistantResponse(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n\tstreamFn?: StreamFn,\n): Promise<AssistantMessage> {\n\tconst response = await startAgentProviderRequest(context, config, signal, streamFn);\n\n\tlet partialMessage: AssistantMessage | null = null;\n\tlet addedPartial = false;\n\n\tresponseEvents: for await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tawait emit({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tawait emit({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"done\":\n\t\t\tcase \"error\":\n\t\t\t\tbreak responseEvents;\n\t\t}\n\t}\n\n\tconst finalMessage = rejectNativeToolProtocolResidue(\n\t\tawait response.result(),\n\t\tcontext.tools ?? [],\n\t\tBoolean(config.textToolCallProtocol),\n\t);\n\tif (addedPartial) {\n\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t} else {\n\t\tcontext.messages.push(finalMessage);\n\t\tawait emit({ type: \"message_start\", message: { ...finalMessage } });\n\t}\n\tawait emit({ type: \"message_end\", message: finalMessage });\n\treturn finalMessage;\n}\n\ninterface ToolExecutionContext {\n\tcontext: AgentContext;\n\tassistantMessage: AssistantMessage;\n\tconfig: AgentLoopConfig;\n\tvalidationFailureTracker: ToolValidationFailureTracker;\n\trepairTeachTracker: ToolRepairTeachTracker;\n\ttoolFailureMemory: ToolFailureMemoryTracker;\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate;\n\tpreviousSuccessfulResults?: readonly ToolResultMessage[];\n\tsignal?: AbortSignal;\n\temit: AgentEventSink;\n}\n\n/**\n * Execute tool calls from an assistant message.\n */\nasync function executeToolCalls(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tconfig: AgentLoopConfig,\n\tvalidationFailureTracker: ToolValidationFailureTracker,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tpreviousSuccessfulTextProtocolResults: readonly ToolResultMessage[] | undefined,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<ExecutedToolCallBatch> {\n\tconst toolCalls = assistantMessage.content.filter((c) => c.type === \"toolCall\");\n\tconst hasSequentialToolCall = toolCalls.some(\n\t\t(tc) => currentContext.tools?.find((t) => t.name === tc.name)?.executionMode === \"sequential\",\n\t);\n\tconst execCtx: ToolExecutionContext = {\n\t\tcontext: currentContext,\n\t\tassistantMessage,\n\t\tconfig,\n\t\tvalidationFailureTracker,\n\t\trepairTeachTracker,\n\t\ttoolFailureMemory,\n\t\ttoolFailureRecoveryGate,\n\t\tpreviousSuccessfulResults: previousSuccessfulTextProtocolResults,\n\t\tsignal,\n\t\temit,\n\t};\n\tif (config.toolExecution === \"sequential\" || hasSequentialToolCall) {\n\t\treturn executeToolCallsSequential(execCtx, toolCalls);\n\t}\n\treturn executeToolCallsParallel(execCtx, toolCalls);\n}\n\ntype ExecutedToolCallBatch = {\n\tmessages: ToolResultMessage[];\n\tterminate: boolean;\n};\n\ntype SuccessfulTextProtocolBatch = {\n\tsignature: string;\n\tmessages: readonly ToolResultMessage[];\n\tcalls: readonly AgentToolCall[];\n};\n\ntype StartedToolCall =\n\t| { kind: \"finalized\"; finalized: FinalizedToolCallOutcome }\n\t| { kind: \"prepared\"; preparation: PreparedToolCall };\n\nasync function prepareAndStartToolCall(\n\texecCtx: ToolExecutionContext,\n\ttoolCall: AgentToolCall,\n\tindex: number,\n): Promise<StartedToolCall> {\n\tconst preparation = execCtx.previousSuccessfulResults\n\t\t? createRepeatedSuccessfulToolCallOutcome(execCtx.previousSuccessfulResults[index])\n\t\t: await prepareToolCall(\n\t\t\t\texecCtx.context,\n\t\t\t\texecCtx.assistantMessage,\n\t\t\t\ttoolCall,\n\t\t\t\texecCtx.config,\n\t\t\t\texecCtx.validationFailureTracker,\n\t\t\t\texecCtx.toolFailureMemory,\n\t\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\t\texecCtx.signal,\n\t\t\t);\n\tawait emitToolExecutionStart(toolCall, execCtx.emit);\n\tif (preparation.kind === \"immediate\") {\n\t\temitToolArgumentValidationTelemetry(execCtx.config, preparation.validationEvent, \"not_run\", \"none\");\n\t\treturn {\n\t\t\tkind: \"finalized\",\n\t\t\tfinalized: finalizeRejectedToolCall(\n\t\t\t\ttoolCall,\n\t\t\t\tpreparation,\n\t\t\t\texecCtx.toolFailureMemory,\n\t\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\t),\n\t\t};\n\t}\n\treturn { kind: \"prepared\", preparation };\n}\n\nasync function finalizeStartedToolCall(\n\texecCtx: ToolExecutionContext,\n\tstarted: StartedToolCall,\n): Promise<FinalizedToolCallOutcome> {\n\tif (started.kind === \"finalized\") return started.finalized;\n\treturn executeAndFinalizePreparedToolCall(\n\t\texecCtx.context,\n\t\texecCtx.assistantMessage,\n\t\tstarted.preparation,\n\t\texecCtx.config,\n\t\texecCtx.repairTeachTracker,\n\t\texecCtx.toolFailureMemory,\n\t\texecCtx.toolFailureRecoveryGate,\n\t\texecCtx.signal,\n\t\texecCtx.emit,\n\t);\n}\n\nasync function executeToolCallsSequential(\n\texecCtx: ToolExecutionContext,\n\ttoolCalls: AgentToolCall[],\n): Promise<ExecutedToolCallBatch> {\n\tconst finalizedCalls: FinalizedToolCallOutcome[] = [];\n\tconst messages: ToolResultMessage[] = [];\n\n\tfor (const [index, toolCall] of toolCalls.entries()) {\n\t\tconst started = await prepareAndStartToolCall(execCtx, toolCall, index);\n\t\tconst finalized = applyToolFailureRecoveryEffect(\n\t\t\texecCtx.toolFailureRecoveryGate,\n\t\t\tawait finalizeStartedToolCall(execCtx, started),\n\t\t);\n\n\t\tawait emitToolExecutionEnd(finalized, execCtx.emit);\n\t\tconst toolResultMessage = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(toolResultMessage, execCtx.emit);\n\t\tfinalizedCalls.push(finalized);\n\t\tmessages.push(toolResultMessage);\n\n\t\tif (execCtx.signal?.aborted) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\tmessages,\n\t\tterminate: execCtx.toolFailureRecoveryGate.isHalted() || shouldTerminateToolBatch(finalizedCalls),\n\t};\n}\n\nasync function executeToolCallsParallel(\n\texecCtx: ToolExecutionContext,\n\ttoolCalls: AgentToolCall[],\n): Promise<ExecutedToolCallBatch> {\n\tconst orderedFinalizedCalls: FinalizedToolCallOutcome[] = [];\n\tlet nextIndex = 0;\n\t// Account each bounded concurrent wave before launching more calls. Otherwise a single\n\t// assistant batch could start an unbounded number of failures before the circuit observes one.\n\twhile (nextIndex < toolCalls.length && !execCtx.signal?.aborted) {\n\t\tconst waveEnd = Math.min(nextIndex + TOOL_FAILURE_RECOVERY_ACCOUNTING_WAVE_SIZE, toolCalls.length);\n\t\tconst wave: FinalizedToolCallEntry[] = [];\n\t\tconst completionOrder: FinalizedToolCallOutcome[] = [];\n\t\tfor (; nextIndex < waveEnd; nextIndex++) {\n\t\t\tconst toolCall = toolCalls[nextIndex];\n\t\t\tconst started = await prepareAndStartToolCall(execCtx, toolCall, nextIndex);\n\t\t\tif (started.kind === \"finalized\") {\n\t\t\t\tawait emitToolExecutionEnd(started.finalized, execCtx.emit);\n\t\t\t\twave.push(started.finalized);\n\t\t\t} else {\n\t\t\t\twave.push(async () => {\n\t\t\t\t\tconst finalized = await finalizeStartedToolCall(execCtx, started);\n\t\t\t\t\tcompletionOrder.push(finalized);\n\t\t\t\t\treturn finalized;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (execCtx.signal?.aborted) {\n\t\t\t\tnextIndex++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst unappliedWave = await Promise.all(\n\t\t\twave.map((entry) => (typeof entry === \"function\" ? entry() : Promise.resolve(entry))),\n\t\t);\n\t\tconst appliedByOriginal = new Map<FinalizedToolCallOutcome, FinalizedToolCallOutcome>();\n\t\tconst finalizedWave = unappliedWave.map((finalized) => {\n\t\t\tconst applied = applyToolFailureRecoveryEffect(execCtx.toolFailureRecoveryGate, finalized);\n\t\t\tappliedByOriginal.set(finalized, applied);\n\t\t\treturn applied;\n\t\t});\n\t\tfor (const finalized of completionOrder) {\n\t\t\tawait emitToolExecutionEnd(appliedByOriginal.get(finalized) ?? finalized, execCtx.emit);\n\t\t}\n\t\torderedFinalizedCalls.push(...finalizedWave);\n\t}\n\tconst messages: ToolResultMessage[] = [];\n\tfor (const finalized of orderedFinalizedCalls) {\n\t\tconst toolResultMessage = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(toolResultMessage, execCtx.emit);\n\t\tmessages.push(toolResultMessage);\n\t}\n\n\treturn {\n\t\tmessages,\n\t\tterminate: execCtx.toolFailureRecoveryGate.isHalted() || shouldTerminateToolBatch(orderedFinalizedCalls),\n\t};\n}\n\ntype PreparedToolCall = {\n\tkind: \"prepared\";\n\ttoolCall: AgentToolCall;\n\ttool: AgentTool<any>;\n\targs: unknown;\n\texecutionGateReservation?: ToolFailureExecutionReservation;\n\tvalidationEvent?: ToolArgumentValidationTelemetryEvent;\n};\n\ntype ImmediateToolCallOutcome = {\n\tkind: \"immediate\";\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\tphase: ToolFailurePhase;\n\tfailureCode: string;\n\tcorrection: string;\n\tdiagnostic?: string;\n\trepeatedSuccessfulCall?: { previousToolCallId: string };\n\trepeatedToolFailure?: boolean;\n\texecutionGateReservation?: ToolFailureExecutionReservation;\n\tvalidationEvent?: ToolArgumentValidationTelemetryEvent;\n};\n\ntype ExecutedToolCallOutcome = {\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\terrorClass?: string;\n\tfailureMessage?: string;\n};\n\ntype FinalizedToolCallOutcome = {\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n\texecutionGateEffect?: ToolFailureRecoveryGateEffect;\n};\n\nfunction applyToolFailureRecoveryEffect(\n\tgate: ToolFailureRecoveryGate,\n\tfinalized: FinalizedToolCallOutcome,\n): FinalizedToolCallOutcome {\n\tconst halt = gate.apply(finalized.executionGateEffect);\n\tif (!halt) return finalized;\n\treturn createRecoveryExhaustedToolCallOutcome(finalized, halt);\n}\n\nfunction createRecoveryExhaustedToolCallOutcome(\n\tfinalized: FinalizedToolCallOutcome,\n\thalt: ToolFailureRecoveryHalt,\n): FinalizedToolCallOutcome {\n\tconst exhaustedResult = createToolFailureRecoveryExhaustedResult(halt.record, halt.diagnostic);\n\treturn {\n\t\t...finalized,\n\t\tresult: {\n\t\t\t...exhaustedResult,\n\t\t\t...(finalized.result.usage ? { usage: finalized.result.usage } : {}),\n\t\t},\n\t\tisError: true,\n\t};\n}\n\ntype FinalizedToolCallEntry = FinalizedToolCallOutcome | (() => Promise<FinalizedToolCallOutcome>);\n\ntype ToolValidationFailureTracker = {\n\tsignature?: string;\n\trepeats: number;\n\tescalatedSignature?: string;\n};\n\ntype ToolRepairTeachTracker = Map<string, number>;\n\nconst DEFAULT_TOOL_VALIDATION_ESCALATION_THRESHOLD = 3;\nconst TOOL_REPAIR_TEACH_EVERY = 5;\nconst REPEATED_SUCCESS_RESULT_MAX_CHARS = 2_048;\n\nfunction createRepeatedSuccessfulToolCallOutcome(\n\tpreviousResult: ToolResultMessage | undefined,\n): ImmediateToolCallOutcome {\n\tconst previousText = previousResult?.content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\")\n\t\t.slice(0, REPEATED_SUCCESS_RESULT_MAX_CHARS);\n\tconst diagnostic = previousText\n\t\t? `${REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic} Previous successful result: ${previousText}`\n\t\t: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic;\n\treturn {\n\t\tkind: \"immediate\",\n\t\tresult: createErrorToolResult(diagnostic),\n\t\tisError: true,\n\t\tphase: \"execution\",\n\t\tfailureCode: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.failureCode,\n\t\tcorrection: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.guidance,\n\t\tdiagnostic,\n\t\t...(previousResult ? { repeatedSuccessfulCall: { previousToolCallId: previousResult.toolCallId } } : {}),\n\t};\n}\n\nfunction createAbortedToolCallOutcome(\n\tvalidationEvent: ToolArgumentValidationTelemetryEvent | undefined,\n\texecutionGateReservation: ToolFailureExecutionReservation | undefined,\n): ImmediateToolCallOutcome {\n\treturn {\n\t\tkind: \"immediate\",\n\t\tresult: createErrorToolResult(\"Operation aborted\"),\n\t\tisError: true,\n\t\tphase: \"cancelled\",\n\t\tfailureCode: \"aborted\",\n\t\tcorrection: \"Retry only if the operation is still required.\",\n\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\tvalidationEvent,\n\t};\n}\n\nfunction shouldTerminateToolBatch(finalizedCalls: FinalizedToolCallOutcome[]): boolean {\n\treturn finalizedCalls.length > 0 && finalizedCalls.every((finalized) => finalized.result.terminate === true);\n}\n\nfunction prepareToolCallArguments(tool: AgentTool<any>, toolCall: AgentToolCall): AgentToolCall {\n\tif (!tool.prepareArguments) {\n\t\treturn toolCall;\n\t}\n\tconst preparedArguments = tool.prepareArguments(toolCall.arguments);\n\tif (preparedArguments === toolCall.arguments) {\n\t\treturn toolCall;\n\t}\n\treturn {\n\t\t...toolCall,\n\t\targuments: preparedArguments as Record<string, any>,\n\t};\n}\n\nfunction createValidationBounceTelemetry(\n\tconfig: AgentLoopConfig,\n\ttoolCall: AgentToolCall,\n\terrorKeyword: string,\n): ToolArgumentValidationTelemetryEvent {\n\treturn {\n\t\toutcome: \"bounced\",\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\ttool: toolCall.name,\n\t\tsource: toolCall.source,\n\t\tfailureModes: [\"other\"],\n\t\trepairsApplied: [],\n\t\terrorKeywords: [errorKeyword],\n\t\ttaught: \"none\",\n\t\texecutionOutcome: \"not_run\",\n\t};\n}\n\nfunction validationFailureCorrection(\n\tevent: ToolArgumentValidationTelemetryEvent | undefined,\n\ttoolName: string,\n): string {\n\tconst shape = event?.failureShape\n\t\t?.slice(0, 3)\n\t\t.map((entry) => `${entry.path}: expected ${entry.expectedType}, received ${entry.receivedType}`)\n\t\t.join(\"; \");\n\tconst rules = [\n\t\t...new Set(\n\t\t\t(event?.failureModes ?? [])\n\t\t\t\t.filter((mode) => mode !== \"other\")\n\t\t\t\t.map((mode) => formatToolRepairStandingRule(mode)),\n\t\t),\n\t];\n\treturn [`Match ${toolName} arguments to its current schema.`, shape ? `Fix ${shape}.` : undefined, ...rules]\n\t\t.filter((part): part is string => part !== undefined)\n\t\t.join(\" \");\n}\n\nfunction resetValidationFailureTracker(tracker: ToolValidationFailureTracker): void {\n\ttracker.signature = undefined;\n\ttracker.repeats = 0;\n}\n\nfunction emitToolArgumentValidationTelemetry(\n\tconfig: AgentLoopConfig,\n\tevent: ToolArgumentValidationTelemetryEvent | undefined,\n\texecutionOutcome: ToolArgumentExecutionOutcome,\n\ttaught: ToolArgumentValidationTelemetryEvent[\"taught\"],\n): void {\n\tif (!event) return;\n\tconfig.onToolArgumentValidation?.({ ...event, executionOutcome, taught });\n}\n\nfunction toolValidationEscalationThreshold(config: AgentLoopConfig): number {\n\treturn config.toolValidationEscalationThreshold ?? DEFAULT_TOOL_VALIDATION_ESCALATION_THRESHOLD;\n}\n\nfunction isToolArgumentRepairEmergencyDisabled(): boolean {\n\tconst env = typeof process === \"object\" && process ? process.env : undefined;\n\tconst value = env?.PI_TOOL_REPAIR_DISABLED;\n\tif (!value) return false;\n\treturn [\"1\", \"true\", \"yes\", \"on\"].includes(value.trim().toLowerCase());\n}\n\nfunction isToolArgumentValidationError(error: unknown): error is ToolArgumentValidationError {\n\treturn (\n\t\terror instanceof ToolArgumentValidationError ||\n\t\t(error instanceof Error &&\n\t\t\terror.name === \"ToolArgumentValidationError\" &&\n\t\t\ttypeof (error as { toolName?: unknown }).toolName === \"string\" &&\n\t\t\ttypeof (error as { signature?: unknown }).signature === \"string\" &&\n\t\t\ttypeof (error as { enrichment?: unknown }).enrichment === \"string\")\n\t);\n}\n\nfunction handleValidationFailure(\n\terror: ToolArgumentValidationError,\n\tconfig: AgentLoopConfig,\n\ttracker: ToolValidationFailureTracker,\n): string {\n\tif (tracker.signature === error.signature) {\n\t\ttracker.repeats++;\n\t} else {\n\t\ttracker.signature = error.signature;\n\t\ttracker.repeats = 1;\n\t\ttracker.escalatedSignature = undefined;\n\t}\n\n\tconst threshold = toolValidationEscalationThreshold(config);\n\tif (threshold <= 0 || tracker.repeats < threshold || tracker.escalatedSignature === error.signature) {\n\t\treturn error.message;\n\t}\n\n\ttracker.escalatedSignature = error.signature;\n\tconfig.onToolValidationEscalation?.({\n\t\ttool: error.toolName,\n\t\tsignature: error.signature,\n\t\trepeats: tracker.repeats,\n\t\tmodel: config.model.id,\n\t\tprovider: config.model.provider,\n\t});\n\treturn `${error.message}\\n\\nRepeated validation failure (${tracker.repeats} identical attempts). Use this full schema and example before retrying:\\n${error.enrichment}`;\n}\n\nasync function prepareToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCall: AgentToolCall,\n\tconfig: AgentLoopConfig,\n\tvalidationFailureTracker: ToolValidationFailureTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tsignal: AbortSignal | undefined,\n): Promise<PreparedToolCall | ImmediateToolCallOutcome> {\n\tconst tool = currentContext.tools?.find((candidate) => candidate.name === toolCall.name);\n\tif (!tool) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(`Tool ${toolCall.name} not found`),\n\t\t\tisError: true,\n\t\t\tphase: \"validation\",\n\t\t\tfailureCode: \"unknown_tool\",\n\t\t\tcorrection: \"Choose a tool from the currently available tool list.\",\n\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, \"unknown_tool\"),\n\t\t};\n\t}\n\n\tif (toolCall.errorMessage) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(toolCall.errorMessage),\n\t\t\tisError: true,\n\t\t\tphase: \"validation\",\n\t\t\tfailureCode: \"malformed_call\",\n\t\t\tcorrection: \"Resend one complete JSON argument object matching the current tool schema.\",\n\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, \"malformed_call\"),\n\t\t};\n\t}\n\n\tlet validationEvent: ToolArgumentValidationTelemetryEvent | undefined;\n\tlet executionGateReservation: ToolFailureExecutionReservation | undefined;\n\ttry {\n\t\tconst preparedToolCall = prepareToolCallArguments(tool, toolCall);\n\t\tconst validatedArgs = validateToolArguments(tool, preparedToolCall, {\n\t\t\tmodel: config.model.id,\n\t\t\tprovider: config.model.provider,\n\t\t\trepairEnabled: !isToolArgumentRepairEmergencyDisabled(),\n\t\t\ttelemetry: (event) => {\n\t\t\t\tvalidationEvent = event;\n\t\t\t},\n\t\t});\n\t\tresetValidationFailureTracker(validationFailureTracker);\n\t\tif (preparedToolCall.repairNotes) {\n\t\t\ttoolCall.repairNotes = preparedToolCall.repairNotes;\n\t\t}\n\t\tif (validatedArgs !== toolCall.arguments) {\n\t\t\ttoolCall.rawArguments ??= toolCall.arguments;\n\t\t\ttoolCall.arguments = validatedArgs;\n\t\t}\n\t\tconst unresolvedRecord = getUnresolvedToolFailure(toolFailureMemory, toolCall.name, validatedArgs);\n\t\tconst admission = toolFailureRecoveryGate.admit(tool, validatedArgs, unresolvedRecord);\n\t\tif (admission.kind === \"blocked\") {\n\t\t\tconst failureCode = admission.exhausted\n\t\t\t\t? admission.scope === \"operation\"\n\t\t\t\t\t? \"operation_recovery_exhausted\"\n\t\t\t\t\t: \"recovery_exhausted\"\n\t\t\t\t: \"repeated_failed_operation\";\n\t\t\tconst result = admission.exhausted\n\t\t\t\t? admission.scope === \"operation\"\n\t\t\t\t\t? createToolFailureOperationExhaustedResult(\n\t\t\t\t\t\t\tadmission.record,\n\t\t\t\t\t\t\tadmission.diagnostic ?? \"Tool operation recovery budget exhausted.\",\n\t\t\t\t\t\t)\n\t\t\t\t\t: createToolFailureRecoveryExhaustedResult(\n\t\t\t\t\t\t\tadmission.record,\n\t\t\t\t\t\t\tadmission.diagnostic ?? \"Tool failure recovery budget exhausted.\",\n\t\t\t\t\t\t)\n\t\t\t\t: createRepeatedToolFailureResult(admission.record);\n\t\t\tconst memoryRecord = result.details.piToolFailureMemory;\n\t\t\ttoolFailureMemory.set(admission.record.failureKey, memoryRecord);\n\t\t\treturn {\n\t\t\t\tkind: \"immediate\",\n\t\t\t\tresult,\n\t\t\t\tisError: true,\n\t\t\t\tphase: admission.record.phase,\n\t\t\t\tfailureCode,\n\t\t\t\tcorrection: memoryRecord.correction,\n\t\t\t\tdiagnostic: memoryRecord.diagnostic,\n\t\t\t\trepeatedToolFailure: true,\n\t\t\t\tvalidationEvent: createValidationBounceTelemetry(config, toolCall, failureCode),\n\t\t\t};\n\t\t}\n\t\texecutionGateReservation = admission.reservation;\n\t\tif (config.beforeToolCall) {\n\t\t\tconst beforeResult = await config.beforeToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall,\n\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (signal?.aborted) {\n\t\t\t\treturn createAbortedToolCallOutcome(validationEvent, executionGateReservation);\n\t\t\t}\n\t\t\tif (beforeResult?.block) {\n\t\t\t\tconst reason = beforeResult.reason || \"Tool execution was blocked\";\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"immediate\",\n\t\t\t\t\tresult: createErrorToolResult(reason),\n\t\t\t\t\tisError: true,\n\t\t\t\t\tphase: \"policy\",\n\t\t\t\t\tfailureCode: \"blocked\",\n\t\t\t\t\tcorrection: \"Choose an allowed approach or request the required authority before retrying.\",\n\t\t\t\t\tdiagnostic: reason,\n\t\t\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\t\t\tvalidationEvent,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\treturn createAbortedToolCallOutcome(validationEvent, executionGateReservation);\n\t\t}\n\t\treturn {\n\t\t\tkind: \"prepared\",\n\t\t\ttoolCall,\n\t\t\ttool,\n\t\t\targs: validatedArgs,\n\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\tvalidationEvent,\n\t\t};\n\t} catch (error) {\n\t\tconst message = isToolArgumentValidationError(error)\n\t\t\t? handleValidationFailure(error, config, validationFailureTracker)\n\t\t\t: error instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: String(error);\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(message),\n\t\t\tisError: true,\n\t\t\tphase: isToolArgumentValidationError(error) ? \"validation\" : \"preflight\",\n\t\t\tfailureCode: isToolArgumentValidationError(error) ? \"invalid_arguments\" : \"preflight_error\",\n\t\t\tcorrection: isToolArgumentValidationError(error)\n\t\t\t\t? validationFailureCorrection(validationEvent, toolCall.name)\n\t\t\t\t: toolFailureCorrection(message, \"rejected\", \"preflight\"),\n\t\t\tdiagnostic: isToolArgumentValidationError(error) ? undefined : message,\n\t\t\t...(executionGateReservation ? { executionGateReservation } : {}),\n\t\t\tvalidationEvent,\n\t\t};\n\t}\n}\n\nfunction finalizeRejectedToolCall(\n\ttoolCall: AgentToolCall,\n\toutcome: ImmediateToolCallOutcome,\n\ttracker: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n): FinalizedToolCallOutcome {\n\tif (outcome.repeatedToolFailure) {\n\t\treturn {\n\t\t\ttoolCall,\n\t\t\tresult: outcome.result,\n\t\t\tisError: true,\n\t\t};\n\t}\n\tconst record = rememberToolFailure(\n\t\ttracker,\n\t\ttoolCall.name,\n\t\ttoolCall.arguments,\n\t\t\"rejected\",\n\t\toutcome.failureCode,\n\t\toutcome.correction,\n\t\toutcome.diagnostic,\n\t\toutcome.phase,\n\t);\n\tconst halt = toolFailureRecoveryGate.apply({\n\t\tkind: \"failure\",\n\t\trecord,\n\t\targs: toolCall.arguments,\n\t\t...(outcome.executionGateReservation ? { reservation: outcome.executionGateReservation } : {}),\n\t});\n\tconst failureResult = halt\n\t\t? createToolFailureRecoveryExhaustedResult(halt.record, halt.diagnostic)\n\t\t: createToolFailureResult(record, outcome.result.terminate);\n\treturn {\n\t\ttoolCall,\n\t\tresult: outcome.repeatedSuccessfulCall\n\t\t\t? {\n\t\t\t\t\t...failureResult,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\t...failureResult.details,\n\t\t\t\t\t\tpiRepeatedSuccessfulCall: outcome.repeatedSuccessfulCall,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: failureResult,\n\t\tisError: true,\n\t};\n}\n\ntype LinkedToolAbort = {\n\tsignal: AbortSignal;\n\tdetachForeground(): void;\n\tcancel(): void;\n};\n\nfunction createLinkedToolAbort(foregroundSignal: AbortSignal | undefined): LinkedToolAbort {\n\tconst controller = new AbortController();\n\tconst abortFromForeground = (): void => controller.abort(foregroundSignal?.reason);\n\tlet linked = false;\n\tif (foregroundSignal?.aborted) {\n\t\tabortFromForeground();\n\t} else if (foregroundSignal) {\n\t\tforegroundSignal.addEventListener(\"abort\", abortFromForeground, { once: true });\n\t\tlinked = true;\n\t}\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdetachForeground: () => {\n\t\t\tif (!linked || !foregroundSignal) return;\n\t\t\tforegroundSignal.removeEventListener(\"abort\", abortFromForeground);\n\t\t\tlinked = false;\n\t\t},\n\t\tcancel: () => controller.abort(),\n\t};\n}\n\nfunction getBackgroundToolCallDelay(config: AgentLoopConfig): number | undefined {\n\tconst delay = config.backgroundToolCallAfterMs;\n\tif (delay === undefined || !Number.isFinite(delay) || delay <= 0) return undefined;\n\treturn delay;\n}\n\nasync function executeAndFinalizePreparedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\tconfig: AgentLoopConfig,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tforegroundSignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<FinalizedToolCallOutcome> {\n\tconst backgroundDelay = getBackgroundToolCallDelay(config);\n\tif (\n\t\t!config.handoffToolCall ||\n\t\t(backgroundDelay === undefined && config.subscribeToolCallHandoffRequest === undefined)\n\t) {\n\t\tconst executed = await executePreparedToolCall(prepared, foregroundSignal, emit);\n\t\treturn finalizeExecutedToolCall(\n\t\t\tcurrentContext,\n\t\t\tassistantMessage,\n\t\t\tprepared,\n\t\t\texecuted,\n\t\t\tconfig,\n\t\t\trepairTeachTracker,\n\t\t\ttoolFailureMemory,\n\t\t\ttoolFailureRecoveryGate,\n\t\t\tforegroundSignal,\n\t\t);\n\t}\n\n\tconst executionAbort = createLinkedToolAbort(foregroundSignal);\n\tconst startedAt = Date.now();\n\tlet emitForegroundUpdates = true;\n\tconst completion = (async (): Promise<FinalizedToolCallOutcome> => {\n\t\tconst executed = await executePreparedToolCall(prepared, executionAbort.signal, (event) => {\n\t\t\tif (emitForegroundUpdates) return emit(event);\n\t\t});\n\t\tconst finalized = await finalizeExecutedToolCall(\n\t\t\tcurrentContext,\n\t\t\tassistantMessage,\n\t\t\tprepared,\n\t\t\texecuted,\n\t\t\tconfig,\n\t\t\trepairTeachTracker,\n\t\t\ttoolFailureMemory,\n\t\t\ttoolFailureRecoveryGate,\n\t\t\texecutionAbort.signal,\n\t\t);\n\t\treturn finalized;\n\t})();\n\tcompletion.then(executionAbort.detachForeground, executionAbort.detachForeground);\n\n\tlet deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n\tconst triggers: Array<Promise<{ kind: \"deadline\" | \"manual\" }>> = [];\n\tif (backgroundDelay !== undefined) {\n\t\ttriggers.push(\n\t\t\tnew Promise<{ kind: \"deadline\" }>((resolve) => {\n\t\t\t\tdeadlineTimer = setTimeout(() => resolve({ kind: \"deadline\" }), backgroundDelay);\n\t\t\t\t(deadlineTimer as { unref?: () => void }).unref?.();\n\t\t\t}),\n\t\t);\n\t}\n\tlet unsubscribeHandoffRequest: (() => void) | undefined;\n\tif (config.subscribeToolCallHandoffRequest) {\n\t\tconst manual = new Promise<{ kind: \"manual\" }>((resolve) => {\n\t\t\ttry {\n\t\t\t\tunsubscribeHandoffRequest = config.subscribeToolCallHandoffRequest?.(prepared.toolCall.id, () =>\n\t\t\t\t\tresolve({ kind: \"manual\" }),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\tunsubscribeHandoffRequest = undefined;\n\t\t\t}\n\t\t});\n\t\ttriggers.push(manual);\n\t}\n\tlet outcome: { kind: \"completed\"; value: FinalizedToolCallOutcome } | { kind: \"deadline\" | \"manual\" };\n\ttry {\n\t\toutcome = await Promise.race([completion.then((value) => ({ kind: \"completed\" as const, value })), ...triggers]);\n\t} finally {\n\t\tif (deadlineTimer !== undefined) clearTimeout(deadlineTimer);\n\t\tunsubscribeHandoffRequest?.();\n\t}\n\tif (outcome.kind === \"completed\") return outcome.value;\n\tif (executionAbort.signal.aborted) return completion;\n\n\tlet handoffAccepted = false;\n\tconst handedOffCompletion = completion.then((finalized) =>\n\t\thandoffAccepted ? applyToolFailureRecoveryEffect(toolFailureRecoveryGate, finalized) : finalized,\n\t);\n\tvoid handedOffCompletion.catch(() => undefined);\n\tlet handoff: ReturnType<NonNullable<AgentLoopConfig[\"handoffToolCall\"]>>;\n\ttry {\n\t\thandoff = config.handoffToolCall({\n\t\t\tassistantMessage,\n\t\t\ttoolCall: prepared.toolCall,\n\t\t\targs: prepared.args,\n\t\t\tcontext: currentContext,\n\t\t\telapsedMs: Math.max(0, Date.now() - startedAt),\n\t\t\tcompletion: handedOffCompletion,\n\t\t\tcancel: executionAbort.cancel,\n\t\t});\n\t} catch {\n\t\treturn completion;\n\t}\n\thandoffAccepted = handoff !== undefined;\n\tif (!handoff) return completion;\n\n\temitForegroundUpdates = false;\n\texecutionAbort.detachForeground();\n\treturn {\n\t\ttoolCall: prepared.toolCall,\n\t\tresult: handoff.result,\n\t\tisError: handoff.isError ?? handoff.result.isError === true,\n\t};\n}\n\nasync function executePreparedToolCall(\n\tprepared: PreparedToolCall,\n\tsignal: AbortSignal | undefined,\n\temit: AgentEventSink,\n): Promise<ExecutedToolCallOutcome> {\n\tconst updateEvents: Promise<void>[] = [];\n\n\ttry {\n\t\tconst result = await prepared.tool.execute(\n\t\t\tprepared.toolCall.id,\n\t\t\tprepared.args as never,\n\t\t\tsignal,\n\t\t\t(partialResult) => {\n\t\t\t\tupdateEvents.push(\n\t\t\t\t\tPromise.resolve(\n\t\t\t\t\t\temit({\n\t\t\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\t\t\ttoolCallId: prepared.toolCall.id,\n\t\t\t\t\t\t\ttoolName: prepared.toolCall.name,\n\t\t\t\t\t\t\targs: prepared.toolCall.arguments,\n\t\t\t\t\t\t\tpartialResult,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\tawait Promise.all(updateEvents);\n\t\treturn {\n\t\t\tresult,\n\t\t\t// Tool definitions can report an expected operation failure without\n\t\t\t// throwing. Keep the returned result intact through afterToolCall so\n\t\t\t// policy hooks can inspect its bounded diagnostics and metadata.\n\t\t\tisError: result.isError === true,\n\t\t\t...(result.isError === true ? { errorClass: \"tool_result_error\" } : {}),\n\t\t};\n\t} catch (error) {\n\t\tawait Promise.all(updateEvents);\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tresult: createErrorToolResult(message),\n\t\t\tisError: true,\n\t\t\terrorClass: error instanceof Error ? error.name : typeof error,\n\t\t\tfailureMessage: message,\n\t\t};\n\t}\n}\n\nfunction repairTeachKey(toolName: string, note: string): string {\n\tconst repairName = /^\\[harness\\] ([^:]+):/.exec(note)?.[1] ?? note;\n\treturn `${toolName}\\0${repairName}`;\n}\n\nfunction shouldEmitRepairTeachNote(toolName: string, note: string, tracker: ToolRepairTeachTracker): boolean {\n\tconst key = repairTeachKey(toolName, note);\n\tconst count = (tracker.get(key) ?? 0) + 1;\n\ttracker.set(key, count);\n\treturn count === 1 || count % TOOL_REPAIR_TEACH_EVERY === 0;\n}\n\nfunction appendRepairTeachNotes(\n\tresult: AgentToolResult<any>,\n\ttoolCall: AgentToolCall,\n\ttracker: ToolRepairTeachTracker,\n\tconfig: AgentLoopConfig,\n): { result: AgentToolResult<any>; taught: boolean } {\n\tif (config.toolArgumentTeachEnabled === false) return { result, taught: false };\n\tconst notes = (toolCall.repairNotes ?? []).filter((note) => shouldEmitRepairTeachNote(toolCall.name, note, tracker));\n\tif (notes.length === 0) return { result, taught: false };\n\treturn {\n\t\tresult: {\n\t\t\t...result,\n\t\t\tcontent: [...result.content, { type: \"text\", text: notes.join(\"\\n\") }],\n\t\t},\n\t\ttaught: true,\n\t};\n}\n\nasync function finalizeExecutedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\texecuted: ExecutedToolCallOutcome,\n\tconfig: AgentLoopConfig,\n\trepairTeachTracker: ToolRepairTeachTracker,\n\ttoolFailureMemory: ToolFailureMemoryTracker,\n\ttoolFailureRecoveryGate: ToolFailureRecoveryGate,\n\tsignal: AbortSignal | undefined,\n): Promise<FinalizedToolCallOutcome> {\n\tlet result = executed.result;\n\tlet isError = executed.isError;\n\tlet failureMessage = executed.failureMessage ?? \"\";\n\tlet errorClass = executed.errorClass;\n\tlet executionGateEffect: ToolFailureRecoveryGateEffect | undefined;\n\n\tif (config.afterToolCall) {\n\t\ttry {\n\t\t\tconst afterResult = await config.afterToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall: prepared.toolCall,\n\t\t\t\t\targs: prepared.args,\n\t\t\t\t\tresult,\n\t\t\t\t\tisError,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (afterResult) {\n\t\t\t\tresult = {\n\t\t\t\t\tcontent: afterResult.content ?? result.content,\n\t\t\t\t\tdetails: afterResult.details ?? result.details,\n\t\t\t\t\tusage: afterResult.usage ?? result.usage,\n\t\t\t\t\tterminate: afterResult.terminate ?? result.terminate,\n\t\t\t\t};\n\t\t\t\tisError = afterResult.isError ?? isError;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tfailureMessage = error instanceof Error ? error.message : String(error);\n\t\t\terrorClass = error instanceof Error ? error.name : typeof error;\n\t\t\tresult = { ...createErrorToolResult(failureMessage), usage: result.usage };\n\t\t\tisError = true;\n\t\t}\n\t}\n\n\tif (isError) {\n\t\tconst usage = result.usage;\n\t\tconst effectiveFailureMessage =\n\t\t\tfailureMessage || result.content.find((block) => block.type === \"text\")?.text || \"Tool execution failed\";\n\t\tconst assessment = assessToolFailure(effectiveFailureMessage, \"failed\", errorClass);\n\t\tconst recoveryPlan = toolFailureRecoveryGate.planFailure(\n\t\t\tprepared.tool,\n\t\t\tprepared.args,\n\t\t\tassessment.failureCode,\n\t\t\tcurrentContext.tools ?? [],\n\t\t\tprepared.executionGateReservation,\n\t\t);\n\t\tconst record = rememberToolFailure(\n\t\t\ttoolFailureMemory,\n\t\t\tprepared.toolCall.name,\n\t\t\tprepared.args,\n\t\t\t\"failed\",\n\t\t\tassessment.failureCode,\n\t\t\trecoveryPlan.guidance,\n\t\t\tassessment.diagnostic,\n\t\t\tassessment.phase,\n\t\t);\n\t\texecutionGateEffect = {\n\t\t\tkind: \"failure\",\n\t\t\trecord,\n\t\t\targs: prepared.args,\n\t\t\ttargets: recoveryPlan.targets,\n\t\t\t...(prepared.executionGateReservation ? { reservation: prepared.executionGateReservation } : {}),\n\t\t};\n\t\tresult = { ...createToolFailureResult(record, result.terminate), usage };\n\t} else {\n\t\tclearToolFailure(toolFailureMemory, prepared.toolCall.name, prepared.args);\n\t\tif (!executed.isError) {\n\t\t\texecutionGateEffect = {\n\t\t\t\tkind: \"success\",\n\t\t\t\ttool: prepared.tool,\n\t\t\t\targs: prepared.args,\n\t\t\t\tevidenceResult: executed.result,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst repaired = isError\n\t\t? { result, taught: false }\n\t\t: appendRepairTeachNotes(result, prepared.toolCall, repairTeachTracker, config);\n\temitToolArgumentValidationTelemetry(\n\t\tconfig,\n\t\tprepared.validationEvent,\n\t\tisError ? \"failed\" : \"succeeded\",\n\t\trepaired.taught ? \"note\" : \"none\",\n\t);\n\n\treturn {\n\t\ttoolCall: prepared.toolCall,\n\t\tresult: repaired.result,\n\t\tisError,\n\t\texecutionGateEffect,\n\t};\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<any> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: {},\n\t};\n}\n\nasync function emitToolExecutionStart(toolCall: AgentToolCall, emit: AgentEventSink): Promise<void> {\n\tawait emit({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: toolCall.arguments,\n\t\trepair: getToolCallRepairInfo(toolCall),\n\t});\n}\n\nexport function getToolCallRepairInfo(toolCall: AgentToolCall): ToolCallRepairInfo | undefined {\n\tif (!toolCall.rawArguments && !toolCall.repairNotes?.length) return undefined;\n\treturn {\n\t\trepaired: true,\n\t\t...(toolCall.rawArguments ? { rawArguments: toolCall.rawArguments } : {}),\n\t\t...(toolCall.repairNotes?.length ? { notes: toolCall.repairNotes } : {}),\n\t};\n}\n\nasync function emitToolExecutionEnd(finalized: FinalizedToolCallOutcome, emit: AgentEventSink): Promise<void> {\n\tawait emit({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: finalized.toolCall.id,\n\t\ttoolName: finalized.toolCall.name,\n\t\tresult: finalized.result,\n\t\tisError: finalized.isError,\n\t\trepair: getToolCallRepairInfo(finalized.toolCall),\n\t});\n}\n\nfunction createToolResultMessage(finalized: FinalizedToolCallOutcome): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: finalized.toolCall.id,\n\t\ttoolName: finalized.toolCall.name,\n\t\tcontent: finalized.result.content,\n\t\tdetails: finalized.result.details,\n\t\tusage: finalized.result.usage,\n\t\tisError: finalized.isError,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nasync function emitToolResultMessage(toolResultMessage: ToolResultMessage, emit: AgentEventSink): Promise<void> {\n\tawait emit({ type: \"message_start\", message: toolResultMessage });\n\tawait emit({ type: \"message_end\", message: toolResultMessage });\n}\n\nasync function rejectRecoveryDeliveryToolCalls(\n\ttoolCalls: readonly AgentToolCall[],\n\thalt: ToolFailureRecoveryHalt,\n\temit: AgentEventSink,\n): Promise<ToolResultMessage[]> {\n\tconst messages: ToolResultMessage[] = [];\n\tfor (const toolCall of toolCalls) {\n\t\tawait emitToolExecutionStart(toolCall, emit);\n\t\tconst finalized: FinalizedToolCallOutcome = {\n\t\t\ttoolCall,\n\t\t\tresult: createToolFailureRecoveryExhaustedResult(\n\t\t\t\thalt.record,\n\t\t\t\t\"Tool execution is disabled during the mandatory recovery delivery turn.\",\n\t\t\t),\n\t\t\tisError: true,\n\t\t};\n\t\tawait emitToolExecutionEnd(finalized, emit);\n\t\tconst message = createToolResultMessage(finalized);\n\t\tawait emitToolResultMessage(message, emit);\n\t\tmessages.push(message);\n\t}\n\treturn messages;\n}\n"]}
|
package/dist/agent.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export interface AgentOptions {
|
|
|
26
26
|
toolValidationEscalationThreshold?: number;
|
|
27
27
|
onToolValidationEscalation?: AgentLoopConfig["onToolValidationEscalation"];
|
|
28
28
|
prepareNextTurn?: (signal?: AbortSignal) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined;
|
|
29
|
+
shouldStopAfterTurn?: (signal?: AbortSignal) => boolean | Promise<boolean>;
|
|
29
30
|
steeringMode?: QueueMode;
|
|
30
31
|
followUpMode?: QueueMode;
|
|
31
32
|
sessionId?: string;
|
|
@@ -72,6 +73,7 @@ export declare class Agent {
|
|
|
72
73
|
toolValidationEscalationThreshold?: number;
|
|
73
74
|
onToolValidationEscalation?: AgentLoopConfig["onToolValidationEscalation"];
|
|
74
75
|
prepareNextTurn?: (signal?: AbortSignal) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined;
|
|
76
|
+
shouldStopAfterTurn?: (signal?: AbortSignal) => boolean | Promise<boolean>;
|
|
75
77
|
private activeRun?;
|
|
76
78
|
/** No-progress gates shared only by host continuations of the current logical prompt. */
|
|
77
79
|
private loopContinuationState;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -107,6 +107,7 @@ export class Agent {
|
|
|
107
107
|
this.toolValidationEscalationThreshold = options.toolValidationEscalationThreshold;
|
|
108
108
|
this.onToolValidationEscalation = options.onToolValidationEscalation;
|
|
109
109
|
this.prepareNextTurn = options.prepareNextTurn;
|
|
110
|
+
this.shouldStopAfterTurn = options.shouldStopAfterTurn;
|
|
110
111
|
this.steeringQueue = new PendingMessageQueue(options.steeringMode ?? "one-at-a-time");
|
|
111
112
|
this.followUpQueue = new PendingMessageQueue(options.followUpMode ?? "one-at-a-time");
|
|
112
113
|
this.sessionId = options.sessionId;
|
|
@@ -297,6 +298,9 @@ export class Agent {
|
|
|
297
298
|
handoffToolCall: this.handoffToolCall,
|
|
298
299
|
subscribeToolCallHandoffRequest: this.subscribeToolCallHandoffRequest,
|
|
299
300
|
prepareNextTurn: this.prepareNextTurn ? async () => await this.prepareNextTurn?.(this.signal) : undefined,
|
|
301
|
+
shouldStopAfterTurn: this.shouldStopAfterTurn
|
|
302
|
+
? async () => (await this.shouldStopAfterTurn?.(this.signal)) ?? false
|
|
303
|
+
: undefined,
|
|
300
304
|
convertToLlm: this.convertToLlm,
|
|
301
305
|
transformContext: this.transformContext,
|
|
302
306
|
planContext: this.planContext,
|