@jrkropp/codex-js 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +2 -2
  3. package/dist/ClientNotification-B6-FhXQf.d.ts +5 -0
  4. package/dist/DynamicToolCallResponse-82DFjES2.d.ts +8 -0
  5. package/dist/DynamicToolSpec-CfnhqAYK.d.ts +29 -0
  6. package/dist/PermissionsRequestApprovalResponse-DxzPPDRb.d.ts +55 -0
  7. package/dist/ProviderStatusBanner-BlP6lzwE.d.ts +441 -0
  8. package/dist/ServerRequest-B5cKVJjr.d.ts +2181 -0
  9. package/dist/{session-DPhHN7RZ.d.ts → ThreadResumeResponse-DvmE1juU.d.ts} +3 -306
  10. package/dist/ToolRequestUserInputQuestion-CeZa5X1J.d.ts +23 -0
  11. package/dist/ToolRequestUserInputResponse-zcPLwbiK.d.ts +17 -0
  12. package/dist/TurnSteerResponse-0kBCfplh.d.ts +209 -0
  13. package/dist/WebSearchToolConfig-D3ep0625.d.ts +18 -0
  14. package/dist/chat-runtime-9RkXHC_w.d.ts +382 -0
  15. package/dist/chunk-2DZRMCI2.js +1258 -0
  16. package/dist/chunk-2DZRMCI2.js.map +1 -0
  17. package/dist/chunk-4DPLJPB5.js +396 -0
  18. package/dist/chunk-4DPLJPB5.js.map +1 -0
  19. package/dist/chunk-5JMJ6OI5.js +3 -0
  20. package/dist/chunk-5JMJ6OI5.js.map +1 -0
  21. package/dist/chunk-6ZMJ34KE.js +1153 -0
  22. package/dist/chunk-6ZMJ34KE.js.map +1 -0
  23. package/dist/chunk-CGBS37IU.js +128 -0
  24. package/dist/chunk-CGBS37IU.js.map +1 -0
  25. package/dist/chunk-DCMKA2A6.js +18 -0
  26. package/dist/chunk-DCMKA2A6.js.map +1 -0
  27. package/dist/chunk-DYLHN3HG.js +937 -0
  28. package/dist/chunk-DYLHN3HG.js.map +1 -0
  29. package/dist/{chunk-SVK6PLGO.js → chunk-LWQNX4LI.js} +12009 -18768
  30. package/dist/chunk-LWQNX4LI.js.map +1 -0
  31. package/dist/{chunk-JLDH4U5L.js → chunk-NCI4MAWZ.js} +317 -1967
  32. package/dist/chunk-NCI4MAWZ.js.map +1 -0
  33. package/dist/chunk-O44XP7LH.js +214 -0
  34. package/dist/chunk-O44XP7LH.js.map +1 -0
  35. package/dist/chunk-PST3ZWX2.js +555 -0
  36. package/dist/chunk-PST3ZWX2.js.map +1 -0
  37. package/dist/chunk-SYPHCDRD.js +1133 -0
  38. package/dist/chunk-SYPHCDRD.js.map +1 -0
  39. package/dist/chunk-V4BMZWBM.js +2401 -0
  40. package/dist/chunk-V4BMZWBM.js.map +1 -0
  41. package/dist/chunk-W7S6HFCQ.js +1983 -0
  42. package/dist/chunk-W7S6HFCQ.js.map +1 -0
  43. package/dist/chunk-YHVCFD2D.js +117 -0
  44. package/dist/chunk-YHVCFD2D.js.map +1 -0
  45. package/dist/chunk-Z63UPBS3.js +152 -0
  46. package/dist/chunk-Z63UPBS3.js.map +1 -0
  47. package/dist/client/index.d.ts +16 -4
  48. package/dist/client/index.js +13 -1
  49. package/dist/codex-rs/app-server/index.d.ts +161 -0
  50. package/dist/codex-rs/app-server/index.js +13 -0
  51. package/dist/codex-rs/app-server/index.js.map +1 -0
  52. package/dist/codex-rs/app-server-protocol/index.d.ts +1722 -0
  53. package/dist/codex-rs/app-server-protocol/index.js +6 -0
  54. package/dist/codex-rs/app-server-protocol/index.js.map +1 -0
  55. package/dist/codex-rs/app-server-protocol/protocol.d.ts +19 -0
  56. package/dist/codex-rs/app-server-protocol/protocol.js +4 -0
  57. package/dist/codex-rs/app-server-protocol/protocol.js.map +1 -0
  58. package/dist/codex-rs/codex-api/index.d.ts +104 -0
  59. package/dist/codex-rs/codex-api/index.js +11 -0
  60. package/dist/codex-rs/codex-api/index.js.map +1 -0
  61. package/dist/codex-rs/config/index.d.ts +88 -0
  62. package/dist/codex-rs/config/index.js +4 -0
  63. package/dist/codex-rs/config/index.js.map +1 -0
  64. package/dist/codex-rs/core/config/index.d.ts +61 -0
  65. package/dist/codex-rs/core/config/index.js +5 -0
  66. package/dist/codex-rs/core/config/index.js.map +1 -0
  67. package/dist/codex-rs/core/index.d.ts +1393 -0
  68. package/dist/codex-rs/core/index.js +11 -0
  69. package/dist/codex-rs/core/index.js.map +1 -0
  70. package/dist/codex-rs/model-provider/index.d.ts +2 -0
  71. package/dist/codex-rs/model-provider/index.js +4 -0
  72. package/dist/codex-rs/model-provider/index.js.map +1 -0
  73. package/dist/codex-rs/models-manager/index.d.ts +2 -0
  74. package/dist/codex-rs/models-manager/index.js +4 -0
  75. package/dist/codex-rs/models-manager/index.js.map +1 -0
  76. package/dist/codex-rs/parity.d.ts +26 -0
  77. package/dist/codex-rs/parity.js +3 -0
  78. package/dist/codex-rs/parity.js.map +1 -0
  79. package/dist/codex-rs/thread-store/index.d.ts +5 -0
  80. package/dist/codex-rs/thread-store/index.js +4 -0
  81. package/dist/codex-rs/thread-store/index.js.map +1 -0
  82. package/dist/codex-rs/unsupported.d.ts +15 -0
  83. package/dist/codex-rs/unsupported.js +22 -0
  84. package/dist/codex-rs/unsupported.js.map +1 -0
  85. package/dist/codex-rs/utils/output-truncation.d.ts +21 -0
  86. package/dist/codex-rs/utils/output-truncation.js +4 -0
  87. package/dist/codex-rs/utils/output-truncation.js.map +1 -0
  88. package/dist/codex-rs/utils/string.d.ts +7 -0
  89. package/dist/codex-rs/utils/string.js +3 -0
  90. package/dist/codex-rs/utils/string.js.map +1 -0
  91. package/dist/common-CTyph5x8.d.ts +40 -0
  92. package/dist/event-mapping-CbISdQ1D.d.ts +43 -0
  93. package/dist/history-CfM-4V7b.d.ts +1654 -0
  94. package/dist/index-77U_Oc-a.d.ts +63 -0
  95. package/dist/index-CoDZosq0.d.ts +261 -0
  96. package/dist/index.d.ts +18 -7
  97. package/dist/index.js +16 -2
  98. package/dist/lib-nXlaKiS-.d.ts +48 -0
  99. package/dist/live-thread-BMvlflzM.d.ts +30 -0
  100. package/dist/merge-B_AWVmnI.d.ts +24 -0
  101. package/dist/mod-DYVLSWO4.d.ts +91 -0
  102. package/dist/plan-mode-Cv6KWb_S.d.ts +14 -0
  103. package/dist/proposed-plan-DpN1ma0Y.d.ts +53 -0
  104. package/dist/protocol-mpBcYHrm.d.ts +1655 -0
  105. package/dist/react/index.d.ts +56 -48
  106. package/dist/react/index.js +16 -2
  107. package/dist/{remote-_6TDvg-g.d.ts → remote-ClZbq9KN.d.ts} +3 -1
  108. package/dist/rendered-thread-AOxw3V5b.d.ts +29 -0
  109. package/dist/responses_websocket-BhxSgCzK.d.ts +183 -0
  110. package/dist/runtime-Cm6ml53h.d.ts +528 -0
  111. package/dist/server/index.d.ts +29 -2416
  112. package/dist/server/index.js +13 -1
  113. package/dist/session-BRYzi8OT.d.ts +46 -0
  114. package/dist/shadcn/index.d.ts +1 -1
  115. package/dist/{sidebar-DT2XoitN.d.ts → sidebar-DMMij22z.d.ts} +1 -1
  116. package/dist/spec_plan_types-CmsJ-Tfn.d.ts +260 -0
  117. package/dist/{store-GYldc9EJ.d.ts → store-AGRxhgQ3.d.ts} +2 -1
  118. package/dist/t3code/apps/web/components/chat.d.ts +508 -0
  119. package/dist/t3code/apps/web/components/chat.js +12 -0
  120. package/dist/t3code/apps/web/components/chat.js.map +1 -0
  121. package/dist/t3code/apps/web/index.d.ts +12 -0
  122. package/dist/t3code/apps/web/index.js +13 -0
  123. package/dist/t3code/apps/web/index.js.map +1 -0
  124. package/dist/testing/index.d.ts +9 -91
  125. package/dist/testing/index.js +13 -1
  126. package/dist/thread-history-builder-zW0zeqcS.d.ts +58 -0
  127. package/dist/thread_event_store-C0zYzukG.d.ts +77 -0
  128. package/dist/types-BTeabLYr.d.ts +126 -0
  129. package/package.json +152 -88
  130. package/dist/chat-runtime-D7wu_KbX.d.ts +0 -747
  131. package/dist/chunk-JLDH4U5L.js.map +0 -1
  132. package/dist/chunk-SVK6PLGO.js.map +0 -1
  133. package/dist/index-CB9la6xE.d.ts +0 -112
  134. package/dist/thread_event_store-B9CoQUIA.d.ts +0 -3868
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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/agent_resolver.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/agent/status.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/core/src/context/user-instructions.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/hooks/output-parser.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/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/codex-mcp/src/auth_elicitation.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/sandboxing.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/tools/hook_names.ts","../src/upstream/codex-rs/core/src/tools/network_approval.ts","../src/upstream/codex-rs/core/src/tools/handlers/multi_agents_common.ts","../src/upstream/codex-rs/core/src/tools/handlers/request_plugin_install.ts","../src/upstream/codex-rs/core/src/tools/handlers/request_plugin_install_spec.ts","../src/upstream/codex-rs/core/src/tools/handlers/test_sync.ts","../src/upstream/codex-rs/core/src/tools/handlers/test_sync_spec.ts","../src/upstream/codex-rs/core/src/tools/code_mode/execute_spec.ts","../src/upstream/codex-rs/core/src/tools/code_mode/execute_handler.ts","../src/upstream/codex-rs/core/src/tools/code_mode/response_adapter.ts","../src/upstream/codex-rs/core/src/tools/code_mode/wait_spec.ts","../src/upstream/codex-rs/core/src/tools/code_mode/wait_handler.ts","../src/upstream/codex-rs/core/src/tools/runtimes/apply_patch.ts","../src/upstream/codex-rs/core/src/tools/runtimes/shell.ts","../src/upstream/codex-rs/core/src/tools/runtimes/unified_exec.ts","../src/upstream/codex-rs/core/src/tools/runtimes/mod.ts","../src/upstream/codex-rs/codex-api/src/requests/responses.ts","../src/upstream/codex-rs/codex-api/src/endpoint/responses.ts"],"names":["isRecord","numberField","X_CODEX_TURN_STATE_HEADER","apiErrorFromUnknown","item","truncate_function_output_payload","sha1_hex","rotate_left","unsigned_add","map_entries","startup_outcome_error_message","as_record","normalize_string","omit_undefined","emptyTokenUsage","utf8ByteLength","CancellationToken","contentItemsToText","errorMessage","EXECUTOR_UNAVAILABLE","parseFunctionArgs","eventCtx","UPDATE_GOAL_TOOL_NAME","mcp_tool_to_loadable_tool_spec","mcp_tool_namespace_description","parseArguments","parseJsonOrRaw","isFunctionCallError","turnItem"],"mappings":"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","file":"chunk-LWQNX4LI.js","sourcesContent":["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 { ThreadId } from \"../ids\";\nimport { AgentPath } from \"./role\";\nimport type { AgentRegistry } from \"./registry\";\n\nexport function resolve_agent_target(\n\tregistry: AgentRegistry,\n\ttarget: string,\n): ThreadId | null {\n\tif (target.startsWith(\"/\")) {\n\t\treturn registry.agent_id_for_path(AgentPath.parse(target));\n\t}\n\treturn target as ThreadId;\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 { AgentStatus } from \"./registry\";\n\nexport function is_final(status: AgentStatus): boolean {\n\treturn (\n\t\tstatus === AgentStatus.Completed ||\n\t\tstatus === AgentStatus.Failed ||\n\t\tstatus === AgentStatus.Closed ||\n\t\tstatus === AgentStatus.Cancelled\n\t);\n}\n\nexport function agent_status_from_event(event: unknown): AgentStatus {\n\tif (typeof event === \"object\" && event !== null && \"status\" in event) {\n\t\tconst status = (event as { status?: unknown }).status;\n\t\tif (typeof status === \"string\" && status in reverseAgentStatus) {\n\t\t\treturn status as AgentStatus;\n\t\t}\n\t}\n\treturn AgentStatus.Running;\n}\n\nconst reverseAgentStatus = Object.fromEntries(\n\tObject.values(AgentStatus).map((status) => [status, true]),\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","import { ContextualUserFragment } from \"./fragment\";\n\nexport class UserInstructions extends ContextualUserFragment {\n\tconstructor(params: { directory: string; text: string }) {\n\t\tsuper({\n\t\t\trole: \"user\",\n\t\t\tstart_marker: \"# AGENTS.md instructions for \",\n\t\t\tend_marker: \"</INSTRUCTIONS>\",\n\t\t\tbody: () => `${params.directory}\\n\\n<INSTRUCTIONS>\\n${params.text}\\n`,\n\t\t});\n\t}\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 {\n\tHookOutputEntryKind,\n\tHookRunStatus,\n\ttype HookHandlerResult,\n\ttype HookOutputEntry,\n} from \"./types\";\n\nexport type UniversalHookOutput = {\n\tcontinue_processing?: boolean;\n\tstop_reason?: string | null;\n\tsuppress_output?: boolean;\n\tsystem_message?: string | null;\n};\n\nexport function looks_like_json(text: string): boolean {\n\tconst trimmed = text.trim();\n\treturn trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n}\n\nexport function parse_hook_handler_json(stdout: string): HookHandlerResult | null {\n\tconst trimmed = stdout.trim();\n\tif (!trimmed) {\n\t\treturn { status: HookRunStatus.Completed };\n\t}\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!isRecord(parsed)) {\n\t\treturn null;\n\t}\n\n\tconst entries: HookOutputEntry[] = [];\n\tconst universal = isRecord(parsed.universal) ? parsed.universal : {};\n\tconst systemMessage = stringOrNull(universal.system_message);\n\tif (systemMessage) {\n\t\tentries.push({ kind: HookOutputEntryKind.Warning, text: systemMessage });\n\t}\n\n\tconst additionalContext =\n\t\tstringOrNull(parsed.additional_context) ??\n\t\t(isRecord(parsed.hook_specific_output)\n\t\t\t? stringOrNull(parsed.hook_specific_output.additional_context)\n\t\t\t: null);\n\tif (additionalContext) {\n\t\tentries.push({ kind: HookOutputEntryKind.Context, text: additionalContext });\n\t}\n\n\tconst continueProcessing = universal.continue_processing !== false;\n\tconst stopReason = stringOrNull(universal.stop_reason);\n\tif (!continueProcessing) {\n\t\tif (stopReason) {\n\t\t\tentries.push({ kind: HookOutputEntryKind.Stop, text: stopReason });\n\t\t}\n\t\treturn {\n\t\t\tstatus: HookRunStatus.Stopped,\n\t\t\tentries,\n\t\t\tstop_reason: stopReason,\n\t\t\tadditional_contexts: additionalContext ? [additionalContext] : [],\n\t\t};\n\t}\n\n\tconst reason = stringOrNull(parsed.reason);\n\tif (parsed.decision === \"block\" && reason) {\n\t\tentries.push({ kind: HookOutputEntryKind.Feedback, text: reason });\n\t\treturn {\n\t\t\tstatus: HookRunStatus.Blocked,\n\t\t\tentries,\n\t\t\tblock_reason: reason,\n\t\t\tstop_reason: reason,\n\t\t\tadditional_contexts: additionalContext ? [additionalContext] : [],\n\t\t};\n\t}\n\n\treturn {\n\t\tstatus: HookRunStatus.Completed,\n\t\tentries,\n\t\tadditional_contexts: additionalContext ? [additionalContext] : [],\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction stringOrNull(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.trim() ? value : null;\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","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","export const MCP_TOOL_CODEX_APPS_META_KEY = \"_codex_apps\";\nexport const CONNECTOR_AUTH_FAILURE_META_KEY = \"connector_auth_failure\";\nexport const CONNECTOR_AUTH_FAILURE_IS_AUTH_FAILURE_KEY = \"is_auth_failure\";\nexport const CONNECTOR_AUTH_FAILURE_AUTH_REASON_KEY = \"auth_reason\";\nexport const CONNECTOR_AUTH_FAILURE_CONNECTOR_ID_KEY = \"connector_id\";\nexport const CONNECTOR_AUTH_FAILURE_LINK_ID_KEY = \"link_id\";\nexport const CONNECTOR_AUTH_FAILURE_ERROR_CODE_KEY = \"error_code\";\nexport const CONNECTOR_AUTH_FAILURE_ERROR_HTTP_STATUS_CODE_KEY =\n\t\"error_http_status_code\";\nexport const CONNECTOR_AUTH_FAILURE_ERROR_ACTION_KEY = \"error_action\";\n\nexport type CallToolResult = {\n\tcontent?: unknown[];\n\tstructured_content?: unknown;\n\tis_error?: boolean | null;\n\tmeta?: unknown;\n};\n\nexport type CodexAppsConnectorAuthFailure = {\n\tconnector_id: string;\n\tconnector_name: string;\n\tinstall_url: string;\n\tauth_reason?: string | null;\n\tlink_id?: string | null;\n\terror_code?: string | null;\n\terror_http_status_code?: number | null;\n\terror_action?: string | null;\n};\n\nexport type CodexAppsAuthElicitation = {\n\tmeta: unknown;\n\tmessage: string;\n\turl: string;\n\telicitation_id: string;\n};\n\nexport type CodexAppsAuthElicitationPlan = {\n\tauth_failure: CodexAppsConnectorAuthFailure;\n\telicitation: CodexAppsAuthElicitation;\n};\n\nexport function connector_auth_failure_from_tool_result(\n\tresult: CallToolResult,\n\tconnector_id?: string | null,\n\tconnector_name?: string | null,\n\tinstall_url?: string | null,\n): CodexAppsConnectorAuthFailure | null {\n\tif (result.is_error !== true) {\n\t\treturn null;\n\t}\n\tconst authFailure = as_record(\n\t\tas_record(as_record(result.meta)?.[MCP_TOOL_CODEX_APPS_META_KEY])?.[\n\t\t\tCONNECTOR_AUTH_FAILURE_META_KEY\n\t\t],\n\t);\n\tif (\n\t\tauthFailure?.[CONNECTOR_AUTH_FAILURE_IS_AUTH_FAILURE_KEY] !== true\n\t) {\n\t\treturn null;\n\t}\n\tconst trustedConnectorId = normalize_string(connector_id);\n\tif (!trustedConnectorId) {\n\t\treturn null;\n\t}\n\tconst authFailureConnectorId = string_auth_failure_field(\n\t\tauthFailure,\n\t\tCONNECTOR_AUTH_FAILURE_CONNECTOR_ID_KEY,\n\t);\n\tif (\n\t\tauthFailureConnectorId &&\n\t\tauthFailureConnectorId !== trustedConnectorId\n\t) {\n\t\treturn null;\n\t}\n\tconst resolvedInstallUrl = normalize_string(install_url);\n\tif (!resolvedInstallUrl) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tconnector_id: trustedConnectorId,\n\t\tconnector_name: normalize_string(connector_name) ?? trustedConnectorId,\n\t\tinstall_url: resolvedInstallUrl,\n\t\tauth_reason: string_auth_failure_field(\n\t\t\tauthFailure,\n\t\t\tCONNECTOR_AUTH_FAILURE_AUTH_REASON_KEY,\n\t\t),\n\t\tlink_id: string_auth_failure_field(\n\t\t\tauthFailure,\n\t\t\tCONNECTOR_AUTH_FAILURE_LINK_ID_KEY,\n\t\t),\n\t\terror_code: string_auth_failure_field(\n\t\t\tauthFailure,\n\t\t\tCONNECTOR_AUTH_FAILURE_ERROR_CODE_KEY,\n\t\t),\n\t\terror_http_status_code:\n\t\t\ttypeof authFailure[\n\t\t\t\tCONNECTOR_AUTH_FAILURE_ERROR_HTTP_STATUS_CODE_KEY\n\t\t\t] === \"number\"\n\t\t\t\t? (authFailure[\n\t\t\t\t\t\tCONNECTOR_AUTH_FAILURE_ERROR_HTTP_STATUS_CODE_KEY\n\t\t\t\t\t] as number)\n\t\t\t\t: null,\n\t\terror_action: string_auth_failure_field(\n\t\t\tauthFailure,\n\t\t\tCONNECTOR_AUTH_FAILURE_ERROR_ACTION_KEY,\n\t\t),\n\t};\n}\n\nexport function build_auth_elicitation_plan(\n\tcall_id: string,\n\tresult: CallToolResult,\n\tconnector_id?: string | null,\n\tconnector_name?: string | null,\n\tinstall_url?: string | null,\n): CodexAppsAuthElicitationPlan | null {\n\tconst authFailure = connector_auth_failure_from_tool_result(\n\t\tresult,\n\t\tconnector_id,\n\t\tconnector_name,\n\t\tinstall_url,\n\t);\n\tif (!authFailure) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tauth_failure: authFailure,\n\t\telicitation: build_auth_elicitation(call_id, authFailure),\n\t};\n}\n\nexport function build_auth_elicitation(\n\tcall_id: string,\n\tauth_failure: CodexAppsConnectorAuthFailure,\n): CodexAppsAuthElicitation {\n\treturn {\n\t\tmeta: {\n\t\t\t[MCP_TOOL_CODEX_APPS_META_KEY]: {\n\t\t\t\t[CONNECTOR_AUTH_FAILURE_META_KEY]: omit_undefined({\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_IS_AUTH_FAILURE_KEY]: true,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_CONNECTOR_ID_KEY]:\n\t\t\t\t\t\tauth_failure.connector_id,\n\t\t\t\t\tconnector_name: auth_failure.connector_name,\n\t\t\t\t\tinstall_url: auth_failure.install_url,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_AUTH_REASON_KEY]:\n\t\t\t\t\t\tauth_failure.auth_reason ?? undefined,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_LINK_ID_KEY]:\n\t\t\t\t\t\tauth_failure.link_id ?? undefined,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_ERROR_CODE_KEY]:\n\t\t\t\t\t\tauth_failure.error_code ?? undefined,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_ERROR_HTTP_STATUS_CODE_KEY]:\n\t\t\t\t\t\tauth_failure.error_http_status_code ?? undefined,\n\t\t\t\t\t[CONNECTOR_AUTH_FAILURE_ERROR_ACTION_KEY]:\n\t\t\t\t\t\tauth_failure.error_action ?? undefined,\n\t\t\t\t}),\n\t\t\t},\n\t\t},\n\t\tmessage: auth_elicitation_message(auth_failure),\n\t\turl: auth_failure.install_url,\n\t\telicitation_id: auth_elicitation_id(call_id),\n\t};\n}\n\nexport function auth_elicitation_completed_result(\n\tauth_failure: CodexAppsConnectorAuthFailure,\n\tmeta?: unknown,\n): CallToolResult {\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: `Authentication for ${auth_failure.connector_name} was requested and accepted. Retry this tool call now.`,\n\t\t\t},\n\t\t],\n\t\tstructured_content: null,\n\t\tis_error: true,\n\t\tmeta,\n\t};\n}\n\nexport function auth_elicitation_id(call_id: string): string {\n\treturn `codex_apps_auth_${call_id}`;\n}\n\nexport function auth_elicitation_message(\n\tauth_failure: CodexAppsConnectorAuthFailure,\n): string {\n\tswitch (auth_failure.auth_reason) {\n\t\tcase \"oauth_upgrade_required\":\n\t\t\treturn `Reconnect ${auth_failure.connector_name} on ChatGPT to grant the permissions needed for this request.`;\n\t\tcase \"reauthentication_required\":\n\t\t\treturn `Reconnect ${auth_failure.connector_name} on ChatGPT to restore access for this request.`;\n\t\tcase \"missing_link\":\n\t\t\treturn `Sign in to ${auth_failure.connector_name} on ChatGPT to use it in Codex.`;\n\t\tdefault:\n\t\t\treturn `Sign in to ${auth_failure.connector_name} on ChatGPT to continue.`;\n\t}\n}\n\nfunction string_auth_failure_field(\n\tauth_failure: Record<string, unknown>,\n\tkey: string,\n): string | null {\n\treturn normalize_string(auth_failure[key]);\n}\n\nfunction normalize_string(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: null;\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\nfunction omit_undefined(\n\tinput: Record<string, unknown | undefined>,\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\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 type { PermissionProfile } from \"../protocol\";\nimport type { Session } from \"../session/session\";\nimport type { TurnContext } from \"../session/turn-context\";\n\nexport const ToolErrorKind = {\n\tRejected: \"rejected\",\n\tUnavailable: \"unavailable\",\n\tFailed: \"failed\",\n} as const;\n\nexport type ToolErrorKind = (typeof ToolErrorKind)[keyof typeof ToolErrorKind];\n\nexport class ToolError extends Error {\n\tconstructor(\n\t\treadonly kind: ToolErrorKind,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ToolError\";\n\t}\n\n\tstatic rejected(message: string): ToolError {\n\t\treturn new ToolError(ToolErrorKind.Rejected, message);\n\t}\n\n\tstatic unavailable(message: string): ToolError {\n\t\treturn new ToolError(ToolErrorKind.Unavailable, message);\n\t}\n\n\tstatic failed(message: string): ToolError {\n\t\treturn new ToolError(ToolErrorKind.Failed, message);\n\t}\n}\n\nexport type SandboxAttempt = {\n\tsandbox: \"none\" | \"read-only\" | \"workspace-write\";\n\tpermissions?: PermissionProfile | null;\n};\n\nexport type ToolCtx = {\n\tsession: Session;\n\tturn: TurnContext;\n\tcall_id: string;\n\tsignal?: AbortSignal;\n};\n\nexport interface Sandboxable {\n\tsandbox_preference(): \"auto\" | \"none\";\n\tescalate_on_failure?(): boolean;\n}\n\nexport interface Approvable<TRequest> {\n\tapproval_keys(request: TRequest): unknown[];\n}\n\nexport interface ToolRuntime<TRequest, TOutput> {\n\trun(\n\t\trequest: TRequest,\n\t\tattempt: SandboxAttempt,\n\t\tctx: ToolCtx,\n\t): Promise<TOutput>;\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","export const HookToolEventName = {\n\tPreToolUse: \"PreToolUse\",\n\tPostToolUse: \"PostToolUse\",\n\tPermissionRequest: \"PermissionRequest\",\n} as const;\n\nexport type HookToolEventName =\n\t(typeof HookToolEventName)[keyof typeof HookToolEventName];\n","import { FunctionCallError } from \"./context\";\n\nexport type NetworkApprovalDecision =\n\t| { type: \"approved\" }\n\t| { type: \"denied\"; reason: string };\n\nexport async function request_network_approval(): Promise<NetworkApprovalDecision> {\n\treturn {\n\t\ttype: \"denied\",\n\t\treason:\n\t\t\t\"network approval is unavailable in this Codex assistant runtime; a desktop/local executor is required.\",\n\t};\n}\n\nexport function network_approval_denied_error(\n\tdecision: Extract<NetworkApprovalDecision, { type: \"denied\" }>,\n): FunctionCallError {\n\treturn FunctionCallError.respondToModel(decision.reason);\n}\n","export const MIN_WAIT_TIMEOUT_MS = 1_000;\nexport const DEFAULT_WAIT_TIMEOUT_MS = 30_000;\nexport const MAX_WAIT_TIMEOUT_MS = 3_600_000;\n","import {\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\n\nexport const REQUEST_PLUGIN_INSTALL_TOOL_NAME = \"request_plugin_install\";\n\nexport class RequestPluginInstallHandler\n\timplements ToolHandler<FunctionToolOutput>\n{\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(REQUEST_PLUGIN_INSTALL_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(): Promise<FunctionToolOutput> {\n\t\treturn FunctionToolOutput.fromText(\n\t\t\t\"plugin installation is unavailable in this Codex assistant runtime\",\n\t\t\tfalse,\n\t\t);\n\t}\n}\n","import { REQUEST_PLUGIN_INSTALL_TOOL_NAME } from \"./request_plugin_install\";\n\nexport function create_request_plugin_install_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: REQUEST_PLUGIN_INSTALL_TOOL_NAME,\n\t\tdescription: \"Request installation of a Codex plugin or connector.\",\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 const TEST_SYNC_TOOL_NAME = \"test_sync\";\n","import { TEST_SYNC_TOOL_NAME } from \"./test_sync\";\n\nexport function create_test_sync_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: TEST_SYNC_TOOL_NAME,\n\t\tdescription: \"Codex test synchronization tool.\",\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 const CODE_MODE_EXECUTE_TOOL_NAME = \"code_mode_execute\";\n\nexport function create_code_mode_execute_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: CODE_MODE_EXECUTE_TOOL_NAME,\n\t\tdescription: \"Execute a Codex code-mode cell.\",\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","import {\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\nimport { CODE_MODE_EXECUTE_TOOL_NAME } from \"./execute_spec\";\n\nexport class CodeModeExecuteHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(CODE_MODE_EXECUTE_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(): Promise<FunctionToolOutput> {\n\t\treturn FunctionToolOutput.fromText(\n\t\t\t\"code mode execution is unavailable in this Codex assistant runtime\",\n\t\t\tfalse,\n\t\t);\n\t}\n}\n","import type { ResponseInputItem } from \"../../protocol\";\n\nexport function code_mode_response_item(item: ResponseInputItem): ResponseInputItem {\n\treturn item;\n}\n","export const CODE_MODE_WAIT_TOOL_NAME = \"code_mode_wait\";\n\nexport function create_code_mode_wait_tool() {\n\treturn {\n\t\ttype: \"function\" as const,\n\t\tname: CODE_MODE_WAIT_TOOL_NAME,\n\t\tdescription: \"Wait for a Codex code-mode cell.\",\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","import {\n\tFunctionToolOutput,\n\tToolKind,\n\ttype ToolHandler,\n} from \"../context\";\nimport { ToolName } from \"../tool_name\";\nimport { CODE_MODE_WAIT_TOOL_NAME } from \"./wait_spec\";\n\nexport class CodeModeWaitHandler implements ToolHandler<FunctionToolOutput> {\n\ttoolName(): ToolName {\n\t\treturn ToolName.plain(CODE_MODE_WAIT_TOOL_NAME);\n\t}\n\n\tkind(): ToolKind {\n\t\treturn ToolKind.Function;\n\t}\n\n\tasync handle(): Promise<FunctionToolOutput> {\n\t\treturn FunctionToolOutput.fromText(\n\t\t\t\"code mode wait is unavailable in this Codex assistant runtime\",\n\t\t\tfalse,\n\t\t);\n\t}\n}\n","import { FunctionToolOutput } from \"../context\";\nimport { TOOL_RUNTIME_UNAVAILABLE } from \"./mod\";\n\nexport async function run_apply_patch_runtime(): Promise<FunctionToolOutput> {\n\treturn FunctionToolOutput.fromText(TOOL_RUNTIME_UNAVAILABLE, false);\n}\n","import { FunctionToolOutput } from \"../context\";\nimport { TOOL_RUNTIME_UNAVAILABLE } from \"./mod\";\n\nexport async function run_shell_runtime(): Promise<FunctionToolOutput> {\n\treturn FunctionToolOutput.fromText(TOOL_RUNTIME_UNAVAILABLE, false);\n}\n","import { FunctionToolOutput } from \"../context\";\nimport { TOOL_RUNTIME_UNAVAILABLE } from \"./mod\";\n\nexport async function run_unified_exec_runtime(): Promise<FunctionToolOutput> {\n\treturn FunctionToolOutput.fromText(TOOL_RUNTIME_UNAVAILABLE, false);\n}\n","export * from \"./apply_patch\";\nexport * from \"./shell\";\nexport * from \"./unified_exec\";\n\nexport const TOOL_RUNTIME_UNAVAILABLE =\n\t\"tool execution is unavailable in this Codex assistant runtime; a desktop/local executor is required.\";\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"]}