@jrkropp/codex-js 0.1.1 → 0.1.2
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/CHANGELOG.md +4 -0
- package/dist/{chat-runtime-CMli5dzJ.d.ts → chat-runtime-D7wu_KbX.d.ts} +3 -4
- package/dist/{chunk-FFASNDXU.js → chunk-JLDH4U5L.js} +3 -3
- package/dist/{chunk-FFASNDXU.js.map → chunk-JLDH4U5L.js.map} +1 -1
- package/dist/{chunk-TZBLUZ2X.js → chunk-SVK6PLGO.js} +4300 -2426
- package/dist/chunk-SVK6PLGO.js.map +1 -0
- package/dist/client/index.d.ts +4 -111
- package/dist/client/index.js +1 -1
- package/dist/index-CB9la6xE.d.ts +112 -0
- package/dist/index.d.ts +5 -6
- package/dist/index.js +2 -2
- package/dist/react/index.d.ts +5 -6
- package/dist/react/index.js +2 -2
- package/dist/{remote-DMPfepa9.d.ts → remote-_6TDvg-g.d.ts} +1 -1
- package/dist/server/index.d.ts +449 -32
- package/dist/server/index.js +1 -1
- package/dist/{session-BO6EZNK7.d.ts → session-DPhHN7RZ.d.ts} +18 -2
- package/dist/{store-H2cQxdpe.d.ts → store-GYldc9EJ.d.ts} +1 -1
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +1 -1
- package/dist/{thread_event_store-BIS0qzhi.d.ts → thread_event_store-B9CoQUIA.d.ts} +26 -1
- package/package.json +88 -88
- package/dist/DynamicToolCallResponse-D2OVpa4p.d.ts +0 -8
- package/dist/ToolRequestUserInputResponse-Bxjlpgho.d.ts +0 -17
- package/dist/chunk-TZBLUZ2X.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/upstream/codex-rs/core/src/models.ts","../src/upstream/codex-rs/core/src/protocol.ts","../src/upstream/codex-rs/core/src/auth.ts","../src/upstream/codex-rs/core/src/config-types.ts","../src/upstream/codex-rs/core/src/plan-mode.ts","../src/upstream/codex-rs/core/src/collaboration-mode-presets.ts","../src/upstream/codex-rs/core/src/event-mapping.ts","../src/upstream/codex-rs/core/src/thread-history-builder.ts","../src/upstream/codex-rs/core/src/rendered-thread.ts","../src/upstream/codex-rs/app-server-protocol/src/protocol/common.ts","../src/upstream/codex-rs/app-server-transport/src/transport/mod.ts","../src/upstream/codex-rs/app-server-client/src/session.ts","../src/upstream/codex-rs/app-server-client/src/pending_requests.ts","../src/upstream/codex-rs/app-server-client/src/thread_event_store.ts","../src/upstream/codex-rs/app-server-protocol/src/protocol/event-mapping.ts","../src/upstream/codex-rs/app-server-protocol/src/protocol/thread-resume.ts","../src/upstream/codex-rs/app-server-client/src/lib.ts","../src/upstream/codex-rs/app-server-client/src/remote.ts","../src/upstream/codex-rs/app-server/src/outgoing_message.ts","../src/upstream/codex-rs/app-server/src/request_processors/request_errors.ts","../src/upstream/codex-rs/app-server/src/connection_rpc_gate.ts","../src/upstream/codex-rs/app-server/src/request_serialization.ts","../src/upstream/codex-rs/app-server/src/message_processor.ts","../src/upstream/codex-rs/codex-api/src/error.ts","../src/upstream/codex-rs/codex-api/src/provider.ts","../src/upstream/codex-rs/core/src/agent/role.ts","../src/upstream/codex-rs/core/src/agent/mailbox.ts","../src/upstream/codex-rs/core/src/agent/registry.ts","../src/upstream/codex-rs/core/src/agent/control.ts","../src/upstream/codex-rs/core/src/model-provider.ts","../src/upstream/codex-rs/core/src/tools/tool_spec.ts","../src/upstream/codex-rs/codex-api/src/common.ts","../src/upstream/codex-rs/core/src/stream-parser.ts","../src/upstream/codex-rs/codex-api/src/stream_events_utils.ts","../src/upstream/codex-rs/codex-api/src/rate_limits.ts","../src/upstream/codex-rs/codex-api/src/sse/responses.ts","../src/upstream/codex-rs/codex-api/src/endpoint/responses_websocket.ts","../src/upstream/codex-rs/core/src/client.ts","../src/upstream/codex-rs/core/src/templates.ts","../src/upstream/codex-rs/core/src/compact.ts","../src/upstream/codex-rs/core/src/context/fragment.ts","../src/upstream/codex-rs/core/src/context/environment-context.ts","../src/upstream/codex-rs/core/src/context/collaboration-mode-instructions.ts","../src/upstream/codex-rs/core/src/context/permissions-instructions.ts","../src/upstream/codex-rs/core/src/context/context-updates.ts","../src/upstream/codex-rs/core/src/context/prompt-context.ts","../src/upstream/codex-rs/core/src/context/turn-aborted.ts","../src/upstream/codex-rs/utils/string/src/truncate.ts","../src/upstream/codex-rs/utils/output-truncation/src/lib.ts","../src/upstream/codex-rs/core/src/context_manager/normalize.ts","../src/upstream/codex-rs/core/src/context_manager/history.ts","../src/upstream/codex-rs/core/src/exec-output.ts","../src/upstream/codex-rs/core/src/hooks/types.ts","../src/upstream/codex-rs/core/src/hooks/dispatcher.ts","../src/upstream/codex-rs/core/src/request_permissions.ts","../src/upstream/codex-rs/core/src/hooks/runtime.ts","../src/upstream/codex-rs/core/src/goals/types.ts","../src/upstream/codex-rs/core/src/goals/runtime.ts","../src/upstream/codex-rs/core/src/ids.ts","../src/upstream/codex-rs/core/src/memory.ts","../src/upstream/codex-rs/codex-mcp/src/mcp/auth.ts","../src/upstream/codex-rs/codex-mcp/src/mcp/mod.ts","../src/upstream/codex-rs/core/src/mcp/types.ts","../src/upstream/codex-rs/codex-mcp/src/tools.ts","../src/upstream/codex-rs/codex-mcp/src/elicitation.ts","../src/upstream/codex-rs/codex-mcp/src/codex_apps.ts","../src/upstream/codex-rs/codex-mcp/src/rmcp_client.ts","../src/upstream/codex-rs/codex-mcp/src/connection_manager.ts","../src/upstream/codex-rs/core/src/mcp/manager.ts","../src/upstream/codex-rs/core/src/config/permissions.ts","../src/upstream/codex-rs/config/src/types.ts","../src/upstream/codex-rs/core/src/tools/spec_plan_types.ts","../src/upstream/codex-rs/config/src/merge.ts","../src/upstream/codex-rs/core/src/request_user_input.ts","../src/upstream/codex-rs/core/src/tools/orchestrator.ts","../src/upstream/codex-rs/core/src/state/turn.ts","../src/upstream/codex-rs/core/src/state/session.ts","../src/upstream/codex-rs/core/src/tasks/mod.ts","../src/upstream/codex-rs/core/src/session/turn-timing.ts","../src/upstream/codex-rs/core/src/session/turn-context.ts","../src/upstream/codex-rs/core/src/session/session-settings.ts","../src/upstream/codex-rs/core/src/session/rollout-reconstruction.ts","../src/upstream/codex-rs/core/src/session/session.ts","../src/upstream/codex-rs/core/src/compact-task-runner.ts","../src/upstream/codex-rs/core/src/tools/tool_name.ts","../src/upstream/codex-rs/core/src/tools/context.ts","../src/upstream/codex-rs/core/src/tools/tool_dispatch_trace.ts","../src/upstream/codex-rs/core/src/tools/parallel.ts","../src/upstream/codex-rs/core/src/tools/responses_api.ts","../src/upstream/codex-rs/core/src/tools/tool_search_entry.ts","../src/upstream/codex-rs/core/src/tools/events.ts","../src/upstream/codex-rs/core/src/tools/handlers/apply_patch.ts","../src/upstream/codex-rs/core/src/tools/handlers/apply_patch_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/unified_exec/exec_command.ts","../src/upstream/codex-rs/core/src/tools/handlers/unified_exec/write_stdin.ts","../src/upstream/codex-rs/core/src/tools/handlers/shell_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/plan.ts","../src/upstream/codex-rs/core/src/tools/handlers/plan_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/mcp_resource.ts","../src/upstream/codex-rs/core/src/tools/handlers/mcp_resource_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/multi_agents.ts","../src/upstream/codex-rs/core/src/tools/handlers/goal.ts","../src/upstream/codex-rs/core/src/tools/handlers/goal_spec.ts","../src/upstream/codex-rs/core/src/tools/hosted_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/tool_search_spec.ts","../src/upstream/codex-rs/core/src/tools/spec_plan.ts","../src/upstream/codex-rs/core/src/tools/registry.ts","../src/upstream/codex-rs/core/src/tools/handlers/dynamic.ts","../src/upstream/codex-rs/core/src/tools/handlers/mcp.ts","../src/upstream/codex-rs/core/src/tools/handlers/request_permissions.ts","../src/upstream/codex-rs/core/src/tools/handlers/request_user_input.ts","../src/upstream/codex-rs/core/src/tools/handlers/tool_search.ts","../src/upstream/codex-rs/core/src/tools/handlers/unavailable_tool.ts","../src/upstream/codex-rs/core/src/tools/spec.ts","../src/upstream/codex-rs/core/src/tools/router.ts","../src/upstream/codex-rs/core/src/stream_events_utils.ts","../src/upstream/codex-rs/core/src/session/turn.ts","../src/upstream/codex-rs/core/src/tasks/regular.ts","../src/upstream/codex-rs/core/src/tasks/compact.ts","../src/upstream/codex-rs/core/src/thread-store/live-thread.ts","../src/upstream/codex-rs/core/src/thread-store/types.ts","../src/upstream/codex-rs/codex-api/src/requests/responses.ts","../src/upstream/codex-rs/codex-api/src/endpoint/responses.ts","../src/upstream/codex-rs/app-server/src/request_processors/common.ts","../src/upstream/codex-rs/app-server/src/request_processors/mcp_processor.ts","../src/upstream/codex-rs/app-server/src/request_processors/token_usage_replay.ts","../src/upstream/codex-rs/app-server/src/request_processors/thread_processor.ts","../src/upstream/codex-rs/app-server/src/request_processors/turn_processor.ts","../src/upstream/codex-rs/app-server/src/dynamic_tools.ts","../src/upstream/codex-rs/app-server/src/server_request_response.ts","../src/upstream/codex-rs/app-server/src/session_factory.ts","../src/upstream/codex-rs/app-server/src/session_task_runner.ts","../src/upstream/codex-rs/app-server/src/thread_state.ts","../src/upstream/codex-rs/app-server/src/bespoke_event_handling.ts","../src/upstream/codex-rs/app-server/src/runtime.ts","../src/upstream/codex-rs/thread-store/src/in_memory.ts","../src/upstream/codex-rs/thread-store/src/local/mod.ts"],"names":["hookRunId","turn","request","isRecord","pending","notification","cloneTurn","webSearchActionDetail","epochSeconds","defaultInitializeParams","serverRequestThreadId","numberField","X_CODEX_TURN_STATE_HEADER","apiErrorFromUnknown","stringField","utf8ByteLength","item","truncate_function_output_payload","map_entries","startup_outcome_error_message","recordField","modeDisplayName","emptyTokenUsage","CancellationToken","errorMessage","EXECUTOR_UNAVAILABLE","parseFunctionArgs","eventCtx","UPDATE_GOAL_TOOL_NAME","mcp_tool_to_loadable_tool_spec","mcp_tool_namespace_description","parseArguments","parseJsonOrRaw","isFunctionCallError","turnItem","crypto","isError"],"mappings":"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","file":"chunk-SVK6PLGO.js","sourcesContent":["export type MessagePhase = \"commentary\" | \"final_answer\";\n\nexport type ContentItem =\n\t| { type: \"input_text\"; text: string }\n\t| { type: \"input_image\"; image_url: string; detail?: string | null }\n\t| { type: \"output_text\"; text: string };\n\nexport type FunctionCallOutputContentItem =\n\t| { type: \"input_text\"; text: string }\n\t| { type: \"input_image\"; image_url: string; detail?: string | null };\n\nexport type FunctionCallOutputBody =\n\t| { type: \"text\"; text: string }\n\t| { type: \"content_items\"; items: FunctionCallOutputContentItem[] };\n\nexport type FunctionCallOutputPayload = {\n\tbody: FunctionCallOutputBody;\n\tsuccess?: boolean | null;\n};\n\nexport type MessageResponseInputItem = {\n\ttype: \"message\";\n\tid?: string;\n\trole: string;\n\tcontent: ContentItem[];\n\tphase?: MessagePhase | null;\n};\n\nexport type FunctionCallOutputResponseInputItem = {\n\ttype: \"function_call_output\";\n\tcall_id: string;\n\toutput: FunctionCallOutputPayload;\n};\n\nexport type CustomToolCallOutputResponseInputItem = {\n\ttype: \"custom_tool_call_output\";\n\tcall_id: string;\n\tname?: string | null;\n\toutput: FunctionCallOutputPayload;\n};\n\nexport type McpToolCallOutputResponseInputItem = {\n\ttype: \"mcp_tool_call_output\";\n\tcall_id: string;\n\toutput: unknown;\n};\n\nexport type ToolSearchOutputResponseInputItem = {\n\ttype: \"tool_search_output\";\n\tcall_id: string;\n\tstatus: \"completed\";\n\texecution: \"client\";\n\ttools: unknown[];\n};\n\nexport type ResponseInputItem =\n\t| MessageResponseInputItem\n\t| FunctionCallOutputResponseInputItem\n\t| CustomToolCallOutputResponseInputItem\n\t| McpToolCallOutputResponseInputItem\n\t| ToolSearchOutputResponseInputItem;\n\nexport type ResponseMessageItem = {\n\ttype: \"message\";\n\tid?: string;\n\trole: string;\n\tcontent: ContentItem[];\n\tphase?: MessagePhase | null;\n};\n\nexport type ReasoningItemReasoningSummary = Record<string, unknown>;\nexport type ReasoningItemContent = Record<string, unknown>;\n\nexport type ResponseReasoningItem = {\n\ttype: \"reasoning\";\n\tid?: string;\n\tsummary: ReasoningItemReasoningSummary[];\n\tcontent?: ReasoningItemContent[] | null;\n\tencrypted_content?: string | null;\n};\n\nexport type ResponseLocalShellCallItem = {\n\ttype: \"local_shell_call\";\n\tid?: string | null;\n\tcall_id?: string | null;\n\tstatus?: string | null;\n\taction: Record<string, unknown>;\n};\n\nexport type ResponseFunctionCallItem = {\n\ttype: \"function_call\";\n\tid?: string | null;\n\tname: string;\n\tnamespace?: string | null;\n\targuments: string;\n\tcall_id: string;\n};\n\nexport type ResponseToolSearchCallItem = {\n\ttype: \"tool_search_call\";\n\tid?: string | null;\n\tcall_id?: string | null;\n\tstatus?: string | null;\n\texecution: string;\n\targuments: unknown;\n};\n\nexport type ResponseFunctionCallOutputItem = {\n\ttype: \"function_call_output\";\n\tcall_id: string;\n\toutput: FunctionCallOutputPayload;\n};\n\nexport type ResponseCustomToolCallItem = {\n\ttype: \"custom_tool_call\";\n\tid?: string | null;\n\tstatus?: string | null;\n\tcall_id: string;\n\tname: string;\n\tinput: string;\n};\n\nexport type ResponseCustomToolCallOutputItem = {\n\ttype: \"custom_tool_call_output\";\n\tcall_id: string;\n\tname?: string | null;\n\toutput: FunctionCallOutputPayload;\n};\n\nexport type ResponseToolSearchOutputItem = {\n\ttype: \"tool_search_output\";\n\tcall_id?: string | null;\n\tstatus: string;\n\texecution: string;\n\ttools: unknown[];\n};\n\nexport type ResponseWebSearchCallItem = {\n\ttype: \"web_search_call\";\n\tid?: string | null;\n\tstatus?: string | null;\n\taction?: Record<string, unknown> | null;\n};\n\nexport type ResponseImageGenerationCallItem = {\n\ttype: \"image_generation_call\";\n\tid: string;\n\tstatus: string;\n\trevised_prompt?: string | null;\n\tresult: string;\n\tsaved_path?: string;\n};\n\nexport type ResponseCompactionItem = {\n\ttype: \"compaction\" | \"context_compaction\";\n\tencrypted_content?: string | null;\n};\n\nexport type ResponseOtherItem = {\n\ttype: \"other\";\n};\n\nexport type ResponseItem =\n\t| ResponseMessageItem\n\t| ResponseReasoningItem\n\t| ResponseLocalShellCallItem\n\t| ResponseFunctionCallItem\n\t| ResponseToolSearchCallItem\n\t| ResponseFunctionCallOutputItem\n\t| ResponseCustomToolCallItem\n\t| ResponseCustomToolCallOutputItem\n\t| ResponseToolSearchOutputItem\n\t| ResponseWebSearchCallItem\n\t| ResponseImageGenerationCallItem\n\t| ResponseCompactionItem\n\t| ResponseOtherItem;\n\nexport type ResponseItemWire =\n\t| (Omit<ResponseMessageItem, \"phase\"> & { phase?: MessagePhase | null })\n\t| ResponseReasoningItem\n\t| ResponseLocalShellCallItem\n\t| ResponseFunctionCallItem\n\t| ResponseToolSearchCallItem\n\t| (Omit<ResponseFunctionCallOutputItem, \"output\"> & {\n\t\t\toutput: string | FunctionCallOutputContentItem[];\n\t })\n\t| ResponseCustomToolCallItem\n\t| (Omit<ResponseCustomToolCallOutputItem, \"output\"> & {\n\t\t\toutput: string | FunctionCallOutputContentItem[];\n\t })\n\t| ResponseToolSearchOutputItem\n\t| ResponseWebSearchCallItem\n\t| ResponseImageGenerationCallItem\n\t| ResponseCompactionItem\n\t| ResponseOtherItem;\n\nexport function responseInputToResponseItem(\n\titem: ResponseInputItem,\n): ResponseItem {\n\tswitch (item.type) {\n\t\tcase \"message\":\n\t\t\treturn {\n\t\t\t\ttype: \"message\",\n\t\t\t\t...(item.id ? { id: item.id } : {}),\n\t\t\t\trole: item.role,\n\t\t\t\tcontent: item.content,\n\t\t\t\t...(item.phase ? { phase: item.phase } : {}),\n\t\t\t};\n\t\tcase \"function_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\toutput: item.output,\n\t\t\t};\n\t\tcase \"custom_tool_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\t...(item.name ? { name: item.name } : {}),\n\t\t\t\toutput: item.output,\n\t\t\t};\n\t\tcase \"tool_search_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\tstatus: item.status,\n\t\t\t\texecution: item.execution,\n\t\t\t\ttools: item.tools,\n\t\t\t};\n\t\tcase \"mcp_tool_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\toutput: mcpOutputAsFunctionCallOutputPayload(item.output),\n\t\t\t};\n\t}\n}\n\nexport function functionCallOutputPayloadToWire(\n\toutput: FunctionCallOutputPayload,\n): string | FunctionCallOutputContentItem[] {\n\tif (output.body.type === \"text\") {\n\t\treturn output.body.text;\n\t}\n\n\treturn output.body.items;\n}\n\nfunction mcpOutputAsFunctionCallOutputPayload(output: unknown): FunctionCallOutputPayload {\n\tif (typeof output === \"string\") {\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: output,\n\t\t\t},\n\t\t\tsuccess: null,\n\t\t};\n\t}\n\n\treturn {\n\t\tbody: {\n\t\t\ttype: \"text\",\n\t\t\ttext: JSON.stringify(output) ?? String(output),\n\t\t},\n\t\tsuccess: null,\n\t};\n}\n","import type { CollaborationMode } from \"./config-types\";\nimport type { ThreadId } from \"./ids\";\nimport type { TurnItem } from \"./items\";\nimport type { FileChange } from \"./items\";\nimport type { ExecToolCallOutput } from \"./exec-output\";\nimport type {\n\tMemoryCitation,\n\tThreadMemoryMode,\n\tThreadMemoryModeSessionMetaValue,\n} from \"./memory\";\nimport type {\n\tRequestUserInputEvent,\n\tRequestUserInputResponse,\n} from \"./request_user_input\";\nimport type {\n\tRequestPermissionsEvent,\n\tRequestPermissionsResponse,\n} from \"./request_permissions\";\nimport type {\n\tMcpServerElicitationRequestEvent,\n\tMcpServerElicitationResponseOp,\n\tMcpServerOauthLoginCompletedEvent,\n\tMcpServerStatusUpdatedEvent,\n\tMcpToolCallProgressEvent,\n} from \"./mcp\";\nimport type {\n\tDynamicToolCallRequest,\n\tDynamicToolCallResponseEvent,\n\tDynamicToolResponse,\n\tDynamicToolSpec,\n} from \"./protocol/dynamic_tools\";\nimport type { TextElement, UserInput } from \"./protocol/user_input\";\nimport type { ResponseItem } from \"./models\";\n\nexport type {\n\tDynamicToolCallOutputContentItem,\n\tDynamicToolCallRequest,\n\tDynamicToolCallResponseEvent,\n\tDynamicToolResponse,\n\tDynamicToolSpec,\n} from \"./protocol/dynamic_tools\";\nexport {\n\tdynamicToolSpecFromWire,\n\tdynamicToolSpecToWire,\n} from \"./protocol/dynamic_tools\";\nexport type {\n\tByteRange,\n\tMentionInput,\n\tTextElement,\n\tUserInput,\n} from \"./protocol/user_input\";\nexport type {\n\tContentItem,\n\tFunctionCallOutputBody,\n\tFunctionCallOutputContentItem,\n\tFunctionCallOutputPayload,\n\tMessagePhase,\n\tResponseInputItem,\n\tResponseItem,\n\tResponseItemWire,\n} from \"./models\";\nexport {\n\tfunctionCallOutputPayloadToWire,\n\tresponseInputToResponseItem,\n} from \"./models\";\n\nexport type W3cTraceContext = {\n\ttraceparent?: string;\n\ttracestate?: string;\n};\n\nexport type Submission = {\n\tid: string;\n\top: Op;\n\ttrace?: W3cTraceContext;\n};\n\nexport type BaseInstructions = {\n\ttext: string;\n};\n\nexport const BASE_INSTRUCTIONS_DEFAULT = `You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.\n\n## General\n\n- Prefer to be concise, direct, and useful.\n- When asked to modify code, inspect the repository first and follow existing patterns.\n- Do not make unrelated changes.\n- If you run commands or edit files, summarize what changed and how you verified it.`;\n\nexport const BaseInstructions = {\n\tdefault(): BaseInstructions {\n\t\treturn { text: BASE_INSTRUCTIONS_DEFAULT };\n\t},\n};\nexport type TokenUsage = {\n\tinput_tokens: number;\n\tcached_input_tokens: number;\n\toutput_tokens: number;\n\treasoning_output_tokens: number;\n\ttotal_tokens: number;\n};\n\nexport type TokenUsageInfo = {\n\ttotal_token_usage: TokenUsage;\n\tlast_token_usage: TokenUsage;\n\tmodel_context_window?: number | null;\n};\n\nexport type RateLimitWindow = {\n\tremaining?: number | null;\n\tlimit?: number | null;\n\treset_seconds?: number | null;\n\t[key: string]: unknown;\n};\n\nexport type RateLimitSnapshot = {\n\tlimit_id?: string | null;\n\tprimary?: RateLimitWindow | null;\n\tsecondary?: RateLimitWindow | null;\n\tcredits?: Record<string, unknown> | null;\n\tplan_type?: string | null;\n\t[key: string]: unknown;\n};\nexport type SessionSource = string;\nexport type ReasoningEffortConfig = string;\nexport type ReasoningSummaryConfig = string;\nexport type AskForApproval = string;\nexport type ApprovalsReviewer = string;\nexport type SandboxPolicy = Record<string, unknown>;\nexport type PermissionProfile = Record<string, unknown>;\nexport type ActivePermissionProfile = Record<string, unknown>;\nexport type PermissionProfileBuiltinName =\n\t| \":read-only\"\n\t| \":workspace\"\n\t| \":danger-no-sandbox\";\nexport type WindowsSandboxLevel = string;\nexport type ServiceTier = string;\nexport type Personality = string;\nexport type TurnEnvironmentSelection = {\n\tenvironment_id: string;\n\tcwd: string;\n};\nexport type TurnContextNetworkItem = {\n\tallowed_domains: string[];\n\tdenied_domains: string[];\n};\nexport type FileSystemSandboxPolicy = Record<string, unknown>;\nexport type TruncationPolicy = Record<string, unknown>;\nexport type GitInfo = Record<string, unknown>;\nexport type McpInvocation = Record<string, unknown>;\n\nexport type UserTurnOp = {\n\ttype: \"user_turn\";\n\titems: UserInput[];\n\tcwd: string;\n\tapproval_policy: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy: SandboxPolicy;\n\tpermission_profile?: PermissionProfile | null;\n\tmodel: string;\n\teffort?: ReasoningEffortConfig;\n\tsummary?: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tfinal_output_json_schema?: unknown;\n\tcollaboration_mode?: CollaborationMode;\n\tpersonality?: Personality;\n\tenvironments?: TurnEnvironmentSelection[];\n};\n\nexport type UserInputOp = {\n\ttype: \"user_input\";\n\titems: UserInput[];\n\tenvironments?: TurnEnvironmentSelection[];\n\tfinal_output_json_schema?: unknown;\n\tresponsesapi_client_metadata?: Record<string, string>;\n};\n\nexport type UserInputWithTurnContextOp = {\n\ttype: \"user_input_with_turn_context\";\n\titems: UserInput[];\n\tfinal_output_json_schema?: unknown;\n\tresponsesapi_client_metadata?: Record<string, string>;\n\tcwd?: string;\n\tapproval_policy?: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer;\n\tsandbox_policy?: SandboxPolicy;\n\tpermission_profile?: PermissionProfile;\n\tactive_permission_profile?: ActivePermissionProfile;\n\twindows_sandbox_level?: WindowsSandboxLevel;\n\tmodel?: string;\n\teffort?: ReasoningEffortConfig | null;\n\tsummary?: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tcollaboration_mode?: CollaborationMode;\n\tpersonality?: Personality;\n\tenvironments?: TurnEnvironmentSelection[];\n};\n\nexport type OverrideTurnContextOp = {\n\ttype: \"override_turn_context\";\n\tcwd?: string;\n\tapproval_policy?: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy?: SandboxPolicy;\n\tpermission_profile?: PermissionProfile | null;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel;\n\tmodel?: string;\n\teffort?: ReasoningEffortConfig | null;\n\tsummary?: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tcollaboration_mode?: CollaborationMode;\n\tpersonality?: Personality | null;\n\tenvironments?: TurnEnvironmentSelection[];\n};\n\nexport type UserInputAnswerOp = {\n\ttype: \"user_input_answer\";\n\tid: string;\n\tresponse: RequestUserInputResponse;\n};\n\nexport type RequestPermissionsResponseOp = {\n\ttype: \"request_permissions_response\";\n\tid: string;\n\tresponse: RequestPermissionsResponse;\n};\n\nexport type DynamicToolResponseOp = {\n\ttype: \"dynamic_tool_response\";\n\tid: string;\n\tresponse: DynamicToolResponse;\n};\n\nexport type RealtimeOutputModality = \"text\" | \"audio\";\n\nexport type RealtimeVoice =\n\t| \"alloy\"\n\t| \"arbor\"\n\t| \"ash\"\n\t| \"ballad\"\n\t| \"breeze\"\n\t| \"cedar\"\n\t| \"coral\"\n\t| \"cove\"\n\t| \"echo\"\n\t| \"ember\"\n\t| \"juniper\"\n\t| \"maple\"\n\t| \"marin\"\n\t| \"sage\"\n\t| \"shimmer\"\n\t| \"sol\"\n\t| \"spruce\"\n\t| \"vale\"\n\t| \"verse\";\n\nexport type RealtimeVoicesList = {\n\tv1: RealtimeVoice[];\n\tv2: RealtimeVoice[];\n\tdefault_v1: RealtimeVoice;\n\tdefault_v2: RealtimeVoice;\n};\n\nexport const RealtimeVoicesList = {\n\tbuiltin(): RealtimeVoicesList {\n\t\treturn {\n\t\t\tv1: [\n\t\t\t\t\"juniper\",\n\t\t\t\t\"maple\",\n\t\t\t\t\"spruce\",\n\t\t\t\t\"ember\",\n\t\t\t\t\"vale\",\n\t\t\t\t\"breeze\",\n\t\t\t\t\"arbor\",\n\t\t\t\t\"sol\",\n\t\t\t\t\"cove\",\n\t\t\t],\n\t\t\tv2: [\n\t\t\t\t\"alloy\",\n\t\t\t\t\"ash\",\n\t\t\t\t\"ballad\",\n\t\t\t\t\"coral\",\n\t\t\t\t\"echo\",\n\t\t\t\t\"sage\",\n\t\t\t\t\"shimmer\",\n\t\t\t\t\"verse\",\n\t\t\t\t\"marin\",\n\t\t\t\t\"cedar\",\n\t\t\t],\n\t\t\tdefault_v1: \"cove\",\n\t\t\tdefault_v2: \"marin\",\n\t\t};\n\t},\n};\n\nexport type ConversationStartTransport =\n\t| {\n\t\t\ttype: \"websocket\";\n\t }\n\t| {\n\t\t\ttype: \"webrtc\";\n\t\t\tsdp: string;\n\t };\n\nexport type ConversationStartParams = {\n\toutput_modality: RealtimeOutputModality;\n\tprompt?: string | null;\n\trealtime_session_id?: string | null;\n\ttransport?: ConversationStartTransport | null;\n\tvoice?: RealtimeVoice | null;\n};\n\nexport type RealtimeAudioFrame = {\n\tdata: string;\n\tsample_rate: number;\n\tnum_channels: number;\n\tsamples_per_channel?: number | null;\n\titem_id?: string | null;\n};\n\nexport type RealtimeTranscriptDelta = {\n\tdelta: string;\n};\n\nexport type RealtimeTranscriptDone = {\n\ttext: string;\n};\n\nexport type RealtimeTranscriptEntry = {\n\trole: string;\n\ttext: string;\n};\n\nexport type RealtimeHandoffRequested = {\n\thandoff_id: string;\n\titem_id: string;\n\tinput_transcript: string;\n\tactive_transcript: RealtimeTranscriptEntry[];\n};\n\nexport type RealtimeNoopRequested = {\n\tcall_id: string;\n\titem_id: string;\n};\n\nexport type RealtimeInputAudioSpeechStarted = {\n\titem_id?: string | null;\n};\n\nexport type RealtimeResponseLifecycle = {\n\tresponse_id?: string | null;\n};\n\nexport type RealtimeEvent =\n\t| {\n\t\t\ttype: \"session_updated\";\n\t\t\trealtime_session_id: string;\n\t\t\tinstructions?: string | null;\n\t }\n\t| ({\n\t\t\ttype: \"input_audio_speech_started\";\n\t } & RealtimeInputAudioSpeechStarted)\n\t| ({\n\t\t\ttype: \"input_transcript_delta\";\n\t } & RealtimeTranscriptDelta)\n\t| ({\n\t\t\ttype: \"input_transcript_done\";\n\t } & RealtimeTranscriptDone)\n\t| ({\n\t\t\ttype: \"output_transcript_delta\";\n\t } & RealtimeTranscriptDelta)\n\t| ({\n\t\t\ttype: \"output_transcript_done\";\n\t } & RealtimeTranscriptDone)\n\t| ({\n\t\t\ttype: \"audio_out\";\n\t } & RealtimeAudioFrame)\n\t| ({\n\t\t\ttype: \"response_created\";\n\t } & RealtimeResponseLifecycle)\n\t| ({\n\t\t\ttype: \"response_cancelled\";\n\t } & RealtimeResponseLifecycle)\n\t| ({\n\t\t\ttype: \"response_done\";\n\t } & RealtimeResponseLifecycle)\n\t| {\n\t\t\ttype: \"conversation_item_added\";\n\t\t\titem: unknown;\n\t }\n\t| {\n\t\t\ttype: \"conversation_item_done\";\n\t\t\titem_id: string;\n\t }\n\t| ({\n\t\t\ttype: \"handoff_requested\";\n\t } & RealtimeHandoffRequested)\n\t| ({\n\t\t\ttype: \"noop_requested\";\n\t } & RealtimeNoopRequested)\n\t| {\n\t\t\ttype: \"error\";\n\t\t\tmessage: string;\n\t };\n\nexport type ConversationAudioParams = {\n\tframe: RealtimeAudioFrame;\n};\n\nexport type ConversationTextParams = {\n\ttext: string;\n};\n\nexport type ThreadRealtimeStartParams = ConversationStartParams & {\n\tthread_id: ThreadId;\n};\n\nexport type ThreadRealtimeStartResponse = Record<never, never>;\n\nexport type ThreadRealtimeAppendAudioParams = ConversationAudioParams & {\n\tthread_id: ThreadId;\n};\n\nexport type ThreadRealtimeAppendAudioResponse = Record<never, never>;\n\nexport type ThreadRealtimeAppendTextParams = ConversationTextParams & {\n\tthread_id: ThreadId;\n};\n\nexport type ThreadRealtimeAppendTextResponse = Record<never, never>;\n\nexport type ThreadRealtimeStopParams = {\n\tthread_id: ThreadId;\n};\n\nexport type ThreadRealtimeStopResponse = Record<never, never>;\n\nexport type ThreadRealtimeListVoicesParams = Record<never, never>;\n\nexport type ThreadRealtimeListVoicesResponse = {\n\tvoices: RealtimeVoicesList;\n};\n\nexport type RealtimeConversationStartOp = {\n\ttype: \"realtime_conversation_start\";\n} & ConversationStartParams;\n\nexport type RealtimeConversationAudioOp = {\n\ttype: \"realtime_conversation_audio\";\n} & ConversationAudioParams;\n\nexport type RealtimeConversationTextOp = {\n\ttype: \"realtime_conversation_text\";\n} & ConversationTextParams;\n\nexport type RealtimeConversationCloseOp = {\n\ttype: \"realtime_conversation_close\";\n};\n\nexport type RealtimeConversationListVoicesOp = {\n\ttype: \"realtime_conversation_list_voices\";\n};\n\nexport type AgentPathWire = string;\n\nexport const AgentStatusWire = {\n\tRunning: \"running\",\n\tCompleted: \"completed\",\n\tFailed: \"failed\",\n\tClosed: \"closed\",\n\tCancelled: \"cancelled\",\n} as const;\n\nexport type AgentStatusWire =\n\t(typeof AgentStatusWire)[keyof typeof AgentStatusWire];\n\nexport type SubAgentSource =\n\t| {\n\t\t\ttype: \"thread_spawn\";\n\t\t\tparent_thread_id: ThreadId;\n\t\t\tdepth: number;\n\t\t\tagent_path?: AgentPathWire | null;\n\t\t\tagent_role?: string | null;\n\t }\n\t| {\n\t\t\ttype: \"other\";\n\t\t\tvalue: string;\n\t };\n\nexport type InterAgentCommunicationWire = {\n\tauthor: AgentPathWire;\n\trecipient: AgentPathWire;\n\titems?: unknown[];\n\tcontent: string;\n\ttrigger_turn: boolean;\n\tseq?: number;\n};\n\nexport type CollabAgentRef = {\n\tthread_id?: ThreadId | null;\n\tagent_path?: AgentPathWire | null;\n\tagent_nickname?: string | null;\n\tagent_role?: string | null;\n};\n\nexport type CollabAgentSpawnBeginEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\ttask?: string | null;\n};\n\nexport type CollabAgentSpawnEndEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\tagent?: CollabAgentRef | null;\n\terror?: string | null;\n};\n\nexport type CollabAgentInteractionBeginEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\ttarget: CollabAgentRef;\n};\n\nexport type CollabAgentInteractionEndEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\ttarget: CollabAgentRef;\n\terror?: string | null;\n};\n\nexport type CollabWaitingBeginEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\ttargets: CollabAgentRef[];\n};\n\nexport type CollabWaitingEndEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\tstatuses?: Record<string, AgentStatusWire>;\n\terror?: string | null;\n};\n\nexport type CollabResumeBeginEvent = {\n\tturn_id: string;\n\tcall_id: string;\n\ttarget: CollabAgentRef;\n};\n\nexport type CollabResumeEndEvent = CollabAgentInteractionEndEvent;\n\nexport type CollabCloseBeginEvent = CollabAgentInteractionBeginEvent;\n\nexport type CollabCloseEndEvent = CollabAgentInteractionEndEvent;\n\nexport type CompactOp = {\n\ttype: \"compact\";\n};\n\nexport type SetThreadNameOp = {\n\ttype: \"set_thread_name\";\n\tname: string;\n};\n\nexport type SetThreadMemoryModeOp = {\n\ttype: \"set_thread_memory_mode\";\n\tmode: ThreadMemoryMode;\n};\n\nexport type ThreadRollbackOp = {\n\ttype: \"thread_rollback\";\n\tnum_turns: number;\n};\n\nexport type InterruptOp = {\n\ttype: \"interrupt\";\n};\n\nexport type ShutdownOp = {\n\ttype: \"shutdown\";\n};\n\nexport type Op =\n\t| UserTurnOp\n\t| UserInputOp\n\t| UserInputWithTurnContextOp\n\t| OverrideTurnContextOp\n\t| UserInputAnswerOp\n\t| RequestPermissionsResponseOp\n\t| DynamicToolResponseOp\n\t| McpServerElicitationResponseOp\n\t| RealtimeConversationStartOp\n\t| RealtimeConversationAudioOp\n\t| RealtimeConversationTextOp\n\t| RealtimeConversationCloseOp\n\t| RealtimeConversationListVoicesOp\n\t| CompactOp\n\t| SetThreadNameOp\n\t| SetThreadMemoryModeOp\n\t| ThreadRollbackOp\n\t| InterruptOp\n\t| ShutdownOp;\n\nexport type ErrorEvent = {\n\tmessage: string;\n\tcodex_error_info?: unknown;\n};\n\nexport type WarningEvent = {\n\tmessage: string;\n};\n\nexport type TurnStartedEvent = {\n\tturn_id: string;\n\tstarted_at?: number | null;\n\tmodel_context_window?: number | null;\n\tcollaboration_mode_kind?: CollaborationMode[\"mode\"];\n};\n\nexport type TurnCompleteEvent = {\n\tturn_id: string;\n\tlast_agent_message?: string | null;\n\tcompleted_at?: number | null;\n\tduration_ms?: number | null;\n\ttime_to_first_token_ms?: number | null;\n};\n\nexport type TurnAbortReason = \"interrupted\";\n\nexport type TurnAbortedEvent = {\n\tturn_id: string;\n\treason: TurnAbortReason;\n\taborted_at?: number | null;\n\tcompleted_at?: number | null;\n\tduration_ms?: number | null;\n};\n\nexport type AgentMessageEvent = {\n\tmessage: string;\n\tphase?: string | null;\n\tmemory_citation?: MemoryCitation | null;\n};\n\nexport type UserMessageEvent = {\n\tmessage: string;\n\timages?: string[] | null;\n\tlocal_images?: string[];\n\ttext_elements?: TextElement[];\n};\n\nexport type RawResponseItemEvent = {\n\titem: ResponseItem;\n};\n\nexport type ItemStartedEvent = {\n\tturn_id?: string;\n\titem: TurnItem;\n};\n\nexport type ItemCompletedEvent = {\n\tturn_id?: string;\n\titem: TurnItem;\n};\n\nexport type ExecCommandStatus = \"completed\" | \"failed\" | \"cancelled\";\n\nexport type ExecCommandBeginEvent = {\n\tcall_id: string;\n\tprocess_id?: string | null;\n\tturn_id: string;\n\tstarted_at_ms: number;\n\tcommand: string[];\n\tcwd: string;\n\tparsed_cmd?: unknown[] | null;\n\tsource?: string | null;\n\tinteraction_input?: string | null;\n};\n\nexport type ExecCommandOutputDeltaEvent = {\n\tcall_id: string;\n\tturn_id?: string;\n\tstream: \"stdout\" | \"stderr\";\n\tchunk: string;\n};\n\nexport type TerminalInteractionEvent = {\n\tcall_id: string;\n\tprocess_id?: string | null;\n\tstdin: string;\n};\n\nexport type ExecCommandEndEvent = {\n\tcall_id: string;\n\tturn_id?: string;\n\tprocess_id?: string | null;\n\tcompleted_at_ms: number;\n\texit_code: number;\n\tstatus: ExecCommandStatus;\n\tduration_ms?: number | null;\n\tstdout?: string | null;\n\tstderr?: string | null;\n\toutput?: ExecToolCallOutput | null;\n};\n\nexport type PatchApplyUpdatedEvent = {\n\tcall_id: string;\n\tturn_id?: string;\n\tchanges: Record<string, FileChange>;\n\tstatus?: \"completed\" | \"failed\" | \"declined\" | null;\n\tstdout?: string | null;\n\tstderr?: string | null;\n};\n\nexport type CommandApprovalRequestEvent = {\n\tcall_id: string;\n\tcommand: string[];\n\tcwd: string;\n\treason?: string | null;\n};\n\nexport type FileChangeApprovalRequestEvent = {\n\tcall_id: string;\n\tchanges: Record<string, FileChange>;\n\treason?: string | null;\n};\n\nexport type AgentMessageContentDeltaEvent = {\n\tthread_id: string;\n\tturn_id: string;\n\titem_id: string;\n\tdelta: string;\n};\n\nexport type PlanDeltaEvent = {\n\tthread_id: string;\n\tturn_id: string;\n\titem_id: string;\n\tdelta: string;\n};\n\nexport type UpdatePlanStepStatus = \"pending\" | \"in_progress\" | \"completed\";\n\nexport type UpdatePlanStep = {\n\tstep: string;\n\tstatus: UpdatePlanStepStatus;\n};\n\nexport type UpdatePlanArgs = {\n\texplanation?: string | null;\n\tplan: UpdatePlanStep[];\n};\n\nexport type ImageGenerationBeginEvent = {\n\tcall_id: string;\n};\n\nexport type ImageGenerationEndEvent = {\n\tcall_id: string;\n\tstatus: string;\n\trevised_prompt?: string;\n\tresult: string;\n\tsaved_path?: string;\n};\n\nexport type ContextCompactedEvent = Record<never, never>;\n\nexport type ThreadRolledBackEvent = {\n\tnum_turns: number;\n};\n\nexport type TokenCountEvent = {\n\tinfo?: TokenUsageInfo | null;\n\trate_limits?: RateLimitSnapshot | null;\n};\n\nexport const ThreadGoalStatus = {\n\tActive: \"active\",\n\tPaused: \"paused\",\n\tBudgetLimited: \"budgetLimited\",\n\tComplete: \"complete\",\n} as const;\n\nexport type ThreadGoalStatus =\n\t(typeof ThreadGoalStatus)[keyof typeof ThreadGoalStatus];\n\nexport const MAX_THREAD_GOAL_OBJECTIVE_CHARS = 4_000;\n\nexport function validateThreadGoalObjective(value: string): void {\n\tif (value.length === 0) {\n\t\tthrow new Error(\"goal objective must not be empty\");\n\t}\n\tif ([...value].length > MAX_THREAD_GOAL_OBJECTIVE_CHARS) {\n\t\tthrow new Error(\n\t\t\t`goal objective must be at most ${MAX_THREAD_GOAL_OBJECTIVE_CHARS} characters`,\n\t\t);\n\t}\n}\n\nexport type ThreadGoal = {\n\tthread_id: ThreadId;\n\tobjective: string;\n\tstatus: ThreadGoalStatus;\n\ttoken_budget?: number | null;\n\ttokens_used: number;\n\ttime_used_seconds: number;\n\tcreated_at: number;\n\tupdated_at: number;\n};\n\nexport type ThreadGoalUpdatedEvent = {\n\tthread_id: ThreadId;\n\tturn_id?: string | null;\n\tgoal: ThreadGoal;\n};\n\nexport type McpToolCallBeginEvent = {\n\tcall_id: string;\n\tinvocation: McpInvocation;\n\tmcp_app_resource_uri?: string;\n};\n\nexport type McpToolCallEndEvent = {\n\tcall_id: string;\n\tinvocation: McpInvocation;\n\tmcp_app_resource_uri?: string;\n\tduration: string;\n\tresult: unknown;\n};\n\nexport type McpToolCallProgressEventMsg = {\n\ttype: \"mcp_tool_call_progress\";\n} & McpToolCallProgressEvent;\n\nexport type McpServerStatusUpdatedEventMsg = {\n\ttype: \"mcp_server_status_updated\";\n} & McpServerStatusUpdatedEvent;\n\nexport type McpServerOauthLoginCompletedEventMsg = {\n\ttype: \"mcp_server_oauth_login_completed\";\n} & McpServerOauthLoginCompletedEvent;\n\nexport type McpServerElicitationRequestEventMsg = {\n\ttype: \"mcp_server_elicitation_request\";\n} & McpServerElicitationRequestEvent;\n\nexport const HookEventName = {\n\tPreToolUse: \"pre_tool_use\",\n\tPermissionRequest: \"permission_request\",\n\tPostToolUse: \"post_tool_use\",\n\tPreCompact: \"pre_compact\",\n\tPostCompact: \"post_compact\",\n\tSessionStart: \"session_start\",\n\tUserPromptSubmit: \"user_prompt_submit\",\n\tStop: \"stop\",\n} as const;\n\nexport type HookEventName = (typeof HookEventName)[keyof typeof HookEventName];\n\nexport const HookHandlerType = {\n\tCommand: \"command\",\n\tPrompt: \"prompt\",\n\tAgent: \"agent\",\n} as const;\n\nexport type HookHandlerType =\n\t(typeof HookHandlerType)[keyof typeof HookHandlerType];\n\nexport const HookExecutionMode = {\n\tSync: \"sync\",\n\tAsync: \"async\",\n} as const;\n\nexport type HookExecutionMode =\n\t(typeof HookExecutionMode)[keyof typeof HookExecutionMode];\n\nexport const HookScope = {\n\tThread: \"thread\",\n\tTurn: \"turn\",\n} as const;\n\nexport type HookScope = (typeof HookScope)[keyof typeof HookScope];\n\nexport const HookSource = {\n\tSystem: \"system\",\n\tUser: \"user\",\n\tProject: \"project\",\n\tMdm: \"mdm\",\n\tSessionFlags: \"session_flags\",\n\tPlugin: \"plugin\",\n\tCloudRequirements: \"cloud_requirements\",\n\tLegacyManagedConfigFile: \"legacy_managed_config_file\",\n\tLegacyManagedConfigMdm: \"legacy_managed_config_mdm\",\n\tUnknown: \"unknown\",\n} as const;\n\nexport type HookSource = (typeof HookSource)[keyof typeof HookSource];\n\nexport const HookTrustStatus = {\n\tManaged: \"managed\",\n\tUntrusted: \"untrusted\",\n\tTrusted: \"trusted\",\n\tModified: \"modified\",\n} as const;\n\nexport type HookTrustStatus =\n\t(typeof HookTrustStatus)[keyof typeof HookTrustStatus];\n\nexport const HookRunStatus = {\n\tRunning: \"running\",\n\tCompleted: \"completed\",\n\tFailed: \"failed\",\n\tBlocked: \"blocked\",\n\tStopped: \"stopped\",\n} as const;\n\nexport type HookRunStatus = (typeof HookRunStatus)[keyof typeof HookRunStatus];\n\nexport const HookOutputEntryKind = {\n\tWarning: \"warning\",\n\tStop: \"stop\",\n\tFeedback: \"feedback\",\n\tContext: \"context\",\n\tError: \"error\",\n} as const;\n\nexport type HookOutputEntryKind =\n\t(typeof HookOutputEntryKind)[keyof typeof HookOutputEntryKind];\n\nexport type HookOutputEntry = {\n\tkind: HookOutputEntryKind;\n\ttext: string;\n};\n\nexport type HookRunSummary = {\n\tid: string;\n\tevent_name: HookEventName;\n\thandler_type: HookHandlerType;\n\texecution_mode: HookExecutionMode;\n\tscope: HookScope;\n\tsource_path: string;\n\tsource: HookSource;\n\tdisplay_order: number;\n\tstatus: HookRunStatus;\n\tstatus_message?: string | null;\n\tstarted_at: number;\n\tcompleted_at?: number | null;\n\tduration_ms?: number | null;\n\tentries: HookOutputEntry[];\n};\n\nexport type HookStartedEvent = {\n\tturn_id?: string | null;\n\trun: HookRunSummary;\n};\n\nexport type HookCompletedEvent = {\n\tturn_id?: string | null;\n\trun: HookRunSummary;\n};\n\nexport type RealtimeConversationVersion = \"v1\" | \"v2\";\n\nexport type RealtimeConversationStartedEvent = {\n\trealtime_session_id?: string | null;\n\tversion: RealtimeConversationVersion;\n};\n\nexport type RealtimeConversationRealtimeEvent = {\n\tpayload: RealtimeEvent;\n};\n\nexport type RealtimeConversationClosedEvent = {\n\treason?: string | null;\n};\n\nexport type RealtimeConversationSdpEvent = {\n\tsdp: string;\n};\n\nexport type RealtimeConversationListVoicesResponseEvent = {\n\tvoices: RealtimeVoicesList;\n};\n\n/** Codex Rust variant: `TurnStarted`; v1 wire value: `turn_started`. */\nexport type TurnStartedEventMsg = {\n\ttype: \"turn_started\";\n} & TurnStartedEvent;\n\n/** Codex Rust variant: `TurnComplete`; v1 wire value: `turn_complete`. */\nexport type TurnCompleteEventMsg = {\n\ttype: \"turn_complete\";\n} & TurnCompleteEvent;\n\n/** Codex Rust variant: `TurnAborted`; v1 wire value: `turn_aborted`. */\nexport type TurnAbortedEventMsg = {\n\ttype: \"turn_aborted\";\n} & TurnAbortedEvent;\n\nexport type AgentMessageEventMsg = {\n\ttype: \"agent_message\";\n} & AgentMessageEvent;\n\nexport type UserMessageEventMsg = {\n\ttype: \"user_message\";\n} & UserMessageEvent;\n\nexport type RawResponseItemEventMsg = {\n\ttype: \"raw_response_item\";\n} & RawResponseItemEvent;\n\nexport type ItemStartedEventMsg = {\n\ttype: \"item_started\";\n} & ItemStartedEvent;\n\nexport type ItemCompletedEventMsg = {\n\ttype: \"item_completed\";\n} & ItemCompletedEvent;\n\nexport type ExecCommandBeginEventMsg = {\n\ttype: \"exec_command_begin\";\n} & ExecCommandBeginEvent;\n\nexport type ExecCommandOutputDeltaEventMsg = {\n\ttype: \"exec_command_output_delta\";\n} & ExecCommandOutputDeltaEvent;\n\nexport type TerminalInteractionEventMsg = {\n\ttype: \"terminal_interaction\";\n} & TerminalInteractionEvent;\n\nexport type ExecCommandEndEventMsg = {\n\ttype: \"exec_command_end\";\n} & ExecCommandEndEvent;\n\nexport type PatchApplyUpdatedEventMsg = {\n\ttype: \"patch_apply_updated\";\n} & PatchApplyUpdatedEvent;\n\nexport type CommandApprovalRequestEventMsg = {\n\ttype: \"command_approval_request\";\n} & CommandApprovalRequestEvent;\n\nexport type FileChangeApprovalRequestEventMsg = {\n\ttype: \"file_change_approval_request\";\n} & FileChangeApprovalRequestEvent;\n\nexport type AgentMessageContentDeltaEventMsg = {\n\ttype: \"agent_message_content_delta\";\n} & AgentMessageContentDeltaEvent;\n\n/** Codex Rust variant: `PlanDelta`; v1 wire value: `plan_delta`. */\nexport type PlanDeltaEventMsg = {\n\ttype: \"plan_delta\";\n} & PlanDeltaEvent;\n\nexport type PlanUpdateEventMsg = {\n\ttype: \"plan_update\";\n} & UpdatePlanArgs;\n\nexport type RequestUserInputEventMsg = {\n\ttype: \"request_user_input\";\n} & RequestUserInputEvent;\n\nexport type RequestPermissionsEventMsg = {\n\ttype: \"request_permissions\";\n} & RequestPermissionsEvent;\n\nexport type DynamicToolCallRequestEventMsg = {\n\ttype: \"dynamic_tool_call_request\";\n} & DynamicToolCallRequest;\n\nexport type DynamicToolCallResponseEventMsg = {\n\ttype: \"dynamic_tool_call_response\";\n} & DynamicToolCallResponseEvent;\n\nexport type ImageGenerationBeginEventMsg = {\n\ttype: \"image_generation_begin\";\n} & ImageGenerationBeginEvent;\n\nexport type ImageGenerationEndEventMsg = {\n\ttype: \"image_generation_end\";\n} & ImageGenerationEndEvent;\n\nexport type ContextCompactedEventMsg = {\n\ttype: \"context_compacted\";\n} & ContextCompactedEvent;\n\nexport type ThreadRolledBackEventMsg = {\n\ttype: \"thread_rolled_back\";\n} & ThreadRolledBackEvent;\n\nexport type TokenCountEventMsg = {\n\ttype: \"token_count\";\n} & TokenCountEvent;\n\nexport type ThreadGoalUpdatedEventMsg = {\n\ttype: \"thread_goal_updated\";\n} & ThreadGoalUpdatedEvent;\n\nexport type WarningEventMsg = {\n\ttype: \"warning\";\n} & WarningEvent;\n\nexport type ErrorEventMsg = {\n\ttype: \"error\";\n} & ErrorEvent;\n\nexport type HookStartedEventMsg = {\n\ttype: \"hook_started\";\n} & HookStartedEvent;\n\nexport type HookCompletedEventMsg = {\n\ttype: \"hook_completed\";\n} & HookCompletedEvent;\n\nexport type RealtimeConversationStartedEventMsg = {\n\ttype: \"realtime_conversation_started\";\n} & RealtimeConversationStartedEvent;\n\nexport type RealtimeConversationRealtimeEventMsg = {\n\ttype: \"realtime_conversation_realtime\";\n} & RealtimeConversationRealtimeEvent;\n\nexport type RealtimeConversationClosedEventMsg = {\n\ttype: \"realtime_conversation_closed\";\n} & RealtimeConversationClosedEvent;\n\nexport type RealtimeConversationSdpEventMsg = {\n\ttype: \"realtime_conversation_sdp\";\n} & RealtimeConversationSdpEvent;\n\nexport type RealtimeConversationListVoicesResponseEventMsg = {\n\ttype: \"realtime_conversation_list_voices_response\";\n} & RealtimeConversationListVoicesResponseEvent;\n\nexport type SessionConfiguredEvent = {\n\tsession_id: string;\n\tthread_id: ThreadId;\n\tforked_from_id?: ThreadId | null;\n\tthread_source?: string | null;\n\tthread_name?: string | null;\n\tmodel: string;\n\tmodel_provider_id: string;\n\tservice_tier?: ServiceTier | null;\n\tapproval_policy: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tpermission_profile: PermissionProfile;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\tcwd: string;\n\treasoning_effort?: ReasoningEffortConfig | null;\n\tinitial_messages?: EventMsg[] | null;\n\tnetwork_proxy?: unknown | null;\n\trollout_path?: string | null;\n};\n\nexport type SessionConfiguredEventMsg = {\n\ttype: \"session_configured\";\n} & SessionConfiguredEvent;\n\nexport type EventMsg =\n\t| SessionConfiguredEventMsg\n\t| TurnStartedEventMsg\n\t| TurnCompleteEventMsg\n\t| TurnAbortedEventMsg\n\t| AgentMessageEventMsg\n\t| UserMessageEventMsg\n\t| RawResponseItemEventMsg\n\t| ItemStartedEventMsg\n\t| ItemCompletedEventMsg\n\t| ExecCommandBeginEventMsg\n\t| ExecCommandOutputDeltaEventMsg\n\t| TerminalInteractionEventMsg\n\t| ExecCommandEndEventMsg\n\t| PatchApplyUpdatedEventMsg\n\t| CommandApprovalRequestEventMsg\n\t| FileChangeApprovalRequestEventMsg\n\t| AgentMessageContentDeltaEventMsg\n\t| PlanDeltaEventMsg\n\t| PlanUpdateEventMsg\n\t| RequestUserInputEventMsg\n\t| RequestPermissionsEventMsg\n\t| DynamicToolCallRequestEventMsg\n\t| DynamicToolCallResponseEventMsg\n\t| McpToolCallProgressEventMsg\n\t| McpServerStatusUpdatedEventMsg\n\t| McpServerOauthLoginCompletedEventMsg\n\t| McpServerElicitationRequestEventMsg\n\t| ImageGenerationBeginEventMsg\n\t| ImageGenerationEndEventMsg\n\t| ContextCompactedEventMsg\n\t| ThreadRolledBackEventMsg\n\t| TokenCountEventMsg\n\t| ThreadGoalUpdatedEventMsg\n\t| WarningEventMsg\n\t| HookStartedEventMsg\n\t| HookCompletedEventMsg\n\t| RealtimeConversationStartedEventMsg\n\t| RealtimeConversationRealtimeEventMsg\n\t| RealtimeConversationClosedEventMsg\n\t| RealtimeConversationSdpEventMsg\n\t| RealtimeConversationListVoicesResponseEventMsg\n\t| ErrorEventMsg;\n\nexport type SessionMeta = {\n\tid: ThreadId;\n\tforked_from_id?: ThreadId | null;\n\ttimestamp: string;\n\tcwd: string;\n\toriginator: string;\n\tcli_version: string;\n\tsource: SessionSource;\n\tagent_nickname?: string | null;\n\tagent_role?: string | null;\n\tagent_path?: string | null;\n\tmodel_provider: string | null;\n\tbase_instructions: BaseInstructions | null;\n\tdynamic_tools?: DynamicToolSpec[] | null;\n\tmemory_mode?: ThreadMemoryModeSessionMetaValue | null;\n};\n\nexport type SessionMetaLine = SessionMeta & {\n\tgit?: GitInfo | null;\n};\n\nexport type CompactedItem = {\n\tmessage: string;\n\treplacement_history?: ResponseItem[];\n};\n\nexport type TurnContextItem = {\n\tturn_id?: string;\n\ttrace_id?: string;\n\tcwd: string;\n\tcurrent_date?: string;\n\ttimezone?: string;\n\tapproval_policy: AskForApproval;\n\tsandbox_policy: SandboxPolicy;\n\tpermission_profile?: PermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel | null;\n\tnetwork?: TurnContextNetworkItem | null;\n\tfile_system_sandbox_policy?: FileSystemSandboxPolicy | null;\n\tmodel: string;\n\tpersonality?: Personality | null;\n\tcollaboration_mode?: CollaborationMode | null;\n\trealtime_active?: boolean | null;\n\teffort?: ReasoningEffortConfig | null;\n\tsummary: ReasoningSummaryConfig;\n\tuser_instructions?: string | null;\n\tdeveloper_instructions?: string | null;\n\tfinal_output_json_schema?: unknown;\n\ttruncation_policy?: TruncationPolicy | null;\n};\n\nexport type SessionMetaRolloutItem = {\n\ttype: \"session_meta\";\n\tpayload: SessionMetaLine;\n};\n\nexport type ResponseRolloutItem = {\n\ttype: \"response_item\";\n\tpayload: ResponseItem;\n};\n\nexport type CompactedRolloutItem = {\n\ttype: \"compacted\";\n\tpayload: CompactedItem;\n};\n\nexport type TurnContextRolloutItem = {\n\ttype: \"turn_context\";\n\tpayload: TurnContextItem;\n};\n\nexport type EventMsgRolloutItem = {\n\ttype: \"event_msg\";\n\tpayload: EventMsg;\n};\n\nexport type RolloutItem =\n\t| SessionMetaRolloutItem\n\t| ResponseRolloutItem\n\t| CompactedRolloutItem\n\t| TurnContextRolloutItem\n\t| EventMsgRolloutItem;\n","export const AuthMode = {\n\tApiKey: \"apiKey\",\n\tChatgpt: \"chatgpt\",\n} as const;\n\nexport const CODEX_CHATGPT_OAUTH_CLIENT_ID = \"app_EMoamEEZ73f0CkXaXp7hrann\";\nexport const CODEX_CHATGPT_OAUTH_ISSUER = \"https://auth.openai.com\";\nexport const CODEX_CHATGPT_OAUTH_SCOPE =\n\t\"openid profile email offline_access api.connectors.read api.connectors.invoke\";\nexport const CODEX_CHATGPT_OAUTH_PRIMARY_PORT = 1455;\nexport const CODEX_CHATGPT_OAUTH_FALLBACK_PORT = 1457;\nexport const CODEX_CHATGPT_OAUTH_CALLBACK_PATH = \"/auth/callback\";\nexport const CODEX_CHATGPT_OAUTH_ORIGINATOR = \"codex_cli_rs\";\n\nexport type AuthMode = (typeof AuthMode)[keyof typeof AuthMode];\n\nexport type PlanType =\n\t| \"free\"\n\t| \"plus\"\n\t| \"pro\"\n\t| \"team\"\n\t| \"enterprise\"\n\t| \"edu\"\n\t| \"unknown\";\n\nexport type TokenData = {\n\taccess_token: string;\n\trefresh_token: string;\n\tid_token: string;\n\taccount_id?: string | null;\n\texpires_at?: number | null;\n};\n\nexport type AuthDotJson = {\n\tauth_mode?: AuthMode | null;\n\topenai_api_key?: string | null;\n\ttokens?: TokenData | null;\n\tlast_refresh?: string | null;\n};\n\nexport type CodexAuth =\n\t| {\n\t\t\ttype: typeof AuthMode.ApiKey;\n\t\t\tapi_key: string;\n\t }\n\t| {\n\t\t\ttype: typeof AuthMode.Chatgpt;\n\t\t\tauth: AuthDotJson;\n\t\t\taccount_id?: string | null;\n\t\t\temail?: string | null;\n\t\t\tplan_type?: PlanType | null;\n\t };\n\nexport type ProviderAccount =\n\t| {\n\t\t\ttype: typeof AuthMode.ApiKey;\n\t }\n\t| {\n\t\t\ttype: typeof AuthMode.Chatgpt;\n\t\t\temail: string;\n\t\t\tplan_type: PlanType;\n\t };\n\nexport type ProviderAccountState = {\n\taccount: ProviderAccount | null;\n\trequires_openai_auth: boolean;\n};\n\nexport type GetAccountResponse = ProviderAccountState;\n\nexport type ChatgptOAuthTokenExchangeRequest = {\n\tcode: string;\n\tredirect_uri: string;\n\tcode_verifier: string;\n};\n\nexport type ChatgptOAuthTokenExchangeResponse = {\n\tcredential_jwe: string;\n\taccount: ProviderAccountState;\n};\n\nexport function resolvedAuthMode(auth: AuthDotJson): AuthMode {\n\tif (auth.auth_mode) {\n\t\treturn auth.auth_mode;\n\t}\n\n\tif (auth.openai_api_key) {\n\t\treturn AuthMode.ApiKey;\n\t}\n\n\treturn AuthMode.Chatgpt;\n}\n\nexport function parseJwtPayload(token: string): Record<string, unknown> {\n\tconst [, payload] = token.split(\".\");\n\tif (!payload) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst normalized = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t\tconst padded = normalized.padEnd(\n\t\t\tnormalized.length + ((4 - (normalized.length % 4)) % 4),\n\t\t\t\"=\",\n\t\t);\n\t\tconst decoded = atob(padded);\n\t\tconst bytes = Uint8Array.from(decoded, (char) => char.charCodeAt(0));\n\t\treturn JSON.parse(new TextDecoder().decode(bytes)) as Record<string, unknown>;\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nexport function openAiAuthClaims(token: string): Record<string, unknown> {\n\tconst payload = parseJwtPayload(token);\n\tconst nested = payload[\"https://api.openai.com/auth\"];\n\n\tif (nested && typeof nested === \"object\" && !Array.isArray(nested)) {\n\t\treturn nested as Record<string, unknown>;\n\t}\n\n\treturn payload;\n}\n\nexport function normalizePlanType(value: unknown): PlanType {\n\tif (typeof value !== \"string\") {\n\t\treturn \"unknown\";\n\t}\n\n\tconst normalized = value.toLowerCase();\n\tif (\n\t\tnormalized === \"free\" ||\n\t\tnormalized === \"plus\" ||\n\t\tnormalized === \"pro\" ||\n\t\tnormalized === \"team\" ||\n\t\tnormalized === \"enterprise\" ||\n\t\tnormalized === \"edu\"\n\t) {\n\t\treturn normalized;\n\t}\n\n\treturn \"unknown\";\n}\n\nexport function chatgptAuthFromAuthDotJson(auth: AuthDotJson): CodexAuth {\n\tconst tokens = auth.tokens;\n\tconst claims = tokens?.id_token ? openAiAuthClaims(tokens.id_token) : {};\n\tconst email = typeof claims.email === \"string\" ? claims.email : null;\n\tconst accountId =\n\t\t(typeof claims.chatgpt_account_id === \"string\"\n\t\t\t? claims.chatgpt_account_id\n\t\t\t: tokens?.account_id) ?? null;\n\tconst planType = normalizePlanType(claims.chatgpt_plan_type);\n\n\treturn {\n\t\ttype: AuthMode.Chatgpt,\n\t\tauth,\n\t\taccount_id: accountId,\n\t\temail,\n\t\tplan_type: planType,\n\t};\n}\n\nexport function codexAuthToAccountState(auth: CodexAuth | null): ProviderAccountState {\n\tif (!auth) {\n\t\treturn { account: null, requires_openai_auth: true };\n\t}\n\n\tif (auth.type === AuthMode.ApiKey) {\n\t\treturn {\n\t\t\taccount: { type: AuthMode.ApiKey },\n\t\t\trequires_openai_auth: true,\n\t\t};\n\t}\n\n\treturn {\n\t\taccount: {\n\t\t\ttype: AuthMode.Chatgpt,\n\t\t\temail: auth.email ?? \"\",\n\t\t\tplan_type: auth.plan_type ?? \"unknown\",\n\t\t},\n\t\trequires_openai_auth: true,\n\t};\n}\n\nexport function authDotJsonToOpenAiApiKey(auth: AuthDotJson): string | null {\n\tif (auth.openai_api_key?.trim()) {\n\t\treturn auth.openai_api_key.trim();\n\t}\n\n\treturn null;\n}\n\nexport function authDotJsonToBearerToken(auth: AuthDotJson): string | null {\n\treturn authDotJsonToOpenAiApiKey(auth) ?? auth.tokens?.access_token?.trim() ?? null;\n}\n","export const ModeKind = {\n\tPlan: \"plan\",\n\tDefault: \"default\",\n} as const;\n\nexport type ModeKind = (typeof ModeKind)[keyof typeof ModeKind];\n\nexport type ReasoningEffort = string;\n\nexport type CollaborationModeSettings = {\n\tmodel: string;\n\treasoning_effort: ReasoningEffort | null;\n\tdeveloper_instructions: string | null;\n};\n\nexport type CollaborationMode = {\n\tmode: ModeKind;\n\tsettings: CollaborationModeSettings;\n};\n\nexport type CollaborationModeMask = {\n\tname: string;\n\tmode?: ModeKind | null;\n\tmodel?: string | null;\n\treasoning_effort?: ReasoningEffort | null | undefined;\n\tdeveloper_instructions?: string | null | undefined;\n};\n\nexport const TUI_VISIBLE_COLLABORATION_MODES = [\n\tModeKind.Default,\n\tModeKind.Plan,\n] as const satisfies readonly ModeKind[];\n\nexport function allowsRequestUserInput(mode: ModeKind): boolean {\n\treturn mode === ModeKind.Plan;\n}\n\nexport function modeDisplayName(mode: ModeKind): string {\n\tswitch (mode) {\n\t\tcase ModeKind.Plan:\n\t\t\treturn \"Plan\";\n\t\tcase ModeKind.Default:\n\t\t\treturn \"Default\";\n\t}\n}\n\nexport function collaborationModeWithUpdates(\n\tcollaborationMode: CollaborationMode,\n\tmodel?: string | null,\n\teffort?: ReasoningEffort | null | undefined,\n\tdeveloperInstructions?: string | null | undefined,\n): CollaborationMode {\n\treturn {\n\t\tmode: collaborationMode.mode,\n\t\tsettings: {\n\t\t\tmodel: model ?? collaborationMode.settings.model,\n\t\t\treasoning_effort:\n\t\t\t\teffort === undefined\n\t\t\t\t\t? collaborationMode.settings.reasoning_effort\n\t\t\t\t\t: effort,\n\t\t\tdeveloper_instructions:\n\t\t\t\tdeveloperInstructions === undefined\n\t\t\t\t\t? collaborationMode.settings.developer_instructions\n\t\t\t\t\t: developerInstructions,\n\t\t},\n\t};\n}\n\nexport function applyCollaborationModeMask(\n\tcollaborationMode: CollaborationMode,\n\tmask: CollaborationModeMask,\n): CollaborationMode {\n\treturn {\n\t\tmode: mask.mode ?? collaborationMode.mode,\n\t\tsettings: {\n\t\t\tmodel: mask.model ?? collaborationMode.settings.model,\n\t\t\treasoning_effort:\n\t\t\t\tmask.reasoning_effort === undefined\n\t\t\t\t\t? collaborationMode.settings.reasoning_effort\n\t\t\t\t\t: mask.reasoning_effort,\n\t\t\tdeveloper_instructions:\n\t\t\t\tmask.developer_instructions === undefined\n\t\t\t\t\t? collaborationMode.settings.developer_instructions\n\t\t\t\t\t: mask.developer_instructions,\n\t\t},\n\t};\n}\n\nexport function collaborationModeForModel(\n\tmodel: string,\n\teffort?: ReasoningEffort | null,\n\tmode: ModeKind = ModeKind.Default,\n\tdeveloperInstructions: string | null = null,\n): CollaborationMode {\n\treturn {\n\t\tmode,\n\t\tsettings: {\n\t\t\tmodel,\n\t\t\treasoning_effort: effort ?? null,\n\t\t\tdeveloper_instructions: developerInstructions,\n\t\t},\n\t};\n}\n","export const CODEX_PLAN_MODE_INSTRUCTIONS = `# Plan Mode (Conversational)\n\nYou work in 3 phases, and you should *chat your way* to a great plan before finalizing it. A great plan is very detailed—intent- and implementation-wise—so that it can be handed to another engineer or agent to be implemented right away. It must be **decision complete**, where the implementer does not need to make any decisions.\n\n## Mode rules (strict)\n\nYou are in **Plan Mode** until a developer message explicitly ends it.\n\nPlan Mode is not changed by user intent, tone, or imperative language. If a user asks for execution while still in Plan Mode, treat it as a request to **plan the execution**, not perform it.\n\n## Plan Mode vs update_plan tool\n\nPlan Mode is a collaboration mode that can involve requesting user input and eventually issuing a \\`<proposed_plan>\\` block.\n\nSeparately, \\`update_plan\\` is a checklist/progress/TODOs tool; it does not enter or exit Plan Mode. Do not confuse it with Plan mode or try to use it while in Plan mode. If you try to use \\`update_plan\\` in Plan mode, it will return an error.\n\n## Execution vs. mutation in Plan Mode\n\nYou may explore and execute **non-mutating** actions that improve the plan. You must not perform **mutating** actions.\n\n### Allowed (non-mutating, plan-improving)\n\nActions that gather truth, reduce ambiguity, or validate feasibility without changing repo-tracked state. Examples:\n\n* Reading or searching files, configs, schemas, types, manifests, and docs\n* Static analysis, inspection, and repo exploration\n* Dry-run style commands when they do not edit repo-tracked files\n* Tests, builds, or checks that may write to caches or build artifacts (for example, \\`target/\\`, \\`.cache/\\`, or snapshots) so long as they do not edit repo-tracked files\n\n### Not allowed (mutating, plan-executing)\n\nActions that implement the plan or change repo-tracked state. Examples:\n\n* Editing or writing files\n* Running formatters or linters that rewrite files\n* Applying patches, migrations, or codegen that updates repo-tracked files\n* Side-effectful commands whose purpose is to carry out the plan rather than refine it\n\nWhen in doubt: if the action would reasonably be described as \"doing the work\" rather than \"planning the work,\" do not do it.\n\n## PHASE 1 — Ground in the environment (explore first, ask second)\n\nBegin by grounding yourself in the actual environment. Eliminate unknowns in the prompt by discovering facts, not by asking the user. Resolve all questions that can be answered through exploration or inspection. Identify missing or ambiguous details only if they cannot be derived from the environment. Silent exploration between turns is allowed and encouraged.\n\nBefore asking the user any question, perform at least one targeted non-mutating exploration pass (for example: search relevant files, inspect likely entrypoints/configs, confirm current implementation shape), unless no local environment/repo is available.\n\nException: you may ask clarifying questions about the user's prompt before exploring, ONLY if there are obvious ambiguities or contradictions in the prompt itself. However, if ambiguity might be resolved by exploring, always prefer exploring first.\n\nDo not ask questions that can be answered from the repo or system (for example, \"where is this struct?\" or \"which UI component should we use?\" when exploration can make it clear). Only ask once you have exhausted reasonable non-mutating exploration.\n\n## PHASE 2 — Intent chat (what they actually want)\n\n* Keep asking until you can clearly state: goal + success criteria, audience, in/out of scope, constraints, current state, and the key preferences/tradeoffs.\n* Bias toward questions over guessing: if any high-impact ambiguity remains, do NOT plan yet—ask.\n\n## PHASE 3 — Implementation chat (what/how we’ll build)\n\n* Once intent is stable, keep asking until the spec is decision complete: approach, interfaces (APIs/schemas/I/O), data flow, edge cases/failure modes, testing + acceptance criteria, rollout/monitoring, and any migrations/compat constraints.\n\n## Asking questions\n\nCritical rules:\n\n* Strongly prefer using the \\`request_user_input\\` tool to ask any questions.\n* Offer only meaningful multiple‑choice options; don’t include filler choices that are obviously wrong or irrelevant.\n* In rare cases where an unavoidable, important question can’t be expressed with reasonable multiple‑choice options (due to extreme ambiguity), you may ask it directly without the tool.\n\nYou SHOULD ask many questions, but each question must:\n\n* materially change the spec/plan, OR\n* confirm/lock an assumption, OR\n* choose between meaningful tradeoffs.\n* not be answerable by non-mutating commands.\n\nUse the \\`request_user_input\\` tool only for decisions that materially change the plan, for confirming important assumptions, or for information that cannot be discovered via non-mutating exploration.\n\n## Two kinds of unknowns (treat differently)\n\n1. **Discoverable facts** (repo/system truth): explore first.\n\n * Before asking, run targeted searches and check likely sources of truth (configs/manifests/entrypoints/schemas/types/constants).\n * Ask only if: multiple plausible candidates; nothing found but you need a missing identifier/context; or ambiguity is actually product intent.\n * If asking, present concrete candidates (paths/service names) + recommend one.\n * Never ask questions you can answer from your environment (e.g., “where is this struct”).\n\n2. **Preferences/tradeoffs** (not discoverable): ask early.\n\n * These are intent or implementation preferences that cannot be derived from exploration.\n * Provide 2–4 mutually exclusive options + a recommended default.\n * If unanswered, proceed with the recommended option and record it as an assumption in the final plan.\n\n## Finalization rule\n\nOnly output the final plan when it is decision complete and leaves no decisions to the implementer.\n\nWhen you present the official plan, wrap it in a \\`<proposed_plan>\\` block so the client can render it specially:\n\n1) The opening tag must be on its own line.\n2) Start the plan content on the next line (no text on the same line as the tag).\n3) The closing tag must be on its own line.\n4) Use Markdown inside the block.\n5) Keep the tags exactly as \\`<proposed_plan>\\` and \\`</proposed_plan>\\` (do not translate or rename them), even if the plan content is in another language.\n\nExample:\n\n<proposed_plan>\nplan content\n</proposed_plan>\n\nplan content should be human and agent digestible. The final plan must be plan-only, concise by default, and include:\n\n* A clear title\n* A brief summary section\n* Important changes or additions to public APIs/interfaces/types\n* Test cases and scenarios\n* Explicit assumptions and defaults chosen where needed\n\nWhen possible, prefer a compact structure with 3-5 short sections, usually: Summary, Key Changes or Implementation Changes, Test Plan, and Assumptions. Do not include a separate Scope section unless scope boundaries are genuinely important to avoid mistakes.\n\nPrefer grouped implementation bullets by subsystem or behavior over file-by-file inventories. Mention files only when needed to disambiguate a non-obvious change, and avoid naming more than 3 paths unless extra specificity is necessary to prevent mistakes. Prefer behavior-level descriptions over symbol-by-symbol removal lists. For v1 feature-addition plans, do not invent detailed schema, validation, precedence, fallback, or wire-shape policy unless the request establishes it or it is needed to prevent a concrete implementation mistake; prefer the intended capability and minimum interface/behavior changes.\n\nKeep bullets short and avoid explanatory sub-bullets unless they are needed to prevent ambiguity. Prefer the minimum detail needed for implementation safety, not exhaustive coverage. Within each section, compress related changes into a few high-signal bullets and omit branch-by-branch logic, repeated invariants, and long lists of unaffected behavior unless they are necessary to prevent a likely implementation mistake. Avoid repeated repo facts and irrelevant edge-case or rollout detail. For straightforward refactors, keep the plan to a compact summary, key edits, tests, and assumptions. If the user asks for more detail, then expand.\n\nDo not ask \"should I proceed?\" in the final output. The user can easily switch out of Plan mode and request implementation if you have included a \\`<proposed_plan>\\` block in your response. Alternatively, they can decide to stay in Plan mode and continue refining the plan.\n\nOnly produce at most one \\`<proposed_plan>\\` block per turn, and only when you are presenting a complete spec.\n\nIf the user stays in Plan mode and asks for revisions after a prior \\`<proposed_plan>\\`, any new \\`<proposed_plan>\\` must be a complete replacement.`;\n","import {\n\tapplyCollaborationModeMask,\n\tcollaborationModeForModel,\n\ttype CollaborationMode,\n\ttype CollaborationModeMask,\n\tModeKind,\n\tTUI_VISIBLE_COLLABORATION_MODES,\n\tmodeDisplayName,\n} from \"./config-types\";\nimport { CODEX_PLAN_MODE_INSTRUCTIONS } from \"./plan-mode\";\n\nconst DEFAULT_MODE_TEMPLATE = `# Collaboration Mode: Default\n\nYou are now in Default mode. Any previous instructions for other modes (e.g. Plan mode) are no longer active.\n\nYour active mode changes only when new developer instructions with a different \\`<collaboration_mode>...</collaboration_mode>\\` change it; user requests or tool descriptions do not change mode by themselves. Known mode names are {{KNOWN_MODE_NAMES}}.\n\n## request_user_input availability\n\nUse the \\`request_user_input\\` tool only when it is listed in the available tools for this turn.\n\nIn Default mode, strongly prefer making reasonable assumptions and executing the user's request rather than stopping to ask questions. If you absolutely must ask a question because the answer cannot be discovered from local context and a reasonable assumption would be risky, ask the user directly with a concise plain-text question. Never write a multiple choice question as a textual assistant message.`;\n\nexport function builtinCollaborationModePresets(): CollaborationModeMask[] {\n\treturn [planPreset(), defaultPreset()];\n}\n\nexport function collaborationModePresetForMode(\n\tmode: ModeKind,\n): CollaborationModeMask | null {\n\treturn (\n\t\tbuiltinCollaborationModePresets().find((preset) => preset.mode === mode) ??\n\t\tnull\n\t);\n}\n\nexport function normalizeCollaborationMode(input: {\n\tcollaborationMode?: CollaborationMode | null;\n\tmodel: string;\n\treasoningEffort?: string | null;\n}): CollaborationMode {\n\tconst current = input.collaborationMode\n\t\t? collaborationModeForModel(\n\t\t\t\tinput.collaborationMode.settings.model ?? input.model,\n\t\t\t\tinput.collaborationMode.settings.reasoning_effort ??\n\t\t\t\t\tinput.reasoningEffort ??\n\t\t\t\t\tnull,\n\t\t\t\tinput.collaborationMode.mode,\n\t\t\t\tinput.collaborationMode.settings.developer_instructions ?? null,\n\t\t\t)\n\t\t: collaborationModeForModel(\n\t\t\t\tinput.model,\n\t\t\t\tinput.reasoningEffort ?? null,\n\t\t\t\tModeKind.Default,\n\t\t\t);\n\tconst preset = collaborationModePresetForMode(current.mode);\n\tif (\n\t\tcurrent.settings.developer_instructions === null &&\n\t\tpreset?.developer_instructions\n\t) {\n\t\treturn applyCollaborationModeMask(current, {\n\t\t\tname: preset.name,\n\t\t\tdeveloper_instructions: preset.developer_instructions,\n\t\t});\n\t}\n\treturn current;\n}\n\nexport function defaultModeInstructions(): string {\n\treturn DEFAULT_MODE_TEMPLATE.replace(\n\t\t\"{{KNOWN_MODE_NAMES}}\",\n\t\tformatModeNames(TUI_VISIBLE_COLLABORATION_MODES),\n\t);\n}\n\nfunction planPreset(): CollaborationModeMask {\n\treturn {\n\t\tname: modeDisplayName(ModeKind.Plan),\n\t\tmode: ModeKind.Plan,\n\t\tmodel: null,\n\t\treasoning_effort: \"medium\",\n\t\tdeveloper_instructions: CODEX_PLAN_MODE_INSTRUCTIONS,\n\t};\n}\n\nfunction defaultPreset(): CollaborationModeMask {\n\treturn {\n\t\tname: modeDisplayName(ModeKind.Default),\n\t\tmode: ModeKind.Default,\n\t\tmodel: null,\n\t\treasoning_effort: undefined,\n\t\tdeveloper_instructions: defaultModeInstructions(),\n\t};\n}\n\nfunction formatModeNames(modes: readonly ModeKind[]): string {\n\tconst modeNames = modes.map(modeDisplayName);\n\tif (modeNames.length === 0) {\n\t\treturn \"none\";\n\t}\n\tif (modeNames.length === 1) {\n\t\treturn modeNames[0] ?? \"none\";\n\t}\n\tif (modeNames.length === 2) {\n\t\treturn `${modeNames[0]} and ${modeNames[1]}`;\n\t}\n\treturn modeNames.join(\", \");\n}\n","import type {\n\tContentItem,\n\tResponseImageGenerationCallItem,\n\tResponseItem,\n\tResponseWebSearchCallItem,\n} from \"./models\";\nimport type {\n\tAgentMessageTurnItem,\n\tHookPromptFragment,\n\tHookPromptTurnItem,\n\tReasoningTurnItem,\n\tTurnItem,\n\tUserMessageTurnItem,\n\tWebSearchAction,\n\tWebSearchTurnItem,\n} from \"./items\";\n\nconst CONTEXTUAL_DEVELOPER_PREFIXES = [\n\t\"<permissions instructions>\",\n\t\"<developer_instructions>\",\n\t\"<model_switch>\",\n\t\"<collaboration_mode>\",\n\t\"<realtime_conversation>\",\n\t\"<personality_spec>\",\n\t\"<hook_additional_context>\",\n];\n\nexport function isContextualUserMessageContent(\n\tmessage: readonly ContentItem[],\n): boolean {\n\treturn message.some(isContextualUserFragment);\n}\n\nexport function isContextualDevMessageContent(\n\tmessage: readonly ContentItem[],\n): boolean {\n\treturn message.some(isContextualDevFragment);\n}\n\nexport function hasNonContextualDevMessageContent(\n\tmessage: readonly ContentItem[],\n): boolean {\n\treturn message.some((contentItem) => !isContextualDevFragment(contentItem));\n}\n\nexport function parseUserMessage(\n\tid: string | null | undefined,\n\tmessage: readonly ContentItem[],\n): UserMessageTurnItem | null {\n\tif (isContextualUserMessageContent(message)) {\n\t\treturn null;\n\t}\n\n\tconst content: UserMessageTurnItem[\"content\"] = [];\n\n\tfor (const [index, contentItem] of message.entries()) {\n\t\tif (contentItem.type === \"input_text\") {\n\t\t\tif (\n\t\t\t\t((isLocalImageOpenTagText(contentItem.text) ||\n\t\t\t\t\tisImageOpenTagText(contentItem.text)) &&\n\t\t\t\t\tmessage[index + 1]?.type === \"input_image\") ||\n\t\t\t\t(index > 0 &&\n\t\t\t\t\t(isLocalImageCloseTagText(contentItem.text) ||\n\t\t\t\t\t\tisImageCloseTagText(contentItem.text)) &&\n\t\t\t\t\tmessage[index - 1]?.type === \"input_image\")\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontent.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: contentItem.text,\n\t\t\t\ttext_elements: [],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (contentItem.type === \"input_image\") {\n\t\t\tcontent.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\timage_url: contentItem.image_url,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"UserMessage\",\n\t\tid: id ?? \"\",\n\t\tcontent,\n\t};\n}\n\nexport function parseAgentMessage(\n\tid: string | null | undefined,\n\tmessage: readonly ContentItem[],\n\tphase?: string | null,\n): AgentMessageTurnItem {\n\tconst content: AgentMessageTurnItem[\"content\"] = [];\n\n\tfor (const contentItem of message) {\n\t\tif (contentItem.type === \"input_text\" || contentItem.type === \"output_text\") {\n\t\t\tcontent.push({ type: \"Text\", text: contentItem.text });\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"AgentMessage\",\n\t\tid: id ?? \"\",\n\t\tcontent,\n\t\tphase: phase ?? null,\n\t\tmemory_citation: null,\n\t};\n}\n\nexport function parseVisibleHookPromptMessage(\n\tid: string | null | undefined,\n\tmessage: readonly ContentItem[],\n): HookPromptTurnItem | null {\n\tconst fragments: HookPromptFragment[] = [];\n\n\tfor (const contentItem of message) {\n\t\tif (contentItem.type !== \"input_text\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst fragment = parseHookPromptFragment(contentItem.text);\n\t\tif (fragment) {\n\t\t\tfragments.push(fragment);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isStandardContextualUserText(contentItem.text)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tif (fragments.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\ttype: \"HookPrompt\",\n\t\tid: id ?? \"\",\n\t\tfragments,\n\t};\n}\n\nexport function parseTurnItem(item: ResponseItem): TurnItem | null {\n\tswitch (item.type) {\n\t\tcase \"message\":\n\t\t\tif (item.role === \"user\") {\n\t\t\t\treturn (\n\t\t\t\t\tparseVisibleHookPromptMessage(item.id, item.content) ??\n\t\t\t\t\tparseUserMessage(item.id, item.content)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (item.role === \"assistant\" || !item.role) {\n\t\t\t\treturn parseAgentMessage(item.id, item.content, item.phase);\n\t\t\t}\n\n\t\t\treturn null;\n\t\tcase \"reasoning\":\n\t\t\treturn parseReasoningItem(item);\n\t\tcase \"web_search_call\":\n\t\t\treturn parseWebSearchCall(item);\n\t\tcase \"image_generation_call\":\n\t\t\treturn parseImageGenerationCall(item);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction parseReasoningItem(\n\titem: Extract<ResponseItem, { type: \"reasoning\" }>,\n): ReasoningTurnItem {\n\treturn {\n\t\ttype: \"Reasoning\",\n\t\tid: item.id ?? \"\",\n\t\tsummary_text: item.summary.flatMap((entry) => {\n\t\t\tif (typeof entry.text === \"string\") {\n\t\t\t\treturn [entry.text];\n\t\t\t}\n\t\t\treturn [];\n\t\t}),\n\t\traw_content: (item.content ?? []).flatMap((entry) => {\n\t\t\tif (\n\t\t\t\t(entry.type === \"reasoning_text\" || entry.type === \"text\") &&\n\t\t\t\ttypeof entry.text === \"string\"\n\t\t\t) {\n\t\t\t\treturn [entry.text];\n\t\t\t}\n\t\t\treturn [];\n\t\t}),\n\t};\n}\n\nfunction parseWebSearchCall(item: ResponseWebSearchCallItem): WebSearchTurnItem {\n\tconst action = webSearchActionFromRecord(item.action);\n\treturn {\n\t\ttype: \"WebSearch\",\n\t\tid: item.id ?? \"\",\n\t\tquery: webSearchActionDetail(action),\n\t\taction,\n\t};\n}\n\nfunction parseImageGenerationCall(\n\titem: ResponseImageGenerationCallItem,\n): TurnItem {\n\treturn {\n\t\ttype: \"ImageGeneration\",\n\t\tid: item.id,\n\t\tstatus: item.status,\n\t\trevised_prompt: item.revised_prompt ?? undefined,\n\t\tresult: item.result,\n\t\tsaved_path: item.saved_path,\n\t};\n}\n\nfunction webSearchActionFromRecord(\n\taction: Record<string, unknown> | null | undefined,\n): WebSearchAction {\n\tif (!action) {\n\t\treturn { type: \"other\" };\n\t}\n\n\tif (action.type === \"search\") {\n\t\treturn {\n\t\t\ttype: \"search\",\n\t\t\t...(typeof action.query === \"string\" ? { query: action.query } : {}),\n\t\t\t...(Array.isArray(action.queries)\n\t\t\t\t? { queries: action.queries.filter(isString) }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\tif (action.type === \"open_page\") {\n\t\treturn {\n\t\t\ttype: \"open_page\",\n\t\t\t...(typeof action.url === \"string\" ? { url: action.url } : {}),\n\t\t};\n\t}\n\n\tif (action.type === \"find_in_page\") {\n\t\treturn {\n\t\t\ttype: \"find_in_page\",\n\t\t\t...(typeof action.url === \"string\" ? { url: action.url } : {}),\n\t\t\t...(typeof action.pattern === \"string\" ? { pattern: action.pattern } : {}),\n\t\t};\n\t}\n\n\treturn { type: \"other\" };\n}\n\nfunction webSearchActionDetail(action: WebSearchAction): string {\n\tswitch (action.type) {\n\t\tcase \"search\":\n\t\t\treturn action.query ?? action.queries?.join(\", \") ?? \"\";\n\t\tcase \"open_page\":\n\t\t\treturn action.url ?? \"\";\n\t\tcase \"find_in_page\": {\n\t\t\tconst pattern = action.pattern ?? \"\";\n\t\t\tconst url = action.url ?? \"\";\n\t\t\treturn pattern && url ? `'${pattern}' in ${url}` : (pattern || url);\n\t\t}\n\t\tcase \"other\":\n\t\t\treturn \"\";\n\t}\n}\n\nfunction isContextualUserFragment(contentItem: ContentItem): boolean {\n\treturn (\n\t\tcontentItem.type === \"input_text\" &&\n\t\t(parseHookPromptFragment(contentItem.text) !== null ||\n\t\t\tisStandardContextualUserText(contentItem.text))\n\t);\n}\n\nfunction isContextualDevFragment(contentItem: ContentItem): boolean {\n\tif (contentItem.type !== \"input_text\") {\n\t\treturn false;\n\t}\n\n\tconst trimmed = contentItem.text.trimStart();\n\treturn CONTEXTUAL_DEVELOPER_PREFIXES.some((prefix) =>\n\t\ttrimmed.slice(0, prefix.length).toLowerCase() === prefix.toLowerCase(),\n\t);\n}\n\nfunction isStandardContextualUserText(text: string): boolean {\n\tconst trimmed = text.trimStart();\n\treturn (\n\t\ttrimmed.startsWith(\"# AGENTS.md instructions for \") ||\n\t\ttrimmed.startsWith(\"<environment_context>\") ||\n\t\ttrimmed.startsWith(\"<skill>\") ||\n\t\ttrimmed.startsWith(\"<user_shell_command>\") ||\n\t\ttrimmed.startsWith(\"<turn_aborted>\") ||\n\t\ttrimmed.startsWith(\"<thread_goal_budget_limit>\") ||\n\t\ttrimmed.startsWith(\"<subagent_notification>\")\n\t);\n}\n\nfunction parseHookPromptFragment(text: string): HookPromptFragment | null {\n\tconst trimmed = text.trim();\n\tconst match = trimmed.match(\n\t\t/^<hook_prompt\\s+hook_run_id=([\"'])(.*?)\\1>([\\s\\S]*)<\\/hook_prompt>$/u,\n\t);\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst hookRunId = decodeXmlEntities(match[2] ?? \"\").trim();\n\tif (!hookRunId) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\thookRunId,\n\t\ttext: decodeXmlEntities(match[3] ?? \"\"),\n\t};\n}\n\nfunction isImageOpenTagText(text: string): boolean {\n\treturn text === \"<image>\";\n}\n\nfunction isImageCloseTagText(text: string): boolean {\n\treturn text === \"</image>\";\n}\n\nfunction isLocalImageOpenTagText(text: string): boolean {\n\treturn text.startsWith(\"<image name=\") && text.endsWith(\">\");\n}\n\nfunction isLocalImageCloseTagText(text: string): boolean {\n\treturn isImageCloseTagText(text);\n}\n\nfunction decodeXmlEntities(value: string): string {\n\treturn value\n\t\t.replaceAll(\"&\", \"&\")\n\t\t.replaceAll(\"<\", \"<\")\n\t\t.replaceAll(\">\", \">\")\n\t\t.replaceAll(\""\", \"\\\"\")\n\t\t.replaceAll(\"'\", \"'\");\n}\n\nfunction isString(value: unknown): value is string {\n\treturn typeof value === \"string\";\n}\n","import type {\n\tAgentMessageTurnItem,\n\tTurnItem,\n\tUserMessageTurnItem,\n} from \"./items\";\nimport { parseTurnItem } from \"./event-mapping\";\nimport type {\n\tDynamicToolCallRequest,\n\tEventMsg,\n\tImageGenerationEndEventMsg,\n\tResponseItem,\n\tRolloutItem,\n\tUserInput,\n\tUserMessageEventMsg,\n} from \"./protocol\";\n\nexport type TurnStatus =\n\t| \"completed\"\n\t| \"interrupted\"\n\t| \"failed\"\n\t| \"in_progress\";\n\nexport type TurnItemsView = \"not_loaded\" | \"summary\" | \"full\";\n\nexport type TurnError = {\n\tmessage: string;\n\tcodex_error_info?: unknown | null;\n\tadditional_details?: string | null;\n};\n\nexport type Turn = {\n\tid: string;\n\titems: TurnItem[];\n\titems_view: TurnItemsView;\n\tstatus: TurnStatus;\n\terror: TurnError | null;\n\tstarted_at: number | null;\n\tcompleted_at: number | null;\n\tduration_ms: number | null;\n};\n\nexport type PendingTurn = Turn & {\n\topened_explicitly: boolean;\n};\n\ntype InternalTurn = Turn & {\n\topened_explicitly: boolean;\n};\n\nexport class ThreadHistoryBuilder {\n\tprivate turns: InternalTurn[] = [];\n\tprivate next_item_index = 1;\n\n\tstatic fromTurns(turns: readonly Turn[]): ThreadHistoryBuilder {\n\t\tconst builder = new ThreadHistoryBuilder();\n\t\tbuilder.turns = turns.map((turn) => ({\n\t\t\t...cloneTurn(turn),\n\t\t\topened_explicitly: true,\n\t\t}));\n\t\tbuilder.next_item_index = nextItemIndexFromTurns(turns);\n\t\treturn builder;\n\t}\n\n\thandle_rollout_item(item: RolloutItem, index = this.next_item_index): void {\n\t\tif (item.type === \"event_msg\") {\n\t\t\tthis.handle_event(item.payload, `rollout-${index}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"response_item\") {\n\t\t\tthis.handle_response_item(item.payload, `response-${index}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"compacted\") {\n\t\t\tthis.append_to_current_turn({\n\t\t\t\ttype: \"ContextCompaction\",\n\t\t\t\tid: `compacted-${index}`,\n\t\t\t});\n\t\t}\n\t}\n\n\thandle_event(event: EventMsg, eventId = `event-${this.next_item_index}`): void {\n\t\tswitch (event.type) {\n\t\t\tcase \"turn_started\":\n\t\t\t\tthis.open_explicit_turn(event.turn_id);\n\t\t\t\tif (event.started_at !== undefined && event.started_at !== null) {\n\t\t\t\t\tconst turn = this.turn_by_id(event.turn_id);\n\t\t\t\t\tif (turn) {\n\t\t\t\t\t\tturn.started_at = event.started_at;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"turn_complete\":\n\t\t\t\tthis.complete_turn(event.turn_id, {\n\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\tcompleted_at: event.completed_at ?? null,\n\t\t\t\t\tduration_ms: event.duration_ms ?? null,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"turn_aborted\":\n\t\t\t\tthis.complete_turn(event.turn_id, {\n\t\t\t\t\tstatus: \"interrupted\",\n\t\t\t\t\tcompleted_at: event.completed_at ?? event.aborted_at ?? null,\n\t\t\t\t\tduration_ms: event.duration_ms ?? null,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"user_message\":\n\t\t\t\tthis.append_user_message(userMessageTurnItem(event, userMessageId(eventId)), {\n\t\t\t\t\treplaceDuplicate: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"agent_message\":\n\t\t\t\tthis.upsert_agent_message({\n\t\t\t\t\ttype: \"AgentMessage\",\n\t\t\t\t\tid: agentMessageId(eventId),\n\t\t\t\t\tcontent: [{ type: \"Text\", text: event.message }],\n\t\t\t\t\tphase: event.phase ?? null,\n\t\t\t\t\tmemory_citation: event.memory_citation ?? null,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"item_started\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, event.item, {\n\t\t\t\t\tstarted: true,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"item_completed\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, completedItem(event.item));\n\t\t\t\treturn;\n\t\t\tcase \"agent_message_content_delta\":\n\t\t\t\tthis.apply_agent_message_delta(event.item_id, event.delta);\n\t\t\t\treturn;\n\t\t\tcase \"plan_delta\":\n\t\t\t\tthis.apply_plan_delta(event.item_id, event.delta);\n\t\t\t\treturn;\n\t\t\tcase \"exec_command_begin\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, {\n\t\t\t\t\ttype: \"CommandExecution\",\n\t\t\t\t\tid: event.call_id,\n\t\t\t\t\tcommand: event.command,\n\t\t\t\t\tcwd: event.cwd,\n\t\t\t\t\tstatus: \"in_progress\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"exec_command_output_delta\":\n\t\t\t\tthis.apply_exec_command_output_delta(event);\n\t\t\t\treturn;\n\t\t\tcase \"exec_command_end\":\n\t\t\t\tthis.apply_exec_command_end(event);\n\t\t\t\treturn;\n\t\t\tcase \"patch_apply_updated\":\n\t\t\t\tthis.upsert_item_in_current_or_existing_turn(event.call_id, {\n\t\t\t\t\ttype: \"FileChange\",\n\t\t\t\t\tid: event.call_id,\n\t\t\t\t\tchanges: event.changes,\n\t\t\t\t\tstatus: event.status ?? null,\n\t\t\t\t\tauto_approved: false,\n\t\t\t\t\tstdout: event.stdout ?? \"\",\n\t\t\t\t\tstderr: event.stderr ?? \"\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"dynamic_tool_call_request\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, dynamicToolRequestTurnItem(event));\n\t\t\t\treturn;\n\t\t\tcase \"dynamic_tool_call_response\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, {\n\t\t\t\t\ttype: \"DynamicToolCall\",\n\t\t\t\t\tid: event.call_id,\n\t\t\t\t\tnamespace: event.namespace ?? null,\n\t\t\t\t\ttool: event.tool,\n\t\t\t\t\targuments: event.arguments,\n\t\t\t\t\tstatus: event.success ? \"completed\" : \"failed\",\n\t\t\t\t\tcontent_items: event.content_items,\n\t\t\t\t\tsuccess: event.success,\n\t\t\t\t\tduration: event.duration,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"mcp_tool_call_progress\":\n\t\t\t\tthis.upsert_item_in_turn(event.turn_id, {\n\t\t\t\t\ttype: \"McpToolCall\",\n\t\t\t\t\tid: event.call_id,\n\t\t\t\t\tserver: event.server_name,\n\t\t\t\t\ttool: event.tool_name,\n\t\t\t\t\targuments: {},\n\t\t\t\t\tstatus: \"inProgress\",\n\t\t\t\t\tresult: event.progress ?? event.message ?? null,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"image_generation_end\":\n\t\t\t\tthis.upsert_item_in_current_or_existing_turn(\n\t\t\t\t\tevent.call_id,\n\t\t\t\t\timageGenerationTurnItem(event, eventId),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"error\": {\n\t\t\t\tconst turn = this.active_turn();\n\t\t\t\tif (turn) {\n\t\t\t\t\tturn.status = \"failed\";\n\t\t\t\t\tturn.error = {\n\t\t\t\t\t\tmessage: event.message,\n\t\t\t\t\t\tcodex_error_info: event.codex_error_info ?? null,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\thandle_response_item(item: ResponseItem, id: string): void {\n\t\tconst turnItem = parseTurnItem(item);\n\t\tif (!turnItem) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemWithFallbackId =\n\t\t\tturnItem.id.length > 0 ? turnItem : { ...turnItem, id };\n\n\t\tif (itemWithFallbackId.type === \"AgentMessage\") {\n\t\t\tthis.upsert_agent_message(itemWithFallbackId);\n\t\t\treturn;\n\t\t}\n\n\t\tif (itemWithFallbackId.type === \"UserMessage\") {\n\t\t\tthis.append_user_message(itemWithFallbackId, {\n\t\t\t\treplaceDuplicate: false,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.append_to_current_turn(itemWithFallbackId);\n\t}\n\n\tactive_turn_snapshot(): Turn | null {\n\t\tconst turn = this.active_turn();\n\t\treturn turn ? stripInternalTurn(turn) : null;\n\t}\n\n\tactive_turn_position(): number | null {\n\t\tconst turn = this.active_turn();\n\t\treturn turn ? this.turns.indexOf(turn) : null;\n\t}\n\n\tfinish(): Turn[] {\n\t\treturn this.turns.map(stripInternalTurn);\n\t}\n\n\thas_active_turn(): boolean {\n\t\treturn this.active_turn() !== null;\n\t}\n\n\treset(): void {\n\t\tthis.turns = [];\n\t\tthis.next_item_index = 1;\n\t}\n\n\tprivate open_explicit_turn(turnId: string): void {\n\t\tconst existing = this.turns.find((turn) => turn.id === turnId);\n\t\tif (existing) {\n\t\t\texisting.status = \"in_progress\";\n\t\t\texisting.opened_explicitly = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.turns.push(newTurn(turnId, true));\n\t}\n\n\tprivate complete_turn(\n\t\tturnId: string,\n\t\tinput: {\n\t\t\tstatus: TurnStatus;\n\t\t\tcompleted_at: number | null;\n\t\t\tduration_ms: number | null;\n\t\t},\n\t): void {\n\t\tconst turn = this.turn_by_id(turnId) ?? this.ensure_turn(turnId, true);\n\t\tturn.status = input.status;\n\t\tturn.completed_at = input.completed_at;\n\t\tturn.duration_ms = input.duration_ms;\n\t}\n\n\tprivate append_user_message(\n\t\titem: UserMessageTurnItem,\n\t\toptions: { replaceDuplicate: boolean },\n\t): void {\n\t\tconst active = this.active_turn();\n\t\tif (!active || (!active.opened_explicitly && active.items.length > 0)) {\n\t\t\tthis.turns.push(newTurn(`turn-${this.turns.length + 1}`, false));\n\t\t}\n\t\tconst turn = this.active_turn() ?? this.ensure_turn();\n\t\tconst lastItem = turn.items.at(-1);\n\t\tif (\n\t\t\tlastItem?.type === \"UserMessage\" &&\n\t\t\tuserMessageFingerprint(lastItem) === userMessageFingerprint(item)\n\t\t) {\n\t\t\tif (options.replaceDuplicate) {\n\t\t\t\tturn.items[turn.items.length - 1] = item;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tturn.items.push(item);\n\t}\n\n\tprivate upsert_agent_message(item: AgentMessageTurnItem): void {\n\t\tconst turn = this.ensure_turn();\n\t\tconst lastItem = turn.items.at(-1);\n\t\tif (item.phase === \"streaming\") {\n\t\t\tif (lastItem?.type === \"AgentMessage\" && lastItem.phase === \"streaming\") {\n\t\t\t\tturn.items[turn.items.length - 1] = { ...item, id: lastItem.id };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tturn.items.push({ ...item, id: `streaming-${item.id}` });\n\t\t\treturn;\n\t\t}\n\t\tif (lastItem?.type === \"AgentMessage\" && lastItem.phase === \"streaming\") {\n\t\t\tturn.items[turn.items.length - 1] = { ...item, id: lastItem.id };\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tlastItem?.type === \"AgentMessage\" &&\n\t\t\tagentMessageText(lastItem) === agentMessageText(item)\n\t\t) {\n\t\t\tturn.items[turn.items.length - 1] = { ...item, id: lastItem.id };\n\t\t\treturn;\n\t\t}\n\t\tturn.items.push(item);\n\t}\n\n\tprivate upsert_item_in_turn(\n\t\tturnId: string | null | undefined,\n\t\titem: TurnItem,\n\t\toptions: { started?: boolean } = {},\n\t): void {\n\t\tconst turn = turnId ? this.ensure_turn(turnId, true) : this.ensure_turn();\n\t\tupsertItem(turn, options.started ? startedItem(item) : item);\n\t}\n\n\tprivate upsert_item_in_current_or_existing_turn(\n\t\titemId: string,\n\t\titem: TurnItem,\n\t): void {\n\t\tconst existingTurn = this.turns.find((turn) =>\n\t\t\tturn.items.some((candidate) => candidate.id === itemId),\n\t\t);\n\t\tupsertItem(existingTurn ?? this.ensure_turn(), item);\n\t}\n\n\tprivate append_to_current_turn(item: TurnItem): void {\n\t\tthis.ensure_turn().items.push(item);\n\t}\n\n\tprivate apply_agent_message_delta(itemId: string, delta: string): void {\n\t\tconst existing = this.find_item(itemId);\n\t\tif (!existing || existing.item.type !== \"AgentMessage\") {\n\t\t\tthis.append_to_current_turn({\n\t\t\t\ttype: \"AgentMessage\",\n\t\t\t\tid: itemId,\n\t\t\t\tcontent: [{ type: \"Text\", text: delta }],\n\t\t\t\tphase: \"streaming\",\n\t\t\t\tmemory_citation: null,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst item = existing.item;\n\t\tconst lastContent = item.content.at(-1);\n\t\tconst nextContent =\n\t\t\tlastContent?.type === \"Text\"\n\t\t\t\t? [\n\t\t\t\t\t\t...item.content.slice(0, -1),\n\t\t\t\t\t\t{ type: \"Text\" as const, text: `${lastContent.text}${delta}` },\n\t\t\t\t\t]\n\t\t\t\t: [...item.content, { type: \"Text\" as const, text: delta }];\n\t\texisting.turn.items[existing.index] = {\n\t\t\t...item,\n\t\t\tcontent: nextContent,\n\t\t\tphase: \"streaming\",\n\t\t};\n\t}\n\n\tprivate apply_plan_delta(itemId: string, delta: string): void {\n\t\tconst existing = this.find_item(itemId);\n\t\tif (!existing || existing.item.type !== \"Plan\") {\n\t\t\tthis.append_to_current_turn({ type: \"Plan\", id: itemId, text: delta });\n\t\t\treturn;\n\t\t}\n\t\texisting.turn.items[existing.index] = {\n\t\t\t...existing.item,\n\t\t\ttext: `${existing.item.text}${delta}`,\n\t\t};\n\t}\n\n\tprivate apply_exec_command_output_delta(\n\t\tmsg: Extract<EventMsg, { type: \"exec_command_output_delta\" }>,\n\t): void {\n\t\tconst existing = this.find_item(msg.call_id);\n\t\tif (!existing || existing.item.type !== \"CommandExecution\") {\n\t\t\treturn;\n\t\t}\n\t\texisting.turn.items[existing.index] = {\n\t\t\t...existing.item,\n\t\t\tstdout:\n\t\t\t\tmsg.stream === \"stdout\"\n\t\t\t\t\t? `${existing.item.stdout ?? \"\"}${msg.chunk}`\n\t\t\t\t\t: existing.item.stdout,\n\t\t\tstderr:\n\t\t\t\tmsg.stream === \"stderr\"\n\t\t\t\t\t? `${existing.item.stderr ?? \"\"}${msg.chunk}`\n\t\t\t\t\t: existing.item.stderr,\n\t\t};\n\t}\n\n\tprivate apply_exec_command_end(\n\t\tmsg: Extract<EventMsg, { type: \"exec_command_end\" }>,\n\t): void {\n\t\tconst existing = this.find_item(msg.call_id);\n\t\tconst item =\n\t\t\texisting?.item.type === \"CommandExecution\" ? existing.item : null;\n\t\tconst turn = msg.turn_id\n\t\t\t? this.ensure_turn(msg.turn_id, true)\n\t\t\t: existing?.turn ?? this.ensure_turn();\n\t\tupsertItem(turn, {\n\t\t\ttype: \"CommandExecution\",\n\t\t\tid: msg.call_id,\n\t\t\tcommand: item?.command ?? [],\n\t\t\tcwd: item?.cwd ?? \"\",\n\t\t\tstatus:\n\t\t\t\tmsg.status === \"completed\"\n\t\t\t\t\t? \"completed\"\n\t\t\t\t\t: msg.status === \"cancelled\"\n\t\t\t\t\t\t? \"cancelled\"\n\t\t\t\t\t\t: \"failed\",\n\t\t\tstdout: msg.stdout ?? msg.output?.stdout.text ?? item?.stdout ?? \"\",\n\t\t\tstderr: msg.stderr ?? msg.output?.stderr.text ?? item?.stderr ?? \"\",\n\t\t\texit_code: msg.exit_code,\n\t\t\tduration_ms: msg.duration_ms ?? msg.output?.duration_ms ?? null,\n\t\t});\n\t}\n\n\tprivate ensure_turn(id?: string, explicit = false): InternalTurn {\n\t\tif (id) {\n\t\t\tconst existing = this.turn_by_id(id);\n\t\t\tif (existing) {\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tconst turn = newTurn(id, explicit);\n\t\t\tthis.turns.push(turn);\n\t\t\treturn turn;\n\t\t}\n\t\tconst active = this.active_turn();\n\t\tif (active) {\n\t\t\treturn active;\n\t\t}\n\t\tconst turn = newTurn(`turn-${this.turns.length + 1}`, false);\n\t\tthis.turns.push(turn);\n\t\treturn turn;\n\t}\n\n\tprivate active_turn(): InternalTurn | null {\n\t\tfor (let index = this.turns.length - 1; index >= 0; index -= 1) {\n\t\t\tconst turn = this.turns[index];\n\t\t\tif (turn?.status === \"in_progress\") {\n\t\t\t\treturn turn;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate turn_by_id(id: string): InternalTurn | null {\n\t\treturn this.turns.find((turn) => turn.id === id) ?? null;\n\t}\n\n\tprivate find_item(\n\t\titemId: string,\n\t): { turn: InternalTurn; item: TurnItem; index: number } | null {\n\t\tfor (const turn of this.turns) {\n\t\t\tconst index = turn.items.findIndex((item) => item.id === itemId);\n\t\t\tif (index !== -1) {\n\t\t\t\treturn { turn, item: turn.items[index] as TurnItem, index };\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport function buildTurnsFromRolloutItems(\n\titems: readonly RolloutItem[],\n): Turn[] {\n\tconst builder = new ThreadHistoryBuilder();\n\tfor (const [index, item] of items.entries()) {\n\t\tbuilder.handle_rollout_item(item, index);\n\t}\n\treturn builder.finish();\n}\n\nexport function applyEventToThreadHistoryBuilder(\n\tbuilder: ThreadHistoryBuilder,\n\tevent: EventMsg,\n\teventId?: string,\n): ThreadHistoryBuilder {\n\tbuilder.handle_event(event, eventId);\n\treturn builder;\n}\n\nexport function flattenTurnsToTurnItems(turns: readonly Turn[]): TurnItem[] {\n\treturn turns.flatMap((turn) => turn.items);\n}\n\nexport function applyEventToTurns(\n\tturns: readonly Turn[],\n\tevent: EventMsg,\n\teventId?: string,\n): Turn[] {\n\tconst builder = ThreadHistoryBuilder.fromTurns(turns);\n\tbuilder.handle_event(event, eventId);\n\treturn builder.finish();\n}\n\nexport function applyResponseItemToTurns(\n\tturns: readonly Turn[],\n\titem: ResponseItem,\n\tid: string,\n): Turn[] {\n\tconst builder = ThreadHistoryBuilder.fromTurns(turns);\n\tbuilder.handle_response_item(item, id);\n\treturn builder.finish();\n}\n\nexport function appendCompactionTurnToTurns(\n\tturns: readonly Turn[],\n\tid: string,\n): Turn[] {\n\tconst builder = ThreadHistoryBuilder.fromTurns(turns);\n\tbuilder.handle_rollout_item({ type: \"compacted\", payload: { message: \"\" } }, 0);\n\tconst next = builder.finish();\n\tconst last = next.at(-1);\n\tif (last?.items.at(-1)?.type === \"ContextCompaction\") {\n\t\tlast.items[last.items.length - 1] = { type: \"ContextCompaction\", id };\n\t}\n\treturn next;\n}\n\nfunction newTurn(id: string, openedExplicitly: boolean): InternalTurn {\n\treturn {\n\t\tid,\n\t\titems: [],\n\t\titems_view: \"full\",\n\t\tstatus: \"in_progress\",\n\t\terror: null,\n\t\tstarted_at: null,\n\t\tcompleted_at: null,\n\t\tduration_ms: null,\n\t\topened_explicitly: openedExplicitly,\n\t};\n}\n\nfunction stripInternalTurn(turn: InternalTurn): Turn {\n\tconst { opened_explicitly, ...publicTurn } = turn;\n\tvoid opened_explicitly;\n\treturn cloneTurn(publicTurn);\n}\n\nfunction cloneTurn(turn: Turn): Turn {\n\treturn {\n\t\t...turn,\n\t\titems: turn.items.map((item) => structuredClone(item)),\n\t\terror: turn.error ? { ...turn.error } : null,\n\t};\n}\n\nfunction nextItemIndexFromTurns(turns: readonly Turn[]): number {\n\treturn (\n\t\tturns.reduce((count, turn) => count + turn.items.length, 0) + 1\n\t);\n}\n\nfunction upsertItem(turn: InternalTurn, item: TurnItem): void {\n\tconst index = turn.items.findIndex((candidate) => candidate.id === item.id);\n\tif (index === -1) {\n\t\tturn.items.push(item);\n\t\treturn;\n\t}\n\tturn.items[index] = item;\n}\n\nfunction startedItem(item: TurnItem): TurnItem {\n\treturn item.type === \"AgentMessage\"\n\t\t? { ...item, phase: item.phase ?? \"streaming\" }\n\t\t: item;\n}\n\nfunction completedItem(item: TurnItem): TurnItem {\n\treturn item.type === \"AgentMessage\"\n\t\t? { ...item, phase: item.phase ?? null }\n\t\t: item;\n}\n\nfunction dynamicToolRequestTurnItem(\n\trequest: DynamicToolCallRequest,\n): TurnItem {\n\treturn {\n\t\ttype: \"DynamicToolCall\",\n\t\tid: request.call_id,\n\t\tnamespace: request.namespace ?? null,\n\t\ttool: request.tool,\n\t\targuments: request.arguments,\n\t\tstatus: \"inProgress\",\n\t\tcontent_items: null,\n\t\tsuccess: null,\n\t\tduration: null,\n\t};\n}\n\nfunction userMessageId(eventId: string): string {\n\treturn `user-${eventId}`;\n}\n\nfunction agentMessageId(eventId: string): string {\n\treturn `agent-${eventId}`;\n}\n\nfunction userMessageTurnItem(\n\tmsg: UserMessageEventMsg,\n\tid: string,\n): UserMessageTurnItem {\n\treturn {\n\t\ttype: \"UserMessage\",\n\t\tid,\n\t\tcontent: userInputFromUserMessage(msg),\n\t};\n}\n\nfunction userInputFromUserMessage(msg: UserMessageEventMsg): UserInput[] {\n\tconst items: UserInput[] = [];\n\tif (msg.message.length > 0) {\n\t\titems.push({\n\t\t\ttype: \"text\",\n\t\t\ttext: msg.message,\n\t\t\ttext_elements: msg.text_elements,\n\t\t});\n\t}\n\tfor (const imageUrl of msg.images ?? []) {\n\t\titems.push({ type: \"image\", image_url: imageUrl });\n\t}\n\tfor (const path of msg.local_images ?? []) {\n\t\titems.push({ type: \"local_image\", path });\n\t}\n\treturn items;\n}\n\nfunction imageGenerationTurnItem(\n\tmsg: ImageGenerationEndEventMsg,\n\tid: string,\n): TurnItem {\n\treturn {\n\t\ttype: \"ImageGeneration\",\n\t\tid: msg.call_id || id,\n\t\tstatus: msg.status,\n\t\trevised_prompt: msg.revised_prompt,\n\t\tresult: msg.result,\n\t\tsaved_path: msg.saved_path,\n\t};\n}\n\nfunction agentMessageText(item: AgentMessageTurnItem): string {\n\treturn item.content.map((part) => part.text).join(\"\");\n}\n\nfunction userMessageFingerprint(item: UserMessageTurnItem): string {\n\treturn item.content\n\t\t.map((content) => {\n\t\t\tif (content.type === \"text\") {\n\t\t\t\treturn `text:${content.text}`;\n\t\t\t}\n\t\t\tif (content.type === \"image\") {\n\t\t\t\treturn `image:${content.image_url}`;\n\t\t\t}\n\t\t\tif (content.type === \"local_image\") {\n\t\t\t\treturn `local_image:${content.path}`;\n\t\t\t}\n\t\t\tif (content.type === \"skill\") {\n\t\t\t\treturn `skill:${content.name}:${content.path}`;\n\t\t\t}\n\t\t\treturn `mention:${content.name}:${content.path}`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n","import type { ThreadId } from \"./ids\";\nimport type {\n\tDynamicToolCallRequest,\n\tEventMsg,\n\tRolloutItem,\n} from \"./protocol\";\nimport type { RequestPermissionsEvent } from \"./request_permissions\";\nimport type { RequestUserInputEvent } from \"./request_user_input\";\nimport type { StoredThreadHistory } from \"./thread-store\";\nimport {\n\tapplyEventToTurns,\n\tapplyResponseItemToTurns,\n\tappendCompactionTurnToTurns,\n\tflattenTurnsToTurnItems,\n\ttype Turn,\n} from \"./thread-history-builder\";\nimport type { TurnItem } from \"./items\";\n\nexport type RenderedThreadConnectionStatus =\n\t| \"idle\"\n\t| \"connecting\"\n\t| \"connected\"\n\t| \"reconnecting\"\n\t| \"closed\"\n\t| \"error\";\n\nexport type RenderedThreadState = {\n\tthread_id: ThreadId;\n\tturns: Turn[];\n\titems: TurnItem[];\n\tpending_request_user_input: RequestUserInputEvent | null;\n\tpending_request_permissions: RequestPermissionsEvent | null;\n\tpending_dynamic_tool_call_requests: DynamicToolCallRequest[];\n\trunning_turn_ids: string[];\n\twarnings: string[];\n\terrors: string[];\n\tlast_history_fingerprint: string | null;\n\tconnection_status: RenderedThreadConnectionStatus;\n};\n\nexport type ApplyEventOptions = {\n\tevent_id?: string;\n};\n\nexport function createRenderedThreadState(\n\tthreadId: ThreadId,\n): RenderedThreadState {\n\treturn {\n\t\tthread_id: threadId,\n\t\tturns: [],\n\t\titems: [],\n\t\tpending_request_user_input: null,\n\t\tpending_request_permissions: null,\n\t\tpending_dynamic_tool_call_requests: [],\n\t\trunning_turn_ids: [],\n\t\twarnings: [],\n\t\terrors: [],\n\t\tlast_history_fingerprint: null,\n\t\tconnection_status: \"idle\",\n\t};\n}\n\nexport function renderThreadFromHistory(\n\thistory: StoredThreadHistory,\n): RenderedThreadState {\n\tlet state = createRenderedThreadState(history.thread_id);\n\n\tfor (const [index, item] of history.items.entries()) {\n\t\tstate = applyRolloutItemToRenderedThread(state, item, index);\n\t}\n\n\treturn {\n\t\t...state,\n\t\trunning_turn_ids: [],\n\t\tlast_history_fingerprint: fingerprintRolloutItems(history.items),\n\t};\n}\n\nexport function applyRolloutItemToRenderedThread(\n\tstate: RenderedThreadState,\n\titem: RolloutItem,\n\tindex = state.items.length,\n): RenderedThreadState {\n\tif (item.type === \"event_msg\") {\n\t\treturn applyEventMsgToRenderedThread(state, item.payload, {\n\t\t\tevent_id: `rollout-${index}`,\n\t\t});\n\t}\n\n\tif (item.type === \"response_item\") {\n\t\treturn withTurns(\n\t\t\tstate,\n\t\t\tapplyResponseItemToTurns(state.turns, item.payload, `response-${index}`),\n\t\t);\n\t}\n\n\tif (item.type === \"compacted\") {\n\t\treturn withTurns(\n\t\t\tstate,\n\t\t\tappendCompactionTurnToTurns(state.turns, `compacted-${index}`),\n\t\t);\n\t}\n\n\treturn state;\n}\n\nexport function applyEventMsgToRenderedThread(\n\tstate: RenderedThreadState,\n\tmsg: EventMsg,\n\toptions: ApplyEventOptions = {},\n): RenderedThreadState {\n\tconst eventId = options.event_id ?? `event-${state.items.length}`;\n\tconst hadActiveTurn = hasActiveTurn(state.turns);\n\tconst next = withTurns(state, applyEventToTurns(state.turns, msg, eventId));\n\n\tswitch (msg.type) {\n\t\tcase \"turn_started\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\trunning_turn_ids: addUnique(next.running_turn_ids, msg.turn_id),\n\t\t\t};\n\t\tcase \"turn_complete\":\n\t\t\treturn clearPendingForTurn(\n\t\t\t\t{\n\t\t\t\t\t...next,\n\t\t\t\t\trunning_turn_ids: next.running_turn_ids.filter(\n\t\t\t\t\t\t(turnId) => turnId !== msg.turn_id,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tmsg.turn_id,\n\t\t\t);\n\t\tcase \"turn_aborted\":\n\t\t\treturn clearPendingForTurn(\n\t\t\t\t{\n\t\t\t\t\t...next,\n\t\t\t\t\trunning_turn_ids: next.running_turn_ids.filter(\n\t\t\t\t\t\t(turnId) => turnId !== msg.turn_id,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tmsg.turn_id,\n\t\t\t);\n\t\tcase \"request_user_input\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tpending_request_user_input: {\n\t\t\t\t\tcall_id: msg.call_id,\n\t\t\t\t\tturn_id: msg.turn_id,\n\t\t\t\t\tquestions: msg.questions.map((question) => ({\n\t\t\t\t\t\t...question,\n\t\t\t\t\t\toptions: question.options.map((option) => ({ ...option })),\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"request_permissions\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tpending_request_permissions: {\n\t\t\t\t\tcall_id: msg.call_id,\n\t\t\t\t\tturn_id: msg.turn_id,\n\t\t\t\t\treason: msg.reason ?? null,\n\t\t\t\t\tpermissions: JSON.parse(JSON.stringify(msg.permissions)) as RequestPermissionsEvent[\"permissions\"],\n\t\t\t\t\tcwd: msg.cwd ?? null,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"dynamic_tool_call_request\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tpending_dynamic_tool_call_requests: upsertDynamicToolCallRequest(\n\t\t\t\t\tnext.pending_dynamic_tool_call_requests,\n\t\t\t\t\tmsg,\n\t\t\t\t),\n\t\t\t};\n\t\tcase \"dynamic_tool_call_response\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tpending_dynamic_tool_call_requests:\n\t\t\t\t\tnext.pending_dynamic_tool_call_requests.filter(\n\t\t\t\t\t\t(request) => request.call_id !== msg.call_id,\n\t\t\t\t\t),\n\t\t\t};\n\t\tcase \"warning\":\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\twarnings: [...next.warnings, msg.message],\n\t\t\t};\n\t\tcase \"error\":\n\t\t\treturn hadActiveTurn\n\t\t\t\t? next\n\t\t\t\t: {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\terrors: [...next.errors, msg.message],\n\t\t\t\t\t};\n\t\tdefault:\n\t\t\treturn next;\n\t}\n}\n\nexport function setRenderedThreadConnectionStatus(\n\tstate: RenderedThreadState,\n\tconnectionStatus: RenderedThreadConnectionStatus,\n): RenderedThreadState {\n\treturn {\n\t\t...state,\n\t\tconnection_status: connectionStatus,\n\t};\n}\n\nexport function fingerprintRolloutItems(items: readonly RolloutItem[]): string {\n\tconst last = items.at(-1);\n\treturn `${items.length}:${hashString(JSON.stringify(last ?? null))}`;\n}\n\nfunction withTurns(\n\tstate: RenderedThreadState,\n\tturns: readonly Turn[],\n): RenderedThreadState {\n\tconst nextTurns = turns.map((turn) => ({\n\t\t...turn,\n\t\titems: turn.items.map((item) => structuredClone(item)),\n\t\terror: turn.error ? { ...turn.error } : null,\n\t}));\n\treturn {\n\t\t...state,\n\t\tturns: nextTurns,\n\t\titems: flattenTurnsToTurnItems(nextTurns),\n\t};\n}\n\nfunction clearPendingForTurn(\n\tstate: RenderedThreadState,\n\tturnId: string,\n): RenderedThreadState {\n\treturn {\n\t\t...state,\n\t\tpending_request_user_input:\n\t\t\tstate.pending_request_user_input?.turn_id === turnId\n\t\t\t\t? null\n\t\t\t\t: state.pending_request_user_input,\n\t\tpending_dynamic_tool_call_requests:\n\t\t\tstate.pending_dynamic_tool_call_requests.filter(\n\t\t\t\t(request) => request.turn_id !== turnId,\n\t\t\t),\n\t\tpending_request_permissions:\n\t\t\tstate.pending_request_permissions?.turn_id === turnId\n\t\t\t\t? null\n\t\t\t\t: state.pending_request_permissions,\n\t};\n}\n\nfunction upsertDynamicToolCallRequest(\n\trequests: DynamicToolCallRequest[],\n\trequest: DynamicToolCallRequest,\n): DynamicToolCallRequest[] {\n\treturn [\n\t\t...requests.filter((item) => item.call_id !== request.call_id),\n\t\t{\n\t\t\tcall_id: request.call_id,\n\t\t\tturn_id: request.turn_id,\n\t\t\tstarted_at_ms: request.started_at_ms,\n\t\t\tnamespace: request.namespace ?? null,\n\t\t\ttool: request.tool,\n\t\t\targuments: request.arguments,\n\t\t},\n\t];\n}\n\nfunction hasActiveTurn(turns: readonly Turn[]): boolean {\n\treturn turns.some((turn) => turn.status === \"in_progress\");\n}\n\nfunction addUnique(values: string[], value: string): string[] {\n\treturn values.includes(value) ? values : [...values, value];\n}\n\nfunction hashString(value: string): string {\n\tlet hash = 0;\n\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\thash = (hash * 31 + value.charCodeAt(index)) >>> 0;\n\t}\n\n\treturn hash.toString(16);\n}\n","import type {\n\tClientRequest,\n\tRequestId,\n} from \"../../schema/typescript\";\n\nexport type ClientRequestSerializationScope =\n\t| { key: string; type: \"global\" }\n\t| { threadId: string; type: \"thread\" }\n\t| { path: string; type: \"threadPath\" }\n\t| { processId: string; type: \"commandExecProcess\" }\n\t| { processHandle: string; type: \"process\" }\n\t| { sessionId: string; type: \"fuzzyFileSearchSession\" }\n\t| { watchId: string; type: \"fsWatch\" }\n\t| { serverName: string; type: \"mcpOauth\" };\n\nexport function clientRequestId(request: ClientRequest): RequestId {\n\treturn request.id;\n}\n\nexport function clientRequestMethod(request: ClientRequest): string {\n\treturn request.method;\n}\n\nexport function clientRequestExperimentalReason(\n\trequest: ClientRequest | { method: string; params?: unknown },\n): string | null {\n\treturn (\n\t\tEXPERIMENTAL_METHOD_REASONS[request.method] ??\n\t\tclientRequestParamExperimentalReason(request.method, objectParams(request.params))\n\t);\n}\n\nexport function clientRequestSerializationScope(\n\trequest: ClientRequest | { method: string; params?: unknown },\n): ClientRequestSerializationScope | null {\n\tconst params = objectParams(request.params);\n\tswitch (request.method) {\n\t\tcase \"thread/resume\":\n\t\tcase \"thread/fork\":\n\t\t\treturn threadOrPathScope(params, \"threadId\", \"path\");\n\t\tcase \"thread/archive\":\n\t\tcase \"thread/unsubscribe\":\n\t\tcase \"thread/increment_elicitation\":\n\t\tcase \"thread/decrement_elicitation\":\n\t\tcase \"thread/name/set\":\n\t\tcase \"thread/goal/set\":\n\t\tcase \"thread/goal/get\":\n\t\tcase \"thread/goal/clear\":\n\t\tcase \"thread/metadata/update\":\n\t\tcase \"thread/memoryMode/set\":\n\t\tcase \"thread/unarchive\":\n\t\tcase \"thread/compact/start\":\n\t\tcase \"thread/shellCommand\":\n\t\tcase \"thread/approveGuardianDeniedAction\":\n\t\tcase \"thread/backgroundTerminals/clean\":\n\t\tcase \"thread/rollback\":\n\t\tcase \"thread/read\":\n\t\tcase \"thread/inject_items\":\n\t\tcase \"turn/start\":\n\t\tcase \"turn/steer\":\n\t\tcase \"turn/interrupt\":\n\t\tcase \"thread/realtime/start\":\n\t\tcase \"thread/realtime/appendAudio\":\n\t\tcase \"thread/realtime/appendText\":\n\t\tcase \"thread/realtime/stop\":\n\t\tcase \"review/start\":\n\t\tcase \"mcpServer/tool/call\":\n\t\t\treturn threadScope(params, \"threadId\", \"thread_id\");\n\t\tcase \"memory/reset\":\n\t\t\treturn globalScope(\"memory\");\n\t\tcase \"skills/list\":\n\t\tcase \"hooks/list\":\n\t\tcase \"marketplace/add\":\n\t\tcase \"marketplace/remove\":\n\t\tcase \"marketplace/upgrade\":\n\t\tcase \"plugin/list\":\n\t\tcase \"plugin/read\":\n\t\tcase \"plugin/skill/read\":\n\t\tcase \"plugin/share/save\":\n\t\tcase \"plugin/share/updateTargets\":\n\t\tcase \"plugin/share/list\":\n\t\tcase \"plugin/share/delete\":\n\t\tcase \"skills/config/write\":\n\t\tcase \"plugin/install\":\n\t\tcase \"plugin/uninstall\":\n\t\tcase \"experimentalFeature/list\":\n\t\tcase \"experimentalFeature/enablement/set\":\n\t\tcase \"windowsSandbox/readiness\":\n\t\tcase \"config/read\":\n\t\tcase \"externalAgentConfig/detect\":\n\t\tcase \"externalAgentConfig/import\":\n\t\tcase \"config/value/write\":\n\t\tcase \"config/batchWrite\":\n\t\tcase \"configRequirements/read\":\n\t\t\treturn globalScope(\"config\");\n\t\tcase \"device/key/create\":\n\t\tcase \"device/key/public\":\n\t\tcase \"device/key/sign\":\n\t\t\treturn globalScope(\"device-key\");\n\t\tcase \"mcpServer/oauth/login\":\n\t\t\treturn mcpOauthScope(params, \"name\");\n\t\tcase \"config/mcpServer/reload\":\n\t\tcase \"mcpServerStatus/list\":\n\t\t\treturn globalScope(\"mcp-registry\");\n\t\tcase \"mcpServer/resource/read\":\n\t\t\treturn optionalThreadScope(params, \"threadId\", \"thread_id\");\n\t\tcase \"windowsSandbox/setupStart\":\n\t\t\treturn globalScope(\"windows-sandbox-setup\");\n\t\tcase \"account/login/start\":\n\t\tcase \"account/login/cancel\":\n\t\tcase \"account/logout\":\n\t\tcase \"account/sendAddCreditsNudgeEmail\":\n\t\tcase \"account/read\":\n\t\tcase \"getAuthStatus\":\n\t\t\treturn globalScope(\"account-auth\");\n\t\tcase \"command/exec\":\n\t\t\treturn optionalCommandExecProcessScope(params, \"processId\", \"process_id\");\n\t\tcase \"command/exec/write\":\n\t\tcase \"command/exec/terminate\":\n\t\tcase \"command/exec/resize\":\n\t\t\treturn commandExecProcessScope(params, \"processId\", \"process_id\");\n\t\tcase \"process/spawn\":\n\t\tcase \"process/writeStdin\":\n\t\tcase \"process/kill\":\n\t\tcase \"process/resizePty\":\n\t\t\treturn processHandleScope(params, \"processHandle\", \"process_handle\");\n\t\tcase \"fuzzyFileSearch/sessionStart\":\n\t\tcase \"fuzzyFileSearch/sessionUpdate\":\n\t\tcase \"fuzzyFileSearch/sessionStop\":\n\t\t\treturn fuzzySessionScope(params, \"sessionId\", \"session_id\");\n\t\tcase \"fs/watch\":\n\t\tcase \"fs/unwatch\":\n\t\t\treturn fsWatchScope(params, \"watchId\", \"watch_id\");\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nconst EXPERIMENTAL_METHOD_REASONS: Record<string, string> = {\n\t\"collaborationMode/list\": \"collaborationMode/list\",\n\t\"fuzzyFileSearch/sessionStart\": \"fuzzyFileSearch/sessionStart\",\n\t\"fuzzyFileSearch/sessionStop\": \"fuzzyFileSearch/sessionStop\",\n\t\"fuzzyFileSearch/sessionUpdate\": \"fuzzyFileSearch/sessionUpdate\",\n\t\"memory/reset\": \"memory/reset\",\n\t\"mock/experimentalMethod\": \"mock/experimentalMethod\",\n\t\"process/kill\": \"process/kill\",\n\t\"process/resizePty\": \"process/resizePty\",\n\t\"process/spawn\": \"process/spawn\",\n\t\"process/writeStdin\": \"process/writeStdin\",\n\t\"thread/backgroundTerminals/clean\": \"thread/backgroundTerminals/clean\",\n\t\"thread/decrement_elicitation\": \"thread/decrement_elicitation\",\n\t\"thread/goal/clear\": \"thread/goal/clear\",\n\t\"thread/goal/get\": \"thread/goal/get\",\n\t\"thread/goal/set\": \"thread/goal/set\",\n\t\"thread/increment_elicitation\": \"thread/increment_elicitation\",\n\t\"thread/memoryMode/set\": \"thread/memoryMode/set\",\n\t\"thread/realtime/appendAudio\": \"thread/realtime/appendAudio\",\n\t\"thread/realtime/appendText\": \"thread/realtime/appendText\",\n\t\"thread/realtime/listVoices\": \"thread/realtime/listVoices\",\n\t\"thread/realtime/start\": \"thread/realtime/start\",\n\t\"thread/realtime/stop\": \"thread/realtime/stop\",\n\t\"thread/turns/list\": \"thread/turns/list\",\n};\n\nfunction clientRequestParamExperimentalReason(\n\tmethod: string,\n\tparams: Record<string, unknown>,\n): string | null {\n\tswitch (method) {\n\t\tcase \"thread/start\":\n\t\t\treturn (\n\t\t\t\tgranularApprovalReason(params) ??\n\t\t\t\tpresentFieldReason(params, \"thread/start.permissions\", \"permissions\") ??\n\t\t\t\tpresentFieldReason(params, \"thread/start.environments\", \"environments\") ??\n\t\t\t\tpresentFieldReason(params, \"thread/start.dynamicTools\", \"dynamicTools\", \"dynamic_tools\") ??\n\t\t\t\tpresentFieldReason(params, \"thread/start.mockExperimentalField\", \"mockExperimentalField\", \"mock_experimental_field\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/start.experimentalRawEvents\", \"experimentalRawEvents\", \"experimental_raw_events\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/start.persistFullHistory\", \"persistExtendedHistory\", \"persist_extended_history\")\n\t\t\t);\n\t\tcase \"thread/resume\":\n\t\t\treturn (\n\t\t\t\tpresentFieldReason(params, \"thread/resume.history\", \"history\") ??\n\t\t\t\tpresentFieldReason(params, \"thread/resume.path\", \"path\") ??\n\t\t\t\tgranularApprovalReason(params) ??\n\t\t\t\tpresentFieldReason(params, \"thread/resume.permissions\", \"permissions\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/resume.excludeTurns\", \"excludeTurns\", \"exclude_turns\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/resume.persistFullHistory\", \"persistExtendedHistory\", \"persist_extended_history\")\n\t\t\t);\n\t\tcase \"thread/fork\":\n\t\t\treturn (\n\t\t\t\tpresentFieldReason(params, \"thread/fork.path\", \"path\") ??\n\t\t\t\tgranularApprovalReason(params) ??\n\t\t\t\tpresentFieldReason(params, \"thread/fork.permissions\", \"permissions\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/fork.excludeTurns\", \"excludeTurns\", \"exclude_turns\") ??\n\t\t\t\ttruthyFieldReason(params, \"thread/fork.persistFullHistory\", \"persistExtendedHistory\", \"persist_extended_history\")\n\t\t\t);\n\t\tcase \"turn/start\":\n\t\t\treturn (\n\t\t\t\tpresentFieldReason(params, \"turn/start.responsesapiClientMetadata\", \"responsesapiClientMetadata\", \"responsesapi_client_metadata\") ??\n\t\t\t\tpresentFieldReason(params, \"turn/start.environments\", \"environments\") ??\n\t\t\t\tgranularApprovalReason(params) ??\n\t\t\t\tpresentFieldReason(params, \"turn/start.permissions\", \"permissions\") ??\n\t\t\t\tpresentFieldReason(params, \"turn/start.collaborationMode\", \"collaborationMode\", \"collaboration_mode\")\n\t\t\t);\n\t\tcase \"turn/steer\":\n\t\t\treturn presentFieldReason(params, \"turn/steer.responsesapiClientMetadata\", \"responsesapiClientMetadata\", \"responsesapi_client_metadata\");\n\t\tcase \"command/exec\":\n\t\t\treturn presentFieldReason(params, \"command/exec.permissionProfile\", \"permissionProfile\", \"permission_profile\");\n\t\tcase \"account/login/start\":\n\t\t\treturn params.type === \"chatgptAuthTokens\"\n\t\t\t\t? \"account/login/start.chatgptAuthTokens\"\n\t\t\t\t: null;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction granularApprovalReason(params: Record<string, unknown>): string | null {\n\tconst approvalPolicy = params.approvalPolicy ?? params.approval_policy;\n\treturn isRecord(approvalPolicy) && \"granular\" in approvalPolicy\n\t\t? \"askForApproval.granular\"\n\t\t: null;\n}\n\nfunction presentFieldReason(\n\tparams: Record<string, unknown>,\n\treason: string,\n\t...fields: string[]\n): string | null {\n\tfor (const field of fields) {\n\t\tif (params[field] !== undefined && params[field] !== null) {\n\t\t\treturn reason;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction truthyFieldReason(\n\tparams: Record<string, unknown>,\n\treason: string,\n\t...fields: string[]\n): string | null {\n\tfor (const field of fields) {\n\t\tif (params[field] === true) {\n\t\t\treturn reason;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction objectParams(value: unknown): Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction globalScope(key: string): ClientRequestSerializationScope {\n\treturn { key, type: \"global\" };\n}\n\nfunction threadScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst threadId = stringField(params, ...fields);\n\treturn threadId ? { threadId, type: \"thread\" } : null;\n}\n\nfunction optionalThreadScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\treturn threadScope(params, ...fields);\n}\n\nfunction threadOrPathScope(\n\tparams: Record<string, unknown>,\n\tthreadField: string,\n\tpathField: string,\n): ClientRequestSerializationScope | null {\n\tconst threadId = stringField(params, threadField);\n\tif (threadId) {\n\t\treturn { threadId, type: \"thread\" };\n\t}\n\tconst path = stringField(params, pathField);\n\tif (path) {\n\t\treturn { path, type: \"threadPath\" };\n\t}\n\treturn threadId === \"\" ? { threadId, type: \"thread\" } : null;\n}\n\nfunction optionalCommandExecProcessScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst processId = stringField(params, ...fields);\n\treturn processId ? { processId, type: \"commandExecProcess\" } : null;\n}\n\nfunction commandExecProcessScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst processId = stringField(params, ...fields);\n\treturn processId ? { processId, type: \"commandExecProcess\" } : null;\n}\n\nfunction processHandleScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst processHandle = stringField(params, ...fields);\n\treturn processHandle ? { processHandle, type: \"process\" } : null;\n}\n\nfunction fuzzySessionScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst sessionId = stringField(params, ...fields);\n\treturn sessionId ? { sessionId, type: \"fuzzyFileSearchSession\" } : null;\n}\n\nfunction fsWatchScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst watchId = stringField(params, ...fields);\n\treturn watchId ? { watchId, type: \"fsWatch\" } : null;\n}\n\nfunction mcpOauthScope(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): ClientRequestSerializationScope | null {\n\tconst serverName = stringField(params, ...fields);\n\treturn serverName ? { serverName, type: \"mcpOauth\" } : null;\n}\n\nfunction stringField(\n\tparams: Record<string, unknown>,\n\t...fields: string[]\n): string | null {\n\tfor (const field of fields) {\n\t\tconst value = params[field];\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn null;\n}\n","import type {\n\tClientNotification,\n\tClientRequest,\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../../app-server-protocol/schema/typescript\";\nimport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingMessage,\n\tOutgoingResponse,\n\tQueuedOutgoingMessage,\n\tResult,\n} from \"../outgoing_message\";\n\nexport type ConnectionOrigin =\n\t| \"stdio\"\n\t| \"inProcess\"\n\t| \"webSocket\"\n\t| \"remoteControl\";\n\nexport type JSONRPCRequest = {\n\tid: RequestId;\n\tmethod: string;\n\tparams?: unknown;\n};\n\nexport type JSONRPCNotification = {\n\tmethod: string;\n\tparams?: unknown;\n};\n\nexport type JSONRPCResponse = {\n\tid: RequestId;\n\tresult: Result;\n};\n\nexport type JSONRPCError = {\n\terror: JSONRPCErrorError;\n\tid: RequestId | null;\n};\n\nexport type JSONRPCMessage =\n\t| JSONRPCRequest\n\t| JSONRPCNotification\n\t| JSONRPCResponse\n\t| JSONRPCError;\n\nexport type TransportEvent =\n\t| {\n\t\t\tconnectionId: ConnectionId;\n\t\t\torigin: ConnectionOrigin;\n\t\t\ttype: \"connection_opened\";\n\t }\n\t| { connectionId: ConnectionId; type: \"connection_closed\" }\n\t| {\n\t\t\tconnectionId: ConnectionId;\n\t\t\tmessage: JSONRPCMessage;\n\t\t\ttype: \"incoming_message\";\n\t };\n\nexport type ParsedServerTransportMessage =\n\t| { request: ClientRequest; type: \"client_request\" }\n\t| { notification: ClientNotification; type: \"client_notification\" }\n\t| { response: JSONRPCResponse; type: \"response\" }\n\t| { error: JSONRPCError; type: \"error\" };\n\nexport type ParsedClientTransportMessage =\n\t| { request: ServerRequest; type: \"server_request\" }\n\t| { notification: ServerNotification; type: \"server_notification\" }\n\t| { response: JSONRPCResponse; type: \"response\" }\n\t| { error: JSONRPCError; type: \"error\" };\n\nexport type ParsedTransportPayload<T> =\n\t| { message: T; type: \"ok\" }\n\t| { error: JSONRPCErrorError; id: RequestId | null; type: \"invalid\" };\n\nexport function parseJsonRpcTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<JSONRPCMessage> {\n\tlet value: unknown;\n\tif (typeof payload === \"string\") {\n\t\ttry {\n\t\t\tvalue = JSON.parse(payload);\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcParseError(\"Parse error\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t} else if (payload instanceof ArrayBuffer || ArrayBuffer.isView(payload)) {\n\t\tconst bytes = payload instanceof ArrayBuffer\n\t\t\t? new Uint8Array(payload)\n\t\t\t: new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength);\n\t\ttry {\n\t\t\tvalue = JSON.parse(new TextDecoder().decode(bytes));\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcParseError(\"Parse error\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t} else {\n\t\tvalue = payload;\n\t}\n\n\treturn parseJsonRpcMessage(value);\n}\n\nexport function parseJsonRpcMessage(\n\tvalue: unknown,\n): ParsedTransportPayload<JSONRPCMessage> {\n\tif (!isRecord(value)) {\n\t\treturn {\n\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC message\"),\n\t\t\tid: null,\n\t\t\ttype: \"invalid\",\n\t\t};\n\t}\n\n\tconst candidateId = requestIdFromValue(value.id);\n\tconst id = candidateId ?? null;\n\tif (typeof value.method === \"string\") {\n\t\tif (candidateId !== null) {\n\t\t\treturn {\n\t\t\t\tmessage: jsonRpcRequest(value.method, candidateId, value.params),\n\t\t\t\ttype: \"ok\",\n\t\t\t};\n\t\t}\n\t\tif (Object.prototype.hasOwnProperty.call(value, \"id\")) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC request id\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: jsonRpcNotification(value.method, value.params),\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(value, \"error\")) {\n\t\tif (!isJsonRpcErrorError(value.error)) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC error object\"),\n\t\t\t\tid,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: { error: value.error, id },\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(value, \"result\")) {\n\t\tif (candidateId === null) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC response id\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: { id: candidateId, result: value.result },\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\treturn {\n\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC message\"),\n\t\tid,\n\t\ttype: \"invalid\",\n\t};\n}\n\nexport function parseServerTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<ParsedServerTransportMessage> {\n\tconst parsed = parseJsonRpcTransportPayload(payload);\n\tif (parsed.type === \"invalid\") {\n\t\treturn parsed;\n\t}\n\treturn {\n\t\tmessage: serverTransportMessage(parsed.message),\n\t\ttype: \"ok\",\n\t};\n}\n\nexport function parseClientTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<ParsedClientTransportMessage> {\n\tconst parsed = parseJsonRpcTransportPayload(payload);\n\tif (parsed.type === \"invalid\") {\n\t\treturn parsed;\n\t}\n\treturn {\n\t\tmessage: clientTransportMessage(parsed.message),\n\t\ttype: \"ok\",\n\t};\n}\n\nexport function serializeOutgoingMessage(message: OutgoingMessage): string {\n\treturn JSON.stringify(message);\n}\n\nexport function serializeJsonRpcResponse(\n\tid: RequestId,\n\tresult: Result,\n): string {\n\treturn serializeOutgoingMessage({ id, result } satisfies OutgoingResponse);\n}\n\nexport function serializeJsonRpcError(\n\tid: RequestId | null,\n\terror: JSONRPCErrorError,\n): string {\n\treturn JSON.stringify({ error, id } satisfies JSONRPCError);\n}\n\nexport function queuedOutgoingMessage(\n\tmessage: OutgoingMessage,\n\twriteComplete?: () => void,\n): QueuedOutgoingMessage {\n\treturn { message, writeComplete };\n}\n\nexport function jsonRpcParseError(message: string): JSONRPCErrorError {\n\treturn { code: -32700, message };\n}\n\nexport function jsonRpcInvalidRequestError(message: string): JSONRPCErrorError {\n\treturn { code: -32600, message };\n}\n\nexport function jsonRpcInternalError(message: string): JSONRPCErrorError {\n\treturn { code: -32603, message };\n}\n\nfunction serverTransportMessage(\n\tmessage: JSONRPCMessage,\n): ParsedServerTransportMessage {\n\tif (isRequest(message)) {\n\t\treturn { request: message as ClientRequest, type: \"client_request\" };\n\t}\n\tif (isNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message as ClientNotification,\n\t\t\ttype: \"client_notification\",\n\t\t};\n\t}\n\tif (isError(message)) {\n\t\treturn { error: message, type: \"error\" };\n\t}\n\treturn { response: message, type: \"response\" };\n}\n\nfunction clientTransportMessage(\n\tmessage: JSONRPCMessage,\n): ParsedClientTransportMessage {\n\tif (isRequest(message)) {\n\t\treturn { request: message as ServerRequest, type: \"server_request\" };\n\t}\n\tif (isNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message as ServerNotification,\n\t\t\ttype: \"server_notification\",\n\t\t};\n\t}\n\tif (isError(message)) {\n\t\treturn { error: message, type: \"error\" };\n\t}\n\treturn { response: message, type: \"response\" };\n}\n\nfunction jsonRpcRequest(\n\tmethod: string,\n\tid: RequestId,\n\tparams: unknown,\n): JSONRPCRequest {\n\treturn params === undefined ? { id, method } : { id, method, params };\n}\n\nfunction jsonRpcNotification(\n\tmethod: string,\n\tparams: unknown,\n): JSONRPCNotification {\n\treturn params === undefined ? { method } : { method, params };\n}\n\nfunction isRequest(message: JSONRPCMessage): message is JSONRPCRequest {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\tObject.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isNotification(\n\tmessage: JSONRPCMessage,\n): message is JSONRPCNotification {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\t!Object.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isError(message: JSONRPCMessage): message is JSONRPCError {\n\treturn Object.prototype.hasOwnProperty.call(message, \"error\");\n}\n\nfunction requestIdFromValue(value: unknown): RequestId | null {\n\treturn typeof value === \"string\" || typeof value === \"number\" ? value : null;\n}\n\nfunction isJsonRpcErrorError(value: unknown): value is JSONRPCErrorError {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value.code === \"number\" &&\n\t\ttypeof value.message === \"string\"\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type {\n\tClientRequest,\n\tInitializeParams,\n\tInitializeResponse,\n\tRequestId,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tCollaborationModeListParams,\n\tCollaborationModeListResponse,\n\tListMcpServerStatusParams,\n\tListMcpServerStatusResponse,\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tMcpServerRefreshResponse,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tThreadArchiveParams,\n\tThreadArchiveResponse,\n\tThreadCompactStartParams,\n\tThreadCompactStartResponse,\n\tThreadListParams,\n\tThreadListResponse,\n\tThreadMetadataUpdateParams,\n\tThreadMetadataUpdateResponse,\n\tThreadReadParams,\n\tThreadReadResponse,\n\tThreadResumeParams,\n\tThreadResumeResponse,\n\tThreadSetNameParams,\n\tThreadSetNameResponse,\n\tThreadStartParams,\n\tThreadStartResponse,\n\tThreadUnarchiveParams,\n\tThreadUnarchiveResponse,\n\tTurnInterruptParams,\n\tTurnInterruptResponse,\n\tTurnStartParams,\n\tTurnStartResponse,\n\tTurnSteerParams,\n\tTurnSteerResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport type {\n\tAppServerEvent,\n\tJSONRPCErrorError,\n\tResult,\n} from \"./lib\";\n\nexport type CodexAppServer = {\n\tclose?(): void;\n\tevents?(): AsyncIterable<AppServerEvent>;\n\tnextEvent?(): Promise<AppServerEvent | null>;\n\trejectServerRequest(\n\t\trequestId: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void>;\n\trequest(request: ClientRequest): Promise<unknown>;\n\trequestTyped<T>(request: ClientRequest): Promise<T>;\n\tresolveServerRequest(requestId: RequestId, result: Result): Promise<void>;\n};\n\nexport class AppServerSession {\n\tprivate nextRequestIdValue = 1;\n\n\tconstructor(private readonly client: CodexAppServer) {}\n\n\tnextRequestId(): RequestId {\n\t\tconst requestId = this.nextRequestIdValue;\n\t\tthis.nextRequestIdValue += 1;\n\t\treturn requestId;\n\t}\n\n\tnextEvent(): Promise<AppServerEvent | null> {\n\t\treturn this.client.nextEvent?.() ?? Promise.resolve(null);\n\t}\n\n\tevents(): AsyncIterable<AppServerEvent> | null {\n\t\treturn this.client.events?.() ?? null;\n\t}\n\n\trequestTyped<T>(request: ClientRequest): Promise<T> {\n\t\treturn this.client.requestTyped<T>(request);\n\t}\n\n\tinitialize(params: InitializeParams = defaultInitializeParams()): Promise<InitializeResponse> {\n\t\treturn this.requestTyped<InitializeResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"initialize\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadStart(params: ThreadStartParams): Promise<ThreadStartResponse> {\n\t\treturn this.requestTyped<ThreadStartResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/start\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadResume(params: ThreadResumeParams): Promise<ThreadResumeResponse> {\n\t\treturn this.requestTyped<ThreadResumeResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/resume\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadList(params: ThreadListParams = {}): Promise<ThreadListResponse> {\n\t\treturn this.requestTyped<ThreadListResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/list\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tcollaborationModeList(\n\t\tparams: CollaborationModeListParams = {},\n\t): Promise<CollaborationModeListResponse> {\n\t\treturn this.requestTyped<CollaborationModeListResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"collaborationMode/list\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tconfigMcpServerReload(): Promise<McpServerRefreshResponse> {\n\t\treturn this.requestTyped<McpServerRefreshResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"config/mcpServer/reload\",\n\t\t\tparams: undefined,\n\t\t});\n\t}\n\n\tmcpServerStatusList(\n\t\tparams: ListMcpServerStatusParams = {},\n\t): Promise<ListMcpServerStatusResponse> {\n\t\treturn this.requestTyped<ListMcpServerStatusResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"mcpServerStatus/list\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tmcpResourceRead(params: McpResourceReadParams): Promise<McpResourceReadResponse> {\n\t\treturn this.requestTyped<McpResourceReadResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"mcpServer/resource/read\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tmcpServerToolCall(\n\t\tparams: McpServerToolCallParams,\n\t): Promise<McpServerToolCallResponse> {\n\t\treturn this.requestTyped<McpServerToolCallResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"mcpServer/tool/call\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tmcpServerOauthLogin(\n\t\tparams: McpServerOauthLoginParams,\n\t): Promise<McpServerOauthLoginResponse> {\n\t\treturn this.requestTyped<McpServerOauthLoginResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"mcpServer/oauth/login\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadRead(params: ThreadReadParams): Promise<ThreadReadResponse> {\n\t\treturn this.requestTyped<ThreadReadResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/read\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadNameSet(params: ThreadSetNameParams): Promise<ThreadSetNameResponse> {\n\t\treturn this.requestTyped<ThreadSetNameResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/name/set\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadArchive(params: ThreadArchiveParams): Promise<ThreadArchiveResponse> {\n\t\treturn this.requestTyped<ThreadArchiveResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/archive\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadUnarchive(params: ThreadUnarchiveParams): Promise<ThreadUnarchiveResponse> {\n\t\treturn this.requestTyped<ThreadUnarchiveResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/unarchive\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadMetadataUpdate(\n\t\tparams: ThreadMetadataUpdateParams,\n\t): Promise<ThreadMetadataUpdateResponse> {\n\t\treturn this.requestTyped<ThreadMetadataUpdateResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/metadata/update\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tturnStart(params: TurnStartParams): Promise<TurnStartResponse> {\n\t\treturn this.requestTyped<TurnStartResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"turn/start\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tturnSteer(params: TurnSteerParams): Promise<TurnSteerResponse> {\n\t\treturn this.requestTyped<TurnSteerResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"turn/steer\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tturnInterrupt(params: TurnInterruptParams): Promise<TurnInterruptResponse> {\n\t\treturn this.requestTyped<TurnInterruptResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"turn/interrupt\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tthreadCompactStart(\n\t\tparams: ThreadCompactStartParams,\n\t): Promise<ThreadCompactStartResponse> {\n\t\treturn this.requestTyped<ThreadCompactStartResponse>({\n\t\t\tid: this.nextRequestId(),\n\t\t\tmethod: \"thread/compact/start\",\n\t\t\tparams,\n\t\t});\n\t}\n\n\tresolveServerRequest(requestId: RequestId, result: Result): Promise<void> {\n\t\treturn this.client.resolveServerRequest(requestId, result);\n\t}\n\n\trejectServerRequest(\n\t\trequestId: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void> {\n\t\treturn this.client.rejectServerRequest(requestId, error);\n\t}\n}\n\nfunction defaultInitializeParams(): InitializeParams {\n\treturn {\n\t\tcapabilities: {\n\t\t\texperimentalApi: false,\n\t\t\toptOutNotificationMethods: [],\n\t\t},\n\t\tclientInfo: {\n\t\t\tname: \"codex-js\",\n\t\t\ttitle: null,\n\t\t\tversion: \"0.0.0\",\n\t\t},\n\t};\n}\n","import type {\n\tRequestId,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tCommandExecutionRequestApprovalResponse,\n\tDynamicToolCallResponse,\n\tFileChangeRequestApprovalResponse,\n\tMcpServerElicitationRequestResponse,\n\tPermissionsRequestApprovalResponse,\n\tToolRequestUserInputResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport type { Result } from \"./lib\";\n\nexport type AppServerRequestResolution = {\n\trequestId: RequestId;\n\tresult: Result;\n};\n\nexport type UnsupportedAppServerRequest = {\n\tmessage: string;\n\trequestId: RequestId;\n};\n\nexport type ResolvedAppServerRequest =\n\t| { id: string; type: \"exec_approval\" }\n\t| { id: string; type: \"file_change_approval\" }\n\t| { id: string; type: \"permissions_approval\" }\n\t| { itemId: string; type: \"user_input\" }\n\t| { requestId: RequestId; serverName: string; type: \"mcp_elicitation\" }\n\t| { callId: string; type: \"dynamic_tool_call\" };\n\ntype PendingUserInputRequest = {\n\titemId: string;\n\trequestId: RequestId;\n};\n\ntype McpRequestKey = `${string}:${string | number}`;\n\nexport class PendingAppServerRequests {\n\tprivate readonly dynamicToolCalls = new Map<string, RequestId>();\n\tprivate readonly execApprovals = new Map<string, RequestId>();\n\tprivate readonly fileChangeApprovals = new Map<string, RequestId>();\n\tprivate readonly mcpRequests = new Map<McpRequestKey, RequestId>();\n\tprivate readonly permissionsApprovals = new Map<string, RequestId>();\n\tprivate readonly userInputs = new Map<string, PendingUserInputRequest[]>();\n\n\tclear(): void {\n\t\tthis.dynamicToolCalls.clear();\n\t\tthis.execApprovals.clear();\n\t\tthis.fileChangeApprovals.clear();\n\t\tthis.mcpRequests.clear();\n\t\tthis.permissionsApprovals.clear();\n\t\tthis.userInputs.clear();\n\t}\n\n\tnoteServerRequest(request: ServerRequest): UnsupportedAppServerRequest | null {\n\t\tswitch (request.method) {\n\t\t\tcase \"item/commandExecution/requestApproval\": {\n\t\t\t\tconst id = request.params.approvalId ?? request.params.itemId;\n\t\t\t\tthis.execApprovals.set(id, request.id);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tcase \"item/fileChange/requestApproval\":\n\t\t\t\tthis.fileChangeApprovals.set(request.params.itemId, request.id);\n\t\t\t\treturn null;\n\t\t\tcase \"item/permissions/requestApproval\":\n\t\t\t\tthis.permissionsApprovals.set(request.params.itemId, request.id);\n\t\t\t\treturn null;\n\t\t\tcase \"item/tool/requestUserInput\": {\n\t\t\t\tconst queue = this.userInputs.get(request.params.turnId) ?? [];\n\t\t\t\tqueue.push({\n\t\t\t\t\titemId: request.params.itemId,\n\t\t\t\t\trequestId: request.id,\n\t\t\t\t});\n\t\t\t\tthis.userInputs.set(request.params.turnId, queue);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tcase \"mcpServer/elicitation/request\":\n\t\t\t\tthis.mcpRequests.set(\n\t\t\t\t\tmcpRequestKey(request.params.serverName, request.id),\n\t\t\t\t\trequest.id,\n\t\t\t\t);\n\t\t\t\treturn null;\n\t\t\tcase \"item/tool/call\":\n\t\t\t\tthis.dynamicToolCalls.set(request.params.callId, request.id);\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\tmessage: `Unsupported Codex app-server request: ${request.method}`,\n\t\t\t\t\trequestId: request.id,\n\t\t\t\t};\n\t\t}\n\t}\n\n\ttakeCommandExecutionApprovalResolution(\n\t\tid: string,\n\t\tresponse: CommandExecutionRequestApprovalResponse,\n\t): AppServerRequestResolution | null {\n\t\treturn takeMapResolution(this.execApprovals, id, response);\n\t}\n\n\ttakeFileChangeApprovalResolution(\n\t\tid: string,\n\t\tresponse: FileChangeRequestApprovalResponse,\n\t): AppServerRequestResolution | null {\n\t\treturn takeMapResolution(this.fileChangeApprovals, id, response);\n\t}\n\n\ttakePermissionsApprovalResolution(\n\t\tid: string,\n\t\tresponse: PermissionsRequestApprovalResponse,\n\t): AppServerRequestResolution | null {\n\t\treturn takeMapResolution(this.permissionsApprovals, id, response);\n\t}\n\n\ttakeDynamicToolCallResolution(\n\t\tcallId: string,\n\t\tresponse: DynamicToolCallResponse,\n\t): AppServerRequestResolution | null {\n\t\treturn takeMapResolution(this.dynamicToolCalls, callId, response);\n\t}\n\n\ttakeUserInputResolution(\n\t\tturnId: string,\n\t\tresponse: ToolRequestUserInputResponse,\n\t): AppServerRequestResolution | null {\n\t\tconst pending = this.popUserInputRequestForTurn(turnId);\n\t\treturn pending ? { requestId: pending.requestId, result: response } : null;\n\t}\n\n\ttakeMcpElicitationResolution(\n\t\tserverName: string,\n\t\trequestId: RequestId,\n\t\tresponse: McpServerElicitationRequestResponse,\n\t): AppServerRequestResolution | null {\n\t\treturn takeMapResolution(\n\t\t\tthis.mcpRequests,\n\t\t\tmcpRequestKey(serverName, requestId),\n\t\t\tresponse,\n\t\t);\n\t}\n\n\tresolveNotification(requestId: RequestId): ResolvedAppServerRequest | null {\n\t\tconst execApproval = removeValue(this.execApprovals, requestId);\n\t\tif (execApproval) {\n\t\t\treturn { id: execApproval, type: \"exec_approval\" };\n\t\t}\n\t\tconst fileChangeApproval = removeValue(\n\t\t\tthis.fileChangeApprovals,\n\t\t\trequestId,\n\t\t);\n\t\tif (fileChangeApproval) {\n\t\t\treturn { id: fileChangeApproval, type: \"file_change_approval\" };\n\t\t}\n\t\tconst permissionsApproval = removeValue(\n\t\t\tthis.permissionsApprovals,\n\t\t\trequestId,\n\t\t);\n\t\tif (permissionsApproval) {\n\t\t\treturn { id: permissionsApproval, type: \"permissions_approval\" };\n\t\t}\n\t\tconst userInput = this.removeUserInputRequest(requestId);\n\t\tif (userInput) {\n\t\t\treturn { itemId: userInput.itemId, type: \"user_input\" };\n\t\t}\n\t\tconst dynamicToolCall = removeValue(this.dynamicToolCalls, requestId);\n\t\tif (dynamicToolCall) {\n\t\t\treturn { callId: dynamicToolCall, type: \"dynamic_tool_call\" };\n\t\t}\n\t\tconst mcpRequest = removeValue(this.mcpRequests, requestId);\n\t\tif (mcpRequest) {\n\t\t\tconst [serverName] = mcpRequest.split(\":\");\n\t\t\treturn { requestId, serverName, type: \"mcp_elicitation\" };\n\t\t}\n\t\treturn null;\n\t}\n\n\tcontainsServerRequest(request: ServerRequest): boolean {\n\t\treturn this.requestIds().some((requestId) => requestId === request.id);\n\t}\n\n\tprivate requestIds(): RequestId[] {\n\t\treturn [\n\t\t\t...this.execApprovals.values(),\n\t\t\t...this.fileChangeApprovals.values(),\n\t\t\t...this.permissionsApprovals.values(),\n\t\t\t...this.dynamicToolCalls.values(),\n\t\t\t...this.mcpRequests.values(),\n\t\t\t...Array.from(this.userInputs.values()).flatMap((queue) =>\n\t\t\t\tqueue.map((request) => request.requestId),\n\t\t\t),\n\t\t];\n\t}\n\n\tprivate popUserInputRequestForTurn(\n\t\tturnId: string,\n\t): PendingUserInputRequest | null {\n\t\tconst queue = this.userInputs.get(turnId);\n\t\tconst pending = queue?.shift() ?? null;\n\t\tif (queue && queue.length === 0) {\n\t\t\tthis.userInputs.delete(turnId);\n\t\t}\n\t\treturn pending;\n\t}\n\n\tprivate removeUserInputRequest(\n\t\trequestId: RequestId,\n\t): PendingUserInputRequest | null {\n\t\tfor (const [turnId, queue] of this.userInputs) {\n\t\t\tconst index = queue.findIndex((pending) => pending.requestId === requestId);\n\t\t\tif (index === -1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [pending] = queue.splice(index, 1);\n\t\t\tif (queue.length === 0) {\n\t\t\t\tthis.userInputs.delete(turnId);\n\t\t\t}\n\t\t\treturn pending ?? null;\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction takeMapResolution<K>(\n\tmap: Map<K, RequestId>,\n\tkey: K,\n\tresult: Result,\n): AppServerRequestResolution | null {\n\tconst requestId = map.get(key);\n\tif (requestId === undefined) {\n\t\treturn null;\n\t}\n\tmap.delete(key);\n\treturn { requestId, result };\n}\n\nfunction removeValue<K>(map: Map<K, RequestId>, value: RequestId): K | null {\n\tfor (const [key, current] of map) {\n\t\tif (current === value) {\n\t\t\tmap.delete(key);\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction mcpRequestKey(\n\tserverName: string,\n\trequestId: RequestId,\n): McpRequestKey {\n\treturn `${serverName}:${requestId}`;\n}\n","import type {\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tThread,\n\tThreadItem,\n\tThreadTokenUsage,\n\tTurn,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport type { RateLimitSnapshot } from \"../../app-server-protocol/schema/typescript/v2/RateLimitSnapshot\";\nimport type { RenderedThreadConnectionStatus } from \"../../core/src/rendered-thread\";\n\nexport type ThreadBufferedEvent =\n\t| { notification: ServerNotification; type: \"notification\" }\n\t| { request: ServerRequest; type: \"request\" };\n\nexport type ServerNotificationThreadTarget =\n\t| { threadId: string; type: \"thread\" }\n\t| { threadId: string; type: \"invalid_thread_id\" }\n\t| { type: \"global\" };\n\nexport type ThreadEventSnapshot = {\n\tactiveTurnIds: string[];\n\taccountRateLimits: RateLimitSnapshot | null;\n\tbufferedEvents: ThreadBufferedEvent[];\n\tconnectionStatus: RenderedThreadConnectionStatus;\n\terrors: string[];\n\tpendingRequests: ServerRequest[];\n\tresolvedRequestIds: RequestId[];\n\tthread: Thread | null;\n\ttokenUsage: ThreadTokenUsageSnapshot | null;\n\tturns: Turn[];\n\twarnings: string[];\n};\n\nexport type ThreadTokenUsageSnapshot = {\n\tthreadId: string;\n\ttokenUsage: ThreadTokenUsage;\n\tturnId: string;\n\tupdatedAt: string;\n};\n\nexport class ThreadEventStore {\n\tprivate accountRateLimits: RateLimitSnapshot | null = null;\n\tprivate activeTurnIds = new Set<string>();\n\tprivate bufferedEvents: ThreadBufferedEvent[] = [];\n\tprivate connectionStatus: RenderedThreadConnectionStatus = \"idle\";\n\tprivate errors: string[] = [];\n\tprivate pendingRequests = new Map<RequestId, ServerRequest>();\n\tprivate resolvedRequestIds: RequestId[] = [];\n\tprivate thread: Thread | null = null;\n\tprivate tokenUsage: ThreadTokenUsageSnapshot | null = null;\n\tprivate turns: Turn[] = [];\n\tprivate warnings: string[] = [];\n\n\tstatic fromThread(thread: Thread): ThreadEventStore {\n\t\tconst store = new ThreadEventStore();\n\t\tstore.setThread(thread);\n\t\treturn store;\n\t}\n\n\tapplyNotification(notification: ServerNotification): ThreadEventSnapshot {\n\t\tapplyServerNotificationToThreadEventStore(this, notification);\n\t\treturn this.snapshot();\n\t}\n\n\tapplyRequest(request: ServerRequest): ThreadEventSnapshot {\n\t\tapplyServerRequestToThreadEventStore(this, request);\n\t\treturn this.snapshot();\n\t}\n\n\tsetConnectionStatus(status: RenderedThreadConnectionStatus): ThreadEventSnapshot {\n\t\tthis.connectionStatus = status;\n\t\treturn this.snapshot();\n\t}\n\n\tsetThread(thread: Thread): ThreadEventSnapshot {\n\t\tthis.thread = cloneThread(thread);\n\t\tthis.turns = thread.turns.map(cloneTurn);\n\t\tthis.activeTurnIds = new Set(\n\t\t\tthis.turns\n\t\t\t\t.filter((turn) => turn.status === \"inProgress\")\n\t\t\t\t.map((turn) => turn.id),\n\t\t);\n\t\treturn this.snapshot();\n\t}\n\n\tsnapshot(): ThreadEventSnapshot {\n\t\treturn {\n\t\t\tactiveTurnIds: [...this.activeTurnIds],\n\t\t\taccountRateLimits: this.accountRateLimits ? { ...this.accountRateLimits } : null,\n\t\t\tbufferedEvents: [...this.bufferedEvents],\n\t\t\tconnectionStatus: this.connectionStatus,\n\t\t\terrors: [...this.errors],\n\t\t\tpendingRequests: [...this.pendingRequests.values()],\n\t\t\tresolvedRequestIds: [...this.resolvedRequestIds],\n\t\t\tthread: this.thread ? cloneThread(this.thread) : null,\n\t\t\ttokenUsage: this.tokenUsage\n\t\t\t\t? {\n\t\t\t\t\t\t...this.tokenUsage,\n\t\t\t\t\t\ttokenUsage: cloneThreadTokenUsage(this.tokenUsage.tokenUsage),\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tturns: this.turns.map(cloneTurn),\n\t\t\twarnings: [...this.warnings],\n\t\t};\n\t}\n\n\tnoteNotification(notification: ServerNotification): void {\n\t\tthis.bufferedEvents = [...this.bufferedEvents, { notification, type: \"notification\" }];\n\t\tswitch (notification.method) {\n\t\t\tcase \"thread/started\":\n\t\t\t\tthis.setThread(notification.params.thread);\n\t\t\t\treturn;\n\t\t\tcase \"thread/status/changed\":\n\t\t\t\tif (this.thread) {\n\t\t\t\t\tthis.thread = { ...this.thread, status: notification.params.status };\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"thread/name/updated\":\n\t\t\t\tif (this.thread) {\n\t\t\t\t\tthis.thread = { ...this.thread, name: notification.params.threadName ?? null };\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"thread/archived\":\n\t\t\tcase \"thread/unarchived\":\n\t\t\tcase \"thread/closed\":\n\t\t\tcase \"thread/goal/updated\":\n\t\t\tcase \"thread/goal/cleared\":\n\t\t\t\treturn;\n\t\t\tcase \"thread/tokenUsage/updated\":\n\t\t\t\tthis.tokenUsage = {\n\t\t\t\t\tthreadId: notification.params.threadId,\n\t\t\t\t\ttokenUsage: cloneThreadTokenUsage(notification.params.tokenUsage),\n\t\t\t\t\tturnId: notification.params.turnId,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\tcase \"turn/started\":\n\t\t\t\tthis.upsertTurn(notification.params.turn);\n\t\t\t\tthis.activeTurnIds.add(notification.params.turn.id);\n\t\t\t\treturn;\n\t\t\tcase \"turn/diff/updated\":\n\t\t\tcase \"turn/plan/updated\":\n\t\t\t\tthis.ensureTurn(notification.params.turnId);\n\t\t\t\treturn;\n\t\t\tcase \"turn/completed\":\n\t\t\t\tthis.upsertTurn(notification.params.turn);\n\t\t\t\tthis.activeTurnIds.delete(notification.params.turn.id);\n\t\t\t\tif (notification.params.turn.error?.message) {\n\t\t\t\t\tthis.errors = appendUnique(this.errors, notification.params.turn.error.message);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"item/started\":\n\t\t\tcase \"item/completed\":\n\t\t\t\tthis.upsertItem(notification.params.turnId, notification.params.item);\n\t\t\t\treturn;\n\t\t\tcase \"item/agentMessage/delta\":\n\t\t\t\tthis.applyAgentMessageDelta(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.delta,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/plan/delta\":\n\t\t\t\tthis.applyPlanDelta(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.delta,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/reasoning/summaryPartAdded\":\n\t\t\t\tthis.applyReasoningSummaryPartAdded(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.summaryIndex,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/reasoning/summaryTextDelta\":\n\t\t\t\tthis.applyReasoningSummaryTextDelta(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.summaryIndex,\n\t\t\t\t\tnotification.params.delta,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/reasoning/textDelta\":\n\t\t\t\tthis.applyReasoningTextDelta(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.contentIndex,\n\t\t\t\t\tnotification.params.delta,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/commandExecution/outputDelta\":\n\t\t\t\tthis.applyCommandOutputDelta(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.delta,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/fileChange/outputDelta\":\n\t\t\t\tthis.ensureTurn(notification.params.turnId);\n\t\t\t\treturn;\n\t\t\tcase \"item/fileChange/patchUpdated\":\n\t\t\t\tthis.applyFileChangePatchUpdated(\n\t\t\t\t\tnotification.params.turnId,\n\t\t\t\t\tnotification.params.itemId,\n\t\t\t\t\tnotification.params.changes,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"item/mcpToolCall/progress\":\n\t\t\tcase \"item/commandExecution/terminalInteraction\":\n\t\t\tcase \"command/exec/outputDelta\":\n\t\t\tcase \"process/outputDelta\":\n\t\t\tcase \"process/exited\":\n\t\t\tcase \"rawResponseItem/completed\":\n\t\t\tcase \"hook/started\":\n\t\t\tcase \"hook/completed\":\n\t\t\tcase \"item/autoApprovalReview/started\":\n\t\t\tcase \"item/autoApprovalReview/completed\":\n\t\t\t\treturn;\n\t\t\tcase \"thread/compacted\":\n\t\t\t\tthis.upsertItem(notification.params.turnId, {\n\t\t\t\t\tid: `compacted-${notification.params.turnId}`,\n\t\t\t\t\ttype: \"contextCompaction\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"serverRequest/resolved\":\n\t\t\t\tthis.pendingRequests.delete(notification.params.requestId);\n\t\t\t\tthis.resolvedRequestIds = appendUnique(\n\t\t\t\t\tthis.resolvedRequestIds,\n\t\t\t\t\tnotification.params.requestId,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"warning\":\n\t\t\t\tthis.warnings = appendUnique(this.warnings, notification.params.message);\n\t\t\t\treturn;\n\t\t\tcase \"error\":\n\t\t\t\tthis.errors = appendUnique(this.errors, notification.params.error.message);\n\t\t\t\treturn;\n\t\t\tcase \"guardianWarning\":\n\t\t\t\tthis.warnings = appendUnique(this.warnings, notification.params.message);\n\t\t\t\treturn;\n\t\t\tcase \"deprecationNotice\":\n\t\t\t\tthis.warnings = appendUnique(this.warnings, notification.params.summary);\n\t\t\t\treturn;\n\t\t\tcase \"configWarning\":\n\t\t\t\tthis.warnings = appendUnique(this.warnings, notification.params.summary);\n\t\t\t\treturn;\n\t\t\tcase \"account/rateLimits/updated\":\n\t\t\t\tthis.accountRateLimits = { ...notification.params.rateLimits };\n\t\t\t\treturn;\n\t\t\tcase \"thread/realtime/started\":\n\t\t\tcase \"thread/realtime/itemAdded\":\n\t\t\tcase \"thread/realtime/transcript/delta\":\n\t\t\tcase \"thread/realtime/transcript/done\":\n\t\t\tcase \"thread/realtime/outputAudio/delta\":\n\t\t\tcase \"thread/realtime/sdp\":\n\t\t\tcase \"thread/realtime/error\":\n\t\t\tcase \"thread/realtime/closed\":\n\t\t\tcase \"fs/changed\":\n\t\t\tcase \"model/rerouted\":\n\t\t\tcase \"model/verification\":\n\t\t\tcase \"mcpServer/oauthLogin/completed\":\n\t\t\tcase \"mcpServer/startupStatus/updated\":\n\t\t\tcase \"fuzzyFileSearch/sessionUpdated\":\n\t\t\tcase \"fuzzyFileSearch/sessionCompleted\":\n\t\t\tcase \"windows/worldWritableWarning\":\n\t\t\tcase \"windowsSandbox/setupCompleted\":\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tif (notificationThreadId(notification)) {\n\t\t\t\t\tthis.warnings = appendUnique(\n\t\t\t\t\t\tthis.warnings,\n\t\t\t\t\t\t`Unsupported Codex app-server notification: ${notification.method}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tnoteRequest(request: ServerRequest): void {\n\t\tthis.bufferedEvents = [...this.bufferedEvents, { request, type: \"request\" }];\n\t\tthis.pendingRequests.set(request.id, request);\n\t}\n\n\tprivate upsertTurn(turn: Turn): void {\n\t\tconst index = this.turns.findIndex((candidate) => candidate.id === turn.id);\n\t\tif (index === -1) {\n\t\t\tthis.turns = [...this.turns, cloneTurn(turn)];\n\t\t\treturn;\n\t\t}\n\t\tconst current = this.turns[index];\n\t\tthis.turns = replaceAt(this.turns, index, {\n\t\t\t...current,\n\t\t\t...turn,\n\t\t\titems: turn.items.length > 0 ? turn.items.map(cloneThreadItem) : current.items,\n\t\t});\n\t}\n\n\tprivate upsertItem(turnId: string, item: ThreadItem): void {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst itemIndex = turn.items.findIndex((candidate) => candidate.id === item.id);\n\t\tconst nextItems =\n\t\t\titemIndex === -1\n\t\t\t\t? [...turn.items, cloneThreadItem(item)]\n\t\t\t\t: replaceAt(turn.items, itemIndex, cloneThreadItem(item));\n\t\tthis.replaceTurn({ ...turn, items: nextItems, itemsView: \"full\" });\n\t}\n\n\tprivate applyAgentMessageDelta(turnId: string, itemId: string, delta: string): void {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst item = turn.items.find((candidate) => candidate.id === itemId);\n\t\tif (item?.type === \"agentMessage\") {\n\t\t\tthis.upsertItem(turnId, { ...item, text: `${item.text}${delta}` });\n\t\t\treturn;\n\t\t}\n\t\tthis.upsertItem(turnId, {\n\t\t\tid: itemId,\n\t\t\tmemoryCitation: null,\n\t\t\tphase: \"commentary\",\n\t\t\ttext: delta,\n\t\t\ttype: \"agentMessage\",\n\t\t});\n\t}\n\n\tprivate applyPlanDelta(turnId: string, itemId: string, delta: string): void {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst item = turn.items.find((candidate) => candidate.id === itemId);\n\t\tif (item?.type === \"plan\") {\n\t\t\tthis.upsertItem(turnId, { ...item, text: `${item.text}${delta}` });\n\t\t\treturn;\n\t\t}\n\t\tthis.upsertItem(turnId, {\n\t\t\tid: itemId,\n\t\t\ttext: delta,\n\t\t\ttype: \"plan\",\n\t\t});\n\t}\n\n\tprivate applyReasoningSummaryPartAdded(\n\t\tturnId: string,\n\t\titemId: string,\n\t\tsummaryIndex: number,\n\t): void {\n\t\tconst item = this.reasoningItem(turnId, itemId);\n\t\tconst summary = replaceAtOrAppend(item.summary, summaryIndex, \"\");\n\t\tthis.upsertItem(turnId, { ...item, summary });\n\t}\n\n\tprivate applyReasoningSummaryTextDelta(\n\t\tturnId: string,\n\t\titemId: string,\n\t\tsummaryIndex: number,\n\t\tdelta: string,\n\t): void {\n\t\tconst item = this.reasoningItem(turnId, itemId);\n\t\tconst current = item.summary[summaryIndex] ?? \"\";\n\t\tconst summary = replaceAtOrAppend(item.summary, summaryIndex, `${current}${delta}`);\n\t\tthis.upsertItem(turnId, { ...item, summary });\n\t}\n\n\tprivate applyReasoningTextDelta(\n\t\tturnId: string,\n\t\titemId: string,\n\t\tcontentIndex: number,\n\t\tdelta: string,\n\t): void {\n\t\tconst item = this.reasoningItem(turnId, itemId);\n\t\tconst current = item.content[contentIndex] ?? \"\";\n\t\tconst content = replaceAtOrAppend(item.content, contentIndex, `${current}${delta}`);\n\t\tthis.upsertItem(turnId, { ...item, content });\n\t}\n\n\tprivate applyCommandOutputDelta(\n\t\tturnId: string,\n\t\titemId: string,\n\t\tdelta: string,\n\t): void {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst item = turn.items.find((candidate) => candidate.id === itemId);\n\t\tif (item?.type !== \"commandExecution\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.upsertItem(turnId, {\n\t\t\t...item,\n\t\t\taggregatedOutput: `${item.aggregatedOutput ?? \"\"}${delta}`,\n\t\t});\n\t}\n\n\tprivate applyFileChangePatchUpdated(\n\t\tturnId: string,\n\t\titemId: string,\n\t\tchanges: Extract<ThreadItem, { type: \"fileChange\" }>[\"changes\"],\n\t): void {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst item = turn.items.find((candidate) => candidate.id === itemId);\n\t\tif (item?.type !== \"fileChange\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.upsertItem(turnId, { ...item, changes });\n\t}\n\n\tprivate reasoningItem(\n\t\tturnId: string,\n\t\titemId: string,\n\t): Extract<ThreadItem, { type: \"reasoning\" }> {\n\t\tconst turn = this.ensureTurn(turnId);\n\t\tconst item = turn.items.find((candidate) => candidate.id === itemId);\n\t\tif (item?.type === \"reasoning\") {\n\t\t\treturn item;\n\t\t}\n\t\treturn {\n\t\t\tcontent: [],\n\t\t\tid: itemId,\n\t\t\tsummary: [],\n\t\t\ttype: \"reasoning\",\n\t\t};\n\t}\n\n\tprivate ensureTurn(turnId: string): Turn {\n\t\tconst existing = this.turns.find((turn) => turn.id === turnId);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst turn: Turn = {\n\t\t\tcompletedAt: null,\n\t\t\tdurationMs: null,\n\t\t\terror: null,\n\t\t\tid: turnId,\n\t\t\titems: [],\n\t\t\titemsView: \"full\",\n\t\t\tstartedAt: null,\n\t\t\tstatus: \"inProgress\",\n\t\t};\n\t\tthis.turns = [...this.turns, turn];\n\t\tthis.activeTurnIds.add(turnId);\n\t\treturn turn;\n\t}\n\n\tprivate replaceTurn(turn: Turn): void {\n\t\tconst index = this.turns.findIndex((candidate) => candidate.id === turn.id);\n\t\tthis.turns = index === -1 ? [...this.turns, turn] : replaceAt(this.turns, index, turn);\n\t}\n}\n\nexport function applyServerNotificationToThreadEventStore(\n\tstore: ThreadEventStore,\n\tnotification: ServerNotification,\n): ThreadEventSnapshot {\n\tstore.noteNotification(notification);\n\treturn store.snapshot();\n}\n\nexport function applyServerRequestToThreadEventStore(\n\tstore: ThreadEventStore,\n\trequest: ServerRequest,\n): ThreadEventSnapshot {\n\tstore.noteRequest(request);\n\treturn store.snapshot();\n}\n\nexport function serverRequestThreadId(request: ServerRequest): string | null {\n\tif (\"params\" in request && request.params && typeof request.params === \"object\") {\n\t\tconst threadId = (request.params as { threadId?: unknown }).threadId;\n\t\treturn typeof threadId === \"string\" ? threadId : null;\n\t}\n\treturn null;\n}\n\nexport function serverNotificationThreadTarget(\n\tnotification: ServerNotification,\n): ServerNotificationThreadTarget {\n\tconst threadId = notificationThreadId(notification);\n\tif (!threadId) {\n\t\treturn { type: \"global\" };\n\t}\n\treturn isUuidLike(threadId)\n\t\t? { threadId, type: \"thread\" }\n\t\t: { threadId, type: \"invalid_thread_id\" };\n}\n\nexport function threadEventSnapshotHasStarted(\n\tsnapshot: ThreadEventSnapshot | null,\n): boolean {\n\tif (!snapshot) {\n\t\treturn false;\n\t}\n\treturn (\n\t\tsnapshot.turns.some((turn) => turn.items.length > 0) ||\n\t\tsnapshot.activeTurnIds.length > 0 ||\n\t\tsnapshot.pendingRequests.length > 0 ||\n\t\tsnapshot.warnings.length > 0 ||\n\t\tsnapshot.errors.length > 0\n\t);\n}\n\nfunction notificationThreadId(notification: ServerNotification): string | null {\n\tif (notification.method === \"thread/started\") {\n\t\treturn notification.params.thread.id;\n\t}\n\tif (\"params\" in notification && notification.params && typeof notification.params === \"object\") {\n\t\tconst threadId = (notification.params as { threadId?: unknown }).threadId;\n\t\treturn typeof threadId === \"string\" ? threadId : null;\n\t}\n\treturn null;\n}\n\nfunction cloneThread(thread: Thread): Thread {\n\treturn {\n\t\t...thread,\n\t\tturns: thread.turns.map(cloneTurn),\n\t};\n}\n\nfunction cloneTurn(turn: Turn): Turn {\n\treturn {\n\t\t...turn,\n\t\titems: turn.items.map(cloneThreadItem),\n\t};\n}\n\nfunction cloneThreadItem(item: ThreadItem): ThreadItem {\n\treturn { ...item };\n}\n\nfunction cloneThreadTokenUsage(tokenUsage: ThreadTokenUsage): ThreadTokenUsage {\n\treturn {\n\t\tlast: { ...tokenUsage.last },\n\t\tmodelContextWindow: tokenUsage.modelContextWindow,\n\t\ttotal: { ...tokenUsage.total },\n\t};\n}\n\nfunction replaceAt<T>(items: readonly T[], index: number, item: T): T[] {\n\treturn [...items.slice(0, index), item, ...items.slice(index + 1)];\n}\n\nfunction replaceAtOrAppend<T>(items: readonly T[], index: number, item: T): T[] {\n\tif (index < items.length) {\n\t\treturn replaceAt(items, index, item);\n\t}\n\treturn [...items, item];\n}\n\nfunction appendUnique<T>(items: readonly T[], item: T): T[] {\n\treturn items.includes(item) ? [...items] : [...items, item];\n}\n\nfunction isUuidLike(value: string): boolean {\n\treturn /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value);\n}\n","import type {\n\tEventMsg,\n\tRateLimitSnapshot,\n\tTokenUsage,\n\tTokenUsageInfo,\n\tUserInput,\n} from \"../../../core/src/protocol\";\nimport type {\n\tMessagePhase,\n\tServerNotification,\n\tServerRequest,\n} from \"../../schema/typescript\";\nimport type {\n\tRateLimitSnapshot as AppServerRateLimitSnapshot,\n\tThreadItem,\n\tThreadTokenUsage,\n\tTurn,\n} from \"../../schema/typescript/v2\";\nimport type { MemoryCitation as AppServerMemoryCitation } from \"../../schema/typescript/v2\";\nimport type { UserInput as AppServerUserInput } from \"../../schema/typescript/v2\";\n\nexport type ServerRequestCoreTarget =\n\t| { responseId: string; type: \"user_input\" }\n\t| { callId: string; type: \"request_permissions\" }\n\t| { callId: string; type: \"dynamic_tool\" }\n\t| { requestId: string | number; serverName: string; type: \"mcp_elicitation\" };\n\nexport type AppServerProtocolEvent =\n\t| { notification: ServerNotification; type: \"server_notification\" }\n\t| {\n\t\t\tcoreTarget?: ServerRequestCoreTarget;\n\t\t\trequest: ServerRequest;\n\t\t\ttype: \"server_request\";\n\t };\n\nexport type EventMappingContext = {\n\tactiveTurn?: Turn | null;\n\tthreadId: string;\n\tterminalTurn?: Turn | null;\n\tturnId?: string | null;\n};\n\ntype ServerRequestInput =\n\t| ServerRequest\n\t| (ServerRequest extends infer T\n\t\t\t? T extends { id: unknown }\n\t\t\t\t? Omit<T, \"id\"> & { id?: never }\n\t\t\t\t: never\n\t\t\t: never);\n\nexport function eventMsgToAppServerEvents(\n\tmsg: EventMsg,\n\tcontext: EventMappingContext,\n): AppServerProtocolEvent[] {\n\tif (msg.type === \"token_count\") {\n\t\tconst events: AppServerProtocolEvent[] = [];\n\t\tconst turnId = turnIdFromEventMsg(msg, context);\n\t\tif (msg.info) {\n\t\t\tevents.push(\n\t\t\t\tturnId\n\t\t\t\t\t? notification({\n\t\t\t\t\t\t\tmethod: \"thread/tokenUsage/updated\",\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tthreadId: context.threadId,\n\t\t\t\t\t\t\t\tturnId,\n\t\t\t\t\t\t\t\ttokenUsage: threadTokenUsageFromTokenUsageInfo(msg.info),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t: missingTurnIdWarning(context.threadId, msg.type),\n\t\t\t);\n\t\t}\n\t\tif (msg.rate_limits) {\n\t\t\tevents.push(notification({\n\t\t\t\tmethod: \"account/rateLimits/updated\",\n\t\t\t\tparams: {\n\t\t\t\t\trateLimits: appServerRateLimitSnapshot(msg.rate_limits),\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t\treturn events;\n\t}\n\tif (msg.type === \"dynamic_tool_call_request\") {\n\t\tconst threadId = context.threadId;\n\t\treturn [\n\t\t\tnotification({\n\t\t\t\tmethod: \"item/started\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\tstartedAtMs: msg.started_at_ms ?? Date.now(),\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"dynamicToolCall\",\n\t\t\t\t\t\tid: msg.call_id,\n\t\t\t\t\t\tnamespace: msg.namespace ?? null,\n\t\t\t\t\t\ttool: msg.tool,\n\t\t\t\t\t\targuments: msg.arguments as never,\n\t\t\t\t\t\tstatus: \"inProgress\",\n\t\t\t\t\t\tcontentItems: null,\n\t\t\t\t\t\tsuccess: null,\n\t\t\t\t\t\tdurationMs: null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t\trequest(\n\t\t\t\t{\n\t\t\t\t\tmethod: \"item/tool/call\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\t\tcallId: msg.call_id,\n\t\t\t\t\t\tnamespace: msg.namespace ?? null,\n\t\t\t\t\t\ttool: msg.tool,\n\t\t\t\t\t\targuments: msg.arguments as never,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ type: \"dynamic_tool\", callId: msg.call_id },\n\t\t\t),\n\t\t];\n\t}\n\tif (msg.type === \"agent_message\") {\n\t\treturn [];\n\t}\n\treturn [eventMsgToAppServerEvent(msg, context)];\n}\n\nexport function eventMsgToAppServerEvent(\n\tmsg: EventMsg,\n\tcontext: EventMappingContext,\n): AppServerProtocolEvent {\n\tconst threadId = context.threadId;\n\tconst turnId = turnIdFromEventMsg(msg, context);\n\tswitch (msg.type) {\n\t\tcase \"turn_started\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"turn/started\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturn: {\n\t\t\t\t\t\t...(context.activeTurn ?? {}),\n\t\t\t\t\t\tid: msg.turn_id,\n\t\t\t\t\t\titems: [],\n\t\t\t\t\t\titemsView: \"notLoaded\",\n\t\t\t\t\t\tstatus: \"inProgress\",\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tstartedAt: epochSeconds(msg.started_at),\n\t\t\t\t\t\tcompletedAt: null,\n\t\t\t\t\t\tdurationMs: null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"turn_complete\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"turn/completed\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturn: completedTurnFromEvent({\n\t\t\t\t\t\tcompletedAt: epochSeconds(msg.completed_at),\n\t\t\t\t\t\tdurationMs: msg.duration_ms ?? null,\n\t\t\t\t\t\tfallbackTurnId: msg.turn_id,\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tterminalTurn: context.terminalTurn,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"turn_aborted\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"turn/completed\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturn: completedTurnFromEvent({\n\t\t\t\t\t\tcompletedAt: epochSeconds(msg.completed_at ?? msg.aborted_at),\n\t\t\t\t\t\tdurationMs: msg.duration_ms ?? null,\n\t\t\t\t\t\tfallbackTurnId: msg.turn_id,\n\t\t\t\t\t\tstatus: \"interrupted\",\n\t\t\t\t\t\tterminalTurn: context.terminalTurn,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"agent_message_content_delta\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"item/agentMessage/delta\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId: msg.thread_id,\n\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\titemId: msg.item_id,\n\t\t\t\t\tdelta: msg.delta,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"plan_delta\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"item/plan/delta\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId: msg.thread_id,\n\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\titemId: msg.item_id,\n\t\t\t\t\tdelta: msg.delta,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"plan_update\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"turn/plan/updated\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\texplanation: msg.explanation ?? null,\n\t\t\t\t\tplan: msg.plan.map((step) => ({\n\t\t\t\t\t\tstep: step.step,\n\t\t\t\t\t\tstatus:\n\t\t\t\t\t\t\tstep.status === \"in_progress\" ? \"inProgress\" : step.status,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"item_started\": {\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\tconst item = coreTurnItemToThreadItem(msg.item);\n\t\t\treturn item\n\t\t\t\t? notification({\n\t\t\t\t\t\tmethod: \"item/started\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t\tturnId: msg.turn_id ?? turnId,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tstartedAtMs: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: warning(threadId, `Unmapped Codex item_started: ${msg.item.type}`);\n\t\t}\n\t\tcase \"item_completed\": {\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\tconst item = coreTurnItemToThreadItem(msg.item);\n\t\t\treturn item\n\t\t\t\t? notification({\n\t\t\t\t\t\tmethod: \"item/completed\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t\tturnId: msg.turn_id ?? turnId,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tcompletedAtMs: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: warning(threadId, `Unmapped Codex item_completed: ${msg.item.type}`);\n\t\t}\n\t\tcase \"user_message\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"item/completed\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\tcompletedAtMs: Date.now(),\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"userMessage\",\n\t\t\t\t\t\tid: `user-${turnId}`,\n\t\t\t\t\t\tcontent: userInputsFromUserMessage(msg),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"raw_response_item\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"rawResponseItem/completed\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\titem: msg.item as never,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"request_user_input\":\n\t\t\treturn request(\n\t\t\t\t{\n\t\t\t\t\tmethod: \"item/tool/requestUserInput\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\t\titemId: msg.call_id,\n\t\t\t\t\t\tquestions: msg.questions.map((question) => ({\n\t\t\t\t\t\t\tid: question.id,\n\t\t\t\t\t\t\theader: question.header,\n\t\t\t\t\t\t\tquestion: question.question,\n\t\t\t\t\t\t\tisOther: question.isOther,\n\t\t\t\t\t\t\tisSecret: question.isSecret,\n\t\t\t\t\t\t\toptions: question.options.map((option) => ({ ...option })),\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ type: \"user_input\", responseId: msg.turn_id },\n\t\t\t);\n\t\tcase \"request_permissions\":\n\t\t\treturn request(\n\t\t\t\t{\n\t\t\t\t\tmethod: \"item/permissions/requestApproval\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\t\titemId: msg.call_id,\n\t\t\t\t\t\tcwd: msg.cwd ?? \"\",\n\t\t\t\t\t\treason: msg.reason ?? null,\n\t\t\t\t\t\tpermissions: msg.permissions as never,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ type: \"request_permissions\", callId: msg.call_id },\n\t\t\t);\n\t\tcase \"command_approval_request\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn request({\n\t\t\t\tmethod: \"item/commandExecution/requestApproval\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\titemId: msg.call_id,\n\t\t\t\t\tapprovalId: null,\n\t\t\t\t\treason: msg.reason ?? null,\n\t\t\t\t\tcommand: msg.command.join(\" \"),\n\t\t\t\t\tcwd: msg.cwd,\n\t\t\t\t\tcommandActions: [],\n\t\t\t\t\tnetworkApprovalContext: null,\n\t\t\t\t\tproposedExecpolicyAmendment: null,\n\t\t\t\t\tproposedNetworkPolicyAmendments: null,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"file_change_approval_request\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn request({\n\t\t\t\tmethod: \"item/fileChange/requestApproval\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\titemId: msg.call_id,\n\t\t\t\t\treason: msg.reason ?? null,\n\t\t\t\t\tgrantRoot: null,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"dynamic_tool_call_request\":\n\t\t\treturn request(\n\t\t\t\t{\n\t\t\t\t\tmethod: \"item/tool/call\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\t\tcallId: msg.call_id,\n\t\t\t\t\t\tnamespace: msg.namespace ?? null,\n\t\t\t\t\t\ttool: msg.tool,\n\t\t\t\t\t\targuments: msg.arguments as never,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ type: \"dynamic_tool\", callId: msg.call_id },\n\t\t\t);\n\t\tcase \"dynamic_tool_call_response\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"item/completed\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\tcompletedAtMs: msg.completed_at_ms ?? Date.now(),\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"dynamicToolCall\",\n\t\t\t\t\t\tid: msg.call_id,\n\t\t\t\t\t\tnamespace: msg.namespace ?? null,\n\t\t\t\t\t\ttool: msg.tool,\n\t\t\t\t\t\targuments: msg.arguments as never,\n\t\t\t\t\t\tstatus: msg.success ? \"completed\" : \"failed\",\n\t\t\t\t\t\tcontentItems: msg.content_items.map((item) =>\n\t\t\t\t\t\t\titem.type === \"inputText\"\n\t\t\t\t\t\t\t\t? { type: \"inputText\", text: item.text }\n\t\t\t\t\t\t\t\t: { type: \"inputImage\", imageUrl: item.imageUrl },\n\t\t\t\t\t\t),\n\t\t\t\t\t\tsuccess: msg.success,\n\t\t\t\t\t\tdurationMs: durationMsFromString(msg.duration),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tcase \"mcp_server_elicitation_request\":\n\t\t\treturn request(\n\t\t\t\t{\n\t\t\t\t\tmethod: \"mcpServer/elicitation/request\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tturnId: msg.turn_id,\n\t\t\t\t\t\tserverName: msg.server_name,\n\t\t\t\t\t\t...(msg.request.type === \"url\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tmode: \"url\" as const,\n\t\t\t\t\t\t\t\t\tmessage: msg.request.message,\n\t\t\t\t\t\t\t\t\t_meta: msg.request.meta ?? null,\n\t\t\t\t\t\t\t\t\turl: msg.request.url,\n\t\t\t\t\t\t\t\t\telicitationId: msg.request.elicitation_id ?? \"\",\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\t\tmode: \"form\" as const,\n\t\t\t\t\t\t\t\t\tmessage: msg.request.message,\n\t\t\t\t\t\t\t\t\t_meta: msg.request.meta ?? null,\n\t\t\t\t\t\t\t\t\trequestedSchema: msg.request.requested_schema as never,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"mcp_elicitation\",\n\t\t\t\t\tserverName: msg.server_name,\n\t\t\t\t\trequestId: msg.id,\n\t\t\t\t},\n\t\t\t);\n\t\tcase \"context_compacted\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"thread/compacted\",\n\t\t\t\tparams: { threadId, turnId },\n\t\t\t});\n\t\tcase \"realtime_conversation_started\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"thread/realtime/started\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\trealtimeSessionId: msg.realtime_session_id ?? null,\n\t\t\t\t\tversion: msg.version,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"realtime_conversation_sdp\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"thread/realtime/sdp\",\n\t\t\t\tparams: { threadId, sdp: msg.sdp },\n\t\t\t});\n\t\tcase \"realtime_conversation_realtime\":\n\t\t\tif (\n\t\t\t\ttypeof msg.payload === \"object\" &&\n\t\t\t\tmsg.payload !== null &&\n\t\t\t\t(msg.payload as { type?: unknown }).type === \"error\"\n\t\t\t) {\n\t\t\t\treturn notification({\n\t\t\t\t\tmethod: \"thread/realtime/error\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\tmessage: String(\n\t\t\t\t\t\t\t(msg.payload as { message?: unknown }).message ??\n\t\t\t\t\t\t\t\t\"Realtime conversation error.\",\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"thread/realtime/itemAdded\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\titem: msg.payload as never,\n\t\t\t\t},\n\t\t\t});\n\t\tcase \"realtime_conversation_closed\":\n\t\t\treturn notification({\n\t\t\t\tmethod: \"thread/realtime/closed\",\n\t\t\t\tparams: { threadId, reason: msg.reason ?? null },\n\t\t\t});\n\t\tcase \"warning\":\n\t\t\treturn warning(threadId, msg.message);\n\t\tcase \"error\":\n\t\t\tif (!turnId) {\n\t\t\t\treturn missingTurnIdWarning(threadId, msg.type);\n\t\t\t}\n\t\t\treturn notification({\n\t\t\t\tmethod: \"error\",\n\t\t\t\tparams: {\n\t\t\t\t\tthreadId,\n\t\t\t\t\tturnId,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tmessage: msg.message,\n\t\t\t\t\t\tcodexErrorInfo: null,\n\t\t\t\t\t\tadditionalDetails: null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\tdefault:\n\t\t\treturn warning(threadId, `Unmapped Codex event: ${msg.type}`);\n\t}\n}\n\nexport const eventMsgToServerProtocolEvent = eventMsgToAppServerEvent;\nexport const eventMsgToServerProtocolEvents = eventMsgToAppServerEvents;\n\nexport function serverRequestResolvedNotification(input: {\n\trequestId: string | number;\n\tthreadId: string;\n}): AppServerProtocolEvent {\n\treturn notification({\n\t\tmethod: \"serverRequest/resolved\",\n\t\tparams: {\n\t\t\tthreadId: input.threadId,\n\t\t\trequestId: input.requestId,\n\t\t},\n\t});\n}\n\nfunction notification(notification: ServerNotification): AppServerProtocolEvent {\n\treturn { notification, type: \"server_notification\" };\n}\n\nfunction request(\n\trequest: ServerRequestInput,\n\tcoreTarget?: ServerRequestCoreTarget,\n): AppServerProtocolEvent {\n\treturn {\n\t\t...(coreTarget ? { coreTarget } : {}),\n\t\trequest: request as ServerRequest,\n\t\ttype: \"server_request\",\n\t};\n}\n\nfunction warning(threadId: string, message: string): AppServerProtocolEvent {\n\treturn notification({\n\t\tmethod: \"warning\",\n\t\tparams: { threadId, message },\n\t});\n}\n\nfunction missingTurnIdWarning(\n\tthreadId: string,\n\teventType: string,\n): AppServerProtocolEvent {\n\treturn warning(threadId, `Codex event ${eventType} was missing a turn id.`);\n}\n\nfunction turnIdFromEventMsg(\n\tmsg: EventMsg,\n\tcontext: EventMappingContext,\n): string | null {\n\tif (\"turn_id\" in msg && typeof msg.turn_id === \"string\") {\n\t\treturn msg.turn_id;\n\t}\n\treturn context.turnId ?? null;\n}\n\nfunction epochSeconds(value: number | null | undefined): number | null {\n\treturn typeof value === \"number\" ? value / 1000 : null;\n}\n\nfunction durationMsFromString(value: string | null | undefined): number | null {\n\tif (!value) {\n\t\treturn null;\n\t}\n\tconst parsed = Number.parseFloat(value);\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction completedTurnFromEvent(input: {\n\tcompletedAt: number | null;\n\tdurationMs: number | null;\n\tfallbackTurnId: string;\n\tstatus: \"completed\" | \"interrupted\";\n\tterminalTurn?: Turn | null;\n}): Turn {\n\tconst turn =\n\t\tinput.terminalTurn?.id === input.fallbackTurnId ? input.terminalTurn : null;\n\treturn {\n\t\tid: input.fallbackTurnId,\n\t\titems: turn?.items ?? [],\n\t\titemsView: turn?.itemsView ?? \"notLoaded\",\n\t\tstatus:\n\t\t\tturn?.status === \"failed\" && input.status === \"completed\"\n\t\t\t\t? \"failed\"\n\t\t\t\t: input.status,\n\t\terror: turn?.error ?? null,\n\t\tstartedAt: turn?.startedAt ?? null,\n\t\tcompletedAt: input.completedAt,\n\t\tdurationMs: input.durationMs,\n\t};\n}\n\nexport function threadTokenUsageFromTokenUsageInfo(info: TokenUsageInfo): ThreadTokenUsage {\n\treturn {\n\t\ttotal: appServerTokenUsageBreakdown(info.total_token_usage),\n\t\tlast: appServerTokenUsageBreakdown(info.last_token_usage),\n\t\tmodelContextWindow: info.model_context_window ?? null,\n\t};\n}\n\nfunction appServerTokenUsageBreakdown(usage: TokenUsage): ThreadTokenUsage[\"total\"] {\n\treturn {\n\t\ttotalTokens: usage.total_tokens,\n\t\tinputTokens: usage.input_tokens,\n\t\tcachedInputTokens: usage.cached_input_tokens,\n\t\toutputTokens: usage.output_tokens,\n\t\treasoningOutputTokens: usage.reasoning_output_tokens,\n\t};\n}\n\nfunction appServerRateLimitSnapshot(\n\tsnapshot: RateLimitSnapshot,\n): AppServerRateLimitSnapshot {\n\treturn {\n\t\tlimitId: valueAsStringOrNull(snapshot.limit_id),\n\t\tlimitName: valueAsStringOrNull(snapshot.limit_name),\n\t\tprimary: appServerRateLimitWindow(snapshot.primary),\n\t\tsecondary: appServerRateLimitWindow(snapshot.secondary),\n\t\tcredits: (snapshot.credits ?? null) as never,\n\t\tplanType: (snapshot.plan_type ?? null) as never,\n\t\trateLimitReachedType: (snapshot.rate_limit_reached_type ?? null) as never,\n\t};\n}\n\nfunction appServerRateLimitWindow(\n\twindow: unknown,\n): AppServerRateLimitSnapshot[\"primary\"] {\n\tif (!window || typeof window !== \"object\") {\n\t\treturn null;\n\t}\n\tconst record = window as {\n\t\treset_seconds?: unknown;\n\t\tresets_at?: unknown;\n\t\tused_percent?: unknown;\n\t\tusedPercent?: unknown;\n\t\twindow_duration_mins?: unknown;\n\t\twindowDurationMins?: unknown;\n\t};\n\tconst resetSeconds =\n\t\ttypeof record.reset_seconds === \"number\" ? record.reset_seconds : null;\n\tconst resetsAt =\n\t\ttypeof record.resets_at === \"number\"\n\t\t\t? record.resets_at\n\t\t\t: resetSeconds === null\n\t\t\t\t? null\n\t\t\t\t: Math.floor(Date.now() / 1000) + resetSeconds;\n\treturn {\n\t\tusedPercent: numberOrZero(record.usedPercent ?? record.used_percent),\n\t\twindowDurationMins:\n\t\t\ttypeof record.windowDurationMins === \"number\"\n\t\t\t\t? record.windowDurationMins\n\t\t\t\t: typeof record.window_duration_mins === \"number\"\n\t\t\t\t\t? record.window_duration_mins\n\t\t\t\t\t: null,\n\t\tresetsAt,\n\t};\n}\n\nfunction numberOrZero(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nfunction valueAsStringOrNull(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nfunction userInputsFromUserMessage(\n\tmsg: Extract<EventMsg, { type: \"user_message\" }>,\n): AppServerUserInput[] {\n\tconst inputs: AppServerUserInput[] = [\n\t\t{\n\t\t\ttype: \"text\",\n\t\t\ttext: msg.message,\n\t\t\ttext_elements: appServerTextElementsFromCore(msg.text_elements ?? []),\n\t\t},\n\t];\n\tfor (const url of msg.images ?? []) {\n\t\tinputs.push({ type: \"image\", url });\n\t}\n\tfor (const path of msg.local_images ?? []) {\n\t\tinputs.push({ type: \"localImage\", path });\n\t}\n\treturn inputs;\n}\n\nfunction appServerUserInputsFromCore(inputs: UserInput[]): AppServerUserInput[] {\n\treturn inputs.map((input) => {\n\t\tif (input.type === \"text\") {\n\t\t\treturn {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: input.text,\n\t\t\t\ttext_elements: appServerTextElementsFromCore(input.text_elements ?? []),\n\t\t\t};\n\t\t}\n\t\tif (input.type === \"image\") {\n\t\t\treturn { type: \"image\", url: input.image_url };\n\t\t}\n\t\tif (input.type === \"local_image\") {\n\t\t\treturn { type: \"localImage\", path: input.path };\n\t\t}\n\t\treturn input;\n\t});\n}\n\nfunction appServerTextElementsFromCore(\n\telements: NonNullable<Extract<UserInput, { type: \"text\" }>[\"text_elements\"]>,\n): Extract<AppServerUserInput, { type: \"text\" }>[\"text_elements\"] {\n\treturn elements.map((element) => ({\n\t\tbyteRange: element.byte_range,\n\t\tplaceholder: element.placeholder ?? null,\n\t}));\n}\n\nfunction appServerMessagePhase(value: unknown): MessagePhase | null {\n\treturn value === \"commentary\" || value === \"final_answer\" ? value : null;\n}\n\nfunction appServerMemoryCitationFromCore(\n\tcitation: { entries: AppServerMemoryCitation[\"entries\"]; rolloutIds?: string[] } | null,\n): AppServerMemoryCitation | null {\n\treturn citation\n\t\t? {\n\t\t\t\tentries: citation.entries,\n\t\t\t\tthreadIds: citation.rolloutIds ?? [],\n\t\t\t}\n\t\t: null;\n}\n\nexport function coreTurnItemToThreadItem(item: unknown): ThreadItem | null {\n\tif (!item || typeof item !== \"object\" || !(\"type\" in item)) {\n\t\treturn null;\n\t}\n\tconst value = item as Record<string, unknown>;\n\tswitch (value.type) {\n\t\tcase \"UserMessage\":\n\t\t\treturn {\n\t\t\t\ttype: \"userMessage\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tcontent: appServerUserInputsFromCore((value.content ?? []) as UserInput[]),\n\t\t\t};\n\t\tcase \"AgentMessage\":\n\t\t\treturn {\n\t\t\t\ttype: \"agentMessage\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\ttext: ((value.content as Array<{ text?: string }> | undefined) ?? [])\n\t\t\t\t\t.map((part) => part.text ?? \"\")\n\t\t\t\t\t.join(\"\"),\n\t\t\t\tphase: appServerMessagePhase(value.phase),\n\t\t\t\tmemoryCitation: appServerMemoryCitationFromCore(\n\t\t\t\t\t(value.memory_citation as never) ?? null,\n\t\t\t\t),\n\t\t\t};\n\t\tcase \"Plan\":\n\t\t\treturn {\n\t\t\t\ttype: \"plan\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\ttext: String(value.text ?? \"\"),\n\t\t\t};\n\t\tcase \"Reasoning\":\n\t\t\treturn {\n\t\t\t\ttype: \"reasoning\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tsummary: (value.summary_text ?? []) as string[],\n\t\t\t\tcontent: (value.raw_content ?? []) as string[],\n\t\t\t};\n\t\tcase \"WebSearch\": {\n\t\t\tconst action = appServerWebSearchAction(value.action);\n\t\t\treturn {\n\t\t\t\ttype: \"webSearch\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tquery:\n\t\t\t\t\ttypeof value.query === \"string\"\n\t\t\t\t\t\t? value.query\n\t\t\t\t\t\t: webSearchActionDetail(action),\n\t\t\t\taction,\n\t\t\t};\n\t\t}\n\t\tcase \"CommandExecution\":\n\t\t\treturn {\n\t\t\t\ttype: \"commandExecution\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tcommand: ((value.command as string[] | undefined) ?? []).join(\" \"),\n\t\t\t\tcwd: String(value.cwd ?? \"\"),\n\t\t\t\tprocessId: null,\n\t\t\t\tsource: \"agent\",\n\t\t\t\tstatus: commandStatusToAppServer(value.status),\n\t\t\t\tcommandActions: [],\n\t\t\t\taggregatedOutput:\n\t\t\t\t\t[value.stdout, value.stderr].filter(Boolean).join(\"\") || null,\n\t\t\t\texitCode:\n\t\t\t\t\ttypeof value.exit_code === \"number\" ? value.exit_code : null,\n\t\t\t\tdurationMs:\n\t\t\t\t\ttypeof value.duration_ms === \"number\" ? value.duration_ms : null,\n\t\t\t};\n\t\tcase \"FileChange\":\n\t\t\treturn {\n\t\t\t\ttype: \"fileChange\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tchanges: [],\n\t\t\t\tstatus: (value.status as never) ?? \"completed\",\n\t\t\t};\n\t\tcase \"DynamicToolCall\":\n\t\t\treturn {\n\t\t\t\ttype: \"dynamicToolCall\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t\tnamespace: (value.namespace as string | null | undefined) ?? null,\n\t\t\t\ttool: String(value.tool ?? \"\"),\n\t\t\t\targuments: (value.arguments ?? null) as never,\n\t\t\t\tstatus: dynamicToolStatusToAppServer(value.status),\n\t\t\t\tcontentItems: (value.content_items as never) ?? null,\n\t\t\t\tsuccess: (value.success as boolean | null | undefined) ?? null,\n\t\t\t\tdurationMs: durationMsFromString(value.duration as string | undefined),\n\t\t\t};\n\t\tcase \"ContextCompaction\":\n\t\t\treturn {\n\t\t\t\ttype: \"contextCompaction\",\n\t\t\t\tid: String(value.id ?? \"\"),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction appServerWebSearchAction(action: unknown) {\n\tif (!action || typeof action !== \"object\") {\n\t\treturn { type: \"other\" as const };\n\t}\n\tconst record = action as Record<string, unknown>;\n\tif (record.type === \"search\") {\n\t\treturn {\n\t\t\ttype: \"search\" as const,\n\t\t\tquery: typeof record.query === \"string\" ? record.query : null,\n\t\t\tqueries: Array.isArray(record.queries)\n\t\t\t\t? record.queries.filter((query): query is string => typeof query === \"string\")\n\t\t\t\t: null,\n\t\t};\n\t}\n\tif (record.type === \"open_page\" || record.type === \"openPage\") {\n\t\treturn {\n\t\t\ttype: \"openPage\" as const,\n\t\t\turl: typeof record.url === \"string\" ? record.url : null,\n\t\t};\n\t}\n\tif (record.type === \"find_in_page\" || record.type === \"findInPage\") {\n\t\treturn {\n\t\t\ttype: \"findInPage\" as const,\n\t\t\turl: typeof record.url === \"string\" ? record.url : null,\n\t\t\tpattern: typeof record.pattern === \"string\" ? record.pattern : null,\n\t\t};\n\t}\n\treturn { type: \"other\" as const };\n}\n\nfunction webSearchActionDetail(action: ReturnType<typeof appServerWebSearchAction>): string {\n\tswitch (action.type) {\n\t\tcase \"search\":\n\t\t\treturn action.query ?? action.queries?.join(\", \") ?? \"\";\n\t\tcase \"openPage\":\n\t\t\treturn action.url ?? \"\";\n\t\tcase \"findInPage\": {\n\t\t\tconst pattern = action.pattern ?? \"\";\n\t\t\tconst url = action.url ?? \"\";\n\t\t\treturn pattern && url ? `'${pattern}' in ${url}` : (pattern || url);\n\t\t}\n\t\tcase \"other\":\n\t\t\treturn \"\";\n\t}\n}\n\nfunction commandStatusToAppServer(value: unknown): ThreadItem extends infer T\n\t? T extends { type: \"commandExecution\"; status: infer S }\n\t\t? S\n\t\t: never\n\t: never {\n\tif (value === \"completed\" || value === \"failed\") {\n\t\treturn value as never;\n\t}\n\tif (value === \"cancelled\") {\n\t\treturn \"failed\" as never;\n\t}\n\treturn \"inProgress\" as never;\n}\n\nfunction dynamicToolStatusToAppServer(value: unknown): ThreadItem extends infer T\n\t? T extends { type: \"dynamicToolCall\"; status: infer S }\n\t\t? S\n\t\t: never\n\t: never {\n\tif (value === \"completed\" || value === \"failed\") {\n\t\treturn value as never;\n\t}\n\treturn \"inProgress\" as never;\n}\n","import type {\n\tThread,\n\tThreadItem,\n\tThreadResumeResponse,\n\tTurn,\n} from \"../../schema/typescript/v2\";\nimport type { StoredThread, StoredThreadHistory } from \"../../../core/src/thread-store\";\nimport { renderThreadFromHistory } from \"../../../core/src/rendered-thread\";\nimport type { Turn as CoreTurn } from \"../../../core/src/thread-history-builder\";\nimport type { ThreadId } from \"../../../core/src/ids\";\nimport type { TurnItem as CoreTurnItem } from \"../../../core/src/items\";\nimport type { UserInput as CoreUserInput } from \"../../../core/src/protocol\";\nimport { coreTurnItemToThreadItem } from \"./event-mapping\";\n\nexport type ThreadResumeSnapshotInput = {\n\thistory: StoredThreadHistory;\n\tthread: StoredThread;\n};\n\nexport function buildThreadResumeResponseFromHistory(\n\tinput: ThreadResumeSnapshotInput,\n): ThreadResumeResponse {\n\tconst thread = threadHistoryToAppServerThread(input);\n\treturn {\n\t\tthread,\n\t\tmodel: input.thread.model ?? \"gpt-5.4\",\n\t\tmodelProvider: input.thread.model_provider,\n\t\tserviceTier: null,\n\t\tcwd: input.thread.cwd,\n\t\tinstructionSources: [],\n\t\tapprovalPolicy: approvalPolicyFromStoredThread(input.thread),\n\t\tapprovalsReviewer: \"user\",\n\t\tsandbox: sandboxPolicyFromStoredThread(input.thread),\n\t\treasoningEffort: reasoningEffortFromStoredThread(input.thread),\n\t};\n}\n\nexport function threadHistoryToAppServerThread(\n\tinput: ThreadResumeSnapshotInput,\n): Thread {\n\tconst rendered = renderThreadFromHistory(input.history);\n\treturn {\n\t\tid: input.thread.thread_id,\n\t\tsessionId: input.thread.rollout_path ?? input.thread.thread_id,\n\t\tforkedFromId: input.thread.forked_from_id ?? null,\n\t\tpreview: input.thread.preview,\n\t\tephemeral: false,\n\t\tmodelProvider: input.thread.model_provider,\n\t\tcreatedAt: epochSecondsFromIso(input.thread.created_at),\n\t\tupdatedAt: epochSecondsFromIso(input.thread.updated_at),\n\t\tstatus: { type: \"idle\" },\n\t\tpath: input.thread.rollout_path ?? null,\n\t\tcwd: input.thread.cwd,\n\t\tcliVersion: input.thread.cli_version ?? \"\",\n\t\tsource: sessionSourceFromStoredThread(input.thread.source),\n\t\tthreadSource: threadSourceFromStoredThread(input.thread.thread_source),\n\t\tagentNickname: input.thread.agent_nickname ?? null,\n\t\tagentRole: input.thread.agent_role ?? null,\n\t\tgitInfo: gitInfoFromStoredThread(input.thread.git_info),\n\t\tname: input.thread.name ?? null,\n\t\tturns: rendered.turns.map(appServerTurnFromCoreTurn),\n\t};\n}\n\nexport function renderableHistoryFromAppServerThread(\n\tthread: Thread,\n): StoredThreadHistory {\n\treturn {\n\t\tthread_id: thread.id as ThreadId,\n\t\titems: thread.turns.flatMap((turn) => {\n\t\t\tconst items = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"event_msg\" as const,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\ttype: \"turn_started\" as const,\n\t\t\t\t\t\tturn_id: turn.id,\n\t\t\t\t\t\tstarted_at:\n\t\t\t\t\t\t\ttypeof turn.startedAt === \"number\"\n\t\t\t\t\t\t\t\t? turn.startedAt * 1000\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...turn.items\n\t\t\t\t\t.map((item) => rolloutItemFromThreadItem(item, turn.id))\n\t\t\t\t\t.filter((item) => item !== null),\n\t\t\t];\n\t\t\tif (turn.status === \"inProgress\") {\n\t\t\t\treturn items;\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t...items,\n\t\t\t\t{\n\t\t\t\t\ttype: \"event_msg\" as const,\n\t\t\t\t\tpayload:\n\t\t\t\t\t\tturn.status === \"interrupted\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\ttype: \"turn_aborted\" as const,\n\t\t\t\t\t\t\t\t\tturn_id: turn.id,\n\t\t\t\t\t\t\t\t\treason: \"interrupted\",\n\t\t\t\t\t\t\t\t\tcompleted_at:\n\t\t\t\t\t\t\t\t\t\ttypeof turn.completedAt === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t? turn.completedAt * 1000\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tduration_ms: turn.durationMs,\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\t\ttype: \"turn_complete\" as const,\n\t\t\t\t\t\t\t\t\tturn_id: turn.id,\n\t\t\t\t\t\t\t\t\tcompleted_at:\n\t\t\t\t\t\t\t\t\t\ttypeof turn.completedAt === \"number\"\n\t\t\t\t\t\t\t\t\t\t\t? turn.completedAt * 1000\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tduration_ms: turn.durationMs,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t}),\n\t};\n}\n\nexport function appServerTurnFromCoreTurn(turn: CoreTurn): Turn {\n\treturn {\n\t\tid: turn.id,\n\t\titems: turn.items\n\t\t\t.map(coreTurnItemToThreadItem)\n\t\t\t.filter((item): item is ThreadItem => item !== null),\n\t\titemsView: turn.items_view === \"not_loaded\" ? \"notLoaded\" : turn.items_view,\n\t\tstatus: coreTurnStatusToAppServer(turn.status),\n\t\terror: turn.error\n\t\t\t? {\n\t\t\t\t\tmessage: turn.error.message,\n\t\t\t\t\tcodexErrorInfo: (turn.error.codex_error_info ?? null) as never,\n\t\t\t\t\tadditionalDetails: turn.error.additional_details ?? null,\n\t\t\t\t}\n\t\t\t: null,\n\t\tstartedAt: epochSeconds(turn.started_at),\n\t\tcompletedAt: epochSeconds(turn.completed_at),\n\t\tdurationMs: turn.duration_ms,\n\t};\n}\n\nfunction rolloutItemFromThreadItem(item: ThreadItem, turnId: string) {\n\tconst coreItem = coreTurnItemFromThreadItem(item);\n\tif (!coreItem) {\n\t\treturn null;\n\t}\n\treturn {\n\t\ttype: \"event_msg\" as const,\n\t\tpayload: {\n\t\t\ttype: \"item_completed\" as const,\n\t\t\tturn_id: turnId,\n\t\t\titem: coreItem,\n\t\t},\n\t};\n}\n\nfunction coreTurnItemFromThreadItem(item: ThreadItem): CoreTurnItem | null {\n\tswitch (item.type) {\n\t\tcase \"userMessage\":\n\t\t\treturn {\n\t\t\t\ttype: \"UserMessage\",\n\t\t\t\tid: item.id,\n\t\t\t\tcontent: item.content.map((input) => {\n\t\t\t\t\tif (input.type === \"image\") {\n\t\t\t\t\t\treturn { type: \"image\", image_url: input.url };\n\t\t\t\t\t}\n\t\t\t\t\tif (input.type === \"localImage\") {\n\t\t\t\t\t\treturn { type: \"local_image\", path: input.path };\n\t\t\t\t\t}\n\t\t\t\t\tif (input.type !== \"text\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: input.name,\n\t\t\t\t\t\t\ttext_elements: [],\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\ttype: \"text\",\n\t\t\t\t\t\ttext: input.text,\n\t\t\t\t\t\ttext_elements: input.text_elements.map((element) => ({\n\t\t\t\t\t\t\tbyte_range: element.byteRange,\n\t\t\t\t\t\t\tplaceholder: element.placeholder ?? undefined,\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t}) as CoreUserInput[],\n\t\t\t};\n\t\tcase \"agentMessage\":\n\t\t\treturn {\n\t\t\t\ttype: \"AgentMessage\",\n\t\t\t\tid: item.id,\n\t\t\t\tcontent: [{ type: \"Text\", text: item.text }],\n\t\t\t\tphase: item.phase,\n\t\t\t\tmemory_citation: item.memoryCitation\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tentries: item.memoryCitation.entries,\n\t\t\t\t\t\t\trolloutIds: item.memoryCitation.threadIds,\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t};\n\t\tcase \"plan\":\n\t\t\treturn { type: \"Plan\", id: item.id, text: item.text };\n\t\tcase \"reasoning\":\n\t\t\treturn {\n\t\t\t\ttype: \"Reasoning\",\n\t\t\t\tid: item.id,\n\t\t\t\tsummary_text: item.summary,\n\t\t\t\traw_content: item.content,\n\t\t\t};\n\t\tcase \"webSearch\":\n\t\t\treturn {\n\t\t\t\ttype: \"WebSearch\",\n\t\t\t\tid: item.id,\n\t\t\t\tquery: item.query,\n\t\t\t\taction: coreWebSearchActionFromAppServer(item.action),\n\t\t\t};\n\t\tcase \"commandExecution\":\n\t\t\treturn {\n\t\t\t\ttype: \"CommandExecution\",\n\t\t\t\tid: item.id,\n\t\t\t\tcommand: [item.command],\n\t\t\t\tcwd: item.cwd,\n\t\t\t\tstatus: coreCommandStatusFromAppServer(item.status),\n\t\t\t\tstdout: item.aggregatedOutput ?? \"\",\n\t\t\t\texit_code: item.exitCode,\n\t\t\t\tduration_ms: item.durationMs,\n\t\t\t};\n\t\tcase \"fileChange\":\n\t\t\treturn {\n\t\t\t\ttype: \"FileChange\",\n\t\t\t\tid: item.id,\n\t\t\t\tchanges: {},\n\t\t\t\tstatus:\n\t\t\t\t\titem.status === \"completed\" ||\n\t\t\t\t\titem.status === \"failed\" ||\n\t\t\t\t\titem.status === \"declined\"\n\t\t\t\t\t\t? item.status\n\t\t\t\t\t\t: null,\n\t\t\t\tauto_approved: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"\",\n\t\t\t};\n\t\tcase \"dynamicToolCall\":\n\t\t\treturn {\n\t\t\t\ttype: \"DynamicToolCall\",\n\t\t\t\tid: item.id,\n\t\t\t\tnamespace: item.namespace,\n\t\t\t\ttool: item.tool,\n\t\t\t\targuments: item.arguments,\n\t\t\t\tstatus: item.status,\n\t\t\t\tcontent_items: item.contentItems ?? [],\n\t\t\t\tsuccess: item.success,\n\t\t\t\tduration: item.durationMs === null ? null : String(item.durationMs),\n\t\t\t};\n\t\tcase \"contextCompaction\":\n\t\t\treturn { type: \"ContextCompaction\", id: item.id };\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction coreWebSearchActionFromAppServer(\n\taction: Extract<ThreadItem, { type: \"webSearch\" }>[\"action\"],\n): CoreTurnItem extends infer T\n\t? T extends { type: \"WebSearch\"; action: infer A }\n\t\t? A\n\t\t: never\n\t: never {\n\tif (!action) {\n\t\treturn { type: \"other\" } as never;\n\t}\n\tswitch (action.type) {\n\t\tcase \"search\":\n\t\t\treturn {\n\t\t\t\ttype: \"search\",\n\t\t\t\t...(action.query ? { query: action.query } : {}),\n\t\t\t\t...(action.queries ? { queries: action.queries } : {}),\n\t\t\t} as never;\n\t\tcase \"openPage\":\n\t\t\treturn {\n\t\t\t\ttype: \"open_page\",\n\t\t\t\t...(action.url ? { url: action.url } : {}),\n\t\t\t} as never;\n\t\tcase \"findInPage\":\n\t\t\treturn {\n\t\t\t\ttype: \"find_in_page\",\n\t\t\t\t...(action.url ? { url: action.url } : {}),\n\t\t\t\t...(action.pattern ? { pattern: action.pattern } : {}),\n\t\t\t} as never;\n\t\tcase \"other\":\n\t\t\treturn { type: \"other\" } as never;\n\t}\n}\n\nfunction coreTurnStatusToAppServer(status: CoreTurn[\"status\"]): Turn[\"status\"] {\n\tif (status === \"in_progress\") {\n\t\treturn \"inProgress\";\n\t}\n\treturn status;\n}\n\nfunction coreCommandStatusFromAppServer(status: Extract<ThreadItem, { type: \"commandExecution\" }>[\"status\"]) {\n\tif (status === \"declined\") {\n\t\treturn \"failed\";\n\t}\n\treturn status === \"inProgress\" ? \"in_progress\" : status;\n}\n\nfunction epochSeconds(value: number | null | undefined): number | null {\n\treturn typeof value === \"number\" ? value / 1000 : null;\n}\n\nfunction epochSecondsFromIso(value: string): number {\n\tconst parsed = Date.parse(value);\n\treturn Number.isFinite(parsed) ? Math.floor(parsed / 1000) : 0;\n}\n\nfunction sessionSourceFromStoredThread(source: string): Thread[\"source\"] {\n\tif (source === \"cli\" || source === \"vscode\" || source === \"exec\" || source === \"unknown\") {\n\t\treturn source;\n\t}\n\tif (source === \"appServer\" || source === \"app-server\") {\n\t\treturn \"appServer\";\n\t}\n\treturn { custom: source };\n}\n\nfunction threadSourceFromStoredThread(source: string | null | undefined): Thread[\"threadSource\"] {\n\tif (source === \"user\" || source === \"subagent\" || source === \"memory_consolidation\") {\n\t\treturn source;\n\t}\n\treturn null;\n}\n\nfunction gitInfoFromStoredThread(gitInfo: unknown): Thread[\"gitInfo\"] {\n\tif (!gitInfo || typeof gitInfo !== \"object\") {\n\t\treturn null;\n\t}\n\tconst value = gitInfo as Record<string, unknown>;\n\treturn {\n\t\tsha: typeof value.sha === \"string\" ? value.sha : typeof value.commit_hash === \"string\" ? value.commit_hash : null,\n\t\tbranch: typeof value.branch === \"string\" ? value.branch : null,\n\t\toriginUrl:\n\t\t\ttypeof value.originUrl === \"string\"\n\t\t\t\t? value.originUrl\n\t\t\t\t: typeof value.repository_url === \"string\"\n\t\t\t\t\t? value.repository_url\n\t\t\t\t\t: null,\n\t};\n}\n\nfunction approvalPolicyFromStoredThread(thread: StoredThread): ThreadResumeResponse[\"approvalPolicy\"] {\n\tif (\n\t\tthread.approval_mode === \"untrusted\" ||\n\t\tthread.approval_mode === \"on-failure\" ||\n\t\tthread.approval_mode === \"on-request\" ||\n\t\tthread.approval_mode === \"never\"\n\t) {\n\t\treturn thread.approval_mode;\n\t}\n\treturn \"on-request\";\n}\n\nfunction sandboxPolicyFromStoredThread(thread: StoredThread): ThreadResumeResponse[\"sandbox\"] {\n\tif (thread.sandbox_policy && typeof thread.sandbox_policy === \"object\") {\n\t\treturn thread.sandbox_policy as ThreadResumeResponse[\"sandbox\"];\n\t}\n\tif (thread.sandbox_policy === \"read-only\") {\n\t\treturn { type: \"readOnly\", networkAccess: false };\n\t}\n\treturn { type: \"dangerFullAccess\" };\n}\n\nfunction reasoningEffortFromStoredThread(\n\tthread: StoredThread,\n): ThreadResumeResponse[\"reasoningEffort\"] {\n\tif (\n\t\tthread.reasoning_effort === \"none\" ||\n\t\tthread.reasoning_effort === \"minimal\" ||\n\t\tthread.reasoning_effort === \"low\" ||\n\t\tthread.reasoning_effort === \"medium\" ||\n\t\tthread.reasoning_effort === \"high\" ||\n\t\tthread.reasoning_effort === \"xhigh\"\n\t) {\n\t\treturn thread.reasoning_effort;\n\t}\n\treturn null;\n}\n","import type {\n\tClientRequest,\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\n\nexport type JsonRpcResult = unknown;\n\nexport type JSONRPCErrorError = {\n\tcode: number;\n\tdata?: unknown;\n\tmessage: string;\n};\n\nexport type Result = JsonRpcResult;\n\nexport type AppServerEvent =\n\t| { skipped: number; type: \"lagged\" }\n\t| {\n\t\t\tnotification: ServerNotification;\n\t\t\ttype: \"server_notification\";\n\t }\n\t| { request: ServerRequest; type: \"server_request\" }\n\t| { message: string; type: \"disconnected\" };\n\nexport type TypedRequestError =\n\t| { method: string; source: unknown; type: \"transport\" }\n\t| { method: string; source: JSONRPCErrorError; type: \"server\" }\n\t| { method: string; source: unknown; type: \"deserialize\" };\n\nexport type AppServerRequestHandle = {\n\trejectServerRequest(\n\t\trequestId: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void>;\n\trequest(request: ClientRequest): Promise<unknown>;\n\trequestTyped<T>(request: ClientRequest): Promise<T>;\n\tresolveServerRequest(requestId: RequestId, result: Result): Promise<void>;\n};\n\nexport async function requestTyped<T>(\n\trequest: ClientRequest,\n\tsend: (request: ClientRequest) => Promise<unknown>,\n): Promise<T> {\n\ttry {\n\t\treturn (await send(request)) as T;\n\t} catch (source) {\n\t\tif (isJsonRpcError(source)) {\n\t\t\tthrow {\n\t\t\t\tmethod: request.method,\n\t\t\t\tsource,\n\t\t\t\ttype: \"server\",\n\t\t\t} satisfies TypedRequestError;\n\t\t}\n\t\tthrow {\n\t\t\tmethod: request.method,\n\t\t\tsource,\n\t\t\ttype: \"transport\",\n\t\t} satisfies TypedRequestError;\n\t}\n}\n\nexport function serverNotificationRequiresDelivery(\n\tnotification: ServerNotification,\n): boolean {\n\treturn (\n\t\tnotification.method === \"turn/completed\" ||\n\t\tnotification.method === \"item/completed\" ||\n\t\tnotification.method === \"item/agentMessage/delta\" ||\n\t\tnotification.method === \"item/plan/delta\" ||\n\t\tnotification.method === \"item/reasoning/summaryTextDelta\" ||\n\t\tnotification.method === \"item/reasoning/textDelta\"\n\t);\n}\n\nexport function requestMethodName(request: ClientRequest): string {\n\treturn request.method;\n}\n\nfunction isJsonRpcError(value: unknown): value is JSONRPCErrorError {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\ttypeof (value as { code?: unknown }).code === \"number\" &&\n\t\ttypeof (value as { message?: unknown }).message === \"string\"\n\t);\n}\n\nexport {\n\tCodexAppServerClientTransportError,\n\tcreateCodexAppServerClient,\n\tparseCodexAppServerEvent,\n\ttype CodexAppServerClientConnectionStatus,\n\ttype CodexAppServerClientOptions,\n} from \"./remote\";\nexport { AppServerSession, type CodexAppServer } from \"./session\";\nexport {\n\tPendingAppServerRequests,\n\ttype AppServerRequestResolution,\n\ttype ResolvedAppServerRequest,\n\ttype UnsupportedAppServerRequest,\n} from \"./pending_requests\";\nexport {\n\tapplyServerNotificationToThreadEventStore,\n\tapplyServerRequestToThreadEventStore,\n\tserverNotificationThreadTarget,\n\tserverRequestThreadId,\n\tthreadEventSnapshotHasStarted,\n\tThreadEventStore,\n\ttype ServerNotificationThreadTarget,\n\ttype ThreadBufferedEvent,\n\ttype ThreadEventSnapshot,\n\ttype ThreadTokenUsageSnapshot,\n} from \"./thread_event_store\";\nexport {\n\tapplyServerNotificationToRenderedThread,\n\tapplyServerRequestToRenderedThread,\n\trenderThreadFromAppServerThread,\n\tserverNotificationToEventMsg,\n\tserverRequestToEventMsg,\n} from \"./thread_projection\";\n","import type {\n\tClientRequest,\n\tInitializeParams,\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tAppServerEvent,\n\tJSONRPCErrorError,\n\tResult,\n} from \"./lib\";\nimport { requestTyped as requestTypedWithErrors } from \"./lib\";\nimport type { CodexAppServer } from \"./session\";\nimport {\n\tparseClientTransportPayload,\n\tserializeJsonRpcError,\n\tserializeJsonRpcResponse,\n} from \"../../app-server-transport/src/transport/mod\";\n\nexport type CodexAppServerClientConnectionStatus =\n\t| \"connecting\"\n\t| \"connected\"\n\t| \"closed\"\n\t| \"error\";\n\nexport type CodexAppServerClientOptions = {\n\tWebSocket?: typeof WebSocket;\n\tinitializeParams?: InitializeParams | (() => InitializeParams | Promise<InitializeParams>);\n\tonConnectionStatus?: (status: CodexAppServerClientConnectionStatus) => void;\n\tparseEvent?: (value: unknown) => AppServerEvent | null;\n\turl: string | (() => string | Promise<string>);\n};\n\nexport class CodexAppServerClientTransportError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status?: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CodexAppServerClientTransportError\";\n\t}\n}\n\nexport function createCodexAppServerClient(\n\toptions: CodexAppServerClientOptions,\n): CodexAppServer {\n\tlet socket: WebSocket | null = null;\n\tlet openPromise: Promise<WebSocket> | null = null;\n\tlet initializePromise: Promise<unknown> | null = null;\n\tlet initialized = false;\n\tconst pendingRequests = new Map<\n\t\tRequestId,\n\t\t{ reject: (error: unknown) => void; resolve: (result: unknown) => void }\n\t>();\n\tconst eventQueue = createEventQueue<AppServerEvent>();\n\n\tasync function ensureOpenSocket(): Promise<WebSocket> {\n\t\tconst openState = 1;\n\t\tif (socket?.readyState === openState) {\n\t\t\treturn socket;\n\t\t}\n\t\topenPromise ??= openSocket();\n\t\treturn openPromise;\n\t}\n\n\tasync function ensureInitialized(): Promise<void> {\n\t\tif (initialized) {\n\t\t\treturn;\n\t\t}\n\t\tinitializePromise ??= sendClientRequest({\n\t\t\tid: 0,\n\t\t\tmethod: \"initialize\",\n\t\t\tparams: await resolveInitializeParams(options.initializeParams),\n\t\t});\n\t\tawait initializePromise;\n\t\tinitialized = true;\n\t}\n\n\tasync function request(request: ClientRequest): Promise<unknown> {\n\t\tif (request.method !== \"initialize\") {\n\t\t\tawait ensureInitialized();\n\t\t\treturn sendClientRequest(request);\n\t\t}\n\t\tconst result = await sendClientRequest(request);\n\t\tinitialized = true;\n\t\treturn result;\n\t}\n\n\tasync function sendClientRequest(request: ClientRequest): Promise<unknown> {\n\t\tconst websocket = await ensureOpenSocket();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpendingRequests.set(request.id, { reject, resolve });\n\t\t\ttry {\n\t\t\t\twebsocket.send(JSON.stringify(request));\n\t\t\t} catch (error) {\n\t\t\t\tpendingRequests.delete(request.id);\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync function sendClientResponse(\n\t\trequestId: RequestId,\n\t\tresult: Result,\n\t): Promise<void> {\n\t\tconst websocket = await ensureOpenSocket();\n\t\twebsocket.send(serializeJsonRpcResponse(requestId, result));\n\t}\n\n\tasync function sendClientError(\n\t\trequestId: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void> {\n\t\tconst websocket = await ensureOpenSocket();\n\t\twebsocket.send(serializeJsonRpcError(requestId, error));\n\t}\n\n\tasync function openSocket(): Promise<WebSocket> {\n\t\toptions.onConnectionStatus?.(\"connecting\");\n\t\teventQueue.reopen();\n\t\tconst WebSocketCtor = options.WebSocket ?? WebSocket;\n\t\tconst websocketUrl = await resolveUrl(options.url);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet settled = false;\n\t\t\tconst nextSocket = new WebSocketCtor(websocketUrl);\n\t\t\tsocket = nextSocket;\n\t\t\tnextSocket.addEventListener(\"open\", () => {\n\t\t\t\tsettled = true;\n\t\t\t\toptions.onConnectionStatus?.(\"connected\");\n\t\t\t\tresolve(nextSocket);\n\t\t\t});\n\t\t\tnextSocket.addEventListener(\"message\", (message) => {\n\t\t\t\thandleSocketMessage(message.data);\n\t\t\t});\n\t\t\tnextSocket.addEventListener(\"close\", () => {\n\t\t\t\tconst error = new CodexAppServerClientTransportError(\n\t\t\t\t\t\"Codex app-server WebSocket closed.\",\n\t\t\t\t);\n\t\t\t\tcloseSocketState(error);\n\t\t\t\teventQueue.push({ message: \"closed\", type: \"disconnected\" });\n\t\t\t\teventQueue.close();\n\t\t\t\toptions.onConnectionStatus?.(\"closed\");\n\t\t\t\tif (!settled) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t\tnextSocket.addEventListener(\"error\", () => {\n\t\t\t\tconst error = new CodexAppServerClientTransportError(\n\t\t\t\t\t\"Codex app-server WebSocket failed.\",\n\t\t\t\t);\n\t\t\t\tcloseSocketState(error);\n\t\t\t\teventQueue.fail(error);\n\t\t\t\toptions.onConnectionStatus?.(\"error\");\n\t\t\t\tif (!settled) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tfunction handleSocketMessage(value: unknown): void {\n\t\tconst parsed = parseClientTransportPayload(value);\n\t\tif (parsed.type === \"invalid\") {\n\t\t\tconst event = options.parseEvent?.(value);\n\t\t\tif (event) {\n\t\t\t\teventQueue.push(event);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst message = parsed.message;\n\t\tswitch (message.type) {\n\t\t\tcase \"response\": {\n\t\t\t\tconst pending = pendingRequests.get(message.response.id);\n\t\t\t\tif (!pending) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpendingRequests.delete(message.response.id);\n\t\t\t\tpending.resolve(message.response.result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"error\": {\n\t\t\t\tif (message.error.id === null) {\n\t\t\t\t\teventQueue.fail(message.error.error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pending = pendingRequests.get(message.error.id);\n\t\t\t\tif (!pending) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpendingRequests.delete(message.error.id);\n\t\t\t\tpending.reject(message.error.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"server_notification\":\n\t\t\t\teventQueue.push({\n\t\t\t\t\tnotification: message.notification,\n\t\t\t\t\ttype: \"server_notification\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"server_request\":\n\t\t\t\teventQueue.push({ request: message.request, type: \"server_request\" });\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tfunction closeSocketState(error: unknown): void {\n\t\tsocket = null;\n\t\topenPromise = null;\n\t\tinitializePromise = null;\n\t\tinitialized = false;\n\t\tfor (const pending of pendingRequests.values()) {\n\t\t\tpending.reject(error);\n\t\t}\n\t\tpendingRequests.clear();\n\t}\n\n\tfunction close(): void {\n\t\tconst currentSocket = socket;\n\t\tcloseSocketState(\n\t\t\tnew CodexAppServerClientTransportError(\n\t\t\t\t\"Codex app-server WebSocket closed.\",\n\t\t\t),\n\t\t);\n\t\teventQueue.close();\n\t\tif (currentSocket && currentSocket.readyState !== 3) {\n\t\t\tcurrentSocket.close();\n\t\t}\n\t}\n\n\treturn {\n\t\tclose,\n\t\tevents() {\n\t\t\tvoid ensureInitialized().catch((error) => eventQueue.fail(error));\n\t\t\treturn eventQueue.iterable();\n\t\t},\n\t\trequest,\n\t\trequestTyped<T>(clientRequest: ClientRequest): Promise<T> {\n\t\t\treturn requestTypedWithErrors<T>(clientRequest, request);\n\t\t},\n\t\trejectServerRequest(requestId: RequestId, error: JSONRPCErrorError) {\n\t\t\treturn sendClientError(requestId, error);\n\t\t},\n\t\tresolveServerRequest(requestId: RequestId, result: Result) {\n\t\t\treturn sendClientResponse(requestId, result);\n\t\t},\n\t};\n}\n\nexport function parseCodexAppServerEvent(value: unknown): AppServerEvent | null {\n\tconst parsed = parseClientTransportPayload(value);\n\tif (parsed.type === \"ok\") {\n\t\tswitch (parsed.message.type) {\n\t\t\tcase \"server_notification\":\n\t\t\t\treturn {\n\t\t\t\t\tnotification: parsed.message.notification,\n\t\t\t\t\ttype: \"server_notification\",\n\t\t\t\t};\n\t\t\tcase \"server_request\":\n\t\t\t\treturn { request: parsed.message.request, type: \"server_request\" };\n\t\t\tcase \"error\":\n\t\t\tcase \"response\":\n\t\t\t\treturn null;\n\t\t}\n\t}\n\tif (typeof value !== \"string\") {\n\t\treturn appServerEventFromParsed(value);\n\t}\n\ttry {\n\t\treturn appServerEventFromParsed(JSON.parse(value) as unknown);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function resolveInitializeParams(\n\tparams: CodexAppServerClientOptions[\"initializeParams\"],\n): Promise<InitializeParams> {\n\tif (typeof params === \"function\") {\n\t\treturn params();\n\t}\n\treturn params ?? defaultInitializeParams();\n}\n\nasync function resolveUrl(\n\turl: CodexAppServerClientOptions[\"url\"],\n): Promise<string> {\n\treturn typeof url === \"function\" ? await url() : url;\n}\n\nfunction defaultInitializeParams(): InitializeParams {\n\treturn {\n\t\tcapabilities: {\n\t\t\texperimentalApi: false,\n\t\t\toptOutNotificationMethods: [],\n\t\t},\n\t\tclientInfo: {\n\t\t\tname: \"codex-js\",\n\t\t\ttitle: null,\n\t\t\tversion: \"0.0.0\",\n\t\t},\n\t};\n}\n\nfunction appServerEventFromParsed(value: unknown): AppServerEvent | null {\n\tif (isObject(value) && typeof value.type === \"string\") {\n\t\tif (\n\t\t\tvalue.type === \"server_notification\" ||\n\t\t\tvalue.type === \"server_request\" ||\n\t\t\tvalue.type === \"lagged\" ||\n\t\t\tvalue.type === \"disconnected\"\n\t\t) {\n\t\t\treturn value as AppServerEvent;\n\t\t}\n\t}\n\tif (isObject(value) && typeof value.method === \"string\" && \"params\" in value) {\n\t\tif (\"id\" in value) {\n\t\t\treturn { request: value as ServerRequest, type: \"server_request\" };\n\t\t}\n\t\treturn {\n\t\t\tnotification: value as ServerNotification,\n\t\t\ttype: \"server_notification\",\n\t\t};\n\t}\n\treturn null;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction createEventQueue<T>() {\n\tconst values: T[] = [];\n\ttype Waiter = {\n\t\treject: (error: unknown) => void;\n\t\tresolve: (value: IteratorResult<T>) => void;\n\t\tsettled: boolean;\n\t};\n\tconst waiters: Waiter[] = [];\n\tlet closed = false;\n\tlet failure: unknown = null;\n\n\treturn {\n\t\tclose() {\n\t\t\tclosed = true;\n\t\t\tfor (const waiter of waiters.splice(0)) {\n\t\t\t\twaiter.settled = true;\n\t\t\t\twaiter.resolve({ done: true, value: undefined });\n\t\t\t}\n\t\t},\n\t\tfail(error: unknown) {\n\t\t\tfailure = error;\n\t\t\tfor (const waiter of waiters.splice(0)) {\n\t\t\t\twaiter.settled = true;\n\t\t\t\twaiter.reject(error);\n\t\t\t}\n\t\t},\n\t\tpush(value: T) {\n\t\t\twhile (waiters.length > 0) {\n\t\t\t\tconst waiter = waiters.shift() as Waiter;\n\t\t\t\tif (waiter.settled) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\twaiter.settled = true;\n\t\t\t\twaiter.resolve({ done: false, value });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvalues.push(value);\n\t\t},\n\t\treopen() {\n\t\t\tvalues.splice(0);\n\t\t\tclosed = false;\n\t\t\tfailure = null;\n\t\t},\n\t\titerable(options: { onReturn?: () => void } = {}): AsyncIterable<T> {\n\t\t\treturn {\n\t\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\t\tlet active = true;\n\t\t\t\t\tlet pendingWaiter: Waiter | null = null;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnext() {\n\t\t\t\t\t\t\tif (!active) {\n\t\t\t\t\t\t\t\treturn Promise.resolve({ done: true, value: undefined });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (failure) {\n\t\t\t\t\t\t\t\treturn Promise.reject(failure);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (values.length > 0) {\n\t\t\t\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\t\t\t\tvalue: values.shift() as 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\tif (closed) {\n\t\t\t\t\t\t\t\treturn Promise.resolve({ done: true, value: undefined });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Promise<IteratorResult<T>>((resolve, reject) => {\n\t\t\t\t\t\t\t\tconst waiter = { reject, resolve, settled: false };\n\t\t\t\t\t\t\t\tpendingWaiter = waiter;\n\t\t\t\t\t\t\t\twaiters.push(waiter);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\treturn() {\n\t\t\t\t\t\t\toptions.onReturn?.();\n\t\t\t\t\t\t\tactive = false;\n\t\t\t\t\t\t\tif (pendingWaiter && !pendingWaiter.settled) {\n\t\t\t\t\t\t\t\tpendingWaiter.settled = true;\n\t\t\t\t\t\t\t\tconst index = waiters.indexOf(pendingWaiter);\n\t\t\t\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t\t\t\twaiters.splice(index, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpendingWaiter.resolve({ done: true, value: undefined });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn Promise.resolve({ done: true, value: undefined });\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n","import type {\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingMessage,\n\tResult,\n} from \"../../app-server-transport/src/outgoing_message\";\nimport type { ThreadId } from \"../../core/src/ids\";\n\nexport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingError,\n\tOutgoingMessage,\n\tOutgoingResponse,\n\tQueuedOutgoingMessage,\n\tResult,\n} from \"../../app-server-transport/src/outgoing_message\";\n\nexport type AppServerEvent =\n\t| { notification: ServerNotification; type: \"server_notification\" }\n\t| { request: ServerRequest; type: \"server_request\" }\n\t| { skipped: number; type: \"lagged\" }\n\t| { message: string; type: \"disconnected\" };\n\nexport type ConnectionRequestId = {\n\tconnectionId: ConnectionId;\n\trequestId: RequestId;\n};\n\nexport type RequestContext = {\n\tconnectionId: ConnectionId;\n\trequestId: RequestId;\n};\n\ntype PendingCallbackEntry = {\n\tcallback: (result: PendingCallbackResult) => void;\n\tconnectionIds: ConnectionId[] | null;\n\trequest: ServerRequest;\n\tthreadId: ThreadId | null;\n};\n\ntype PendingCallbackResult =\n\t| { result: Result; type: \"ok\" }\n\t| { error: JSONRPCErrorError; type: \"error\" };\n\nexport type OutgoingServerRequestHandle = {\n\trequest: ServerRequest;\n\tresult: Promise<Result>;\n};\n\nexport type OutgoingMessageSenderOptions = {\n\tsend: (\n\t\tmessage: OutgoingMessage,\n\t\tcontext: {\n\t\t\tconnectionIds?: ConnectionId[];\n\t\t\tcontext?: unknown;\n\t\t\tthreadId?: ThreadId;\n\t\t},\n\t) => Promise<void> | void;\n};\n\nexport class OutgoingMessageSender {\n\tprivate nextServerRequestId = 0;\n\tprivate readonly requestIdToCallback = new Map<RequestId, PendingCallbackEntry>();\n\tprivate readonly requestContexts = new Map<string, RequestContext>();\n\tprivate readonly sendMessage: OutgoingMessageSenderOptions[\"send\"];\n\n\tconstructor(options: OutgoingMessageSenderOptions) {\n\t\tthis.sendMessage = options.send;\n\t}\n\n\tthreadScoped(threadId: ThreadId): ThreadScopedOutgoingMessageSender {\n\t\treturn new ThreadScopedOutgoingMessageSender(this, threadId, []);\n\t}\n\n\tthreadScopedForConnections(\n\t\tthreadId: ThreadId,\n\t\tconnectionIds: ConnectionId[],\n\t): ThreadScopedOutgoingMessageSender {\n\t\treturn new ThreadScopedOutgoingMessageSender(this, threadId, connectionIds);\n\t}\n\n\tasync sendServerNotification(\n\t\tnotification: ServerNotification,\n\t\tcontext?: unknown,\n\t\tthreadId?: ThreadId,\n\t\tconnectionIds?: ConnectionId[],\n\t): Promise<void> {\n\t\tawait this.sendMessage(notification, {\n\t\t\tconnectionIds,\n\t\t\tcontext,\n\t\t\tthreadId: serverNotificationThreadId(notification) ?? threadId,\n\t\t});\n\t}\n\n\tasync sendRequest(\n\t\trequest: ServerRequest,\n\t\tthreadId: ThreadId | null = serverRequestThreadId(request),\n\t\tcontext?: unknown,\n\t\tconnectionIds?: ConnectionId[],\n\t): Promise<Result> {\n\t\treturn this.sendRequestWithHandle(request, threadId, context, connectionIds).result;\n\t}\n\n\tsendRequestWithHandle(\n\t\trequest: ServerRequest,\n\t\tthreadId: ThreadId | null = serverRequestThreadId(request),\n\t\tcontext?: unknown,\n\t\tconnectionIds?: ConnectionId[],\n\t): OutgoingServerRequestHandle {\n\t\tconst requestWithId = request.id === undefined\n\t\t\t? ({ ...request, id: this.nextRequestId() } as ServerRequest)\n\t\t\t: request;\n\t\tlet rejectResult: (error: unknown) => void = () => {};\n\t\tconst result = new Promise<Result>((resolve, reject) => {\n\t\t\trejectResult = reject;\n\t\t\tthis.requestIdToCallback.set(requestWithId.id, {\n\t\t\t\tcallback: (entry) => {\n\t\t\t\t\tif (entry.type === \"ok\") {\n\t\t\t\t\t\tresolve(entry.result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treject(entry.error);\n\t\t\t\t},\n\t\t\t\tconnectionIds: connectionIds ?? null,\n\t\t\t\trequest: requestWithId,\n\t\t\t\tthreadId,\n\t\t\t});\n\t\t});\n\t\tvoid Promise.resolve(\n\t\t\tthis.sendMessage(requestWithId, {\n\t\t\t\tconnectionIds,\n\t\t\t\tcontext,\n\t\t\t\tthreadId: threadId ?? undefined,\n\t\t\t}),\n\t\t).catch((error) => {\n\t\t\tthis.requestIdToCallback.delete(requestWithId.id);\n\t\t\trejectResult(error);\n\t\t});\n\t\treturn { request: requestWithId, result };\n\t}\n\n\tregisterRequestContext(requestContext: RequestContext): void {\n\t\tthis.requestContexts.set(connectionRequestKey(requestContext), requestContext);\n\t}\n\n\trequestContext(requestId: ConnectionRequestId): RequestContext | null {\n\t\treturn this.requestContexts.get(connectionRequestKey(requestId)) ?? null;\n\t}\n\n\tasync sendResponse(\n\t\trequestId: ConnectionRequestId,\n\t\tresult: Result,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\tthis.requestContexts.delete(connectionRequestKey(requestId));\n\t\tawait this.sendMessage(\n\t\t\t{ id: requestId.requestId, result },\n\t\t\t{ connectionIds: [requestId.connectionId], context },\n\t\t);\n\t}\n\n\tasync sendError(\n\t\trequestId: ConnectionRequestId,\n\t\terror: JSONRPCErrorError,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\tthis.requestContexts.delete(connectionRequestKey(requestId));\n\t\tawait this.sendMessage(\n\t\t\t{ error, id: requestId.requestId },\n\t\t\t{ connectionIds: [requestId.connectionId], context },\n\t\t);\n\t}\n\n\tasync notifyClientResponse(id: RequestId, result: Result): Promise<void> {\n\t\tconst entry = this.takeRequestCallback(id);\n\t\tentry?.callback({ result, type: \"ok\" });\n\t}\n\n\tasync notifyClientError(\n\t\tid: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void> {\n\t\tconst entry = this.takeRequestCallback(id);\n\t\tentry?.callback({ error, type: \"error\" });\n\t}\n\n\tcancelRequest(id: RequestId): boolean {\n\t\treturn this.takeRequestCallback(id) !== null;\n\t}\n\n\tconnectionClosed(connectionId: ConnectionId): void {\n\t\tfor (const [requestKey, requestContext] of this.requestContexts) {\n\t\t\tif (requestContext.connectionId === connectionId) {\n\t\t\t\tthis.requestContexts.delete(requestKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tcancelRequestsForThread(\n\t\tthreadId: ThreadId,\n\t\terror?: JSONRPCErrorError,\n\t): void {\n\t\tfor (const [requestId, entry] of this.requestIdToCallback) {\n\t\t\tif (entry.threadId !== threadId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.requestIdToCallback.delete(requestId);\n\t\t\tif (error) {\n\t\t\t\tentry.callback({ error, type: \"error\" });\n\t\t\t}\n\t\t}\n\t}\n\n\tpendingRequestsForThread(threadId: ThreadId): ServerRequest[] {\n\t\treturn Array.from(this.requestIdToCallback.values())\n\t\t\t.filter((entry) => entry.threadId === threadId)\n\t\t\t.map((entry) => entry.request)\n\t\t\t.sort((left, right) => String(left.id).localeCompare(String(right.id)));\n\t}\n\n\tprivate nextRequestId(): RequestId {\n\t\tconst id = this.nextServerRequestId;\n\t\tthis.nextServerRequestId += 1;\n\t\treturn id;\n\t}\n\n\tprivate takeRequestCallback(id: RequestId): PendingCallbackEntry | null {\n\t\tconst entry = this.requestIdToCallback.get(id) ?? null;\n\t\tthis.requestIdToCallback.delete(id);\n\t\treturn entry;\n\t}\n}\n\nexport class ThreadScopedOutgoingMessageSender {\n\tconstructor(\n\t\tprivate readonly outgoing: OutgoingMessageSender,\n\t\tprivate readonly threadId: ThreadId,\n\t\tprivate readonly connectionIds: ConnectionId[] = [],\n\t) {}\n\n\tsendRequest(request: ServerRequest, context?: unknown): Promise<Result> {\n\t\treturn this.outgoing.sendRequest(\n\t\t\trequest,\n\t\t\tthis.threadId,\n\t\t\tcontext,\n\t\t\tthis.connectionIds.length > 0 ? this.connectionIds : undefined,\n\t\t);\n\t}\n\n\tsendServerNotification(\n\t\tnotification: ServerNotification,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendServerNotification(\n\t\t\tnotification,\n\t\t\tcontext,\n\t\t\tthis.threadId,\n\t\t\tthis.connectionIds.length > 0 ? this.connectionIds : undefined,\n\t\t);\n\t}\n\n\tsendResponse(\n\t\trequestId: ConnectionRequestId,\n\t\tresult: Result,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendResponse(requestId, result, context);\n\t}\n\n\tsendError(\n\t\trequestId: ConnectionRequestId,\n\t\terror: JSONRPCErrorError,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendError(requestId, error, context);\n\t}\n\n\tabortPendingServerRequests(error?: JSONRPCErrorError): void {\n\t\tthis.outgoing.cancelRequestsForThread(this.threadId, error);\n\t}\n\n\tpendingRequests(): ServerRequest[] {\n\t\treturn this.outgoing.pendingRequestsForThread(this.threadId);\n\t}\n}\n\nexport function outgoingMessageToAppServerEvent(\n\tmessage: OutgoingMessage,\n): AppServerEvent | null {\n\tif (isServerNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message,\n\t\t\ttype: \"server_notification\",\n\t\t};\n\t}\n\tif (isServerRequest(message)) {\n\t\treturn { request: message, type: \"server_request\" };\n\t}\n\treturn null;\n}\n\nfunction serverNotificationThreadId(notification: ServerNotification): ThreadId | null {\n\tconst params = notification.params as { threadId?: unknown } | undefined;\n\tif (typeof params?.threadId === \"string\") {\n\t\treturn params.threadId as ThreadId;\n\t}\n\tconst thread = (params as { thread?: { id?: unknown } } | undefined)?.thread;\n\tif (typeof thread?.id === \"string\") {\n\t\treturn thread.id as ThreadId;\n\t}\n\tconst turn = (params as { turn?: { threadId?: unknown } } | undefined)?.turn;\n\tif (typeof turn?.threadId === \"string\") {\n\t\treturn turn.threadId as ThreadId;\n\t}\n\treturn null;\n}\n\nfunction serverRequestThreadId(request: ServerRequest): ThreadId | null {\n\tconst params = request.params as { threadId?: unknown } | undefined;\n\treturn typeof params?.threadId === \"string\" ? (params.threadId as ThreadId) : null;\n}\n\nfunction connectionRequestKey(requestId: ConnectionRequestId): string {\n\treturn `${requestId.connectionId}:${String(requestId.requestId)}`;\n}\n\nfunction isServerRequest(message: OutgoingMessage): message is ServerRequest {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\tObject.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isServerNotification(\n\tmessage: OutgoingMessage,\n): message is ServerNotification {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\t!Object.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n","import type { RequestId } from \"../../../app-server-protocol/schema/typescript\";\nimport type { JSONRPCErrorError } from \"../outgoing_message\";\n\nexport class CodexAppServerRequestError extends Error {\n\tconstructor(\n\t\treadonly error: JSONRPCErrorError,\n\t\treadonly status = 400,\n\t) {\n\t\tsuper(error.message);\n\t\tthis.name = \"CodexAppServerRequestError\";\n\t}\n}\n\nexport function unsupportedMethodError(\n\tmethod: string,\n\trequestId: RequestId,\n): JSONRPCErrorError {\n\treturn {\n\t\tcode: -32601,\n\t\tdata: { requestId },\n\t\tmessage: `Unsupported Codex App Server method: ${method}`,\n\t};\n}\n\nexport function errorToJsonRpcError(error: unknown): JSONRPCErrorError {\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\ttypeof (error as { code?: unknown }).code === \"number\" &&\n\t\ttypeof (error as { message?: unknown }).message === \"string\"\n\t) {\n\t\treturn error as JSONRPCErrorError;\n\t}\n\treturn {\n\t\tcode: -32000,\n\t\tmessage:\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"Codex App Server request failed.\",\n\t};\n}\n","export class ConnectionRpcGateClosedError extends Error {\n\tconstructor() {\n\t\tsuper(\"Codex App Server connection is closed.\");\n\t\tthis.name = \"ConnectionRpcGateClosedError\";\n\t}\n}\n\nexport class ConnectionRpcGate {\n\tprivate accepting = true;\n\tprivate inFlight = 0;\n\tprivate readonly shutdownWaiters = new Set<() => void>();\n\n\tisAccepting(): boolean {\n\t\treturn this.accepting;\n\t}\n\n\tasync run<T>(work: () => Promise<T> | T): Promise<T> {\n\t\tif (!this.accepting) {\n\t\t\tthrow new ConnectionRpcGateClosedError();\n\t\t}\n\t\tthis.inFlight += 1;\n\t\ttry {\n\t\t\treturn await work();\n\t\t} finally {\n\t\t\tthis.inFlight -= 1;\n\t\t\tif (!this.accepting && this.inFlight === 0) {\n\t\t\t\tfor (const resolve of this.shutdownWaiters) {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\tthis.shutdownWaiters.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.accepting = false;\n\t\tif (this.inFlight === 0) {\n\t\t\treturn;\n\t\t}\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tthis.shutdownWaiters.add(resolve);\n\t\t});\n\t}\n}\n","import type { ClientRequestSerializationScope } from \"../../app-server-protocol/src/protocol\";\n\nexport type RequestSerializationQueueKey = string;\n\nexport class RequestSerializationQueues {\n\tprivate readonly tails = new Map<RequestSerializationQueueKey, Promise<unknown>>();\n\n\tasync enqueue<T>(\n\t\tkey: RequestSerializationQueueKey,\n\t\twork: () => Promise<T> | T,\n\t): Promise<T> {\n\t\tconst previous = this.tails.get(key) ?? Promise.resolve();\n\t\tconst current = previous\n\t\t\t.catch(() => undefined)\n\t\t\t.then(() => work());\n\t\tconst tail = current.catch(() => undefined).finally(() => {\n\t\t\tif (this.tails.get(key) === tail) {\n\t\t\t\tthis.tails.delete(key);\n\t\t\t}\n\t\t});\n\t\tthis.tails.set(\n\t\t\tkey,\n\t\t\ttail,\n\t\t);\n\t\treturn current;\n\t}\n}\n\nexport function requestSerializationQueueKeyFromScope(\n\tconnectionId: number | string,\n\tscope: ClientRequestSerializationScope,\n): RequestSerializationQueueKey {\n\tswitch (scope.type) {\n\t\tcase \"global\":\n\t\t\treturn `global:${scope.key}`;\n\t\tcase \"thread\":\n\t\t\treturn `thread:${scope.threadId}`;\n\t\tcase \"threadPath\":\n\t\t\treturn `thread-path:${scope.path}`;\n\t\tcase \"commandExecProcess\":\n\t\t\treturn `connection:${connectionId}:command-exec-process:${scope.processId}`;\n\t\tcase \"process\":\n\t\t\treturn `connection:${connectionId}:process:${scope.processHandle}`;\n\t\tcase \"fuzzyFileSearchSession\":\n\t\t\treturn `fuzzy-file-search-session:${scope.sessionId}`;\n\t\tcase \"fsWatch\":\n\t\t\treturn `connection:${connectionId}:fs-watch:${scope.watchId}`;\n\t\tcase \"mcpOauth\":\n\t\t\treturn `mcp-oauth:${scope.serverName}`;\n\t}\n}\n","import type {\n\tClientInfo,\n\tClientRequest,\n\tInitializeParams,\n\tInitializeResponse,\n\tRequestId,\n} from \"../../app-server-protocol/schema/typescript\";\nimport {\n\tclientRequestExperimentalReason,\n\tclientRequestSerializationScope,\n} from \"../../app-server-protocol/src/protocol\";\nimport { builtinCollaborationModePresets } from \"../../core/src/collaboration-mode-presets\";\nimport type { CollaborationModeMask as CoreCollaborationModeMask } from \"../../core/src/config-types\";\nimport type {\n\tCollaborationModeListParams,\n\tCollaborationModeListResponse,\n\tCollaborationModeMask,\n\tListMcpServerStatusParams,\n\tListMcpServerStatusResponse,\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tMcpServerRefreshResponse,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tThreadArchiveParams,\n\tThreadArchiveResponse,\n\tThreadCompactStartParams,\n\tThreadCompactStartResponse,\n\tThreadListParams,\n\tThreadListResponse,\n\tThreadMetadataUpdateParams,\n\tThreadMetadataUpdateResponse,\n\tThreadReadParams,\n\tThreadReadResponse,\n\tThreadResumeParams,\n\tThreadResumeResponse,\n\tThreadSetNameParams,\n\tThreadSetNameResponse,\n\tThreadStartParams,\n\tThreadStartResponse,\n\tThreadUnarchiveParams,\n\tThreadUnarchiveResponse,\n\tTurnInterruptParams,\n\tTurnInterruptResponse,\n\tTurnStartParams,\n\tTurnStartResponse,\n\tTurnSteerParams,\n\tTurnSteerResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tCodexAppServerRequestError,\n\tunsupportedMethodError,\n} from \"./request_processors/request_errors\";\nimport {\n\tConnectionRpcGate,\n\tConnectionRpcGateClosedError,\n} from \"./connection_rpc_gate\";\nimport {\n\tRequestSerializationQueues,\n\trequestSerializationQueueKeyFromScope,\n} from \"./request_serialization\";\nimport type {\n\tConnectionId,\n\tConnectionRequestId,\n\tJSONRPCErrorError,\n\tOutgoingMessageSender,\n} from \"./outgoing_message\";\n\nexport type CodexAppServerRequestContext = {\n\tconnectionId: ConnectionId;\n\toutgoing: OutgoingMessageSender;\n\trequestId: ConnectionRequestId;\n\tsession: CodexAppServerConnectionSessionState;\n};\n\nexport type CodexAppServerMethodHandlers<Context = unknown> = {\n\tcollaborationModeList?(\n\t\tparams: CollaborationModeListParams,\n\t\tcontext?: Context,\n\t): Promise<CollaborationModeListResponse>;\n\tinitialize?(\n\t\tparams: InitializeParams,\n\t\tcontext?: Context,\n\t\tsession?: CodexAppServerConnectionSessionState,\n\t): Promise<InitializeResponse>;\n\tconfigMcpServerReload?(\n\t\tparams: undefined,\n\t\tcontext?: Context,\n\t): Promise<McpServerRefreshResponse>;\n\tmcpResourceRead?(\n\t\tparams: McpResourceReadParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpResourceReadResponse | CodexAppServerDeferredResponse>;\n\tmcpServerOauthLogin?(\n\t\tparams: McpServerOauthLoginParams,\n\t\tcontext?: Context,\n\t): Promise<McpServerOauthLoginResponse>;\n\tmcpServerStatusList?(\n\t\tparams: ListMcpServerStatusParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<ListMcpServerStatusResponse | CodexAppServerDeferredResponse>;\n\tmcpServerToolCall?(\n\t\tparams: McpServerToolCallParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpServerToolCallResponse | CodexAppServerDeferredResponse>;\n\tthreadArchive?(\n\t\tparams: ThreadArchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadArchiveResponse>;\n\tthreadCompactStart(\n\t\tparams: ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadCompactStartResponse>;\n\tthreadList?(\n\t\tparams: ThreadListParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadListResponse>;\n\tthreadMetadataUpdate?(\n\t\tparams: ThreadMetadataUpdateParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadMetadataUpdateResponse>;\n\tthreadNameSet?(\n\t\tparams: ThreadSetNameParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadSetNameResponse>;\n\tthreadRead?(\n\t\tparams: ThreadReadParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadReadResponse>;\n\tthreadResume(\n\t\tparams: ThreadResumeParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadResumeResponse>;\n\tthreadStart(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadStartResponse>;\n\tthreadUnarchive?(\n\t\tparams: ThreadUnarchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadUnarchiveResponse>;\n\tturnInterrupt(\n\t\tparams: TurnInterruptParams,\n\t\tcontext?: Context,\n\t): Promise<TurnInterruptResponse>;\n\tturnStart(\n\t\tparams: TurnStartParams,\n\t\tcontext?: Context,\n\t): Promise<TurnStartResponse>;\n\tturnSteer(\n\t\tparams: TurnSteerParams,\n\t\tcontext?: Context,\n\t): Promise<TurnSteerResponse>;\n};\n\nexport type InitializedConnectionSessionState = {\n\tappServerClientName: string;\n\tclientVersion: string;\n\texperimentalApiEnabled: boolean;\n\toptedOutNotificationMethods: ReadonlySet<string>;\n};\n\nexport class CodexAppServerConnectionSessionState {\n\treadonly rpcGate = new ConnectionRpcGate();\n\tprivate initializedState: InitializedConnectionSessionState | null = null;\n\n\tconstructor(initializedState?: InitializedConnectionSessionState | null) {\n\t\tthis.initializedState = initializedState ?? null;\n\t}\n\n\tinitialized(): boolean {\n\t\treturn this.initializedState !== null;\n\t}\n\n\tinitialize(state: InitializedConnectionSessionState): void {\n\t\tif (this.initializedState) {\n\t\t\tthrow invalidRequest(\"Already initialized\");\n\t\t}\n\t\tthis.initializedState = state;\n\t}\n\n\texperimentalApiEnabled(): boolean {\n\t\treturn this.initializedState?.experimentalApiEnabled ?? false;\n\t}\n\n\toptedOutNotificationMethods(): ReadonlySet<string> {\n\t\treturn this.initializedState?.optedOutNotificationMethods ?? new Set();\n\t}\n\n\tappServerClientName(): string | null {\n\t\treturn this.initializedState?.appServerClientName ?? null;\n\t}\n\n\tclientVersion(): string | null {\n\t\treturn this.initializedState?.clientVersion ?? null;\n\t}\n}\n\nexport type CodexAppServerMessageProcessorOptions<Context = unknown> = {\n\tconnectionId?: ConnectionId;\n\thandlers: CodexAppServerMethodHandlers<Context>;\n\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\toutgoing?: OutgoingMessageSender;\n\trequestSerializationQueues?: RequestSerializationQueues;\n\tsession?: CodexAppServerConnectionSessionState;\n};\n\nexport type CodexAppServerConnectionRequestOutcome =\n\t| { result: unknown; type: \"response\" }\n\t| { type: \"deferred\" }\n\t| { error: JSONRPCErrorError; type: \"error\" };\n\nexport type CodexAppServerDeferredResponse = {\n\treadonly __codexAppServerDeferredResponse: true;\n};\n\nconst CODEX_APP_SERVER_DEFERRED_RESPONSE: CodexAppServerDeferredResponse = {\n\t__codexAppServerDeferredResponse: true,\n};\n\nexport function codexAppServerDeferredResponse(): CodexAppServerDeferredResponse {\n\treturn CODEX_APP_SERVER_DEFERRED_RESPONSE;\n}\n\nexport class CodexAppServerMessageProcessor<Context = unknown> {\n\treadonly connectionId: ConnectionId;\n\treadonly requestSerializationQueues: RequestSerializationQueues;\n\treadonly session: CodexAppServerConnectionSessionState;\n\tprivate readonly handlers: CodexAppServerMethodHandlers<Context>;\n\tprivate readonly initializeResponse:\n\t\t| InitializeResponse\n\t\t| (() => InitializeResponse)\n\t\t| undefined;\n\tprivate readonly outgoing: OutgoingMessageSender | undefined;\n\n\tconstructor(options: CodexAppServerMessageProcessorOptions<Context>) {\n\t\tthis.connectionId = options.connectionId ?? defaultConnectionId();\n\t\tthis.handlers = options.handlers;\n\t\tthis.initializeResponse = options.initializeResponse;\n\t\tthis.outgoing = options.outgoing;\n\t\tthis.requestSerializationQueues =\n\t\t\toptions.requestSerializationQueues ?? new RequestSerializationQueues();\n\t\tthis.session = options.session ?? new CodexAppServerConnectionSessionState();\n\t}\n\n\tasync processClientRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<unknown> {\n\t\tif (request.method === \"initialize\") {\n\t\t\treturn this.initialize(request.params, context);\n\t\t}\n\t\tif (!this.session.initialized()) {\n\t\t\tthrow invalidRequest(\"Not initialized\");\n\t\t}\n\t\tconst experimentalReason = clientRequestExperimentalReason(request);\n\t\tif (experimentalReason && !this.session.experimentalApiEnabled()) {\n\t\t\tthrow invalidRequest(experimentalRequiredMessage(experimentalReason));\n\t\t}\n\n\t\tconst scope = clientRequestSerializationScope(request);\n\t\tconst run = () =>\n\t\t\tthis.session.rpcGate.run(() =>\n\t\t\t\tthis.handleInitializedClientRequest(request, context),\n\t\t\t);\n\t\ttry {\n\t\t\tif (!scope) {\n\t\t\t\treturn await run();\n\t\t\t}\n\t\t\treturn await this.requestSerializationQueues.enqueue(\n\t\t\t\trequestSerializationQueueKeyFromScope(this.connectionId, scope),\n\t\t\t\trun,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (error instanceof ConnectionRpcGateClosedError) {\n\t\t\t\tthrow new CodexAppServerRequestError(\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t},\n\t\t\t\t\t499,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync processConnectionRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<CodexAppServerConnectionRequestOutcome> {\n\t\tif (!this.outgoing) {\n\t\t\tconst result = await this.processClientRequest(request, context);\n\t\t\treturn { result, type: \"response\" };\n\t\t}\n\t\tconst requestId = this.connectionRequestId(request.id);\n\t\tthis.outgoing.registerRequestContext({\n\t\t\tconnectionId: requestId.connectionId,\n\t\t\trequestId: requestId.requestId,\n\t\t});\n\t\ttry {\n\t\t\tconst result = await this.processClientRequest(request, context);\n\t\t\tif (isCodexAppServerDeferredResponse(result)) {\n\t\t\t\treturn { type: \"deferred\" };\n\t\t\t}\n\t\t\tawait this.outgoing.sendResponse(requestId, result);\n\t\t\treturn { result, type: \"response\" };\n\t\t} catch (error) {\n\t\t\tconst responseError =\n\t\t\t\terror instanceof CodexAppServerRequestError\n\t\t\t\t\t? error.error\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t: \"Codex App Server request failed.\",\n\t\t\t\t\t };\n\t\t\tawait this.outgoing.sendError(requestId, responseError);\n\t\t\treturn { error: responseError, type: \"error\" };\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.session.rpcGate.shutdown();\n\t}\n\n\tconnectionClosed(): Promise<void> {\n\t\tthis.outgoing?.connectionClosed(this.connectionId);\n\t\treturn this.shutdown();\n\t}\n\n\tprivate async initialize(\n\t\tparams: InitializeParams,\n\t\tcontext?: Context,\n\t): Promise<InitializeResponse> {\n\t\tvalidateClientInfo(params.clientInfo);\n\t\tconst capabilities = params.capabilities;\n\t\tthis.session.initialize({\n\t\t\tappServerClientName: params.clientInfo.name,\n\t\t\tclientVersion: params.clientInfo.version,\n\t\t\texperimentalApiEnabled: capabilities?.experimentalApi ?? false,\n\t\t\toptedOutNotificationMethods: new Set(\n\t\t\t\tcapabilities?.optOutNotificationMethods ?? [],\n\t\t\t),\n\t\t});\n\t\tif (this.handlers.initialize) {\n\t\t\treturn this.handlers.initialize(params, context, this.session);\n\t\t}\n\t\treturn this.defaultInitializeResponse();\n\t}\n\n\tprivate async handleInitializedClientRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<unknown> {\n\t\tswitch (request.method) {\n\t\t\tcase \"thread/start\":\n\t\t\t\treturn this.handlers.threadStart(request.params, context);\n\t\t\tcase \"thread/resume\":\n\t\t\t\treturn this.handlers.threadResume(request.params, context);\n\t\t\tcase \"thread/list\":\n\t\t\t\tif (this.handlers.threadList) {\n\t\t\t\t\treturn this.handlers.threadList(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/read\":\n\t\t\t\tif (this.handlers.threadRead) {\n\t\t\t\t\treturn this.handlers.threadRead(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/name/set\":\n\t\t\t\tif (this.handlers.threadNameSet) {\n\t\t\t\t\treturn this.handlers.threadNameSet(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/archive\":\n\t\t\t\tif (this.handlers.threadArchive) {\n\t\t\t\t\treturn this.handlers.threadArchive(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/unarchive\":\n\t\t\t\tif (this.handlers.threadUnarchive) {\n\t\t\t\t\treturn this.handlers.threadUnarchive(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/metadata/update\":\n\t\t\t\tif (this.handlers.threadMetadataUpdate) {\n\t\t\t\t\treturn this.handlers.threadMetadataUpdate(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"turn/start\":\n\t\t\t\treturn this.handlers.turnStart(request.params, context);\n\t\t\tcase \"turn/steer\":\n\t\t\t\treturn this.handlers.turnSteer(request.params, context);\n\t\t\tcase \"turn/interrupt\":\n\t\t\t\treturn this.handlers.turnInterrupt(request.params, context);\n\t\t\tcase \"thread/compact/start\":\n\t\t\t\treturn this.handlers.threadCompactStart(request.params, context);\n\t\t\tcase \"collaborationMode/list\":\n\t\t\t\tif (this.handlers.collaborationModeList) {\n\t\t\t\t\treturn this.handlers.collaborationModeList(request.params, context);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: builtinCollaborationModePresets().map(\n\t\t\t\t\t\tappServerCollaborationModeMask,\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\tcase \"config/mcpServer/reload\":\n\t\t\t\tif (this.handlers.configMcpServerReload) {\n\t\t\t\t\treturn this.handlers.configMcpServerReload(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServerStatus/list\":\n\t\t\t\tif (this.handlers.mcpServerStatusList) {\n\t\t\t\t\treturn this.handlers.mcpServerStatusList(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/resource/read\":\n\t\t\t\tif (this.handlers.mcpResourceRead) {\n\t\t\t\t\treturn this.handlers.mcpResourceRead(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/tool/call\":\n\t\t\t\tif (this.handlers.mcpServerToolCall) {\n\t\t\t\t\treturn this.handlers.mcpServerToolCall(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/oauth/login\":\n\t\t\t\tif (this.handlers.mcpServerOauthLogin) {\n\t\t\t\t\treturn this.handlers.mcpServerOauthLogin(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new CodexAppServerRequestError(\n\t\t\tunsupportedMethodError(request.method, request.id),\n\t\t\t404,\n\t\t);\n\t}\n\n\tprivate defaultInitializeResponse(): InitializeResponse {\n\t\tconst response =\n\t\t\ttypeof this.initializeResponse === \"function\"\n\t\t\t\t? this.initializeResponse()\n\t\t\t\t: this.initializeResponse;\n\t\treturn (\n\t\t\tresponse ?? {\n\t\t\t\tcodexHome: \"/\",\n\t\t\t\tplatformFamily: platformFamily(),\n\t\t\t\tplatformOs: platformOs(),\n\t\t\t\tuserAgent: \"codex-js\",\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate connectionRequestId(requestId: RequestId): ConnectionRequestId {\n\t\treturn {\n\t\t\tconnectionId: this.connectionId,\n\t\t\trequestId,\n\t\t};\n\t}\n\n\tprivate requestContext(requestId: RequestId): CodexAppServerRequestContext | undefined {\n\t\tif (!this.outgoing) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tconnectionId: this.connectionId,\n\t\t\toutgoing: this.outgoing,\n\t\t\trequestId: this.connectionRequestId(requestId),\n\t\t\tsession: this.session,\n\t\t};\n\t}\n}\n\nfunction isCodexAppServerDeferredResponse(\n\tvalue: unknown,\n): value is CodexAppServerDeferredResponse {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as CodexAppServerDeferredResponse)\n\t\t\t.__codexAppServerDeferredResponse === true\n\t);\n}\n\nfunction validateClientInfo(clientInfo: ClientInfo): void {\n\tif (!clientInfo.name || /[\\r\\n]/u.test(clientInfo.name)) {\n\t\tthrow invalidRequest(\n\t\t\t`Invalid clientInfo.name: '${clientInfo.name}'. Must be a valid HTTP header value.`,\n\t\t);\n\t}\n}\n\nfunction invalidRequest(message: string): CodexAppServerRequestError {\n\treturn new CodexAppServerRequestError(\n\t\t{ code: -32600, message } satisfies JSONRPCErrorError,\n\t\t400,\n\t);\n}\n\nfunction experimentalRequiredMessage(reason: string): string {\n\treturn `Experimental API capability is required for ${reason}.`;\n}\n\nfunction defaultConnectionId(): number {\n\treturn Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);\n}\n\nfunction platformFamily(): string {\n\tconst navigatorPlatform = (globalThis as { navigator?: { platform?: string } })\n\t\t.navigator?.platform;\n\tif (navigatorPlatform?.toLowerCase().includes(\"win\")) {\n\t\treturn \"windows\";\n\t}\n\treturn \"unix\";\n}\n\nfunction platformOs(): string {\n\tconst navigatorPlatform = (globalThis as { navigator?: { platform?: string } })\n\t\t.navigator?.platform?.toLowerCase();\n\tif (navigatorPlatform?.includes(\"mac\")) {\n\t\treturn \"macos\";\n\t}\n\tif (navigatorPlatform?.includes(\"win\")) {\n\t\treturn \"windows\";\n\t}\n\tif (navigatorPlatform?.includes(\"linux\")) {\n\t\treturn \"linux\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction appServerCollaborationModeMask(\n\tmask: CoreCollaborationModeMask,\n): CollaborationModeMask {\n\treturn {\n\t\tname: mask.name,\n\t\tmode: mask.mode ?? null,\n\t\tmodel: mask.model ?? null,\n\t\treasoning_effort:\n\t\t\tmask.reasoning_effort === undefined\n\t\t\t\t? null\n\t\t\t\t: (mask.reasoning_effort as CollaborationModeMask[\"reasoning_effort\"]),\n\t};\n}\n","export type ApiErrorCode =\n\t| \"transport\"\n\t| \"api\"\n\t| \"stream\"\n\t| \"context_window_exceeded\"\n\t| \"quota_exceeded\"\n\t| \"usage_not_included\"\n\t| \"retryable\"\n\t| \"rate_limit\"\n\t| \"invalid_request\"\n\t| \"cyber_policy\"\n\t| \"server_overloaded\";\n\nexport class ApiError extends Error {\n\treadonly code: ApiErrorCode;\n\treadonly status?: number;\n\treadonly delay_ms?: number | null;\n\n\tconstructor(input: {\n\t\tcode: ApiErrorCode;\n\t\tmessage: string;\n\t\tstatus?: number;\n\t\tdelay_ms?: number | null;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"ApiError\";\n\t\tthis.code = input.code;\n\t\tthis.status = input.status;\n\t\tthis.delay_ms = input.delay_ms ?? null;\n\t}\n\n\tstatic transport(message: string): ApiError {\n\t\treturn new ApiError({ code: \"transport\", message });\n\t}\n\n\tstatic api(status: number, message: string): ApiError {\n\t\treturn new ApiError({ code: \"api\", status, message });\n\t}\n\n\tstatic stream(message: string): ApiError {\n\t\treturn new ApiError({ code: \"stream\", message });\n\t}\n\n\tstatic retryable(message: string, delay_ms?: number | null): ApiError {\n\t\treturn new ApiError({ code: \"retryable\", message, delay_ms });\n\t}\n}\n\nexport function apiErrorFromResponsePayload(\n\tstatus: number,\n\tpayload: unknown,\n): ApiError {\n\tconst error = isRecord(payload) && isRecord(payload.error) ? payload.error : null;\n\tconst message =\n\t\ttypeof error?.message === \"string\" && error.message.trim()\n\t\t\t? error.message\n\t\t\t: `OpenAI Responses request failed with HTTP ${status}.`;\n\tconst code = typeof error?.code === \"string\" ? error.code : null;\n\n\tif (code === \"context_length_exceeded\") {\n\t\treturn new ApiError({ code: \"context_window_exceeded\", message });\n\t}\n\tif (code === \"insufficient_quota\") {\n\t\treturn new ApiError({ code: \"quota_exceeded\", message });\n\t}\n\tif (code === \"usage_not_included\") {\n\t\treturn new ApiError({ code: \"usage_not_included\", message });\n\t}\n\tif (code === \"invalid_prompt\") {\n\t\treturn new ApiError({ code: \"invalid_request\", message });\n\t}\n\tif (code === \"cyber_policy\") {\n\t\treturn new ApiError({\n\t\t\tcode: \"cyber_policy\",\n\t\t\tmessage:\n\t\t\t\tmessage ||\n\t\t\t\t\"This request has been flagged for possible cybersecurity risk.\",\n\t\t});\n\t}\n\tif (code === \"server_is_overloaded\" || code === \"slow_down\") {\n\t\treturn new ApiError({ code: \"server_overloaded\", message });\n\t}\n\tif (code === \"rate_limit_exceeded\") {\n\t\treturn new ApiError({\n\t\t\tcode: \"retryable\",\n\t\t\tmessage,\n\t\t\tdelay_ms: retryAfterDelayMs(message),\n\t\t});\n\t}\n\n\treturn ApiError.api(status, message);\n}\n\nexport function apiErrorFromResponsesEvent(event: Record<string, unknown>): ApiError {\n\tconst response = isRecord(event.response) ? event.response : null;\n\tconst error = isRecord(response?.error) ? response.error : null;\n\tif (!error) {\n\t\treturn ApiError.stream(`${String(event.type ?? \"response.failed\")} event received`);\n\t}\n\treturn apiErrorFromResponsePayload(200, { error });\n}\n\nexport function apiErrorFromUnknown(error: unknown): ApiError {\n\tif (error instanceof ApiError) {\n\t\treturn error;\n\t}\n\tif (error instanceof Error) {\n\t\treturn ApiError.transport(error.message);\n\t}\n\treturn ApiError.transport(String(error));\n}\n\nexport function htmlChallengeApiError(): ApiError {\n\treturn ApiError.stream(\n\t\t[\n\t\t\t\"ChatGPT backend returned an HTML challenge instead of a Codex response stream.\",\n\t\t\t\"This matches Codex's native-client-only Cloudflare cookie path and cannot be completed by the current Worker runtime.\",\n\t\t\t\"Use an OpenAI API key, or a ChatGPT account whose token can be exchanged for OpenAI API access.\",\n\t\t].join(\" \"),\n\t);\n}\n\nexport function isRetryableApiError(error: ApiError): boolean {\n\treturn (\n\t\terror.code === \"transport\" ||\n\t\terror.code === \"retryable\" ||\n\t\terror.code === \"server_overloaded\" ||\n\t\t(error.code === \"api\" && !!error.status && error.status >= 500)\n\t);\n}\n\nfunction retryAfterDelayMs(message: string): number | null {\n\tconst match = /try again in\\s*(\\d+(?:\\.\\d+)?)\\s*(s|ms|seconds?)/iu.exec(message);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst value = Number.parseFloat(match[1] ?? \"\");\n\tif (!Number.isFinite(value)) {\n\t\treturn null;\n\t}\n\tconst unit = (match[2] ?? \"\").toLowerCase();\n\treturn unit === \"ms\" ? Math.round(value) : Math.round(value * 1000);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ProviderRuntimeConfig } from \"../../core/src\";\n\nexport function responsesUrlWithQuery(runtime: ProviderRuntimeConfig): string {\n\tif (!runtime.query_params || Object.keys(runtime.query_params).length === 0) {\n\t\treturn runtime.responses_url;\n\t}\n\tconst url = new URL(runtime.responses_url);\n\tfor (const [key, value] of Object.entries(runtime.query_params)) {\n\t\turl.searchParams.set(key, value);\n\t}\n\treturn url.toString();\n}\n\nexport function websocketUrlForPath(\n\truntime: ProviderRuntimeConfig,\n\tpath: string,\n): string {\n\tconst base = runtime.base_url.replace(/\\/+$/, \"\");\n\tconst normalizedPath = path.replace(/^\\/+/, \"\");\n\tconst url = new URL(\n\t\tnormalizedPath ? `${base}/${normalizedPath}` : runtime.base_url,\n\t);\n\tif (runtime.query_params) {\n\t\tfor (const [key, value] of Object.entries(runtime.query_params)) {\n\t\t\turl.searchParams.set(key, value);\n\t\t}\n\t}\n\tif (url.protocol === \"https:\") {\n\t\turl.protocol = \"wss:\";\n\t} else if (url.protocol === \"http:\") {\n\t\turl.protocol = \"ws:\";\n\t}\n\treturn url.toString();\n}\n\nexport function providerRequestHeaders(input: {\n\tapi_key: string;\n\truntime: ProviderRuntimeConfig;\n\toriginator: string;\n\tuser_agent: string;\n\tchatgpt_account_id?: string | null;\n\tfedramp?: boolean;\n\textra_headers?: HeadersInit;\n}): Headers {\n\tconst headers = new Headers({\n\t\tauthorization: `Bearer ${input.api_key}`,\n\t\t\"content-type\": \"application/json\",\n\t\taccept: \"text/event-stream\",\n\t\t...input.runtime.headers,\n\t\toriginator: input.originator,\n\t\t\"user-agent\": input.user_agent,\n\t});\n\n\tif (input.chatgpt_account_id) {\n\t\theaders.set(\"ChatGPT-Account-ID\", input.chatgpt_account_id);\n\t}\n\tif (input.fedramp) {\n\t\theaders.set(\"X-OpenAI-Fedramp\", \"true\");\n\t}\n\tif (input.extra_headers) {\n\t\tfor (const [key, value] of new Headers(input.extra_headers)) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\nexport function providerWebsocketHeaders(input: {\n\tapi_key: string;\n\truntime: ProviderRuntimeConfig;\n\toriginator: string;\n\tuser_agent: string;\n\tchatgpt_account_id?: string | null;\n\tfedramp?: boolean;\n\textra_headers?: HeadersInit;\n\tdefault_headers?: HeadersInit;\n}): Headers {\n\tconst headers = new Headers({\n\t\t...input.runtime.headers,\n\t\toriginator: input.originator,\n\t\t\"user-agent\": input.user_agent,\n\t});\n\tif (input.default_headers) {\n\t\tfor (const [key, value] of new Headers(input.default_headers)) {\n\t\t\tif (!headers.has(key)) {\n\t\t\t\theaders.set(key, value);\n\t\t\t}\n\t\t}\n\t}\n\tif (input.extra_headers) {\n\t\tfor (const [key, value] of new Headers(input.extra_headers)) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t}\n\theaders.set(\"authorization\", `Bearer ${input.api_key}`);\n\tif (input.chatgpt_account_id) {\n\t\theaders.set(\"ChatGPT-Account-ID\", input.chatgpt_account_id);\n\t}\n\tif (input.fedramp) {\n\t\theaders.set(\"X-OpenAI-Fedramp\", \"true\");\n\t}\n\theaders.set(\"Upgrade\", \"websocket\");\n\treturn headers;\n}\n","export class AgentPath {\n\tstatic readonly ROOT = \"/root\";\n\n\tprivate constructor(private readonly value: string) {}\n\n\tstatic root(): AgentPath {\n\t\treturn new AgentPath(AgentPath.ROOT);\n\t}\n\n\tstatic parse(value: string): AgentPath {\n\t\tconst trimmed = value.trim();\n\t\tif (!trimmed.startsWith(\"/\")) {\n\t\t\tthrow new Error(`agent path must be absolute: ${value}`);\n\t\t}\n\t\treturn new AgentPath(trimmed.replace(/\\/+$/u, \"\") || AgentPath.ROOT);\n\t}\n\n\tisRoot(): boolean {\n\t\treturn this.value === AgentPath.ROOT;\n\t}\n\n\ttoString(): string {\n\t\treturn this.value;\n\t}\n}\n\nexport const DEFAULT_ROLE_NAME = \"default\";\n\nexport type AgentRoleConfig = {\n\tname: string;\n\tdescription?: string | null;\n\tinstructions?: string | null;\n\tnickname_candidates?: string[] | null;\n};\n\nconst BUILTIN_ROLES: Record<string, AgentRoleConfig> = {\n\tdefault: {\n\t\tname: \"default\",\n\t\tdescription: \"General-purpose Codex agent.\",\n\t\tnickname_candidates: null,\n\t},\n\texplorer: {\n\t\tname: \"explorer\",\n\t\tdescription: \"Read-only codebase exploration agent.\",\n\t\tnickname_candidates: [\"Explorer\", \"Scout\", \"Pathfinder\"],\n\t},\n\tawaiter: {\n\t\tname: \"awaiter\",\n\t\tdescription: \"Agent that waits for delegated work or external updates.\",\n\t\tnickname_candidates: [\"Awaiter\", \"Watcher\", \"Sentinel\"],\n\t},\n};\n\nexport function resolve_role_config(\n\troles: Record<string, AgentRoleConfig> | null | undefined,\n\trole_name = DEFAULT_ROLE_NAME,\n): AgentRoleConfig | null {\n\treturn roles?.[role_name] ?? BUILTIN_ROLES[role_name] ?? null;\n}\n\nexport function builtin_agent_roles(): Record<string, AgentRoleConfig> {\n\treturn structuredClone(BUILTIN_ROLES);\n}\n\nexport function default_agent_nickname_list(): string[] {\n\treturn [\"Atlas\", \"Beacon\", \"Cedar\", \"Delta\", \"Echo\", \"Harbor\", \"Iris\", \"Nova\"];\n}\n","import type { AgentPath } from \"./role\";\n\nexport type InterAgentCommunication = {\n\tauthor: AgentPath;\n\trecipient: AgentPath;\n\titems: unknown[];\n\tcontent: string;\n\ttrigger_turn: boolean;\n\tseq?: number;\n};\n\nexport class Mailbox {\n\tprivate readonly pending: InterAgentCommunication[] = [];\n\tprivate next_seq = 0;\n\n\tstatic new(): { mailbox: Mailbox; receiver: MailboxReceiver } {\n\t\tconst mailbox = new Mailbox();\n\t\treturn { mailbox, receiver: new MailboxReceiver(mailbox) };\n\t}\n\n\tsend(communication: Omit<InterAgentCommunication, \"seq\">): number {\n\t\tthis.next_seq += 1;\n\t\tthis.pending.push({ ...communication, seq: this.next_seq });\n\t\treturn this.next_seq;\n\t}\n\n\tdrain(): InterAgentCommunication[] {\n\t\treturn this.pending.splice(0);\n\t}\n\n\thas_pending(): boolean {\n\t\treturn this.pending.length > 0;\n\t}\n\n\thas_pending_trigger_turn(): boolean {\n\t\treturn this.pending.some((mail) => mail.trigger_turn);\n\t}\n}\n\nexport class MailboxReceiver {\n\tconstructor(private readonly mailbox: Mailbox) {}\n\n\thas_pending(): boolean {\n\t\treturn this.mailbox.has_pending();\n\t}\n\n\thas_pending_trigger_turn(): boolean {\n\t\treturn this.mailbox.has_pending_trigger_turn();\n\t}\n\n\tdrain(): InterAgentCommunication[] {\n\t\treturn this.mailbox.drain();\n\t}\n}\n","import type { ThreadId } from \"../ids\";\nimport { AgentPath } from \"./role\";\n\nexport type AgentMetadata = {\n\tagent_id?: ThreadId | null;\n\tagent_path?: AgentPath | null;\n\tagent_nickname?: string | null;\n\tagent_role?: string | null;\n\tlast_task_message?: string | null;\n};\n\nexport type LiveAgent = {\n\tthread_id: ThreadId;\n\tmetadata: AgentMetadata;\n\tstatus: AgentStatus;\n};\n\nexport type ListedAgent = {\n\tagent_name: string;\n\tagent_status: AgentStatus;\n\tlast_task_message?: string | null;\n};\n\nexport const AgentStatus = {\n\tRunning: \"running\",\n\tCompleted: \"completed\",\n\tFailed: \"failed\",\n\tClosed: \"closed\",\n\tCancelled: \"cancelled\",\n} as const;\n\nexport type AgentStatus = (typeof AgentStatus)[keyof typeof AgentStatus];\n\nexport class AgentRegistry {\n\tprivate readonly agent_tree = new Map<string, AgentMetadata>();\n\tprivate readonly used_agent_nicknames = new Set<string>();\n\tprivate total_count = 0;\n\tprivate nickname_reset_count = 0;\n\n\treserve_spawn_slot(max_threads?: number | null): SpawnReservation {\n\t\tif (max_threads != null && this.total_count >= max_threads) {\n\t\t\tthrow new Error(`agent thread limit reached: ${max_threads}`);\n\t\t}\n\t\tthis.total_count += 1;\n\t\treturn new SpawnReservation(this);\n\t}\n\n\trelease_spawned_thread(thread_id: ThreadId): void {\n\t\tfor (const [key, metadata] of this.agent_tree.entries()) {\n\t\t\tif (metadata.agent_id === thread_id) {\n\t\t\t\tthis.agent_tree.delete(key);\n\t\t\t\tif (!metadata.agent_path?.isRoot()) {\n\t\t\t\t\tthis.total_count = Math.max(0, this.total_count - 1);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\trelease_spawn_slot(): void {\n\t\tthis.total_count = Math.max(0, this.total_count - 1);\n\t}\n\n\tregister_root_thread(thread_id: ThreadId): void {\n\t\tif (!this.agent_tree.has(AgentPath.ROOT)) {\n\t\t\tthis.agent_tree.set(AgentPath.ROOT, {\n\t\t\t\tagent_id: thread_id,\n\t\t\t\tagent_path: AgentPath.root(),\n\t\t\t});\n\t\t}\n\t}\n\n\tagent_id_for_path(agent_path: AgentPath): ThreadId | null {\n\t\treturn this.agent_tree.get(agent_path.toString())?.agent_id ?? null;\n\t}\n\n\tagent_metadata_for_thread(thread_id: ThreadId): AgentMetadata | null {\n\t\treturn (\n\t\t\t[...this.agent_tree.values()].find(\n\t\t\t\t(metadata) => metadata.agent_id === thread_id,\n\t\t\t) ?? null\n\t\t);\n\t}\n\n\tlive_agents(): AgentMetadata[] {\n\t\treturn [...this.agent_tree.values()].filter(\n\t\t\t(metadata) => metadata.agent_id && !metadata.agent_path?.isRoot(),\n\t\t);\n\t}\n\n\tupdate_last_task_message(thread_id: ThreadId, last_task_message: string): void {\n\t\tconst metadata = this.agent_metadata_for_thread(thread_id);\n\t\tif (metadata) {\n\t\t\tmetadata.last_task_message = last_task_message;\n\t\t}\n\t}\n\n\tregister_spawned_thread(agent_metadata: AgentMetadata): void {\n\t\tif (!agent_metadata.agent_id) {\n\t\t\treturn;\n\t\t}\n\t\tconst key =\n\t\t\tagent_metadata.agent_path?.toString() ?? `thread:${agent_metadata.agent_id}`;\n\t\tthis.agent_tree.set(key, agent_metadata);\n\t\tif (agent_metadata.agent_nickname) {\n\t\t\tthis.used_agent_nicknames.add(agent_metadata.agent_nickname);\n\t\t}\n\t}\n\n\treserve_agent_nickname(\n\t\tnames: readonly string[],\n\t\tpreferred?: string | null,\n\t): string | null {\n\t\tif (preferred) {\n\t\t\tthis.used_agent_nicknames.add(preferred);\n\t\t\treturn preferred;\n\t\t}\n\t\tif (names.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst available = names\n\t\t\t.map((name) => format_agent_nickname(name, this.nickname_reset_count))\n\t\t\t.filter((name) => !this.used_agent_nicknames.has(name));\n\t\tconst selected = available[0] ?? this.reset_and_select_nickname(names);\n\t\tthis.used_agent_nicknames.add(selected);\n\t\treturn selected;\n\t}\n\n\treserve_agent_path(agent_path: AgentPath): void {\n\t\tconst key = agent_path.toString();\n\t\tif (this.agent_tree.has(key)) {\n\t\t\tthrow new Error(`agent path \\`${key}\\` already exists`);\n\t\t}\n\t\tthis.agent_tree.set(key, { agent_path });\n\t}\n\n\tprivate reset_and_select_nickname(names: readonly string[]): string {\n\t\tthis.used_agent_nicknames.clear();\n\t\tthis.nickname_reset_count += 1;\n\t\treturn format_agent_nickname(names[0] ?? \"agent\", this.nickname_reset_count);\n\t}\n}\n\nexport class SpawnReservation {\n\tprivate active = true;\n\tconstructor(private readonly registry: AgentRegistry) {}\n\n\tcommit(metadata: AgentMetadata): void {\n\t\tif (!this.active) {\n\t\t\treturn;\n\t\t}\n\t\tthis.active = false;\n\t\tthis.registry.register_spawned_thread(metadata);\n\t}\n\n\trelease(): void {\n\t\tif (!this.active) {\n\t\t\treturn;\n\t\t}\n\t\tthis.active = false;\n\t\tthis.registry.release_spawn_slot();\n\t}\n}\n\nexport function next_thread_spawn_depth(session_source: unknown): number {\n\tconst depth =\n\t\ttypeof session_source === \"object\" &&\n\t\tsession_source !== null &&\n\t\t\"depth\" in session_source &&\n\t\ttypeof (session_source as { depth?: unknown }).depth === \"number\"\n\t\t\t? (session_source as { depth: number }).depth\n\t\t\t: 0;\n\treturn Math.max(0, depth) + 1;\n}\n\nexport function exceeds_thread_spawn_depth_limit(\n\tdepth: number,\n\tmax_depth: number,\n): boolean {\n\treturn depth > max_depth;\n}\n\nfunction format_agent_nickname(name: string, reset_count: number): string {\n\tif (reset_count === 0) {\n\t\treturn name;\n\t}\n\tconst value = reset_count + 1;\n\tconst suffix =\n\t\tvalue % 100 >= 11 && value % 100 <= 13\n\t\t\t? \"th\"\n\t\t\t: value % 10 === 1\n\t\t\t\t? \"st\"\n\t\t\t\t: value % 10 === 2\n\t\t\t\t\t? \"nd\"\n\t\t\t\t\t: value % 10 === 3\n\t\t\t\t\t\t? \"rd\"\n\t\t\t\t\t\t: \"th\";\n\treturn `${name} the ${value}${suffix}`;\n}\n","import type { ThreadId } from \"../ids\";\nimport type { ResponseItem, RolloutItem } from \"../protocol\";\nimport { Mailbox, type InterAgentCommunication } from \"./mailbox\";\nimport { AgentPath } from \"./role\";\nimport {\n\tAgentRegistry,\n\tAgentStatus,\n\ttype LiveAgent,\n\ttype ListedAgent,\n\ttype AgentMetadata,\n} from \"./registry\";\n\nexport const SpawnAgentForkMode = {\n\tFullHistory: \"full_history\",\n\tLastNTurns: \"last_n_turns\",\n} as const;\n\nexport type SpawnAgentForkMode =\n\t| { type: typeof SpawnAgentForkMode.FullHistory }\n\t| { type: typeof SpawnAgentForkMode.LastNTurns; turns: number };\n\nexport type SpawnAgentOptions = {\n\tfork_parent_spawn_call_id?: string | null;\n\tfork_mode?: SpawnAgentForkMode | null;\n\tenvironments?: unknown[] | null;\n};\n\nexport type AgentControlExecutor = {\n\tspawn_agent?(input: {\n\t\tinitial_operation: unknown;\n\t\tsession_source?: unknown;\n\t\toptions?: SpawnAgentOptions;\n\t}): Promise<LiveAgent>;\n\tsend_input?(input: { target: ThreadId; message?: string | null; items?: unknown[] | null; interrupt?: boolean }): Promise<unknown>;\n\twait_agent?(input: { targets: ThreadId[]; timeout_ms?: number | null }): Promise<unknown>;\n\tclose_agent?(input: { target: ThreadId }): Promise<unknown>;\n\tresume_agent?(input: { id: ThreadId }): Promise<unknown>;\n};\n\nexport class AgentControl {\n\treadonly registry: AgentRegistry;\n\treadonly mailbox: Mailbox;\n\n\tconstructor(private readonly executor: AgentControlExecutor | null = null) {\n\t\tthis.registry = new AgentRegistry();\n\t\tthis.mailbox = new Mailbox();\n\t}\n\n\tstatic empty(): AgentControl {\n\t\treturn new AgentControl();\n\t}\n\n\tasync spawn_agent_with_metadata(input: {\n\t\tinitial_operation: unknown;\n\t\tsession_source?: unknown;\n\t\toptions?: SpawnAgentOptions;\n\t}): Promise<LiveAgent> {\n\t\tif (!this.executor?.spawn_agent) {\n\t\t\tthrow new Error(\"multi-agent spawning is unavailable in this Codex assistant runtime\");\n\t\t}\n\t\treturn this.executor.spawn_agent(input);\n\t}\n\n\tasync send_input(input: {\n\t\ttarget: ThreadId;\n\t\tmessage?: string | null;\n\t\titems?: unknown[] | null;\n\t\tinterrupt?: boolean;\n\t}): Promise<unknown> {\n\t\tif (!this.executor?.send_input) {\n\t\t\tthrow new Error(\"multi-agent messaging is unavailable in this Codex assistant runtime\");\n\t\t}\n\t\treturn this.executor.send_input(input);\n\t}\n\n\tasync wait_agent(input: {\n\t\ttargets: ThreadId[];\n\t\ttimeout_ms?: number | null;\n\t}): Promise<unknown> {\n\t\tif (!this.executor?.wait_agent) {\n\t\t\tthrow new Error(\"multi-agent waiting is unavailable in this Codex assistant runtime\");\n\t\t}\n\t\treturn this.executor.wait_agent(input);\n\t}\n\n\tasync close_agent(input: { target: ThreadId }): Promise<unknown> {\n\t\tif (!this.executor?.close_agent) {\n\t\t\tthrow new Error(\"multi-agent close is unavailable in this Codex assistant runtime\");\n\t\t}\n\t\treturn this.executor.close_agent(input);\n\t}\n\n\tasync resume_agent(input: { id: ThreadId }): Promise<unknown> {\n\t\tif (!this.executor?.resume_agent) {\n\t\t\tthrow new Error(\"multi-agent resume is unavailable in this Codex assistant runtime\");\n\t\t}\n\t\treturn this.executor.resume_agent(input);\n\t}\n\n\tlist_agents(): ListedAgent[] {\n\t\treturn this.registry.live_agents().map((metadata) => ({\n\t\t\tagent_name:\n\t\t\t\tmetadata.agent_path?.toString() ??\n\t\t\t\tmetadata.agent_nickname ??\n\t\t\t\tmetadata.agent_id ??\n\t\t\t\t\"unknown\",\n\t\t\tagent_status: AgentStatus.Running,\n\t\t\tlast_task_message: metadata.last_task_message ?? null,\n\t\t}));\n\t}\n\n\tsend_mail(communication: Omit<InterAgentCommunication, \"seq\">): number {\n\t\treturn this.mailbox.send(communication);\n\t}\n}\n\nexport type { AgentMetadata, LiveAgent, ListedAgent };\nexport { AgentPath };\n\nexport function keep_forked_rollout_item(item: RolloutItem): boolean {\n\tswitch (item.type) {\n\t\tcase \"response_item\":\n\t\t\treturn keep_forked_response_item(item.payload);\n\t\tcase \"turn_context\":\n\t\t\treturn false;\n\t\tcase \"compacted\":\n\t\tcase \"event_msg\":\n\t\tcase \"session_meta\":\n\t\t\treturn true;\n\t}\n}\n\nfunction keep_forked_response_item(item: ResponseItem): boolean {\n\tif (item.type === \"message\") {\n\t\tif (item.role === \"system\" || item.role === \"developer\" || item.role === \"user\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn item.role === \"assistant\" && item.phase === \"final_answer\";\n\t}\n\treturn false;\n}\n","import { AuthMode, type CodexAuth, type ProviderAccountState } from \"./auth\";\nimport { BASE_INSTRUCTIONS_DEFAULT, type Personality } from \"./protocol\";\n\nexport const OPENAI_PROVIDER_ID = \"openai\";\nexport const CHATGPT_CODEX_PROVIDER_ID = \"chatgpt-codex\";\nexport const OPENAI_PROVIDER_NAME = \"OpenAI\";\nexport const CHATGPT_CODEX_PROVIDER_NAME = \"ChatGPT Codex\";\nexport const OPENAI_RESPONSES_BASE_URL = \"https://api.openai.com/v1\";\nexport const CHATGPT_CODEX_BASE_URL = \"https://chatgpt.com/backend-api/codex\";\n\nconst defaultCodexModel: string = \"gpt-5.5\";\nconst defaultCodexReasoningEffort = \"medium\";\nconst defaultRequestMaxRetries = 4;\nconst defaultStreamMaxRetries = 5;\nconst defaultStreamIdleTimeoutMs = 300_000;\nconst defaultWebsocketConnectTimeoutMs = 15_000;\nconst maxRequestMaxRetries = 100;\nconst maxStreamMaxRetries = 100;\n\nexport type WireApi = \"responses\";\n\nexport type ModelProviderAuthInfo = {\n\tcommand: string;\n\targs?: string[] | null;\n\tenv?: Record<string, string> | null;\n};\n\nexport type ModelProviderAwsAuthInfo = {\n\tprofile?: string | null;\n\tregion?: string | null;\n};\n\nexport type ModelProviderInfo = {\n\tname: string;\n\tbase_url?: string | null;\n\tenv_key?: string | null;\n\tenv_key_instructions?: string | null;\n\texperimental_bearer_token?: string | null;\n\tauth?: ModelProviderAuthInfo | null;\n\taws?: ModelProviderAwsAuthInfo | null;\n\twire_api?: WireApi;\n\tquery_params?: Record<string, string> | null;\n\thttp_headers?: Record<string, string> | null;\n\tenv_http_headers?: Record<string, string> | null;\n\trequest_max_retries?: number | null;\n\tstream_max_retries?: number | null;\n\tstream_idle_timeout_ms?: number | null;\n\twebsocket_connect_timeout_ms?: number | null;\n\trequires_openai_auth?: boolean;\n\tsupports_websockets?: boolean;\n};\n\nexport type ProviderCapabilities = {\n\tnamespace_tools: boolean;\n\timage_generation: boolean;\n\tweb_search: boolean;\n};\n\nexport type ProviderRuntimeConfig = {\n\tname: string;\n\tbase_url: string;\n\tresponses_url: string;\n\tquery_params: Record<string, string> | null;\n\theaders: Record<string, string>;\n\trequest_max_retries: number;\n\tstream_max_retries: number;\n\tstream_idle_timeout_ms: number;\n\twebsocket_connect_timeout_ms: number;\n\tsupports_websockets: boolean;\n};\n\nexport type ModelServiceTier = {\n\tid: string;\n\tname: string;\n\tdescription: string;\n};\n\nexport type ReasoningEffortOption = {\n\treasoning_effort: string;\n\tdescription: string;\n};\n\nexport type ModelInfo = {\n\tslug: string;\n\tdisplay_name: string;\n\tdescription: string | null;\n\tdefault_reasoning_level: string | null;\n\tsupported_reasoning_levels: ReasoningEffortOption[];\n\tvisibility: \"list\" | \"hide\" | \"none\";\n\tsupported_in_api: boolean;\n\tpriority: number;\n\tupgrade: string | null;\n\tupgrade_info: null;\n\tavailability_nux: null;\n\tinput_modalities: string[];\n\tsupports_personality: boolean;\n\tadditional_speed_tiers: string[];\n\tservice_tiers: ModelServiceTier[];\n\tbase_instructions: string;\n\tmodel_messages?: ModelMessages | null;\n\tcontext_window?: number | null;\n\tmax_context_window?: number | null;\n\tauto_compact_token_limit?: number | null;\n\teffective_context_window_percent?: number | null;\n};\n\nexport type ModelMessages = {\n\tinstructions_template?: string | null;\n\tinstructions_variables?: ModelInstructionsVariables | null;\n};\n\nexport type ModelInstructionsVariables = {\n\tpersonality?: Record<string, string> | null;\n};\n\nexport type ModelPreset = {\n\tid: string;\n\tmodel: string;\n\tupgrade: string | null;\n\tupgrade_info: null;\n\tavailability_nux: null;\n\tdisplay_name: string;\n\tdescription: string;\n\thidden: boolean;\n\tsupported_reasoning_efforts: ReasoningEffortOption[];\n\tdefault_reasoning_effort: string;\n\tinput_modalities: string[];\n\tsupports_personality: boolean;\n\tadditional_speed_tiers: string[];\n\tservice_tiers: ModelServiceTier[];\n\tis_default: boolean;\n\tsupported_in_api: boolean;\n};\n\nexport type Model = ModelPreset;\n\nexport type ModelListParams = {\n\tcursor?: string | null;\n\tlimit?: number | null;\n\tinclude_hidden?: boolean | null;\n};\n\nexport type ModelListResponse = {\n\tdata: ModelPreset[];\n\tnext_cursor: string | null;\n};\n\nexport type RefreshStrategy = \"online\" | \"offline\" | \"online_if_uncached\";\n\nexport type ModelsManager = {\n\tlist_models(params?: ModelListParams): ModelListResponse;\n\traw_model_catalog(refresh_strategy?: RefreshStrategy): { models: ModelInfo[] };\n\tget_model_info(model: string): ModelInfo;\n\tget_default_model(model?: string | null): string;\n\tdefault_reasoning_effort(model?: string | null): string;\n};\n\nconst PERSONALITY_PLACEHOLDER = \"{{ personality }}\";\nconst DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT = 95;\n\nexport function get_model_instructions(\n\tmodel_info: ModelInfo,\n\tpersonality?: Personality | null,\n): string {\n\tconst template = model_info.model_messages?.instructions_template;\n\tif (template) {\n\t\tconst personalityMessage =\n\t\t\tmodel_info.model_messages?.instructions_variables?.personality?.[\n\t\t\t\tpersonality ?? \"\"\n\t\t\t] ?? \"\";\n\t\treturn template.replace(PERSONALITY_PLACEHOLDER, personalityMessage);\n\t}\n\treturn model_info.base_instructions || BASE_INSTRUCTIONS_DEFAULT;\n}\n\nexport function resolvedContextWindow(modelInfo: ModelInfo): number | null {\n\treturn finitePositiveInteger(modelInfo.context_window) ??\n\t\tfinitePositiveInteger(modelInfo.max_context_window) ??\n\t\tnull;\n}\n\nexport function effectiveContextWindow(modelInfo: ModelInfo): number | null {\n\tconst contextWindow = resolvedContextWindow(modelInfo);\n\tif (contextWindow === null) {\n\t\treturn null;\n\t}\n\tconst percent =\n\t\tfinitePositiveInteger(modelInfo.effective_context_window_percent) ??\n\t\tDEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT;\n\treturn Math.trunc((contextWindow * percent) / 100);\n}\n\nexport function autoCompactTokenLimit(modelInfo: ModelInfo): number | null {\n\tconst contextWindow = resolvedContextWindow(modelInfo);\n\tconst configuredLimit = finitePositiveInteger(modelInfo.auto_compact_token_limit);\n\tif (contextWindow === null) {\n\t\treturn configuredLimit;\n\t}\n\tconst contextLimit = Math.trunc((contextWindow * 9) / 10);\n\treturn configuredLimit === null ? contextLimit : Math.min(configuredLimit, contextLimit);\n}\n\nexport type ModelProvider = {\n\tinfo(): ModelProviderInfo;\n\taccount_state(): ProviderAccountState;\n\tcapabilities(): ProviderCapabilities;\n\truntime_config(auth?: CodexAuth | null): ProviderRuntimeConfig;\n\tmodels_manager(): ModelsManager;\n};\n\nconst reasoningOptions: ReasoningEffortOption[] = [\n\t{ reasoning_effort: \"low\", description: \"Fast responses with lighter reasoning.\" },\n\t{ reasoning_effort: \"medium\", description: \"Balanced speed and reasoning depth.\" },\n\t{ reasoning_effort: \"high\", description: \"Deeper reasoning for complex planning.\" },\n\t{ reasoning_effort: \"xhigh\", description: \"Maximum reasoning depth for hard tasks.\" },\n];\n\nexport const defaultProviderCapabilities: ProviderCapabilities = {\n\tnamespace_tools: true,\n\timage_generation: true,\n\tweb_search: true,\n};\n\nexport function createOpenAiModelProviderInfo(\n\tbase_url: string | null = null,\n): ModelProviderInfo {\n\treturn {\n\t\tname: OPENAI_PROVIDER_NAME,\n\t\tbase_url,\n\t\tenv_key: null,\n\t\tenv_key_instructions: null,\n\t\texperimental_bearer_token: null,\n\t\tauth: null,\n\t\taws: null,\n\t\twire_api: \"responses\",\n\t\tquery_params: null,\n\t\thttp_headers: { version: \"codex-assistant\" },\n\t\tenv_http_headers: {\n\t\t\t\"OpenAI-Organization\": \"OPENAI_ORGANIZATION\",\n\t\t\t\"OpenAI-Project\": \"OPENAI_PROJECT\",\n\t\t},\n\t\trequest_max_retries: null,\n\t\tstream_max_retries: null,\n\t\tstream_idle_timeout_ms: null,\n\t\twebsocket_connect_timeout_ms: null,\n\t\trequires_openai_auth: true,\n\t\tsupports_websockets: true,\n\t};\n}\n\nexport function createChatgptCodexModelProviderInfo(): ModelProviderInfo {\n\treturn {\n\t\t...createOpenAiModelProviderInfo(CHATGPT_CODEX_BASE_URL),\n\t\tname: CHATGPT_CODEX_PROVIDER_NAME,\n\t\tsupports_websockets: false,\n\t};\n}\n\nexport function validateModelProviderInfo(provider: ModelProviderInfo): void {\n\tconst wireApi = (provider as { wire_api?: unknown }).wire_api ?? \"responses\";\n\tif (wireApi === \"chat\") {\n\t\tthrow new Error(\n\t\t\t'`wire_api = \"chat\"` is no longer supported. Set `wire_api = \"responses\"`.',\n\t\t);\n\t}\n\tif (wireApi !== \"responses\") {\n\t\tthrow new Error(`unknown wire_api: ${String(wireApi)}`);\n\t}\n\tif (provider.aws) {\n\t\tconst conflicts = conflictFields(provider, [\n\t\t\t\"env_key\",\n\t\t\t\"experimental_bearer_token\",\n\t\t\t\"auth\",\n\t\t\t\"requires_openai_auth\",\n\t\t]);\n\t\tif (provider.supports_websockets) {\n\t\t\tconflicts.push(\"supports_websockets\");\n\t\t}\n\t\tif (conflicts.length > 0) {\n\t\t\tthrow new Error(`provider aws cannot be combined with ${conflicts.join(\", \")}`);\n\t\t}\n\t}\n\tif (provider.auth) {\n\t\tif (!provider.auth.command.trim()) {\n\t\t\tthrow new Error(\"provider auth.command must not be empty\");\n\t\t}\n\t\tconst conflicts = conflictFields(provider, [\n\t\t\t\"env_key\",\n\t\t\t\"experimental_bearer_token\",\n\t\t\t\"requires_openai_auth\",\n\t\t]);\n\t\tif (conflicts.length > 0) {\n\t\t\tthrow new Error(`provider auth cannot be combined with ${conflicts.join(\", \")}`);\n\t\t}\n\t}\n}\n\nexport class ConfiguredModelProvider implements ModelProvider {\n\tprivate readonly providerInfo: ModelProviderInfo;\n\tprivate readonly accountState: ProviderAccountState;\n\tprivate readonly providerCapabilities: ProviderCapabilities;\n\tprivate readonly manager: ModelsManager;\n\n\tconstructor(input: {\n\t\tinfo: ModelProviderInfo;\n\t\taccount_state?: ProviderAccountState;\n\t\tcapabilities?: ProviderCapabilities;\n\t\tmodels_manager?: ModelsManager;\n\t}) {\n\t\tvalidateModelProviderInfo(input.info);\n\t\tthis.providerInfo = { ...input.info, wire_api: input.info.wire_api ?? \"responses\" };\n\t\tthis.accountState =\n\t\t\tinput.account_state ??\n\t\t\t({\n\t\t\t\taccount: null,\n\t\t\t\trequires_openai_auth: this.providerInfo.requires_openai_auth ?? false,\n\t\t\t} satisfies ProviderAccountState);\n\t\tthis.providerCapabilities = input.capabilities ?? defaultProviderCapabilities;\n\t\tthis.manager = input.models_manager ?? new StaticModelsManager();\n\t}\n\n\tinfo(): ModelProviderInfo {\n\t\treturn this.providerInfo;\n\t}\n\n\taccount_state(): ProviderAccountState {\n\t\treturn this.accountState;\n\t}\n\n\tcapabilities(): ProviderCapabilities {\n\t\treturn this.providerCapabilities;\n\t}\n\n\truntime_config(auth?: CodexAuth | null): ProviderRuntimeConfig {\n\t\treturn providerRuntimeConfig(this.providerInfo, auth ?? null);\n\t}\n\n\tmodels_manager(): ModelsManager {\n\t\treturn this.manager;\n\t}\n}\n\nexport class StaticModelsManager implements ModelsManager {\n\tprivate readonly models: ModelInfo[];\n\n\tconstructor(models: ModelInfo[] = defaultCodexModelInfo()) {\n\t\tthis.models = [...models];\n\t}\n\n\tlist_models(params: ModelListParams = {}): ModelListResponse {\n\t\tconst presets = this.build_available_models();\n\t\tconst visible = params.include_hidden\n\t\t\t? presets\n\t\t\t: presets.filter((model) => !model.hidden);\n\t\tconst total = visible.length;\n\t\tconst limit = Math.max(1, Math.min(total || 1, params.limit ?? (total || 1)));\n\t\tconst start = params.cursor ? Number.parseInt(params.cursor, 10) : 0;\n\n\t\tif (!Number.isInteger(start) || start < 0 || start > total) {\n\t\t\tthrow new Error(`invalid cursor: ${params.cursor}`);\n\t\t}\n\n\t\tconst end = Math.min(total, start + limit);\n\t\treturn {\n\t\t\tdata: visible.slice(start, end),\n\t\t\tnext_cursor: end < total ? String(end) : null,\n\t\t};\n\t}\n\n\traw_model_catalog(): { models: ModelInfo[] } {\n\t\treturn { models: [...this.models] };\n\t}\n\n\tget_model_info(model: string): ModelInfo {\n\t\treturn (\n\t\t\tfindModelByLongestPrefix(model, this.models) ??\n\t\t\tfindModelByNamespacedSuffix(model, this.models) ??\n\t\t\tmodelInfoFromSlug(model)\n\t\t);\n\t}\n\n\tget_default_model(model?: string | null): string {\n\t\tif (model) {\n\t\t\treturn model;\n\t\t}\n\t\tconst selected = this.build_available_models().find((preset) => preset.is_default);\n\t\treturn selected?.model ?? this.build_available_models()[0]?.model ?? defaultCodexModel;\n\t}\n\n\tdefault_reasoning_effort(model?: string | null): string {\n\t\tconst info = this.get_model_info(this.get_default_model(model));\n\t\treturn info.default_reasoning_level ?? defaultCodexReasoningEffort;\n\t}\n\n\tprivate build_available_models(): ModelPreset[] {\n\t\tconst sorted = [...this.models].sort((left, right) => left.priority - right.priority);\n\t\tconst presets = sorted.map(modelInfoToPreset);\n\t\tmarkDefaultByPickerVisibility(presets);\n\t\treturn presets;\n\t}\n}\n\nexport function createModelProvider(input: {\n\tinfo?: ModelProviderInfo;\n\tauth?: CodexAuth | null;\n\taccount_state?: ProviderAccountState;\n\tcapabilities?: ProviderCapabilities;\n\tmodels_manager?: ModelsManager;\n} = {}): ModelProvider {\n\treturn new ConfiguredModelProvider({\n\t\tinfo: input.info ?? createOpenAiModelProviderInfo(),\n\t\taccount_state:\n\t\t\tinput.account_state ??\n\t\t\tcodexAuthToProviderAccountState(input.auth ?? null, true),\n\t\tcapabilities: input.capabilities,\n\t\tmodels_manager: input.models_manager,\n\t});\n}\n\nexport function defaultModelsManager(): ModelsManager {\n\treturn new StaticModelsManager();\n}\n\nexport function listDefaultCodexModels(\n\tparams: ModelListParams = {},\n): ModelListResponse {\n\treturn defaultModelsManager().list_models(params);\n}\n\nexport function defaultCodexModels(): Model[] {\n\treturn listDefaultCodexModels({ include_hidden: true }).data;\n}\n\nexport function defaultCodexModelInfo(): ModelInfo[] {\n\treturn [\n\t\t{\n\t\t\tslug: \"gpt-5.5\",\n\t\t\tdisplay_name: \"GPT-5.5\",\n\t\t\tdescription: \"Frontier model for complex planning and implementation.\",\n\t\t\tdefault_reasoning_level: defaultCodexReasoningEffort,\n\t\t\tsupported_reasoning_levels: reasoningOptions,\n\t\t\tvisibility: \"list\",\n\t\t\tsupported_in_api: true,\n\t\t\tpriority: 0,\n\t\t\tupgrade: null,\n\t\t\tupgrade_info: null,\n\t\t\tavailability_nux: null,\n\t\t\tinput_modalities: [\"text\", \"image\"],\n\t\t\tsupports_personality: true,\n\t\t\tadditional_speed_tiers: [],\n\t\t\tservice_tiers: [],\n\t\t\tbase_instructions: BASE_INSTRUCTIONS_DEFAULT,\n\t\t\tmodel_messages: null,\n\t\t\tcontext_window: 272_000,\n\t\t\tmax_context_window: null,\n\t\t\tauto_compact_token_limit: null,\n\t\t\teffective_context_window_percent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,\n\t\t},\n\t\t{\n\t\t\tslug: \"gpt-5.4\",\n\t\t\tdisplay_name: \"GPT-5.4\",\n\t\t\tdescription: \"Strong everyday model for coding and product work.\",\n\t\t\tdefault_reasoning_level: defaultCodexReasoningEffort,\n\t\t\tsupported_reasoning_levels: reasoningOptions,\n\t\t\tvisibility: \"list\",\n\t\t\tsupported_in_api: true,\n\t\t\tpriority: 1,\n\t\t\tupgrade: null,\n\t\t\tupgrade_info: null,\n\t\t\tavailability_nux: null,\n\t\t\tinput_modalities: [\"text\", \"image\"],\n\t\t\tsupports_personality: true,\n\t\t\tadditional_speed_tiers: [],\n\t\t\tservice_tiers: [],\n\t\t\tbase_instructions: BASE_INSTRUCTIONS_DEFAULT,\n\t\t\tmodel_messages: null,\n\t\t\tcontext_window: 272_000,\n\t\t\tmax_context_window: null,\n\t\t\tauto_compact_token_limit: null,\n\t\t\teffective_context_window_percent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,\n\t\t},\n\t\t{\n\t\t\tslug: \"gpt-5.4-mini\",\n\t\t\tdisplay_name: \"GPT-5.4 Mini\",\n\t\t\tdescription: \"Faster, smaller model for simple chat and iteration.\",\n\t\t\tdefault_reasoning_level: defaultCodexReasoningEffort,\n\t\t\tsupported_reasoning_levels: reasoningOptions.filter(\n\t\t\t\t(option) => option.reasoning_effort !== \"xhigh\",\n\t\t\t),\n\t\t\tvisibility: \"list\",\n\t\t\tsupported_in_api: true,\n\t\t\tpriority: 2,\n\t\t\tupgrade: null,\n\t\t\tupgrade_info: null,\n\t\t\tavailability_nux: null,\n\t\t\tinput_modalities: [\"text\", \"image\"],\n\t\t\tsupports_personality: true,\n\t\t\tadditional_speed_tiers: [],\n\t\t\tservice_tiers: [],\n\t\t\tbase_instructions: BASE_INSTRUCTIONS_DEFAULT,\n\t\t\tmodel_messages: null,\n\t\t\tcontext_window: 128_000,\n\t\t\tmax_context_window: null,\n\t\t\tauto_compact_token_limit: null,\n\t\t\teffective_context_window_percent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,\n\t\t},\n\t];\n}\n\nexport function defaultModelProviderAccountState(): ProviderAccountState {\n\treturn {\n\t\taccount: null,\n\t\trequires_openai_auth: true,\n\t};\n}\n\nexport function apiKeyProviderAccountState(): ProviderAccountState {\n\treturn {\n\t\taccount: { type: AuthMode.ApiKey },\n\t\trequires_openai_auth: true,\n\t};\n}\n\nexport function providerRuntimeConfig(\n\tprovider: ModelProviderInfo,\n\tauth: CodexAuth | null,\n): ProviderRuntimeConfig {\n\tvalidateModelProviderInfo(provider);\n\tconst baseUrl =\n\t\tprovider.base_url ??\n\t\t(auth?.type === AuthMode.Chatgpt\n\t\t\t? CHATGPT_CODEX_BASE_URL\n\t\t\t: OPENAI_RESPONSES_BASE_URL);\n\tconst headers = {\n\t\t...(provider.http_headers ?? {}),\n\t};\n\treturn {\n\t\tname: provider.name,\n\t\tbase_url: baseUrl,\n\t\tresponses_url: `${baseUrl.replace(/\\/$/, \"\")}/responses`,\n\t\tquery_params: provider.query_params ?? null,\n\t\theaders,\n\t\trequest_max_retries: clampRetry(\n\t\t\tprovider.request_max_retries,\n\t\t\tdefaultRequestMaxRetries,\n\t\t\tmaxRequestMaxRetries,\n\t\t),\n\t\tstream_max_retries: clampRetry(\n\t\t\tprovider.stream_max_retries,\n\t\t\tdefaultStreamMaxRetries,\n\t\t\tmaxStreamMaxRetries,\n\t\t),\n\t\tstream_idle_timeout_ms:\n\t\t\tprovider.stream_idle_timeout_ms ?? defaultStreamIdleTimeoutMs,\n\t\twebsocket_connect_timeout_ms:\n\t\t\tprovider.websocket_connect_timeout_ms ?? defaultWebsocketConnectTimeoutMs,\n\t\tsupports_websockets: provider.supports_websockets ?? false,\n\t};\n}\n\nexport function modelInfoToPreset(info: ModelInfo): ModelPreset {\n\treturn {\n\t\tid: info.slug,\n\t\tmodel: info.slug,\n\t\tupgrade: info.upgrade,\n\t\tupgrade_info: info.upgrade_info,\n\t\tavailability_nux: info.availability_nux,\n\t\tdisplay_name: info.display_name,\n\t\tdescription: info.description ?? info.display_name,\n\t\thidden: info.visibility !== \"list\",\n\t\tsupported_reasoning_efforts: info.supported_reasoning_levels,\n\t\tdefault_reasoning_effort:\n\t\t\tinfo.default_reasoning_level ?? defaultCodexReasoningEffort,\n\t\tinput_modalities: info.input_modalities,\n\t\tsupports_personality: info.supports_personality,\n\t\tadditional_speed_tiers: info.additional_speed_tiers,\n\t\tservice_tiers: info.service_tiers,\n\t\tis_default: false,\n\t\tsupported_in_api: info.supported_in_api,\n\t};\n}\n\nexport function modelInfoFromSlug(slug: string): ModelInfo {\n\tconst known = defaultCodexModelInfo().find((model) => model.slug === slug);\n\tif (known) {\n\t\treturn known;\n\t}\n\treturn {\n\t\tslug,\n\t\tdisplay_name: slug,\n\t\tdescription: null,\n\t\tdefault_reasoning_level: defaultCodexReasoningEffort,\n\t\tsupported_reasoning_levels: reasoningOptions,\n\t\tvisibility: \"none\",\n\t\tsupported_in_api: true,\n\t\tpriority: 99,\n\t\tupgrade: null,\n\t\tupgrade_info: null,\n\t\tavailability_nux: null,\n\t\tinput_modalities: [\"text\", \"image\"],\n\t\tsupports_personality: false,\n\t\tadditional_speed_tiers: [],\n\t\tservice_tiers: [],\n\t\tbase_instructions: BASE_INSTRUCTIONS_DEFAULT,\n\t\tmodel_messages: null,\n\t\tcontext_window: null,\n\t\tmax_context_window: null,\n\t\tauto_compact_token_limit: null,\n\t\teffective_context_window_percent: DEFAULT_EFFECTIVE_CONTEXT_WINDOW_PERCENT,\n\t};\n}\n\nexport function isReasoningEffortSupported(\n\tmodel: string,\n\teffort: string | null | undefined,\n\tmanager: ModelsManager = defaultModelsManager(),\n): boolean {\n\tif (!effort) {\n\t\treturn false;\n\t}\n\treturn manager\n\t\t.get_model_info(model)\n\t\t.supported_reasoning_levels.some((option) => option.reasoning_effort === effort);\n}\n\nexport function resolveReasoningEffortForModel(\n\tmodel: string,\n\teffort: string | null | undefined,\n\tmanager: ModelsManager = defaultModelsManager(),\n): string {\n\treturn isReasoningEffortSupported(model, effort, manager)\n\t\t? effort!\n\t\t: manager.default_reasoning_effort(model);\n}\n\nfunction codexAuthToProviderAccountState(\n\tauth: CodexAuth | null,\n\trequiresOpenAiAuth: boolean,\n): ProviderAccountState {\n\tif (!auth) {\n\t\treturn { account: null, requires_openai_auth: requiresOpenAiAuth };\n\t}\n\tif (auth.type === AuthMode.ApiKey) {\n\t\treturn apiKeyProviderAccountState();\n\t}\n\tconst email = auth.email;\n\tconst planType = auth.plan_type;\n\treturn {\n\t\taccount:\n\t\t\temail && planType\n\t\t\t\t? { type: AuthMode.Chatgpt, email, plan_type: planType }\n\t\t\t\t: null,\n\t\trequires_openai_auth: requiresOpenAiAuth,\n\t};\n}\n\nfunction conflictFields(\n\tprovider: ModelProviderInfo,\n\tfields: Array<keyof ModelProviderInfo>,\n): string[] {\n\treturn fields.filter((field) => {\n\t\tconst value = provider[field];\n\t\treturn value !== undefined && value !== null && value !== false;\n\t});\n}\n\nfunction clampRetry(value: number | null | undefined, fallback: number, max: number): number {\n\treturn Math.min(Math.max(0, value ?? fallback), max);\n}\n\nfunction markDefaultByPickerVisibility(presets: ModelPreset[]): void {\n\tfor (const preset of presets) {\n\t\tpreset.is_default = false;\n\t}\n\tconst visibleDefault =\n\t\tpresets.find((preset) => preset.model === defaultCodexModel && !preset.hidden) ??\n\t\tpresets.find((preset) => !preset.hidden) ??\n\t\tpresets[0];\n\tif (visibleDefault) {\n\t\tvisibleDefault.is_default = true;\n\t}\n}\n\nfunction findModelByLongestPrefix(\n\tmodel: string,\n\tcandidates: readonly ModelInfo[],\n): ModelInfo | null {\n\tlet best: ModelInfo | null = null;\n\tfor (const candidate of candidates) {\n\t\tif (!model.startsWith(candidate.slug)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!best || candidate.slug.length > best.slug.length) {\n\t\t\tbest = candidate;\n\t\t}\n\t}\n\treturn best;\n}\n\nfunction findModelByNamespacedSuffix(\n\tmodel: string,\n\tcandidates: readonly ModelInfo[],\n): ModelInfo | null {\n\tconst [namespace, suffix, extra] = model.split(\"/\");\n\tif (!namespace || !suffix || extra) {\n\t\treturn null;\n\t}\n\tif (!/^[A-Za-z0-9_-]+$/.test(namespace)) {\n\t\treturn null;\n\t}\n\treturn findModelByLongestPrefix(suffix, candidates);\n}\n\nfunction finitePositiveInteger(value: number | null | undefined): number | null {\n\tif (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n\t\treturn null;\n\t}\n\treturn Math.trunc(value);\n}\n","import type {\n\tFreeformTool,\n\tLoadableToolSpec,\n\tResponsesApiFunctionTool,\n} from \"./responses_api\";\n\nexport type JsonSchema = unknown;\n\nexport type ToolSpec =\n\t| LoadableToolSpec\n\t| {\n\t\t\ttype: \"tool_search\";\n\t\t\texecution: string;\n\t\t\tdescription: string;\n\t\t\tparameters: JsonSchema;\n\t }\n\t| { type: \"local_shell\" }\n\t| { type: \"image_generation\"; output_format: string }\n\t| {\n\t\t\ttype: \"web_search\";\n\t\t\texternal_web_access?: boolean;\n\t\t\tfilters?: unknown;\n\t\t\tuser_location?: unknown;\n\t\t\tsearch_context_size?: unknown;\n\t\t\tsearch_content_types?: string[];\n\t }\n\t| (FreeformTool & { type: \"custom\" });\n\nexport type ConfiguredToolSpec = {\n\tspec: ToolSpec;\n\tsupports_parallel_tool_calls: boolean;\n};\n\nexport function toolSpecName(spec: ToolSpec): string {\n\tswitch (spec.type) {\n\t\tcase \"function\":\n\t\tcase \"namespace\":\n\t\tcase \"custom\":\n\t\t\treturn spec.name;\n\t\tcase \"tool_search\":\n\t\t\treturn \"tool_search\";\n\t\tcase \"local_shell\":\n\t\t\treturn \"local_shell\";\n\t\tcase \"image_generation\":\n\t\t\treturn \"image_generation\";\n\t\tcase \"web_search\":\n\t\t\treturn \"web_search\";\n\t}\n}\n\nexport function create_tools_json_for_responses_api(\n\ttools: readonly ToolSpec[],\n): ToolSpec[] {\n\tassertValidResponsesToolSpecs(tools);\n\treturn tools.map((tool) => structuredClone(tool));\n}\n\nexport function assertValidResponsesToolSpecs(\n\tspecs: readonly ToolSpec[],\n): asserts specs is ToolSpec[] {\n\tconst invalidTools = specs.filter((spec) => !isValidResponsesToolSpec(spec));\n\tif (invalidTools.length === 0) {\n\t\treturn;\n\t}\n\n\tthrow new Error(\n\t\t`Invalid OpenAI Responses tool specs: ${invalidTools\n\t\t\t.map((spec) => JSON.stringify(spec))\n\t\t\t.join(\", \")}`,\n\t);\n}\n\nfunction isValidResponsesToolSpec(spec: ToolSpec): boolean {\n\tif (!(\"type\" in spec)) {\n\t\treturn false;\n\t}\n\n\tswitch (spec.type) {\n\t\tcase \"function\":\n\t\t\treturn isValidResponsesApiFunctionTool(spec);\n\t\tcase \"namespace\":\n\t\t\treturn (\n\t\t\t\ttypeof spec.name === \"string\" &&\n\t\t\t\ttypeof spec.description === \"string\" &&\n\t\t\t\tArray.isArray(spec.tools) &&\n\t\t\t\tspec.tools.every(isValidResponsesApiFunctionTool)\n\t\t\t);\n\t\tcase \"tool_search\":\n\t\t\treturn typeof spec.execution === \"string\";\n\t\tcase \"local_shell\":\n\t\tcase \"image_generation\":\n\t\tcase \"web_search\":\n\t\tcase \"custom\":\n\t\t\treturn true;\n\t}\n}\n\nfunction isValidResponsesApiFunctionTool(\n\ttool: ResponsesApiFunctionTool,\n): boolean {\n\treturn (\n\t\ttool.type === \"function\" &&\n\t\ttypeof tool.name === \"string\" &&\n\t\ttypeof tool.description === \"string\" &&\n\t\ttypeof tool.strict === \"boolean\" &&\n\t\t\"parameters\" in tool\n\t);\n}\n","import type {\n\tBaseInstructions,\n\tRateLimitSnapshot,\n\tResponseItem,\n\tToolSpec,\n\tTokenUsage,\n} from \"../../core/src\";\n\nexport const WS_REQUEST_HEADER_TRACEPARENT_CLIENT_METADATA_KEY =\n\t\"ws_request_header_traceparent\";\nexport const WS_REQUEST_HEADER_TRACESTATE_CLIENT_METADATA_KEY =\n\t\"ws_request_header_tracestate\";\n\nexport type Prompt = {\n\tinput: ResponseItem[];\n\ttools: ToolSpec[];\n\tparallel_tool_calls: boolean;\n\tbase_instructions: BaseInstructions;\n};\n\nexport type ResponseEvent =\n\t| {\n\t\t\ttype: \"created\";\n\t }\n\t| {\n\t\t\ttype: \"output_text_delta\";\n\t\t\titem_id?: string;\n\t\t\tdelta: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_call_input_delta\";\n\t\t\titem_id: string;\n\t\t\tcall_id?: string | null;\n\t\t\tdelta: string;\n\t }\n\t| {\n\t\t\ttype: \"reasoning_summary_delta\";\n\t\t\tdelta: string;\n\t\t\tsummary_index: number;\n\t }\n\t| {\n\t\t\ttype: \"reasoning_content_delta\";\n\t\t\tdelta: string;\n\t\t\tcontent_index: number;\n\t }\n\t| {\n\t\t\ttype: \"reasoning_summary_part_added\";\n\t\t\tsummary_index: number;\n\t }\n\t| {\n\t\t\ttype: \"output_item_added\";\n\t\t\titem: ResponseItem;\n\t }\n\t| {\n\t\t\ttype: \"output_item_done\";\n\t\t\titem: ResponseItem;\n\t }\n\t| {\n\t\t\ttype: \"server_model\";\n\t\t\tmodel: string;\n\t }\n\t| {\n\t\t\ttype: \"model_verifications\";\n\t\t\tmodel_verifications: unknown[];\n\t }\n\t| {\n\t\t\ttype: \"server_reasoning_included\";\n\t\t\treasoning_included: boolean;\n\t }\n\t| {\n\t\t\ttype: \"completed\";\n\t\t\tresponse_id: string;\n\t\t\ttoken_usage?: TokenUsage | null;\n\t\t\tend_turn?: boolean | null;\n\t }\n\t| {\n\t\t\ttype: \"rate_limits\";\n\t\t\trate_limits: RateLimitSnapshot;\n\t }\n\t| {\n\t\t\ttype: \"models_etag\";\n\t\t\tetag: string;\n\t };\n\nexport type ResponseStream = AsyncIterable<ResponseEvent> & {\n\tupstream_request_id?: string | null;\n};\n\nexport type TurnState = {\n\tget(): string | null;\n\tset(value: string): void;\n};\n\nexport type ResponsesApiRequest = {\n\tmodel: string;\n\tinstructions: string;\n\tinput: ResponseItem[];\n\ttools: unknown[];\n\ttool_choice: string;\n\tparallel_tool_calls: boolean;\n\treasoning: unknown | null;\n\tstore: boolean;\n\tstream: true;\n\tinclude: string[];\n\tservice_tier?: string;\n\tprompt_cache_key?: string;\n\ttext?: unknown;\n\tclient_metadata?: Record<string, string>;\n};\n\nexport type ResponseCreateWsRequest = Omit<ResponsesApiRequest, \"stream\"> & {\n\tstream: true;\n\tprevious_response_id?: string;\n\tgenerate?: boolean;\n};\n\nexport type ResponseProcessedWsRequest = {\n\tresponse_id: string;\n};\n\nexport type ResponsesWsRequest =\n\t| ({ type: \"response.create\" } & ResponseCreateWsRequest)\n\t| ({ type: \"response.processed\" } & ResponseProcessedWsRequest);\n\nexport type W3cTraceContext = {\n\ttraceparent?: string | null;\n\ttracestate?: string | null;\n};\n\nexport function responseCreateWsRequestFromResponsesApiRequest(\n\trequest: ResponsesApiRequest,\n): ResponseCreateWsRequest {\n\tconst response: ResponseCreateWsRequest = {\n\t\tmodel: request.model,\n\t\tinstructions: request.instructions,\n\t\tinput: request.input,\n\t\ttools: request.tools,\n\t\ttool_choice: request.tool_choice,\n\t\tparallel_tool_calls: request.parallel_tool_calls,\n\t\treasoning: request.reasoning,\n\t\tstore: request.store,\n\t\tstream: request.stream,\n\t\tinclude: request.include,\n\t};\n\tif (request.service_tier) {\n\t\tresponse.service_tier = request.service_tier;\n\t}\n\tif (request.prompt_cache_key) {\n\t\tresponse.prompt_cache_key = request.prompt_cache_key;\n\t}\n\tif (request.text !== undefined) {\n\t\tresponse.text = request.text;\n\t}\n\tif (request.client_metadata) {\n\t\tresponse.client_metadata = request.client_metadata;\n\t}\n\treturn response;\n}\n\nexport function response_create_client_metadata(\n\tclient_metadata: Record<string, string> | null | undefined,\n\ttrace?: W3cTraceContext | null,\n): Record<string, string> | undefined {\n\tconst metadata = { ...(client_metadata ?? {}) };\n\tif (trace?.traceparent) {\n\t\tmetadata[WS_REQUEST_HEADER_TRACEPARENT_CLIENT_METADATA_KEY] = trace.traceparent;\n\t}\n\tif (trace?.tracestate) {\n\t\tmetadata[WS_REQUEST_HEADER_TRACESTATE_CLIENT_METADATA_KEY] = trace.tracestate;\n\t}\n\treturn Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n","export type StreamTextChunk<TExtracted> = {\n\tvisible_text: string;\n\textracted: TExtracted[];\n};\n\nexport type ProposedPlanSegment =\n\t| { type: \"Normal\"; text: string }\n\t| { type: \"ProposedPlanStart\" }\n\t| { type: \"ProposedPlanDelta\"; text: string }\n\t| { type: \"ProposedPlanEnd\" };\n\nexport type AssistantTextChunk = {\n\tvisible_text: string;\n\tcitations: string[];\n\tplan_segments: ProposedPlanSegment[];\n};\n\nconst OPEN_TAG = \"<proposed_plan>\";\nconst CLOSE_TAG = \"</proposed_plan>\";\nconst CITATION_OPEN_TAG = \"<oai-mem-citation>\";\nconst CITATION_CLOSE_TAG = \"</oai-mem-citation>\";\n\ntype PlanTag = \"ProposedPlan\";\n\ntype TagSpec<T extends string> = {\n\topen: string;\n\tclose: string;\n\ttag: T;\n};\n\ntype TaggedLineSegment<T extends string> =\n\t| { type: \"Normal\"; text: string }\n\t| { type: \"TagStart\"; tag: T }\n\t| { type: \"TagDelta\"; tag: T; text: string }\n\t| { type: \"TagEnd\"; tag: T };\n\nexport class ProposedPlanParser {\n\tprivate readonly parser = new TaggedLineParser<PlanTag>([\n\t\t{\n\t\t\topen: OPEN_TAG,\n\t\t\tclose: CLOSE_TAG,\n\t\t\ttag: \"ProposedPlan\",\n\t\t},\n\t]);\n\n\tpush_str(chunk: string): StreamTextChunk<ProposedPlanSegment> {\n\t\treturn mapProposedPlanSegments(this.parser.parse(chunk));\n\t}\n\n\tfinish(): StreamTextChunk<ProposedPlanSegment> {\n\t\treturn mapProposedPlanSegments(this.parser.finish());\n\t}\n}\n\nclass TaggedLineParser<T extends string> {\n\tprivate activeTag: T | null = null;\n\tprivate detectTag = true;\n\tprivate lineBuffer = \"\";\n\n\tconstructor(private readonly specs: TagSpec<T>[]) {}\n\n\tparse(delta: string): TaggedLineSegment<T>[] {\n\t\tconst segments: TaggedLineSegment<T>[] = [];\n\t\tlet run = \"\";\n\n\t\tfor (const ch of delta) {\n\t\t\tif (this.detectTag) {\n\t\t\t\tif (run.length > 0) {\n\t\t\t\t\tthis.pushText(run, segments);\n\t\t\t\t\trun = \"\";\n\t\t\t\t}\n\t\t\t\tthis.lineBuffer += ch;\n\t\t\t\tif (ch === \"\\n\") {\n\t\t\t\t\tthis.finishLine(segments);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst slug = this.lineBuffer.trimStart();\n\t\t\t\tif (slug.length === 0 || this.isTagPrefix(slug)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst buffered = this.lineBuffer;\n\t\t\t\tthis.lineBuffer = \"\";\n\t\t\t\tthis.detectTag = false;\n\t\t\t\tthis.pushText(buffered, segments);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trun += ch;\n\t\t\tif (ch === \"\\n\") {\n\t\t\t\tthis.pushText(run, segments);\n\t\t\t\trun = \"\";\n\t\t\t\tthis.detectTag = true;\n\t\t\t}\n\t\t}\n\n\t\tif (run.length > 0) {\n\t\t\tthis.pushText(run, segments);\n\t\t}\n\n\t\treturn segments;\n\t}\n\n\tfinish(): TaggedLineSegment<T>[] {\n\t\tconst segments: TaggedLineSegment<T>[] = [];\n\t\tif (this.lineBuffer.length > 0) {\n\t\t\tconst buffered = this.lineBuffer;\n\t\t\tthis.lineBuffer = \"\";\n\t\t\tconst withoutNewline = buffered.endsWith(\"\\n\")\n\t\t\t\t? buffered.slice(0, -1)\n\t\t\t\t: buffered;\n\t\t\tconst slug = withoutNewline.trimStart().trimEnd();\n\n\t\t\tconst openTag = this.matchOpen(slug);\n\t\t\tconst closeTag = this.matchClose(slug);\n\t\t\tif (openTag && this.activeTag === null) {\n\t\t\t\tpushTaggedSegment(segments, { type: \"TagStart\", tag: openTag });\n\t\t\t\tthis.activeTag = openTag;\n\t\t\t} else if (closeTag && this.activeTag === closeTag) {\n\t\t\t\tpushTaggedSegment(segments, { type: \"TagEnd\", tag: closeTag });\n\t\t\t\tthis.activeTag = null;\n\t\t\t} else {\n\t\t\t\tthis.pushText(buffered, segments);\n\t\t\t}\n\t\t}\n\n\t\tif (this.activeTag) {\n\t\t\tpushTaggedSegment(segments, { type: \"TagEnd\", tag: this.activeTag });\n\t\t\tthis.activeTag = null;\n\t\t}\n\t\tthis.detectTag = true;\n\t\treturn segments;\n\t}\n\n\tprivate finishLine(segments: TaggedLineSegment<T>[]): void {\n\t\tconst line = this.lineBuffer;\n\t\tthis.lineBuffer = \"\";\n\t\tconst withoutNewline = line.endsWith(\"\\n\") ? line.slice(0, -1) : line;\n\t\tconst slug = withoutNewline.trimStart().trimEnd();\n\n\t\tconst openTag = this.matchOpen(slug);\n\t\tif (openTag && this.activeTag === null) {\n\t\t\tpushTaggedSegment(segments, { type: \"TagStart\", tag: openTag });\n\t\t\tthis.activeTag = openTag;\n\t\t\tthis.detectTag = true;\n\t\t\treturn;\n\t\t}\n\n\t\tconst closeTag = this.matchClose(slug);\n\t\tif (closeTag && this.activeTag === closeTag) {\n\t\t\tpushTaggedSegment(segments, { type: \"TagEnd\", tag: closeTag });\n\t\t\tthis.activeTag = null;\n\t\t\tthis.detectTag = true;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.detectTag = true;\n\t\tthis.pushText(line, segments);\n\t}\n\n\tprivate pushText(\n\t\ttext: string,\n\t\tsegments: TaggedLineSegment<T>[],\n\t): void {\n\t\tif (this.activeTag) {\n\t\t\tpushTaggedSegment(segments, {\n\t\t\t\ttype: \"TagDelta\",\n\t\t\t\ttag: this.activeTag,\n\t\t\t\ttext,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tpushTaggedSegment(segments, { type: \"Normal\", text });\n\t}\n\n\tprivate isTagPrefix(slug: string): boolean {\n\t\tconst trimmed = slug.trimEnd();\n\t\treturn this.specs.some(\n\t\t\t(spec) => spec.open.startsWith(trimmed) || spec.close.startsWith(trimmed),\n\t\t);\n\t}\n\n\tprivate matchOpen(slug: string): T | null {\n\t\treturn this.specs.find((spec) => spec.open === slug)?.tag ?? null;\n\t}\n\n\tprivate matchClose(slug: string): T | null {\n\t\treturn this.specs.find((spec) => spec.close === slug)?.tag ?? null;\n\t}\n}\n\nfunction pushTaggedSegment<T extends string>(\n\tsegments: TaggedLineSegment<T>[],\n\tsegment: TaggedLineSegment<T>,\n): void {\n\tswitch (segment.type) {\n\t\tcase \"Normal\":\n\t\t\tif (segment.text.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (segments.at(-1)?.type === \"Normal\") {\n\t\t\t\t(segments[segments.length - 1] as Extract<\n\t\t\t\t\tTaggedLineSegment<T>,\n\t\t\t\t\t{ type: \"Normal\" }\n\t\t\t\t>).text += segment.text;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsegments.push(segment);\n\t\t\treturn;\n\t\tcase \"TagDelta\":\n\t\t\tif (segment.text.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsegments.at(-1)?.type === \"TagDelta\" &&\n\t\t\t\t(segments.at(-1) as Extract<\n\t\t\t\t\tTaggedLineSegment<T>,\n\t\t\t\t\t{ type: \"TagDelta\" }\n\t\t\t\t>).tag === segment.tag\n\t\t\t) {\n\t\t\t\t(segments[segments.length - 1] as Extract<\n\t\t\t\t\tTaggedLineSegment<T>,\n\t\t\t\t\t{ type: \"TagDelta\" }\n\t\t\t\t>).text += segment.text;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsegments.push(segment);\n\t\t\treturn;\n\t\tcase \"TagStart\":\n\t\tcase \"TagEnd\":\n\t\t\tsegments.push(segment);\n\t\t\treturn;\n\t}\n}\n\nfunction mapProposedPlanSegments(\n\tsegments: TaggedLineSegment<PlanTag>[],\n): StreamTextChunk<ProposedPlanSegment> {\n\tconst out: StreamTextChunk<ProposedPlanSegment> = {\n\t\tvisible_text: \"\",\n\t\textracted: [],\n\t};\n\tfor (const segment of segments) {\n\t\tswitch (segment.type) {\n\t\t\tcase \"Normal\":\n\t\t\t\tout.visible_text += segment.text;\n\t\t\t\tout.extracted.push({ type: \"Normal\", text: segment.text });\n\t\t\t\tbreak;\n\t\t\tcase \"TagStart\":\n\t\t\t\tout.extracted.push({ type: \"ProposedPlanStart\" });\n\t\t\t\tbreak;\n\t\t\tcase \"TagDelta\":\n\t\t\t\tout.extracted.push({ type: \"ProposedPlanDelta\", text: segment.text });\n\t\t\t\tbreak;\n\t\t\tcase \"TagEnd\":\n\t\t\t\tout.extracted.push({ type: \"ProposedPlanEnd\" });\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn out;\n}\n\nexport function stripProposedPlanBlocks(text: string): string {\n\tconst parser = new ProposedPlanParser();\n\tconst pushed = parser.push_str(text);\n\tconst finished = parser.finish();\n\treturn pushed.visible_text + finished.visible_text;\n}\n\nexport function extractProposedPlanText(text: string): string | null {\n\tconst parser = new ProposedPlanParser();\n\tlet planText = \"\";\n\tlet sawPlanBlock = false;\n\tfor (const segment of [\n\t\t...parser.push_str(text).extracted,\n\t\t...parser.finish().extracted,\n\t]) {\n\t\tswitch (segment.type) {\n\t\t\tcase \"ProposedPlanStart\":\n\t\t\t\tsawPlanBlock = true;\n\t\t\t\tplanText = \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"ProposedPlanDelta\":\n\t\t\t\tplanText += segment.text;\n\t\t\t\tbreak;\n\t\t\tcase \"ProposedPlanEnd\":\n\t\t\tcase \"Normal\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn sawPlanBlock ? planText : null;\n}\n\nexport class AssistantTextStreamParser {\n\tprivate readonly citations = new CitationStreamParser();\n\tprivate readonly plan = new ProposedPlanParser();\n\n\tconstructor(private readonly planMode: boolean) {}\n\n\tpush_str(chunk: string): AssistantTextChunk {\n\t\tconst citationChunk = this.citations.push_str(chunk);\n\t\tconst parsed = this.parseVisibleText(citationChunk.visible_text);\n\t\treturn {\n\t\t\t...parsed,\n\t\t\tcitations: citationChunk.extracted,\n\t\t};\n\t}\n\n\tfinish(): AssistantTextChunk {\n\t\tconst citationChunk = this.citations.finish();\n\t\tconst parsed = this.parseVisibleText(citationChunk.visible_text);\n\t\tif (this.planMode) {\n\t\t\tconst tail = this.plan.finish();\n\t\t\tparsed.visible_text += tail.visible_text;\n\t\t\tparsed.plan_segments.push(...tail.extracted);\n\t\t}\n\t\treturn {\n\t\t\t...parsed,\n\t\t\tcitations: citationChunk.extracted,\n\t\t};\n\t}\n\n\tprivate parseVisibleText(visibleText: string): AssistantTextChunk {\n\t\tif (!this.planMode) {\n\t\t\treturn {\n\t\t\t\tvisible_text: visibleText,\n\t\t\t\tcitations: [],\n\t\t\t\tplan_segments: [],\n\t\t\t};\n\t\t}\n\t\tconst planChunk = this.plan.push_str(visibleText);\n\t\treturn {\n\t\t\tvisible_text: planChunk.visible_text,\n\t\t\tcitations: [],\n\t\t\tplan_segments: planChunk.extracted,\n\t\t};\n\t}\n}\n\nclass CitationStreamParser {\n\tprivate buffer = \"\";\n\tprivate mode: \"normal\" | \"citation\" = \"normal\";\n\n\tpush_str(chunk: string): StreamTextChunk<string> {\n\t\tthis.buffer += chunk;\n\t\treturn this.parse(false);\n\t}\n\n\tfinish(): StreamTextChunk<string> {\n\t\treturn this.parse(true);\n\t}\n\n\tprivate parse(finish: boolean): StreamTextChunk<string> {\n\t\tconst out: StreamTextChunk<string> = { visible_text: \"\", extracted: [] };\n\t\twhile (this.buffer.length > 0) {\n\t\t\tif (this.mode === \"normal\") {\n\t\t\t\tconst startIndex = this.buffer.indexOf(CITATION_OPEN_TAG);\n\t\t\t\tif (startIndex === -1) {\n\t\t\t\t\tconst suffix = finish\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: partialTagSuffixLength(this.buffer, CITATION_OPEN_TAG);\n\t\t\t\t\tconst length = this.buffer.length - suffix;\n\t\t\t\t\tout.visible_text += this.buffer.slice(0, length);\n\t\t\t\t\tthis.buffer = this.buffer.slice(length);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tout.visible_text += this.buffer.slice(0, startIndex);\n\t\t\t\tthis.buffer = this.buffer.slice(startIndex + CITATION_OPEN_TAG.length);\n\t\t\t\tthis.mode = \"citation\";\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst endIndex = this.buffer.indexOf(CITATION_CLOSE_TAG);\n\t\t\tif (endIndex === -1) {\n\t\t\t\tif (finish) {\n\t\t\t\t\tout.extracted.push(this.buffer);\n\t\t\t\t\tthis.buffer = \"\";\n\t\t\t\t\tthis.mode = \"normal\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tout.extracted.push(this.buffer.slice(0, endIndex));\n\t\t\tthis.buffer = this.buffer.slice(endIndex + CITATION_CLOSE_TAG.length);\n\t\t\tthis.mode = \"normal\";\n\t\t}\n\t\treturn out;\n\t}\n}\n\nfunction partialTagSuffixLength(text: string, tag: string): number {\n\tconst maxLength = Math.min(text.length, tag.length - 1);\n\tfor (let length = maxLength; length > 0; length -= 1) {\n\t\tif (tag.startsWith(text.slice(text.length - length))) {\n\t\t\treturn length;\n\t\t}\n\t}\n\treturn 0;\n}\n","import type {\n\tContentItem,\n\tEventMsg,\n\tFunctionCallOutputContentItem,\n\tFunctionCallOutputPayload,\n\tResponseItem,\n\tRolloutItem,\n\tSubmission,\n\tUserInput,\n} from \"../../core/src\";\nimport {\n\tnormalizeResponseHistory,\n\treconstructHistoryFromRollout,\n} from \"../../core/src\";\nimport {\n\tAssistantTextStreamParser,\n} from \"../../core/src/stream-parser\";\nexport { responseInputToResponseItem } from \"../../core/src\";\n\nexport function modelInputFromHistoryAndSubmission(\n\thistory: RolloutItem[],\n\tsubmission: Submission,\n): ResponseItem[] {\n\treturn [\n\t\t...modelInputFromHistory(history),\n\t\t...inputFromSubmission(submission),\n\t];\n}\n\nexport function modelInputFromHistory(\n\thistory: RolloutItem[],\n): ResponseItem[] {\n\treturn normalizeResponseHistory(reconstructHistoryFromRollout(history).history);\n}\n\nexport function inputFromSubmission(\n\tsubmission: Submission,\n): ResponseItem[] {\n\tif (\n\t\tsubmission.op.type !== \"user_turn\" &&\n\t\tsubmission.op.type !== \"user_input\" &&\n\t\tsubmission.op.type !== \"user_input_with_turn_context\"\n\t) {\n\t\treturn [];\n\t}\n\n\treturn [userInputAsResponseInput(submission.op.items)];\n}\n\nexport function userMessageEventAsResponseInput(\n\tevent: EventMsg & { type: \"user_message\" },\n): ResponseItem {\n\tconst items: UserInput[] = [\n\t\t...(event.message ? [{ type: \"text\" as const, text: event.message }] : []),\n\t\t...(event.images ?? []).map((imageUrl) => ({\n\t\t\ttype: \"image\" as const,\n\t\t\timage_url: imageUrl,\n\t\t})),\n\t];\n\n\treturn userInputAsResponseInput(items);\n}\n\nexport function userInputAsResponseInput(\n\titems: UserInput[],\n): ResponseItem {\n\tconst content: ContentItem[] = [];\n\n\tfor (const item of items) {\n\t\tif (item.type === \"text\") {\n\t\t\tcontent.push({ type: \"input_text\", text: item.text });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.type === \"image\") {\n\t\t\tcontent.push({ type: \"input_image\", image_url: item.image_url });\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"message\",\n\t\trole: \"user\",\n\t\tcontent,\n\t};\n}\n\nexport function outputTextDeltaFromStreamEvent(\n\tevent: unknown,\n): { text: string; item_id?: string } | null {\n\tif (\n\t\ttypeof event === \"object\" &&\n\t\tevent !== null &&\n\t\t(event as { type?: unknown }).type === \"response.output_text.delta\" &&\n\t\ttypeof (event as { delta?: unknown }).delta === \"string\"\n\t) {\n\t\tconst itemId =\n\t\t\ttypeof (event as { item_id?: unknown }).item_id === \"string\"\n\t\t\t\t? (event as { item_id: string }).item_id\n\t\t\t\t: undefined;\n\t\treturn {\n\t\t\ttext: (event as { delta: string }).delta,\n\t\t\t...(itemId ? { item_id: itemId } : {}),\n\t\t};\n\t}\n\n\treturn null;\n}\n\nexport type OpenAiResponseLike = {\n\toutput?: unknown;\n};\n\nexport function responseOutputItemsFromResponse(\n\tresponse: OpenAiResponseLike,\n): ResponseItem[] {\n\tconst output = Array.isArray(response.output) ? response.output : [];\n\treturn output\n\t\t.filter(isRecord)\n\t\t.map(responseOutputItemAsResponseItem);\n}\n\nfunction responseOutputItemAsResponseItem(\n\titem: Record<string, unknown>,\n): ResponseItem {\n\tswitch (item.type) {\n\t\tcase \"message\":\n\t\t\treturn {\n\t\t\t\ttype: \"message\",\n\t\t\t\t...(typeof item.id === \"string\" ? { id: item.id } : {}),\n\t\t\t\trole: typeof item.role === \"string\" ? item.role : \"assistant\",\n\t\t\t\tcontent: contentItemsFromWire(item.content),\n\t\t\t\t...(item.phase === \"commentary\" || item.phase === \"final_answer\"\n\t\t\t\t\t? { phase: item.phase }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\tcase \"reasoning\":\n\t\t\treturn {\n\t\t\t\ttype: \"reasoning\",\n\t\t\t\t...(typeof item.id === \"string\" ? { id: item.id } : {}),\n\t\t\t\tsummary: Array.isArray(item.summary) ? item.summary : [],\n\t\t\t\t...(Array.isArray(item.content) ? { content: item.content } : {}),\n\t\t\t\t...(typeof item.encrypted_content === \"string\"\n\t\t\t\t\t? { encrypted_content: item.encrypted_content }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\tcase \"local_shell_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"local_shell_call\",\n\t\t\t\t...(typeof item.call_id === \"string\" ? { call_id: item.call_id } : {}),\n\t\t\t\t...(typeof item.status === \"string\" ? { status: item.status } : {}),\n\t\t\t\taction: isRecord(item.action) ? item.action : {},\n\t\t\t};\n\t\tcase \"function_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"function_call\",\n\t\t\t\tname: typeof item.name === \"string\" ? item.name : \"\",\n\t\t\t\t...(typeof item.namespace === \"string\"\n\t\t\t\t\t? { namespace: item.namespace }\n\t\t\t\t\t: {}),\n\t\t\t\targuments: typeof item.arguments === \"string\" ? item.arguments : \"{}\",\n\t\t\t\tcall_id: typeof item.call_id === \"string\" ? item.call_id : \"\",\n\t\t\t};\n\t\tcase \"tool_search_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"tool_search_call\",\n\t\t\t\t...(typeof item.call_id === \"string\" ? { call_id: item.call_id } : {}),\n\t\t\t\t...(typeof item.status === \"string\" ? { status: item.status } : {}),\n\t\t\t\texecution: typeof item.execution === \"string\" ? item.execution : \"\",\n\t\t\t\targuments: item.arguments ?? {},\n\t\t\t};\n\t\tcase \"function_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: typeof item.call_id === \"string\" ? item.call_id : \"\",\n\t\t\t\toutput: functionCallOutputPayloadFromWire(item.output),\n\t\t\t};\n\t\tcase \"custom_tool_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"custom_tool_call\",\n\t\t\t\t...(typeof item.status === \"string\" ? { status: item.status } : {}),\n\t\t\t\tcall_id: typeof item.call_id === \"string\" ? item.call_id : \"\",\n\t\t\t\tname: typeof item.name === \"string\" ? item.name : \"\",\n\t\t\t\tinput: typeof item.input === \"string\" ? item.input : \"\",\n\t\t\t};\n\t\tcase \"custom_tool_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\tcall_id: typeof item.call_id === \"string\" ? item.call_id : \"\",\n\t\t\t\t...(typeof item.name === \"string\" ? { name: item.name } : {}),\n\t\t\t\toutput: functionCallOutputPayloadFromWire(item.output),\n\t\t\t};\n\t\tcase \"tool_search_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\t...(typeof item.call_id === \"string\" ? { call_id: item.call_id } : {}),\n\t\t\t\tstatus: typeof item.status === \"string\" ? item.status : \"\",\n\t\t\t\texecution: typeof item.execution === \"string\" ? item.execution : \"\",\n\t\t\t\ttools: Array.isArray(item.tools) ? item.tools : [],\n\t\t\t};\n\t\tcase \"web_search_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"web_search_call\",\n\t\t\t\t...(typeof item.id === \"string\" ? { id: item.id } : {}),\n\t\t\t\t...(typeof item.status === \"string\" ? { status: item.status } : {}),\n\t\t\t\t...(isRecord(item.action) ? { action: item.action } : {}),\n\t\t\t};\n\t\tcase \"image_generation_call\":\n\t\t\treturn {\n\t\t\t\ttype: \"image_generation_call\",\n\t\t\t\tid: typeof item.id === \"string\" ? item.id : \"\",\n\t\t\t\tstatus: typeof item.status === \"string\" ? item.status : \"\",\n\t\t\t\t...(typeof item.revised_prompt === \"string\"\n\t\t\t\t\t? { revised_prompt: item.revised_prompt }\n\t\t\t\t\t: {}),\n\t\t\t\tresult: typeof item.result === \"string\" ? item.result : \"\",\n\t\t\t\t...(typeof item.saved_path === \"string\"\n\t\t\t\t\t? { saved_path: item.saved_path }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\tcase \"compaction_summary\":\n\t\tcase \"compaction\":\n\t\t\treturn {\n\t\t\t\ttype: \"compaction\",\n\t\t\t\t...(typeof item.encrypted_content === \"string\"\n\t\t\t\t\t? { encrypted_content: item.encrypted_content }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\tcase \"context_compaction\":\n\t\t\treturn {\n\t\t\t\ttype: \"context_compaction\",\n\t\t\t\t...(typeof item.encrypted_content === \"string\"\n\t\t\t\t\t? { encrypted_content: item.encrypted_content }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn { type: \"other\" };\n\t}\n}\n\nexport function rawAssistantOutputTextFromItem(\n\titem: ResponseItem,\n): string | null {\n\tif (item.type !== \"message\") {\n\t\treturn null;\n\t}\n\n\tconst content = item.content;\n\tconst text = content\n\t\t.map((part) => textFromMessageContentPart(part))\n\t\t.filter((part) => part.length > 0)\n\t\t.join(\"\");\n\n\treturn text.length > 0 ? text : null;\n}\n\nexport type ProposedPlanExtraction = {\n\tassistantText: string;\n\tplanText: string | null;\n};\n\nexport function extractProposedPlanFromText(text: string): ProposedPlanExtraction {\n\tconst parser = new AssistantTextStreamParser(true);\n\tconst parsed = parser.push_str(text);\n\tconst finished = parser.finish();\n\tlet planText = \"\";\n\tlet sawPlanBlock = false;\n\tfor (const segment of [...parsed.plan_segments, ...finished.plan_segments]) {\n\t\tswitch (segment.type) {\n\t\t\tcase \"ProposedPlanStart\":\n\t\t\t\tsawPlanBlock = true;\n\t\t\t\tplanText = \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"ProposedPlanDelta\":\n\t\t\t\tplanText += segment.text;\n\t\t\t\tbreak;\n\t\t\tcase \"ProposedPlanEnd\":\n\t\t\tcase \"Normal\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn {\n\t\tassistantText: parsed.visible_text + finished.visible_text,\n\t\tplanText: sawPlanBlock ? planText : null,\n\t};\n}\n\nfunction textFromMessageContentPart(part: unknown): string {\n\tif (!isRecord(part)) {\n\t\treturn \"\";\n\t}\n\n\tif (\n\t\t(part.type === \"output_text\" || part.type === \"text\") &&\n\t\ttypeof part.text === \"string\"\n\t) {\n\t\treturn part.text;\n\t}\n\n\treturn \"\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction contentItemsFromWire(content: unknown): ContentItem[] {\n\tif (!Array.isArray(content)) {\n\t\treturn [];\n\t}\n\n\treturn content.flatMap((item): ContentItem[] => {\n\t\tif (!isRecord(item)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (\n\t\t\t(item.type === \"input_text\" ||\n\t\t\t\titem.type === \"output_text\" ||\n\t\t\t\titem.type === \"text\") &&\n\t\t\ttypeof item.text === \"string\"\n\t\t) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype: item.type === \"output_text\" ? \"output_text\" : \"input_text\",\n\t\t\t\t\ttext: item.text,\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\tif (\n\t\t\titem.type === \"input_image\" &&\n\t\t\ttypeof item.image_url === \"string\"\n\t\t) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype: \"input_image\",\n\t\t\t\t\timage_url: item.image_url,\n\t\t\t\t\t...(typeof item.detail === \"string\" ? { detail: item.detail } : {}),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\treturn [];\n\t});\n}\n\nfunction functionCallOutputPayloadFromWire(\n\toutput: unknown,\n): FunctionCallOutputPayload {\n\tif (typeof output === \"string\") {\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: output,\n\t\t\t},\n\t\t\tsuccess: null,\n\t\t};\n\t}\n\n\tif (Array.isArray(output)) {\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttype: \"content_items\",\n\t\t\t\titems: output.flatMap(functionCallOutputContentItemFromWire),\n\t\t\t},\n\t\t\tsuccess: null,\n\t\t};\n\t}\n\n\treturn {\n\t\tbody: {\n\t\t\ttype: \"text\",\n\t\t\ttext: JSON.stringify(output ?? null),\n\t\t},\n\t\tsuccess: null,\n\t};\n}\n\nfunction functionCallOutputContentItemFromWire(\n\titem: unknown,\n): FunctionCallOutputContentItem[] {\n\tif (!isRecord(item)) {\n\t\treturn [];\n\t}\n\n\tif (item.type === \"input_text\" && typeof item.text === \"string\") {\n\t\treturn [{ type: \"input_text\", text: item.text }];\n\t}\n\n\tif (item.type === \"input_image\" && typeof item.image_url === \"string\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: \"input_image\",\n\t\t\t\timage_url: item.image_url,\n\t\t\t\t...(typeof item.detail === \"string\" ? { detail: item.detail } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\treturn [];\n}\n","import type { RateLimitSnapshot, RateLimitWindow } from \"../../core/src\";\n\nexport function parseAllRateLimits(headers: Headers): RateLimitSnapshot[] {\n\tconst snapshots: RateLimitSnapshot[] = [];\n\tconst defaultSnapshot = parseRateLimitForLimit(headers, null);\n\tif (defaultSnapshot) {\n\t\tsnapshots.push(defaultSnapshot);\n\t}\n\n\tconst limitIds = new Set<string>();\n\tfor (const key of headers.keys()) {\n\t\tconst limitId = headerNameToLimitId(key.toLowerCase());\n\t\tif (limitId && limitId !== \"codex\") {\n\t\t\tlimitIds.add(limitId);\n\t\t}\n\t}\n\n\tfor (const limitId of [...limitIds].sort()) {\n\t\tconst snapshot = parseRateLimitForLimit(headers, limitId);\n\t\tif (\n\t\t\tsnapshot &&\n\t\t\t(snapshot.primary || snapshot.secondary || snapshot.credits)\n\t\t) {\n\t\t\tsnapshots.push(snapshot);\n\t\t}\n\t}\n\n\treturn snapshots;\n}\n\nexport function parseRateLimitEventPayload(\n\tevent: Record<string, unknown>,\n): RateLimitSnapshot | null {\n\tif (event.type !== \"codex.rate_limits\") {\n\t\treturn null;\n\t}\n\tconst details = isRecord(event.rate_limits) ? event.rate_limits : null;\n\tconst primary = isRecord(details?.primary)\n\t\t? rateLimitEventWindow(details.primary)\n\t\t: null;\n\tconst secondary = isRecord(details?.secondary)\n\t\t? rateLimitEventWindow(details.secondary)\n\t\t: null;\n\tconst credits = isRecord(event.credits)\n\t\t? ({ ...event.credits } as Record<string, unknown>)\n\t\t: isRecord(event.rate_limits) && isRecord(event.rate_limits.credits)\n\t\t\t? ({ ...event.rate_limits.credits } as Record<string, unknown>)\n\t\t\t: null;\n\tconst limitId =\n\t\ttypeof event.metered_limit_name === \"string\"\n\t\t\t? normalizeLimitId(event.metered_limit_name)\n\t\t\t: typeof event.limit_name === \"string\"\n\t\t\t\t? normalizeLimitId(event.limit_name)\n\t\t\t\t: typeof event.limit_id === \"string\"\n\t\t\t\t\t? normalizeLimitId(event.limit_id)\n\t\t\t\t\t: \"codex\";\n\n\treturn {\n\t\tlimit_id: limitId,\n\t\tprimary,\n\t\tsecondary,\n\t\tcredits,\n\t\tplan_type:\n\t\t\ttypeof event.plan_type === \"string\"\n\t\t\t\t? event.plan_type\n\t\t\t\t: isRecord(event.rate_limits) &&\n\t\t\t\t\t typeof event.rate_limits.plan_type === \"string\"\n\t\t\t\t\t? event.rate_limits.plan_type\n\t\t\t\t\t: null,\n\t};\n}\n\nfunction parseRateLimitForLimit(\n\theaders: Headers,\n\tlimitId: string | null,\n): RateLimitSnapshot | null {\n\tconst normalizedLimit = (limitId?.trim() || \"codex\")\n\t\t.toLowerCase()\n\t\t.replaceAll(\"_\", \"-\");\n\tconst prefix = `x-${normalizedLimit}`;\n\tconst primary = parseRateLimitWindow(\n\t\theaders,\n\t\t`${prefix}-primary-used-percent`,\n\t\t`${prefix}-primary-window-minutes`,\n\t\t`${prefix}-primary-reset-at`,\n\t);\n\tconst secondary = parseRateLimitWindow(\n\t\theaders,\n\t\t`${prefix}-secondary-used-percent`,\n\t\t`${prefix}-secondary-window-minutes`,\n\t\t`${prefix}-secondary-reset-at`,\n\t);\n\tconst credits = parseCreditsSnapshot(headers);\n\tconst limitName = stringHeader(headers, `${prefix}-limit-name`);\n\n\treturn {\n\t\tlimit_id: normalizeLimitId(normalizedLimit),\n\t\t...(limitName ? { limit_name: limitName } : {}),\n\t\tprimary,\n\t\tsecondary,\n\t\tcredits,\n\t\tplan_type: null,\n\t};\n}\n\nfunction parseRateLimitWindow(\n\theaders: Headers,\n\tusedPercentHeader: string,\n\twindowMinutesHeader: string,\n\tresetsAtHeader: string,\n): RateLimitWindow | null {\n\tconst usedPercent = numberHeader(headers, usedPercentHeader);\n\tif (usedPercent === null) {\n\t\treturn null;\n\t}\n\tconst windowMinutes = numberHeader(headers, windowMinutesHeader);\n\tconst resetsAt = numberHeader(headers, resetsAtHeader);\n\tconst hasData =\n\t\tusedPercent !== 0 ||\n\t\t(windowMinutes !== null && windowMinutes !== 0) ||\n\t\tresetsAt !== null;\n\tif (!hasData) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tused_percent: usedPercent,\n\t\twindow_minutes: windowMinutes,\n\t\tresets_at: resetsAt,\n\t};\n}\n\nfunction rateLimitEventWindow(value: Record<string, unknown>): RateLimitWindow {\n\treturn {\n\t\t...value,\n\t\t...(numberField(value.used_percent) !== null\n\t\t\t? { used_percent: numberField(value.used_percent) }\n\t\t\t: {}),\n\t\t...(numberField(value.window_minutes) !== null\n\t\t\t? { window_minutes: numberField(value.window_minutes) }\n\t\t\t: {}),\n\t\t...(numberField(value.reset_at) !== null ||\n\t\tnumberField(value.resets_at) !== null\n\t\t\t? { resets_at: numberField(value.reset_at) ?? numberField(value.resets_at) }\n\t\t\t: {}),\n\t};\n}\n\nfunction parseCreditsSnapshot(headers: Headers): Record<string, unknown> | null {\n\tconst hasCredits = booleanHeader(headers, \"x-codex-credits-has-credits\");\n\tconst unlimited = booleanHeader(headers, \"x-codex-credits-unlimited\");\n\tif (hasCredits === null || unlimited === null) {\n\t\treturn null;\n\t}\n\tconst balance = stringHeader(headers, \"x-codex-credits-balance\");\n\treturn {\n\t\thas_credits: hasCredits,\n\t\tunlimited,\n\t\t...(balance ? { balance } : {}),\n\t};\n}\n\nfunction headerNameToLimitId(headerName: string): string | null {\n\tconst suffix = \"-primary-used-percent\";\n\tconst prefix = headerName.endsWith(suffix)\n\t\t? headerName.slice(0, -suffix.length)\n\t\t: null;\n\tconst limit = prefix?.startsWith(\"x-\") ? prefix.slice(2) : null;\n\treturn limit ? normalizeLimitId(limit) : null;\n}\n\nfunction normalizeLimitId(value: string): string {\n\treturn value.trim().toLowerCase().replaceAll(\"-\", \"_\");\n}\n\nfunction stringHeader(headers: Headers, name: string): string | null {\n\tconst value = headers.get(name)?.trim();\n\treturn value || null;\n}\n\nfunction numberHeader(headers: Headers, name: string): number | null {\n\tconst raw = headers.get(name);\n\tif (!raw) {\n\t\treturn null;\n\t}\n\tconst parsed = Number.parseFloat(raw);\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction booleanHeader(headers: Headers, name: string): boolean | null {\n\tconst raw = headers.get(name);\n\tif (!raw) {\n\t\treturn null;\n\t}\n\tif (raw === \"1\" || raw.toLowerCase() === \"true\") {\n\t\treturn true;\n\t}\n\tif (raw === \"0\" || raw.toLowerCase() === \"false\") {\n\t\treturn false;\n\t}\n\treturn null;\n}\n\nfunction numberField(value: unknown): number | null {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { TokenUsage } from \"../../../core/src\";\nimport type { ResponseEvent, ResponseStream } from \"../common\";\nimport {\n\toutputTextDeltaFromStreamEvent,\n\tresponseOutputItemsFromResponse,\n} from \"../stream_events_utils\";\nimport { ApiError, apiErrorFromResponsesEvent } from \"../error\";\nimport { parseAllRateLimits, parseRateLimitEventPayload } from \"../rate_limits\";\n\nexport type SpawnResponseStreamInput = {\n\theaders?: Headers | null;\n\tchunks: AsyncIterable<string>;\n\tidle_timeout_ms?: number | null;\n\trequire_completed?: boolean;\n};\n\nexport function spawnResponseStream(input: SpawnResponseStreamInput): ResponseStream {\n\tconst upstreamRequestId = input.headers?.get(\"x-request-id\") ?? null;\n\treturn new ParsedResponseStream({\n\t\t...input,\n\t\tupstream_request_id: upstreamRequestId,\n\t});\n}\n\nexport async function* responseEventsFromSseTextChunks(\n\tchunks: AsyncIterable<string>,\n\toptions: {\n\t\theaders?: Headers | null;\n\t\tidle_timeout_ms?: number | null;\n\t\trequire_completed?: boolean;\n\t} = {},\n): AsyncGenerator<ResponseEvent> {\n\tyield* responseEventsFromParsedRecords(sseRecordsFromTextChunks(chunks), options);\n}\n\nclass ParsedResponseStream implements ResponseStream {\n\treadonly upstream_request_id?: string | null;\n\n\tconstructor(\n\t\tprivate readonly input: SpawnResponseStreamInput & {\n\t\t\tupstream_request_id?: string | null;\n\t\t},\n\t) {\n\t\tthis.upstream_request_id = input.upstream_request_id ?? null;\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncIterator<ResponseEvent> {\n\t\tif (this.input.headers) {\n\t\t\tyield* headerResponseEvents(this.input.headers);\n\t\t}\n\t\tyield* responseEventsFromParsedRecords(\n\t\t\tsseRecordsFromTextChunks(this.input.chunks, {\n\t\t\t\tidle_timeout_ms: this.input.idle_timeout_ms,\n\t\t\t}),\n\t\t\t{\n\t\t\t\trequire_completed: this.input.require_completed ?? true,\n\t\t\t},\n\t\t);\n\t}\n}\n\nfunction* headerResponseEvents(headers: Headers): Generator<ResponseEvent> {\n\tconst serverModel = headers.get(\"openai-model\");\n\tif (serverModel) {\n\t\tyield { type: \"server_model\", model: serverModel };\n\t}\n\tfor (const snapshot of parseAllRateLimits(headers)) {\n\t\tyield { type: \"rate_limits\", rate_limits: snapshot };\n\t}\n\tconst etag = headers.get(\"x-models-etag\");\n\tif (etag) {\n\t\tyield { type: \"models_etag\", etag };\n\t}\n\tif (headers.has(\"x-reasoning-included\")) {\n\t\tyield { type: \"server_reasoning_included\", reasoning_included: true };\n\t}\n}\n\nasync function* responseEventsFromParsedRecords(\n\trecords: AsyncIterable<Record<string, unknown>>,\n\toptions: { require_completed?: boolean } = {},\n): AsyncGenerator<ResponseEvent> {\n\tlet completed = false;\n\tlet lastServerModel: string | null = null;\n\tlet responseError: ApiError | null = null;\n\n\tfor await (const event of records) {\n\t\tconst model = responseModelFromEvent(event);\n\t\tif (model && model !== lastServerModel) {\n\t\t\tyield { type: \"server_model\", model };\n\t\t\tlastServerModel = model;\n\t\t}\n\t\tconst verifications = modelVerificationsFromEvent(event);\n\t\tif (verifications) {\n\t\t\tyield {\n\t\t\t\ttype: \"model_verifications\",\n\t\t\t\tmodel_verifications: verifications,\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst mapped = responseEventFromRecord(event);\n\t\t\tif (!mapped) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (mapped.type === \"completed\") {\n\t\t\t\tcompleted = true;\n\t\t\t}\n\t\t\tyield mapped;\n\t\t\tif (mapped.type === \"completed\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst apiError = error instanceof ApiError ? error : ApiError.stream(String(error));\n\t\t\tresponseError = apiError;\n\t\t}\n\t}\n\n\tif (options.require_completed && !completed) {\n\t\tthrow responseError ?? ApiError.stream(\"stream closed before response.completed\");\n\t}\n}\n\nfunction responseEventFromRecord(event: Record<string, unknown>): ResponseEvent | null {\n\tconst delta = outputTextDeltaFromStreamEvent(event);\n\tif (delta) {\n\t\treturn {\n\t\t\ttype: \"output_text_delta\",\n\t\t\tdelta: delta.text,\n\t\t\t...(delta.item_id ? { item_id: delta.item_id } : {}),\n\t\t};\n\t}\n\n\tswitch (event.type) {\n\t\tcase \"response.created\":\n\t\t\treturn isRecord(event.response) ? { type: \"created\" } : null;\n\t\tcase \"response.output_item.added\":\n\t\t\treturn responseItemEvent(\"output_item_added\", event);\n\t\tcase \"response.output_item.done\":\n\t\t\treturn responseItemEvent(\"output_item_done\", event);\n\t\tcase \"response.custom_tool_call_input.delta\": {\n\t\t\tconst deltaText = typeof event.delta === \"string\" ? event.delta : null;\n\t\t\tconst itemId =\n\t\t\t\ttypeof event.item_id === \"string\"\n\t\t\t\t\t? event.item_id\n\t\t\t\t\t: typeof event.call_id === \"string\"\n\t\t\t\t\t\t? event.call_id\n\t\t\t\t\t\t: null;\n\t\t\tif (!deltaText || !itemId) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"tool_call_input_delta\",\n\t\t\t\titem_id: itemId,\n\t\t\t\tcall_id: typeof event.call_id === \"string\" ? event.call_id : null,\n\t\t\t\tdelta: deltaText,\n\t\t\t};\n\t\t}\n\t\tcase \"response.reasoning_summary_text.delta\": {\n\t\t\tconst deltaText = typeof event.delta === \"string\" ? event.delta : null;\n\t\t\tconst summaryIndex = numberField(event.summary_index);\n\t\t\treturn deltaText && summaryIndex !== null\n\t\t\t\t? {\n\t\t\t\t\t\ttype: \"reasoning_summary_delta\",\n\t\t\t\t\t\tdelta: deltaText,\n\t\t\t\t\t\tsummary_index: summaryIndex,\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\t}\n\t\tcase \"response.reasoning_text.delta\": {\n\t\t\tconst deltaText = typeof event.delta === \"string\" ? event.delta : null;\n\t\t\tconst contentIndex = numberField(event.content_index);\n\t\t\treturn deltaText && contentIndex !== null\n\t\t\t\t? {\n\t\t\t\t\t\ttype: \"reasoning_content_delta\",\n\t\t\t\t\t\tdelta: deltaText,\n\t\t\t\t\t\tcontent_index: contentIndex,\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\t}\n\t\tcase \"response.reasoning_summary_part.added\": {\n\t\t\tconst summaryIndex = numberField(event.summary_index);\n\t\t\treturn summaryIndex !== null\n\t\t\t\t? { type: \"reasoning_summary_part_added\", summary_index: summaryIndex }\n\t\t\t\t: null;\n\t\t}\n\t\tcase \"response.completed\": {\n\t\t\tconst completed = responseCompletedEvent(event);\n\t\t\tif (!completed) {\n\t\t\t\tthrow ApiError.stream(\"failed to parse ResponseCompleted\");\n\t\t\t}\n\t\t\treturn { type: \"completed\", ...completed };\n\t\t}\n\t\tcase \"codex.rate_limits\": {\n\t\t\tconst rateLimits = parseRateLimitEventPayload(event);\n\t\t\treturn rateLimits ? { type: \"rate_limits\", rate_limits: rateLimits } : null;\n\t\t}\n\t\tcase \"response.failed\":\n\t\t\tthrow apiErrorFromResponsesEvent(event);\n\t\tcase \"response.incomplete\": {\n\t\t\tconst reason = isRecord(event.response)\n\t\t\t\t? isRecord(event.response.incomplete_details) &&\n\t\t\t\t\ttypeof event.response.incomplete_details.reason === \"string\"\n\t\t\t\t\t? event.response.incomplete_details.reason\n\t\t\t\t\t: \"unknown\"\n\t\t\t\t: \"unknown\";\n\t\t\tthrow ApiError.stream(`Incomplete response returned, reason: ${reason}`);\n\t\t}\n\t\tcase \"error\":\n\t\t\tthrow ApiError.stream(responseErrorMessage(event));\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction responseItemEvent(\n\ttype: \"output_item_added\" | \"output_item_done\",\n\tevent: Record<string, unknown>,\n): ResponseEvent | null {\n\tif (!isRecord(event.item)) {\n\t\treturn null;\n\t}\n\tconst [item] = responseOutputItemsFromResponse({\n\t\toutput: [event.item],\n\t});\n\tif (!item) {\n\t\treturn null;\n\t}\n\treturn type === \"output_item_added\"\n\t\t? { type: \"output_item_added\", item }\n\t\t: { type: \"output_item_done\", item };\n}\n\nasync function* sseRecordsFromTextChunks(\n\tchunks: AsyncIterable<string>,\n\toptions: { idle_timeout_ms?: number | null } = {},\n): AsyncGenerator<Record<string, unknown>> {\n\tlet buffer = \"\";\n\tconst iterator = chunks[Symbol.asyncIterator]();\n\n\tfor (;;) {\n\t\tconst next = await nextWithOptionalTimeout(iterator, options.idle_timeout_ms);\n\t\tif (next.done) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer += next.value;\n\t\tbuffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\t\tlet cursor = buffer.indexOf(\"\\n\\n\");\n\t\twhile (cursor !== -1) {\n\t\t\tconst frame = buffer.slice(0, cursor);\n\t\t\tfor (const event of sseEventsFromFrame(frame)) {\n\t\t\t\tyield event;\n\t\t\t}\n\t\t\tbuffer = buffer.slice(cursor + 2);\n\t\t\tcursor = buffer.indexOf(\"\\n\\n\");\n\t\t}\n\t}\n\n\tfor (const event of sseEventsFromFrame(buffer)) {\n\t\tyield event;\n\t}\n}\n\nasync function nextWithOptionalTimeout<T>(\n\titerator: AsyncIterator<T>,\n\tidleTimeoutMs?: number | null,\n): Promise<IteratorResult<T>> {\n\tif (!idleTimeoutMs || idleTimeoutMs <= 0) {\n\t\treturn iterator.next();\n\t}\n\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\titerator.next(),\n\t\t\tnew Promise<IteratorResult<T>>((_, reject) => {\n\t\t\t\ttimeout = setTimeout(\n\t\t\t\t\t() => reject(ApiError.stream(\"idle timeout waiting for SSE\")),\n\t\t\t\t\tidleTimeoutMs,\n\t\t\t\t);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t}\n}\n\nfunction* sseEventsFromFrame(frame: string): Generator<Record<string, unknown>> {\n\tconst data = frame\n\t\t.split(/\\r?\\n/)\n\t\t.filter((line) => line.startsWith(\"data:\"))\n\t\t.map((line) => line.slice(\"data:\".length).trimStart())\n\t\t.join(\"\\n\")\n\t\t.trim();\n\n\tif (!data || data === \"[DONE]\") {\n\t\treturn;\n\t}\n\n\tconst parsed = JSON.parse(data);\n\tif (isRecord(parsed)) {\n\t\tyield parsed;\n\t}\n}\n\nfunction responseCompletedEvent(event: Record<string, unknown>): {\n\tresponse_id: string;\n\ttoken_usage?: TokenUsage | null;\n\tend_turn?: boolean | null;\n} | null {\n\tconst response = isRecord(event.response) ? event.response : null;\n\tconst responseId =\n\t\ttypeof response?.id === \"string\"\n\t\t\t? response.id\n\t\t\t: typeof event.response_id === \"string\"\n\t\t\t\t? event.response_id\n\t\t\t\t: \"\";\n\treturn {\n\t\tresponse_id: responseId,\n\t\ttoken_usage: tokenUsageFromRecord(response?.usage),\n\t\tend_turn:\n\t\t\ttypeof response?.end_turn === \"boolean\"\n\t\t\t\t? response.end_turn\n\t\t\t\t: typeof event.end_turn === \"boolean\"\n\t\t\t\t\t? event.end_turn\n\t\t\t\t\t: null,\n\t};\n}\n\nfunction tokenUsageFromRecord(value: unknown): TokenUsage | null {\n\tif (!isRecord(value)) {\n\t\treturn null;\n\t}\n\tconst inputTokens = numberField(value.input_tokens);\n\tconst outputTokens = numberField(value.output_tokens);\n\tconst totalTokens = numberField(value.total_tokens);\n\tif (inputTokens === null || outputTokens === null || totalTokens === null) {\n\t\treturn null;\n\t}\n\tconst inputDetails = isRecord(value.input_tokens_details)\n\t\t? value.input_tokens_details\n\t\t: null;\n\tconst outputDetails = isRecord(value.output_tokens_details)\n\t\t? value.output_tokens_details\n\t\t: null;\n\treturn {\n\t\tinput_tokens: inputTokens,\n\t\tcached_input_tokens: numberField(inputDetails?.cached_tokens) ?? 0,\n\t\toutput_tokens: outputTokens,\n\t\treasoning_output_tokens: numberField(outputDetails?.reasoning_tokens) ?? 0,\n\t\ttotal_tokens: totalTokens,\n\t};\n}\n\nfunction responseModelFromEvent(event: Record<string, unknown>): string | null {\n\tconst response = isRecord(event.response) ? event.response : null;\n\treturn typeof response?.model === \"string\" ? response.model : null;\n}\n\nfunction modelVerificationsFromEvent(event: Record<string, unknown>): unknown[] | null {\n\tconst response = isRecord(event.response) ? event.response : null;\n\tconst value =\n\t\tArray.isArray(event.model_verifications)\n\t\t\t? event.model_verifications\n\t\t\t: Array.isArray(response?.model_verifications)\n\t\t\t\t? response.model_verifications\n\t\t\t\t: null;\n\treturn value ? [...value] : null;\n}\n\nfunction responseErrorMessage(event: Record<string, unknown>): string {\n\tif (typeof event.message === \"string\") {\n\t\treturn event.message;\n\t}\n\tif (isRecord(event.error) && typeof event.error.message === \"string\") {\n\t\treturn event.error.message;\n\t}\n\treturn \"OpenAI Responses stream failed.\";\n}\n\nfunction numberField(value: unknown): number | null {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ProviderRuntimeConfig } from \"../../../core/src\";\nimport type {\n\tResponseEvent,\n\tResponseStream,\n\tResponsesWsRequest,\n\tTurnState,\n} from \"../common\";\nimport { ApiError } from \"../error\";\nimport {\n\tproviderWebsocketHeaders,\n\twebsocketUrlForPath,\n} from \"../provider\";\nimport { serializeResponsesWsRequest } from \"../requests/responses\";\nimport { responseEventsFromSseTextChunks } from \"../sse/responses\";\n\nconst X_CODEX_TURN_STATE_HEADER = \"x-codex-turn-state\";\nconst X_MODELS_ETAG_HEADER = \"x-models-etag\";\nconst X_REASONING_INCLUDED_HEADER = \"x-reasoning-included\";\nconst OPENAI_MODEL_HEADER = \"openai-model\";\nconst WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE =\n\t\"websocket_connection_limit_reached\";\nconst WEBSOCKET_CONNECTION_LIMIT_REACHED_MESSAGE =\n\t\"Responses websocket connection limit reached (60 minutes). Create a new websocket connection to continue.\";\n\ntype FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\ntype WorkerWebSocket = WebSocket & {\n\taccept?: (options?: unknown) => void;\n\tbinaryType?: BinaryType;\n};\ntype WebSocketUpgradeResponse = Response & {\n\twebSocket?: WorkerWebSocket | null;\n};\n\nexport type ResponsesWebsocketClientInput = {\n\tapi_key: string;\n\truntime: ProviderRuntimeConfig;\n\toriginator: string;\n\tuser_agent: string;\n\tchatgpt_account_id?: string | null;\n\tfedramp?: boolean;\n\tfetch?: FetchLike;\n};\n\nexport class WsStream {\n\tprivate readonly queued: Array<MessageEvent | CloseEvent | ErrorEvent> = [];\n\tprivate readonly waiters: Array<{\n\t\tresolve: (event: MessageEvent | CloseEvent | ErrorEvent) => void;\n\t\treject: (error: Error) => void;\n\t}> = [];\n\tprivate closed = false;\n\n\tconstructor(private readonly socket: WorkerWebSocket) {\n\t\tthis.socket.binaryType = \"arraybuffer\";\n\t\tthis.socket.addEventListener(\"message\", (event) => this.push(event));\n\t\tthis.socket.addEventListener(\"close\", (event) => {\n\t\t\tthis.closed = true;\n\t\t\tthis.push(event);\n\t\t});\n\t\tthis.socket.addEventListener(\"error\", (event) => {\n\t\t\tthis.closed = true;\n\t\t\tthis.push(event as ErrorEvent);\n\t\t});\n\t\tthis.socket.accept?.();\n\t}\n\n\tis_closed(): boolean {\n\t\tconst closedState =\n\t\t\ttypeof WebSocket !== \"undefined\" ? WebSocket.CLOSED : this.socket.CLOSED;\n\t\treturn this.closed || this.socket.readyState === (closedState ?? 3);\n\t}\n\n\tsend(message: string): void {\n\t\tif (this.is_closed()) {\n\t\t\tthrow ApiError.stream(\"websocket connection is closed\");\n\t\t}\n\t\tthis.socket.send(message);\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\ttry {\n\t\t\tthis.socket.close();\n\t\t} catch {\n\t\t\t// Closing an already-closed Worker WebSocket may throw in some test shims.\n\t\t}\n\t}\n\n\tasync next(timeoutMs?: number | null): Promise<MessageEvent | CloseEvent | ErrorEvent> {\n\t\tconst queued = this.queued.shift();\n\t\tif (queued) {\n\t\t\treturn queued;\n\t\t}\n\t\tif (this.closed) {\n\t\t\treturn closeLikeEvent();\n\t\t}\n\n\t\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tnew Promise<MessageEvent | CloseEvent | ErrorEvent>((resolve, reject) => {\n\t\t\t\t\tthis.waiters.push({ resolve, reject });\n\t\t\t\t}),\n\t\t\t\tnew Promise<MessageEvent | CloseEvent | ErrorEvent>((_, reject) => {\n\t\t\t\t\tif (timeoutMs && timeoutMs > 0) {\n\t\t\t\t\t\ttimeout = setTimeout(\n\t\t\t\t\t\t\t() => reject(ApiError.stream(\"idle timeout waiting for websocket\")),\n\t\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]);\n\t\t} finally {\n\t\t\tif (timeout) {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate push(event: MessageEvent | CloseEvent | ErrorEvent): void {\n\t\tconst waiter = this.waiters.shift();\n\t\tif (waiter) {\n\t\t\twaiter.resolve(event);\n\t\t\treturn;\n\t\t}\n\t\tthis.queued.push(event);\n\t}\n}\n\nexport class ResponsesWebsocketConnection {\n\tprivate lock: Promise<void> = Promise.resolve();\n\tprivate streamClosed = false;\n\n\tconstructor(\n\t\tprivate readonly input: {\n\t\t\tstream: WsStream;\n\t\t\tidle_timeout_ms?: number | null;\n\t\t\tserver_reasoning_included?: boolean;\n\t\t\tmodels_etag?: string | null;\n\t\t\tserver_model?: string | null;\n\t\t},\n\t) {}\n\n\tasync is_closed(): Promise<boolean> {\n\t\treturn this.streamClosed || this.input.stream.is_closed();\n\t}\n\n\tasync send_response_processed(response_id: string): Promise<void> {\n\t\tawait this.withExclusiveStream(async () => {\n\t\t\tsendWebsocketRequest(\n\t\t\t\tthis.input.stream,\n\t\t\t\t{ type: \"response.processed\", response_id },\n\t\t\t\tthis.input.idle_timeout_ms,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync stream_request(\n\t\trequest: ResponsesWsRequest,\n\t\tconnection_reused: boolean,\n\t): Promise<ResponseStream> {\n\t\tconst connection = this;\n\t\tconst stream = new WebsocketResponseStream(async function* () {\n\t\t\tyield* connection.initialEvents();\n\t\t\t\tyield* await connection.withExclusiveStream(async function* () {\n\t\t\t\tsendWebsocketRequest(\n\t\t\t\t\tconnection.input.stream,\n\t\t\t\t\trequest,\n\t\t\t\t\tconnection.input.idle_timeout_ms,\n\t\t\t\t\tconnection_reused,\n\t\t\t\t);\n\t\t\t\tyield* connection.runWebsocketResponseStream();\n\t\t\t});\n\t\t});\n\t\treturn stream;\n\t}\n\n\tclose(): void {\n\t\tthis.streamClosed = true;\n\t\tthis.input.stream.close();\n\t}\n\n\tprivate async *initialEvents(): AsyncGenerator<ResponseEvent> {\n\t\tif (this.input.server_model) {\n\t\t\tyield { type: \"server_model\", model: this.input.server_model };\n\t\t}\n\t\tif (this.input.models_etag) {\n\t\t\tyield { type: \"models_etag\", etag: this.input.models_etag };\n\t\t}\n\t\tif (this.input.server_reasoning_included) {\n\t\t\tyield { type: \"server_reasoning_included\", reasoning_included: true };\n\t\t}\n\t}\n\n\tprivate async *runWebsocketResponseStream(): AsyncGenerator<ResponseEvent> {\n\t\tfor (;;) {\n\t\t\tconst event = await this.input.stream.next(this.input.idle_timeout_ms);\n\t\t\tif (isCloseEvent(event)) {\n\t\t\t\tthis.streamClosed = true;\n\t\t\t\tthrow ApiError.stream(\n\t\t\t\t\t\"websocket closed by server before response.completed\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (isErrorEvent(event)) {\n\t\t\t\tthis.streamClosed = true;\n\t\t\t\tthrow ApiError.stream(\"websocket error before response.completed\");\n\t\t\t}\n\t\t\tconst data = (event as MessageEvent).data;\n\t\t\tif (typeof data !== \"string\") {\n\t\t\t\tthrow ApiError.stream(\"unexpected binary websocket event\");\n\t\t\t}\n\t\t\tconst wrappedError = mapWrappedWebsocketErrorEvent(data);\n\t\t\tif (wrappedError) {\n\t\t\t\tthrow wrappedError;\n\t\t\t}\n\t\t\tlet completed = false;\n\t\t\tfor await (const responseEvent of responseEventsFromWebsocketText(data)) {\n\t\t\t\tif (responseEvent.type === \"completed\") {\n\t\t\t\t\tcompleted = true;\n\t\t\t\t}\n\t\t\t\tyield responseEvent;\n\t\t\t}\n\t\t\tif (completed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async withExclusiveStream<T>(\n\t\twork: () => T | Promise<T>,\n\t): Promise<Awaited<T>>;\n\tprivate async withExclusiveStream<T>(\n\t\twork: () => AsyncIterable<T>,\n\t): Promise<AsyncIterable<T>>;\n\tprivate async withExclusiveStream<T>(\n\t\twork: () => T | Promise<T> | AsyncIterable<T>,\n\t): Promise<Awaited<T> | AsyncIterable<T>> {\n\t\tconst previous = this.lock;\n\t\tlet release!: () => void;\n\t\tthis.lock = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tawait previous;\n\n\t\tconst result = work();\n\t\tif (isAsyncIterable(result)) {\n\t\t\tconst releaseWhenDone = release;\n\t\t\treturn (async function* () {\n\t\t\t\ttry {\n\t\t\t\t\tyield* result;\n\t\t\t\t} finally {\n\t\t\t\t\treleaseWhenDone();\n\t\t\t\t}\n\t\t\t})();\n\t\t}\n\t\ttry {\n\t\t\treturn await result;\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t}\n}\n\nexport class ResponsesWebsocketClient {\n\tprivate readonly fetcher: FetchLike;\n\n\tconstructor(private readonly input: ResponsesWebsocketClientInput) {\n\t\tthis.fetcher = input.fetch ?? ((request, init) => fetch(request, init));\n\t}\n\n\tasync connect(\n\t\textra_headers: HeadersInit = {},\n\t\tdefault_headers: HeadersInit = {},\n\t\tturn_state?: TurnState | null,\n\t): Promise<ResponsesWebsocketConnection> {\n\t\tconst url = websocketUrlForPath(this.input.runtime, \"responses\");\n\t\tconst headers = providerWebsocketHeaders({\n\t\t\tapi_key: this.input.api_key,\n\t\t\truntime: this.input.runtime,\n\t\t\toriginator: this.input.originator,\n\t\t\tuser_agent: this.input.user_agent,\n\t\t\tchatgpt_account_id: this.input.chatgpt_account_id ?? null,\n\t\t\tfedramp: this.input.fedramp ?? false,\n\t\t\textra_headers,\n\t\t\tdefault_headers,\n\t\t});\n\n\t\tconst response = (await this.fetcher(url, {\n\t\t\theaders,\n\t\t})) as WebSocketUpgradeResponse;\n\t\tif (!response.webSocket) {\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow await apiErrorFromWebsocketHandshake(response);\n\t\t\t}\n\t\t\tthrow ApiError.stream(\"server did not accept websocket\");\n\t\t}\n\n\t\tconst turnStateValue = response.headers.get(X_CODEX_TURN_STATE_HEADER);\n\t\tif (turnStateValue) {\n\t\t\tturn_state?.set(turnStateValue);\n\t\t}\n\n\t\treturn new ResponsesWebsocketConnection({\n\t\t\tstream: new WsStream(response.webSocket),\n\t\t\tidle_timeout_ms: this.input.runtime.stream_idle_timeout_ms,\n\t\t\tserver_reasoning_included: response.headers.has(\n\t\t\t\tX_REASONING_INCLUDED_HEADER,\n\t\t\t),\n\t\t\tmodels_etag: response.headers.get(X_MODELS_ETAG_HEADER),\n\t\t\tserver_model: response.headers.get(OPENAI_MODEL_HEADER),\n\t\t});\n\t}\n}\n\nclass WebsocketResponseStream implements ResponseStream {\n\treadonly upstream_request_id = null;\n\n\tconstructor(private readonly iterator: () => AsyncGenerator<ResponseEvent>) {}\n\n\t[Symbol.asyncIterator](): AsyncIterator<ResponseEvent> {\n\t\treturn this.iterator();\n\t}\n}\n\nasync function apiErrorFromWebsocketHandshake(response: Response): Promise<ApiError> {\n\tconst body = await response.text().catch(() => \"\");\n\treturn ApiError.api(\n\t\tresponse.status,\n\t\tbody || `OpenAI Responses websocket failed with HTTP ${response.status}.`,\n\t);\n}\n\nfunction sendWebsocketRequest(\n\tstream: WsStream,\n\trequest: ResponsesWsRequest,\n\t_idleTimeoutMs?: number | null,\n\t_connectionReused = false,\n): void {\n\tstream.send(JSON.stringify(serializeResponsesWsRequest(request)));\n}\n\nasync function* responseEventsFromWebsocketText(\n\ttext: string,\n): AsyncGenerator<ResponseEvent> {\n\tyield* responseEventsFromSseTextChunks(singleSseFrame(text), {\n\t\trequire_completed: false,\n\t});\n}\n\nasync function* singleSseFrame(text: string): AsyncGenerator<string> {\n\tyield `data: ${text}\\n\\n`;\n}\n\nfunction mapWrappedWebsocketErrorEvent(payload: string): ApiError | null {\n\tconst event = parseWrappedWebsocketErrorEvent(payload);\n\tif (!event) {\n\t\treturn null;\n\t}\n\tconst code = event.error?.code;\n\tif (code === WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE) {\n\t\treturn ApiError.retryable(\n\t\t\tevent.error?.message || WEBSOCKET_CONNECTION_LIMIT_REACHED_MESSAGE,\n\t\t);\n\t}\n\tif (typeof event.status === \"number\" && event.status >= 400) {\n\t\treturn ApiError.api(\n\t\t\tevent.status,\n\t\t\tevent.error?.message || `OpenAI Responses websocket error ${event.status}.`,\n\t\t);\n\t}\n\treturn null;\n}\n\nfunction parseWrappedWebsocketErrorEvent(payload: string):\n\t| {\n\t\t\ttype?: unknown;\n\t\t\tstatus?: number;\n\t\t\terror?: { code?: string | null; message?: string | null };\n\t }\n\t| null {\n\ttry {\n\t\tconst parsed = JSON.parse(payload);\n\t\tif (!isRecord(parsed) || parsed.type !== \"error\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst error = isRecord(parsed.error) ? parsed.error : {};\n\t\treturn {\n\t\t\ttype: parsed.type,\n\t\t\tstatus:\n\t\t\t\ttypeof parsed.status === \"number\"\n\t\t\t\t\t? parsed.status\n\t\t\t\t\t: typeof parsed.status_code === \"number\"\n\t\t\t\t\t\t? parsed.status_code\n\t\t\t\t\t\t: undefined,\n\t\t\terror: {\n\t\t\t\tcode: typeof error.code === \"string\" ? error.code : null,\n\t\t\t\tmessage: typeof error.message === \"string\" ? error.message : null,\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction closeLikeEvent(): CloseEvent {\n\tif (typeof CloseEvent !== \"undefined\") {\n\t\treturn new CloseEvent(\"close\", {\n\t\t\tcode: 1006,\n\t\t\treason: \"websocket closed\",\n\t\t});\n\t}\n\treturn { type: \"close\", code: 1006, reason: \"websocket closed\" } as CloseEvent;\n}\n\nfunction isCloseEvent(\n\tevent: MessageEvent | CloseEvent | ErrorEvent,\n): event is CloseEvent {\n\treturn event.type === \"close\";\n}\n\nfunction isErrorEvent(\n\tevent: MessageEvent | CloseEvent | ErrorEvent,\n): event is ErrorEvent {\n\treturn event.type === \"error\";\n}\n\nfunction isAsyncIterable<T>(value: unknown): value is AsyncIterable<T> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\tSymbol.asyncIterator in value\n\t);\n}\n","import { CODEX_CHATGPT_OAUTH_ORIGINATOR } from \"./auth\";\nimport {\n\tcreateModelProvider,\n\tcreateOpenAiModelProviderInfo,\n\ttype ModelProvider,\n\ttype ProviderRuntimeConfig,\n} from \"./model-provider\";\nimport type { ResponseItem } from \"./protocol\";\nimport { create_tools_json_for_responses_api } from \"./tools/tool_spec\";\nimport type { TurnContext } from \"./session/turn-context\";\nimport type { ThreadId } from \"./ids\";\nimport type {\n\tPrompt,\n\tResponseCreateWsRequest,\n\tResponsesApiRequest,\n\tResponseStream,\n\tTurnState,\n} from \"../../codex-api/src/common\";\nimport {\n\tresponse_create_client_metadata,\n\tresponseCreateWsRequestFromResponsesApiRequest,\n} from \"../../codex-api/src/common\";\nimport {\n\tResponsesClient,\n\ttype ResponsesOptions,\n} from \"../../codex-api/src/endpoint/responses\";\nimport {\n\tResponsesWebsocketClient,\n\ttype ResponsesWebsocketConnection,\n} from \"../../codex-api/src/endpoint/responses_websocket\";\nimport { ApiError, isRetryableApiError } from \"../../codex-api/src/error\";\n\nexport { ResponsesClient } from \"../../codex-api/src/endpoint/responses\";\nexport type {\n\tResponsesClientInput,\n\tResponsesOptions,\n} from \"../../codex-api/src/endpoint/responses\";\nexport {\n\tResponsesWebsocketClient,\n\tResponsesWebsocketConnection,\n} from \"../../codex-api/src/endpoint/responses_websocket\";\nexport type { ResponsesWebsocketClientInput } from \"../../codex-api/src/endpoint/responses_websocket\";\nexport type {\n\tPrompt,\n\tResponseCreateWsRequest,\n\tResponseEvent,\n\tResponseProcessedWsRequest,\n\tResponsesApiRequest,\n\tResponseStream,\n\tResponsesWsRequest,\n} from \"../../codex-api/src/common\";\n\nexport const OPENAI_BETA_HEADER = \"OpenAI-Beta\";\nexport const X_CODEX_INSTALLATION_ID_HEADER = \"x-codex-installation-id\";\nexport const X_CODEX_TURN_STATE_HEADER = \"x-codex-turn-state\";\nexport const X_CODEX_TURN_METADATA_HEADER = \"x-codex-turn-metadata\";\nexport const X_CODEX_PARENT_THREAD_ID_HEADER = \"x-codex-parent-thread-id\";\nexport const X_CODEX_WINDOW_ID_HEADER = \"x-codex-window-id\";\nexport const X_OPENAI_SUBAGENT_HEADER = \"x-openai-subagent\";\nexport const X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER =\n\t\"x-responsesapi-include-timing-metrics\";\nexport const RESPONSES_WEBSOCKETS_V2_BETA_HEADER_VALUE =\n\t\"responses_websockets=2026-02-06\";\n\nexport const CHATGPT_CODEX_RESPONSES_URL =\n\t\"https://chatgpt.com/backend-api/codex/responses\";\nexport const CODEX_USER_AGENT =\n\t`${CODEX_CHATGPT_OAUTH_ORIGINATOR}/0.128.0 (Mac OS 15.7.3; arm64) dumb`;\n\ntype FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n\nexport type CreateModelClientInput = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tchatgptAccountId?: string | null;\n\tfedramp?: boolean;\n\tfetch?: FetchLike;\n\tprovider?: ModelProvider;\n\tsessionId: string;\n\tthreadId: ThreadId | string;\n\tinstallationId: string;\n\tincludeTimingMetrics?: boolean;\n\tbetaFeaturesHeader?: string | null;\n};\n\nexport type ModelClientSessionHandle = {\n\tprewarm_websocket(\n\t\tprompt: Prompt,\n\t\toptions?: {\n\t\t\tsignal?: AbortSignal;\n\t\t\tturn?: TurnContext;\n\t\t\tturn_metadata_header?: string | null;\n\t\t},\n\t): Promise<void>;\n\tsend_response_processed(response_id: string): Promise<void>;\n\tstream(\n\t\tprompt: Prompt,\n\t\toptions?: {\n\t\t\tsignal?: AbortSignal;\n\t\t\tturn?: TurnContext;\n\t\t\tturn_metadata_header?: string | null;\n\t\t},\n\t): Promise<ResponseStream>;\n\trelease(): void;\n};\n\nexport type ModelClient = {\n\tnew_session(turn?: TurnContext): ModelClientSessionHandle;\n\tresponses_websocket_enabled(): boolean;\n\tforce_http_fallback(): boolean;\n};\n\nexport function createModelClient(input: CreateModelClientInput): ModelClient {\n\treturn new CodexModelClient(input);\n}\n\ntype LastResponse = {\n\tresponse_id: string;\n\titems_added: ResponseItem[];\n};\n\ntype WebsocketSession = {\n\tconnection: ResponsesWebsocketConnection | null;\n\tlast_request: ResponsesApiRequest | null;\n\tlast_response: LastResponse | null;\n\tconnection_reused: boolean;\n};\n\nfunction defaultWebsocketSession(): WebsocketSession {\n\treturn {\n\t\tconnection: null,\n\t\tlast_request: null,\n\t\tlast_response: null,\n\t\tconnection_reused: false,\n\t};\n}\n\nclass CodexModelClient implements ModelClient {\n\tprivate readonly provider: ModelProvider;\n\tprivate readonly runtime: ProviderRuntimeConfig;\n\tprivate readonly apiKey: string;\n\tprivate readonly chatgptAccountId: string | null;\n\tprivate readonly fedramp: boolean;\n\tprivate readonly fetcher?: FetchLike;\n\tprivate readonly sessionId: string;\n\tprivate readonly threadId: string;\n\tprivate readonly installationId: string;\n\tprivate readonly includeTimingMetrics: boolean;\n\tprivate readonly betaFeaturesHeader: string | null;\n\tprivate disableWebsockets = false;\n\tprivate windowGeneration = 0;\n\tprivate cachedWebsocketSession: WebsocketSession = defaultWebsocketSession();\n\n\tconstructor(input: CreateModelClientInput) {\n\t\tthis.provider =\n\t\t\tinput.provider ??\n\t\t\tcreateModelProvider({\n\t\t\t\tinfo: createOpenAiModelProviderInfo(\n\t\t\t\t\tinput.baseUrl && !input.baseUrl.endsWith(\"/responses\")\n\t\t\t\t\t\t? input.baseUrl\n\t\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t});\n\t\tthis.runtime = {\n\t\t\t...this.provider.runtime_config(null),\n\t\t\t...(input.baseUrl?.endsWith(\"/responses\")\n\t\t\t\t? {\n\t\t\t\t\t\tresponses_url: input.baseUrl,\n\t\t\t\t\t\tbase_url: input.baseUrl.replace(/\\/responses\\/?$/, \"\"),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t};\n\t\tthis.apiKey = input.apiKey;\n\t\tthis.chatgptAccountId = input.chatgptAccountId?.trim() || null;\n\t\tthis.fedramp = input.fedramp ?? false;\n\t\tthis.fetcher = input.fetch;\n\t\tthis.threadId = String(input.threadId);\n\t\tthis.sessionId = input.sessionId;\n\t\tthis.installationId = input.installationId;\n\t\tthis.includeTimingMetrics = input.includeTimingMetrics ?? false;\n\t\tthis.betaFeaturesHeader = input.betaFeaturesHeader ?? null;\n\t}\n\n\tnew_session(turn?: TurnContext): ModelClientSession {\n\t\treturn new ModelClientSession(this, turn, this.take_cached_websocket_session());\n\t}\n\n\tresponses_websocket_enabled(): boolean {\n\t\treturn (\n\t\t\tthis.runtime.supports_websockets &&\n\t\t\t!this.disableWebsockets &&\n\t\t\t!!this.apiKey.trim()\n\t\t);\n\t}\n\n\tforce_http_fallback(): boolean {\n\t\tconst activated = this.responses_websocket_enabled();\n\t\tthis.disableWebsockets = true;\n\t\tthis.store_cached_websocket_session(defaultWebsocketSession());\n\t\treturn activated;\n\t}\n\n\tset_window_generation(windowGeneration: number): void {\n\t\tthis.windowGeneration = windowGeneration;\n\t\tthis.store_cached_websocket_session(defaultWebsocketSession());\n\t}\n\n\tadvance_window_generation(): void {\n\t\tthis.windowGeneration += 1;\n\t\tthis.store_cached_websocket_session(defaultWebsocketSession());\n\t}\n\n\tcurrent_window_id(): string {\n\t\treturn `${this.threadId}:${this.windowGeneration}`;\n\t}\n\n\tstream_max_retries(): number {\n\t\treturn this.runtime.stream_max_retries;\n\t}\n\n\twebsocket_connect_timeout_ms(): number {\n\t\treturn this.runtime.websocket_connect_timeout_ms;\n\t}\n\n\ttake_cached_websocket_session(): WebsocketSession {\n\t\tconst session = this.cachedWebsocketSession;\n\t\tthis.cachedWebsocketSession = defaultWebsocketSession();\n\t\treturn session;\n\t}\n\n\tstore_cached_websocket_session(websocketSession: WebsocketSession): void {\n\t\tthis.cachedWebsocketSession = websocketSession;\n\t}\n\n\t\tbuild_responses_request(prompt: Prompt, turn: TurnContext): ResponsesApiRequest {\n\t\t\tconst reasoning = turn.effort ? { effort: turn.effort } : null;\n\t\t\tconst request: ResponsesApiRequest = {\n\t\t\t\tmodel: turn.model,\n\t\t\t\tinstructions: prompt.base_instructions.text,\n\t\t\t\tinput: prompt.input,\n\t\t\ttools: create_tools_json_for_responses_api(prompt.tools),\n\t\t\ttool_choice: \"auto\",\n\t\t\tparallel_tool_calls: prompt.parallel_tool_calls,\n\t\t\treasoning,\n\t\t\t\tstore: false,\n\t\t\t\tstream: true,\n\t\t\t\tinclude: reasoning ? [\"reasoning.encrypted_content\"] : [],\n\t\t\t\tprompt_cache_key: this.threadId,\n\t\t\t\tclient_metadata: {\n\t\t\t\t\t[X_CODEX_INSTALLATION_ID_HEADER]: this.installationId,\n\t\t\t\t},\n\t\t\t};\n\t\t\tif (turn.service_tier) {\n\t\t\t\trequest.service_tier = turn.service_tier;\n\t\t\t}\n\t\t\treturn request;\n\t\t}\n\n\tbuild_responses_options(\n\t\tturn: TurnContext,\n\t\tturnState: TurnState,\n\t\tturnMetadataHeader?: string | null,\n\t): ResponsesOptions {\n\t\treturn {\n\t\t\tsession_id: this.sessionId,\n\t\t\tthread_id: this.threadId,\n\t\t\tsession_source: turn.session_source,\n\t\t\textra_headers: this.build_responses_headers(turn, turnState, turnMetadataHeader),\n\t\t\tturn_state: turnState,\n\t\t};\n\t}\n\n\tbuild_websocket_headers(\n\t\tturn: TurnContext,\n\t\tturnState: TurnState,\n\t\tturnMetadataHeader?: string | null,\n\t): Headers {\n\t\tconst headers = this.build_responses_headers(\n\t\t\tturn,\n\t\t\tturnState,\n\t\t\tturnMetadataHeader,\n\t\t);\n\t\theaders.set(\"x-client-request-id\", this.threadId);\n\t\theaders.set(\"session_id\", this.sessionId);\n\t\theaders.set(OPENAI_BETA_HEADER, RESPONSES_WEBSOCKETS_V2_BETA_HEADER_VALUE);\n\t\tif (this.includeTimingMetrics) {\n\t\t\theaders.set(X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER, \"true\");\n\t\t}\n\t\treturn headers;\n\t}\n\n\tbuild_ws_client_metadata(\n\t\tturn: TurnContext,\n\t\tturnMetadataHeader?: string | null,\n\t): Record<string, string> {\n\t\tconst metadata: Record<string, string> = {\n\t\t\t[X_CODEX_INSTALLATION_ID_HEADER]: this.installationId,\n\t\t\t[X_CODEX_WINDOW_ID_HEADER]: this.current_window_id(),\n\t\t};\n\t\tconst subagent = subagent_header_value(turn.session_source);\n\t\tif (subagent) {\n\t\t\tmetadata[X_OPENAI_SUBAGENT_HEADER] = subagent;\n\t\t}\n\t\tconst parentThreadId = parent_thread_id_header_value(turn.session_source);\n\t\tif (parentThreadId) {\n\t\t\tmetadata[X_CODEX_PARENT_THREAD_ID_HEADER] = parentThreadId;\n\t\t}\n\t\tif (turnMetadataHeader) {\n\t\t\tmetadata[X_CODEX_TURN_METADATA_HEADER] = turnMetadataHeader;\n\t\t}\n\t\treturn metadata;\n\t}\n\n\tnew_responses_client(): ResponsesClient {\n\t\treturn new ResponsesClient({\n\t\t\tapi_key: this.apiKey,\n\t\t\truntime: this.runtime,\n\t\t\toriginator: CODEX_CHATGPT_OAUTH_ORIGINATOR,\n\t\t\tuser_agent: CODEX_USER_AGENT,\n\t\t\tchatgpt_account_id: this.chatgptAccountId,\n\t\t\tfedramp: this.fedramp,\n\t\t\tfetch: this.fetcher,\n\t\t});\n\t}\n\n\tnew_responses_websocket_client(): ResponsesWebsocketClient {\n\t\treturn new ResponsesWebsocketClient({\n\t\t\tapi_key: this.apiKey,\n\t\t\truntime: this.runtime,\n\t\t\toriginator: CODEX_CHATGPT_OAUTH_ORIGINATOR,\n\t\t\tuser_agent: CODEX_USER_AGENT,\n\t\t\tchatgpt_account_id: this.chatgptAccountId,\n\t\t\tfedramp: this.fedramp,\n\t\t\tfetch: this.fetcher,\n\t\t});\n\t}\n\n\tprivate build_responses_headers(\n\t\tturn: TurnContext,\n\t\tturnState: TurnState,\n\t\tturnMetadataHeader?: string | null,\n\t): Headers {\n\t\tconst headers = new Headers();\n\t\tif (this.betaFeaturesHeader) {\n\t\t\theaders.set(\"x-codex-beta-features\", this.betaFeaturesHeader);\n\t\t}\n\t\tconst state = turnState.get();\n\t\tif (state) {\n\t\t\theaders.set(X_CODEX_TURN_STATE_HEADER, state);\n\t\t}\n\t\tif (turnMetadataHeader) {\n\t\t\theaders.set(X_CODEX_TURN_METADATA_HEADER, turnMetadataHeader);\n\t\t}\n\t\tconst subagent = subagent_header_value(turn.session_source);\n\t\tif (subagent) {\n\t\t\theaders.set(X_OPENAI_SUBAGENT_HEADER, subagent);\n\t\t}\n\t\tconst parentThreadId = parent_thread_id_header_value(turn.session_source);\n\t\tif (parentThreadId) {\n\t\t\theaders.set(X_CODEX_PARENT_THREAD_ID_HEADER, parentThreadId);\n\t\t}\n\t\theaders.set(X_CODEX_WINDOW_ID_HEADER, this.current_window_id());\n\t\treturn headers;\n\t}\n}\n\nexport class ModelClientSession {\n\tprivate readonly turnState = new StickyTurnState();\n\tprivate released = false;\n\n\tconstructor(\n\t\tprivate readonly client: CodexModelClient,\n\t\tprivate readonly turn?: TurnContext,\n\t\tprivate websocketSession: WebsocketSession = defaultWebsocketSession(),\n\t) {}\n\n\tasync prewarm_websocket(\n\t\tprompt: Prompt,\n\t\toptions: {\n\t\t\tsignal?: AbortSignal;\n\t\t\tturn?: TurnContext;\n\t\t\tturn_metadata_header?: string | null;\n\t\t} = {},\n\t): Promise<void> {\n\t\tif (!this.client.responses_websocket_enabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.websocketSession.last_request) {\n\t\t\treturn;\n\t\t}\n\t\tconst turn = options.turn ?? this.turn;\n\t\tif (!turn) {\n\t\t\tthrow new Error(\"ModelClientSession requires a TurnContext.\");\n\t\t}\n\t\ttry {\n\t\t\tconst stream = await this.stream_responses_websocket(prompt, turn, {\n\t\t\t\t...options,\n\t\t\t\twarmup: true,\n\t\t\t});\n\t\t\tif (stream === \"fallback_to_http\") {\n\t\t\t\tthis.try_switch_fallback_transport();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (options.signal?.aborted || event.type === \"completed\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isRetryableApiError(apiErrorFromUnknown(error))) {\n\t\t\t\tthis.try_switch_fallback_transport();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync send_response_processed(response_id: string): Promise<void> {\n\t\tif (!this.websocketSession.connection) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.websocketSession.connection.send_response_processed(response_id);\n\t\t} catch {\n\t\t\t// Codex treats response.processed as best effort.\n\t\t}\n\t}\n\n\tasync stream(\n\t\tprompt: Prompt,\n\t\toptions: {\n\t\t\tsignal?: AbortSignal;\n\t\t\tturn?: TurnContext;\n\t\t\tturn_metadata_header?: string | null;\n\t\t} = {},\n\t): Promise<ResponseStream> {\n\t\t\tconst turn = options.turn ?? this.turn;\n\t\t\tif (!turn) {\n\t\t\t\tthrow new Error(\"ModelClientSession requires a TurnContext.\");\n\t\t}\n\t\tif (this.client.responses_websocket_enabled()) {\n\t\t\tconst stream = await this.stream_responses_websocket(prompt, turn, options);\n\t\t\tif (stream !== \"fallback_to_http\") {\n\t\t\t\treturn stream;\n\t\t\t}\n\t\t\tthis.try_switch_fallback_transport();\n\t\t}\n\t\treturn this.stream_responses_api(prompt, turn, options);\n\t}\n\n\trelease(): void {\n\t\tif (this.released) {\n\t\t\treturn;\n\t\t\t}\n\t\t\tthis.released = true;\n\t\t\tthis.client.store_cached_websocket_session(this.websocketSession);\n\t\t}\n\n\tprivate async stream_responses_api(\n\t\tprompt: Prompt,\n\t\tturn: TurnContext,\n\t\toptions: { signal?: AbortSignal; turn_metadata_header?: string | null },\n\t): Promise<ResponseStream> {\n\t\tconst client = this.codex_client();\n\t\tconst request = client.build_responses_request(prompt, turn);\n\t\tconst responsesOptions = client.build_responses_options(\n\t\t\tturn,\n\t\t\tthis.turnState,\n\t\t\toptions.turn_metadata_header,\n\t\t);\n\t\treturn client\n\t\t\t.new_responses_client()\n\t\t\t.stream_request(request, { ...responsesOptions, signal: options.signal });\n\t}\n\n\tprivate async stream_responses_websocket(\n\t\tprompt: Prompt,\n\t\tturn: TurnContext,\n\t\toptions: {\n\t\t\tsignal?: AbortSignal;\n\t\t\tturn_metadata_header?: string | null;\n\t\t\twarmup?: boolean;\n\t\t},\n\t): Promise<ResponseStream | \"fallback_to_http\"> {\n\t\tconst client = this.codex_client();\n\t\tconst request = client.build_responses_request(prompt, turn);\n\t\tconst wsPayload = responseCreateWsRequestFromResponsesApiRequest(request);\n\t\twsPayload.client_metadata = response_create_client_metadata(\n\t\t\tclient.build_ws_client_metadata(turn, options.turn_metadata_header),\n\t\t\tturn.trace_id ? { traceparent: turn.trace_id } : null,\n\t\t);\n\t\tif (options.warmup) {\n\t\t\twsPayload.generate = false;\n\t\t}\n\n\t\tconst maxAttempts = Math.max(\n\t\t\t1,\n\t\t\tclient.stream_max_retries() + 1,\n\t\t);\n\t\tfor (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n\t\t\tif (options.signal?.aborted) {\n\t\t\t\tthrow ApiError.transport(\"OpenAI Responses websocket was aborted.\");\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst connection = await this.websocket_connection(\n\t\t\t\t\tturn,\n\t\t\t\t\toptions.turn_metadata_header,\n\t\t\t\t);\n\t\t\t\tconst wsRequest = this.prepare_websocket_request(wsPayload, request);\n\t\t\t\tthis.websocketSession.last_request = request;\n\t\t\t\tconst stream = await connection.stream_request(\n\t\t\t\t\t{ type: \"response.create\", ...wsRequest },\n\t\t\t\t\tthis.websocketSession.connection_reused,\n\t\t\t\t);\n\t\t\t\treturn trackLastResponse(stream, (lastResponse) => {\n\t\t\t\t\tthis.websocketSession.last_response = lastResponse;\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst apiError = apiErrorFromUnknown(error);\n\t\t\t\tif (apiError.status === 426) {\n\t\t\t\t\treturn \"fallback_to_http\";\n\t\t\t\t}\n\t\t\t\tthis.reset_websocket_session();\n\t\t\t\tif (\n\t\t\t\t\tattempt + 1 < maxAttempts &&\n\t\t\t\t\tisRetryableApiError(apiError) &&\n\t\t\t\t\t!options.signal?.aborted\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn \"fallback_to_http\";\n\t\t\t}\n\t\t}\n\t\treturn \"fallback_to_http\";\n\t}\n\n\tprivate async websocket_connection(\n\t\tturn: TurnContext,\n\t\tturnMetadataHeader?: string | null,\n\t): Promise<ResponsesWebsocketConnection> {\n\t\tconst client = this.codex_client();\n\t\tconst needsNew =\n\t\t\t!this.websocketSession.connection ||\n\t\t\t(await this.websocketSession.connection.is_closed());\n\t\tif (!needsNew) {\n\t\t\tthis.websocketSession.connection_reused = true;\n\t\t\treturn this.websocketSession.connection as ResponsesWebsocketConnection;\n\t\t}\n\n\t\tthis.websocketSession.last_request = null;\n\t\tthis.websocketSession.last_response = null;\n\t\tconst timeoutMs = client.websocket_connect_timeout_ms();\n\t\tconst connection = await withTimeout<ResponsesWebsocketConnection>(\n\t\t\tclient.new_responses_websocket_client().connect(\n\t\t\t\tclient.build_websocket_headers(\n\t\t\t\t\tturn,\n\t\t\t\t\tthis.turnState,\n\t\t\t\t\tturnMetadataHeader,\n\t\t\t\t),\n\t\t\t\tdefaultHeaders(),\n\t\t\t\tthis.turnState,\n\t\t\t),\n\t\t\ttimeoutMs,\n\t\t\t\"timeout connecting to websocket\",\n\t\t);\n\t\tthis.websocketSession.connection = connection;\n\t\tthis.websocketSession.connection_reused = false;\n\t\treturn connection;\n\t}\n\n\tprivate codex_client(): CodexModelClient {\n\t\t\treturn this.client;\n\t\t}\n\n\tprivate prepare_websocket_request(\n\t\tpayload: ResponseCreateWsRequest,\n\t\trequest: ResponsesApiRequest,\n\t): ResponseCreateWsRequest {\n\t\tconst lastResponse = this.websocketSession.last_response;\n\t\tconst incrementalItems = lastResponse\n\t\t\t? this.get_incremental_items(request, lastResponse, true)\n\t\t\t: null;\n\t\tif (!lastResponse || !incrementalItems || !lastResponse.response_id) {\n\t\t\treturn payload;\n\t\t}\n\t\treturn {\n\t\t\t...payload,\n\t\t\tprevious_response_id: lastResponse.response_id,\n\t\t\tinput: incrementalItems,\n\t\t};\n\t}\n\n\tprivate get_incremental_items(\n\t\trequest: ResponsesApiRequest,\n\t\tlastResponse: LastResponse,\n\t\tallowEmptyDelta: boolean,\n\t): ResponseItem[] | null {\n\t\tconst previousRequest = this.websocketSession.last_request;\n\t\tif (!previousRequest) {\n\t\t\treturn null;\n\t\t}\n\t\tconst previousWithoutInput = { ...previousRequest, input: [] };\n\t\tconst requestWithoutInput = { ...request, input: [] };\n\t\tif (JSON.stringify(previousWithoutInput) !== JSON.stringify(requestWithoutInput)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst baseline = [...previousRequest.input, ...lastResponse.items_added];\n\t\tif (\n\t\t\tstartsWithResponseItems(request.input, baseline) &&\n\t\t\t(allowEmptyDelta || baseline.length < request.input.length)\n\t\t) {\n\t\t\treturn request.input.slice(baseline.length);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate reset_websocket_session(): void {\n\t\tthis.websocketSession.connection?.close();\n\t\tthis.websocketSession = defaultWebsocketSession();\n\t}\n\n\tprivate try_switch_fallback_transport(): boolean {\n\t\tconst activated = this.client.force_http_fallback();\n\t\tthis.reset_websocket_session();\n\t\treturn activated;\n\t}\n}\n\nclass StickyTurnState implements TurnState {\n\tprivate value: string | null = null;\n\n\tget(): string | null {\n\t\treturn this.value;\n\t}\n\n\tset(value: string): void {\n\t\tif (!this.value && value) {\n\t\t\tthis.value = value;\n\t\t}\n\t}\n}\n\nfunction trackLastResponse(\n\tstream: ResponseStream,\n\tonLastResponse: (lastResponse: LastResponse) => void,\n): ResponseStream {\n\treturn {\n\t\tupstream_request_id: stream.upstream_request_id,\n\t\tasync *[Symbol.asyncIterator]() {\n\t\t\tconst itemsAdded: ResponseItem[] = [];\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.type === \"output_item_done\") {\n\t\t\t\t\titemsAdded.push(event.item);\n\t\t\t\t}\n\t\t\t\tif (event.type === \"completed\") {\n\t\t\t\t\tonLastResponse({\n\t\t\t\t\t\tresponse_id: event.response_id,\n\t\t\t\t\t\titems_added: [...itemsAdded],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tyield event;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction startsWithResponseItems(\n\titems: ResponseItem[],\n\tprefix: ResponseItem[],\n): boolean {\n\tif (prefix.length > items.length) {\n\t\treturn false;\n\t}\n\treturn prefix.every((item, index) => JSON.stringify(item) === JSON.stringify(items[index]));\n}\n\nasync function withTimeout<T>(\n\tpromise: Promise<T>,\n\ttimeoutMs: number,\n\tmessage: string,\n): Promise<T> {\n\tif (!timeoutMs || timeoutMs <= 0) {\n\t\treturn promise;\n\t}\n\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<T>((_, reject) => {\n\t\t\t\ttimeout = setTimeout(() => reject(ApiError.transport(message)), timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t}\n}\n\nfunction defaultHeaders(): Headers {\n\treturn new Headers();\n}\n\nfunction apiErrorFromUnknown(error: unknown): ApiError {\n\tif (error instanceof ApiError) {\n\t\treturn error;\n\t}\n\tif (error instanceof Error) {\n\t\treturn ApiError.transport(error.message);\n\t}\n\treturn ApiError.transport(String(error));\n}\n\nfunction subagent_header_value(sessionSource: unknown): string | null {\n\tif (!isRecord(sessionSource)) {\n\t\treturn null;\n\t}\n\tif (sessionSource.type === \"SubAgent\" && typeof sessionSource.kind === \"string\") {\n\t\treturn sessionSource.kind;\n\t}\n\tif (typeof sessionSource.type === \"string\" && sessionSource.type.includes(\"Memory\")) {\n\t\treturn \"memory_consolidation\";\n\t}\n\treturn null;\n}\n\nfunction parent_thread_id_header_value(sessionSource: unknown): string | null {\n\tif (!isRecord(sessionSource)) {\n\t\treturn null;\n\t}\n\tconst parentThreadId = sessionSource.parent_thread_id ?? sessionSource.parentThreadId;\n\treturn typeof parentThreadId === \"string\" ? parentThreadId : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export const CORE_TEMPLATES = {\n\t\"compact/prompt.md\": `Your task is to create a concise summary of the conversation so far.\n\nPreserve user intent, important decisions, constraints, current task state, and any unresolved requests.\nDo not add new recommendations or solve the task.`,\n\t\"compact/summary_prefix.md\": \"Conversation summary:\",\n\t\"goals/budget_limit.md\": `The active thread goal has reached its token budget.\n\n<untrusted_objective>\n{{objective}}\n</untrusted_objective>\n\nGoal status is now budgetLimited. Do not start substantive new work on the goal. Wrap up soon with concise progress, remaining work, and the next useful step. Do not call update_goal unless the objective is actually complete.\n\nTime spent: {{time_used_seconds}}s\nTokens used: {{tokens_used}}\nToken budget: {{token_budget}}\nRemaining budget: {{remaining_token_budget}}`,\n\t\"goals/continuation.md\":\n\t\t\"The active thread goal is still in progress. Continue working toward the objective while respecting the remaining budget.\",\n\t\"model_instructions/default_instructions_template.md\": \"\",\n\t\"personalities/default.md\": \"\",\n\t\"search_tool/tool_search.md\":\n\t\t\"Search available deferred tools and return the best matching tool definitions.\",\n} as const;\n\nexport type CoreTemplatePath = keyof typeof CORE_TEMPLATES;\n\nexport function loadCoreTemplate(path: CoreTemplatePath): string {\n\treturn CORE_TEMPLATES[path];\n}\n\nexport function renderCoreTemplate(\n\tpath: CoreTemplatePath,\n\tvariables: Record<string, string | number | null | undefined>,\n): string {\n\tlet template = loadCoreTemplate(path);\n\tfor (const [key, value] of Object.entries(variables)) {\n\t\ttemplate = template.replaceAll(`{{${key}}}`, String(value ?? \"\"));\n\t}\n\treturn template;\n}\n","import { parseTurnItem } from \"./event-mapping\";\nimport type { ResponseItem } from \"./models\";\nimport type { UserMessageTurnItem } from \"./items\";\nimport { loadCoreTemplate } from \"./templates\";\n\nexport const SUMMARIZATION_PROMPT = loadCoreTemplate(\"compact/prompt.md\");\n\nexport const SUMMARY_PREFIX = loadCoreTemplate(\"compact/summary_prefix.md\");\n\nconst COMPACT_USER_MESSAGE_MAX_TOKENS = 20_000;\n\nexport function compactedThreadWarning(): string {\n\treturn \"Heads up: Long threads and multiple compactions can cause the model to be less accurate. Start a new thread when possible to keep threads small and targeted.\";\n}\n\nexport function contentItemsToText(\n\tcontent: readonly ResponseItemMessageContent[],\n): string | null {\n\tconst pieces = content.flatMap((item) => {\n\t\tif (\n\t\t\t(item.type === \"input_text\" || item.type === \"output_text\") &&\n\t\t\titem.text.length > 0\n\t\t) {\n\t\t\treturn [item.text];\n\t\t}\n\t\treturn [];\n\t});\n\n\treturn pieces.length > 0 ? pieces.join(\"\\n\") : null;\n}\n\nexport function collectUserMessages(items: readonly ResponseItem[]): string[] {\n\treturn items.flatMap((item) => {\n\t\tconst turnItem = parseTurnItem(item);\n\t\tif (turnItem?.type !== \"UserMessage\") {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst message = userMessageText(turnItem);\n\t\treturn message && !isSummaryMessage(message) ? [message] : [];\n\t});\n}\n\nexport function isSummaryMessage(message: string): boolean {\n\treturn message.startsWith(`${SUMMARY_PREFIX}\\n`);\n}\n\nexport function buildCompactedHistory(\n\tinitialContext: ResponseItem[],\n\tuserMessages: readonly string[],\n\tsummaryText: string,\n): ResponseItem[] {\n\tconst history = [...initialContext];\n\tconst selectedMessages = selectRecentUserMessages(\n\t\tuserMessages,\n\t\tCOMPACT_USER_MESSAGE_MAX_TOKENS,\n\t);\n\n\tfor (const message of selectedMessages) {\n\t\thistory.push(userMessageResponseItem(message));\n\t}\n\n\thistory.push(\n\t\tuserMessageResponseItem(summaryText.trim() || \"(no summary available)\"),\n\t);\n\n\treturn history;\n}\n\nfunction selectRecentUserMessages(\n\tuserMessages: readonly string[],\n\tmaxTokens: number,\n): string[] {\n\tif (maxTokens <= 0) {\n\t\treturn [];\n\t}\n\n\tconst selected: string[] = [];\n\tlet remaining = maxTokens;\n\n\tfor (let index = userMessages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = userMessages[index] ?? \"\";\n\t\tconst tokens = approxTokenCount(message);\n\t\tif (tokens <= remaining) {\n\t\t\tselected.push(message);\n\t\t\tremaining -= tokens;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (remaining > 0) {\n\t\t\tselected.push(truncateTextToApproxTokens(message, remaining));\n\t\t}\n\t\tbreak;\n\t}\n\n\treturn selected.reverse();\n}\n\nfunction userMessageText(item: UserMessageTurnItem): string | null {\n\tconst pieces = item.content.flatMap((content) =>\n\t\tcontent.type === \"text\" && content.text.length > 0 ? [content.text] : [],\n\t);\n\treturn pieces.length > 0 ? pieces.join(\"\\n\") : null;\n}\n\nfunction userMessageResponseItem(text: string): ResponseItem {\n\treturn {\n\t\ttype: \"message\",\n\t\trole: \"user\",\n\t\tcontent: [{ type: \"input_text\", text }],\n\t};\n}\n\nfunction approxTokenCount(text: string): number {\n\treturn Math.ceil(new TextEncoder().encode(text).byteLength / 4);\n}\n\nfunction truncateTextToApproxTokens(text: string, maxTokens: number): string {\n\tconst maxBytes = Math.max(0, maxTokens * 4);\n\tconst encoder = new TextEncoder();\n\tif (encoder.encode(text).byteLength <= maxBytes) {\n\t\treturn text;\n\t}\n\n\tlet next = \"\";\n\tfor (const char of text) {\n\t\tconst candidate = `${next}${char}`;\n\t\tif (encoder.encode(candidate).byteLength > maxBytes) {\n\t\t\tbreak;\n\t\t}\n\t\tnext = candidate;\n\t}\n\n\treturn `${next}\\n...${Math.max(1, approxTokenCount(text) - maxTokens)} tokens truncated...`;\n}\n\ntype ResponseItemMessageContent = Extract<\n\tResponseItem,\n\t{ type: \"message\" }\n>[\"content\"][number];\n","import type { ResponseItem } from \"../models\";\n\nexport type ContextualUserFragmentParams = {\n\trole: string;\n\tstart_marker: string;\n\tend_marker: string;\n\tbody: () => string;\n};\n\nexport class ContextualUserFragment {\n\treadonly role: string;\n\treadonly start_marker: string;\n\treadonly end_marker: string;\n\tprivate readonly bodyFn: () => string;\n\n\tconstructor(params: ContextualUserFragmentParams) {\n\t\tthis.role = params.role;\n\t\tthis.start_marker = params.start_marker;\n\t\tthis.end_marker = params.end_marker;\n\t\tthis.bodyFn = params.body;\n\t}\n\n\tbody(): string {\n\t\treturn this.bodyFn();\n\t}\n\n\tmatchesText(text: string): boolean {\n\t\treturn contextualFragmentMatchesText(text, {\n\t\t\tstart_marker: this.start_marker,\n\t\t\tend_marker: this.end_marker,\n\t\t});\n\t}\n\n\trender(): string {\n\t\tif (!this.start_marker && !this.end_marker) {\n\t\t\treturn this.body();\n\t\t}\n\n\t\treturn `${this.start_marker}${this.body()}${this.end_marker}`;\n\t}\n\n\ttoResponseItem(): ResponseItem {\n\t\treturn {\n\t\t\ttype: \"message\",\n\t\t\trole: this.role,\n\t\t\tcontent: [{ type: \"input_text\", text: this.render() }],\n\t\t};\n\t}\n}\n\nexport function contextualFragmentMatchesText(\n\ttext: string,\n\tmarkers: { start_marker: string; end_marker: string },\n): boolean {\n\tif (!markers.start_marker || !markers.end_marker) {\n\t\treturn false;\n\t}\n\n\tconst startTrimmed = text.trimStart();\n\tconst startsWithMarker =\n\t\tstartTrimmed\n\t\t\t.slice(0, markers.start_marker.length)\n\t\t\t.toLowerCase() === markers.start_marker.toLowerCase();\n\tconst endTrimmed = text.trimEnd();\n\tconst endsWithMarker =\n\t\tendTrimmed\n\t\t\t.slice(Math.max(0, endTrimmed.length - markers.end_marker.length))\n\t\t\t.toLowerCase() === markers.end_marker.toLowerCase();\n\treturn startsWithMarker && endsWithMarker;\n}\n","import type { TurnContext } from \"../session/turn-context\";\nimport type { TurnContextItem } from \"../protocol\";\nimport { ContextualUserFragment } from \"./fragment\";\n\nexport const ENVIRONMENT_CONTEXT_OPEN_TAG = \"<environment_context>\";\nexport const ENVIRONMENT_CONTEXT_CLOSE_TAG = \"</environment_context>\";\n\nexport type EnvironmentContextEnvironment = {\n\tid?: string;\n\tcwd: string;\n\tshell: string;\n};\n\nexport type NetworkContext = {\n\tallowed_domains: string[];\n\tdenied_domains: string[];\n};\n\nexport class EnvironmentContext extends ContextualUserFragment {\n\tconstructor(params: {\n\t\tenvironments: EnvironmentContextEnvironment[];\n\t\tcurrent_date?: string | null;\n\t\ttimezone?: string | null;\n\t\tnetwork?: NetworkContext | null;\n\t}) {\n\t\tsuper({\n\t\t\trole: \"user\",\n\t\t\tstart_marker: ENVIRONMENT_CONTEXT_OPEN_TAG,\n\t\t\tend_marker: ENVIRONMENT_CONTEXT_CLOSE_TAG,\n\t\t\tbody: () => renderEnvironmentContextBody(params),\n\t\t});\n\t}\n\n\tstatic fromTurnContext(turnContext: TurnContext): EnvironmentContext {\n\t\tconst environments =\n\t\t\tturnContext.environments.length > 0\n\t\t\t\t? turnContext.environments.map((environment) => ({\n\t\t\t\t\t\tid: environment.environment_id,\n\t\t\t\t\t\tcwd: environment.cwd,\n\t\t\t\t\t\tshell:\n\t\t\t\t\t\t\t\"shell\" in environment && typeof environment.shell === \"string\"\n\t\t\t\t\t\t\t\t? environment.shell\n\t\t\t\t\t\t\t\t: \"zsh\",\n\t\t\t\t\t}))\n\t\t\t\t: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcwd: turnContext.cwd,\n\t\t\t\t\t\t\tshell: \"zsh\",\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\n\t\treturn new EnvironmentContext({\n\t\t\tenvironments,\n\t\t\tcurrent_date: turnContext.current_date,\n\t\t\ttimezone: turnContext.timezone,\n\t\t});\n\t}\n\n\tstatic fromTurnContextItem(item: TurnContextItem): EnvironmentContext {\n\t\treturn new EnvironmentContext({\n\t\t\tenvironments: [\n\t\t\t\t{\n\t\t\t\t\tcwd: item.cwd,\n\t\t\t\t\tshell: \"zsh\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tcurrent_date: item.current_date,\n\t\t\ttimezone: item.timezone,\n\t\t});\n\t}\n}\n\nfunction renderEnvironmentContextBody(params: {\n\tenvironments: EnvironmentContextEnvironment[];\n\tcurrent_date?: string | null;\n\ttimezone?: string | null;\n\tnetwork?: NetworkContext | null;\n}): string {\n\tconst lines: string[] = [];\n\tconst environments = params.environments;\n\n\tif (environments.length === 1) {\n\t\tconst environment = environments[0];\n\t\tif (environment) {\n\t\t\tlines.push(` <cwd>${environment.cwd}</cwd>`);\n\t\t\tlines.push(` <shell>${environment.shell}</shell>`);\n\t\t}\n\t} else if (environments.length > 1) {\n\t\tlines.push(\" <environments>\");\n\t\tfor (const environment of environments) {\n\t\t\tlines.push(` <environment id=\"${environment.id ?? \"\"}\">`);\n\t\t\tlines.push(` <cwd>${environment.cwd}</cwd>`);\n\t\t\tlines.push(` <shell>${environment.shell}</shell>`);\n\t\t\tlines.push(\" </environment>\");\n\t\t}\n\t\tlines.push(\" </environments>\");\n\t}\n\n\tif (params.current_date) {\n\t\tlines.push(` <current_date>${params.current_date}</current_date>`);\n\t}\n\tif (params.timezone) {\n\t\tlines.push(` <timezone>${params.timezone}</timezone>`);\n\t}\n\tif (params.network) {\n\t\tlines.push(' <network enabled=\"true\">');\n\t\tfor (const allowed of params.network.allowed_domains) {\n\t\t\tlines.push(` <allowed>${allowed}</allowed>`);\n\t\t}\n\t\tfor (const denied of params.network.denied_domains) {\n\t\t\tlines.push(` <denied>${denied}</denied>`);\n\t\t}\n\t\tlines.push(\" </network>\");\n\t}\n\n\treturn `\\n${lines.join(\"\\n\")}\\n`;\n}\n","import type { CollaborationMode } from \"../config-types\";\nimport type { ResponseItem } from \"../models\";\nimport { ContextualUserFragment } from \"./fragment\";\n\nexport class CollaborationModeInstructions {\n\tprivate constructor(private readonly instructions: string) {}\n\n\tstatic fromCollaborationMode(\n\t\tcollaborationMode: CollaborationMode | null,\n\t): CollaborationModeInstructions | null {\n\t\tconst instructions =\n\t\t\tcollaborationMode?.settings.developer_instructions?.trim() ?? \"\";\n\t\treturn instructions.length > 0\n\t\t\t? new CollaborationModeInstructions(instructions)\n\t\t\t: null;\n\t}\n\n\ttoResponseItem(): ResponseItem {\n\t\treturn this.toFragment().toResponseItem();\n\t}\n\n\ttoText(): string {\n\t\treturn this.toFragment().render();\n\t}\n\n\tprivate toFragment(): ContextualUserFragment {\n\t\treturn new ContextualUserFragment({\n\t\t\trole: \"developer\",\n\t\t\tstart_marker: \"<collaboration_mode>\",\n\t\t\tend_marker: \"</collaboration_mode>\",\n\t\t\tbody: () => this.instructions,\n\t\t});\n\t}\n}\n","import type { TurnContext } from \"../session/turn-context\";\nimport { ContextualUserFragment } from \"./fragment\";\n\nconst APPROVAL_POLICY_NEVER =\n\t\"Approval policy is currently never. Do not provide the `sandbox_permissions` for any reason, commands will be rejected.\";\nconst APPROVAL_POLICY_UNLESS_TRUSTED =\n\t'Approvals are your mechanism to get user consent to run shell commands without the sandbox. `approval_policy` is `unless-trusted`: The harness will escalate most commands for user approval, apart from a limited allowlist of safe \"read\" commands.';\nconst APPROVAL_POLICY_ON_FAILURE =\n\t\"Approvals are your mechanism to get user consent to run shell commands without the sandbox. `approval_policy` is `on-failure`: The harness will allow all commands to run in the sandbox (if enabled), and failures will be escalated to the user for approval to run again without the sandbox.\";\nconst APPROVAL_POLICY_ON_REQUEST = `# Escalation Requests\n\nCommands are run outside the sandbox if they are approved by the user, or match an existing rule that allows it to run unrestricted.\n\n## How to request escalation\n\nIMPORTANT: To request approval to execute a command that will require escalated privileges:\n\n- Provide the \\`sandbox_permissions\\` parameter with the value \\`\"require_escalated\"\\`\n- Include a short question asking the user if they want to allow the action in \\`justification\\` parameter.\n- Optionally suggest a \\`prefix_rule\\` - this will be shown to the user with an option to persist the rule approval for future sessions.`;\nconst REQUEST_PERMISSIONS_TOOL_PROMPT =\n\t\"# request_permissions Tool\\n\\nThe built-in `request_permissions` tool is available in this session. Invoke it when you need to request additional `network` or `file_system` permissions before later shell-like commands need them. Request only the specific permissions required for the task.\";\nconst AUTO_REVIEW_APPROVAL_SUFFIX =\n\t\"`approvals_reviewer` is `auto_review`: Sandbox escalations with require_escalated will be reviewed for compliance with the policy. If a rejection happens, you should proceed only with a materially safer alternative, or inform the user of the risk and send a final message to ask for approval.\";\n\nexport class PermissionsInstructions extends ContextualUserFragment {\n\tconstructor(text: string) {\n\t\tsuper({\n\t\t\trole: \"developer\",\n\t\t\tstart_marker: \"<permissions instructions>\",\n\t\t\tend_marker: \"</permissions instructions>\",\n\t\t\tbody: () => text,\n\t\t});\n\t}\n\n\tstatic fromTurnContext(\n\t\tturnContext: TurnContext,\n\t\toptions: { request_permissions_tool_enabled?: boolean } = {},\n\t): PermissionsInstructions {\n\t\tconst sandboxText = sandboxInstructionText(\n\t\t\tsandboxModeFromTurnContext(turnContext),\n\t\t\tnetworkAccessFromTurnContext(turnContext),\n\t\t);\n\t\tconst approvalText = approvalInstructionText(\n\t\t\tturnContext.approval_policy,\n\t\t\tturnContext.approvals_reviewer,\n\t\t\toptions.request_permissions_tool_enabled ?? true,\n\t\t);\n\t\tconst text = [sandboxText, approvalText]\n\t\t\t.filter((section) => section.length > 0)\n\t\t\t.join(\"\\n\\n\");\n\t\treturn new PermissionsInstructions(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n\t}\n}\n\nfunction sandboxModeFromTurnContext(\n\tturnContext: TurnContext,\n): \"danger-full-access\" | \"workspace-write\" | \"read-only\" {\n\tconst permissionProfile = turnContext.effectivePermissionProfile();\n\tconst sandboxMode = stringField(turnContext.effectiveSandboxPolicy(), [\n\t\t\"mode\",\n\t\t\"type\",\n\t]);\n\tconst permissionProfileMode = stringField(permissionProfile, [\n\t\t\"profile\",\n\t\t\"mode\",\n\t\t\"type\",\n\t]);\n\tconst mode = sandboxMode ?? permissionProfileMode;\n\n\tif (\n\t\tmode === \"danger-full-access\" ||\n\t\tmode === \"danger_full_access\" ||\n\t\tmode === \"disabled\"\n\t) {\n\t\treturn \"danger-full-access\";\n\t}\n\tif (mode === \"read-only\" || mode === \"read_only\" || mode === \"readonly\") {\n\t\treturn \"read-only\";\n\t}\n\treturn \"workspace-write\";\n}\n\nfunction networkAccessFromTurnContext(turnContext: TurnContext): string {\n\tconst network = recordField(turnContext.effectivePermissionProfile(), \"network\");\n\tconst networkAccess =\n\t\tstringField(network, [\"access\", \"mode\", \"policy\"]) ??\n\t\tstringField(turnContext.effectiveSandboxPolicy(), [\"network_access\"]);\n\tif (networkAccess === \"restricted\" || networkAccess === \"disabled\") {\n\t\treturn \"restricted\";\n\t}\n\treturn \"enabled\";\n}\n\nfunction sandboxInstructionText(\n\tmode: \"danger-full-access\" | \"workspace-write\" | \"read-only\",\n\tnetworkAccess: string,\n): string {\n\tswitch (mode) {\n\t\tcase \"danger-full-access\":\n\t\t\treturn `Filesystem sandboxing defines which files can be read or written. \\`sandbox_mode\\` is \\`danger-full-access\\`: No filesystem sandboxing - all commands are permitted. Network access is ${networkAccess}.`;\n\t\tcase \"read-only\":\n\t\t\treturn `Filesystem sandboxing defines which files can be read or written. \\`sandbox_mode\\` is \\`read-only\\`: The sandbox only permits reading files. Network access is ${networkAccess}.`;\n\t\tcase \"workspace-write\":\n\t\t\treturn `Filesystem sandboxing defines which files can be read or written. \\`sandbox_mode\\` is \\`workspace-write\\`: The sandbox permits reading files, and editing files in \\`cwd\\` and \\`writable_roots\\`. Editing files in other directories requires approval. Network access is ${networkAccess}.`;\n\t}\n}\n\nfunction approvalInstructionText(\n\tapprovalPolicy: string,\n\tapprovalsReviewer: string | null | undefined,\n\trequestPermissionsToolEnabled: boolean,\n): string {\n\tconst normalizedPolicy = approvalPolicy.replaceAll(\"_\", \"-\");\n\tlet text: string;\n\tswitch (normalizedPolicy) {\n\t\tcase \"never\":\n\t\t\ttext = APPROVAL_POLICY_NEVER;\n\t\t\tbreak;\n\t\tcase \"unless-trusted\":\n\t\t\ttext = APPROVAL_POLICY_UNLESS_TRUSTED;\n\t\t\tbreak;\n\t\tcase \"on-failure\":\n\t\t\ttext = APPROVAL_POLICY_ON_FAILURE;\n\t\t\tbreak;\n\t\tcase \"on-request\":\n\t\t\ttext = APPROVAL_POLICY_ON_REQUEST;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttext = `Approval policy is currently ${approvalPolicy}.`;\n\t\t\tbreak;\n\t}\n\n\tif (requestPermissionsToolEnabled && normalizedPolicy !== \"never\") {\n\t\ttext = `${text}\\n\\n${REQUEST_PERMISSIONS_TOOL_PROMPT}`;\n\t}\n\n\tif (approvalsReviewer === \"auto_review\" && normalizedPolicy !== \"never\") {\n\t\ttext = `${text}\\n\\n${AUTO_REVIEW_APPROVAL_SUFFIX}`;\n\t}\n\n\treturn text;\n}\n\nfunction stringField(\n\trecord: Record<string, unknown> | null | undefined,\n\tkeys: string[],\n): string | null {\n\tfor (const key of keys) {\n\t\tconst value = record?.[key];\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction recordField(\n\trecord: Record<string, unknown> | null | undefined,\n\tkey: string,\n): Record<string, unknown> | null {\n\tconst value = record?.[key];\n\treturn typeof value === \"object\" && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: null;\n}\n","import type { ResponseItem, TurnContextItem } from \"../protocol\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport type { PreviousTurnSettings } from \"../session/rollout-reconstruction\";\nimport { get_model_instructions } from \"../model-provider\";\nimport { normalizeCollaborationMode } from \"../collaboration-mode-presets\";\nimport type { CollaborationMode } from \"../config-types\";\nimport { ContextualUserFragment } from \"./fragment\";\nimport { EnvironmentContext } from \"./environment-context\";\nimport { PermissionsInstructions } from \"./permissions-instructions\";\nimport { CollaborationModeInstructions } from \"./collaboration-mode-instructions\";\n\nexport class ModelSwitchInstructions extends ContextualUserFragment {\n\tconstructor(text: string) {\n\t\tsuper({\n\t\t\trole: \"developer\",\n\t\t\tstart_marker: \"<model_switch>\",\n\t\t\tend_marker: \"</model_switch>\",\n\t\t\tbody: () => text,\n\t\t});\n\t}\n}\n\nexport function buildInitialContextItems(turnContext: TurnContext): ResponseItem[] {\n\tconst developerSections = [\n\t\tPermissionsInstructions.fromTurnContext(turnContext).render(),\n\t\tturnContext.developer_instructions?.trim() ?? \"\",\n\t\tCollaborationModeInstructions.fromCollaborationMode(\n\t\t\tnormalizedCollaborationMode(turnContext),\n\t\t)?.toText() ?? \"\",\n\t].filter((section) => section.trim().length > 0);\n\tconst contextualUserSections = [\n\t\tturnContext.user_instructions?.trim()\n\t\t\t? renderUserInstructions(turnContext.cwd, turnContext.user_instructions.trim())\n\t\t\t: \"\",\n\t\tEnvironmentContext.fromTurnContext(turnContext).render(),\n\t].filter((section) => section.trim().length > 0);\n\n\treturn [\n\t\t...buildTextMessage(\"developer\", developerSections),\n\t\t...buildTextMessage(\"user\", contextualUserSections),\n\t];\n}\n\nexport function buildSettingsUpdateItems(\n\tprevious: TurnContextItem | null | undefined,\n\tpreviousTurnSettings: PreviousTurnSettings | null | undefined,\n\tnext: TurnContext,\n): ResponseItem[] {\n\tconst developerSections = [\n\t\tbuildModelInstructionsUpdateItem(previousTurnSettings, next),\n\t\tbuildPermissionsUpdateItem(previous, next),\n\t\tbuildCollaborationModeUpdateItem(previous, next),\n\t].filter((section): section is string => Boolean(section?.trim()));\n\tconst contextualUserSections = [\n\t\tbuildEnvironmentUpdateItem(previous, next),\n\t].filter((section): section is string => Boolean(section?.trim()));\n\n\treturn [\n\t\t...buildTextMessage(\"developer\", developerSections),\n\t\t...buildTextMessage(\"user\", contextualUserSections),\n\t];\n}\n\nexport function buildModelInstructionsUpdateItem(\n\tpreviousTurnSettings: PreviousTurnSettings | null | undefined,\n\tnext: TurnContext,\n): string | null {\n\tif (!previousTurnSettings || previousTurnSettings.model === next.model) {\n\t\treturn null;\n\t}\n\tconst instructions = get_model_instructions(next.model_info, next.personality);\n\treturn instructions.trim()\n\t\t? new ModelSwitchInstructions(instructions).render()\n\t\t: null;\n}\n\nfunction buildPermissionsUpdateItem(\n\tprevious: TurnContextItem | null | undefined,\n\tnext: TurnContext,\n): string | null {\n\tif (!previous) {\n\t\treturn null;\n\t}\n\tif (\n\t\tJSON.stringify(previous.permission_profile ?? null) ===\n\t\t\tJSON.stringify(next.effectivePermissionProfile()) &&\n\t\tprevious.approval_policy === next.approval_policy\n\t) {\n\t\treturn null;\n\t}\n\treturn PermissionsInstructions.fromTurnContext(next).render();\n}\n\nfunction buildCollaborationModeUpdateItem(\n\tprevious: TurnContextItem | null | undefined,\n\tnext: TurnContext,\n): string | null {\n\tif (!previous) {\n\t\treturn null;\n\t}\n\tconst nextCollaborationMode = normalizedCollaborationMode(next);\n\tif (\n\t\tJSON.stringify(previous.collaboration_mode ?? null) ===\n\t\tJSON.stringify(nextCollaborationMode ?? null)\n\t) {\n\t\treturn null;\n\t}\n\treturn CollaborationModeInstructions.fromCollaborationMode(\n\t\tnextCollaborationMode,\n\t)?.toText() ?? null;\n}\n\nfunction buildEnvironmentUpdateItem(\n\tprevious: TurnContextItem | null | undefined,\n\tnext: TurnContext,\n): string | null {\n\tif (!previous) {\n\t\treturn null;\n\t}\n\tconst previousEnvironment = EnvironmentContext.fromTurnContextItem(previous).render();\n\tconst nextEnvironment = EnvironmentContext.fromTurnContext(next).render();\n\treturn previousEnvironment === nextEnvironment ? null : nextEnvironment;\n}\n\nfunction buildTextMessage(role: string, textSections: string[]): ResponseItem[] {\n\tif (textSections.length === 0) {\n\t\treturn [];\n\t}\n\treturn [\n\t\t{\n\t\t\ttype: \"message\",\n\t\t\trole,\n\t\t\tcontent: textSections.map((text) => ({ type: \"input_text\", text })),\n\t\t},\n\t];\n}\n\nfunction renderUserInstructions(directory: string, text: string): string {\n\treturn `# AGENTS.md instructions for ${directory}\\n\\n<INSTRUCTIONS>\\n${text}\\n</INSTRUCTIONS>`;\n}\n\nfunction normalizedCollaborationMode(\n\tturnContext: TurnContext,\n): CollaborationMode | null {\n\tif (!turnContext.collaboration_mode) {\n\t\treturn null;\n\t}\n\treturn normalizeCollaborationMode({\n\t\tcollaborationMode: turnContext.collaboration_mode,\n\t\tmodel: turnContext.model,\n\t\treasoningEffort: turnContext.effort,\n\t});\n}\n","import { normalizeCollaborationMode } from \"../collaboration-mode-presets\";\nimport type { ResponseItem } from \"../models\";\nimport type { BaseInstructions } from \"../protocol\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport { CollaborationModeInstructions } from \"./collaboration-mode-instructions\";\nimport { buildInitialContextItems } from \"./context-updates\";\n\nexport function buildPromptBaseInstructions(\n\tturnContext: TurnContext,\n): BaseInstructions {\n\treturn {\n\t\ttext: turnContext.base_instructions ?? \"\",\n\t};\n}\n\nexport function buildPromptInputWithContext(\n\tinput: ResponseItem[],\n\tturnContext: TurnContext,\n): ResponseItem[] {\n\tconst contextItems = buildPromptContextItems(turnContext);\n\tif (contextItems.length === 0) {\n\t\treturn input;\n\t}\n\n\tconst insertionIndex = lastUserMessageIndex(input);\n\tif (insertionIndex === -1) {\n\t\treturn [...contextItems, ...input];\n\t}\n\n\treturn [\n\t\t...input.slice(0, insertionIndex),\n\t\t...contextItems,\n\t\t...input.slice(insertionIndex),\n\t];\n}\n\nexport function buildCollaborationModeInstructions(\n\tturnContext: TurnContext,\n): ResponseItem | null {\n\tconst collaborationMode = turnContext.collaboration_mode\n\t\t? normalizeCollaborationMode({\n\t\t\t\tcollaborationMode: turnContext.collaboration_mode,\n\t\t\t\tmodel: turnContext.model,\n\t\t\t\treasoningEffort: turnContext.effort,\n\t\t })\n\t\t: null;\n\treturn CollaborationModeInstructions.fromCollaborationMode(\n\t\tcollaborationMode,\n\t)?.toResponseItem() ?? null;\n}\n\nexport { CollaborationModeInstructions };\n\nfunction buildPromptContextItems(turnContext: TurnContext): ResponseItem[] {\n\treturn buildInitialContextItems(turnContext);\n}\n\nfunction lastUserMessageIndex(input: ResponseItem[]): number {\n\tfor (let index = input.length - 1; index >= 0; index -= 1) {\n\t\tconst item = input[index];\n\t\tif (item?.type === \"message\" && item.role === \"user\") {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn -1;\n}\n","import type { ResponseItem } from \"../models\";\n\nexport const TURN_ABORTED_INTERRUPTED_GUIDANCE =\n\t\"The user interrupted the previous turn on purpose. Any running unified exec processes may still be running in the background. If any tools/commands were aborted, they may have partially executed.\";\n\nexport function turnAbortedResponseItem(\n\tguidance = TURN_ABORTED_INTERRUPTED_GUIDANCE,\n): ResponseItem {\n\treturn {\n\t\ttype: \"message\",\n\t\trole: \"user\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"input_text\",\n\t\t\t\ttext: `<turn_aborted>\\n${guidance}\\n</turn_aborted>`,\n\t\t\t},\n\t\t],\n\t};\n}\n","const APPROX_BYTES_PER_TOKEN = 4;\n\nexport function truncate_middle_chars(value: string, maxBytes: number): string {\n\treturn truncate_with_byte_estimate(value, maxBytes, false);\n}\n\nexport function truncate_middle_with_token_budget(\n\tvalue: string,\n\tmaxTokens: number,\n): [string, number | null] {\n\tif (value.length === 0) {\n\t\treturn [\"\", null];\n\t}\n\tif (maxTokens > 0 && utf8ByteLength(value) <= approx_bytes_for_tokens(maxTokens)) {\n\t\treturn [value, null];\n\t}\n\n\tconst truncated = truncate_with_byte_estimate(\n\t\tvalue,\n\t\tapprox_bytes_for_tokens(maxTokens),\n\t\ttrue,\n\t);\n\tconst totalTokens = approx_token_count(value);\n\treturn truncated === value ? [truncated, null] : [truncated, totalTokens];\n}\n\nexport function approx_token_count(text: string): number {\n\tconst length = utf8ByteLength(text);\n\treturn Math.ceil(length / APPROX_BYTES_PER_TOKEN);\n}\n\nexport function approx_bytes_for_tokens(tokens: number): number {\n\treturn Math.max(0, Math.trunc(tokens)) * APPROX_BYTES_PER_TOKEN;\n}\n\nexport function approx_tokens_from_byte_count(bytes: number): number {\n\treturn Math.ceil(Math.max(0, Math.trunc(bytes)) / APPROX_BYTES_PER_TOKEN);\n}\n\nfunction truncate_with_byte_estimate(\n\tvalue: string,\n\tmaxBytes: number,\n\tuseTokens: boolean,\n): string {\n\tif (value.length === 0) {\n\t\treturn \"\";\n\t}\n\tconst normalizedMaxBytes = Math.max(0, Math.trunc(maxBytes));\n\tconst totalBytes = utf8ByteLength(value);\n\tif (normalizedMaxBytes === 0) {\n\t\treturn format_truncation_marker(\n\t\t\tuseTokens,\n\t\t\tremoved_units(useTokens, totalBytes, [...value].length),\n\t\t);\n\t}\n\tif (totalBytes <= normalizedMaxBytes) {\n\t\treturn value;\n\t}\n\n\tconst [leftBudget, rightBudget] = split_budget(normalizedMaxBytes);\n\tconst { left, removedChars, right } = split_string(value, leftBudget, rightBudget);\n\tconst marker = format_truncation_marker(\n\t\tuseTokens,\n\t\tremoved_units(\n\t\t\tuseTokens,\n\t\t\tMath.max(0, totalBytes - normalizedMaxBytes),\n\t\t\tremovedChars,\n\t\t),\n\t);\n\treturn assemble_truncated_output(left, right, marker);\n}\n\nfunction split_budget(maxBytes: number): [number, number] {\n\tconst left = Math.floor(maxBytes / 2);\n\treturn [left, maxBytes - left];\n}\n\nfunction split_string(\n\tvalue: string,\n\tbeginningBytes: number,\n\tendBytes: number,\n): { left: string; removedChars: number; right: string } {\n\tlet left = \"\";\n\tlet right = \"\";\n\tlet leftBytes = 0;\n\tconst chars = [...value];\n\tfor (const char of chars) {\n\t\tconst nextBytes = utf8ByteLength(char);\n\t\tif (leftBytes + nextBytes > beginningBytes) {\n\t\t\tbreak;\n\t\t}\n\t\tleft += char;\n\t\tleftBytes += nextBytes;\n\t}\n\n\tlet rightBytes = 0;\n\tfor (let index = chars.length - 1; index >= 0; index -= 1) {\n\t\tconst char = chars[index] ?? \"\";\n\t\tconst nextBytes = utf8ByteLength(char);\n\t\tif (rightBytes + nextBytes > endBytes) {\n\t\t\tbreak;\n\t\t}\n\t\tright = `${char}${right}`;\n\t\trightBytes += nextBytes;\n\t}\n\n\tconst keptChars = [...left].length + [...right].length;\n\treturn {\n\t\tleft,\n\t\tremovedChars: Math.max(0, chars.length - keptChars),\n\t\tright,\n\t};\n}\n\nfunction assemble_truncated_output(\n\tleft: string,\n\tright: string,\n\tmarker: string,\n): string {\n\tif (!left && !right) {\n\t\treturn marker;\n\t}\n\tif (!left) {\n\t\treturn `${marker}${right}`;\n\t}\n\tif (!right) {\n\t\treturn `${left}${marker}`;\n\t}\n\treturn `${left}${marker}${right}`;\n}\n\nfunction format_truncation_marker(useTokens: boolean, removedUnits: number): string {\n\tconst unit = useTokens ? \"tokens\" : \"chars\";\n\treturn `…${removedUnits} ${unit} truncated…`;\n}\n\nfunction removed_units(\n\tuseTokens: boolean,\n\tremovedBytes: number,\n\tremovedChars: number,\n): number {\n\treturn useTokens ? approx_tokens_from_byte_count(removedBytes) : removedChars;\n}\n\nfunction utf8ByteLength(value: string): number {\n\treturn new TextEncoder().encode(value).byteLength;\n}\n","import type {\n\tFunctionCallOutputContentItem,\n\tFunctionCallOutputPayload,\n\tTruncationPolicy,\n} from \"../../../core/src/protocol\";\nimport {\n\tapprox_bytes_for_tokens,\n\tapprox_token_count,\n\tapprox_tokens_from_byte_count,\n\ttruncate_middle_chars,\n\ttruncate_middle_with_token_budget,\n} from \"../../string/src/lib\";\n\nexport {\n\tapprox_bytes_for_tokens,\n\tapprox_token_count,\n\tapprox_tokens_from_byte_count,\n};\n\nexport type ResolvedTruncationPolicy =\n\t| { mode: \"bytes\"; limit: number }\n\t| { mode: \"tokens\"; limit: number };\n\nexport const DEFAULT_TRUNCATION_POLICY: ResolvedTruncationPolicy = {\n\tmode: \"bytes\",\n\tlimit: 10_000,\n};\n\nexport function resolve_truncation_policy(\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): ResolvedTruncationPolicy {\n\tif (isResolvedPolicy(policy)) {\n\t\treturn { mode: policy.mode, limit: normalizeLimit(policy.limit) };\n\t}\n\tif (isRecord(policy)) {\n\t\tconst mode = policy.mode;\n\t\tconst limit = normalizeLimit(policy.limit);\n\t\tif (mode === \"bytes\" || mode === \"Bytes\") {\n\t\t\treturn { mode: \"bytes\", limit };\n\t\t}\n\t\tif (mode === \"tokens\" || mode === \"Tokens\") {\n\t\t\treturn { mode: \"tokens\", limit };\n\t\t}\n\t}\n\treturn DEFAULT_TRUNCATION_POLICY;\n}\n\nexport function scale_truncation_policy(\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n\tscale: number,\n): ResolvedTruncationPolicy {\n\tconst resolved = resolve_truncation_policy(policy);\n\treturn {\n\t\tmode: resolved.mode,\n\t\tlimit: Math.max(0, Math.trunc(resolved.limit * scale)),\n\t};\n}\n\nexport function formatted_truncate_text(\n\tcontent: string,\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): string {\n\tconst resolved = resolve_truncation_policy(policy);\n\tif (utf8ByteLength(content) <= byte_budget(resolved)) {\n\t\treturn content;\n\t}\n\tconst totalLines = content.split(/\\r?\\n/u).length;\n\treturn `Total output lines: ${totalLines}\\n\\n${truncate_text(content, resolved)}`;\n}\n\nexport function truncate_text(\n\tcontent: string,\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): string {\n\tconst resolved = resolve_truncation_policy(policy);\n\tif (resolved.mode === \"bytes\") {\n\t\treturn truncate_middle_chars(content, resolved.limit);\n\t}\n\treturn truncate_middle_with_token_budget(content, resolved.limit)[0];\n}\n\nexport function formatted_truncate_text_content_items_with_policy(\n\titems: readonly FunctionCallOutputContentItem[],\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): [FunctionCallOutputContentItem[], number | null] {\n\tconst textSegments = items.flatMap((item) =>\n\t\titem.type === \"input_text\" ? [item.text] : [],\n\t);\n\tif (textSegments.length === 0) {\n\t\treturn [[...items], null];\n\t}\n\n\tconst combined = textSegments.join(\"\\n\");\n\tconst resolved = resolve_truncation_policy(policy);\n\tif (utf8ByteLength(combined) <= byte_budget(resolved)) {\n\t\treturn [[...items], null];\n\t}\n\n\treturn [\n\t\t[\n\t\t\t{ type: \"input_text\", text: formatted_truncate_text(combined, resolved) },\n\t\t\t...items.flatMap((item) =>\n\t\t\t\titem.type === \"input_image\" ? [{ ...item }] : [],\n\t\t\t),\n\t\t],\n\t\tapprox_token_count(combined),\n\t];\n}\n\nexport function truncate_function_output_items_with_policy(\n\titems: readonly FunctionCallOutputContentItem[],\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): FunctionCallOutputContentItem[] {\n\tconst resolved = resolve_truncation_policy(policy);\n\tconst output: FunctionCallOutputContentItem[] = [];\n\tlet remainingBudget =\n\t\tresolved.mode === \"bytes\" ? byte_budget(resolved) : token_budget(resolved);\n\tlet omittedTextItems = 0;\n\n\tfor (const item of items) {\n\t\tif (item.type === \"input_image\") {\n\t\t\toutput.push({ ...item });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (remainingBudget <= 0) {\n\t\t\tomittedTextItems += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst cost =\n\t\t\tresolved.mode === \"bytes\" ? utf8ByteLength(item.text) : approx_token_count(item.text);\n\t\tif (cost <= remainingBudget) {\n\t\t\toutput.push({ ...item });\n\t\t\tremainingBudget -= cost;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst snippetPolicy: ResolvedTruncationPolicy = {\n\t\t\tmode: resolved.mode,\n\t\t\tlimit: remainingBudget,\n\t\t};\n\t\tconst snippet = truncate_text(item.text, snippetPolicy);\n\t\tif (snippet.length === 0) {\n\t\t\tomittedTextItems += 1;\n\t\t} else {\n\t\t\toutput.push({ type: \"input_text\", text: snippet });\n\t\t}\n\t\tremainingBudget = 0;\n\t}\n\n\tif (omittedTextItems > 0) {\n\t\toutput.push({\n\t\t\ttype: \"input_text\",\n\t\t\ttext: `[omitted ${omittedTextItems} text items ...]`,\n\t\t});\n\t}\n\n\treturn output;\n}\n\nexport function truncate_function_output_payload(\n\toutput: FunctionCallOutputPayload,\n\tpolicy: TruncationPolicy | ResolvedTruncationPolicy | null | undefined,\n): FunctionCallOutputPayload {\n\tif (output.body.type === \"text\") {\n\t\treturn {\n\t\t\t...output,\n\t\t\tbody: { type: \"text\", text: truncate_text(output.body.text, policy) },\n\t\t};\n\t}\n\treturn {\n\t\t...output,\n\t\tbody: {\n\t\t\ttype: \"content_items\",\n\t\t\titems: truncate_function_output_items_with_policy(output.body.items, policy),\n\t\t},\n\t};\n}\n\nexport function approx_tokens_from_byte_count_i64(bytes: number): number {\n\tif (bytes <= 0) {\n\t\treturn 0;\n\t}\n\treturn approx_tokens_from_byte_count(bytes);\n}\n\nfunction byte_budget(policy: ResolvedTruncationPolicy): number {\n\treturn policy.mode === \"bytes\" ? policy.limit : approx_bytes_for_tokens(policy.limit);\n}\n\nfunction token_budget(policy: ResolvedTruncationPolicy): number {\n\treturn policy.mode === \"tokens\"\n\t\t? policy.limit\n\t\t: approx_tokens_from_byte_count(policy.limit);\n}\n\nfunction isResolvedPolicy(value: unknown): value is ResolvedTruncationPolicy {\n\treturn (\n\t\tisRecord(value) &&\n\t\t(value.mode === \"bytes\" || value.mode === \"tokens\") &&\n\t\ttypeof value.limit === \"number\"\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeLimit(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0\n\t\t? Math.trunc(value)\n\t\t: DEFAULT_TRUNCATION_POLICY.limit;\n}\n\nfunction utf8ByteLength(value: string): number {\n\treturn new TextEncoder().encode(value).byteLength;\n}\n","import type {\n\tFunctionCallOutputPayload,\n\tResponseItem,\n} from \"../models\";\n\nfunction abortedOutput(): FunctionCallOutputPayload {\n\treturn {\n\t\tbody: {\n\t\t\ttype: \"text\",\n\t\t\ttext: \"aborted\",\n\t\t},\n\t\tsuccess: null,\n\t};\n}\n\nexport function ensureCallOutputsPresent(items: ResponseItem[]): ResponseItem[] {\n\tconst normalized = [...items];\n\tconst missingOutputs: Array<{ index: number; item: ResponseItem }> = [];\n\n\tfor (const [index, item] of normalized.entries()) {\n\t\tif (item.type === \"function_call\") {\n\t\t\tconst hasOutput = normalized.some(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"function_call_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tif (!hasOutput) {\n\t\t\t\tmissingOutputs.push({\n\t\t\t\t\tindex,\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\t\tcall_id: item.call_id,\n\t\t\t\t\t\toutput: abortedOutput(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.type === \"custom_tool_call\") {\n\t\t\tconst hasOutput = normalized.some(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"custom_tool_call_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tif (!hasOutput) {\n\t\t\t\tmissingOutputs.push({\n\t\t\t\t\tindex,\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\t\t\tcall_id: item.call_id,\n\t\t\t\t\t\tname: null,\n\t\t\t\t\t\toutput: abortedOutput(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.type === \"local_shell_call\" && item.call_id) {\n\t\t\tconst hasOutput = normalized.some(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"function_call_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tif (!hasOutput) {\n\t\t\t\tmissingOutputs.push({\n\t\t\t\t\tindex,\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\t\tcall_id: item.call_id,\n\t\t\t\t\t\toutput: abortedOutput(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.type === \"tool_search_call\" && item.call_id) {\n\t\t\tconst hasOutput = normalized.some(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"tool_search_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tif (!hasOutput) {\n\t\t\t\tmissingOutputs.push({\n\t\t\t\t\tindex,\n\t\t\t\t\titem: {\n\t\t\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\t\t\tcall_id: item.call_id,\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\texecution: \"client\",\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const missing of missingOutputs.reverse()) {\n\t\tnormalized.splice(missing.index + 1, 0, missing.item);\n\t}\n\n\treturn normalized;\n}\n\nexport function removeOrphanOutputs(items: ResponseItem[]): ResponseItem[] {\n\tconst functionCallIds = new Set(\n\t\titems.flatMap((item) =>\n\t\t\titem.type === \"function_call\" ? [item.call_id] : [],\n\t\t),\n\t);\n\tconst localShellCallIds = new Set(\n\t\titems.flatMap((item) =>\n\t\t\titem.type === \"local_shell_call\" ? [item.call_id ?? \"\"] : [],\n\t\t),\n\t);\n\tconst customToolCallIds = new Set(\n\t\titems.flatMap((item) =>\n\t\t\titem.type === \"custom_tool_call\" ? [item.call_id] : [],\n\t\t),\n\t);\n\tconst toolSearchCallIds = new Set(\n\t\titems.flatMap((item) =>\n\t\t\titem.type === \"tool_search_call\" && item.call_id ? [item.call_id] : [],\n\t\t),\n\t);\n\n\treturn items.filter((item) => {\n\t\tif (item.type === \"function_call_output\") {\n\t\t\treturn (\n\t\t\t\tfunctionCallIds.has(item.call_id) || localShellCallIds.has(item.call_id)\n\t\t\t);\n\t\t}\n\n\t\tif (item.type === \"custom_tool_call_output\") {\n\t\t\treturn customToolCallIds.has(item.call_id);\n\t\t}\n\n\t\tif (item.type === \"tool_search_output\") {\n\t\t\tif (item.execution === \"server\" || !item.call_id) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn toolSearchCallIds.has(item.call_id);\n\t\t}\n\n\t\treturn true;\n\t});\n}\n\nexport function removeCorrespondingFor(\n\titems: ResponseItem[],\n\titem: ResponseItem,\n): ResponseItem[] {\n\tconst next = [...items];\n\n\tswitch (item.type) {\n\t\tcase \"function_call\":\n\t\t\tremoveFirstMatching(\n\t\t\t\tnext,\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"function_call_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase \"function_call_output\":\n\t\t\tremoveFirstMatching(\n\t\t\t\tnext,\n\t\t\t\t(candidate) =>\n\t\t\t\t\t(candidate.type === \"function_call\" ||\n\t\t\t\t\t\tcandidate.type === \"local_shell_call\") &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase \"custom_tool_call\":\n\t\t\tremoveFirstMatching(\n\t\t\t\tnext,\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"custom_tool_call_output\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase \"custom_tool_call_output\":\n\t\t\tremoveFirstMatching(\n\t\t\t\tnext,\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.type === \"custom_tool_call\" &&\n\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase \"tool_search_call\":\n\t\t\tif (item.call_id) {\n\t\t\t\tremoveFirstMatching(\n\t\t\t\t\tnext,\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.type === \"tool_search_output\" &&\n\t\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"tool_search_output\":\n\t\t\tif (item.call_id) {\n\t\t\t\tremoveFirstMatching(\n\t\t\t\t\tnext,\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.type === \"tool_search_call\" &&\n\t\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"local_shell_call\":\n\t\t\tif (item.call_id) {\n\t\t\t\tremoveFirstMatching(\n\t\t\t\t\tnext,\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.type === \"function_call_output\" &&\n\t\t\t\t\t\tcandidate.call_id === item.call_id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn next;\n}\n\nexport function normalizeResponseHistory(items: ResponseItem[]): ResponseItem[] {\n\treturn removeOrphanOutputs(ensureCallOutputsPresent(items));\n}\n\nexport function stripImagesWhenUnsupported(\n\tinputModalities: readonly string[] | null | undefined,\n\titems: ResponseItem[],\n): ResponseItem[] {\n\tif (inputModalities?.includes(\"image\")) {\n\t\treturn items.map(cloneResponseItem);\n\t}\n\n\treturn items.map((item): ResponseItem => {\n\t\tif (item.type === \"message\") {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tcontent: item.content.filter((content) => content.type !== \"input_image\"),\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t(item.type === \"function_call_output\" ||\n\t\t\t\titem.type === \"custom_tool_call_output\") &&\n\t\t\titem.output.body.type === \"content_items\"\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\toutput: {\n\t\t\t\t\t...item.output,\n\t\t\t\t\tbody: {\n\t\t\t\t\t\ttype: \"content_items\",\n\t\t\t\t\t\titems: item.output.body.items.filter(\n\t\t\t\t\t\t\t(content) => content.type !== \"input_image\",\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn cloneResponseItem(item);\n\t});\n}\n\nfunction cloneResponseItem(item: ResponseItem): ResponseItem {\n\treturn structuredClone(item);\n}\n\nfunction removeFirstMatching(\n\titems: ResponseItem[],\n\tpredicate: (item: ResponseItem) => boolean,\n): void {\n\tconst index = items.findIndex(predicate);\n\tif (index >= 0) {\n\t\titems.splice(index, 1);\n\t}\n}\n","import type { ResponseItem } from \"../models\";\nimport type {\n\tBaseInstructions,\n\tFunctionCallOutputPayload,\n\tTokenUsage,\n\tTokenUsageInfo,\n\tTruncationPolicy,\n\tTurnContextItem,\n} from \"../protocol\";\nimport {\n\tapprox_token_count,\n\tapprox_tokens_from_byte_count_i64,\n\tscale_truncation_policy,\n\ttruncate_function_output_payload as truncateFunctionOutputPayload,\n} from \"../../../utils/output-truncation/src/lib\";\nimport {\n\thasNonContextualDevMessageContent,\n\tisContextualDevMessageContent,\n\tisContextualUserMessageContent,\n} from \"../event-mapping\";\nimport {\n\tnormalizeResponseHistory,\n\tremoveCorrespondingFor,\n\tstripImagesWhenUnsupported,\n} from \"./normalize\";\n\nexport type TotalTokenUsageBreakdown = {\n\tlast_api_response_total_tokens: number;\n\tall_history_items_model_visible_bytes: number;\n\testimated_tokens_of_items_added_since_last_successful_api_response: number;\n\testimated_bytes_of_items_added_since_last_successful_api_response: number;\n};\n\nexport class ContextManager {\n\tprivate items: ResponseItem[] = [];\n\tprivate history_version = 0;\n\tprivate token_info_value: TokenUsageInfo | null = emptyTokenUsageInfo();\n\tprivate reference_context_item_value: TurnContextItem | null = null;\n\n\tstatic new(): ContextManager {\n\t\treturn new ContextManager();\n\t}\n\n\tclone(): ContextManager {\n\t\tconst next = new ContextManager();\n\t\tnext.items = structuredClone(this.items);\n\t\tnext.history_version = this.history_version;\n\t\tnext.token_info_value = structuredClone(this.token_info_value);\n\t\tnext.reference_context_item_value = structuredClone(\n\t\t\tthis.reference_context_item_value,\n\t\t);\n\t\treturn next;\n\t}\n\n\ttoken_info(): TokenUsageInfo | null {\n\t\treturn structuredClone(this.token_info_value);\n\t}\n\n\ttokenInfo(): TokenUsageInfo | null {\n\t\treturn this.token_info();\n\t}\n\n\tset_token_info(info: TokenUsageInfo | null): void {\n\t\tthis.token_info_value = structuredClone(info);\n\t}\n\n\tsetTokenInfo(info: TokenUsageInfo | null): void {\n\t\tthis.set_token_info(info);\n\t}\n\n\tset_token_usage_full(contextWindow: number): void {\n\t\tconst usage = {\n\t\t\tinput_tokens: contextWindow,\n\t\t\tcached_input_tokens: 0,\n\t\t\toutput_tokens: 0,\n\t\t\treasoning_output_tokens: 0,\n\t\t\ttotal_tokens: contextWindow,\n\t\t};\n\t\tthis.token_info_value = {\n\t\t\ttotal_token_usage: usage,\n\t\t\tlast_token_usage: usage,\n\t\t\tmodel_context_window: contextWindow,\n\t\t};\n\t}\n\n\tsetTokenUsageFull(contextWindow: number): void {\n\t\tthis.set_token_usage_full(contextWindow);\n\t}\n\n\trecordItems(\n\t\titems: Iterable<ResponseItem>,\n\t\tpolicy?: TruncationPolicy | null,\n\t): void {\n\t\tfor (const item of items) {\n\t\t\tif (isApiMessage(item)) {\n\t\t\t\tthis.items.push(processResponseItemForPrompt(item, policy));\n\t\t\t}\n\t\t}\n\t}\n\n\trecord_items(\n\t\titems: Iterable<ResponseItem>,\n\t\tpolicy?: TruncationPolicy | null,\n\t): void {\n\t\tthis.recordItems(items, policy);\n\t}\n\n\treplace(items: ResponseItem[]): void {\n\t\tthis.items = structuredClone(items);\n\t\tthis.history_version = this.history_version + 1;\n\t}\n\n\trawItems(): ResponseItem[] {\n\t\treturn structuredClone(this.items);\n\t}\n\n\traw_items(): ResponseItem[] {\n\t\treturn this.rawItems();\n\t}\n\n\tforPrompt(inputModalities?: readonly string[] | null): ResponseItem[] {\n\t\treturn stripImagesWhenUnsupported(\n\t\t\tinputModalities,\n\t\t\tnormalizeResponseHistory(this.items),\n\t\t);\n\t}\n\n\tfor_prompt(inputModalities?: readonly string[] | null): ResponseItem[] {\n\t\treturn this.forPrompt(inputModalities);\n\t}\n\n\thistoryVersion(): number {\n\t\treturn this.history_version;\n\t}\n\n\thistory_version_value(): number {\n\t\treturn this.historyVersion();\n\t}\n\n\testimate_token_count_with_base_instructions(\n\t\tbaseInstructions: BaseInstructions,\n\t): number {\n\t\treturn (\n\t\t\tapprox_token_count(baseInstructions.text) +\n\t\t\tthis.items.reduce(\n\t\t\t\t(total, item) => total + estimate_item_token_count(item),\n\t\t\t\t0,\n\t\t\t)\n\t\t);\n\t}\n\n\tsetReferenceContextItem(item: TurnContextItem | null): void {\n\t\tthis.reference_context_item_value = structuredClone(item);\n\t}\n\n\tset_reference_context_item(item: TurnContextItem | null): void {\n\t\tthis.setReferenceContextItem(item);\n\t}\n\n\treferenceContextItem(): TurnContextItem | null {\n\t\treturn structuredClone(this.reference_context_item_value);\n\t}\n\n\treference_context_item(): TurnContextItem | null {\n\t\treturn this.referenceContextItem();\n\t}\n\n\tdropLastNUserTurns(numTurns: number): void {\n\t\tif (numTurns <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst snapshot = [...this.items];\n\t\tconst userPositions = userMessagePositions(snapshot);\n\t\tconst firstInstructionTurnIndex = userPositions[0];\n\t\tif (firstInstructionTurnIndex === undefined) {\n\t\t\tthis.replace(snapshot);\n\t\t\treturn;\n\t\t}\n\n\t\tconst cutIndex =\n\t\t\tnumTurns >= userPositions.length\n\t\t\t\t? firstInstructionTurnIndex\n\t\t\t\t: (userPositions[userPositions.length - numTurns] ?? firstInstructionTurnIndex);\n\t\tconst trimmedCutIndex = this.trim_pre_turn_context_updates(\n\t\t\tsnapshot,\n\t\t\tfirstInstructionTurnIndex,\n\t\t\tcutIndex,\n\t\t);\n\t\tthis.replace(snapshot.slice(0, trimmedCutIndex));\n\t}\n\n\tdrop_last_n_user_turns(numTurns: number): void {\n\t\tthis.dropLastNUserTurns(numTurns);\n\t}\n\n\tremoveFirstItem(): void {\n\t\tconst removed = this.items.shift();\n\t\tif (removed) {\n\t\t\tthis.items = removeCorrespondingFor(this.items, removed);\n\t\t}\n\t}\n\n\tremove_first_item(): void {\n\t\tthis.removeFirstItem();\n\t}\n\n\tremoveLastItem(): boolean {\n\t\tconst removed = this.items.at(-1);\n\t\tif (!removed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.items = removeCorrespondingFor(this.items.slice(0, -1), removed);\n\t\tthis.history_version = this.history_version + 1;\n\t\treturn true;\n\t}\n\n\tremove_last_item(): boolean {\n\t\treturn this.removeLastItem();\n\t}\n\n\treplaceLastTurnImages(placeholder: string): boolean {\n\t\tconst index = findLastIndex(this.items, (item) => {\n\t\t\treturn (\n\t\t\t\titem.type === \"function_call_output\" ||\n\t\t\t\titem.type === \"custom_tool_call_output\" ||\n\t\t\t\tisUserTurnBoundary(item)\n\t\t\t);\n\t\t});\n\t\tif (index < 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst item = this.items[index];\n\t\tif (\n\t\t\t!item ||\n\t\t\t(item.type !== \"function_call_output\" &&\n\t\t\t\titem.type !== \"custom_tool_call_output\") ||\n\t\t\titem.output.body.type !== \"content_items\"\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet replaced = false;\n\t\tconst items = item.output.body.items.map((content) => {\n\t\t\tif (content.type !== \"input_image\") {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t\treplaced = true;\n\t\t\treturn { type: \"input_text\" as const, text: placeholder };\n\t\t});\n\t\tif (!replaced) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.items[index] = {\n\t\t\t...item,\n\t\t\toutput: {\n\t\t\t\t...item.output,\n\t\t\t\tbody: { type: \"content_items\", items },\n\t\t\t},\n\t\t};\n\t\tthis.history_version = this.history_version + 1;\n\t\treturn true;\n\t}\n\n\treplace_last_turn_images(placeholder: string): boolean {\n\t\treturn this.replaceLastTurnImages(placeholder);\n\t}\n\n\tupdateTokenInfo(\n\t\tusage: TokenUsage,\n\t\tmodelContextWindow?: number | null,\n\t): void {\n\t\tthis.token_info_value = updateTokenInfoFromUsage(\n\t\t\tthis.token_info_value,\n\t\t\tusage,\n\t\t\tmodelContextWindow ?? null,\n\t\t);\n\t}\n\n\tupdate_token_info(\n\t\tusage: TokenUsage,\n\t\tmodelContextWindow?: number | null,\n\t): void {\n\t\tthis.updateTokenInfo(usage, modelContextWindow);\n\t}\n\n\tgetTotalTokenUsage(serverReasoningIncluded = false): number {\n\t\tconst lastTokens = this.token_info_value?.last_token_usage.total_tokens ?? 0;\n\t\tconst itemsAfterLastModelTokens = this.itemsAfterLastModelGeneratedItem().reduce(\n\t\t\t(total, item) => total + estimate_item_token_count(item),\n\t\t\t0,\n\t\t);\n\t\tif (serverReasoningIncluded) {\n\t\t\treturn lastTokens + itemsAfterLastModelTokens;\n\t\t}\n\t\treturn (\n\t\t\tlastTokens +\n\t\t\tthis.getNonLastReasoningItemsTokens() +\n\t\t\titemsAfterLastModelTokens\n\t\t);\n\t}\n\n\tget_total_token_usage(serverReasoningIncluded = false): number {\n\t\treturn this.getTotalTokenUsage(serverReasoningIncluded);\n\t}\n\n\tgetTotalTokenUsageBreakdown(): TotalTokenUsageBreakdown {\n\t\tconst lastUsage =\n\t\t\tthis.token_info_value?.last_token_usage ?? emptyTokenUsage();\n\t\tconst itemsAfterLastModelGenerated = this.itemsAfterLastModelGeneratedItem();\n\t\treturn {\n\t\t\tlast_api_response_total_tokens: lastUsage.total_tokens,\n\t\t\tall_history_items_model_visible_bytes: this.items.reduce(\n\t\t\t\t(total, item) => total + estimate_response_item_model_visible_bytes(item),\n\t\t\t\t0,\n\t\t\t),\n\t\t\testimated_tokens_of_items_added_since_last_successful_api_response:\n\t\t\t\titemsAfterLastModelGenerated.reduce(\n\t\t\t\t\t(total, item) => total + estimate_item_token_count(item),\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\testimated_bytes_of_items_added_since_last_successful_api_response:\n\t\t\t\titemsAfterLastModelGenerated.reduce(\n\t\t\t\t\t(total, item) => total + estimate_response_item_model_visible_bytes(item),\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t};\n\t}\n\n\tget_total_token_usage_breakdown(): TotalTokenUsageBreakdown {\n\t\treturn this.getTotalTokenUsageBreakdown();\n\t}\n\n\tprivate getNonLastReasoningItemsTokens(): number {\n\t\tconst lastUserIndex = findLastIndex(this.items, isUserTurnBoundary);\n\t\tif (lastUserIndex < 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.items\n\t\t\t.slice(0, lastUserIndex)\n\t\t\t.filter(\n\t\t\t\t(item) =>\n\t\t\t\t\titem.type === \"reasoning\" && typeof item.encrypted_content === \"string\",\n\t\t\t)\n\t\t\t.reduce((total, item) => total + estimate_item_token_count(item), 0);\n\t}\n\n\tprivate itemsAfterLastModelGeneratedItem(): ResponseItem[] {\n\t\tconst index = findLastIndex(this.items, isModelGeneratedItem);\n\t\treturn this.items.slice(index < 0 ? this.items.length : index + 1);\n\t}\n\n\tprivate trim_pre_turn_context_updates(\n\t\tsnapshot: ResponseItem[],\n\t\tfirstInstructionTurnIndex: number,\n\t\tcutIndex: number,\n\t): number {\n\t\tlet nextCutIndex = cutIndex;\n\t\twhile (nextCutIndex > firstInstructionTurnIndex) {\n\t\t\tconst item = snapshot[nextCutIndex - 1];\n\t\t\tif (\n\t\t\t\titem?.type === \"message\" &&\n\t\t\t\titem.role === \"developer\" &&\n\t\t\t\tisContextualDevMessageContent(item.content)\n\t\t\t) {\n\t\t\t\tif (hasNonContextualDevMessageContent(item.content)) {\n\t\t\t\t\tthis.reference_context_item_value = null;\n\t\t\t\t}\n\t\t\t\tnextCutIndex -= 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\titem?.type === \"message\" &&\n\t\t\t\titem.role === \"user\" &&\n\t\t\t\tisContextualUserMessageContent(item.content)\n\t\t\t) {\n\t\t\t\tnextCutIndex -= 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t\treturn nextCutIndex;\n\t}\n}\n\nexport function processResponseItemForPrompt(\n\titem: ResponseItem,\n\tpolicy?: TruncationPolicy | null,\n): ResponseItem {\n\tconst policyWithSerializationBudget = scale_truncation_policy(policy, 1.2);\n\tswitch (item.type) {\n\t\tcase \"function_call_output\":\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\toutput: truncate_function_output_payload(\n\t\t\t\t\titem.output,\n\t\t\t\t\tpolicyWithSerializationBudget,\n\t\t\t\t),\n\t\t\t};\n\t\tcase \"custom_tool_call_output\":\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\toutput: truncate_function_output_payload(\n\t\t\t\t\titem.output,\n\t\t\t\t\tpolicyWithSerializationBudget,\n\t\t\t\t),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn item;\n\t}\n}\n\nexport function truncate_function_output_payload(\n\toutput: FunctionCallOutputPayload,\n\tpolicy?: TruncationPolicy | null,\n): FunctionCallOutputPayload {\n\treturn truncateFunctionOutputPayload(output, policy);\n}\n\nexport function isApiMessage(item: ResponseItem): boolean {\n\tif (item.type === \"message\") {\n\t\treturn item.role !== \"system\";\n\t}\n\treturn item.type !== \"other\";\n}\n\nexport function isUserTurnBoundary(item: ResponseItem): boolean {\n\treturn (\n\t\titem.type === \"message\" &&\n\t\titem.role === \"user\" &&\n\t\t!isContextualUserMessageContent(item.content)\n\t);\n}\n\nexport function dropLastNUserTurns(\n\titems: ResponseItem[],\n\tnumTurns: number,\n): ResponseItem[] {\n\tif (numTurns <= 0) {\n\t\treturn [...items];\n\t}\n\n\tlet next = [...items];\n\tfor (let remaining = numTurns; remaining > 0; remaining -= 1) {\n\t\tconst index = findLastUserTurnBoundary(next);\n\t\tif (index < 0) {\n\t\t\treturn [];\n\t\t}\n\t\tnext = next.slice(0, index);\n\t}\n\n\treturn next;\n}\n\nfunction findLastUserTurnBoundary(items: ResponseItem[]): number {\n\tfor (let index = items.length - 1; index >= 0; index -= 1) {\n\t\tif (isUserTurnBoundary(items[index] as ResponseItem)) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nexport function estimate_item_token_count(item: ResponseItem): number {\n\treturn approx_tokens_from_byte_count_i64(\n\t\testimate_response_item_model_visible_bytes(item),\n\t);\n}\n\nexport function estimate_response_item_model_visible_bytes(\n\titem: ResponseItem,\n): number {\n\tif (\n\t\t(item.type === \"reasoning\" ||\n\t\t\titem.type === \"compaction\" ||\n\t\t\titem.type === \"context_compaction\") &&\n\t\ttypeof item.encrypted_content === \"string\"\n\t) {\n\t\treturn estimateReasoningLength(item.encrypted_content.length);\n\t}\n\n\treturn utf8ByteLength(JSON.stringify(item));\n}\n\nfunction estimateReasoningLength(encodedLength: number): number {\n\treturn Math.max(0, Math.floor((encodedLength * 3) / 4) - 650);\n}\n\nfunction isModelGeneratedItem(item: ResponseItem): boolean {\n\treturn (\n\t\t(item.type === \"message\" && item.role === \"assistant\") ||\n\t\titem.type === \"reasoning\" ||\n\t\titem.type === \"function_call\" ||\n\t\titem.type === \"tool_search_call\" ||\n\t\titem.type === \"web_search_call\" ||\n\t\titem.type === \"image_generation_call\" ||\n\t\titem.type === \"custom_tool_call\" ||\n\t\titem.type === \"local_shell_call\" ||\n\t\titem.type === \"compaction\" ||\n\t\titem.type === \"context_compaction\"\n\t);\n}\n\nfunction userMessagePositions(items: ResponseItem[]): number[] {\n\treturn items.flatMap((item, index) =>\n\t\tisUserTurnBoundary(item) ? [index] : [],\n\t);\n}\n\nfunction findLastIndex<T>(\n\titems: readonly T[],\n\tpredicate: (item: T) => boolean,\n): number {\n\tfor (let index = items.length - 1; index >= 0; index -= 1) {\n\t\tif (predicate(items[index] as T)) {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction emptyTokenUsageInfo(): TokenUsageInfo {\n\tconst usage = emptyTokenUsage();\n\treturn {\n\t\ttotal_token_usage: { ...usage },\n\t\tlast_token_usage: { ...usage },\n\t\tmodel_context_window: null,\n\t};\n}\n\nfunction emptyTokenUsage(): TokenUsage {\n\treturn {\n\t\tinput_tokens: 0,\n\t\tcached_input_tokens: 0,\n\t\toutput_tokens: 0,\n\t\treasoning_output_tokens: 0,\n\t\ttotal_tokens: 0,\n\t};\n}\n\nfunction updateTokenInfoFromUsage(\n\tcurrent: TokenUsageInfo | null,\n\tusage: TokenUsage,\n\tmodelContextWindow: number | null,\n): TokenUsageInfo {\n\tconst previousTotal = current?.total_token_usage ?? emptyTokenUsage();\n\tconst total = {\n\t\tinput_tokens: previousTotal.input_tokens + usage.input_tokens,\n\t\tcached_input_tokens:\n\t\t\tpreviousTotal.cached_input_tokens + usage.cached_input_tokens,\n\t\toutput_tokens: previousTotal.output_tokens + usage.output_tokens,\n\t\treasoning_output_tokens:\n\t\t\tpreviousTotal.reasoning_output_tokens + usage.reasoning_output_tokens,\n\t\ttotal_tokens: previousTotal.total_tokens + usage.total_tokens,\n\t};\n\treturn {\n\t\ttotal_token_usage: total,\n\t\tlast_token_usage: { ...usage },\n\t\tmodel_context_window: modelContextWindow ?? current?.model_context_window ?? null,\n\t};\n}\n\nfunction utf8ByteLength(value: string): number {\n\treturn new TextEncoder().encode(value).byteLength;\n}\n","export type StreamOutput<T = string> = {\n\ttext: T;\n\ttruncated_after_lines?: number | null;\n};\n\nexport type ExecToolCallOutput = {\n\texit_code: number;\n\tstdout: StreamOutput<string>;\n\tstderr: StreamOutput<string>;\n\taggregated_output: StreamOutput<string>;\n\tduration_ms: number;\n\ttimed_out: boolean;\n};\n\nexport function streamOutput(text: string): StreamOutput<string> {\n\treturn {\n\t\ttext,\n\t\ttruncated_after_lines: null,\n\t};\n}\n\nexport function execToolCallOutput(input: {\n\texit_code: number;\n\tstdout?: string;\n\tstderr?: string;\n\tduration_ms?: number;\n\ttimed_out?: boolean;\n}): ExecToolCallOutput {\n\tconst stdout = input.stdout ?? \"\";\n\tconst stderr = input.stderr ?? \"\";\n\treturn {\n\t\texit_code: input.exit_code,\n\t\tstdout: streamOutput(stdout),\n\t\tstderr: streamOutput(stderr),\n\t\taggregated_output: streamOutput(`${stdout}${stderr}`),\n\t\tduration_ms: input.duration_ms ?? 0,\n\t\ttimed_out: input.timed_out ?? false,\n\t};\n}\n","import {\n\tHookEventName,\n\tHookExecutionMode,\n\tHookHandlerType,\n\tHookOutputEntryKind,\n\tHookRunStatus,\n\tHookScope,\n\tHookSource,\n\ttype HookCompletedEvent,\n\ttype HookOutputEntry,\n\ttype HookRunSummary,\n\ttype HookStartedEvent,\n} from \"../protocol\";\n\nexport {\n\tHookEventName,\n\tHookExecutionMode,\n\tHookHandlerType,\n\tHookOutputEntryKind,\n\tHookRunStatus,\n\tHookScope,\n\tHookSource,\n\ttype HookCompletedEvent,\n\ttype HookOutputEntry,\n\ttype HookRunSummary,\n\ttype HookStartedEvent,\n};\n\nexport const HOOK_EVENT_NAMES = [\n\t\"PreToolUse\",\n\t\"PermissionRequest\",\n\t\"PostToolUse\",\n\t\"PreCompact\",\n\t\"PostCompact\",\n\t\"SessionStart\",\n\t\"UserPromptSubmit\",\n\t\"Stop\",\n] as const;\n\nexport const HOOK_EVENT_NAMES_WITH_MATCHERS = [\n\t\"PreToolUse\",\n\t\"PermissionRequest\",\n\t\"PostToolUse\",\n\t\"PreCompact\",\n\t\"PostCompact\",\n\t\"SessionStart\",\n] as const;\n\nexport type ConfiguredHookHandler = {\n\tevent_name: HookEventName;\n\tmatcher?: string | null;\n\tname?: string | null;\n\tstatus_message?: string | null;\n\tsource_path?: string | null;\n\tsource?: HookSource;\n\tdisplay_order?: number;\n\trun?: (request: unknown) => Promise<HookHandlerResult> | HookHandlerResult;\n};\n\nexport type HookHandlerResult = {\n\tstatus?: HookRunStatus;\n\tentries?: HookOutputEntry[];\n\tadditional_contexts?: string[];\n\tblock_reason?: string | null;\n\tstop_reason?: string | null;\n\tfeedback_message?: string | null;\n\tpermission_decision?: PermissionRequestDecision | null;\n};\n\nexport const PermissionRequestDecision = {\n\tAllow: \"allow\",\n\tDeny: \"deny\",\n} as const;\n\nexport type PermissionRequestDecision =\n\t| { type: typeof PermissionRequestDecision.Allow }\n\t| { type: typeof PermissionRequestDecision.Deny; message?: string | null };\n\nexport function runningHookRunSummary(\n\thandler: ConfiguredHookHandler,\n\tnow = Date.now(),\n): HookRunSummary {\n\treturn {\n\t\tid: hookRunId(handler),\n\t\tevent_name: handler.event_name,\n\t\thandler_type: HookHandlerType.Command,\n\t\texecution_mode: HookExecutionMode.Sync,\n\t\tscope: scopeForHookEvent(handler.event_name),\n\t\tsource_path: handler.source_path ?? \"<codex-assistant-hooks>\",\n\t\tsource: handler.source ?? HookSource.Unknown,\n\t\tdisplay_order: handler.display_order ?? 0,\n\t\tstatus: HookRunStatus.Running,\n\t\tstatus_message: handler.status_message ?? null,\n\t\tstarted_at: Math.floor(now / 1000),\n\t\tcompleted_at: null,\n\t\tduration_ms: null,\n\t\tentries: [],\n\t};\n}\n\nexport function completedHookRunSummary(\n\thandler: ConfiguredHookHandler,\n\tresult: HookHandlerResult,\n\tinput: { started_at: number; completed_at?: number },\n): HookRunSummary {\n\tconst completedAt = input.completed_at ?? Date.now();\n\treturn {\n\t\t...runningHookRunSummary(handler, input.started_at * 1000),\n\t\tstatus: result.status ?? HookRunStatus.Completed,\n\t\tcompleted_at: Math.floor(completedAt / 1000),\n\t\tduration_ms: Math.max(0, completedAt - input.started_at * 1000),\n\t\tentries: result.entries ?? [],\n\t};\n}\n\nexport function hookRunId(handler: ConfiguredHookHandler): string {\n\tconst label = hookEventNameLabel(handler.event_name);\n\treturn `${label}:${handler.display_order ?? 0}:${handler.source_path ?? \"<codex-assistant-hooks>\"}`;\n}\n\nexport function scopeForHookEvent(eventName: HookEventName): HookScope {\n\treturn eventName === HookEventName.SessionStart ? HookScope.Thread : HookScope.Turn;\n}\n\nfunction hookEventNameLabel(eventName: HookEventName): string {\n\treturn eventName.replaceAll(\"_\", \"-\");\n}\n","import {\n\tHookEventName,\n\ttype ConfiguredHookHandler,\n} from \"./types\";\n\nexport function select_handlers(\n\thandlers: readonly ConfiguredHookHandler[],\n\teventName: HookEventName,\n\tmatcherInput?: string | null,\n): ConfiguredHookHandler[] {\n\tconst matcherInputs = matcherInput ? [matcherInput] : [];\n\treturn select_handlers_for_matcher_inputs(handlers, eventName, matcherInputs);\n}\n\nexport function select_handlers_for_matcher_inputs(\n\thandlers: readonly ConfiguredHookHandler[],\n\teventName: HookEventName,\n\tmatcherInputs: readonly string[],\n): ConfiguredHookHandler[] {\n\treturn handlers\n\t\t.filter((handler) => handler.event_name === eventName)\n\t\t.filter((handler) => {\n\t\t\tif (!hookEventUsesMatcher(eventName)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (matcherInputs.length === 0) {\n\t\t\t\treturn matches_matcher(handler.matcher, null);\n\t\t\t}\n\t\t\treturn matcherInputs.some((input) =>\n\t\t\t\tmatches_matcher(handler.matcher, input),\n\t\t\t);\n\t\t});\n}\n\nexport function matches_matcher(\n\tmatcher: string | null | undefined,\n\tinput: string | null,\n): boolean {\n\tif (matcher === undefined || matcher === null) {\n\t\treturn true;\n\t}\n\tif (matcher === \"\" || matcher === \"*\") {\n\t\treturn true;\n\t}\n\tif (isExactMatcher(matcher)) {\n\t\treturn input\n\t\t\t? matcher.split(\"|\").some((candidate) => candidate === input)\n\t\t\t: false;\n\t}\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn new RegExp(matcher).test(input);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function matcher_inputs(\n\ttoolName: string,\n\tmatcherAliases: readonly string[] = [],\n): string[] {\n\treturn [toolName, ...matcherAliases];\n}\n\nfunction hookEventUsesMatcher(eventName: HookEventName): boolean {\n\treturn (\n\t\teventName === HookEventName.PreToolUse ||\n\t\teventName === HookEventName.PermissionRequest ||\n\t\teventName === HookEventName.PostToolUse ||\n\t\teventName === HookEventName.PreCompact ||\n\t\teventName === HookEventName.PostCompact ||\n\t\teventName === HookEventName.SessionStart\n\t);\n}\n\nfunction isExactMatcher(matcher: string): boolean {\n\treturn /^[A-Za-z0-9_|]+$/u.test(matcher);\n}\n","import type { ToolSpec } from \"./tools/tool_spec\";\n\nexport const REQUEST_PERMISSIONS_TOOL_NAME = \"request_permissions\";\n\nexport const PermissionGrantScope = {\n\tTurn: \"turn\",\n\tSession: \"session\",\n} as const;\n\nexport type PermissionGrantScope =\n\t(typeof PermissionGrantScope)[keyof typeof PermissionGrantScope];\n\nexport const ReviewDecision = {\n\tApproved: \"approved\",\n\tApprovedForSession: \"approved_for_session\",\n\tDenied: \"denied\",\n\tAbort: \"abort\",\n\tTimedOut: \"timed_out\",\n} as const;\n\nexport type ReviewDecision =\n\t(typeof ReviewDecision)[keyof typeof ReviewDecision];\n\nexport type NetworkPermissions = {\n\tenabled?: boolean | null;\n\t[key: string]: unknown;\n};\n\nexport type FileSystemPermissions = {\n\tentries?: Array<Record<string, unknown>>;\n\t[key: string]: unknown;\n};\n\nexport type RequestPermissionProfile = {\n\tnetwork?: NetworkPermissions | null;\n\tfile_system?: FileSystemPermissions | null;\n};\n\nexport type RequestPermissionsArgs = {\n\treason?: string | null;\n\tpermissions: RequestPermissionProfile;\n};\n\nexport type RequestPermissionsResponse = {\n\tpermissions: RequestPermissionProfile;\n\tscope?: PermissionGrantScope;\n\tstrict_auto_review?: boolean;\n};\n\nexport type RequestPermissionsEvent = {\n\t/** Responses API call id for the associated tool call, if available. */\n\tcall_id: string;\n\t/** Turn id that this request belongs to. */\n\tturn_id: string;\n\treason?: string | null;\n\tpermissions: RequestPermissionProfile;\n\tcwd?: string | null;\n};\n\nexport function createRequestPermissionsTool(description: string): ToolSpec {\n\treturn {\n\t\ttype: \"function\",\n\t\tname: REQUEST_PERMISSIONS_TOOL_NAME,\n\t\tdescription,\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\treason: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional short explanation for why additional permissions are needed.\",\n\t\t\t\t},\n\t\t\t\tpermissions: permissionProfileSchema(),\n\t\t\t},\n\t\t\trequired: [\"permissions\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function requestPermissionsToolDescription(): string {\n\treturn \"Request extra permissions for this turn.\";\n}\n\nexport function normalizeRequestPermissionsArgs(\n\targs: RequestPermissionsArgs,\n): RequestPermissionsArgs {\n\tif (!args || typeof args !== \"object\") {\n\t\tthrow new Error(\"request_permissions requires an object argument\");\n\t}\n\n\tif (isEmptyRequestPermissionProfile(args.permissions)) {\n\t\tthrow new Error(\"request_permissions requires at least one permission\");\n\t}\n\n\treturn {\n\t\treason: args.reason ?? null,\n\t\tpermissions: cloneRequestPermissionProfile(args.permissions),\n\t};\n}\n\nexport function emptyRequestPermissionsResponse(): RequestPermissionsResponse {\n\treturn {\n\t\tpermissions: {},\n\t\tscope: PermissionGrantScope.Turn,\n\t\tstrict_auto_review: false,\n\t};\n}\n\nexport function deniedRequestPermissionsResponse(): RequestPermissionsResponse {\n\treturn emptyRequestPermissionsResponse();\n}\n\nexport function isEmptyRequestPermissionProfile(\n\tpermissions: RequestPermissionProfile | null | undefined,\n): boolean {\n\treturn !permissions || (!permissions.network && !permissions.file_system);\n}\n\nexport function cloneRequestPermissionProfile(\n\tpermissions: RequestPermissionProfile,\n): RequestPermissionProfile {\n\treturn JSON.parse(JSON.stringify(permissions)) as RequestPermissionProfile;\n}\n\nfunction permissionProfileSchema() {\n\treturn {\n\t\ttype: \"object\",\n\t\tproperties: {\n\t\t\tnetwork: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tdescription: \"Network permissions to request.\",\n\t\t\t\tadditionalProperties: true,\n\t\t\t},\n\t\t\tfile_system: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tdescription: \"File system permissions to request.\",\n\t\t\t\tadditionalProperties: true,\n\t\t\t},\n\t\t},\n\t\tadditionalProperties: false,\n\t};\n}\n","import { ContextualUserFragment } from \"../context/fragment\";\nimport type { ResponseItem } from \"../models\";\nimport {\n\tHookEventName,\n\tHookOutputEntryKind,\n\tHookRunStatus,\n\ttype HookCompletedEvent,\n\ttype HookRunSummary,\n} from \"../protocol\";\nimport {\n\tPermissionGrantScope,\n\ttype RequestPermissionsResponse,\n} from \"../request_permissions\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport {\n\tmatcher_inputs,\n\tselect_handlers,\n\tselect_handlers_for_matcher_inputs,\n} from \"./dispatcher\";\nimport {\n\tcompletedHookRunSummary,\n\trunningHookRunSummary,\n\ttype ConfiguredHookHandler,\n\ttype HookHandlerResult,\n\ttype PermissionRequestDecision,\n\tPermissionRequestDecision as PermissionRequestDecisionKind,\n} from \"./types\";\n\nexport type HookRuntimeOutcome = {\n\tshould_stop: boolean;\n\tstop_reason?: string | null;\n\tadditional_contexts: string[];\n};\n\nexport type SessionStartRequest = {\n\tsession_id: string;\n\tturn_id: string;\n\tcwd: string;\n\ttranscript_path?: string | null;\n\tmodel: string;\n\tpermission_mode: string;\n\tsource: string;\n};\n\nexport type UserPromptSubmitRequest = {\n\tsession_id: string;\n\tturn_id: string;\n\tcwd: string;\n\ttranscript_path?: string | null;\n\tmodel: string;\n\tpermission_mode: string;\n\tprompt: string;\n};\n\nexport type PreToolUseRequest = {\n\tsession_id: string;\n\tturn_id: string;\n\tcwd: string;\n\ttranscript_path?: string | null;\n\tmodel: string;\n\tpermission_mode: string;\n\ttool_name: string;\n\tmatcher_aliases: string[];\n\ttool_use_id: string;\n\ttool_input: unknown;\n};\n\nexport type PostToolUseRequest = PreToolUseRequest & {\n\ttool_response: unknown;\n};\n\nexport type PermissionRequestRequest = PreToolUseRequest & {\n\trun_id_suffix: string;\n};\n\nexport type CompactHookRequest = {\n\tsession_id: string;\n\tturn_id: string;\n\tcwd: string;\n\ttranscript_path?: string | null;\n\tmodel: string;\n\ttrigger: \"manual\" | \"auto\";\n};\n\nexport type PreToolUseOutcome = {\n\thook_events: HookCompletedEvent[];\n\tshould_block: boolean;\n\tblock_reason?: string | null;\n\tadditional_contexts: string[];\n};\n\nexport type PostToolUseOutcome = {\n\thook_events: HookCompletedEvent[];\n\tshould_stop: boolean;\n\tstop_reason?: string | null;\n\tfeedback_message?: string | null;\n\tadditional_contexts: string[];\n};\n\nexport type PermissionRequestOutcome = {\n\thook_events: HookCompletedEvent[];\n\tdecision?: PermissionRequestDecision | null;\n};\n\nexport class Hooks {\n\tprivate readonly handlers: ConfiguredHookHandler[];\n\n\tconstructor(handlers: readonly ConfiguredHookHandler[] = []) {\n\t\tthis.handlers = [...handlers];\n\t}\n\n\tstatic empty(): Hooks {\n\t\treturn new Hooks();\n\t}\n\n\tstatic withHandlersForTest(handlers: readonly ConfiguredHookHandler[]): Hooks {\n\t\treturn new Hooks(handlers);\n\t}\n\n\tis_empty(): boolean {\n\t\treturn this.handlers.length === 0;\n\t}\n\n\tpreview_session_start(request: SessionStartRequest): HookRunSummary[] {\n\t\treturn this.preview(HookEventName.SessionStart, [request.source]);\n\t}\n\n\tasync run_session_start(\n\t\trequest: SessionStartRequest,\n\t): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(HookEventName.SessionStart, request, [\n\t\t\trequest.source,\n\t\t]);\n\t}\n\n\tpreview_user_prompt_submit(): HookRunSummary[] {\n\t\treturn this.preview(HookEventName.UserPromptSubmit);\n\t}\n\n\tasync run_user_prompt_submit(\n\t\trequest: UserPromptSubmitRequest,\n\t): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(HookEventName.UserPromptSubmit, request);\n\t}\n\n\tpreview_pre_tool_use(request: PreToolUseRequest): HookRunSummary[] {\n\t\treturn this.preview(\n\t\t\tHookEventName.PreToolUse,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t}\n\n\tasync run_pre_tool_use(\n\t\trequest: PreToolUseRequest,\n\t): Promise<PreToolUseOutcome> {\n\t\tconst runs = await this.runMatching(\n\t\t\tHookEventName.PreToolUse,\n\t\t\trequest,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t\treturn {\n\t\t\thook_events: runs.events,\n\t\t\tshould_block: runs.results.some(\n\t\t\t\t(result) => result.status === HookRunStatus.Blocked || !!result.block_reason,\n\t\t\t),\n\t\t\tblock_reason:\n\t\t\t\truns.results.find((result) => result.block_reason)?.block_reason ?? null,\n\t\t\tadditional_contexts: runs.results.flatMap(\n\t\t\t\t(result) => result.additional_contexts ?? [],\n\t\t\t),\n\t\t};\n\t}\n\n\tpreview_post_tool_use(request: PostToolUseRequest): HookRunSummary[] {\n\t\treturn this.preview(\n\t\t\tHookEventName.PostToolUse,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t}\n\n\tasync run_post_tool_use(\n\t\trequest: PostToolUseRequest,\n\t): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(\n\t\t\tHookEventName.PostToolUse,\n\t\t\trequest,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t}\n\n\tpreview_permission_request(request: PermissionRequestRequest): HookRunSummary[] {\n\t\treturn this.preview(\n\t\t\tHookEventName.PermissionRequest,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t}\n\n\tasync run_permission_request(\n\t\trequest: PermissionRequestRequest,\n\t): Promise<PermissionRequestOutcome> {\n\t\tconst runs = await this.runMatching(\n\t\t\tHookEventName.PermissionRequest,\n\t\t\trequest,\n\t\t\tmatcher_inputs(request.tool_name, request.matcher_aliases),\n\t\t);\n\t\treturn {\n\t\t\thook_events: runs.events,\n\t\t\tdecision:\n\t\t\t\truns.results.find((result) => result.permission_decision)\n\t\t\t\t\t?.permission_decision ?? null,\n\t\t};\n\t}\n\n\tpreview_pre_compact(request: CompactHookRequest): HookRunSummary[] {\n\t\treturn this.preview(HookEventName.PreCompact, [request.trigger]);\n\t}\n\n\tasync run_pre_compact(request: CompactHookRequest): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(HookEventName.PreCompact, request, [\n\t\t\trequest.trigger,\n\t\t]);\n\t}\n\n\tpreview_post_compact(request: CompactHookRequest): HookRunSummary[] {\n\t\treturn this.preview(HookEventName.PostCompact, [request.trigger]);\n\t}\n\n\tasync run_post_compact(request: CompactHookRequest): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(HookEventName.PostCompact, request, [\n\t\t\trequest.trigger,\n\t\t]);\n\t}\n\n\tpreview_stop(): HookRunSummary[] {\n\t\treturn this.preview(HookEventName.Stop);\n\t}\n\n\tasync run_stop(request: CompactHookRequest): Promise<PostToolUseOutcome> {\n\t\treturn this.runContextInjecting(HookEventName.Stop, request);\n\t}\n\n\tprivate preview(\n\t\teventName: HookEventName,\n\t\tmatcherInputs: readonly string[] = [],\n\t): HookRunSummary[] {\n\t\treturn select_handlers_for_matcher_inputs(\n\t\t\tthis.handlers,\n\t\t\teventName,\n\t\t\tmatcherInputs,\n\t\t).map((handler) => runningHookRunSummary(handler));\n\t}\n\n\tprivate async runContextInjecting(\n\t\teventName: HookEventName,\n\t\trequest: unknown,\n\t\tmatcherInputs: readonly string[] = [],\n\t): Promise<PostToolUseOutcome> {\n\t\tconst runs = await this.runMatching(eventName, request, matcherInputs);\n\t\treturn {\n\t\t\thook_events: runs.events,\n\t\t\tshould_stop: runs.results.some(\n\t\t\t\t(result) => result.status === HookRunStatus.Stopped || !!result.stop_reason,\n\t\t\t),\n\t\t\tstop_reason:\n\t\t\t\truns.results.find((result) => result.stop_reason)?.stop_reason ?? null,\n\t\t\tfeedback_message:\n\t\t\t\truns.results.find((result) => result.feedback_message)\n\t\t\t\t\t?.feedback_message ?? null,\n\t\t\tadditional_contexts: runs.results.flatMap(\n\t\t\t\t(result) => result.additional_contexts ?? [],\n\t\t\t),\n\t\t};\n\t}\n\n\tprivate async runMatching(\n\t\teventName: HookEventName,\n\t\trequest: unknown,\n\t\tmatcherInputs: readonly string[] = [],\n\t): Promise<{ events: HookCompletedEvent[]; results: HookHandlerResult[] }> {\n\t\tconst handlers =\n\t\t\tmatcherInputs.length === 0\n\t\t\t\t? select_handlers(this.handlers, eventName)\n\t\t\t\t: select_handlers_for_matcher_inputs(\n\t\t\t\t\t\tthis.handlers,\n\t\t\t\t\t\teventName,\n\t\t\t\t\t\tmatcherInputs,\n\t\t\t\t\t);\n\t\tconst events: HookCompletedEvent[] = [];\n\t\tconst results: HookHandlerResult[] = [];\n\t\tfor (const handler of handlers) {\n\t\t\tconst started = runningHookRunSummary(handler);\n\t\t\tconst result = await Promise.resolve(handler.run?.(request) ?? {});\n\t\t\tconst normalized = normalizeHookHandlerResult(result);\n\t\t\tresults.push(normalized);\n\t\t\tevents.push({\n\t\t\t\tturn_id: turnIdFromRequest(request),\n\t\t\t\trun: completedHookRunSummary(handler, normalized, {\n\t\t\t\t\tstarted_at: started.started_at,\n\t\t\t\t}),\n\t\t\t});\n\t\t}\n\t\treturn { events, results };\n\t}\n}\n\nexport async function run_session_start_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tsource = \"startup\",\n): Promise<boolean> {\n\tif (session.hooks().is_empty()) {\n\t\treturn false;\n\t}\n\tconst request: SessionStartRequest = {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\tpermission_mode: turnContext.approval_policy,\n\t\tsource,\n\t};\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(\n\t\tsession,\n\t\tturnContext,\n\t\thooks.preview_session_start(request),\n\t);\n\tconst outcome = await hooks.run_session_start(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\treturn outcome.should_stop;\n}\n\nexport async function run_user_prompt_submit_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tprompt: string,\n): Promise<HookRuntimeOutcome> {\n\tif (session.hooks().is_empty()) {\n\t\treturn { should_stop: false, additional_contexts: [] };\n\t}\n\tconst request: UserPromptSubmitRequest = {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\tpermission_mode: turnContext.approval_policy,\n\t\tprompt,\n\t};\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(\n\t\tsession,\n\t\tturnContext,\n\t\thooks.preview_user_prompt_submit(),\n\t);\n\tconst outcome = await hooks.run_user_prompt_submit(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\treturn {\n\t\tshould_stop: outcome.should_stop,\n\t\tstop_reason: outcome.stop_reason,\n\t\tadditional_contexts: outcome.additional_contexts,\n\t};\n}\n\nexport async function run_pre_tool_use_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tinput: {\n\t\ttool_use_id: string;\n\t\ttool_name: string;\n\t\tmatcher_aliases?: string[];\n\t\ttool_input: unknown;\n\t},\n): Promise<string | null> {\n\tif (session.hooks().is_empty()) {\n\t\treturn null;\n\t}\n\tconst request: PreToolUseRequest = {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\tpermission_mode: turnContext.approval_policy,\n\t\ttool_name: input.tool_name,\n\t\tmatcher_aliases: input.matcher_aliases ?? [],\n\t\ttool_use_id: input.tool_use_id,\n\t\ttool_input: input.tool_input,\n\t};\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(\n\t\tsession,\n\t\tturnContext,\n\t\thooks.preview_pre_tool_use(request),\n\t);\n\tconst outcome = await hooks.run_pre_tool_use(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\tif (!outcome.should_block) {\n\t\treturn null;\n\t}\n\treturn `Tool call blocked by PreToolUse hook: ${outcome.block_reason ?? \"blocked\"}. Tool: ${input.tool_name}`;\n}\n\nexport async function run_post_tool_use_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tinput: {\n\t\ttool_use_id: string;\n\t\ttool_name: string;\n\t\tmatcher_aliases?: string[];\n\t\ttool_input: unknown;\n\t\ttool_response: unknown;\n\t},\n): Promise<PostToolUseOutcome> {\n\tif (session.hooks().is_empty()) {\n\t\treturn {\n\t\t\thook_events: [],\n\t\t\tshould_stop: false,\n\t\t\tstop_reason: null,\n\t\t\tfeedback_message: null,\n\t\t\tadditional_contexts: [],\n\t\t};\n\t}\n\tconst request: PostToolUseRequest = {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\tpermission_mode: turnContext.approval_policy,\n\t\ttool_name: input.tool_name,\n\t\tmatcher_aliases: input.matcher_aliases ?? [],\n\t\ttool_use_id: input.tool_use_id,\n\t\ttool_input: input.tool_input,\n\t\ttool_response: input.tool_response,\n\t};\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(\n\t\tsession,\n\t\tturnContext,\n\t\thooks.preview_post_tool_use(request),\n\t);\n\tconst outcome = await hooks.run_post_tool_use(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\treturn outcome;\n}\n\nexport async function run_permission_request_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tinput: {\n\t\trun_id_suffix: string;\n\t\ttool_name: string;\n\t\tmatcher_aliases?: string[];\n\t\ttool_input: unknown;\n\t},\n): Promise<PermissionRequestDecision | null> {\n\tif (session.hooks().is_empty()) {\n\t\treturn null;\n\t}\n\tconst request: PermissionRequestRequest = {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\tpermission_mode: turnContext.approval_policy,\n\t\ttool_name: input.tool_name,\n\t\tmatcher_aliases: input.matcher_aliases ?? [],\n\t\ttool_use_id: input.run_id_suffix,\n\t\trun_id_suffix: input.run_id_suffix,\n\t\ttool_input: input.tool_input,\n\t};\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(\n\t\tsession,\n\t\tturnContext,\n\t\thooks.preview_permission_request(request),\n\t);\n\tconst outcome = await hooks.run_permission_request(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\treturn outcome.decision ?? null;\n}\n\nexport async function run_pre_compact_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\ttrigger: \"manual\" | \"auto\" = \"manual\",\n): Promise<HookRuntimeOutcome> {\n\tif (session.hooks().is_empty()) {\n\t\treturn { should_stop: false, additional_contexts: [] };\n\t}\n\tconst outcome = await run_compact_hooks(\n\t\tsession,\n\t\tturnContext,\n\t\tHookEventName.PreCompact,\n\t\ttrigger,\n\t);\n\treturn outcome;\n}\n\nexport async function run_post_compact_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\ttrigger: \"manual\" | \"auto\" = \"manual\",\n): Promise<HookRuntimeOutcome> {\n\tif (session.hooks().is_empty()) {\n\t\treturn { should_stop: false, additional_contexts: [] };\n\t}\n\treturn run_compact_hooks(session, turnContext, HookEventName.PostCompact, trigger);\n}\n\nexport async function run_stop_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n): Promise<HookRuntimeOutcome> {\n\tif (session.hooks().is_empty()) {\n\t\treturn { should_stop: false, additional_contexts: [] };\n\t}\n\tconst request = compactHookRequest(session, turnContext, \"manual\");\n\tconst hooks = session.hooks();\n\tawait emit_hook_started_events(session, turnContext, hooks.preview_stop());\n\tconst outcome = await hooks.run_stop(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\treturn {\n\t\tshould_stop: outcome.should_stop,\n\t\tstop_reason: outcome.stop_reason,\n\t\tadditional_contexts: outcome.additional_contexts,\n\t};\n}\n\nexport function hookAdditionalContextResponseItem(text: string): ResponseItem {\n\treturn new ContextualUserFragment({\n\t\trole: \"developer\",\n\t\tstart_marker: \"<hook_additional_context>\",\n\t\tend_marker: \"</hook_additional_context>\",\n\t\tbody: () => `\\n${text.trim()}\\n`,\n\t}).toResponseItem();\n}\n\nexport async function record_additional_contexts(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tcontexts: readonly string[],\n): Promise<void> {\n\tconst items = contexts\n\t\t.map((context) => context.trim())\n\t\t.filter(Boolean)\n\t\t.map(hookAdditionalContextResponseItem);\n\tif (items.length === 0) {\n\t\treturn;\n\t}\n\tawait session.record_conversation_items(turnContext, items);\n}\n\nasync function run_compact_hooks(\n\tsession: Session,\n\tturnContext: TurnContext,\n\teventName:\n\t\t| typeof HookEventName.PreCompact\n\t\t| typeof HookEventName.PostCompact,\n\ttrigger: \"manual\" | \"auto\",\n): Promise<HookRuntimeOutcome> {\n\tconst request = compactHookRequest(session, turnContext, trigger);\n\tconst hooks = session.hooks();\n\tconst preview =\n\t\teventName === HookEventName.PreCompact\n\t\t\t? hooks.preview_pre_compact(request)\n\t\t\t: hooks.preview_post_compact(request);\n\tawait emit_hook_started_events(session, turnContext, preview);\n\tconst outcome =\n\t\teventName === HookEventName.PreCompact\n\t\t\t? await hooks.run_pre_compact(request)\n\t\t\t: await hooks.run_post_compact(request);\n\tawait emit_hook_completed_events(session, turnContext, outcome.hook_events);\n\tawait record_additional_contexts(\n\t\tsession,\n\t\tturnContext,\n\t\toutcome.additional_contexts,\n\t);\n\treturn {\n\t\tshould_stop: outcome.should_stop,\n\t\tstop_reason: outcome.stop_reason,\n\t\tadditional_contexts: outcome.additional_contexts,\n\t};\n}\n\nasync function emit_hook_started_events(\n\tsession: Session,\n\tturnContext: TurnContext,\n\truns: readonly HookRunSummary[],\n): Promise<void> {\n\tfor (const run of runs) {\n\t\tawait session.send_event(turnContext, {\n\t\t\ttype: \"hook_started\",\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\trun,\n\t\t});\n\t}\n}\n\nasync function emit_hook_completed_events(\n\tsession: Session,\n\tturnContext: TurnContext,\n\tevents: readonly HookCompletedEvent[],\n): Promise<void> {\n\tfor (const event of events) {\n\t\tawait session.send_event(turnContext, {\n\t\t\ttype: \"hook_completed\",\n\t\t\tturn_id: event.turn_id ?? turnContext.sub_id,\n\t\t\trun: event.run,\n\t\t});\n\t}\n}\n\nfunction compactHookRequest(\n\tsession: Session,\n\tturnContext: TurnContext,\n\ttrigger: \"manual\" | \"auto\",\n): CompactHookRequest {\n\treturn {\n\t\tsession_id: session.threadId,\n\t\tturn_id: turnContext.sub_id,\n\t\tcwd: turnContext.cwd,\n\t\tmodel: turnContext.model,\n\t\ttrigger,\n\t};\n}\n\nfunction normalizeHookHandlerResult(\n\tresult: HookHandlerResult,\n): HookHandlerResult {\n\tconst entries = [...(result.entries ?? [])];\n\tconst additionalContexts = [...(result.additional_contexts ?? [])];\n\tfor (const context of additionalContexts) {\n\t\tentries.push({ kind: HookOutputEntryKind.Context, text: context });\n\t}\n\tif (result.block_reason) {\n\t\tentries.push({ kind: HookOutputEntryKind.Feedback, text: result.block_reason });\n\t}\n\tif (result.stop_reason) {\n\t\tentries.push({ kind: HookOutputEntryKind.Stop, text: result.stop_reason });\n\t}\n\treturn {\n\t\t...result,\n\t\tentries,\n\t\tstatus:\n\t\t\tresult.status ??\n\t\t\t(result.block_reason\n\t\t\t\t? HookRunStatus.Blocked\n\t\t\t\t: result.stop_reason\n\t\t\t\t\t? HookRunStatus.Stopped\n\t\t\t\t\t: HookRunStatus.Completed),\n\t\tadditional_contexts: additionalContexts,\n\t};\n}\n\nfunction turnIdFromRequest(request: unknown): string | null {\n\treturn typeof request === \"object\" &&\n\t\trequest !== null &&\n\t\t\"turn_id\" in request &&\n\t\ttypeof request.turn_id === \"string\"\n\t\t? request.turn_id\n\t\t: null;\n}\n\nexport function requestPermissionsResponseFromDecision(\n\tdecision: PermissionRequestDecision | null,\n): RequestPermissionsResponse | null {\n\tif (!decision) {\n\t\treturn null;\n\t}\n\tif (decision.type === PermissionRequestDecisionKind.Allow) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tpermissions: {},\n\t\tscope: PermissionGrantScope.Turn,\n\t\tstrict_auto_review: false,\n\t};\n}\n","import type { ThreadId } from \"../ids\";\nimport type { ResponseItem, ThreadGoal, ThreadGoalStatus } from \"../protocol\";\n\nexport type ThreadGoalUpdate = {\n\tstatus?: ThreadGoalStatus;\n\ttoken_budget?: number | null;\n\texpected_goal_id?: string | null;\n};\n\nexport const ThreadGoalAccountingMode = {\n\tActiveStatusOnly: \"active_status_only\",\n\tActiveOnly: \"active_only\",\n\tActiveOrComplete: \"active_or_complete\",\n\tActiveOrStopped: \"active_or_stopped\",\n} as const;\n\nexport type ThreadGoalAccountingMode =\n\t(typeof ThreadGoalAccountingMode)[keyof typeof ThreadGoalAccountingMode];\n\nexport type ThreadGoalAccountingOutcome =\n\t| { type: \"updated\"; goal: ThreadGoal }\n\t| { type: \"unchanged\"; goal: ThreadGoal | null };\n\nexport type ThreadGoalStore = {\n\tgetThreadGoal(threadId: ThreadId): Promise<ThreadGoal | null>;\n\treplaceThreadGoal(params: {\n\t\tthread_id: ThreadId;\n\t\tobjective: string;\n\t\tstatus: ThreadGoalStatus;\n\t\ttoken_budget?: number | null;\n\t}): Promise<ThreadGoal>;\n\tinsertThreadGoal(params: {\n\t\tthread_id: ThreadId;\n\t\tobjective: string;\n\t\tstatus: ThreadGoalStatus;\n\t\ttoken_budget?: number | null;\n\t}): Promise<ThreadGoal>;\n\tupdateThreadGoal(params: {\n\t\tthread_id: ThreadId;\n\t\tupdate: ThreadGoalUpdate;\n\t}): Promise<ThreadGoal>;\n\tpauseActiveThreadGoal(threadId: ThreadId): Promise<ThreadGoal | null>;\n\tdeleteThreadGoal(threadId: ThreadId): Promise<void>;\n\taccountThreadGoalUsage(params: {\n\t\tthread_id: ThreadId;\n\t\ttokens_used_delta?: number;\n\t\ttime_used_seconds_delta?: number;\n\t\tmode?: ThreadGoalAccountingMode;\n\t}): Promise<ThreadGoalAccountingOutcome>;\n};\n\nexport type GoalRuntimeEvent =\n\t| { type: \"turn_started\"; turn_id: string; total_tokens: number }\n\t| { type: \"tool_completed\"; turn_id: string; tool_name: string; total_tokens: number }\n\t| { type: \"tool_completed_goal\"; turn_id: string; total_tokens: number }\n\t| { type: \"turn_finished\"; turn_id: string; total_tokens: number }\n\t| { type: \"task_aborted\"; turn_id: string; total_tokens: number }\n\t| { type: \"thread_resumed\" };\n\nexport type GoalRuntimeApplyResult = {\n\tgoal_updated?: ThreadGoal | null;\n};\n\nexport type GoalTurnAccountingSnapshot = {\n\ttotal_tokens: number;\n\tstarted_at_ms: number;\n\tlast_accounted_total_tokens: number;\n\tlast_accounted_at_ms: number;\n};\n\nexport type CreateGoalRequest = {\n\tobjective: string;\n\ttoken_budget?: number | null;\n};\n\nexport type SetGoalRequest = {\n\tobjective?: string | null;\n\tstatus?: ThreadGoalStatus | null;\n\ttoken_budget?: number | null;\n};\n\nexport type GoalToolOutput = {\n\tgoal: ThreadGoal | null;\n\tremaining_token_budget: number | null;\n};\n\nexport type GoalSteeringItem = ResponseItem;\n","import {\n\tThreadGoalStatus,\n\tvalidateThreadGoalObjective,\n\ttype ResponseItem,\n\ttype ThreadGoal,\n\ttype TokenUsageInfo,\n} from \"../protocol\";\nimport type { ThreadId } from \"../ids\";\nimport { renderCoreTemplate } from \"../templates\";\nimport {\n\tThreadGoalAccountingMode,\n\ttype CreateGoalRequest,\n\ttype GoalRuntimeApplyResult,\n\ttype GoalRuntimeEvent,\n\ttype GoalToolOutput,\n\ttype GoalTurnAccountingSnapshot,\n\ttype SetGoalRequest,\n\ttype ThreadGoalStore,\n} from \"./types\";\n\nexport class GoalRuntimeState {\n\tprivate readonly turn_snapshots = new Map<string, GoalTurnAccountingSnapshot>();\n\tprivate budget_limit_reported_goal_id: string | null = null;\n\n\tconstructor(\n\t\tprivate readonly params: {\n\t\t\tthread_id: ThreadId;\n\t\t\tstore?: ThreadGoalStore | null;\n\t\t\tnow?: () => number;\n\t\t},\n\t) {}\n\n\tasync get_thread_goal(): Promise<ThreadGoal | null> {\n\t\treturn this.params.store?.getThreadGoal(this.params.thread_id) ?? null;\n\t}\n\n\tasync create_thread_goal(request: CreateGoalRequest): Promise<ThreadGoal> {\n\t\tconst objective = request.objective.trim();\n\t\tvalidateThreadGoalObjective(objective);\n\t\tvalidateTokenBudget(request.token_budget);\n\t\tconst store = this.require_store();\n\t\tconst existing = await store.getThreadGoal(this.params.thread_id);\n\t\tif (existing) {\n\t\t\tthrow new Error(\n\t\t\t\t\"cannot create a new goal because this thread already has a goal; use update_goal only when the existing goal is complete\",\n\t\t\t);\n\t\t}\n\t\tthis.budget_limit_reported_goal_id = null;\n\t\treturn store.insertThreadGoal({\n\t\t\tthread_id: this.params.thread_id,\n\t\t\tobjective,\n\t\t\tstatus: ThreadGoalStatus.Active,\n\t\t\ttoken_budget: request.token_budget ?? null,\n\t\t});\n\t}\n\n\tasync set_thread_goal(request: SetGoalRequest): Promise<ThreadGoal> {\n\t\tconst store = this.require_store();\n\t\tconst existing = await store.getThreadGoal(this.params.thread_id);\n\t\tif (request.objective !== undefined && request.objective !== null) {\n\t\t\tconst objective = request.objective.trim();\n\t\t\tvalidateThreadGoalObjective(objective);\n\t\t\tvalidateTokenBudget(request.token_budget);\n\t\t\tconst status = request.status ?? ThreadGoalStatus.Active;\n\t\t\tif (\n\t\t\t\texisting &&\n\t\t\t\texisting.status !== ThreadGoalStatus.Complete &&\n\t\t\t\texisting.objective === objective\n\t\t\t) {\n\t\t\t\treturn store.updateThreadGoal({\n\t\t\t\t\tthread_id: this.params.thread_id,\n\t\t\t\t\tupdate: {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\ttoken_budget: request.token_budget ?? existing.token_budget ?? null,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.budget_limit_reported_goal_id = null;\n\t\t\treturn store.replaceThreadGoal({\n\t\t\t\tthread_id: this.params.thread_id,\n\t\t\t\tobjective,\n\t\t\t\tstatus,\n\t\t\t\ttoken_budget: request.token_budget ?? null,\n\t\t\t});\n\t\t}\n\n\t\tif (!existing) {\n\t\t\tthrow new Error(\"cannot update goal because this thread has no goal\");\n\t\t}\n\t\treturn store.updateThreadGoal({\n\t\t\tthread_id: this.params.thread_id,\n\t\t\tupdate: {\n\t\t\t\tstatus: request.status ?? undefined,\n\t\t\t\ttoken_budget:\n\t\t\t\t\trequest.token_budget === undefined ? undefined : request.token_budget,\n\t\t\t},\n\t\t});\n\t}\n\n\tasync update_thread_goal_complete(): Promise<ThreadGoal> {\n\t\tconst store = this.require_store();\n\t\treturn store.updateThreadGoal({\n\t\t\tthread_id: this.params.thread_id,\n\t\t\tupdate: { status: ThreadGoalStatus.Complete },\n\t\t});\n\t}\n\n\tasync clear_thread_goal(): Promise<void> {\n\t\tthis.turn_snapshots.clear();\n\t\tthis.budget_limit_reported_goal_id = null;\n\t\tawait this.require_store().deleteThreadGoal(this.params.thread_id);\n\t}\n\n\tasync apply(event: GoalRuntimeEvent): Promise<GoalRuntimeApplyResult> {\n\t\tif (!this.params.store) {\n\t\t\treturn {};\n\t\t}\n\t\tswitch (event.type) {\n\t\t\tcase \"turn_started\":\n\t\t\t\tthis.mark_thread_goal_turn_started(event.turn_id, event.total_tokens);\n\t\t\t\treturn {};\n\t\t\tcase \"tool_completed\":\n\t\t\t\tif (event.tool_name === UPDATE_GOAL_TOOL_NAME) {\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t\treturn this.account_thread_goal_progress(event.turn_id, event.total_tokens);\n\t\t\tcase \"tool_completed_goal\":\n\t\t\t\treturn this.account_thread_goal_progress(event.turn_id, event.total_tokens);\n\t\t\tcase \"turn_finished\":\n\t\t\t\treturn this.finish_thread_goal_turn(event.turn_id, event.total_tokens);\n\t\t\tcase \"task_aborted\":\n\t\t\t\treturn this.handle_thread_goal_task_abort(event.turn_id, event.total_tokens);\n\t\t\tcase \"thread_resumed\":\n\t\t\t\treturn {};\n\t\t}\n\t}\n\n\tasync budget_limit_steering_items(): Promise<ResponseItem[]> {\n\t\tconst goal = await this.get_thread_goal();\n\t\tif (!goal || goal.status !== ThreadGoalStatus.BudgetLimited) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [budget_limit_steering_item(goal)];\n\t}\n\n\tformat_tool_output(goal: ThreadGoal | null): GoalToolOutput {\n\t\treturn {\n\t\t\tgoal,\n\t\t\tremaining_token_budget: remainingTokenBudget(goal),\n\t\t};\n\t}\n\n\tprivate mark_thread_goal_turn_started(turnId: string, totalTokens: number): void {\n\t\tconst now = this.now();\n\t\tthis.turn_snapshots.set(turnId, {\n\t\t\ttotal_tokens: totalTokens,\n\t\t\tstarted_at_ms: now,\n\t\t\tlast_accounted_total_tokens: totalTokens,\n\t\t\tlast_accounted_at_ms: now,\n\t\t});\n\t}\n\n\tprivate async finish_thread_goal_turn(\n\t\tturnId: string,\n\t\ttotalTokens: number,\n\t): Promise<GoalRuntimeApplyResult> {\n\t\tconst result = await this.account_thread_goal_progress(turnId, totalTokens);\n\t\tthis.turn_snapshots.delete(turnId);\n\t\treturn result;\n\t}\n\n\tprivate async handle_thread_goal_task_abort(\n\t\tturnId: string,\n\t\ttotalTokens: number,\n\t): Promise<GoalRuntimeApplyResult> {\n\t\tawait this.account_thread_goal_progress(turnId, totalTokens);\n\t\tthis.turn_snapshots.delete(turnId);\n\t\tconst goal = await this.params.store?.pauseActiveThreadGoal(this.params.thread_id);\n\t\treturn { goal_updated: goal ?? null };\n\t}\n\n\tprivate async account_thread_goal_progress(\n\t\tturnId: string,\n\t\ttotalTokens: number,\n\t): Promise<GoalRuntimeApplyResult> {\n\t\tconst snapshot = this.turn_snapshots.get(turnId);\n\t\tif (!snapshot || !this.params.store) {\n\t\t\treturn {};\n\t\t}\n\t\tconst now = this.now();\n\t\tconst tokensDelta = Math.max(0, totalTokens - snapshot.last_accounted_total_tokens);\n\t\tconst secondsDelta = Math.max(\n\t\t\t0,\n\t\t\tMath.floor((now - snapshot.last_accounted_at_ms) / 1000),\n\t\t);\n\t\tif (tokensDelta === 0 && secondsDelta === 0) {\n\t\t\treturn {};\n\t\t}\n\t\tsnapshot.last_accounted_total_tokens = totalTokens;\n\t\tsnapshot.last_accounted_at_ms = now;\n\t\tconst outcome = await this.params.store.accountThreadGoalUsage({\n\t\t\tthread_id: this.params.thread_id,\n\t\t\ttokens_used_delta: tokensDelta,\n\t\t\ttime_used_seconds_delta: secondsDelta,\n\t\t\tmode: ThreadGoalAccountingMode.ActiveOnly,\n\t\t});\n\t\tif (outcome.type !== \"updated\" || !outcome.goal) {\n\t\t\treturn {};\n\t\t}\n\t\tif (\n\t\t\toutcome.goal.status === ThreadGoalStatus.BudgetLimited &&\n\t\t\tthis.budget_limit_reported_goal_id === outcome.goal.thread_id\n\t\t) {\n\t\t\treturn {};\n\t\t}\n\t\tif (outcome.goal.status === ThreadGoalStatus.BudgetLimited) {\n\t\t\tthis.budget_limit_reported_goal_id = outcome.goal.thread_id;\n\t\t}\n\t\treturn { goal_updated: outcome.goal };\n\t}\n\n\tprivate require_store(): ThreadGoalStore {\n\t\tif (!this.params.store) {\n\t\t\tthrow new Error(\"thread goals are unavailable for this session\");\n\t\t}\n\t\treturn this.params.store;\n\t}\n\n\tprivate now(): number {\n\t\treturn this.params.now?.() ?? Date.now();\n\t}\n}\n\nexport function totalTokensFromTokenUsageInfo(\n\tinfo: TokenUsageInfo | null,\n): number {\n\treturn info?.total_token_usage.total_tokens ?? 0;\n}\n\nexport function goalToolOutput(goal: ThreadGoal | null): GoalToolOutput {\n\treturn {\n\t\tgoal,\n\t\tremaining_token_budget: remainingTokenBudget(goal),\n\t};\n}\n\nexport function remainingTokenBudget(goal: ThreadGoal | null): number | null {\n\tif (!goal || goal.token_budget == null) {\n\t\treturn null;\n\t}\n\treturn Math.max(0, goal.token_budget - goal.tokens_used);\n}\n\nexport function budget_limit_prompt(goal: ThreadGoal): string {\n\tconst remaining = remainingTokenBudget(goal);\n\treturn renderCoreTemplate(\"goals/budget_limit.md\", {\n\t\tobjective: goal.objective,\n\t\ttime_used_seconds: goal.time_used_seconds,\n\t\ttokens_used: goal.tokens_used,\n\t\ttoken_budget: goal.token_budget ?? \"none\",\n\t\tremaining_token_budget: remaining ?? \"unknown\",\n\t});\n}\n\nexport function budget_limit_steering_item(goal: ThreadGoal): ResponseItem {\n\treturn {\n\t\ttype: \"message\",\n\t\trole: \"user\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"input_text\",\n\t\t\t\ttext: `<thread_goal_budget_limit>\\n${budget_limit_prompt(goal)}\\n</thread_goal_budget_limit>`,\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction validateTokenBudget(value: number | null | undefined): void {\n\tif (value == null) {\n\t\treturn;\n\t}\n\tif (!Number.isInteger(value) || value <= 0) {\n\t\tthrow new Error(\"goal token_budget must be a positive integer\");\n\t}\n}\n\nconst UPDATE_GOAL_TOOL_NAME = \"update_goal\";\n","export type CodexBrand<TValue, TBrand extends string> = TValue & {\n\treadonly __codexBrand: TBrand;\n};\n\nexport type ThreadId = CodexBrand<string, \"ThreadId\">;\n\nexport function asThreadId(value: string): ThreadId {\n\tconst uuidPattern =\n\t\t/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;\n\tif (!uuidPattern.test(value)) {\n\t\tthrow new Error(`Invalid ThreadId: ${value}`);\n\t}\n\n\treturn value as ThreadId;\n}\n","export const ThreadMemoryMode = {\n\tEnabled: \"Enabled\",\n\tDisabled: \"Disabled\",\n} as const;\n\nexport type ThreadMemoryMode =\n\t(typeof ThreadMemoryMode)[keyof typeof ThreadMemoryMode];\n\nexport const ThreadMemoryModeSessionMetaValue = {\n\tEnabled: \"enabled\",\n\tDisabled: \"disabled\",\n} as const;\n\nexport type ThreadMemoryModeSessionMetaValue =\n\t(typeof ThreadMemoryModeSessionMetaValue)[keyof typeof ThreadMemoryModeSessionMetaValue];\n\nexport function threadMemoryModeToSessionMetaValue(\n\tmode: ThreadMemoryMode,\n): ThreadMemoryModeSessionMetaValue {\n\tswitch (mode) {\n\t\tcase ThreadMemoryMode.Enabled:\n\t\t\treturn ThreadMemoryModeSessionMetaValue.Enabled;\n\t\tcase ThreadMemoryMode.Disabled:\n\t\t\treturn ThreadMemoryModeSessionMetaValue.Disabled;\n\t}\n}\n\nexport type MemoryCitation = {\n\tentries: MemoryCitationEntry[];\n\trolloutIds: string[];\n};\n\nexport type MemoryCitationEntry = {\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tnote: string;\n};\n","import { CODEX_APPS_MCP_SERVER_NAME } from \"./mod\";\nimport type { McpServerTransportConfig } from \"../rmcp_client\";\n\nexport type McpAuthStatus =\n\t| \"unsupported\"\n\t| \"notLoggedIn\"\n\t| \"bearerToken\"\n\t| \"oAuth\";\n\nexport type OAuthCredentialsStoreMode = unknown;\n\nexport type McpServerConfig = {\n\tenabled?: boolean;\n\ttransport: McpServerTransportConfig;\n\tscopes?: readonly string[] | null;\n\toauth_tokens_present?: boolean | null;\n\tstartup_timeout_sec?: number | null;\n};\n\nexport type CodexMcpAuthLike = {\n\tuses_codex_backend?: boolean | (() => boolean | null | undefined) | null;\n};\n\nexport type McpOAuthLoginConfig = {\n\turl: string;\n\thttp_headers?: Record<string, string> | null;\n\tenv_http_headers?: Record<string, string> | null;\n\tdiscovered_scopes?: string[] | null;\n};\n\nexport type McpOAuthLoginSupport =\n\t| { type: \"Supported\"; config: McpOAuthLoginConfig }\n\t| { type: \"Unsupported\" }\n\t| { type: \"Unknown\"; error: Error };\n\nexport const McpOAuthLoginSupport = {\n\tSupported(config: McpOAuthLoginConfig): McpOAuthLoginSupport {\n\t\treturn { type: \"Supported\", config };\n\t},\n\tUnsupported: { type: \"Unsupported\" } as McpOAuthLoginSupport,\n\tUnknown(error: unknown): McpOAuthLoginSupport {\n\t\treturn {\n\t\t\ttype: \"Unknown\",\n\t\t\terror: error instanceof Error ? error : new Error(String(error)),\n\t\t};\n\t},\n} as const;\n\nexport const McpOAuthScopesSource = {\n\tExplicit: \"Explicit\",\n\tConfigured: \"Configured\",\n\tDiscovered: \"Discovered\",\n\tEmpty: \"Empty\",\n} as const;\n\nexport type McpOAuthScopesSource =\n\t(typeof McpOAuthScopesSource)[keyof typeof McpOAuthScopesSource];\n\nexport type ResolvedMcpOAuthScopes = {\n\tscopes: string[];\n\tsource: McpOAuthScopesSource;\n};\n\nexport type McpAuthStatusEntry = {\n\tconfig: McpServerConfig;\n\tauth_status: McpAuthStatus;\n};\n\nexport class OAuthProviderError extends Error {\n\tconstructor(\n\t\treadonly error?: string | null,\n\t\treadonly error_description?: string | null,\n\t) {\n\t\tsuper(error_description ?? error ?? \"OAuth provider error\");\n\t\tthis.name = \"OAuthProviderError\";\n\t}\n}\n\nexport async function oauth_login_support(\n\ttransport: McpServerTransportConfig,\n): Promise<McpOAuthLoginSupport> {\n\tif (transport.type !== \"streamable_http\" || transport.bearer_token_env_var) {\n\t\treturn McpOAuthLoginSupport.Unsupported;\n\t}\n\n\ttry {\n\t\tconst discovery = await discover_streamable_http_oauth(\n\t\t\ttransport.url,\n\t\t\ttransport.http_headers,\n\t\t\ttransport.env_http_headers,\n\t\t);\n\t\treturn discovery\n\t\t\t? McpOAuthLoginSupport.Supported({\n\t\t\t\t\turl: transport.url,\n\t\t\t\t\thttp_headers: transport.http_headers ?? null,\n\t\t\t\t\tenv_http_headers: transport.env_http_headers ?? null,\n\t\t\t\t\tdiscovered_scopes: discovery.scopes_supported ?? null,\n\t\t\t\t})\n\t\t\t: McpOAuthLoginSupport.Unsupported;\n\t} catch (error) {\n\t\treturn McpOAuthLoginSupport.Unknown(error);\n\t}\n}\n\nexport async function discover_supported_scopes(\n\ttransport: McpServerTransportConfig,\n): Promise<string[] | null> {\n\tconst support = await oauth_login_support(transport);\n\treturn support.type === \"Supported\"\n\t\t? (support.config.discovered_scopes ?? null)\n\t\t: null;\n}\n\nexport function resolve_oauth_scopes(\n\texplicit_scopes?: readonly string[] | null,\n\tconfigured_scopes?: readonly string[] | null,\n\tdiscovered_scopes?: readonly string[] | null,\n): ResolvedMcpOAuthScopes {\n\tif (explicit_scopes) {\n\t\treturn {\n\t\t\tscopes: [...explicit_scopes],\n\t\t\tsource: McpOAuthScopesSource.Explicit,\n\t\t};\n\t}\n\tif (configured_scopes) {\n\t\treturn {\n\t\t\tscopes: [...configured_scopes],\n\t\t\tsource: McpOAuthScopesSource.Configured,\n\t\t};\n\t}\n\tif (discovered_scopes && discovered_scopes.length > 0) {\n\t\treturn {\n\t\t\tscopes: [...discovered_scopes],\n\t\t\tsource: McpOAuthScopesSource.Discovered,\n\t\t};\n\t}\n\treturn {\n\t\tscopes: [],\n\t\tsource: McpOAuthScopesSource.Empty,\n\t};\n}\n\nexport function should_retry_without_scopes(\n\tscopes: ResolvedMcpOAuthScopes,\n\terror: unknown,\n): boolean {\n\treturn (\n\t\tscopes.source === McpOAuthScopesSource.Discovered &&\n\t\terror instanceof OAuthProviderError\n\t);\n}\n\nexport async function compute_auth_statuses(\n\tservers:\n\t\t| ReadonlyMap<string, McpServerConfig>\n\t| Record<string, McpServerConfig>\n\t| Iterable<[string, McpServerConfig]>,\n\tstore_mode?: OAuthCredentialsStoreMode,\n\tauth?: CodexMcpAuthLike | null,\n): Promise<Map<string, McpAuthStatusEntry>> {\n\tconst entries = normalize_server_entries(servers);\n\tconst output = new Map<string, McpAuthStatusEntry>();\n\tawait Promise.all(\n\t\tentries.map(async ([name, config]) => {\n\t\t\tconst hasRuntimeAuth =\n\t\t\t\tname === CODEX_APPS_MCP_SERVER_NAME &&\n\t\t\t\tcodex_auth_uses_backend(auth) &&\n\t\t\t\tconfig.transport.type === \"streamable_http\" &&\n\t\t\t\t!config.transport.bearer_token_env_var;\n\t\t\tlet authStatus: McpAuthStatus;\n\t\t\ttry {\n\t\t\t\tauthStatus = await compute_auth_status(\n\t\t\t\t\tname,\n\t\t\t\t\tconfig,\n\t\t\t\t\tstore_mode,\n\t\t\t\t\thasRuntimeAuth,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\tauthStatus = \"unsupported\";\n\t\t\t}\n\t\t\toutput.set(name, {\n\t\t\t\tconfig,\n\t\t\t\tauth_status: authStatus,\n\t\t\t});\n\t\t}),\n\t);\n\treturn output;\n}\n\nexport async function compute_auth_status(\n\tserver_name: string,\n\tconfig: McpServerConfig,\n\t_store_mode?: OAuthCredentialsStoreMode,\n\thas_runtime_auth = false,\n): Promise<McpAuthStatus> {\n\tif (config.enabled === false) {\n\t\treturn \"unsupported\";\n\t}\n\tif (has_runtime_auth) {\n\t\treturn \"bearerToken\";\n\t}\n\tif (config.transport.type === \"stdio\") {\n\t\treturn \"unsupported\";\n\t}\n\tif (config.transport.bearer_token_env_var) {\n\t\treturn \"bearerToken\";\n\t}\n\tif (has_authorization_header(config.transport.http_headers)) {\n\t\treturn \"bearerToken\";\n\t}\n\tif (\n\t\tconfig.oauth_tokens_present === true ||\n\t\tconfig.transport.oauth_tokens_present === true\n\t) {\n\t\treturn \"oAuth\";\n\t}\n\n\tconst support = await oauth_login_support(config.transport);\n\tif (support.type === \"Supported\") {\n\t\treturn \"notLoggedIn\";\n\t}\n\tif (support.type === \"Unknown\" && server_name.length === 0) {\n\t\treturn \"unsupported\";\n\t}\n\treturn \"unsupported\";\n}\n\nexport type StreamableHttpOAuthDiscovery = {\n\tscopes_supported?: string[] | null;\n};\n\nexport async function discover_streamable_http_oauth(\n\turl: string,\n\thttp_headers?: Record<string, string> | null,\n\tenv_http_headers?: Record<string, string> | null,\n): Promise<StreamableHttpOAuthDiscovery | null> {\n\tif (!globalThis.fetch) {\n\t\treturn null;\n\t}\n\tconst baseUrl = new URL(url);\n\tconst headers = {\n\t\t...http_headers,\n\t\t...env_http_headers,\n\t\t\"MCP-Protocol-Version\": \"2024-11-05\",\n\t};\n\tlet lastError: unknown = null;\n\tfor (const path of discovery_paths(baseUrl.pathname)) {\n\t\tconst discoveryUrl = new URL(baseUrl.toString());\n\t\tdiscoveryUrl.pathname = path;\n\t\ttry {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), 5_000);\n\t\t\tconst response = await fetch(discoveryUrl, {\n\t\t\t\theaders,\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\t\t\tclearTimeout(timeout);\n\t\t\tif (!response.ok) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst metadata = (await response.json()) as {\n\t\t\t\tauthorization_endpoint?: unknown;\n\t\t\t\ttoken_endpoint?: unknown;\n\t\t\t\tscopes_supported?: unknown;\n\t\t\t};\n\t\t\tif (\n\t\t\t\ttypeof metadata.authorization_endpoint === \"string\" &&\n\t\t\t\ttypeof metadata.token_endpoint === \"string\"\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tscopes_supported: normalize_scopes(metadata.scopes_supported),\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t}\n\t}\n\tif (lastError instanceof Error && lastError.name !== \"AbortError\") {\n\t\treturn null;\n\t}\n\treturn null;\n}\n\nexport function discovery_paths(base_path: string): string[] {\n\tconst trimmed = base_path.replace(/^\\/+|\\/+$/g, \"\");\n\tconst canonical = \"/.well-known/oauth-authorization-server\";\n\tif (!trimmed) {\n\t\treturn [canonical];\n\t}\n\tconst candidates = [\n\t\t`${canonical}/${trimmed}`,\n\t\t`/${trimmed}/.well-known/oauth-authorization-server`,\n\t\tcanonical,\n\t];\n\treturn [...new Set(candidates)];\n}\n\nfunction normalize_scopes(value: unknown): string[] | null {\n\tif (!Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tconst normalized: string[] = [];\n\tfor (const item of value) {\n\t\tif (typeof item !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst scope = item.trim();\n\t\tif (scope && !normalized.includes(scope)) {\n\t\t\tnormalized.push(scope);\n\t\t}\n\t}\n\treturn normalized.length > 0 ? normalized : null;\n}\n\nfunction normalize_server_entries(\n\tservers:\n\t\t| ReadonlyMap<string, McpServerConfig>\n\t\t| Record<string, McpServerConfig>\n\t\t| Iterable<[string, McpServerConfig]>,\n): Array<[string, McpServerConfig]> {\n\tif (servers instanceof Map) {\n\t\treturn [...servers.entries()];\n\t}\n\tif (typeof (servers as Iterable<[string, McpServerConfig]>)[Symbol.iterator] === \"function\") {\n\t\treturn [...(servers as Iterable<[string, McpServerConfig]>)];\n\t}\n\treturn Object.entries(servers as Record<string, McpServerConfig>);\n}\n\nfunction codex_auth_uses_backend(auth?: CodexMcpAuthLike | null): boolean {\n\tconst value = auth?.uses_codex_backend;\n\treturn Boolean(typeof value === \"function\" ? value() : value);\n}\n\nfunction has_authorization_header(\n\theaders?: Record<string, string> | null,\n): boolean {\n\treturn Object.keys(headers ?? {}).some(\n\t\t(header) => header.toLowerCase() === \"authorization\",\n\t);\n}\n","export const MCP_TOOL_NAME_PREFIX = \"mcp\";\nexport const MCP_TOOL_NAME_DELIMITER = \"__\";\nexport const CODEX_APPS_MCP_SERVER_NAME = \"codex_apps\";\n\nexport function sanitize_responses_api_tool_name(name: string): string {\n\tlet sanitized = \"\";\n\tfor (const char of name) {\n\t\tsanitized += /[A-Za-z0-9_]/.test(char) ? char : \"_\";\n\t}\n\treturn sanitized.length > 0 ? sanitized : \"_\";\n}\n\nexport function qualified_mcp_tool_name_prefix(serverName: string): string {\n\treturn sanitize_responses_api_tool_name(\n\t\t`${MCP_TOOL_NAME_PREFIX}${MCP_TOOL_NAME_DELIMITER}${serverName}${MCP_TOOL_NAME_DELIMITER}`,\n\t);\n}\n\nexport * from \"./auth\";\n\nexport class ToolPluginProvenance {\n\tprivate readonly plugin_display_names_by_connector_id = new Map<\n\t\tstring,\n\t\tstring[]\n\t>();\n\tprivate readonly plugin_display_names_by_mcp_server_name = new Map<\n\t\tstring,\n\t\tstring[]\n\t>();\n\n\tconstructor(input: {\n\t\tplugin_display_names_by_connector_id?: ReadonlyMap<string, readonly string[]> | Record<string, readonly string[]>;\n\t\tplugin_display_names_by_mcp_server_name?: ReadonlyMap<string, readonly string[]> | Record<string, readonly string[]>;\n\t} = {}) {\n\t\tfor (const [connectorId, names] of map_entries(\n\t\t\tinput.plugin_display_names_by_connector_id,\n\t\t)) {\n\t\t\tthis.plugin_display_names_by_connector_id.set(connectorId, [...names]);\n\t\t}\n\t\tfor (const [serverName, names] of map_entries(\n\t\t\tinput.plugin_display_names_by_mcp_server_name,\n\t\t)) {\n\t\t\tthis.plugin_display_names_by_mcp_server_name.set(serverName, [...names]);\n\t\t}\n\t}\n\n\tplugin_display_names_for_connector_id(connectorId: string): readonly string[] {\n\t\treturn this.plugin_display_names_by_connector_id.get(connectorId) ?? [];\n\t}\n\n\tplugin_display_names_for_mcp_server_name(serverName: string): readonly string[] {\n\t\treturn this.plugin_display_names_by_mcp_server_name.get(serverName) ?? [];\n\t}\n}\n\nfunction map_entries(\n\tinput?: ReadonlyMap<string, readonly string[]> | Record<string, readonly string[]>,\n): Array<[string, readonly string[]]> {\n\tif (!input) {\n\t\treturn [];\n\t}\n\treturn input instanceof Map ? [...input.entries()] : Object.entries(input);\n}\n","import type { ThreadId } from \"../ids\";\nimport type { ResponseInputItem } from \"../models\";\nimport {\n\tqualified_mcp_tool_name_prefix,\n\tsanitize_responses_api_tool_name,\n} from \"../../../codex-mcp/src/mcp/mod\";\n\nexport type McpRequestId = string | number;\n\nexport const McpServerStartupState = {\n\tStarting: \"starting\",\n\tReady: \"ready\",\n\tFailed: \"failed\",\n\tCancelled: \"cancelled\",\n} as const;\n\nexport type McpServerStartupState =\n\t(typeof McpServerStartupState)[keyof typeof McpServerStartupState];\n\nexport type McpAuthStatus =\n\t| \"unsupported\"\n\t| \"notLoggedIn\"\n\t| \"bearerToken\"\n\t| \"oAuth\";\n\nexport type McpServerStatus = {\n\tname: string;\n\tstartup_state: McpServerStartupState;\n\terror?: string | null;\n\ttools?: McpToolInfo[];\n\tresources?: McpResourceInfo[];\n\tresource_templates?: McpResourceTemplateInfo[];\n\tauth_status?: McpAuthStatus;\n\tauthStatus?: McpAuthStatus;\n\toauth?: {\n\t\tstatus: \"not_required\" | \"required\" | \"authenticated\" | \"failed\";\n\t\terror?: string | null;\n\t} | null;\n};\n\nexport type McpServerStatusDetail = \"full\" | \"toolsAndAuthOnly\";\n\nexport type McpServerStatusListOptions = {\n\tdetail?: McpServerStatusDetail | null;\n};\n\nexport type McpServerRegistry = {\n\tservers: Record<string, unknown>;\n};\n\nexport type McpServerRefreshConfig = {\n\tmcp_servers: Record<string, unknown>;\n\tmcp_oauth_credentials_store_mode?: unknown;\n};\n\nexport type McpRuntimeEnvironment = {\n\tcwd: string;\n\tenvironment_id?: string | null;\n};\n\nexport type McpToolInfo = {\n\t/** Raw MCP server name used to route protocol calls. */\n\tserver_name: string;\n\t/** Raw MCP tool name sent back to the MCP server. */\n\tname: string;\n\t/** Model-visible namespace. Defaults to Codex's qualified MCP namespace. */\n\tcallable_namespace?: string | null;\n\t/** Model-visible tool name. Defaults to `name` for simple hosts. */\n\tcallable_name?: string | null;\n\tnamespace_description?: string | null;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\tinput_schema?: unknown;\n\tconnector_id?: string | null;\n\tconnector_name?: string | null;\n\tplugin_display_names?: string[];\n\tsource_label?: string | null;\n\tmcp_app_resource_uri?: string | null;\n};\n\nexport type McpResourceInfo = {\n\turi: string;\n\tname?: string | null;\n\tdescription?: string | null;\n\tmime_type?: string | null;\n};\n\nexport type McpResourceTemplateInfo = McpResourceInfo & {\n\turi_template: string;\n};\n\nexport type McpResourceReadParams = {\n\tthread_id?: ThreadId | null;\n\tserver_name: string;\n\turi: string;\n};\n\nexport type McpResourceListParams = {\n\tthread_id?: ThreadId | null;\n\tserver_name?: string | null;\n\tcursor?: string | null;\n};\n\nexport type McpResourceListResponse = {\n\tserver_name?: string | null;\n\tresources: McpResourceInfo[];\n\tnext_cursor?: string | null;\n};\n\nexport type McpResourceTemplateListResponse = {\n\tserver_name?: string | null;\n\tresource_templates: McpResourceTemplateInfo[];\n\tnext_cursor?: string | null;\n};\n\nexport type McpResourceReadResponse = {\n\tserver_name: string;\n\turi: string;\n\tcontents: unknown[];\n};\n\nexport type McpServerToolCallParams = {\n\tthread_id: ThreadId;\n\tcall_id?: string | null;\n\tserver_name: string;\n\ttool_name: string;\n\targuments?: unknown;\n\tmeta?: unknown;\n};\n\nexport type McpServerToolCallResponse = {\n\tcall_id?: string | null;\n\tserver_name: string;\n\ttool_name: string;\n\toutput: unknown;\n\tresponse_item?: ResponseInputItem | null;\n};\n\nexport type McpServerOauthLoginParams = {\n\tname: string;\n};\n\nexport type McpServerOauthLoginResponse = {\n\tstatus: \"unsupported\" | \"started\";\n\tname: string;\n\tmessage?: string | null;\n};\n\nexport type McpServerElicitationRequest =\n\t| {\n\t\t\ttype: \"form\";\n\t\t\tmeta?: unknown;\n\t\t\tmessage: string;\n\t\t\trequested_schema: unknown;\n\t }\n\t| {\n\t\t\ttype: \"url\";\n\t\t\tmeta?: unknown;\n\t\t\tmessage: string;\n\t\t\turl: string;\n\t\t\telicitation_id?: string | null;\n\t };\n\nexport type McpServerElicitationAction = \"accept\" | \"decline\" | \"cancel\";\n\nexport type McpServerElicitationResponse = {\n\taction: McpServerElicitationAction;\n\tcontent?: unknown;\n\tmeta?: unknown;\n};\n\nexport type McpServerElicitationRequestEvent = {\n\tturn_id: string;\n\tserver_name: string;\n\tid: McpRequestId;\n\trequest: McpServerElicitationRequest;\n};\n\nexport type McpServerElicitationResponseOp = {\n\ttype: \"mcp_server_elicitation_response\";\n\tserver_name: string;\n\tid: McpRequestId;\n\tresponse: McpServerElicitationResponse;\n};\n\nexport type McpToolCallProgressEvent = {\n\tcall_id: string;\n\tturn_id?: string | null;\n\tserver_name: string;\n\ttool_name: string;\n\tmessage?: string | null;\n\tprogress?: unknown;\n};\n\nexport type McpServerStatusUpdatedEvent = {\n\tstatus: McpServerStatus;\n};\n\nexport type McpServerOauthLoginCompletedEvent = {\n\tname: string;\n\tstatus: \"completed\" | \"failed\" | \"cancelled\";\n\terror?: string | null;\n};\n\nexport function mcpToolDisplayName(tool: McpToolInfo): string {\n\treturn `${mcpToolCallableNamespace(tool)}.${mcpToolCallableName(tool)}`;\n}\n\nexport function mcpToolCallableNamespace(tool: McpToolInfo): string {\n\tconst namespace =\n\t\tnormalizeMcpToolNamePart(tool.callable_namespace) ??\n\t\tqualified_mcp_tool_name_prefix(tool.server_name);\n\treturn sanitize_responses_api_tool_name(namespace);\n}\n\nexport function mcpToolCallableName(tool: McpToolInfo): string {\n\treturn sanitize_responses_api_tool_name(\n\t\tnormalizeMcpToolNamePart(tool.callable_name) ?? tool.name,\n\t);\n}\n\nfunction normalizeMcpToolNamePart(value?: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : null;\n}\n","import {\n\tMCP_TOOL_NAME_DELIMITER,\n\tqualified_mcp_tool_name_prefix,\n\tsanitize_responses_api_tool_name,\n} from \"./mcp/mod\";\n\nexport const MCP_TOOLS_CACHE_WRITE_DURATION_METRIC =\n\t\"codex.mcp.tools.cache_write.duration_ms\";\n\nexport type ToolInfo = {\n\tserver_name: string;\n\tname: string;\n\tcallable_name?: string | null;\n\tcallable_namespace?: string | null;\n\tnamespace_description?: string | null;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\tinput_schema?: unknown;\n\tmeta?: unknown;\n\tconnector_id?: string | null;\n\tconnector_name?: string | null;\n\tplugin_display_names?: string[];\n\tsource_label?: string | null;\n\tmcp_app_resource_uri?: string | null;\n};\n\nexport type QualifiedToolInfo<T extends ToolInfo = ToolInfo> = T & {\n\tcallable_name: string;\n\tcallable_namespace: string;\n\tplugin_display_names: string[];\n};\n\nexport class ToolFilter {\n\tconstructor(\n\t\treadonly enabled: ReadonlySet<string> | null = null,\n\t\treadonly disabled: ReadonlySet<string> = new Set(),\n\t) {}\n\n\tstatic from_config(config: {\n\t\tenabled_tools?: readonly string[] | null;\n\t\tdisabled_tools?: readonly string[] | null;\n\t}): ToolFilter {\n\t\treturn new ToolFilter(\n\t\t\tconfig.enabled_tools ? new Set(config.enabled_tools) : null,\n\t\t\tnew Set(config.disabled_tools ?? []),\n\t\t);\n\t}\n\n\tallows(toolName: string): boolean {\n\t\tif (this.enabled && !this.enabled.has(toolName)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !this.disabled.has(toolName);\n\t}\n}\n\nexport function declared_openai_file_input_param_names(\n\tmeta: unknown,\n): string[] {\n\tif (!isRecord(meta)) {\n\t\treturn [];\n\t}\n\tconst params = meta[META_OPENAI_FILE_PARAMS];\n\treturn Array.isArray(params)\n\t\t? params.filter((value): value is string => typeof value === \"string\" && value.length > 0)\n\t\t: [];\n}\n\nexport function tool_with_model_visible_input_schema<T extends ToolInfo>(\n\ttool: T,\n): T {\n\tconst fileParams = declared_openai_file_input_param_names(tool.meta);\n\tif (fileParams.length === 0 || !isRecord(tool.input_schema)) {\n\t\treturn { ...tool };\n\t}\n\n\tconst inputSchema = structuredClone(tool.input_schema) as Record<string, unknown>;\n\tconst properties = inputSchema.properties;\n\tif (isRecord(properties)) {\n\t\tfor (const fieldName of fileParams) {\n\t\t\tconst propertySchema = properties[fieldName];\n\t\t\tif (isRecord(propertySchema)) {\n\t\t\t\tproperties[fieldName] = masked_input_property_schema(propertySchema);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\t...tool,\n\t\tinput_schema: inputSchema,\n\t};\n}\n\nexport function filter_tools<T extends ToolInfo>(\n\ttools: readonly T[],\n\tfilter: ToolFilter,\n): T[] {\n\treturn tools.filter((tool) => filter.allows(tool.name));\n}\n\nexport function qualify_tools<T extends ToolInfo>(\n\ttools: Iterable<T>,\n): Map<string, QualifiedToolInfo<T>> {\n\tconst seenRawNames = new Set<string>();\n\tconst candidates: CallableToolCandidate<T>[] = [];\n\n\tfor (const inputTool of tools) {\n\t\tconst tool = normalize_tool_info(inputTool);\n\t\tconst rawNamespaceIdentity = [\n\t\t\ttool.server_name,\n\t\t\ttool.callable_namespace,\n\t\t\ttool.connector_id ?? \"\",\n\t\t].join(\"\\0\");\n\t\tconst rawToolIdentity = [\n\t\t\trawNamespaceIdentity,\n\t\t\ttool.callable_name,\n\t\t\ttool.name,\n\t\t].join(\"\\0\");\n\t\tif (seenRawNames.has(rawToolIdentity)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseenRawNames.add(rawToolIdentity);\n\t\tcandidates.push({\n\t\t\ttool,\n\t\t\traw_namespace_identity: rawNamespaceIdentity,\n\t\t\traw_tool_identity: rawToolIdentity,\n\t\t\tcallable_namespace: sanitize_responses_api_tool_name(\n\t\t\t\ttool.callable_namespace,\n\t\t\t),\n\t\t\tcallable_name: sanitize_responses_api_tool_name(tool.callable_name),\n\t\t});\n\t}\n\n\tconst namespaceIdentitiesByBase = new Map<string, Set<string>>();\n\tfor (const candidate of candidates) {\n\t\tconst identities =\n\t\t\tnamespaceIdentitiesByBase.get(candidate.callable_namespace) ?? new Set();\n\t\tidentities.add(candidate.raw_namespace_identity);\n\t\tnamespaceIdentitiesByBase.set(candidate.callable_namespace, identities);\n\t}\n\tconst collidingNamespaces = new Set(\n\t\t[...namespaceIdentitiesByBase.entries()]\n\t\t\t.filter(([, identities]) => identities.size > 1)\n\t\t\t.map(([namespace]) => namespace),\n\t);\n\tfor (const candidate of candidates) {\n\t\tif (collidingNamespaces.has(candidate.callable_namespace)) {\n\t\t\tcandidate.callable_namespace = append_namespace_hash_suffix(\n\t\t\t\tcandidate.callable_namespace,\n\t\t\t\tcandidate.raw_namespace_identity,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst toolIdentitiesByBase = new Map<string, Set<string>>();\n\tfor (const candidate of candidates) {\n\t\tconst key = `${candidate.callable_namespace}\\0${candidate.callable_name}`;\n\t\tconst identities = toolIdentitiesByBase.get(key) ?? new Set();\n\t\tidentities.add(candidate.raw_tool_identity);\n\t\ttoolIdentitiesByBase.set(key, identities);\n\t}\n\tconst collidingTools = new Set(\n\t\t[...toolIdentitiesByBase.entries()]\n\t\t\t.filter(([, identities]) => identities.size > 1)\n\t\t\t.map(([key]) => key),\n\t);\n\tfor (const candidate of candidates) {\n\t\tconst key = `${candidate.callable_namespace}\\0${candidate.callable_name}`;\n\t\tif (collidingTools.has(key)) {\n\t\t\tcandidate.callable_name = append_hash_suffix(\n\t\t\t\tcandidate.callable_name,\n\t\t\t\tcandidate.raw_tool_identity,\n\t\t\t);\n\t\t}\n\t}\n\n\tcandidates.sort((left, right) =>\n\t\tleft.raw_tool_identity.localeCompare(right.raw_tool_identity),\n\t);\n\n\tconst usedNames = new Set<string>();\n\tconst qualifiedTools = new Map<string, QualifiedToolInfo<T>>();\n\tfor (const candidate of candidates) {\n\t\tconst [callableNamespace, callableName, qualifiedName] =\n\t\t\tunique_callable_parts(\n\t\t\t\tcandidate.callable_namespace,\n\t\t\t\tcandidate.callable_name,\n\t\t\t\tcandidate.raw_tool_identity,\n\t\t\t\tusedNames,\n\t\t\t);\n\t\tconst tool = {\n\t\t\t...candidate.tool,\n\t\t\tcallable_namespace: callableNamespace,\n\t\t\tcallable_name: callableName,\n\t\t};\n\t\tqualifiedTools.set(qualifiedName, tool);\n\t}\n\n\treturn qualifiedTools;\n}\n\nexport function qualify_tool_infos<T extends ToolInfo>(\n\ttools: readonly T[],\n): Array<QualifiedToolInfo<T>> {\n\treturn [...qualify_tools(tools).values()];\n}\n\ntype CallableToolCandidate<T extends ToolInfo> = {\n\ttool: QualifiedToolInfo<T>;\n\traw_namespace_identity: string;\n\traw_tool_identity: string;\n\tcallable_namespace: string;\n\tcallable_name: string;\n};\n\nconst MAX_TOOL_NAME_LENGTH = 64;\nconst CALLABLE_NAME_HASH_LEN = 12;\nconst META_OPENAI_FILE_PARAMS = \"openai/fileParams\";\nconst FILE_PATH_GUIDANCE =\n\t\"This parameter expects an absolute local file path. If you want to upload a file, provide the absolute path to that file here.\";\n\nfunction normalize_tool_info<T extends ToolInfo>(tool: T): QualifiedToolInfo<T> {\n\treturn {\n\t\t...tool,\n\t\tcallable_namespace:\n\t\t\tnormalize_string(tool.callable_namespace) ??\n\t\t\tqualified_mcp_tool_name_prefix(tool.server_name),\n\t\tcallable_name: normalize_string(tool.callable_name) ?? tool.name,\n\t\tplugin_display_names: [...(tool.plugin_display_names ?? [])],\n\t};\n}\n\nfunction masked_input_property_schema(\n\tschema: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst existingDescription =\n\t\ttypeof schema.description === \"string\" ? schema.description : \"\";\n\tconst description = existingDescription\n\t\t? existingDescription.includes(FILE_PATH_GUIDANCE)\n\t\t\t? existingDescription\n\t\t\t: `${existingDescription} ${FILE_PATH_GUIDANCE}`\n\t\t: FILE_PATH_GUIDANCE;\n\tconst isArray = schema.type === \"array\" || \"items\" in schema;\n\n\treturn isArray\n\t\t? {\n\t\t\t\tdescription,\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: { type: \"string\" },\n\t\t\t}\n\t\t: {\n\t\t\t\tdescription,\n\t\t\t\ttype: \"string\",\n\t\t\t};\n}\n\nfunction callable_name_hash_suffix(rawIdentity: string): string {\n\treturn `_${sha1_hex(rawIdentity).slice(0, CALLABLE_NAME_HASH_LEN)}`;\n}\n\nfunction append_hash_suffix(value: string, rawIdentity: string): string {\n\treturn `${value}${callable_name_hash_suffix(rawIdentity)}`;\n}\n\nfunction append_namespace_hash_suffix(\n\tnamespace: string,\n\trawIdentity: string,\n): string {\n\tif (namespace.endsWith(MCP_TOOL_NAME_DELIMITER)) {\n\t\treturn `${namespace.slice(\n\t\t\t0,\n\t\t\t-MCP_TOOL_NAME_DELIMITER.length,\n\t\t)}${callable_name_hash_suffix(rawIdentity)}${MCP_TOOL_NAME_DELIMITER}`;\n\t}\n\treturn append_hash_suffix(namespace, rawIdentity);\n}\n\nfunction truncate_name(value: string, maxLength: number): string {\n\treturn [...value].slice(0, maxLength).join(\"\");\n}\n\nfunction fit_callable_parts_with_hash(\n\tnamespace: string,\n\ttoolName: string,\n\trawIdentity: string,\n): [string, string] {\n\tconst suffix = callable_name_hash_suffix(rawIdentity);\n\tconst maxToolLength = Math.max(0, MAX_TOOL_NAME_LENGTH - namespace.length);\n\tif (maxToolLength >= suffix.length) {\n\t\tconst prefixLength = maxToolLength - suffix.length;\n\t\treturn [namespace, `${truncate_name(toolName, prefixLength)}${suffix}`];\n\t}\n\n\tconst maxNamespaceLength = MAX_TOOL_NAME_LENGTH - suffix.length;\n\treturn [truncate_name(namespace, maxNamespaceLength), suffix];\n}\n\nfunction unique_callable_parts(\n\tnamespace: string,\n\ttoolName: string,\n\trawIdentity: string,\n\tusedNames: Set<string>,\n): [string, string, string] {\n\tconst qualifiedName = `${namespace}${toolName}`;\n\tif (qualifiedName.length <= MAX_TOOL_NAME_LENGTH && !usedNames.has(qualifiedName)) {\n\t\tusedNames.add(qualifiedName);\n\t\treturn [namespace, toolName, qualifiedName];\n\t}\n\n\tlet attempt = 0;\n\tfor (;;) {\n\t\tconst hashInput = attempt === 0 ? rawIdentity : `${rawIdentity}\\0${attempt}`;\n\t\tconst [candidateNamespace, candidateToolName] =\n\t\t\tfit_callable_parts_with_hash(namespace, toolName, hashInput);\n\t\tconst candidateName = `${candidateNamespace}${candidateToolName}`;\n\t\tif (!usedNames.has(candidateName)) {\n\t\t\tusedNames.add(candidateName);\n\t\t\treturn [candidateNamespace, candidateToolName, candidateName];\n\t\t}\n\t\tattempt += 1;\n\t}\n}\n\nfunction sha1_hex(input: string): string {\n\tconst bytes = [...new TextEncoder().encode(input)];\n\tconst bitLength = bytes.length * 8;\n\tbytes.push(0x80);\n\twhile (bytes.length % 64 !== 56) {\n\t\tbytes.push(0);\n\t}\n\tfor (let shift = 56; shift >= 0; shift -= 8) {\n\t\tbytes.push(Math.floor(bitLength / 2 ** shift) & 0xff);\n\t}\n\n\tlet h0 = 0x67452301;\n\tlet h1 = 0xefcdab89;\n\tlet h2 = 0x98badcfe;\n\tlet h3 = 0x10325476;\n\tlet h4 = 0xc3d2e1f0;\n\n\tfor (let offset = 0; offset < bytes.length; offset += 64) {\n\t\tconst words = new Array<number>(80).fill(0);\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst index = offset + i * 4;\n\t\t\twords[i] =\n\t\t\t\t((bytes[index] ?? 0) << 24) |\n\t\t\t\t((bytes[index + 1] ?? 0) << 16) |\n\t\t\t\t((bytes[index + 2] ?? 0) << 8) |\n\t\t\t\t(bytes[index + 3] ?? 0);\n\t\t}\n\t\tfor (let i = 16; i < 80; i += 1) {\n\t\t\twords[i] = rotate_left(\n\t\t\t\t(words[i - 3] ?? 0) ^\n\t\t\t\t\t(words[i - 8] ?? 0) ^\n\t\t\t\t\t(words[i - 14] ?? 0) ^\n\t\t\t\t\t(words[i - 16] ?? 0),\n\t\t\t\t1,\n\t\t\t);\n\t\t}\n\n\t\tlet a = h0;\n\t\tlet b = h1;\n\t\tlet c = h2;\n\t\tlet d = h3;\n\t\tlet e = h4;\n\n\t\tfor (let i = 0; i < 80; i += 1) {\n\t\t\tlet f: number;\n\t\t\tlet k: number;\n\t\t\tif (i < 20) {\n\t\t\t\tf = (b & c) | (~b & d);\n\t\t\t\tk = 0x5a827999;\n\t\t\t} else if (i < 40) {\n\t\t\t\tf = b ^ c ^ d;\n\t\t\t\tk = 0x6ed9eba1;\n\t\t\t} else if (i < 60) {\n\t\t\t\tf = (b & c) | (b & d) | (c & d);\n\t\t\t\tk = 0x8f1bbcdc;\n\t\t\t} else {\n\t\t\t\tf = b ^ c ^ d;\n\t\t\t\tk = 0xca62c1d6;\n\t\t\t}\n\n\t\t\tconst temp = unsigned_add(\n\t\t\t\trotate_left(a, 5),\n\t\t\t\tf,\n\t\t\t\te,\n\t\t\t\tk,\n\t\t\t\twords[i] ?? 0,\n\t\t\t);\n\t\t\te = d;\n\t\t\td = c;\n\t\t\tc = rotate_left(b, 30);\n\t\t\tb = a;\n\t\t\ta = temp;\n\t\t}\n\n\t\th0 = unsigned_add(h0, a);\n\t\th1 = unsigned_add(h1, b);\n\t\th2 = unsigned_add(h2, c);\n\t\th3 = unsigned_add(h3, d);\n\t\th4 = unsigned_add(h4, e);\n\t}\n\n\treturn [h0, h1, h2, h3, h4]\n\t\t.map((value) => value.toString(16).padStart(8, \"0\"))\n\t\t.join(\"\");\n}\n\nfunction rotate_left(value: number, bits: number): number {\n\treturn ((value << bits) | (value >>> (32 - bits))) >>> 0;\n}\n\nfunction unsigned_add(...values: readonly number[]): number {\n\treturn values.reduce((total, value) => (total + value) >>> 0, 0);\n}\n\nfunction normalize_string(value?: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export type RequestId = string | number;\n\nexport type ElicitationAction = \"accept\" | \"decline\" | \"cancel\";\n\nexport type ElicitationResponse = {\n\taction: ElicitationAction;\n\tcontent?: unknown;\n\tmeta?: unknown;\n};\n\nexport type CreateElicitationRequestParams =\n\t| {\n\t\t\ttype: \"form\";\n\t\t\tmeta?: unknown;\n\t\t\tmessage: string;\n\t\t\trequested_schema: {\n\t\t\t\tproperties?: Record<string, unknown>;\n\t\t\t\t[key: string]: unknown;\n\t\t\t};\n\t }\n\t| {\n\t\t\ttype: \"url\";\n\t\t\tmeta?: unknown;\n\t\t\tmessage: string;\n\t\t\turl: string;\n\t\t\telicitation_id?: string | null;\n\t };\n\nexport type ElicitationRequestEvent = {\n\tid: \"mcp_elicitation_request\";\n\tmsg: {\n\t\ttype: \"elicitation_request\";\n\t\tturn_id: null;\n\t\tserver_name: string;\n\t\tid: RequestId;\n\t\trequest:\n\t\t\t| {\n\t\t\t\t\ttype: \"form\";\n\t\t\t\t\tmeta?: unknown;\n\t\t\t\t\tmessage: string;\n\t\t\t\t\trequested_schema: unknown;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\ttype: \"url\";\n\t\t\t\t\tmeta?: unknown;\n\t\t\t\t\tmessage: string;\n\t\t\t\t\turl: string;\n\t\t\t\t\telicitation_id?: string | null;\n\t\t\t };\n\t};\n};\n\nexport type ElicitationReviewRequest = {\n\tserver_name: string;\n\trequest_id: RequestId;\n\telicitation: CreateElicitationRequestParams;\n};\n\nexport type ElicitationReviewer = {\n\treview(\n\t\trequest: ElicitationReviewRequest,\n\t): Promise<ElicitationResponse | null | undefined>;\n};\n\nexport type ElicitationReviewerHandle = ElicitationReviewer;\n\nexport type ElicitationEventSink =\n\t| ((event: ElicitationRequestEvent) => Promise<void> | void)\n\t| {\n\t\t\tsend(event: ElicitationRequestEvent): Promise<void> | void;\n\t };\n\nexport type SendElicitation = (\n\tid: RequestId,\n\telicitation: CreateElicitationRequestParams,\n) => Promise<ElicitationResponse>;\n\nexport class ElicitationRequestManager {\n\tprivate readonly requests = new Map<\n\t\tstring,\n\t\t(response: ElicitationResponse) => void\n\t>();\n\tprivate approval_policy: unknown;\n\tprivate permission_profile: unknown;\n\tprivate auto_deny_value = false;\n\n\tconstructor(\n\t\tapproval_policy: unknown,\n\t\tpermission_profile: unknown,\n\t\tprivate readonly reviewer: ElicitationReviewerHandle | null = null,\n\t) {\n\t\tthis.approval_policy = approval_policy;\n\t\tthis.permission_profile = permission_profile;\n\t}\n\n\tauto_deny(): boolean {\n\t\treturn this.auto_deny_value;\n\t}\n\n\tset_auto_deny(auto_deny: boolean): void {\n\t\tthis.auto_deny_value = auto_deny;\n\t}\n\n\tset_approval_policy(approval_policy: unknown): void {\n\t\tthis.approval_policy = approval_policy;\n\t}\n\n\tset_permission_profile(permission_profile: unknown): void {\n\t\tthis.permission_profile = permission_profile;\n\t}\n\n\tasync resolve(\n\t\tserver_name: string,\n\t\tid: RequestId,\n\t\tresponse: ElicitationResponse,\n\t): Promise<void> {\n\t\tconst key = request_key(server_name, id);\n\t\tconst resolve = this.requests.get(key);\n\t\tif (!resolve) {\n\t\t\tthrow new Error(\"elicitation request not found\");\n\t\t}\n\t\tthis.requests.delete(key);\n\t\tresolve(response);\n\t}\n\n\tmake_sender(\n\t\tserver_name: string,\n\t\ttx_event: ElicitationEventSink,\n\t): SendElicitation {\n\t\treturn async (id, elicitation) => {\n\t\t\tif (this.auto_deny()) {\n\t\t\t\treturn decline_response();\n\t\t\t}\n\t\t\tif (\n\t\t\t\tmcp_permission_prompt_is_auto_approved(\n\t\t\t\t\tthis.approval_policy,\n\t\t\t\t\tthis.permission_profile,\n\t\t\t\t\t{},\n\t\t\t\t) &&\n\t\t\t\tcan_auto_accept_elicitation(elicitation)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\taction: \"accept\",\n\t\t\t\t\tcontent: {},\n\t\t\t\t\tmeta: null,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (elicitation_is_rejected_by_policy(this.approval_policy)) {\n\t\t\t\treturn decline_response();\n\t\t\t}\n\t\t\tconst reviewed = await this.reviewer?.review({\n\t\t\t\tserver_name,\n\t\t\t\trequest_id: id,\n\t\t\t\telicitation,\n\t\t\t});\n\t\t\tif (reviewed) {\n\t\t\t\treturn reviewed;\n\t\t\t}\n\n\t\t\tconst response = new Promise<ElicitationResponse>((resolve) => {\n\t\t\t\tthis.requests.set(request_key(server_name, id), resolve);\n\t\t\t});\n\t\t\tawait send_event(tx_event, {\n\t\t\t\tid: \"mcp_elicitation_request\",\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"elicitation_request\",\n\t\t\t\t\tturn_id: null,\n\t\t\t\t\tserver_name,\n\t\t\t\t\tid,\n\t\t\t\t\trequest: elicitation_request_to_event_request(elicitation),\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn response;\n\t\t};\n\t}\n}\n\nexport function elicitation_is_rejected_by_policy(\n\tapproval_policy: unknown,\n): boolean {\n\tif (approval_policy === \"never\" || approval_policy === \"Never\") {\n\t\treturn true;\n\t}\n\tconst granular = granular_approval_config(approval_policy);\n\tif (granular) {\n\t\treturn granular.mcp_elicitations === false;\n\t}\n\treturn false;\n}\n\nexport function can_auto_accept_elicitation(\n\telicitation: CreateElicitationRequestParams,\n): boolean {\n\treturn (\n\t\telicitation.type === \"form\" &&\n\t\tObject.keys(elicitation.requested_schema.properties ?? {}).length === 0\n\t);\n}\n\nexport type McpPermissionPromptAutoApproveContext = {\n\tapprovals_reviewer?: unknown;\n\ttool_approval_mode?: string | null;\n};\n\nexport function mcp_permission_prompt_is_auto_approved(\n\tapproval_policy: unknown,\n\tpermission_profile: unknown,\n\tcontext: McpPermissionPromptAutoApproveContext = {},\n): boolean {\n\tif (context.tool_approval_mode === \"approve\") {\n\t\treturn true;\n\t}\n\tif (approval_policy !== \"never\" && approval_policy !== \"Never\") {\n\t\treturn false;\n\t}\n\tconst profile = as_record(permission_profile);\n\tconst type = String(profile?.type ?? profile?.mode ?? \"\");\n\tif (type === \"disabled\" || type === \"external\") {\n\t\treturn true;\n\t}\n\tconst fileSystem = as_record(profile?.file_system);\n\tconst entries = Array.isArray(fileSystem?.entries) ? fileSystem.entries : [];\n\treturn entries.some((entry) => {\n\t\tconst record = as_record(entry);\n\t\tconst path = as_record(record?.path);\n\t\treturn (\n\t\t\trecord?.access === \"read-write\" &&\n\t\t\t(path?.value === \"root\" || path?.type === \"root\")\n\t\t);\n\t});\n}\n\nfunction elicitation_request_to_event_request(\n\telicitation: CreateElicitationRequestParams,\n): ElicitationRequestEvent[\"msg\"][\"request\"] {\n\tif (elicitation.type === \"form\") {\n\t\treturn {\n\t\t\ttype: \"form\",\n\t\t\tmeta: elicitation.meta,\n\t\t\tmessage: elicitation.message,\n\t\t\trequested_schema: elicitation.requested_schema,\n\t\t};\n\t}\n\treturn {\n\t\ttype: \"url\",\n\t\tmeta: elicitation.meta,\n\t\tmessage: elicitation.message,\n\t\turl: elicitation.url,\n\t\telicitation_id: elicitation.elicitation_id ?? null,\n\t};\n}\n\nasync function send_event(\n\tsink: ElicitationEventSink,\n\tevent: ElicitationRequestEvent,\n): Promise<void> {\n\tif (typeof sink === \"function\") {\n\t\tawait sink(event);\n\t\treturn;\n\t}\n\tawait sink.send(event);\n}\n\nfunction granular_approval_config(value: unknown): Record<string, unknown> | null {\n\tconst record = as_record(value);\n\tif (!record) {\n\t\treturn null;\n\t}\n\tif (as_record(record.granular)) {\n\t\treturn as_record(record.granular);\n\t}\n\treturn \"mcp_elicitations\" in record ? record : null;\n}\n\nfunction request_key(server_name: string, id: RequestId): string {\n\treturn `${server_name}\\0${String(id)}`;\n}\n\nfunction decline_response(): ElicitationResponse {\n\treturn {\n\t\taction: \"decline\",\n\t\tcontent: null,\n\t\tmeta: null,\n\t};\n}\n\nfunction as_record(value: unknown): Record<string, unknown> | null {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: null;\n}\n","import { CODEX_APPS_MCP_SERVER_NAME } from \"./mcp/mod\";\nimport type { ToolInfo } from \"./tools\";\n\nexport const CODEX_APPS_TOOLS_CACHE_SCHEMA_VERSION = 2;\nexport const CODEX_APPS_TOOLS_CACHE_DIR = \"cache/codex_apps_tools\";\n\nexport type CodexAuthLike = {\n\taccount_id?: string | null;\n\tchatgpt_user_id?: string | null;\n\tis_workspace_account?: boolean | (() => boolean | null | undefined) | null;\n\tget_account_id?: () => string | null | undefined;\n\tget_chatgpt_user_id?: () => string | null | undefined;\n};\n\nexport type CodexAppsToolsCacheKey = {\n\taccount_id?: string | null;\n\tchatgpt_user_id?: string | null;\n\tis_workspace_account: boolean;\n};\n\nexport function codex_apps_tools_cache_key(\n\tauth?: CodexAuthLike | null,\n): CodexAppsToolsCacheKey {\n\treturn {\n\t\taccount_id: auth?.get_account_id?.() ?? auth?.account_id ?? null,\n\t\tchatgpt_user_id:\n\t\t\tauth?.get_chatgpt_user_id?.() ?? auth?.chatgpt_user_id ?? null,\n\t\tis_workspace_account: codex_auth_is_workspace_account(auth),\n\t};\n}\n\nexport function filter_non_codex_apps_mcp_tools_only(\n\tmcpTools: ReadonlyMap<string, ToolInfo> | Record<string, ToolInfo>,\n): Map<string, ToolInfo> {\n\tconst entries =\n\t\tmcpTools instanceof Map ? [...mcpTools.entries()] : Object.entries(mcpTools);\n\treturn new Map(\n\t\tentries.filter(([, tool]) => tool.server_name !== CODEX_APPS_MCP_SERVER_NAME),\n\t);\n}\n\nexport type CodexAppsToolsCacheStorage = {\n\tread(path: string): string | Uint8Array | null | undefined;\n\twrite(path: string, bytes: string): void;\n};\n\nexport class InMemoryCodexAppsToolsCacheStorage\n\timplements CodexAppsToolsCacheStorage\n{\n\tprivate readonly files = new Map<string, string>();\n\n\tread(path: string): string | null {\n\t\treturn this.files.get(path) ?? null;\n\t}\n\n\twrite(path: string, bytes: string): void {\n\t\tthis.files.set(path, bytes);\n\t}\n}\n\nexport class CodexAppsToolsCacheContext {\n\tconstructor(\n\t\treadonly codex_home: string,\n\t\treadonly user_key: CodexAppsToolsCacheKey,\n\t\treadonly storage: CodexAppsToolsCacheStorage | null = null,\n\t) {}\n\n\tcache_path(): string {\n\t\tconst userKeyJson = JSON.stringify(this.user_key);\n\t\tconst userKeyHash = sha1_hex(userKeyJson);\n\t\treturn `${trim_trailing_slashes(this.codex_home)}/${CODEX_APPS_TOOLS_CACHE_DIR}/${userKeyHash}.json`;\n\t}\n}\n\nexport type CachedCodexAppsToolsLoad =\n\t| { type: \"Hit\"; tools: ToolInfo[] }\n\t| { type: \"Missing\" }\n\t| { type: \"Invalid\" };\n\nexport const CachedCodexAppsToolsLoad = {\n\tHit(tools: ToolInfo[]): CachedCodexAppsToolsLoad {\n\t\treturn { type: \"Hit\", tools };\n\t},\n\tMissing: { type: \"Missing\" } as CachedCodexAppsToolsLoad,\n\tInvalid: { type: \"Invalid\" } as CachedCodexAppsToolsLoad,\n} as const;\n\nexport function normalize_codex_apps_tool_title(\n\tserver_name: string,\n\tconnector_name: string | null | undefined,\n\tvalue: string,\n): string {\n\tif (server_name !== CODEX_APPS_MCP_SERVER_NAME) {\n\t\treturn value;\n\t}\n\n\tconst connectorName = connector_name?.trim();\n\tif (!connectorName) {\n\t\treturn value;\n\t}\n\n\tconst prefix = `${connectorName}_`;\n\tconst stripped = value.startsWith(prefix) ? value.slice(prefix.length) : null;\n\treturn stripped && stripped.length > 0 ? stripped : value;\n}\n\nexport function normalize_codex_apps_callable_name(\n\tserver_name: string,\n\ttool_name: string,\n\tconnector_id?: string | null,\n\tconnector_name?: string | null,\n): string {\n\tif (server_name !== CODEX_APPS_MCP_SERVER_NAME) {\n\t\treturn tool_name;\n\t}\n\n\tconst sanitizedToolName = sanitize_name(tool_name);\n\tconst sanitizedConnectorName = sanitize_optional_name(connector_name);\n\tif (\n\t\tsanitizedConnectorName &&\n\t\tsanitizedToolName.startsWith(sanitizedConnectorName)\n\t) {\n\t\tconst stripped = sanitizedToolName.slice(sanitizedConnectorName.length);\n\t\tif (stripped.length > 0) {\n\t\t\treturn stripped;\n\t\t}\n\t}\n\n\tconst sanitizedConnectorId = sanitize_optional_name(connector_id);\n\tif (sanitizedConnectorId && sanitizedToolName.startsWith(sanitizedConnectorId)) {\n\t\tconst stripped = sanitizedToolName.slice(sanitizedConnectorId.length);\n\t\tif (stripped.length > 0) {\n\t\t\treturn stripped;\n\t\t}\n\t}\n\n\treturn sanitizedToolName;\n}\n\nexport function normalize_codex_apps_callable_namespace(\n\tserver_name: string,\n\tconnector_name?: string | null,\n): string {\n\tif (server_name === CODEX_APPS_MCP_SERVER_NAME && connector_name) {\n\t\treturn `mcp__${server_name}__${sanitize_name(connector_name)}`;\n\t}\n\treturn `mcp__${server_name}__`;\n}\n\nexport function write_cached_codex_apps_tools_if_needed(\n\tserver_name: string,\n\tcache_context: CodexAppsToolsCacheContext | null | undefined,\n\ttools: readonly ToolInfo[],\n): void {\n\tif (server_name !== CODEX_APPS_MCP_SERVER_NAME || !cache_context) {\n\t\treturn;\n\t}\n\twrite_cached_codex_apps_tools(cache_context, tools);\n}\n\nexport function load_startup_cached_codex_apps_tools_snapshot(\n\tserver_name: string,\n\tcache_context: CodexAppsToolsCacheContext | null | undefined,\n): ToolInfo[] | null {\n\tif (server_name !== CODEX_APPS_MCP_SERVER_NAME || !cache_context) {\n\t\treturn null;\n\t}\n\tconst loaded = load_cached_codex_apps_tools(cache_context);\n\treturn loaded.type === \"Hit\" ? loaded.tools : null;\n}\n\nexport function read_cached_codex_apps_tools(\n\tcache_context: CodexAppsToolsCacheContext,\n): ToolInfo[] | null {\n\tconst loaded = load_cached_codex_apps_tools(cache_context);\n\treturn loaded.type === \"Hit\" ? loaded.tools : null;\n}\n\nexport function load_cached_codex_apps_tools(\n\tcache_context: CodexAppsToolsCacheContext,\n): CachedCodexAppsToolsLoad {\n\tconst bytes = cache_context.storage?.read(cache_context.cache_path());\n\tif (bytes == null) {\n\t\treturn CachedCodexAppsToolsLoad.Missing;\n\t}\n\n\tlet cache: CodexAppsToolsDiskCache;\n\ttry {\n\t\tconst raw =\n\t\t\ttypeof bytes === \"string\" ? bytes : new TextDecoder().decode(bytes);\n\t\tcache = JSON.parse(raw) as CodexAppsToolsDiskCache;\n\t} catch {\n\t\treturn CachedCodexAppsToolsLoad.Invalid;\n\t}\n\n\tif (\n\t\tcache.schema_version !== CODEX_APPS_TOOLS_CACHE_SCHEMA_VERSION ||\n\t\t!Array.isArray(cache.tools)\n\t) {\n\t\treturn CachedCodexAppsToolsLoad.Invalid;\n\t}\n\n\treturn CachedCodexAppsToolsLoad.Hit(\n\t\tfilter_disallowed_codex_apps_tools(cache.tools),\n\t);\n}\n\nexport function write_cached_codex_apps_tools(\n\tcache_context: CodexAppsToolsCacheContext,\n\ttools: readonly ToolInfo[],\n): void {\n\tif (!cache_context.storage) {\n\t\treturn;\n\t}\n\tconst cache: CodexAppsToolsDiskCache = {\n\t\tschema_version: CODEX_APPS_TOOLS_CACHE_SCHEMA_VERSION,\n\t\ttools: filter_disallowed_codex_apps_tools([...tools]),\n\t};\n\tcache_context.storage.write(\n\t\tcache_context.cache_path(),\n\t\tJSON.stringify(cache, null, 2),\n\t);\n}\n\nexport function filter_disallowed_codex_apps_tools(\n\ttools: ToolInfo[],\n): ToolInfo[] {\n\treturn tools.filter((tool) =>\n\t\ttool.connector_id == null ? true : is_connector_id_allowed(tool.connector_id),\n\t);\n}\n\nexport function sanitize_name(name: string): string {\n\treturn sanitize_slug(name).replaceAll(\"-\", \"_\");\n}\n\nexport function is_connector_id_allowed(\n\tconnector_id: string,\n\tfirst_party_chat_originator = false,\n): boolean {\n\tconst disallowedConnectorIds = first_party_chat_originator\n\t\t? FIRST_PARTY_CHAT_DISALLOWED_CONNECTOR_IDS\n\t\t: DISALLOWED_CONNECTOR_IDS;\n\treturn (\n\t\t!connector_id.startsWith(DISALLOWED_CONNECTOR_PREFIX) &&\n\t\t!disallowedConnectorIds.has(connector_id)\n\t);\n}\n\ntype CodexAppsToolsDiskCache = {\n\tschema_version: number;\n\ttools: ToolInfo[];\n};\n\nconst DISALLOWED_CONNECTOR_IDS = new Set([\n\t\"asdk_app_6938a94a61d881918ef32cb999ff937c\",\n\t\"connector_2b0a9009c9c64bf9933a3dae3f2b1254\",\n\t\"connector_3f8d1a79f27c4c7ba1a897ab13bf37dc\",\n\t\"connector_68de829bf7648191acd70a907364c67c\",\n\t\"connector_68e004f14af881919eb50893d3d9f523\",\n\t\"connector_69272cb413a081919685ec3c88d1744e\",\n]);\nconst FIRST_PARTY_CHAT_DISALLOWED_CONNECTOR_IDS = new Set([\n\t\"connector_0f9c9d4592e54d0a9a12b3f44a1e2010\",\n]);\nconst DISALLOWED_CONNECTOR_PREFIX = \"connector_openai_\";\n\nfunction sanitize_optional_name(value?: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? sanitize_name(trimmed) : null;\n}\n\nfunction codex_auth_is_workspace_account(\n\tauth?: CodexAuthLike | null,\n): boolean {\n\tconst value = auth?.is_workspace_account;\n\treturn Boolean(typeof value === \"function\" ? value() : value);\n}\n\nfunction sanitize_slug(name: string): string {\n\tlet normalized = \"\";\n\tfor (const character of name) {\n\t\tnormalized += /[A-Za-z0-9]/.test(character)\n\t\t\t? character.toLowerCase()\n\t\t\t: \"-\";\n\t}\n\tnormalized = normalized.replace(/^-+|-+$/g, \"\");\n\treturn normalized.length > 0 ? normalized : \"app\";\n}\n\nfunction trim_trailing_slashes(value: string): string {\n\treturn value.replace(/\\/+$/g, \"\");\n}\n\nfunction sha1_hex(input: string): string {\n\tconst bytes = [...new TextEncoder().encode(input)];\n\tconst bitLength = bytes.length * 8;\n\tbytes.push(0x80);\n\twhile (bytes.length % 64 !== 56) {\n\t\tbytes.push(0);\n\t}\n\tfor (let shift = 56; shift >= 0; shift -= 8) {\n\t\tbytes.push(Math.floor(bitLength / 2 ** shift) & 0xff);\n\t}\n\n\tlet h0 = 0x67452301;\n\tlet h1 = 0xefcdab89;\n\tlet h2 = 0x98badcfe;\n\tlet h3 = 0x10325476;\n\tlet h4 = 0xc3d2e1f0;\n\n\tfor (let offset = 0; offset < bytes.length; offset += 64) {\n\t\tconst words = new Array<number>(80).fill(0);\n\t\tfor (let index = 0; index < 16; index += 1) {\n\t\t\tconst byteOffset = offset + index * 4;\n\t\t\twords[index] =\n\t\t\t\t((bytes[byteOffset] ?? 0) << 24) |\n\t\t\t\t((bytes[byteOffset + 1] ?? 0) << 16) |\n\t\t\t\t((bytes[byteOffset + 2] ?? 0) << 8) |\n\t\t\t\t(bytes[byteOffset + 3] ?? 0);\n\t\t}\n\t\tfor (let index = 16; index < 80; index += 1) {\n\t\t\twords[index] = rotate_left(\n\t\t\t\t(words[index - 3] ?? 0) ^\n\t\t\t\t\t(words[index - 8] ?? 0) ^\n\t\t\t\t\t(words[index - 14] ?? 0) ^\n\t\t\t\t\t(words[index - 16] ?? 0),\n\t\t\t\t1,\n\t\t\t);\n\t\t}\n\n\t\tlet a = h0;\n\t\tlet b = h1;\n\t\tlet c = h2;\n\t\tlet d = h3;\n\t\tlet e = h4;\n\n\t\tfor (let index = 0; index < 80; index += 1) {\n\t\t\tlet f: number;\n\t\t\tlet k: number;\n\t\t\tif (index < 20) {\n\t\t\t\tf = (b & c) | (~b & d);\n\t\t\t\tk = 0x5a827999;\n\t\t\t} else if (index < 40) {\n\t\t\t\tf = b ^ c ^ d;\n\t\t\t\tk = 0x6ed9eba1;\n\t\t\t} else if (index < 60) {\n\t\t\t\tf = (b & c) | (b & d) | (c & d);\n\t\t\t\tk = 0x8f1bbcdc;\n\t\t\t} else {\n\t\t\t\tf = b ^ c ^ d;\n\t\t\t\tk = 0xca62c1d6;\n\t\t\t}\n\n\t\t\tconst temp = unsigned_add(\n\t\t\t\trotate_left(a, 5),\n\t\t\t\tf,\n\t\t\t\te,\n\t\t\t\tk,\n\t\t\t\twords[index] ?? 0,\n\t\t\t);\n\t\t\te = d;\n\t\t\td = c;\n\t\t\tc = rotate_left(b, 30);\n\t\t\tb = a;\n\t\t\ta = temp;\n\t\t}\n\n\t\th0 = unsigned_add(h0, a);\n\t\th1 = unsigned_add(h1, b);\n\t\th2 = unsigned_add(h2, c);\n\t\th3 = unsigned_add(h3, d);\n\t\th4 = unsigned_add(h4, e);\n\t}\n\n\treturn [h0, h1, h2, h3, h4]\n\t\t.map((value) => value.toString(16).padStart(8, \"0\"))\n\t\t.join(\"\");\n}\n\nfunction rotate_left(value: number, bits: number): number {\n\treturn ((value << bits) | (value >>> (32 - bits))) >>> 0;\n}\n\nfunction unsigned_add(...values: readonly number[]): number {\n\treturn values.reduce((total, value) => (total + value) >>> 0, 0);\n}\n","import {\n\tCODEX_APPS_MCP_SERVER_NAME,\n\tToolPluginProvenance,\n\tqualified_mcp_tool_name_prefix,\n} from \"./mcp/mod\";\nimport {\n\tCachedCodexAppsToolsLoad,\n\ttype CodexAppsToolsCacheContext,\n\tfilter_disallowed_codex_apps_tools,\n\tload_cached_codex_apps_tools,\n\tload_startup_cached_codex_apps_tools_snapshot,\n\tnormalize_codex_apps_callable_name,\n\tnormalize_codex_apps_callable_namespace,\n\tnormalize_codex_apps_tool_title,\n\twrite_cached_codex_apps_tools_if_needed,\n} from \"./codex_apps\";\nimport {\n\tToolFilter,\n\ttype ToolInfo,\n\tfilter_tools,\n\ttool_with_model_visible_input_schema,\n} from \"./tools\";\n\nexport const MCP_SANDBOX_STATE_META_CAPABILITY =\n\t\"codex/sandbox-state-meta\";\nexport const MCP_TOOLS_LIST_DURATION_METRIC =\n\t\"codex.mcp.tools.list.duration_ms\";\nexport const MCP_TOOLS_FETCH_UNCACHED_DURATION_METRIC =\n\t\"codex.mcp.tools.fetch_uncached.duration_ms\";\nexport const DEFAULT_STARTUP_TIMEOUT = 30_000;\nexport const DEFAULT_TOOL_TIMEOUT = 120_000;\n\nexport type McpServerTransportConfig =\n\t| {\n\t\t\ttype: \"streamable_http\";\n\t\t\turl: string;\n\t\t\tbearer_token_env_var?: string | null;\n\t\t\thttp_headers?: Record<string, string> | null;\n\t\t\tenv_http_headers?: Record<string, string> | null;\n\t\t\toauth_tokens_present?: boolean | null;\n\t }\n\t| {\n\t\t\ttype: \"stdio\";\n\t\t\tcommand: string;\n\t\t\targs?: readonly string[];\n\t\t\tenv?: Record<string, string> | null;\n\t\t\tenv_vars?: readonly string[];\n\t\t\tcwd?: string | null;\n\t };\n\nexport type McpServerConfig = {\n\ttransport: McpServerTransportConfig;\n\tenabled?: boolean;\n\trequired?: boolean;\n\tstartup_timeout_sec?: number | null;\n\ttool_timeout_sec?: number | null;\n\tenabled_tools?: readonly string[] | null;\n\tdisabled_tools?: readonly string[] | null;\n\texperimental_environment?: string | null;\n};\n\nexport type McpRuntimeEnvironment = {\n\tcwd?: string | null;\n\tenvironment_id?: string | null;\n\tremote?: boolean | null;\n};\n\nexport type McpClientFactoryOptions = {\n\tfetch?: typeof fetch;\n\tenvironment?: Record<string, string | undefined>;\n\tstdio_server_launcher?: StdioServerLauncher | null;\n\truntime_environment?: McpRuntimeEnvironment | null;\n};\n\nexport type StdioServerLauncher = {\n\tlaunch(\n\t\tserver_name: string,\n\t\tconfig: Extract<McpServerTransportConfig, { type: \"stdio\" }>,\n\t\truntime_environment?: McpRuntimeEnvironment | null,\n\t): Promise<RmcpClientLike>;\n};\n\nexport type McpJsonRpcMessage = {\n\tjsonrpc: \"2.0\";\n\tid?: string | number;\n\tmethod?: string;\n\tparams?: unknown;\n\tresult?: unknown;\n\terror?: {\n\t\tcode: number;\n\t\tmessage: string;\n\t\tdata?: unknown;\n\t};\n};\n\nexport type McpJsonRpcTransport = {\n\trequest(\n\t\tmessage: McpJsonRpcMessage,\n\t\ttimeout?: number | null,\n\t): Promise<McpJsonRpcMessage>;\n\tnotify?(message: McpJsonRpcMessage, timeout?: number | null): Promise<void>;\n\tclose?(): Promise<void> | void;\n};\n\nexport type RmcpRawTool = {\n\tname: string;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\tinput_schema?: unknown;\n\tmeta?: unknown;\n\tconnector_id?: string | null;\n\tconnector_name?: string | null;\n\tconnector_description?: string | null;\n};\n\nexport type RmcpListToolsResult =\n\t| readonly ToolInfo[]\n\t| readonly RmcpRawTool[]\n\t| {\n\t\t\ttools: readonly (\n\t\t\t\t| ToolInfo\n\t\t\t\t| RmcpRawTool\n\t\t\t\t| ({ tool: RmcpRawTool } & Record<string, unknown>)\n\t\t\t)[];\n\t };\n\nexport type RmcpClientLike = {\n\tinitialize?: (timeout?: number | null) => Promise<RmcpInitializeResult>;\n\tlist_tools?: (params?: unknown, timeout?: number | null) => Promise<RmcpListToolsResult>;\n\tcall_tool?: (\n\t\ttool: string,\n\t\targuments_: unknown,\n\t\tmeta?: unknown,\n\t\ttimeout?: number | null,\n\t) => Promise<unknown>;\n\tlist_resources?: (params?: unknown, timeout?: number | null) => Promise<unknown>;\n\tlist_resource_templates?: (\n\t\tparams?: unknown,\n\t\ttimeout?: number | null,\n\t) => Promise<unknown>;\n\tread_resource?: (params: unknown, timeout?: number | null) => Promise<unknown>;\n\tshutdown?: () => Promise<void> | void;\n};\n\nexport type RmcpInitializeResult = {\n\tinstructions?: string | null;\n\tcapabilities?: {\n\t\texperimental?: Record<string, unknown> | null;\n\t\t[key: string]: unknown;\n\t} | null;\n};\n\nexport type ManagedClientInput = {\n\tclient?: RmcpClientLike | null;\n\ttools?: readonly ToolInfo[];\n\ttool_filter?: ToolFilter;\n\ttool_timeout?: number | null;\n\tserver_instructions?: string | null;\n\tserver_supports_sandbox_state_meta_capability?: boolean;\n\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n};\n\nexport class ManagedClient {\n\treadonly client: RmcpClientLike | null;\n\treadonly tools: readonly ToolInfo[];\n\treadonly tool_filter: ToolFilter;\n\treadonly tool_timeout: number | null;\n\treadonly server_instructions: string | null;\n\treadonly server_supports_sandbox_state_meta_capability: boolean;\n\treadonly codex_apps_tools_cache_context: CodexAppsToolsCacheContext | null;\n\n\tconstructor(input: ManagedClientInput = {}) {\n\t\tthis.client = input.client ?? null;\n\t\tthis.tools = [...(input.tools ?? [])];\n\t\tthis.tool_filter = input.tool_filter ?? new ToolFilter();\n\t\tthis.tool_timeout = input.tool_timeout ?? DEFAULT_TOOL_TIMEOUT;\n\t\tthis.server_instructions = input.server_instructions ?? null;\n\t\tthis.server_supports_sandbox_state_meta_capability =\n\t\t\tinput.server_supports_sandbox_state_meta_capability ?? false;\n\t\tthis.codex_apps_tools_cache_context =\n\t\t\tinput.codex_apps_tools_cache_context ?? null;\n\t}\n\n\tlisted_tools(): ToolInfo[] {\n\t\tconst cached = this.codex_apps_tools_cache_context\n\t\t\t? load_cached_codex_apps_tools(this.codex_apps_tools_cache_context)\n\t\t\t: CachedCodexAppsToolsLoad.Missing;\n\t\tif (cached.type === \"Hit\") {\n\t\t\treturn filter_tools(cached.tools, this.tool_filter);\n\t\t}\n\t\treturn [...this.tools];\n\t}\n\n\tasync call_tool(tool: string, arguments_: unknown, meta?: unknown): Promise<unknown> {\n\t\tif (!this.tool_filter.allows(tool)) {\n\t\t\tthrow new Error(`tool '${tool}' is disabled`);\n\t\t}\n\t\tif (!this.client?.call_tool) {\n\t\t\tthrow new Error(`MCP client does not implement tool calls`);\n\t\t}\n\t\treturn this.client.call_tool(tool, arguments_, meta, this.tool_timeout);\n\t}\n\n\tasync list_resources(params?: unknown): Promise<unknown> {\n\t\tif (!this.client?.list_resources) {\n\t\t\tthrow new Error(`MCP client does not implement resources/list`);\n\t\t}\n\t\treturn this.client.list_resources(params, this.tool_timeout);\n\t}\n\n\tasync list_resource_templates(params?: unknown): Promise<unknown> {\n\t\tif (!this.client?.list_resource_templates) {\n\t\t\tthrow new Error(`MCP client does not implement resources/templates/list`);\n\t\t}\n\t\treturn this.client.list_resource_templates(params, this.tool_timeout);\n\t}\n\n\tasync read_resource(params: unknown): Promise<unknown> {\n\t\tif (!this.client?.read_resource) {\n\t\t\tthrow new Error(`MCP client does not implement resources/read`);\n\t\t}\n\t\treturn this.client.read_resource(params, this.tool_timeout);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.client?.shutdown?.();\n\t}\n}\n\nexport type AsyncManagedClientInput = {\n\tclient:\n\t\t| ManagedClient\n\t\t| Promise<ManagedClient>\n\t\t| (() => ManagedClient | Promise<ManagedClient>);\n\tstartup_snapshot?: readonly ToolInfo[] | null;\n\ttool_plugin_provenance?: ToolPluginProvenance;\n\tcancel_token?: CancellationToken;\n};\n\nexport type AsyncManagedClientStartupStatus =\n\t| { status: \"starting\" }\n\t| { status: \"ready\" }\n\t| { status: \"cancelled\" }\n\t| { status: \"failed\"; error: string };\n\nexport class AsyncManagedClient {\n\tprivate readonly client_promise: Promise<ManagedClient>;\n\tprivate readonly startup_snapshot: readonly ToolInfo[] | null;\n\tprivate readonly startup_complete: StartupCompleteFlag;\n\tprivate readonly tool_plugin_provenance: ToolPluginProvenance;\n\tprivate readonly cancel_token: CancellationToken;\n\tprivate startup_status_value: AsyncManagedClientStartupStatus = {\n\t\tstatus: \"starting\",\n\t};\n\n\tconstructor(input: AsyncManagedClientInput) {\n\t\tthis.startup_snapshot = input.startup_snapshot\n\t\t\t? [...input.startup_snapshot]\n\t\t\t: null;\n\t\tthis.startup_complete = new StartupCompleteFlag();\n\t\tthis.tool_plugin_provenance =\n\t\t\tinput.tool_plugin_provenance ?? new ToolPluginProvenance();\n\t\tthis.cancel_token = input.cancel_token ?? new CancellationToken();\n\t\tthis.client_promise = Promise.resolve(\n\t\t\ttypeof input.client === \"function\" ? input.client() : input.client,\n\t\t)\n\t\t\t.then(\n\t\t\t\t(client) => {\n\t\t\t\t\tthis.startup_status_value = { status: \"ready\" };\n\t\t\t\t\treturn client;\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tconst startupError =\n\t\t\t\t\t\terror instanceof StartupOutcomeError\n\t\t\t\t\t\t\t? error\n\t\t\t\t\t\t\t: StartupOutcomeError.failed(error_message(error));\n\t\t\t\t\tthis.startup_status_value =\n\t\t\t\t\t\tstartupError.kind === \"Cancelled\"\n\t\t\t\t\t\t\t? { status: \"cancelled\" }\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\terror: startup_outcome_error_message(startupError),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\tthrow startupError;\n\t\t\t\t},\n\t\t\t)\n\t\t\t.finally(() => {\n\t\t\t\tthis.startup_complete.store(true);\n\t\t\t});\n\t}\n\n\tstatic from_managed_client(\n\t\tclient: ManagedClient,\n\t\tstartup_snapshot?: readonly ToolInfo[] | null,\n\t): AsyncManagedClient {\n\t\treturn new AsyncManagedClient({ client, startup_snapshot });\n\t}\n\n\tstatic new(\n\t\tserver_name: string,\n\t\tinput: {\n\t\t\tclient:\n\t\t\t\t| RmcpClientLike\n\t\t\t\t| Promise<RmcpClientLike>\n\t\t\t\t| (() => RmcpClientLike | Promise<RmcpClientLike>);\n\t\t\ttool_filter?: ToolFilter;\n\t\t\ttool_timeout?: number | null;\n\t\t\tserver_instructions?: string | null;\n\t\t\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n\t\t\ttool_plugin_provenance?: ToolPluginProvenance;\n\t\t},\n\t): AsyncManagedClient {\n\t\tconst toolFilter = input.tool_filter ?? new ToolFilter();\n\t\tconst startupSnapshot = load_startup_cached_codex_apps_tools_snapshot(\n\t\t\tserver_name,\n\t\t\tinput.codex_apps_tools_cache_context,\n\t\t)?.filter((tool) => toolFilter.allows(tool.name));\n\t\treturn new AsyncManagedClient({\n\t\t\tstartup_snapshot: startupSnapshot ?? null,\n\t\t\ttool_plugin_provenance: input.tool_plugin_provenance,\n\t\t\tclient: async () => {\n\t\t\t\tvalidate_mcp_server_name(server_name);\n\t\t\t\tconst client =\n\t\t\t\t\ttypeof input.client === \"function\"\n\t\t\t\t\t\t? await input.client()\n\t\t\t\t\t\t: await input.client;\n\t\t\t\tconst tools = await list_tools_for_client_uncached(\n\t\t\t\t\tserver_name,\n\t\t\t\t\tclient,\n\t\t\t\t\tinput.tool_timeout ?? DEFAULT_TOOL_TIMEOUT,\n\t\t\t\t\tinput.server_instructions,\n\t\t\t\t);\n\t\t\t\twrite_cached_codex_apps_tools_if_needed(\n\t\t\t\t\tserver_name,\n\t\t\t\t\tinput.codex_apps_tools_cache_context,\n\t\t\t\t\ttools,\n\t\t\t\t);\n\t\t\t\treturn new ManagedClient({\n\t\t\t\t\tclient,\n\t\t\t\t\ttools: filter_tools(tools, toolFilter),\n\t\t\t\t\ttool_filter: toolFilter,\n\t\t\t\t\ttool_timeout: input.tool_timeout,\n\t\t\t\t\tserver_instructions: input.server_instructions,\n\t\t\t\t\tcodex_apps_tools_cache_context: input.codex_apps_tools_cache_context,\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\tstatic from_config(\n\t\tserver_name: string,\n\t\tconfig: McpServerConfig,\n\t\toptions: {\n\t\t\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n\t\t\ttool_plugin_provenance?: ToolPluginProvenance;\n\t\t\tclient_factory_options?: McpClientFactoryOptions;\n\t\t} = {},\n\t): AsyncManagedClient {\n\t\tconst toolFilter = ToolFilter.from_config(config);\n\t\tconst startupSnapshot = load_startup_cached_codex_apps_tools_snapshot(\n\t\t\tserver_name,\n\t\t\toptions.codex_apps_tools_cache_context,\n\t\t)?.filter((tool) => toolFilter.allows(tool.name));\n\t\treturn new AsyncManagedClient({\n\t\t\tstartup_snapshot: startupSnapshot ?? null,\n\t\t\ttool_plugin_provenance: options.tool_plugin_provenance,\n\t\t\tclient: async () => {\n\t\t\t\tconst client = await make_rmcp_client(\n\t\t\t\t\tserver_name,\n\t\t\t\t\tconfig,\n\t\t\t\t\toptions.client_factory_options,\n\t\t\t\t);\n\t\t\t\treturn start_server_task(server_name, client, {\n\t\t\t\t\tstartup_timeout:\n\t\t\t\t\t\tseconds_to_ms(config.startup_timeout_sec) ??\n\t\t\t\t\t\tDEFAULT_STARTUP_TIMEOUT,\n\t\t\t\t\ttool_timeout:\n\t\t\t\t\t\tseconds_to_ms(config.tool_timeout_sec) ?? DEFAULT_TOOL_TIMEOUT,\n\t\t\t\t\ttool_filter: toolFilter,\n\t\t\t\t\tcodex_apps_tools_cache_context:\n\t\t\t\t\t\tserver_name === CODEX_APPS_MCP_SERVER_NAME\n\t\t\t\t\t\t\t? options.codex_apps_tools_cache_context\n\t\t\t\t\t\t\t: null,\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\tasync client(): Promise<ManagedClient> {\n\t\tif (this.cancel_token.is_cancelled()) {\n\t\t\tthrow StartupOutcomeError.cancelled();\n\t\t}\n\t\ttry {\n\t\t\treturn await this.client_promise;\n\t\t} catch (error) {\n\t\t\tif (error instanceof StartupOutcomeError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow StartupOutcomeError.failed(error_message(error));\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.cancel_token.cancel();\n\t\tif (!this.startup_complete.load()) {\n\t\t\tthis.startup_status_value = { status: \"cancelled\" };\n\t\t}\n\t\ttry {\n\t\t\tawait (await this.client()).shutdown();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tstartup_status(): AsyncManagedClientStartupStatus {\n\t\tif (this.cancel_token.is_cancelled() && !this.startup_complete.load()) {\n\t\t\treturn { status: \"cancelled\" };\n\t\t}\n\t\treturn { ...this.startup_status_value };\n\t}\n\n\tasync listed_tools(): Promise<ToolInfo[] | null> {\n\t\tconst startupSnapshot = this.startup_snapshot_while_initializing();\n\t\tconst tools = startupSnapshot ?? (await this.listed_tools_from_client());\n\t\treturn tools ? this.annotate_tools(tools) : null;\n\t}\n\n\tprivate startup_snapshot_while_initializing(): ToolInfo[] | null {\n\t\tif (this.startup_complete.load()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.startup_snapshot ? [...this.startup_snapshot] : null;\n\t}\n\n\tprivate async listed_tools_from_client(): Promise<ToolInfo[] | null> {\n\t\ttry {\n\t\t\treturn (await this.client()).listed_tools();\n\t\t} catch {\n\t\t\treturn this.startup_snapshot ? [...this.startup_snapshot] : null;\n\t\t}\n\t}\n\n\tprivate annotate_tools(tools: readonly ToolInfo[]): ToolInfo[] {\n\t\treturn tools.map((inputTool) => {\n\t\t\tlet tool =\n\t\t\t\tinputTool.server_name === CODEX_APPS_MCP_SERVER_NAME\n\t\t\t\t\t? tool_with_model_visible_input_schema(inputTool)\n\t\t\t\t\t: { ...inputTool };\n\t\t\tconst pluginNames = tool.connector_id\n\t\t\t\t? this.tool_plugin_provenance.plugin_display_names_for_connector_id(\n\t\t\t\t\t\ttool.connector_id,\n\t\t\t\t\t)\n\t\t\t\t: this.tool_plugin_provenance.plugin_display_names_for_mcp_server_name(\n\t\t\t\t\t\ttool.server_name,\n\t\t\t\t\t);\n\t\t\ttool = {\n\t\t\t\t...tool,\n\t\t\t\tplugin_display_names: [...pluginNames],\n\t\t\t};\n\t\t\tif (pluginNames.length === 0) {\n\t\t\t\treturn tool;\n\t\t\t}\n\t\t\tconst note =\n\t\t\t\tpluginNames.length === 1\n\t\t\t\t\t? `This tool is part of plugin \\`${pluginNames[0]}\\`.`\n\t\t\t\t\t: `This tool is part of plugins ${pluginNames.map((name) => `\\`${name}\\``).join(\", \")}.`;\n\t\t\tconst description = tool.description?.trim() ?? \"\";\n\t\t\treturn {\n\t\t\t\t...tool,\n\t\t\t\tdescription: description\n\t\t\t\t\t? `${description}${/[.!?]$/.test(description) ? \"\" : \".\"} ${note}`\n\t\t\t\t\t: note,\n\t\t\t};\n\t\t});\n\t}\n}\n\nexport class StartupOutcomeError extends Error {\n\tprivate constructor(\n\t\treadonly kind: \"Cancelled\" | \"Failed\",\n\t\tmessage: string,\n\t\treadonly error?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StartupOutcomeError\";\n\t}\n\n\tstatic cancelled(): StartupOutcomeError {\n\t\treturn new StartupOutcomeError(\"Cancelled\", \"MCP startup cancelled\");\n\t}\n\n\tstatic failed(error: string): StartupOutcomeError {\n\t\treturn new StartupOutcomeError(\n\t\t\t\"Failed\",\n\t\t\t`MCP startup failed: ${error}`,\n\t\t\terror,\n\t\t);\n\t}\n}\n\nexport class CancellationToken {\n\tprivate cancelled = false;\n\n\tcancel(): void {\n\t\tthis.cancelled = true;\n\t}\n\n\tis_cancelled(): boolean {\n\t\treturn this.cancelled;\n\t}\n\n\tchild_token(): CancellationToken {\n\t\treturn this;\n\t}\n}\n\nexport function elicitation_capability_for_server(): Record<string, never> {\n\treturn {};\n}\n\nexport async function start_server_task(\n\tserver_name: string,\n\tclient: RmcpClientLike,\n\tparams: {\n\t\tstartup_timeout?: number | null;\n\t\ttool_timeout?: number | null;\n\t\ttool_filter?: ToolFilter;\n\t\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n\t},\n): Promise<ManagedClient> {\n\tconst initializeResult = client.initialize\n\t\t? await client.initialize(params.startup_timeout ?? DEFAULT_STARTUP_TIMEOUT)\n\t\t: null;\n\tconst serverInstructions = initializeResult?.instructions ?? null;\n\tconst tools = await list_tools_for_client_uncached(\n\t\tserver_name,\n\t\tclient,\n\t\tparams.startup_timeout ?? DEFAULT_STARTUP_TIMEOUT,\n\t\tserverInstructions,\n\t);\n\twrite_cached_codex_apps_tools_if_needed(\n\t\tserver_name,\n\t\tparams.codex_apps_tools_cache_context,\n\t\ttools,\n\t);\n\tconst toolFilter = params.tool_filter ?? new ToolFilter();\n\treturn new ManagedClient({\n\t\tclient,\n\t\ttools: filter_tools(tools, toolFilter),\n\t\ttool_filter: toolFilter,\n\t\ttool_timeout: params.tool_timeout ?? DEFAULT_TOOL_TIMEOUT,\n\t\tserver_instructions: serverInstructions,\n\t\tserver_supports_sandbox_state_meta_capability: Boolean(\n\t\t\tinitializeResult?.capabilities?.experimental?.[\n\t\t\t\tMCP_SANDBOX_STATE_META_CAPABILITY\n\t\t\t],\n\t\t),\n\t\tcodex_apps_tools_cache_context: params.codex_apps_tools_cache_context,\n\t});\n}\n\nexport async function make_rmcp_client(\n\tserver_name: string,\n\tconfig: McpServerConfig,\n\toptions: McpClientFactoryOptions = {},\n): Promise<RmcpClientLike> {\n\tvalidate_mcp_server_name(server_name);\n\tif (config.enabled === false) {\n\t\tthrow new Error(`MCP server '${server_name}' is disabled`);\n\t}\n\tvalidate_runtime_environment(server_name, config, options.runtime_environment);\n\n\tswitch (config.transport.type) {\n\t\tcase \"streamable_http\":\n\t\t\treturn new RmcpJsonRpcClient(\n\t\t\t\tnew StreamableHttpMcpTransport({\n\t\t\t\t\turl: config.transport.url,\n\t\t\t\t\theaders: resolve_streamable_http_headers(\n\t\t\t\t\t\tserver_name,\n\t\t\t\t\t\tconfig.transport,\n\t\t\t\t\t\toptions.environment,\n\t\t\t\t\t),\n\t\t\t\t\tfetch: options.fetch,\n\t\t\t\t}),\n\t\t\t);\n\t\tcase \"stdio\": {\n\t\t\tconst launcher = options.stdio_server_launcher;\n\t\t\tif (!launcher) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`MCP stdio server '${server_name}' requires a stdio_server_launcher platform adapter`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn launcher.launch(\n\t\t\t\tserver_name,\n\t\t\t\tconfig.transport,\n\t\t\t\toptions.runtime_environment,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport class RmcpJsonRpcClient implements RmcpClientLike {\n\tprivate next_id = 1;\n\n\tconstructor(readonly transport: McpJsonRpcTransport) {}\n\n\tasync initialize(timeout?: number | null): Promise<RmcpInitializeResult> {\n\t\tconst result = await this.request(\"initialize\", {\n\t\t\tprotocolVersion: \"2025-06-18\",\n\t\t\tcapabilities: {\n\t\t\t\telicitation: elicitation_capability_for_server(),\n\t\t\t},\n\t\t\tclientInfo: {\n\t\t\t\tname: \"codex-mcp-client\",\n\t\t\t\ttitle: \"Codex\",\n\t\t\t\tversion: \"0.0.0\",\n\t\t\t},\n\t\t}, timeout);\n\t\tawait this.notify(\"notifications/initialized\", undefined, timeout);\n\t\treturn is_record(result) ? result : {};\n\t}\n\n\tasync list_tools(\n\t\tparams?: unknown,\n\t\ttimeout?: number | null,\n\t): Promise<RmcpListToolsResult> {\n\t\tconst result = await this.request(\"tools/list\", params ?? null, timeout);\n\t\treturn normalize_rmcp_tools_result(result);\n\t}\n\n\tasync call_tool(\n\t\ttool: string,\n\t\targuments_: unknown,\n\t\tmeta?: unknown,\n\t\ttimeout?: number | null,\n\t): Promise<unknown> {\n\t\treturn this.request(\n\t\t\t\"tools/call\",\n\t\t\tomit_undefined({\n\t\t\t\tname: tool,\n\t\t\t\targuments: arguments_ ?? {},\n\t\t\t\t_meta: meta,\n\t\t\t}),\n\t\t\ttimeout,\n\t\t);\n\t}\n\n\tasync list_resources(params?: unknown, timeout?: number | null): Promise<unknown> {\n\t\treturn this.request(\"resources/list\", params ?? null, timeout);\n\t}\n\n\tasync list_resource_templates(\n\t\tparams?: unknown,\n\t\ttimeout?: number | null,\n\t): Promise<unknown> {\n\t\treturn this.request(\"resources/templates/list\", params ?? null, timeout);\n\t}\n\n\tasync read_resource(params: unknown, timeout?: number | null): Promise<unknown> {\n\t\treturn this.request(\"resources/read\", params, timeout);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.transport.close?.();\n\t}\n\n\tprivate async request(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\ttimeout?: number | null,\n\t): Promise<unknown> {\n\t\tconst id = this.next_id++;\n\t\tconst response = await this.transport.request(\n\t\t\tomit_undefined({\n\t\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\t\tid,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t\ttimeout,\n\t\t);\n\t\tif (response.error) {\n\t\t\tthrow new Error(response.error.message);\n\t\t}\n\t\treturn response.result;\n\t}\n\n\tprivate async notify(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\ttimeout?: number | null,\n\t): Promise<void> {\n\t\tconst message = omit_undefined({\n\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t});\n\t\tif (this.transport.notify) {\n\t\t\tawait this.transport.notify(message, timeout);\n\t\t}\n\t}\n}\n\nexport class StreamableHttpMcpTransport implements McpJsonRpcTransport {\n\tprivate readonly fetch_impl: typeof fetch;\n\tprivate readonly headers: Record<string, string>;\n\n\tconstructor(input: {\n\t\turl: string;\n\t\theaders?: Record<string, string>;\n\t\tfetch?: typeof fetch;\n\t}) {\n\t\tthis.url = input.url;\n\t\tthis.headers = input.headers ?? {};\n\t\tthis.fetch_impl = input.fetch ?? globalThis.fetch;\n\t\tif (!this.fetch_impl) {\n\t\t\tthrow new Error(\"streamable HTTP MCP transport requires fetch\");\n\t\t}\n\t}\n\n\treadonly url: string;\n\n\tasync request(\n\t\tmessage: McpJsonRpcMessage,\n\t\ttimeout?: number | null,\n\t): Promise<McpJsonRpcMessage> {\n\t\tconst response = await this.post(message, timeout);\n\t\tconst parsed = await parse_streamable_http_response(response);\n\t\tconst result = find_json_rpc_response(parsed, message.id);\n\t\tif (!result) {\n\t\t\tthrow new Error(\n\t\t\t\t\"streamable HTTP MCP response did not include a matching JSON-RPC response\",\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync notify(\n\t\tmessage: McpJsonRpcMessage,\n\t\ttimeout?: number | null,\n\t): Promise<void> {\n\t\tawait this.post(message, timeout);\n\t}\n\n\tprivate async post(\n\t\tmessage: McpJsonRpcMessage,\n\t\ttimeout?: number | null,\n\t): Promise<Response> {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId =\n\t\t\ttimeout && timeout > 0\n\t\t\t\t? setTimeout(() => controller.abort(), timeout)\n\t\t\t\t: null;\n\t\ttry {\n\t\t\tconst response = await this.fetch_impl(this.url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\tAccept: \"application/json, text/event-stream\",\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...this.headers,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(message),\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`streamable HTTP MCP request failed with ${response.status}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn response;\n\t\t} finally {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class UnsupportedStdioServerLauncher implements StdioServerLauncher {\n\tasync launch(server_name: string): Promise<RmcpClientLike> {\n\t\tthrow new Error(\n\t\t\t`MCP stdio server '${server_name}' requires a host-provided launcher`,\n\t\t);\n\t}\n}\n\nexport async function list_tools_for_client_uncached(\n\tserver_name: string,\n\tclient: RmcpClientLike,\n\ttimeout?: number | null,\n\tserver_instructions?: string | null,\n): Promise<ToolInfo[]> {\n\tif (!client.list_tools) {\n\t\treturn [];\n\t}\n\tconst response = await client.list_tools(null, timeout);\n\tconst rawTools = normalize_list_tools_response(response);\n\tconst tools = rawTools.map((rawTool) =>\n\t\ttool_info_from_raw(server_name, rawTool, server_instructions),\n\t);\n\treturn server_name === CODEX_APPS_MCP_SERVER_NAME\n\t\t? filter_disallowed_codex_apps_tools(tools)\n\t\t: tools;\n}\n\nexport function validate_mcp_server_name(server_name: string): void {\n\tif (!/^[a-zA-Z0-9_-]+$/.test(server_name)) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP server name '${server_name}': must match pattern ^[a-zA-Z0-9_-]+$`,\n\t\t);\n\t}\n}\n\nfunction normalize_list_tools_response(\n\tresponse: RmcpListToolsResult,\n): Array<\n\tToolInfo | RmcpRawTool | ({ tool: RmcpRawTool } & Record<string, unknown>)\n> {\n\tif (Array.isArray(response)) {\n\t\treturn [...response];\n\t}\n\treturn [\n\t\t...(\n\t\t\tresponse as {\n\t\t\t\ttools: readonly (\n\t\t\t\t\t| ToolInfo\n\t\t\t\t\t| RmcpRawTool\n\t\t\t\t\t| ({ tool: RmcpRawTool } & Record<string, unknown>)\n\t\t\t\t)[];\n\t\t\t}\n\t\t).tools,\n\t];\n}\n\nfunction normalize_rmcp_tools_result(result: unknown): RmcpListToolsResult {\n\tif (Array.isArray(result)) {\n\t\treturn result as RmcpListToolsResult;\n\t}\n\tif (is_record(result) && Array.isArray(result.tools)) {\n\t\treturn {\n\t\t\ttools: result.tools as RmcpListToolsResult extends infer _T\n\t\t\t\t? readonly (\n\t\t\t\t\t\t| ToolInfo\n\t\t\t\t\t\t| RmcpRawTool\n\t\t\t\t\t\t| ({ tool: RmcpRawTool } & Record<string, unknown>)\n\t\t\t\t\t)[]\n\t\t\t\t: never,\n\t\t};\n\t}\n\treturn { tools: [] };\n}\n\nfunction resolve_streamable_http_headers(\n\tserver_name: string,\n\ttransport: Extract<McpServerTransportConfig, { type: \"streamable_http\" }>,\n\tenvironment: Record<string, string | undefined> = {},\n): Record<string, string> {\n\tconst headers: Record<string, string> = {\n\t\t...(transport.http_headers ?? {}),\n\t};\n\tfor (const [headerName, envName] of Object.entries(transport.env_http_headers ?? {})) {\n\t\tconst value = environment[envName];\n\t\tif (!value) {\n\t\t\tthrow new Error(\n\t\t\t\t`Environment variable ${envName} for MCP server '${server_name}' is not set`,\n\t\t\t);\n\t\t}\n\t\theaders[headerName] = value;\n\t}\n\tif (transport.bearer_token_env_var) {\n\t\tconst token = environment[transport.bearer_token_env_var];\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t`Environment variable ${transport.bearer_token_env_var} for MCP server '${server_name}' is not set`,\n\t\t\t);\n\t\t}\n\t\theaders.Authorization = `Bearer ${token}`;\n\t}\n\treturn headers;\n}\n\nfunction validate_runtime_environment(\n\tserver_name: string,\n\tconfig: McpServerConfig,\n\truntime_environment?: McpRuntimeEnvironment | null,\n): void {\n\tconst environment = config.experimental_environment;\n\tif (!environment || environment === \"local\") {\n\t\treturn;\n\t}\n\tif (environment === \"remote\") {\n\t\tif (!runtime_environment?.remote) {\n\t\t\tthrow new Error(\n\t\t\t\t`remote MCP server '${server_name}' requires a remote environment`,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\tthrow new Error(\n\t\t`unsupported experimental_environment '${environment}' for MCP server '${server_name}'`,\n\t);\n}\n\nasync function parse_streamable_http_response(\n\tresponse: Response,\n): Promise<McpJsonRpcMessage[]> {\n\tconst contentType = response.headers.get(\"content-type\") ?? \"\";\n\tif (contentType.includes(\"text/event-stream\")) {\n\t\treturn parse_sse_json_rpc_messages(await response.text());\n\t}\n\tconst value = (await response.json()) as unknown;\n\treturn Array.isArray(value)\n\t\t? value.filter(is_json_rpc_message)\n\t\t: is_json_rpc_message(value)\n\t\t\t? [value]\n\t\t\t: [];\n}\n\nfunction parse_sse_json_rpc_messages(text: string): McpJsonRpcMessage[] {\n\tconst messages: McpJsonRpcMessage[] = [];\n\tlet dataLines: string[] = [];\n\tconst flush = () => {\n\t\tif (dataLines.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = dataLines.join(\"\\n\");\n\t\tdataLines = [];\n\t\tif (data.trim() === \"[DONE]\") {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(data) as unknown;\n\t\t\tif (is_json_rpc_message(parsed)) {\n\t\t\t\tmessages.push(parsed);\n\t\t\t}\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t};\n\tfor (const line of text.split(/\\r?\\n/)) {\n\t\tif (line === \"\") {\n\t\t\tflush();\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"data:\")) {\n\t\t\tdataLines.push(line.slice(\"data:\".length).trimStart());\n\t\t}\n\t}\n\tflush();\n\treturn messages;\n}\n\nfunction find_json_rpc_response(\n\tmessages: readonly McpJsonRpcMessage[],\n\tid: string | number | undefined,\n): McpJsonRpcMessage | null {\n\treturn messages.find((message) => message.id === id) ?? null;\n}\n\nfunction is_json_rpc_message(value: unknown): value is McpJsonRpcMessage {\n\treturn is_record(value) && value.jsonrpc === \"2.0\";\n}\n\nfunction tool_info_from_raw(\n\tserverName: string,\n\traw:\n\t\t| ToolInfo\n\t\t| RmcpRawTool\n\t\t| ({ tool: RmcpRawTool } & Record<string, unknown>),\n\tserverInstructions?: string | null,\n): ToolInfo {\n\tif (is_tool_info(raw)) {\n\t\treturn {\n\t\t\t...raw,\n\t\t\tplugin_display_names: [...(raw.plugin_display_names ?? [])],\n\t\t};\n\t}\n\tconst envelope = \"tool\" in raw ? raw : { tool: raw };\n\tconst rawTool = envelope.tool;\n\tconst connectorId =\n\t\ttypeof envelope.connector_id === \"string\"\n\t\t\t? envelope.connector_id\n\t\t\t: rawTool.connector_id ?? null;\n\tconst connectorName =\n\t\ttypeof envelope.connector_name === \"string\"\n\t\t\t? envelope.connector_name\n\t\t\t: rawTool.connector_name ?? null;\n\tconst connectorDescription =\n\t\ttypeof envelope.connector_description === \"string\"\n\t\t\t? envelope.connector_description\n\t\t\t: rawTool.connector_description ?? null;\n\tconst callableName = normalize_codex_apps_callable_name(\n\t\tserverName,\n\t\trawTool.name,\n\t\tconnectorId,\n\t\tconnectorName,\n\t);\n\tconst callableNamespace =\n\t\tserverName === CODEX_APPS_MCP_SERVER_NAME\n\t\t\t? normalize_codex_apps_callable_namespace(serverName, connectorName)\n\t\t\t: qualified_mcp_tool_name_prefix(serverName);\n\tconst title = rawTool.title\n\t\t? normalize_codex_apps_tool_title(serverName, connectorName, rawTool.title)\n\t\t: null;\n\tconst hasConnectorMetadata =\n\t\tconnectorId != null || connectorName != null || connectorDescription != null;\n\treturn {\n\t\tserver_name: serverName,\n\t\tname: rawTool.name,\n\t\tcallable_name: callableName,\n\t\tcallable_namespace: callableNamespace,\n\t\tnamespace_description: hasConnectorMetadata\n\t\t\t? connectorDescription\n\t\t\t: (serverInstructions ?? null),\n\t\ttitle,\n\t\tdescription: rawTool.description ?? null,\n\t\tinput_schema: rawTool.input_schema ?? { type: \"object\" },\n\t\tmeta: rawTool.meta,\n\t\tconnector_id: connectorId,\n\t\tconnector_name: connectorName,\n\t\tplugin_display_names: [],\n\t};\n}\n\nfunction is_tool_info(value: unknown): value is ToolInfo {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"server_name\" in value &&\n\t\t\"name\" in value\n\t);\n}\n\nfunction is_record(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction omit_undefined<T extends Record<string, unknown>>(\n\tinput: T,\n): T {\n\treturn Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\n\t) as T;\n}\n\nfunction seconds_to_ms(seconds?: number | null): number | null {\n\treturn typeof seconds === \"number\" ? seconds * 1000 : null;\n}\n\nfunction error_message(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction startup_outcome_error_message(error: StartupOutcomeError): string {\n\treturn error.kind === \"Cancelled\"\n\t\t? \"MCP startup cancelled\"\n\t\t: (error.error ?? error.message);\n}\n\nclass StartupCompleteFlag {\n\tprivate value = false;\n\n\tstore(value: boolean): void {\n\t\tthis.value = value;\n\t}\n\n\tload(): boolean {\n\t\treturn this.value;\n\t}\n}\n","import {\n\tCODEX_APPS_MCP_SERVER_NAME,\n\tToolPluginProvenance,\n} from \"./mcp/mod\";\nimport { ElicitationRequestManager, type ElicitationResponse } from \"./elicitation\";\nimport type { McpAuthStatusEntry } from \"./mcp/auth\";\nimport {\n\ttype CodexAppsToolsCacheContext,\n\twrite_cached_codex_apps_tools_if_needed,\n} from \"./codex_apps\";\nimport {\n\tAsyncManagedClient,\n\tDEFAULT_STARTUP_TIMEOUT,\n\tManagedClient,\n\tStartupOutcomeError,\n\ttype AsyncManagedClientStartupStatus,\n\ttype McpClientFactoryOptions,\n\ttype McpServerConfig,\n\ttype McpServerTransportConfig,\n\ttype RmcpClientLike,\n\tlist_tools_for_client_uncached,\n} from \"./rmcp_client\";\nimport {\n\tToolFilter,\n\ttype ToolInfo,\n\tfilter_tools,\n\tqualify_tools,\n\ttool_with_model_visible_input_schema,\n} from \"./tools\";\n\nexport type McpConnectionManagerInput = {\n\tclients?: ReadonlyMap<string, AsyncManagedClient> | Record<string, AsyncManagedClient>;\n\tserver_origins?: ReadonlyMap<string, string> | Record<string, string>;\n\thost_owned_codex_apps_enabled?: boolean;\n\telicitation_requests?: ElicitationRequestManager | null;\n};\n\nexport type McpStartupFailure = {\n\tserver: string;\n\terror: string;\n};\n\nexport type McpStartupStatus = AsyncManagedClientStartupStatus;\n\nexport class McpConnectionManager {\n\treadonly clients = new Map<string, AsyncManagedClient>();\n\tprivate readonly server_origins = new Map<string, string>();\n\tprivate readonly elicitation_requests: ElicitationRequestManager;\n\tprivate host_owned_codex_apps_enabled: boolean;\n\tprivate startup_cancelled = false;\n\n\tconstructor(input: McpConnectionManagerInput = {}) {\n\t\tfor (const [serverName, client] of map_entries(input.clients)) {\n\t\t\tthis.clients.set(serverName, client);\n\t\t}\n\t\tfor (const [serverName, origin] of map_entries(input.server_origins)) {\n\t\t\tthis.server_origins.set(serverName, origin);\n\t\t}\n\t\tthis.host_owned_codex_apps_enabled =\n\t\t\tinput.host_owned_codex_apps_enabled ?? false;\n\t\tthis.elicitation_requests =\n\t\t\tinput.elicitation_requests ??\n\t\t\tnew ElicitationRequestManager(\"on-failure\", { type: \"managed\" });\n\t}\n\n\tstatic new_uninitialized(): McpConnectionManager {\n\t\treturn new McpConnectionManager();\n\t}\n\n\tstatic from_managed_clients(\n\t\tclients: ReadonlyMap<string, ManagedClient> | Record<string, ManagedClient>,\n\t): McpConnectionManager {\n\t\tconst asyncClients = new Map<string, AsyncManagedClient>();\n\t\tfor (const [serverName, client] of map_entries(clients)) {\n\t\t\tasyncClients.set(serverName, AsyncManagedClient.from_managed_client(client));\n\t\t}\n\t\treturn new McpConnectionManager({ clients: asyncClients });\n\t}\n\n\tstatic from_rmcp_clients(\n\t\tclients: ReadonlyMap<string, RmcpClientLike> | Record<string, RmcpClientLike>,\n\t\toptions: {\n\t\t\ttool_filter_by_server?: ReadonlyMap<string, ToolFilter> | Record<string, ToolFilter>;\n\t\t\ttool_timeout?: number | null;\n\t\t\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n\t\t\ttool_plugin_provenance?: ToolPluginProvenance;\n\t\t} = {},\n\t): McpConnectionManager {\n\t\tconst asyncClients = new Map<string, AsyncManagedClient>();\n\t\tfor (const [serverName, client] of map_entries(clients)) {\n\t\t\tasyncClients.set(\n\t\t\t\tserverName,\n\t\t\t\tAsyncManagedClient.new(serverName, {\n\t\t\t\t\tclient,\n\t\t\t\t\ttool_filter: map_get(options.tool_filter_by_server, serverName),\n\t\t\t\t\ttool_timeout: options.tool_timeout,\n\t\t\t\t\tcodex_apps_tools_cache_context:\n\t\t\t\t\t\tserverName === CODEX_APPS_MCP_SERVER_NAME\n\t\t\t\t\t\t\t? options.codex_apps_tools_cache_context\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\ttool_plugin_provenance: options.tool_plugin_provenance,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn new McpConnectionManager({ clients: asyncClients });\n\t}\n\n\tstatic from_config(\n\t\tmcp_servers:\n\t\t\t| ReadonlyMap<string, McpServerConfig>\n\t\t\t| Record<string, McpServerConfig>,\n\t\toptions: {\n\t\t\tclient_factory_options?: McpClientFactoryOptions;\n\t\t\tcodex_apps_tools_cache_context?: CodexAppsToolsCacheContext | null;\n\t\t\thost_owned_codex_apps_enabled?: boolean;\n\t\t\ttool_plugin_provenance?: ToolPluginProvenance;\n\t\t\telicitation_requests?: ElicitationRequestManager | null;\n\t\t} = {},\n\t): McpConnectionManager {\n\t\tconst asyncClients = new Map<string, AsyncManagedClient>();\n\t\tconst serverOrigins = new Map<string, string>();\n\t\tfor (const [serverName, config] of map_entries(mcp_servers)) {\n\t\t\tif (config.enabled === false) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst origin = transport_origin(config.transport);\n\t\t\tif (origin) {\n\t\t\t\tserverOrigins.set(serverName, origin);\n\t\t\t}\n\t\t\tasyncClients.set(\n\t\t\t\tserverName,\n\t\t\t\tAsyncManagedClient.from_config(serverName, config, {\n\t\t\t\t\tclient_factory_options: options.client_factory_options,\n\t\t\t\t\tcodex_apps_tools_cache_context:\n\t\t\t\t\t\tserverName === CODEX_APPS_MCP_SERVER_NAME\n\t\t\t\t\t\t\t? options.codex_apps_tools_cache_context\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\ttool_plugin_provenance: options.tool_plugin_provenance,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn new McpConnectionManager({\n\t\t\tclients: asyncClients,\n\t\t\tserver_origins: serverOrigins,\n\t\t\thost_owned_codex_apps_enabled: options.host_owned_codex_apps_enabled,\n\t\t\telicitation_requests: options.elicitation_requests,\n\t\t});\n\t}\n\n\thas_servers(): boolean {\n\t\treturn this.clients.size > 0;\n\t}\n\n\tbegin_shutdown(): Promise<void> {\n\t\tthis.startup_cancelled = true;\n\t\tconst clients = [...this.clients.values()];\n\t\tthis.clients.clear();\n\t\tthis.server_origins.clear();\n\t\treturn Promise.all(clients.map((client) => client.shutdown())).then(() => {});\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.begin_shutdown();\n\t}\n\n\tserver_origin(server_name: string): string | null {\n\t\treturn this.server_origins.get(server_name) ?? null;\n\t}\n\n\tis_host_owned_codex_apps_server(server_name: string): boolean {\n\t\treturn (\n\t\t\tthis.host_owned_codex_apps_enabled &&\n\t\t\tserver_name === CODEX_APPS_MCP_SERVER_NAME\n\t\t);\n\t}\n\n\tset_approval_policy(approval_policy: unknown): void {\n\t\tthis.elicitation_requests.set_approval_policy(approval_policy);\n\t}\n\n\tset_permission_profile(permission_profile: unknown): void {\n\t\tthis.elicitation_requests.set_permission_profile(permission_profile);\n\t}\n\n\telicitations_auto_deny(): boolean {\n\t\treturn this.elicitation_requests.auto_deny();\n\t}\n\n\tset_elicitations_auto_deny(auto_deny: boolean): void {\n\t\tthis.elicitation_requests.set_auto_deny(auto_deny);\n\t}\n\n\tasync resolve_elicitation(\n\t\tserver_name: string,\n\t\tid: string | number,\n\t\tresponse: ElicitationResponse,\n\t): Promise<void> {\n\t\tawait this.elicitation_requests.resolve(server_name, id, response);\n\t}\n\n\tasync wait_for_server_ready(\n\t\tserver_name: string,\n\t\ttimeout_ms = DEFAULT_STARTUP_TIMEOUT,\n\t): Promise<boolean> {\n\t\tconst client = this.clients.get(server_name);\n\t\tif (!client) {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\tawait with_timeout(client.client(), timeout_ms);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync required_startup_failures(\n\t\trequired_servers: readonly string[],\n\t): Promise<McpStartupFailure[]> {\n\t\tconst failures: McpStartupFailure[] = [];\n\t\tfor (const serverName of required_servers) {\n\t\t\tconst client = this.clients.get(serverName);\n\t\t\tif (!client) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tserver: serverName,\n\t\t\t\t\terror: `required MCP server \\`${serverName}\\` was not initialized`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait client.client();\n\t\t\t} catch (error) {\n\t\t\t\tfailures.push({\n\t\t\t\t\tserver: serverName,\n\t\t\t\t\terror: startup_outcome_error_message(error),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn failures;\n\t}\n\n\tstartup_statuses(): Map<string, McpStartupStatus> {\n\t\tconst statuses = new Map<string, McpStartupStatus>();\n\t\tfor (const [serverName, client] of this.clients.entries()) {\n\t\t\tstatuses.set(serverName, client.startup_status());\n\t\t}\n\t\treturn statuses;\n\t}\n\n\tasync list_all_tools(): Promise<Map<string, ToolInfo>> {\n\t\tconst tools: ToolInfo[] = [];\n\t\tfor (const managedClient of this.clients.values()) {\n\t\t\tconst listed = await managedClient.listed_tools();\n\t\t\tif (listed) {\n\t\t\t\ttools.push(...listed);\n\t\t\t}\n\t\t}\n\t\treturn qualify_tools(tools);\n\t}\n\n\tasync hard_refresh_codex_apps_tools_cache(): Promise<Map<string, ToolInfo>> {\n\t\tconst managedClient = await this.client_by_name(CODEX_APPS_MCP_SERVER_NAME);\n\t\tif (!managedClient.client) {\n\t\t\tthrow new Error(\n\t\t\t\t`unknown MCP server '${CODEX_APPS_MCP_SERVER_NAME}' or server has no live client`,\n\t\t\t);\n\t\t}\n\t\tlet tools = await list_tools_for_client_uncached(\n\t\t\tCODEX_APPS_MCP_SERVER_NAME,\n\t\t\tmanagedClient.client,\n\t\t\tmanagedClient.tool_timeout,\n\t\t\tmanagedClient.server_instructions,\n\t\t);\n\t\twrite_cached_codex_apps_tools_if_needed(\n\t\t\tCODEX_APPS_MCP_SERVER_NAME,\n\t\t\tmanagedClient.codex_apps_tools_cache_context,\n\t\t\ttools,\n\t\t);\n\t\ttools = filter_tools(tools, managedClient.tool_filter).map((tool) =>\n\t\t\ttool_with_model_visible_input_schema(tool),\n\t\t);\n\t\treturn qualify_tools(tools);\n\t}\n\n\tasync list_all_resources(): Promise<Map<string, unknown[]>> {\n\t\tconst aggregated = new Map<string, unknown[]>();\n\t\tfor (const [serverName, asyncClient] of this.clients.entries()) {\n\t\t\ttry {\n\t\t\t\tconst result = await (await asyncClient.client()).list_resources(null);\n\t\t\t\taggregated.set(serverName, response_array(result, \"resources\"));\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\treturn aggregated;\n\t}\n\n\tasync list_all_resource_templates(): Promise<Map<string, unknown[]>> {\n\t\tconst aggregated = new Map<string, unknown[]>();\n\t\tfor (const [serverName, asyncClient] of this.clients.entries()) {\n\t\t\ttry {\n\t\t\t\tconst result = await (await asyncClient.client()).list_resource_templates(\n\t\t\t\t\tnull,\n\t\t\t\t);\n\t\t\t\taggregated.set(serverName, response_array(result, \"resource_templates\"));\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\treturn aggregated;\n\t}\n\n\tasync call_tool(\n\t\tserver: string,\n\t\ttool: string,\n\t\targuments_: unknown,\n\t\tmeta?: unknown,\n\t): Promise<unknown> {\n\t\tconst client = await this.client_by_name(server);\n\t\ttry {\n\t\t\treturn await client.call_tool(tool, arguments_, meta);\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.message === `tool '${tool}' is disabled`) {\n\t\t\t\tthrow new Error(`tool '${tool}' is disabled for MCP server '${server}'`);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync server_supports_sandbox_state_meta_capability(\n\t\tserver: string,\n\t): Promise<boolean> {\n\t\treturn (await this.client_by_name(server))\n\t\t\t.server_supports_sandbox_state_meta_capability;\n\t}\n\n\tasync list_resources(server: string, params?: unknown): Promise<unknown> {\n\t\treturn (await this.client_by_name(server)).list_resources(params);\n\t}\n\n\tasync list_resource_templates(server: string, params?: unknown): Promise<unknown> {\n\t\treturn (await this.client_by_name(server)).list_resource_templates(params);\n\t}\n\n\tasync read_resource(server: string, params: unknown): Promise<unknown> {\n\t\treturn (await this.client_by_name(server)).read_resource(params);\n\t}\n\n\tasync resolve_tool_info(\n\t\ttool_name: string | { namespace?: string | null; name: string },\n\t): Promise<ToolInfo | null> {\n\t\tconst target =\n\t\t\ttypeof tool_name === \"string\"\n\t\t\t\t? tool_name\n\t\t\t\t: tool_name.namespace\n\t\t\t\t\t? `${tool_name.namespace}.${tool_name.name}`\n\t\t\t\t\t: tool_name.name;\n\t\tconst allTools = await this.list_all_tools();\n\t\tfor (const tool of allTools.values()) {\n\t\t\tif (`${tool.callable_namespace}.${tool.callable_name}` === target) {\n\t\t\t\treturn tool;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate async client_by_name(name: string): Promise<ManagedClient> {\n\t\tif (this.startup_cancelled) {\n\t\t\tthrow StartupOutcomeError.cancelled();\n\t\t}\n\t\tconst client = this.clients.get(name);\n\t\tif (!client) {\n\t\t\tthrow new Error(`unknown MCP server '${name}'`);\n\t\t}\n\t\ttry {\n\t\t\treturn await client.client();\n\t\t} catch (error) {\n\t\t\tthrow new Error(`failed to get client: ${startup_outcome_error_message(error)}`);\n\t\t}\n\t}\n}\n\nexport function transport_origin(\n\ttransport: McpServerTransportConfig,\n): string | null {\n\tif (transport.type === \"stdio\") {\n\t\treturn \"stdio\";\n\t}\n\ttry {\n\t\treturn new URL(transport.url).origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function mcp_init_error_display(\n\tserver_name: string,\n\tentry: McpAuthStatusEntry | null | undefined,\n\terr: unknown,\n): string {\n\tconst transport = entry?.config?.transport;\n\tconst error = startup_outcome_error_message(err);\n\tif (\n\t\ttransport?.type === \"streamable_http\" &&\n\t\ttransport.url === \"https://api.githubcopilot.com/mcp/\" &&\n\t\t!transport.bearer_token_env_var &&\n\t\t!has_headers(transport.http_headers)\n\t) {\n\t\treturn `GitHub MCP does not support OAuth. Log in by adding a personal access token (https://github.com/settings/personal-access-tokens) to your environment and config.toml:\\n[mcp_servers.${server_name}]\\nbearer_token_env_var = CODEX_GITHUB_PERSONAL_ACCESS_TOKEN`;\n\t}\n\tif (is_mcp_client_auth_required_error(err)) {\n\t\treturn `The ${server_name} MCP server is not logged in. Run \\`codex mcp login ${server_name}\\`.`;\n\t}\n\tif (is_mcp_client_startup_timeout_error(err)) {\n\t\tconst startupTimeoutSecs = entry?.config?.startup_timeout_sec ?? 30;\n\t\treturn `MCP client for \\`${server_name}\\` timed out after ${startupTimeoutSecs} seconds. Add or adjust \\`startup_timeout_sec\\` in your config.toml:\\n[mcp_servers.${server_name}]\\nstartup_timeout_sec = XX`;\n\t}\n\treturn `MCP client for \\`${server_name}\\` failed to start: ${error}`;\n}\n\nexport function startup_outcome_error_message(error: unknown): string {\n\tif (error instanceof StartupOutcomeError) {\n\t\treturn error.kind === \"Cancelled\"\n\t\t\t? \"MCP startup cancelled\"\n\t\t\t: (error.error ?? error.message);\n\t}\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function is_mcp_client_auth_required_error(error: unknown): boolean {\n\treturn startup_outcome_error_message(error).includes(\"Auth required\");\n}\n\nexport function is_mcp_client_startup_timeout_error(error: unknown): boolean {\n\tconst message = startup_outcome_error_message(error);\n\treturn (\n\t\tmessage.includes(\"request timed out\") ||\n\t\tmessage.includes(\"timed out handshaking with MCP server\")\n\t);\n}\n\nfunction response_array(value: unknown, key: string): unknown[] {\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\tif (value && typeof value === \"object\" && key in value) {\n\t\tconst field = (value as Record<string, unknown>)[key];\n\t\treturn Array.isArray(field) ? field : [];\n\t}\n\treturn [];\n}\n\nfunction map_entries<T>(\n\tinput?: ReadonlyMap<string, T> | Record<string, T>,\n): Array<[string, T]> {\n\tif (!input) {\n\t\treturn [];\n\t}\n\treturn input instanceof Map ? [...input.entries()] : Object.entries(input);\n}\n\nfunction map_get<T>(\n\tinput: ReadonlyMap<string, T> | Record<string, T> | undefined,\n\tkey: string,\n): T | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\treturn input instanceof Map ? input.get(key) : (input as Record<string, T>)[key];\n}\n\nasync function with_timeout<T>(promise: Promise<T>, timeout_ms: number): Promise<T> {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<never>((_, reject) => {\n\t\t\t\ttimeout = setTimeout(\n\t\t\t\t\t() => reject(new Error(\"request timed out\")),\n\t\t\t\t\ttimeout_ms,\n\t\t\t\t);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t}\n}\n\nfunction has_headers(headers?: Record<string, string> | null): boolean {\n\treturn headers != null && Object.keys(headers).length > 0;\n}\n","import type {\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpResourceInfo,\n\tMcpResourceListParams,\n\tMcpResourceListResponse,\n\tMcpResourceTemplateInfo,\n\tMcpResourceTemplateListResponse,\n\tMcpAuthStatus,\n\tMcpRuntimeEnvironment,\n\tMcpServerElicitationResponse,\n\tMcpServerRefreshConfig,\n\tMcpServerStatusListOptions,\n\tMcpServerStatus,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tMcpToolInfo,\n\tMcpRequestId,\n} from \"./types\";\nimport {\n\tMcpServerStartupState,\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n} from \"./types\";\nimport { qualify_tool_infos } from \"../../../codex-mcp/src/tools\";\nimport {\n\tMcpConnectionManager as CodexMcpConnectionManager,\n\tmcp_init_error_display,\n\ttype McpStartupFailure,\n} from \"../../../codex-mcp/src/connection_manager\";\nimport {\n\tcompute_auth_statuses,\n\ttype McpAuthStatusEntry,\n} from \"../../../codex-mcp/src/mcp/auth\";\nimport type {\n\tMcpClientFactoryOptions,\n\tMcpServerConfig as CodexMcpServerConfig,\n\tMcpServerTransportConfig,\n} from \"../../../codex-mcp/src/rmcp_client\";\n\nexport interface McpConnectionManager {\n\trefresh_mcp_servers_now(\n\t\tconfig: McpServerRefreshConfig,\n\t\tenvironment: McpRuntimeEnvironment,\n\t): Promise<void>;\n\tlist_server_statuses(\n\t\toptions?: McpServerStatusListOptions,\n\t): Promise<McpServerStatus[]>;\n\tlist_resources(params: McpResourceListParams): Promise<McpResourceListResponse>;\n\tlist_resource_templates(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceTemplateListResponse>;\n\tread_resource(params: McpResourceReadParams): Promise<McpResourceReadResponse>;\n\tcall_tool(params: McpServerToolCallParams): Promise<McpServerToolCallResponse>;\n\tresolve_tool_info(serverName: string, toolName: string): Promise<McpToolInfo | null>;\n\tlist_tools(): Promise<McpToolInfo[]>;\n\tresolve_elicitation(\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t\tresponse: McpServerElicitationResponse,\n\t): Promise<void>;\n\tshutdown(): Promise<void>;\n}\n\nexport class EmptyMcpConnectionManager implements McpConnectionManager {\n\tstatic readonly instance = new EmptyMcpConnectionManager();\n\n\tasync refresh_mcp_servers_now(): Promise<void> {\n\t\treturn;\n\t}\n\n\tasync list_server_statuses(): Promise<McpServerStatus[]> {\n\t\treturn [];\n\t}\n\n\tasync list_resources(params: McpResourceListParams): Promise<McpResourceListResponse> {\n\t\tthrow new Error(`MCP server is unavailable: ${params.server_name ?? \"all\"}`);\n\t}\n\n\tasync list_resource_templates(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceTemplateListResponse> {\n\t\tthrow new Error(`MCP server is unavailable: ${params.server_name ?? \"all\"}`);\n\t}\n\n\tasync read_resource(params: McpResourceReadParams): Promise<McpResourceReadResponse> {\n\t\tthrow new Error(`MCP server is unavailable: ${params.server_name}`);\n\t}\n\n\tasync call_tool(params: McpServerToolCallParams): Promise<McpServerToolCallResponse> {\n\t\tthrow new Error(\n\t\t\t`MCP tool is unavailable: ${params.server_name}.${params.tool_name}`,\n\t\t);\n\t}\n\n\tasync resolve_tool_info(): Promise<McpToolInfo | null> {\n\t\treturn null;\n\t}\n\n\tasync list_tools(): Promise<McpToolInfo[]> {\n\t\treturn [];\n\t}\n\n\tasync resolve_elicitation(serverName: string): Promise<void> {\n\t\tthrow new Error(`MCP server is unavailable: ${serverName}`);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\treturn;\n\t}\n}\n\nexport type CodexMcpConnectionManagerAdapterOptions = {\n\tclient_factory_options?: McpClientFactoryOptions;\n};\n\nexport class CodexMcpConnectionManagerAdapter implements McpConnectionManager {\n\tprivate manager: CodexMcpConnectionManager;\n\tprivate readonly client_factory_options?: McpClientFactoryOptions;\n\tprivate configured_servers = new Map<string, CodexMcpServerConfig>();\n\tprivate auth_statuses = new Map<string, McpAuthStatusEntry>();\n\n\tconstructor(\n\t\tmanager: CodexMcpConnectionManager =\n\t\t\tCodexMcpConnectionManager.new_uninitialized(),\n\t\toptions: CodexMcpConnectionManagerAdapterOptions = {},\n\t) {\n\t\tthis.manager = manager;\n\t\tthis.client_factory_options = options.client_factory_options;\n\t}\n\n\tasync refresh_mcp_servers_now(\n\t\tconfig: McpServerRefreshConfig,\n\t\tenvironment: McpRuntimeEnvironment,\n\t): Promise<void> {\n\t\tconst servers = normalize_mcp_server_configs(config.mcp_servers);\n\t\tconst authStatuses = await compute_auth_statuses(\n\t\t\tservers,\n\t\t\tconfig.mcp_oauth_credentials_store_mode,\n\t\t);\n\t\tconst refreshed = CodexMcpConnectionManager.from_config(servers, {\n\t\t\tclient_factory_options: {\n\t\t\t\t...this.client_factory_options,\n\t\t\t\truntime_environment: {\n\t\t\t\t\t...this.client_factory_options?.runtime_environment,\n\t\t\t\t\tcwd: environment.cwd,\n\t\t\t\t\tenvironment_id: environment.environment_id,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tawait refreshed.list_all_tools();\n\t\tconst previous = this.manager;\n\t\tthis.manager = refreshed;\n\t\tthis.configured_servers = servers;\n\t\tthis.auth_statuses = authStatuses;\n\t\tawait previous.shutdown();\n\t}\n\n\tasync list_server_statuses(\n\t\toptions: McpServerStatusListOptions = {},\n\t): Promise<McpServerStatus[]> {\n\t\tconst tools = [...(await this.manager.list_all_tools()).values()];\n\t\tconst includeInventory = options.detail !== \"toolsAndAuthOnly\";\n\t\tconst resources = includeInventory\n\t\t\t? await this.manager.list_all_resources()\n\t\t\t: new Map<string, McpResourceInfo[]>();\n\t\tconst resourceTemplates = includeInventory\n\t\t\t? await this.manager.list_all_resource_templates()\n\t\t\t: new Map<string, McpResourceTemplateInfo[]>();\n\t\tconst startupStatuses = this.manager.startup_statuses();\n\t\tconst serverNames = new Set([\n\t\t\t...this.configured_servers.keys(),\n\t\t\t...startupStatuses.keys(),\n\t\t\t...tools.map((tool) => tool.server_name),\n\t\t\t...resources.keys(),\n\t\t\t...resourceTemplates.keys(),\n\t\t]);\n\t\treturn [...serverNames].sort().map((name) => {\n\t\t\tconst configured = this.configured_servers.get(name);\n\t\t\tconst startupStatus =\n\t\t\t\tconfigured?.enabled === false\n\t\t\t\t\t? { status: \"cancelled\" as const }\n\t\t\t\t\t: startupStatuses.get(name) ?? { status: \"ready\" as const };\n\t\t\tconst startup_state = mcpStartupState(startupStatus.status);\n\t\t\tconst authStatus = coreAuthStatus(\n\t\t\t\tthis.auth_statuses.get(name)?.auth_status ?? \"unsupported\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tstartup_state,\n\t\t\t\terror: mcpStatusError(name, startupStatus, this.auth_statuses.get(name)),\n\t\t\t\ttools: tools\n\t\t\t\t\t.filter((tool) => tool.server_name === name)\n\t\t\t\t\t.map((tool) => ({ ...tool })),\n\t\t\t\tresources: [...(resources.get(name) ?? [])] as McpResourceInfo[],\n\t\t\t\tresource_templates: [\n\t\t\t\t\t...(resourceTemplates.get(name) ?? []),\n\t\t\t\t] as McpResourceTemplateInfo[],\n\t\t\t\tauth_status: authStatus,\n\t\t\t\tauthStatus,\n\t\t\t\toauth: oauthStatus(authStatus),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync list_resources(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceListResponse> {\n\t\tif (params.server_name) {\n\t\t\tconst result = await this.manager.list_resources(params.server_name, {\n\t\t\t\tcursor: params.cursor ?? null,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tserver_name: params.server_name,\n\t\t\t\tresources: responseArray(result, \"resources\") as McpResourceInfo[],\n\t\t\t\tnext_cursor: responseCursor(result),\n\t\t\t};\n\t\t}\n\n\t\tconst resources = await this.manager.list_all_resources();\n\t\treturn {\n\t\t\tserver_name: null,\n\t\t\tresources: [...resources.entries()].flatMap(([server, entries]) =>\n\t\t\t\tentries.map((resource) => ({\n\t\t\t\t\t...(resource as Record<string, unknown>),\n\t\t\t\t\tserver,\n\t\t\t\t})),\n\t\t\t) as unknown as McpResourceInfo[],\n\t\t\tnext_cursor: null,\n\t\t};\n\t}\n\n\tasync list_resource_templates(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceTemplateListResponse> {\n\t\tif (params.server_name) {\n\t\t\tconst result = await this.manager.list_resource_templates(params.server_name, {\n\t\t\t\tcursor: params.cursor ?? null,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tserver_name: params.server_name,\n\t\t\t\tresource_templates: responseArray(\n\t\t\t\t\tresult,\n\t\t\t\t\t\"resource_templates\",\n\t\t\t\t) as McpResourceTemplateInfo[],\n\t\t\t\tnext_cursor: responseCursor(result),\n\t\t\t};\n\t\t}\n\n\t\tconst templates = await this.manager.list_all_resource_templates();\n\t\treturn {\n\t\t\tserver_name: null,\n\t\t\tresource_templates: [...templates.entries()].flatMap(([server, entries]) =>\n\t\t\t\tentries.map((template) => ({\n\t\t\t\t\t...(template as Record<string, unknown>),\n\t\t\t\t\tserver,\n\t\t\t\t})),\n\t\t\t) as unknown as McpResourceTemplateInfo[],\n\t\t\tnext_cursor: null,\n\t\t};\n\t}\n\n\tasync read_resource(\n\t\tparams: McpResourceReadParams,\n\t): Promise<McpResourceReadResponse> {\n\t\tconst result = await this.manager.read_resource(params.server_name, {\n\t\t\turi: params.uri,\n\t\t});\n\t\tconst record = isRecord(result) ? result : {};\n\t\treturn {\n\t\t\tserver_name: params.server_name,\n\t\t\turi: params.uri,\n\t\t\tcontents: Array.isArray(record.contents) ? record.contents : [],\n\t\t};\n\t}\n\n\tasync call_tool(\n\t\tparams: McpServerToolCallParams,\n\t): Promise<McpServerToolCallResponse> {\n\t\tlet output: unknown;\n\t\ttry {\n\t\t\toutput = await this.manager.call_tool(\n\t\t\t\tparams.server_name,\n\t\t\t\tparams.tool_name,\n\t\t\t\tparams.arguments,\n\t\t\t\tparams.meta,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === `unknown MCP server '${params.server_name}'`) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`MCP tool is unavailable: ${params.server_name}.${params.tool_name}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tcall_id: params.call_id ?? null,\n\t\t\tserver_name: params.server_name,\n\t\t\ttool_name: params.tool_name,\n\t\t\toutput,\n\t\t\tresponse_item: null,\n\t\t};\n\t}\n\n\tasync resolve_tool_info(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t): Promise<McpToolInfo | null> {\n\t\treturn this.manager.resolve_tool_info({\n\t\t\tnamespace: serverName,\n\t\t\tname: toolName,\n\t\t});\n\t}\n\n\tasync list_tools(): Promise<McpToolInfo[]> {\n\t\treturn [...(await this.manager.list_all_tools()).values()].map((tool) => ({\n\t\t\t...tool,\n\t\t}));\n\t}\n\n\tasync resolve_elicitation(\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t\tresponse: McpServerElicitationResponse,\n\t): Promise<void> {\n\t\tawait this.manager.resolve_elicitation(serverName, id, response);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.manager.shutdown();\n\t}\n\n\tasync required_startup_failures(\n\t\trequired_servers: readonly string[],\n\t): Promise<McpStartupFailure[]> {\n\t\treturn this.manager.required_startup_failures(required_servers);\n\t}\n}\n\nexport function normalize_mcp_server_configs(\n\tinput: Record<string, unknown>,\n): Map<string, CodexMcpServerConfig> {\n\tconst output = new Map<string, CodexMcpServerConfig>();\n\tfor (const [serverName, value] of Object.entries(input)) {\n\t\toutput.set(serverName, normalize_mcp_server_config(serverName, value));\n\t}\n\treturn output;\n}\n\nexport function normalize_mcp_server_config(\n\tserverName: string,\n\tvalue: unknown,\n): CodexMcpServerConfig {\n\tif (!isRecord(value)) {\n\t\tthrow new Error(`MCP server '${serverName}' config must be an object`);\n\t}\n\tconst transport = normalize_mcp_server_transport_config(serverName, value);\n\treturn {\n\t\ttransport,\n\t\tenabled: optionalBoolean(value.enabled),\n\t\trequired: optionalBoolean(value.required),\n\t\tstartup_timeout_sec:\n\t\t\toptionalNumber(value.startup_timeout_sec) ??\n\t\t\tmillisecondsToSeconds(optionalNumber(value.startup_timeout_ms)),\n\t\ttool_timeout_sec: optionalNumber(value.tool_timeout_sec),\n\t\tenabled_tools: optionalStringArray(value.enabled_tools),\n\t\tdisabled_tools: optionalStringArray(value.disabled_tools),\n\t\texperimental_environment: optionalString(value.experimental_environment),\n\t};\n}\n\nfunction normalize_mcp_server_transport_config(\n\tserverName: string,\n\tvalue: Record<string, unknown>,\n): McpServerTransportConfig {\n\tconst command = optionalString(value.command);\n\tconst url = optionalString(value.url);\n\tif (command) {\n\t\tif (url) {\n\t\t\tthrow new Error(\n\t\t\t\t`MCP server '${serverName}' config cannot set both command and url`,\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\ttype: \"stdio\",\n\t\t\tcommand,\n\t\t\targs: optionalStringArray(value.args) ?? [],\n\t\t\tenv: optionalStringRecord(value.env),\n\t\t\tenv_vars: optionalStringArray(value.env_vars) ?? [],\n\t\t\tcwd: optionalString(value.cwd),\n\t\t};\n\t}\n\tif (url) {\n\t\treturn {\n\t\t\ttype: \"streamable_http\",\n\t\t\turl,\n\t\t\tbearer_token_env_var: optionalString(value.bearer_token_env_var),\n\t\t\thttp_headers: optionalStringRecord(value.http_headers),\n\t\t\tenv_http_headers: optionalStringRecord(value.env_http_headers),\n\t\t\toauth_tokens_present: optionalBoolean(value.oauth_tokens_present),\n\t\t};\n\t}\n\tthrow new Error(\n\t\t`MCP server '${serverName}' config must set command or url`,\n\t);\n}\n\nfunction mcpStartupState(\n\tstatus: \"starting\" | \"ready\" | \"cancelled\" | \"failed\",\n): McpServerStartupState {\n\tswitch (status) {\n\t\tcase \"starting\":\n\t\t\treturn McpServerStartupState.Starting;\n\t\tcase \"ready\":\n\t\t\treturn McpServerStartupState.Ready;\n\t\tcase \"cancelled\":\n\t\t\treturn McpServerStartupState.Cancelled;\n\t\tcase \"failed\":\n\t\t\treturn McpServerStartupState.Failed;\n\t}\n}\n\nfunction mcpStatusError(\n\tserverName: string,\n\tstartupStatus:\n\t\t| { status: \"starting\" }\n\t\t| { status: \"ready\" }\n\t\t| { status: \"cancelled\" }\n\t\t| { status: \"failed\"; error: string },\n\tauthEntry?: McpAuthStatusEntry,\n): string | null {\n\tif (startupStatus.status === \"failed\") {\n\t\treturn mcp_init_error_display(\n\t\t\tserverName,\n\t\t\tauthEntry,\n\t\t\tnew Error(startupStatus.error),\n\t\t);\n\t}\n\tif (startupStatus.status === \"cancelled\") {\n\t\treturn \"MCP startup cancelled\";\n\t}\n\treturn null;\n}\n\nfunction coreAuthStatus(status: McpAuthStatus): McpAuthStatus {\n\treturn status;\n}\n\nfunction oauthStatus(authStatus: McpAuthStatus): McpServerStatus[\"oauth\"] {\n\tswitch (authStatus) {\n\t\tcase \"bearerToken\":\n\t\tcase \"oAuth\":\n\t\t\treturn { status: \"authenticated\" };\n\t\tcase \"notLoggedIn\":\n\t\t\treturn { status: \"required\" };\n\t\tcase \"unsupported\":\n\t\t\treturn { status: \"not_required\" };\n\t}\n}\n\nexport type StaticMcpConnectionManagerOptions = {\n\tresources?: Record<string, ReadonlyArray<McpResourceInfo>>;\n\tresource_templates?: Record<\n\t\tstring,\n\t\tReadonlyArray<McpResourceTemplateInfo>\n\t>;\n\tread_resources?: Record<string, McpResourceReadResponse>;\n};\n\nexport class StaticMcpConnectionManager implements McpConnectionManager {\n\tprivate readonly tools: readonly McpToolInfo[];\n\tprivate readonly resources: Record<string, ReadonlyArray<McpResourceInfo>>;\n\tprivate readonly resource_templates: Record<\n\t\tstring,\n\t\tReadonlyArray<McpResourceTemplateInfo>\n\t>;\n\tprivate readonly read_resources: Record<string, McpResourceReadResponse>;\n\n\tconstructor(\n\t\ttools: readonly McpToolInfo[] = [],\n\t\toptions: StaticMcpConnectionManagerOptions = {},\n\t) {\n\t\tthis.tools = qualify_tool_infos(tools);\n\t\tthis.resources = options.resources ?? {};\n\t\tthis.resource_templates = options.resource_templates ?? {};\n\t\tthis.read_resources = options.read_resources ?? {};\n\t}\n\n\tasync refresh_mcp_servers_now(): Promise<void> {\n\t\treturn;\n\t}\n\n\tasync list_server_statuses(\n\t\toptions: McpServerStatusListOptions = {},\n\t): Promise<McpServerStatus[]> {\n\t\tconst byServer = new Map<string, McpToolInfo[]>();\n\t\tfor (const tool of this.tools) {\n\t\t\tconst current = byServer.get(tool.server_name) ?? [];\n\t\t\tcurrent.push(tool);\n\t\t\tbyServer.set(tool.server_name, current);\n\t\t}\n\t\tconst includeInventory = options.detail !== \"toolsAndAuthOnly\";\n\t\tconst serverNames = new Set([\n\t\t\t...byServer.keys(),\n\t\t\t...Object.keys(this.resources),\n\t\t\t...Object.keys(this.resource_templates),\n\t\t]);\n\t\treturn [...serverNames].sort().map((name) => ({\n\t\t\tname,\n\t\t\tstartup_state: \"ready\",\n\t\t\terror: null,\n\t\t\ttools: (byServer.get(name) ?? []).map((tool) => ({ ...tool })),\n\t\t\tresources: includeInventory ? [...(this.resources[name] ?? [])] : [],\n\t\t\tresource_templates: includeInventory\n\t\t\t\t? [...(this.resource_templates[name] ?? [])]\n\t\t\t\t: [],\n\t\t\tauth_status: \"unsupported\",\n\t\t\tauthStatus: \"unsupported\",\n\t\t\toauth: { status: \"not_required\" },\n\t\t}));\n\t}\n\n\tasync list_resources(params: McpResourceListParams): Promise<McpResourceListResponse> {\n\t\tif (params.server_name) {\n\t\t\treturn {\n\t\t\t\tserver_name: params.server_name,\n\t\t\t\tresources: [...(this.resources[params.server_name] ?? [])],\n\t\t\t\tnext_cursor: null,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tserver_name: null,\n\t\t\tresources: Object.entries(this.resources).flatMap(([server, resources]) =>\n\t\t\t\tresources.map(\n\t\t\t\t\t(resource) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\t...resource,\n\t\t\t\t\t\t\tserver,\n\t\t\t\t\t\t}) as McpResourceListResponse[\"resources\"][number],\n\t\t\t\t),\n\t\t\t),\n\t\t\tnext_cursor: null,\n\t\t};\n\t}\n\n\tasync list_resource_templates(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceTemplateListResponse> {\n\t\tif (params.server_name) {\n\t\t\treturn {\n\t\t\t\tserver_name: params.server_name,\n\t\t\t\tresource_templates: [...(this.resource_templates[params.server_name] ?? [])],\n\t\t\t\tnext_cursor: null,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tserver_name: null,\n\t\t\tresource_templates: Object.entries(this.resource_templates).flatMap(\n\t\t\t\t([server, templates]) =>\n\t\t\t\t\ttemplates.map(\n\t\t\t\t\t\t(template) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t...template,\n\t\t\t\t\t\t\t\tserver,\n\t\t\t\t\t\t\t}) as McpResourceTemplateListResponse[\"resource_templates\"][number],\n\t\t\t\t\t),\n\t\t\t),\n\t\t\tnext_cursor: null,\n\t\t};\n\t}\n\n\tasync read_resource(params: McpResourceReadParams): Promise<McpResourceReadResponse> {\n\t\tconst key = `${params.server_name}\\0${params.uri}`;\n\t\tconst existing = this.read_resources[key];\n\t\tif (existing) {\n\t\t\treturn {\n\t\t\t\t...existing,\n\t\t\t\tcontents: [...existing.contents],\n\t\t\t};\n\t\t}\n\t\tthrow new Error(`MCP resource is unavailable: ${params.server_name}:${params.uri}`);\n\t}\n\n\tasync call_tool(params: McpServerToolCallParams): Promise<McpServerToolCallResponse> {\n\t\tthrow new Error(\n\t\t\t`MCP tool is unavailable: ${params.server_name}.${params.tool_name}`,\n\t\t);\n\t}\n\n\tasync resolve_tool_info(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t): Promise<McpToolInfo | null> {\n\t\treturn (\n\t\t\tthis.tools.find(\n\t\t\t\t(tool) =>\n\t\t\t\t\t(tool.server_name === serverName && tool.name === toolName) ||\n\t\t\t\t\t(mcpToolCallableNamespace(tool) === serverName &&\n\t\t\t\t\t\tmcpToolCallableName(tool) === toolName),\n\t\t\t) ?? null\n\t\t);\n\t}\n\n\tasync list_tools(): Promise<McpToolInfo[]> {\n\t\treturn this.tools.map((tool) => ({ ...tool }));\n\t}\n\n\tasync resolve_elicitation(): Promise<void> {\n\t\treturn;\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\treturn;\n\t}\n}\n\nfunction responseArray(value: unknown, key: string): unknown[] {\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\tif (isRecord(value)) {\n\t\tconst field = value[key];\n\t\treturn Array.isArray(field) ? field : [];\n\t}\n\treturn [];\n}\n\nfunction responseCursor(value: unknown): string | null {\n\tif (!isRecord(value)) {\n\t\treturn null;\n\t}\n\treturn typeof value.next_cursor === \"string\" ? value.next_cursor : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction optionalStringArray(value: unknown): string[] | undefined {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\")\n\t\t? [...value]\n\t\t: undefined;\n}\n\nfunction optionalStringRecord(value: unknown): Record<string, string> | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tconst output: Record<string, string> = {};\n\tfor (const [key, recordValue] of Object.entries(value)) {\n\t\tif (typeof recordValue !== \"string\") {\n\t\t\treturn undefined;\n\t\t}\n\t\toutput[key] = recordValue;\n\t}\n\treturn output;\n}\n\nfunction millisecondsToSeconds(value: number | undefined): number | undefined {\n\treturn value == null ? undefined : value / 1000;\n}\n","import type {\n\tPermissionProfile,\n\tPermissionProfileBuiltinName,\n\tSandboxPolicy,\n} from \"../protocol\";\n\nexport const BUILT_IN_READ_ONLY_PROFILE = \":read-only\";\nexport const BUILT_IN_WORKSPACE_PROFILE = \":workspace\";\nexport const BUILT_IN_DANGER_NO_SANDBOX_PROFILE = \":danger-no-sandbox\";\n\nexport function defaultBuiltinPermissionProfileName(input: {\n\ttrusted?: boolean | null;\n\tuntrusted?: boolean | null;\n} = {}): PermissionProfileBuiltinName {\n\treturn input.trusted || input.untrusted\n\t\t? BUILT_IN_WORKSPACE_PROFILE\n\t\t: BUILT_IN_READ_ONLY_PROFILE;\n}\n\nexport function readOnlyPermissionProfile(): PermissionProfile {\n\treturn {\n\t\ttype: \"managed\",\n\t\tfile_system: {\n\t\t\ttype: \"restricted\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tpath: { type: \"special\", value: \"root\" },\n\t\t\t\t\taccess: \"read\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tnetwork: \"restricted\",\n\t};\n}\n\nexport function workspaceWritePermissionProfile(): PermissionProfile {\n\treturn {\n\t\ttype: \"managed\",\n\t\tfile_system: {\n\t\t\ttype: \"restricted\",\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tpath: { type: \"special\", value: \"project_roots\" },\n\t\t\t\t\taccess: \"read-write\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tnetwork: \"restricted\",\n\t};\n}\n\nexport function disabledPermissionProfile(): PermissionProfile {\n\treturn {\n\t\ttype: \"disabled\",\n\t};\n}\n\nexport function builtinPermissionProfile(\n\tname: PermissionProfileBuiltinName,\n): PermissionProfile {\n\tswitch (name) {\n\t\tcase BUILT_IN_READ_ONLY_PROFILE:\n\t\t\treturn readOnlyPermissionProfile();\n\t\tcase BUILT_IN_WORKSPACE_PROFILE:\n\t\t\treturn workspaceWritePermissionProfile();\n\t\tcase BUILT_IN_DANGER_NO_SANDBOX_PROFILE:\n\t\t\treturn disabledPermissionProfile();\n\t}\n}\n\nexport function permissionProfileFromLegacySandboxPolicy(\n\tsandboxPolicy: SandboxPolicy | null | undefined,\n): PermissionProfile {\n\tconst mode = legacySandboxPolicyMode(sandboxPolicy);\n\tswitch (mode) {\n\t\tcase \"danger-full-access\":\n\t\t\treturn disabledPermissionProfile();\n\t\tcase \"read-only\":\n\t\t\treturn readOnlyPermissionProfile();\n\t\tcase \"workspace-write\":\n\t\t\treturn workspaceWritePermissionProfile();\n\t\tcase \"external\":\n\t\t\treturn {\n\t\t\t\ttype: \"external\",\n\t\t\t\tnetwork: legacySandboxPolicyNetwork(sandboxPolicy),\n\t\t\t};\n\t}\n}\n\nexport function legacySandboxPolicyFromPermissionProfile(\n\tpermissionProfile: PermissionProfile | null | undefined,\n\tcwd = \"\",\n): SandboxPolicy {\n\tconst normalizedProfile = normalizePermissionProfile(permissionProfile);\n\tconst type = permissionProfileType(normalizedProfile);\n\tif (type === \"disabled\") {\n\t\treturn { mode: \"danger-full-access\" };\n\t}\n\tif (type === \"external\") {\n\t\treturn {\n\t\t\tmode: \"external\",\n\t\t\tnetwork_access: permissionProfileNetwork(normalizedProfile),\n\t\t};\n\t}\n\tif (permissionProfileFileSystemMode(normalizedProfile) === \"read-only\") {\n\t\treturn {\n\t\t\tmode: \"read-only\",\n\t\t\tnetwork_access: permissionProfileNetwork(normalizedProfile),\n\t\t};\n\t}\n\treturn {\n\t\tmode: \"workspace-write\",\n\t\t...(cwd ? { cwd } : {}),\n\t\tnetwork_access: permissionProfileNetwork(normalizedProfile),\n\t};\n}\n\nexport function effectivePermissionProfile(input: {\n\tpermission_profile?: PermissionProfile | null;\n\tsandbox_policy?: SandboxPolicy | null;\n}): PermissionProfile {\n\treturn input.permission_profile && Object.keys(input.permission_profile).length > 0\n\t\t? normalizePermissionProfile(input.permission_profile)\n\t\t: permissionProfileFromLegacySandboxPolicy(input.sandbox_policy);\n}\n\nexport function builtinPermissionProfileNameFromProfile(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): PermissionProfileBuiltinName {\n\tconst normalizedProfile = normalizePermissionProfile(permissionProfile);\n\tconst type = permissionProfileType(normalizedProfile);\n\tif (type === \"disabled\") {\n\t\treturn BUILT_IN_DANGER_NO_SANDBOX_PROFILE;\n\t}\n\treturn permissionProfileFileSystemMode(normalizedProfile) === \"read-only\"\n\t\t? BUILT_IN_READ_ONLY_PROFILE\n\t\t: BUILT_IN_WORKSPACE_PROFILE;\n}\n\nexport function activePermissionProfileForBuiltin(\n\tid: PermissionProfileBuiltinName,\n) {\n\treturn {\n\t\tid,\n\t\textends: null,\n\t\tmodifications: [],\n\t};\n}\n\nexport function active_permission_profile(\n\tpermissionProfile: PermissionProfile | null | undefined,\n) {\n\treturn activePermissionProfileForBuiltin(\n\t\tbuiltinPermissionProfileNameFromProfile(permissionProfile),\n\t);\n}\n\nexport function validatePermissionProfile(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): string[] {\n\tconst warnings: string[] = [];\n\tconst profileType = permissionProfileType(permissionProfile);\n\tif (profileType.startsWith(\":\")) {\n\t\twarnings.push(\n\t\t\t`Permission profile names beginning with \":\" are reserved for Codex built-ins: ${profileType}`,\n\t\t);\n\t}\n\treturn warnings;\n}\n\nfunction legacySandboxPolicyMode(\n\tsandboxPolicy: SandboxPolicy | null | undefined,\n): \"danger-full-access\" | \"workspace-write\" | \"read-only\" | \"external\" {\n\tconst mode = stringField(sandboxPolicy, [\"mode\", \"type\", \"kind\"]);\n\tif (\n\t\tmode === \"danger-full-access\" ||\n\t\tmode === \"danger_full_access\" ||\n\t\tmode === \"disabled\"\n\t) {\n\t\treturn \"danger-full-access\";\n\t}\n\tif (mode === \"read-only\" || mode === \"read_only\" || mode === \"readonly\") {\n\t\treturn \"read-only\";\n\t}\n\tif (mode === \"external\" || mode === \"external_sandbox\") {\n\t\treturn \"external\";\n\t}\n\treturn \"workspace-write\";\n}\n\nfunction legacySandboxPolicyNetwork(\n\tsandboxPolicy: SandboxPolicy | null | undefined,\n): \"enabled\" | \"restricted\" {\n\tconst value = stringField(sandboxPolicy, [\"network_access\", \"network\"]);\n\treturn value === \"restricted\" || value === \"disabled\" ? \"restricted\" : \"enabled\";\n}\n\nfunction permissionProfileType(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): string {\n\treturn stringField(permissionProfile, [\"type\", \"mode\", \"profile\"]) ?? \"managed\";\n}\n\nfunction normalizePermissionProfile(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): PermissionProfile {\n\tconst type = permissionProfileType(permissionProfile);\n\tswitch (type) {\n\t\tcase \"danger-full-access\":\n\t\tcase \"danger-no-sandbox\":\n\t\tcase \"disabled\":\n\t\t\treturn disabledPermissionProfile();\n\t\tcase \"read-only\":\n\t\tcase \"readonly\":\n\t\t\treturn readOnlyPermissionProfile();\n\t\tcase \"workspace\":\n\t\tcase \"workspace-write\":\n\t\t\treturn workspaceWritePermissionProfile();\n\t\tdefault:\n\t\t\treturn permissionProfile && Object.keys(permissionProfile).length > 0\n\t\t\t\t? permissionProfile\n\t\t\t\t: readOnlyPermissionProfile();\n\t}\n}\n\nfunction permissionProfileFileSystemMode(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): \"read-only\" | \"workspace-write\" {\n\tconst fileSystem = recordField(permissionProfile, \"file_system\");\n\tconst entries = Array.isArray(fileSystem?.entries) ? fileSystem.entries : [];\n\tif (\n\t\tentries.length > 0 &&\n\t\tentries.every(\n\t\t\t(entry) =>\n\t\t\t\ttypeof entry === \"object\" &&\n\t\t\t\tentry !== null &&\n\t\t\t\t(entry as { access?: unknown }).access === \"read\",\n\t\t)\n\t) {\n\t\treturn \"read-only\";\n\t}\n\treturn \"workspace-write\";\n}\n\nfunction permissionProfileNetwork(\n\tpermissionProfile: PermissionProfile | null | undefined,\n): \"enabled\" | \"restricted\" {\n\tconst network = permissionProfile\n\t\t? (permissionProfile.network as unknown)\n\t\t: null;\n\tif (typeof network === \"string\") {\n\t\treturn network === \"enabled\" ? \"enabled\" : \"restricted\";\n\t}\n\tif (\n\t\ttypeof network === \"object\" &&\n\t\tnetwork !== null &&\n\t\t\"enabled\" in network &&\n\t\t(network as { enabled?: unknown }).enabled === true\n\t) {\n\t\treturn \"enabled\";\n\t}\n\treturn \"restricted\";\n}\n\nfunction recordField(\n\tvalue: unknown,\n\tfield: string,\n): Record<string, unknown> | null {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tconst fieldValue = (value as Record<string, unknown>)[field];\n\treturn typeof fieldValue === \"object\" &&\n\t\tfieldValue !== null &&\n\t\t!Array.isArray(fieldValue)\n\t\t? (fieldValue as Record<string, unknown>)\n\t\t: null;\n}\n\nfunction stringField(value: unknown, fields: string[]): string | null {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tfor (const field of fields) {\n\t\tconst fieldValue = (value as Record<string, unknown>)[field];\n\t\tif (typeof fieldValue === \"string\" && fieldValue.trim().length > 0) {\n\t\t\treturn fieldValue.trim().toLowerCase().replaceAll(\"_\", \"-\");\n\t\t}\n\t}\n\treturn null;\n}\n","import type {\n\tActivePermissionProfile,\n\tApprovalsReviewer,\n\tAskForApproval,\n\tBaseInstructions,\n\tDynamicToolSpec,\n\tPermissionProfile,\n\tPersonality,\n\tReasoningEffortConfig,\n\tReasoningSummaryConfig,\n\tSandboxPolicy,\n\tServiceTier,\n\tSessionSource,\n\tTruncationPolicy,\n\tTurnEnvironmentSelection,\n\tWindowsSandboxLevel,\n} from \"../../core/src/protocol\";\nimport type { CollaborationMode } from \"../../core/src/config-types\";\nimport type {\n\tDefaultToolsConfigInput,\n\tToolsConfig,\n} from \"../../core/src/tools/spec_plan_types\";\nimport type {\n\tWebSearchMode,\n\tWebSearchToolConfig,\n} from \"../../app-server-protocol/schema/typescript\";\n\nexport const CONFIG_TOML_FILE = \"config.toml\";\n\nexport type ConfigLayerSource =\n\t| {\n\t\t\ttype: \"Mdm\";\n\t\t\tdomain: string;\n\t\t\tkey: string;\n\t }\n\t| {\n\t\t\ttype: \"System\";\n\t\t\tfile: string;\n\t }\n\t| {\n\t\t\ttype: \"User\";\n\t\t\tfile: string;\n\t }\n\t| {\n\t\t\ttype: \"Project\";\n\t\t\tdot_codex_folder: string;\n\t }\n\t| {\n\t\t\ttype: \"SessionFlags\";\n\t }\n\t| {\n\t\t\ttype: \"LegacyManagedConfigTomlFromFile\";\n\t\t\tfile: string;\n\t }\n\t| {\n\t\t\ttype: \"LegacyManagedConfigTomlFromMdm\";\n\t };\n\nexport type ConfigLayerMetadata = {\n\tname: ConfigLayerSource;\n\tversion: string;\n};\n\nexport type ConfigLayerEntry = {\n\tname: ConfigLayerSource;\n\tconfig: ConfigToml;\n\traw_toml?: string | null;\n\tversion: string;\n\tdisabled_reason?: string | null;\n};\n\nexport type ConfigLayerStack = {\n\tlayers: ConfigLayerEntry[];\n\tstartup_warnings: string[];\n};\n\nexport const ConfigLayerStackOrdering = {\n\tLowestPrecedenceFirst: \"LowestPrecedenceFirst\",\n\tHighestPrecedenceFirst: \"HighestPrecedenceFirst\",\n} as const;\n\nexport type ConfigLayerStackOrdering =\n\t(typeof ConfigLayerStackOrdering)[keyof typeof ConfigLayerStackOrdering];\n\nexport type ConfigOverrides = ConfigToml;\n\nexport type ConfigToml = {\n\tmodel?: string;\n\treview_model?: string;\n\tmodel_provider?: string;\n\tservice_tier?: ServiceTier | null;\n\tmodel_reasoning_effort?: ReasoningEffortConfig | null;\n\tplan_mode_reasoning_effort?: ReasoningEffortConfig | null;\n\tmodel_reasoning_summary?: ReasoningSummaryConfig;\n\tpersonality?: Personality | null;\n\tapproval_policy?: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy?: SandboxPolicy | null;\n\tsandbox_mode?: SandboxPolicy[\"mode\"] | null;\n\tdefault_permissions?: string | null;\n\tpermission_profile?: PermissionProfile | null;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel | null;\n\tcwd?: string;\n\tinstructions?: string | null;\n\tmodel_instructions_file?: string | null;\n\tmodel_instructions_file_contents?: string | null;\n\tbase_instructions?: BaseInstructions | string | null;\n\tdeveloper_instructions?: string | null;\n\tuser_instructions?: string | null;\n\tcollaboration_mode?: CollaborationMode | null;\n\tsession_source?: SessionSource;\n\tenvironments?: TurnEnvironmentSelection[];\n\tdynamic_tools?: DynamicToolSpec[];\n\tfinal_output_json_schema?: unknown;\n\ttruncation_policy?: TruncationPolicy | null;\n\tweb_search?: WebSearchMode | null;\n\ttools?: ToolsToml | null;\n\tfeatures?: FeaturesToml | null;\n\tprofiles?: Record<string, ConfigProfile>;\n\tprofile?: string | null;\n\tcompact_prompt?: string | null;\n\tinclude_permissions_instructions?: boolean;\n\tinclude_environment_context?: boolean;\n\tinclude_apps_instructions?: boolean;\n\tinclude_skill_instructions?: boolean;\n};\n\nexport type ConfigProfile = Omit<ConfigToml, \"profiles\" | \"profile\">;\n\nexport type ToolsToml = Omit<DefaultToolsConfigInput, \"web_search\"> & {\n\tweb_search?: Partial<WebSearchToolConfig> | boolean | null;\n};\n\nexport type FeaturesToml = Record<string, unknown>;\n\nexport type ResolvedConfig = Required<\n\tPick<\n\t\tConfigToml,\n\t\t| \"model\"\n\t\t| \"model_provider\"\n\t\t| \"approval_policy\"\n\t\t| \"cwd\"\n\t\t| \"session_source\"\n\t>\n> &\n\tOmit<\n\t\tConfigToml,\n\t\t| \"model\"\n\t\t| \"model_provider\"\n\t\t| \"approval_policy\"\n\t\t| \"cwd\"\n\t\t| \"session_source\"\n\t> & {\n\t\tbase_instructions: BaseInstructions;\n\t\tbase_instructions_source:\n\t\t\t| \"config\"\n\t\t\t| \"model_instructions_file\"\n\t\t\t| \"default\";\n\t\tservice_tier: ServiceTier | null;\n\t\treasoning_effort: ReasoningEffortConfig | null;\n\t\treasoning_summary: ReasoningSummaryConfig;\n\t\tdeveloper_instructions: string | null;\n\t\tuser_instructions: string | null;\n\t\tpersonality: Personality | null;\n\t\tsandbox_policy: SandboxPolicy;\n\t\tpermission_profile: PermissionProfile;\n\t\tactive_permission_profile: ActivePermissionProfile | null;\n\t\twindows_sandbox_level: WindowsSandboxLevel | null;\n\t\tcollaboration_mode: CollaborationMode;\n\t\tenvironments: TurnEnvironmentSelection[];\n\t\tdynamic_tools: DynamicToolSpec[];\n\t\tfinal_output_json_schema?: unknown;\n\t\ttruncation_policy: TruncationPolicy | null;\n\t\tweb_search_mode: WebSearchMode;\n\t\ttools: ToolsConfig;\n\t\tstartup_warnings: string[];\n\t};\n\nexport function createConfigLayerStack(\n\tlayers: ConfigLayerEntry[] = [],\n\tstartup_warnings: string[] = [],\n): ConfigLayerStack {\n\treturn { layers, startup_warnings };\n}\n\nexport type LoaderOverrides = {\n\tignore_user_config?: boolean;\n\tignore_managed_requirements?: boolean;\n\tignore_user_and_project_exec_policy_rules?: boolean;\n};\n","import type { ModeKind } from \"../config-types\";\nimport type { McpToolInfo } from \"../mcp\";\nimport type { DynamicToolSpec } from \"../protocol/dynamic_tools\";\nimport type { ConfiguredToolSpec } from \"./context\";\nimport type { ToolName } from \"./tool_name\";\nimport type { DiscoverableTool } from \"./tool_search_entry\";\n\nexport const ToolHandlerKind = {\n\tDynamicTool: \"DynamicTool\",\n\tRequestPermissions: \"RequestPermissions\",\n\tRequestUserInput: \"RequestUserInput\",\n\tToolSearch: \"ToolSearch\",\n\tUnavailableTool: \"UnavailableTool\",\n\tMcp: \"Mcp\",\n\tListMcpResources: \"ListMcpResources\",\n\tListMcpResourceTemplates: \"ListMcpResourceTemplates\",\n\tReadMcpResource: \"ReadMcpResource\",\n\tExecCommand: \"ExecCommand\",\n\tWriteStdin: \"WriteStdin\",\n\tApplyPatch: \"ApplyPatch\",\n\tPlan: \"Plan\",\n\tGetGoal: \"GetGoal\",\n\tCreateGoal: \"CreateGoal\",\n\tUpdateGoal: \"UpdateGoal\",\n\tSpawnAgent: \"SpawnAgent\",\n\tSendInput: \"SendInput\",\n\tWaitAgent: \"WaitAgent\",\n\tCloseAgent: \"CloseAgent\",\n\tResumeAgent: \"ResumeAgent\",\n\tListAgents: \"ListAgents\",\n\tSendMessage: \"SendMessage\",\n\tFollowupTask: \"FollowupTask\",\n} as const;\n\nexport type ToolHandlerKind =\n\t(typeof ToolHandlerKind)[keyof typeof ToolHandlerKind];\n\nexport type ToolHandlerSpec = {\n\tname: ToolName;\n\tkind: ToolHandlerKind;\n};\n\nexport type ToolRegistryPlan = {\n\tspecs: ConfiguredToolSpec[];\n\thandlers: ToolHandlerSpec[];\n};\n\nexport type ToolRegistryPlanParams = {\n\tdynamic_tools: readonly DynamicToolSpec[];\n\tmcp_tools?: readonly McpToolInfo[];\n\tdeferred_mcp_tools?: readonly McpToolInfo[];\n\tdiscoverable_tools?: readonly DiscoverableTool[];\n\ttool_namespaces?: readonly string[];\n\tunavailable_called_tools?: readonly ToolName[];\n\tparallel_mcp_tool_names?: readonly ToolName[];\n};\n\nexport type WebSearchMode = \"disabled\" | \"cached\" | \"live\";\n\nexport type WebSearchToolType = \"text\" | \"text_and_image\";\n\nexport type WebSearchConfig = {\n\tfilters?: unknown;\n\tuser_location?: unknown;\n\tsearch_context_size?: unknown;\n};\n\nexport type ToolsConfig = {\n\tnamespace_tools: boolean;\n\trequest_permissions_tool_enabled: boolean;\n\trequest_user_input_available_modes: readonly ModeKind[];\n\tsearch_tool: boolean;\n\tweb_search_mode: WebSearchMode | null;\n\tweb_search_tool_type: WebSearchToolType;\n\tweb_search_config?: WebSearchConfig | null;\n\timage_gen_tool: boolean;\n\texec_command_tool_enabled: boolean;\n\twrite_stdin_tool_enabled: boolean;\n\tapply_patch_tool_enabled: boolean;\n\tthread_goal_tools_enabled: boolean;\n\tmcp_tools_enabled: boolean;\n\tmulti_agent_tools_enabled: boolean;\n};\n\nexport type DefaultToolsConfigInput = {\n\tnamespace_tools?: boolean;\n\timage_generation?: boolean;\n\tweb_search?: boolean;\n\trequest_permissions_tool_enabled?: boolean;\n\trequest_user_input_available_modes?: readonly ModeKind[];\n\tsearch_tool?: boolean;\n\tweb_search_mode?: WebSearchMode | null;\n\tweb_search_tool_type?: WebSearchToolType;\n\tweb_search_config?: WebSearchConfig | null;\n\timage_gen_tool?: boolean;\n\texec_command_tool_enabled?: boolean;\n\twrite_stdin_tool_enabled?: boolean;\n\tapply_patch_tool_enabled?: boolean;\n\tthread_goal_tools_enabled?: boolean;\n\tmcp_tools_enabled?: boolean;\n\tmulti_agent_tools_enabled?: boolean;\n};\n\nexport function createToolRegistryPlan(): ToolRegistryPlan {\n\treturn {\n\t\tspecs: [],\n\t\thandlers: [],\n\t};\n}\n\nexport function defaultToolsConfig(\n\tinput: DefaultToolsConfigInput = {},\n): ToolsConfig {\n\treturn {\n\t\tnamespace_tools: input.namespace_tools ?? true,\n\t\trequest_permissions_tool_enabled:\n\t\t\tinput.request_permissions_tool_enabled ?? true,\n\t\trequest_user_input_available_modes:\n\t\t\tinput.request_user_input_available_modes ?? [],\n\t\tsearch_tool: input.search_tool ?? true,\n\t\tweb_search_mode:\n\t\t\tinput.web_search === false ? \"disabled\" : input.web_search_mode ?? \"cached\",\n\t\tweb_search_tool_type: input.web_search_tool_type ?? \"text\",\n\t\tweb_search_config: input.web_search_config ?? null,\n\t\timage_gen_tool: input.image_gen_tool ?? input.image_generation ?? false,\n\t\texec_command_tool_enabled: input.exec_command_tool_enabled ?? false,\n\t\twrite_stdin_tool_enabled: input.write_stdin_tool_enabled ?? false,\n\t\tapply_patch_tool_enabled: input.apply_patch_tool_enabled ?? false,\n\t\tthread_goal_tools_enabled: input.thread_goal_tools_enabled ?? true,\n\t\tmcp_tools_enabled: input.mcp_tools_enabled ?? true,\n\t\tmulti_agent_tools_enabled: input.multi_agent_tools_enabled ?? false,\n\t};\n}\n","import type {\n\tConfigLayerEntry,\n\tConfigLayerSource,\n\tConfigLayerStack,\n\tConfigLayerStackOrdering,\n\tConfigOverrides,\n\tConfigToml,\n\tResolvedConfig,\n\tToolsToml,\n} from \"./types\";\nimport { ConfigLayerStackOrdering as ConfigLayerStackOrderingValue } from \"./types\";\nimport {\n\tactivePermissionProfileForBuiltin,\n\tbuiltinPermissionProfileNameFromProfile,\n\tdefaultBuiltinPermissionProfileName,\n\teffectivePermissionProfile,\n\tlegacySandboxPolicyFromPermissionProfile,\n\tpermissionProfileFromLegacySandboxPolicy,\n\tvalidatePermissionProfile,\n} from \"../../core/src/config/permissions\";\nimport { normalizeCollaborationMode } from \"../../core/src/collaboration-mode-presets\";\nimport type { PermissionProfile } from \"../../core/src/protocol\";\nimport { BaseInstructions } from \"../../core/src/protocol\";\nimport {\n\tdefaultToolsConfig,\n\ttype DefaultToolsConfigInput,\n\ttype WebSearchConfig,\n\ttype WebSearchMode,\n} from \"../../core/src/tools/spec_plan_types\";\nimport type {\n\tWebSearchLocation,\n\tWebSearchToolConfig,\n} from \"../../app-server-protocol/schema/typescript\";\n\nconst PROJECT_LOCAL_CONFIG_DENYLIST = new Set([\n\t\"openai_base_url\",\n\t\"chatgpt_base_url\",\n\t\"model_provider\",\n\t\"model_providers\",\n\t\"notify\",\n\t\"profile\",\n\t\"profiles\",\n\t\"experimental_realtime_ws_base_url\",\n]);\n\nexport function config_layer_source_precedence(\n\tsource: ConfigLayerSource,\n): number {\n\tswitch (source.type) {\n\t\tcase \"Mdm\":\n\t\t\treturn 0;\n\t\tcase \"System\":\n\t\t\treturn 10;\n\t\tcase \"User\":\n\t\t\treturn 20;\n\t\tcase \"Project\":\n\t\t\treturn 25;\n\t\tcase \"SessionFlags\":\n\t\t\treturn 30;\n\t\tcase \"LegacyManagedConfigTomlFromFile\":\n\t\t\treturn 40;\n\t\tcase \"LegacyManagedConfigTomlFromMdm\":\n\t\t\treturn 50;\n\t}\n}\n\nexport function ConfigLayerEntry_new(\n\tname: ConfigLayerSource,\n\tconfig: ConfigToml,\n): ConfigLayerEntry {\n\treturn {\n\t\tname,\n\t\tconfig: sanitize_config_for_layer(name, config),\n\t\traw_toml: null,\n\t\tversion: version_for_toml(config),\n\t\tdisabled_reason: null,\n\t};\n}\n\nexport function ConfigLayerEntry_new_with_raw_toml(\n\tname: ConfigLayerSource,\n\tconfig: ConfigToml,\n\traw_toml: string,\n): ConfigLayerEntry {\n\tconst sanitized = sanitize_config_for_layer(name, config);\n\treturn {\n\t\tname,\n\t\tconfig: sanitized,\n\t\traw_toml,\n\t\tversion: version_for_toml(sanitized),\n\t\tdisabled_reason: null,\n\t};\n}\n\nexport function ConfigLayerEntry_new_disabled(\n\tname: ConfigLayerSource,\n\tconfig: ConfigToml,\n\tdisabled_reason: string,\n): ConfigLayerEntry {\n\treturn {\n\t\tname,\n\t\tconfig,\n\t\traw_toml: null,\n\t\tversion: version_for_toml(config),\n\t\tdisabled_reason,\n\t};\n}\n\nexport function ConfigLayerEntry_is_disabled(layer: ConfigLayerEntry): boolean {\n\treturn Boolean(layer.disabled_reason);\n}\n\nexport function ConfigLayerStack_new(\n\tlayers: ConfigLayerEntry[] = [],\n\tstartup_warnings: string[] = [],\n): ConfigLayerStack {\n\tverify_layer_ordering(layers);\n\treturn { layers, startup_warnings };\n}\n\nexport function ConfigLayerStack_get_layers(\n\tstack: ConfigLayerStack,\n\tordering: ConfigLayerStackOrdering,\n\tinclude_disabled = false,\n): ConfigLayerEntry[] {\n\tconst layers = stack.layers.filter(\n\t\t(layer) => include_disabled || !ConfigLayerEntry_is_disabled(layer),\n\t);\n\treturn ordering === ConfigLayerStackOrderingValue.HighestPrecedenceFirst\n\t\t? [...layers].reverse()\n\t\t: layers;\n}\n\nexport function ConfigLayerStack_effective_config(\n\tstack: ConfigLayerStack,\n): ConfigToml {\n\tconst merged: ConfigToml = {};\n\tfor (const layer of ConfigLayerStack_get_layers(\n\t\tstack,\n\t\tConfigLayerStackOrderingValue.LowestPrecedenceFirst,\n\t\tfalse,\n\t)) {\n\t\tmerge_toml_values(merged, layer.config);\n\t}\n\treturn merged;\n}\n\nexport function merge_config_layers(\n\tstack: ConfigLayerStack,\n\toverrides: ConfigOverrides = {},\n): ResolvedConfig {\n\tconst merged = ConfigLayerStack_effective_config(stack);\n\treturn resolve_config(merged, stack.startup_warnings, overrides);\n}\n\nexport function merge_toml_values(\n\tbase: ConfigToml,\n\toverlay: ConfigToml,\n): ConfigToml {\n\tmerge_toml_values_at_path(base, overlay, []);\n\treturn base;\n}\n\nfunction merge_toml_values_at_path(\n\tbase: Record<string, unknown>,\n\toverlay: Record<string, unknown>,\n\tpath: string[],\n) {\n\tnormalize_key_aliases(path, base);\n\tconst normalizedOverlay = { ...overlay };\n\tnormalize_key_aliases(path, normalizedOverlay);\n\n\tfor (const [key, value] of Object.entries(normalizedOverlay)) {\n\t\tconst existing = base[key];\n\t\tconst childPath = [...path, key];\n\t\tif (isIgnoredLegacyToolsWebSearchValue(childPath, value)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPlainTomlTable(existing) && isPlainTomlTable(value)) {\n\t\t\tmerge_toml_values_at_path(existing, value, childPath);\n\t\t} else {\n\t\t\tbase[key] = normalized_with_key_aliases(value, childPath);\n\t\t}\n\t}\n}\n\nexport function resolve_config(\n\tconfig: ConfigToml,\n\tstartupWarnings: string[] = [],\n\toverrides: ConfigOverrides = {},\n): ResolvedConfig {\n\tconst merged: ConfigToml = { ...config };\n\tconst activeProfileName = overrides.profile ?? merged.profile ?? null;\n\tconst configProfile =\n\t\tactiveProfileName && merged.profiles\n\t\t\t? merged.profiles[activeProfileName]\n\t\t\t: null;\n\tif (activeProfileName && !configProfile) {\n\t\tstartupWarnings = [\n\t\t\t...startupWarnings,\n\t\t\t`config profile \\`${activeProfileName}\\` not found`,\n\t\t];\n\t}\n\tif (configProfile) {\n\t\tmerge_toml_values(merged, configProfile);\n\t}\n\tmerge_toml_values(merged, overrides);\n\n\tconst permissionProfile = resolvePermissionProfile(merged);\n\tconst permissionWarnings = validatePermissionProfile(permissionProfile);\n\tconst sandboxPolicy =\n\t\tmerged.sandbox_policy ??\n\t\tlegacySandboxPolicyFromPermissionProfile(permissionProfile, merged.cwd ?? \"\");\n\tconst activeBuiltin = builtinPermissionProfileNameFromProfile(\n\t\tpermissionProfile,\n\t) ?? defaultBuiltinPermissionProfileName();\n\tconst baseInstructions = normalizeBaseInstructions(merged);\n\tconst webSearchMode = resolve_web_search_mode(merged) ?? \"cached\";\n\tconst webSearchConfig = resolve_web_search_config(merged);\n\tconst tools = tools_config_from_toml(merged.tools, {\n\t\tweb_search_config: webSearchConfig,\n\t\tweb_search_mode: webSearchMode,\n\t});\n\n\treturn {\n\t\tmodel: merged.model ?? \"gpt-5.5\",\n\t\tmodel_provider: merged.model_provider ?? \"openai\",\n\t\tservice_tier: merged.service_tier ?? null,\n\t\treasoning_effort: merged.model_reasoning_effort ?? null,\n\t\treasoning_summary: merged.model_reasoning_summary ?? \"auto\",\n\t\tpersonality: merged.personality ?? null,\n\t\tapproval_policy: merged.approval_policy ?? \"never\",\n\t\tapprovals_reviewer: merged.approvals_reviewer ?? null,\n\t\tsandbox_policy: sandboxPolicy,\n\t\tpermission_profile: permissionProfile,\n\t\tactive_permission_profile:\n\t\t\tmerged.active_permission_profile ??\n\t\t\tactivePermissionProfileForBuiltin(activeBuiltin),\n\t\twindows_sandbox_level: merged.windows_sandbox_level ?? null,\n\t\tcwd: merged.cwd ?? \"\",\n\t\tbase_instructions: baseInstructions.base_instructions,\n\t\tbase_instructions_source: baseInstructions.source,\n\t\tdeveloper_instructions: merged.developer_instructions ?? null,\n\t\tuser_instructions: merged.user_instructions ?? null,\n\t\t\tcollaboration_mode: normalizeCollaborationMode({\n\t\t\t\tcollaborationMode: merged.collaboration_mode ?? null,\n\t\t\t\tmodel: merged.model ?? \"gpt-5.5\",\n\t\t\t\treasoningEffort: merged.model_reasoning_effort ?? null,\n\t\t\t}),\n\t\tsession_source: merged.session_source ?? \"test\",\n\t\tenvironments: merged.environments ?? [],\n\t\tdynamic_tools: merged.dynamic_tools ?? [],\n\t\tfinal_output_json_schema: merged.final_output_json_schema,\n\t\ttruncation_policy: merged.truncation_policy ?? null,\n\t\tweb_search: merged.web_search ?? null,\n\t\tweb_search_mode: webSearchMode,\n\t\ttools,\n\t\tprofiles: merged.profiles,\n\t\tprofile: merged.profile,\n\t\tcompact_prompt: merged.compact_prompt ?? null,\n\t\tinclude_permissions_instructions:\n\t\t\tmerged.include_permissions_instructions ?? true,\n\t\tinclude_environment_context: merged.include_environment_context ?? true,\n\t\tinclude_apps_instructions: merged.include_apps_instructions ?? true,\n\t\tinclude_skill_instructions: merged.include_skill_instructions ?? true,\n\t\tstartup_warnings: [...startupWarnings, ...permissionWarnings],\n\t\tmodel_reasoning_effort: merged.model_reasoning_effort,\n\t\tmodel_reasoning_summary: merged.model_reasoning_summary,\n\t};\n}\n\nexport function resolve_web_search_mode(\n\tconfig: Pick<ConfigToml, \"features\" | \"web_search\">,\n): WebSearchMode | null {\n\tif (isWebSearchMode(config.web_search)) {\n\t\treturn config.web_search;\n\t}\n\tif (featureEnabled(config.features, \"web_search_cached\", \"WebSearchCached\")) {\n\t\treturn \"cached\";\n\t}\n\tif (featureEnabled(config.features, \"web_search_request\", \"WebSearchRequest\")) {\n\t\treturn \"live\";\n\t}\n\treturn null;\n}\n\nexport function resolve_web_search_config(\n\tconfig: Pick<ConfigToml, \"tools\">,\n): WebSearchConfig | null {\n\tconst toolConfig = normalizeWebSearchToolConfig(config.tools?.web_search);\n\treturn toolConfig ? webSearchConfigFromToolConfig(toolConfig) : null;\n}\n\nexport function resolve_web_search_mode_for_turn(input: {\n\tallowed_modes?: readonly WebSearchMode[] | null;\n\tpermission_profile?: PermissionProfile | null;\n\tweb_search_mode: WebSearchMode;\n}): WebSearchMode {\n\tconst allowed = allowedWebSearchModes(input.allowed_modes);\n\tconst preferred = input.web_search_mode;\n\tif (isDisabledPermissionProfile(input.permission_profile) && preferred !== \"disabled\") {\n\t\tfor (const mode of [\"live\", \"cached\", \"disabled\"] as const) {\n\t\t\tif (allowed.has(mode)) {\n\t\t\t\treturn mode;\n\t\t\t}\n\t\t}\n\t\treturn \"disabled\";\n\t}\n\tif (allowed.has(preferred)) {\n\t\treturn preferred;\n\t}\n\tfor (const mode of [\"cached\", \"live\", \"disabled\"] as const) {\n\t\tif (allowed.has(mode)) {\n\t\t\treturn mode;\n\t\t}\n\t}\n\treturn \"disabled\";\n}\n\nfunction tools_config_from_toml(\n\ttools: ToolsToml | null | undefined,\n\twebSearch: {\n\t\tweb_search_config: WebSearchConfig | null;\n\t\tweb_search_mode: WebSearchMode;\n\t},\n) {\n\tconst input: DefaultToolsConfigInput = { ...(tools ?? {}) } as DefaultToolsConfigInput;\n\tdelete (input as Record<string, unknown>).web_search;\n\treturn defaultToolsConfig({\n\t\t...input,\n\t\tweb_search_config: webSearch.web_search_config,\n\t\tweb_search_mode: webSearch.web_search_mode,\n\t});\n}\n\nfunction normalizeWebSearchToolConfig(\n\tvalue: ToolsToml[\"web_search\"] | undefined,\n): Partial<WebSearchToolConfig> | null {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nfunction webSearchConfigFromToolConfig(\n\tconfig: Partial<WebSearchToolConfig>,\n): WebSearchConfig {\n\treturn {\n\t\t...(Array.isArray(config.allowed_domains)\n\t\t\t? { filters: { allowed_domains: config.allowed_domains } }\n\t\t\t: {}),\n\t\t...(config.location && typeof config.location === \"object\"\n\t\t\t? { user_location: webSearchUserLocation(config.location) }\n\t\t\t: {}),\n\t\t...(config.context_size\n\t\t\t? { search_context_size: config.context_size }\n\t\t\t: {}),\n\t};\n}\n\nfunction webSearchUserLocation(location: WebSearchLocation) {\n\treturn {\n\t\ttype: \"approximate\",\n\t\t...(location.country ? { country: location.country } : {}),\n\t\t...(location.region ? { region: location.region } : {}),\n\t\t...(location.city ? { city: location.city } : {}),\n\t\t...(location.timezone ? { timezone: location.timezone } : {}),\n\t};\n}\n\nfunction allowedWebSearchModes(\n\tmodes: readonly WebSearchMode[] | null | undefined,\n): Set<WebSearchMode> {\n\tif (!modes) {\n\t\treturn new Set([\"disabled\", \"cached\", \"live\"]);\n\t}\n\treturn new Set<WebSearchMode>([\"disabled\", ...modes.filter(isWebSearchMode)]);\n}\n\nfunction isWebSearchMode(value: unknown): value is WebSearchMode {\n\treturn value === \"disabled\" || value === \"cached\" || value === \"live\";\n}\n\nfunction isDisabledPermissionProfile(\n\tprofile: PermissionProfile | null | undefined,\n): boolean {\n\treturn Boolean(profile && (profile as { type?: unknown }).type === \"disabled\");\n}\n\nfunction featureEnabled(\n\tfeatures: ConfigToml[\"features\"] | undefined,\n\t...keys: string[]\n): boolean {\n\tif (!features) {\n\t\treturn false;\n\t}\n\tfor (const key of keys) {\n\t\tconst value = features[key];\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\t\tif (value && typeof value === \"object\") {\n\t\t\tconst record = value as Record<string, unknown>;\n\t\t\tif (record.enabled === true || record.value === true) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction normalizeBaseInstructions(config: ConfigToml) {\n\tif (typeof config.instructions === \"string\") {\n\t\treturn {\n\t\t\tbase_instructions: { text: config.instructions },\n\t\t\tsource: \"config\" as const,\n\t\t};\n\t}\n\tif (typeof config.model_instructions_file_contents === \"string\") {\n\t\tconst trimmed = config.model_instructions_file_contents.trim();\n\t\tif (trimmed) {\n\t\t\treturn {\n\t\t\t\tbase_instructions: { text: trimmed },\n\t\t\t\tsource: \"model_instructions_file\" as const,\n\t\t\t};\n\t\t}\n\t}\n\tconst baseInstructions = config.base_instructions;\n\tif (typeof baseInstructions === \"string\") {\n\t\treturn {\n\t\t\tbase_instructions: { text: baseInstructions },\n\t\t\tsource: \"config\" as const,\n\t\t};\n\t}\n\tif (baseInstructions) {\n\t\treturn {\n\t\t\tbase_instructions: baseInstructions,\n\t\t\tsource: \"config\" as const,\n\t\t};\n\t}\n\treturn {\n\t\tbase_instructions: BaseInstructions.default(),\n\t\tsource: \"default\" as const,\n\t};\n}\n\nfunction resolvePermissionProfile(config: ConfigToml) {\n\tif (config.permission_profile) {\n\t\treturn effectivePermissionProfile({\n\t\t\tpermission_profile: config.permission_profile,\n\t\t\tsandbox_policy: config.sandbox_policy,\n\t\t});\n\t}\n\tif (config.sandbox_policy) {\n\t\treturn effectivePermissionProfile({\n\t\t\tpermission_profile: null,\n\t\t\tsandbox_policy: config.sandbox_policy,\n\t\t});\n\t}\n\tif (config.sandbox_mode) {\n\t\treturn permissionProfileFromLegacySandboxPolicy({\n\t\t\tmode: config.sandbox_mode,\n\t\t});\n\t}\n\treturn effectivePermissionProfile({\n\t\tpermission_profile: null,\n\t\tsandbox_policy: null,\n\t});\n}\n\nfunction sanitize_config_for_layer(\n\tsource: ConfigLayerSource,\n\tconfig: ConfigToml,\n): ConfigToml {\n\tif (source.type !== \"Project\") {\n\t\treturn config;\n\t}\n\tconst sanitized = { ...config };\n\tfor (const denied of PROJECT_LOCAL_CONFIG_DENYLIST) {\n\t\tdelete (sanitized as Record<string, unknown>)[denied];\n\t}\n\treturn sanitized;\n}\n\nfunction verify_layer_ordering(layers: ConfigLayerEntry[]) {\n\tfor (let index = 1; index < layers.length; index += 1) {\n\t\tconst previous = layers[index - 1];\n\t\tconst current = layers[index];\n\t\tif (\n\t\t\tconfig_layer_source_precedence(previous.name) >\n\t\t\tconfig_layer_source_precedence(current.name)\n\t\t) {\n\t\t\tthrow new Error(\"config layers are not in correct precedence order\");\n\t\t}\n\t}\n}\n\nfunction version_for_toml(config: ConfigToml): string {\n\treturn stableStringify(config);\n}\n\nfunction stableStringify(value: unknown): string {\n\tif (Array.isArray(value)) {\n\t\treturn `[${value.map(stableStringify).join(\",\")}]`;\n\t}\n\tif (isPlainTomlTable(value)) {\n\t\treturn `{${Object.keys(value)\n\t\t\t.sort()\n\t\t\t.map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)\n\t\t\t.join(\",\")}}`;\n\t}\n\treturn JSON.stringify(value);\n}\n\nfunction isPlainTomlTable(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalize_key_aliases(\n\tpath: string[],\n\ttable: Record<string, unknown>,\n) {\n\tif (\n\t\tpath.length === 1 &&\n\t\tpath[0] === \"memories\" &&\n\t\t\"no_memories_if_mcp_or_web_search\" in table &&\n\t\t!(\"disable_on_external_context\" in table)\n\t) {\n\t\ttable.disable_on_external_context =\n\t\t\ttable.no_memories_if_mcp_or_web_search;\n\t\tdelete table.no_memories_if_mcp_or_web_search;\n\t}\n}\n\nfunction normalized_with_key_aliases(value: unknown, path: string[]): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalized_with_key_aliases(item, path));\n\t}\n\tif (!isPlainTomlTable(value)) {\n\t\treturn value;\n\t}\n\tconst normalized: Record<string, unknown> = {};\n\tfor (const [key, child] of Object.entries(value)) {\n\t\tnormalized[key] = normalized_with_key_aliases(child, [...path, key]);\n\t}\n\tnormalize_key_aliases(path, normalized);\n\treturn normalized;\n}\n\nfunction isIgnoredLegacyToolsWebSearchValue(\n\tpath: string[],\n\tvalue: unknown,\n): boolean {\n\treturn path.length === 2 && path[0] === \"tools\" && path[1] === \"web_search\" && typeof value === \"boolean\";\n}\n\nexport function build_cli_overrides_layer(\n\tcli_overrides: Array<[string, unknown]>,\n): ConfigToml {\n\tconst root: ConfigToml = {};\n\tfor (const [path, value] of cli_overrides) {\n\t\tapply_toml_override(root, path, value);\n\t}\n\treturn root;\n}\n\nfunction apply_toml_override(root: ConfigToml, path: string, value: unknown) {\n\tlet current: Record<string, unknown> = root;\n\tconst segments = path.split(\".\");\n\tfor (const [index, segment] of segments.entries()) {\n\t\tif (index === segments.length - 1) {\n\t\t\tcurrent[segment] = value;\n\t\t\treturn;\n\t\t}\n\t\tconst next = current[segment];\n\t\tif (!isPlainTomlTable(next)) {\n\t\t\tcurrent[segment] = {};\n\t\t}\n\t\tcurrent = current[segment] as Record<string, unknown>;\n\t}\n}\n","import { ModeKind, type CollaborationMode } from \"./config-types\";\nimport type { ToolSpec } from \"./tools/tool_spec\";\n\nexport const REQUEST_USER_INPUT_TOOL_NAME = \"request_user_input\";\n\nexport type RequestUserInputQuestionOption = {\n\tlabel: string;\n\tdescription: string;\n};\n\nexport type RequestUserInputQuestion = {\n\tid: string;\n\theader: string;\n\tquestion: string;\n\tisOther?: boolean;\n\tisSecret?: boolean;\n\toptions?: RequestUserInputQuestionOption[];\n};\n\nexport type NormalizedRequestUserInputQuestion = {\n\tid: string;\n\theader: string;\n\tquestion: string;\n\tisOther: boolean;\n\tisSecret: boolean;\n\toptions: RequestUserInputQuestionOption[];\n};\n\nexport type RequestUserInputArgs = {\n\tquestions: RequestUserInputQuestion[];\n};\n\nexport type NormalizedRequestUserInputArgs = {\n\tquestions: NormalizedRequestUserInputQuestion[];\n};\n\nexport type RequestUserInputAnswer = {\n\tanswers: string[];\n};\n\nexport type RequestUserInputResponse = {\n\tanswers: Record<string, RequestUserInputAnswer>;\n};\n\nexport type RequestUserInputEvent = {\n\t/** Responses API call id for the associated tool call, if available. */\n\tcall_id: string;\n\t/** Turn id that this request belongs to. */\n\tturn_id: string;\n\tquestions: NormalizedRequestUserInputQuestion[];\n};\n\nexport function normalizeRequestUserInputArgs(\n\targs: RequestUserInputArgs,\n): NormalizedRequestUserInputArgs {\n\treturn {\n\t\tquestions: args.questions.map((question) => {\n\t\t\tconst options = question.options;\n\t\t\tif (!options || options.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"request_user_input requires non-empty options for every question\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...question,\n\t\t\t\tisOther: true,\n\t\t\t\tisSecret: question.isSecret ?? false,\n\t\t\t\toptions: options.map((option) => ({ ...option })),\n\t\t\t};\n\t\t}),\n\t};\n}\n\nexport function requestUserInputAvailableModes(): ModeKind[] {\n\treturn [ModeKind.Plan];\n}\n\nexport function createRequestUserInputTool(description: string): ToolSpec {\n\treturn {\n\t\ttype: \"function\",\n\t\tname: REQUEST_USER_INPUT_TOOL_NAME,\n\t\tdescription,\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tquestions: {\n\t\t\t\t\ttype: \"array\",\n\t\t\t\t\tdescription: \"Questions to show the user. Prefer 1 and do not exceed 3\",\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tdescription: \"Stable identifier for mapping answers (snake_case).\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\theader: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Short header label shown in the UI (12 or fewer chars).\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tquestion: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tdescription: \"Single-sentence prompt shown to the user.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'Provide 2-3 mutually exclusive choices. Put the recommended option first and suffix its label with \"(Recommended)\". Do not include an \"Other\" option in this list; the client will add a free-form \"Other\" option automatically.',\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\tdescription: \"User-facing label (1-5 words).\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdescription: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t\t\t\"One short sentence explaining impact/tradeoff if selected.\",\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\trequired: [\"label\", \"description\"],\n\t\t\t\t\t\t\t\t\tadditionalProperties: false,\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\trequired: [\"id\", \"header\", \"question\", \"options\"],\n\t\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"questions\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function requestUserInputUnavailableMessage(\n\tmode: CollaborationMode[\"mode\"],\n\tavailableModes: readonly ModeKind[],\n): string | null {\n\tif (availableModes.includes(mode)) {\n\t\treturn null;\n\t}\n\n\treturn `request_user_input is unavailable in ${modeDisplayName(mode)} mode`;\n}\n\nexport function requestUserInputToolDescription(\n\tavailableModes: readonly ModeKind[],\n): string {\n\treturn `Request user input for one to three short questions and wait for the response. This tool is only available in ${formatAllowedModes(availableModes)}.`;\n}\n\nfunction formatAllowedModes(availableModes: readonly ModeKind[]): string {\n\tconst modeNames = availableModes.map(modeDisplayName);\n\n\tif (modeNames.length === 0) {\n\t\treturn \"no modes\";\n\t}\n\n\tif (modeNames.length === 1) {\n\t\treturn `${modeNames[0]} mode`;\n\t}\n\n\tif (modeNames.length === 2) {\n\t\treturn `${modeNames[0]} or ${modeNames[1]} mode`;\n\t}\n\n\treturn `modes: ${modeNames.join(\",\")}`;\n}\n\nfunction modeDisplayName(mode: ModeKind): string {\n\tswitch (mode) {\n\t\tcase ModeKind.Plan:\n\t\t\treturn \"Plan\";\n\t\tcase ModeKind.Default:\n\t\t\treturn \"Default\";\n\t}\n}\n","import {\n\tPermissionGrantScope,\n\ttype RequestPermissionProfile,\n\ttype RequestPermissionsResponse,\n} from \"../request_permissions\";\n\nexport const ToolApprovalRequirement = {\n\tSkip: \"skip\",\n\tNeedsApproval: \"needs_approval\",\n\tForbidden: \"forbidden\",\n} as const;\n\nexport type ToolApprovalRequirement =\n\t| { type: typeof ToolApprovalRequirement.Skip }\n\t| { type: typeof ToolApprovalRequirement.NeedsApproval; reason?: string | null }\n\t| { type: typeof ToolApprovalRequirement.Forbidden; reason: string };\n\nexport class PermissionGrantStore {\n\tprivate readonly grants: RequestPermissionProfile[] = [];\n\tprivate strict_auto_review = false;\n\n\trecord(response: RequestPermissionsResponse): void {\n\t\tif (!response.permissions || isEmpty(response.permissions)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.grants.push(clone(response.permissions));\n\t\tif (response.strict_auto_review) {\n\t\t\tthis.strict_auto_review = true;\n\t\t}\n\t}\n\n\tall(): RequestPermissionProfile[] {\n\t\treturn this.grants.map(clone);\n\t}\n\n\thasGrants(): boolean {\n\t\treturn this.grants.length > 0;\n\t}\n\n\tstrictAutoReviewEnabled(): boolean {\n\t\treturn this.strict_auto_review;\n\t}\n\n\tclear(): void {\n\t\tthis.grants.length = 0;\n\t\tthis.strict_auto_review = false;\n\t}\n}\n\nexport class ToolOrchestrator {\n\tstatic defaultApprovalRequirement(): ToolApprovalRequirement {\n\t\treturn { type: ToolApprovalRequirement.Skip };\n\t}\n}\n\nexport function normalizeRequestPermissionsResponseForCwd(\n\tresponse: RequestPermissionsResponse,\n\tcwd: string,\n): RequestPermissionsResponse {\n\tconst permissions = clone(response.permissions ?? {});\n\tconst fileSystem = permissions.file_system;\n\tif (fileSystem && Array.isArray(fileSystem.entries)) {\n\t\tpermissions.file_system = {\n\t\t\t...fileSystem,\n\t\t\tentries: fileSystem.entries.map((entry) =>\n\t\t\t\tmaterializeCwdEntry(entry, cwd),\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tpermissions,\n\t\tscope: response.scope ?? PermissionGrantScope.Turn,\n\t\tstrict_auto_review: response.strict_auto_review ?? false,\n\t};\n}\n\nfunction materializeCwdEntry(\n\tentry: Record<string, unknown>,\n\tcwd: string,\n): Record<string, unknown> {\n\tif (entry.path === \"$cwd\" || entry.path === \"cwd\") {\n\t\treturn { ...entry, path: cwd };\n\t}\n\tif (\n\t\ttypeof entry.path === \"object\" &&\n\t\tentry.path !== null &&\n\t\t\"value\" in entry.path &&\n\t\t(entry.path as { value?: unknown }).value === \"cwd\"\n\t) {\n\t\treturn { ...entry, path: cwd };\n\t}\n\treturn { ...entry };\n}\n\nfunction isEmpty(permissions: RequestPermissionProfile): boolean {\n\treturn !permissions.network && !permissions.file_system;\n}\n\nfunction clone<T>(value: T): T {\n\treturn JSON.parse(JSON.stringify(value)) as T;\n}\n","import type { RequestUserInputResponse } from \"../request_user_input\";\nimport type {\n\tMcpRequestId,\n\tMcpServerElicitationResponse,\n} from \"../mcp\";\nimport type {\n\tRequestPermissionProfile,\n\tRequestPermissionsResponse,\n} from \"../request_permissions\";\nimport { Mailbox, type InterAgentCommunication } from \"../agent/mod\";\nimport { PermissionGrantStore } from \"../tools/orchestrator\";\nimport type { DynamicToolResponse, TokenUsage, UserInput } from \"../protocol\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport type { RunningTask, TaskKind } from \"../tasks/mod\";\n\nexport const MailboxDeliveryPhase = {\n\tCurrentTurn: \"CurrentTurn\",\n\tNextTurn: \"NextTurn\",\n} as const;\n\nexport type MailboxDeliveryPhase =\n\t(typeof MailboxDeliveryPhase)[keyof typeof MailboxDeliveryPhase];\n\nexport type PendingUserInput = {\n\tresolve(response: RequestUserInputResponse | null): void;\n};\n\nexport type PendingDynamicTool = {\n\tresolve(response: DynamicToolResponse | null): void;\n};\n\nexport type PendingRequestPermissions = {\n\tresolve(response: RequestPermissionsResponse | null): void;\n};\n\nexport type PendingMcpElicitation = {\n\tresolve(response: McpServerElicitationResponse | null): void;\n};\n\nexport type RunningTaskPlaceholder = {\n\tsub_id: string;\n\tkind: TaskKind;\n\tturn_context: TurnContext;\n};\n\nexport type RemovedTask = {\n\tactive_turn_is_empty: boolean;\n\ttask: RunningTask;\n};\n\nexport const emptyTokenUsage: TokenUsage = {\n\tinput_tokens: 0,\n\tcached_input_tokens: 0,\n\toutput_tokens: 0,\n\treasoning_output_tokens: 0,\n\ttotal_tokens: 0,\n};\n\nexport class TurnState {\n\tprivate readonly pending_user_input = new Map<string, PendingUserInput>();\n\tprivate readonly pending_dynamic_tools = new Map<string, PendingDynamicTool>();\n\tprivate readonly pending_request_permissions = new Map<\n\t\tstring,\n\t\tPendingRequestPermissions\n\t>();\n\tprivate readonly pending_mcp_elicitations = new Map<\n\t\tstring,\n\t\tPendingMcpElicitation\n\t>();\n\tprivate pending_input: UserInput[] = [];\n\tprivate readonly mailbox = new Mailbox();\n\tprivate mailbox_delivery_phase: MailboxDeliveryPhase =\n\t\tMailboxDeliveryPhase.CurrentTurn;\n\tprivate readonly permission_grants = new PermissionGrantStore();\n\n\ttool_calls = 0;\n\thas_memory_citation = false;\n\ttoken_usage_at_turn_start: TokenUsage = { ...emptyTokenUsage };\n\n\tinsertPendingUserInput(\n\t\tkey: string,\n\t\tpending: PendingUserInput,\n\t): PendingUserInput | undefined {\n\t\tconst previous = this.pending_user_input.get(key);\n\t\tthis.pending_user_input.set(key, pending);\n\t\treturn previous;\n\t}\n\n\tremovePendingUserInput(key: string): PendingUserInput | undefined {\n\t\tconst pending = this.pending_user_input.get(key);\n\t\tthis.pending_user_input.delete(key);\n\t\treturn pending;\n\t}\n\n\tinsertPendingDynamicTool(\n\t\tkey: string,\n\t\tpending: PendingDynamicTool,\n\t): PendingDynamicTool | undefined {\n\t\tconst previous = this.pending_dynamic_tools.get(key);\n\t\tthis.pending_dynamic_tools.set(key, pending);\n\t\treturn previous;\n\t}\n\n\tremovePendingDynamicTool(key: string): PendingDynamicTool | undefined {\n\t\tconst pending = this.pending_dynamic_tools.get(key);\n\t\tthis.pending_dynamic_tools.delete(key);\n\t\treturn pending;\n\t}\n\n\tinsertPendingRequestPermissions(\n\t\tkey: string,\n\t\tpending: PendingRequestPermissions,\n\t): PendingRequestPermissions | undefined {\n\t\tconst previous = this.pending_request_permissions.get(key);\n\t\tthis.pending_request_permissions.set(key, pending);\n\t\treturn previous;\n\t}\n\n\tremovePendingRequestPermissions(\n\t\tkey: string,\n\t): PendingRequestPermissions | undefined {\n\t\tconst pending = this.pending_request_permissions.get(key);\n\t\tthis.pending_request_permissions.delete(key);\n\t\treturn pending;\n\t}\n\n\tinsertPendingMcpElicitation(\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t\tpending: PendingMcpElicitation,\n\t): PendingMcpElicitation | undefined {\n\t\tconst key = mcpElicitationKey(serverName, id);\n\t\tconst previous = this.pending_mcp_elicitations.get(key);\n\t\tthis.pending_mcp_elicitations.set(key, pending);\n\t\treturn previous;\n\t}\n\n\tremovePendingMcpElicitation(\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t): PendingMcpElicitation | undefined {\n\t\tconst key = mcpElicitationKey(serverName, id);\n\t\tconst pending = this.pending_mcp_elicitations.get(key);\n\t\tthis.pending_mcp_elicitations.delete(key);\n\t\treturn pending;\n\t}\n\n\trecordPermissionGrant(response: RequestPermissionsResponse): void {\n\t\tthis.permission_grants.record(response);\n\t}\n\n\tgrantedPermissions(): RequestPermissionProfile[] {\n\t\treturn this.permission_grants.all();\n\t}\n\n\tstrictAutoReviewEnabled(): boolean {\n\t\treturn this.permission_grants.strictAutoReviewEnabled();\n\t}\n\n\tpushPendingInput(input: UserInput): void {\n\t\tthis.pending_input.push(input);\n\t}\n\n\tprependPendingInput(input: UserInput[]): void {\n\t\tif (input.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pending_input = [...input, ...this.pending_input];\n\t}\n\n\ttakePendingInput(): UserInput[] {\n\t\tconst pending = this.pending_input;\n\t\tthis.pending_input = [];\n\t\treturn pending;\n\t}\n\n\thasPendingInput(): boolean {\n\t\treturn this.pending_input.length > 0;\n\t}\n\n\tclearPending(): void {\n\t\tthis.pending_user_input.clear();\n\t\tthis.pending_dynamic_tools.clear();\n\t\tthis.pending_request_permissions.clear();\n\t\tthis.pending_mcp_elicitations.clear();\n\t\tthis.pending_input = [];\n\t\tthis.permission_grants.clear();\n\t}\n\n\tcancelPending(): void {\n\t\tfor (const pending of this.pending_user_input.values()) {\n\t\t\tpending.resolve(null);\n\t\t}\n\t\tfor (const pending of this.pending_dynamic_tools.values()) {\n\t\t\tpending.resolve(null);\n\t\t}\n\t\tfor (const pending of this.pending_request_permissions.values()) {\n\t\t\tpending.resolve(null);\n\t\t}\n\t\tfor (const pending of this.pending_mcp_elicitations.values()) {\n\t\t\tpending.resolve(null);\n\t\t}\n\t\tthis.clearPending();\n\t\tthis.mailbox.drain();\n\t}\n\n\tsendMailboxMessage(\n\t\tcommunication: Omit<InterAgentCommunication, \"seq\">,\n\t): number {\n\t\treturn this.mailbox.send(communication);\n\t}\n\n\tdrainMailbox(): InterAgentCommunication[] {\n\t\treturn this.mailbox.drain();\n\t}\n\n\thasMailboxPending(): boolean {\n\t\treturn this.mailbox.has_pending();\n\t}\n\n\thasMailboxPendingTriggerTurn(): boolean {\n\t\treturn this.mailbox.has_pending_trigger_turn();\n\t}\n\n\tacceptMailboxDeliveryForCurrentTurn(): void {\n\t\tthis.setMailboxDeliveryPhase(MailboxDeliveryPhase.CurrentTurn);\n\t}\n\n\tacceptsMailboxDeliveryForCurrentTurn(): boolean {\n\t\treturn this.mailbox_delivery_phase === MailboxDeliveryPhase.CurrentTurn;\n\t}\n\n\tsetMailboxDeliveryPhase(phase: MailboxDeliveryPhase): void {\n\t\tthis.mailbox_delivery_phase = phase;\n\t}\n}\n\nfunction mcpElicitationKey(serverName: string, id: McpRequestId): string {\n\treturn `${serverName}:${typeof id}:${String(id)}`;\n}\n\nexport class ActiveTurn {\n\tprivate readonly tasks = new Map<string, RunningTask>();\n\treadonly turn_state = new TurnState();\n\n\taddTask(task: RunningTask): void {\n\t\tthis.tasks.set(task.sub_id, task);\n\t}\n\n\tremoveTask(sub_id: string): RemovedTask | undefined {\n\t\tconst task = this.tasks.get(sub_id);\n\t\tif (!task) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthis.tasks.delete(sub_id);\n\t\treturn {\n\t\t\tactive_turn_is_empty: this.tasks.size === 0,\n\t\t\ttask,\n\t\t};\n\t}\n\n\tdrainTasks(): RunningTask[] {\n\t\tconst tasks = [...this.tasks.values()];\n\t\tthis.tasks.clear();\n\t\treturn tasks;\n\t}\n\n\tfirstTask(): RunningTask | null {\n\t\treturn this.tasks.values().next().value ?? null;\n\t}\n\n\thasTask(sub_id: string): boolean {\n\t\treturn this.tasks.has(sub_id);\n\t}\n\n\tclearPending(): void {\n\t\tthis.turn_state.clearPending();\n\t}\n\n\tcancelPending(): void {\n\t\tthis.turn_state.cancelPending();\n\t}\n\n\tget size(): number {\n\t\treturn this.tasks.size;\n\t}\n}\n","import { ContextManager, type TotalTokenUsageBreakdown } from \"../context_manager/history\";\nimport type {\n\tRateLimitSnapshot,\n\tResponseItem,\n\tTokenUsage,\n\tTokenUsageInfo,\n\tTruncationPolicy,\n\tTurnContextItem,\n} from \"../protocol\";\nimport type { PreviousTurnSettings } from \"../session/rollout-reconstruction\";\nimport type { SessionConfiguration } from \"../session/session\";\n\nexport type SessionStateParams = {\n\tsession_configuration: SessionConfiguration;\n\thistory?: ContextManager | null;\n\tlatest_rate_limits?: RateLimitSnapshot | null;\n\tserver_reasoning_included?: boolean;\n\tprevious_turn_settings?: PreviousTurnSettings | null;\n\treference_context_item?: TurnContextItem | null;\n\ttoken_info?: TokenUsageInfo | null;\n};\n\nexport class SessionState {\n\treadonly session_configuration: SessionConfiguration;\n\treadonly history: ContextManager;\n\tprivate latest_rate_limits_value: RateLimitSnapshot | null;\n\tprivate server_reasoning_included_value: boolean;\n\tprivate previous_turn_settings_value: PreviousTurnSettings | null;\n\n\tconstructor(params: SessionStateParams) {\n\t\tthis.session_configuration = params.session_configuration;\n\t\tthis.history = params.history?.clone() ?? ContextManager.new();\n\t\tthis.latest_rate_limits_value = structuredClone(\n\t\t\tparams.latest_rate_limits ?? null,\n\t\t);\n\t\tthis.server_reasoning_included_value =\n\t\t\tparams.server_reasoning_included ?? false;\n\t\tthis.previous_turn_settings_value = structuredClone(\n\t\t\tparams.previous_turn_settings ?? null,\n\t\t);\n\t\tif (params.reference_context_item !== undefined) {\n\t\t\tthis.history.set_reference_context_item(params.reference_context_item);\n\t\t}\n\t\tif (params.token_info !== undefined) {\n\t\t\tthis.history.set_token_info(params.token_info);\n\t\t}\n\t}\n\n\trecord_items(\n\t\titems: Iterable<ResponseItem>,\n\t\tpolicy?: TruncationPolicy | null,\n\t): void {\n\t\tthis.history.record_items(items, policy);\n\t}\n\n\tprevious_turn_settings(): PreviousTurnSettings | null {\n\t\treturn structuredClone(this.previous_turn_settings_value);\n\t}\n\n\tset_previous_turn_settings(value: PreviousTurnSettings | null): void {\n\t\tthis.previous_turn_settings_value = structuredClone(value);\n\t}\n\n\tclone_history(): ContextManager {\n\t\treturn this.history.clone();\n\t}\n\n\treplace_history(\n\t\titems: ResponseItem[],\n\t\treferenceContextItem: TurnContextItem | null,\n\t): void {\n\t\tthis.history.replace(items);\n\t\tthis.history.set_reference_context_item(referenceContextItem);\n\t}\n\n\tset_token_info(info: TokenUsageInfo | null): void {\n\t\tthis.history.set_token_info(info);\n\t}\n\n\tset_reference_context_item(item: TurnContextItem | null): void {\n\t\tthis.history.set_reference_context_item(item);\n\t}\n\n\treference_context_item(): TurnContextItem | null {\n\t\treturn this.history.reference_context_item();\n\t}\n\n\tupdate_token_info_from_usage(\n\t\tusage: TokenUsage,\n\t\tmodelContextWindow?: number | null,\n\t): void {\n\t\tthis.history.update_token_info(usage, modelContextWindow ?? null);\n\t}\n\n\ttoken_info(): TokenUsageInfo | null {\n\t\treturn this.history.token_info();\n\t}\n\n\tset_rate_limits(snapshot: RateLimitSnapshot): void {\n\t\tthis.latest_rate_limits_value = merge_rate_limit_fields(\n\t\t\tthis.latest_rate_limits_value,\n\t\t\tsnapshot,\n\t\t);\n\t}\n\n\tset_latest_rate_limits(snapshot: RateLimitSnapshot | null): void {\n\t\tthis.latest_rate_limits_value = structuredClone(snapshot);\n\t}\n\n\tlatest_rate_limits(): RateLimitSnapshot | null {\n\t\treturn structuredClone(this.latest_rate_limits_value);\n\t}\n\n\ttoken_info_and_rate_limits(): [TokenUsageInfo | null, RateLimitSnapshot | null] {\n\t\treturn [this.token_info(), this.latest_rate_limits()];\n\t}\n\n\tset_token_usage_full(contextWindow: number): void {\n\t\tthis.history.set_token_usage_full(contextWindow);\n\t}\n\n\tget_total_token_usage(serverReasoningIncluded?: boolean): number {\n\t\treturn this.history.get_total_token_usage(\n\t\t\tserverReasoningIncluded ?? this.server_reasoning_included_value,\n\t\t);\n\t}\n\n\tget_total_token_usage_breakdown(): TotalTokenUsageBreakdown {\n\t\treturn this.history.get_total_token_usage_breakdown();\n\t}\n\n\tset_server_reasoning_included(included: boolean): void {\n\t\tthis.server_reasoning_included_value = included;\n\t}\n\n\tserver_reasoning_included(): boolean {\n\t\treturn this.server_reasoning_included_value;\n\t}\n}\n\nfunction merge_rate_limit_fields(\n\tprevious: RateLimitSnapshot | null,\n\tsnapshot: RateLimitSnapshot,\n): RateLimitSnapshot {\n\tconst next = structuredClone(snapshot);\n\tif (next.limit_id === undefined || next.limit_id === null) {\n\t\tnext.limit_id = \"codex\";\n\t}\n\tif (next.credits === undefined && previous?.credits !== undefined) {\n\t\tnext.credits = structuredClone(previous.credits);\n\t}\n\tif (next.plan_type === undefined && previous?.plan_type !== undefined) {\n\t\tnext.plan_type = previous.plan_type;\n\t}\n\treturn next;\n}\n","import type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport type { UserInput } from \"../protocol\";\n\nexport const TaskKind = {\n\tRegular: \"Regular\",\n\tCompact: \"Compact\",\n\tReview: \"Review\",\n} as const;\n\nexport type TaskKind = (typeof TaskKind)[keyof typeof TaskKind];\n\nexport type SessionTaskResult = {\n\tlast_agent_message: string | null;\n\tsteps?: number;\n\tmessage?: string;\n};\n\nexport class SessionTaskContext {\n\tprivate readonly session: Session;\n\n\tconstructor(session: Session) {\n\t\tthis.session = session;\n\t}\n\n\tclone_session(): Session {\n\t\treturn this.session;\n\t}\n}\n\nexport type SessionTaskRunInput = {\n\tsession: SessionTaskContext;\n\tctx: TurnContext;\n\tinput: UserInput[];\n\tsignal?: AbortSignal;\n};\n\nexport interface SessionTask {\n\tkind(): TaskKind;\n\tspan_name(): string;\n\trecords_turn_token_usage_on_span(): boolean;\n\trun(input: SessionTaskRunInput): Promise<SessionTaskResult>;\n\tabort?(input: {\n\t\tsession: SessionTaskContext;\n\t\tctx: TurnContext;\n\t}): Promise<void>;\n}\n\nexport type RunningTask = {\n\tsub_id: string;\n\tkind: TaskKind;\n\tturn_context: TurnContext;\n\ttask?: SessionTask;\n\tabort_controller?: AbortController;\n\trecords_turn_token_usage_on_span?: boolean;\n};\n","export type TurnTimingSnapshot = {\n\tcompleted_at: number;\n\tduration_ms: number;\n\ttime_to_first_token_ms: number | null;\n};\n\nexport class TurnTimingState {\n\tprivate started_at_ms: number | null = null;\n\tprivate first_token_at_ms: number | null = null;\n\n\tmarkTurnStarted(now: number): number {\n\t\tthis.started_at_ms = now;\n\t\tthis.first_token_at_ms = null;\n\t\treturn now;\n\t}\n\n\tmarkFirstToken(now: number): void {\n\t\tif (this.started_at_ms === null || this.first_token_at_ms !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.first_token_at_ms = now;\n\t}\n\n\tcompletedAtAndDuration(now: number): TurnTimingSnapshot {\n\t\tconst startedAt = this.started_at_ms ?? now;\n\t\treturn {\n\t\t\tcompleted_at: now,\n\t\t\tduration_ms: Math.max(0, now - startedAt),\n\t\t\ttime_to_first_token_ms:\n\t\t\t\tthis.first_token_at_ms === null\n\t\t\t\t\t? null\n\t\t\t\t\t: Math.max(0, this.first_token_at_ms - startedAt),\n\t\t};\n\t}\n}\n","import type { CollaborationMode } from \"../config-types\";\nimport type {\n\tActivePermissionProfile,\n\tApprovalsReviewer,\n\tAskForApproval,\n\tDynamicToolSpec,\n\tFileSystemSandboxPolicy,\n\tPermissionProfile,\n\tPersonality,\n\tReasoningEffortConfig,\n\tReasoningSummaryConfig,\n\tSandboxPolicy,\n\tServiceTier,\n\tSessionSource,\n\tTruncationPolicy,\n\tTurnContextItem,\n\tTurnEnvironmentSelection,\n\tW3cTraceContext,\n\tWindowsSandboxLevel,\n} from \"../protocol\";\nimport type { ToolsConfig } from \"../tools/spec_plan_types\";\nimport { TurnTimingState } from \"./turn-timing\";\nimport {\n\teffectivePermissionProfile,\n\tlegacySandboxPolicyFromPermissionProfile,\n} from \"../config/permissions\";\nimport {\n\tautoCompactTokenLimit,\n\teffectiveContextWindow,\n\tmodelInfoFromSlug,\n\ttype ModelInfo,\n} from \"../model-provider\";\n\nexport type TurnContextParams = {\n\tsub_id: string;\n\ttrace?: W3cTraceContext;\n\tcwd: string;\n\tcurrent_date?: string;\n\ttimezone?: string;\n\tapproval_policy: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy: SandboxPolicy;\n\tpermission_profile?: PermissionProfile | null;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel | null;\n\tmodel: string;\n\tmodel_info?: ModelInfo | null;\n\tpersonality?: Personality | null;\n\tcollaboration_mode?: CollaborationMode | null;\n\teffort?: ReasoningEffortConfig | null;\n\tsummary: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tsession_source: SessionSource;\n\tenvironments: TurnEnvironmentSelection[];\n\tbase_instructions?: string | null;\n\tuser_instructions?: string | null;\n\tdeveloper_instructions?: string | null;\n\tfinal_output_json_schema?: unknown;\n\ttruncation_policy?: TruncationPolicy | null;\n\tdynamic_tools: DynamicToolSpec[];\n\ttools: ToolsConfig;\n};\n\nexport class TurnContext {\n\treadonly sub_id: string;\n\treadonly trace_id?: string;\n\treadonly cwd: string;\n\treadonly current_date?: string;\n\treadonly timezone?: string;\n\treadonly approval_policy: AskForApproval;\n\treadonly approvals_reviewer?: ApprovalsReviewer | null;\n\treadonly sandbox_policy: SandboxPolicy;\n\treadonly permission_profile?: PermissionProfile | null;\n\treadonly active_permission_profile?: ActivePermissionProfile | null;\n\treadonly windows_sandbox_level?: WindowsSandboxLevel | null;\n\treadonly model: string;\n\treadonly model_info: ModelInfo;\n\treadonly personality?: Personality | null;\n\treadonly collaboration_mode?: CollaborationMode | null;\n\treadonly effort?: ReasoningEffortConfig | null;\n\treadonly summary: ReasoningSummaryConfig;\n\treadonly service_tier?: ServiceTier | null;\n\treadonly session_source: SessionSource;\n\treadonly environments: TurnEnvironmentSelection[];\n\treadonly base_instructions?: string | null;\n\treadonly user_instructions?: string | null;\n\treadonly developer_instructions?: string | null;\n\treadonly final_output_json_schema?: unknown;\n\treadonly truncation_policy?: TruncationPolicy | null;\n\treadonly dynamic_tools: DynamicToolSpec[];\n\treadonly tools: ToolsConfig;\n\treadonly turn_timing_state = new TurnTimingState();\n\n\tconstructor(params: TurnContextParams) {\n\t\tthis.sub_id = params.sub_id;\n\t\tthis.trace_id = params.trace?.traceparent;\n\t\tthis.cwd = params.cwd;\n\t\tthis.current_date = params.current_date;\n\t\tthis.timezone = params.timezone;\n\t\tthis.approval_policy = params.approval_policy;\n\t\tthis.approvals_reviewer = params.approvals_reviewer;\n\t\tthis.sandbox_policy = params.sandbox_policy;\n\t\tthis.permission_profile = params.permission_profile;\n\t\tthis.active_permission_profile = params.active_permission_profile;\n\t\tthis.windows_sandbox_level = params.windows_sandbox_level;\n\t\tthis.model = params.model;\n\t\tthis.model_info = params.model_info ?? modelInfoFromSlug(params.model);\n\t\tthis.personality = params.personality;\n\t\tthis.collaboration_mode = params.collaboration_mode;\n\t\tthis.effort = params.effort;\n\t\tthis.summary = params.summary;\n\t\tthis.service_tier = params.service_tier;\n\t\tthis.session_source = params.session_source;\n\t\tthis.environments = params.environments;\n\t\tthis.base_instructions = params.base_instructions;\n\t\tthis.user_instructions = params.user_instructions;\n\t\tthis.developer_instructions = params.developer_instructions;\n\t\tthis.final_output_json_schema = params.final_output_json_schema;\n\t\tthis.truncation_policy = params.truncation_policy;\n\t\tthis.dynamic_tools = params.dynamic_tools;\n\t\tthis.tools = params.tools;\n\t}\n\n\ttoTurnContextItem(): TurnContextItem {\n\t\tconst fileSystemSandboxPolicy: FileSystemSandboxPolicy | null = null;\n\t\tconst permissionProfile = this.effectivePermissionProfile();\n\t\tconst item: TurnContextItem = {\n\t\t\tturn_id: this.sub_id,\n\t\t\ttrace_id: this.trace_id,\n\t\t\tcwd: this.cwd,\n\t\t\tcurrent_date: this.current_date,\n\t\t\ttimezone: this.timezone,\n\t\t\tapproval_policy: this.approval_policy,\n\t\t\tsandbox_policy: this.effectiveSandboxPolicy(),\n\t\t\tpermission_profile: permissionProfile,\n\t\t\tnetwork: null,\n\t\t\tfile_system_sandbox_policy: fileSystemSandboxPolicy,\n\t\t\tmodel: this.model,\n\t\t\tpersonality: this.personality,\n\t\t\tcollaboration_mode: this.collaboration_mode,\n\t\t\trealtime_active: false,\n\t\t\teffort: this.effort,\n\t\t\tsummary: this.summary,\n\t\t\tuser_instructions: this.user_instructions,\n\t\t\tdeveloper_instructions: this.developer_instructions,\n\t\t\tfinal_output_json_schema: this.final_output_json_schema,\n\t\t\ttruncation_policy: this.truncation_policy,\n\t\t};\n\t\tif (this.windows_sandbox_level != null) {\n\t\t\titem.windows_sandbox_level = this.windows_sandbox_level;\n\t\t}\n\t\treturn item;\n\t}\n\n\teffectivePermissionProfile(): PermissionProfile {\n\t\treturn effectivePermissionProfile({\n\t\t\tpermission_profile: this.permission_profile,\n\t\t\tsandbox_policy: this.sandbox_policy,\n\t\t});\n\t}\n\n\teffectiveSandboxPolicy(): SandboxPolicy {\n\t\treturn legacySandboxPolicyFromPermissionProfile(\n\t\t\tthis.effectivePermissionProfile(),\n\t\t\tthis.cwd,\n\t\t);\n\t}\n\n\tmodel_context_window(): number | null {\n\t\treturn effectiveContextWindow(this.model_info);\n\t}\n\n\tauto_compact_token_limit(): number | null {\n\t\treturn autoCompactTokenLimit(this.model_info);\n\t}\n\n\teffectiveReasoningEffort(): ReasoningEffortConfig | null {\n\t\treturn this.effort ?? null;\n\t}\n}\n","import {\n\tcollaborationModeForModel,\n\tcollaborationModeWithUpdates,\n\ttype CollaborationMode,\n} from \"../config-types\";\nimport { normalizeCollaborationMode } from \"../collaboration-mode-presets\";\nimport type {\n\tActivePermissionProfile,\n\tApprovalsReviewer,\n\tAskForApproval,\n\tPermissionProfile,\n\tPersonality,\n\tReasoningEffortConfig,\n\tReasoningSummaryConfig,\n\tSandboxPolicy,\n\tServiceTier,\n\tTurnEnvironmentSelection,\n\tUserInputOp,\n\tUserInputWithTurnContextOp,\n\tUserTurnOp,\n\tOverrideTurnContextOp,\n\tWindowsSandboxLevel,\n} from \"../protocol\";\nimport type { SessionConfiguration } from \"./session\";\nimport {\n\teffectivePermissionProfile,\n\tlegacySandboxPolicyFromPermissionProfile,\n} from \"../config/permissions\";\nimport { modelInfoFromSlug } from \"../model-provider\";\n\nexport type SessionSettingsUpdate = {\n\tcwd?: string;\n\tapproval_policy?: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy?: SandboxPolicy;\n\tpermission_profile?: PermissionProfile | null;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel | null;\n\tmodel?: string;\n\teffort?: ReasoningEffortConfig | null;\n\tsummary?: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tcollaboration_mode?: CollaborationMode;\n\tpersonality?: Personality | null;\n\tenvironments?: TurnEnvironmentSelection[];\n\tpersist_environments?: boolean;\n\tfinal_output_json_schema?: unknown;\n};\n\nexport class SessionSettingsUpdateError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SessionSettingsUpdateError\";\n\t}\n}\n\nexport function sessionSettingsUpdateFromUserTurn(\n\top: UserTurnOp,\n): SessionSettingsUpdate {\n\treturn {\n\t\tcwd: op.cwd,\n\t\tapproval_policy: op.approval_policy,\n\t\tapprovals_reviewer: op.approvals_reviewer ?? null,\n\t\tsandbox_policy: op.sandbox_policy,\n\t\tpermission_profile: op.permission_profile ?? null,\n\t\tactive_permission_profile: null,\n\t\tmodel: op.model,\n\t\teffort: op.effort ?? null,\n\t\tsummary: op.summary,\n\t\tservice_tier: op.service_tier ?? null,\n\t\tfinal_output_json_schema: op.final_output_json_schema,\n\t\tcollaboration_mode: normalizeCollaborationMode({\n\t\t\tcollaborationMode:\n\t\t\t\top.collaboration_mode ?? collaborationModeForModel(op.model, op.effort),\n\t\t\tmodel: op.model,\n\t\t\treasoningEffort: op.effort ?? null,\n\t\t}),\n\t\tpersonality: op.personality ?? null,\n\t\tenvironments: op.environments,\n\t\tpersist_environments: op.environments !== undefined,\n\t};\n}\n\nexport function sessionSettingsUpdateFromUserInput(\n\top: UserInputOp,\n): SessionSettingsUpdate {\n\treturn {\n\t\tenvironments: op.environments,\n\t\tpersist_environments: false,\n\t\tfinal_output_json_schema: op.final_output_json_schema,\n\t};\n}\n\nexport function sessionSettingsUpdateFromUserInputWithTurnContext(\n\top: UserInputWithTurnContextOp,\n\tcurrent: SessionConfiguration,\n): SessionSettingsUpdate {\n\tconst collaboration_mode =\n\t\top.collaboration_mode ??\n\t\t(op.model || \"effort\" in op\n\t\t\t? collaborationModeWithModelUpdates(\n\t\t\t\t\tcurrent.collaboration_mode,\n\t\t\t\t\top.model ?? current.model,\n\t\t\t\t\t\"effort\" in op ? op.effort : current.reasoning_effort,\n\t\t\t\t)\n\t\t\t: undefined);\n\tconst model = op.model ?? current.model;\n\tconst effort = \"effort\" in op ? op.effort : current.reasoning_effort;\n\n\treturn {\n\t\tcwd: op.cwd,\n\t\tapproval_policy: op.approval_policy,\n\t\tapprovals_reviewer: op.approvals_reviewer,\n\t\tsandbox_policy: op.sandbox_policy,\n\t\tpermission_profile: op.permission_profile,\n\t\tactive_permission_profile: op.active_permission_profile,\n\t\twindows_sandbox_level: op.windows_sandbox_level,\n\t\tmodel: op.model,\n\t\teffort: \"effort\" in op ? op.effort : undefined,\n\t\tsummary: op.summary,\n\t\tservice_tier: \"service_tier\" in op ? op.service_tier : undefined,\n\t\tfinal_output_json_schema: op.final_output_json_schema,\n\t\tcollaboration_mode: collaboration_mode\n\t\t\t? normalizeCollaborationMode({\n\t\t\t\t\tcollaborationMode: collaboration_mode,\n\t\t\t\t\tmodel,\n\t\t\t\t\treasoningEffort: effort ?? null,\n\t\t\t })\n\t\t\t: undefined,\n\t\tpersonality: op.personality,\n\t\tenvironments: op.environments,\n\t\tpersist_environments: false,\n\t};\n}\n\nexport function sessionSettingsUpdateFromOverrideTurnContext(\n\top: OverrideTurnContextOp,\n\tcurrent: SessionConfiguration,\n): SessionSettingsUpdate {\n\tconst collaboration_mode =\n\t\top.collaboration_mode ??\n\t\t(op.model || \"effort\" in op\n\t\t\t? collaborationModeWithModelUpdates(\n\t\t\t\t\tcurrent.collaboration_mode,\n\t\t\t\t\top.model ?? current.model,\n\t\t\t\t\t\"effort\" in op ? op.effort : current.reasoning_effort,\n\t\t\t\t)\n\t\t\t: undefined);\n\tconst model = op.model ?? current.model;\n\tconst effort = \"effort\" in op ? op.effort : current.reasoning_effort;\n\n\treturn {\n\t\tcwd: op.cwd,\n\t\tapproval_policy: op.approval_policy,\n\t\tapprovals_reviewer: op.approvals_reviewer,\n\t\tsandbox_policy: op.sandbox_policy,\n\t\tpermission_profile: op.permission_profile,\n\t\tactive_permission_profile: op.active_permission_profile,\n\t\twindows_sandbox_level: op.windows_sandbox_level,\n\t\tmodel: op.model,\n\t\teffort: \"effort\" in op ? op.effort : undefined,\n\t\tsummary: op.summary,\n\t\tservice_tier: \"service_tier\" in op ? op.service_tier : undefined,\n\t\tcollaboration_mode: collaboration_mode\n\t\t\t? normalizeCollaborationMode({\n\t\t\t\t\tcollaborationMode: collaboration_mode,\n\t\t\t\t\tmodel,\n\t\t\t\t\treasoningEffort: effort ?? null,\n\t\t\t })\n\t\t\t: undefined,\n\t\tpersonality: op.personality,\n\t\tenvironments: op.environments,\n\t\tpersist_environments: op.environments !== undefined,\n\t};\n}\n\nexport function applySessionSettingsUpdate(\n\tconfiguration: SessionConfiguration,\n\tupdates: SessionSettingsUpdate,\n): SessionConfiguration {\n\tconst next: SessionConfiguration = { ...configuration };\n\n\tif (updates.cwd !== undefined) {\n\t\tif (updates.cwd.trim().length === 0) {\n\t\t\tthrow new SessionSettingsUpdateError(\"cwd cannot be empty.\");\n\t\t}\n\t\tnext.cwd = updates.cwd;\n\t}\n\tif (updates.model !== undefined) {\n\t\tif (updates.model.trim().length === 0) {\n\t\t\tthrow new SessionSettingsUpdateError(\"model cannot be empty.\");\n\t\t}\n\t\tnext.model = updates.model;\n\t\tnext.model_info = modelInfoFromSlug(updates.model);\n\t}\n\tif (updates.collaboration_mode !== undefined) {\n\t\tnext.collaboration_mode = normalizeCollaborationMode({\n\t\t\tcollaborationMode: updates.collaboration_mode,\n\t\t\tmodel: next.model,\n\t\t\treasoningEffort: updates.effort ?? next.reasoning_effort,\n\t\t});\n\t}\n\tif (updates.effort !== undefined) {\n\t\tnext.reasoning_effort = updates.effort;\n\t}\n\tif (updates.summary !== undefined) {\n\t\tnext.reasoning_summary = updates.summary;\n\t}\n\tif (updates.service_tier !== undefined) {\n\t\tnext.service_tier = updates.service_tier;\n\t}\n\tif (updates.personality !== undefined) {\n\t\tnext.personality = updates.personality;\n\t}\n\tif (updates.approval_policy !== undefined) {\n\t\tnext.approval_policy = updates.approval_policy;\n\t}\n\tif (updates.approvals_reviewer !== undefined) {\n\t\tnext.approvals_reviewer = updates.approvals_reviewer;\n\t}\n\tif (updates.permission_profile !== undefined) {\n\t\tnext.permission_profile = effectivePermissionProfile({\n\t\t\tpermission_profile: updates.permission_profile,\n\t\t\tsandbox_policy: updates.sandbox_policy ?? next.sandbox_policy,\n\t\t});\n\t\tnext.sandbox_policy = legacySandboxPolicyFromPermissionProfile(\n\t\t\tnext.permission_profile,\n\t\t\tnext.cwd,\n\t\t);\n\t\tnext.active_permission_profile = updates.active_permission_profile ?? null;\n\t} else if (updates.sandbox_policy !== undefined) {\n\t\tnext.permission_profile = effectivePermissionProfile({\n\t\t\tpermission_profile: null,\n\t\t\tsandbox_policy: updates.sandbox_policy,\n\t\t});\n\t\tnext.sandbox_policy = legacySandboxPolicyFromPermissionProfile(\n\t\t\tnext.permission_profile,\n\t\t\tnext.cwd,\n\t\t);\n\t\tnext.active_permission_profile = null;\n\t}\n\tif (updates.active_permission_profile !== undefined) {\n\t\tnext.active_permission_profile = updates.active_permission_profile;\n\t}\n\tif (updates.windows_sandbox_level !== undefined) {\n\t\tnext.windows_sandbox_level = updates.windows_sandbox_level;\n\t}\n\tif (updates.persist_environments && updates.environments !== undefined) {\n\t\tnext.environments = updates.environments;\n\t}\n\n\treturn next;\n}\n\nfunction collaborationModeWithModelUpdates(\n\tcollaborationMode: CollaborationMode | null | undefined,\n\tmodel: string,\n\teffort?: ReasoningEffortConfig | null,\n): CollaborationMode {\n\tconst current = collaborationMode ?? collaborationModeForModel(model, effort);\n\treturn collaborationModeWithUpdates(current, model, effort ?? null);\n}\n","import type {\n\tResponseItem,\n\tRolloutItem,\n\tTurnContextItem,\n} from \"../protocol\";\nimport { ContextManager } from \"../context_manager/history\";\n\nexport type PreviousTurnSettings = {\n\tmodel?: string | null;\n\trealtime_active?: boolean | null;\n};\n\nexport type RolloutReconstruction = {\n\thistory: ResponseItem[];\n\tprevious_turn_settings: PreviousTurnSettings | null;\n\treference_context_item: TurnContextItem | null;\n};\n\nexport function reconstructHistoryFromRollout(\n\trolloutItems: RolloutItem[],\n): RolloutReconstruction {\n\tconst history = new ContextManager();\n\tlet previous_turn_settings: PreviousTurnSettings | null = null;\n\tlet reference_context_item: TurnContextItem | null = null;\n\n\tfor (const item of rolloutItems) {\n\t\tswitch (item.type) {\n\t\t\tcase \"response_item\":\n\t\t\t\thistory.recordItems([item.payload]);\n\t\t\t\tbreak;\n\t\t\tcase \"compacted\":\n\t\t\t\tif (item.payload.replacement_history) {\n\t\t\t\t\thistory.replace(item.payload.replacement_history);\n\t\t\t\t} else {\n\t\t\t\t\thistory.replace(buildLegacyCompactedHistory(item.payload.message));\n\t\t\t\t}\n\t\t\t\treference_context_item = null;\n\t\t\t\tbreak;\n\t\t\tcase \"event_msg\":\n\t\t\t\tif (item.payload.type === \"thread_rolled_back\") {\n\t\t\t\t\thistory.dropLastNUserTurns(item.payload.num_turns);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"turn_context\":\n\t\t\t\tprevious_turn_settings = {\n\t\t\t\t\tmodel: item.payload.model,\n\t\t\t\t\trealtime_active: item.payload.realtime_active ?? null,\n\t\t\t\t};\n\t\t\t\treference_context_item = item.payload;\n\t\t\t\tbreak;\n\t\t\tcase \"session_meta\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\thistory: history.rawItems(),\n\t\tprevious_turn_settings,\n\t\treference_context_item,\n\t};\n}\n\nfunction buildLegacyCompactedHistory(message: string): ResponseItem[] {\n\treturn [\n\t\t{\n\t\t\ttype: \"message\",\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"input_text\", text: message }],\n\t\t},\n\t];\n}\n","import { ModeKind, type CollaborationMode } from \"../config-types\";\nimport {\n\tConfigLayerEntry_new,\n\tmerge_config_layers,\n\ttype ConfigOverrides,\n\ttype ResolvedConfig,\n} from \"../../../config/src\";\nimport type { ThreadId } from \"../ids\";\nimport type { LiveThread } from \"../thread-store/live-thread\";\nimport type { ThreadMemoryMode } from \"../memory\";\nimport type {\n\tActivePermissionProfile,\n\tApprovalsReviewer,\n\tAskForApproval,\n\tBaseInstructions,\n\tContentItem,\n\tDynamicToolResponse,\n\tDynamicToolSpec,\n\tEventMsg,\n\tOp,\n\tPermissionProfile,\n\tPersonality,\n\tRateLimitSnapshot,\n\tReasoningEffortConfig,\n\tReasoningSummaryConfig,\n\tResponseItem,\n\tRolloutItem,\n\tSandboxPolicy,\n\tServiceTier,\n\tSessionSource,\n\tSubmission,\n\tTextElement,\n\tTokenUsage,\n\tTokenUsageInfo,\n\tTurnContextItem,\n\tThreadGoal,\n\tTruncationPolicy,\n\tTurnEnvironmentSelection,\n\tUserInput,\n\tUserInputOp,\n\tUserInputWithTurnContextOp,\n\tUserTurnOp,\n\tWindowsSandboxLevel,\n\tCompactedItem,\n} from \"../protocol\";\nimport {\n\tGoalRuntimeState,\n\ttype CreateGoalRequest,\n\ttype ThreadGoalStore,\n} from \"../goals\";\nimport {\n\tHooks,\n\trequestPermissionsResponseFromDecision,\n\trun_permission_request_hooks,\n\trun_post_compact_hooks,\n\trun_pre_compact_hooks,\n\trun_session_start_hooks,\n\trun_stop_hooks,\n\trun_user_prompt_submit_hooks,\n} from \"../hooks\";\nimport { AgentControl } from \"../agent/mod\";\nimport {\n\tActiveTurn,\n\ttype PendingDynamicTool,\n\ttype PendingRequestPermissions,\n\ttype PendingUserInput,\n} from \"../state/turn\";\nimport { SessionState } from \"../state/session\";\nimport {\n\tSessionTaskContext,\n\tTaskKind,\n\ttype RunningTask,\n\ttype SessionTask,\n\ttype SessionTaskResult,\n} from \"../tasks/mod\";\nimport type {\n\tNormalizedRequestUserInputArgs,\n\tRequestUserInputResponse,\n} from \"../request_user_input\";\nimport {\n\tPermissionGrantScope,\n\temptyRequestPermissionsResponse,\n\ttype RequestPermissionProfile,\n\ttype RequestPermissionsArgs,\n\ttype RequestPermissionsResponse,\n} from \"../request_permissions\";\nimport { TurnContext } from \"./turn-context\";\nimport {\n\tbuildCompactedHistory,\n\tcompactedThreadWarning,\n\tSUMMARY_PREFIX,\n} from \"../compact\";\nimport {\n\tbuildInitialContextItems,\n\tbuildSettingsUpdateItems,\n} from \"../context/context-updates\";\nimport { turnAbortedResponseItem } from \"../context/turn-aborted\";\nimport {\n\teffectivePermissionProfile,\n\tlegacySandboxPolicyFromPermissionProfile,\n} from \"../config/permissions\";\nimport { resolve_web_search_mode_for_turn } from \"../config/mod\";\nimport {\n\tapplySessionSettingsUpdate,\n\tsessionSettingsUpdateFromUserInput,\n\tsessionSettingsUpdateFromUserInputWithTurnContext,\n\tsessionSettingsUpdateFromOverrideTurnContext,\n\tsessionSettingsUpdateFromUserTurn,\n\ttype SessionSettingsUpdate,\n\tSessionSettingsUpdateError,\n} from \"./session-settings\";\nimport {\n\treconstructHistoryFromRollout,\n\ttype PreviousTurnSettings,\n} from \"./rollout-reconstruction\";\nimport {\n\tPermissionGrantStore,\n\tnormalizeRequestPermissionsResponseForCwd,\n} from \"../tools/orchestrator\";\nimport type { ToolsConfig } from \"../tools/spec_plan_types\";\nimport {\n\tEmptyMcpConnectionManager,\n\ttype McpConnectionManager,\n\ttype McpResourceListParams,\n\ttype McpResourceListResponse,\n\ttype McpResourceReadParams,\n\ttype McpResourceReadResponse,\n\ttype McpResourceTemplateListResponse,\n\ttype McpRuntimeEnvironment,\n\ttype McpServerElicitationRequest,\n\ttype McpServerElicitationResponse,\n\ttype McpServerRefreshConfig,\n\ttype McpServerToolCallParams,\n\ttype McpServerToolCallResponse,\n\ttype McpServerStatus,\n\ttype McpToolInfo,\n\ttype McpRequestId,\n} from \"../mcp\";\nimport {\n\tget_model_instructions,\n\tmodelInfoFromSlug,\n\ttype ModelInfo,\n} from \"../model-provider\";\n\nexport type Event = {\n\tid: string;\n\tmsg: EventMsg;\n};\n\nexport type SessionConfiguration = {\n\tprovider: string;\n\tmodel: string;\n\tmodel_info?: ModelInfo | null;\n\tcollaboration_mode: CollaborationMode;\n\treasoning_effort?: ReasoningEffortConfig | null;\n\treasoning_summary: ReasoningSummaryConfig;\n\tservice_tier?: ServiceTier | null;\n\tbase_instructions: BaseInstructions;\n\tdeveloper_instructions?: string | null;\n\tuser_instructions?: string | null;\n\tpersonality?: Personality | null;\n\tcwd: string;\n\tapproval_policy: AskForApproval;\n\tapprovals_reviewer?: ApprovalsReviewer | null;\n\tsandbox_policy: SandboxPolicy;\n\tpermission_profile: PermissionProfile;\n\tactive_permission_profile?: ActivePermissionProfile | null;\n\twindows_sandbox_level?: WindowsSandboxLevel | null;\n\tenvironments: TurnEnvironmentSelection[];\n\tsession_source: SessionSource;\n\tdynamic_tools: DynamicToolSpec[];\n\ttools: ToolsConfig;\n\tfinal_output_json_schema?: unknown;\n\ttruncation_policy?: TruncationPolicy | null;\n};\n\nexport type SessionParams = {\n\tthreadId: ThreadId;\n\tconfiguration: SessionConfiguration;\n\tliveThread?: LiveThread | null;\n\tidGenerator?: () => string;\n\teventSink?: (event: Event) => void;\n\tnow?: () => number;\n\tinitialHistory?: RolloutItem[] | null;\n\trolloutPath?: string | null;\n\tforkedFromId?: ThreadId | null;\n\tthreadName?: string | null;\n\tthreadSource?: string | null;\n\thooks?: Hooks;\n\tthreadGoalStore?: ThreadGoalStore | null;\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tagentControl?: AgentControl | null;\n};\n\nexport type SessionConfigurationFromConfigOptions = {\n\tprevious_base_instructions?: BaseInstructions | null;\n\tmodel_info?: ModelInfo | null;\n};\n\nexport const SteerInputErrorKind = {\n\tEmptyInput: \"empty_input\",\n\tNoActiveTurn: \"no_active_turn\",\n\tExpectedTurnMismatch: \"expected_turn_mismatch\",\n\tActiveTurnNotSteerable: \"active_turn_not_steerable\",\n} as const;\n\nexport type SteerInputErrorKind =\n\t(typeof SteerInputErrorKind)[keyof typeof SteerInputErrorKind];\n\nexport class SteerInputError extends Error {\n\tprivate constructor(\n\t\treadonly kind: SteerInputErrorKind,\n\t\tmessage: string,\n\t\treadonly input: UserInput[] = [],\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SteerInputError\";\n\t}\n\n\tstatic emptyInput(): SteerInputError {\n\t\treturn new SteerInputError(\n\t\t\tSteerInputErrorKind.EmptyInput,\n\t\t\t\"Cannot steer empty input.\",\n\t\t);\n\t}\n\n\tstatic noActiveTurn(input: UserInput[]): SteerInputError {\n\t\treturn new SteerInputError(\n\t\t\tSteerInputErrorKind.NoActiveTurn,\n\t\t\t\"No active turn is available for steered input.\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\tstatic expectedTurnMismatch(input: {\n\t\texpected: string;\n\t\tactual: string;\n\t\titems: UserInput[];\n\t}): SteerInputError {\n\t\treturn new SteerInputError(\n\t\t\tSteerInputErrorKind.ExpectedTurnMismatch,\n\t\t\t`Expected active turn ${input.expected}, but current active turn is ${input.actual}.`,\n\t\t\tinput.items,\n\t\t);\n\t}\n\n\tstatic activeTurnNotSteerable(input: {\n\t\tkind: TaskKind;\n\t\titems: UserInput[];\n\t}): SteerInputError {\n\t\treturn new SteerInputError(\n\t\t\tSteerInputErrorKind.ActiveTurnNotSteerable,\n\t\t\t`Active ${input.kind} turn is not steerable.`,\n\t\t\tinput.items,\n\t\t);\n\t}\n}\n\nconst defaultCollaborationMode: CollaborationMode = {\n\tmode: ModeKind.Default,\n\tsettings: {\n\t\tmodel: \"gpt-5.5\",\n\t\treasoning_effort: null,\n\t\tdeveloper_instructions: null,\n\t},\n};\n\nconst DEFAULT_CONFIG_LAYER = ConfigLayerEntry_new({ type: \"System\", file: \"\" }, {\n\tmodel: \"gpt-5.5\",\n\tmodel_provider: \"openai\",\n\tcollaboration_mode: defaultCollaborationMode,\n\tmodel_reasoning_effort: null,\n\tmodel_reasoning_summary: \"auto\",\n\tservice_tier: null,\n\tdeveloper_instructions: null,\n\tuser_instructions: null,\n\tpersonality: null,\n\tcwd: \"\",\n\tapproval_policy: \"never\",\n\tapprovals_reviewer: null,\n\tsession_source: \"test\",\n\tenvironments: [],\n\tdynamic_tools: [],\n\ttools: {},\n\ttruncation_policy: null,\n});\n\nfunction defaultIdGenerator(): string {\n\treturn typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n\t\t? crypto.randomUUID()\n\t\t: fallbackRandomId();\n}\n\nfunction defaultNow(): number {\n\treturn Date.now();\n}\n\nfunction normalizeSessionConfiguration(\n\tconfiguration: SessionConfiguration,\n): SessionConfiguration {\n\tconst permissionProfile = sessionConfigurationPermissionProfile(configuration);\n\treturn {\n\t\t...configuration,\n\t\tpermission_profile: permissionProfile,\n\t\tsandbox_policy: legacySandboxPolicyFromPermissionProfile(\n\t\t\tpermissionProfile,\n\t\t\tconfiguration.cwd,\n\t\t),\n\t};\n}\n\nexport function defaultSessionConfiguration(\n\toverrides: Partial<SessionConfiguration> = {},\n): SessionConfiguration {\n\tconst configuration = session_configuration_from_config(\n\t\tmerge_config_layers(\n\t\t\t{ layers: [DEFAULT_CONFIG_LAYER], startup_warnings: [] },\n\t\t\tsessionConfigurationOverridesToConfig(overrides),\n\t\t),\n\t);\n\treturn {\n\t\t...configuration,\n\t\tmodel_info:\n\t\t\toverrides.model_info !== undefined\n\t\t\t\t? overrides.model_info\n\t\t\t\t: configuration.model_info,\n\t};\n}\n\nexport function session_configuration_from_config(\n\tconfig: ResolvedConfig,\n\toptions: SessionConfigurationFromConfigOptions = {},\n): SessionConfiguration {\n\treturn normalizeSessionConfiguration({\n\t\tprovider: config.model_provider,\n\t\tmodel: config.model,\n\t\tmodel_info: options.model_info ?? modelInfoFromSlug(config.model),\n\t\tcollaboration_mode: config.collaboration_mode,\n\t\treasoning_effort: config.reasoning_effort,\n\t\treasoning_summary: config.reasoning_summary,\n\t\tservice_tier: config.service_tier,\n\t\tbase_instructions: resolve_session_base_instructions(config, options),\n\t\tdeveloper_instructions: config.developer_instructions,\n\t\tuser_instructions: config.user_instructions,\n\t\tpersonality: config.personality,\n\t\tcwd: config.cwd,\n\t\tapproval_policy: config.approval_policy,\n\t\tapprovals_reviewer: config.approvals_reviewer,\n\t\tsandbox_policy: config.sandbox_policy,\n\t\tpermission_profile: config.permission_profile,\n\t\tactive_permission_profile: config.active_permission_profile,\n\t\twindows_sandbox_level: config.windows_sandbox_level,\n\t\tenvironments: config.environments,\n\t\tsession_source: config.session_source,\n\t\tdynamic_tools: config.dynamic_tools,\n\t\ttools: config.tools,\n\t\tfinal_output_json_schema: config.final_output_json_schema,\n\t\ttruncation_policy: config.truncation_policy,\n\t});\n}\n\nexport function resolve_session_base_instructions(\n\tconfig: ResolvedConfig,\n\toptions: SessionConfigurationFromConfigOptions = {},\n): BaseInstructions {\n\tif (config.base_instructions_source !== \"default\") {\n\t\treturn config.base_instructions;\n\t}\n\tif (options.previous_base_instructions?.text) {\n\t\treturn options.previous_base_instructions;\n\t}\n\tconst modelInfo = options.model_info ?? modelInfoFromSlug(config.model);\n\treturn {\n\t\ttext: get_model_instructions(modelInfo, config.personality),\n\t};\n}\n\nfunction sessionConfigurationOverridesToConfig(\n\toverrides: Partial<SessionConfiguration>,\n): ConfigOverrides {\n\treturn {\n\t\tmodel: overrides.model,\n\t\tmodel_provider: overrides.provider,\n\t\tcollaboration_mode: overrides.collaboration_mode,\n\t\tmodel_reasoning_effort: overrides.reasoning_effort,\n\t\tmodel_reasoning_summary: overrides.reasoning_summary,\n\t\tservice_tier: overrides.service_tier,\n\t\tinstructions: overrides.base_instructions?.text,\n\t\tdeveloper_instructions: overrides.developer_instructions,\n\t\tuser_instructions: overrides.user_instructions,\n\t\tpersonality: overrides.personality,\n\t\tcwd: overrides.cwd,\n\t\tapproval_policy: overrides.approval_policy,\n\t\tapprovals_reviewer: overrides.approvals_reviewer,\n\t\tsandbox_policy: overrides.sandbox_policy,\n\t\tpermission_profile: overrides.permission_profile,\n\t\tactive_permission_profile: overrides.active_permission_profile,\n\t\twindows_sandbox_level: overrides.windows_sandbox_level,\n\t\tenvironments: overrides.environments,\n\t\tsession_source: overrides.session_source,\n\t\tdynamic_tools: overrides.dynamic_tools,\n\t\ttools: overrides.tools,\n\t\tfinal_output_json_schema: overrides.final_output_json_schema,\n\t\ttruncation_policy: overrides.truncation_policy,\n\t};\n}\n\nexport function sessionConfigurationPermissionProfile(\n\tconfiguration: SessionConfiguration,\n): PermissionProfile {\n\treturn effectivePermissionProfile({\n\t\tpermission_profile: configuration.permission_profile,\n\t\tsandbox_policy: configuration.sandbox_policy,\n\t});\n}\n\nexport function sessionConfigurationActivePermissionProfile(\n\tconfiguration: SessionConfiguration,\n): ActivePermissionProfile | null {\n\treturn configuration.active_permission_profile ?? null;\n}\n\nexport function sessionConfigurationSandboxPolicy(\n\tconfiguration: SessionConfiguration,\n): SandboxPolicy {\n\treturn legacySandboxPolicyFromPermissionProfile(\n\t\tsessionConfigurationPermissionProfile(configuration),\n\t\tconfiguration.cwd,\n\t);\n}\n\nexport function turn_context_from_config(\n\tconfig: ResolvedConfig,\n\tsubmissionId: string,\n\ttrace?: Submission[\"trace\"],\n): TurnContext {\n\treturn new TurnContext({\n\t\tsub_id: submissionId,\n\t\ttrace,\n\t\tcwd: config.cwd,\n\t\tapproval_policy: config.approval_policy,\n\t\tapprovals_reviewer: config.approvals_reviewer,\n\t\tsandbox_policy: config.sandbox_policy,\n\t\tpermission_profile: config.permission_profile,\n\t\tactive_permission_profile: config.active_permission_profile,\n\t\twindows_sandbox_level: config.windows_sandbox_level,\n\t\tmodel: config.model,\n\t\tmodel_info: modelInfoFromSlug(config.model),\n\t\tpersonality: config.personality,\n\t\tcollaboration_mode: config.collaboration_mode,\n\t\teffort: config.reasoning_effort,\n\t\tsummary: config.reasoning_summary,\n\t\tservice_tier: config.service_tier,\n\t\tsession_source: config.session_source,\n\t\tenvironments: config.environments,\n\t\tbase_instructions: resolve_session_base_instructions(config).text,\n\t\tuser_instructions: config.user_instructions,\n\t\tdeveloper_instructions: config.developer_instructions,\n\t\tfinal_output_json_schema: config.final_output_json_schema,\n\t\ttruncation_policy: config.truncation_policy,\n\t\tdynamic_tools: config.dynamic_tools,\n\t\ttools: toolsConfigForTurn(config.tools, config.permission_profile),\n\t});\n}\n\nexport class Session {\n\treadonly threadId: ThreadId;\n\treadonly emittedEvents: Event[] = [];\n\tprivate readonly liveThread: LiveThread | null;\n\tprivate readonly idGenerator: () => string;\n\tprivate readonly eventSink?: (event: Event) => void;\n\tprivate readonly now: () => number;\n\tprivate configuration: SessionConfiguration;\n\tprivate readonly rolloutPath: string | null;\n\tprivate readonly forkedFromId: ThreadId | null;\n\tprivate readonly threadName: string | null;\n\tprivate readonly threadSource: string | null;\n\tprivate readonly initialMessages: EventMsg[] | null;\n\tprivate readonly hook_runtime: Hooks;\n\tprivate readonly agent_control: AgentControl;\n\tprivate readonly goal_runtime: GoalRuntimeState;\n\tprivate readonly mcp_connection_manager: McpConnectionManager;\n\tprivate readonly state: SessionState;\n\tprivate sessionConfiguredSent = false;\n\tprivate sessionStartHooksRan = false;\n\tprivate readonly idle_pending_input: UserInput[] = [];\n\tprivate readonly session_permission_grants = new PermissionGrantStore();\n\tactiveTurn: ActiveTurn | null = null;\n\n\tconstructor(params: SessionParams) {\n\t\tthis.threadId = params.threadId;\n\t\tthis.configuration = normalizeSessionConfiguration(params.configuration);\n\t\tthis.liveThread = params.liveThread ?? null;\n\t\tthis.idGenerator = params.idGenerator ?? defaultIdGenerator;\n\t\tthis.eventSink = params.eventSink;\n\t\tthis.now = params.now ?? defaultNow;\n\t\tconst initialHistory = params.initialHistory ?? [];\n\t\tconst reconstructed = reconstructHistoryFromRollout(initialHistory);\n\t\tthis.state = new SessionState({\n\t\t\tsession_configuration: this.configuration,\n\t\t\tprevious_turn_settings: reconstructed.previous_turn_settings,\n\t\t\treference_context_item: reconstructed.reference_context_item,\n\t\t\ttoken_info: last_token_info_from_rollout(initialHistory),\n\t\t});\n\t\tthis.state.replace_history(\n\t\t\treconstructed.history,\n\t\t\treconstructed.reference_context_item,\n\t\t);\n\t\tthis.rolloutPath = params.rolloutPath ?? null;\n\t\tthis.forkedFromId = params.forkedFromId ?? null;\n\t\tthis.threadName = params.threadName ?? null;\n\t\tthis.threadSource = params.threadSource ?? null;\n\t\tthis.initialMessages = initialMessagesFromRollout(initialHistory);\n\t\tthis.hook_runtime = params.hooks ?? Hooks.empty();\n\t\tthis.agent_control = params.agentControl ?? AgentControl.empty();\n\t\tthis.mcp_connection_manager =\n\t\t\tparams.mcpConnectionManager ?? EmptyMcpConnectionManager.instance;\n\t\tthis.goal_runtime = new GoalRuntimeState({\n\t\t\tthread_id: this.threadId,\n\t\t\tstore: params.threadGoalStore ?? null,\n\t\t\tnow: this.now,\n\t\t});\n\t}\n\n\tprivate get token_info(): TokenUsageInfo | null {\n\t\treturn this.state.token_info();\n\t}\n\n\tprivate set token_info(info: TokenUsageInfo | null) {\n\t\tthis.state.set_token_info(info);\n\t}\n\n\tprivate get latest_rate_limits(): RateLimitSnapshot | null {\n\t\treturn this.state.latest_rate_limits();\n\t}\n\n\tprivate set latest_rate_limits(snapshot: RateLimitSnapshot | null) {\n\t\tthis.state.set_latest_rate_limits(snapshot);\n\t}\n\n\tprivate get reference_context_item(): TurnContextItem | null {\n\t\treturn this.state.reference_context_item();\n\t}\n\n\tprivate set reference_context_item(item: TurnContextItem | null) {\n\t\tthis.state.set_reference_context_item(item);\n\t}\n\n\tprivate get previous_turn_settings(): PreviousTurnSettings | null {\n\t\treturn this.state.previous_turn_settings();\n\t}\n\n\tprivate set previous_turn_settings(settings: PreviousTurnSettings | null) {\n\t\tthis.state.set_previous_turn_settings(settings);\n\t}\n\n\tasync submit(op: Op): Promise<string> {\n\t\tconst id = this.idGenerator();\n\t\tawait this.submit_with_id({ id, op });\n\t\treturn id;\n\t}\n\n\tasync submit_with_id(submission: Submission): Promise<void> {\n\t\tswitch (submission.op.type) {\n\t\t\tcase \"user_turn\":\n\t\t\tcase \"user_input\":\n\t\t\tcase \"user_input_with_turn_context\":\n\t\t\t\tawait this.userInputOrTurn(submission);\n\t\t\t\treturn;\n\t\t\tcase \"override_turn_context\":\n\t\t\t\tawait this.overrideTurnContext(submission);\n\t\t\t\treturn;\n\t\t\tcase \"user_input_answer\":\n\t\t\t\tthis.notifyUserInputResponse(\n\t\t\t\t\tsubmission.op.id,\n\t\t\t\t\tsubmission.op.response,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"request_permissions_response\":\n\t\t\t\tthis.notify_request_permissions_response(\n\t\t\t\t\tsubmission.op.id,\n\t\t\t\t\tsubmission.op.response,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"mcp_server_elicitation_response\":\n\t\t\t\tawait this.resolve_elicitation(\n\t\t\t\t\tsubmission.op.server_name,\n\t\t\t\t\tsubmission.op.id,\n\t\t\t\t\tsubmission.op.response,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"dynamic_tool_response\":\n\t\t\t\tthis.notify_dynamic_tool_response(\n\t\t\t\t\tsubmission.op.id,\n\t\t\t\t\tsubmission.op.response,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t\tcase \"realtime_conversation_start\":\n\t\t\tcase \"realtime_conversation_audio\":\n\t\t\tcase \"realtime_conversation_text\":\n\t\t\tcase \"realtime_conversation_close\":\n\t\t\tcase \"realtime_conversation_list_voices\":\n\t\t\t\treturn;\n\t\t\tcase \"set_thread_name\":\n\t\t\t\tawait this.liveThread?.updateMetadata(\n\t\t\t\t\t{ name: submission.op.name },\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"set_thread_memory_mode\":\n\t\t\t\tawait this.setThreadMemoryMode(submission.op.mode);\n\t\t\t\treturn;\n\t\t\tcase \"compact\":\n\t\t\t\tawait this.compactWithoutModel(submission);\n\t\t\t\treturn;\n\t\t\tcase \"thread_rollback\":\n\t\t\t\tawait this.threadRollback(submission);\n\t\t\t\treturn;\n\t\t\tcase \"interrupt\":\n\t\t\t\tawait this.interrupt();\n\t\t\t\treturn;\n\t\t\tcase \"shutdown\":\n\t\t\t\tawait this.shutdown();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tsubmission.op satisfies never;\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tinsertPendingUserInput(key: string, pending: PendingUserInput): void {\n\t\tif (!this.activeTurn) {\n\t\t\tthis.activeTurn = new ActiveTurn();\n\t\t}\n\n\t\tthis.activeTurn.turn_state.insertPendingUserInput(key, pending);\n\t}\n\n\tinsertPendingDynamicTool(key: string, pending: PendingDynamicTool): void {\n\t\tif (!this.activeTurn) {\n\t\t\tthis.activeTurn = new ActiveTurn();\n\t\t}\n\n\t\tthis.activeTurn.turn_state.insertPendingDynamicTool(key, pending);\n\t}\n\n\tinsertPendingRequestPermissions(\n\t\tkey: string,\n\t\tpending: PendingRequestPermissions,\n\t): void {\n\t\tif (!this.activeTurn) {\n\t\t\tthis.activeTurn = new ActiveTurn();\n\t\t}\n\n\t\tthis.activeTurn.turn_state.insertPendingRequestPermissions(key, pending);\n\t}\n\n\tasync steer_input(\n\t\tinput: UserInput[],\n\t\texpected_turn_id?: string | null,\n\t): Promise<string> {\n\t\tif (input.length === 0) {\n\t\t\tthrow SteerInputError.emptyInput();\n\t\t}\n\n\t\tconst activeTask = this.activeTurn?.firstTask();\n\t\tif (!activeTask) {\n\t\t\tthrow SteerInputError.noActiveTurn(input);\n\t\t}\n\n\t\tif (expected_turn_id && expected_turn_id !== activeTask.sub_id) {\n\t\t\tthrow SteerInputError.expectedTurnMismatch({\n\t\t\t\texpected: expected_turn_id,\n\t\t\t\tactual: activeTask.sub_id,\n\t\t\t\titems: input,\n\t\t\t});\n\t\t}\n\n\t\tif (activeTask.kind !== \"Regular\") {\n\t\t\tthrow SteerInputError.activeTurnNotSteerable({\n\t\t\t\tkind: activeTask.kind,\n\t\t\t\titems: input,\n\t\t\t});\n\t\t}\n\n\t\tfor (const item of input) {\n\t\t\tthis.activeTurn?.turn_state.pushPendingInput(item);\n\t\t}\n\t\tthis.activeTurn?.turn_state.acceptMailboxDeliveryForCurrentTurn();\n\t\treturn activeTask.sub_id;\n\t}\n\n\tasync inject_response_items(input: UserInput[]): Promise<boolean> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const item of input) {\n\t\t\tthis.activeTurn.turn_state.pushPendingInput(item);\n\t\t}\n\t\treturn true;\n\t}\n\n\tasync prepend_pending_input(input: UserInput[]): Promise<boolean> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.activeTurn.turn_state.prependPendingInput(input);\n\t\treturn true;\n\t}\n\n\tasync get_pending_input(): Promise<UserInput[]> {\n\t\treturn this.activeTurn?.turn_state.takePendingInput() ?? [];\n\t}\n\n\tasync has_pending_input(): Promise<boolean> {\n\t\treturn (\n\t\t\tthis.activeTurn?.turn_state.hasPendingInput() ??\n\t\t\tthis.idle_pending_input.length > 0\n\t\t);\n\t}\n\n\tasync queue_response_items_for_next_turn(items: UserInput[]): Promise<void> {\n\t\tthis.idle_pending_input.push(...items);\n\t}\n\n\tasync take_queued_response_items_for_next_turn(): Promise<UserInput[]> {\n\t\treturn this.idle_pending_input.splice(0);\n\t}\n\n\tcollaboration_mode(): CollaborationMode {\n\t\treturn this.configuration.collaboration_mode;\n\t}\n\n\tgranted_session_permissions(): RequestPermissionProfile[] {\n\t\treturn this.session_permission_grants.all();\n\t}\n\n\thooks(): Hooks {\n\t\treturn this.hook_runtime;\n\t}\n\n\tagentControl(): AgentControl {\n\t\treturn this.agent_control;\n\t}\n\n\tasync configure_session(\n\t\tinitialMessages: EventMsg[] | null = this.initialMessages,\n\t): Promise<void> {\n\t\tif (this.sessionConfiguredSent) {\n\t\t\treturn;\n\t\t}\n\t\tthis.sessionConfiguredSent = true;\n\t\tawait this.send_event_raw({\n\t\t\tid: \"0\",\n\t\t\tmsg: {\n\t\t\t\ttype: \"session_configured\",\n\t\t\t\tsession_id: this.threadId,\n\t\t\t\tthread_id: this.threadId,\n\t\t\t\tforked_from_id: this.forkedFromId,\n\t\t\t\tthread_source: this.threadSource,\n\t\t\t\tthread_name: this.threadName,\n\t\t\t\tmodel: this.configuration.model,\n\t\t\t\tmodel_provider_id: this.configuration.provider,\n\t\t\t\tservice_tier: this.configuration.service_tier,\n\t\t\t\tapproval_policy: this.configuration.approval_policy,\n\t\t\t\tapprovals_reviewer: this.configuration.approvals_reviewer,\n\t\t\t\tpermission_profile: sessionConfigurationPermissionProfile(\n\t\t\t\t\tthis.configuration,\n\t\t\t\t),\n\t\t\t\tactive_permission_profile:\n\t\t\t\t\tsessionConfigurationActivePermissionProfile(this.configuration),\n\t\t\t\tcwd: this.configuration.cwd,\n\t\t\t\treasoning_effort: this.configuration.reasoning_effort,\n\t\t\t\tinitial_messages: initialMessages,\n\t\t\t\tnetwork_proxy: null,\n\t\t\t\trollout_path: this.rolloutPath,\n\t\t\t},\n\t\t});\n\t}\n\n\tstrict_auto_review_enabled_for_turn(): boolean {\n\t\treturn this.activeTurn?.turn_state.strictAutoReviewEnabled() ?? false;\n\t}\n\n\tasync request_user_input(\n\t\tturnContext: TurnContext,\n\t\tcallId: string,\n\t\targs: NormalizedRequestUserInputArgs,\n\t): Promise<RequestUserInputResponse | null> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst response = new Promise<RequestUserInputResponse | null>((resolve) => {\n\t\t\tthis.activeTurn?.turn_state.insertPendingUserInput(turnContext.sub_id, {\n\t\t\t\tresolve,\n\t\t\t});\n\t\t});\n\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"request_user_input\",\n\t\t\tcall_id: callId,\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tquestions: args.questions,\n\t\t});\n\n\t\treturn response;\n\t}\n\n\tasync request_permissions(\n\t\tturnContext: TurnContext,\n\t\tcallId: string,\n\t\targs: RequestPermissionsArgs,\n\t): Promise<RequestPermissionsResponse | null> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (turnContext.approval_policy === \"never\") {\n\t\t\treturn emptyRequestPermissionsResponse();\n\t\t}\n\n\t\tconst hookDecision = await run_permission_request_hooks(\n\t\t\tthis,\n\t\t\tturnContext,\n\t\t\t{\n\t\t\t\trun_id_suffix: callId,\n\t\t\t\ttool_name: \"request_permissions\",\n\t\t\t\ttool_input: args,\n\t\t\t},\n\t\t);\n\t\tconst hookResponse = requestPermissionsResponseFromDecision(hookDecision);\n\t\tif (hookResponse) {\n\t\t\treturn hookResponse;\n\t\t}\n\n\t\tconst response = new Promise<RequestPermissionsResponse | null>((resolve) => {\n\t\t\tthis.activeTurn?.turn_state.insertPendingRequestPermissions(callId, {\n\t\t\t\tresolve,\n\t\t\t});\n\t\t});\n\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"request_permissions\",\n\t\t\tcall_id: callId,\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\treason: args.reason ?? null,\n\t\t\tpermissions: args.permissions,\n\t\t\tcwd: turnContext.cwd,\n\t\t});\n\n\t\tconst resolved = await response;\n\t\tif (!resolved) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.record_granted_request_permissions(turnContext, resolved);\n\t}\n\n\tasync refresh_mcp_servers_now(\n\t\tturnContext: TurnContext,\n\t\tconfig: McpServerRefreshConfig,\n\t\tenvironment: McpRuntimeEnvironment = { cwd: turnContext.cwd },\n\t): Promise<void> {\n\t\tawait this.mcp_connection_manager.refresh_mcp_servers_now(\n\t\t\tconfig,\n\t\t\tenvironment,\n\t\t);\n\t\tfor (const status of await this.mcp_connection_manager.list_server_statuses()) {\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"mcp_server_status_updated\",\n\t\t\t\tstatus,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync refresh_mcp_servers_if_requested(\n\t\tturnContext: TurnContext,\n\t\tconfig?: McpServerRefreshConfig | null,\n\t): Promise<void> {\n\t\tif (!config) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.refresh_mcp_servers_now(turnContext, config);\n\t}\n\n\tasync list_mcp_server_statuses(): Promise<McpServerStatus[]> {\n\t\treturn this.mcp_connection_manager.list_server_statuses();\n\t}\n\n\tasync list_mcp_tools(): Promise<McpToolInfo[]> {\n\t\treturn this.mcp_connection_manager.list_tools();\n\t}\n\n\tasync list_resources(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceListResponse> {\n\t\treturn this.mcp_connection_manager.list_resources(params);\n\t}\n\n\tasync list_resource_templates(\n\t\tparams: McpResourceListParams,\n\t): Promise<McpResourceTemplateListResponse> {\n\t\treturn this.mcp_connection_manager.list_resource_templates(params);\n\t}\n\n\tasync read_resource(\n\t\t_paramsTurnContext: TurnContext | null,\n\t\tparams: McpResourceReadParams,\n\t): Promise<McpResourceReadResponse> {\n\t\treturn this.mcp_connection_manager.read_resource(params);\n\t}\n\n\tasync call_tool(\n\t\tturnContext: TurnContext,\n\t\tparams: McpServerToolCallParams,\n\t): Promise<McpServerToolCallResponse> {\n\t\tconst startedAt = this.now();\n\t\tconst callId = params.call_id ?? `${params.server_name}.${params.tool_name}`;\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"item_started\",\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\titem: {\n\t\t\t\ttype: \"McpToolCall\",\n\t\t\t\tid: callId,\n\t\t\t\tserver: params.server_name,\n\t\t\t\ttool: params.tool_name,\n\t\t\t\targuments: params.arguments ?? {},\n\t\t\t\tstatus: \"inProgress\",\n\t\t\t},\n\t\t});\n\t\ttry {\n\t\t\tconst response = await this.mcp_connection_manager.call_tool(params);\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"item_completed\",\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\titem: {\n\t\t\t\t\ttype: \"McpToolCall\",\n\t\t\t\t\tid: callId,\n\t\t\t\t\tserver: params.server_name,\n\t\t\t\t\ttool: params.tool_name,\n\t\t\t\t\targuments: params.arguments ?? {},\n\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\tresult: response.output,\n\t\t\t\t\tduration: `${this.now() - startedAt}ms`,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\tconst message = errorMessage(error);\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"item_completed\",\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\titem: {\n\t\t\t\t\ttype: \"McpToolCall\",\n\t\t\t\t\tid: callId,\n\t\t\t\t\tserver: params.server_name,\n\t\t\t\t\ttool: params.tool_name,\n\t\t\t\t\targuments: params.arguments ?? {},\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: { message },\n\t\t\t\t\tduration: `${this.now() - startedAt}ms`,\n\t\t\t\t},\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync resolve_mcp_tool_info(toolName: string): Promise<McpToolInfo | null> {\n\t\tconst separator = toolName.indexOf(\".\");\n\t\tif (separator <= 0 || separator >= toolName.length - 1) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.mcp_connection_manager.resolve_tool_info(\n\t\t\ttoolName.slice(0, separator),\n\t\t\ttoolName.slice(separator + 1),\n\t\t);\n\t}\n\n\tasync request_mcp_server_elicitation(\n\t\tturnContext: TurnContext,\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t\trequest: McpServerElicitationRequest,\n\t): Promise<McpServerElicitationResponse | null> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst response = new Promise<McpServerElicitationResponse | null>(\n\t\t\t(resolve) => {\n\t\t\t\tthis.activeTurn?.turn_state.insertPendingMcpElicitation(\n\t\t\t\t\tserverName,\n\t\t\t\t\tid,\n\t\t\t\t\t{ resolve },\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"mcp_server_elicitation_request\",\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tserver_name: serverName,\n\t\t\tid,\n\t\t\trequest,\n\t\t});\n\n\t\treturn response;\n\t}\n\n\tasync request_dynamic_tool(\n\t\tturnContext: TurnContext,\n\t\tcallId: string,\n\t\ttoolName: string,\n\t\targumentsValue: unknown,\n\t): Promise<DynamicToolResponse | null> {\n\t\tif (!this.activeTurn) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst startedAt = this.now();\n\t\tconst { namespace, tool } = parseDynamicToolName(toolName);\n\t\tconst response = new Promise<DynamicToolResponse | null>((resolve) => {\n\t\t\tthis.activeTurn?.turn_state.insertPendingDynamicTool(callId, {\n\t\t\t\tresolve,\n\t\t\t});\n\t\t});\n\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"dynamic_tool_call_request\",\n\t\t\tcall_id: callId,\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tstarted_at_ms: startedAt,\n\t\t\tnamespace,\n\t\t\ttool,\n\t\t\targuments: argumentsValue,\n\t\t});\n\n\t\tconst resolved = await response;\n\t\tif (!resolved) {\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"dynamic_tool_call_response\",\n\t\t\t\tcall_id: callId,\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\tcompleted_at_ms: this.now(),\n\t\t\t\tnamespace,\n\t\t\t\ttool,\n\t\t\t\targuments: argumentsValue,\n\t\t\t\tcontent_items: [],\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"dynamic tool call was cancelled\",\n\t\t\t\tduration: `${Math.max(0, this.now() - startedAt)}ms`,\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"dynamic_tool_call_response\",\n\t\t\tcall_id: callId,\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tcompleted_at_ms: this.now(),\n\t\t\tnamespace,\n\t\t\ttool,\n\t\t\targuments: argumentsValue,\n\t\t\tcontent_items: resolved.content_items,\n\t\t\tsuccess: resolved.success,\n\t\t\terror: null,\n\t\t\tduration: `${Math.max(0, this.now() - startedAt)}ms`,\n\t\t});\n\n\t\treturn resolved;\n\t}\n\n\tasync startTurn(submission: Submission): Promise<TurnContext> {\n\t\tawait this.configure_session();\n\t\tconst { items, turnContext } = await this.createTurnContext(submission);\n\t\tawait this.start_task({\n\t\t\tturnContext,\n\t\t\tkind: TaskKind.Regular,\n\t\t});\n\t\tif (!this.sessionStartHooksRan) {\n\t\t\tthis.sessionStartHooksRan = true;\n\t\t\tawait run_session_start_hooks(this, turnContext);\n\t\t}\n\n\t\tconst promptHookOutcome = await run_user_prompt_submit_hooks(\n\t\t\tthis,\n\t\t\tturnContext,\n\t\t\tuserInputPromptText(items),\n\t\t);\n\t\tif (promptHookOutcome.should_stop) {\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage:\n\t\t\t\t\tpromptHookOutcome.stop_reason ??\n\t\t\t\t\t\"User prompt stopped by UserPromptSubmit hook.\",\n\t\t\t});\n\t\t\tawait this.completeTurn(turnContext, null);\n\t\t\tthrow new Error(\n\t\t\t\tpromptHookOutcome.stop_reason ??\n\t\t\t\t\t\"User prompt stopped by UserPromptSubmit hook.\",\n\t\t\t);\n\t\t}\n\n\t\tawait this.record_context_updates_and_set_reference_context_item(turnContext);\n\t\tawait this.send_event(turnContext, userMessageEventFromInput(items));\n\t\tawait this.recordResponseItem(turnContext, userInputAsResponseItem(items));\n\t\tthis.previous_turn_settings = {\n\t\t\tmodel: turnContext.model,\n\t\t\trealtime_active: false,\n\t\t};\n\n\t\treturn turnContext;\n\t}\n\n\tasync startCompactTurn(submission: Submission): Promise<TurnContext> {\n\t\tif (submission.op.type !== \"compact\") {\n\t\t\tthrow new Error(`Cannot start compact turn for Op: ${submission.op.type}`);\n\t\t}\n\t\tif (this.activeTurn) {\n\t\t\tthrow new Error(\"Cannot compact thread while a turn is active.\");\n\t\t}\n\t\tawait this.configure_session();\n\n\t\tconst turnContext = await this.new_default_turn_with_sub_id(\n\t\t\tsubmission.id,\n\t\t\tsubmission.trace,\n\t\t);\n\t\tawait this.start_task({\n\t\t\tturnContext,\n\t\t\tkind: TaskKind.Compact,\n\t\t});\n\t\tconst preCompact = await run_pre_compact_hooks(this, turnContext, \"manual\");\n\t\tif (preCompact.should_stop) {\n\t\t\tawait this.send_event(turnContext, {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage:\n\t\t\t\t\tpreCompact.stop_reason ?? \"Compaction stopped by PreCompact hook.\",\n\t\t\t});\n\t\t\tawait this.completeTurn(turnContext, null);\n\t\t\tthrow new Error(\n\t\t\t\tpreCompact.stop_reason ?? \"Compaction stopped by PreCompact hook.\",\n\t\t\t);\n\t\t}\n\n\t\treturn turnContext;\n\t}\n\n\tasync start_task(input: {\n\t\tturnContext: TurnContext;\n\t\ttask?: SessionTask;\n\t\tkind?: TaskKind;\n\t\tabortController?: AbortController;\n\t}): Promise<RunningTask> {\n\t\tconst activeTurn = this.activeTurn ?? new ActiveTurn();\n\t\tthis.activeTurn = activeTurn;\n\t\tconst kind = input.task?.kind() ?? input.kind ?? TaskKind.Regular;\n\t\tconst task: RunningTask = {\n\t\t\tsub_id: input.turnContext.sub_id,\n\t\t\tkind,\n\t\t\tturn_context: input.turnContext,\n\t\t\ttask: input.task,\n\t\t\tabort_controller: input.abortController,\n\t\t\trecords_turn_token_usage_on_span:\n\t\t\t\tinput.task?.records_turn_token_usage_on_span() ?? false,\n\t\t};\n\t\tactiveTurn.addTask(task);\n\t\tconst startedAt = input.turnContext.turn_timing_state.markTurnStarted(\n\t\t\tthis.now(),\n\t\t);\n\n\t\tawait this.send_event(input.turnContext, {\n\t\t\ttype: \"turn_started\",\n\t\t\tturn_id: input.turnContext.sub_id,\n\t\t\tstarted_at: startedAt,\n\t\t\tmodel_context_window: input.turnContext.model_context_window(),\n\t\t\tcollaboration_mode_kind: input.turnContext.collaboration_mode?.mode,\n\t\t});\n\t\tawait this.goal_runtime.apply({\n\t\t\ttype: \"turn_started\",\n\t\t\tturn_id: input.turnContext.sub_id,\n\t\t\ttotal_tokens: this.get_total_token_usage(),\n\t\t});\n\n\t\treturn task;\n\t}\n\n\tasync spawn_task(input: {\n\t\tturnContext: TurnContext;\n\t\ttask: SessionTask;\n\t\tinput: UserInput[];\n\t\tabortController?: AbortController;\n\t}): Promise<SessionTaskResult> {\n\t\tconst abortController = input.abortController ?? new AbortController();\n\t\tif (this.activeTurn?.hasTask(input.turnContext.sub_id)) {\n\t\t\tthis.activeTurn.addTask({\n\t\t\t\tsub_id: input.turnContext.sub_id,\n\t\t\t\tkind: input.task.kind(),\n\t\t\t\tturn_context: input.turnContext,\n\t\t\t\ttask: input.task,\n\t\t\t\tabort_controller: abortController,\n\t\t\t\trecords_turn_token_usage_on_span:\n\t\t\t\t\tinput.task.records_turn_token_usage_on_span(),\n\t\t\t});\n\t\t} else {\n\t\t\tawait this.start_task({\n\t\t\t\tturnContext: input.turnContext,\n\t\t\t\ttask: input.task,\n\t\t\t\tabortController,\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\tconst result = await input.task.run({\n\t\t\t\tsession: new SessionTaskContext(this),\n\t\t\t\tctx: input.turnContext,\n\t\t\t\tinput: input.input,\n\t\t\t\tsignal: abortController.signal,\n\t\t\t});\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tawait this.on_task_finished(input.turnContext, result);\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tawait this.failTurn(input.turnContext, error);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync recordCompactedItem(item: CompactedItem): Promise<void> {\n\t\tawait this.persist_rollout_items([\n\t\t\t{\n\t\t\t\ttype: \"compacted\",\n\t\t\t\tpayload: item,\n\t\t\t},\n\t\t]);\n\t}\n\n\trecord_into_history(\n\t\tturnContext: TurnContext,\n\t\titems: readonly ResponseItem[],\n\t): void {\n\t\tthis.state.record_items(items, turnContext.truncation_policy);\n\t}\n\n\tasync record_conversation_items(\n\t\tturnContext: TurnContext,\n\t\titems: readonly ResponseItem[],\n\t): Promise<void> {\n\t\tthis.record_into_history(turnContext, items);\n\t\tawait this.persist_rollout_items(\n\t\t\titems.map((item) => ({\n\t\t\t\ttype: \"response_item\",\n\t\t\t\tpayload: item,\n\t\t\t})),\n\t\t);\n\t\tfor (const item of items) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: turnContext.sub_id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"raw_response_item\",\n\t\t\t\t\titem,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tasync completeTurn(\n\t\tturnContext: TurnContext,\n\t\tlastAgentMessage?: string | null,\n\t): Promise<void> {\n\t\tawait this.on_task_finished(turnContext, {\n\t\t\tlast_agent_message: lastAgentMessage ?? null,\n\t\t});\n\t}\n\n\tasync on_task_finished(\n\t\tturnContext: TurnContext,\n\t\tresult: SessionTaskResult,\n\t): Promise<void> {\n\t\tconst removed = this.activeTurn?.removeTask(turnContext.sub_id);\n\t\tif (removed?.active_turn_is_empty) {\n\t\t\tthis.activeTurn?.cancelPending();\n\t\t}\n\t\tconst timing = turnContext.turn_timing_state.completedAtAndDuration(\n\t\t\tthis.now(),\n\t\t);\n\t\tawait this.send_thread_goal_update_if_needed(\n\t\t\tturnContext,\n\t\t\tawait this.goal_runtime.apply({\n\t\t\t\ttype: \"turn_finished\",\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\ttotal_tokens: this.get_total_token_usage(),\n\t\t\t}),\n\t\t);\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"turn_complete\",\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tlast_agent_message: result.last_agent_message,\n\t\t\tcompleted_at: timing.completed_at,\n\t\t\tduration_ms: timing.duration_ms,\n\t\t\ttime_to_first_token_ms: timing.time_to_first_token_ms,\n\t\t});\n\t\tthis.activeTurn =\n\t\t\tthis.activeTurn && this.activeTurn.size > 0 ? this.activeTurn : null;\n\t}\n\n\tasync failTurn(turnContext: TurnContext, error: unknown): Promise<void> {\n\t\tconst message = errorMessage(error);\n\t\tthis.activeTurn?.removeTask(turnContext.sub_id);\n\t\tthis.activeTurn?.cancelPending();\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"error\",\n\t\t\tmessage,\n\t\t});\n\t\tconst timing = turnContext.turn_timing_state.completedAtAndDuration(\n\t\t\tthis.now(),\n\t\t);\n\t\tawait this.send_thread_goal_update_if_needed(\n\t\t\tturnContext,\n\t\t\tawait this.goal_runtime.apply({\n\t\t\t\ttype: \"turn_finished\",\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\ttotal_tokens: this.get_total_token_usage(),\n\t\t\t}),\n\t\t);\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"turn_complete\",\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tlast_agent_message: null,\n\t\t\tcompleted_at: timing.completed_at,\n\t\t\tduration_ms: timing.duration_ms,\n\t\t\ttime_to_first_token_ms: timing.time_to_first_token_ms,\n\t\t});\n\t\tthis.activeTurn =\n\t\t\tthis.activeTurn && this.activeTurn.size > 0 ? this.activeTurn : null;\n\t}\n\n\tasync abortActiveTurn(reason: \"interrupted\" = \"interrupted\"): Promise<void> {\n\t\tawait this.abort_all_tasks(reason);\n\t}\n\n\tasync abort_all_tasks(reason: \"interrupted\" = \"interrupted\"): Promise<void> {\n\t\tconst activeTurn = this.activeTurn;\n\t\tif (!activeTurn) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst tasks = activeTurn.drainTasks();\n\t\tactiveTurn.cancelPending();\n\t\tthis.activeTurn = null;\n\n\t\tfor (const task of tasks) {\n\t\t\tawait run_stop_hooks(this, task.turn_context);\n\t\t\ttask.abort_controller?.abort();\n\t\t\tawait task.task?.abort?.({\n\t\t\t\tsession: new SessionTaskContext(this),\n\t\t\t\tctx: task.turn_context,\n\t\t\t});\n\t\t\tawait this.persist_rollout_items([\n\t\t\t\t{\n\t\t\t\t\ttype: \"response_item\",\n\t\t\t\t\tpayload: turnAbortedResponseItem(),\n\t\t\t\t},\n\t\t\t]);\n\t\t\tconst timing = task.turn_context.turn_timing_state.completedAtAndDuration(\n\t\t\t\tthis.now(),\n\t\t\t);\n\t\t\tawait this.send_thread_goal_update_if_needed(\n\t\t\t\ttask.turn_context,\n\t\t\t\tawait this.goal_runtime.apply({\n\t\t\t\t\ttype: \"task_aborted\",\n\t\t\t\t\tturn_id: task.sub_id,\n\t\t\t\t\ttotal_tokens: this.get_total_token_usage(),\n\t\t\t\t}),\n\t\t\t);\n\t\t\tawait this.send_event(task.turn_context, {\n\t\t\t\ttype: \"turn_aborted\",\n\t\t\t\tturn_id: task.sub_id,\n\t\t\t\treason,\n\t\t\t\taborted_at: timing.completed_at,\n\t\t\t\tcompleted_at: timing.completed_at,\n\t\t\t\tduration_ms: timing.duration_ms,\n\t\t\t});\n\t\t}\n\t}\n\n\tmarkFirstToken(turnContext: TurnContext): void {\n\t\tturnContext.turn_timing_state.markFirstToken(this.now());\n\t}\n\n\tasync update_token_usage_info(\n\t\tturnContext: TurnContext,\n\t\ttokenUsage?: TokenUsage | null,\n\t): Promise<void> {\n\t\tif (tokenUsage) {\n\t\t\tthis.state.update_token_info_from_usage(\n\t\t\t\ttokenUsage,\n\t\t\t\tturnContext.model_context_window(),\n\t\t\t);\n\t\t}\n\t\tawait this.send_token_count_event(turnContext);\n\t}\n\n\tasync update_rate_limits(\n\t\tturnContext: TurnContext,\n\t\tnewRateLimits: RateLimitSnapshot,\n\t): Promise<void> {\n\t\tthis.state.set_rate_limits(newRateLimits);\n\t\tawait this.send_token_count_event(turnContext);\n\t}\n\n\ttoken_usage_info(): TokenUsageInfo | null {\n\t\treturn this.token_info;\n\t}\n\n\tclone_history() {\n\t\treturn this.state.clone_history();\n\t}\n\n\treplace_history(\n\t\titems: ResponseItem[],\n\t\treferenceContextItem: TurnContextItem | null = this.reference_context_item,\n\t): void {\n\t\tthis.state.replace_history(items, referenceContextItem);\n\t}\n\n\tasync replace_compacted_history(\n\t\tturnContext: TurnContext,\n\t\titems: ResponseItem[],\n\t\treferenceContextItem: TurnContextItem | null = null,\n\t): Promise<void> {\n\t\tthis.replace_history(items, referenceContextItem);\n\t\tawait this.recordCompactedItem({\n\t\t\tmessage: \"\",\n\t\t\treplacement_history: items,\n\t\t});\n\t\tawait this.persist_rollout_items([\n\t\t\t{\n\t\t\t\ttype: \"turn_context\",\n\t\t\t\tpayload: turnContext.toTurnContextItem(),\n\t\t\t},\n\t\t]);\n\t}\n\n\tget_total_token_usage_breakdown() {\n\t\treturn this.state.get_total_token_usage_breakdown();\n\t}\n\n\tget_total_token_usage(): number {\n\t\treturn this.state.get_total_token_usage();\n\t}\n\n\tasync get_thread_goal(): Promise<ThreadGoal | null> {\n\t\treturn this.goal_runtime.get_thread_goal();\n\t}\n\n\tasync create_thread_goal(\n\t\tturnContext: TurnContext,\n\t\trequest: CreateGoalRequest,\n\t): Promise<ThreadGoal> {\n\t\tconst goal = await this.goal_runtime.create_thread_goal(request);\n\t\tawait this.send_thread_goal_updated(turnContext, goal);\n\t\treturn goal;\n\t}\n\n\tasync update_thread_goal_complete(turnContext: TurnContext): Promise<ThreadGoal> {\n\t\tconst goal = await this.goal_runtime.update_thread_goal_complete();\n\t\tawait this.send_thread_goal_updated(turnContext, goal);\n\t\treturn goal;\n\t}\n\n\tasync note_tool_completed(turnContext: TurnContext, toolName: string): Promise<void> {\n\t\tawait this.send_thread_goal_update_if_needed(\n\t\t\tturnContext,\n\t\t\tawait this.goal_runtime.apply({\n\t\t\t\ttype: toolName === \"update_goal\" ? \"tool_completed_goal\" : \"tool_completed\",\n\t\t\t\tturn_id: turnContext.sub_id,\n\t\t\t\ttool_name: toolName,\n\t\t\t\ttotal_tokens: this.get_total_token_usage(),\n\t\t\t}),\n\t\t);\n\t}\n\n\tasync thread_goal_steering_items(): Promise<ResponseItem[]> {\n\t\treturn this.goal_runtime.budget_limit_steering_items();\n\t}\n\n\tlatest_rate_limit_snapshot(): RateLimitSnapshot | null {\n\t\treturn this.latest_rate_limits;\n\t}\n\n\tprivate async send_token_count_event(turnContext: TurnContext): Promise<void> {\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"token_count\",\n\t\t\tinfo: this.token_info,\n\t\t\trate_limits: this.latest_rate_limits,\n\t\t});\n\t}\n\n\tprivate async send_thread_goal_update_if_needed(\n\t\tturnContext: TurnContext,\n\t\tresult: { goal_updated?: ThreadGoal | null },\n\t): Promise<void> {\n\t\tif (result.goal_updated) {\n\t\t\tawait this.send_thread_goal_updated(turnContext, result.goal_updated);\n\t\t}\n\t}\n\n\tprivate async send_thread_goal_updated(\n\t\tturnContext: TurnContext,\n\t\tgoal: ThreadGoal,\n\t): Promise<void> {\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"thread_goal_updated\",\n\t\t\tthread_id: this.threadId,\n\t\t\tturn_id: turnContext.sub_id,\n\t\t\tgoal,\n\t\t});\n\t}\n\n\tprivate async userInputOrTurn(submission: Submission): Promise<void> {\n\t\ttry {\n\t\t\tconst turnContext = await this.startTurn(submission);\n\t\t\tawait this.completeTurn(turnContext);\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionSettingsUpdateError) {\n\t\t\t\tawait this.send_event_raw({\n\t\t\t\t\tid: submission.id,\n\t\t\t\t\tmsg: {\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\tcodex_error_info: \"bad_request\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async createTurnContext(submission: Submission): Promise<{\n\t\titems: UserInput[];\n\t\tturnContext: TurnContext;\n\t}> {\n\t\tconst op = submission.op;\n\t\tif (\n\t\t\top.type !== \"user_turn\" &&\n\t\t\top.type !== \"user_input\" &&\n\t\t\top.type !== \"user_input_with_turn_context\"\n\t\t) {\n\t\t\tthrow new Error(`Cannot create TurnContext for Op: ${op.type}`);\n\t\t}\n\n\t\tconst { items, updates } = this.sessionSettingsUpdateFromOp(op);\n\t\tconst turnContext = await this.new_turn_with_sub_id(\n\t\t\tsubmission.id,\n\t\t\tupdates,\n\t\t\tsubmission.trace,\n\t\t);\n\n\t\treturn {\n\t\t\titems,\n\t\t\tturnContext,\n\t\t};\n\t}\n\n\tasync new_turn_with_sub_id(\n\t\tsubmissionId: string,\n\t\tupdates: SessionSettingsUpdate,\n\t\ttrace?: Submission[\"trace\"],\n\t): Promise<TurnContext> {\n\t\tthis.configuration = applySessionSettingsUpdate(\n\t\t\tthis.configuration,\n\t\t\tupdates,\n\t\t);\n\t\treturn this.turnContextFromConfiguration(\n\t\t\tsubmissionId,\n\t\t\ttrace,\n\t\t\tupdates.final_output_json_schema,\n\t\t\tupdates.environments,\n\t\t);\n\t}\n\n\tasync new_default_turn_with_sub_id(\n\t\tsubmissionId: string,\n\t\ttrace?: Submission[\"trace\"],\n\t): Promise<TurnContext> {\n\t\treturn this.turnContextFromConfiguration(submissionId, trace);\n\t}\n\n\tturn_context_from_config(\n\t\tconfig: ResolvedConfig,\n\t\tsubmissionId: string,\n\t\ttrace?: Submission[\"trace\"],\n\t): TurnContext {\n\t\treturn turn_context_from_config(config, submissionId, trace);\n\t}\n\n\tprivate turnContextFromConfiguration(\n\t\tsubmissionId: string,\n\t\ttrace?: Submission[\"trace\"],\n\t\tfinalOutputJsonSchema = this.configuration.final_output_json_schema,\n\t\tenvironments = this.configuration.environments,\n\t): TurnContext {\n\t\treturn new TurnContext({\n\t\t\tsub_id: submissionId,\n\t\t\ttrace,\n\t\t\tcwd: this.configuration.cwd,\n\t\t\tapproval_policy: this.configuration.approval_policy,\n\t\t\tapprovals_reviewer: this.configuration.approvals_reviewer,\n\t\t\tsandbox_policy: sessionConfigurationSandboxPolicy(this.configuration),\n\t\t\tpermission_profile: sessionConfigurationPermissionProfile(\n\t\t\t\tthis.configuration,\n\t\t\t),\n\t\t\tactive_permission_profile: this.configuration.active_permission_profile,\n\t\t\twindows_sandbox_level: this.configuration.windows_sandbox_level,\n\t\t\tmodel: this.configuration.model,\n\t\t\tmodel_info:\n\t\t\t\tthis.configuration.model_info ?? modelInfoFromSlug(this.configuration.model),\n\t\t\tpersonality: this.configuration.personality,\n\t\t\tcollaboration_mode: this.configuration.collaboration_mode,\n\t\t\teffort: this.configuration.reasoning_effort,\n\t\t\tsummary: this.configuration.reasoning_summary,\n\t\t\tservice_tier: this.configuration.service_tier,\n\t\t\tsession_source: this.configuration.session_source,\n\t\t\tenvironments,\n\t\t\tbase_instructions: this.configuration.base_instructions.text,\n\t\t\tuser_instructions: this.configuration.user_instructions,\n\t\t\tdeveloper_instructions: this.configuration.developer_instructions,\n\t\t\tfinal_output_json_schema: finalOutputJsonSchema,\n\t\t\ttruncation_policy: this.configuration.truncation_policy,\n\t\t\tdynamic_tools: this.configuration.dynamic_tools,\n\t\t\ttools: toolsConfigForTurn(\n\t\t\t\tthis.configuration.tools,\n\t\t\t\tsessionConfigurationPermissionProfile(this.configuration),\n\t\t\t),\n\t\t});\n\t}\n\n\tprivate async overrideTurnContext(submission: Submission): Promise<void> {\n\t\tif (submission.op.type !== \"override_turn_context\") {\n\t\t\treturn;\n\t\t}\n\t\tawait this.configure_session();\n\n\t\tif (this.activeTurn) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: submission.id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Cannot override turn context while a turn is active.\",\n\t\t\t\t\tcodex_error_info: \"bad_request\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.configuration = applySessionSettingsUpdate(\n\t\t\t\tthis.configuration,\n\t\t\t\tsessionSettingsUpdateFromOverrideTurnContext(\n\t\t\t\t\tsubmission.op,\n\t\t\t\t\tthis.configuration,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: submission.id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: errorMessage(error),\n\t\t\t\t\tcodex_error_info: \"bad_request\",\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate sessionSettingsUpdateFromOp(\n\t\top: UserTurnOp | UserInputOp | UserInputWithTurnContextOp,\n\t): {\n\t\titems: UserInput[];\n\t\tupdates: SessionSettingsUpdate;\n\t} {\n\t\tswitch (op.type) {\n\t\t\tcase \"user_turn\":\n\t\t\t\treturn {\n\t\t\t\t\titems: op.items,\n\t\t\t\t\tupdates: sessionSettingsUpdateFromUserTurn(op),\n\t\t\t\t};\n\t\t\tcase \"user_input_with_turn_context\":\n\t\t\t\treturn {\n\t\t\t\t\titems: op.items,\n\t\t\t\t\tupdates: sessionSettingsUpdateFromUserInputWithTurnContext(\n\t\t\t\t\t\top,\n\t\t\t\t\t\tthis.configuration,\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\tcase \"user_input\":\n\t\t\t\treturn {\n\t\t\t\t\titems: op.items,\n\t\t\t\t\tupdates: sessionSettingsUpdateFromUserInput(op),\n\t\t\t\t};\n\t\t}\n\t}\n\n\tprivate notifyUserInputResponse(\n\t\tid: string,\n\t\tresponse: RequestUserInputResponse,\n\t): void {\n\t\tconst pending = this.activeTurn?.turn_state.removePendingUserInput(id);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\n\t\tpending.resolve(response);\n\t}\n\n\tnotify_request_permissions_response(\n\t\tcallId: string,\n\t\tresponse: RequestPermissionsResponse,\n\t): void {\n\t\tconst pending =\n\t\t\tthis.activeTurn?.turn_state.removePendingRequestPermissions(callId);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\n\t\tpending.resolve(response);\n\t}\n\n\tasync resolve_elicitation(\n\t\tserverName: string,\n\t\tid: McpRequestId,\n\t\tresponse: McpServerElicitationResponse,\n\t): Promise<void> {\n\t\tconst pending =\n\t\t\tthis.activeTurn?.turn_state.removePendingMcpElicitation(serverName, id);\n\t\tif (pending) {\n\t\t\tpending.resolve(response);\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.mcp_connection_manager.resolve_elicitation(\n\t\t\tserverName,\n\t\t\tid,\n\t\t\tresponse,\n\t\t);\n\t}\n\n\tprivate record_granted_request_permissions(\n\t\tturnContext: TurnContext,\n\t\tresponse: RequestPermissionsResponse,\n\t): RequestPermissionsResponse {\n\t\tconst normalized = normalizeRequestPermissionsResponseForCwd(\n\t\t\tresponse,\n\t\t\tturnContext.cwd,\n\t\t);\n\t\tif (\n\t\t\t(normalized.scope ?? PermissionGrantScope.Turn) ===\n\t\t\tPermissionGrantScope.Session\n\t\t) {\n\t\t\tthis.session_permission_grants.record(normalized);\n\t\t} else {\n\t\t\tthis.activeTurn?.turn_state.recordPermissionGrant(normalized);\n\t\t}\n\t\treturn normalized;\n\t}\n\n\tnotify_dynamic_tool_response(\n\t\tcallId: string,\n\t\tresponse: DynamicToolResponse,\n\t): void {\n\t\tconst pending = this.activeTurn?.turn_state.removePendingDynamicTool(callId);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\n\t\tpending.resolve(response);\n\t}\n\n\tprivate async setThreadMemoryMode(mode: ThreadMemoryMode): Promise<void> {\n\t\tif (!this.liveThread) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.liveThread.persist();\n\t\tawait this.liveThread.flush();\n\t\tawait this.liveThread.updateMemoryMode(mode, false);\n\t\tawait this.liveThread.flush();\n\t}\n\n\tprivate async shutdown(): Promise<void> {\n\t\tthis.activeTurn?.cancelPending();\n\t\tthis.activeTurn = null;\n\t\tawait this.mcp_connection_manager.shutdown();\n\t\tawait this.liveThread?.shutdown();\n\t}\n\n\tprivate async interrupt(): Promise<void> {\n\t\tawait this.abortActiveTurn(\"interrupted\");\n\t}\n\n\tprivate async threadRollback(submission: Submission): Promise<void> {\n\t\tif (submission.op.type !== \"thread_rollback\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.activeTurn) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: submission.id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Cannot roll back thread while a turn is active.\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (submission.op.num_turns <= 0) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: submission.id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Cannot roll back zero thread turns.\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state.history.drop_last_n_user_turns(submission.op.num_turns);\n\t\tawait this.send_event_raw({\n\t\t\tid: submission.id,\n\t\t\tmsg: {\n\t\t\t\ttype: \"thread_rolled_back\",\n\t\t\t\tnum_turns: submission.op.num_turns,\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate async compactWithoutModel(submission: Submission): Promise<void> {\n\t\tif (this.activeTurn) {\n\t\t\tawait this.send_event_raw({\n\t\t\t\tid: submission.id,\n\t\t\t\tmsg: {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Cannot compact thread while a turn is active.\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst turnContext = await this.startCompactTurn(submission);\n\t\tconst item = {\n\t\t\ttype: \"ContextCompaction\" as const,\n\t\t\tid: `${turnContext.sub_id}-context-compaction`,\n\t\t};\n\t\tawait this.send_event(turnContext, { type: \"item_started\", item });\n\t\tconst summaryText = `${SUMMARY_PREFIX}\\n(no summary available)`;\n\t\tconst replacement_history = buildCompactedHistory([], [], summaryText);\n\t\tthis.replace_history(replacement_history, null);\n\t\tawait this.recordCompactedItem({\n\t\t\tmessage: summaryText,\n\t\t\treplacement_history,\n\t\t});\n\t\tawait this.send_event(turnContext, { type: \"item_completed\", item });\n\t\tawait this.send_event(turnContext, {\n\t\t\ttype: \"warning\",\n\t\t\tmessage: compactedThreadWarning(),\n\t\t});\n\t\tawait run_post_compact_hooks(this, turnContext, \"manual\");\n\t\tawait this.completeTurn(turnContext, null);\n\t}\n\n\tasync send_event(turnContext: TurnContext, msg: EventMsg): Promise<void> {\n\t\tawait this.send_event_raw({\n\t\t\tid: turnContext.sub_id,\n\t\t\tmsg,\n\t\t});\n\t}\n\n\tasync recordResponseItem(\n\t\tturnContext: TurnContext,\n\t\titem: ResponseItem,\n\t): Promise<void> {\n\t\tawait this.record_conversation_items(turnContext, [item]);\n\t}\n\n\tasync record_context_updates_and_set_reference_context_item(\n\t\tturnContext: TurnContext,\n\t): Promise<void> {\n\t\tconst contextItems = this.reference_context_item\n\t\t\t? buildSettingsUpdateItems(\n\t\t\t\t\tthis.reference_context_item,\n\t\t\t\t\tthis.previous_turn_settings,\n\t\t\t\t\tturnContext,\n\t\t\t\t)\n\t\t\t: buildInitialContextItems(turnContext);\n\n\t\tfor (const item of contextItems) {\n\t\t\tawait this.recordResponseItem(turnContext, item);\n\t\t}\n\n\t\tconst turnContextItem = turnContext.toTurnContextItem();\n\t\tawait this.persist_rollout_items([\n\t\t\t{\n\t\t\t\ttype: \"turn_context\",\n\t\t\t\tpayload: turnContextItem,\n\t\t\t},\n\t\t]);\n\t\tthis.reference_context_item = turnContextItem;\n\t}\n\n\tasync send_event_raw(event: Event): Promise<void> {\n\t\tif (!isLiveOnlyEventMsg(event.msg)) {\n\t\t\tawait this.persist_rollout_items([\n\t\t\t\t{\n\t\t\t\t\ttype: \"event_msg\",\n\t\t\t\t\tpayload: event.msg,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\t\tthis.deliver_event_raw(event);\n\t}\n\n\tprivate deliver_event_raw(event: Event): void {\n\t\tthis.emittedEvents.push(event);\n\t\tthis.eventSink?.(event);\n\t}\n\n\tprivate async persist_rollout_items(items: RolloutItem[]): Promise<void> {\n\t\tawait this.liveThread?.appendItems(items);\n\t}\n}\n\nfunction toolsConfigForTurn(\n\ttools: ToolsConfig,\n\tpermissionProfile: PermissionProfile,\n): ToolsConfig {\n\treturn {\n\t\t...tools,\n\t\tweb_search_mode: resolve_web_search_mode_for_turn({\n\t\t\tpermission_profile: permissionProfile,\n\t\t\tweb_search_mode: tools.web_search_mode ?? \"cached\",\n\t\t}),\n\t};\n}\n\nfunction fallbackRandomId(): string {\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (char) => {\n\t\tconst random = Math.floor(Math.random() * 16);\n\t\tconst value = char === \"x\" ? random : (random & 0x3) | 0x8;\n\t\treturn value.toString(16);\n\t});\n}\n\nfunction userMessageEventFromInput(items: UserInput[]): EventMsg {\n\tlet message = \"\";\n\tconst images: string[] = [];\n\tconst localImages: string[] = [];\n\tconst textElements: TextElement[] = [];\n\n\tfor (const item of items) {\n\t\tswitch (item.type) {\n\t\t\tcase \"text\":\n\t\t\t\tif (message.length > 0) {\n\t\t\t\t\tmessage += \"\\n\";\n\t\t\t\t}\n\t\t\t\tappendTextElements(textElements, item.text_elements, utf8ByteLength(message));\n\t\t\t\tmessage += item.text;\n\t\t\t\tbreak;\n\t\t\tcase \"image\":\n\t\t\t\timages.push(item.image_url);\n\t\t\t\tbreak;\n\t\t\tcase \"local_image\":\n\t\t\t\tlocalImages.push(item.path);\n\t\t\t\tbreak;\n\t\t\tcase \"skill\":\n\t\t\tcase \"mention\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"user_message\",\n\t\tmessage,\n\t\timages: images.length > 0 ? images : null,\n\t\tlocal_images: localImages,\n\t\ttext_elements: textElements,\n\t};\n}\n\nfunction userInputPromptText(items: UserInput[]): string {\n\treturn items\n\t\t.filter((item): item is UserInput & { type: \"text\" } => item.type === \"text\")\n\t\t.map((item) => item.text)\n\t\t.join(\"\\n\");\n}\n\nfunction userInputAsResponseItem(items: UserInput[]): ResponseItem {\n\tconst content: ContentItem[] = [];\n\n\tfor (const item of items) {\n\t\tswitch (item.type) {\n\t\t\tcase \"text\":\n\t\t\t\tcontent.push({ type: \"input_text\", text: item.text });\n\t\t\t\tbreak;\n\t\t\tcase \"image\":\n\t\t\t\tcontent.push({ type: \"input_image\", image_url: item.image_url });\n\t\t\t\tbreak;\n\t\t\tcase \"local_image\":\n\t\t\tcase \"skill\":\n\t\t\tcase \"mention\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"message\",\n\t\trole: \"user\",\n\t\tcontent,\n\t};\n}\n\nfunction appendTextElements(\n\ttarget: TextElement[],\n\telements: TextElement[] | undefined,\n\tbyteOffset: number,\n) {\n\tif (!elements?.length) {\n\t\treturn;\n\t}\n\n\tfor (const element of elements) {\n\t\ttarget.push({\n\t\t\t...element,\n\t\t\tbyte_range: {\n\t\t\t\tstart: element.byte_range.start + byteOffset,\n\t\t\t\tend: element.byte_range.end + byteOffset,\n\t\t\t},\n\t\t});\n\t}\n}\n\nfunction utf8ByteLength(text: string): number {\n\treturn new TextEncoder().encode(text).length;\n}\n\nfunction last_token_info_from_rollout(\n\trolloutItems: readonly RolloutItem[],\n): TokenUsageInfo | null {\n\tfor (let index = rolloutItems.length - 1; index >= 0; index -= 1) {\n\t\tconst item = rolloutItems[index];\n\t\tif (\n\t\t\titem?.type === \"event_msg\" &&\n\t\t\titem.payload.type === \"token_count\" &&\n\t\t\titem.payload.info\n\t\t) {\n\t\t\treturn item.payload.info;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction initialMessagesFromRollout(\n\trolloutItems: readonly RolloutItem[],\n): EventMsg[] | null {\n\tconst messages = rolloutItems\n\t\t.filter((item) => item.type === \"event_msg\")\n\t\t.map((item) => item.payload)\n\t\t.filter((msg) => msg.type !== \"session_configured\");\n\treturn messages.length > 0 ? messages : null;\n}\n\nfunction parseDynamicToolName(toolName: string): {\n\tnamespace: string | null;\n\ttool: string;\n} {\n\tconst separatorIndex = toolName.indexOf(\".\");\n\tif (separatorIndex <= 0 || separatorIndex === toolName.length - 1) {\n\t\treturn {\n\t\t\tnamespace: null,\n\t\t\ttool: toolName,\n\t\t};\n\t}\n\n\treturn {\n\t\tnamespace: toolName.slice(0, separatorIndex),\n\t\ttool: toolName.slice(separatorIndex + 1),\n\t};\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isLiveOnlyEventMsg(msg: EventMsg): boolean {\n\treturn (\n\t\tmsg.type === \"item_started\" ||\n\t\tmsg.type === \"plan_delta\" ||\n\t\tmsg.type === \"agent_message_content_delta\" ||\n\t\t(msg.type === \"item_completed\" && msg.item.type !== \"Plan\")\n\t);\n}\n","import {\n\tbuildPromptBaseInstructions,\n\tbuildPromptInputWithContext,\n} from \"./context/prompt-context\";\nimport {\n\tbuildCompactedHistory,\n\tcollectUserMessages,\n\tSUMMARIZATION_PROMPT,\n\tSUMMARY_PREFIX,\n\tcompactedThreadWarning,\n} from \"./compact\";\nimport { run_post_compact_hooks } from \"./hooks\";\nimport type { ResponseItem } from \"./models\";\nimport type { RolloutItem, Submission } from \"./protocol\";\nimport type { Session } from \"./session/session\";\nimport type { TurnContext } from \"./session/turn-context\";\nimport type { ModelClient, Prompt } from \"./client\";\nimport {\n\tmodelInputFromHistory,\n\trawAssistantOutputTextFromItem,\n\tuserInputAsResponseInput,\n} from \"../../codex-api/src\";\n\nexport type CompactTaskResult = {\n\tsummary: string;\n\treplacement_history: ResponseItem[];\n};\n\nexport async function run_compact_task(params: {\n\tmodelClient: ModelClient;\n\tsession: Session;\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\tturn?: TurnContext;\n\tsignal?: AbortSignal;\n\tcompleteTurn?: boolean;\n}): Promise<CompactTaskResult> {\n\tconst turn = params.turn ?? (await params.session.startCompactTurn(params.submission));\n\tconst compactionItem = {\n\t\ttype: \"ContextCompaction\" as const,\n\t\tid: `${turn.sub_id}-context-compaction`,\n\t};\n\n\ttry {\n\t\tawait params.session.send_event(turn, {\n\t\t\ttype: \"item_started\",\n\t\t\titem: compactionItem,\n\t\t});\n\n\t\tconst livePromptHistory = params.session\n\t\t\t.clone_history()\n\t\t\t.for_prompt(turn.model_info.input_modalities);\n\t\tconst promptHistory =\n\t\t\tlivePromptHistory.length > 0\n\t\t\t\t? livePromptHistory\n\t\t\t\t: modelInputFromHistory(params.history);\n\t\tconst summarySuffix = await runCompactionPrompt({\n\t\t\tmodelClient: params.modelClient,\n\t\t\tturn,\n\t\t\thistory: promptHistory,\n\t\t\tsignal: params.signal,\n\t\t});\n\t\tconst summaryText = `${SUMMARY_PREFIX}\\n${summarySuffix || \"(no summary available)\"}`;\n\t\tconst replacementHistory = buildCompactedHistory(\n\t\t\t[],\n\t\t\tcollectUserMessages(promptHistory),\n\t\t\tsummaryText,\n\t\t);\n\n\t\tawait params.session.recordCompactedItem({\n\t\t\tmessage: summaryText,\n\t\t\treplacement_history: replacementHistory,\n\t\t});\n\t\tparams.session.replace_history(replacementHistory, null);\n\t\tawait params.session.send_event(turn, {\n\t\t\ttype: \"item_completed\",\n\t\t\titem: compactionItem,\n\t\t});\n\t\tawait params.session.send_event(turn, {\n\t\t\ttype: \"warning\",\n\t\t\tmessage: compactedThreadWarning(),\n\t\t});\n\t\tawait run_post_compact_hooks(params.session, turn, \"manual\");\n\t\tif (params.completeTurn ?? true) {\n\t\t\tawait params.session.completeTurn(turn, null);\n\t\t}\n\n\t\treturn {\n\t\t\tsummary: summaryText,\n\t\t\treplacement_history: replacementHistory,\n\t\t};\n\t} catch (error) {\n\t\tif (!params.signal?.aborted && (params.completeTurn ?? true)) {\n\t\t\tawait params.session.failTurn(turn, error);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nasync function runCompactionPrompt(input: {\n\tmodelClient: ModelClient;\n\tturn: TurnContext;\n\thistory: ResponseItem[];\n\tsignal?: AbortSignal;\n}): Promise<string> {\n\tconst clientSession = input.modelClient.new_session(input.turn);\n\tconst promptInput = [\n\t\t...input.history,\n\t\tuserInputAsResponseInput([{ type: \"text\", text: SUMMARIZATION_PROMPT }]),\n\t];\n\tconst prompt = {\n\t\tinput: buildPromptInputWithContext(promptInput, input.turn),\n\t\ttools: [],\n\t\tparallel_tool_calls: false,\n\t\tbase_instructions: buildPromptBaseInstructions(input.turn),\n\t} satisfies Prompt;\n\ttry {\n\t\tconst stream = await clientSession.stream(prompt, {\n\t\t\tsignal: input.signal,\n\t\t\tturn: input.turn,\n\t\t});\n\n\t\tlet summary = \"\";\n\t\tfor await (const event of stream) {\n\t\t\tif (input.signal?.aborted) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (event.type === \"output_text_delta\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (event.type === \"output_item_done\") {\n\t\t\t\tconst text = rawAssistantOutputTextFromItem(event.item);\n\t\t\t\tif (text) {\n\t\t\t\t\tsummary = text;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn summary.trim();\n\t} finally {\n\t\tclientSession.release();\n\t}\n}\n","export type ToolNameInput =\n\t| ToolName\n\t| string\n\t| {\n\t\t\tnamespace?: string | null;\n\t\t\tname: string;\n\t };\n\nexport class ToolName {\n\tprivate constructor(\n\t\treadonly namespace: string | null,\n\t\treadonly name: string,\n\t) {}\n\n\tstatic plain(name: string): ToolName {\n\t\treturn new ToolName(null, name);\n\t}\n\n\tstatic namespaced(namespace: string, name: string): ToolName {\n\t\treturn new ToolName(namespace, name);\n\t}\n\n\tstatic new(namespace: string | null | undefined, name: string): ToolName {\n\t\treturn namespace ? ToolName.namespaced(namespace, name) : ToolName.plain(name);\n\t}\n\n\tstatic from(input: ToolNameInput): ToolName {\n\t\tif (input instanceof ToolName) {\n\t\t\treturn input;\n\t\t}\n\n\t\tif (typeof input === \"string\") {\n\t\t\tconst separator = input.indexOf(\".\");\n\t\t\treturn separator === -1\n\t\t\t\t? ToolName.plain(input)\n\t\t\t\t: ToolName.namespaced(\n\t\t\t\t\t\tinput.slice(0, separator),\n\t\t\t\t\t\tinput.slice(separator + 1),\n\t\t\t\t\t);\n\t\t}\n\n\t\treturn ToolName.new(input.namespace, input.name);\n\t}\n\n\tdisplay(): string {\n\t\treturn this.namespace ? `${this.namespace}.${this.name}` : this.name;\n\t}\n\n\tkey(): string {\n\t\treturn this.display();\n\t}\n\n\tequals(other: ToolNameInput): boolean {\n\t\treturn this.key() === ToolName.from(other).key();\n\t}\n\n\ttoJSON(): string {\n\t\treturn this.display();\n\t}\n}\n","import type {\n\tFunctionCallOutputBody,\n\tFunctionCallOutputContentItem,\n\tFunctionCallOutputPayload,\n\tResponseInputItem,\n\tTruncationPolicy,\n} from \"../protocol\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport {\n\trun_post_tool_use_hooks,\n\trun_pre_tool_use_hooks,\n} from \"../hooks\";\nimport { truncate_function_output_payload } from \"../context_manager/history\";\nimport { ToolName, type ToolNameInput } from \"./tool_name\";\nexport type { ConfiguredToolSpec, ToolSpec } from \"./tool_spec\";\n\nexport const ToolKind = {\n\tFunction: \"Function\",\n\tMcp: \"Mcp\",\n} as const;\n\nexport type ToolKind = (typeof ToolKind)[keyof typeof ToolKind];\n\nexport type SearchToolCallParams = {\n\tquery?: string;\n\tlimit?: number;\n\t[key: string]: unknown;\n};\n\nexport type ShellToolCallParams = {\n\tcommand?: string[];\n\tworkdir?: string | null;\n\ttimeout_ms?: number | null;\n\tsandbox_permissions?: unknown;\n\tprefix_rule?: string[] | null;\n\tjustification?: string | null;\n\t[key: string]: unknown;\n};\n\nexport type ToolPayload =\n\t| { type: \"function\"; arguments: string }\n\t| { type: \"tool_search\"; arguments: SearchToolCallParams }\n\t| { type: \"custom\"; input: string }\n\t| { type: \"local_shell\"; params: ShellToolCallParams }\n\t| { type: \"mcp\"; server: string; tool: string; raw_arguments: string };\n\nexport function logPayload(payload: ToolPayload): string {\n\tswitch (payload.type) {\n\t\tcase \"function\":\n\t\t\treturn payload.arguments;\n\t\tcase \"tool_search\":\n\t\t\treturn payload.arguments.query ?? JSON.stringify(payload.arguments);\n\t\tcase \"custom\":\n\t\t\treturn payload.input;\n\t\tcase \"local_shell\":\n\t\t\treturn payload.params.command?.join(\" \") ?? JSON.stringify(payload.params);\n\t\tcase \"mcp\":\n\t\t\treturn payload.raw_arguments;\n\t}\n}\n\nexport type ToolCallSource =\n\t| { type: \"direct\" }\n\t| {\n\t\t\ttype: \"code_mode\";\n\t\t\tcell_id: string;\n\t\t\truntime_tool_call_id: string;\n\t };\n\nexport type ToolInvocation = {\n\tsession: Session;\n\tturn: TurnContext;\n\tcancellation_token: CancellationToken;\n\tcall_id: string;\n\ttool_name: ToolNameInput;\n\tsource: ToolCallSource;\n\tpayload: ToolPayload;\n};\n\nexport class CancellationToken {\n\tconstructor(readonly signal?: AbortSignal) {}\n\n\tis_cancelled(): boolean {\n\t\treturn this.signal?.aborted ?? false;\n\t}\n\n\tcancelled(): Promise<void> {\n\t\tif (!this.signal || this.signal.aborted) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.signal?.addEventListener(\"abort\", () => resolve(), { once: true });\n\t\t});\n\t}\n}\n\nexport type PreToolUsePayload = {\n\ttool_name: string;\n\ttool_input: unknown;\n};\n\nexport type PostToolUsePayload = {\n\ttool_name: string;\n\ttool_use_id: string;\n\ttool_input: unknown;\n\ttool_response: unknown;\n};\n\nexport interface ToolArgumentDiffConsumer {\n\tconsumeDiff(\n\t\tturn: TurnContext,\n\t\tcallId: string,\n\t\tdiff: string,\n\t): unknown | null;\n\tfinish?(): unknown | null;\n}\n\nexport interface ToolOutput {\n\tlogPreview(): string;\n\tsuccessForLogging(): boolean;\n\ttoResponseItem(callId: string, payload: ToolPayload): ResponseInputItem;\n\tpostToolUseResponse(callId: string, payload: ToolPayload): unknown | null;\n\tcodeModeResult(payload: ToolPayload): unknown;\n}\n\nexport class FunctionToolOutput implements ToolOutput {\n\tconstructor(\n\t\treadonly body: FunctionCallOutputContentItem[],\n\t\treadonly success?: boolean | null,\n\t\treadonly post_tool_use_response: unknown | null = null,\n\t) {}\n\n\tstatic fromText(text: string, success?: boolean | null): FunctionToolOutput {\n\t\treturn new FunctionToolOutput([{ type: \"input_text\", text }], success);\n\t}\n\n\tstatic fromContent(\n\t\tcontent: FunctionCallOutputContentItem[],\n\t\tsuccess?: boolean | null,\n\t): FunctionToolOutput {\n\t\treturn new FunctionToolOutput(content, success);\n\t}\n\n\tintoText(): string {\n\t\treturn contentItemsToText(this.body);\n\t}\n\n\tlogPreview(): string {\n\t\treturn this.intoText();\n\t}\n\n\tsuccessForLogging(): boolean {\n\t\treturn this.success ?? true;\n\t}\n\n\ttoResponseItem(callId: string, payload: ToolPayload): ResponseInputItem {\n\t\treturn functionToolResponse(callId, payload, this.body, this.success);\n\t}\n\n\tpostToolUseResponse(): unknown | null {\n\t\treturn this.post_tool_use_response;\n\t}\n\n\tcodeModeResult(): unknown {\n\t\treturn this.intoText();\n\t}\n}\n\nexport class McpToolOutput implements ToolOutput {\n\tconstructor(\n\t\treadonly result: unknown,\n\t\treadonly tool_input: unknown,\n\t\treadonly wall_time_ms: number,\n\t\treadonly original_image_detail_supported: boolean,\n\t\treadonly truncation_policy?: TruncationPolicy | null,\n\t) {}\n\n\tlogPreview(): string {\n\t\treturn functionCallOutputPayloadToText(this.response_payload());\n\t}\n\n\tsuccessForLogging(): boolean {\n\t\treturn !isMcpErrorResult(this.result);\n\t}\n\n\ttoResponseItem(callId: string): ResponseInputItem {\n\t\treturn {\n\t\t\ttype: \"function_call_output\",\n\t\t\tcall_id: callId,\n\t\t\toutput: this.response_payload(),\n\t\t};\n\t}\n\n\tpostToolUseResponse(): unknown | null {\n\t\treturn this.result;\n\t}\n\n\tcodeModeResult(): unknown {\n\t\treturn this.result;\n\t}\n\n\tprivate response_payload(): FunctionCallOutputPayload {\n\t\tconst wallTimeSeconds = Math.max(0, this.wall_time_ms) / 1000;\n\t\tconst header = `Wall time: ${wallTimeSeconds.toFixed(4)} seconds\\nOutput:`;\n\t\tconst outputText = mcpResultToText(this.result);\n\t\tconst payload: FunctionCallOutputPayload = {\n\t\t\tbody: {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: outputText.length > 0 ? `${header}\\n${outputText}` : header,\n\t\t\t},\n\t\t\tsuccess: this.successForLogging(),\n\t\t};\n\n\t\treturn truncate_function_output_payload(\n\t\t\tpayload,\n\t\t\tthis.truncation_policy ?? null,\n\t\t);\n\t}\n}\n\nexport interface ToolHandler<TOutput extends ToolOutput = ToolOutput> {\n\ttoolName(): ToolNameInput;\n\tkind(): ToolKind;\n\tmatchesKind?(payload: ToolPayload): boolean;\n\tisMutating?(invocation: ToolInvocation): Promise<boolean>;\n\tpreToolUsePayload?(invocation: ToolInvocation): PreToolUsePayload | null;\n\tpostToolUsePayload?(\n\t\tinvocation: ToolInvocation,\n\t\tresult: TOutput,\n\t): PostToolUsePayload | null;\n\tcreateDiffConsumer?(): ToolArgumentDiffConsumer | null;\n\thandle(invocation: ToolInvocation): Promise<TOutput>;\n}\n\nexport function matchesToolKind(\n\tkind: ToolKind,\n\tpayload: ToolPayload,\n): boolean {\n\treturn (\n\t\t(kind === ToolKind.Function &&\n\t\t\t(payload.type === \"function\" || payload.type === \"tool_search\")) ||\n\t\t(kind === ToolKind.Mcp && payload.type === \"mcp\")\n\t);\n}\n\nexport class AnyToolResult {\n\tconstructor(\n\t\treadonly call_id: string,\n\t\treadonly payload: ToolPayload,\n\t\treadonly result: ToolOutput,\n\t\treadonly post_tool_use_payload: PostToolUsePayload | null,\n\t) {}\n\n\tintoResponse(): ResponseInputItem {\n\t\treturn this.result.toResponseItem(this.call_id, this.payload);\n\t}\n\n\tcodeModeResult(): unknown {\n\t\treturn this.result.codeModeResult(this.payload);\n\t}\n}\n\nexport const FunctionCallErrorKind = {\n\tRespondToModel: \"respond_to_model\",\n\tFatal: \"fatal\",\n} as const;\n\nexport type FunctionCallErrorKind =\n\t(typeof FunctionCallErrorKind)[keyof typeof FunctionCallErrorKind];\n\nexport class FunctionCallError extends Error {\n\tprivate constructor(\n\t\treadonly kind: FunctionCallErrorKind,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"FunctionCallError\";\n\t}\n\n\tstatic respondToModel(message: string): FunctionCallError {\n\t\treturn new FunctionCallError(FunctionCallErrorKind.RespondToModel, message);\n\t}\n\n\tstatic fatal(message: string): FunctionCallError {\n\t\treturn new FunctionCallError(FunctionCallErrorKind.Fatal, message);\n\t}\n}\n\nexport class ToolRegistry {\n\tprivate constructor(\n\t\tprivate readonly handlers: Map<string, ToolHandler> = new Map(),\n\t) {}\n\n\tstatic emptyForTest(): ToolRegistry {\n\t\treturn new ToolRegistry();\n\t}\n\n\tstatic withHandlerForTest(handler: ToolHandler): ToolRegistry {\n\t\treturn new ToolRegistry(new Map([[ToolName.from(handler.toolName()).key(), handler]]));\n\t}\n\n\tstatic fromHandlersForBuilder(handlers: Map<string, ToolHandler>): ToolRegistry {\n\t\treturn new ToolRegistry(new Map(handlers));\n\t}\n\n\thasHandler(name: ToolNameInput): boolean {\n\t\treturn this.handlers.has(ToolName.from(name).key());\n\t}\n\n\tcreateDiffConsumer(name: ToolNameInput): ToolArgumentDiffConsumer | null {\n\t\treturn (\n\t\t\tthis.handlers.get(ToolName.from(name).key())?.createDiffConsumer?.() ??\n\t\t\tnull\n\t\t);\n\t}\n\n\tasync dispatchAny(invocation: ToolInvocation): Promise<AnyToolResult> {\n\t\tif (invocation.session.activeTurn) {\n\t\t\tinvocation.session.activeTurn.turn_state.tool_calls += 1;\n\t\t}\n\n\t\tconst toolName = ToolName.from(invocation.tool_name);\n\t\tconst displayName = toolName.display();\n\t\tconst handler = this.handlers.get(toolName.key());\n\t\tif (!handler) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\tunsupportedToolCallMessage(invocation.payload, toolName),\n\t\t\t);\n\t\t}\n\n\t\tconst matchesKind =\n\t\t\thandler.matchesKind?.(invocation.payload) ??\n\t\t\tmatchesToolKind(handler.kind(), invocation.payload);\n\t\tif (!matchesKind) {\n\t\t\tthrow FunctionCallError.fatal(\n\t\t\t\t`tool ${displayName} invoked with incompatible payload`,\n\t\t\t);\n\t\t}\n\n\t\tif (!invocation.session.hooks().is_empty()) {\n\t\t\tconst preToolUsePayload =\n\t\t\t\thandler.preToolUsePayload?.(invocation) ??\n\t\t\t\tdefaultPreToolUsePayload(invocation, displayName);\n\t\t\tconst blockMessage = await run_pre_tool_use_hooks(\n\t\t\t\tinvocation.session,\n\t\t\t\tinvocation.turn,\n\t\t\t\t{\n\t\t\t\t\ttool_use_id: invocation.call_id,\n\t\t\t\t\ttool_name: preToolUsePayload.tool_name,\n\t\t\t\t\ttool_input: preToolUsePayload.tool_input,\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (blockMessage) {\n\t\t\t\tthrow FunctionCallError.respondToModel(blockMessage);\n\t\t\t}\n\t\t}\n\n\t\tawait (handler.isMutating?.(invocation) ?? Promise.resolve(false));\n\t\tconst result = await handler.handle(invocation);\n\t\tawait invocation.session.note_tool_completed(\n\t\t\tinvocation.turn,\n\t\t\ttoolName.display(),\n\t\t);\n\t\tconst postToolUsePayload =\n\t\t\thandler.postToolUsePayload?.(invocation, result) ?? null;\n\t\tif (postToolUsePayload && !invocation.session.hooks().is_empty()) {\n\t\t\tconst outcome = await run_post_tool_use_hooks(\n\t\t\t\tinvocation.session,\n\t\t\t\tinvocation.turn,\n\t\t\t\t{\n\t\t\t\t\ttool_use_id: postToolUsePayload.tool_use_id,\n\t\t\t\t\ttool_name: postToolUsePayload.tool_name,\n\t\t\t\t\ttool_input: postToolUsePayload.tool_input,\n\t\t\t\t\ttool_response: postToolUsePayload.tool_response,\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst replacementText =\n\t\t\t\t(outcome.should_stop\n\t\t\t\t\t? (outcome.feedback_message ?? outcome.stop_reason)\n\t\t\t\t\t: outcome.feedback_message) ?? null;\n\t\t\tif (replacementText) {\n\t\t\t\treturn new AnyToolResult(\n\t\t\t\t\tinvocation.call_id,\n\t\t\t\t\tinvocation.payload,\n\t\t\t\t\tFunctionToolOutput.fromText(replacementText, null),\n\t\t\t\t\tpostToolUsePayload,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn new AnyToolResult(\n\t\t\tinvocation.call_id,\n\t\t\tinvocation.payload,\n\t\t\tresult,\n\t\t\tpostToolUsePayload,\n\t\t);\n\t}\n}\n\nfunction defaultPreToolUsePayload(\n\tinvocation: ToolInvocation,\n\tdisplayName: string,\n): PreToolUsePayload {\n\treturn {\n\t\ttool_name: displayName,\n\t\ttool_input: hookToolInputFromPayload(invocation.payload),\n\t};\n}\n\nfunction hookToolInputFromPayload(payload: ToolPayload): unknown {\n\tswitch (payload.type) {\n\t\tcase \"function\":\n\t\t\treturn parseJsonOrRaw(payload.arguments);\n\t\tcase \"tool_search\":\n\t\t\treturn payload.arguments;\n\t\tcase \"custom\":\n\t\t\treturn payload.input;\n\t\tcase \"local_shell\":\n\t\t\treturn payload.params;\n\t\tcase \"mcp\":\n\t\t\treturn {\n\t\t\t\tserver: payload.server,\n\t\t\t\ttool: payload.tool,\n\t\t\t\targuments: parseJsonOrRaw(payload.raw_arguments),\n\t\t\t};\n\t}\n}\n\nfunction parseJsonOrRaw(value: string): unknown {\n\ttry {\n\t\treturn JSON.parse(value) as unknown;\n\t} catch {\n\t\treturn value;\n\t}\n}\n\nfunction functionToolResponse(\n\tcallId: string,\n\tpayload: ToolPayload,\n\tbody: FunctionCallOutputContentItem[],\n\tsuccess?: boolean | null,\n): ResponseInputItem {\n\tconst output: FunctionCallOutputPayload = {\n\t\tbody: functionCallOutputBody(body),\n\t\tsuccess,\n\t};\n\n\tif (payload.type === \"custom\") {\n\t\treturn {\n\t\t\ttype: \"custom_tool_call_output\",\n\t\t\tcall_id: callId,\n\t\t\tname: null,\n\t\t\toutput,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: \"function_call_output\",\n\t\tcall_id: callId,\n\t\toutput,\n\t};\n}\n\nfunction functionCallOutputBody(\n\tbody: FunctionCallOutputContentItem[],\n): FunctionCallOutputBody {\n\tif (body.length === 1 && body[0]?.type === \"input_text\") {\n\t\treturn {\n\t\t\ttype: \"text\",\n\t\t\ttext: body[0].text,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: \"content_items\",\n\t\titems: body,\n\t};\n}\n\nfunction functionCallOutputPayloadToText(payload: FunctionCallOutputPayload): string {\n\tif (payload.body.type === \"text\") {\n\t\treturn payload.body.text;\n\t}\n\treturn contentItemsToText(payload.body.items);\n}\n\nfunction contentItemsToText(items: FunctionCallOutputContentItem[]): string {\n\treturn items\n\t\t.map((item) => (item.type === \"input_text\" ? item.text : item.image_url))\n\t\t.filter((text) => text.trim().length > 0)\n\t\t.join(\"\\n\");\n}\n\nfunction mcpResultToText(result: unknown): string {\n\tif (typeof result === \"string\") {\n\t\treturn result;\n\t}\n\tif (isRecord(result)) {\n\t\tconst content = result.content;\n\t\tif (Array.isArray(content)) {\n\t\t\tconst text = content\n\t\t\t\t.flatMap((item) => {\n\t\t\t\t\tif (!isRecord(item)) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof item.text === \"string\") {\n\t\t\t\t\t\treturn [item.text];\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof item.data === \"string\") {\n\t\t\t\t\t\treturn [item.data];\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof item.url === \"string\") {\n\t\t\t\t\t\treturn [item.url];\n\t\t\t\t\t}\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (text.length > 0) {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t}\n\ttry {\n\t\treturn JSON.stringify(result) ?? String(result);\n\t} catch {\n\t\treturn String(result);\n\t}\n}\n\nfunction isMcpErrorResult(result: unknown): boolean {\n\treturn isRecord(result) && result.isError === true;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction unsupportedToolCallMessage(\n\tpayload: ToolPayload,\n\ttoolName: ToolName,\n): string {\n\tconst displayName = toolName.display();\n\tif (payload.type === \"custom\") {\n\t\treturn `unsupported custom tool call: ${displayName}`;\n\t}\n\n\treturn `unsupported call: ${displayName}`;\n}\n","import type { ToolCall } from \"./router\";\nimport { ToolName } from \"./tool_name\";\n\nexport class ToolDispatchTrace {\n\treadonly events: Array<{\n\t\ttype: \"started\" | \"completed\" | \"failed\";\n\t\tcall_id: string;\n\t\ttool_name: string;\n\t\tmessage?: string;\n\t}> = [];\n\n\tstart(call: ToolCall): void {\n\t\tthis.events.push({\n\t\t\ttype: \"started\",\n\t\t\tcall_id: call.call_id,\n\t\t\ttool_name: ToolName.from(call.tool_name).display(),\n\t\t});\n\t}\n\n\trecord_completed(call: ToolCall): void {\n\t\tthis.events.push({\n\t\t\ttype: \"completed\",\n\t\t\tcall_id: call.call_id,\n\t\t\ttool_name: ToolName.from(call.tool_name).display(),\n\t\t});\n\t}\n\n\trecord_failed(call: ToolCall, error: Error): void {\n\t\tthis.events.push({\n\t\t\ttype: \"failed\",\n\t\t\tcall_id: call.call_id,\n\t\t\ttool_name: ToolName.from(call.tool_name).display(),\n\t\t\tmessage: error.message,\n\t\t});\n\t}\n}\n","import type { ResponseInputItem } from \"../protocol\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport {\n\tAnyToolResult,\n\tFunctionCallError,\n\tFunctionCallErrorKind,\n\tFunctionToolOutput,\n\ttype ToolPayload,\n\ttype ToolOutput,\n\ttype ToolCallSource,\n} from \"./context\";\nimport { type ToolCall, type ToolRouter } from \"./router\";\nimport { ToolDispatchTrace } from \"./tool_dispatch_trace\";\n\nexport type ToolCallRuntimeParams = {\n\trouter: ToolRouter;\n\tsession: Session;\n\tturn: TurnContext;\n};\n\nexport class AbortedToolOutput implements ToolOutput {\n\tconstructor(readonly message: string) {}\n\n\tlogPreview(): string {\n\t\treturn this.message;\n\t}\n\n\tsuccessForLogging(): boolean {\n\t\treturn false;\n\t}\n\n\ttoResponseItem(callId: string, payload: ToolPayload): ResponseInputItem {\n\t\tif (payload.type === \"tool_search\") {\n\t\t\treturn {\n\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\tcall_id: callId,\n\t\t\t\tstatus: \"completed\",\n\t\t\t\texecution: \"client\",\n\t\t\t\ttools: [],\n\t\t\t};\n\t\t}\n\n\t\treturn FunctionToolOutput.fromText(this.message, null).toResponseItem(\n\t\t\tcallId,\n\t\t\tpayload,\n\t\t);\n\t}\n\n\tpostToolUseResponse(): unknown | null {\n\t\treturn null;\n\t}\n\n\tcodeModeResult(): unknown {\n\t\treturn {};\n\t}\n}\n\nexport class ToolCallRuntime {\n\tprivate readonly parallelExecution = new ReadWriteExecutionGate();\n\n\tconstructor(private readonly params: ToolCallRuntimeParams) {}\n\n\tfind_spec(toolName: Parameters<ToolRouter[\"find_spec\"]>[0]) {\n\t\treturn this.params.router.find_spec(toolName);\n\t}\n\n\tcreate_diff_consumer(toolName: Parameters<ToolRouter[\"createDiffConsumer\"]>[0]) {\n\t\treturn this.params.router.createDiffConsumer(toolName);\n\t}\n\n\tasync handle_tool_call(\n\t\tcall: ToolCall,\n\t\tsignal?: AbortSignal,\n\t): Promise<ResponseInputItem> {\n\t\ttry {\n\t\t\tconst result = await this.handle_tool_call_with_source(\n\t\t\t\tcall,\n\t\t\t\t{ type: \"direct\" },\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn result.intoResponse();\n\t\t} catch (error) {\n\t\t\tif (isFunctionCallError(error)) {\n\t\t\t\tif (error.kind === FunctionCallErrorKind.Fatal) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\treturn ToolCallRuntime.failureResponse(call, error);\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync handle_tool_call_with_source(\n\t\tcall: ToolCall,\n\t\tsource: ToolCallSource = { type: \"direct\" },\n\t\tsignal?: AbortSignal,\n\t\ttrace = new ToolDispatchTrace(),\n\t): Promise<AnyToolResult> {\n\t\tconst startedAt = Date.now();\n\n\t\tif (signal?.aborted) {\n\t\t\treturn ToolCallRuntime.abortedResponse(call, 0.1);\n\t\t}\n\n\t\ttrace.start(call);\n\t\tconst run = async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.raceAbort(\n\t\t\t\t\tthis.params.router.dispatch_tool_call_with_code_mode_result({\n\t\t\t\t\t\tsession: this.params.session,\n\t\t\t\t\t\tturn: this.params.turn,\n\t\t\t\t\t\tcall,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t}),\n\t\t\t\t\tcall,\n\t\t\t\t\tstartedAt,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\ttrace.record_completed(call);\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\ttrace.record_failed(call, error);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t};\n\n\t\tconst release = await (this.params.router.tool_supports_parallel(call)\n\t\t\t? this.parallelExecution.read()\n\t\t\t: this.parallelExecution.write());\n\t\ttry {\n\t\t\treturn await run();\n\t\t} finally {\n\t\t\trelease();\n\t\t}\n\t}\n\n\tstatic failureResponse(\n\t\tcall: ToolCall,\n\t\terror: FunctionCallError,\n\t): ResponseInputItem {\n\t\tconst message = error.message;\n\t\tif (call.payload.type === \"tool_search\") {\n\t\t\treturn {\n\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\tcall_id: call.call_id,\n\t\t\t\tstatus: \"completed\",\n\t\t\t\texecution: \"client\",\n\t\t\t\ttools: [],\n\t\t\t};\n\t\t}\n\n\t\treturn FunctionToolOutput.fromText(message, false).toResponseItem(\n\t\t\tcall.call_id,\n\t\t\tcall.payload,\n\t\t);\n\t}\n\n\tstatic abortedResponse(call: ToolCall, secs: number): AnyToolResult {\n\t\treturn new AnyToolResult(\n\t\t\tcall.call_id,\n\t\t\tcall.payload,\n\t\t\tnew AbortedToolOutput(ToolCallRuntime.abortMessage(call, secs)),\n\t\t\tnull,\n\t\t);\n\t}\n\n\tprivate async raceAbort(\n\t\tpromise: Promise<AnyToolResult>,\n\t\tcall: ToolCall,\n\t\tstartedAt: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<AnyToolResult> {\n\t\tif (!signal) {\n\t\t\treturn promise;\n\t\t}\n\n\t\tif (signal.aborted) {\n\t\t\treturn ToolCallRuntime.abortedResponse(call, 0.1);\n\t\t}\n\n\t\treturn Promise.race([\n\t\t\tpromise,\n\t\t\tnew Promise<AnyToolResult>((resolve) => {\n\t\t\t\tsignal.addEventListener(\n\t\t\t\t\t\"abort\",\n\t\t\t\t\t() => {\n\t\t\t\t\t\tconst elapsedSeconds = Math.max(\n\t\t\t\t\t\t\t0.1,\n\t\t\t\t\t\t\t(Date.now() - startedAt) / 1000,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresolve(ToolCallRuntime.abortedResponse(call, elapsedSeconds));\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true },\n\t\t\t\t);\n\t\t\t}),\n\t\t]);\n\t}\n\n\tprivate static abortMessage(call: ToolCall, secs: number): string {\n\t\tif (\n\t\t\tcall.tool_name.namespace === null &&\n\t\t\t[\"shell\", \"container.exec\", \"local_shell\", \"shell_command\", \"unified_exec\"].includes(\n\t\t\t\tcall.tool_name.name,\n\t\t\t)\n\t\t) {\n\t\t\treturn `Wall time: ${secs.toFixed(1)} seconds\\naborted by user`;\n\t\t}\n\n\t\treturn `aborted by user after ${secs.toFixed(1)}s`;\n\t}\n}\n\ntype QueuedExecution = {\n\tkind: \"read\" | \"write\";\n\tresolve: (release: () => void) => void;\n};\n\nclass ReadWriteExecutionGate {\n\tprivate activeReaders = 0;\n\tprivate writerActive = false;\n\tprivate readonly queue: QueuedExecution[] = [];\n\n\tread(): Promise<() => void> {\n\t\treturn this.acquire(\"read\");\n\t}\n\n\twrite(): Promise<() => void> {\n\t\treturn this.acquire(\"write\");\n\t}\n\n\tprivate acquire(kind: \"read\" | \"write\"): Promise<() => void> {\n\t\tif (this.canGrantImmediately(kind)) {\n\t\t\tthis.grant(kind);\n\t\t\treturn Promise.resolve(() => this.release(kind));\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.queue.push({ kind, resolve });\n\t\t\tthis.drain();\n\t\t});\n\t}\n\n\tprivate canGrantImmediately(kind: \"read\" | \"write\"): boolean {\n\t\tif (kind === \"read\") {\n\t\t\treturn !this.writerActive && !this.queue.some((entry) => entry.kind === \"write\");\n\t\t}\n\t\treturn !this.writerActive && this.activeReaders === 0 && this.queue.length === 0;\n\t}\n\n\tprivate drain(): void {\n\t\tif (this.writerActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this.queue[0];\n\t\tif (!next) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (next.kind === \"write\") {\n\t\t\tif (this.activeReaders > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.queue.shift();\n\t\t\tthis.grant(\"write\");\n\t\t\tnext.resolve(() => this.release(\"write\"));\n\t\t\treturn;\n\t\t}\n\n\t\twhile (this.queue[0]?.kind === \"read\" && !this.writerActive) {\n\t\t\tconst read = this.queue.shift() as QueuedExecution;\n\t\t\tthis.grant(\"read\");\n\t\t\tread.resolve(() => this.release(\"read\"));\n\t\t}\n\t}\n\n\tprivate grant(kind: \"read\" | \"write\"): void {\n\t\tif (kind === \"read\") {\n\t\t\tthis.activeReaders += 1;\n\t\t\treturn;\n\t\t}\n\t\tthis.writerActive = true;\n\t}\n\n\tprivate release(kind: \"read\" | \"write\"): void {\n\t\tif (kind === \"read\") {\n\t\t\tthis.activeReaders = Math.max(0, this.activeReaders - 1);\n\t\t} else {\n\t\t\tthis.writerActive = false;\n\t\t}\n\t\tthis.drain();\n\t}\n}\n\nfunction isFunctionCallError(error: unknown): error is FunctionCallError {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"kind\" in error &&\n\t\t\"message\" in error\n\t);\n}\n","import type { DynamicToolSpec } from \"../protocol/dynamic_tools\";\nimport type { JsonSchema } from \"./tool_spec\";\n\nexport type FreeformTool = {\n\tname: string;\n\tdescription: string;\n\tformat: {\n\t\ttype: string;\n\t\tsyntax: string;\n\t\tdefinition: string;\n\t};\n};\n\nexport type ResponsesApiTool = {\n\tname: string;\n\tdescription: string;\n\tstrict: boolean;\n\tdefer_loading?: boolean;\n\tparameters: JsonSchema;\n};\n\nexport type ResponsesApiFunctionTool = ResponsesApiTool & {\n\ttype: \"function\";\n};\n\nexport type LoadableToolSpec =\n\t| ResponsesApiFunctionTool\n\t| (ResponsesApiNamespace & { type: \"namespace\" });\n\nexport type ResponsesApiNamespace = {\n\tname: string;\n\tdescription: string;\n\ttools: ResponsesApiNamespaceTool[];\n};\n\nexport type ResponsesApiNamespaceTool = ResponsesApiFunctionTool;\n\nexport function default_namespace_description(namespaceName: string): string {\n\treturn `Tools in the ${namespaceName} namespace.`;\n}\n\nexport function dynamic_tool_to_responses_api_tool(\n\ttool: DynamicToolSpec,\n): ResponsesApiTool {\n\treturn {\n\t\tname: tool.name,\n\t\tdescription: tool.description,\n\t\tstrict: false,\n\t\t...(tool.defer_loading ? { defer_loading: true } : {}),\n\t\tparameters: tool.input_schema,\n\t};\n}\n\nexport function dynamic_tool_to_loadable_tool_spec(\n\ttool: DynamicToolSpec,\n): LoadableToolSpec {\n\tconst outputTool = {\n\t\ttype: \"function\",\n\t\t...dynamic_tool_to_responses_api_tool(tool),\n\t} satisfies ResponsesApiFunctionTool;\n\n\treturn tool.namespace\n\t\t? {\n\t\t\t\ttype: \"namespace\",\n\t\t\t\tname: tool.namespace,\n\t\t\t\tdescription: default_namespace_description(tool.namespace),\n\t\t\t\ttools: [outputTool],\n\t\t\t}\n\t\t: outputTool;\n}\n\nexport function coalesce_loadable_tool_specs(\n\tspecs: Iterable<LoadableToolSpec>,\n): LoadableToolSpec[] {\n\tconst coalescedSpecs: LoadableToolSpec[] = [];\n\n\tfor (const spec of specs) {\n\t\tif (spec.type === \"function\") {\n\t\t\tcoalescedSpecs.push(spec);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst existingNamespace = coalescedSpecs.find(\n\t\t\t(candidate): candidate is LoadableToolSpec & { type: \"namespace\" } =>\n\t\t\t\tcandidate.type === \"namespace\" && candidate.name === spec.name,\n\t\t);\n\n\t\tif (existingNamespace) {\n\t\t\texistingNamespace.tools.push(...spec.tools);\n\t\t\tcontinue;\n\t\t}\n\n\t\tcoalescedSpecs.push({\n\t\t\t...spec,\n\t\t\ttools: [...spec.tools],\n\t\t});\n\t}\n\n\treturn coalescedSpecs;\n}\n","import type { DynamicToolSpec } from \"../protocol\";\nimport {\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n\ttype McpToolInfo,\n} from \"../mcp\";\nimport type { ToolsConfig } from \"./spec_plan_types\";\nimport {\n\tcoalesce_loadable_tool_specs,\n\tdynamic_tool_to_loadable_tool_spec,\n\ttype LoadableToolSpec,\n} from \"./responses_api\";\nimport { ToolName } from \"./tool_name\";\nimport { qualify_tool_infos } from \"../../../codex-mcp/src/tools\";\n\nexport const TOOL_SEARCH_TOOL_NAME = \"tool_search\";\nexport const TOOL_SEARCH_DEFAULT_LIMIT = 8;\n\nexport type ToolSearchSourceInfo = {\n\tname: string;\n\tdescription?: string | null;\n};\n\nexport type DiscoverableTool = {\n\tname: string;\n\ttitle?: string | null;\n\tdescription: string;\n\tsource: string;\n\tinput_schema?: unknown;\n\tserver_name?: string | null;\n\ttool_name?: string | null;\n\tmcp_app_resource_uri?: string | null;\n};\n\nexport type ToolSearchEntry = {\n\tlimit_bucket?: string | null;\n\toutput: LoadableToolSpec;\n\tsearch_text: string;\n};\n\nexport function build_tool_search_entries(input: {\n\tdynamic_tools: readonly DynamicToolSpec[];\n\tmcp_tools?: readonly McpToolInfo[];\n}): ToolSearchEntry[] {\n\tconst entries: ToolSearchEntry[] = [];\n\tconst mcpTools = qualify_tool_infos(input.mcp_tools ?? []).sort((a, b) =>\n\t\tToolName.namespaced(mcpToolCallableNamespace(a), mcpToolCallableName(a))\n\t\t\t.display()\n\t\t\t.localeCompare(\n\t\t\t\tToolName.namespaced(\n\t\t\t\t\tmcpToolCallableNamespace(b),\n\t\t\t\t\tmcpToolCallableName(b),\n\t\t\t\t).display(),\n\t\t\t),\n\t);\n\tfor (const tool of mcpTools) {\n\t\tentries.push(mcp_tool_to_tool_search_entry(tool));\n\t}\n\n\tconst dynamicTools = [...input.dynamic_tools].sort((a, b) =>\n\t\t(a.namespace ?? \"\")\n\t\t\t.localeCompare(b.namespace ?? \"\") || a.name.localeCompare(b.name),\n\t);\n\tfor (const tool of dynamicTools) {\n\t\tentries.push(dynamic_tool_to_tool_search_entry(tool));\n\t}\n\n\treturn entries;\n}\n\nexport function build_tool_search_entries_for_config(\n\tconfig: ToolsConfig,\n\tmcp_tools: readonly McpToolInfo[] | null | undefined,\n\tdynamic_tools: readonly DynamicToolSpec[],\n): ToolSearchEntry[] {\n\treturn build_tool_search_entries({\n\t\tdynamic_tools: dynamic_tools.filter(\n\t\t\t(tool) =>\n\t\t\t\ttool.defer_loading && (config.namespace_tools || tool.namespace == null),\n\t\t),\n\t\tmcp_tools: config.namespace_tools ? (mcp_tools ?? []) : [],\n\t});\n}\n\nexport function dynamic_tool_to_tool_search_entry(\n\ttool: DynamicToolSpec,\n): ToolSearchEntry {\n\treturn {\n\t\tsearch_text: build_dynamic_search_text(tool),\n\t\toutput: dynamic_tool_to_loadable_tool_spec(tool),\n\t\tlimit_bucket: null,\n\t};\n}\n\nexport function mcp_tool_to_tool_search_entry(\n\ttool: McpToolInfo,\n): ToolSearchEntry {\n\treturn {\n\t\tsearch_text: build_mcp_search_text(tool),\n\t\toutput: mcp_tool_to_loadable_tool_spec(tool),\n\t\tlimit_bucket: tool.server_name,\n\t};\n}\n\nexport function tool_search_source_info_for_dynamic_tools(\n\ttools: readonly DynamicToolSpec[],\n): ToolSearchSourceInfo[] {\n\treturn tools.length > 0\n\t\t? [\n\t\t\t\t{\n\t\t\t\t\tname: \"Dynamic tools\",\n\t\t\t\t\tdescription: \"Tools provided by the current Codex thread.\",\n\t\t\t\t},\n\t\t\t]\n\t\t: [];\n}\n\nexport function tool_search_source_info_for_mcp_tools(\n\ttools: readonly McpToolInfo[],\n): ToolSearchSourceInfo[] {\n\treturn tools.flatMap((tool) => {\n\t\tconst name =\n\t\t\tnormalizeSearchSource(tool.connector_name) ??\n\t\t\tnormalizeSearchSource(tool.source_label) ??\n\t\t\tnormalizeSearchSource(tool.server_name);\n\t\treturn name\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdescription: normalizeSearchSource(tool.namespace_description),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: [];\n\t});\n}\n\nexport function tool_search_outputs(\n\tentries: readonly ToolSearchEntry[],\n): LoadableToolSpec[] {\n\treturn coalesce_loadable_tool_specs(entries.map((entry) => entry.output));\n}\n\nfunction mcp_tool_to_loadable_tool_spec(tool: McpToolInfo): LoadableToolSpec {\n\treturn {\n\t\ttype: \"namespace\",\n\t\tname: mcpToolCallableNamespace(tool),\n\t\tdescription: mcp_tool_namespace_description(tool),\n\t\ttools: [\n\t\t\t{\n\t\t\t\ttype: \"function\",\n\t\t\t\tname: mcpToolCallableName(tool),\n\t\t\t\tdescription:\n\t\t\t\t\ttool.description ?? `Call MCP tool ${tool.server_name}.${tool.name}.`,\n\t\t\t\tstrict: false,\n\t\t\t\tparameters: tool.input_schema ?? { type: \"object\" },\n\t\t\t\tdefer_loading: true,\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction build_dynamic_search_text(tool: DynamicToolSpec): string {\n\tconst parts = [\n\t\ttool.name,\n\t\ttool.name.replaceAll(\"_\", \" \"),\n\t\ttool.description,\n\t\t...(tool.namespace ? [tool.namespace] : []),\n\t\t...schemaPropertyNames(tool.input_schema),\n\t];\n\treturn parts.join(\" \");\n}\n\nfunction build_mcp_search_text(tool: McpToolInfo): string {\n\tconst namespace = mcpToolCallableNamespace(tool);\n\tconst callableName = mcpToolCallableName(tool);\n\tconst name = ToolName.namespaced(namespace, callableName).display();\n\tconst parts = [\n\t\tname,\n\t\tcallableName,\n\t\ttool.name,\n\t\ttool.server_name,\n\t\tnamespace,\n\t\t...(tool.title ? [tool.title] : []),\n\t\t...(tool.description ? [tool.description] : []),\n\t\t...(tool.source_label ? [tool.source_label] : []),\n\t\t...(tool.connector_name ? [tool.connector_name] : []),\n\t\t...(tool.namespace_description ? [tool.namespace_description] : []),\n\t\t...(tool.plugin_display_names ?? []),\n\t\t...schemaPropertyNames(tool.input_schema),\n\t];\n\treturn parts.join(\" \");\n}\n\nfunction mcp_tool_namespace_description(tool: McpToolInfo): string {\n\tconst namespaceDescription = normalizeSearchSource(tool.namespace_description);\n\tif (namespaceDescription) {\n\t\treturn namespaceDescription;\n\t}\n\tconst connectorName = normalizeSearchSource(tool.connector_name);\n\tif (connectorName) {\n\t\treturn `Tools for working with ${connectorName}.`;\n\t}\n\treturn `MCP tools provided by ${tool.source_label ?? mcpToolCallableNamespace(tool)}.`;\n}\n\nfunction normalizeSearchSource(value?: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : null;\n}\n\nfunction schemaPropertyNames(schema: unknown): string[] {\n\tif (!schema || typeof schema !== \"object\" || !(\"properties\" in schema)) {\n\t\treturn [];\n\t}\n\tconst properties = (schema as { properties?: unknown }).properties;\n\treturn properties && typeof properties === \"object\"\n\t\t? Object.keys(properties)\n\t\t: [];\n}\n","import type { FileChange, FileChangeTurnItem } from \"../items\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport type { ExecToolCallOutput } from \"../exec-output\";\n\nexport type ToolEventCtx = {\n\tsession: Session;\n\tturn: TurnContext;\n\tcall_id: string;\n};\n\nexport type ToolEventFailure =\n\t| { type: \"output\"; output: ExecToolCallOutput }\n\t| { type: \"message\"; message: string }\n\t| { type: \"rejected\"; message: string };\n\nexport type ToolEventStage =\n\t| { type: \"begin\" }\n\t| { type: \"success\"; output: ExecToolCallOutput }\n\t| { type: \"failure\"; failure: ToolEventFailure };\n\nexport type ToolEmitter =\n\t| {\n\t\t\ttype: \"unified_exec\";\n\t\t\tcommand: string[];\n\t\t\tcwd: string;\n\t\t\tprocess_id?: string | null;\n\t }\n\t| {\n\t\t\ttype: \"apply_patch\";\n\t\t\tchanges: Record<string, FileChange>;\n\t\t\tauto_approved?: boolean;\n\t };\n\nexport const ToolEmitter = {\n\tunified_exec(input: {\n\t\tcommand: string[];\n\t\tcwd: string;\n\t\tprocess_id?: string | null;\n\t}): ToolEmitter {\n\t\treturn { type: \"unified_exec\", ...input };\n\t},\n\n\tapply_patch(input: {\n\t\tchanges: Record<string, FileChange>;\n\t\tauto_approved?: boolean;\n\t}): ToolEmitter {\n\t\treturn { type: \"apply_patch\", ...input };\n\t},\n};\n\nexport async function emitToolEvent(\n\temitter: ToolEmitter,\n\tctx: ToolEventCtx,\n\tstage: ToolEventStage,\n): Promise<void> {\n\tif (emitter.type === \"unified_exec\") {\n\t\tawait emitUnifiedExecEvent(emitter, ctx, stage);\n\t\treturn;\n\t}\n\tawait emitApplyPatchEvent(emitter, ctx, stage);\n}\n\nasync function emitUnifiedExecEvent(\n\temitter: Extract<ToolEmitter, { type: \"unified_exec\" }>,\n\tctx: ToolEventCtx,\n\tstage: ToolEventStage,\n): Promise<void> {\n\tswitch (stage.type) {\n\t\tcase \"begin\":\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"exec_command_begin\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tprocess_id: emitter.process_id ?? null,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tstarted_at_ms: Date.now(),\n\t\t\t\tcommand: emitter.command,\n\t\t\t\tcwd: emitter.cwd,\n\t\t\t\tparsed_cmd: [],\n\t\t\t\tsource: \"model\",\n\t\t\t\tinteraction_input: null,\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"success\":\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"exec_command_end\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tprocess_id: emitter.process_id ?? null,\n\t\t\t\tcompleted_at_ms: Date.now(),\n\t\t\t\texit_code: stage.output.exit_code,\n\t\t\t\tstatus: stage.output.exit_code === 0 ? \"completed\" : \"failed\",\n\t\t\t\tduration_ms: stage.output.duration_ms,\n\t\t\t\tstdout: stage.output.stdout.text,\n\t\t\t\tstderr: stage.output.stderr.text,\n\t\t\t\toutput: stage.output,\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"failure\": {\n\t\t\tconst output =\n\t\t\t\tstage.failure.type === \"output\" ? stage.failure.output : null;\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"exec_command_end\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tprocess_id: emitter.process_id ?? null,\n\t\t\t\tcompleted_at_ms: Date.now(),\n\t\t\t\texit_code: output?.exit_code ?? 1,\n\t\t\t\tstatus: stage.failure.type === \"rejected\" ? \"cancelled\" : \"failed\",\n\t\t\t\tduration_ms: output?.duration_ms ?? null,\n\t\t\t\tstdout: output?.stdout.text ?? \"\",\n\t\t\t\tstderr:\n\t\t\t\t\toutput?.stderr.text ??\n\t\t\t\t\t(stage.failure.type === \"message\" || stage.failure.type === \"rejected\"\n\t\t\t\t\t\t? stage.failure.message\n\t\t\t\t\t\t: \"\"),\n\t\t\t\toutput,\n\t\t\t});\n\t\t}\n\t}\n}\n\nasync function emitApplyPatchEvent(\n\temitter: Extract<ToolEmitter, { type: \"apply_patch\" }>,\n\tctx: ToolEventCtx,\n\tstage: ToolEventStage,\n): Promise<void> {\n\tconst baseItem: FileChangeTurnItem = {\n\t\ttype: \"FileChange\",\n\t\tid: ctx.call_id,\n\t\tchanges: emitter.changes,\n\t\tstatus: null,\n\t\tauto_approved: emitter.auto_approved ?? false,\n\t\tstdout: \"\",\n\t\tstderr: \"\",\n\t};\n\n\tswitch (stage.type) {\n\t\tcase \"begin\":\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"item_started\",\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\titem: baseItem,\n\t\t\t});\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"patch_apply_updated\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tchanges: emitter.changes,\n\t\t\t\tstatus: null,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"\",\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"success\":\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"item_completed\",\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\titem: {\n\t\t\t\t\t...baseItem,\n\t\t\t\t\tstatus: stage.output.exit_code === 0 ? \"completed\" : \"failed\",\n\t\t\t\t\tstdout: stage.output.stdout.text,\n\t\t\t\t\tstderr: stage.output.stderr.text,\n\t\t\t\t},\n\t\t\t});\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"patch_apply_updated\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tchanges: emitter.changes,\n\t\t\t\tstatus: stage.output.exit_code === 0 ? \"completed\" : \"failed\",\n\t\t\t\tstdout: stage.output.stdout.text,\n\t\t\t\tstderr: stage.output.stderr.text,\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"failure\":\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"item_completed\",\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\titem: {\n\t\t\t\t\t...baseItem,\n\t\t\t\t\tstatus: stage.failure.type === \"rejected\" ? \"declined\" : \"failed\",\n\t\t\t\t\tstderr:\n\t\t\t\t\t\tstage.failure.type === \"output\"\n\t\t\t\t\t\t\t? stage.failure.output.stderr.text\n\t\t\t\t\t\t\t: stage.failure.message,\n\t\t\t\t},\n\t\t\t});\n\t\t\tawait ctx.session.send_event(ctx.turn, {\n\t\t\t\ttype: \"patch_apply_updated\",\n\t\t\t\tcall_id: ctx.call_id,\n\t\t\t\tturn_id: ctx.turn.sub_id,\n\t\t\t\tchanges: emitter.changes,\n\t\t\t\tstatus: stage.failure.type === \"rejected\" ? \"declined\" : \"failed\",\n\t\t\t\tstdout:\n\t\t\t\t\tstage.failure.type === \"output\"\n\t\t\t\t\t\t? stage.failure.output.stdout.text\n\t\t\t\t\t\t: \"\",\n\t\t\t\tstderr:\n\t\t\t\t\tstage.failure.type === \"output\"\n\t\t\t\t\t\t? stage.failure.output.stderr.text\n\t\t\t\t\t\t: stage.failure.message,\n\t\t\t});\n\t}\n}\n","import type { FileChange } from \"../../items\";\nimport { execToolCallOutput } from \"../../exec-output\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { emitToolEvent, ToolEmitter } from \"../events\";\nimport { ToolName } from \"../tool_name\";\n\nexport const APPLY_PATCH_TOOL_NAME = \"apply_patch\";\n\nconst EXECUTOR_UNAVAILABLE =\n\t\"tool execution is unavailable in this Codex assistant runtime; a desktop/local executor is required.\";\n\nexport class ApplyPatchHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(APPLY_PATCH_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync isMutating(): Promise<boolean> {\n\t\treturn true;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst args = parseFunctionArgs<ApplyPatchArgs>(\n\t\t\tinvocation,\n\t\t\tAPPLY_PATCH_TOOL_NAME,\n\t\t);\n\t\tconst patch = args.patch?.trim();\n\t\tif (!patch) {\n\t\t\tthrow FunctionCallError.respondToModel(\"apply_patch requires `patch`\");\n\t\t}\n\n\t\tconst changes = parseApplyPatchChanges(patch);\n\t\tconst emitter = ToolEmitter.apply_patch({\n\t\t\tchanges,\n\t\t\tauto_approved: false,\n\t\t});\n\t\tawait emitToolEvent(emitter, eventCtx(invocation), { type: \"begin\" });\n\t\tconst output = execToolCallOutput({\n\t\t\texit_code: 1,\n\t\t\tstderr: EXECUTOR_UNAVAILABLE,\n\t\t});\n\t\tawait emitToolEvent(emitter, eventCtx(invocation), {\n\t\t\ttype: \"failure\",\n\t\t\tfailure: { type: \"output\", output },\n\t\t});\n\t\treturn FunctionToolOutput.fromText(EXECUTOR_UNAVAILABLE, false);\n\t}\n}\n\nexport type ApplyPatchArgs = {\n\tpatch?: string;\n};\n\nexport function parseApplyPatchChanges(patch: string): Record<string, FileChange> {\n\tconst changes: Record<string, FileChange> = {};\n\tconst lines = patch.split(/\\r?\\n/u);\n\tlet index = 0;\n\n\twhile (index < lines.length) {\n\t\tconst line = lines[index] ?? \"\";\n\t\tif (line.startsWith(\"*** Add File: \")) {\n\t\t\tconst path = line.slice(\"*** Add File: \".length).trim();\n\t\t\tconst body: string[] = [];\n\t\t\tindex += 1;\n\t\t\twhile (index < lines.length && !isPatchHeader(lines[index] ?? \"\")) {\n\t\t\t\tconst contentLine = lines[index] ?? \"\";\n\t\t\t\tbody.push(\n\t\t\t\t\tcontentLine.startsWith(\"+\") ? contentLine.slice(1) : contentLine,\n\t\t\t\t);\n\t\t\t\tindex += 1;\n\t\t\t}\n\t\t\tchanges[path] = { type: \"add\", content: body.join(\"\\n\") };\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"*** Delete File: \")) {\n\t\t\tconst path = line.slice(\"*** Delete File: \".length).trim();\n\t\t\tchanges[path] = { type: \"delete\", content: \"\" };\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"*** Update File: \")) {\n\t\t\tconst path = line.slice(\"*** Update File: \".length).trim();\n\t\t\tconst body: string[] = [];\n\t\t\tlet movePath: string | null = null;\n\t\t\tindex += 1;\n\t\t\twhile (index < lines.length && !isPatchHeader(lines[index] ?? \"\")) {\n\t\t\t\tconst contentLine = lines[index] ?? \"\";\n\t\t\t\tif (contentLine.startsWith(\"*** Move to: \")) {\n\t\t\t\t\tmovePath = contentLine.slice(\"*** Move to: \".length).trim();\n\t\t\t\t} else {\n\t\t\t\t\tbody.push(contentLine);\n\t\t\t\t}\n\t\t\t\tindex += 1;\n\t\t\t}\n\t\t\tchanges[path] = {\n\t\t\t\ttype: \"update\",\n\t\t\t\tunified_diff: body.join(\"\\n\"),\n\t\t\t\tmove_path: movePath,\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tindex += 1;\n\t}\n\n\tif (Object.keys(changes).length === 0) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\"failed to parse apply_patch: no file changes found\",\n\t\t);\n\t}\n\n\treturn changes;\n}\n\nfunction isPatchHeader(line: string): boolean {\n\treturn (\n\t\tline.startsWith(\"*** Add File: \") ||\n\t\tline.startsWith(\"*** Delete File: \") ||\n\t\tline.startsWith(\"*** Update File: \") ||\n\t\tline === \"*** End Patch\"\n\t);\n}\n\nfunction parseFunctionArgs<T>(\n\tinvocation: ToolInvocation,\n\ttoolName: string,\n): T {\n\tif (invocation.payload.type !== \"function\") {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`${toolName} handler received unsupported payload`,\n\t\t);\n\t}\n\ttry {\n\t\treturn JSON.parse(invocation.payload.arguments) as T;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction eventCtx(invocation: ToolInvocation) {\n\treturn {\n\t\tsession: invocation.session,\n\t\tturn: invocation.turn,\n\t\tcall_id: invocation.call_id,\n\t};\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n","import { APPLY_PATCH_TOOL_NAME } from \"./apply_patch\";\n\nexport function create_apply_patch_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: APPLY_PATCH_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Apply a patch through the configured Codex executor. This Codex assistant runtime validates and previews patches, but requires a desktop/local executor before files can be changed.\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tpatch: { type: \"string\" },\n\t\t\t},\n\t\t\trequired: [\"patch\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n","import { execToolCallOutput } from \"../../../exec-output\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../../context\";\nimport { emitToolEvent, ToolEmitter } from \"../../events\";\nimport { ToolName } from \"../../tool_name\";\n\nexport const EXEC_COMMAND_TOOL_NAME = \"exec_command\";\n\nconst EXECUTOR_UNAVAILABLE =\n\t\"tool execution is unavailable in this Codex assistant runtime; a desktop/local executor is required.\";\n\nexport class ExecCommandHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(EXEC_COMMAND_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync isMutating(): Promise<boolean> {\n\t\treturn true;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst args = parseFunctionArgs<ExecCommandArgs>(\n\t\t\tinvocation,\n\t\t\tEXEC_COMMAND_TOOL_NAME,\n\t\t);\n\t\tconst command = args.cmd?.trim();\n\t\tif (!command) {\n\t\t\tthrow FunctionCallError.respondToModel(\"exec_command requires `cmd`\");\n\t\t}\n\n\t\tconst cwd = args.workdir?.trim() || invocation.turn.cwd;\n\t\tconst emitter = ToolEmitter.unified_exec({\n\t\t\tcommand: [command],\n\t\t\tcwd,\n\t\t});\n\t\tawait emitToolEvent(emitter, eventCtx(invocation), { type: \"begin\" });\n\t\tconst output = execToolCallOutput({\n\t\t\texit_code: 1,\n\t\t\tstderr: EXECUTOR_UNAVAILABLE,\n\t\t});\n\t\tawait emitToolEvent(emitter, eventCtx(invocation), {\n\t\t\ttype: \"failure\",\n\t\t\tfailure: { type: \"output\", output },\n\t\t});\n\t\treturn FunctionToolOutput.fromText(EXECUTOR_UNAVAILABLE, false);\n\t}\n}\n\nexport type ExecCommandArgs = {\n\tcmd?: string;\n\tworkdir?: string | null;\n};\n\nfunction parseFunctionArgs<T>(\n\tinvocation: ToolInvocation,\n\ttoolName: string,\n): T {\n\tif (invocation.payload.type !== \"function\") {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`${toolName} handler received unsupported payload`,\n\t\t);\n\t}\n\ttry {\n\t\treturn JSON.parse(invocation.payload.arguments) as T;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction eventCtx(invocation: ToolInvocation) {\n\treturn {\n\t\tsession: invocation.session,\n\t\tturn: invocation.turn,\n\t\tcall_id: invocation.call_id,\n\t};\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n","import {\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../../context\";\nimport { ToolName } from \"../../tool_name\";\n\nexport const WRITE_STDIN_TOOL_NAME = \"write_stdin\";\n\nconst EXECUTOR_UNAVAILABLE =\n\t\"tool execution is unavailable in this Codex assistant runtime; a desktop/local executor is required.\";\n\nexport class WriteStdinHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(WRITE_STDIN_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(EXECUTOR_UNAVAILABLE, false);\n\t}\n}\n\nfunction parseFunctionArgs(invocation: ToolInvocation): unknown {\n\tif (invocation.payload.type !== \"function\") {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(invocation.payload.arguments || \"{}\");\n\t} catch {\n\t\treturn {};\n\t}\n}\n","import { EXEC_COMMAND_TOOL_NAME } from \"./unified_exec/exec_command\";\nimport { WRITE_STDIN_TOOL_NAME } from \"./unified_exec/write_stdin\";\n\nexport function create_exec_command_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: EXEC_COMMAND_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Execute a shell command through the configured Codex executor. This Codex assistant runtime requires a desktop/local executor before commands can run.\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tcmd: { type: \"string\" },\n\t\t\t\tworkdir: { type: \"string\" },\n\t\t\t\tyield_time_ms: { type: \"number\" },\n\t\t\t\tmax_output_tokens: { type: \"number\" },\n\t\t\t\tsandbox_permissions: {},\n\t\t\t\tjustification: { type: \"string\" },\n\t\t\t\tprefix_rule: { type: \"array\", items: { type: \"string\" } },\n\t\t\t},\n\t\t\trequired: [\"cmd\"],\n\t\t\tadditionalProperties: true,\n\t\t},\n\t};\n}\n\nexport function create_write_stdin_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: WRITE_STDIN_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Write bytes to an existing Codex unified exec process. This Codex assistant runtime requires a desktop/local executor before stdin can be written.\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tprocess_id: { type: \"string\" },\n\t\t\t\tchars: { type: \"string\" },\n\t\t\t\tyield_time_ms: { type: \"number\" },\n\t\t\t\tmax_output_tokens: { type: \"number\" },\n\t\t\t},\n\t\t\trequired: [\"process_id\"],\n\t\t\tadditionalProperties: true,\n\t\t},\n\t};\n}\n","import {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ModeKind } from \"../../config-types\";\nimport type { UpdatePlanArgs } from \"../../protocol\";\nimport { ToolName } from \"../tool_name\";\n\nexport const PLAN_TOOL_NAME = \"update_plan\";\n\nexport class PlanHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(PLAN_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst { session, turn, payload } = invocation;\n\t\tif (payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"update_plan handler received unsupported payload\",\n\t\t\t);\n\t\t}\n\n\t\tif (turn.collaboration_mode?.mode === ModeKind.Plan) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"update_plan is a TODO/checklist tool and is not allowed in Plan mode\",\n\t\t\t);\n\t\t}\n\n\t\tconst args = parseUpdatePlanArguments(payload.arguments);\n\t\tawait session.send_event(turn, {\n\t\t\ttype: \"plan_update\",\n\t\t\texplanation: args.explanation ?? null,\n\t\t\tplan: args.plan,\n\t\t});\n\t\treturn FunctionToolOutput.fromText(\"Plan updated\", true);\n\t}\n}\n\nfunction parseUpdatePlanArguments(argumentsJson: string): UpdatePlanArgs {\n\ttry {\n\t\tconst parsed = JSON.parse(argumentsJson) as UpdatePlanArgs;\n\t\tif (!Array.isArray(parsed.plan)) {\n\t\t\tthrow new Error(\"missing field `plan`\");\n\t\t}\n\t\tfor (const item of parsed.plan) {\n\t\t\tif (\n\t\t\t\ttypeof item?.step !== \"string\" ||\n\t\t\t\t(item.status !== \"pending\" &&\n\t\t\t\t\titem.status !== \"in_progress\" &&\n\t\t\t\t\titem.status !== \"completed\")\n\t\t\t) {\n\t\t\t\tthrow new Error(\"invalid plan item\");\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${\n\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t}`,\n\t\t);\n\t}\n}\n","import { PLAN_TOOL_NAME } from \"./plan\";\n\nexport function create_update_plan_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: PLAN_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Updates the task plan.\\nProvide an optional explanation and a list of plan items, each with a step and status.\\nAt most one step can be in_progress at a time.\\n\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\texplanation: { type: \"string\" },\n\t\t\t\tplan: {\n\t\t\t\t\ttype: \"array\",\n\t\t\t\t\tdescription: \"The list of steps\",\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tstep: { type: \"string\" },\n\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tdescription: \"One of: pending, in_progress, completed\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequired: [\"step\", \"status\"],\n\t\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"plan\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport const create_plan_tool = create_update_plan_tool;\n","import {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n\ttype ToolPayload,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\n\nexport const LIST_MCP_RESOURCES_TOOL_NAME = \"list_mcp_resources\";\nexport const LIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME =\n\t\"list_mcp_resource_templates\";\nexport const READ_MCP_RESOURCE_TOOL_NAME = \"read_mcp_resource\";\n\ntype ParsedArguments = Record<string, unknown> | null;\n\nabstract class McpResourceHandler\n\timplements ToolHandler<FunctionToolOutput>\n{\n\tabstract toolName(): ToolName;\n\tabstract handleFunctionCall(invocation: ToolInvocation): Promise<FunctionToolOutput>;\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tif (invocation.payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t`${this.toolName().display()} handler received unsupported payload`,\n\t\t\t);\n\t\t}\n\t\treturn this.handleFunctionCall(invocation);\n\t}\n}\n\nexport class ListMcpResourcesHandler extends McpResourceHandler {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(LIST_MCP_RESOURCES_TOOL_NAME);\n\t}\n\n\tasync handleFunctionCall(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst args = parseOptionalObjectArguments(invocation.payload);\n\t\tconst server = normalize_optional_string(readString(args, \"server\"));\n\t\tconst cursor = normalize_optional_string(readString(args, \"cursor\"));\n\t\tif (!server && cursor) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"cursor can only be used when a server is specified\",\n\t\t\t);\n\t\t}\n\n\t\tconst mcpInvocation = {\n\t\t\tserver: server ?? \"codex\",\n\t\t\ttool: LIST_MCP_RESOURCES_TOOL_NAME,\n\t\t\targuments: args,\n\t\t};\n\t\tawait emit_mcp_resource_call_begin(invocation, mcpInvocation);\n\t\tconst startedAt = Date.now();\n\t\ttry {\n\t\t\tconst result = await invocation.session.list_resources({\n\t\t\t\tthread_id: invocation.session.threadId,\n\t\t\t\tserver_name: server,\n\t\t\t\tcursor,\n\t\t\t});\n\t\t\tconst payload = {\n\t\t\t\t...(server ? { server } : {}),\n\t\t\t\tresources: result.resources.map((resource) =>\n\t\t\t\t\t\"server\" in resource ? resource : { server, ...resource },\n\t\t\t\t),\n\t\t\t\t...(result.next_cursor ? { nextCursor: result.next_cursor } : {}),\n\t\t\t};\n\t\t\tconst output = serialize_function_output(payload);\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: true,\n\t\t\t\tresult: output.intoText(),\n\t\t\t});\n\t\t\treturn output;\n\t\t} catch (error) {\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: errorMessage(error),\n\t\t\t});\n\t\t\tthrow toRespondToModel(\"resources/list failed\", error);\n\t\t}\n\t}\n}\n\nexport class ListMcpResourceTemplatesHandler extends McpResourceHandler {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(LIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME);\n\t}\n\n\tasync handleFunctionCall(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst args = parseOptionalObjectArguments(invocation.payload);\n\t\tconst server = normalize_optional_string(readString(args, \"server\"));\n\t\tconst cursor = normalize_optional_string(readString(args, \"cursor\"));\n\t\tif (!server && cursor) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"cursor can only be used when a server is specified\",\n\t\t\t);\n\t\t}\n\n\t\tconst mcpInvocation = {\n\t\t\tserver: server ?? \"codex\",\n\t\t\ttool: LIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME,\n\t\t\targuments: args,\n\t\t};\n\t\tawait emit_mcp_resource_call_begin(invocation, mcpInvocation);\n\t\tconst startedAt = Date.now();\n\t\ttry {\n\t\t\tconst result = await invocation.session.list_resource_templates({\n\t\t\t\tthread_id: invocation.session.threadId,\n\t\t\t\tserver_name: server,\n\t\t\t\tcursor,\n\t\t\t});\n\t\t\tconst payload = {\n\t\t\t\t...(server ? { server } : {}),\n\t\t\t\tresourceTemplates: result.resource_templates.map((template) =>\n\t\t\t\t\t\"server\" in template ? template : { server, ...template },\n\t\t\t\t),\n\t\t\t\t...(result.next_cursor ? { nextCursor: result.next_cursor } : {}),\n\t\t\t};\n\t\t\tconst output = serialize_function_output(payload);\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: true,\n\t\t\t\tresult: output.intoText(),\n\t\t\t});\n\t\t\treturn output;\n\t\t} catch (error) {\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: errorMessage(error),\n\t\t\t});\n\t\t\tthrow toRespondToModel(\"resources/templates/list failed\", error);\n\t\t}\n\t}\n}\n\nexport class ReadMcpResourceHandler extends McpResourceHandler {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(READ_MCP_RESOURCE_TOOL_NAME);\n\t}\n\n\tasync handleFunctionCall(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst args = parseRequiredObjectArguments(invocation.payload);\n\t\tconst server = normalize_required_string(\"server\", readString(args, \"server\"));\n\t\tconst uri = normalize_required_string(\"uri\", readString(args, \"uri\"));\n\t\tconst mcpInvocation = {\n\t\t\tserver,\n\t\t\ttool: READ_MCP_RESOURCE_TOOL_NAME,\n\t\t\targuments: args,\n\t\t};\n\t\tawait emit_mcp_resource_call_begin(invocation, mcpInvocation);\n\t\tconst startedAt = Date.now();\n\t\ttry {\n\t\t\tconst result = await invocation.session.read_resource(invocation.turn, {\n\t\t\t\tthread_id: invocation.session.threadId,\n\t\t\t\tserver_name: server,\n\t\t\t\turi,\n\t\t\t});\n\t\t\tconst output = serialize_function_output({\n\t\t\t\tserver,\n\t\t\t\turi,\n\t\t\t\tcontents: result.contents,\n\t\t\t});\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: true,\n\t\t\t\tresult: output.intoText(),\n\t\t\t});\n\t\t\treturn output;\n\t\t} catch (error) {\n\t\t\tawait emit_mcp_resource_call_end(invocation, mcpInvocation, startedAt, {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: errorMessage(error),\n\t\t\t});\n\t\t\tthrow toRespondToModel(\"resources/read failed\", error);\n\t\t}\n\t}\n}\n\nfunction parseOptionalObjectArguments(payload: ToolPayload): ParsedArguments {\n\tif (payload.type !== \"function\") {\n\t\treturn null;\n\t}\n\tconst raw = payload.arguments.trim();\n\tif (!raw || raw === \"null\") {\n\t\treturn null;\n\t}\n\tconst parsed = parseJson(raw);\n\tif (parsed === null) {\n\t\treturn null;\n\t}\n\tif (!isRecord(parsed)) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\"failed to parse function arguments: expected object\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction parseRequiredObjectArguments(payload: ToolPayload): Record<string, unknown> {\n\tconst parsed = parseOptionalObjectArguments(payload);\n\tif (!parsed) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\"failed to parse function arguments: expected value\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction parseJson(raw: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction readString(args: ParsedArguments, key: string): string | null {\n\tconst value = args?.[key];\n\treturn typeof value === \"string\" ? value : null;\n}\n\nfunction normalize_optional_string(value: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : null;\n}\n\nfunction normalize_required_string(field: string, value: string | null): string {\n\tconst normalized = normalize_optional_string(value);\n\tif (!normalized) {\n\t\tthrow FunctionCallError.respondToModel(`${field} must be provided`);\n\t}\n\treturn normalized;\n}\n\nfunction serialize_function_output(payload: unknown): FunctionToolOutput {\n\ttry {\n\t\treturn FunctionToolOutput.fromText(JSON.stringify(payload), true);\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to serialize MCP resource response: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nasync function emit_mcp_resource_call_begin(\n\tinvocation: ToolInvocation,\n\tmcpInvocation: { server: string; tool: string; arguments: ParsedArguments },\n): Promise<void> {\n\tawait invocation.session.send_event(invocation.turn, {\n\t\ttype: \"item_started\",\n\t\tturn_id: invocation.turn.sub_id,\n\t\titem: {\n\t\t\ttype: \"McpToolCall\",\n\t\t\tid: invocation.call_id,\n\t\t\tserver: mcpInvocation.server,\n\t\t\ttool: mcpInvocation.tool,\n\t\t\targuments: mcpInvocation.arguments ?? {},\n\t\t\tstatus: \"inProgress\",\n\t\t},\n\t});\n}\n\nasync function emit_mcp_resource_call_end(\n\tinvocation: ToolInvocation,\n\tmcpInvocation: { server: string; tool: string; arguments: ParsedArguments },\n\tstartedAt: number,\n\tresult:\n\t\t| { success: true; result: string }\n\t\t| { success: false; error: string },\n): Promise<void> {\n\tawait invocation.session.send_event(invocation.turn, {\n\t\ttype: \"item_completed\",\n\t\tturn_id: invocation.turn.sub_id,\n\t\titem: {\n\t\t\ttype: \"McpToolCall\",\n\t\t\tid: invocation.call_id,\n\t\t\tserver: mcpInvocation.server,\n\t\t\ttool: mcpInvocation.tool,\n\t\t\targuments: mcpInvocation.arguments ?? {},\n\t\t\tstatus: result.success ? \"completed\" : \"failed\",\n\t\t\t...(result.success ? { result: result.result } : { error: { message: result.error } }),\n\t\t\tduration: `${Math.max(0, Date.now() - startedAt)}ms`,\n\t\t},\n\t});\n}\n\nfunction toRespondToModel(prefix: string, error: unknown): FunctionCallError {\n\tif (error instanceof FunctionCallError) {\n\t\treturn error;\n\t}\n\treturn FunctionCallError.respondToModel(`${prefix}: ${errorMessage(error)}`);\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import {\n\tLIST_MCP_RESOURCES_TOOL_NAME,\n\tLIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME,\n\tREAD_MCP_RESOURCE_TOOL_NAME,\n} from \"./mcp_resource\";\n\nfunction create_mcp_resource_tool(name: string, description: string) {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname,\n\t\tdescription,\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {},\n\t\t\trequired: [],\n\t\t\tadditionalProperties: true,\n\t\t},\n\t};\n}\n\nexport function create_list_mcp_resources_tool() {\n\treturn {\n\t\t...create_mcp_resource_tool(\n\t\t\tLIST_MCP_RESOURCES_TOOL_NAME,\n\t\t\t\"Lists resources provided by MCP servers. Resources allow servers to share data that provides context to language models, such as files, database schemas, or application-specific information. Prefer resources over web search when possible.\",\n\t\t),\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tserver: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional MCP server name. When omitted, lists resources from every configured server.\",\n\t\t\t\t},\n\t\t\t\tcursor: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Opaque cursor returned by a previous list_mcp_resources call for the same server.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function create_list_mcp_resource_templates_tool() {\n\treturn {\n\t\t...create_mcp_resource_tool(\n\t\t\tLIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME,\n\t\t\t\"Lists resource templates provided by MCP servers. Parameterized resource templates allow servers to share data that takes parameters and provides context to language models, such as files, database schemas, or application-specific information. Prefer resource templates over web search when possible.\",\n\t\t),\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tserver: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional MCP server name. When omitted, lists resource templates from all configured servers.\",\n\t\t\t\t},\n\t\t\t\tcursor: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Opaque cursor returned by a previous list_mcp_resource_templates call for the same server.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function create_read_mcp_resource_tool() {\n\treturn {\n\t\t...create_mcp_resource_tool(\n\t\t\tREAD_MCP_RESOURCE_TOOL_NAME,\n\t\t\t\"Read a specific resource from an MCP server given the server name and resource URI.\",\n\t\t),\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tserver: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"MCP server name exactly as configured. Must match the 'server' field returned by list_mcp_resources.\",\n\t\t\t\t},\n\t\t\t\turi: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Resource URI to read. Must be one of the URIs returned by list_mcp_resources.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"server\", \"uri\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n","import {\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\n\nexport const SPAWN_AGENT_TOOL_NAME = \"spawn_agent\";\nexport const SEND_INPUT_TOOL_NAME = \"send_input\";\nexport const WAIT_AGENT_TOOL_NAME = \"wait_agent\";\nexport const CLOSE_AGENT_TOOL_NAME = \"close_agent\";\nexport const RESUME_AGENT_TOOL_NAME = \"resume_agent\";\nexport const LIST_AGENTS_TOOL_NAME = \"list_agents\";\nexport const SEND_MESSAGE_TOOL_NAME = \"send_message\";\nexport const FOLLOWUP_TASK_TOOL_NAME = \"followup_task\";\n\nconst MULTI_AGENT_UNAVAILABLE =\n\t\"multi-agent execution is unavailable in this Codex assistant runtime; a Worker-backed agent executor is required.\";\n\nexport class SpawnAgentHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(SPAWN_AGENT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class SendInputHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(SEND_INPUT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class WaitAgentHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(WAIT_AGENT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class CloseAgentHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(CLOSE_AGENT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class ResumeAgentHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(RESUME_AGENT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class ListAgentsHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(LIST_AGENTS_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(\n\t\t\tJSON.stringify({ agents: invocation.session.agentControl().list_agents() }),\n\t\t\ttrue,\n\t\t);\n\t}\n}\n\nexport class SendMessageHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(SEND_MESSAGE_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nexport class FollowupTaskHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(FOLLOWUP_TASK_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tparseFunctionArgs(invocation);\n\t\treturn FunctionToolOutput.fromText(MULTI_AGENT_UNAVAILABLE, false);\n\t}\n}\n\nfunction parseFunctionArgs(invocation: ToolInvocation): unknown {\n\tif (invocation.payload.type !== \"function\") {\n\t\treturn {};\n\t}\n\ttry {\n\t\treturn JSON.parse(invocation.payload.arguments || \"{}\");\n\t} catch {\n\t\treturn {};\n\t}\n}\n","import { goalToolOutput, type CreateGoalRequest } from \"../../goals\";\nimport { ThreadGoalStatus } from \"../../protocol\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\n\nexport const GET_GOAL_TOOL_NAME = \"get_goal\";\nexport const CREATE_GOAL_TOOL_NAME = \"create_goal\";\nexport const UPDATE_GOAL_TOOL_NAME = \"update_goal\";\n\nexport class GetGoalHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(GET_GOAL_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tif (invocation.payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\"get_goal handler received unsupported payload\");\n\t\t}\n\t\treturn FunctionToolOutput.fromText(\n\t\t\tJSON.stringify(goalToolOutput(await invocation.session.get_thread_goal())),\n\t\t\ttrue,\n\t\t);\n\t}\n}\n\nexport class CreateGoalHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(CREATE_GOAL_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tif (invocation.payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\"create_goal handler received unsupported payload\");\n\t\t}\n\t\tconst args = parseArguments<CreateGoalRequest>(invocation.payload.arguments);\n\t\tconst goal = await invocation.session.create_thread_goal(invocation.turn, {\n\t\t\tobjective: String(args.objective ?? \"\"),\n\t\t\ttoken_budget: args.token_budget ?? null,\n\t\t});\n\t\treturn FunctionToolOutput.fromText(JSON.stringify(goalToolOutput(goal)), true);\n\t}\n}\n\nexport class UpdateGoalHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(UPDATE_GOAL_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tif (invocation.payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\"update_goal handler received unsupported payload\");\n\t\t}\n\t\tconst args = parseArguments<{ status?: unknown }>(invocation.payload.arguments);\n\t\tif (args.status !== ThreadGoalStatus.Complete) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"update_goal can only mark the existing goal complete; pause, resume, and budget-limited status changes are controlled by the user or system\",\n\t\t\t);\n\t\t}\n\t\tconst goal = await invocation.session.update_thread_goal_complete(invocation.turn);\n\t\treturn FunctionToolOutput.fromText(JSON.stringify(goalToolOutput(goal)), true);\n\t}\n}\n\nfunction parseArguments<T>(argumentsJson: string): T {\n\ttry {\n\t\treturn JSON.parse(argumentsJson) as T;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n","import { ThreadGoalStatus } from \"../../protocol\";\nimport {\n\tCREATE_GOAL_TOOL_NAME,\n\tGET_GOAL_TOOL_NAME,\n\tUPDATE_GOAL_TOOL_NAME,\n} from \"./goal\";\n\nexport function create_get_goal_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: GET_GOAL_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Get the current goal for this thread, including status, budgets, token and elapsed-time usage, and remaining token budget.\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {},\n\t\t\trequired: [],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function create_create_goal_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: CREATE_GOAL_TOOL_NAME,\n\t\tdescription:\n\t\t\t`Create a goal only when explicitly requested by the user or system/developer instructions; do not infer goals from ordinary tasks.\nSet token_budget only when an explicit token budget is requested. Fails if a goal exists; use ${UPDATE_GOAL_TOOL_NAME} only for status.`,\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tobjective: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Required. The concrete objective to start pursuing. This starts a new active goal only when no goal is currently defined; if a goal already exists, this tool fails.\",\n\t\t\t\t},\n\t\t\t\ttoken_budget: {\n\t\t\t\t\ttype: \"integer\",\n\t\t\t\t\tdescription: \"Optional positive token budget for the new active goal.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"objective\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n\nexport function create_update_goal_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: UPDATE_GOAL_TOOL_NAME,\n\t\tdescription:\n\t\t\t\"Update the existing goal.\\nUse this tool only to mark the goal achieved.\\nSet status to `complete` only when the objective has actually been achieved and no required work remains.\\nDo not mark a goal complete merely because its budget is nearly exhausted or because you are stopping work.\\nYou cannot use this tool to pause, resume, or budget-limit a goal; those status changes are controlled by the user or system.\\nWhen marking a budgeted goal achieved with status `complete`, report the final token usage from the tool result to the user.\",\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tstatus: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tenum: [ThreadGoalStatus.Complete],\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Required. Set to complete only when the objective is achieved and no required work remains.\",\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"status\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n","import type {\n\tWebSearchConfig,\n\tWebSearchMode,\n\tWebSearchToolType,\n} from \"./spec_plan_types\";\nimport type { ToolSpec } from \"./tool_spec\";\n\nconst WEB_SEARCH_TEXT_AND_IMAGE_CONTENT_TYPES = [\"text\", \"image\"] as const;\n\nexport type WebSearchToolOptions = {\n\tweb_search_mode?: WebSearchMode | null;\n\tweb_search_config?: WebSearchConfig | null;\n\tweb_search_tool_type?: WebSearchToolType;\n};\n\nexport function create_image_generation_tool(outputFormat: string): ToolSpec {\n\treturn {\n\t\ttype: \"image_generation\",\n\t\toutput_format: outputFormat,\n\t};\n}\n\nexport function create_web_search_tool(\n\toptions: WebSearchToolOptions,\n): ToolSpec | null {\n\tconst externalWebAccess =\n\t\toptions.web_search_mode === \"cached\"\n\t\t\t? false\n\t\t\t: options.web_search_mode === \"live\"\n\t\t\t\t? true\n\t\t\t\t: null;\n\tif (externalWebAccess === null) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\ttype: \"web_search\",\n\t\texternal_web_access: externalWebAccess,\n\t\t...(options.web_search_config?.filters !== undefined\n\t\t\t? { filters: options.web_search_config.filters }\n\t\t\t: {}),\n\t\t...(options.web_search_config?.user_location !== undefined\n\t\t\t? { user_location: options.web_search_config.user_location }\n\t\t\t: {}),\n\t\t...(options.web_search_config?.search_context_size !== undefined\n\t\t\t? { search_context_size: options.web_search_config.search_context_size }\n\t\t\t: {}),\n\t\t...(options.web_search_tool_type === \"text_and_image\"\n\t\t\t? { search_content_types: [...WEB_SEARCH_TEXT_AND_IMAGE_CONTENT_TYPES] }\n\t\t\t: {}),\n\t};\n}\n","import type { ToolSearchSourceInfo } from \"../tool_search_entry\";\n\nexport function create_tool_search_tool(\n\tsources: readonly ToolSearchSourceInfo[],\n\tdefaultLimit: number,\n) {\n\tconst sourceDescriptionsByName = new Map<string, string | null>();\n\tfor (const source of sources) {\n\t\tconst existing = sourceDescriptionsByName.get(source.name);\n\t\tif (existing === undefined) {\n\t\t\tsourceDescriptionsByName.set(source.name, source.description ?? null);\n\t\t} else if (existing === null && source.description) {\n\t\t\tsourceDescriptionsByName.set(source.name, source.description);\n\t\t}\n\t}\n\tconst sourceDescriptions =\n\t\tsourceDescriptionsByName.size === 0\n\t\t\t? \"None currently enabled.\"\n\t\t\t: [...sourceDescriptionsByName.entries()]\n\t\t\t\t\t.sort(([left], [right]) => left.localeCompare(right))\n\t\t\t\t\t.map((source) =>\n\t\t\t\t\t\tsource[1]\n\t\t\t\t\t\t\t? `- ${source[0]}: ${source[1]}`\n\t\t\t\t\t\t\t: `- ${source[0]}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\");\n\treturn {\n\t\ttype: \"tool_search\" as const,\n\t\texecution: \"client\",\n\t\tdescription: `# Tool discovery\\n\\nSearches over deferred tool metadata with BM25 and exposes matching tools for the next model call.\\n\\nYou have access to tools from the following sources:\\n${sourceDescriptions}\\nSome of the tools may not have been provided to you upfront, and you should use this tool (\\`tool_search\\`) to search for the required tools. For MCP tool discovery, always use \\`tool_search\\` instead of \\`list_mcp_resources\\` or \\`list_mcp_resource_templates\\`.`,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {\n\t\t\t\tquery: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Search query for deferred tools.\",\n\t\t\t\t},\n\t\t\t\tlimit: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\tdescription: `Maximum number of tools to return (defaults to ${defaultLimit}).`,\n\t\t\t\t},\n\t\t\t},\n\t\t\trequired: [\"query\"],\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n","import {\n\tREQUEST_USER_INPUT_TOOL_NAME,\n\tcreateRequestUserInputTool,\n\trequestUserInputToolDescription,\n} from \"./handlers/request_user_input_spec\";\nimport { requestUserInputAvailableModes } from \"../request_user_input\";\nimport {\n\tREQUEST_PERMISSIONS_TOOL_NAME,\n\tcreateRequestPermissionsTool,\n\trequestPermissionsToolDescription,\n} from \"./handlers/request_permissions_spec\";\nimport {\n\tcreate_apply_patch_tool,\n} from \"./handlers/apply_patch_spec\";\nimport {\n\tPLAN_TOOL_NAME,\n} from \"./handlers/plan\";\nimport {\n\tcreate_update_plan_tool,\n} from \"./handlers/plan_spec\";\nimport { APPLY_PATCH_TOOL_NAME } from \"./handlers/apply_patch\";\nimport {\n\tcreate_exec_command_tool,\n\tcreate_write_stdin_tool,\n} from \"./handlers/shell_spec\";\nimport {\n\tLIST_MCP_RESOURCES_TOOL_NAME,\n\tLIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME,\n\tREAD_MCP_RESOURCE_TOOL_NAME,\n} from \"./handlers/mcp_resource\";\nimport {\n\tcreate_list_mcp_resources_tool,\n\tcreate_list_mcp_resource_templates_tool,\n\tcreate_read_mcp_resource_tool,\n} from \"./handlers/mcp_resource_spec\";\nimport { EXEC_COMMAND_TOOL_NAME } from \"./handlers/unified_exec/exec_command\";\nimport { WRITE_STDIN_TOOL_NAME } from \"./handlers/unified_exec/write_stdin\";\nimport {\n\tCLOSE_AGENT_TOOL_NAME,\n\tFOLLOWUP_TASK_TOOL_NAME,\n\tLIST_AGENTS_TOOL_NAME,\n\tRESUME_AGENT_TOOL_NAME,\n\tSEND_INPUT_TOOL_NAME,\n\tSEND_MESSAGE_TOOL_NAME,\n\tSPAWN_AGENT_TOOL_NAME,\n\tWAIT_AGENT_TOOL_NAME,\n} from \"./handlers/multi_agents\";\nimport {\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n\ttype McpToolInfo,\n} from \"../mcp\";\nimport {\n\tCREATE_GOAL_TOOL_NAME,\n\tGET_GOAL_TOOL_NAME,\n\tUPDATE_GOAL_TOOL_NAME,\n} from \"./handlers/goal\";\nimport {\n\tcreate_create_goal_tool,\n\tcreate_get_goal_tool,\n\tcreate_update_goal_tool,\n} from \"./handlers/goal_spec\";\nimport {\n\tcreate_image_generation_tool,\n\tcreate_web_search_tool,\n} from \"./hosted_spec\";\nimport { createToolRegistryPlan, ToolHandlerKind } from \"./spec_plan_types\";\nimport type {\n\tToolsConfig,\n\tToolRegistryPlan,\n\tToolRegistryPlanParams,\n} from \"./spec_plan_types\";\nimport { ToolName } from \"./tool_name\";\nimport {\n\tcoalesce_loadable_tool_specs,\n\tdynamic_tool_to_loadable_tool_spec,\n\ttype LoadableToolSpec,\n} from \"./responses_api\";\nimport { create_tool_search_tool } from \"./handlers/tool_search_spec\";\nimport {\n\tTOOL_SEARCH_DEFAULT_LIMIT,\n\ttool_search_source_info_for_dynamic_tools,\n\ttool_search_source_info_for_mcp_tools,\n} from \"./tool_search_entry\";\nimport { qualify_tool_infos } from \"../../../codex-mcp/src/tools\";\n\nexport function build_tool_registry_plan(\n\tconfig: ToolsConfig,\n\tparams: ToolRegistryPlanParams,\n): ToolRegistryPlan {\n\tconst plan = createToolRegistryPlan();\n\n\tplan.specs.push({\n\t\tspec: create_update_plan_tool(),\n\t\tsupports_parallel_tool_calls: false,\n\t});\n\tplan.handlers.push({\n\t\tname: ToolName.plain(PLAN_TOOL_NAME),\n\t\tkind: ToolHandlerKind.Plan,\n\t});\n\n\tif (config.thread_goal_tools_enabled) {\n\t\tplan.specs.push({\n\t\t\tspec: create_get_goal_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(GET_GOAL_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.GetGoal,\n\t\t});\n\t\tplan.specs.push({\n\t\t\tspec: create_create_goal_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(CREATE_GOAL_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.CreateGoal,\n\t\t});\n\t\tplan.specs.push({\n\t\t\tspec: create_update_goal_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(UPDATE_GOAL_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.UpdateGoal,\n\t\t});\n\t}\n\n\tplan.specs.push({\n\t\tspec: createRequestUserInputTool(\n\t\t\trequestUserInputToolDescription(\n\t\t\t\tconfig.request_user_input_available_modes.length > 0\n\t\t\t\t\t? config.request_user_input_available_modes\n\t\t\t\t\t: requestUserInputAvailableModes(),\n\t\t\t),\n\t\t),\n\t\tsupports_parallel_tool_calls: false,\n\t});\n\tplan.handlers.push({\n\t\tname: ToolName.plain(REQUEST_USER_INPUT_TOOL_NAME),\n\t\tkind: ToolHandlerKind.RequestUserInput,\n\t});\n\n\tif (config.request_permissions_tool_enabled) {\n\t\tplan.specs.push({\n\t\t\tspec: createRequestPermissionsTool(requestPermissionsToolDescription()),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(REQUEST_PERMISSIONS_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.RequestPermissions,\n\t\t});\n\t}\n\n\tif (config.multi_agent_tools_enabled) {\n\t\tfor (const spec of createMultiAgentTools()) {\n\t\t\tplan.specs.push({ spec, supports_parallel_tool_calls: false });\n\t\t}\n\t\tplan.handlers.push(\n\t\t\t{ name: ToolName.plain(SPAWN_AGENT_TOOL_NAME), kind: ToolHandlerKind.SpawnAgent },\n\t\t\t{ name: ToolName.plain(SEND_INPUT_TOOL_NAME), kind: ToolHandlerKind.SendInput },\n\t\t\t{ name: ToolName.plain(WAIT_AGENT_TOOL_NAME), kind: ToolHandlerKind.WaitAgent },\n\t\t\t{ name: ToolName.plain(CLOSE_AGENT_TOOL_NAME), kind: ToolHandlerKind.CloseAgent },\n\t\t\t{ name: ToolName.plain(RESUME_AGENT_TOOL_NAME), kind: ToolHandlerKind.ResumeAgent },\n\t\t\t{ name: ToolName.plain(LIST_AGENTS_TOOL_NAME), kind: ToolHandlerKind.ListAgents },\n\t\t\t{ name: ToolName.plain(SEND_MESSAGE_TOOL_NAME), kind: ToolHandlerKind.SendMessage },\n\t\t\t{ name: ToolName.plain(FOLLOWUP_TASK_TOOL_NAME), kind: ToolHandlerKind.FollowupTask },\n\t\t);\n\t}\n\n\tconst mcpTools = config.mcp_tools_enabled\n\t\t? qualify_tool_infos(params.mcp_tools ?? [])\n\t\t: [];\n\tconst deferredMcpTools = config.mcp_tools_enabled\n\t\t? qualify_tool_infos(params.deferred_mcp_tools ?? [])\n\t\t: [];\n\tif (config.mcp_tools_enabled && (params.mcp_tools?.length ?? 0) > 0) {\n\t\tplan.specs.push(\n\t\t\t{\n\t\t\t\tspec: create_list_mcp_resources_tool(),\n\t\t\t\tsupports_parallel_tool_calls: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tspec: create_list_mcp_resource_templates_tool(),\n\t\t\t\tsupports_parallel_tool_calls: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tspec: create_read_mcp_resource_tool(),\n\t\t\t\tsupports_parallel_tool_calls: true,\n\t\t\t},\n\t\t);\n\t\tplan.handlers.push(\n\t\t\t{\n\t\t\t\tname: ToolName.plain(LIST_MCP_RESOURCES_TOOL_NAME),\n\t\t\t\tkind: ToolHandlerKind.ListMcpResources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: ToolName.plain(LIST_MCP_RESOURCE_TEMPLATES_TOOL_NAME),\n\t\t\t\tkind: ToolHandlerKind.ListMcpResourceTemplates,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: ToolName.plain(READ_MCP_RESOURCE_TOOL_NAME),\n\t\t\t\tkind: ToolHandlerKind.ReadMcpResource,\n\t\t\t},\n\t\t);\n\t}\n\tconst deferredMcpToolsForSearch = config.namespace_tools\n\t\t? deferredMcpTools\n\t\t: [];\n\tconst deferredDynamicTools = params.dynamic_tools.filter(\n\t\t(tool) =>\n\t\t\ttool.defer_loading && (config.namespace_tools || tool.namespace == null),\n\t);\n\tif (\n\t\tconfig.search_tool &&\n\t\t(deferredDynamicTools.length > 0 ||\n\t\t\tdeferredMcpToolsForSearch.length > 0)\n\t) {\n\t\tconst sources = [\n\t\t\t...tool_search_source_info_for_mcp_tools(deferredMcpToolsForSearch),\n\t\t\t...tool_search_source_info_for_dynamic_tools(deferredDynamicTools),\n\t\t];\n\t\tplan.specs.push({\n\t\t\tspec: create_tool_search_tool(sources, TOOL_SEARCH_DEFAULT_LIMIT),\n\t\t\tsupports_parallel_tool_calls: true,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(\"tool_search\"),\n\t\t\tkind: ToolHandlerKind.ToolSearch,\n\t\t});\n\t\tfor (const tool of deferredMcpToolsForSearch) {\n\t\t\tplan.handlers.push({\n\t\t\t\tname: ToolName.namespaced(\n\t\t\t\t\tmcpToolCallableNamespace(tool),\n\t\t\t\t\tmcpToolCallableName(tool),\n\t\t\t\t),\n\t\t\t\tkind: ToolHandlerKind.Mcp,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst webSearchTool = create_web_search_tool({\n\t\tweb_search_mode: config.web_search_mode,\n\t\tweb_search_config: config.web_search_config,\n\t\tweb_search_tool_type: config.web_search_tool_type,\n\t});\n\tif (webSearchTool) {\n\t\tplan.specs.push({\n\t\t\tspec: webSearchTool,\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t}\n\n\tif (config.image_gen_tool) {\n\t\tplan.specs.push({\n\t\t\tspec: create_image_generation_tool(\"png\"),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t}\n\n\tif (config.exec_command_tool_enabled) {\n\t\tplan.specs.push({\n\t\t\tspec: create_exec_command_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(EXEC_COMMAND_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.ExecCommand,\n\t\t});\n\t}\n\n\tif (config.write_stdin_tool_enabled) {\n\t\tplan.specs.push({\n\t\t\tspec: create_write_stdin_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(WRITE_STDIN_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.WriteStdin,\n\t\t});\n\t}\n\n\tif (config.apply_patch_tool_enabled) {\n\t\tplan.specs.push({\n\t\t\tspec: create_apply_patch_tool(),\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t\tplan.handlers.push({\n\t\t\tname: ToolName.plain(APPLY_PATCH_TOOL_NAME),\n\t\t\tkind: ToolHandlerKind.ApplyPatch,\n\t\t});\n\t}\n\n\tconst dynamicToolSpecs: LoadableToolSpec[] = [];\n\tfor (const tool of params.dynamic_tools) {\n\t\tconst name = ToolName.new(tool.namespace, tool.name);\n\t\tdynamicToolSpecs.push(dynamic_tool_to_loadable_tool_spec(tool));\n\t\tplan.handlers.push({\n\t\t\tname,\n\t\t\tkind: ToolHandlerKind.DynamicTool,\n\t\t});\n\t}\n\n\tfor (const spec of coalesce_loadable_tool_specs(dynamicToolSpecs)) {\n\t\tif (spec.type === \"namespace\" && !config.namespace_tools) {\n\t\t\tcontinue;\n\t\t}\n\t\tplan.specs.push({\n\t\t\tspec,\n\t\t\tsupports_parallel_tool_calls: false,\n\t\t});\n\t}\n\n\tif (config.mcp_tools_enabled) {\n\t\tconst sortedMcpTools = [...mcpTools].sort((left, right) =>\n\t\t\tToolName.namespaced(\n\t\t\t\tmcpToolCallableNamespace(left),\n\t\t\t\tmcpToolCallableName(left),\n\t\t\t)\n\t\t\t\t.display()\n\t\t\t\t.localeCompare(\n\t\t\t\t\tToolName.namespaced(\n\t\t\t\t\t\tmcpToolCallableNamespace(right),\n\t\t\t\t\t\tmcpToolCallableName(right),\n\t\t\t\t\t).display(),\n\t\t\t\t),\n\t\t);\n\t\tfor (const spec of coalesce_loadable_tool_specs(\n\t\t\tsortedMcpTools.map(mcp_tool_to_loadable_tool_spec),\n\t\t)) {\n\t\t\tif (spec.type === \"namespace\" && !config.namespace_tools) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tplan.specs.push({\n\t\t\t\tspec,\n\t\t\t\tsupports_parallel_tool_calls: false,\n\t\t\t});\n\t\t}\n\t\tfor (const tool of mcpTools) {\n\t\t\tplan.handlers.push({\n\t\t\t\tname: ToolName.namespaced(\n\t\t\t\t\tmcpToolCallableNamespace(tool),\n\t\t\t\t\tmcpToolCallableName(tool),\n\t\t\t\t),\n\t\t\t\tkind: ToolHandlerKind.Mcp,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn plan;\n}\n\nfunction mcp_tool_to_loadable_tool_spec(tool: McpToolInfo): LoadableToolSpec {\n\treturn {\n\t\ttype: \"namespace\",\n\t\tname: mcpToolCallableNamespace(tool),\n\t\tdescription: mcp_tool_namespace_description(tool),\n\t\ttools: [\n\t\t\t{\n\t\t\t\ttype: \"function\",\n\t\t\t\tname: mcpToolCallableName(tool),\n\t\t\t\tdescription: tool.description ?? `Call MCP tool ${tool.server_name}.${tool.name}.`,\n\t\t\t\tstrict: false,\n\t\t\t\tparameters: tool.input_schema ?? { type: \"object\" },\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction mcp_tool_namespace_description(tool: McpToolInfo): string {\n\tconst namespaceDescription = normalizeDescription(tool.namespace_description);\n\tif (namespaceDescription) {\n\t\treturn namespaceDescription;\n\t}\n\tconst connectorName = normalizeDescription(tool.connector_name);\n\tif (connectorName) {\n\t\treturn `Tools for working with ${connectorName}.`;\n\t}\n\treturn `MCP tools provided by ${tool.source_label ?? mcpToolCallableNamespace(tool)}.`;\n}\n\nfunction normalizeDescription(value?: string | null): string | null {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : null;\n}\n\nfunction createMultiAgentTools() {\n\treturn [\n\t\tcreateFunctionTool(\n\t\t\tSPAWN_AGENT_TOOL_NAME,\n\t\t\t\"Spawn a new agent. This runtime requires a Worker-backed agent executor before agents can run.\",\n\t\t),\n\t\tcreateFunctionTool(\n\t\t\tSEND_INPUT_TOOL_NAME,\n\t\t\t\"Send a message to an existing agent.\",\n\t\t\t[\"target\"],\n\t\t),\n\t\tcreateFunctionTool(\n\t\t\tWAIT_AGENT_TOOL_NAME,\n\t\t\t\"Wait for agents to reach a final status.\",\n\t\t\t[\"targets\"],\n\t\t),\n\t\tcreateFunctionTool(CLOSE_AGENT_TOOL_NAME, \"Close an agent.\", [\"target\"]),\n\t\tcreateFunctionTool(RESUME_AGENT_TOOL_NAME, \"Resume an agent.\", [\"id\"]),\n\t\tcreateFunctionTool(LIST_AGENTS_TOOL_NAME, \"List live agents.\"),\n\t\tcreateFunctionTool(SEND_MESSAGE_TOOL_NAME, \"Send a message to an agent.\", [\n\t\t\t\"target\",\n\t\t\t\"message\",\n\t\t]),\n\t\tcreateFunctionTool(\n\t\t\tFOLLOWUP_TASK_TOOL_NAME,\n\t\t\t\"Send a message to a target agent and trigger a follow-up turn.\",\n\t\t\t[\"target\", \"message\"],\n\t\t),\n\t];\n}\n\nfunction createFunctionTool(\n\tname: string,\n\tdescription: string,\n\trequired: string[] = [],\n) {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname,\n\t\tdescription,\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {},\n\t\t\trequired,\n\t\t\tadditionalProperties: true,\n\t\t},\n\t};\n}\n","export {\n\tFunctionCallError,\n\tFunctionCallErrorKind,\n\tmatchesToolKind,\n\tToolKind,\n\tToolRegistry,\n\ttype ConfiguredToolSpec,\n\ttype PostToolUsePayload,\n\ttype PreToolUsePayload,\n\ttype ToolArgumentDiffConsumer,\n\ttype ToolHandler,\n\ttype ToolSpec,\n} from \"./context\";\nimport {\n\tToolRegistry,\n\ttype ConfiguredToolSpec,\n\ttype ToolHandler,\n\ttype ToolSpec,\n} from \"./context\";\nimport { ToolName } from \"./tool_name\";\nexport * from \"./responses_api\";\nexport * from \"./spec\";\nexport * from \"./tool_spec\";\nexport * from \"./tool_search_entry\";\nexport * from \"./handlers/apply_patch\";\nexport * from \"./handlers/apply_patch_spec\";\nexport * from \"./handlers/shell_spec\";\nexport * from \"./handlers/unified_exec\";\nexport * from \"./events\";\nexport * from \"./sandboxing\";\nexport { ToolName, type ToolNameInput } from \"./tool_name\";\nexport { build_tool_registry_plan } from \"./spec_plan\";\nexport {\n\tcreate_image_generation_tool,\n\tcreate_web_search_tool,\n\ttype WebSearchToolOptions,\n} from \"./hosted_spec\";\nexport {\n\tToolHandlerKind,\n\tdefaultToolsConfig,\n\ttype DefaultToolsConfigInput,\n\ttype ToolHandlerSpec,\n\ttype ToolRegistryPlan,\n\ttype ToolRegistryPlanParams,\n\ttype ToolsConfig,\n\ttype WebSearchConfig,\n\ttype WebSearchMode,\n\ttype WebSearchToolType,\n} from \"./spec_plan_types\";\n\nexport class ToolRegistryBuilder {\n\tprivate readonly handlers = new Map<string, ToolHandler>();\n\tprivate readonly specs: ConfiguredToolSpec[] = [];\n\n\tpushSpec(spec: ToolSpec): void {\n\t\tthis.pushSpecWithParallelSupport(spec, false);\n\t}\n\n\tpushSpecWithParallelSupport(\n\t\tspec: ToolSpec,\n\t\tsupportsParallelToolCalls: boolean,\n\t): void {\n\t\tthis.specs.push({\n\t\t\tspec,\n\t\t\tsupports_parallel_tool_calls: supportsParallelToolCalls,\n\t\t});\n\t}\n\n\tregisterHandler(handler: ToolHandler): void {\n\t\tthis.handlers.set(ToolName.from(handler.toolName()).key(), handler);\n\t}\n\n\tbuild(): { specs: ConfiguredToolSpec[]; registry: ToolRegistry } {\n\t\treturn {\n\t\t\tspecs: [...this.specs],\n\t\t\tregistry: ToolRegistry.fromHandlersForBuilder(this.handlers),\n\t\t};\n\t}\n}\n","import type { DynamicToolCallOutputContentItem } from \"../../protocol\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName, type ToolNameInput } from \"../tool_name\";\n\nexport type DynamicToolHandlerParams = {\n\ttool_name: ToolNameInput;\n};\n\nexport class DynamicToolHandler implements ToolHandler<FunctionToolOutput> {\n\tprivate readonly tool_name: ToolName;\n\n\tconstructor(params: DynamicToolHandlerParams) {\n\t\tthis.tool_name = ToolName.from(params.tool_name);\n\t}\n\n\ttoolName(): ToolName {\n\t\treturn this.tool_name;\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync isMutating(): Promise<boolean> {\n\t\treturn true;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst { session, turn, call_id, payload } = invocation;\n\n\t\tif (payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"dynamic tool handler received unsupported payload\",\n\t\t\t);\n\t\t}\n\n\t\tconst args = parseArguments(payload.arguments);\n\t\tconst response = await session.request_dynamic_tool(\n\t\t\tturn,\n\t\t\tcall_id,\n\t\t\tthis.tool_name.display(),\n\t\t\targs,\n\t\t);\n\t\tif (!response) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"dynamic tool call was cancelled before receiving a response\",\n\t\t\t);\n\t\t}\n\n\t\treturn FunctionToolOutput.fromContent(\n\t\t\tresponse.content_items.map(dynamicContentItemToFunctionContentItem),\n\t\t\tresponse.success,\n\t\t);\n\t}\n}\n\nexport function dynamicToolName(input: {\n\tnamespace?: string | null;\n\tname: string;\n}): string {\n\treturn ToolName.from(input).display();\n}\n\nfunction dynamicContentItemToFunctionContentItem(\n\titem: DynamicToolCallOutputContentItem,\n) {\n\tswitch (item.type) {\n\t\tcase \"inputText\":\n\t\t\treturn {\n\t\t\t\ttype: \"input_text\" as const,\n\t\t\t\ttext: item.text,\n\t\t\t};\n\t\tcase \"inputImage\":\n\t\t\treturn {\n\t\t\t\ttype: \"input_image\" as const,\n\t\t\t\timage_url: item.imageUrl,\n\t\t\t};\n\t}\n}\n\nfunction parseArguments(argumentsJson: string): unknown {\n\ttry {\n\t\treturn JSON.parse(argumentsJson) as unknown;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n","import {\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n\ttype McpToolInfo,\n} from \"../../mcp\";\nimport {\n\tFunctionCallError,\n\tMcpToolOutput,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n\tToolKind,\n\ttype ToolPayload,\n} from \"../context\";\nimport { ToolName, type ToolNameInput } from \"../tool_name\";\n\nexport class McpToolHandler implements ToolHandler<McpToolOutput> {\n\tprivate readonly name: ToolName;\n\n\tconstructor(readonly tool: McpToolInfo) {\n\t\tthis.name = ToolName.namespaced(\n\t\t\tmcpToolCallableNamespace(tool),\n\t\t\tmcpToolCallableName(tool),\n\t\t);\n\t}\n\n\ttoolName(): ToolNameInput {\n\t\treturn this.name;\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Mcp;\n\t}\n\n\tmatchesKind(payload: ToolPayload): boolean {\n\t\treturn payload.type === \"mcp\";\n\t}\n\n\tpreToolUsePayload(invocation: ToolInvocation) {\n\t\treturn {\n\t\t\ttool_name: this.name.display(),\n\t\t\ttool_input: mcpArgumentsFromPayload(invocation.payload),\n\t\t};\n\t}\n\n\tpostToolUsePayload(invocation: ToolInvocation, result: McpToolOutput) {\n\t\treturn {\n\t\t\ttool_name: this.name.display(),\n\t\t\ttool_use_id: invocation.call_id,\n\t\t\ttool_input: mcpArgumentsFromPayload(invocation.payload),\n\t\t\ttool_response: result.result,\n\t\t};\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<McpToolOutput> {\n\t\ttry {\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst toolInput = mcpArgumentsFromPayload(invocation.payload);\n\t\t\tconst response = await invocation.session.call_tool(invocation.turn, {\n\t\t\t\tthread_id: invocation.session.threadId,\n\t\t\t\tcall_id: invocation.call_id,\n\t\t\t\tserver_name: this.tool.server_name,\n\t\t\t\ttool_name: this.tool.name,\n\t\t\t\targuments: toolInput,\n\t\t\t});\n\t\t\treturn new McpToolOutput(\n\t\t\t\tresponse.output,\n\t\t\t\ttoolInput,\n\t\t\t\tMath.max(0, Date.now() - startedAt),\n\t\t\t\ttrue,\n\t\t\t\tinvocation.turn.truncation_policy,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: `MCP tool is unavailable: ${this.name.display()}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function mcpArgumentsFromPayload(payload: ToolPayload): unknown {\n\tif (payload.type === \"mcp\") {\n\t\treturn parseJsonOrRaw(payload.raw_arguments);\n\t}\n\tif (payload.type === \"function\") {\n\t\treturn parseJsonOrRaw(payload.arguments);\n\t}\n\treturn {};\n}\n\nfunction parseJsonOrRaw(value: string): unknown {\n\ttry {\n\t\treturn JSON.parse(value) as unknown;\n\t} catch {\n\t\treturn value;\n\t}\n}\n","import {\n\tnormalizeRequestPermissionsArgs,\n\tREQUEST_PERMISSIONS_TOOL_NAME,\n\ttype RequestPermissionsArgs,\n} from \"../../request_permissions\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\n\nexport class RequestPermissionsHandler\n\timplements ToolHandler<FunctionToolOutput>\n{\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(REQUEST_PERMISSIONS_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst { session, turn, call_id, payload } = invocation;\n\n\t\tif (payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t`${REQUEST_PERMISSIONS_TOOL_NAME} handler received unsupported payload`,\n\t\t\t);\n\t\t}\n\n\t\tlet args: RequestPermissionsArgs;\n\t\ttry {\n\t\t\targs = normalizeRequestPermissionsArgs(\n\t\t\t\tparseArguments<RequestPermissionsArgs>(payload.arguments),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (isFunctionCallError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow FunctionCallError.respondToModel(errorMessage(error));\n\t\t}\n\t\tconst response = await session.request_permissions(turn, call_id, args);\n\t\tif (!response) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t`${REQUEST_PERMISSIONS_TOOL_NAME} was cancelled before receiving a response`,\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\treturn FunctionToolOutput.fromText(JSON.stringify(response), true);\n\t\t} catch (error) {\n\t\t\tthrow FunctionCallError.fatal(\n\t\t\t\t`failed to serialize ${REQUEST_PERMISSIONS_TOOL_NAME} response: ${errorMessage(error)}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction parseArguments<T>(argumentsJson: string): T {\n\ttry {\n\t\treturn JSON.parse(argumentsJson) as T;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isFunctionCallError(error: unknown): error is FunctionCallError {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"kind\" in error &&\n\t\t\"message\" in error\n\t);\n}\n","import {\n\tnormalizeRequestUserInputArgs,\n\tREQUEST_USER_INPUT_TOOL_NAME,\n\trequestUserInputUnavailableMessage,\n\ttype RequestUserInputArgs,\n} from \"../../request_user_input\";\nimport {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\nimport type { ModeKind } from \"../../config-types\";\n\nexport type RequestUserInputHandlerParams = {\n\tavailable_modes: ModeKind[];\n};\n\nexport class RequestUserInputHandler\n\timplements ToolHandler<FunctionToolOutput>\n{\n\tconstructor(private readonly params: RequestUserInputHandlerParams) {}\n\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(REQUEST_USER_INPUT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tconst { session, turn, call_id, payload } = invocation;\n\n\t\tif (payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t`${REQUEST_USER_INPUT_TOOL_NAME} handler received unsupported payload`,\n\t\t\t);\n\t\t}\n\n\t\tif (is_non_root_agent(turn.session_source)) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"request_user_input can only be used by the root thread\",\n\t\t\t);\n\t\t}\n\n\t\tconst mode = session.collaboration_mode().mode;\n\t\tconst unavailableMessage = requestUserInputUnavailableMessage(\n\t\t\tmode,\n\t\t\tthis.params.available_modes,\n\t\t);\n\t\tif (unavailableMessage) {\n\t\t\tthrow FunctionCallError.respondToModel(unavailableMessage);\n\t\t}\n\n\t\tconst args = normalizeRequestUserInputArgs(\n\t\t\tparseArguments<RequestUserInputArgs>(payload.arguments),\n\t\t);\n\t\tconst response = await session.request_user_input(turn, call_id, args);\n\t\tif (!response) {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t`${REQUEST_USER_INPUT_TOOL_NAME} was cancelled before receiving a response`,\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\treturn FunctionToolOutput.fromText(JSON.stringify(response), true);\n\t\t} catch (error) {\n\t\t\tthrow FunctionCallError.fatal(\n\t\t\t\t`failed to serialize ${REQUEST_USER_INPUT_TOOL_NAME} response: ${errorMessage(error)}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction parseArguments<T>(argumentsJson: string): T {\n\ttry {\n\t\treturn JSON.parse(argumentsJson) as T;\n\t} catch (error) {\n\t\tthrow FunctionCallError.respondToModel(\n\t\t\t`failed to parse function arguments: ${errorMessage(error)}`,\n\t\t);\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction is_non_root_agent(session_source: unknown): boolean {\n\tif (typeof session_source === \"string\") {\n\t\treturn session_source === \"thread_spawn\" || session_source === \"sub_agent\";\n\t}\n\tif (typeof session_source !== \"object\" || session_source === null) {\n\t\treturn false;\n\t}\n\tconst source = session_source as Record<string, unknown>;\n\treturn (\n\t\tsource.type === \"thread_spawn\" ||\n\t\t\"sub_agent\" in source ||\n\t\t(\"parent_thread_id\" in source && \"depth\" in source)\n\t);\n}\n","import {\n\tTOOL_SEARCH_DEFAULT_LIMIT,\n\tTOOL_SEARCH_TOOL_NAME,\n\ttype ToolSearchEntry,\n\ttool_search_outputs,\n} from \"../tool_search_entry\";\nimport {\n\tFunctionCallError,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n\tToolKind,\n\ttype ToolPayload,\n} from \"../context\";\nimport { ToolName, type ToolNameInput } from \"../tool_name\";\n\nexport class ToolSearchOutput {\n\tconstructor(readonly tools: unknown[]) {}\n\n\tlogPreview(): string {\n\t\treturn `${this.tools.length} tools`;\n\t}\n\n\tsuccessForLogging(): boolean {\n\t\treturn true;\n\t}\n\n\ttoResponseItem(callId: string) {\n\t\treturn {\n\t\t\ttype: \"tool_search_output\" as const,\n\t\t\tcall_id: callId,\n\t\t\tstatus: \"completed\" as const,\n\t\t\texecution: \"client\" as const,\n\t\t\ttools: this.tools,\n\t\t};\n\t}\n\n\tpostToolUseResponse(): unknown | null {\n\t\treturn { tools: this.tools };\n\t}\n\n\tcodeModeResult(): unknown {\n\t\treturn { tools: this.tools };\n\t}\n}\n\nexport class ToolSearchHandler implements ToolHandler<ToolSearchOutput> {\n\tprivate readonly entries: ToolSearchEntry[];\n\tprivate readonly searchEngine: Bm25SearchEngine;\n\n\tconstructor(entries: readonly ToolSearchEntry[]) {\n\t\tthis.entries = [...entries];\n\t\tthis.searchEngine = new Bm25SearchEngine(\n\t\t\tthis.entries.map((entry) => entry.search_text),\n\t\t);\n\t}\n\n\ttoolName(): ToolNameInput {\n\t\treturn ToolName.plain(TOOL_SEARCH_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tmatchesKind(payload: ToolPayload): boolean {\n\t\treturn payload.type === \"tool_search\";\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<ToolSearchOutput> {\n\t\tconst args =\n\t\t\tinvocation.payload.type === \"tool_search\"\n\t\t\t\t? invocation.payload.arguments\n\t\t\t\t: null;\n\t\tif (!args) {\n\t\t\tthrow FunctionCallError.fatal(\n\t\t\t\t`${TOOL_SEARCH_TOOL_NAME} handler received unsupported payload`,\n\t\t\t);\n\t\t}\n\n\t\tconst query = String(args.query ?? \"\").trim();\n\t\tif (!query) {\n\t\t\tthrow FunctionCallError.respondToModel(\"query must not be empty\");\n\t\t}\n\n\t\tconst requestedLimit =\n\t\t\ttypeof args.limit === \"number\" && Number.isFinite(args.limit)\n\t\t\t\t? Math.trunc(args.limit)\n\t\t\t\t: null;\n\t\tif (requestedLimit === 0) {\n\t\t\tthrow FunctionCallError.respondToModel(\"limit must be greater than zero\");\n\t\t}\n\t\tconst limit = requestedLimit ?? TOOL_SEARCH_DEFAULT_LIMIT;\n\t\tif (this.entries.length === 0) {\n\t\t\treturn new ToolSearchOutput([]);\n\t\t}\n\n\t\tconst results = this.search(query, Math.max(1, limit), requestedLimit === null);\n\t\treturn new ToolSearchOutput(tool_search_outputs(results));\n\t}\n\n\tprivate search(\n\t\tquery: string,\n\t\tlimit: number,\n\t\tuseDefaultLimit: boolean,\n\t): ToolSearchEntry[] {\n\t\tlet results = this.searchEngine\n\t\t\t.search(query, limit)\n\t\t\t.map((result) => this.entries[result.documentIndex])\n\t\t\t.filter((entry): entry is ToolSearchEntry => Boolean(entry));\n\n\t\tif (!useDefaultLimit) {\n\t\t\treturn results;\n\t\t}\n\n\t\tif (\n\t\t\tresults.some(\n\t\t\t\t(entry) => entry.limit_bucket === COMPUTER_USE_MCP_SERVER_NAME,\n\t\t\t)\n\t\t) {\n\t\t\tresults = this.searchEngine\n\t\t\t\t.search(query, COMPUTER_USE_TOOL_SEARCH_LIMIT)\n\t\t\t\t.map((result) => this.entries[result.documentIndex])\n\t\t\t\t.filter((entry): entry is ToolSearchEntry => Boolean(entry));\n\t\t}\n\t\treturn limitResultsByBucket(results);\n\t}\n}\n\nconst COMPUTER_USE_MCP_SERVER_NAME = \"computer-use\";\nconst COMPUTER_USE_TOOL_SEARCH_LIMIT = 20;\n\ntype Bm25SearchResult = {\n\tdocumentIndex: number;\n\tscore: number;\n};\n\nclass Bm25SearchEngine {\n\tprivate readonly averageDocumentLength: number;\n\tprivate readonly documentFrequency = new Map<string, number>();\n\tprivate readonly documents: Array<{\n\t\tlength: number;\n\t\ttermFrequency: Map<string, number>;\n\t}> = [];\n\n\tconstructor(documents: readonly string[]) {\n\t\tfor (const document of documents) {\n\t\t\tconst tokens = tokenize(document);\n\t\t\tconst termFrequency = new Map<string, number>();\n\t\t\tfor (const token of tokens) {\n\t\t\t\ttermFrequency.set(token, (termFrequency.get(token) ?? 0) + 1);\n\t\t\t}\n\t\t\tfor (const token of termFrequency.keys()) {\n\t\t\t\tthis.documentFrequency.set(\n\t\t\t\t\ttoken,\n\t\t\t\t\t(this.documentFrequency.get(token) ?? 0) + 1,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.documents.push({\n\t\t\t\tlength: tokens.length,\n\t\t\t\ttermFrequency,\n\t\t\t});\n\t\t}\n\t\tthis.averageDocumentLength =\n\t\t\tthis.documents.reduce((sum, document) => sum + document.length, 0) /\n\t\t\t\tMath.max(1, this.documents.length);\n\t}\n\n\tsearch(query: string, limit: number): Bm25SearchResult[] {\n\t\tconst queryTerms = tokenize(query);\n\t\tconst scores = this.documents\n\t\t\t.map((document, documentIndex) => ({\n\t\t\t\tdocumentIndex,\n\t\t\t\tscore: this.score(document, queryTerms),\n\t\t\t}))\n\t\t\t.filter((result) => result.score > 0)\n\t\t\t.sort((a, b) => b.score - a.score || a.documentIndex - b.documentIndex);\n\t\treturn scores.slice(0, limit);\n\t}\n\n\tprivate score(\n\t\tdocument: { length: number; termFrequency: Map<string, number> },\n\t\tqueryTerms: readonly string[],\n\t): number {\n\t\tconst k1 = 1.2;\n\t\tconst b = 0.75;\n\t\tlet score = 0;\n\t\tfor (const term of queryTerms) {\n\t\t\tconst frequency = document.termFrequency.get(term) ?? 0;\n\t\t\tif (frequency === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst documentFrequency = this.documentFrequency.get(term) ?? 0;\n\t\t\tconst idf = Math.log(\n\t\t\t\t1 +\n\t\t\t\t\t(this.documents.length - documentFrequency + 0.5) /\n\t\t\t\t\t\t(documentFrequency + 0.5),\n\t\t\t);\n\t\t\tconst denominator =\n\t\t\t\tfrequency +\n\t\t\t\tk1 *\n\t\t\t\t\t(1 -\n\t\t\t\t\t\tb +\n\t\t\t\t\t\tb *\n\t\t\t\t\t\t\t(document.length / Math.max(1, this.averageDocumentLength)));\n\t\t\tscore += idf * ((frequency * (k1 + 1)) / denominator);\n\t\t}\n\t\treturn score;\n\t}\n}\n\nfunction tokenize(value: string): string[] {\n\treturn value\n\t\t.toLowerCase()\n\t\t.match(/[\\p{L}\\p{N}_]+/gu) ?? [];\n}\n\nfunction limitResultsByBucket(results: readonly ToolSearchEntry[]): ToolSearchEntry[] {\n\tconst counts = new Map<string, number>();\n\tconst limited: ToolSearchEntry[] = [];\n\tfor (const result of results) {\n\t\tconst bucket = result.limit_bucket ?? null;\n\t\tif (!bucket) {\n\t\t\tlimited.push(result);\n\t\t\tcontinue;\n\t\t}\n\t\tconst count = counts.get(bucket) ?? 0;\n\t\tif (count >= defaultLimitForBucket(bucket)) {\n\t\t\tcontinue;\n\t\t}\n\t\tcounts.set(bucket, count + 1);\n\t\tlimited.push(result);\n\t}\n\treturn limited;\n}\n\nfunction defaultLimitForBucket(bucket: string): number {\n\treturn bucket === COMPUTER_USE_MCP_SERVER_NAME\n\t\t? COMPUTER_USE_TOOL_SEARCH_LIMIT\n\t\t: TOOL_SEARCH_DEFAULT_LIMIT;\n}\n","import {\n\tFunctionCallError,\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n\ttype ToolInvocation,\n} from \"../context\";\nimport { ToolName, type ToolNameInput } from \"../tool_name\";\n\nexport function unavailable_tool_message(\n\ttoolName: string,\n\tnextStep: string,\n): string {\n\treturn `Tool \\`${toolName}\\` is not currently available. It appeared in earlier tool calls in this conversation, but its implementation is not available in the current request. ${nextStep}`;\n}\n\nexport class UnavailableToolHandler implements ToolHandler<FunctionToolOutput> {\n\tprivate readonly tool_name: ToolName;\n\n\tconstructor(toolName: ToolNameInput) {\n\t\tthis.tool_name = ToolName.from(toolName);\n\t}\n\n\ttoolName(): ToolName {\n\t\treturn this.tool_name;\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(invocation: ToolInvocation): Promise<FunctionToolOutput> {\n\t\tif (invocation.payload.type !== \"function\") {\n\t\t\tthrow FunctionCallError.respondToModel(\n\t\t\t\t\"unavailable tool handler received unsupported payload\",\n\t\t\t);\n\t\t}\n\t\treturn FunctionToolOutput.fromText(\n\t\t\tunavailable_tool_message(\n\t\t\t\tthis.tool_name.display(),\n\t\t\t\t\"Retry after the tool becomes available or ask the user to re-enable it.\",\n\t\t\t),\n\t\t\tfalse,\n\t\t);\n\t}\n}\n","import { requestUserInputAvailableModes } from \"../request_user_input\";\nimport {\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n\ttype McpToolInfo,\n} from \"../mcp\";\nimport type { DynamicToolSpec } from \"../protocol\";\nimport { ToolRegistryBuilder } from \"./registry\";\nimport type { ToolSpec } from \"./context\";\nimport { DynamicToolHandler } from \"./handlers/dynamic\";\nimport { ApplyPatchHandler } from \"./handlers/apply_patch\";\nimport { PlanHandler } from \"./handlers/plan\";\nimport { ExecCommandHandler } from \"./handlers/unified_exec/exec_command\";\nimport { WriteStdinHandler } from \"./handlers/unified_exec/write_stdin\";\nimport {\n\tCreateGoalHandler,\n\tGetGoalHandler,\n\tUpdateGoalHandler,\n} from \"./handlers/goal\";\nimport { McpToolHandler } from \"./handlers/mcp\";\nimport {\n\tListMcpResourcesHandler,\n\tListMcpResourceTemplatesHandler,\n\tReadMcpResourceHandler,\n} from \"./handlers/mcp_resource\";\nimport {\n\tCloseAgentHandler,\n\tFollowupTaskHandler,\n\tListAgentsHandler,\n\tResumeAgentHandler,\n\tSendInputHandler,\n\tSendMessageHandler,\n\tSpawnAgentHandler,\n\tWaitAgentHandler,\n} from \"./handlers/multi_agents\";\nimport { RequestPermissionsHandler } from \"./handlers/request_permissions\";\nimport { RequestUserInputHandler } from \"./handlers/request_user_input\";\nimport { ToolSearchHandler } from \"./handlers/tool_search\";\nimport {\n\tUnavailableToolHandler,\n\tunavailable_tool_message,\n} from \"./handlers/unavailable_tool\";\nimport { build_tool_registry_plan } from \"./spec_plan\";\nimport {\n\tToolHandlerKind,\n\ttype ToolRegistryPlanParams,\n\ttype ToolsConfig,\n} from \"./spec_plan_types\";\nimport { ToolName } from \"./tool_name\";\nimport { build_tool_search_entries_for_config } from \"./tool_search_entry\";\nimport { qualify_tool_infos } from \"../../../codex-mcp/src/tools\";\n\nexport type BuildSpecsWithDiscoverableToolsParams = ToolRegistryPlanParams & {\n\tdynamic_tools: readonly DynamicToolSpec[];\n\tmcp_tools?: readonly McpToolInfo[];\n};\n\nexport function build_specs_with_discoverable_tools(\n\tconfig: ToolsConfig,\n\tparams: BuildSpecsWithDiscoverableToolsParams,\n): ToolRegistryBuilder {\n\tconst plan = build_tool_registry_plan(config, params);\n\tconst builder = new ToolRegistryBuilder();\n\n\tfor (const configuredSpec of plan.specs) {\n\t\tbuilder.pushSpecWithParallelSupport(\n\t\t\tconfiguredSpec.spec,\n\t\t\tconfiguredSpec.supports_parallel_tool_calls,\n\t\t);\n\t}\n\n\tconst availableModes =\n\t\tconfig.request_user_input_available_modes.length > 0\n\t\t\t? config.request_user_input_available_modes\n\t\t\t: requestUserInputAvailableModes();\n\tconst visibleMcpTools = qualify_tool_infos(params.mcp_tools ?? []);\n\tconst deferredMcpTools = qualify_tool_infos(params.deferred_mcp_tools ?? []);\n\tconst mcpTools = [...visibleMcpTools, ...deferredMcpTools];\n\tconst deferredDynamicTools = params.dynamic_tools.filter(\n\t\t(tool) =>\n\t\t\ttool.defer_loading && (config.namespace_tools || tool.namespace == null),\n\t);\n\tconst existingSpecNames = new Set(\n\t\tplan.specs.map((configuredSpec) => toolSpecDisplayName(configuredSpec.spec)),\n\t);\n\n\tfor (const handlerSpec of plan.handlers) {\n\t\tswitch (handlerSpec.kind) {\n\t\t\tcase ToolHandlerKind.RequestUserInput:\n\t\t\t\tbuilder.registerHandler(\n\t\t\t\t\tnew RequestUserInputHandler({ available_modes: [...availableModes] }),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.RequestPermissions:\n\t\t\t\tbuilder.registerHandler(new RequestPermissionsHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.DynamicTool:\n\t\t\t\tbuilder.registerHandler(\n\t\t\t\t\tnew DynamicToolHandler({ tool_name: handlerSpec.name }),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ToolSearch:\n\t\t\t\tbuilder.registerHandler(\n\t\t\t\t\tnew ToolSearchHandler(\n\t\t\t\t\t\tbuild_tool_search_entries_for_config(\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\tdeferredMcpTools,\n\t\t\t\t\t\t\tdeferredDynamicTools,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.Mcp: {\n\t\t\t\tconst toolName = ToolName.from(handlerSpec.name);\n\t\t\t\tconst tool = mcpTools.find(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tmcpToolCallableNamespace(candidate) === toolName.namespace &&\n\t\t\t\t\t\tmcpToolCallableName(candidate) === toolName.name,\n\t\t\t\t);\n\t\t\t\tif (tool) {\n\t\t\t\t\tbuilder.registerHandler(new McpToolHandler(tool));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ToolHandlerKind.ListMcpResources:\n\t\t\t\tbuilder.registerHandler(new ListMcpResourcesHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ListMcpResourceTemplates:\n\t\t\t\tbuilder.registerHandler(new ListMcpResourceTemplatesHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ReadMcpResource:\n\t\t\t\tbuilder.registerHandler(new ReadMcpResourceHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ExecCommand:\n\t\t\t\tbuilder.registerHandler(new ExecCommandHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.WriteStdin:\n\t\t\t\tbuilder.registerHandler(new WriteStdinHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ApplyPatch:\n\t\t\t\tbuilder.registerHandler(new ApplyPatchHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.Plan:\n\t\t\t\tbuilder.registerHandler(new PlanHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.GetGoal:\n\t\t\t\tbuilder.registerHandler(new GetGoalHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.CreateGoal:\n\t\t\t\tbuilder.registerHandler(new CreateGoalHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.UpdateGoal:\n\t\t\t\tbuilder.registerHandler(new UpdateGoalHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.SpawnAgent:\n\t\t\t\tbuilder.registerHandler(new SpawnAgentHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.SendInput:\n\t\t\t\tbuilder.registerHandler(new SendInputHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.WaitAgent:\n\t\t\t\tbuilder.registerHandler(new WaitAgentHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.CloseAgent:\n\t\t\t\tbuilder.registerHandler(new CloseAgentHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ResumeAgent:\n\t\t\t\tbuilder.registerHandler(new ResumeAgentHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.ListAgents:\n\t\t\t\tbuilder.registerHandler(new ListAgentsHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.SendMessage:\n\t\t\t\tbuilder.registerHandler(new SendMessageHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.FollowupTask:\n\t\t\t\tbuilder.registerHandler(new FollowupTaskHandler());\n\t\t\t\tbreak;\n\t\t\tcase ToolHandlerKind.UnavailableTool:\n\t\t\t\tbuilder.registerHandler(new UnavailableToolHandler(handlerSpec.name));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst visibleMcpToolKeys = new Set(\n\t\tvisibleMcpTools.map((tool) =>\n\t\t\tToolName.namespaced(\n\t\t\t\tmcpToolCallableNamespace(tool),\n\t\t\t\tmcpToolCallableName(tool),\n\t\t\t).key(),\n\t\t),\n\t);\n\tfor (const tool of deferredMcpTools) {\n\t\tconst toolName = ToolName.namespaced(\n\t\t\tmcpToolCallableNamespace(tool),\n\t\t\tmcpToolCallableName(tool),\n\t\t);\n\t\tif (!visibleMcpToolKeys.has(toolName.key())) {\n\t\t\tbuilder.registerHandler(new McpToolHandler(tool));\n\t\t}\n\t}\n\n\tfor (const toolName of params.unavailable_called_tools ?? []) {\n\t\tconst displayName = toolName.display();\n\t\tif (!existingSpecNames.has(displayName)) {\n\t\t\tbuilder.pushSpec(createUnavailableToolSpec(displayName));\n\t\t\texistingSpecNames.add(displayName);\n\t\t}\n\t\tbuilder.registerHandler(new UnavailableToolHandler(toolName));\n\t}\n\n\treturn builder;\n}\n\nexport { ToolRegistryBuilder };\n\nfunction toolSpecDisplayName(spec: ToolSpec): string {\n\tif (spec.type === \"namespace\") {\n\t\treturn spec.name;\n\t}\n\tif (\"name\" in spec) {\n\t\treturn spec.name;\n\t}\n\treturn spec.type;\n}\n\nfunction createUnavailableToolSpec(toolName: string): ToolSpec {\n\treturn {\n\t\ttype: \"function\",\n\t\tname: toolName,\n\t\tdescription: unavailable_tool_message(\n\t\t\ttoolName,\n\t\t\t\"Calling this placeholder returns an error explaining that the tool is unavailable.\",\n\t\t),\n\t\tstrict: false,\n\t\tparameters: {\n\t\t\ttype: \"object\",\n\t\t\tproperties: {},\n\t\t\tadditionalProperties: false,\n\t\t},\n\t};\n}\n","import type { McpToolInfo } from \"../mcp\";\nimport {\n\tmcpToolCallableName,\n\tmcpToolCallableNamespace,\n} from \"../mcp\";\nimport type { ProviderCapabilities } from \"../model-provider\";\nimport type { DynamicToolSpec, ResponseItem } from \"../protocol\";\nimport { requestUserInputAvailableModes } from \"../request_user_input\";\nimport {\n\tCancellationToken,\n\ttype ConfiguredToolSpec,\n\tToolRegistry,\n\ttype ToolArgumentDiffConsumer,\n\ttype ToolPayload,\n\ttype ToolSpec,\n} from \"./context\";\nimport { build_specs_with_discoverable_tools } from \"./spec\";\nimport {\n\tdefaultToolsConfig,\n\ttype ToolsConfig,\n} from \"./spec_plan_types\";\nimport { ToolName, type ToolNameInput } from \"./tool_name\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport type { ToolCallSource } from \"./context\";\nimport type { DiscoverableTool } from \"./tool_search_entry\";\nimport { toolSpecName } from \"./tool_spec\";\n\nexport type ToolRouterParams = {\n\tdynamic_tools: readonly DynamicToolSpec[];\n\tmcp_tools?: readonly McpToolInfo[];\n\tdeferred_mcp_tools?: readonly McpToolInfo[];\n\tunavailable_called_tools?: readonly ToolName[];\n\tparallel_mcp_server_names?: ReadonlySet<string>;\n\tdiscoverable_tools?: readonly DiscoverableTool[];\n\tprovider_capabilities?: Partial<ProviderCapabilities>;\n\ttools_config?: Partial<ToolsConfig>;\n};\n\nexport type ToolCall = {\n\tcall_id: string;\n\ttool_name: ToolName;\n\tpayload: ToolPayload;\n};\n\nexport class ToolRouter {\n\tprivate constructor(\n\t\tprivate readonly tool_registry: ToolRegistry,\n\t\tprivate readonly configured_specs: ConfiguredToolSpec[],\n\t\tprivate readonly visible_specs: ToolSpec[],\n\t\tprivate readonly parallel_tool_names: Set<string>,\n\t\tprivate readonly parallel_mcp_server_names: ReadonlySet<string>,\n\t) {}\n\n\tstatic from_config(params: ToolRouterParams): ToolRouter {\n\t\tconst availableModes = requestUserInputAvailableModes();\n\t\tconst config = defaultToolsConfig({\n\t\t\tnamespace_tools: params.provider_capabilities?.namespace_tools,\n\t\t\timage_generation: params.provider_capabilities?.image_generation,\n\t\t\tweb_search: params.provider_capabilities?.web_search,\n\t\t\trequest_user_input_available_modes: availableModes,\n\t\t\t...params.tools_config,\n\t\t});\n\t\tconst builder = build_specs_with_discoverable_tools(config, {\n\t\t\tdynamic_tools: params.dynamic_tools,\n\t\t\tmcp_tools: params.mcp_tools ?? [],\n\t\t\tdeferred_mcp_tools: params.deferred_mcp_tools ?? params.mcp_tools ?? [],\n\t\t\tunavailable_called_tools: params.unavailable_called_tools ?? [],\n\t\t\tparallel_mcp_tool_names: [],\n\t\t\tdiscoverable_tools: params.discoverable_tools ?? [],\n\t\t});\n\t\tconst { specs, registry } = builder.build();\n\t\tconst deferredDynamicToolNames = new Set(\n\t\t\tparams.dynamic_tools\n\t\t\t\t.filter((tool) => tool.defer_loading)\n\t\t\t\t.map((tool) => ToolName.from(tool).key()),\n\t\t);\n\t\tconst model_visible_specs = specs\n\t\t\t.map((configuredTool) => configuredTool.spec)\n\t\t\t.map((spec) => filter_deferred_dynamic_tool_spec(spec, deferredDynamicToolNames))\n\t\t\t.filter((spec): spec is ToolSpec => spec !== null);\n\n\t\treturn new ToolRouter(\n\t\t\tregistry,\n\t\t\tspecs,\n\t\t\tmodel_visible_specs,\n\t\t\tnew Set(configured_parallel_tool_names(specs)),\n\t\t\tparams.parallel_mcp_server_names ?? new Set<string>(),\n\t\t);\n\t}\n\n\tspecs(): ToolSpec[] {\n\t\treturn this.configured_specs.map((tool) => tool.spec);\n\t}\n\n\tconfigured_tools(): ConfiguredToolSpec[] {\n\t\treturn this.configured_specs;\n\t}\n\n\tmodel_visible_specs(): ToolSpec[] {\n\t\treturn [...this.visible_specs];\n\t}\n\n\tregistry_for_test(): ToolRegistry {\n\t\treturn this.tool_registry;\n\t}\n\n\tregistry(): ToolRegistry {\n\t\treturn this.tool_registry;\n\t}\n\n\tfind_spec(toolName: ToolNameInput): ToolSpec | null {\n\t\tconst name = ToolName.from(toolName);\n\t\treturn findToolSpec(this.specs(), name);\n\t}\n\n\tcreateDiffConsumer(toolName: ToolNameInput): ToolArgumentDiffConsumer | null {\n\t\treturn this.tool_registry.createDiffConsumer(toolName);\n\t}\n\n\ttool_supports_parallel(call: ToolCall): boolean {\n\t\tif (call.payload.type === \"mcp\") {\n\t\t\treturn this.parallel_mcp_server_names.has(call.payload.server);\n\t\t}\n\t\tif (call.tool_name.namespace !== null) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.parallel_tool_names.has(call.tool_name.key());\n\t}\n\n\tstatic async build_tool_call(\n\t\tsession: Session,\n\t\titem: ResponseItem,\n\t): Promise<ToolCall | null> {\n\t\tif (isFunctionCallResponseItem(item)) {\n\t\t\tconst toolName = ToolName.new(item.namespace, item.name);\n\t\t\tconst mcpTool = toolName.namespace\n\t\t\t\t? await session.resolve_mcp_tool_info(toolName.display())\n\t\t\t\t: null;\n\t\t\tif (mcpTool) {\n\t\t\t\treturn {\n\t\t\t\t\tcall_id: item.call_id,\n\t\t\t\t\ttool_name: ToolName.namespaced(\n\t\t\t\t\t\tmcpToolCallableNamespace(mcpTool),\n\t\t\t\t\t\tmcpToolCallableName(mcpTool),\n\t\t\t\t\t),\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\ttype: \"mcp\",\n\t\t\t\t\t\tserver: mcpTool.server_name,\n\t\t\t\t\t\ttool: mcpTool.name,\n\t\t\t\t\t\traw_arguments: item.arguments,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\ttool_name: toolName,\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\targuments: item.arguments,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (isCustomToolCallResponseItem(item)) {\n\t\t\treturn {\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\ttool_name: ToolName.plain(item.name),\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\tinput: item.input,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (isClientToolSearchCallResponseItem(item)) {\n\t\t\treturn {\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\ttool_name: ToolName.plain(\"tool_search\"),\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: \"tool_search\",\n\t\t\t\t\targuments: item.arguments,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (isLocalShellCallResponseItem(item)) {\n\t\t\treturn {\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\ttool_name: ToolName.plain(\"local_shell\"),\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: \"local_shell\",\n\t\t\t\t\tparams: item.action,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tasync dispatch_tool_call_with_code_mode_result(params: {\n\t\tsession: Session;\n\t\tturn: TurnContext;\n\t\tcall: ToolCall;\n\t\tsource?: ToolCallSource;\n\t\tsignal?: AbortSignal;\n\t}) {\n\t\tconst { session, turn, call } = params;\n\t\treturn this.tool_registry.dispatchAny({\n\t\t\tsession,\n\t\t\tturn,\n\t\t\tcancellation_token: new CancellationToken(params.signal),\n\t\t\tcall_id: call.call_id,\n\t\t\ttool_name: call.tool_name,\n\t\t\tsource: params.source ?? { type: \"direct\" },\n\t\t\tpayload: call.payload,\n\t\t});\n\t}\n}\n\nfunction filter_deferred_dynamic_tool_spec(\n\tspec: ToolSpec,\n\tdeferredDynamicToolNames: Set<string>,\n): ToolSpec | null {\n\tif (spec.type === \"function\") {\n\t\treturn deferredDynamicToolNames.has(ToolName.plain(spec.name).key())\n\t\t\t? null\n\t\t\t: spec;\n\t}\n\n\tif (spec.type === \"namespace\") {\n\t\tconst visibleTools = spec.tools.filter(\n\t\t\t(tool) =>\n\t\t\t\t!deferredDynamicToolNames.has(\n\t\t\t\t\tToolName.namespaced(spec.name, tool.name).key(),\n\t\t\t\t),\n\t\t);\n\n\t\treturn visibleTools.length > 0\n\t\t\t? {\n\t\t\t\t\t...spec,\n\t\t\t\t\ttools: visibleTools,\n\t\t\t\t}\n\t\t\t: null;\n\t}\n\n\treturn spec;\n}\n\nfunction configured_parallel_tool_names(specs: ConfiguredToolSpec[]): string[] {\n\treturn specs\n\t\t.filter((spec) => spec.supports_parallel_tool_calls)\n\t\t.filter((spec) => spec.spec.type !== \"namespace\")\n\t\t.map((spec) => ToolName.plain(toolSpecName(spec.spec)).key());\n}\n\nfunction findToolSpec(specs: ToolSpec[], toolName: ToolName): ToolSpec | null {\n\tfor (const spec of specs) {\n\t\tif (\n\t\t\ttoolName.namespace === null &&\n\t\t\t(spec.type === \"function\" || spec.type === \"custom\") &&\n\t\t\tspec.name === toolName.name\n\t\t) {\n\t\t\treturn spec;\n\t\t}\n\n\t\tif (spec.type === \"namespace\" && spec.name === toolName.namespace) {\n\t\t\tconst nestedTool = spec.tools.find((tool) => tool.name === toolName.name);\n\t\t\tif (nestedTool) {\n\t\t\t\treturn nestedTool;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction isFunctionCallResponseItem(\n\titem: ResponseItem,\n): item is ResponseItem & {\n\ttype: \"function_call\";\n\tcall_id: string;\n\tname: string;\n\tnamespace?: string | null;\n\targuments: string;\n} {\n\treturn (\n\t\titem.type === \"function_call\" &&\n\t\ttypeof item.call_id === \"string\" &&\n\t\ttypeof item.name === \"string\" &&\n\t\t(item.namespace === undefined ||\n\t\t\titem.namespace === null ||\n\t\t\ttypeof item.namespace === \"string\") &&\n\t\ttypeof item.arguments === \"string\"\n\t);\n}\n\nfunction isCustomToolCallResponseItem(\n\titem: ResponseItem,\n): item is ResponseItem & {\n\ttype: \"custom_tool_call\";\n\tcall_id: string;\n\tname: string;\n\tinput: string;\n} {\n\treturn (\n\t\titem.type === \"custom_tool_call\" &&\n\t\ttypeof item.call_id === \"string\" &&\n\t\ttypeof item.name === \"string\" &&\n\t\ttypeof item.input === \"string\"\n\t);\n}\n\nfunction isClientToolSearchCallResponseItem(\n\titem: ResponseItem,\n): item is ResponseItem & {\n\ttype: \"tool_search_call\";\n\tcall_id: string;\n\texecution: \"client\";\n\targuments: Record<string, unknown>;\n} {\n\treturn (\n\t\titem.type === \"tool_search_call\" &&\n\t\ttypeof item.call_id === \"string\" &&\n\t\titem.execution === \"client\" &&\n\t\ttypeof item.arguments === \"object\" &&\n\t\titem.arguments !== null\n\t);\n}\n\nfunction isLocalShellCallResponseItem(\n\titem: ResponseItem,\n): item is ResponseItem & {\n\ttype: \"local_shell_call\";\n\tcall_id: string;\n\taction: Record<string, unknown>;\n} {\n\treturn (\n\t\titem.type === \"local_shell_call\" &&\n\t\ttypeof item.call_id === \"string\" &&\n\t\ttypeof item.action === \"object\" &&\n\t\titem.action !== null\n\t);\n}\n","import type { AgentMessageTurnItem, TurnItem } from \"./items\";\nimport type { FunctionCallOutputPayload, ResponseItem } from \"./models\";\nimport type { Session } from \"./session/session\";\nimport type { TurnContext } from \"./session/turn-context\";\nimport type { ToolCallRuntime } from \"./tools/parallel\";\nimport { ToolRouter } from \"./tools/router\";\nimport { parseTurnItem } from \"./event-mapping\";\nimport {\n\textractProposedPlanFromText,\n\trawAssistantOutputTextFromItem,\n\tresponseInputToResponseItem,\n} from \"../../codex-api/src\";\nimport {\n\tAssistantTextStreamParser,\n\ttype ProposedPlanSegment,\n} from \"./stream-parser\";\n\nexport async function record_completed_response_item(\n\tsession: Session,\n\tturnContext: TurnContext,\n\titem: ResponseItem,\n): Promise<void> {\n\tawait session.record_conversation_items(turnContext, [item]);\n}\n\nexport type InFlightFuture = Promise<ResponseItem>;\n\nexport type OutputItemResult = {\n\tlast_agent_message: string | null;\n\tneeds_follow_up: boolean;\n\ttool_future: InFlightFuture | null;\n\tstreamed_item_id?: string | null;\n};\n\nexport type HandleOutputCtx = {\n\tsession: Session;\n\tturn_context: TurnContext;\n\ttool_runtime: ToolCallRuntime;\n\tplan_mode_stream: PlanModeStreamState | null;\n\tstreamed_item_id: string | null;\n\tsignal?: AbortSignal;\n};\n\nexport async function handle_output_item_done(\n\tctx: HandleOutputCtx,\n\titem: ResponseItem,\n): Promise<OutputItemResult> {\n\tconst missingLocalShellOutput = missing_local_shell_call_output(item);\n\tif (missingLocalShellOutput) {\n\t\tawait record_completed_response_item(ctx.session, ctx.turn_context, item);\n\t\tawait ctx.session.record_conversation_items(ctx.turn_context, [\n\t\t\tmissingLocalShellOutput,\n\t\t]);\n\t\treturn {\n\t\t\tlast_agent_message: null,\n\t\t\tneeds_follow_up: true,\n\t\t\ttool_future: null,\n\t\t\tstreamed_item_id: ctx.streamed_item_id,\n\t\t};\n\t}\n\n\tconst toolCall = await ToolRouter.build_tool_call(ctx.session, item);\n\tif (toolCall) {\n\t\tawait record_completed_response_item(ctx.session, ctx.turn_context, item);\n\t\treturn {\n\t\t\tlast_agent_message: null,\n\t\t\tneeds_follow_up: true,\n\t\t\ttool_future: ctx.tool_runtime\n\t\t\t\t.handle_tool_call(toolCall, ctx.signal)\n\t\t\t\t.then(async (toolOutput) => {\n\t\t\t\t\tconst toolOutputItem = responseInputToResponseItem(toolOutput);\n\t\t\t\t\tawait record_completed_response_item(\n\t\t\t\t\t\tctx.session,\n\t\t\t\t\t\tctx.turn_context,\n\t\t\t\t\t\ttoolOutputItem,\n\t\t\t\t\t);\n\t\t\t\t\treturn toolOutputItem;\n\t\t\t\t}),\n\t\t\tstreamed_item_id: ctx.streamed_item_id,\n\t\t};\n\t}\n\n\treturn handle_non_tool_response_item(ctx, item);\n}\n\nexport async function handle_non_tool_response_item(\n\tctx: HandleOutputCtx,\n\titem: ResponseItem,\n): Promise<OutputItemResult> {\n\tconst rawAgentMessage = rawAssistantOutputTextFromItem(item);\n\tconst finalizedOutput = ctx.plan_mode_stream\n\t\t? await ctx.plan_mode_stream.completeFromFinalText(rawAgentMessage ?? \"\")\n\t\t: { assistantText: rawAgentMessage, planText: null };\n\tconst agentMessage = normalizedAssistantMessage(finalizedOutput.assistantText);\n\tlet streamedItemId = ctx.streamed_item_id;\n\n\tif (agentMessage) {\n\t\tconst itemId =\n\t\t\tstreamedItemId ??\n\t\t\tresponseItemId(item, `${ctx.turn_context.sub_id}-agent-message`);\n\t\tconst turnItem = agentMessageTurnItem(item, itemId, agentMessage);\n\t\tif (!streamedItemId) {\n\t\t\tawait ctx.session.send_event(ctx.turn_context, {\n\t\t\t\ttype: \"item_started\",\n\t\t\t\titem: agentMessageTurnItem(item, itemId, \"\"),\n\t\t\t});\n\t\t}\n\t\tawait ctx.session.send_event(ctx.turn_context, {\n\t\t\ttype: \"item_completed\",\n\t\t\titem: turnItem,\n\t\t});\n\t\tawait record_completed_response_item(ctx.session, ctx.turn_context, item);\n\t\treturn {\n\t\t\tlast_agent_message: agentMessage,\n\t\t\tneeds_follow_up: false,\n\t\t\ttool_future: null,\n\t\t\tstreamed_item_id: null,\n\t\t};\n\t}\n\n\tif (streamedItemId && finalizedOutput.planText) {\n\t\tstreamedItemId = null;\n\t}\n\n\tconst turnItem = parsedNonAgentTurnItem(\n\t\titem,\n\t\t`${ctx.turn_context.sub_id}-${item.type}`,\n\t);\n\tif (turnItem) {\n\t\tawait ctx.session.send_event(ctx.turn_context, {\n\t\t\ttype: \"item_started\",\n\t\t\titem: startedTurnItem(turnItem),\n\t\t});\n\t\tawait ctx.session.send_event(ctx.turn_context, {\n\t\t\ttype: \"item_completed\",\n\t\t\titem: turnItem,\n\t\t});\n\t}\n\n\tawait record_completed_response_item(ctx.session, ctx.turn_context, item);\n\n\treturn {\n\t\tlast_agent_message: null,\n\t\tneeds_follow_up: false,\n\t\ttool_future: null,\n\t\tstreamed_item_id: streamedItemId,\n\t};\n}\n\nexport function last_assistant_message_from_item(\n\titem: ResponseItem,\n\tplanMode: boolean,\n): string | null {\n\tconst raw = rawAssistantOutputTextFromItem(item);\n\tif (!raw) {\n\t\treturn null;\n\t}\n\tconst text = planMode ? extractProposedPlanFromText(raw).assistantText : raw;\n\treturn normalizedAssistantMessage(text);\n}\n\nfunction missing_local_shell_call_output(item: ResponseItem): ResponseItem | null {\n\tif (\n\t\titem.type !== \"local_shell_call\" ||\n\t\t(typeof item.call_id === \"string\" && item.call_id.length > 0)\n\t) {\n\t\treturn null;\n\t}\n\n\tconst output: FunctionCallOutputPayload = {\n\t\tbody: {\n\t\t\ttype: \"text\",\n\t\t\ttext: \"LocalShellCall without call_id or id\",\n\t\t},\n\t\tsuccess: false,\n\t};\n\treturn {\n\t\ttype: \"function_call_output\",\n\t\tcall_id: \"\",\n\t\toutput,\n\t};\n}\n\nfunction normalizedAssistantMessage(text: string | null): string | null {\n\tconst normalized = text?.trim();\n\treturn normalized ? normalized : null;\n}\n\nfunction responseItemId(item: ResponseItem, fallbackId: string): string {\n\treturn \"id\" in item && typeof item.id === \"string\" && item.id.length > 0\n\t\t? item.id\n\t\t: fallbackId;\n}\n\nfunction agentMessageTurnItem(\n\titem: ResponseItem,\n\tid: string,\n\ttext: string,\n): AgentMessageTurnItem {\n\treturn {\n\t\ttype: \"AgentMessage\",\n\t\tid,\n\t\tcontent: text.length > 0 ? [{ type: \"Text\", text }] : [],\n\t\tphase: item.type === \"message\" ? item.phase ?? null : null,\n\t\tmemory_citation: null,\n\t};\n}\n\nfunction parsedNonAgentTurnItem(item: ResponseItem, fallbackId: string): TurnItem | null {\n\tconst turnItem = parseTurnItem(item);\n\tif (!turnItem || turnItem.type === \"AgentMessage\") {\n\t\treturn null;\n\t}\n\n\treturn turnItem.id.length > 0 ? turnItem : { ...turnItem, id: fallbackId };\n}\n\nfunction startedTurnItem(item: TurnItem): TurnItem {\n\tif (item.type !== \"ImageGeneration\") {\n\t\treturn item;\n\t}\n\treturn {\n\t\t...item,\n\t\tstatus: \"in_progress\",\n\t\trevised_prompt: undefined,\n\t\tresult: \"\",\n\t\tsaved_path: undefined,\n\t};\n}\n\nexport class PlanModeStreamState {\n\tprivate readonly itemId: string;\n\tprivate readonly parser = new AssistantTextStreamParser(true);\n\tprivate emittedPlanText = \"\";\n\tprivate planItemStarted = false;\n\n\tconstructor(\n\t\tprivate readonly params: {\n\t\t\tsession: Session;\n\t\t\tturn: TurnContext;\n\t\t},\n\t) {\n\t\tthis.itemId = `${params.turn.sub_id}-plan`;\n\t}\n\n\tasync pushDelta(delta: string): Promise<string> {\n\t\tconst parsed = this.parser.push_str(delta);\n\t\tawait this.emitPlanSegments(parsed.plan_segments);\n\t\treturn parsed.visible_text;\n\t}\n\n\tasync completeFromFinalText(text: string): Promise<{\n\t\tassistantText: string | null;\n\t\tplanText: string | null;\n\t}> {\n\t\tconst extracted = extractProposedPlanFromText(text);\n\t\tif (extracted.planText === null) {\n\t\t\treturn {\n\t\t\t\tassistantText: extracted.assistantText,\n\t\t\t\tplanText: null,\n\t\t\t};\n\t\t}\n\n\t\tawait this.emitRemainingPlanDelta(extracted.planText);\n\t\tawait this.params.session.send_event(this.params.turn, {\n\t\t\ttype: \"item_completed\",\n\t\t\titem: {\n\t\t\t\ttype: \"Plan\",\n\t\t\t\tid: this.itemId,\n\t\t\t\ttext: extracted.planText,\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tassistantText: extracted.assistantText,\n\t\t\tplanText: extracted.planText,\n\t\t};\n\t}\n\n\tprivate async emitPlanSegments(\n\t\tsegments: readonly ProposedPlanSegment[],\n\t): Promise<void> {\n\t\tfor (const segment of segments) {\n\t\t\tswitch (segment.type) {\n\t\t\t\tcase \"ProposedPlanStart\":\n\t\t\t\t\tawait this.startPlanItem();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ProposedPlanDelta\":\n\t\t\t\t\tawait this.emitPlanDelta(segment.text);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ProposedPlanEnd\":\n\t\t\t\tcase \"Normal\":\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async emitRemainingPlanDelta(planText: string): Promise<void> {\n\t\tif (planText.startsWith(this.emittedPlanText)) {\n\t\t\tawait this.emitPlanDelta(planText.slice(this.emittedPlanText.length));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.planItemStarted) {\n\t\t\tawait this.startPlanItem();\n\t\t}\n\t}\n\n\tprivate async emitPlanDelta(delta: string): Promise<void> {\n\t\tif (!delta) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.startPlanItem();\n\t\tthis.emittedPlanText += delta;\n\t\tawait this.params.session.send_event(this.params.turn, {\n\t\t\ttype: \"plan_delta\",\n\t\t\tthread_id: this.params.session.threadId,\n\t\t\tturn_id: this.params.turn.sub_id,\n\t\t\titem_id: this.itemId,\n\t\t\tdelta,\n\t\t});\n\t}\n\n\tprivate async startPlanItem(): Promise<void> {\n\t\tif (this.planItemStarted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.planItemStarted = true;\n\t\tawait this.params.session.send_event(this.params.turn, {\n\t\t\ttype: \"item_started\",\n\t\t\titem: {\n\t\t\t\ttype: \"Plan\",\n\t\t\t\tid: this.itemId,\n\t\t\t\ttext: \"\",\n\t\t\t},\n\t\t});\n\t}\n}\n","import type { ResponseItem } from \"../models\";\nimport type { RolloutItem, Submission } from \"../protocol\";\nimport type { Session } from \"./session\";\nimport type { TurnContext } from \"./turn-context\";\nimport {\n\tbuildPromptBaseInstructions,\n\tbuildPromptInputWithContext,\n} from \"../context/prompt-context\";\nimport { run_compact_task } from \"../compact-task-runner\";\nimport { ToolCallRuntime } from \"../tools/parallel\";\nimport { ToolRouter } from \"../tools/router\";\nimport {\n\thandle_output_item_done,\n\tPlanModeStreamState,\n\ttype InFlightFuture,\n} from \"../stream_events_utils\";\nimport type { ModelClient, ModelClientSessionHandle, Prompt } from \"../client\";\nimport { userInputAsResponseInput } from \"../../../codex-api/src\";\n\nexport type RunTurnParams = {\n\tmodelClient: ModelClient;\n\tsession: Session;\n\tturn: TurnContext;\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\tsignal?: AbortSignal;\n\tcompleteTurn?: boolean;\n};\n\nexport type SamplingRequestResult = {\n\tturn: TurnContext;\n\tmodelInput: ResponseItem[];\n\tlastAgentMessage: string | null;\n\tsteps: number;\n};\n\nexport async function runTurn(\n\tparams: RunTurnParams,\n): Promise<SamplingRequestResult> {\n\tawait maybeRunPreSamplingAutoCompact(params);\n\tconst mcpTools = await params.session.list_mcp_tools();\n\tconst toolRouter = ToolRouter.from_config({\n\t\tdynamic_tools: params.turn.dynamic_tools,\n\t\tmcp_tools: mcpTools,\n\t\ttools_config: params.turn.tools,\n\t});\n\tconst toolRuntime = new ToolCallRuntime({\n\t\trouter: toolRouter,\n\t\tsession: params.session,\n\t\tturn: params.turn,\n\t});\n\tconst clientSession = params.modelClient.new_session(params.turn);\n\n\ttry {\n\t\treturn await run_sampling_request({\n\t\t\tsession: params.session,\n\t\t\tturn: params.turn,\n\t\t\trouter: toolRouter,\n\t\t\ttoolRuntime,\n\t\t\tclientSession,\n\t\t\tinput: [\n\t\t\t\t...params.session\n\t\t\t\t\t.clone_history()\n\t\t\t\t\t.for_prompt(params.turn.model_info.input_modalities),\n\t\t\t\t...(await params.session.thread_goal_steering_items()),\n\t\t\t],\n\t\t\tsignal: params.signal,\n\t\t\tcompleteTurn: params.completeTurn,\n\t\t\tincludePromptContext: false,\n\t\t});\n\t} finally {\n\t\tclientSession.release();\n\t}\n}\n\nasync function maybeRunPreSamplingAutoCompact(\n\tparams: RunTurnParams,\n): Promise<RolloutItem[]> {\n\tconst autoCompactLimit = params.turn.auto_compact_token_limit() ?? Number.POSITIVE_INFINITY;\n\tif (params.session.get_total_token_usage() < autoCompactLimit) {\n\t\treturn params.history;\n\t}\n\tconst compacted = await run_compact_task({\n\t\tmodelClient: params.modelClient,\n\t\tsession: params.session,\n\t\thistory: params.history,\n\t\tsubmission: params.submission,\n\t\tturn: params.turn,\n\t\tsignal: params.signal,\n\t\tcompleteTurn: false,\n\t});\n\treturn compacted.replacement_history.map((payload) => ({\n\t\ttype: \"response_item\",\n\t\tpayload,\n\t}));\n}\n\nexport async function run_sampling_request(params: {\n\tsession: Session;\n\tturn: TurnContext;\n\trouter: ToolRouter;\n\ttoolRuntime?: ToolCallRuntime;\n\tclientSession: ModelClientSessionHandle;\n\tinput: ResponseItem[];\n\tmaxSteps?: number;\n\tsignal?: AbortSignal;\n\tcompleteTurn?: boolean;\n\tincludePromptContext?: boolean;\n}): Promise<SamplingRequestResult> {\n\tconst maxSteps = params.maxSteps ?? 8;\n\tlet modelInput = [...params.input];\n\tlet lastAgentMessage: string | null = null;\n\tlet steps = 0;\n\tconst toolRuntime =\n\t\tparams.toolRuntime ??\n\t\tnew ToolCallRuntime({\n\t\t\trouter: params.router,\n\t\t\tsession: params.session,\n\t\t\tturn: params.turn,\n\t\t});\n\n\ttry {\n\t\twhile (steps < maxSteps) {\n\t\t\tsteps += 1;\n\t\t\tif (params.signal?.aborted) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst prompt = build_prompt(\n\t\t\t\tmodelInput,\n\t\t\t\tparams.router,\n\t\t\t\tparams.turn,\n\t\t\t\tparams.includePromptContext ?? true,\n\t\t\t);\n\t\t\tif (steps === 1) {\n\t\t\t\tawait params.clientSession.prewarm_websocket(prompt, {\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tturn: params.turn,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst stream = await params.clientSession.stream(prompt, {\n\t\t\t\tsignal: params.signal,\n\t\t\t\tturn: params.turn,\n\t\t\t});\n\t\t\tconst toolOutputFutures: InFlightFuture[] = [];\n\t\t\tlet needsFollowUp = false;\n\t\t\tlet streamedItemId: string | null = null;\n\t\t\tconst planModeStream = isPlanModeTurn(params.turn)\n\t\t\t\t? new PlanModeStreamState({\n\t\t\t\t\t\tsession: params.session,\n\t\t\t\t\t\tturn: params.turn,\n\t\t\t\t\t})\n\t\t\t\t: null;\n\n\t\t\tfor await (let event of stream) {\n\t\t\t\tif (event.type === \"output_text_delta\") {\n\t\t\t\t\tparams.session.markFirstToken(params.turn);\n\t\t\t\t\tif (planModeStream) {\n\t\t\t\t\t\tconst assistantDelta = await planModeStream.pushDelta(event.delta);\n\t\t\t\t\t\tif (!assistantDelta) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent = {\n\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\tdelta: assistantDelta,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (!streamedItemId) {\n\t\t\t\t\t\tstreamedItemId = event.item_id ?? `assistant-${params.turn.sub_id}`;\n\t\t\t\t\t\tawait params.session.send_event(params.turn, {\n\t\t\t\t\t\t\ttype: \"item_started\",\n\t\t\t\t\t\t\titem: {\n\t\t\t\t\t\t\t\ttype: \"AgentMessage\",\n\t\t\t\t\t\t\t\tid: streamedItemId,\n\t\t\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\t\t\tphase: \"streaming\",\n\t\t\t\t\t\t\t\tmemory_citation: null,\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\tawait params.session.send_event(params.turn, {\n\t\t\t\t\t\ttype: \"agent_message_content_delta\",\n\t\t\t\t\t\tthread_id: params.session.threadId,\n\t\t\t\t\t\tturn_id: params.turn.sub_id,\n\t\t\t\t\t\titem_id: streamedItemId,\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"completed\") {\n\t\t\t\t\tif (event.token_usage !== undefined) {\n\t\t\t\t\t\tawait params.session.update_token_usage_info(\n\t\t\t\t\t\t\tparams.turn,\n\t\t\t\t\t\t\tevent.token_usage,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"rate_limits\") {\n\t\t\t\t\tawait params.session.update_rate_limits(\n\t\t\t\t\t\tparams.turn,\n\t\t\t\t\t\tevent.rate_limits,\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (event.type !== \"output_item_done\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst result = await handle_output_item_done({\n\t\t\t\t\tsession: params.session,\n\t\t\t\t\tturn_context: params.turn,\n\t\t\t\t\ttool_runtime: toolRuntime,\n\t\t\t\t\tplan_mode_stream: planModeStream,\n\t\t\t\t\tstreamed_item_id: streamedItemId,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t}, event.item);\n\t\t\t\tstreamedItemId = result.streamed_item_id ?? streamedItemId;\n\t\t\t\tif (result.last_agent_message) {\n\t\t\t\t\tlastAgentMessage = result.last_agent_message;\n\t\t\t\t}\n\t\t\t\tneedsFollowUp = needsFollowUp || result.needs_follow_up;\n\t\t\t\tif (result.tool_future) {\n\t\t\t\t\ttoolOutputFutures.push(result.tool_future);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait Promise.all(toolOutputFutures);\n\t\t\tconst pendingInput = await params.session.get_pending_input();\n\t\t\tmodelInput = [\n\t\t\t\t...params.session\n\t\t\t\t\t.clone_history()\n\t\t\t\t\t.for_prompt(params.turn.model_info.input_modalities),\n\t\t\t\t...(pendingInput.length > 0\n\t\t\t\t\t? [userInputAsResponseInput(pendingInput)]\n\t\t\t\t\t: []),\n\t\t\t];\n\n\t\t\tif (!needsFollowUp && pendingInput.length === 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (params.signal?.aborted) {\n\t\t\treturn {\n\t\t\t\tturn: params.turn,\n\t\t\t\tmodelInput,\n\t\t\t\tlastAgentMessage,\n\t\t\t\tsteps,\n\t\t\t};\n\t\t}\n\t\tif (params.completeTurn ?? true) {\n\t\t\tawait params.session.failTurn(params.turn, error);\n\t\t}\n\t\tthrow error;\n\t}\n\n\tif (params.signal?.aborted) {\n\t\treturn {\n\t\t\tturn: params.turn,\n\t\t\tmodelInput,\n\t\t\tlastAgentMessage,\n\t\t\tsteps,\n\t\t};\n\t}\n\n\tif (params.completeTurn ?? true) {\n\t\tawait params.session.completeTurn(params.turn, lastAgentMessage);\n\t}\n\n\treturn {\n\t\tturn: params.turn,\n\t\tmodelInput,\n\t\tlastAgentMessage,\n\t\tsteps,\n\t};\n}\n\nfunction build_prompt(\n\tinput: ResponseItem[],\n\trouter: ToolRouter,\n\tturnContext: TurnContext,\n\tincludePromptContext: boolean,\n): Prompt {\n\treturn {\n\t\tinput: includePromptContext\n\t\t\t? buildPromptInputWithContext(input, turnContext)\n\t\t\t: input,\n\t\ttools: router.model_visible_specs(),\n\t\tparallel_tool_calls: false,\n\t\tbase_instructions: buildPromptBaseInstructions(turnContext),\n\t};\n}\n\nfunction isPlanModeTurn(turnContext: TurnContext): boolean {\n\treturn turnContext.collaboration_mode?.mode === \"plan\";\n}\n","import type { RolloutItem, Submission } from \"../protocol\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport {\n\tTaskKind,\n\ttype SessionTask,\n\ttype SessionTaskResult,\n\ttype SessionTaskRunInput,\n} from \"./mod\";\n\nexport type RegularTaskRunner = (input: {\n\tsession: Session;\n\tturn: TurnContext;\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\tsignal?: AbortSignal;\n}) => Promise<SessionTaskResult>;\n\nexport type RegularTaskParams = {\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\trun_turn: RegularTaskRunner;\n};\n\nexport class RegularTask implements SessionTask {\n\tprivate readonly history: RolloutItem[];\n\tprivate readonly submission: Submission;\n\tprivate readonly run_turn: RegularTaskRunner;\n\n\tconstructor(params: RegularTaskParams) {\n\t\tthis.history = params.history;\n\t\tthis.submission = params.submission;\n\t\tthis.run_turn = params.run_turn;\n\t}\n\n\tstatic new(params: RegularTaskParams): RegularTask {\n\t\treturn new RegularTask(params);\n\t}\n\n\tkind(): TaskKind {\n\t\treturn TaskKind.Regular;\n\t}\n\n\tspan_name(): string {\n\t\treturn \"session_task.turn\";\n\t}\n\n\trecords_turn_token_usage_on_span(): boolean {\n\t\treturn true;\n\t}\n\n\tasync run(input: SessionTaskRunInput): Promise<SessionTaskResult> {\n\t\tconst session = input.session.clone_session();\n\t\treturn await this.run_turn({\n\t\t\tsession,\n\t\t\tturn: input.ctx,\n\t\t\thistory: this.history,\n\t\t\tsubmission: this.submission,\n\t\t\tsignal: input.signal,\n\t\t});\n\t}\n}\n","import type { RolloutItem, Submission } from \"../protocol\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\nimport {\n\tTaskKind,\n\ttype SessionTask,\n\ttype SessionTaskResult,\n\ttype SessionTaskRunInput,\n} from \"./mod\";\n\nexport type CompactTaskRunner = (input: {\n\tsession: Session;\n\tturn: TurnContext;\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\tsignal?: AbortSignal;\n}) => Promise<SessionTaskResult>;\n\nexport type CompactTaskParams = {\n\thistory: RolloutItem[];\n\tsubmission: Submission;\n\trun_compact_task: CompactTaskRunner;\n};\n\nexport class CompactTask implements SessionTask {\n\tprivate readonly history: RolloutItem[];\n\tprivate readonly submission: Submission;\n\tprivate readonly run_compact_task: CompactTaskRunner;\n\n\tconstructor(params: CompactTaskParams) {\n\t\tthis.history = params.history;\n\t\tthis.submission = params.submission;\n\t\tthis.run_compact_task = params.run_compact_task;\n\t}\n\n\tkind(): TaskKind {\n\t\treturn TaskKind.Compact;\n\t}\n\n\tspan_name(): string {\n\t\treturn \"session_task.compact\";\n\t}\n\n\trecords_turn_token_usage_on_span(): boolean {\n\t\treturn false;\n\t}\n\n\tasync run(input: SessionTaskRunInput): Promise<SessionTaskResult> {\n\t\treturn await this.run_compact_task({\n\t\t\tsession: input.session.clone_session(),\n\t\t\tturn: input.ctx,\n\t\t\thistory: this.history,\n\t\t\tsubmission: this.submission,\n\t\t\tsignal: input.signal,\n\t\t});\n\t}\n}\n","import type { ThreadId } from \"../ids\";\nimport type { ThreadMemoryMode } from \"../memory\";\nimport type { RolloutItem } from \"../protocol\";\nimport type {\n\tCreateThreadParams,\n\tReadThreadParams,\n\tResumeThreadParams,\n\tStoredThread,\n\tStoredThreadHistory,\n\tThreadMetadataPatch,\n\tUpdateThreadMetadataParams,\n} from \"./types\";\nimport type { ThreadStore } from \"./store\";\n\nexport class LiveThread {\n\tprivate constructor(\n\t\treadonly threadId: ThreadId,\n\t\tprivate readonly threadStore: ThreadStore,\n\t) {}\n\n\tstatic async create(\n\t\tthreadStore: ThreadStore,\n\t\tparams: CreateThreadParams,\n\t): Promise<LiveThread> {\n\t\tawait threadStore.createThread(params);\n\t\treturn new LiveThread(params.thread_id, threadStore);\n\t}\n\n\tstatic async resume(\n\t\tthreadStore: ThreadStore,\n\t\tparams: ResumeThreadParams,\n\t): Promise<LiveThread> {\n\t\tawait threadStore.resumeThread(params);\n\t\treturn new LiveThread(params.thread_id, threadStore);\n\t}\n\n\tasync appendItems(items: RolloutItem[]): Promise<void> {\n\t\tawait this.threadStore.appendItems({\n\t\t\tthread_id: this.threadId,\n\t\t\titems,\n\t\t});\n\t}\n\n\tasync persist(): Promise<void> {\n\t\tawait this.threadStore.persistThread(this.threadId);\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.threadStore.flushThread(this.threadId);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.threadStore.shutdownThread(this.threadId);\n\t}\n\n\tasync discard(): Promise<void> {\n\t\tawait this.threadStore.discardThread(this.threadId);\n\t}\n\n\tasync loadHistory(includeArchived: boolean): Promise<StoredThreadHistory> {\n\t\treturn this.threadStore.loadHistory({\n\t\t\tthread_id: this.threadId,\n\t\t\tinclude_archived: includeArchived,\n\t\t});\n\t}\n\n\tasync readThread(\n\t\tincludeArchived: boolean,\n\t\tincludeHistory: boolean,\n\t): Promise<StoredThread> {\n\t\tconst params: ReadThreadParams = {\n\t\t\tthread_id: this.threadId,\n\t\t\tinclude_archived: includeArchived,\n\t\t\tinclude_history: includeHistory,\n\t\t};\n\t\treturn this.threadStore.readThread(params);\n\t}\n\n\tasync updateMemoryMode(\n\t\tmode: ThreadMemoryMode,\n\t\tincludeArchived: boolean,\n\t): Promise<void> {\n\t\tconst params: UpdateThreadMetadataParams = {\n\t\t\tthread_id: this.threadId,\n\t\t\tpatch: {\n\t\t\t\tmemory_mode: mode,\n\t\t\t},\n\t\t\tinclude_archived: includeArchived,\n\t\t};\n\t\tawait this.threadStore.updateThreadMetadata(params);\n\t}\n\n\tasync updateMetadata(\n\t\tpatch: ThreadMetadataPatch,\n\t\tincludeArchived: boolean,\n\t): Promise<StoredThread> {\n\t\treturn this.threadStore.updateThreadMetadata({\n\t\t\tthread_id: this.threadId,\n\t\t\tpatch,\n\t\t\tinclude_archived: includeArchived,\n\t\t});\n\t}\n\n\tasync localRolloutPath(): Promise<string | null> {\n\t\treturn null;\n\t}\n}\n\nexport class LiveThreadInitGuard {\n\tprivate liveThread: LiveThread | null;\n\n\tconstructor(liveThread?: LiveThread | null) {\n\t\tthis.liveThread = liveThread ?? null;\n\t}\n\n\tasRef(): LiveThread | null {\n\t\treturn this.liveThread;\n\t}\n\n\tcommit(): void {\n\t\tthis.liveThread = null;\n\t}\n\n\tasync discard(): Promise<void> {\n\t\tconst liveThread = this.liveThread;\n\t\tif (!liveThread) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.liveThread = null;\n\t\ttry {\n\t\t\tawait liveThread.discard();\n\t\t} catch {\n\t\t\t// Match Codex's initialization guard: discard failures are reported there,\n\t\t\t// but they do not re-own the live thread or fail guard cleanup.\n\t\t}\n\t}\n}\n","import type { BaseInstructions, DynamicToolSpec, RolloutItem } from \"../protocol\";\nimport type { ThreadId } from \"../ids\";\nimport type { ThreadMemoryMode } from \"../memory\";\n\nexport const ThreadEventPersistenceMode = {\n\tLimited: \"Limited\",\n\tExtended: \"Extended\",\n} as const;\n\nexport type ThreadEventPersistenceMode =\n\t(typeof ThreadEventPersistenceMode)[keyof typeof ThreadEventPersistenceMode];\n\nexport const ThreadSortKey = {\n\tCreatedAt: \"CreatedAt\",\n\tUpdatedAt: \"UpdatedAt\",\n} as const;\n\nexport type ThreadSortKey = (typeof ThreadSortKey)[keyof typeof ThreadSortKey];\n\nexport const SortDirection = {\n\tAsc: \"Asc\",\n\tDesc: \"Desc\",\n} as const;\n\nexport type SortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\nexport type ThreadPersistenceMetadata = {\n\tcwd?: string | null;\n\tmodel_provider: string;\n\tmemory_mode: ThreadMemoryMode;\n\t[key: string]: unknown;\n};\n\nexport type CreateThreadParams = {\n\tthread_id: ThreadId;\n\tforked_from_id?: ThreadId | null;\n\tsource: string;\n\tthread_source?: string | null;\n\tbase_instructions: BaseInstructions;\n\tdynamic_tools: DynamicToolSpec[];\n\tmetadata: ThreadPersistenceMetadata;\n\tevent_persistence_mode: ThreadEventPersistenceMode;\n};\n\nexport type ResumeThreadParams = {\n\tthread_id: ThreadId;\n\trollout_path?: string | null;\n\thistory?: RolloutItem[] | null;\n\tinclude_archived: boolean;\n\tmetadata: ThreadPersistenceMetadata;\n\tevent_persistence_mode: ThreadEventPersistenceMode;\n};\n\nexport type AppendThreadItemsParams = {\n\tthread_id: ThreadId;\n\titems: RolloutItem[];\n};\n\nexport type LoadThreadHistoryParams = {\n\tthread_id: ThreadId;\n\tinclude_archived: boolean;\n};\n\nexport type StoredThreadHistory = {\n\tthread_id: ThreadId;\n\titems: RolloutItem[];\n};\n\nexport type ReadThreadParams = {\n\tthread_id: ThreadId;\n\tinclude_archived: boolean;\n\tinclude_history: boolean;\n};\n\nexport type ReadThreadByRolloutPathParams = {\n\trollout_path: string;\n\tinclude_archived: boolean;\n\tinclude_history: boolean;\n};\n\nexport type ListThreadsParams = {\n\tpage_size: number;\n\tcursor?: string | null;\n\tsort_key: ThreadSortKey;\n\tsort_direction: SortDirection;\n\tallowed_sources: string[];\n\tmodel_providers?: string[] | null;\n\tcwd_filters?: string[] | null;\n\tarchived: boolean;\n\tsearch_term?: string | null;\n\tuse_state_db_only: boolean;\n};\n\nexport type ThreadPage = {\n\titems: StoredThread[];\n\tnext_cursor?: string | null;\n};\n\nexport type StoredThread = {\n\tthread_id: ThreadId;\n\trollout_path?: string | null;\n\tforked_from_id?: ThreadId | null;\n\tpreview: string;\n\tname?: string | null;\n\tmodel_provider: string;\n\tmodel?: string | null;\n\treasoning_effort?: string | null;\n\tcreated_at: string;\n\tupdated_at: string;\n\tarchived_at?: string | null;\n\tcwd: string;\n\tcli_version?: string;\n\tsource: string;\n\tthread_source?: string | null;\n\tagent_nickname?: string | null;\n\tagent_role?: string | null;\n\tagent_path?: string | null;\n\tgit_info?: unknown;\n\tapproval_mode?: string;\n\tsandbox_policy?: unknown;\n\ttoken_usage?: unknown;\n\tfirst_user_message?: string | null;\n\thistory?: StoredThreadHistory | null;\n};\n\nexport type OptionalStringPatch = string | null | undefined;\n\nexport type GitInfoPatch = {\n\tsha?: OptionalStringPatch;\n\tbranch?: OptionalStringPatch;\n\torigin_url?: OptionalStringPatch;\n};\n\nexport type ThreadMetadataPatch = {\n\tname?: string;\n\tmemory_mode?: ThreadMemoryMode;\n\tgit_info?: GitInfoPatch;\n};\n\nexport type UpdateThreadMetadataParams = {\n\tthread_id: ThreadId;\n\tpatch: ThreadMetadataPatch;\n\tinclude_archived: boolean;\n};\n\nexport type ArchiveThreadParams = {\n\tthread_id: ThreadId;\n};\n","import type { ResponseItem, ResponseItemWire } from \"../../../core/src\";\nimport { functionCallOutputPayloadToWire } from \"../../../core/src\";\nimport type {\n\tResponseCreateWsRequest,\n\tResponsesApiRequest,\n\tResponsesWsRequest,\n} from \"../common\";\n\nexport type ResponsesApiWireRequest = Omit<\n\tResponsesApiRequest,\n\t| \"input\"\n\t| \"instructions\"\n\t| \"service_tier\"\n\t| \"prompt_cache_key\"\n\t| \"text\"\n\t| \"client_metadata\"\n> & {\n\tinstructions?: string;\n\tinput: ResponseItemWire[];\n\tservice_tier?: string;\n\tprompt_cache_key?: string;\n\ttext?: unknown;\n\tclient_metadata?: Record<string, string>;\n\tprevious_response_id?: string;\n\tgenerate?: boolean;\n};\n\nexport function serializeResponsesApiRequest(\n\trequest: ResponsesApiRequest,\n): ResponsesApiWireRequest {\n\tconst wire: ResponsesApiWireRequest = {\n\t\tmodel: request.model,\n\t\t...(request.instructions ? { instructions: request.instructions } : {}),\n\t\tinput: request.input.map(serializeResponseItemForResponsesApi),\n\t\ttools: request.tools,\n\t\ttool_choice: request.tool_choice,\n\t\tparallel_tool_calls: request.parallel_tool_calls,\n\t\treasoning: request.reasoning,\n\t\tstore: request.store,\n\t\tstream: request.stream,\n\t\tinclude: request.include,\n\t};\n\n\tif (request.service_tier) {\n\t\twire.service_tier = request.service_tier;\n\t}\n\tif (request.prompt_cache_key) {\n\t\twire.prompt_cache_key = request.prompt_cache_key;\n\t}\n\tif (request.text) {\n\t\twire.text = request.text;\n\t}\n\tif (request.client_metadata) {\n\t\twire.client_metadata = request.client_metadata;\n\t}\n\n\treturn wire;\n}\n\nexport function serializeResponseItemForResponsesApi(\n\titem: ResponseItem,\n): ResponseItemWire {\n\tswitch (item.type) {\n\t\tcase \"message\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"reasoning\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"local_shell_call\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"function_call\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"tool_search_call\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"function_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\toutput: functionCallOutputPayloadToWire(item.output),\n\t\t\t};\n\t\tcase \"custom_tool_call\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tcase \"custom_tool_call_output\":\n\t\t\treturn {\n\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\tcall_id: item.call_id,\n\t\t\t\t...(item.name ? { name: item.name } : {}),\n\t\t\t\toutput: functionCallOutputPayloadToWire(item.output),\n\t\t\t};\n\t\tcase \"web_search_call\":\n\t\t\treturn responseItemWithSkippedId(item);\n\t\tdefault:\n\t\t\treturn item;\n\t}\n}\n\nexport function attachItemIds(\n\tpayloadJson: unknown,\n\toriginalItems: ResponseItem[],\n): void {\n\tif (!isRecord(payloadJson) || !Array.isArray(payloadJson.input)) {\n\t\treturn;\n\t}\n\n\tfor (const [index, value] of payloadJson.input.entries()) {\n\t\tconst item = originalItems[index];\n\t\tconst id = item ? responseItemSkippedId(item) : null;\n\t\tif (!id || !isRecord(value)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalue.id = id;\n\t}\n}\n\nexport function serializeResponsesWsRequest(\n\trequest: ResponsesWsRequest,\n): Record<string, unknown> {\n\tif (request.type === \"response.processed\") {\n\t\treturn {\n\t\t\ttype: request.type,\n\t\t\tresponse_id: request.response_id,\n\t\t};\n\t}\n\treturn {\n\t\ttype: request.type,\n\t\t...serializeResponseCreateWsRequest(request),\n\t};\n}\n\nfunction serializeResponseCreateWsRequest(\n\trequest: ResponseCreateWsRequest,\n): Record<string, unknown> {\n\tconst wire = serializeResponsesApiRequest({\n\t\tmodel: request.model,\n\t\tinstructions: request.instructions,\n\t\tinput: request.input,\n\t\ttools: request.tools,\n\t\ttool_choice: request.tool_choice,\n\t\tparallel_tool_calls: request.parallel_tool_calls,\n\t\treasoning: request.reasoning,\n\t\tstore: request.store,\n\t\tstream: request.stream,\n\t\tinclude: request.include,\n\t\t...(request.service_tier ? { service_tier: request.service_tier } : {}),\n\t\t...(request.prompt_cache_key ? { prompt_cache_key: request.prompt_cache_key } : {}),\n\t\t...(request.text !== undefined ? { text: request.text } : {}),\n\t\t...(request.client_metadata ? { client_metadata: request.client_metadata } : {}),\n\t});\n\tif (request.previous_response_id) {\n\t\twire.previous_response_id = request.previous_response_id;\n\t}\n\tif (request.generate !== undefined) {\n\t\twire.generate = request.generate;\n\t}\n\treturn wire;\n}\n\nfunction responseItemSkippedId(item: ResponseItem): string | null {\n\tswitch (item.type) {\n\t\tcase \"message\":\n\t\tcase \"reasoning\":\n\t\tcase \"local_shell_call\":\n\t\tcase \"function_call\":\n\t\tcase \"tool_search_call\":\n\t\tcase \"custom_tool_call\":\n\t\tcase \"web_search_call\": {\n\t\t\tconst id = (item as { id?: unknown }).id;\n\t\t\treturn typeof id === \"string\" && id.length > 0 ? id : null;\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction responseItemWithSkippedId<T extends { id?: unknown }>(\n\titem: T,\n): Omit<T, \"id\"> {\n\tconst wire = { ...item };\n\tdelete wire.id;\n\treturn wire;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n","import type { ProviderRuntimeConfig, SessionSource } from \"../../../core/src\";\nimport type { ResponsesApiRequest, ResponseStream, TurnState } from \"../common\";\nimport {\n\tApiError,\n\tapiErrorFromResponsePayload,\n\tapiErrorFromUnknown,\n\thtmlChallengeApiError,\n\tisRetryableApiError,\n} from \"../error\";\nimport { providerRequestHeaders, responsesUrlWithQuery } from \"../provider\";\nimport { serializeResponsesApiRequest } from \"../requests/responses\";\nimport { spawnResponseStream } from \"../sse/responses\";\n\nexport type Compression = \"none\" | \"zstd\";\n\nexport type ResponsesOptions = {\n\tsignal?: AbortSignal;\n\tthread_id?: string | null;\n\tsession_id?: string | null;\n\tsession_source?: SessionSource | string | null;\n\textra_headers?: HeadersInit;\n\tcompression?: Compression;\n\tturn_state?: TurnState | null;\n};\n\nexport type ResponsesClientInput = {\n\tapi_key: string;\n\truntime: ProviderRuntimeConfig;\n\toriginator: string;\n\tuser_agent: string;\n\tchatgpt_account_id?: string | null;\n\tfedramp?: boolean;\n\tfetch?: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n};\n\nexport class ResponsesClient {\n\tprivate readonly fetcher: (\n\t\tinput: RequestInfo | URL,\n\t\tinit?: RequestInit,\n\t) => Promise<Response>;\n\n\tconstructor(private readonly input: ResponsesClientInput) {\n\t\tconst providedFetch = input.fetch;\n\t\tthis.fetcher = providedFetch\n\t\t\t? (request, init) => providedFetch(request, init)\n\t\t\t: (request, init) => fetch(request, init);\n\t}\n\n\tasync stream_request(\n\t\trequest: ResponsesApiRequest,\n\t\toptions: ResponsesOptions = {},\n\t): Promise<ResponseStream> {\n\t\tconst body = JSON.stringify(serializeResponsesApiRequest(request));\n\t\tconst headers = providerRequestHeaders({\n\t\t\tapi_key: this.input.api_key,\n\t\t\truntime: this.input.runtime,\n\t\t\toriginator: this.input.originator,\n\t\t\tuser_agent: this.input.user_agent,\n\t\t\tchatgpt_account_id: this.input.chatgpt_account_id ?? null,\n\t\t\tfedramp: this.input.fedramp ?? false,\n\t\t\textra_headers: {\n\t\t\t\t...Object.fromEntries(new Headers(options.extra_headers).entries()),\n\t\t\t\t...sessionHeaders(options),\n\t\t\t\t...turnStateHeaders(options),\n\t\t\t},\n\t\t});\n\t\tconst url = responsesUrlWithQuery(this.input.runtime);\n\t\tconst maxRetries = Math.max(0, this.input.runtime.request_max_retries ?? 0);\n\t\tlet lastError: ApiError | null = null;\n\n\t\tfor (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n\t\t\tif (options.signal?.aborted) {\n\t\t\t\tthrow ApiError.transport(\"OpenAI Responses request was aborted.\");\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst response = await this.fetcher(url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders,\n\t\t\t\t\tbody,\n\t\t\t\t\tsignal: options.signal,\n\t\t\t\t});\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tconst error = await apiErrorFromHttpResponse(response);\n\t\t\t\t\tif (attempt < maxRetries && isRetryableApiError(error)) {\n\t\t\t\t\t\tlastError = error;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (isHtmlResponse(response)) {\n\t\t\t\t\tthrow htmlChallengeApiError();\n\t\t\t\t}\n\t\t\t\tif (!response.body) {\n\t\t\t\t\tthrow ApiError.stream(\"OpenAI Responses stream did not include a body.\");\n\t\t\t\t}\n\t\t\t\tconst turnState = response.headers.get(\"x-codex-turn-state\");\n\t\t\t\tif (turnState) {\n\t\t\t\t\toptions.turn_state?.set(turnState);\n\t\t\t\t}\n\t\t\t\treturn spawnResponseStream({\n\t\t\t\t\theaders: response.headers,\n\t\t\t\t\tchunks: readableStreamTextChunks(response.body),\n\t\t\t\t\tidle_timeout_ms: this.input.runtime.stream_idle_timeout_ms,\n\t\t\t\t\trequire_completed: true,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst apiError = apiErrorFromUnknown(error);\n\t\t\t\tif (\n\t\t\t\t\tattempt < maxRetries &&\n\t\t\t\t\tisRetryableApiError(apiError) &&\n\t\t\t\t\t!options.signal?.aborted\n\t\t\t\t) {\n\t\t\t\t\tlastError = apiError;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow apiError;\n\t\t\t}\n\t\t}\n\n\t\tthrow lastError ?? ApiError.transport(\"OpenAI Responses request failed.\");\n\t}\n\n\tasync streamRequest(\n\t\trequest: ResponsesApiRequest,\n\t\toptions: ResponsesOptions = {},\n\t): Promise<ResponseStream> {\n\t\treturn this.stream_request(request, options);\n\t}\n}\n\nasync function apiErrorFromHttpResponse(response: Response): Promise<ApiError> {\n\tconst body = await response.text();\n\tif (!body) {\n\t\treturn ApiError.api(\n\t\t\tresponse.status,\n\t\t\t`OpenAI Responses request failed with HTTP ${response.status}.`,\n\t\t);\n\t}\n\tif (isHtmlBody(response, body)) {\n\t\treturn htmlChallengeApiError();\n\t}\n\ttry {\n\t\treturn apiErrorFromResponsePayload(response.status, JSON.parse(body));\n\t} catch {\n\t\treturn ApiError.api(response.status, body);\n\t}\n}\n\nfunction sessionHeaders(options: ResponsesOptions): Record<string, string> {\n\tconst headers: Record<string, string> = {};\n\tif (options.thread_id) {\n\t\theaders[\"x-client-request-id\"] = options.thread_id;\n\t}\n\tif (options.session_id) {\n\t\theaders.session_id = options.session_id;\n\t}\n\tif (options.session_source) {\n\t\theaders[\"x-openai-subagent\"] = String(options.session_source);\n\t}\n\treturn headers;\n}\n\nfunction turnStateHeaders(options: ResponsesOptions): Record<string, string> {\n\tconst value = options.turn_state?.get();\n\treturn value ? { \"x-codex-turn-state\": value } : {};\n}\n\nfunction isHtmlResponse(response: Response): boolean {\n\treturn (response.headers.get(\"content-type\") ?? \"\").includes(\"text/html\");\n}\n\nfunction isHtmlBody(response: Response, body: string): boolean {\n\treturn (\n\t\tisHtmlResponse(response) ||\n\t\t/^\\s*<!doctype html|^\\s*<html[\\s>]/iu.test(body)\n\t);\n}\n\nasync function* readableStreamTextChunks(\n\tbody: ReadableStream<Uint8Array>,\n): AsyncGenerator<string> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\n\tfor (;;) {\n\t\tconst { done, value } = await reader.read();\n\t\tif (value) {\n\t\t\tyield decoder.decode(value, { stream: !done });\n\t\t}\n\t\tif (done) {\n\t\t\tconst tail = decoder.decode();\n\t\t\tif (tail) {\n\t\t\t\tyield tail;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n","import {\n\tSteerInputErrorKind,\n\tasThreadId,\n\ttype Session,\n\ttype Submission,\n\ttype ThreadId,\n\ttype UserInput as CoreUserInput,\n} from \"../../../core/src\";\nimport type { CollaborationMode } from \"../../../core/src/config-types\";\nimport type {\n\tThreadCompactStartParams,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n\tUserInput,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { AppServerEvent, JSONRPCErrorError } from \"../outgoing_message\";\nimport { CodexAppServerRequestError } from \"./request_errors\";\n\nexport type RuntimeSession = {\n\tabortController: AbortController | null;\n\trunPromise: Promise<unknown> | null;\n\tsession: Session;\n};\n\nexport type ProcessorEmit<Context> = (\n\tthreadId: ThreadId,\n\tevent: AppServerEvent,\n\tcontext?: Context,\n) => Promise<void>;\n\nexport type ProcessorCreateSession<Context> = (\n\tthreadId: ThreadId,\n\tparams:\n\t\t| ThreadStartParams\n\t\t| ThreadResumeParams\n\t\t| TurnStartParams\n\t\t| ThreadCompactStartParams,\n\tcontext?: Context,\n\tsubmission?: Submission,\n) => Promise<Session>;\n\nexport type TurnStartParamsWithClientMessageId = TurnStartParams & {\n\tclientMessageId?: string;\n};\n\nexport type TurnStartParamsWithCollaborationMode = TurnStartParams & {\n\tcollaborationMode?: CollaborationMode;\n\tcollaboration_mode?: CollaborationMode;\n};\n\nexport function appServerUserInputToCoreUserInput(input: UserInput): CoreUserInput {\n\tswitch (input.type) {\n\t\tcase \"text\":\n\t\t\treturn {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: input.text,\n\t\t\t\ttext_elements: (input.text_elements ?? []).map((element) => ({\n\t\t\t\t\tbyte_range: element.byteRange,\n\t\t\t\t\tplaceholder: element.placeholder ?? undefined,\n\t\t\t\t})),\n\t\t\t};\n\t\tcase \"image\":\n\t\t\treturn { type: \"image\", image_url: input.url };\n\t\tcase \"localImage\":\n\t\t\treturn { type: \"local_image\", path: input.path };\n\t\tcase \"skill\":\n\t\t\treturn { type: \"skill\", name: input.name, path: input.path };\n\t\tcase \"mention\":\n\t\t\treturn { type: \"mention\", name: input.name, path: input.path };\n\t}\n}\n\nexport function threadIdFromStartParams(params: ThreadStartParams): ThreadId {\n\tconst maybeThreadId = (params as { threadId?: unknown }).threadId;\n\treturn asThreadId(typeof maybeThreadId === \"string\" ? maybeThreadId : defaultId());\n}\n\nexport function defaultId(): string {\n\tconst crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n\treturn crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n}\n\nexport function valueOrNull<T>(value: T | null | undefined): T | null {\n\treturn value === undefined ? null : value;\n}\n\nexport function approvalPolicyString(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nexport function jsonRpcError(message: string, code: number, status: number): never {\n\tthrow new CodexAppServerRequestError(\n\t\t{ code, message } satisfies JSONRPCErrorError,\n\t\tstatus,\n\t);\n}\n\nexport function steerErrorCode(kind: SteerInputErrorKind): number {\n\tswitch (kind) {\n\t\tcase SteerInputErrorKind.EmptyInput:\n\t\t\treturn -32602;\n\t\tcase SteerInputErrorKind.NoActiveTurn:\n\t\t\treturn -32012;\n\t\tcase SteerInputErrorKind.ExpectedTurnMismatch:\n\t\t\treturn -32013;\n\t\tcase SteerInputErrorKind.ActiveTurnNotSteerable:\n\t\t\treturn -32015;\n\t}\n}\n","import type {\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tMcpServerRefreshResponse,\n\tMcpServerStatus as AppServerMcpServerStatus,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tListMcpServerStatusParams,\n\tListMcpServerStatusResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { Resource } from \"../../../app-server-protocol/schema/typescript/Resource\";\nimport type { ResourceContent } from \"../../../app-server-protocol/schema/typescript/ResourceContent\";\nimport type { ResourceTemplate } from \"../../../app-server-protocol/schema/typescript/ResourceTemplate\";\nimport type { Tool } from \"../../../app-server-protocol/schema/typescript/Tool\";\nimport type { JsonValue } from \"../../../app-server-protocol/schema/typescript/serde_json/JsonValue\";\nimport {\n\tasThreadId,\n\tEmptyMcpConnectionManager,\n\ttype McpConnectionManager,\n\ttype McpResourceInfo,\n\ttype McpResourceTemplateInfo,\n\ttype McpServerStatus,\n\ttype McpToolInfo,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../../core/src\";\nimport type { McpServerToolCallResponse as CoreMcpServerToolCallResponse } from \"../../../core/src/mcp\";\nimport type { JSONRPCErrorError } from \"../outgoing_message\";\nimport { jsonRpcError } from \"./common\";\nimport { CodexAppServerRequestError } from \"./request_errors\";\nimport {\n\tcodexAppServerDeferredResponse,\n\ttype CodexAppServerDeferredResponse,\n\ttype CodexAppServerRequestContext,\n} from \"../message_processor\";\n\nconst MCP_TOOL_THREAD_ID_META_KEY = \"threadId\";\n\nexport type McpRequestProcessorOptions<Context> = {\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tmcpServerOauthLogin?: (input: {\n\t\tcontext?: Context;\n\t\tparams: McpServerOauthLoginParams;\n\t}) => McpServerOauthLoginResponse | Promise<McpServerOauthLoginResponse>;\n\treloadMcpServers?: (input: { context?: Context }) => void | Promise<void>;\n\trunInBackground?: (\n\t\tpromise: Promise<unknown>,\n\t\tcontext: { context?: Context },\n\t) => void;\n\tstore: ThreadStore;\n};\n\nexport class McpRequestProcessor<Context> {\n\tconstructor(private readonly options: McpRequestProcessorOptions<Context>) {}\n\n\tasync mcpServerRefresh(\n\t\t_params: undefined,\n\t\tcontext?: Context,\n\t): Promise<McpServerRefreshResponse> {\n\t\tawait this.options.reloadMcpServers?.({ context });\n\t\treturn {};\n\t}\n\n\tasync mcpServerStatusList(\n\t\tparams: ListMcpServerStatusParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<ListMcpServerStatusResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpServerStatusListResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpServerStatusListResponse(params);\n\t}\n\n\tprivate async mcpServerStatusListResponse(\n\t\tparams: ListMcpServerStatusParams,\n\t): Promise<ListMcpServerStatusResponse> {\n\t\tconst detail = params.detail ?? \"full\";\n\t\tconst statuses = await this.manager().list_server_statuses({ detail });\n\t\tconst total = statuses.length;\n\t\tconst limit = Math.min(Math.max(params.limit ?? total, 1), total);\n\t\tconst start = params.cursor ? parseCursor(params.cursor) : 0;\n\t\tif (start > total) {\n\t\t\tjsonRpcError(\n\t\t\t\t`cursor ${start} exceeds total MCP servers ${total}`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst end = Math.min(start + limit, total);\n\t\treturn {\n\t\t\tdata: statuses.slice(start, end).map((status) =>\n\t\t\t\tappServerMcpServerStatus(status, detail),\n\t\t\t),\n\t\t\tnextCursor: end < total ? String(end) : null,\n\t\t};\n\t}\n\n\tasync mcpResourceRead(\n\t\tparams: McpResourceReadParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpResourceReadResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpResourceReadResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpResourceReadResponse(params);\n\t}\n\n\tprivate async mcpResourceReadResponse(\n\t\tparams: McpResourceReadParams,\n\t): Promise<McpResourceReadResponse> {\n\t\tif (params.threadId) {\n\t\t\tawait this.loadThread(params.threadId);\n\t\t}\n\t\tconst response = await this.manager().read_resource({\n\t\t\tthread_id: params.threadId ? asThreadId(params.threadId) : null,\n\t\t\tserver_name: params.server,\n\t\t\turi: params.uri,\n\t\t});\n\t\treturn {\n\t\t\tcontents: response.contents.map((content) =>\n\t\t\t\tappServerResourceContent(content, params.uri),\n\t\t\t),\n\t\t};\n\t}\n\n\tasync mcpServerToolCall(\n\t\tparams: McpServerToolCallParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpServerToolCallResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpServerToolCallResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpServerToolCallResponse(params);\n\t}\n\n\tprivate async mcpServerToolCallResponse(\n\t\tparams: McpServerToolCallParams,\n\t): Promise<McpServerToolCallResponse> {\n\t\tconst threadId = await this.loadThread(params.threadId);\n\t\tconst response = await this.manager().call_tool({\n\t\t\targuments: params.arguments,\n\t\t\tmeta: with_mcp_tool_call_thread_id_meta(params._meta, threadId),\n\t\t\tserver_name: params.server,\n\t\t\tthread_id: threadId,\n\t\t\ttool_name: params.tool,\n\t\t});\n\t\treturn appServerMcpToolCallResponse(response);\n\t}\n\n\tasync mcpServerOauthLogin(\n\t\tparams: McpServerOauthLoginParams,\n\t\tcontext?: Context,\n\t): Promise<McpServerOauthLoginResponse> {\n\t\tif (!this.options.mcpServerOauthLogin) {\n\t\t\tjsonRpcError(\"MCP OAuth login is unavailable.\", -32600, 400);\n\t\t}\n\t\treturn this.options.mcpServerOauthLogin({ context, params });\n\t}\n\n\tprivate manager(): McpConnectionManager {\n\t\treturn this.options.mcpConnectionManager ?? EmptyMcpConnectionManager.instance;\n\t}\n\n\tprivate runDeferred<T>(\n\t\trequest: CodexAppServerRequestContext,\n\t\tcontext: Context | undefined,\n\t\twork: () => Promise<T>,\n\t): void {\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait request.outgoing.sendResponse(\n\t\t\t\t\trequest.requestId,\n\t\t\t\t\tawait work(),\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tawait request.outgoing.sendError(\n\t\t\t\t\trequest.requestId,\n\t\t\t\t\tjsonRpcErrorFromUnknown(error),\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\t\t})();\n\t\tif (this.options.runInBackground) {\n\t\t\tthis.options.runInBackground(promise, { context });\n\t\t\treturn;\n\t\t}\n\t\tvoid promise;\n\t}\n\n\tprivate async loadThread(threadIdString: string): Promise<ThreadId> {\n\t\tlet threadId: ThreadId;\n\t\ttry {\n\t\t\tthreadId = asThreadId(threadIdString);\n\t\t} catch (error) {\n\t\t\tjsonRpcError(\n\t\t\t\t`invalid thread id: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tawait this.options.store.readThread({\n\t\t\t\tthread_id: threadId,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tinclude_history: false,\n\t\t\t});\n\t\t} catch {\n\t\t\tjsonRpcError(`thread not found: ${threadId}`, -32600, 400);\n\t\t}\n\t\treturn threadId;\n\t}\n}\n\nfunction parseCursor(cursor: string): number {\n\tif (!/^\\d+$/u.test(cursor)) {\n\t\tjsonRpcError(`invalid cursor: ${cursor}`, -32600, 400);\n\t}\n\tconst parsed = Number.parseInt(cursor, 10);\n\treturn parsed;\n}\n\nfunction appServerMcpServerStatus(\n\tstatus: McpServerStatus,\n\tdetail: ListMcpServerStatusParams[\"detail\"],\n): AppServerMcpServerStatus {\n\treturn {\n\t\tauthStatus: status.authStatus ?? status.auth_status ?? \"unsupported\",\n\t\tname: status.name,\n\t\tresources:\n\t\t\tdetail === \"toolsAndAuthOnly\"\n\t\t\t\t? []\n\t\t\t\t: (status.resources ?? []).map(appServerResource),\n\t\tresourceTemplates:\n\t\t\tdetail === \"toolsAndAuthOnly\"\n\t\t\t\t? []\n\t\t\t\t: (status.resource_templates ?? []).map(appServerResourceTemplate),\n\t\ttools: Object.fromEntries(\n\t\t\t(status.tools ?? []).map((tool) => [tool.name, appServerTool(tool)]),\n\t\t),\n\t};\n}\n\nfunction appServerTool(tool: McpToolInfo): Tool {\n\treturn omitUndefined({\n\t\tname: tool.name,\n\t\ttitle: tool.title ?? undefined,\n\t\tdescription: tool.description ?? undefined,\n\t\tinputSchema: (tool.input_schema ?? { type: \"object\" }) as JsonValue,\n\t});\n}\n\nfunction appServerResource(resource: McpResourceInfo): Resource {\n\treturn omitUndefined({\n\t\turi: resource.uri,\n\t\tname: resource.name ?? resource.uri,\n\t\tdescription: resource.description ?? undefined,\n\t\tmimeType: resource.mime_type ?? undefined,\n\t});\n}\n\nfunction appServerResourceTemplate(\n\ttemplate: McpResourceTemplateInfo,\n): ResourceTemplate {\n\treturn omitUndefined({\n\t\turiTemplate: template.uri_template,\n\t\tname: template.name ?? template.uri_template,\n\t\ttitle: undefined,\n\t\tdescription: template.description ?? undefined,\n\t\tmimeType: template.mime_type ?? undefined,\n\t});\n}\n\nfunction appServerResourceContent(\n\tcontent: unknown,\n\tfallbackUri: string,\n): ResourceContent {\n\tif (!isRecord(content)) {\n\t\treturn { uri: fallbackUri, text: String(content) };\n\t}\n\tconst uri = typeof content.uri === \"string\" ? content.uri : fallbackUri;\n\tconst mimeType =\n\t\ttypeof content.mimeType === \"string\"\n\t\t\t? content.mimeType\n\t\t\t: typeof content.mime_type === \"string\"\n\t\t\t\t? content.mime_type\n\t\t\t\t: undefined;\n\tif (typeof content.blob === \"string\") {\n\t\treturn omitUndefined({\n\t\t\turi,\n\t\t\tmimeType,\n\t\t\tblob: content.blob,\n\t\t\t_meta: content._meta as JsonValue | undefined,\n\t\t});\n\t}\n\treturn omitUndefined({\n\t\turi,\n\t\tmimeType,\n\t\ttext: typeof content.text === \"string\" ? content.text : JSON.stringify(content),\n\t\t_meta: content._meta as JsonValue | undefined,\n\t});\n}\n\nfunction appServerMcpToolCallResponse(\n\tresponse: CoreMcpServerToolCallResponse,\n): McpServerToolCallResponse {\n\tconst output = response.output;\n\tconst record = isRecord(output) ? output : {};\n\tconst structuredContent =\n\t\trecord.structuredContent ?? record.structured_content ?? undefined;\n\tconst isError = record.isError ?? record.is_error ?? undefined;\n\treturn omitUndefined({\n\t\tcontent: Array.isArray(record.content)\n\t\t\t? (record.content as JsonValue[])\n\t\t\t: [],\n\t\tstructuredContent: structuredContent as JsonValue | undefined,\n\t\tisError: typeof isError === \"boolean\" ? isError : undefined,\n\t\t_meta: record._meta as JsonValue | undefined,\n\t});\n}\n\nfunction with_mcp_tool_call_thread_id_meta(\n\tmeta: JsonValue | undefined,\n\tthreadId: ThreadId,\n): unknown {\n\tif (meta === undefined) {\n\t\treturn { [MCP_TOOL_THREAD_ID_META_KEY]: threadId };\n\t}\n\tif (isRecord(meta)) {\n\t\treturn {\n\t\t\t...meta,\n\t\t\t[MCP_TOOL_THREAD_ID_META_KEY]: threadId,\n\t\t};\n\t}\n\treturn meta;\n}\n\nfunction jsonRpcErrorFromUnknown(error: unknown): JSONRPCErrorError {\n\tif (error instanceof CodexAppServerRequestError) {\n\t\treturn error.error;\n\t}\n\treturn {\n\t\tcode: -32000,\n\t\tmessage:\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"Codex App Server request failed.\",\n\t};\n}\n\nfunction omitUndefined<T extends Record<string, unknown>>(record: T): T {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t) as T;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ServerNotification } from \"../../../app-server-protocol/schema/typescript\";\nimport type {\n\tThread,\n\tThreadTokenUsageUpdatedNotification,\n\tTurn,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport { threadTokenUsageFromTokenUsageInfo } from \"../../../app-server-protocol/src/protocol/event-mapping\";\nimport type { ThreadId } from \"../../../core/src/ids\";\nimport type {\n\tRolloutItem,\n\tTokenUsageInfo,\n} from \"../../../core/src/protocol\";\nimport { ThreadHistoryBuilder } from \"../../../core/src/thread-history-builder\";\nimport { appServerTurnFromCoreTurn } from \"../../../app-server-protocol/src/protocol/thread-resume\";\n\n/// Identifies the turn that was active when a TokenCount record appeared.\nexport type TokenUsageTurnOwner = {\n\tid: string;\n\tposition: number | null;\n};\n\nexport function latest_token_usage_turn_id_from_rollout_items(\n\trolloutItems: readonly RolloutItem[],\n\tturns: readonly Turn[],\n): string | null {\n\tconst builder = new ThreadHistoryBuilder();\n\tlet tokenUsageTurnOwner: TokenUsageTurnOwner | null = null;\n\n\tfor (const item of rolloutItems) {\n\t\tif (item.type === \"event_msg\" && item.payload.type === \"token_count\") {\n\t\t\tconst turn = builder.active_turn_snapshot();\n\t\t\ttokenUsageTurnOwner = turn\n\t\t\t\t? {\n\t\t\t\t\t\tid: appServerTurnFromCoreTurn(turn).id,\n\t\t\t\t\t\tposition: builder.active_turn_position(),\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\t}\n\t\tbuilder.handle_rollout_item(item);\n\t}\n\n\tif (!tokenUsageTurnOwner) {\n\t\treturn null;\n\t}\n\tif (turns.some((turn) => turn.id === tokenUsageTurnOwner.id)) {\n\t\treturn tokenUsageTurnOwner.id;\n\t}\n\treturn tokenUsageTurnOwner.position === null\n\t\t? null\n\t\t: (turns[tokenUsageTurnOwner.position]?.id ?? null);\n}\n\nexport function latest_token_usage_turn_id(thread: Thread): string {\n\treturn (\n\t\t[...thread.turns]\n\t\t\t.reverse()\n\t\t\t.find((turn) => turn.status === \"completed\" || turn.status === \"failed\")\n\t\t\t?.id ??\n\t\tthread.turns.at(-1)?.id ??\n\t\t\"\"\n\t);\n}\n\nexport function last_token_info_from_rollout_items(\n\trolloutItems: readonly RolloutItem[],\n): TokenUsageInfo | null {\n\tfor (let index = rolloutItems.length - 1; index >= 0; index -= 1) {\n\t\tconst item = rolloutItems[index];\n\t\tif (\n\t\t\titem?.type === \"event_msg\" &&\n\t\t\titem.payload.type === \"token_count\" &&\n\t\t\titem.payload.info\n\t\t) {\n\t\t\treturn item.payload.info;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function thread_token_usage_updated_notification_from_info(input: {\n\tthread: Thread;\n\tthreadId: ThreadId | string;\n\ttokenUsageInfo: TokenUsageInfo;\n\ttokenUsageTurnId?: string | null;\n}): ServerNotification {\n\tconst params: ThreadTokenUsageUpdatedNotification = {\n\t\tthreadId: String(input.threadId),\n\t\tturnId: input.tokenUsageTurnId ?? latest_token_usage_turn_id(input.thread),\n\t\ttokenUsage: threadTokenUsageFromTokenUsageInfo(input.tokenUsageInfo),\n\t};\n\treturn {\n\t\tmethod: \"thread/tokenUsage/updated\",\n\t\tparams,\n\t};\n}\n\nexport function thread_token_usage_updated_notification_from_rollout_items(input: {\n\trolloutItems: readonly RolloutItem[];\n\tthread: Thread;\n\tthreadId: ThreadId | string;\n}): ServerNotification | null {\n\tconst tokenUsageInfo = last_token_info_from_rollout_items(input.rolloutItems);\n\tif (!tokenUsageInfo) {\n\t\treturn null;\n\t}\n\treturn thread_token_usage_updated_notification_from_info({\n\t\tthread: input.thread,\n\t\tthreadId: input.threadId,\n\t\ttokenUsageInfo,\n\t\ttokenUsageTurnId: latest_token_usage_turn_id_from_rollout_items(\n\t\t\tinput.rolloutItems,\n\t\t\tinput.thread.turns,\n\t\t),\n\t});\n}\n","import {\n\tBaseInstructions,\n\tLiveThread,\n\tThreadEventPersistenceMode,\n\tThreadMemoryMode,\n\tasThreadId,\n\ttype CreateThreadParams,\n\ttype DynamicToolSpec,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../../core/src\";\nimport {\n\tSortDirection as StoreSortDirection,\n\tThreadSortKey as StoreThreadSortKey,\n} from \"../../../core/src/thread-store/types\";\nimport {\n\tbuildThreadResumeResponseFromHistory,\n\tthreadHistoryToAppServerThread,\n} from \"../../../app-server-protocol/src/protocol/thread-resume\";\nimport {\n\tthread_token_usage_updated_notification_from_rollout_items,\n} from \"./token_usage_replay\";\nimport type {\n\tThreadArchiveParams,\n\tThreadArchiveResponse,\n\tThreadCompactStartParams,\n\tThreadCompactStartResponse,\n\tThreadListParams,\n\tThreadListResponse,\n\tThreadMetadataUpdateParams,\n\tThreadMetadataUpdateResponse,\n\tThreadReadParams,\n\tThreadReadResponse,\n\tThreadResumeParams,\n\tThreadResumeResponse,\n\tThreadSetNameParams,\n\tThreadSetNameResponse,\n\tThreadStartParams,\n\tThreadStartResponse,\n\tThreadUnarchiveParams,\n\tThreadUnarchiveResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { StoredThread, StoredThreadHistory } from \"../../../core/src/thread-store/types\";\nimport type { CodexSessionTaskRunner } from \"../session_task_runner\";\nimport {\n\tdefaultId,\n\tjsonRpcError,\n\tthreadIdFromStartParams,\n\ttype ProcessorCreateSession,\n\ttype ProcessorEmit,\n\ttype RuntimeSession,\n} from \"./common\";\n\nconst THREAD_LIST_DEFAULT_LIMIT = 25;\nconst THREAD_LIST_MAX_LIMIT = 100;\n\nexport type ThreadRequestProcessorOptions<Context> = {\n\tbuildCreateThreadParams?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => CreateThreadParams | Promise<CreateThreadParams>;\n\tcreateSession: ProcessorCreateSession<Context>;\n\temit: ProcessorEmit<Context>;\n\tresolveDynamicTools?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => DynamicToolSpec[] | Promise<DynamicToolSpec[]>;\n\tsessions: Map<ThreadId, RuntimeSession>;\n\tstore: ThreadStore;\n\ttaskRunner: CodexSessionTaskRunner<Context>;\n};\n\nexport class ThreadRequestProcessor<Context> {\n\tconstructor(private readonly options: ThreadRequestProcessorOptions<Context>) {}\n\n\tasync threadStart(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadStartResponse> {\n\t\tconst liveThread = await this.ensureLiveThread(params, context);\n\t\tconst response = await this.readThreadResponse(liveThread.threadId);\n\t\tawait this.options.emit(\n\t\t\tliveThread.threadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/started\",\n\t\t\t\t\tparams: { thread: response.thread },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn response;\n\t}\n\n\tasync threadResume(\n\t\tparams: ThreadResumeParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadResumeResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst { history, response } = await this.readThreadResponseWithHistory(threadId);\n\t\tconst replay = thread_token_usage_updated_notification_from_rollout_items({\n\t\t\trolloutItems: history.items,\n\t\t\tthread: response.thread,\n\t\t\tthreadId,\n\t\t});\n\t\tif (replay) {\n\t\t\tawait this.options.emit(threadId, {\n\t\t\t\tnotification: replay,\n\t\t\t\ttype: \"server_notification\",\n\t\t\t}, context);\n\t\t}\n\t\treturn response;\n\t}\n\n\tasync threadCompactStart(\n\t\tparams: ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadCompactStartResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tlet runtimeSession = this.options.sessions.get(threadId);\n\t\tif (runtimeSession?.session.activeTurn) {\n\t\t\tthrow jsonRpcError(\"Wait for the active turn to finish before compacting.\", -32014, 409);\n\t\t}\n\t\tconst submission: Submission = {\n\t\t\tid: `compact-${defaultId()}`,\n\t\t\top: { type: \"compact\" },\n\t\t};\n\t\tif (!runtimeSession) {\n\t\t\tconst session = await this.options.createSession(threadId, params, context, submission);\n\t\t\truntimeSession = {\n\t\t\t\tabortController: null,\n\t\t\t\trunPromise: null,\n\t\t\t\tsession,\n\t\t\t};\n\t\t\tthis.options.sessions.set(threadId, runtimeSession);\n\t\t}\n\t\tawait this.options.taskRunner.startCompactTask({\n\t\t\tcontext,\n\t\t\tparams,\n\t\t\truntimeSession,\n\t\t\tsubmission,\n\t\t\tthreadId,\n\t\t});\n\t\treturn {};\n\t}\n\n\tasync threadList(params: ThreadListParams): Promise<ThreadListResponse> {\n\t\tconst pageSize = Math.max(\n\t\t\t1,\n\t\t\tMath.min(params.limit ?? THREAD_LIST_DEFAULT_LIMIT, THREAD_LIST_MAX_LIMIT),\n\t\t);\n\t\tconst page = await this.options.store.listThreads({\n\t\t\tallowed_sources: params.sourceKinds?.length ? params.sourceKinds : [],\n\t\t\tarchived: params.archived ?? false,\n\t\t\tcursor: params.cursor ?? null,\n\t\t\tcwd_filters: cwdFilters(params.cwd),\n\t\t\tmodel_providers: params.modelProviders ?? null,\n\t\t\tpage_size: pageSize,\n\t\t\tsearch_term: params.searchTerm ?? null,\n\t\t\tsort_direction:\n\t\t\t\tparams.sortDirection === \"asc\"\n\t\t\t\t\t? StoreSortDirection.Asc\n\t\t\t\t\t: StoreSortDirection.Desc,\n\t\t\tsort_key:\n\t\t\t\tparams.sortKey === \"updated_at\"\n\t\t\t\t\t? StoreThreadSortKey.UpdatedAt\n\t\t\t\t\t: StoreThreadSortKey.CreatedAt,\n\t\t\tuse_state_db_only: params.useStateDbOnly ?? false,\n\t\t});\n\t\treturn {\n\t\t\tbackwardsCursor: null,\n\t\t\tdata: page.items.map((thread) =>\n\t\t\t\tthreadHistoryToAppServerThread({\n\t\t\t\t\thistory: { items: [], thread_id: thread.thread_id },\n\t\t\t\t\tthread,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tnextCursor: page.next_cursor ?? null,\n\t\t};\n\t}\n\n\tasync threadRead(params: ThreadReadParams): Promise<ThreadReadResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst storedThread = await this.options.store.readThread({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: true,\n\t\t\tinclude_history: params.includeTurns,\n\t\t});\n\t\tconst history = params.includeTurns\n\t\t\t? storedThread.history ??\n\t\t\t\t(await this.options.store.loadHistory({\n\t\t\t\t\tthread_id: threadId,\n\t\t\t\t\tinclude_archived: true,\n\t\t\t\t}))\n\t\t\t: { items: [], thread_id: threadId };\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory,\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync threadNameSet(\n\t\tparams: ThreadSetNameParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadSetNameResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst name = normalizeThreadName(params.name);\n\t\tif (!name) {\n\t\t\tjsonRpcError(\"thread name must not be empty\", -32600, 400);\n\t\t}\n\t\tawait this.options.store.updateThreadMetadata({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t\tpatch: { name },\n\t\t});\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/name/updated\",\n\t\t\t\t\tparams: { threadId, threadName: name },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {};\n\t}\n\n\tasync threadArchive(\n\t\tparams: ThreadArchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadArchiveResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tawait this.options.store.archiveThread({ thread_id: threadId });\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/archived\",\n\t\t\t\t\tparams: { threadId },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {};\n\t}\n\n\tasync threadUnarchive(\n\t\tparams: ThreadUnarchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadUnarchiveResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst storedThread = await this.options.store.unarchiveThread({\n\t\t\tthread_id: threadId,\n\t\t});\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/unarchived\",\n\t\t\t\t\tparams: { threadId },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory: { items: [], thread_id: threadId },\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync threadMetadataUpdate(\n\t\tparams: ThreadMetadataUpdateParams,\n\t): Promise<ThreadMetadataUpdateResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tif (\n\t\t\t!params.gitInfo ||\n\t\t\t(params.gitInfo.sha === undefined &&\n\t\t\t\tparams.gitInfo.branch === undefined &&\n\t\t\t\tparams.gitInfo.originUrl === undefined)\n\t\t) {\n\t\t\tjsonRpcError(\"gitInfo must include at least one field\", -32600, 400);\n\t\t}\n\t\tconst storedThread = await this.options.store.updateThreadMetadata({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: true,\n\t\t\tpatch: {\n\t\t\t\tgit_info: {\n\t\t\t\t\tbranch: normalizeOptionalGitField(params.gitInfo.branch, \"gitInfo.branch\"),\n\t\t\t\t\torigin_url: normalizeOptionalGitField(\n\t\t\t\t\t\tparams.gitInfo.originUrl,\n\t\t\t\t\t\t\"gitInfo.originUrl\",\n\t\t\t\t\t),\n\t\t\t\t\tsha: normalizeOptionalGitField(params.gitInfo.sha, \"gitInfo.sha\"),\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory: { items: [], thread_id: threadId },\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate async readThreadResponse(\n\t\tthreadId: ThreadId,\n\t): Promise<ThreadStartResponse> {\n\t\treturn (await this.readThreadResponseWithHistory(threadId)).response;\n\t}\n\n\tprivate async readThreadResponseWithHistory(\n\t\tthreadId: ThreadId,\n\t): Promise<{\n\t\thistory: StoredThreadHistory;\n\t\tresponse: ThreadStartResponse;\n\t\tthread: StoredThread;\n\t}> {\n\t\tconst thread = await this.options.store.readThread({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t\tinclude_history: false,\n\t\t});\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\treturn {\n\t\t\thistory,\n\t\t\tresponse: buildThreadResumeResponseFromHistory({ history, thread }),\n\t\t\tthread,\n\t\t};\n\t}\n\n\tprivate async createThreadParams(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<CreateThreadParams> {\n\t\tconst threadId = threadIdFromStartParams(params);\n\t\tif (this.options.buildCreateThreadParams) {\n\t\t\treturn this.options.buildCreateThreadParams({ context, params, threadId });\n\t\t}\n\t\tconst dynamicTools =\n\t\t\t(await this.options.resolveDynamicTools?.({ context, params, threadId })) ?? [];\n\t\treturn {\n\t\t\tbase_instructions: {\n\t\t\t\ttext: params.baseInstructions ?? BaseInstructions.default().text,\n\t\t\t},\n\t\t\tdynamic_tools: dynamicTools,\n\t\t\tevent_persistence_mode: ThreadEventPersistenceMode.Limited,\n\t\t\tmetadata: {\n\t\t\t\tcwd: params.cwd ?? \"/\",\n\t\t\t\tmemory_mode: ThreadMemoryMode.Disabled,\n\t\t\t\tmodel: params.model ?? \"gpt-5.5\",\n\t\t\t\tmodel_provider: params.modelProvider ?? \"openai\",\n\t\t\t},\n\t\t\tsource: \"appServer\",\n\t\t\tthread_id: threadId,\n\t\t\tthread_source:\n\t\t\t\ttypeof params.threadSource === \"string\" ? params.threadSource : null,\n\t\t};\n\t}\n\n\tprivate async ensureLiveThread(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<LiveThread> {\n\t\tconst createParams = await this.createThreadParams(params, context);\n\t\tvalidateDynamicToolSpecs(createParams.dynamic_tools);\n\t\ttry {\n\t\t\tawait this.options.store.readThread({\n\t\t\t\tthread_id: createParams.thread_id,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tinclude_history: false,\n\t\t\t});\n\t\t\treturn LiveThread.resume(this.options.store, {\n\t\t\t\tthread_id: createParams.thread_id,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tmetadata: createParams.metadata,\n\t\t\t\tevent_persistence_mode: createParams.event_persistence_mode,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn LiveThread.create(this.options.store, createParams);\n\t\t}\n\t}\n}\n\nfunction validateDynamicToolSpecs(tools: readonly DynamicToolSpec[]): void {\n\tfor (const tool of tools) {\n\t\tif (tool.defer_loading && !tool.namespace) {\n\t\t\tjsonRpcError(\n\t\t\t\t`Dynamic tool ${tool.name} uses defer_loading and must include a namespace.`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst invalidName = invalidResponsesApiToolName(tool.name)\n\t\t\t? tool.name\n\t\t\t: tool.namespace && invalidResponsesApiToolName(tool.namespace)\n\t\t\t\t? tool.namespace\n\t\t\t\t: null;\n\t\tif (invalidName) {\n\t\t\tjsonRpcError(\n\t\t\t\t`Dynamic tool ${invalidName} is not supported by the Responses API. Tool names and namespaces may only contain letters, numbers, underscores, and hyphens.`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction invalidResponsesApiToolName(value: string): boolean {\n\treturn !/^[A-Za-z0-9_-]+$/.test(value);\n}\n\nfunction cwdFilters(value: ThreadListParams[\"cwd\"]): string[] | null {\n\tif (typeof value === \"string\") {\n\t\treturn [value];\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\treturn null;\n}\n\nfunction normalizeThreadName(value: string): string | null {\n\tconst name = value.trim().replace(/\\s+/gu, \" \");\n\treturn name ? name : null;\n}\n\nfunction normalizeOptionalGitField(\n\tvalue: string | null | undefined,\n\tfield: string,\n): string | null | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn value;\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tjsonRpcError(`${field} must not be empty`, -32600, 400);\n\t}\n\treturn trimmed;\n}\n","import {\n\tSteerInputError,\n\tasThreadId,\n\ttype Submission,\n\ttype ThreadId,\n} from \"../../../core/src\";\nimport { normalizeCollaborationMode } from \"../../../core/src/collaboration-mode-presets\";\nimport type {\n\tTurnInterruptParams,\n\tTurnInterruptResponse,\n\tTurnStartParams,\n\tTurnStartResponse,\n\tTurnSteerParams,\n\tTurnSteerResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { CodexSessionTaskRunner } from \"../session_task_runner\";\nimport {\n\tappServerUserInputToCoreUserInput,\n\tapprovalPolicyString,\n\tdefaultId,\n\tjsonRpcError,\n\tsteerErrorCode,\n\tvalueOrNull,\n\ttype ProcessorCreateSession,\n\ttype RuntimeSession,\n\ttype TurnStartParamsWithClientMessageId,\n\ttype TurnStartParamsWithCollaborationMode,\n} from \"./common\";\n\nexport type TurnRequestProcessorOptions<Context> = {\n\tcreateSession: ProcessorCreateSession<Context>;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\tsessions: Map<ThreadId, RuntimeSession>;\n\ttaskRunner: CodexSessionTaskRunner<Context>;\n};\n\nexport class TurnRequestProcessor<Context> {\n\tconstructor(private readonly options: TurnRequestProcessorOptions<Context>) {}\n\n\tasync turnStart(\n\t\tparams: TurnStartParams,\n\t\tcontext?: Context,\n\t): Promise<TurnStartResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst input = params.input.map(appServerUserInputToCoreUserInput);\n\t\tconst collaborationModeInput =\n\t\t\t(params as TurnStartParamsWithCollaborationMode).collaborationMode ??\n\t\t\t(params as TurnStartParamsWithCollaborationMode).collaboration_mode;\n\t\tconst collaborationMode = collaborationModeInput\n\t\t\t? normalizeCollaborationMode({\n\t\t\t\t\tcollaborationMode: collaborationModeInput,\n\t\t\t\t\tmodel: valueOrNull(params.model) ?? \"gpt-5.5\",\n\t\t\t\t\treasoningEffort: valueOrNull(params.effort) ?? null,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tconst submission: Submission = {\n\t\t\tid:\n\t\t\t\t(params as TurnStartParamsWithClientMessageId).clientMessageId ??\n\t\t\t\tdefaultId(),\n\t\t\top: {\n\t\t\t\ttype: \"user_input_with_turn_context\",\n\t\t\t\titems: input,\n\t\t\t\tcwd: valueOrNull(params.cwd) ?? undefined,\n\t\t\t\tapproval_policy: approvalPolicyString(params.approvalPolicy) ?? undefined,\n\t\t\t\tapprovals_reviewer: valueOrNull(params.approvalsReviewer) ?? undefined,\n\t\t\t\tsandbox_policy: valueOrNull(params.sandboxPolicy) ?? undefined,\n\t\t\t\tmodel: valueOrNull(params.model) ?? undefined,\n\t\t\t\teffort: valueOrNull(params.effort) ?? undefined,\n\t\t\t\tsummary: valueOrNull(params.summary) ?? undefined,\n\t\t\t\tservice_tier: valueOrNull(params.serviceTier) ?? undefined,\n\t\t\t\tcollaboration_mode: collaborationMode,\n\t\t\t\tpersonality: valueOrNull(params.personality) ?? undefined,\n\t\t\t\tfinal_output_json_schema: valueOrNull(params.outputSchema) ?? undefined,\n\t\t\t},\n\t\t};\n\t\tconst runtimeSession = await this.sessionForTurn(threadId, params, submission, context);\n\t\tif (runtimeSession.session.activeTurn) {\n\t\t\tthrow jsonRpcError(\"A Codex turn is already active for this thread.\", -32011, 409);\n\t\t}\n\t\tconst turn = await this.options.taskRunner.startRegularTask({\n\t\t\tcontext,\n\t\t\titems: input,\n\t\t\tparams,\n\t\t\truntimeSession,\n\t\t\tsubmission,\n\t\t\tthreadId,\n\t\t});\n\t\treturn {\n\t\t\tturn: {\n\t\t\t\tid: turn.sub_id,\n\t\t\t\titems: [],\n\t\t\t\titemsView: \"notLoaded\",\n\t\t\t\tstatus: \"inProgress\",\n\t\t\t\terror: null,\n\t\t\t\tstartedAt: Math.floor(Date.now() / 1000),\n\t\t\t\tcompletedAt: null,\n\t\t\t\tdurationMs: null,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync turnSteer(\n\t\tparams: TurnSteerParams,\n\t\tcontext?: Context,\n\t): Promise<TurnSteerResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst runtimeSession = this.options.sessions.get(threadId);\n\t\tif (!runtimeSession) {\n\t\t\tthrow jsonRpcError(\"No active Codex turn is available for steering.\", -32012, 409);\n\t\t}\n\t\ttry {\n\t\t\tconst turnId = await runtimeSession.session.steer_input(\n\t\t\t\tparams.input.map(appServerUserInputToCoreUserInput),\n\t\t\t\tparams.expectedTurnId,\n\t\t\t);\n\t\t\treturn { turnId };\n\t\t} catch (error) {\n\t\t\tif (error instanceof SteerInputError) {\n\t\t\t\tthrow jsonRpcError(error.message, steerErrorCode(error.kind), 409);\n\t\t\t}\n\t\t\tthis.options.onRuntimeError?.(error, { context, threadId });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync turnInterrupt(params: TurnInterruptParams): Promise<TurnInterruptResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst runtimeSession = this.options.sessions.get(threadId);\n\t\tif (!runtimeSession?.session.activeTurn) {\n\t\t\treturn {};\n\t\t}\n\t\tconst activeTask = runtimeSession.session.activeTurn.firstTask();\n\t\tif (activeTask && activeTask.sub_id !== params.turnId) {\n\t\t\tthrow jsonRpcError(\n\t\t\t\t`Expected active turn ${params.turnId}, but current active turn is ${activeTask.sub_id}.`,\n\t\t\t\t-32013,\n\t\t\t\t409,\n\t\t\t);\n\t\t}\n\t\truntimeSession.abortController?.abort();\n\t\tawait runtimeSession.session.abortActiveTurn(\"interrupted\");\n\t\treturn {};\n\t}\n\n\tprivate async sessionForTurn(\n\t\tthreadId: ThreadId,\n\t\tparams: TurnStartParams,\n\t\tsubmission: Submission,\n\t\tcontext?: Context,\n\t): Promise<RuntimeSession> {\n\t\tconst existing = this.options.sessions.get(threadId);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst session = await this.options.createSession(threadId, params, context, submission);\n\t\tconst runtimeSession: RuntimeSession = {\n\t\t\tabortController: null,\n\t\t\trunPromise: null,\n\t\t\tsession,\n\t\t};\n\t\tthis.options.sessions.set(threadId, runtimeSession);\n\t\treturn runtimeSession;\n\t}\n}\n","import type { DynamicToolCallResponse } from \"../../app-server-protocol/schema/typescript/v2\";\nimport type {\n\tDynamicToolCallOutputContentItem as CoreDynamicToolCallOutputContentItem,\n\tDynamicToolResponse as CoreDynamicToolResponse,\n} from \"../../core/src/protocol/dynamic_tools\";\n\nexport function coreDynamicToolResponseFromAppServerResponse(\n\tvalue: unknown,\n): CoreDynamicToolResponse {\n\tconst response = decodeDynamicToolCallResponse(value);\n\treturn {\n\t\tcontent_items: response.contentItems.map(coreDynamicToolCallOutputContentItem),\n\t\tsuccess: response.success,\n\t};\n}\n\nexport function decodeDynamicToolCallResponse(\n\tvalue: unknown,\n): DynamicToolCallResponse {\n\tif (!isDynamicToolCallResponse(value)) {\n\t\treturn fallbackDynamicToolCallResponse(\"dynamic tool response was invalid\");\n\t}\n\treturn value;\n}\n\nexport function fallbackDynamicToolCallResponse(\n\tmessage: string,\n): DynamicToolCallResponse {\n\treturn {\n\t\tcontentItems: [{ text: message, type: \"inputText\" }],\n\t\tsuccess: false,\n\t};\n}\n\nfunction coreDynamicToolCallOutputContentItem(\n\titem: DynamicToolCallResponse[\"contentItems\"][number],\n): CoreDynamicToolCallOutputContentItem {\n\tswitch (item.type) {\n\t\tcase \"inputText\":\n\t\t\treturn { text: item.text, type: \"inputText\" };\n\t\tcase \"inputImage\":\n\t\t\treturn { imageUrl: item.imageUrl, type: \"inputImage\" };\n\t}\n}\n\nfunction isDynamicToolCallResponse(\n\tvalue: unknown,\n): value is DynamicToolCallResponse {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst candidate = value as DynamicToolCallResponse;\n\treturn (\n\t\ttypeof candidate.success === \"boolean\" &&\n\t\tArray.isArray(candidate.contentItems) &&\n\t\tcandidate.contentItems.every(isDynamicToolCallOutputContentItem)\n\t);\n}\n\nfunction isDynamicToolCallOutputContentItem(\n\tvalue: unknown,\n): value is DynamicToolCallResponse[\"contentItems\"][number] {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst item = value as DynamicToolCallResponse[\"contentItems\"][number];\n\tif (item.type === \"inputText\") {\n\t\treturn typeof item.text === \"string\";\n\t}\n\tif (item.type === \"inputImage\") {\n\t\treturn typeof item.imageUrl === \"string\";\n\t}\n\treturn false;\n}\n","import type {\n\tRequestId,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tDynamicToolCallResponse,\n\tMcpServerElicitationRequestResponse,\n\tPermissionsRequestApprovalResponse,\n\tToolRequestUserInputResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport type { Submission } from \"../../core/src/protocol\";\nimport { coreDynamicToolResponseFromAppServerResponse } from \"./dynamic_tools\";\nimport type { JSONRPCErrorError } from \"../../app-server-client/src/lib\";\n\nexport type ServerRequestResponseTarget =\n\t| { responseId: string; type: \"user_input\" }\n\t| { callId: string; type: \"request_permissions\" }\n\t| { callId: string; type: \"dynamic_tool\" }\n\t| { requestId: string | number; serverName: string; type: \"mcp_elicitation\" };\n\nexport function submissionFromServerRequestResult(input: {\n\trequest: ServerRequest | null;\n\trequestId: RequestId;\n\tresult: unknown;\n\ttarget?: ServerRequestResponseTarget | null;\n}): Submission {\n\tconst target = input.target ?? targetFromServerRequest(input.request);\n\tconst request = input.request;\n\tif (isSubmissionOp(input.result)) {\n\t\tthrow unsupportedServerRequestResponse(request);\n\t}\n\tif (target?.type === \"request_permissions\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: corePermissionsResponse(\n\t\t\t\t\tinput.result as PermissionsRequestApprovalResponse,\n\t\t\t\t),\n\t\t\t\ttype: \"request_permissions_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"dynamic_tool\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: coreDynamicToolResponse(input.result as DynamicToolCallResponse),\n\t\t\t\ttype: \"dynamic_tool_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"mcp_elicitation\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.requestId,\n\t\t\t\tresponse: coreMcpElicitationResponse(\n\t\t\t\t\tinput.result as McpServerElicitationRequestResponse,\n\t\t\t\t),\n\t\t\t\tserver_name: target.serverName,\n\t\t\t\ttype: \"mcp_server_elicitation_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"user_input\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.responseId,\n\t\t\t\tresponse: coreToolRequestUserInputResponse(\n\t\t\t\t\tinput.result as ToolRequestUserInputResponse,\n\t\t\t\t),\n\t\t\t\ttype: \"user_input_answer\",\n\t\t\t},\n\t\t};\n\t}\n\tthrow unsupportedServerRequestResponse(request);\n}\n\nfunction coreDynamicToolResponse(response: DynamicToolCallResponse) {\n\treturn coreDynamicToolResponseFromAppServerResponse(response);\n}\n\nfunction corePermissionsResponse(response: PermissionsRequestApprovalResponse) {\n\treturn {\n\t\tpermissions: response.permissions as never,\n\t\tscope: response.scope as never,\n\t\tstrict_auto_review: response.strictAutoReview,\n\t};\n}\n\nfunction coreMcpElicitationResponse(\n\tresponse: McpServerElicitationRequestResponse,\n) {\n\treturn {\n\t\taction: response.action,\n\t\tcontent: response.content ?? undefined,\n\t\tmeta: response._meta ?? undefined,\n\t};\n}\n\nexport function submissionFromServerRequestError(input: {\n\terror: JSONRPCErrorError;\n\trequest: ServerRequest | null;\n\trequestId: RequestId;\n\ttarget?: ServerRequestResponseTarget | null;\n}): Submission {\n\tconst target = input.target ?? targetFromServerRequest(input.request);\n\tconst requestId = String(input.requestId);\n\tif (target?.type === \"dynamic_tool\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: {\n\t\t\t\t\tcontent_items: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: input.error.message,\n\t\t\t\t\t\t\ttype: \"inputText\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tsuccess: false,\n\t\t\t\t},\n\t\t\t\ttype: \"dynamic_tool_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"request_permissions\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: {\n\t\t\t\t\tpermissions: {},\n\t\t\t\t},\n\t\t\t\ttype: \"request_permissions_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"user_input\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.responseId,\n\t\t\t\tresponse: { answers: {} },\n\t\t\t\ttype: \"user_input_answer\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"mcp_elicitation\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.requestId,\n\t\t\t\tresponse: {\n\t\t\t\t\taction: \"cancel\",\n\t\t\t\t\tcontent: undefined,\n\t\t\t\t\tmeta: undefined,\n\t\t\t\t},\n\t\t\t\tserver_name: target.serverName,\n\t\t\t\ttype: \"mcp_server_elicitation_response\",\n\t\t\t},\n\t\t};\n\t}\n\tthrow unsupportedServerRequestResponse(input.request);\n}\n\nfunction coreToolRequestUserInputResponse(\n\tresponse: ToolRequestUserInputResponse,\n) {\n\tconst answers: Record<string, { answers: string[] }> = {};\n\tfor (const [key, value] of Object.entries(response.answers)) {\n\t\tif (value) {\n\t\t\tanswers[key] = value;\n\t\t}\n\t}\n\treturn { answers };\n}\n\nexport function isServerRequestResponseSubmission(\n\tsubmission: Submission,\n): boolean {\n\treturn (\n\t\tsubmission.op.type === \"dynamic_tool_response\" ||\n\t\tsubmission.op.type === \"mcp_server_elicitation_response\" ||\n\t\tsubmission.op.type === \"request_permissions_response\" ||\n\t\tsubmission.op.type === \"user_input_answer\"\n\t);\n}\n\nfunction isSubmissionOp(value: unknown): value is Submission[\"op\"] {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"type\" in value &&\n\t\ttypeof (value as { type?: unknown }).type === \"string\" &&\n\t\tisServerRequestResponseSubmission({ id: \"response\", op: value as Submission[\"op\"] })\n\t);\n}\n\nfunction targetFromServerRequest(\n\trequest: ServerRequest | null,\n): ServerRequestResponseTarget | null {\n\tif (!request) {\n\t\treturn null;\n\t}\n\tswitch (request.method) {\n\t\tcase \"item/tool/requestUserInput\":\n\t\t\treturn {\n\t\t\t\ttype: \"user_input\",\n\t\t\t\tresponseId: request.params.turnId,\n\t\t\t};\n\t\tcase \"item/permissions/requestApproval\":\n\t\t\treturn {\n\t\t\t\ttype: \"request_permissions\",\n\t\t\t\tcallId: request.params.itemId,\n\t\t\t};\n\t\t\tcase \"item/tool/call\":\n\t\t\t\treturn { type: \"dynamic_tool\", callId: request.params.callId };\n\t\tcase \"mcpServer/elicitation/request\":\n\t\t\treturn \"elicitationId\" in request.params\n\t\t\t\t? {\n\t\t\t\t\t\ttype: \"mcp_elicitation\",\n\t\t\t\t\t\tserverName: request.params.serverName,\n\t\t\t\t\t\trequestId: request.params.elicitationId,\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction unsupportedServerRequestResponse(request: ServerRequest | null): never {\n\tthrow new Error(\n\t\t`Unsupported Codex server-request response: ${request?.method ?? \"unknown\"}`,\n\t);\n}\n","import {\n\tBaseInstructions,\n\tLiveThread,\n\tSession,\n\tThreadEventPersistenceMode,\n\tThreadMemoryMode,\n\tdefaultSessionConfiguration,\n\ttype Event,\n\ttype McpConnectionManager,\n\ttype SessionConfiguration,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../core/src\";\nimport type {\n\tThreadCompactStartParams,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tapprovalPolicyString,\n\tvalueOrNull,\n} from \"./request_processors/common\";\n\nexport type CodexSessionRequestParams =\n\t| ThreadStartParams\n\t| ThreadResumeParams\n\t| TurnStartParams\n\t| ThreadCompactStartParams;\n\nexport type CodexSessionFactoryOptions<Context = unknown> = {\n\tbuildSessionConfiguration?: (input: {\n\t\tcontext?: Context;\n\t\tparams: CodexSessionRequestParams;\n\t\tthread: Awaited<ReturnType<ThreadStore[\"readThread\"]>>;\n\t}) => Partial<SessionConfiguration> | Promise<Partial<SessionConfiguration>>;\n\tcreateSession?: (input: {\n\t\tcontext?: Context;\n\t\teventSink: (event: Event) => void;\n\t\tparams: CodexSessionRequestParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}) => Session | Promise<Session>;\n\temitCoreEvent: (threadId: ThreadId, event: Event, context?: Context) => void;\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tstore: ThreadStore;\n};\n\nexport class CodexSessionFactory<Context = unknown> {\n\tconstructor(private readonly options: CodexSessionFactoryOptions<Context>) {}\n\n\tcreateSession = async (input: {\n\t\tcontext?: Context;\n\t\tparams: CodexSessionRequestParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<Session> => {\n\t\tconst eventSink = (event: Event) =>\n\t\t\tthis.options.emitCoreEvent(input.threadId, event, input.context);\n\t\tif (this.options.createSession) {\n\t\t\treturn this.options.createSession({ ...input, eventSink });\n\t\t}\n\t\tconst thread = await this.options.store.readThread({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t\tinclude_history: false,\n\t\t});\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst overrides = await this.options.buildSessionConfiguration?.({\n\t\t\tcontext: input.context,\n\t\t\tparams: input.params,\n\t\t\tthread,\n\t\t});\n\t\tconst configuration = defaultSessionConfiguration({\n\t\t\tapproval_policy:\n\t\t\t\t\"approvalPolicy\" in input.params\n\t\t\t\t\t? approvalPolicyString(input.params.approvalPolicy) ?? \"never\"\n\t\t\t\t\t: \"never\",\n\t\t\tapprovals_reviewer:\n\t\t\t\t\"approvalsReviewer\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.approvalsReviewer) ?? \"user\"\n\t\t\t\t\t: \"user\",\n\t\t\tbase_instructions: { text: \"\" },\n\t\t\tcwd:\n\t\t\t\t\"cwd\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.cwd) ?? thread.cwd\n\t\t\t\t\t: thread.cwd,\n\t\t\tdeveloper_instructions:\n\t\t\t\t\"developerInstructions\" in input.params\n\t\t\t\t\t? (input.params.developerInstructions ?? null)\n\t\t\t\t\t: null,\n\t\t\tmodel:\n\t\t\t\t\"model\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.model) ?? thread.model ?? \"gpt-5.5\"\n\t\t\t\t\t: thread.model ?? \"gpt-5.5\",\n\t\t\tprovider:\n\t\t\t\t\"modelProvider\" in input.params\n\t\t\t\t\t? (valueOrNull(input.params.modelProvider) ?? thread.model_provider)\n\t\t\t\t\t: thread.model_provider,\n\t\t\treasoning_effort: \"effort\" in input.params ? input.params.effort ?? null : null,\n\t\t\tservice_tier:\n\t\t\t\t\"serviceTier\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.serviceTier) ?? null\n\t\t\t\t\t: null,\n\t\t\tsession_source: \"appServer\",\n\t\t\t...(overrides ?? {}),\n\t\t});\n\t\tif (!configuration.base_instructions.text) {\n\t\t\tconfiguration.base_instructions = {\n\t\t\t\ttext:\n\t\t\t\t\t\"baseInstructions\" in input.params && input.params.baseInstructions\n\t\t\t\t\t\t? input.params.baseInstructions\n\t\t\t\t\t\t: BaseInstructions.default().text,\n\t\t\t};\n\t\t}\n\t\treturn new Session({\n\t\t\tthreadId: input.threadId,\n\t\t\tconfiguration,\n\t\t\tliveThread: await LiveThread.resume(this.options.store, {\n\t\t\t\tthread_id: input.threadId,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcwd: thread.cwd,\n\t\t\t\t\tmemory_mode: ThreadMemoryMode.Disabled,\n\t\t\t\t\tmodel_provider: thread.model_provider,\n\t\t\t\t},\n\t\t\t\tevent_persistence_mode: ThreadEventPersistenceMode.Limited,\n\t\t\t}),\n\t\t\tinitialHistory: history.items,\n\t\t\trolloutPath: thread.rollout_path ?? null,\n\t\t\tforkedFromId: thread.forked_from_id ?? null,\n\t\t\tthreadName: thread.name ?? null,\n\t\t\tthreadSource: thread.thread_source ?? null,\n\t\t\teventSink,\n\t\t\tmcpConnectionManager: this.options.mcpConnectionManager,\n\t\t});\n\t};\n}\n","import {\n\tCompactTask,\n\tRegularTask,\n\ttype Session,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n\ttype TurnContext,\n\ttype UserInput,\n} from \"../../core/src\";\nimport type { ModelClient } from \"../../core/src\";\nimport type {\n\tThreadCompactStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport { run_compact_task } from \"../../core/src/compact-task-runner\";\nimport { runTurn } from \"../../core/src/session/turn\";\nimport type { RuntimeSession } from \"./request_processors/common\";\n\nexport type CodexSessionTaskRunnerCreateModelClientInput<Context> = {\n\tcontext?: Context;\n\tsession: Session;\n\tthreadId: ThreadId;\n};\n\nexport type CodexSessionTaskRunnerOptions<Context> = {\n\tcreateModelClient: (\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t) => ModelClient | Promise<ModelClient>;\n\tmodelClientCacheKey?: (\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t) => string | null | undefined;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\trunInBackground?: (\n\t\tpromise: Promise<unknown>,\n\t\tcontext: { context?: Context; threadId: ThreadId },\n\t) => void;\n\tstore: ThreadStore;\n};\n\nexport class CodexSessionTaskRunner<Context> {\n\tprivate readonly modelClients = new Map<string, ModelClient>();\n\n\tconstructor(private readonly options: CodexSessionTaskRunnerOptions<Context>) {}\n\n\tasync startRegularTask(input: {\n\t\tcontext?: Context;\n\t\titems: UserInput[];\n\t\tparams: TurnStartParams;\n\t\truntimeSession: RuntimeSession;\n\t\tsubmission: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<TurnContext> {\n\t\tconst turn = await input.runtimeSession.session.startTurn(input.submission);\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst abortController = new AbortController();\n\t\tconst modelClient = await this.modelClient({\n\t\t\tcontext: input.context,\n\t\t\tsession: input.runtimeSession.session,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t\tconst task = RegularTask.new({\n\t\t\thistory: history.items,\n\t\t\tsubmission: input.submission,\n\t\t\trun_turn: async (taskInput) => {\n\t\t\t\tconst result = await runTurn({\n\t\t\t\t\thistory: taskInput.history,\n\t\t\t\t\tmodelClient,\n\t\t\t\t\tsession: taskInput.session,\n\t\t\t\t\tsignal: taskInput.signal,\n\t\t\t\t\tsubmission: taskInput.submission,\n\t\t\t\t\tturn: taskInput.turn,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tlast_agent_message: result.lastAgentMessage,\n\t\t\t\t\tsteps: result.steps,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tthis.spawnTask({\n\t\t\tabortController,\n\t\t\tcontext: input.context,\n\t\t\tinput: input.items,\n\t\t\truntimeSession: input.runtimeSession,\n\t\t\ttask,\n\t\t\tthreadId: input.threadId,\n\t\t\tturn,\n\t\t});\n\t\treturn turn;\n\t}\n\n\tasync startCompactTask(input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadCompactStartParams;\n\t\truntimeSession: RuntimeSession;\n\t\tsubmission: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<TurnContext> {\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst abortController = new AbortController();\n\t\tconst turn = await input.runtimeSession.session.startCompactTurn(input.submission);\n\t\tconst modelClient = await this.modelClient({\n\t\t\tcontext: input.context,\n\t\t\tsession: input.runtimeSession.session,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t\tconst task = new CompactTask({\n\t\t\thistory: history.items,\n\t\t\tsubmission: input.submission,\n\t\t\trun_compact_task: async (taskInput) => {\n\t\t\t\tconst result = await run_compact_task({\n\t\t\t\t\tmodelClient,\n\t\t\t\t\tsession: taskInput.session,\n\t\t\t\t\thistory: taskInput.history,\n\t\t\t\t\tsubmission: taskInput.submission,\n\t\t\t\t\tturn: taskInput.turn,\n\t\t\t\t\tsignal: taskInput.signal,\n\t\t\t\t\tcompleteTurn: false,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tlast_agent_message: null,\n\t\t\t\t\tsteps: 1,\n\t\t\t\t\tmessage: result.summary,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tthis.spawnTask({\n\t\t\tabortController,\n\t\t\tcontext: input.context,\n\t\t\tinput: [],\n\t\t\truntimeSession: input.runtimeSession,\n\t\t\ttask,\n\t\t\tthreadId: input.threadId,\n\t\t\tturn,\n\t\t});\n\t\treturn turn;\n\t}\n\n\tprivate spawnTask(input: {\n\t\tabortController: AbortController;\n\t\tcontext?: Context;\n\t\tinput: UserInput[];\n\t\truntimeSession: RuntimeSession;\n\t\ttask: CompactTask | RegularTask;\n\t\tthreadId: ThreadId;\n\t\tturn: TurnContext;\n\t}): void {\n\t\tinput.runtimeSession.abortController = input.abortController;\n\t\tinput.runtimeSession.runPromise = input.runtimeSession.session\n\t\t\t.spawn_task({\n\t\t\t\tabortController: input.abortController,\n\t\t\t\tinput: input.input,\n\t\t\t\ttask: input.task,\n\t\t\t\tturnContext: input.turn,\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.options.onRuntimeError?.(error, {\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinput.runtimeSession.abortController = null;\n\t\t\t\tinput.runtimeSession.runPromise = null;\n\t\t\t});\n\t\tthis.options.runInBackground?.(input.runtimeSession.runPromise, {\n\t\t\tcontext: input.context,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t}\n\n\tprivate async modelClient(\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t): Promise<ModelClient> {\n\t\tconst cacheKey = this.options.modelClientCacheKey?.(input) ?? String(input.threadId);\n\t\tconst existing = this.modelClients.get(cacheKey);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created = await this.options.createModelClient(input);\n\t\tthis.modelClients.set(cacheKey, created);\n\t\treturn created;\n\t}\n}\n","import type { RequestId } from \"../../app-server-protocol/schema/typescript\";\nimport type { Turn } from \"../../app-server-protocol/schema/typescript/v2\";\nimport { appServerTurnFromCoreTurn } from \"../../app-server-protocol/src/protocol/thread-resume\";\nimport type { ThreadId } from \"../../core/src/ids\";\nimport type { EventMsg } from \"../../core/src/protocol\";\nimport { ThreadHistoryBuilder } from \"../../core/src/thread-history-builder\";\n\nexport type PendingInterruptQueue = RequestId[];\n\nexport type PendingThreadResumeRequest = {\n\tincludeTurns: boolean;\n\trequestId: RequestId;\n\tthreadId: ThreadId;\n};\n\nexport type ThreadListenerCommand =\n\t| { request: PendingThreadResumeRequest; type: \"send_thread_resume_response\" }\n\t| { requestId: RequestId; type: \"resolve_server_request\" };\n\nexport type TurnSummary = {\n\tlastError: { message: string } | null;\n\tstartedAt: number | null;\n};\n\nexport type ThreadStateTrackResult = {\n\tactiveTurn: Turn | null;\n\tterminalTurn: Turn | null;\n};\n\nexport class ThreadState {\n\tpendingInterrupts: PendingInterruptQueue = [];\n\tturnSummary: TurnSummary = { lastError: null, startedAt: null };\n\tlastTerminalTurnId: string | null = null;\n\texperimentalRawEvents = false;\n\tlistenerGeneration = 0;\n\tprivate currentTurnHistory = new ThreadHistoryBuilder();\n\tprivate listenerActive = false;\n\n\tsetListener(): number {\n\t\tthis.listenerGeneration = (this.listenerGeneration + 1) >>> 0;\n\t\tthis.listenerActive = true;\n\t\treturn this.listenerGeneration;\n\t}\n\n\tclearListener(): void {\n\t\tthis.listenerActive = false;\n\t\tthis.currentTurnHistory.reset();\n\t}\n\n\thasListener(): boolean {\n\t\treturn this.listenerActive;\n\t}\n\n\tsetExperimentalRawEvents(enabled: boolean): void {\n\t\tthis.experimentalRawEvents = enabled;\n\t}\n\n\tactiveTurnSnapshot(): Turn | null {\n\t\tconst turn = this.currentTurnHistory.active_turn_snapshot();\n\t\treturn turn ? appServerTurnFromCoreTurn(turn) : null;\n\t}\n\n\ttrackCurrentTurnEvent(eventTurnId: string, event: EventMsg): ThreadStateTrackResult {\n\t\tif (event.type === \"turn_started\") {\n\t\t\tthis.turnSummary.startedAt = event.started_at ?? null;\n\t\t}\n\t\tif (event.type === \"error\") {\n\t\t\tthis.turnSummary.lastError = { message: event.message };\n\t\t}\n\t\tthis.currentTurnHistory.handle_event(event, eventTurnId);\n\t\tif (event.type === \"turn_complete\" || event.type === \"turn_aborted\") {\n\t\t\tthis.lastTerminalTurnId = eventTurnId;\n\t\t\tconst terminalTurn =\n\t\t\t\tthis.currentTurnHistory.finish().find((turn) => turn.id === eventTurnId) ??\n\t\t\t\tnull;\n\t\t\tthis.currentTurnHistory.reset();\n\t\t\treturn {\n\t\t\t\tactiveTurn: null,\n\t\t\t\tterminalTurn: terminalTurn ? appServerTurnFromCoreTurn(terminalTurn) : null,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tactiveTurn: this.activeTurnSnapshot(),\n\t\t\tterminalTurn: null,\n\t\t};\n\t}\n}\n\nexport class ThreadStateManager {\n\tprivate readonly liveConnections = new Set<number>();\n\tprivate readonly threads = new Map<ThreadId, ThreadEntry>();\n\tprivate readonly threadIdsByConnection = new Map<number, Set<ThreadId>>();\n\n\tconnectionInitialized(connectionId: number): void {\n\t\tthis.liveConnections.add(connectionId);\n\t}\n\n\tthreadState(threadId: ThreadId): ThreadState {\n\t\tconst entry = this.threadEntry(threadId);\n\t\treturn entry.state;\n\t}\n\n\tremoveThreadState(threadId: ThreadId): void {\n\t\tconst entry = this.threads.get(threadId);\n\t\tentry?.state.clearListener();\n\t\tthis.threads.delete(threadId);\n\t\tfor (const [connectionId, threadIds] of this.threadIdsByConnection) {\n\t\t\tthreadIds.delete(threadId);\n\t\t\tif (threadIds.size === 0) {\n\t\t\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\t\t}\n\t\t}\n\t}\n\n\tclearAllListeners(): void {\n\t\tfor (const entry of this.threads.values()) {\n\t\t\tentry.state.clearListener();\n\t\t}\n\t}\n\n\tsubscribedConnectionIds(threadId: ThreadId): number[] {\n\t\treturn Array.from(this.threads.get(threadId)?.connectionIds ?? []);\n\t}\n\n\ttryEnsureConnectionSubscribed(\n\t\tthreadId: ThreadId,\n\t\tconnectionId: number,\n\t\texperimentalRawEvents = false,\n\t): ThreadState | null {\n\t\tif (!this.liveConnections.has(connectionId)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst threadIds = this.threadIdsByConnection.get(connectionId);\n\t\tif (threadIds) {\n\t\t\tthreadIds.add(threadId);\n\t\t} else {\n\t\t\tthis.threadIdsByConnection.set(connectionId, new Set([threadId]));\n\t\t}\n\t\tconst entry = this.threadEntry(threadId);\n\t\tentry.connectionIds.add(connectionId);\n\t\tif (experimentalRawEvents) {\n\t\t\tentry.state.setExperimentalRawEvents(true);\n\t\t}\n\t\treturn entry.state;\n\t}\n\n\tunsubscribeConnectionFromThread(threadId: ThreadId, connectionId: number): boolean {\n\t\tconst entry = this.threads.get(threadId);\n\t\tconst threadIds = this.threadIdsByConnection.get(connectionId);\n\t\tif (!entry || !threadIds?.has(threadId)) {\n\t\t\treturn false;\n\t\t}\n\t\tentry.connectionIds.delete(connectionId);\n\t\tthreadIds.delete(threadId);\n\t\tif (threadIds.size === 0) {\n\t\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\t}\n\t\treturn true;\n\t}\n\n\tremoveConnection(connectionId: number): ThreadId[] {\n\t\tthis.liveConnections.delete(connectionId);\n\t\tconst threadIds = Array.from(this.threadIdsByConnection.get(connectionId) ?? []);\n\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\tconst emptyThreadIds: ThreadId[] = [];\n\t\tfor (const threadId of threadIds) {\n\t\t\tconst entry = this.threads.get(threadId);\n\t\t\tentry?.connectionIds.delete(connectionId);\n\t\t\tif (entry && entry.connectionIds.size === 0) {\n\t\t\t\temptyThreadIds.push(threadId);\n\t\t\t}\n\t\t}\n\t\treturn emptyThreadIds;\n\t}\n\n\tprivate threadEntry(threadId: ThreadId): ThreadEntry {\n\t\tconst existing = this.threads.get(threadId);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst entry: ThreadEntry = {\n\t\t\tconnectionIds: new Set(),\n\t\t\tstate: new ThreadState(),\n\t\t};\n\t\tthis.threads.set(threadId, entry);\n\t\treturn entry;\n\t}\n}\n\ntype ThreadEntry = {\n\tconnectionIds: Set<number>;\n\tstate: ThreadState;\n};\n","import type { EventMsg } from \"../../core/src/protocol\";\nimport {\n\teventMsgToAppServerEvents,\n\tserverRequestResolvedNotification,\n\ttype AppServerProtocolEvent,\n\ttype EventMappingContext,\n\ttype ServerRequestCoreTarget,\n} from \"../../app-server-protocol/src/protocol/event-mapping\";\n\nexport type {\n\tAppServerProtocolEvent,\n\tEventMappingContext,\n\tServerRequestCoreTarget,\n};\n\nexport function apply_bespoke_event_handling(\n\tmsg: EventMsg,\n\tcontext: EventMappingContext,\n): AppServerProtocolEvent[] {\n\treturn eventMsgToAppServerEvents(msg, context);\n}\n\nexport { serverRequestResolvedNotification };\n","import {\n\tSession,\n\tasThreadId,\n\ttype CreateThreadParams,\n\ttype DynamicToolSpec,\n\ttype Event,\n\ttype McpConnectionManager,\n\ttype SessionConfiguration,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../core/src\";\nimport { type ModelClient } from \"../../core/src\";\nimport type {\n\tAppServerEvent,\n\tJSONRPCErrorError,\n\tResult,\n} from \"../../app-server-client/src/lib\";\nimport {\n\tOutgoingMessageSender,\n\toutgoingMessageToAppServerEvent,\n\ttype ConnectionId,\n\ttype OutgoingMessage,\n} from \"./outgoing_message\";\nimport {\n\tMcpRequestProcessor,\n\tThreadRequestProcessor,\n\tTurnRequestProcessor,\n\ttype RuntimeSession,\n} from \"./request_processors\";\nimport {\n\tisServerRequestResponseSubmission,\n\tsubmissionFromServerRequestError,\n\tsubmissionFromServerRequestResult,\n\ttype ServerRequestResponseTarget,\n} from \"./server_request_response\";\nimport { CodexSessionFactory } from \"./session_factory\";\nimport { CodexSessionTaskRunner } from \"./session_task_runner\";\nimport { ThreadStateManager } from \"./thread_state\";\nimport { RequestSerializationQueues } from \"./request_serialization\";\nimport {\n\tapply_bespoke_event_handling,\n\tserverRequestResolvedNotification,\n\ttype AppServerProtocolEvent,\n\ttype ServerRequestCoreTarget,\n} from \"./bespoke_event_handling\";\nimport type {\n\tThreadCompactStartParams,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tCodexAppServerConnectionSessionState,\n\tCodexAppServerMessageProcessor,\n\ttype CodexAppServerMethodHandlers,\n} from \"./message_processor\";\nimport type {\n\tInitializeParams,\n\tInitializeResponse,\n} from \"../../app-server-protocol/schema/typescript\";\n\nexport type CodexAppServerRuntimeContext = unknown;\n\nexport type CodexAppServerEventSink<Context = CodexAppServerRuntimeContext> = (\n\tevent: AppServerEvent,\n\tcontext: {\n\t\tcontext?: Context;\n\t\tthreadId: ThreadId;\n\t},\n) => Promise<void> | void;\n\nexport type CodexAppServerOutgoingSink<Context = CodexAppServerRuntimeContext> = (\n\tmessage: OutgoingMessage,\n\tcontext: {\n\t\tconnectionIds?: ConnectionId[];\n\t\tcontext?: Context;\n\t\tthreadId?: ThreadId;\n\t},\n) => Promise<void> | void;\n\nexport type CodexAppServerRuntimeOptions<Context = CodexAppServerRuntimeContext> = {\n\tbuildCreateThreadParams?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => CreateThreadParams | Promise<CreateThreadParams>;\n\tbuildSessionConfiguration?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams;\n\t\tthread: Awaited<ReturnType<ThreadStore[\"readThread\"]>>;\n\t}) => Partial<SessionConfiguration> | Promise<Partial<SessionConfiguration>>;\n\tcreateModelClient: (input: {\n\t\tcontext?: Context;\n\t\tsession: Session;\n\t\tthreadId: ThreadId;\n\t}) => ModelClient | Promise<ModelClient>;\n\tmodelClientCacheKey?: (input: {\n\t\tcontext?: Context;\n\t\tsession: Session;\n\t\tthreadId: ThreadId;\n\t}) => string | null | undefined;\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tmcpServerOauthLogin?: (input: {\n\t\tcontext?: Context;\n\t\tparams: McpServerOauthLoginParams;\n\t}) => McpServerOauthLoginResponse | Promise<McpServerOauthLoginResponse>;\n\treloadMcpServers?: (input: { context?: Context }) => void | Promise<void>;\n\tcreateSession?: (input: {\n\t\tcontext?: Context;\n\t\teventSink: (event: Event) => void;\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}) => Session | Promise<Session>;\n\teventSink?: CodexAppServerEventSink<Context>;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\trunInBackground?: (promise: Promise<unknown>, context: { context?: Context; threadId: ThreadId }) => void;\n\trunConnectionBackground?: (promise: Promise<unknown>, context: { context?: Context }) => void;\n\tsendOutgoingMessage?: CodexAppServerEventSink<Context>;\n\tsendOutgoingTransportMessage?: CodexAppServerOutgoingSink<Context>;\n\tresolveDynamicTools?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => DynamicToolSpec[] | Promise<DynamicToolSpec[]>;\n\tstore: ThreadStore;\n};\n\nexport type CodexAppServerRuntime<Context = CodexAppServerRuntimeContext> = {\n\tconnectionClosed(connectionId: number): Promise<void>;\n\tconnectionInitialized(connectionId: number): void;\n\tcreateMessageProcessor(input: {\n\t\tconnectionId: ConnectionId;\n\t\tinitialize?: (\n\t\t\tparams: InitializeParams,\n\t\t\tcontext?: Context,\n\t\t\tsession?: CodexAppServerConnectionSessionState,\n\t\t) => Promise<InitializeResponse>;\n\t\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\t\tsession?: CodexAppServerConnectionSessionState;\n\t}): CodexAppServerMessageProcessor<Context>;\n\tmethodHandlers: CodexAppServerMethodHandlers<Context>;\n\trejectServerRequest(\n\t\tparams: { error: JSONRPCErrorError; requestId: string | number; threadId: ThreadId | string },\n\t\tcontext?: Context,\n\t): Promise<void>;\n\tresolveServerRequest(\n\t\tparams: { requestId: string | number; result: Result; threadId: ThreadId | string },\n\t\tcontext?: Context,\n\t): Promise<void>;\n};\n\nexport function createCodexAppServerRuntime<Context = CodexAppServerRuntimeContext>(\n\toptions: CodexAppServerRuntimeOptions<Context>,\n): CodexAppServerRuntime<Context> {\n\tconst sessions = new Map<ThreadId, RuntimeSession>();\n\tconst serverRequestTargets = new Map<string, ServerRequestCoreTarget>();\n\tconst threadStateManager = new ThreadStateManager();\n\tconst requestSerializationQueues = new RequestSerializationQueues();\n\tconst sendOutgoingMessage = options.sendOutgoingMessage ?? options.eventSink;\n\tconst outgoing = new OutgoingMessageSender({\n\t\tsend: async (message, messageContext) => {\n\t\t\tif (options.sendOutgoingTransportMessage) {\n\t\t\t\tawait options.sendOutgoingTransportMessage(message, {\n\t\t\t\t\tconnectionIds: messageContext.connectionIds,\n\t\t\t\t\tcontext: messageContext.context as Context | undefined,\n\t\t\t\t\tthreadId: messageContext.threadId,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst event = outgoingMessageToAppServerEvent(message);\n\t\t\tif (event && sendOutgoingMessage) {\n\t\t\t\tawait sendOutgoingMessage(event, {\n\t\t\t\t\tcontext: messageContext.context as Context | undefined,\n\t\t\t\t\tthreadId: messageContext.threadId ?? threadIdFromAppServerEvent(event),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t});\n\n\tasync function emit(\n\t\tthreadId: ThreadId,\n\t\tevent: AppServerEvent | AppServerProtocolEvent,\n\t\tcontext?: Context,\n\t): Promise<void> {\n\t\tif (event.type === \"server_notification\") {\n\t\t\tawait outgoing.sendServerNotification(event.notification, context, threadId);\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"server_request\") {\n\t\t\tconst handle = outgoing.sendRequestWithHandle(\n\t\t\t\tevent.request,\n\t\t\t\tthreadId,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst coreTarget = \"coreTarget\" in event ? event.coreTarget : undefined;\n\t\t\tif (coreTarget) {\n\t\t\t\tserverRequestTargets.set(\n\t\t\t\t\tserverRequestTargetKey(threadId, handle.request.id),\n\t\t\t\t\tcoreTarget,\n\t\t\t\t);\n\t\t\t}\n\t\t\tvoid handle.result.catch((error) => {\n\t\t\t\toptions.onRuntimeError?.(error, { context, threadId });\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait sendOutgoingMessage?.(event, { context, threadId });\n\t}\n\n\tfunction emitCoreEvent(threadId: ThreadId, event: Event, context?: Context): void {\n\t\tif (event.msg.type === \"session_configured\") {\n\t\t\treturn;\n\t\t}\n\t\tconst threadState = threadStateManager.threadState(threadId);\n\t\tconst tracked = threadState.trackCurrentTurnEvent(event.id, event.msg);\n\t\tconst protocolEvents = apply_bespoke_event_handling(event.msg, {\n\t\t\tactiveTurn: tracked.activeTurn,\n\t\t\tterminalTurn: tracked.terminalTurn,\n\t\t\tthreadId,\n\t\t\tturnId:\n\t\t\t\t\"turn_id\" in event.msg && typeof event.msg.turn_id === \"string\"\n\t\t\t\t\t? event.msg.turn_id\n\t\t\t\t\t: event.id,\n\t\t});\n\t\tfor (const protocolEvent of protocolEvents) {\n\t\t\tvoid emit(threadId, protocolEvent, context);\n\t\t}\n\t}\n\n\tconst sessionFactory = new CodexSessionFactory({\n\t\tbuildSessionConfiguration: options.buildSessionConfiguration,\n\t\tcreateSession: options.createSession,\n\t\temitCoreEvent,\n\t\tmcpConnectionManager: options.mcpConnectionManager,\n\t\tstore: options.store,\n\t});\n\tconst createSession = (\n\t\tthreadId: ThreadId,\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t\tsubmission?: Submission,\n\t): Promise<Session> =>\n\t\tsessionFactory.createSession({ context, params, submission, threadId });\n\tconst taskRunner = new CodexSessionTaskRunner({\n\t\tcreateModelClient: options.createModelClient,\n\t\tmodelClientCacheKey: options.modelClientCacheKey,\n\t\tonRuntimeError: options.onRuntimeError,\n\t\trunInBackground: options.runInBackground,\n\t\tstore: options.store,\n\t});\n\n\tconst threadProcessor = new ThreadRequestProcessor({\n\t\tbuildCreateThreadParams: options.buildCreateThreadParams,\n\t\tcreateSession,\n\t\temit,\n\t\tresolveDynamicTools: options.resolveDynamicTools,\n\t\tsessions,\n\t\tstore: options.store,\n\t\ttaskRunner,\n\t});\n\tconst turnProcessor = new TurnRequestProcessor({\n\t\tcreateSession,\n\t\tonRuntimeError: options.onRuntimeError,\n\t\tsessions,\n\t\ttaskRunner,\n\t});\n\tconst mcpProcessor = new McpRequestProcessor({\n\t\tmcpConnectionManager: options.mcpConnectionManager,\n\t\tmcpServerOauthLogin: options.mcpServerOauthLogin,\n\t\treloadMcpServers: options.reloadMcpServers,\n\t\trunInBackground: options.runConnectionBackground,\n\t\tstore: options.store,\n\t});\n\n\tconst methodHandlers: CodexAppServerMethodHandlers<Context> = {\n\t\tconfigMcpServerReload: (params, context) =>\n\t\t\tmcpProcessor.mcpServerRefresh(params, context),\n\t\tmcpResourceRead: (params, context, request) =>\n\t\t\tmcpProcessor.mcpResourceRead(params, context, request),\n\t\tmcpServerOauthLogin: (params, context) =>\n\t\t\tmcpProcessor.mcpServerOauthLogin(params, context),\n\t\tmcpServerStatusList: (params, context, request) =>\n\t\t\tmcpProcessor.mcpServerStatusList(params, context, request),\n\t\tmcpServerToolCall: (params, context, request) =>\n\t\t\tmcpProcessor.mcpServerToolCall(params, context, request),\n\t\tthreadStart: (params, context) => threadProcessor.threadStart(params, context),\n\t\tthreadResume: (params, context) => threadProcessor.threadResume(params, context),\n\t\tthreadList: (params) => threadProcessor.threadList(params),\n\t\tthreadRead: (params) => threadProcessor.threadRead(params),\n\t\tthreadNameSet: (params, context) =>\n\t\t\tthreadProcessor.threadNameSet(params, context),\n\t\tthreadArchive: (params, context) =>\n\t\t\tthreadProcessor.threadArchive(params, context),\n\t\tthreadUnarchive: (params, context) =>\n\t\t\tthreadProcessor.threadUnarchive(params, context),\n\t\tthreadMetadataUpdate: (params) =>\n\t\t\tthreadProcessor.threadMetadataUpdate(params),\n\t\tthreadCompactStart: (params, context) =>\n\t\t\tthreadProcessor.threadCompactStart(params, context),\n\t\tturnStart: (params, context) => turnProcessor.turnStart(params, context),\n\t\tturnSteer: (params, context) => turnProcessor.turnSteer(params, context),\n\t\tturnInterrupt: (params) => turnProcessor.turnInterrupt(params),\n\t};\n\n\tfunction createMessageProcessor(input: {\n\t\tconnectionId: ConnectionId;\n\t\tinitialize?: (\n\t\t\tparams: InitializeParams,\n\t\t\tcontext?: Context,\n\t\t\tsession?: CodexAppServerConnectionSessionState,\n\t\t) => Promise<InitializeResponse>;\n\t\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\t\tsession?: CodexAppServerConnectionSessionState;\n\t}): CodexAppServerMessageProcessor<Context> {\n\t\treturn new CodexAppServerMessageProcessor<Context>({\n\t\t\tconnectionId: input.connectionId,\n\t\t\thandlers: input.initialize\n\t\t\t\t? { ...methodHandlers, initialize: input.initialize }\n\t\t\t\t: methodHandlers,\n\t\t\tinitializeResponse: input.initializeResponse,\n\t\t\toutgoing,\n\t\t\trequestSerializationQueues,\n\t\t\tsession: input.session,\n\t\t});\n\t}\n\n\tasync function resolveServerRequest(\n\t\tparams: { requestId: string | number; result: Result; threadId: ThreadId | string },\n\t): Promise<void> {\n\t\tconst threadId = asThreadId(String(params.threadId));\n\t\tconst targetKey = serverRequestTargetKey(threadId, params.requestId);\n\t\tconst request = outgoing.pendingRequestsForThread(threadId).find(\n\t\t\t(candidate) => candidate.id === params.requestId,\n\t\t) ?? null;\n\t\tif (!request) {\n\t\t\tserverRequestTargets.delete(targetKey);\n\t\t}\n\t\tconst target = request\n\t\t\t? serverRequestResponseTarget(serverRequestTargets.get(targetKey) ?? null)\n\t\t\t: null;\n\t\tconst submission = submissionFromServerRequestResult({\n\t\t\trequest,\n\t\t\trequestId: params.requestId,\n\t\t\tresult: params.result,\n\t\t\ttarget,\n\t\t});\n\t\tawait submitServerRequestResponse(threadId, submission);\n\t\tserverRequestTargets.delete(targetKey);\n\t\tawait outgoing.notifyClientResponse(params.requestId, params.result);\n\t\tawait emit(threadId, serverRequestResolvedNotification({\n\t\t\trequestId: params.requestId,\n\t\t\tthreadId,\n\t\t}));\n\t}\n\n\tasync function connectionClosed(connectionId: number): Promise<void> {\n\t\tconst emptyThreadIds = threadStateManager.removeConnection(connectionId);\n\t\toutgoing.connectionClosed(connectionId);\n\t\tfor (const threadId of emptyThreadIds) {\n\t\t\tthreadStateManager.removeThreadState(threadId);\n\t\t}\n\t}\n\n\tfunction connectionInitialized(connectionId: number): void {\n\t\tthreadStateManager.connectionInitialized(connectionId);\n\t}\n\n\tasync function rejectServerRequest(\n\t\tparams: { error: JSONRPCErrorError; requestId: string | number; threadId: ThreadId | string },\n\t): Promise<void> {\n\t\tconst threadId = asThreadId(String(params.threadId));\n\t\tconst targetKey = serverRequestTargetKey(threadId, params.requestId);\n\t\tconst request = outgoing.pendingRequestsForThread(threadId).find(\n\t\t\t(candidate) => candidate.id === params.requestId,\n\t\t) ?? null;\n\t\tif (!request) {\n\t\t\tserverRequestTargets.delete(targetKey);\n\t\t}\n\t\tconst target = request\n\t\t\t? serverRequestResponseTarget(serverRequestTargets.get(targetKey) ?? null)\n\t\t\t: null;\n\t\tconst submission = submissionFromServerRequestError({\n\t\t\terror: params.error,\n\t\t\trequest,\n\t\t\trequestId: params.requestId,\n\t\t\ttarget,\n\t\t});\n\t\tawait submitServerRequestResponse(threadId, submission);\n\t\tserverRequestTargets.delete(targetKey);\n\t\tawait outgoing.notifyClientError(params.requestId, params.error);\n\t\tawait emit(threadId, serverRequestResolvedNotification({\n\t\t\trequestId: params.requestId,\n\t\t\tthreadId,\n\t\t}));\n\t}\n\n\tasync function submitServerRequestResponse(\n\t\tthreadId: ThreadId,\n\t\tsubmission: Submission,\n\t): Promise<void> {\n\t\tif (!isServerRequestResponseSubmission(submission)) {\n\t\t\tthrow new Error(\"Only server-request response submissions can be routed through CodexAppServerRuntime.\");\n\t\t}\n\t\tconst runtimeSession = sessions.get(threadId);\n\t\tif (!runtimeSession) {\n\t\t\tthrow new Error(\"Codex thread has no active turn for this server request response.\");\n\t\t}\n\t\tawait runtimeSession.session.submit_with_id(submission);\n\t}\n\n\treturn {\n\t\tconnectionClosed,\n\t\tconnectionInitialized,\n\t\tcreateMessageProcessor,\n\t\tmethodHandlers,\n\t\trejectServerRequest,\n\t\tresolveServerRequest,\n\t};\n}\n\nfunction serverRequestTargetKey(threadId: ThreadId, requestId: string | number): string {\n\treturn `${threadId}:${String(requestId)}`;\n}\n\nfunction serverRequestResponseTarget(\n\ttarget: ServerRequestCoreTarget | null,\n): ServerRequestResponseTarget | null {\n\tif (!target) {\n\t\treturn null;\n\t}\n\treturn target;\n}\n\nfunction threadIdFromAppServerEvent(event: AppServerEvent): ThreadId {\n\tif (event.type === \"server_notification\") {\n\t\tconst threadId = (event.notification.params as { threadId?: unknown }).threadId;\n\t\tif (typeof threadId === \"string\") {\n\t\t\treturn asThreadId(threadId);\n\t\t}\n\t}\n\tif (event.type === \"server_request\") {\n\t\tconst threadId = (event.request.params as { threadId?: unknown }).threadId;\n\t\tif (typeof threadId === \"string\") {\n\t\t\treturn asThreadId(threadId);\n\t\t}\n\t}\n\treturn asThreadId(\"00000000-0000-4000-8000-000000000000\");\n}\n","import { ThreadMemoryMode } from \"../../core/src/memory\";\nimport type { ThreadId } from \"../../core/src/ids\";\nimport type { RolloutItem } from \"../../core/src/protocol\";\nimport type {\n\tAppendThreadItemsParams,\n\tArchiveThreadParams,\n\tCreateThreadParams,\n\tListThreadsParams,\n\tLoadThreadHistoryParams,\n\tReadThreadByRolloutPathParams,\n\tReadThreadParams,\n\tResumeThreadParams,\n\tStoredThread,\n\tStoredThreadHistory,\n\tThreadPage,\n\tUpdateThreadMetadataParams,\n} from \"../../core/src/thread-store/types\";\nimport type { ThreadStore } from \"../../core/src/thread-store/store\";\n\nexport type InMemoryThreadStoreCalls = {\n\tarchiveThread: number;\n\tappendItems: number;\n\tcreateThread: number;\n\tdiscardThread: number;\n\tflushThread: number;\n\tlistThreads: number;\n\tloadHistory: number;\n\tpersistThread: number;\n\treadThread: number;\n\treadThreadByRolloutPath: number;\n\tresumeThread: number;\n\tshutdownThread: number;\n\tunarchiveThread: number;\n\tupdateThreadMetadata: number;\n};\n\ntype InMemoryThreadStoreState = {\n\tcalls: InMemoryThreadStoreCalls;\n\tcreatedThreads: Map<ThreadId, CreateThreadParams>;\n\thistories: Map<ThreadId, RolloutItem[]>;\n\trolloutPaths: Map<string, ThreadId>;\n\tthreads: Map<ThreadId, StoredThread>;\n};\n\nexport type InMemoryThreadStoreSnapshot = {\n\tcreatedThreads: Array<[ThreadId, CreateThreadParams]>;\n\thistories: Array<[ThreadId, RolloutItem[]]>;\n\trolloutPaths: Array<[string, ThreadId]>;\n\tthreads: Array<[ThreadId, StoredThread]>;\n};\n\nconst stores = new Map<string, InMemoryThreadStore>();\n\nexport class InMemoryThreadStore implements ThreadStore {\n\tprotected readonly state: InMemoryThreadStoreState = {\n\t\tcalls: emptyCalls(),\n\t\tcreatedThreads: new Map(),\n\t\thistories: new Map(),\n\t\trolloutPaths: new Map(),\n\t\tthreads: new Map(),\n\t};\n\n\tstatic forId(id: string): InMemoryThreadStore {\n\t\tconst existing = stores.get(id);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst store = new InMemoryThreadStore();\n\t\tstores.set(id, store);\n\t\treturn store;\n\t}\n\n\tstatic removeId(id: string): InMemoryThreadStore | null {\n\t\tconst store = stores.get(id) ?? null;\n\t\tstores.delete(id);\n\t\treturn store;\n\t}\n\n\tcalls(): InMemoryThreadStoreCalls {\n\t\treturn { ...this.state.calls };\n\t}\n\n\tsnapshot(): InMemoryThreadStoreSnapshot {\n\t\treturn {\n\t\t\tcreatedThreads: Array.from(this.state.createdThreads.entries()),\n\t\t\thistories: Array.from(this.state.histories.entries()).map(\n\t\t\t\t([threadId, items]) => [threadId, [...items]],\n\t\t\t),\n\t\t\trolloutPaths: Array.from(this.state.rolloutPaths.entries()),\n\t\t\tthreads: Array.from(this.state.threads.entries()).map(\n\t\t\t\t([threadId, thread]) => [threadId, { ...thread }],\n\t\t\t),\n\t\t};\n\t}\n\n\trestoreSnapshot(snapshot: InMemoryThreadStoreSnapshot): void {\n\t\tthis.state.createdThreads = new Map(snapshot.createdThreads);\n\t\tthis.state.histories = new Map(\n\t\t\tsnapshot.histories.map(([threadId, items]) => [threadId, [...items]]),\n\t\t);\n\t\tthis.state.rolloutPaths = new Map(snapshot.rolloutPaths);\n\t\tthis.state.threads = new Map(\n\t\t\tsnapshot.threads.map(([threadId, thread]) => [threadId, { ...thread }]),\n\t\t);\n\t}\n\n\tasync createThread(params: CreateThreadParams): Promise<void> {\n\t\tthis.state.calls.createThread += 1;\n\t\tconst now = new Date().toISOString();\n\t\tthis.state.createdThreads.set(params.thread_id, params);\n\t\tthis.state.histories.set(params.thread_id, []);\n\t\tthis.state.threads.set(params.thread_id, {\n\t\t\tarchived_at: null,\n\t\t\tcreated_at: now,\n\t\t\tcwd: String(params.metadata.cwd ?? \"/\"),\n\t\t\tforked_from_id: params.forked_from_id ?? null,\n\t\t\thistory: null,\n\t\t\tmodel: stringOrNull(params.metadata.model),\n\t\t\tmodel_provider: params.metadata.model_provider,\n\t\t\tname: null,\n\t\t\tpreview: \"\",\n\t\t\treasoning_effort: stringOrNull(params.metadata.reasoning_effort),\n\t\t\tsource: params.source,\n\t\t\tthread_id: params.thread_id,\n\t\t\tthread_source: params.thread_source ?? null,\n\t\t\ttoken_usage: null,\n\t\t\tupdated_at: now,\n\t\t});\n\t}\n\n\tasync resumeThread(params: ResumeThreadParams): Promise<void> {\n\t\tthis.state.calls.resumeThread += 1;\n\t\tif (!this.state.threads.has(params.thread_id)) {\n\t\t\tconst now = new Date().toISOString();\n\t\t\tthis.state.threads.set(params.thread_id, {\n\t\t\t\tarchived_at: null,\n\t\t\t\tcreated_at: now,\n\t\t\t\tcwd: String(params.metadata.cwd ?? \"/\"),\n\t\t\t\thistory: null,\n\t\t\t\tmodel: stringOrNull(params.metadata.model),\n\t\t\t\tmodel_provider: params.metadata.model_provider,\n\t\t\t\tpreview: \"\",\n\t\t\t\tsource: \"appServer\",\n\t\t\t\tthread_id: params.thread_id,\n\t\t\t\ttoken_usage: lastTokenInfoFromRolloutItems(params.history ?? []),\n\t\t\t\tupdated_at: now,\n\t\t\t});\n\t\t}\n\t\tthis.state.histories.set(\n\t\t\tparams.thread_id,\n\t\t\t[...(params.history ?? this.state.histories.get(params.thread_id) ?? [])],\n\t\t);\n\t\tthis.updateThreadTokenUsage(\n\t\t\tparams.thread_id,\n\t\t\tparams.history ?? this.state.histories.get(params.thread_id) ?? [],\n\t\t);\n\t\tif (params.rollout_path) {\n\t\t\tthis.state.rolloutPaths.set(params.rollout_path, params.thread_id);\n\t\t}\n\t}\n\n\tasync appendItems(params: AppendThreadItemsParams): Promise<void> {\n\t\tthis.state.calls.appendItems += 1;\n\t\tthis.history(params.thread_id).push(...params.items);\n\t\tthis.updateThreadTokenUsage(params.thread_id, params.items);\n\t\tthis.touch(params.thread_id);\n\t}\n\n\tasync persistThread(threadId: ThreadId): Promise<void> {\n\t\tvoid threadId;\n\t\tthis.state.calls.persistThread += 1;\n\t}\n\n\tasync flushThread(threadId: ThreadId): Promise<void> {\n\t\tvoid threadId;\n\t\tthis.state.calls.flushThread += 1;\n\t}\n\n\tasync shutdownThread(threadId: ThreadId): Promise<void> {\n\t\tvoid threadId;\n\t\tthis.state.calls.shutdownThread += 1;\n\t}\n\n\tasync discardThread(threadId: ThreadId): Promise<void> {\n\t\tvoid threadId;\n\t\tthis.state.calls.discardThread += 1;\n\t}\n\n\tasync loadHistory(\n\t\tparams: LoadThreadHistoryParams,\n\t): Promise<StoredThreadHistory> {\n\t\tthis.state.calls.loadHistory += 1;\n\t\treturn {\n\t\t\titems: [...this.history(params.thread_id)],\n\t\t\tthread_id: params.thread_id,\n\t\t};\n\t}\n\n\tasync readThread(params: ReadThreadParams): Promise<StoredThread> {\n\t\tthis.state.calls.readThread += 1;\n\t\treturn this.storedThread(params.thread_id, params.include_history);\n\t}\n\n\tasync readThreadByRolloutPath(\n\t\tparams: ReadThreadByRolloutPathParams,\n\t): Promise<StoredThread> {\n\t\tthis.state.calls.readThreadByRolloutPath += 1;\n\t\tconst threadId = this.state.rolloutPaths.get(params.rollout_path);\n\t\tif (!threadId) {\n\t\t\tthrow new Error(`Unknown rollout path: ${params.rollout_path}`);\n\t\t}\n\t\treturn this.storedThread(threadId, params.include_history);\n\t}\n\n\tasync listThreads(params: ListThreadsParams): Promise<ThreadPage> {\n\t\tthis.state.calls.listThreads += 1;\n\t\tconst items = Array.from(this.state.threads.values())\n\t\t\t.filter((thread) => params.archived || !thread.archived_at)\n\t\t\t.sort((left, right) =>\n\t\t\t\tparams.sort_direction === \"Asc\"\n\t\t\t\t\t? left.created_at.localeCompare(right.created_at)\n\t\t\t\t\t: right.created_at.localeCompare(left.created_at),\n\t\t\t)\n\t\t\t.slice(0, params.page_size)\n\t\t\t.map((thread) => ({ ...thread, history: null }));\n\t\treturn { items, next_cursor: null };\n\t}\n\n\tasync updateThreadMetadata(\n\t\tparams: UpdateThreadMetadataParams,\n\t): Promise<StoredThread> {\n\t\tthis.state.calls.updateThreadMetadata += 1;\n\t\tconst thread = this.storedThread(params.thread_id, false);\n\t\tconst next: StoredThread = {\n\t\t\t...thread,\n\t\t\tname: params.patch.name ?? thread.name,\n\t\t\tupdated_at: new Date().toISOString(),\n\t\t};\n\t\tif (params.patch.memory_mode === ThreadMemoryMode.Enabled) {\n\t\t\tnext.preview = thread.preview;\n\t\t}\n\t\tthis.state.threads.set(params.thread_id, next);\n\t\treturn { ...next };\n\t}\n\n\tasync archiveThread(params: ArchiveThreadParams): Promise<void> {\n\t\tthis.state.calls.archiveThread += 1;\n\t\tconst thread = this.storedThread(params.thread_id, false);\n\t\tthis.state.threads.set(params.thread_id, {\n\t\t\t...thread,\n\t\t\tarchived_at: new Date().toISOString(),\n\t\t});\n\t}\n\n\tasync unarchiveThread(params: ArchiveThreadParams): Promise<StoredThread> {\n\t\tthis.state.calls.unarchiveThread += 1;\n\t\tconst thread = this.storedThread(params.thread_id, false);\n\t\tconst next = { ...thread, archived_at: null };\n\t\tthis.state.threads.set(params.thread_id, next);\n\t\treturn next;\n\t}\n\n\tprivate history(threadId: ThreadId): RolloutItem[] {\n\t\tconst history = this.state.histories.get(threadId);\n\t\tif (!history) {\n\t\t\tthrow new Error(`Thread not found: ${threadId}`);\n\t\t}\n\t\treturn history;\n\t}\n\n\tprivate storedThread(threadId: ThreadId, includeHistory: boolean): StoredThread {\n\t\tconst thread = this.state.threads.get(threadId);\n\t\tif (!thread) {\n\t\t\tthrow new Error(`Thread not found: ${threadId}`);\n\t\t}\n\t\treturn {\n\t\t\t...thread,\n\t\t\thistory: includeHistory\n\t\t\t\t? { items: [...this.history(threadId)], thread_id: threadId }\n\t\t\t\t: null,\n\t\t};\n\t}\n\n\tprivate touch(threadId: ThreadId): void {\n\t\tconst thread = this.state.threads.get(threadId);\n\t\tif (thread) {\n\t\t\tthis.state.threads.set(threadId, {\n\t\t\t\t...thread,\n\t\t\t\tupdated_at: new Date().toISOString(),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate updateThreadTokenUsage(threadId: ThreadId, items: readonly RolloutItem[]): void {\n\t\tconst info = lastTokenInfoFromRolloutItems(items);\n\t\tif (!info) {\n\t\t\treturn;\n\t\t}\n\t\tconst thread = this.state.threads.get(threadId);\n\t\tif (!thread) {\n\t\t\treturn;\n\t\t}\n\t\tthis.state.threads.set(threadId, {\n\t\t\t...thread,\n\t\t\ttoken_usage: info,\n\t\t});\n\t}\n}\n\nfunction emptyCalls(): InMemoryThreadStoreCalls {\n\treturn {\n\t\tarchiveThread: 0,\n\t\tappendItems: 0,\n\t\tcreateThread: 0,\n\t\tdiscardThread: 0,\n\t\tflushThread: 0,\n\t\tlistThreads: 0,\n\t\tloadHistory: 0,\n\t\tpersistThread: 0,\n\t\treadThread: 0,\n\t\treadThreadByRolloutPath: 0,\n\t\tresumeThread: 0,\n\t\tshutdownThread: 0,\n\t\tunarchiveThread: 0,\n\t\tupdateThreadMetadata: 0,\n\t};\n}\n\nfunction stringOrNull(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nfunction lastTokenInfoFromRolloutItems(items: readonly RolloutItem[]): unknown | null {\n\tfor (let index = items.length - 1; index >= 0; index -= 1) {\n\t\tconst item = items[index];\n\t\tif (\n\t\t\titem?.type === \"event_msg\" &&\n\t\t\titem.payload.type === \"token_count\" &&\n\t\t\titem.payload.info\n\t\t) {\n\t\t\treturn item.payload.info;\n\t\t}\n\t}\n\treturn null;\n}\n","import type { ThreadId } from \"../../../core/src/ids\";\nimport type {\n\tAppendThreadItemsParams,\n\tArchiveThreadParams,\n\tCreateThreadParams,\n\tListThreadsParams,\n\tLoadThreadHistoryParams,\n\tReadThreadByRolloutPathParams,\n\tReadThreadParams,\n\tResumeThreadParams,\n\tStoredThread,\n\tThreadPage,\n\tUpdateThreadMetadataParams,\n} from \"../../../core/src/thread-store/types\";\nimport { InMemoryThreadStore, type InMemoryThreadStoreSnapshot } from \"../in_memory\";\n\nexport type LocalThreadStoreConfig = {\n\tcodex_home: string;\n\tdefault_model_provider_id: string;\n};\n\ntype LocalThreadStoreData = InMemoryThreadStoreSnapshot & {\n\tversion: 1;\n};\n\nexport class LocalThreadStore extends InMemoryThreadStore {\n\tconstructor(readonly config: LocalThreadStoreConfig) {\n\t\tsuper();\n\t}\n\n\tstateDb(): null {\n\t\treturn null;\n\t}\n\n\tasync createThread(params: CreateThreadParams): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.createThread(params);\n\t\tthis.attachRolloutPath(params.thread_id);\n\t\tawait this.save();\n\t}\n\n\tasync resumeThread(params: ResumeThreadParams): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.resumeThread({\n\t\t\t...params,\n\t\t\trollout_path: params.rollout_path ?? this.rolloutPath(params.thread_id),\n\t\t});\n\t\tthis.attachRolloutPath(params.thread_id, params.rollout_path ?? undefined);\n\t\tawait this.save();\n\t}\n\n\tasync appendItems(params: AppendThreadItemsParams): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.appendItems(params);\n\t\tawait this.save();\n\t}\n\n\tasync persistThread(threadId: ThreadId): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.persistThread(threadId);\n\t\tawait this.save();\n\t}\n\n\tasync flushThread(threadId: ThreadId): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.flushThread(threadId);\n\t\tawait this.save();\n\t}\n\n\tasync shutdownThread(threadId: ThreadId): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.shutdownThread(threadId);\n\t\tawait this.save();\n\t}\n\n\tasync discardThread(threadId: ThreadId): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.discardThread(threadId);\n\t\tawait this.save();\n\t}\n\n\tasync loadHistory(params: LoadThreadHistoryParams) {\n\t\tawait this.load();\n\t\treturn super.loadHistory(params);\n\t}\n\n\tasync readThread(params: ReadThreadParams): Promise<StoredThread> {\n\t\tawait this.load();\n\t\treturn super.readThread(params);\n\t}\n\n\tasync readThreadByRolloutPath(\n\t\tparams: ReadThreadByRolloutPathParams,\n\t): Promise<StoredThread> {\n\t\tawait this.load();\n\t\treturn super.readThreadByRolloutPath(params);\n\t}\n\n\tasync listThreads(params: ListThreadsParams): Promise<ThreadPage> {\n\t\tawait this.load();\n\t\treturn super.listThreads(params);\n\t}\n\n\tasync updateThreadMetadata(\n\t\tparams: UpdateThreadMetadataParams,\n\t): Promise<StoredThread> {\n\t\tawait this.load();\n\t\tconst thread = await super.updateThreadMetadata(params);\n\t\tawait this.save();\n\t\treturn thread;\n\t}\n\n\tasync archiveThread(params: ArchiveThreadParams): Promise<void> {\n\t\tawait this.load();\n\t\tawait super.archiveThread(params);\n\t\tawait this.save();\n\t}\n\n\tasync unarchiveThread(params: ArchiveThreadParams): Promise<StoredThread> {\n\t\tawait this.load();\n\t\tconst thread = await super.unarchiveThread(params);\n\t\tawait this.save();\n\t\treturn thread;\n\t}\n\n\tliveRolloutPath(threadId: ThreadId): string {\n\t\treturn this.rolloutPath(threadId);\n\t}\n\n\tprivate attachRolloutPath(threadId: ThreadId, rolloutPath?: string): void {\n\t\tconst snapshot = this.snapshot();\n\t\tconst path = rolloutPath ?? this.rolloutPath(threadId);\n\t\tconst threads = snapshot.threads.map(\n\t\t\t([candidateThreadId, thread]) =>\n\t\t\t\t[\n\t\t\t\t\tcandidateThreadId,\n\t\t\t\t\tcandidateThreadId === threadId\n\t\t\t\t\t\t? { ...thread, rollout_path: path }\n\t\t\t\t\t\t: thread,\n\t\t\t\t] satisfies [ThreadId, StoredThread],\n\t\t);\n\t\tconst rolloutPaths = new Map(snapshot.rolloutPaths);\n\t\trolloutPaths.set(path, threadId);\n\t\tthis.restoreSnapshot({\n\t\t\t...snapshot,\n\t\t\trolloutPaths: Array.from(rolloutPaths.entries()),\n\t\t\tthreads,\n\t\t});\n\t}\n\n\tprivate async load(): Promise<void> {\n\t\ttry {\n\t\t\tconst { readFile } = await nodeFsPromises();\n\t\t\tconst raw = await readFile(this.storePath(), \"utf8\");\n\t\t\tconst data = JSON.parse(raw) as LocalThreadStoreData;\n\t\t\tthis.restoreSnapshot(data);\n\t\t} catch (error) {\n\t\t\tif ((error as { code?: unknown }).code === \"ENOENT\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async save(): Promise<void> {\n\t\tconst { mkdir, writeFile } = await nodeFsPromises();\n\t\tconst path = this.storePath();\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tconst data: LocalThreadStoreData = {\n\t\t\tversion: 1,\n\t\t\t...this.snapshot(),\n\t\t};\n\t\tawait writeFile(path, `${JSON.stringify(data, null, 2)}\\n`, \"utf8\");\n\t}\n\n\tprivate rolloutPath(threadId: ThreadId): string {\n\t\treturn `${this.config.codex_home.replace(/\\/+$/, \"\")}/sessions/${threadId}.jsonl`;\n\t}\n\n\tprivate storePath(): string {\n\t\treturn `${this.config.codex_home.replace(/\\/+$/, \"\")}/thread-store/store.json`;\n\t}\n}\n\ntype NodeFsPromises = {\n\tmkdir(path: string, options: { recursive: true }): Promise<unknown>;\n\treadFile(path: string, encoding: \"utf8\"): Promise<string>;\n\twriteFile(path: string, data: string, encoding: \"utf8\"): Promise<void>;\n};\n\nasync function nodeFsPromises(): Promise<NodeFsPromises> {\n\tconst moduleName = \"node:fs/promises\";\n\treturn import(moduleName) as Promise<NodeFsPromises>;\n}\n\nfunction dirname(path: string): string {\n\tconst normalized = path.replace(/\\/+$/, \"\");\n\tconst separatorIndex = normalized.lastIndexOf(\"/\");\n\treturn separatorIndex <= 0 ? \"/\" : normalized.slice(0, separatorIndex);\n}\n"]}
|