@evalops/maestro 0.10.29 → 0.10.30
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/transport/events.d.ts +23 -0
- package/dist/agent/transport/events.d.ts.map +1 -0
- package/dist/agent/transport/events.js +69 -0
- package/dist/agent/transport/events.js.map +1 -0
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +1 -68
- package/dist/agent/transport.js.map +1 -1
- package/dist/cli.js +130 -90
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/server/agent-runtime-ledger.d.ts +18 -3
- package/dist/server/agent-runtime-ledger.d.ts.map +1 -1
- package/dist/server/agent-runtime-ledger.js +45 -1
- package/dist/server/agent-runtime-ledger.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/agent/transport.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Transport Layer - LLM Communication and Tool Execution Orchestration\n *\n * This module is the heart of the agent's execution loop. It handles:\n * 1. Streaming communication with LLM providers (Anthropic, OpenAI, Google)\n * 2. Concurrent tool execution with configurable parallelism\n * 3. Safety enforcement via action firewall integration\n * 4. Hook system integration for tool lifecycle events\n *\n * ## Architecture Overview\n *\n * ```\n * User Message → Transport.run() → Provider Stream → Parse Tool Calls\n * ↓ ↓\n * Emit Turn Events ←── Tool Results ←── Execute Tools\n * ↓ ↑\n * Continue Loop ───────────────────────────────┘\n * ```\n *\n * ## Concurrent Tool Execution\n *\n * When the LLM returns multiple tool calls in a single response, we execute\n * them concurrently up to `maxConcurrentToolExecutions` limit. This improves\n * latency for independent operations (e.g., reading multiple files).\n *\n * However, tools that affect WorkflowStateTracker (PII tracking) are serialized\n * to maintain consistent state ordering. A warning is logged when this happens.\n *\n * ## Safety Integration Points\n *\n * 1. **Pre-execution**: Action firewall evaluates each tool call\n * 2. **Approval flow**: Dangerous actions trigger user approval\n * 3. **PII tracking**: WorkflowState hooks track data flow for egress prevention\n * 4. **Doom loop detection**: Identical consecutive tool calls are blocked\n * 5. **Rate limiting**: Per-tool rate limits prevent runaway execution\n *\n * ## Event Stream\n *\n * The transport yields AgentEvents that drive the UI:\n * - turn_start/end: Turn boundaries for UI state management\n * - message_start/update/end: Streaming content updates\n * - tool_execution_start/end: Tool lifecycle for progress display\n * - action_approval_required/resolved: Approval UI triggers\n *\n * @module agent/transport\n */\n\nimport { isContextFirewallBlockingEnabled } from \"../config/env-vars.js\";\nimport { type ToolHookService, createToolHookService } from \"../hooks/index.js\";\nimport { getProviderNetworkConfig } from \"../providers/network-config.js\";\nimport { isStreamIdleTimeoutError } from \"../providers/stream-idle-timeout.js\";\nimport { type Clock, systemClock } from \"../utils/clock.js\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"transport\");\nimport type { AuthCredential } from \"../providers/auth.js\";\nimport { defaultActionFirewall } from \"../safety/action-firewall.js\";\nimport { AdaptiveThresholds } from \"../safety/adaptive-thresholds.js\";\nimport { checkSessionLimits } from \"../safety/policy.js\";\nimport {\n\ttype SafetyMiddleware,\n\tcreateSafetyMiddleware,\n} from \"../safety/safety-middleware.js\";\nimport { SemanticJudge } from \"../safety/semantic-judge.js\";\nimport {\n\tWorkflowStateError,\n\tWorkflowStateTracker,\n\tapplyWorkflowStateHooks,\n\tisWorkflowTrackedTool,\n} from \"../safety/workflow-state.js\";\nimport {\n\ttype SkillArtifactMetadata,\n\tgetSkillArtifactMetadataFromDetails,\n} from \"../skills/artifact-metadata.js\";\nimport {\n\ttype PathScopedMutation,\n\tgetPathScopedMutation,\n\tisParallelSafeTool,\n\tisReadOnlyTool,\n\tpathScopesOverlap,\n} from \"../tools/parallel-execution.js\";\nimport { trackUsage } from \"../tracking/cost-tracker.js\";\nimport { getTrainingHeaders } from \"../training.js\";\nimport type { ActionApprovalService } from \"./action-approval.js\";\nimport { getStoredCredentials } from \"./keys.js\";\nimport type { ToolRetryConfig, ToolRetryService } from \"./tool-retry.js\";\nimport { createProviderStream } from \"./transport/create-provider-stream.js\";\nimport {\n\ttype ReusableToolResultCacheGeneration,\n\ttype ReusableToolResultEntry,\n\tclearReusableToolResultState,\n\tclearRunScopedReusableToolResultState,\n\tcloneToolOutcomeForCall,\n\tcomputeReusableToolResultSnapshot,\n\tcreateToolMetadataCache,\n\tdecrementPendingReusableToolSafetyCheck,\n\tgetReusableToolRegistrySignature,\n\tgetReusableToolResultCacheKey,\n\thasPendingMutatingToolExecution,\n\thasReusableToolResultState,\n\tincrementPendingReusableToolSafetyCheck,\n\tinvalidateReusableToolResultsAfterMutation,\n\trecordReusableToolExecutionBridgeOutput,\n\tresolvePlatformToolExecutionBridge,\n\ttrackReusableToolResult,\n} from \"./transport/reusable-tool-results.js\";\nimport type { PlatformToolExecutionBridge } from \"./transport/tool-execution-bridge.js\";\nimport { createToolExecutionPromise } from \"./transport/tool-execution.js\";\nimport {\n\ttype ToolSafetyVerdict,\n\tevaluateToolSafety,\n} from \"./transport/tool-safety-pipeline.js\";\nimport {\n\ttype PendingExecution,\n\ttype ToolExecutionOutcome,\n\tcreateToolUpdateQueue,\n\twaitForNextExecutionOrUpdate,\n} from \"./transport/tool-update-queue.js\";\nimport {\n\ttype SessionTokenCounter,\n\ttype ToolAuditLogger,\n\tcalculateCost,\n\tresolveEnvCredential,\n} from \"./transport/transport-utils.js\";\nimport type {\n\tAgentEvent,\n\tAgentRunConfig,\n\tAgentTool,\n\tAgentToolResult,\n\tAgentTransport,\n\tAppMessage,\n\tAssistantMessage,\n\tMessage,\n\tQueuedMessage,\n\tToolCall,\n\tToolResultMessage,\n\tToolSchedulingDecision,\n\tToolSchedulingMetadata,\n} from \"./types.js\";\n\ntype GovernedToolOutcome =\n\t| \"approval_required\"\n\t| \"approval_pending\"\n\t| \"authentication_required\"\n\t| \"denied\"\n\t| \"rate_limited\";\n\nclass AgentEventQueue {\n\tprivate events: AgentEvent[] = [];\n\tprivate pending?: Promise<void>;\n\tprivate wake?: () => void;\n\n\tpush(event: AgentEvent): void {\n\t\tthis.events.push(event);\n\t\tif (this.wake) {\n\t\t\tconst wake = this.wake;\n\t\t\tthis.pending = undefined;\n\t\t\tthis.wake = undefined;\n\t\t\twake();\n\t\t}\n\t}\n\n\tshift(): AgentEvent | undefined {\n\t\treturn this.events.shift();\n\t}\n\n\twait(): Promise<void> {\n\t\tif (this.events.length > 0) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tif (!this.pending) {\n\t\t\tthis.pending = new Promise<void>((resolve) => {\n\t\t\t\tthis.wake = resolve;\n\t\t\t});\n\t\t}\n\t\treturn this.pending;\n\t}\n\n\tclearPendingWaiter(): void {\n\t\tthis.pending = undefined;\n\t\tthis.wake = undefined;\n\t}\n}\n\nfunction isDynamicToolApprovalEvent(event: AgentEvent): boolean {\n\treturn (\n\t\tevent.type === \"action_approval_required\" ||\n\t\tevent.type === \"action_approval_resolved\"\n\t);\n}\n\nfunction getGovernedToolResultEventMetadata(details: unknown): {\n\terrorCode?: string;\n\tapprovalRequestId?: string;\n\tgovernedOutcome?: GovernedToolOutcome;\n} {\n\tif (!details || typeof details !== \"object\") {\n\t\treturn {};\n\t}\n\n\tconst governedOutcome = (details as { governedOutcome?: unknown })\n\t\t.governedOutcome;\n\tif (!governedOutcome || typeof governedOutcome !== \"object\") {\n\t\treturn {};\n\t}\n\n\tconst normalized = governedOutcome as Record<string, unknown>;\n\tconst classification =\n\t\ttypeof normalized.classification === \"string\"\n\t\t\t? (normalized.classification as GovernedToolOutcome)\n\t\t\t: undefined;\n\tconst errorCode =\n\t\ttypeof normalized.code === \"string\" && normalized.code.trim().length > 0\n\t\t\t? normalized.code.trim()\n\t\t\t: classification;\n\tconst approvalRequestId =\n\t\ttypeof normalized.approvalRequestId === \"string\" &&\n\t\tnormalized.approvalRequestId.trim().length > 0\n\t\t\t? normalized.approvalRequestId.trim()\n\t\t\t: undefined;\n\n\treturn {\n\t\terrorCode,\n\t\tapprovalRequestId,\n\t\tgovernedOutcome: classification,\n\t};\n}\n\nfunction getSkillToolResultEventMetadata(details: unknown): {\n\tskillMetadata?: SkillArtifactMetadata;\n} {\n\treturn {\n\t\tskillMetadata: getSkillArtifactMetadataFromDetails(details),\n\t};\n}\n\n// Re-export types for backward compatibility\nexport type {\n\tSessionTokenCounter,\n\tToolAuditLogger,\n} from \"./transport/transport-utils.js\";\n\nexport interface ClientToolExecutionService {\n\trequestExecution: (\n\t\tid: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t\tsignal?: AbortSignal,\n\t) => Promise<{ content: AgentToolResult[\"content\"]; isError: boolean }>;\n}\n\nexport interface ProviderTransportOptions {\n\tgetApiKey?: (\n\t\tprovider: string,\n\t) => Promise<string | undefined> | string | undefined;\n\tgetAuthContext?: (\n\t\tprovider: string,\n\t) => AuthCredential | undefined | Promise<AuthCredential | undefined>;\n\tcorsProxyUrl?: string;\n\tapprovalService?: ActionApprovalService;\n\ttoolRetryService?: ToolRetryService;\n\ttoolRetryConfig?: ToolRetryConfig;\n\tclientToolService?: ClientToolExecutionService;\n\tmaxConcurrentToolExecutions?: number;\n\t/** Hook service for tool lifecycle hooks (PreToolUse, PostToolUse, etc.) */\n\thookService?: ToolHookService;\n\t/** Current working directory for hook execution (required if hookService not provided) */\n\tcwd?: string;\n\t/** Clock for timestamps and rate limiting (default: system clock) */\n\tclock?: Clock;\n\t/** Session token counter used for enforcing policy session limits */\n\tsessionTokenCounter?: SessionTokenCounter;\n\t/** Audit logger for sensitive tool execution events */\n\tauditLogger?: ToolAuditLogger;\n\t/** Optional Platform ToolExecution bridge override */\n\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n}\n\n/**\n * Provider Transport - Multi-provider LLM communication with safety controls\n *\n * The main transport implementation that handles streaming LLM responses,\n * executing tool calls, and enforcing safety policies. Supports Anthropic,\n * OpenAI, and Google providers through a unified interface.\n *\n * ## State Management\n *\n * - **workflowState**: Tracks PII artifacts for egress prevention\n * - **recentToolTimestamps**: Per-tool timestamps for rate limiting\n * - **safetyMiddleware**: Unified security (loop detection, sequence analysis, firewall)\n *\n * ## Safety Mechanisms\n *\n * ### SafetyMiddleware Integration\n * All safety checks are now handled through SafetyMiddleware:\n * - **Loop Detection**: Catches identical consecutive calls (replaces doom loop)\n * - **Sequence Analysis**: Detects suspicious behavioral patterns\n * - **Context Firewall**: Sanitizes arguments and blocks sensitive content\n *\n * ### Rate Limiting\n * Each tool has a per-window rate limit (TOOL_RATE_LIMIT calls per\n * TOOL_RATE_WINDOW_MS). This prevents runaway tool execution that could\n * waste resources or hit external API limits.\n *\n * ### Workflow State Serialization\n * When tools that track PII are present in a batch, concurrent execution\n * is disabled to ensure correct state ordering.\n */\nexport class ProviderTransport implements AgentTransport {\n\t/** Tracks PII artifacts through the workflow for egress prevention */\n\tprivate workflowState = new WorkflowStateTracker();\n\t/** Prevents repeated warnings about serialized workflow execution */\n\tprivate warnedAboutWorkflowConcurrency = false;\n\t/** Per-tool timestamp arrays for rate limiting enforcement */\n\tprivate recentToolTimestamps = new Map<string, number[]>();\n\t/** Safety middleware for sequence analysis and context sanitization */\n\tprivate readonly safetyMiddleware!: SafetyMiddleware;\n\t/** Adaptive thresholds for anomaly-based rate limiting */\n\tprivate readonly adaptiveThresholds!: AdaptiveThresholds;\n\t/** Tool call count in current minute window (for adaptive tracking) */\n\tprivate toolCallsThisMinute = 0;\n\t/** Last minute window start time */\n\tprivate minuteWindowStart = 0;\n\tprivate readonly clock: Clock;\n\tprivate readonly sessionTokenCounter?: SessionTokenCounter;\n\tprivate readonly auditLogger?: ToolAuditLogger;\n\tprivate readonly reusableToolResults = new Map<\n\t\tstring,\n\t\tReusableToolResultEntry\n\t>();\n\tprivate readonly pendingReusableToolResults = new Map<\n\t\tstring,\n\t\tPromise<ToolExecutionOutcome>\n\t>();\n\tprivate readonly policyCheckedReusableToolResultKeys = new Set<string>();\n\tprivate readonly pendingReusableToolSafetyChecks = new Map<string, number>();\n\tprivate readonly reusableToolResultCacheGeneration: ReusableToolResultCacheGeneration =\n\t\t{ value: 0 };\n\tprivate reusableToolResultSnapshot?: string;\n\tprivate reusableToolRegistrySignature?: string;\n\n\t/**\n\t * Rate Limit Window - time window for counting tool invocations\n\t * 10 seconds balances burst protection with legitimate rapid use\n\t */\n\tprivate static readonly TOOL_RATE_WINDOW_MS = 10_000;\n\n\t/**\n\t * Rate Limit Maximum - max calls per tool within the window\n\t * 5 calls in 10 seconds allows fast iteration while preventing abuse\n\t */\n\tprivate static readonly TOOL_RATE_LIMIT = 5;\n\n\tconstructor(private options: ProviderTransportOptions = {}) {\n\t\tthis.clock = options.clock ?? systemClock;\n\t\tthis.sessionTokenCounter = options.sessionTokenCounter;\n\t\tthis.auditLogger = options.auditLogger;\n\t\tthis.minuteWindowStart = this.clock.now();\n\t\t// Initialize adaptive thresholds for anomaly detection\n\t\tthis.adaptiveThresholds = new AdaptiveThresholds({\n\t\t\talpha: 0.3, // Give more weight to recent observations\n\t\t\tanomalyThreshold: 2.5, // 2.5 std devs = more aggressive anomaly detection\n\t\t\tminObservations: 5, // Need at least 5 observations before anomaly detection\n\t\t});\n\t\t// Initialize safety middleware for unified security checks\n\t\tthis.safetyMiddleware = createSafetyMiddleware({\n\t\t\t// Enable loop detection (replaces transport's doom loop detection)\n\t\t\tenableLoopDetection: true,\n\t\t\t// Configure loop detector to match transport's previous behavior\n\t\t\tloopDetector: {\n\t\t\t\tmaxIdenticalCalls: 3, // Match DOOM_LOOP_THRESHOLD\n\t\t\t\tmaxSimilarCalls: 5,\n\t\t\t\tmaxCallsPerMinute: 30, // More aggressive rate limit than TOOL_RATE_LIMIT\n\t\t\t\tautoPause: false, // Transport handles the pause flow\n\t\t\t},\n\t\t\t// Enable sequence analysis for behavioral threat detection\n\t\t\tenableSequenceAnalysis: true,\n\t\t\t// Enable context firewall with blocking for sanitizing audit logs\n\t\t\tenableContextFirewall: true,\n\t\t\t// Configure context firewall blocking (can be disabled via MAESTRO_CONTEXT_FIREWALL_BLOCKING=0)\n\t\t\tcontextFirewall: {\n\t\t\t\t// When blocking is disabled, vault credentials so test keys can pass through safely.\n\t\t\t\tvaultCredentials: !isContextFirewallBlockingEnabled(),\n\t\t\t\tblocking: {\n\t\t\t\t\tenabled: isContextFirewallBlockingEnabled(),\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate refreshReusableToolResultState(\n\t\ttools: readonly AgentTool[],\n\t\tcwd: string,\n\t): void {\n\t\tconst registrySignature = getReusableToolRegistrySignature(tools);\n\t\tconst snapshot = computeReusableToolResultSnapshot(cwd);\n\t\tif (snapshot === undefined) {\n\t\t\tclearReusableToolResultState(\n\t\t\t\tthis.reusableToolResults,\n\t\t\t\tthis.pendingReusableToolResults,\n\t\t\t\tthis.policyCheckedReusableToolResultKeys,\n\t\t\t\tthis.pendingReusableToolSafetyChecks,\n\t\t\t\tthis.reusableToolResultCacheGeneration,\n\t\t\t);\n\t\t\tthis.reusableToolResultSnapshot = undefined;\n\t\t\tthis.reusableToolRegistrySignature = registrySignature;\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.reusableToolResultSnapshot !== snapshot ||\n\t\t\t(this.reusableToolRegistrySignature !== undefined &&\n\t\t\t\tthis.reusableToolRegistrySignature !== registrySignature)\n\t\t) {\n\t\t\tclearReusableToolResultState(\n\t\t\t\tthis.reusableToolResults,\n\t\t\t\tthis.pendingReusableToolResults,\n\t\t\t\tthis.policyCheckedReusableToolResultKeys,\n\t\t\t\tthis.pendingReusableToolSafetyChecks,\n\t\t\t\tthis.reusableToolResultCacheGeneration,\n\t\t\t);\n\t\t}\n\t\tthis.reusableToolResultSnapshot = snapshot;\n\t\tthis.reusableToolRegistrySignature = registrySignature;\n\t}\n\n\t/**\n\t * Continue from current context without a new user message.\n\t *\n\t * This method reuses the run() logic but skips adding a new user message.\n\t * Useful for:\n\t * - Retrying after transient errors (rate limits, overload, 5xx)\n\t * - Continuing after context compaction\n\t * - Resuming interrupted tool execution\n\t *\n\t * @param messages - Current conversation history\n\t * @param config - Runtime configuration\n\t * @param signal - Optional abort signal for cancellation\n\t * @returns Async iterable of agent events\n\t */\n\tasync *continue(\n\t\tmessages: Message[],\n\t\tconfig: AgentRunConfig,\n\t\tsignal?: AbortSignal,\n\t): AsyncGenerator<AgentEvent, void, unknown> {\n\t\t// Create a synthetic \"continuation\" message that signals we're resuming\n\t\t// This doesn't get added to the conversation but satisfies the run() interface\n\t\tconst continuationMessage: Message = {\n\t\t\trole: \"user\",\n\t\t\tcontent: [\n\t\t\t\t{ type: \"text\", text: \"[System: Continuing from previous context]\" },\n\t\t\t],\n\t\t\ttimestamp: this.clock.now(),\n\t\t};\n\n\t\t// Delegate to run() - the continuation message is used internally\n\t\t// but the actual context comes from the messages array\n\t\tyield* this.run(messages, continuationMessage, config, signal);\n\t}\n\n\tasync *run(\n\t\tmessages: Message[],\n\t\tuserMessage: Message,\n\t\tcfg: AgentRunConfig,\n\t\tsignal?: AbortSignal,\n\t): AsyncGenerator<AgentEvent, void, unknown> {\n\t\tconst { systemPrompt, tools } = cfg;\n\t\tlet model = cfg.model;\n\t\tconst firewall = defaultActionFirewall;\n\n\t\t// Configure semantic judge if LLM access is provided\n\t\tif (cfg.runLLM) {\n\t\t\tfirewall.setSemanticJudge(new SemanticJudge(cfg.runLLM));\n\t\t}\n\n\t\t// Initialize hook service for tool lifecycle hooks\n\t\tconst hookService =\n\t\t\tthis.options.hookService ??\n\t\t\t(this.options.cwd\n\t\t\t\t? createToolHookService({\n\t\t\t\t\t\tcwd: this.options.cwd,\n\t\t\t\t\t\tsessionId: cfg.session?.id,\n\t\t\t\t\t\tresolveTool: (toolName) =>\n\t\t\t\t\t\t\tcfg.tools?.find((tool) => tool.name === toolName),\n\t\t\t\t\t})\n\t\t\t\t: undefined);\n\n\t\tthis.workflowState.reset();\n\n\t\tconst scriptedReplayRun = model.provider === \"scripted-replay\";\n\t\tconst codexAppServerRun = model.api === \"openai-codex-app-server\";\n\t\tlet credential: AuthCredential | undefined;\n\t\tif (\n\t\t\tthis.options.getAuthContext &&\n\t\t\t!scriptedReplayRun &&\n\t\t\t!codexAppServerRun\n\t\t) {\n\t\t\tcredential = await this.options.getAuthContext(model.provider);\n\t\t}\n\t\tif (!credential && this.options.getApiKey) {\n\t\t\tconst fallbackKey = await this.options.getApiKey(model.provider);\n\t\t\tif (fallbackKey) {\n\t\t\t\tcredential = {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\ttoken: fallbackKey,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"env\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (!credential && scriptedReplayRun) {\n\t\t\tcredential = {\n\t\t\t\tprovider: model.provider,\n\t\t\t\ttoken: \"scripted-replay\",\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"env\",\n\t\t\t};\n\t\t}\n\t\tif (!credential && codexAppServerRun) {\n\t\t\tcredential = {\n\t\t\t\tprovider: model.provider,\n\t\t\t\ttoken: \"codex-app-server\",\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"env\",\n\t\t\t};\n\t\t}\n\t\tif (!credential) {\n\t\t\tconst envCredential = resolveEnvCredential(model.provider);\n\t\t\tif (envCredential) {\n\t\t\t\tcredential = envCredential;\n\t\t\t}\n\t\t}\n\t\tif (!credential) {\n\t\t\tconst stored = getStoredCredentials(model.provider);\n\t\t\tif (stored.apiKey) {\n\t\t\t\tcredential = {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\ttoken: stored.apiKey,\n\t\t\t\t\ttype: stored.authType ?? \"api-key\",\n\t\t\t\t\tsource: \"custom_literal\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst apiKey = credential?.token;\n\t\tif (!apiKey) {\n\t\t\tthrow new Error(\n\t\t\t\t`No credentials found for provider \"${model.provider}\". Provide an API key or configure getAuthContext.`,\n\t\t\t);\n\t\t}\n\n\t\tyield { type: \"message_start\", message: userMessage };\n\t\tif (cfg.emitUserMessageEnd !== false) {\n\t\t\tyield { type: \"message_end\", message: userMessage };\n\t\t}\n\n\t\tconst context = {\n\t\t\tsystemPrompt,\n\t\t\tmessages,\n\t\t\ttools,\n\t\t};\n\n\t\tif (this.options.corsProxyUrl && model.baseUrl) {\n\t\t\tmodel = {\n\t\t\t\t...model,\n\t\t\t\tbaseUrl: `${this.options.corsProxyUrl}/?url=${encodeURIComponent(model.baseUrl)}`,\n\t\t\t};\n\t\t}\n\n\t\tconst dynamicToolEventQueue = new AgentEventQueue();\n\t\tconst reusableToolResultCwd = this.options.cwd ?? process.cwd();\n\t\tconst toolMetadataCache = createToolMetadataCache(\n\t\t\ttools,\n\t\t\treusableToolResultCwd,\n\t\t);\n\t\tthis.refreshReusableToolResultState(tools, reusableToolResultCwd);\n\t\tconst reusableToolResults = this.reusableToolResults;\n\t\tconst pendingReusableToolResults = this.pendingReusableToolResults;\n\t\tconst policyCheckedReusableToolResultKeys =\n\t\t\tthis.policyCheckedReusableToolResultKeys;\n\t\tconst pendingReusableToolSafetyChecks =\n\t\t\tthis.pendingReusableToolSafetyChecks;\n\t\tconst reusableToolResultCacheGeneration =\n\t\t\tthis.reusableToolResultCacheGeneration;\n\t\tclearRunScopedReusableToolResultState(\n\t\t\treusableToolResults,\n\t\t\tpendingReusableToolResults,\n\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\tpendingReusableToolSafetyChecks,\n\t\t\treusableToolResultCacheGeneration,\n\t\t);\n\t\tconst pendingDynamicToolExecutions: PendingExecution[] = [];\n\t\tconst platformToolExecutionBridge = resolvePlatformToolExecutionBridge(\n\t\t\tthis.options.platformToolExecutionBridge,\n\t\t);\n\t\tconst trainingHeaders = getTrainingHeaders();\n\t\tconst headers =\n\t\t\ttrainingHeaders || model.headers || credential?.headers\n\t\t\t\t? {\n\t\t\t\t\t\t...(model.headers ?? {}),\n\t\t\t\t\t\t...(trainingHeaders ?? {}),\n\t\t\t\t\t\t...(credential?.headers ?? {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst executeDynamicTool = async (\n\t\t\ttoolCall: ToolCall,\n\t\t): Promise<AgentToolResult> => {\n\t\t\tconst capturedResults: ToolExecutionOutcome[] = [];\n\t\t\tconst dynamicToolError = (message: string): AgentToolResult => ({\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t});\n\t\t\tconst toAgentToolResult = (\n\t\t\t\toutcome: ToolExecutionOutcome | ToolResultMessage | undefined,\n\t\t\t): AgentToolResult => {\n\t\t\t\tif (!outcome) {\n\t\t\t\t\treturn dynamicToolError(\"Dynamic tool execution was blocked\");\n\t\t\t\t}\n\t\t\t\tconst message = \"message\" in outcome ? outcome.message : outcome;\n\t\t\t\treturn {\n\t\t\t\t\tcontent: message.content,\n\t\t\t\t\tisError: \"message\" in outcome ? outcome.isError : message.isError,\n\t\t\t\t\tdetails: message.details,\n\t\t\t\t\t...(\"message\" in outcome && outcome.toolExecutionId\n\t\t\t\t\t\t? { toolExecutionId: outcome.toolExecutionId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(\"message\" in outcome && outcome.approvalRequestId\n\t\t\t\t\t\t? { approvalRequestId: outcome.approvalRequestId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst emitDynamicToolResult = (\n\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\teffectiveToolCall: ToolCall,\n\t\t\t\tisError: boolean,\n\t\t\t\tmetadata?: {\n\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t},\n\t\t\t): AgentEvent[] => {\n\t\t\t\ttry {\n\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\tisError,\n\t\t\t\t\t});\n\t\t\t\t\tcapturedResults.push({\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tisError,\n\t\t\t\t\t\t...metadata,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\tcapturedResults.push({\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: effectiveToolCall.id,\n\t\t\t\t\t\t\t\ttoolName: effectiveToolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\ttoolCall,\n\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t);\n\t\t\t\tconst alreadyHadReusableToolResultState =\n\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\tincrementPendingReusableToolSafetyCheck(\n\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t);\n\t\t\t\tconst shouldSkipLoopDetection = (\n\t\t\t\t\tcandidateToolCall: ToolCall,\n\t\t\t\t): boolean => {\n\t\t\t\t\tconst candidateKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\tcandidateToolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tcandidateKey !== undefined &&\n\t\t\t\t\t\tcandidateKey === reusableToolResultKey &&\n\t\t\t\t\t\talreadyHadReusableToolResultState &&\n\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingDynamicToolExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\tcandidateKey,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tlet safetyVerdict: ToolSafetyVerdict | undefined;\n\t\t\t\tlet rateLimitUpdate:\n\t\t\t\t\t| { toolCallsThisMinute: number; minuteWindowStart: number }\n\t\t\t\t\t| undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst safetyIterator = evaluateToolSafety({\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\tcfg,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\tworkflowState: this.workflowState,\n\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\tapprovalService: this.options.approvalService,\n\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\thookService,\n\t\t\t\t\t\tfirewall,\n\t\t\t\t\t\trateLimitState: {\n\t\t\t\t\t\t\trecentToolTimestamps: this.recentToolTimestamps,\n\t\t\t\t\t\t\ttoolCallsThisMinute: this.toolCallsThisMinute,\n\t\t\t\t\t\t\tminuteWindowStart: this.minuteWindowStart,\n\t\t\t\t\t\t\trateWindowMs: ProviderTransport.TOOL_RATE_WINDOW_MS,\n\t\t\t\t\t\t\trateLimit: ProviderTransport.TOOL_RATE_LIMIT,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshouldSkipLoopDetection,\n\t\t\t\t\t\temitToolResult: emitDynamicToolResult,\n\t\t\t\t\t});\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst safetyStep = await safetyIterator.next();\n\t\t\t\t\t\tif (safetyStep.done) {\n\t\t\t\t\t\t\t({ verdict: safetyVerdict, rateLimitUpdate } = safetyStep.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isDynamicToolApprovalEvent(safetyStep.value)) {\n\t\t\t\t\t\t\tdynamicToolEventQueue.push(safetyStep.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tdecrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!safetyVerdict || !rateLimitUpdate) {\n\t\t\t\t\treturn dynamicToolError(\"Safety pipeline did not return a verdict.\");\n\t\t\t\t}\n\t\t\t\tthis.toolCallsThisMinute = rateLimitUpdate.toolCallsThisMinute;\n\t\t\t\tthis.minuteWindowStart = rateLimitUpdate.minuteWindowStart;\n\t\t\t\tif (safetyVerdict.outcome === \"blocked\") {\n\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1));\n\t\t\t\t}\n\n\t\t\t\tconst {\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t} = safetyVerdict;\n\t\t\t\tif (tool.executionLocation === \"client\") {\n\t\t\t\t\treturn dynamicToolError(\n\t\t\t\t\t\t`Client-side tool execution is not available for Codex app-server dynamic tool \"${tool.name}\".`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst policyCheckedReusableToolResultKey =\n\t\t\t\t\tgetReusableToolResultCacheKey(effectiveToolCall, toolMetadataCache);\n\t\t\t\tconst canReuseToolResult =\n\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\tpolicyCheckedReusableToolResultKey === reusableToolResultKey;\n\t\t\t\tif (canReuseToolResult && reusableToolResultKey) {\n\t\t\t\t\tpolicyCheckedReusableToolResultKeys.add(reusableToolResultKey);\n\t\t\t\t}\n\t\t\t\tconst canServeReusableToolResult =\n\t\t\t\t\tcanReuseToolResult &&\n\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\tpendingDynamicToolExecutions,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\tif (canServeReusableToolResult) {\n\t\t\t\t\tconst cachedEntry = reusableToolResults.get(reusableToolResultKey);\n\t\t\t\t\tif (cachedEntry) {\n\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\tconst cachedOutcome = await recordReusableToolExecutionBridgeOutput(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\toutcome: {\n\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\t...cachedEntry.message,\n\t\t\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\t\t\tcontent: cachedEntry.message.content.map((item) => ({\n\t\t\t\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisError: false,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\temitDynamicToolResult(\n\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1) ?? cachedOutcome);\n\t\t\t\t\t}\n\t\t\t\t\tconst pendingReusable = pendingReusableToolResults.get(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t);\n\t\t\t\t\tif (pendingReusable) {\n\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\tconst cachedOutcome = await recordReusableToolExecutionBridgeOutput(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\toutcome: cloneToolOutcomeForCall(\n\t\t\t\t\t\t\t\t\tawait pendingReusable,\n\t\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\t\tthis.clock.now(),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\temitDynamicToolResult(\n\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1) ?? cachedOutcome);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst toolUpdateQueue = createToolUpdateQueue();\n\t\t\t\tconst executionPromise = createToolExecutionPromise({\n\t\t\t\t\ttoolCall,\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttool,\n\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\tcfg,\n\t\t\t\t\tsignal,\n\t\t\t\t\tclock: this.clock,\n\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\thookService,\n\t\t\t\t\ttoolRetryService: this.options.toolRetryService,\n\t\t\t\t\ttoolRetryConfig: this.options.toolRetryConfig,\n\t\t\t\t\tclientToolService: this.options.clientToolService,\n\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\ttoolExecutionBridgePlan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t});\n\t\t\t\tconst trackedExecutionPromise =\n\t\t\t\t\tcanReuseToolResult && reusableToolResultKey\n\t\t\t\t\t\t? trackReusableToolResult(\n\t\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\t\texecutionPromise,\n\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: executionPromise;\n\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\tpromise: trackedExecutionPromise,\n\t\t\t\t};\n\t\t\t\tpendingDynamicToolExecutions.push(pendingExecution);\n\t\t\t\tconst pendingExecutions: PendingExecution[] = [pendingExecution];\n\t\t\t\tlet outcome: Awaited<typeof executionPromise> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twhile (pendingExecutions.length > 0) {\n\t\t\t\t\t\tconst next = await waitForNextExecutionOrUpdate(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (next.kind === \"update\") {\n\t\t\t\t\t\t\tif (next.event.type === \"tool_retry_required\") {\n\t\t\t\t\t\t\t\tthis.options.toolRetryService?.skip(\n\t\t\t\t\t\t\t\t\tnext.event.request.id,\n\t\t\t\t\t\t\t\t\t\"Codex app-server dynamic tool callbacks cannot prompt for retry\",\n\t\t\t\t\t\t\t\t\t\"runtime\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\toutcome = next.outcome;\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tconst pendingIndex =\n\t\t\t\t\t\tpendingDynamicToolExecutions.indexOf(pendingExecution);\n\t\t\t\t\tif (pendingIndex >= 0) {\n\t\t\t\t\t\tpendingDynamicToolExecutions.splice(pendingIndex, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!outcome) {\n\t\t\t\t\treturn dynamicToolError(\"Dynamic tool execution did not complete.\");\n\t\t\t\t}\n\t\t\t\tinvalidateReusableToolResultsAfterMutation(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\treusableToolResults,\n\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\t\tresult: outcome.message,\n\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\tisError: outcome.isError,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\treturn toAgentToolResult({\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: effectiveToolCall.id,\n\t\t\t\t\t\t\t\ttoolName: effectiveToolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\ttoolExecutionId: outcome.toolExecutionId,\n\t\t\t\t\t\t\tapprovalRequestId: outcome.approvalRequestId,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn toAgentToolResult(outcome);\n\t\t\t} finally {\n\t\t\t\tthis.safetyMiddleware.clearCredentials();\n\t\t\t}\n\t\t};\n\n\t\tconst streamOptions = {\n\t\t\tapiKey,\n\t\t\tmaxTokens: model.maxTokens,\n\t\t\tsignal,\n\t\t\tauthType: credential?.type ?? \"api-key\",\n\t\t\theaders,\n\t\t\trequestBody: credential?.requestBody,\n\t\t\tsessionId: cfg.session?.id,\n\t\t\tcwd: this.options.cwd,\n\t\t\ttaskBudget: cfg.taskBudget,\n\t\t\texecuteDynamicTool,\n\t\t};\n\n\t\tlet hasMoreToolCalls = true;\n\t\tconst allMessages = [...context.messages];\n\t\tconst getSteeringMessages =\n\t\t\tcfg.getSteeringMessages ?? cfg.getQueuedMessages;\n\t\tconst getFollowUpMessages = cfg.getFollowUpMessages;\n\t\tconst getPromptOnlyMessages = cfg.getPromptOnlyMessages;\n\n\t\tlet pendingMessages = getSteeringMessages\n\t\t\t? await getSteeringMessages<AppMessage>()\n\t\t\t: [];\n\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tyield { type: \"turn_start\" };\n\n\t\t\t// Enforce session limits before every turn (duration + tokens)\n\t\t\tif (cfg.session) {\n\t\t\t\tlet tokenCount: number | undefined;\n\t\t\t\tif (this.sessionTokenCounter) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst count = await this.sessionTokenCounter(cfg.session.id);\n\t\t\t\t\t\tif (count !== null) {\n\t\t\t\t\t\t\ttokenCount = count;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// Log error but don't throw - let checkSessionLimits handle it.\n\t\t\t\t\t\t// If limits are active, it will fail closed because tokenCount is undefined.\n\t\t\t\t\t\t// If no limits are active, we shouldn't block just because tracking failed.\n\t\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\t\"Failed to get session token count\",\n\t\t\t\t\t\t\terr instanceof Error ? err : new Error(String(err)),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst limitCheck = checkSessionLimits(cfg.session, {\n\t\t\t\t\ttokenCount: tokenCount,\n\t\t\t\t});\n\t\t\t\tif (!limitCheck.allowed) {\n\t\t\t\t\tthrow new Error(limitCheck.reason);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (getPromptOnlyMessages) {\n\t\t\t\tconst promptOnlyMessages = await getPromptOnlyMessages();\n\t\t\t\tif (promptOnlyMessages.length > 0) {\n\t\t\t\t\tallMessages.push(...promptOnlyMessages);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const queued of pendingMessages) {\n\t\t\t\t\tyield { type: \"message_start\", message: queued.original };\n\t\t\t\t\tyield { type: \"message_end\", message: queued.original };\n\t\t\t\t\tif (queued.llm) {\n\t\t\t\t\t\tallMessages.push(queued.llm);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\tlet currentAssistantMessage: AssistantMessage | null = null;\n\t\t\tlet completedAssistantMessage: AssistantMessage | null = null;\n\t\t\tconst toolCallsToExecute: ToolCall[] = [];\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tconst pendingProviderToolResultMessages: ToolResultMessage[] = [];\n\t\t\tlet steeringAfterTools: QueuedMessage<AppMessage>[] | null = null;\n\t\t\tlet pendingNextTurn = false;\n\t\t\tlet encounteredError = false;\n\t\t\tlet firstModelOutputSeen = false;\n\n\t\t\tconst currentMessages = cfg.preprocessMessages\n\t\t\t\t? await cfg.preprocessMessages(\n\t\t\t\t\t\tallMessages,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsystemPrompt,\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t)\n\t\t\t\t: allMessages;\n\n\t\t\tconst currentContext = {\n\t\t\t\t...context,\n\t\t\t\tmessages: currentMessages,\n\t\t\t};\n\n\t\t\t// Stream retry logic for idle timeouts\n\t\t\tconst networkConfig = getProviderNetworkConfig(model.provider);\n\t\t\tconst maxStreamRetries = networkConfig.streamMaxRetries;\n\t\t\tlet streamAttempt = 0;\n\t\t\tlet streamSuccess = false;\n\n\t\t\twhile (!streamSuccess && streamAttempt <= maxStreamRetries) {\n\t\t\t\tif (streamAttempt > 0) {\n\t\t\t\t\t// Reset state for retry\n\t\t\t\t\tcurrentAssistantMessage = null;\n\t\t\t\t\ttoolCallsToExecute.length = 0;\n\t\t\t\t\ttoolResults.length = 0;\n\t\t\t\t\tpendingProviderToolResultMessages.length = 0;\n\t\t\t\t\tpendingNextTurn = false;\n\n\t\t\t\t\tconst backoffMs = Math.min(\n\t\t\t\t\t\tnetworkConfig.backoffInitial * 2 ** (streamAttempt - 1),\n\t\t\t\t\t\tnetworkConfig.backoffMax,\n\t\t\t\t\t);\n\t\t\t\t\tlogger.info(\"Retrying stream after idle timeout\", {\n\t\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t\t\tmaxRetries: maxStreamRetries,\n\t\t\t\t\t\tbackoffMs,\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t});\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, backoffMs));\n\t\t\t\t}\n\t\t\t\tstreamAttempt++;\n\n\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:request:start\", {\n\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t});\n\t\t\t\tconst stream = createProviderStream(\n\t\t\t\t\tmodel,\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tstreamOptions,\n\t\t\t\t\t{ reasoning: cfg.reasoning, reasoningSummary: cfg.reasoningSummary },\n\t\t\t\t);\n\t\t\t\tconst streamIterator = stream[Symbol.asyncIterator]();\n\t\t\t\tlet nextStreamEvent = streamIterator.next();\n\n\t\t\t\ttry {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst queuedDynamicToolEvent = dynamicToolEventQueue.shift();\n\t\t\t\t\t\tif (queuedDynamicToolEvent) {\n\t\t\t\t\t\t\tyield queuedDynamicToolEvent;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst dynamicToolEventReady = dynamicToolEventQueue.wait();\n\t\t\t\t\t\tconst nextEvent = await Promise.race([\n\t\t\t\t\t\t\tdynamicToolEventReady.then(() => ({\n\t\t\t\t\t\t\t\ttype: \"dynamicTool\" as const,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tnextStreamEvent.then((result) => ({\n\t\t\t\t\t\t\t\ttype: \"provider\" as const,\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tif (nextEvent.type === \"dynamicTool\") {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\t\tif (nextEvent.result.done) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst event = nextEvent.result.value;\n\t\t\t\t\t\tnextStreamEvent = streamIterator.next();\n\t\t\t\t\t\tif (event.type === \"start\") {\n\t\t\t\t\t\t\tcurrentAssistantMessage = event.partial;\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"message_start\",\n\t\t\t\t\t\t\t\t\tmessage: currentAssistantMessage,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.type === \"text_delta\" ||\n\t\t\t\t\t\t\tevent.type === \"thinking_delta\" ||\n\t\t\t\t\t\t\tevent.type === \"toolcall_delta\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\t\t\t\tmessage: currentAssistantMessage,\n\t\t\t\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_start\") {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\targs: event.args,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_update\") {\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\targs: event.args,\n\t\t\t\t\t\t\t\tpartialResult: event.partialResult,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_end\") {\n\t\t\t\t\t\t\ttoolResults.push(event.result);\n\t\t\t\t\t\t\tpendingProviderToolResultMessages.push(event.result);\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: event.approvalRequestId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\tresult: event.result,\n\t\t\t\t\t\t\t\tisError: event.isError,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"toolcall_end\") {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst rawArgs = event.toolCall.arguments;\n\t\t\t\t\t\t\tconst normalizedArgs =\n\t\t\t\t\t\t\t\trawArgs &&\n\t\t\t\t\t\t\t\ttypeof rawArgs === \"object\" &&\n\t\t\t\t\t\t\t\t!Array.isArray(rawArgs)\n\t\t\t\t\t\t\t\t\t? (rawArgs as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\ttoolCallsToExecute.push({\n\t\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\t\tid: event.toolCall.id,\n\t\t\t\t\t\t\t\tname: event.toolCall.name,\n\t\t\t\t\t\t\t\targuments: normalizedArgs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tcompletedAssistantMessage = currentAssistantMessage;\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message: currentAssistantMessage };\n\t\t\t\t\t\t\t\tif (currentAssistantMessage.usage) {\n\t\t\t\t\t\t\t\t\tconst usage = currentAssistantMessage.usage;\n\t\t\t\t\t\t\t\t\tconst cost = model.cost\n\t\t\t\t\t\t\t\t\t\t? calculateCost(usage, model.cost)\n\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\tif (credential?.type !== \"bearer-token\") {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\ttrackUsage({\n\t\t\t\t\t\t\t\t\t\t\t\tsessionId: cfg.session?.id,\n\t\t\t\t\t\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensInput: usage.input || 0,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensOutput: usage.output || 0,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensCacheRead: usage.cacheRead,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensCacheWrite: usage.cacheWrite,\n\t\t\t\t\t\t\t\t\t\t\t\tcost,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\t\tlogger.warn(\"Failed to track usage\", {\n\t\t\t\t\t\t\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: String(error),\n\t\t\t\t\t\t\t\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (const message of pendingProviderToolResultMessages) {\n\t\t\t\t\t\t\t\tyield { type: \"message_start\", message };\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingProviderToolResultMessages.length = 0;\n\t\t\t\t\t\t\tpendingNextTurn = toolCallsToExecute.length > 0;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"error\") {\n\t\t\t\t\t\t\tcompletedAssistantMessage = event.error;\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message: currentAssistantMessage };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingNextTurn = false;\n\t\t\t\t\t\t\tencounteredError = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (\n\t\t\t\t\t\tlet event = dynamicToolEventQueue.shift();\n\t\t\t\t\t\tevent;\n\t\t\t\t\t\tevent = dynamicToolEventQueue.shift()\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\tstreamSuccess = true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\twhile (dynamicToolEventQueue.shift()) {\n\t\t\t\t\t\t// Drop queued dynamic tool events from the abandoned stream attempt.\n\t\t\t\t\t}\n\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\tif (\n\t\t\t\t\t\tisStreamIdleTimeoutError(error) &&\n\t\t\t\t\t\tstreamAttempt <= maxStreamRetries\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogger.warn(\"Stream idle timeout, will retry\", {\n\t\t\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t\t\t\tmaxRetries: maxStreamRetries,\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tidleMs: error.idleMs,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue; // Retry the stream\n\t\t\t\t\t}\n\t\t\t\t\t// Not retryable or exhausted retries - re-throw\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t} // end while retry loop\n\n\t\t\tif (toolCallsToExecute.length > 0) {\n\t\t\t\tconst toolUpdateQueue = createToolUpdateQueue();\n\t\t\t\tconst pendingExecutions: PendingExecution[] = [];\n\t\t\t\tconst rawConcurrency = this.options.maxConcurrentToolExecutions ?? 2;\n\t\t\t\tconst configuredConcurrency = Number.isFinite(rawConcurrency)\n\t\t\t\t\t? Math.max(1, Math.floor(rawConcurrency))\n\t\t\t\t\t: 2;\n\t\t\t\tconst hasWorkflowTrackedTool = toolCallsToExecute.some((call) =>\n\t\t\t\t\tisWorkflowTrackedTool(call.name),\n\t\t\t\t);\n\t\t\t\tconst requiresSerializedTurn =\n\t\t\t\t\thasWorkflowTrackedTool && toolCallsToExecute.length > 1;\n\n\t\t\t\tconst toolDefinitionsByName = toolMetadataCache.definitions;\n\t\t\t\tconst isReadOnlyToolCall = (toolCall: ToolCall): boolean => {\n\t\t\t\t\tconst toolDef = toolDefinitionsByName.get(toolCall.name);\n\t\t\t\t\treturn toolDef\n\t\t\t\t\t\t? isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source)\n\t\t\t\t\t\t: false;\n\t\t\t\t};\n\t\t\t\tconst isParallelSafeToolCall = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolDefinitionsByName.get(toolCall.name),\n\t\t\t\t): boolean =>\n\t\t\t\t\ttoolDef\n\t\t\t\t\t\t? isParallelSafeTool(\n\t\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: false;\n\t\t\t\tconst readOnlyToolCalls = toolCallsToExecute.filter(isReadOnlyToolCall);\n\t\t\t\tconst readOnlyConcurrencyLimit =\n\t\t\t\t\treadOnlyToolCalls.length > 0\n\t\t\t\t\t\t? Math.min(\n\t\t\t\t\t\t\t\t8,\n\t\t\t\t\t\t\t\tMath.max(configuredConcurrency, readOnlyToolCalls.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: configuredConcurrency;\n\t\t\t\tconst parallelSafeMutationConcurrencyLimit = Math.min(\n\t\t\t\t\t8,\n\t\t\t\t\tconfiguredConcurrency,\n\t\t\t\t);\n\t\t\t\tconst concurrencyLimitForTool = (\n\t\t\t\t\tdefaultLimit: number,\n\t\t\t\t\ttoolDef?: AgentTool,\n\t\t\t\t): number => {\n\t\t\t\t\tconst sourceMaxConcurrency =\n\t\t\t\t\t\ttoolDef?.source?.type === \"mcp\"\n\t\t\t\t\t\t\t? toolDef.source.parallelMaxConcurrency\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn Math.min(\n\t\t\t\t\t\tdefaultLimit,\n\t\t\t\t\t\ttypeof sourceMaxConcurrency === \"number\" &&\n\t\t\t\t\t\t\tNumber.isFinite(sourceMaxConcurrency) &&\n\t\t\t\t\t\t\tsourceMaxConcurrency > 0\n\t\t\t\t\t\t\t? Math.floor(sourceMaxConcurrency)\n\t\t\t\t\t\t\t: defaultLimit,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tconst readOnlyConcurrencyLimitForTool = (toolDef?: AgentTool): number =>\n\t\t\t\t\tconcurrencyLimitForTool(readOnlyConcurrencyLimit, toolDef);\n\t\t\t\tconst parallelSafeMutationConcurrencyLimitForTool = (\n\t\t\t\t\ttoolDef?: AgentTool,\n\t\t\t\t): number =>\n\t\t\t\t\tconcurrencyLimitForTool(\n\t\t\t\t\t\tparallelSafeMutationConcurrencyLimit,\n\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t);\n\t\t\t\tlet concurrencyLimit = configuredConcurrency;\n\t\t\t\tconst pendingMutationScopes = new Map<\n\t\t\t\t\tPendingExecution,\n\t\t\t\t\tPathScopedMutation\n\t\t\t\t>();\n\t\t\t\tconst pendingExecutionWaveIndexes = new Map<PendingExecution, number>();\n\t\t\t\tconst pendingExecutionScheduling = new Map<\n\t\t\t\t\tPendingExecution,\n\t\t\t\t\tToolSchedulingDecision\n\t\t\t\t>();\n\t\t\t\tconst toolSchedulingDecisions = new Map<\n\t\t\t\t\tstring,\n\t\t\t\t\tToolSchedulingDecision\n\t\t\t\t>();\n\t\t\t\tconst toolPhaseStartMs = this.clock.now();\n\t\t\t\tlet currentWaveIndex = 0;\n\t\t\t\tconst mutationPathBase = this.options.cwd ?? process.cwd();\n\t\t\t\tconst toolSchedulingMetadata = new Map<\n\t\t\t\t\tstring,\n\t\t\t\t\tToolSchedulingMetadata\n\t\t\t\t>();\n\n\t\t\t\tconst nextWaveIndex = (): number => {\n\t\t\t\t\tcurrentWaveIndex += 1;\n\t\t\t\t\treturn currentWaveIndex;\n\t\t\t\t};\n\n\t\t\t\tconst pendingWaveIndex = (): number =>\n\t\t\t\t\tpendingExecutions.length > 0\n\t\t\t\t\t\t? (pendingExecutionWaveIndexes.get(pendingExecutions[0]!) ??\n\t\t\t\t\t\t\tcurrentWaveIndex)\n\t\t\t\t\t\t: nextWaveIndex();\n\n\t\t\t\tconst schedulerWaitMs = (): number =>\n\t\t\t\t\tMath.max(0, this.clock.now() - toolPhaseStartMs);\n\n\t\t\t\tconst isMcpParallelOptIn = (toolDef: AgentTool): boolean =>\n\t\t\t\t\ttoolDef.source?.type === \"mcp\" &&\n\t\t\t\t\ttoolDef.source.supportsParallelToolCalls === true &&\n\t\t\t\t\ttoolDef.annotations?.destructiveHint !== true;\n\n\t\t\t\tconst buildToolPhaseSummary = ():\n\t\t\t\t\t| Extract<AgentEvent, { type: \"tool_phase_summary\" }>\n\t\t\t\t\t| undefined => {\n\t\t\t\t\tconst rawDecisions = [...toolSchedulingDecisions.values()].sort(\n\t\t\t\t\t\t(left, right) => left.emittedIndex - right.emittedIndex,\n\t\t\t\t\t);\n\t\t\t\t\tif (rawDecisions.length === 0) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst waveCounts = new Map<number, number>();\n\t\t\t\t\tfor (const decision of rawDecisions) {\n\t\t\t\t\t\tif (decision.waveIndex !== undefined) {\n\t\t\t\t\t\t\twaveCounts.set(\n\t\t\t\t\t\t\t\tdecision.waveIndex,\n\t\t\t\t\t\t\t\t(waveCounts.get(decision.waveIndex) ?? 0) + 1,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst decisions: Extract<\n\t\t\t\t\t\tAgentEvent,\n\t\t\t\t\t\t{ type: \"tool_phase_summary\" }\n\t\t\t\t\t>[\"decisions\"] = rawDecisions.map((decision) => {\n\t\t\t\t\t\tconst isSingleModelToolCall = rawDecisions.length === 1;\n\t\t\t\t\t\tconst waveSize =\n\t\t\t\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t\t\t\t? (waveCounts.get(decision.waveIndex) ?? 1)\n\t\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t\tconst outcome =\n\t\t\t\t\t\t\tdecision.cacheHit === true\n\t\t\t\t\t\t\t\t? \"cached\"\n\t\t\t\t\t\t\t\t: decision.decision === \"skipped\"\n\t\t\t\t\t\t\t\t\t? \"skipped\"\n\t\t\t\t\t\t\t\t\t: decision.decision === \"delayed\" ||\n\t\t\t\t\t\t\t\t\t\t\tdecision.blockedByMutation === true\n\t\t\t\t\t\t\t\t\t\t? \"delayed\"\n\t\t\t\t\t\t\t\t\t\t: decision.decision === \"parallelized\" ||\n\t\t\t\t\t\t\t\t\t\t\t\t(waveSize > 1 && decision.decision === \"scheduled\")\n\t\t\t\t\t\t\t\t\t\t\t? \"parallelized\"\n\t\t\t\t\t\t\t\t\t\t\t: \"serialized\";\n\t\t\t\t\t\tconst reason =\n\t\t\t\t\t\t\toutcome === \"cached\"\n\t\t\t\t\t\t\t\t? \"cache_hit\"\n\t\t\t\t\t\t\t\t: decision.blockedByMutation === true\n\t\t\t\t\t\t\t\t\t? decision.reason\n\t\t\t\t\t\t\t\t\t: decision.reason === \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t\t\t: decision.mcpOptIn === true\n\t\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"read_only\")\n\t\t\t\t\t\t\t\t\t\t\t\t? outcome === \"parallelized\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"read_only_parallel_safe\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isSingleModelToolCall\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"single_read_only_call\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason\n\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"path_scoped_mutation\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttoolCallId: decision.callId,\n\t\t\t\t\t\t\ttoolName: decision.toolName,\n\t\t\t\t\t\t\temittedIndex: decision.emittedIndex,\n\t\t\t\t\t\t\toutcome,\n\t\t\t\t\t\t\tdecision: outcome,\n\t\t\t\t\t\t\treason,\n\t\t\t\t\t\t\twaveIndex:\n\t\t\t\t\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t\t\t\t\t? Math.max(0, decision.waveIndex - 1)\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\twaitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),\n\t\t\t\t\t\t\tschedulerWaitMs: Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.round(decision.schedulerWaitMs ?? 0),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tmcpOptIn: decision.mcpOptIn,\n\t\t\t\t\t\t\tcacheHit: decision.cacheHit,\n\t\t\t\t\t\t\tblockedByMutation: decision.blockedByMutation,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\tconst parallelizedCallCount = decisions.filter(\n\t\t\t\t\t\t(decision) => decision.outcome === \"parallelized\",\n\t\t\t\t\t).length;\n\t\t\t\t\tconst delayedCallCount = decisions.filter(\n\t\t\t\t\t\t(decision) => decision.outcome === \"delayed\",\n\t\t\t\t\t).length;\n\t\t\t\t\tconst batchShapingFeedback =\n\t\t\t\t\t\tdecisions.length === 1 &&\n\t\t\t\t\t\tdecisions[0]?.reason === \"single_read_only_call\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tavoidableSingleton: true,\n\t\t\t\t\t\t\t\t\treason: \"single_read_only_call\",\n\t\t\t\t\t\t\t\t\thint: \"When you need several independent reads or searches, emit them together in one assistant message so Maestro can batch them safely.\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst serializationReasons = Object.fromEntries(\n\t\t\t\t\t\t[...decisions]\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(decision) =>\n\t\t\t\t\t\t\t\t\tdecision.outcome === \"serialized\" ||\n\t\t\t\t\t\t\t\t\tdecision.outcome === \"delayed\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.reduce((counts, decision) => {\n\t\t\t\t\t\t\t\tcounts.set(\n\t\t\t\t\t\t\t\t\tdecision.reason,\n\t\t\t\t\t\t\t\t\t(counts.get(decision.reason) ?? 0) + 1,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn counts;\n\t\t\t\t\t\t\t}, new Map<string, number>()),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"tool_phase_summary\",\n\t\t\t\t\t\tmodelToolCallCount: rawDecisions.length,\n\t\t\t\t\t\tmodelEmittedToolCallCount: rawDecisions.length,\n\t\t\t\t\t\tschedulableWaveCount: waveCounts.size,\n\t\t\t\t\t\tparallelizedCallCount,\n\t\t\t\t\t\tactuallyParallelizedCallCount: parallelizedCallCount,\n\t\t\t\t\t\tserializedCallCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) =>\n\t\t\t\t\t\t\t\tdecision.outcome === \"serialized\" ||\n\t\t\t\t\t\t\t\tdecision.outcome === \"delayed\",\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tdelayedCallCount,\n\t\t\t\t\t\tblockedByMutationCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.blockedByMutation === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tmcpOptInCallCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.mcpOptIn === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tmcpOptInUseCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.mcpOptIn === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tcacheHitCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.cacheHit === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\ttotalToolWaitMs: decisions.reduce(\n\t\t\t\t\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttoolWaitTimeMs: decisions.reduce(\n\t\t\t\t\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tserializationReasons,\n\t\t\t\t\t\tdecisions,\n\t\t\t\t\t\tbatchShapingFeedback,\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tconst getMutationScope = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolMetadataCache.get(toolCall.name),\n\t\t\t\t): PathScopedMutation | undefined =>\n\t\t\t\t\tgetPathScopedMutation(toolCall, toolDef, mutationPathBase);\n\n\t\t\t\tconst sameMutationScope = (\n\t\t\t\t\tleft: PathScopedMutation | undefined,\n\t\t\t\t\tright: PathScopedMutation | undefined,\n\t\t\t\t): boolean => {\n\t\t\t\t\tif (!left || !right) {\n\t\t\t\t\t\treturn left === right;\n\t\t\t\t\t}\n\t\t\t\t\tconst leftArgumentKeys = left.argumentKeys ?? [];\n\t\t\t\t\tconst rightArgumentKeys = right.argumentKeys ?? [];\n\t\t\t\t\treturn (\n\t\t\t\t\t\tleft.source === right.source &&\n\t\t\t\t\t\tleft.paths.length === right.paths.length &&\n\t\t\t\t\t\tleft.paths.every((path, index) => path === right.paths[index]) &&\n\t\t\t\t\t\tleftArgumentKeys.length === rightArgumentKeys.length &&\n\t\t\t\t\t\tleftArgumentKeys.every(\n\t\t\t\t\t\t\t(argumentKey, index) => argumentKey === rightArgumentKeys[index],\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t};\n\n\t\t\t\tconst pendingMutationCount = (): number =>\n\t\t\t\t\tpendingExecutions.filter((execution) => {\n\t\t\t\t\t\tconst toolDef = toolMetadataCache.definitions.get(\n\t\t\t\t\t\t\texecution.toolCall.name,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t\t!isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source)\n\t\t\t\t\t\t);\n\t\t\t\t\t}).length;\n\n\t\t\t\tconst mergeToolSchedulingMetadata = (\n\t\t\t\t\ttoolCallId: string,\n\t\t\t\t\tmetadata: ToolSchedulingMetadata,\n\t\t\t\t): ToolSchedulingMetadata => {\n\t\t\t\t\ttoolSchedulingMetadata.set(toolCallId, metadata);\n\t\t\t\t\treturn metadata;\n\t\t\t\t};\n\n\t\t\t\tconst pathScopeSchedulingReason = (\n\t\t\t\t\tscope: PathScopedMutation,\n\t\t\t\t\tcanJoinPathScope: boolean,\n\t\t\t\t): ToolSchedulingMetadata[\"reason\"] => {\n\t\t\t\t\tif (pendingExecutions.length === 0 || pendingMutationCount() === 0) {\n\t\t\t\t\t\treturn \"path_scope_available\";\n\t\t\t\t\t}\n\t\t\t\t\tif (canJoinPathScope) {\n\t\t\t\t\t\treturn \"path_scope_disjoint\";\n\t\t\t\t\t}\n\t\t\t\t\tconst hasPathOverlap = pendingExecutions.some((execution) => {\n\t\t\t\t\t\tconst pendingScope = pendingMutationScopes.get(execution);\n\t\t\t\t\t\treturn pendingScope\n\t\t\t\t\t\t\t? pathScopesOverlap(scope, pendingScope)\n\t\t\t\t\t\t\t: false;\n\t\t\t\t\t});\n\t\t\t\t\treturn hasPathOverlap ? \"path_scope_overlap\" : \"pending_mutation\";\n\t\t\t\t};\n\n\t\t\t\tconst buildToolSchedulingMetadata = ({\n\t\t\t\t\ttoolDef,\n\t\t\t\t\treadOnly,\n\t\t\t\t\tparallelSafe,\n\t\t\t\t\tscope,\n\t\t\t\t\tcache,\n\t\t\t\t\tcanJoinPathScope,\n\t\t\t\t\tlaneConcurrencyLimit = concurrencyLimit,\n\t\t\t\t}: {\n\t\t\t\t\ttoolDef?: AgentTool;\n\t\t\t\t\treadOnly: boolean;\n\t\t\t\t\tparallelSafe: boolean;\n\t\t\t\t\tscope?: PathScopedMutation;\n\t\t\t\t\tcache: ToolSchedulingMetadata[\"cache\"];\n\t\t\t\t\tcanJoinPathScope: boolean;\n\t\t\t\t\tlaneConcurrencyLimit?: number;\n\t\t\t\t}): ToolSchedulingMetadata => {\n\t\t\t\t\tconst pendingMutations = pendingMutationCount();\n\t\t\t\t\tconst base: ToolSchedulingMetadata = {\n\t\t\t\t\t\tclassification: \"unknown\",\n\t\t\t\t\t\treason: \"unknown_tool\",\n\t\t\t\t\t\tconcurrencyLimit: laneConcurrencyLimit,\n\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\tpendingMutations,\n\t\t\t\t\t\tcache,\n\t\t\t\t\t};\n\t\t\t\t\tif (!toolDef) {\n\t\t\t\t\t\treturn base;\n\t\t\t\t\t}\n\t\t\t\t\tif (requiresSerializedTurn) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"workflow_serialized\",\n\t\t\t\t\t\t\treason: \"workflow_state_tracker\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (readOnly) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"read_only\",\n\t\t\t\t\t\t\treason: \"read_only_tool\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (scope) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"path_scoped_mutation\",\n\t\t\t\t\t\t\treason: pathScopeSchedulingReason(scope, canJoinPathScope),\n\t\t\t\t\t\t\tpathScope: scope.paths,\n\t\t\t\t\t\t\tpathScopeSource: scope.source,\n\t\t\t\t\t\t\tpathArgumentKeys: scope.argumentKeys,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (parallelSafe && !readOnly) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"parallel_safe_mutation\",\n\t\t\t\t\t\t\treason: \"mcp_parallel_opt_in\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (pendingMutations > 0) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"serialized_mutation\",\n\t\t\t\t\t\t\treason: \"pending_mutation\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tclassification: \"serialized_mutation\",\n\t\t\t\t\t\treason: \"mutating_tool\",\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tconst hasPendingUnscopedMutation = (): boolean =>\n\t\t\t\t\tpendingExecutions.some((execution) => {\n\t\t\t\t\t\tconst toolDef = toolMetadataCache.get(execution.toolCall.name);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t\t!isReadOnlyTool(\n\t\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t!pendingMutationScopes.has(execution)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\tconst mutationBlockReason = (\n\t\t\t\t\tscope: PathScopedMutation | undefined,\n\t\t\t\t): string =>\n\t\t\t\t\tscope && !hasPendingUnscopedMutation()\n\t\t\t\t\t\t? \"mutation_scope_overlap\"\n\t\t\t\t\t\t: \"mutation_unknown_write_set\";\n\n\t\t\t\tconst isPendingParallelSafeMutation = (\n\t\t\t\t\texecution: PendingExecution,\n\t\t\t\t): boolean => {\n\t\t\t\t\tconst toolDef = toolMetadataCache.get(execution.toolCall.name);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t!isReadOnlyTool(\n\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tisParallelSafeTool(\n\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t!pendingMutationScopes.has(execution)\n\t\t\t\t\t);\n\t\t\t\t};\n\n\t\t\t\tconst canJoinParallelSafeMutationWave = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolMetadataCache.get(toolCall.name),\n\t\t\t\t): boolean =>\n\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t!isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source) &&\n\t\t\t\t\tisParallelSafeTool(\n\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t) &&\n\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\tpendingExecutions.every(isPendingParallelSafeMutation);\n\n\t\t\t\tconst canJoinPathScopedMutationIsland = (\n\t\t\t\t\tscope: PathScopedMutation | undefined,\n\t\t\t\t): scope is PathScopedMutation =>\n\t\t\t\t\t!!scope &&\n\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\tpendingExecutions.every((execution) => {\n\t\t\t\t\t\tconst pendingScope = pendingMutationScopes.get(execution);\n\t\t\t\t\t\treturn pendingScope\n\t\t\t\t\t\t\t? !pathScopesOverlap(scope, pendingScope)\n\t\t\t\t\t\t\t: false;\n\t\t\t\t\t});\n\t\t\t\tconst laneConcurrencyLimit = ({\n\t\t\t\t\treadOnly,\n\t\t\t\t\tscope,\n\t\t\t\t\tparallelSafe,\n\t\t\t\t\ttoolDef,\n\t\t\t\t}: {\n\t\t\t\t\treadOnly: boolean;\n\t\t\t\t\tscope?: PathScopedMutation;\n\t\t\t\t\tparallelSafe: boolean;\n\t\t\t\t\ttoolDef?: AgentTool;\n\t\t\t\t}): number =>\n\t\t\t\t\trequiresSerializedTurn\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: readOnly\n\t\t\t\t\t\t\t? readOnlyConcurrencyLimitForTool(toolDef)\n\t\t\t\t\t\t\t: scope\n\t\t\t\t\t\t\t\t? configuredConcurrency\n\t\t\t\t\t\t\t\t: parallelSafe\n\t\t\t\t\t\t\t\t\t? parallelSafeMutationConcurrencyLimitForTool(toolDef)\n\t\t\t\t\t\t\t\t\t: 1;\n\n\t\t\t\t// Override: workflow-tracked tools require serialization\n\t\t\t\tif (configuredConcurrency > 1 && requiresSerializedTurn) {\n\t\t\t\t\tconcurrencyLimit = 1;\n\t\t\t\t\tif (!this.warnedAboutWorkflowConcurrency) {\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"WorkflowStateTracker requires serialized tool execution; maxConcurrentToolExecutions capped at 1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.warnedAboutWorkflowConcurrency = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet steeringTriggered = false;\n\t\t\t\tlet remainingToolCalls: ToolCall[] = [];\n\t\t\t\tlet mutatingToolCompletedInCurrentBatch = false;\n\n\t\t\t\tconst checkSteering = async (): Promise<void> => {\n\t\t\t\t\tif (steeringTriggered || !getSteeringMessages) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\t\tsteeringTriggered = true;\n\t\t\t\t\t\tsteeringAfterTools = steering;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst buildExecutionEvents = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t): AgentEvent[] => {\n\t\t\t\t\tconst governedMetadata = getGovernedToolResultEventMetadata(\n\t\t\t\t\t\tmessage.details,\n\t\t\t\t\t);\n\t\t\t\t\tconst skillMetadata = getSkillToolResultEventMetadata(\n\t\t\t\t\t\tmessage.details,\n\t\t\t\t\t).skillMetadata;\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{ type: \"message_start\", message } as AgentEvent,\n\t\t\t\t\t\t{ type: \"message_end\", message } as AgentEvent,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolExecutionId: metadata?.toolExecutionId,\n\t\t\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\t\t\tmetadata?.approvalRequestId ??\n\t\t\t\t\t\t\t\tgovernedMetadata.approvalRequestId,\n\t\t\t\t\t\t\terrorCode: governedMetadata.errorCode,\n\t\t\t\t\t\t\tgovernedOutcome: governedMetadata.governedOutcome,\n\t\t\t\t\t\t\tskillMetadata,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\t\tisError,\n\t\t\t\t\t\t\tscheduling: toolSchedulingMetadata.get(toolCall.id),\n\t\t\t\t\t\t} as AgentEvent,\n\t\t\t\t\t];\n\t\t\t\t};\n\t\t\t\tconst emitToolResult = (\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\t\tisError,\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttoolResults.push(message);\n\t\t\t\t\t\treturn buildExecutionEvents(toolCall, message, isError, metadata);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\t\tconst workflowErrorResult: ToolResultMessage = {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolResults.push(workflowErrorResult);\n\t\t\t\t\t\t\treturn buildExecutionEvents(\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tworkflowErrorResult,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst emittedIndexForToolCall = (toolCall: ToolCall): number => {\n\t\t\t\t\tconst emittedIndex = toolCallsToExecute.findIndex(\n\t\t\t\t\t\t(candidate) => candidate.id === toolCall.id,\n\t\t\t\t\t);\n\t\t\t\t\treturn emittedIndex >= 0\n\t\t\t\t\t\t? emittedIndex\n\t\t\t\t\t\t: toolSchedulingDecisions.size;\n\t\t\t\t};\n\t\t\t\tconst emitSkippedToolCall = (toolCall: ToolCall): AgentEvent[] => {\n\t\t\t\t\tconst sanitizedSkippedArgs = this.safetyMiddleware.sanitizeForLogging(\n\t\t\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t\t\t);\n\t\t\t\t\tconst existingScheduling = toolSchedulingMetadata.get(toolCall.id);\n\t\t\t\t\tconst toolDef = toolMetadataCache.get(toolCall.name);\n\t\t\t\t\tconst skippedToolCallReadOnly = isReadOnlyToolCall(toolCall);\n\t\t\t\t\tconst skippedToolCallParallelSafe = isParallelSafeToolCall(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t);\n\t\t\t\t\tconst mutationScope = getMutationScope(toolCall, toolDef);\n\t\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\tconst schedulingMetadata = mergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\texistingScheduling ??\n\t\t\t\t\t\t\tbuildToolSchedulingMetadata({\n\t\t\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t\t\t\treadOnly: skippedToolCallReadOnly,\n\t\t\t\t\t\t\t\tparallelSafe: skippedToolCallParallelSafe,\n\t\t\t\t\t\t\t\tscope: mutationScope,\n\t\t\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\t\t\treusableToolResultKey === undefined ? \"disabled\" : \"miss\",\n\t\t\t\t\t\t\t\tcanJoinPathScope:\n\t\t\t\t\t\t\t\t\tcanJoinPathScopedMutationIsland(mutationScope),\n\t\t\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\t\t\treadOnly: skippedToolCallReadOnly,\n\t\t\t\t\t\t\t\t\tparallelSafe: skippedToolCallParallelSafe,\n\t\t\t\t\t\t\t\t\tscope: mutationScope,\n\t\t\t\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tconst schedulingDecision: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: emittedIndexForToolCall(toolCall),\n\t\t\t\t\t\tdecision: \"skipped\",\n\t\t\t\t\t\treason: \"steering_interrupted\",\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, schedulingDecision);\n\t\t\t\t\tconst skippedResult: ToolResultMessage = {\n\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: \"Skipped due to queued user message.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t};\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\targs: sanitizedSkippedArgs,\n\t\t\t\t\t\t\tscheduling: schedulingMetadata,\n\t\t\t\t\t\t} as AgentEvent,\n\t\t\t\t\t\t...emitToolResult(skippedResult, toolCall, true),\n\t\t\t\t\t];\n\t\t\t\t};\n\t\t\t\tconst recordSafetyBlockedToolCall = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t): ToolSchedulingDecision => {\n\t\t\t\t\tconst existing = toolSchedulingDecisions.get(toolCall.id);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\treturn existing;\n\t\t\t\t\t}\n\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: emittedIndexForToolCall(toolCall),\n\t\t\t\t\t\tdecision: \"skipped\",\n\t\t\t\t\t\treason: \"safety_blocked\",\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\treturn scheduling;\n\t\t\t\t};\n\t\t\t\tconst emitSafetyPipelineToolResult = (\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t): AgentEvent[] => {\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\trecordSafetyBlockedToolCall(toolCall);\n\t\t\t\t\t}\n\t\t\t\t\treturn emitToolResult(message, toolCall, isError, metadata);\n\t\t\t\t};\n\t\t\t\tconst resolveNextPendingExecution = async (): Promise<AgentEvent[]> => {\n\t\t\t\t\tconst events: AgentEvent[] = [];\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst next = await waitForNextExecutionOrUpdate(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (next.kind === \"update\") {\n\t\t\t\t\t\t\tevents.push(next.event);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst outcome = next.outcome;\n\t\t\t\t\t\tpendingMutationScopes.delete(next.execution);\n\t\t\t\t\t\tpendingExecutionWaveIndexes.delete(next.execution);\n\t\t\t\t\t\tpendingExecutionScheduling.delete(next.execution);\n\t\t\t\t\t\tconst completedToolWasMutating =\n\t\t\t\t\t\t\tgetReusableToolResultCacheKey(\n\t\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t) === undefined;\n\t\t\t\t\t\tinvalidateReusableToolResultsAfterMutation(\n\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmutatingToolCompletedInCurrentBatch ||= completedToolWasMutating;\n\t\t\t\t\t\tevents.push(\n\t\t\t\t\t\t\t...emitToolResult(\n\t\t\t\t\t\t\t\toutcome.message,\n\t\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\t\toutcome.isError,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttoolExecutionId: outcome.toolExecutionId,\n\t\t\t\t\t\t\t\t\tapprovalRequestId: outcome.approvalRequestId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\treturn events;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst drainPendingExecutions = async (\n\t\t\t\t\ttargetPendingCount = 0,\n\t\t\t\t): Promise<AgentEvent[]> => {\n\t\t\t\t\tconst events: AgentEvent[] = [];\n\t\t\t\t\twhile (pendingExecutions.length > targetPendingCount) {\n\t\t\t\t\t\tevents.push(...(await resolveNextPendingExecution()));\n\t\t\t\t\t}\n\t\t\t\t\treturn events;\n\t\t\t\t};\n\t\t\t\tconst scheduleResolveIfNeeded = async (): Promise<AgentEvent[]> => {\n\t\t\t\t\tif (pendingExecutions.length < concurrencyLimit) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t\treturn drainPendingExecutions(concurrencyLimit - 1);\n\t\t\t\t};\n\n\t\t\t\tfor (\n\t\t\t\t\tlet toolIndex = 0;\n\t\t\t\t\ttoolIndex < toolCallsToExecute.length;\n\t\t\t\t\ttoolIndex++\n\t\t\t\t) {\n\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst toolCall = toolCallsToExecute[toolIndex];\n\t\t\t\t\tif (!toolCall) continue;\n\t\t\t\t\tlet schedulingDelayReason: string | undefined;\n\t\t\t\t\tlet blockedByMutation = false;\n\t\t\t\t\tconst noteMutationDelay = (reason: string): void => {\n\t\t\t\t\t\tschedulingDelayReason ??= reason;\n\t\t\t\t\t\tblockedByMutation = true;\n\t\t\t\t\t};\n\t\t\t\t\tconst originalToolCallReadOnly = isReadOnlyToolCall(toolCall);\n\t\t\t\t\tconst originalMutationScope = originalToolCallReadOnly\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getMutationScope(toolCall);\n\t\t\t\t\tconst originalToolDef = toolDefinitionsByName.get(toolCall.name);\n\t\t\t\t\tconst originalToolCallParallelSafe = isParallelSafeToolCall(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\toriginalToolDef,\n\t\t\t\t\t);\n\t\t\t\t\tconst originalCanJoinPathScope = canJoinPathScopedMutationIsland(\n\t\t\t\t\t\toriginalMutationScope,\n\t\t\t\t\t);\n\t\t\t\t\tconst originalJoinsParallelSafeMutationWave =\n\t\t\t\t\t\t!originalToolCallReadOnly &&\n\t\t\t\t\t\tcanJoinParallelSafeMutationWave(toolCall);\n\t\t\t\t\tlet preDrainSchedulingMetadata: ToolSchedulingMetadata | undefined;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!originalToolCallReadOnly &&\n\t\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\t\tpendingMutationCount() > 0 &&\n\t\t\t\t\t\t!originalCanJoinPathScope &&\n\t\t\t\t\t\t!originalJoinsParallelSafeMutationWave\n\t\t\t\t\t) {\n\t\t\t\t\t\tpreDrainSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\tcache: \"disabled\",\n\t\t\t\t\t\t\tcanJoinPathScope: originalCanJoinPathScope,\n\t\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoteMutationDelay(mutationBlockReason(originalMutationScope));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tif (preDrainSchedulingMetadata) {\n\t\t\t\t\t\t\t\tmergeToolSchedulingMetadata(\n\t\t\t\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\t\t\t\tpreDrainSchedulingMetadata,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\tconst alreadyHadReusableToolResultState =\n\t\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t);\n\t\t\t\t\tincrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\t\tconst shouldSkipLoopDetection = (\n\t\t\t\t\t\tcandidateToolCall: ToolCall,\n\t\t\t\t\t): boolean => {\n\t\t\t\t\t\tconst candidateKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\t\tcandidateToolCall,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tcandidateKey !== undefined &&\n\t\t\t\t\t\t\tcandidateKey === reusableToolResultKey &&\n\t\t\t\t\t\t\talreadyHadReusableToolResultState &&\n\t\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t!mutatingToolCompletedInCurrentBatch &&\n\t\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\t\tcandidateKey,\n\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t};\n\t\t\t\t\tconst nextInitialSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\treusableToolResultKey === undefined\n\t\t\t\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t\t\t\t: alreadyHadReusableToolResultState\n\t\t\t\t\t\t\t\t\t? \"candidate\"\n\t\t\t\t\t\t\t\t\t: \"miss\",\n\t\t\t\t\t\tcanJoinPathScope: canJoinPathScopedMutationIsland(\n\t\t\t\t\t\t\toriginalMutationScope,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t\tconst initialSchedulingMetadata = mergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\tpreDrainSchedulingMetadata\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...nextInitialSchedulingMetadata,\n\t\t\t\t\t\t\t\t\tclassification: preDrainSchedulingMetadata.classification,\n\t\t\t\t\t\t\t\t\treason: preDrainSchedulingMetadata.reason,\n\t\t\t\t\t\t\t\t\tqueueDepth: preDrainSchedulingMetadata.queueDepth,\n\t\t\t\t\t\t\t\t\tpendingMutations: preDrainSchedulingMetadata.pendingMutations,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: nextInitialSchedulingMetadata,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Run safety pipeline (rate limiting, hooks, firewall, approval, validation)\n\t\t\t\t\tlet safetyVerdict: ToolSafetyVerdict | undefined;\n\t\t\t\t\tlet rateLimitUpdate:\n\t\t\t\t\t\t| { toolCallsThisMinute: number; minuteWindowStart: number }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst safetyIterator = evaluateToolSafety({\n\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\t\tcfg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\t\tworkflowState: this.workflowState,\n\t\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\t\tapprovalService: this.options.approvalService,\n\t\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\thookService,\n\t\t\t\t\t\t\tfirewall,\n\t\t\t\t\t\t\trateLimitState: {\n\t\t\t\t\t\t\t\trecentToolTimestamps: this.recentToolTimestamps,\n\t\t\t\t\t\t\t\ttoolCallsThisMinute: this.toolCallsThisMinute,\n\t\t\t\t\t\t\t\tminuteWindowStart: this.minuteWindowStart,\n\t\t\t\t\t\t\t\trateWindowMs: ProviderTransport.TOOL_RATE_WINDOW_MS,\n\t\t\t\t\t\t\t\trateLimit: ProviderTransport.TOOL_RATE_LIMIT,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tshouldSkipLoopDetection,\n\t\t\t\t\t\t\tschedulingMetadata: initialSchedulingMetadata,\n\t\t\t\t\t\t\temitToolResult: emitSafetyPipelineToolResult,\n\t\t\t\t\t\t});\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst safetyStep = await safetyIterator.next();\n\t\t\t\t\t\t\tif (safetyStep.done) {\n\t\t\t\t\t\t\t\t({ verdict: safetyVerdict, rateLimitUpdate } =\n\t\t\t\t\t\t\t\t\tsafetyStep.value);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield safetyStep.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdecrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!safetyVerdict || !rateLimitUpdate) {\n\t\t\t\t\t\tthrow new Error(\"Safety pipeline did not return a verdict.\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply rate limit state updates\n\t\t\t\t\tthis.toolCallsThisMinute = rateLimitUpdate.toolCallsThisMinute;\n\t\t\t\t\tthis.minuteWindowStart = rateLimitUpdate.minuteWindowStart;\n\n\t\t\t\t\tif (safetyVerdict.outcome === \"blocked\") {\n\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\t} = safetyVerdict;\n\t\t\t\t\tconst effectiveToolCallReadOnly =\n\t\t\t\t\t\tisReadOnlyTool(tool.name, tool.annotations, tool.source) &&\n\t\t\t\t\t\ttool.annotations?.destructiveHint !== true;\n\t\t\t\t\tconst effectiveToolCallParallelSafe = isParallelSafeTool(\n\t\t\t\t\t\ttool.name,\n\t\t\t\t\t\ttool.annotations,\n\t\t\t\t\t\ttool.source,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\teffectiveToolCallReadOnly &&\n\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnoteMutationDelay(\"pending_mutation\");\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst effectiveMutationScope = effectiveToolCallReadOnly\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getMutationScope(effectiveToolCall, tool);\n\t\t\t\t\tconst joinsPathScopedMutationIsland =\n\t\t\t\t\t\t!requiresSerializedTurn &&\n\t\t\t\t\t\tcanJoinPathScopedMutationIsland(effectiveMutationScope);\n\t\t\t\t\tconst joinsParallelSafeMutationWave =\n\t\t\t\t\t\t!requiresSerializedTurn &&\n\t\t\t\t\t\t!effectiveToolCallReadOnly &&\n\t\t\t\t\t\tcanJoinParallelSafeMutationWave(effectiveToolCall, tool);\n\t\t\t\t\tif (\n\t\t\t\t\t\t!effectiveToolCallReadOnly &&\n\t\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\t\t!joinsPathScopedMutationIsland &&\n\t\t\t\t\t\t!joinsParallelSafeMutationWave\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoteMutationDelay(mutationBlockReason(effectiveMutationScope));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconcurrencyLimit = requiresSerializedTurn\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: effectiveToolCallReadOnly\n\t\t\t\t\t\t\t? readOnlyConcurrencyLimitForTool(tool)\n\t\t\t\t\t\t\t: effectiveMutationScope\n\t\t\t\t\t\t\t\t? configuredConcurrency\n\t\t\t\t\t\t\t\t: effectiveToolCallParallelSafe\n\t\t\t\t\t\t\t\t\t? parallelSafeMutationConcurrencyLimitForTool(tool)\n\t\t\t\t\t\t\t\t\t: 1;\n\t\t\t\t\tconst effectiveSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\treadOnly: effectiveToolCallReadOnly,\n\t\t\t\t\t\tparallelSafe: effectiveToolCallParallelSafe,\n\t\t\t\t\t\tscope: effectiveMutationScope,\n\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\treusableToolResultKey === undefined\n\t\t\t\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t\t\t\t: alreadyHadReusableToolResultState\n\t\t\t\t\t\t\t\t\t? \"candidate\"\n\t\t\t\t\t\t\t\t\t: \"miss\",\n\t\t\t\t\t\tcanJoinPathScope: joinsPathScopedMutationIsland,\n\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\treadOnly: effectiveToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: effectiveToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: effectiveMutationScope,\n\t\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t\tconst previousSchedulingMetadata = toolSchedulingMetadata.get(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst preservePreHookBlockedSchedulingReason =\n\t\t\t\t\t\t(previousSchedulingMetadata?.reason === \"path_scope_overlap\" ||\n\t\t\t\t\t\t\tpreviousSchedulingMetadata?.reason === \"pending_mutation\") &&\n\t\t\t\t\t\tsameMutationScope(originalMutationScope, effectiveMutationScope);\n\t\t\t\t\tmergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\tpreservePreHookBlockedSchedulingReason\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...effectiveSchedulingMetadata,\n\t\t\t\t\t\t\t\t\tclassification: previousSchedulingMetadata.classification,\n\t\t\t\t\t\t\t\t\treason: previousSchedulingMetadata.reason,\n\t\t\t\t\t\t\t\t\tqueueDepth: previousSchedulingMetadata.queueDepth,\n\t\t\t\t\t\t\t\t\tpendingMutations: previousSchedulingMetadata.pendingMutations,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: effectiveSchedulingMetadata,\n\t\t\t\t\t);\n\t\t\t\t\t// Use hook-modified (pre-validation) args for hook inputs\n\t\t\t\t\tconst policyCheckedReusableToolResultKey =\n\t\t\t\t\t\tgetReusableToolResultCacheKey(effectiveToolCall, toolMetadataCache);\n\t\t\t\t\tconst canReuseToolResult =\n\t\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKey === reusableToolResultKey;\n\t\t\t\t\tif (canReuseToolResult && reusableToolResultKey) {\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys.add(reusableToolResultKey);\n\t\t\t\t\t}\n\t\t\t\t\tconst canServeReusableToolResult =\n\t\t\t\t\t\tcanReuseToolResult &&\n\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t!mutatingToolCompletedInCurrentBatch;\n\t\t\t\t\tif (canServeReusableToolResult) {\n\t\t\t\t\t\tconst cachedEntry = reusableToolResults.get(reusableToolResultKey);\n\t\t\t\t\t\tif (cachedEntry) {\n\t\t\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\t\t\tdecision: \"cached\",\n\t\t\t\t\t\t\t\treason: \"reusable_tool_result_ready\",\n\t\t\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\t\tconst cachedOutcome =\n\t\t\t\t\t\t\t\tawait recordReusableToolExecutionBridgeOutput({\n\t\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\t\toutcome: {\n\t\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\t\t...cachedEntry.message,\n\t\t\t\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\t\t\t\tcontent: cachedEntry.message.content.map((item) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tisError: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmergeToolSchedulingMetadata(toolCall.id, {\n\t\t\t\t\t\t\t\tclassification: \"cache_reuse\",\n\t\t\t\t\t\t\t\treason: \"cache_hit\",\n\t\t\t\t\t\t\t\tconcurrencyLimit,\n\t\t\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\t\t\tpendingMutations: pendingMutationCount(),\n\t\t\t\t\t\t\t\tcache: \"hit\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const event of emitToolResult(\n\t\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst pendingReusable = pendingReusableToolResults.get(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (pendingReusable) {\n\t\t\t\t\t\t\tmergeToolSchedulingMetadata(toolCall.id, {\n\t\t\t\t\t\t\t\tclassification: \"cache_reuse\",\n\t\t\t\t\t\t\t\treason: \"cache_pending\",\n\t\t\t\t\t\t\t\tconcurrencyLimit,\n\t\t\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\t\t\tpendingMutations: pendingMutationCount(),\n\t\t\t\t\t\t\t\tcache: \"pending_hit\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst waveIndex = pendingWaveIndex();\n\t\t\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\t\t\twaveIndex,\n\t\t\t\t\t\t\t\tdecision: \"cached\",\n\t\t\t\t\t\t\t\treason: \"reusable_tool_result_pending\",\n\t\t\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tpromise: (async () => {\n\t\t\t\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\t\t\t\treturn recordReusableToolExecutionBridgeOutput({\n\t\t\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\t\t\toutcome: cloneToolOutcomeForCall(\n\t\t\t\t\t\t\t\t\t\t\tawait pendingReusable,\n\t\t\t\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\t\t\t\tthis.clock.now(),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tpendingExecutions.push(pendingExecution);\n\t\t\t\t\t\t\tpendingExecutionWaveIndexes.set(pendingExecution, waveIndex);\n\t\t\t\t\t\t\tpendingExecutionScheduling.set(pendingExecution, scheduling);\n\t\t\t\t\t\t\tconst events = await scheduleResolveIfNeeded();\n\t\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pendingBeforeSchedule = pendingExecutions.length;\n\t\t\t\t\tconst waveIndex =\n\t\t\t\t\t\tpendingBeforeSchedule > 0 ? pendingWaveIndex() : nextWaveIndex();\n\t\t\t\t\tconst mcpOptIn =\n\t\t\t\t\t\tisMcpParallelOptIn(tool) && !effectiveToolCallReadOnly;\n\t\t\t\t\tconst decision =\n\t\t\t\t\t\tschedulingDelayReason !== undefined\n\t\t\t\t\t\t\t? \"delayed\"\n\t\t\t\t\t\t\t: pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t? \"parallelized\"\n\t\t\t\t\t\t\t\t: requiresSerializedTurn ||\n\t\t\t\t\t\t\t\t\t\t(!effectiveToolCallReadOnly &&\n\t\t\t\t\t\t\t\t\t\t\t!effectiveMutationScope &&\n\t\t\t\t\t\t\t\t\t\t\t!effectiveToolCallParallelSafe)\n\t\t\t\t\t\t\t\t\t? \"serialized\"\n\t\t\t\t\t\t\t\t\t: \"scheduled\";\n\t\t\t\t\tconst reason =\n\t\t\t\t\t\tschedulingDelayReason ??\n\t\t\t\t\t\t(effectiveToolCallReadOnly\n\t\t\t\t\t\t\t? requiresSerializedTurn\n\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t: pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t\t? \"read_only_wave\"\n\t\t\t\t\t\t\t\t\t: \"read_only_wave_start\"\n\t\t\t\t\t\t\t: requiresSerializedTurn\n\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t: joinsPathScopedMutationIsland\n\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation_disjoint\"\n\t\t\t\t\t\t\t\t\t: joinsParallelSafeMutationWave && mcpOptIn\n\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t: joinsParallelSafeMutationWave\n\t\t\t\t\t\t\t\t\t\t\t? \"parallel_safe_mutation_wave\"\n\t\t\t\t\t\t\t\t\t\t\t: mcpOptIn\n\t\t\t\t\t\t\t\t\t\t\t\t? pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"mcp_parallel_opt_in_wave_start\"\n\t\t\t\t\t\t\t\t\t\t\t\t: effectiveMutationScope\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation_wave_start\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"serialized_tool\");\n\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\twaveIndex,\n\t\t\t\t\t\tdecision,\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\tmcpOptIn,\n\t\t\t\t\t\tblockedByMutation,\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\n\t\t\t\t\t// For client tools, set up the execution promise first, then emit event\n\t\t\t\t\t// This prevents race conditions where the client responds before we're listening\n\t\t\t\t\tlet clientToolExecPromise:\n\t\t\t\t\t\t| ReturnType<ClientToolExecutionService[\"requestExecution\"]>\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttool.executionLocation === \"client\" &&\n\t\t\t\t\t\tthis.options.clientToolService\n\t\t\t\t\t) {\n\t\t\t\t\t\tclientToolExecPromise =\n\t\t\t\t\t\t\tthis.options.clientToolService.requestExecution(\n\t\t\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\t\t\ttoolCall.name,\n\t\t\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// Now emit the event - the promise is already waiting for the result\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"client_tool_request\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t// Client tools execute out-of-process; they need the real args.\n\t\t\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst executionPromise = createToolExecutionPromise({\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\t\tcfg,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\thookService,\n\t\t\t\t\t\ttoolRetryService: this.options.toolRetryService,\n\t\t\t\t\t\ttoolRetryConfig: this.options.toolRetryConfig,\n\t\t\t\t\t\tclientToolService: this.options.clientToolService,\n\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\ttoolExecutionBridgePlan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\tclientToolExecPromise,\n\t\t\t\t\t});\n\t\t\t\t\tconst trackedExecutionPromise =\n\t\t\t\t\t\tcanReuseToolResult && reusableToolResultKey\n\t\t\t\t\t\t\t? trackReusableToolResult(\n\t\t\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\t\t\texecutionPromise,\n\t\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: executionPromise;\n\n\t\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\tpromise: trackedExecutionPromise,\n\t\t\t\t\t};\n\t\t\t\t\tpendingExecutions.push(pendingExecution);\n\t\t\t\t\tpendingExecutionWaveIndexes.set(pendingExecution, waveIndex);\n\t\t\t\t\tpendingExecutionScheduling.set(pendingExecution, scheduling);\n\t\t\t\t\tif (effectiveMutationScope) {\n\t\t\t\t\t\tpendingMutationScopes.set(pendingExecution, effectiveMutationScope);\n\t\t\t\t\t}\n\t\t\t\t\tconst events = await scheduleResolveIfNeeded();\n\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (pendingExecutions.length > 0) {\n\t\t\t\t\tfor (const event of await resolveNextPendingExecution()) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (steeringTriggered && remainingToolCalls.length > 0) {\n\t\t\t\t\tfor (const toolCall of remainingToolCalls) {\n\t\t\t\t\t\tfor (const event of emitSkippedToolCall(toolCall)) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst toolPhaseSummary = buildToolPhaseSummary();\n\t\t\t\tif (toolPhaseSummary) {\n\t\t\t\t\tyield toolPhaseSummary;\n\t\t\t\t}\n\n\t\t\t\tthis.safetyMiddleware.clearCredentials();\n\n\t\t\t\tif (!steeringTriggered && getSteeringMessages) {\n\t\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\t\tsteeringAfterTools = steering;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (completedAssistantMessage) {\n\t\t\t\tallMessages.push(completedAssistantMessage);\n\t\t\t}\n\t\t\tallMessages.push(...toolResults);\n\n\t\t\tyield {\n\t\t\t\ttype: \"turn_end\",\n\t\t\t\tmessage: completedAssistantMessage ??\n\t\t\t\t\tcurrentAssistantMessage ?? {\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\tapi: model.api,\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\t\ttotal: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstopReason: \"error\",\n\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t},\n\t\t\t\ttoolResults,\n\t\t\t};\n\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t} else if (getSteeringMessages) {\n\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\tpendingMessages = steering;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!pendingNextTurn &&\n\t\t\t\tpendingMessages.length === 0 &&\n\t\t\t\tgetFollowUpMessages\n\t\t\t) {\n\t\t\t\tconst followUps = await getFollowUpMessages<AppMessage>();\n\t\t\t\tif (followUps.length > 0) {\n\t\t\t\t\tpendingMessages = followUps;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tpendingNextTurn = true;\n\t\t\t}\n\n\t\t\thasMoreToolCalls = encounteredError ? false : pendingNextTurn;\n\t\t\tif (encounteredError) {\n\t\t\t\tcfg.queryProfiler?.terminal(\"turn:error\");\n\t\t\t} else if (!hasMoreToolCalls) {\n\t\t\t\tcfg.queryProfiler?.terminal(\"turn:complete\", {\n\t\t\t\t\ttool_results: toolResults.length,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/agent/transport.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Transport Layer - LLM Communication and Tool Execution Orchestration\n *\n * This module is the heart of the agent's execution loop. It handles:\n * 1. Streaming communication with LLM providers (Anthropic, OpenAI, Google)\n * 2. Concurrent tool execution with configurable parallelism\n * 3. Safety enforcement via action firewall integration\n * 4. Hook system integration for tool lifecycle events\n *\n * ## Architecture Overview\n *\n * ```\n * User Message → Transport.run() → Provider Stream → Parse Tool Calls\n * ↓ ↓\n * Emit Turn Events ←── Tool Results ←── Execute Tools\n * ↓ ↑\n * Continue Loop ───────────────────────────────┘\n * ```\n *\n * ## Concurrent Tool Execution\n *\n * When the LLM returns multiple tool calls in a single response, we execute\n * them concurrently up to `maxConcurrentToolExecutions` limit. This improves\n * latency for independent operations (e.g., reading multiple files).\n *\n * However, tools that affect WorkflowStateTracker (PII tracking) are serialized\n * to maintain consistent state ordering. A warning is logged when this happens.\n *\n * ## Safety Integration Points\n *\n * 1. **Pre-execution**: Action firewall evaluates each tool call\n * 2. **Approval flow**: Dangerous actions trigger user approval\n * 3. **PII tracking**: WorkflowState hooks track data flow for egress prevention\n * 4. **Doom loop detection**: Identical consecutive tool calls are blocked\n * 5. **Rate limiting**: Per-tool rate limits prevent runaway execution\n *\n * ## Event Stream\n *\n * The transport yields AgentEvents that drive the UI:\n * - turn_start/end: Turn boundaries for UI state management\n * - message_start/update/end: Streaming content updates\n * - tool_execution_start/end: Tool lifecycle for progress display\n * - action_approval_required/resolved: Approval UI triggers\n *\n * @module agent/transport\n */\n\nimport { isContextFirewallBlockingEnabled } from \"../config/env-vars.js\";\nimport { type ToolHookService, createToolHookService } from \"../hooks/index.js\";\nimport { getProviderNetworkConfig } from \"../providers/network-config.js\";\nimport { isStreamIdleTimeoutError } from \"../providers/stream-idle-timeout.js\";\nimport { type Clock, systemClock } from \"../utils/clock.js\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"transport\");\nimport type { AuthCredential } from \"../providers/auth.js\";\nimport { defaultActionFirewall } from \"../safety/action-firewall.js\";\nimport { AdaptiveThresholds } from \"../safety/adaptive-thresholds.js\";\nimport { checkSessionLimits } from \"../safety/policy.js\";\nimport {\n\ttype SafetyMiddleware,\n\tcreateSafetyMiddleware,\n} from \"../safety/safety-middleware.js\";\nimport { SemanticJudge } from \"../safety/semantic-judge.js\";\nimport {\n\tWorkflowStateError,\n\tWorkflowStateTracker,\n\tapplyWorkflowStateHooks,\n\tisWorkflowTrackedTool,\n} from \"../safety/workflow-state.js\";\nimport {\n\ttype PathScopedMutation,\n\tgetPathScopedMutation,\n\tisParallelSafeTool,\n\tisReadOnlyTool,\n\tpathScopesOverlap,\n} from \"../tools/parallel-execution.js\";\nimport { trackUsage } from \"../tracking/cost-tracker.js\";\nimport { getTrainingHeaders } from \"../training.js\";\nimport type { ActionApprovalService } from \"./action-approval.js\";\nimport { getStoredCredentials } from \"./keys.js\";\nimport type { ToolRetryConfig, ToolRetryService } from \"./tool-retry.js\";\nimport { createProviderStream } from \"./transport/create-provider-stream.js\";\nimport {\n\tAgentEventQueue,\n\tgetGovernedToolResultEventMetadata,\n\tgetSkillToolResultEventMetadata,\n\tisDynamicToolApprovalEvent,\n} from \"./transport/events.js\";\nimport {\n\ttype ReusableToolResultCacheGeneration,\n\ttype ReusableToolResultEntry,\n\tclearReusableToolResultState,\n\tclearRunScopedReusableToolResultState,\n\tcloneToolOutcomeForCall,\n\tcomputeReusableToolResultSnapshot,\n\tcreateToolMetadataCache,\n\tdecrementPendingReusableToolSafetyCheck,\n\tgetReusableToolRegistrySignature,\n\tgetReusableToolResultCacheKey,\n\thasPendingMutatingToolExecution,\n\thasReusableToolResultState,\n\tincrementPendingReusableToolSafetyCheck,\n\tinvalidateReusableToolResultsAfterMutation,\n\trecordReusableToolExecutionBridgeOutput,\n\tresolvePlatformToolExecutionBridge,\n\ttrackReusableToolResult,\n} from \"./transport/reusable-tool-results.js\";\nimport type { PlatformToolExecutionBridge } from \"./transport/tool-execution-bridge.js\";\nimport { createToolExecutionPromise } from \"./transport/tool-execution.js\";\nimport {\n\ttype ToolSafetyVerdict,\n\tevaluateToolSafety,\n} from \"./transport/tool-safety-pipeline.js\";\nimport {\n\ttype PendingExecution,\n\ttype ToolExecutionOutcome,\n\tcreateToolUpdateQueue,\n\twaitForNextExecutionOrUpdate,\n} from \"./transport/tool-update-queue.js\";\nimport {\n\ttype SessionTokenCounter,\n\ttype ToolAuditLogger,\n\tcalculateCost,\n\tresolveEnvCredential,\n} from \"./transport/transport-utils.js\";\nimport type {\n\tAgentEvent,\n\tAgentRunConfig,\n\tAgentTool,\n\tAgentToolResult,\n\tAgentTransport,\n\tAppMessage,\n\tAssistantMessage,\n\tMessage,\n\tQueuedMessage,\n\tToolCall,\n\tToolResultMessage,\n\tToolSchedulingDecision,\n\tToolSchedulingMetadata,\n} from \"./types.js\";\n\n// Re-export types for backward compatibility\nexport type {\n\tSessionTokenCounter,\n\tToolAuditLogger,\n} from \"./transport/transport-utils.js\";\n\nexport interface ClientToolExecutionService {\n\trequestExecution: (\n\t\tid: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t\tsignal?: AbortSignal,\n\t) => Promise<{ content: AgentToolResult[\"content\"]; isError: boolean }>;\n}\n\nexport interface ProviderTransportOptions {\n\tgetApiKey?: (\n\t\tprovider: string,\n\t) => Promise<string | undefined> | string | undefined;\n\tgetAuthContext?: (\n\t\tprovider: string,\n\t) => AuthCredential | undefined | Promise<AuthCredential | undefined>;\n\tcorsProxyUrl?: string;\n\tapprovalService?: ActionApprovalService;\n\ttoolRetryService?: ToolRetryService;\n\ttoolRetryConfig?: ToolRetryConfig;\n\tclientToolService?: ClientToolExecutionService;\n\tmaxConcurrentToolExecutions?: number;\n\t/** Hook service for tool lifecycle hooks (PreToolUse, PostToolUse, etc.) */\n\thookService?: ToolHookService;\n\t/** Current working directory for hook execution (required if hookService not provided) */\n\tcwd?: string;\n\t/** Clock for timestamps and rate limiting (default: system clock) */\n\tclock?: Clock;\n\t/** Session token counter used for enforcing policy session limits */\n\tsessionTokenCounter?: SessionTokenCounter;\n\t/** Audit logger for sensitive tool execution events */\n\tauditLogger?: ToolAuditLogger;\n\t/** Optional Platform ToolExecution bridge override */\n\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n}\n\n/**\n * Provider Transport - Multi-provider LLM communication with safety controls\n *\n * The main transport implementation that handles streaming LLM responses,\n * executing tool calls, and enforcing safety policies. Supports Anthropic,\n * OpenAI, and Google providers through a unified interface.\n *\n * ## State Management\n *\n * - **workflowState**: Tracks PII artifacts for egress prevention\n * - **recentToolTimestamps**: Per-tool timestamps for rate limiting\n * - **safetyMiddleware**: Unified security (loop detection, sequence analysis, firewall)\n *\n * ## Safety Mechanisms\n *\n * ### SafetyMiddleware Integration\n * All safety checks are now handled through SafetyMiddleware:\n * - **Loop Detection**: Catches identical consecutive calls (replaces doom loop)\n * - **Sequence Analysis**: Detects suspicious behavioral patterns\n * - **Context Firewall**: Sanitizes arguments and blocks sensitive content\n *\n * ### Rate Limiting\n * Each tool has a per-window rate limit (TOOL_RATE_LIMIT calls per\n * TOOL_RATE_WINDOW_MS). This prevents runaway tool execution that could\n * waste resources or hit external API limits.\n *\n * ### Workflow State Serialization\n * When tools that track PII are present in a batch, concurrent execution\n * is disabled to ensure correct state ordering.\n */\nexport class ProviderTransport implements AgentTransport {\n\t/** Tracks PII artifacts through the workflow for egress prevention */\n\tprivate workflowState = new WorkflowStateTracker();\n\t/** Prevents repeated warnings about serialized workflow execution */\n\tprivate warnedAboutWorkflowConcurrency = false;\n\t/** Per-tool timestamp arrays for rate limiting enforcement */\n\tprivate recentToolTimestamps = new Map<string, number[]>();\n\t/** Safety middleware for sequence analysis and context sanitization */\n\tprivate readonly safetyMiddleware!: SafetyMiddleware;\n\t/** Adaptive thresholds for anomaly-based rate limiting */\n\tprivate readonly adaptiveThresholds!: AdaptiveThresholds;\n\t/** Tool call count in current minute window (for adaptive tracking) */\n\tprivate toolCallsThisMinute = 0;\n\t/** Last minute window start time */\n\tprivate minuteWindowStart = 0;\n\tprivate readonly clock: Clock;\n\tprivate readonly sessionTokenCounter?: SessionTokenCounter;\n\tprivate readonly auditLogger?: ToolAuditLogger;\n\tprivate readonly reusableToolResults = new Map<\n\t\tstring,\n\t\tReusableToolResultEntry\n\t>();\n\tprivate readonly pendingReusableToolResults = new Map<\n\t\tstring,\n\t\tPromise<ToolExecutionOutcome>\n\t>();\n\tprivate readonly policyCheckedReusableToolResultKeys = new Set<string>();\n\tprivate readonly pendingReusableToolSafetyChecks = new Map<string, number>();\n\tprivate readonly reusableToolResultCacheGeneration: ReusableToolResultCacheGeneration =\n\t\t{ value: 0 };\n\tprivate reusableToolResultSnapshot?: string;\n\tprivate reusableToolRegistrySignature?: string;\n\n\t/**\n\t * Rate Limit Window - time window for counting tool invocations\n\t * 10 seconds balances burst protection with legitimate rapid use\n\t */\n\tprivate static readonly TOOL_RATE_WINDOW_MS = 10_000;\n\n\t/**\n\t * Rate Limit Maximum - max calls per tool within the window\n\t * 5 calls in 10 seconds allows fast iteration while preventing abuse\n\t */\n\tprivate static readonly TOOL_RATE_LIMIT = 5;\n\n\tconstructor(private options: ProviderTransportOptions = {}) {\n\t\tthis.clock = options.clock ?? systemClock;\n\t\tthis.sessionTokenCounter = options.sessionTokenCounter;\n\t\tthis.auditLogger = options.auditLogger;\n\t\tthis.minuteWindowStart = this.clock.now();\n\t\t// Initialize adaptive thresholds for anomaly detection\n\t\tthis.adaptiveThresholds = new AdaptiveThresholds({\n\t\t\talpha: 0.3, // Give more weight to recent observations\n\t\t\tanomalyThreshold: 2.5, // 2.5 std devs = more aggressive anomaly detection\n\t\t\tminObservations: 5, // Need at least 5 observations before anomaly detection\n\t\t});\n\t\t// Initialize safety middleware for unified security checks\n\t\tthis.safetyMiddleware = createSafetyMiddleware({\n\t\t\t// Enable loop detection (replaces transport's doom loop detection)\n\t\t\tenableLoopDetection: true,\n\t\t\t// Configure loop detector to match transport's previous behavior\n\t\t\tloopDetector: {\n\t\t\t\tmaxIdenticalCalls: 3, // Match DOOM_LOOP_THRESHOLD\n\t\t\t\tmaxSimilarCalls: 5,\n\t\t\t\tmaxCallsPerMinute: 30, // More aggressive rate limit than TOOL_RATE_LIMIT\n\t\t\t\tautoPause: false, // Transport handles the pause flow\n\t\t\t},\n\t\t\t// Enable sequence analysis for behavioral threat detection\n\t\t\tenableSequenceAnalysis: true,\n\t\t\t// Enable context firewall with blocking for sanitizing audit logs\n\t\t\tenableContextFirewall: true,\n\t\t\t// Configure context firewall blocking (can be disabled via MAESTRO_CONTEXT_FIREWALL_BLOCKING=0)\n\t\t\tcontextFirewall: {\n\t\t\t\t// When blocking is disabled, vault credentials so test keys can pass through safely.\n\t\t\t\tvaultCredentials: !isContextFirewallBlockingEnabled(),\n\t\t\t\tblocking: {\n\t\t\t\t\tenabled: isContextFirewallBlockingEnabled(),\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate refreshReusableToolResultState(\n\t\ttools: readonly AgentTool[],\n\t\tcwd: string,\n\t): void {\n\t\tconst registrySignature = getReusableToolRegistrySignature(tools);\n\t\tconst snapshot = computeReusableToolResultSnapshot(cwd);\n\t\tif (snapshot === undefined) {\n\t\t\tclearReusableToolResultState(\n\t\t\t\tthis.reusableToolResults,\n\t\t\t\tthis.pendingReusableToolResults,\n\t\t\t\tthis.policyCheckedReusableToolResultKeys,\n\t\t\t\tthis.pendingReusableToolSafetyChecks,\n\t\t\t\tthis.reusableToolResultCacheGeneration,\n\t\t\t);\n\t\t\tthis.reusableToolResultSnapshot = undefined;\n\t\t\tthis.reusableToolRegistrySignature = registrySignature;\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tthis.reusableToolResultSnapshot !== snapshot ||\n\t\t\t(this.reusableToolRegistrySignature !== undefined &&\n\t\t\t\tthis.reusableToolRegistrySignature !== registrySignature)\n\t\t) {\n\t\t\tclearReusableToolResultState(\n\t\t\t\tthis.reusableToolResults,\n\t\t\t\tthis.pendingReusableToolResults,\n\t\t\t\tthis.policyCheckedReusableToolResultKeys,\n\t\t\t\tthis.pendingReusableToolSafetyChecks,\n\t\t\t\tthis.reusableToolResultCacheGeneration,\n\t\t\t);\n\t\t}\n\t\tthis.reusableToolResultSnapshot = snapshot;\n\t\tthis.reusableToolRegistrySignature = registrySignature;\n\t}\n\n\t/**\n\t * Continue from current context without a new user message.\n\t *\n\t * This method reuses the run() logic but skips adding a new user message.\n\t * Useful for:\n\t * - Retrying after transient errors (rate limits, overload, 5xx)\n\t * - Continuing after context compaction\n\t * - Resuming interrupted tool execution\n\t *\n\t * @param messages - Current conversation history\n\t * @param config - Runtime configuration\n\t * @param signal - Optional abort signal for cancellation\n\t * @returns Async iterable of agent events\n\t */\n\tasync *continue(\n\t\tmessages: Message[],\n\t\tconfig: AgentRunConfig,\n\t\tsignal?: AbortSignal,\n\t): AsyncGenerator<AgentEvent, void, unknown> {\n\t\t// Create a synthetic \"continuation\" message that signals we're resuming\n\t\t// This doesn't get added to the conversation but satisfies the run() interface\n\t\tconst continuationMessage: Message = {\n\t\t\trole: \"user\",\n\t\t\tcontent: [\n\t\t\t\t{ type: \"text\", text: \"[System: Continuing from previous context]\" },\n\t\t\t],\n\t\t\ttimestamp: this.clock.now(),\n\t\t};\n\n\t\t// Delegate to run() - the continuation message is used internally\n\t\t// but the actual context comes from the messages array\n\t\tyield* this.run(messages, continuationMessage, config, signal);\n\t}\n\n\tasync *run(\n\t\tmessages: Message[],\n\t\tuserMessage: Message,\n\t\tcfg: AgentRunConfig,\n\t\tsignal?: AbortSignal,\n\t): AsyncGenerator<AgentEvent, void, unknown> {\n\t\tconst { systemPrompt, tools } = cfg;\n\t\tlet model = cfg.model;\n\t\tconst firewall = defaultActionFirewall;\n\n\t\t// Configure semantic judge if LLM access is provided\n\t\tif (cfg.runLLM) {\n\t\t\tfirewall.setSemanticJudge(new SemanticJudge(cfg.runLLM));\n\t\t}\n\n\t\t// Initialize hook service for tool lifecycle hooks\n\t\tconst hookService =\n\t\t\tthis.options.hookService ??\n\t\t\t(this.options.cwd\n\t\t\t\t? createToolHookService({\n\t\t\t\t\t\tcwd: this.options.cwd,\n\t\t\t\t\t\tsessionId: cfg.session?.id,\n\t\t\t\t\t\tresolveTool: (toolName) =>\n\t\t\t\t\t\t\tcfg.tools?.find((tool) => tool.name === toolName),\n\t\t\t\t\t})\n\t\t\t\t: undefined);\n\n\t\tthis.workflowState.reset();\n\n\t\tconst scriptedReplayRun = model.provider === \"scripted-replay\";\n\t\tconst codexAppServerRun = model.api === \"openai-codex-app-server\";\n\t\tlet credential: AuthCredential | undefined;\n\t\tif (\n\t\t\tthis.options.getAuthContext &&\n\t\t\t!scriptedReplayRun &&\n\t\t\t!codexAppServerRun\n\t\t) {\n\t\t\tcredential = await this.options.getAuthContext(model.provider);\n\t\t}\n\t\tif (!credential && this.options.getApiKey) {\n\t\t\tconst fallbackKey = await this.options.getApiKey(model.provider);\n\t\t\tif (fallbackKey) {\n\t\t\t\tcredential = {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\ttoken: fallbackKey,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"env\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (!credential && scriptedReplayRun) {\n\t\t\tcredential = {\n\t\t\t\tprovider: model.provider,\n\t\t\t\ttoken: \"scripted-replay\",\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"env\",\n\t\t\t};\n\t\t}\n\t\tif (!credential && codexAppServerRun) {\n\t\t\tcredential = {\n\t\t\t\tprovider: model.provider,\n\t\t\t\ttoken: \"codex-app-server\",\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"env\",\n\t\t\t};\n\t\t}\n\t\tif (!credential) {\n\t\t\tconst envCredential = resolveEnvCredential(model.provider);\n\t\t\tif (envCredential) {\n\t\t\t\tcredential = envCredential;\n\t\t\t}\n\t\t}\n\t\tif (!credential) {\n\t\t\tconst stored = getStoredCredentials(model.provider);\n\t\t\tif (stored.apiKey) {\n\t\t\t\tcredential = {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\ttoken: stored.apiKey,\n\t\t\t\t\ttype: stored.authType ?? \"api-key\",\n\t\t\t\t\tsource: \"custom_literal\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst apiKey = credential?.token;\n\t\tif (!apiKey) {\n\t\t\tthrow new Error(\n\t\t\t\t`No credentials found for provider \"${model.provider}\". Provide an API key or configure getAuthContext.`,\n\t\t\t);\n\t\t}\n\n\t\tyield { type: \"message_start\", message: userMessage };\n\t\tif (cfg.emitUserMessageEnd !== false) {\n\t\t\tyield { type: \"message_end\", message: userMessage };\n\t\t}\n\n\t\tconst context = {\n\t\t\tsystemPrompt,\n\t\t\tmessages,\n\t\t\ttools,\n\t\t};\n\n\t\tif (this.options.corsProxyUrl && model.baseUrl) {\n\t\t\tmodel = {\n\t\t\t\t...model,\n\t\t\t\tbaseUrl: `${this.options.corsProxyUrl}/?url=${encodeURIComponent(model.baseUrl)}`,\n\t\t\t};\n\t\t}\n\n\t\tconst dynamicToolEventQueue = new AgentEventQueue();\n\t\tconst reusableToolResultCwd = this.options.cwd ?? process.cwd();\n\t\tconst toolMetadataCache = createToolMetadataCache(\n\t\t\ttools,\n\t\t\treusableToolResultCwd,\n\t\t);\n\t\tthis.refreshReusableToolResultState(tools, reusableToolResultCwd);\n\t\tconst reusableToolResults = this.reusableToolResults;\n\t\tconst pendingReusableToolResults = this.pendingReusableToolResults;\n\t\tconst policyCheckedReusableToolResultKeys =\n\t\t\tthis.policyCheckedReusableToolResultKeys;\n\t\tconst pendingReusableToolSafetyChecks =\n\t\t\tthis.pendingReusableToolSafetyChecks;\n\t\tconst reusableToolResultCacheGeneration =\n\t\t\tthis.reusableToolResultCacheGeneration;\n\t\tclearRunScopedReusableToolResultState(\n\t\t\treusableToolResults,\n\t\t\tpendingReusableToolResults,\n\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\tpendingReusableToolSafetyChecks,\n\t\t\treusableToolResultCacheGeneration,\n\t\t);\n\t\tconst pendingDynamicToolExecutions: PendingExecution[] = [];\n\t\tconst platformToolExecutionBridge = resolvePlatformToolExecutionBridge(\n\t\t\tthis.options.platformToolExecutionBridge,\n\t\t);\n\t\tconst trainingHeaders = getTrainingHeaders();\n\t\tconst headers =\n\t\t\ttrainingHeaders || model.headers || credential?.headers\n\t\t\t\t? {\n\t\t\t\t\t\t...(model.headers ?? {}),\n\t\t\t\t\t\t...(trainingHeaders ?? {}),\n\t\t\t\t\t\t...(credential?.headers ?? {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst executeDynamicTool = async (\n\t\t\ttoolCall: ToolCall,\n\t\t): Promise<AgentToolResult> => {\n\t\t\tconst capturedResults: ToolExecutionOutcome[] = [];\n\t\t\tconst dynamicToolError = (message: string): AgentToolResult => ({\n\t\t\t\tcontent: [{ type: \"text\", text: message }],\n\t\t\t\tisError: true,\n\t\t\t});\n\t\t\tconst toAgentToolResult = (\n\t\t\t\toutcome: ToolExecutionOutcome | ToolResultMessage | undefined,\n\t\t\t): AgentToolResult => {\n\t\t\t\tif (!outcome) {\n\t\t\t\t\treturn dynamicToolError(\"Dynamic tool execution was blocked\");\n\t\t\t\t}\n\t\t\t\tconst message = \"message\" in outcome ? outcome.message : outcome;\n\t\t\t\treturn {\n\t\t\t\t\tcontent: message.content,\n\t\t\t\t\tisError: \"message\" in outcome ? outcome.isError : message.isError,\n\t\t\t\t\tdetails: message.details,\n\t\t\t\t\t...(\"message\" in outcome && outcome.toolExecutionId\n\t\t\t\t\t\t? { toolExecutionId: outcome.toolExecutionId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(\"message\" in outcome && outcome.approvalRequestId\n\t\t\t\t\t\t? { approvalRequestId: outcome.approvalRequestId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst emitDynamicToolResult = (\n\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\teffectiveToolCall: ToolCall,\n\t\t\t\tisError: boolean,\n\t\t\t\tmetadata?: {\n\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t},\n\t\t\t): AgentEvent[] => {\n\t\t\t\ttry {\n\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\tisError,\n\t\t\t\t\t});\n\t\t\t\t\tcapturedResults.push({\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tisError,\n\t\t\t\t\t\t...metadata,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\tcapturedResults.push({\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: effectiveToolCall.id,\n\t\t\t\t\t\t\t\ttoolName: effectiveToolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\ttoolCall,\n\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t);\n\t\t\t\tconst alreadyHadReusableToolResultState =\n\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\tincrementPendingReusableToolSafetyCheck(\n\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t);\n\t\t\t\tconst shouldSkipLoopDetection = (\n\t\t\t\t\tcandidateToolCall: ToolCall,\n\t\t\t\t): boolean => {\n\t\t\t\t\tconst candidateKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\tcandidateToolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tcandidateKey !== undefined &&\n\t\t\t\t\t\tcandidateKey === reusableToolResultKey &&\n\t\t\t\t\t\talreadyHadReusableToolResultState &&\n\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingDynamicToolExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\tcandidateKey,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tlet safetyVerdict: ToolSafetyVerdict | undefined;\n\t\t\t\tlet rateLimitUpdate:\n\t\t\t\t\t| { toolCallsThisMinute: number; minuteWindowStart: number }\n\t\t\t\t\t| undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst safetyIterator = evaluateToolSafety({\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttools,\n\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\tcfg,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\tworkflowState: this.workflowState,\n\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\tapprovalService: this.options.approvalService,\n\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\thookService,\n\t\t\t\t\t\tfirewall,\n\t\t\t\t\t\trateLimitState: {\n\t\t\t\t\t\t\trecentToolTimestamps: this.recentToolTimestamps,\n\t\t\t\t\t\t\ttoolCallsThisMinute: this.toolCallsThisMinute,\n\t\t\t\t\t\t\tminuteWindowStart: this.minuteWindowStart,\n\t\t\t\t\t\t\trateWindowMs: ProviderTransport.TOOL_RATE_WINDOW_MS,\n\t\t\t\t\t\t\trateLimit: ProviderTransport.TOOL_RATE_LIMIT,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshouldSkipLoopDetection,\n\t\t\t\t\t\temitToolResult: emitDynamicToolResult,\n\t\t\t\t\t});\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst safetyStep = await safetyIterator.next();\n\t\t\t\t\t\tif (safetyStep.done) {\n\t\t\t\t\t\t\t({ verdict: safetyVerdict, rateLimitUpdate } = safetyStep.value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isDynamicToolApprovalEvent(safetyStep.value)) {\n\t\t\t\t\t\t\tdynamicToolEventQueue.push(safetyStep.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tdecrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!safetyVerdict || !rateLimitUpdate) {\n\t\t\t\t\treturn dynamicToolError(\"Safety pipeline did not return a verdict.\");\n\t\t\t\t}\n\t\t\t\tthis.toolCallsThisMinute = rateLimitUpdate.toolCallsThisMinute;\n\t\t\t\tthis.minuteWindowStart = rateLimitUpdate.minuteWindowStart;\n\t\t\t\tif (safetyVerdict.outcome === \"blocked\") {\n\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1));\n\t\t\t\t}\n\n\t\t\t\tconst {\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t} = safetyVerdict;\n\t\t\t\tif (tool.executionLocation === \"client\") {\n\t\t\t\t\treturn dynamicToolError(\n\t\t\t\t\t\t`Client-side tool execution is not available for Codex app-server dynamic tool \"${tool.name}\".`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst policyCheckedReusableToolResultKey =\n\t\t\t\t\tgetReusableToolResultCacheKey(effectiveToolCall, toolMetadataCache);\n\t\t\t\tconst canReuseToolResult =\n\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\tpolicyCheckedReusableToolResultKey === reusableToolResultKey;\n\t\t\t\tif (canReuseToolResult && reusableToolResultKey) {\n\t\t\t\t\tpolicyCheckedReusableToolResultKeys.add(reusableToolResultKey);\n\t\t\t\t}\n\t\t\t\tconst canServeReusableToolResult =\n\t\t\t\t\tcanReuseToolResult &&\n\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\tpendingDynamicToolExecutions,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\tif (canServeReusableToolResult) {\n\t\t\t\t\tconst cachedEntry = reusableToolResults.get(reusableToolResultKey);\n\t\t\t\t\tif (cachedEntry) {\n\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\tconst cachedOutcome = await recordReusableToolExecutionBridgeOutput(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\toutcome: {\n\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\t...cachedEntry.message,\n\t\t\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\t\t\tcontent: cachedEntry.message.content.map((item) => ({\n\t\t\t\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisError: false,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\temitDynamicToolResult(\n\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1) ?? cachedOutcome);\n\t\t\t\t\t}\n\t\t\t\t\tconst pendingReusable = pendingReusableToolResults.get(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t);\n\t\t\t\t\tif (pendingReusable) {\n\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\tconst cachedOutcome = await recordReusableToolExecutionBridgeOutput(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\toutcome: cloneToolOutcomeForCall(\n\t\t\t\t\t\t\t\t\tawait pendingReusable,\n\t\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\t\tthis.clock.now(),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\temitDynamicToolResult(\n\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn toAgentToolResult(capturedResults.at(-1) ?? cachedOutcome);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst toolUpdateQueue = createToolUpdateQueue();\n\t\t\t\tconst executionPromise = createToolExecutionPromise({\n\t\t\t\t\ttoolCall,\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttool,\n\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\tcfg,\n\t\t\t\t\tsignal,\n\t\t\t\t\tclock: this.clock,\n\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\thookService,\n\t\t\t\t\ttoolRetryService: this.options.toolRetryService,\n\t\t\t\t\ttoolRetryConfig: this.options.toolRetryConfig,\n\t\t\t\t\tclientToolService: this.options.clientToolService,\n\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\ttoolExecutionBridgePlan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t});\n\t\t\t\tconst trackedExecutionPromise =\n\t\t\t\t\tcanReuseToolResult && reusableToolResultKey\n\t\t\t\t\t\t? trackReusableToolResult(\n\t\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\t\texecutionPromise,\n\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: executionPromise;\n\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\tpromise: trackedExecutionPromise,\n\t\t\t\t};\n\t\t\t\tpendingDynamicToolExecutions.push(pendingExecution);\n\t\t\t\tconst pendingExecutions: PendingExecution[] = [pendingExecution];\n\t\t\t\tlet outcome: Awaited<typeof executionPromise> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twhile (pendingExecutions.length > 0) {\n\t\t\t\t\t\tconst next = await waitForNextExecutionOrUpdate(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (next.kind === \"update\") {\n\t\t\t\t\t\t\tif (next.event.type === \"tool_retry_required\") {\n\t\t\t\t\t\t\t\tthis.options.toolRetryService?.skip(\n\t\t\t\t\t\t\t\t\tnext.event.request.id,\n\t\t\t\t\t\t\t\t\t\"Codex app-server dynamic tool callbacks cannot prompt for retry\",\n\t\t\t\t\t\t\t\t\t\"runtime\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\toutcome = next.outcome;\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tconst pendingIndex =\n\t\t\t\t\t\tpendingDynamicToolExecutions.indexOf(pendingExecution);\n\t\t\t\t\tif (pendingIndex >= 0) {\n\t\t\t\t\t\tpendingDynamicToolExecutions.splice(pendingIndex, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!outcome) {\n\t\t\t\t\treturn dynamicToolError(\"Dynamic tool execution did not complete.\");\n\t\t\t\t}\n\t\t\t\tinvalidateReusableToolResultsAfterMutation(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\treusableToolResults,\n\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\ttoolCall: effectiveToolCall,\n\t\t\t\t\t\tresult: outcome.message,\n\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\tisError: outcome.isError,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\treturn toAgentToolResult({\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: effectiveToolCall.id,\n\t\t\t\t\t\t\t\ttoolName: effectiveToolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\ttoolExecutionId: outcome.toolExecutionId,\n\t\t\t\t\t\t\tapprovalRequestId: outcome.approvalRequestId,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn toAgentToolResult(outcome);\n\t\t\t} finally {\n\t\t\t\tthis.safetyMiddleware.clearCredentials();\n\t\t\t}\n\t\t};\n\n\t\tconst streamOptions = {\n\t\t\tapiKey,\n\t\t\tmaxTokens: model.maxTokens,\n\t\t\tsignal,\n\t\t\tauthType: credential?.type ?? \"api-key\",\n\t\t\theaders,\n\t\t\trequestBody: credential?.requestBody,\n\t\t\tsessionId: cfg.session?.id,\n\t\t\tcwd: this.options.cwd,\n\t\t\ttaskBudget: cfg.taskBudget,\n\t\t\texecuteDynamicTool,\n\t\t};\n\n\t\tlet hasMoreToolCalls = true;\n\t\tconst allMessages = [...context.messages];\n\t\tconst getSteeringMessages =\n\t\t\tcfg.getSteeringMessages ?? cfg.getQueuedMessages;\n\t\tconst getFollowUpMessages = cfg.getFollowUpMessages;\n\t\tconst getPromptOnlyMessages = cfg.getPromptOnlyMessages;\n\n\t\tlet pendingMessages = getSteeringMessages\n\t\t\t? await getSteeringMessages<AppMessage>()\n\t\t\t: [];\n\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tyield { type: \"turn_start\" };\n\n\t\t\t// Enforce session limits before every turn (duration + tokens)\n\t\t\tif (cfg.session) {\n\t\t\t\tlet tokenCount: number | undefined;\n\t\t\t\tif (this.sessionTokenCounter) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst count = await this.sessionTokenCounter(cfg.session.id);\n\t\t\t\t\t\tif (count !== null) {\n\t\t\t\t\t\t\ttokenCount = count;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// Log error but don't throw - let checkSessionLimits handle it.\n\t\t\t\t\t\t// If limits are active, it will fail closed because tokenCount is undefined.\n\t\t\t\t\t\t// If no limits are active, we shouldn't block just because tracking failed.\n\t\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\t\"Failed to get session token count\",\n\t\t\t\t\t\t\terr instanceof Error ? err : new Error(String(err)),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst limitCheck = checkSessionLimits(cfg.session, {\n\t\t\t\t\ttokenCount: tokenCount,\n\t\t\t\t});\n\t\t\t\tif (!limitCheck.allowed) {\n\t\t\t\t\tthrow new Error(limitCheck.reason);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (getPromptOnlyMessages) {\n\t\t\t\tconst promptOnlyMessages = await getPromptOnlyMessages();\n\t\t\t\tif (promptOnlyMessages.length > 0) {\n\t\t\t\t\tallMessages.push(...promptOnlyMessages);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const queued of pendingMessages) {\n\t\t\t\t\tyield { type: \"message_start\", message: queued.original };\n\t\t\t\t\tyield { type: \"message_end\", message: queued.original };\n\t\t\t\t\tif (queued.llm) {\n\t\t\t\t\t\tallMessages.push(queued.llm);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\tlet currentAssistantMessage: AssistantMessage | null = null;\n\t\t\tlet completedAssistantMessage: AssistantMessage | null = null;\n\t\t\tconst toolCallsToExecute: ToolCall[] = [];\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tconst pendingProviderToolResultMessages: ToolResultMessage[] = [];\n\t\t\tlet steeringAfterTools: QueuedMessage<AppMessage>[] | null = null;\n\t\t\tlet pendingNextTurn = false;\n\t\t\tlet encounteredError = false;\n\t\t\tlet firstModelOutputSeen = false;\n\n\t\t\tconst currentMessages = cfg.preprocessMessages\n\t\t\t\t? await cfg.preprocessMessages(\n\t\t\t\t\t\tallMessages,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsystemPrompt,\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t)\n\t\t\t\t: allMessages;\n\n\t\t\tconst currentContext = {\n\t\t\t\t...context,\n\t\t\t\tmessages: currentMessages,\n\t\t\t};\n\n\t\t\t// Stream retry logic for idle timeouts\n\t\t\tconst networkConfig = getProviderNetworkConfig(model.provider);\n\t\t\tconst maxStreamRetries = networkConfig.streamMaxRetries;\n\t\t\tlet streamAttempt = 0;\n\t\t\tlet streamSuccess = false;\n\n\t\t\twhile (!streamSuccess && streamAttempt <= maxStreamRetries) {\n\t\t\t\tif (streamAttempt > 0) {\n\t\t\t\t\t// Reset state for retry\n\t\t\t\t\tcurrentAssistantMessage = null;\n\t\t\t\t\ttoolCallsToExecute.length = 0;\n\t\t\t\t\ttoolResults.length = 0;\n\t\t\t\t\tpendingProviderToolResultMessages.length = 0;\n\t\t\t\t\tpendingNextTurn = false;\n\n\t\t\t\t\tconst backoffMs = Math.min(\n\t\t\t\t\t\tnetworkConfig.backoffInitial * 2 ** (streamAttempt - 1),\n\t\t\t\t\t\tnetworkConfig.backoffMax,\n\t\t\t\t\t);\n\t\t\t\t\tlogger.info(\"Retrying stream after idle timeout\", {\n\t\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t\t\tmaxRetries: maxStreamRetries,\n\t\t\t\t\t\tbackoffMs,\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t});\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, backoffMs));\n\t\t\t\t}\n\t\t\t\tstreamAttempt++;\n\n\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:request:start\", {\n\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t});\n\t\t\t\tconst stream = createProviderStream(\n\t\t\t\t\tmodel,\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tstreamOptions,\n\t\t\t\t\t{ reasoning: cfg.reasoning, reasoningSummary: cfg.reasoningSummary },\n\t\t\t\t);\n\t\t\t\tconst streamIterator = stream[Symbol.asyncIterator]();\n\t\t\t\tlet nextStreamEvent = streamIterator.next();\n\n\t\t\t\ttry {\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst queuedDynamicToolEvent = dynamicToolEventQueue.shift();\n\t\t\t\t\t\tif (queuedDynamicToolEvent) {\n\t\t\t\t\t\t\tyield queuedDynamicToolEvent;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst dynamicToolEventReady = dynamicToolEventQueue.wait();\n\t\t\t\t\t\tconst nextEvent = await Promise.race([\n\t\t\t\t\t\t\tdynamicToolEventReady.then(() => ({\n\t\t\t\t\t\t\t\ttype: \"dynamicTool\" as const,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tnextStreamEvent.then((result) => ({\n\t\t\t\t\t\t\t\ttype: \"provider\" as const,\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tif (nextEvent.type === \"dynamicTool\") {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\t\tif (nextEvent.result.done) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst event = nextEvent.result.value;\n\t\t\t\t\t\tnextStreamEvent = streamIterator.next();\n\t\t\t\t\t\tif (event.type === \"start\") {\n\t\t\t\t\t\t\tcurrentAssistantMessage = event.partial;\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"message_start\",\n\t\t\t\t\t\t\t\t\tmessage: currentAssistantMessage,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.type === \"text_delta\" ||\n\t\t\t\t\t\t\tevent.type === \"thinking_delta\" ||\n\t\t\t\t\t\t\tevent.type === \"toolcall_delta\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\t\t\t\tmessage: currentAssistantMessage,\n\t\t\t\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_start\") {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\targs: event.args,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_update\") {\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\targs: event.args,\n\t\t\t\t\t\t\t\tpartialResult: event.partialResult,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"provider_tool_execution_end\") {\n\t\t\t\t\t\t\ttoolResults.push(event.result);\n\t\t\t\t\t\t\tpendingProviderToolResultMessages.push(event.result);\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\ttoolExecutionId: event.toolExecutionId,\n\t\t\t\t\t\t\t\tapprovalRequestId: event.approvalRequestId,\n\t\t\t\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t\t\t\tdisplayName: event.displayName,\n\t\t\t\t\t\t\t\tsummaryLabel: event.summaryLabel,\n\t\t\t\t\t\t\t\tresult: event.result,\n\t\t\t\t\t\t\t\tisError: event.isError,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"toolcall_end\") {\n\t\t\t\t\t\t\tif (!firstModelOutputSeen) {\n\t\t\t\t\t\t\t\tcfg.queryProfiler?.checkpoint(\"model:first-token\");\n\t\t\t\t\t\t\t\tfirstModelOutputSeen = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst rawArgs = event.toolCall.arguments;\n\t\t\t\t\t\t\tconst normalizedArgs =\n\t\t\t\t\t\t\t\trawArgs &&\n\t\t\t\t\t\t\t\ttypeof rawArgs === \"object\" &&\n\t\t\t\t\t\t\t\t!Array.isArray(rawArgs)\n\t\t\t\t\t\t\t\t\t? (rawArgs as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\ttoolCallsToExecute.push({\n\t\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\t\tid: event.toolCall.id,\n\t\t\t\t\t\t\t\tname: event.toolCall.name,\n\t\t\t\t\t\t\t\targuments: normalizedArgs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tcompletedAssistantMessage = currentAssistantMessage;\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message: currentAssistantMessage };\n\t\t\t\t\t\t\t\tif (currentAssistantMessage.usage) {\n\t\t\t\t\t\t\t\t\tconst usage = currentAssistantMessage.usage;\n\t\t\t\t\t\t\t\t\tconst cost = model.cost\n\t\t\t\t\t\t\t\t\t\t? calculateCost(usage, model.cost)\n\t\t\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\t\t\t\tif (credential?.type !== \"bearer-token\") {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\ttrackUsage({\n\t\t\t\t\t\t\t\t\t\t\t\tsessionId: cfg.session?.id,\n\t\t\t\t\t\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensInput: usage.input || 0,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensOutput: usage.output || 0,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensCacheRead: usage.cacheRead,\n\t\t\t\t\t\t\t\t\t\t\t\ttokensCacheWrite: usage.cacheWrite,\n\t\t\t\t\t\t\t\t\t\t\t\tcost,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\t\tlogger.warn(\"Failed to track usage\", {\n\t\t\t\t\t\t\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: String(error),\n\t\t\t\t\t\t\t\t\t\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (const message of pendingProviderToolResultMessages) {\n\t\t\t\t\t\t\t\tyield { type: \"message_start\", message };\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingProviderToolResultMessages.length = 0;\n\t\t\t\t\t\t\tpendingNextTurn = toolCallsToExecute.length > 0;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.type === \"error\") {\n\t\t\t\t\t\t\tcompletedAssistantMessage = event.error;\n\t\t\t\t\t\t\tif (currentAssistantMessage) {\n\t\t\t\t\t\t\t\tyield { type: \"message_end\", message: currentAssistantMessage };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingNextTurn = false;\n\t\t\t\t\t\t\tencounteredError = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (\n\t\t\t\t\t\tlet event = dynamicToolEventQueue.shift();\n\t\t\t\t\t\tevent;\n\t\t\t\t\t\tevent = dynamicToolEventQueue.shift()\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\tstreamSuccess = true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\twhile (dynamicToolEventQueue.shift()) {\n\t\t\t\t\t\t// Drop queued dynamic tool events from the abandoned stream attempt.\n\t\t\t\t\t}\n\t\t\t\t\tdynamicToolEventQueue.clearPendingWaiter();\n\t\t\t\t\tif (\n\t\t\t\t\t\tisStreamIdleTimeoutError(error) &&\n\t\t\t\t\t\tstreamAttempt <= maxStreamRetries\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogger.warn(\"Stream idle timeout, will retry\", {\n\t\t\t\t\t\t\tattempt: streamAttempt,\n\t\t\t\t\t\t\tmaxRetries: maxStreamRetries,\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tidleMs: error.idleMs,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue; // Retry the stream\n\t\t\t\t\t}\n\t\t\t\t\t// Not retryable or exhausted retries - re-throw\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t} // end while retry loop\n\n\t\t\tif (toolCallsToExecute.length > 0) {\n\t\t\t\tconst toolUpdateQueue = createToolUpdateQueue();\n\t\t\t\tconst pendingExecutions: PendingExecution[] = [];\n\t\t\t\tconst rawConcurrency = this.options.maxConcurrentToolExecutions ?? 2;\n\t\t\t\tconst configuredConcurrency = Number.isFinite(rawConcurrency)\n\t\t\t\t\t? Math.max(1, Math.floor(rawConcurrency))\n\t\t\t\t\t: 2;\n\t\t\t\tconst hasWorkflowTrackedTool = toolCallsToExecute.some((call) =>\n\t\t\t\t\tisWorkflowTrackedTool(call.name),\n\t\t\t\t);\n\t\t\t\tconst requiresSerializedTurn =\n\t\t\t\t\thasWorkflowTrackedTool && toolCallsToExecute.length > 1;\n\n\t\t\t\tconst toolDefinitionsByName = toolMetadataCache.definitions;\n\t\t\t\tconst isReadOnlyToolCall = (toolCall: ToolCall): boolean => {\n\t\t\t\t\tconst toolDef = toolDefinitionsByName.get(toolCall.name);\n\t\t\t\t\treturn toolDef\n\t\t\t\t\t\t? isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source)\n\t\t\t\t\t\t: false;\n\t\t\t\t};\n\t\t\t\tconst isParallelSafeToolCall = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolDefinitionsByName.get(toolCall.name),\n\t\t\t\t): boolean =>\n\t\t\t\t\ttoolDef\n\t\t\t\t\t\t? isParallelSafeTool(\n\t\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: false;\n\t\t\t\tconst readOnlyToolCalls = toolCallsToExecute.filter(isReadOnlyToolCall);\n\t\t\t\tconst readOnlyConcurrencyLimit =\n\t\t\t\t\treadOnlyToolCalls.length > 0\n\t\t\t\t\t\t? Math.min(\n\t\t\t\t\t\t\t\t8,\n\t\t\t\t\t\t\t\tMath.max(configuredConcurrency, readOnlyToolCalls.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: configuredConcurrency;\n\t\t\t\tconst parallelSafeMutationConcurrencyLimit = Math.min(\n\t\t\t\t\t8,\n\t\t\t\t\tconfiguredConcurrency,\n\t\t\t\t);\n\t\t\t\tconst concurrencyLimitForTool = (\n\t\t\t\t\tdefaultLimit: number,\n\t\t\t\t\ttoolDef?: AgentTool,\n\t\t\t\t): number => {\n\t\t\t\t\tconst sourceMaxConcurrency =\n\t\t\t\t\t\ttoolDef?.source?.type === \"mcp\"\n\t\t\t\t\t\t\t? toolDef.source.parallelMaxConcurrency\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn Math.min(\n\t\t\t\t\t\tdefaultLimit,\n\t\t\t\t\t\ttypeof sourceMaxConcurrency === \"number\" &&\n\t\t\t\t\t\t\tNumber.isFinite(sourceMaxConcurrency) &&\n\t\t\t\t\t\t\tsourceMaxConcurrency > 0\n\t\t\t\t\t\t\t? Math.floor(sourceMaxConcurrency)\n\t\t\t\t\t\t\t: defaultLimit,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tconst readOnlyConcurrencyLimitForTool = (toolDef?: AgentTool): number =>\n\t\t\t\t\tconcurrencyLimitForTool(readOnlyConcurrencyLimit, toolDef);\n\t\t\t\tconst parallelSafeMutationConcurrencyLimitForTool = (\n\t\t\t\t\ttoolDef?: AgentTool,\n\t\t\t\t): number =>\n\t\t\t\t\tconcurrencyLimitForTool(\n\t\t\t\t\t\tparallelSafeMutationConcurrencyLimit,\n\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t);\n\t\t\t\tlet concurrencyLimit = configuredConcurrency;\n\t\t\t\tconst pendingMutationScopes = new Map<\n\t\t\t\t\tPendingExecution,\n\t\t\t\t\tPathScopedMutation\n\t\t\t\t>();\n\t\t\t\tconst pendingExecutionWaveIndexes = new Map<PendingExecution, number>();\n\t\t\t\tconst pendingExecutionScheduling = new Map<\n\t\t\t\t\tPendingExecution,\n\t\t\t\t\tToolSchedulingDecision\n\t\t\t\t>();\n\t\t\t\tconst toolSchedulingDecisions = new Map<\n\t\t\t\t\tstring,\n\t\t\t\t\tToolSchedulingDecision\n\t\t\t\t>();\n\t\t\t\tconst toolPhaseStartMs = this.clock.now();\n\t\t\t\tlet currentWaveIndex = 0;\n\t\t\t\tconst mutationPathBase = this.options.cwd ?? process.cwd();\n\t\t\t\tconst toolSchedulingMetadata = new Map<\n\t\t\t\t\tstring,\n\t\t\t\t\tToolSchedulingMetadata\n\t\t\t\t>();\n\n\t\t\t\tconst nextWaveIndex = (): number => {\n\t\t\t\t\tcurrentWaveIndex += 1;\n\t\t\t\t\treturn currentWaveIndex;\n\t\t\t\t};\n\n\t\t\t\tconst pendingWaveIndex = (): number =>\n\t\t\t\t\tpendingExecutions.length > 0\n\t\t\t\t\t\t? (pendingExecutionWaveIndexes.get(pendingExecutions[0]!) ??\n\t\t\t\t\t\t\tcurrentWaveIndex)\n\t\t\t\t\t\t: nextWaveIndex();\n\n\t\t\t\tconst schedulerWaitMs = (): number =>\n\t\t\t\t\tMath.max(0, this.clock.now() - toolPhaseStartMs);\n\n\t\t\t\tconst isMcpParallelOptIn = (toolDef: AgentTool): boolean =>\n\t\t\t\t\ttoolDef.source?.type === \"mcp\" &&\n\t\t\t\t\ttoolDef.source.supportsParallelToolCalls === true &&\n\t\t\t\t\ttoolDef.annotations?.destructiveHint !== true;\n\n\t\t\t\tconst buildToolPhaseSummary = ():\n\t\t\t\t\t| Extract<AgentEvent, { type: \"tool_phase_summary\" }>\n\t\t\t\t\t| undefined => {\n\t\t\t\t\tconst rawDecisions = [...toolSchedulingDecisions.values()].sort(\n\t\t\t\t\t\t(left, right) => left.emittedIndex - right.emittedIndex,\n\t\t\t\t\t);\n\t\t\t\t\tif (rawDecisions.length === 0) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst waveCounts = new Map<number, number>();\n\t\t\t\t\tfor (const decision of rawDecisions) {\n\t\t\t\t\t\tif (decision.waveIndex !== undefined) {\n\t\t\t\t\t\t\twaveCounts.set(\n\t\t\t\t\t\t\t\tdecision.waveIndex,\n\t\t\t\t\t\t\t\t(waveCounts.get(decision.waveIndex) ?? 0) + 1,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst decisions: Extract<\n\t\t\t\t\t\tAgentEvent,\n\t\t\t\t\t\t{ type: \"tool_phase_summary\" }\n\t\t\t\t\t>[\"decisions\"] = rawDecisions.map((decision) => {\n\t\t\t\t\t\tconst isSingleModelToolCall = rawDecisions.length === 1;\n\t\t\t\t\t\tconst waveSize =\n\t\t\t\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t\t\t\t? (waveCounts.get(decision.waveIndex) ?? 1)\n\t\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t\tconst outcome =\n\t\t\t\t\t\t\tdecision.cacheHit === true\n\t\t\t\t\t\t\t\t? \"cached\"\n\t\t\t\t\t\t\t\t: decision.decision === \"skipped\"\n\t\t\t\t\t\t\t\t\t? \"skipped\"\n\t\t\t\t\t\t\t\t\t: decision.decision === \"delayed\" ||\n\t\t\t\t\t\t\t\t\t\t\tdecision.blockedByMutation === true\n\t\t\t\t\t\t\t\t\t\t? \"delayed\"\n\t\t\t\t\t\t\t\t\t\t: decision.decision === \"parallelized\" ||\n\t\t\t\t\t\t\t\t\t\t\t\t(waveSize > 1 && decision.decision === \"scheduled\")\n\t\t\t\t\t\t\t\t\t\t\t? \"parallelized\"\n\t\t\t\t\t\t\t\t\t\t\t: \"serialized\";\n\t\t\t\t\t\tconst reason =\n\t\t\t\t\t\t\toutcome === \"cached\"\n\t\t\t\t\t\t\t\t? \"cache_hit\"\n\t\t\t\t\t\t\t\t: decision.blockedByMutation === true\n\t\t\t\t\t\t\t\t\t? decision.reason\n\t\t\t\t\t\t\t\t\t: decision.reason === \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t\t\t: decision.mcpOptIn === true\n\t\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"read_only\")\n\t\t\t\t\t\t\t\t\t\t\t\t? outcome === \"parallelized\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"read_only_parallel_safe\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isSingleModelToolCall\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"single_read_only_call\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason\n\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"path_scoped_mutation\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: decision.reason;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttoolCallId: decision.callId,\n\t\t\t\t\t\t\ttoolName: decision.toolName,\n\t\t\t\t\t\t\temittedIndex: decision.emittedIndex,\n\t\t\t\t\t\t\toutcome,\n\t\t\t\t\t\t\tdecision: outcome,\n\t\t\t\t\t\t\treason,\n\t\t\t\t\t\t\twaveIndex:\n\t\t\t\t\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t\t\t\t\t? Math.max(0, decision.waveIndex - 1)\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\twaitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),\n\t\t\t\t\t\t\tschedulerWaitMs: Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.round(decision.schedulerWaitMs ?? 0),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tmcpOptIn: decision.mcpOptIn,\n\t\t\t\t\t\t\tcacheHit: decision.cacheHit,\n\t\t\t\t\t\t\tblockedByMutation: decision.blockedByMutation,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\tconst parallelizedCallCount = decisions.filter(\n\t\t\t\t\t\t(decision) => decision.outcome === \"parallelized\",\n\t\t\t\t\t).length;\n\t\t\t\t\tconst delayedCallCount = decisions.filter(\n\t\t\t\t\t\t(decision) => decision.outcome === \"delayed\",\n\t\t\t\t\t).length;\n\t\t\t\t\tconst batchShapingFeedback =\n\t\t\t\t\t\tdecisions.length === 1 &&\n\t\t\t\t\t\tdecisions[0]?.reason === \"single_read_only_call\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tavoidableSingleton: true,\n\t\t\t\t\t\t\t\t\treason: \"single_read_only_call\",\n\t\t\t\t\t\t\t\t\thint: \"When you need several independent reads or searches, emit them together in one assistant message so Maestro can batch them safely.\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst serializationReasons = Object.fromEntries(\n\t\t\t\t\t\t[...decisions]\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(decision) =>\n\t\t\t\t\t\t\t\t\tdecision.outcome === \"serialized\" ||\n\t\t\t\t\t\t\t\t\tdecision.outcome === \"delayed\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.reduce((counts, decision) => {\n\t\t\t\t\t\t\t\tcounts.set(\n\t\t\t\t\t\t\t\t\tdecision.reason,\n\t\t\t\t\t\t\t\t\t(counts.get(decision.reason) ?? 0) + 1,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn counts;\n\t\t\t\t\t\t\t}, new Map<string, number>()),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"tool_phase_summary\",\n\t\t\t\t\t\tmodelToolCallCount: rawDecisions.length,\n\t\t\t\t\t\tmodelEmittedToolCallCount: rawDecisions.length,\n\t\t\t\t\t\tschedulableWaveCount: waveCounts.size,\n\t\t\t\t\t\tparallelizedCallCount,\n\t\t\t\t\t\tactuallyParallelizedCallCount: parallelizedCallCount,\n\t\t\t\t\t\tserializedCallCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) =>\n\t\t\t\t\t\t\t\tdecision.outcome === \"serialized\" ||\n\t\t\t\t\t\t\t\tdecision.outcome === \"delayed\",\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tdelayedCallCount,\n\t\t\t\t\t\tblockedByMutationCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.blockedByMutation === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tmcpOptInCallCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.mcpOptIn === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tmcpOptInUseCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.mcpOptIn === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\tcacheHitCount: decisions.filter(\n\t\t\t\t\t\t\t(decision) => decision.cacheHit === true,\n\t\t\t\t\t\t).length,\n\t\t\t\t\t\ttotalToolWaitMs: decisions.reduce(\n\t\t\t\t\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttoolWaitTimeMs: decisions.reduce(\n\t\t\t\t\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tserializationReasons,\n\t\t\t\t\t\tdecisions,\n\t\t\t\t\t\tbatchShapingFeedback,\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tconst getMutationScope = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolMetadataCache.get(toolCall.name),\n\t\t\t\t): PathScopedMutation | undefined =>\n\t\t\t\t\tgetPathScopedMutation(toolCall, toolDef, mutationPathBase);\n\n\t\t\t\tconst sameMutationScope = (\n\t\t\t\t\tleft: PathScopedMutation | undefined,\n\t\t\t\t\tright: PathScopedMutation | undefined,\n\t\t\t\t): boolean => {\n\t\t\t\t\tif (!left || !right) {\n\t\t\t\t\t\treturn left === right;\n\t\t\t\t\t}\n\t\t\t\t\tconst leftArgumentKeys = left.argumentKeys ?? [];\n\t\t\t\t\tconst rightArgumentKeys = right.argumentKeys ?? [];\n\t\t\t\t\treturn (\n\t\t\t\t\t\tleft.source === right.source &&\n\t\t\t\t\t\tleft.paths.length === right.paths.length &&\n\t\t\t\t\t\tleft.paths.every((path, index) => path === right.paths[index]) &&\n\t\t\t\t\t\tleftArgumentKeys.length === rightArgumentKeys.length &&\n\t\t\t\t\t\tleftArgumentKeys.every(\n\t\t\t\t\t\t\t(argumentKey, index) => argumentKey === rightArgumentKeys[index],\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t};\n\n\t\t\t\tconst pendingMutationCount = (): number =>\n\t\t\t\t\tpendingExecutions.filter((execution) => {\n\t\t\t\t\t\tconst toolDef = toolMetadataCache.definitions.get(\n\t\t\t\t\t\t\texecution.toolCall.name,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t\t!isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source)\n\t\t\t\t\t\t);\n\t\t\t\t\t}).length;\n\n\t\t\t\tconst mergeToolSchedulingMetadata = (\n\t\t\t\t\ttoolCallId: string,\n\t\t\t\t\tmetadata: ToolSchedulingMetadata,\n\t\t\t\t): ToolSchedulingMetadata => {\n\t\t\t\t\ttoolSchedulingMetadata.set(toolCallId, metadata);\n\t\t\t\t\treturn metadata;\n\t\t\t\t};\n\n\t\t\t\tconst pathScopeSchedulingReason = (\n\t\t\t\t\tscope: PathScopedMutation,\n\t\t\t\t\tcanJoinPathScope: boolean,\n\t\t\t\t): ToolSchedulingMetadata[\"reason\"] => {\n\t\t\t\t\tif (pendingExecutions.length === 0 || pendingMutationCount() === 0) {\n\t\t\t\t\t\treturn \"path_scope_available\";\n\t\t\t\t\t}\n\t\t\t\t\tif (canJoinPathScope) {\n\t\t\t\t\t\treturn \"path_scope_disjoint\";\n\t\t\t\t\t}\n\t\t\t\t\tconst hasPathOverlap = pendingExecutions.some((execution) => {\n\t\t\t\t\t\tconst pendingScope = pendingMutationScopes.get(execution);\n\t\t\t\t\t\treturn pendingScope\n\t\t\t\t\t\t\t? pathScopesOverlap(scope, pendingScope)\n\t\t\t\t\t\t\t: false;\n\t\t\t\t\t});\n\t\t\t\t\treturn hasPathOverlap ? \"path_scope_overlap\" : \"pending_mutation\";\n\t\t\t\t};\n\n\t\t\t\tconst buildToolSchedulingMetadata = ({\n\t\t\t\t\ttoolDef,\n\t\t\t\t\treadOnly,\n\t\t\t\t\tparallelSafe,\n\t\t\t\t\tscope,\n\t\t\t\t\tcache,\n\t\t\t\t\tcanJoinPathScope,\n\t\t\t\t\tlaneConcurrencyLimit = concurrencyLimit,\n\t\t\t\t}: {\n\t\t\t\t\ttoolDef?: AgentTool;\n\t\t\t\t\treadOnly: boolean;\n\t\t\t\t\tparallelSafe: boolean;\n\t\t\t\t\tscope?: PathScopedMutation;\n\t\t\t\t\tcache: ToolSchedulingMetadata[\"cache\"];\n\t\t\t\t\tcanJoinPathScope: boolean;\n\t\t\t\t\tlaneConcurrencyLimit?: number;\n\t\t\t\t}): ToolSchedulingMetadata => {\n\t\t\t\t\tconst pendingMutations = pendingMutationCount();\n\t\t\t\t\tconst base: ToolSchedulingMetadata = {\n\t\t\t\t\t\tclassification: \"unknown\",\n\t\t\t\t\t\treason: \"unknown_tool\",\n\t\t\t\t\t\tconcurrencyLimit: laneConcurrencyLimit,\n\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\tpendingMutations,\n\t\t\t\t\t\tcache,\n\t\t\t\t\t};\n\t\t\t\t\tif (!toolDef) {\n\t\t\t\t\t\treturn base;\n\t\t\t\t\t}\n\t\t\t\t\tif (requiresSerializedTurn) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"workflow_serialized\",\n\t\t\t\t\t\t\treason: \"workflow_state_tracker\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (readOnly) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"read_only\",\n\t\t\t\t\t\t\treason: \"read_only_tool\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (scope) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"path_scoped_mutation\",\n\t\t\t\t\t\t\treason: pathScopeSchedulingReason(scope, canJoinPathScope),\n\t\t\t\t\t\t\tpathScope: scope.paths,\n\t\t\t\t\t\t\tpathScopeSource: scope.source,\n\t\t\t\t\t\t\tpathArgumentKeys: scope.argumentKeys,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (parallelSafe && !readOnly) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"parallel_safe_mutation\",\n\t\t\t\t\t\t\treason: \"mcp_parallel_opt_in\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (pendingMutations > 0) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...base,\n\t\t\t\t\t\t\tclassification: \"serialized_mutation\",\n\t\t\t\t\t\t\treason: \"pending_mutation\",\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tclassification: \"serialized_mutation\",\n\t\t\t\t\t\treason: \"mutating_tool\",\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\tconst hasPendingUnscopedMutation = (): boolean =>\n\t\t\t\t\tpendingExecutions.some((execution) => {\n\t\t\t\t\t\tconst toolDef = toolMetadataCache.get(execution.toolCall.name);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t\t!isReadOnlyTool(\n\t\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t!pendingMutationScopes.has(execution)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\tconst mutationBlockReason = (\n\t\t\t\t\tscope: PathScopedMutation | undefined,\n\t\t\t\t): string =>\n\t\t\t\t\tscope && !hasPendingUnscopedMutation()\n\t\t\t\t\t\t? \"mutation_scope_overlap\"\n\t\t\t\t\t\t: \"mutation_unknown_write_set\";\n\n\t\t\t\tconst isPendingParallelSafeMutation = (\n\t\t\t\t\texecution: PendingExecution,\n\t\t\t\t): boolean => {\n\t\t\t\t\tconst toolDef = toolMetadataCache.get(execution.toolCall.name);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t\t!isReadOnlyTool(\n\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tisParallelSafeTool(\n\t\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t!pendingMutationScopes.has(execution)\n\t\t\t\t\t);\n\t\t\t\t};\n\n\t\t\t\tconst canJoinParallelSafeMutationWave = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\ttoolDef = toolMetadataCache.get(toolCall.name),\n\t\t\t\t): boolean =>\n\t\t\t\t\t!!toolDef &&\n\t\t\t\t\t!isReadOnlyTool(toolDef.name, toolDef.annotations, toolDef.source) &&\n\t\t\t\t\tisParallelSafeTool(\n\t\t\t\t\t\ttoolDef.name,\n\t\t\t\t\t\ttoolDef.annotations,\n\t\t\t\t\t\ttoolDef.source,\n\t\t\t\t\t) &&\n\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\tpendingExecutions.every(isPendingParallelSafeMutation);\n\n\t\t\t\tconst canJoinPathScopedMutationIsland = (\n\t\t\t\t\tscope: PathScopedMutation | undefined,\n\t\t\t\t): scope is PathScopedMutation =>\n\t\t\t\t\t!!scope &&\n\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\tpendingExecutions.every((execution) => {\n\t\t\t\t\t\tconst pendingScope = pendingMutationScopes.get(execution);\n\t\t\t\t\t\treturn pendingScope\n\t\t\t\t\t\t\t? !pathScopesOverlap(scope, pendingScope)\n\t\t\t\t\t\t\t: false;\n\t\t\t\t\t});\n\t\t\t\tconst laneConcurrencyLimit = ({\n\t\t\t\t\treadOnly,\n\t\t\t\t\tscope,\n\t\t\t\t\tparallelSafe,\n\t\t\t\t\ttoolDef,\n\t\t\t\t}: {\n\t\t\t\t\treadOnly: boolean;\n\t\t\t\t\tscope?: PathScopedMutation;\n\t\t\t\t\tparallelSafe: boolean;\n\t\t\t\t\ttoolDef?: AgentTool;\n\t\t\t\t}): number =>\n\t\t\t\t\trequiresSerializedTurn\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: readOnly\n\t\t\t\t\t\t\t? readOnlyConcurrencyLimitForTool(toolDef)\n\t\t\t\t\t\t\t: scope\n\t\t\t\t\t\t\t\t? configuredConcurrency\n\t\t\t\t\t\t\t\t: parallelSafe\n\t\t\t\t\t\t\t\t\t? parallelSafeMutationConcurrencyLimitForTool(toolDef)\n\t\t\t\t\t\t\t\t\t: 1;\n\n\t\t\t\t// Override: workflow-tracked tools require serialization\n\t\t\t\tif (configuredConcurrency > 1 && requiresSerializedTurn) {\n\t\t\t\t\tconcurrencyLimit = 1;\n\t\t\t\t\tif (!this.warnedAboutWorkflowConcurrency) {\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"WorkflowStateTracker requires serialized tool execution; maxConcurrentToolExecutions capped at 1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.warnedAboutWorkflowConcurrency = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet steeringTriggered = false;\n\t\t\t\tlet remainingToolCalls: ToolCall[] = [];\n\t\t\t\tlet mutatingToolCompletedInCurrentBatch = false;\n\n\t\t\t\tconst checkSteering = async (): Promise<void> => {\n\t\t\t\t\tif (steeringTriggered || !getSteeringMessages) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\t\tsteeringTriggered = true;\n\t\t\t\t\t\tsteeringAfterTools = steering;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst buildExecutionEvents = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t): AgentEvent[] => {\n\t\t\t\t\tconst governedMetadata = getGovernedToolResultEventMetadata(\n\t\t\t\t\t\tmessage.details,\n\t\t\t\t\t);\n\t\t\t\t\tconst skillMetadata = getSkillToolResultEventMetadata(\n\t\t\t\t\t\tmessage.details,\n\t\t\t\t\t).skillMetadata;\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{ type: \"message_start\", message } as AgentEvent,\n\t\t\t\t\t\t{ type: \"message_end\", message } as AgentEvent,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolExecutionId: metadata?.toolExecutionId,\n\t\t\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\t\t\tmetadata?.approvalRequestId ??\n\t\t\t\t\t\t\t\tgovernedMetadata.approvalRequestId,\n\t\t\t\t\t\t\terrorCode: governedMetadata.errorCode,\n\t\t\t\t\t\t\tgovernedOutcome: governedMetadata.governedOutcome,\n\t\t\t\t\t\t\tskillMetadata,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\t\tisError,\n\t\t\t\t\t\t\tscheduling: toolSchedulingMetadata.get(toolCall.id),\n\t\t\t\t\t\t} as AgentEvent,\n\t\t\t\t\t];\n\t\t\t\t};\n\t\t\t\tconst emitToolResult = (\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tapplyWorkflowStateHooks({\n\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\tresult: message,\n\t\t\t\t\t\t\ttracker: this.workflowState,\n\t\t\t\t\t\t\tisError,\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttoolResults.push(message);\n\t\t\t\t\t\treturn buildExecutionEvents(toolCall, message, isError, metadata);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error instanceof WorkflowStateError) {\n\t\t\t\t\t\t\tconst workflowErrorResult: ToolResultMessage = {\n\t\t\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: error.message }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolResults.push(workflowErrorResult);\n\t\t\t\t\t\t\treturn buildExecutionEvents(\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tworkflowErrorResult,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst emittedIndexForToolCall = (toolCall: ToolCall): number => {\n\t\t\t\t\tconst emittedIndex = toolCallsToExecute.findIndex(\n\t\t\t\t\t\t(candidate) => candidate.id === toolCall.id,\n\t\t\t\t\t);\n\t\t\t\t\treturn emittedIndex >= 0\n\t\t\t\t\t\t? emittedIndex\n\t\t\t\t\t\t: toolSchedulingDecisions.size;\n\t\t\t\t};\n\t\t\t\tconst emitSkippedToolCall = (toolCall: ToolCall): AgentEvent[] => {\n\t\t\t\t\tconst sanitizedSkippedArgs = this.safetyMiddleware.sanitizeForLogging(\n\t\t\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t\t\t);\n\t\t\t\t\tconst existingScheduling = toolSchedulingMetadata.get(toolCall.id);\n\t\t\t\t\tconst toolDef = toolMetadataCache.get(toolCall.name);\n\t\t\t\t\tconst skippedToolCallReadOnly = isReadOnlyToolCall(toolCall);\n\t\t\t\t\tconst skippedToolCallParallelSafe = isParallelSafeToolCall(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t);\n\t\t\t\t\tconst mutationScope = getMutationScope(toolCall, toolDef);\n\t\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\tconst schedulingMetadata = mergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\texistingScheduling ??\n\t\t\t\t\t\t\tbuildToolSchedulingMetadata({\n\t\t\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t\t\t\treadOnly: skippedToolCallReadOnly,\n\t\t\t\t\t\t\t\tparallelSafe: skippedToolCallParallelSafe,\n\t\t\t\t\t\t\t\tscope: mutationScope,\n\t\t\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\t\t\treusableToolResultKey === undefined ? \"disabled\" : \"miss\",\n\t\t\t\t\t\t\t\tcanJoinPathScope:\n\t\t\t\t\t\t\t\t\tcanJoinPathScopedMutationIsland(mutationScope),\n\t\t\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\t\t\treadOnly: skippedToolCallReadOnly,\n\t\t\t\t\t\t\t\t\tparallelSafe: skippedToolCallParallelSafe,\n\t\t\t\t\t\t\t\t\tscope: mutationScope,\n\t\t\t\t\t\t\t\t\ttoolDef,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tconst schedulingDecision: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: emittedIndexForToolCall(toolCall),\n\t\t\t\t\t\tdecision: \"skipped\",\n\t\t\t\t\t\treason: \"steering_interrupted\",\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, schedulingDecision);\n\t\t\t\t\tconst skippedResult: ToolResultMessage = {\n\t\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: \"Skipped due to queued user message.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t};\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\targs: sanitizedSkippedArgs,\n\t\t\t\t\t\t\tscheduling: schedulingMetadata,\n\t\t\t\t\t\t} as AgentEvent,\n\t\t\t\t\t\t...emitToolResult(skippedResult, toolCall, true),\n\t\t\t\t\t];\n\t\t\t\t};\n\t\t\t\tconst recordSafetyBlockedToolCall = (\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t): ToolSchedulingDecision => {\n\t\t\t\t\tconst existing = toolSchedulingDecisions.get(toolCall.id);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\treturn existing;\n\t\t\t\t\t}\n\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: emittedIndexForToolCall(toolCall),\n\t\t\t\t\t\tdecision: \"skipped\",\n\t\t\t\t\t\treason: \"safety_blocked\",\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\treturn scheduling;\n\t\t\t\t};\n\t\t\t\tconst emitSafetyPipelineToolResult = (\n\t\t\t\t\tmessage: ToolResultMessage,\n\t\t\t\t\ttoolCall: ToolCall,\n\t\t\t\t\tisError: boolean,\n\t\t\t\t\tmetadata?: {\n\t\t\t\t\t\ttoolExecutionId?: string;\n\t\t\t\t\t\tapprovalRequestId?: string;\n\t\t\t\t\t},\n\t\t\t\t): AgentEvent[] => {\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\trecordSafetyBlockedToolCall(toolCall);\n\t\t\t\t\t}\n\t\t\t\t\treturn emitToolResult(message, toolCall, isError, metadata);\n\t\t\t\t};\n\t\t\t\tconst resolveNextPendingExecution = async (): Promise<AgentEvent[]> => {\n\t\t\t\t\tconst events: AgentEvent[] = [];\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst next = await waitForNextExecutionOrUpdate(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (next.kind === \"update\") {\n\t\t\t\t\t\t\tevents.push(next.event);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst outcome = next.outcome;\n\t\t\t\t\t\tpendingMutationScopes.delete(next.execution);\n\t\t\t\t\t\tpendingExecutionWaveIndexes.delete(next.execution);\n\t\t\t\t\t\tpendingExecutionScheduling.delete(next.execution);\n\t\t\t\t\t\tconst completedToolWasMutating =\n\t\t\t\t\t\t\tgetReusableToolResultCacheKey(\n\t\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t) === undefined;\n\t\t\t\t\t\tinvalidateReusableToolResultsAfterMutation(\n\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmutatingToolCompletedInCurrentBatch ||= completedToolWasMutating;\n\t\t\t\t\t\tevents.push(\n\t\t\t\t\t\t\t...emitToolResult(\n\t\t\t\t\t\t\t\toutcome.message,\n\t\t\t\t\t\t\t\tnext.execution.toolCall,\n\t\t\t\t\t\t\t\toutcome.isError,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttoolExecutionId: outcome.toolExecutionId,\n\t\t\t\t\t\t\t\t\tapprovalRequestId: outcome.approvalRequestId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\treturn events;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst drainPendingExecutions = async (\n\t\t\t\t\ttargetPendingCount = 0,\n\t\t\t\t): Promise<AgentEvent[]> => {\n\t\t\t\t\tconst events: AgentEvent[] = [];\n\t\t\t\t\twhile (pendingExecutions.length > targetPendingCount) {\n\t\t\t\t\t\tevents.push(...(await resolveNextPendingExecution()));\n\t\t\t\t\t}\n\t\t\t\t\treturn events;\n\t\t\t\t};\n\t\t\t\tconst scheduleResolveIfNeeded = async (): Promise<AgentEvent[]> => {\n\t\t\t\t\tif (pendingExecutions.length < concurrencyLimit) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t\treturn drainPendingExecutions(concurrencyLimit - 1);\n\t\t\t\t};\n\n\t\t\t\tfor (\n\t\t\t\t\tlet toolIndex = 0;\n\t\t\t\t\ttoolIndex < toolCallsToExecute.length;\n\t\t\t\t\ttoolIndex++\n\t\t\t\t) {\n\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst toolCall = toolCallsToExecute[toolIndex];\n\t\t\t\t\tif (!toolCall) continue;\n\t\t\t\t\tlet schedulingDelayReason: string | undefined;\n\t\t\t\t\tlet blockedByMutation = false;\n\t\t\t\t\tconst noteMutationDelay = (reason: string): void => {\n\t\t\t\t\t\tschedulingDelayReason ??= reason;\n\t\t\t\t\t\tblockedByMutation = true;\n\t\t\t\t\t};\n\t\t\t\t\tconst originalToolCallReadOnly = isReadOnlyToolCall(toolCall);\n\t\t\t\t\tconst originalMutationScope = originalToolCallReadOnly\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getMutationScope(toolCall);\n\t\t\t\t\tconst originalToolDef = toolDefinitionsByName.get(toolCall.name);\n\t\t\t\t\tconst originalToolCallParallelSafe = isParallelSafeToolCall(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\toriginalToolDef,\n\t\t\t\t\t);\n\t\t\t\t\tconst originalCanJoinPathScope = canJoinPathScopedMutationIsland(\n\t\t\t\t\t\toriginalMutationScope,\n\t\t\t\t\t);\n\t\t\t\t\tconst originalJoinsParallelSafeMutationWave =\n\t\t\t\t\t\t!originalToolCallReadOnly &&\n\t\t\t\t\t\tcanJoinParallelSafeMutationWave(toolCall);\n\t\t\t\t\tlet preDrainSchedulingMetadata: ToolSchedulingMetadata | undefined;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!originalToolCallReadOnly &&\n\t\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\t\tpendingMutationCount() > 0 &&\n\t\t\t\t\t\t!originalCanJoinPathScope &&\n\t\t\t\t\t\t!originalJoinsParallelSafeMutationWave\n\t\t\t\t\t) {\n\t\t\t\t\t\tpreDrainSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\tcache: \"disabled\",\n\t\t\t\t\t\t\tcanJoinPathScope: originalCanJoinPathScope,\n\t\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoteMutationDelay(mutationBlockReason(originalMutationScope));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tif (preDrainSchedulingMetadata) {\n\t\t\t\t\t\t\t\tmergeToolSchedulingMetadata(\n\t\t\t\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\t\t\t\tpreDrainSchedulingMetadata,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst reusableToolResultKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t);\n\t\t\t\t\tconst alreadyHadReusableToolResultState =\n\t\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t);\n\t\t\t\t\tincrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t);\n\t\t\t\t\tconst shouldSkipLoopDetection = (\n\t\t\t\t\t\tcandidateToolCall: ToolCall,\n\t\t\t\t\t): boolean => {\n\t\t\t\t\t\tconst candidateKey = getReusableToolResultCacheKey(\n\t\t\t\t\t\t\tcandidateToolCall,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tcandidateKey !== undefined &&\n\t\t\t\t\t\t\tcandidateKey === reusableToolResultKey &&\n\t\t\t\t\t\t\talreadyHadReusableToolResultState &&\n\t\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t!mutatingToolCompletedInCurrentBatch &&\n\t\t\t\t\t\t\thasReusableToolResultState(\n\t\t\t\t\t\t\t\tcandidateKey,\n\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t};\n\t\t\t\t\tconst nextInitialSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\treusableToolResultKey === undefined\n\t\t\t\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t\t\t\t: alreadyHadReusableToolResultState\n\t\t\t\t\t\t\t\t\t? \"candidate\"\n\t\t\t\t\t\t\t\t\t: \"miss\",\n\t\t\t\t\t\tcanJoinPathScope: canJoinPathScopedMutationIsland(\n\t\t\t\t\t\t\toriginalMutationScope,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\treadOnly: originalToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: originalToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: originalMutationScope,\n\t\t\t\t\t\t\ttoolDef: originalToolDef,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t\tconst initialSchedulingMetadata = mergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\tpreDrainSchedulingMetadata\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...nextInitialSchedulingMetadata,\n\t\t\t\t\t\t\t\t\tclassification: preDrainSchedulingMetadata.classification,\n\t\t\t\t\t\t\t\t\treason: preDrainSchedulingMetadata.reason,\n\t\t\t\t\t\t\t\t\tqueueDepth: preDrainSchedulingMetadata.queueDepth,\n\t\t\t\t\t\t\t\t\tpendingMutations: preDrainSchedulingMetadata.pendingMutations,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: nextInitialSchedulingMetadata,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Run safety pipeline (rate limiting, hooks, firewall, approval, validation)\n\t\t\t\t\tlet safetyVerdict: ToolSafetyVerdict | undefined;\n\t\t\t\t\tlet rateLimitUpdate:\n\t\t\t\t\t\t| { toolCallsThisMinute: number; minuteWindowStart: number }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst safetyIterator = evaluateToolSafety({\n\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\ttools,\n\t\t\t\t\t\t\tuserMessage,\n\t\t\t\t\t\t\tcfg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\t\tworkflowState: this.workflowState,\n\t\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\t\tapprovalService: this.options.approvalService,\n\t\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\thookService,\n\t\t\t\t\t\t\tfirewall,\n\t\t\t\t\t\t\trateLimitState: {\n\t\t\t\t\t\t\t\trecentToolTimestamps: this.recentToolTimestamps,\n\t\t\t\t\t\t\t\ttoolCallsThisMinute: this.toolCallsThisMinute,\n\t\t\t\t\t\t\t\tminuteWindowStart: this.minuteWindowStart,\n\t\t\t\t\t\t\t\trateWindowMs: ProviderTransport.TOOL_RATE_WINDOW_MS,\n\t\t\t\t\t\t\t\trateLimit: ProviderTransport.TOOL_RATE_LIMIT,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tshouldSkipLoopDetection,\n\t\t\t\t\t\t\tschedulingMetadata: initialSchedulingMetadata,\n\t\t\t\t\t\t\temitToolResult: emitSafetyPipelineToolResult,\n\t\t\t\t\t\t});\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst safetyStep = await safetyIterator.next();\n\t\t\t\t\t\t\tif (safetyStep.done) {\n\t\t\t\t\t\t\t\t({ verdict: safetyVerdict, rateLimitUpdate } =\n\t\t\t\t\t\t\t\t\tsafetyStep.value);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield safetyStep.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdecrementPendingReusableToolSafetyCheck(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\tpendingReusableToolSafetyChecks,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!safetyVerdict || !rateLimitUpdate) {\n\t\t\t\t\t\tthrow new Error(\"Safety pipeline did not return a verdict.\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply rate limit state updates\n\t\t\t\t\tthis.toolCallsThisMinute = rateLimitUpdate.toolCallsThisMinute;\n\t\t\t\t\tthis.minuteWindowStart = rateLimitUpdate.minuteWindowStart;\n\n\t\t\t\t\tif (safetyVerdict.outcome === \"blocked\") {\n\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\t} = safetyVerdict;\n\t\t\t\t\tconst effectiveToolCallReadOnly =\n\t\t\t\t\t\tisReadOnlyTool(tool.name, tool.annotations, tool.source) &&\n\t\t\t\t\t\ttool.annotations?.destructiveHint !== true;\n\t\t\t\t\tconst effectiveToolCallParallelSafe = isParallelSafeTool(\n\t\t\t\t\t\ttool.name,\n\t\t\t\t\t\ttool.annotations,\n\t\t\t\t\t\ttool.source,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\teffectiveToolCallReadOnly &&\n\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnoteMutationDelay(\"pending_mutation\");\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst effectiveMutationScope = effectiveToolCallReadOnly\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getMutationScope(effectiveToolCall, tool);\n\t\t\t\t\tconst joinsPathScopedMutationIsland =\n\t\t\t\t\t\t!requiresSerializedTurn &&\n\t\t\t\t\t\tcanJoinPathScopedMutationIsland(effectiveMutationScope);\n\t\t\t\t\tconst joinsParallelSafeMutationWave =\n\t\t\t\t\t\t!requiresSerializedTurn &&\n\t\t\t\t\t\t!effectiveToolCallReadOnly &&\n\t\t\t\t\t\tcanJoinParallelSafeMutationWave(effectiveToolCall, tool);\n\t\t\t\t\tif (\n\t\t\t\t\t\t!effectiveToolCallReadOnly &&\n\t\t\t\t\t\tpendingExecutions.length > 0 &&\n\t\t\t\t\t\t!joinsPathScopedMutationIsland &&\n\t\t\t\t\t\t!joinsParallelSafeMutationWave\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thasPendingMutatingToolExecution(\n\t\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoteMutationDelay(mutationBlockReason(effectiveMutationScope));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst events = await drainPendingExecutions();\n\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconcurrencyLimit = requiresSerializedTurn\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: effectiveToolCallReadOnly\n\t\t\t\t\t\t\t? readOnlyConcurrencyLimitForTool(tool)\n\t\t\t\t\t\t\t: effectiveMutationScope\n\t\t\t\t\t\t\t\t? configuredConcurrency\n\t\t\t\t\t\t\t\t: effectiveToolCallParallelSafe\n\t\t\t\t\t\t\t\t\t? parallelSafeMutationConcurrencyLimitForTool(tool)\n\t\t\t\t\t\t\t\t\t: 1;\n\t\t\t\t\tconst effectiveSchedulingMetadata = buildToolSchedulingMetadata({\n\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\treadOnly: effectiveToolCallReadOnly,\n\t\t\t\t\t\tparallelSafe: effectiveToolCallParallelSafe,\n\t\t\t\t\t\tscope: effectiveMutationScope,\n\t\t\t\t\t\tcache:\n\t\t\t\t\t\t\treusableToolResultKey === undefined\n\t\t\t\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t\t\t\t: alreadyHadReusableToolResultState\n\t\t\t\t\t\t\t\t\t? \"candidate\"\n\t\t\t\t\t\t\t\t\t: \"miss\",\n\t\t\t\t\t\tcanJoinPathScope: joinsPathScopedMutationIsland,\n\t\t\t\t\t\tlaneConcurrencyLimit: laneConcurrencyLimit({\n\t\t\t\t\t\t\treadOnly: effectiveToolCallReadOnly,\n\t\t\t\t\t\t\tparallelSafe: effectiveToolCallParallelSafe,\n\t\t\t\t\t\t\tscope: effectiveMutationScope,\n\t\t\t\t\t\t\ttoolDef: tool,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t\tconst previousSchedulingMetadata = toolSchedulingMetadata.get(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst preservePreHookBlockedSchedulingReason =\n\t\t\t\t\t\t(previousSchedulingMetadata?.reason === \"path_scope_overlap\" ||\n\t\t\t\t\t\t\tpreviousSchedulingMetadata?.reason === \"pending_mutation\") &&\n\t\t\t\t\t\tsameMutationScope(originalMutationScope, effectiveMutationScope);\n\t\t\t\t\tmergeToolSchedulingMetadata(\n\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\tpreservePreHookBlockedSchedulingReason\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...effectiveSchedulingMetadata,\n\t\t\t\t\t\t\t\t\tclassification: previousSchedulingMetadata.classification,\n\t\t\t\t\t\t\t\t\treason: previousSchedulingMetadata.reason,\n\t\t\t\t\t\t\t\t\tqueueDepth: previousSchedulingMetadata.queueDepth,\n\t\t\t\t\t\t\t\t\tpendingMutations: previousSchedulingMetadata.pendingMutations,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: effectiveSchedulingMetadata,\n\t\t\t\t\t);\n\t\t\t\t\t// Use hook-modified (pre-validation) args for hook inputs\n\t\t\t\t\tconst policyCheckedReusableToolResultKey =\n\t\t\t\t\t\tgetReusableToolResultCacheKey(effectiveToolCall, toolMetadataCache);\n\t\t\t\t\tconst canReuseToolResult =\n\t\t\t\t\t\treusableToolResultKey !== undefined &&\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKey === reusableToolResultKey;\n\t\t\t\t\tif (canReuseToolResult && reusableToolResultKey) {\n\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys.add(reusableToolResultKey);\n\t\t\t\t\t}\n\t\t\t\t\tconst canServeReusableToolResult =\n\t\t\t\t\t\tcanReuseToolResult &&\n\t\t\t\t\t\t!hasPendingMutatingToolExecution(\n\t\t\t\t\t\t\tpendingExecutions,\n\t\t\t\t\t\t\ttoolMetadataCache,\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t!mutatingToolCompletedInCurrentBatch;\n\t\t\t\t\tif (canServeReusableToolResult) {\n\t\t\t\t\t\tconst cachedEntry = reusableToolResults.get(reusableToolResultKey);\n\t\t\t\t\t\tif (cachedEntry) {\n\t\t\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\t\t\tdecision: \"cached\",\n\t\t\t\t\t\t\t\treason: \"reusable_tool_result_ready\",\n\t\t\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\t\tconst cachedOutcome =\n\t\t\t\t\t\t\t\tawait recordReusableToolExecutionBridgeOutput({\n\t\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\t\toutcome: {\n\t\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\t\t...cachedEntry.message,\n\t\t\t\t\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\t\t\t\tcontent: cachedEntry.message.content.map((item) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tisError: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmergeToolSchedulingMetadata(toolCall.id, {\n\t\t\t\t\t\t\t\tclassification: \"cache_reuse\",\n\t\t\t\t\t\t\t\treason: \"cache_hit\",\n\t\t\t\t\t\t\t\tconcurrencyLimit,\n\t\t\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\t\t\tpendingMutations: pendingMutationCount(),\n\t\t\t\t\t\t\t\tcache: \"hit\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const event of emitToolResult(\n\t\t\t\t\t\t\t\tcachedOutcome.message,\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tcachedOutcome.isError,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttoolExecutionId: cachedOutcome.toolExecutionId,\n\t\t\t\t\t\t\t\t\tapprovalRequestId: cachedOutcome.approvalRequestId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait checkSteering();\n\t\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst pendingReusable = pendingReusableToolResults.get(\n\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (pendingReusable) {\n\t\t\t\t\t\t\tmergeToolSchedulingMetadata(toolCall.id, {\n\t\t\t\t\t\t\t\tclassification: \"cache_reuse\",\n\t\t\t\t\t\t\t\treason: \"cache_pending\",\n\t\t\t\t\t\t\t\tconcurrencyLimit,\n\t\t\t\t\t\t\t\tqueueDepth: pendingExecutions.length,\n\t\t\t\t\t\t\t\tpendingMutations: pendingMutationCount(),\n\t\t\t\t\t\t\t\tcache: \"pending_hit\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst waveIndex = pendingWaveIndex();\n\t\t\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\t\t\twaveIndex,\n\t\t\t\t\t\t\t\tdecision: \"cached\",\n\t\t\t\t\t\t\t\treason: \"reusable_tool_result_pending\",\n\t\t\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\t\t\t\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\tpromise: (async () => {\n\t\t\t\t\t\t\t\t\tconst cacheHitStart = this.clock.now();\n\t\t\t\t\t\t\t\t\treturn recordReusableToolExecutionBridgeOutput({\n\t\t\t\t\t\t\t\t\t\tbridge: platformToolExecutionBridge,\n\t\t\t\t\t\t\t\t\t\tplan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\t\t\t\t\toutcome: cloneToolOutcomeForCall(\n\t\t\t\t\t\t\t\t\t\t\tawait pendingReusable,\n\t\t\t\t\t\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\t\t\t\t\t\tthis.clock.now(),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tdurationMs: this.clock.now() - cacheHitStart,\n\t\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tpendingExecutions.push(pendingExecution);\n\t\t\t\t\t\t\tpendingExecutionWaveIndexes.set(pendingExecution, waveIndex);\n\t\t\t\t\t\t\tpendingExecutionScheduling.set(pendingExecution, scheduling);\n\t\t\t\t\t\t\tconst events = await scheduleResolveIfNeeded();\n\t\t\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pendingBeforeSchedule = pendingExecutions.length;\n\t\t\t\t\tconst waveIndex =\n\t\t\t\t\t\tpendingBeforeSchedule > 0 ? pendingWaveIndex() : nextWaveIndex();\n\t\t\t\t\tconst mcpOptIn =\n\t\t\t\t\t\tisMcpParallelOptIn(tool) && !effectiveToolCallReadOnly;\n\t\t\t\t\tconst decision =\n\t\t\t\t\t\tschedulingDelayReason !== undefined\n\t\t\t\t\t\t\t? \"delayed\"\n\t\t\t\t\t\t\t: pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t? \"parallelized\"\n\t\t\t\t\t\t\t\t: requiresSerializedTurn ||\n\t\t\t\t\t\t\t\t\t\t(!effectiveToolCallReadOnly &&\n\t\t\t\t\t\t\t\t\t\t\t!effectiveMutationScope &&\n\t\t\t\t\t\t\t\t\t\t\t!effectiveToolCallParallelSafe)\n\t\t\t\t\t\t\t\t\t? \"serialized\"\n\t\t\t\t\t\t\t\t\t: \"scheduled\";\n\t\t\t\t\tconst reason =\n\t\t\t\t\t\tschedulingDelayReason ??\n\t\t\t\t\t\t(effectiveToolCallReadOnly\n\t\t\t\t\t\t\t? requiresSerializedTurn\n\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t: pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t\t? \"read_only_wave\"\n\t\t\t\t\t\t\t\t\t: \"read_only_wave_start\"\n\t\t\t\t\t\t\t: requiresSerializedTurn\n\t\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t\t: joinsPathScopedMutationIsland\n\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation_disjoint\"\n\t\t\t\t\t\t\t\t\t: joinsParallelSafeMutationWave && mcpOptIn\n\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t: joinsParallelSafeMutationWave\n\t\t\t\t\t\t\t\t\t\t\t? \"parallel_safe_mutation_wave\"\n\t\t\t\t\t\t\t\t\t\t\t: mcpOptIn\n\t\t\t\t\t\t\t\t\t\t\t\t? pendingBeforeSchedule > 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"mcp_parallel_opt_in_wave_start\"\n\t\t\t\t\t\t\t\t\t\t\t\t: effectiveMutationScope\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation_wave_start\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"serialized_tool\");\n\t\t\t\t\tconst scheduling: ToolSchedulingDecision = {\n\t\t\t\t\t\tcallId: toolCall.id,\n\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\temittedIndex: toolIndex,\n\t\t\t\t\t\twaveIndex,\n\t\t\t\t\t\tdecision,\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tschedulerWaitMs: schedulerWaitMs(),\n\t\t\t\t\t\tmcpOptIn,\n\t\t\t\t\t\tblockedByMutation,\n\t\t\t\t\t};\n\t\t\t\t\ttoolSchedulingDecisions.set(toolCall.id, scheduling);\n\n\t\t\t\t\t// For client tools, set up the execution promise first, then emit event\n\t\t\t\t\t// This prevents race conditions where the client responds before we're listening\n\t\t\t\t\tlet clientToolExecPromise:\n\t\t\t\t\t\t| ReturnType<ClientToolExecutionService[\"requestExecution\"]>\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttool.executionLocation === \"client\" &&\n\t\t\t\t\t\tthis.options.clientToolService\n\t\t\t\t\t) {\n\t\t\t\t\t\tclientToolExecPromise =\n\t\t\t\t\t\t\tthis.options.clientToolService.requestExecution(\n\t\t\t\t\t\t\t\ttoolCall.id,\n\t\t\t\t\t\t\t\ttoolCall.name,\n\t\t\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// Now emit the event - the promise is already waiting for the result\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"client_tool_request\",\n\t\t\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t// Client tools execute out-of-process; they need the real args.\n\t\t\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst executionPromise = createToolExecutionPromise({\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tvalidatedArgs,\n\t\t\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\t\t\tcfg,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tclock: this.clock,\n\t\t\t\t\t\tsafetyMiddleware: this.safetyMiddleware,\n\t\t\t\t\t\tadaptiveThresholds: this.adaptiveThresholds,\n\t\t\t\t\t\tauditLogger: this.auditLogger,\n\t\t\t\t\t\thookService,\n\t\t\t\t\t\ttoolRetryService: this.options.toolRetryService,\n\t\t\t\t\t\ttoolRetryConfig: this.options.toolRetryConfig,\n\t\t\t\t\t\tclientToolService: this.options.clientToolService,\n\t\t\t\t\t\ttoolExecutionBridge: platformToolExecutionBridge,\n\t\t\t\t\t\ttoolExecutionBridgePlan: safetyVerdict.toolExecutionBridgePlan,\n\t\t\t\t\t\ttoolUpdateQueue,\n\t\t\t\t\t\tclientToolExecPromise,\n\t\t\t\t\t});\n\t\t\t\t\tconst trackedExecutionPromise =\n\t\t\t\t\t\tcanReuseToolResult && reusableToolResultKey\n\t\t\t\t\t\t\t? trackReusableToolResult(\n\t\t\t\t\t\t\t\t\treusableToolResultKey,\n\t\t\t\t\t\t\t\t\texecutionPromise,\n\t\t\t\t\t\t\t\t\treusableToolResults,\n\t\t\t\t\t\t\t\t\tpendingReusableToolResults,\n\t\t\t\t\t\t\t\t\tpolicyCheckedReusableToolResultKeys,\n\t\t\t\t\t\t\t\t\treusableToolResultCacheGeneration,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: executionPromise;\n\n\t\t\t\t\tconst pendingExecution: PendingExecution = {\n\t\t\t\t\t\ttoolCall,\n\t\t\t\t\t\tpromise: trackedExecutionPromise,\n\t\t\t\t\t};\n\t\t\t\t\tpendingExecutions.push(pendingExecution);\n\t\t\t\t\tpendingExecutionWaveIndexes.set(pendingExecution, waveIndex);\n\t\t\t\t\tpendingExecutionScheduling.set(pendingExecution, scheduling);\n\t\t\t\t\tif (effectiveMutationScope) {\n\t\t\t\t\t\tpendingMutationScopes.set(pendingExecution, effectiveMutationScope);\n\t\t\t\t\t}\n\t\t\t\t\tconst events = await scheduleResolveIfNeeded();\n\t\t\t\t\tfor (const event of events) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\tif (steeringTriggered) {\n\t\t\t\t\t\tremainingToolCalls = toolCallsToExecute.slice(toolIndex + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (pendingExecutions.length > 0) {\n\t\t\t\t\tfor (const event of await resolveNextPendingExecution()) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (steeringTriggered && remainingToolCalls.length > 0) {\n\t\t\t\t\tfor (const toolCall of remainingToolCalls) {\n\t\t\t\t\t\tfor (const event of emitSkippedToolCall(toolCall)) {\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst toolPhaseSummary = buildToolPhaseSummary();\n\t\t\t\tif (toolPhaseSummary) {\n\t\t\t\t\tyield toolPhaseSummary;\n\t\t\t\t}\n\n\t\t\t\tthis.safetyMiddleware.clearCredentials();\n\n\t\t\t\tif (!steeringTriggered && getSteeringMessages) {\n\t\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\t\tsteeringAfterTools = steering;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (completedAssistantMessage) {\n\t\t\t\tallMessages.push(completedAssistantMessage);\n\t\t\t}\n\t\t\tallMessages.push(...toolResults);\n\n\t\t\tyield {\n\t\t\t\ttype: \"turn_end\",\n\t\t\t\tmessage: completedAssistantMessage ??\n\t\t\t\t\tcurrentAssistantMessage ?? {\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\tapi: model.api,\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\t\ttotal: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstopReason: \"error\",\n\t\t\t\t\t\ttimestamp: this.clock.now(),\n\t\t\t\t\t},\n\t\t\t\ttoolResults,\n\t\t\t};\n\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t} else if (getSteeringMessages) {\n\t\t\t\tconst steering = await getSteeringMessages<AppMessage>();\n\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\tpendingMessages = steering;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!pendingNextTurn &&\n\t\t\t\tpendingMessages.length === 0 &&\n\t\t\t\tgetFollowUpMessages\n\t\t\t) {\n\t\t\t\tconst followUps = await getFollowUpMessages<AppMessage>();\n\t\t\t\tif (followUps.length > 0) {\n\t\t\t\t\tpendingMessages = followUps;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tpendingNextTurn = true;\n\t\t\t}\n\n\t\t\thasMoreToolCalls = encounteredError ? false : pendingNextTurn;\n\t\t\tif (encounteredError) {\n\t\t\t\tcfg.queryProfiler?.terminal(\"turn:error\");\n\t\t\t} else if (!hasMoreToolCalls) {\n\t\t\t\tcfg.queryProfiler?.terminal(\"turn:complete\", {\n\t\t\t\t\ttool_results: toolResults.length,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|