@jrkropp/codex-js 0.1.2 → 0.1.3

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 (133) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/ClientNotification-B6-FhXQf.d.ts +5 -0
  3. package/dist/DynamicToolCallResponse-82DFjES2.d.ts +8 -0
  4. package/dist/DynamicToolSpec-CfnhqAYK.d.ts +29 -0
  5. package/dist/PermissionsRequestApprovalResponse-DxzPPDRb.d.ts +55 -0
  6. package/dist/ProviderStatusBanner-BlP6lzwE.d.ts +441 -0
  7. package/dist/ServerRequest-B5cKVJjr.d.ts +2181 -0
  8. package/dist/{session-DPhHN7RZ.d.ts → ThreadResumeResponse-DvmE1juU.d.ts} +3 -306
  9. package/dist/ToolRequestUserInputQuestion-CeZa5X1J.d.ts +23 -0
  10. package/dist/ToolRequestUserInputResponse-zcPLwbiK.d.ts +17 -0
  11. package/dist/TurnSteerResponse-0kBCfplh.d.ts +209 -0
  12. package/dist/WebSearchToolConfig-D3ep0625.d.ts +18 -0
  13. package/dist/chat-runtime-B6azJyKo.d.ts +381 -0
  14. package/dist/chunk-2DZRMCI2.js +1258 -0
  15. package/dist/chunk-2DZRMCI2.js.map +1 -0
  16. package/dist/chunk-4DPLJPB5.js +396 -0
  17. package/dist/chunk-4DPLJPB5.js.map +1 -0
  18. package/dist/chunk-5JMJ6OI5.js +3 -0
  19. package/dist/chunk-5JMJ6OI5.js.map +1 -0
  20. package/dist/chunk-6ZMJ34KE.js +1153 -0
  21. package/dist/chunk-6ZMJ34KE.js.map +1 -0
  22. package/dist/chunk-CGBS37IU.js +128 -0
  23. package/dist/chunk-CGBS37IU.js.map +1 -0
  24. package/dist/chunk-DCMKA2A6.js +18 -0
  25. package/dist/chunk-DCMKA2A6.js.map +1 -0
  26. package/dist/chunk-DYLHN3HG.js +937 -0
  27. package/dist/chunk-DYLHN3HG.js.map +1 -0
  28. package/dist/chunk-ILXA6HLX.js +1973 -0
  29. package/dist/chunk-ILXA6HLX.js.map +1 -0
  30. package/dist/{chunk-SVK6PLGO.js → chunk-LWQNX4LI.js} +12009 -18768
  31. package/dist/chunk-LWQNX4LI.js.map +1 -0
  32. package/dist/{chunk-JLDH4U5L.js → chunk-NCI4MAWZ.js} +317 -1967
  33. package/dist/chunk-NCI4MAWZ.js.map +1 -0
  34. package/dist/chunk-O44XP7LH.js +214 -0
  35. package/dist/chunk-O44XP7LH.js.map +1 -0
  36. package/dist/chunk-PST3ZWX2.js +555 -0
  37. package/dist/chunk-PST3ZWX2.js.map +1 -0
  38. package/dist/chunk-SYPHCDRD.js +1133 -0
  39. package/dist/chunk-SYPHCDRD.js.map +1 -0
  40. package/dist/chunk-V4BMZWBM.js +2401 -0
  41. package/dist/chunk-V4BMZWBM.js.map +1 -0
  42. package/dist/chunk-YHVCFD2D.js +117 -0
  43. package/dist/chunk-YHVCFD2D.js.map +1 -0
  44. package/dist/chunk-Z63UPBS3.js +152 -0
  45. package/dist/chunk-Z63UPBS3.js.map +1 -0
  46. package/dist/client/index.d.ts +16 -4
  47. package/dist/client/index.js +13 -1
  48. package/dist/codex-rs/app-server/index.d.ts +161 -0
  49. package/dist/codex-rs/app-server/index.js +13 -0
  50. package/dist/codex-rs/app-server/index.js.map +1 -0
  51. package/dist/codex-rs/app-server-protocol/index.d.ts +1722 -0
  52. package/dist/codex-rs/app-server-protocol/index.js +6 -0
  53. package/dist/codex-rs/app-server-protocol/index.js.map +1 -0
  54. package/dist/codex-rs/app-server-protocol/protocol.d.ts +19 -0
  55. package/dist/codex-rs/app-server-protocol/protocol.js +4 -0
  56. package/dist/codex-rs/app-server-protocol/protocol.js.map +1 -0
  57. package/dist/codex-rs/codex-api/index.d.ts +104 -0
  58. package/dist/codex-rs/codex-api/index.js +11 -0
  59. package/dist/codex-rs/codex-api/index.js.map +1 -0
  60. package/dist/codex-rs/config/index.d.ts +88 -0
  61. package/dist/codex-rs/config/index.js +4 -0
  62. package/dist/codex-rs/config/index.js.map +1 -0
  63. package/dist/codex-rs/core/config/index.d.ts +61 -0
  64. package/dist/codex-rs/core/config/index.js +5 -0
  65. package/dist/codex-rs/core/config/index.js.map +1 -0
  66. package/dist/codex-rs/core/index.d.ts +1393 -0
  67. package/dist/codex-rs/core/index.js +11 -0
  68. package/dist/codex-rs/core/index.js.map +1 -0
  69. package/dist/codex-rs/model-provider/index.d.ts +2 -0
  70. package/dist/codex-rs/model-provider/index.js +4 -0
  71. package/dist/codex-rs/model-provider/index.js.map +1 -0
  72. package/dist/codex-rs/models-manager/index.d.ts +2 -0
  73. package/dist/codex-rs/models-manager/index.js +4 -0
  74. package/dist/codex-rs/models-manager/index.js.map +1 -0
  75. package/dist/codex-rs/parity.d.ts +26 -0
  76. package/dist/codex-rs/parity.js +3 -0
  77. package/dist/codex-rs/parity.js.map +1 -0
  78. package/dist/codex-rs/thread-store/index.d.ts +5 -0
  79. package/dist/codex-rs/thread-store/index.js +4 -0
  80. package/dist/codex-rs/thread-store/index.js.map +1 -0
  81. package/dist/codex-rs/unsupported.d.ts +15 -0
  82. package/dist/codex-rs/unsupported.js +22 -0
  83. package/dist/codex-rs/unsupported.js.map +1 -0
  84. package/dist/codex-rs/utils/output-truncation.d.ts +21 -0
  85. package/dist/codex-rs/utils/output-truncation.js +4 -0
  86. package/dist/codex-rs/utils/output-truncation.js.map +1 -0
  87. package/dist/codex-rs/utils/string.d.ts +7 -0
  88. package/dist/codex-rs/utils/string.js +3 -0
  89. package/dist/codex-rs/utils/string.js.map +1 -0
  90. package/dist/common-CTyph5x8.d.ts +40 -0
  91. package/dist/event-mapping-CbISdQ1D.d.ts +43 -0
  92. package/dist/history-CfM-4V7b.d.ts +1654 -0
  93. package/dist/index-77U_Oc-a.d.ts +63 -0
  94. package/dist/index-CoDZosq0.d.ts +261 -0
  95. package/dist/index.d.ts +18 -7
  96. package/dist/index.js +16 -2
  97. package/dist/lib-nXlaKiS-.d.ts +48 -0
  98. package/dist/live-thread-BMvlflzM.d.ts +30 -0
  99. package/dist/merge-B_AWVmnI.d.ts +24 -0
  100. package/dist/mod-DYVLSWO4.d.ts +91 -0
  101. package/dist/plan-mode-Cv6KWb_S.d.ts +14 -0
  102. package/dist/proposed-plan-DpN1ma0Y.d.ts +53 -0
  103. package/dist/protocol-mpBcYHrm.d.ts +1655 -0
  104. package/dist/react/index.d.ts +20 -52
  105. package/dist/react/index.js +16 -2
  106. package/dist/{remote-_6TDvg-g.d.ts → remote-ClZbq9KN.d.ts} +3 -1
  107. package/dist/rendered-thread-AOxw3V5b.d.ts +29 -0
  108. package/dist/responses_websocket-BhxSgCzK.d.ts +183 -0
  109. package/dist/runtime-Cm6ml53h.d.ts +528 -0
  110. package/dist/server/index.d.ts +29 -2416
  111. package/dist/server/index.js +13 -1
  112. package/dist/session-BRYzi8OT.d.ts +46 -0
  113. package/dist/shadcn/index.d.ts +1 -1
  114. package/dist/{sidebar-DT2XoitN.d.ts → sidebar-DMMij22z.d.ts} +1 -1
  115. package/dist/spec_plan_types-CmsJ-Tfn.d.ts +260 -0
  116. package/dist/{store-GYldc9EJ.d.ts → store-AGRxhgQ3.d.ts} +2 -1
  117. package/dist/t3code/apps/web/components/chat.d.ts +508 -0
  118. package/dist/t3code/apps/web/components/chat.js +12 -0
  119. package/dist/t3code/apps/web/components/chat.js.map +1 -0
  120. package/dist/t3code/apps/web/index.d.ts +12 -0
  121. package/dist/t3code/apps/web/index.js +13 -0
  122. package/dist/t3code/apps/web/index.js.map +1 -0
  123. package/dist/testing/index.d.ts +9 -91
  124. package/dist/testing/index.js +13 -1
  125. package/dist/thread-history-builder-zW0zeqcS.d.ts +58 -0
  126. package/dist/thread_event_store-C0zYzukG.d.ts +77 -0
  127. package/dist/types-BTeabLYr.d.ts +126 -0
  128. package/package.json +65 -1
  129. package/dist/chat-runtime-D7wu_KbX.d.ts +0 -747
  130. package/dist/chunk-JLDH4U5L.js.map +0 -1
  131. package/dist/chunk-SVK6PLGO.js.map +0 -1
  132. package/dist/index-CB9la6xE.d.ts +0 -112
  133. package/dist/thread_event_store-B9CoQUIA.d.ts +0 -3868
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/upstream/codex-rs/app-server-transport/src/transport/mod.ts","../src/upstream/codex-rs/app-server/src/outgoing_message.ts","../src/upstream/codex-rs/app-server/src/request_processors/request_errors.ts","../src/upstream/codex-rs/app-server/src/connection_rpc_gate.ts","../src/upstream/codex-rs/app-server/src/request_serialization.ts","../src/upstream/codex-rs/app-server/src/message_processor.ts","../src/upstream/codex-rs/app-server/src/request_processors/common.ts","../src/upstream/codex-rs/app-server/src/request_processors/mcp_processor.ts","../src/upstream/codex-rs/app-server/src/request_processors/token_usage_replay.ts","../src/upstream/codex-rs/app-server/src/request_processors/thread_processor.ts","../src/upstream/codex-rs/app-server/src/request_processors/turn_processor.ts","../src/upstream/codex-rs/app-server/src/dynamic_tools.ts","../src/upstream/codex-rs/app-server/src/server_request_response.ts","../src/upstream/codex-rs/app-server/src/session_factory.ts","../src/upstream/codex-rs/app-server/src/session_task_runner.ts","../src/upstream/codex-rs/app-server/src/thread_state.ts","../src/upstream/codex-rs/app-server/src/bespoke_event_handling.ts","../src/upstream/codex-rs/app-server/src/runtime.ts"],"names":["isRecord","isError"],"mappings":"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","file":"chunk-V4BMZWBM.js","sourcesContent":["import type {\n\tClientNotification,\n\tClientRequest,\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../../app-server-protocol/schema/typescript\";\nimport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingMessage,\n\tOutgoingResponse,\n\tQueuedOutgoingMessage,\n\tResult,\n} from \"../outgoing_message\";\n\nexport type ConnectionOrigin =\n\t| \"stdio\"\n\t| \"inProcess\"\n\t| \"webSocket\"\n\t| \"remoteControl\";\n\nexport type JSONRPCRequest = {\n\tid: RequestId;\n\tmethod: string;\n\tparams?: unknown;\n};\n\nexport type JSONRPCNotification = {\n\tmethod: string;\n\tparams?: unknown;\n};\n\nexport type JSONRPCResponse = {\n\tid: RequestId;\n\tresult: Result;\n};\n\nexport type JSONRPCError = {\n\terror: JSONRPCErrorError;\n\tid: RequestId | null;\n};\n\nexport type JSONRPCMessage =\n\t| JSONRPCRequest\n\t| JSONRPCNotification\n\t| JSONRPCResponse\n\t| JSONRPCError;\n\nexport type TransportEvent =\n\t| {\n\t\t\tconnectionId: ConnectionId;\n\t\t\torigin: ConnectionOrigin;\n\t\t\ttype: \"connection_opened\";\n\t }\n\t| { connectionId: ConnectionId; type: \"connection_closed\" }\n\t| {\n\t\t\tconnectionId: ConnectionId;\n\t\t\tmessage: JSONRPCMessage;\n\t\t\ttype: \"incoming_message\";\n\t };\n\nexport type ParsedServerTransportMessage =\n\t| { request: ClientRequest; type: \"client_request\" }\n\t| { notification: ClientNotification; type: \"client_notification\" }\n\t| { response: JSONRPCResponse; type: \"response\" }\n\t| { error: JSONRPCError; type: \"error\" };\n\nexport type ParsedClientTransportMessage =\n\t| { request: ServerRequest; type: \"server_request\" }\n\t| { notification: ServerNotification; type: \"server_notification\" }\n\t| { response: JSONRPCResponse; type: \"response\" }\n\t| { error: JSONRPCError; type: \"error\" };\n\nexport type ParsedTransportPayload<T> =\n\t| { message: T; type: \"ok\" }\n\t| { error: JSONRPCErrorError; id: RequestId | null; type: \"invalid\" };\n\nexport function parseJsonRpcTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<JSONRPCMessage> {\n\tlet value: unknown;\n\tif (typeof payload === \"string\") {\n\t\ttry {\n\t\t\tvalue = JSON.parse(payload);\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcParseError(\"Parse error\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t} else if (payload instanceof ArrayBuffer || ArrayBuffer.isView(payload)) {\n\t\tconst bytes = payload instanceof ArrayBuffer\n\t\t\t? new Uint8Array(payload)\n\t\t\t: new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength);\n\t\ttry {\n\t\t\tvalue = JSON.parse(new TextDecoder().decode(bytes));\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcParseError(\"Parse error\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t} else {\n\t\tvalue = payload;\n\t}\n\n\treturn parseJsonRpcMessage(value);\n}\n\nexport function parseJsonRpcMessage(\n\tvalue: unknown,\n): ParsedTransportPayload<JSONRPCMessage> {\n\tif (!isRecord(value)) {\n\t\treturn {\n\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC message\"),\n\t\t\tid: null,\n\t\t\ttype: \"invalid\",\n\t\t};\n\t}\n\n\tconst candidateId = requestIdFromValue(value.id);\n\tconst id = candidateId ?? null;\n\tif (typeof value.method === \"string\") {\n\t\tif (candidateId !== null) {\n\t\t\treturn {\n\t\t\t\tmessage: jsonRpcRequest(value.method, candidateId, value.params),\n\t\t\t\ttype: \"ok\",\n\t\t\t};\n\t\t}\n\t\tif (Object.prototype.hasOwnProperty.call(value, \"id\")) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC request id\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: jsonRpcNotification(value.method, value.params),\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(value, \"error\")) {\n\t\tif (!isJsonRpcErrorError(value.error)) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC error object\"),\n\t\t\t\tid,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: { error: value.error, id },\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(value, \"result\")) {\n\t\tif (candidateId === null) {\n\t\t\treturn {\n\t\t\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC response id\"),\n\t\t\t\tid: null,\n\t\t\t\ttype: \"invalid\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tmessage: { id: candidateId, result: value.result },\n\t\t\ttype: \"ok\",\n\t\t};\n\t}\n\n\treturn {\n\t\terror: jsonRpcInvalidRequestError(\"Invalid JSON-RPC message\"),\n\t\tid,\n\t\ttype: \"invalid\",\n\t};\n}\n\nexport function parseServerTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<ParsedServerTransportMessage> {\n\tconst parsed = parseJsonRpcTransportPayload(payload);\n\tif (parsed.type === \"invalid\") {\n\t\treturn parsed;\n\t}\n\treturn {\n\t\tmessage: serverTransportMessage(parsed.message),\n\t\ttype: \"ok\",\n\t};\n}\n\nexport function parseClientTransportPayload(\n\tpayload: string | ArrayBuffer | ArrayBufferView | unknown,\n): ParsedTransportPayload<ParsedClientTransportMessage> {\n\tconst parsed = parseJsonRpcTransportPayload(payload);\n\tif (parsed.type === \"invalid\") {\n\t\treturn parsed;\n\t}\n\treturn {\n\t\tmessage: clientTransportMessage(parsed.message),\n\t\ttype: \"ok\",\n\t};\n}\n\nexport function serializeOutgoingMessage(message: OutgoingMessage): string {\n\treturn JSON.stringify(message);\n}\n\nexport function serializeJsonRpcResponse(\n\tid: RequestId,\n\tresult: Result,\n): string {\n\treturn serializeOutgoingMessage({ id, result } satisfies OutgoingResponse);\n}\n\nexport function serializeJsonRpcError(\n\tid: RequestId | null,\n\terror: JSONRPCErrorError,\n): string {\n\treturn JSON.stringify({ error, id } satisfies JSONRPCError);\n}\n\nexport function queuedOutgoingMessage(\n\tmessage: OutgoingMessage,\n\twriteComplete?: () => void,\n): QueuedOutgoingMessage {\n\treturn { message, writeComplete };\n}\n\nexport function jsonRpcParseError(message: string): JSONRPCErrorError {\n\treturn { code: -32700, message };\n}\n\nexport function jsonRpcInvalidRequestError(message: string): JSONRPCErrorError {\n\treturn { code: -32600, message };\n}\n\nexport function jsonRpcInternalError(message: string): JSONRPCErrorError {\n\treturn { code: -32603, message };\n}\n\nfunction serverTransportMessage(\n\tmessage: JSONRPCMessage,\n): ParsedServerTransportMessage {\n\tif (isRequest(message)) {\n\t\treturn { request: message as ClientRequest, type: \"client_request\" };\n\t}\n\tif (isNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message as ClientNotification,\n\t\t\ttype: \"client_notification\",\n\t\t};\n\t}\n\tif (isError(message)) {\n\t\treturn { error: message, type: \"error\" };\n\t}\n\treturn { response: message, type: \"response\" };\n}\n\nfunction clientTransportMessage(\n\tmessage: JSONRPCMessage,\n): ParsedClientTransportMessage {\n\tif (isRequest(message)) {\n\t\treturn { request: message as ServerRequest, type: \"server_request\" };\n\t}\n\tif (isNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message as ServerNotification,\n\t\t\ttype: \"server_notification\",\n\t\t};\n\t}\n\tif (isError(message)) {\n\t\treturn { error: message, type: \"error\" };\n\t}\n\treturn { response: message, type: \"response\" };\n}\n\nfunction jsonRpcRequest(\n\tmethod: string,\n\tid: RequestId,\n\tparams: unknown,\n): JSONRPCRequest {\n\treturn params === undefined ? { id, method } : { id, method, params };\n}\n\nfunction jsonRpcNotification(\n\tmethod: string,\n\tparams: unknown,\n): JSONRPCNotification {\n\treturn params === undefined ? { method } : { method, params };\n}\n\nfunction isRequest(message: JSONRPCMessage): message is JSONRPCRequest {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\tObject.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isNotification(\n\tmessage: JSONRPCMessage,\n): message is JSONRPCNotification {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\t!Object.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isError(message: JSONRPCMessage): message is JSONRPCError {\n\treturn Object.prototype.hasOwnProperty.call(message, \"error\");\n}\n\nfunction requestIdFromValue(value: unknown): RequestId | null {\n\treturn typeof value === \"string\" || typeof value === \"number\" ? value : null;\n}\n\nfunction isJsonRpcErrorError(value: unknown): value is JSONRPCErrorError {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value.code === \"number\" &&\n\t\ttypeof value.message === \"string\"\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type {\n\tRequestId,\n\tServerNotification,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingMessage,\n\tResult,\n} from \"../../app-server-transport/src/outgoing_message\";\nimport type { ThreadId } from \"../../core/src/ids\";\n\nexport type {\n\tConnectionId,\n\tJSONRPCErrorError,\n\tOutgoingError,\n\tOutgoingMessage,\n\tOutgoingResponse,\n\tQueuedOutgoingMessage,\n\tResult,\n} from \"../../app-server-transport/src/outgoing_message\";\n\nexport type AppServerEvent =\n\t| { notification: ServerNotification; type: \"server_notification\" }\n\t| { request: ServerRequest; type: \"server_request\" }\n\t| { skipped: number; type: \"lagged\" }\n\t| { message: string; type: \"disconnected\" };\n\nexport type ConnectionRequestId = {\n\tconnectionId: ConnectionId;\n\trequestId: RequestId;\n};\n\nexport type RequestContext = {\n\tconnectionId: ConnectionId;\n\trequestId: RequestId;\n};\n\ntype PendingCallbackEntry = {\n\tcallback: (result: PendingCallbackResult) => void;\n\tconnectionIds: ConnectionId[] | null;\n\trequest: ServerRequest;\n\tthreadId: ThreadId | null;\n};\n\ntype PendingCallbackResult =\n\t| { result: Result; type: \"ok\" }\n\t| { error: JSONRPCErrorError; type: \"error\" };\n\nexport type OutgoingServerRequestHandle = {\n\trequest: ServerRequest;\n\tresult: Promise<Result>;\n};\n\nexport type OutgoingMessageSenderOptions = {\n\tsend: (\n\t\tmessage: OutgoingMessage,\n\t\tcontext: {\n\t\t\tconnectionIds?: ConnectionId[];\n\t\t\tcontext?: unknown;\n\t\t\tthreadId?: ThreadId;\n\t\t},\n\t) => Promise<void> | void;\n};\n\nexport class OutgoingMessageSender {\n\tprivate nextServerRequestId = 0;\n\tprivate readonly requestIdToCallback = new Map<RequestId, PendingCallbackEntry>();\n\tprivate readonly requestContexts = new Map<string, RequestContext>();\n\tprivate readonly sendMessage: OutgoingMessageSenderOptions[\"send\"];\n\n\tconstructor(options: OutgoingMessageSenderOptions) {\n\t\tthis.sendMessage = options.send;\n\t}\n\n\tthreadScoped(threadId: ThreadId): ThreadScopedOutgoingMessageSender {\n\t\treturn new ThreadScopedOutgoingMessageSender(this, threadId, []);\n\t}\n\n\tthreadScopedForConnections(\n\t\tthreadId: ThreadId,\n\t\tconnectionIds: ConnectionId[],\n\t): ThreadScopedOutgoingMessageSender {\n\t\treturn new ThreadScopedOutgoingMessageSender(this, threadId, connectionIds);\n\t}\n\n\tasync sendServerNotification(\n\t\tnotification: ServerNotification,\n\t\tcontext?: unknown,\n\t\tthreadId?: ThreadId,\n\t\tconnectionIds?: ConnectionId[],\n\t): Promise<void> {\n\t\tawait this.sendMessage(notification, {\n\t\t\tconnectionIds,\n\t\t\tcontext,\n\t\t\tthreadId: serverNotificationThreadId(notification) ?? threadId,\n\t\t});\n\t}\n\n\tasync sendRequest(\n\t\trequest: ServerRequest,\n\t\tthreadId: ThreadId | null = serverRequestThreadId(request),\n\t\tcontext?: unknown,\n\t\tconnectionIds?: ConnectionId[],\n\t): Promise<Result> {\n\t\treturn this.sendRequestWithHandle(request, threadId, context, connectionIds).result;\n\t}\n\n\tsendRequestWithHandle(\n\t\trequest: ServerRequest,\n\t\tthreadId: ThreadId | null = serverRequestThreadId(request),\n\t\tcontext?: unknown,\n\t\tconnectionIds?: ConnectionId[],\n\t): OutgoingServerRequestHandle {\n\t\tconst requestWithId = request.id === undefined\n\t\t\t? ({ ...request, id: this.nextRequestId() } as ServerRequest)\n\t\t\t: request;\n\t\tlet rejectResult: (error: unknown) => void = () => {};\n\t\tconst result = new Promise<Result>((resolve, reject) => {\n\t\t\trejectResult = reject;\n\t\t\tthis.requestIdToCallback.set(requestWithId.id, {\n\t\t\t\tcallback: (entry) => {\n\t\t\t\t\tif (entry.type === \"ok\") {\n\t\t\t\t\t\tresolve(entry.result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treject(entry.error);\n\t\t\t\t},\n\t\t\t\tconnectionIds: connectionIds ?? null,\n\t\t\t\trequest: requestWithId,\n\t\t\t\tthreadId,\n\t\t\t});\n\t\t});\n\t\tvoid Promise.resolve(\n\t\t\tthis.sendMessage(requestWithId, {\n\t\t\t\tconnectionIds,\n\t\t\t\tcontext,\n\t\t\t\tthreadId: threadId ?? undefined,\n\t\t\t}),\n\t\t).catch((error) => {\n\t\t\tthis.requestIdToCallback.delete(requestWithId.id);\n\t\t\trejectResult(error);\n\t\t});\n\t\treturn { request: requestWithId, result };\n\t}\n\n\tregisterRequestContext(requestContext: RequestContext): void {\n\t\tthis.requestContexts.set(connectionRequestKey(requestContext), requestContext);\n\t}\n\n\trequestContext(requestId: ConnectionRequestId): RequestContext | null {\n\t\treturn this.requestContexts.get(connectionRequestKey(requestId)) ?? null;\n\t}\n\n\tasync sendResponse(\n\t\trequestId: ConnectionRequestId,\n\t\tresult: Result,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\tthis.requestContexts.delete(connectionRequestKey(requestId));\n\t\tawait this.sendMessage(\n\t\t\t{ id: requestId.requestId, result },\n\t\t\t{ connectionIds: [requestId.connectionId], context },\n\t\t);\n\t}\n\n\tasync sendError(\n\t\trequestId: ConnectionRequestId,\n\t\terror: JSONRPCErrorError,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\tthis.requestContexts.delete(connectionRequestKey(requestId));\n\t\tawait this.sendMessage(\n\t\t\t{ error, id: requestId.requestId },\n\t\t\t{ connectionIds: [requestId.connectionId], context },\n\t\t);\n\t}\n\n\tasync notifyClientResponse(id: RequestId, result: Result): Promise<void> {\n\t\tconst entry = this.takeRequestCallback(id);\n\t\tentry?.callback({ result, type: \"ok\" });\n\t}\n\n\tasync notifyClientError(\n\t\tid: RequestId,\n\t\terror: JSONRPCErrorError,\n\t): Promise<void> {\n\t\tconst entry = this.takeRequestCallback(id);\n\t\tentry?.callback({ error, type: \"error\" });\n\t}\n\n\tcancelRequest(id: RequestId): boolean {\n\t\treturn this.takeRequestCallback(id) !== null;\n\t}\n\n\tconnectionClosed(connectionId: ConnectionId): void {\n\t\tfor (const [requestKey, requestContext] of this.requestContexts) {\n\t\t\tif (requestContext.connectionId === connectionId) {\n\t\t\t\tthis.requestContexts.delete(requestKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tcancelRequestsForThread(\n\t\tthreadId: ThreadId,\n\t\terror?: JSONRPCErrorError,\n\t): void {\n\t\tfor (const [requestId, entry] of this.requestIdToCallback) {\n\t\t\tif (entry.threadId !== threadId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.requestIdToCallback.delete(requestId);\n\t\t\tif (error) {\n\t\t\t\tentry.callback({ error, type: \"error\" });\n\t\t\t}\n\t\t}\n\t}\n\n\tpendingRequestsForThread(threadId: ThreadId): ServerRequest[] {\n\t\treturn Array.from(this.requestIdToCallback.values())\n\t\t\t.filter((entry) => entry.threadId === threadId)\n\t\t\t.map((entry) => entry.request)\n\t\t\t.sort((left, right) => String(left.id).localeCompare(String(right.id)));\n\t}\n\n\tprivate nextRequestId(): RequestId {\n\t\tconst id = this.nextServerRequestId;\n\t\tthis.nextServerRequestId += 1;\n\t\treturn id;\n\t}\n\n\tprivate takeRequestCallback(id: RequestId): PendingCallbackEntry | null {\n\t\tconst entry = this.requestIdToCallback.get(id) ?? null;\n\t\tthis.requestIdToCallback.delete(id);\n\t\treturn entry;\n\t}\n}\n\nexport class ThreadScopedOutgoingMessageSender {\n\tconstructor(\n\t\tprivate readonly outgoing: OutgoingMessageSender,\n\t\tprivate readonly threadId: ThreadId,\n\t\tprivate readonly connectionIds: ConnectionId[] = [],\n\t) {}\n\n\tsendRequest(request: ServerRequest, context?: unknown): Promise<Result> {\n\t\treturn this.outgoing.sendRequest(\n\t\t\trequest,\n\t\t\tthis.threadId,\n\t\t\tcontext,\n\t\t\tthis.connectionIds.length > 0 ? this.connectionIds : undefined,\n\t\t);\n\t}\n\n\tsendServerNotification(\n\t\tnotification: ServerNotification,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendServerNotification(\n\t\t\tnotification,\n\t\t\tcontext,\n\t\t\tthis.threadId,\n\t\t\tthis.connectionIds.length > 0 ? this.connectionIds : undefined,\n\t\t);\n\t}\n\n\tsendResponse(\n\t\trequestId: ConnectionRequestId,\n\t\tresult: Result,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendResponse(requestId, result, context);\n\t}\n\n\tsendError(\n\t\trequestId: ConnectionRequestId,\n\t\terror: JSONRPCErrorError,\n\t\tcontext?: unknown,\n\t): Promise<void> {\n\t\treturn this.outgoing.sendError(requestId, error, context);\n\t}\n\n\tabortPendingServerRequests(error?: JSONRPCErrorError): void {\n\t\tthis.outgoing.cancelRequestsForThread(this.threadId, error);\n\t}\n\n\tpendingRequests(): ServerRequest[] {\n\t\treturn this.outgoing.pendingRequestsForThread(this.threadId);\n\t}\n}\n\nexport function outgoingMessageToAppServerEvent(\n\tmessage: OutgoingMessage,\n): AppServerEvent | null {\n\tif (isServerNotification(message)) {\n\t\treturn {\n\t\t\tnotification: message,\n\t\t\ttype: \"server_notification\",\n\t\t};\n\t}\n\tif (isServerRequest(message)) {\n\t\treturn { request: message, type: \"server_request\" };\n\t}\n\treturn null;\n}\n\nfunction serverNotificationThreadId(notification: ServerNotification): ThreadId | null {\n\tconst params = notification.params as { threadId?: unknown } | undefined;\n\tif (typeof params?.threadId === \"string\") {\n\t\treturn params.threadId as ThreadId;\n\t}\n\tconst thread = (params as { thread?: { id?: unknown } } | undefined)?.thread;\n\tif (typeof thread?.id === \"string\") {\n\t\treturn thread.id as ThreadId;\n\t}\n\tconst turn = (params as { turn?: { threadId?: unknown } } | undefined)?.turn;\n\tif (typeof turn?.threadId === \"string\") {\n\t\treturn turn.threadId as ThreadId;\n\t}\n\treturn null;\n}\n\nfunction serverRequestThreadId(request: ServerRequest): ThreadId | null {\n\tconst params = request.params as { threadId?: unknown } | undefined;\n\treturn typeof params?.threadId === \"string\" ? (params.threadId as ThreadId) : null;\n}\n\nfunction connectionRequestKey(requestId: ConnectionRequestId): string {\n\treturn `${requestId.connectionId}:${String(requestId.requestId)}`;\n}\n\nfunction isServerRequest(message: OutgoingMessage): message is ServerRequest {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\tObject.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n\nfunction isServerNotification(\n\tmessage: OutgoingMessage,\n): message is ServerNotification {\n\treturn (\n\t\ttypeof (message as { method?: unknown }).method === \"string\" &&\n\t\t!Object.prototype.hasOwnProperty.call(message, \"id\")\n\t);\n}\n","import type { RequestId } from \"../../../app-server-protocol/schema/typescript\";\nimport type { JSONRPCErrorError } from \"../outgoing_message\";\n\nexport class CodexAppServerRequestError extends Error {\n\tconstructor(\n\t\treadonly error: JSONRPCErrorError,\n\t\treadonly status = 400,\n\t) {\n\t\tsuper(error.message);\n\t\tthis.name = \"CodexAppServerRequestError\";\n\t}\n}\n\nexport function unsupportedMethodError(\n\tmethod: string,\n\trequestId: RequestId,\n): JSONRPCErrorError {\n\treturn {\n\t\tcode: -32601,\n\t\tdata: { requestId },\n\t\tmessage: `Unsupported Codex App Server method: ${method}`,\n\t};\n}\n\nexport function errorToJsonRpcError(error: unknown): JSONRPCErrorError {\n\tif (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\ttypeof (error as { code?: unknown }).code === \"number\" &&\n\t\ttypeof (error as { message?: unknown }).message === \"string\"\n\t) {\n\t\treturn error as JSONRPCErrorError;\n\t}\n\treturn {\n\t\tcode: -32000,\n\t\tmessage:\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"Codex App Server request failed.\",\n\t};\n}\n","export class ConnectionRpcGateClosedError extends Error {\n\tconstructor() {\n\t\tsuper(\"Codex App Server connection is closed.\");\n\t\tthis.name = \"ConnectionRpcGateClosedError\";\n\t}\n}\n\nexport class ConnectionRpcGate {\n\tprivate accepting = true;\n\tprivate inFlight = 0;\n\tprivate readonly shutdownWaiters = new Set<() => void>();\n\n\tisAccepting(): boolean {\n\t\treturn this.accepting;\n\t}\n\n\tasync run<T>(work: () => Promise<T> | T): Promise<T> {\n\t\tif (!this.accepting) {\n\t\t\tthrow new ConnectionRpcGateClosedError();\n\t\t}\n\t\tthis.inFlight += 1;\n\t\ttry {\n\t\t\treturn await work();\n\t\t} finally {\n\t\t\tthis.inFlight -= 1;\n\t\t\tif (!this.accepting && this.inFlight === 0) {\n\t\t\t\tfor (const resolve of this.shutdownWaiters) {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\tthis.shutdownWaiters.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.accepting = false;\n\t\tif (this.inFlight === 0) {\n\t\t\treturn;\n\t\t}\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tthis.shutdownWaiters.add(resolve);\n\t\t});\n\t}\n}\n","import type { ClientRequestSerializationScope } from \"../../app-server-protocol/src/protocol\";\n\nexport type RequestSerializationQueueKey = string;\n\nexport class RequestSerializationQueues {\n\tprivate readonly tails = new Map<RequestSerializationQueueKey, Promise<unknown>>();\n\n\tasync enqueue<T>(\n\t\tkey: RequestSerializationQueueKey,\n\t\twork: () => Promise<T> | T,\n\t): Promise<T> {\n\t\tconst previous = this.tails.get(key) ?? Promise.resolve();\n\t\tconst current = previous\n\t\t\t.catch(() => undefined)\n\t\t\t.then(() => work());\n\t\tconst tail = current.catch(() => undefined).finally(() => {\n\t\t\tif (this.tails.get(key) === tail) {\n\t\t\t\tthis.tails.delete(key);\n\t\t\t}\n\t\t});\n\t\tthis.tails.set(\n\t\t\tkey,\n\t\t\ttail,\n\t\t);\n\t\treturn current;\n\t}\n}\n\nexport function requestSerializationQueueKeyFromScope(\n\tconnectionId: number | string,\n\tscope: ClientRequestSerializationScope,\n): RequestSerializationQueueKey {\n\tswitch (scope.type) {\n\t\tcase \"global\":\n\t\t\treturn `global:${scope.key}`;\n\t\tcase \"thread\":\n\t\t\treturn `thread:${scope.threadId}`;\n\t\tcase \"threadPath\":\n\t\t\treturn `thread-path:${scope.path}`;\n\t\tcase \"commandExecProcess\":\n\t\t\treturn `connection:${connectionId}:command-exec-process:${scope.processId}`;\n\t\tcase \"process\":\n\t\t\treturn `connection:${connectionId}:process:${scope.processHandle}`;\n\t\tcase \"fuzzyFileSearchSession\":\n\t\t\treturn `fuzzy-file-search-session:${scope.sessionId}`;\n\t\tcase \"fsWatch\":\n\t\t\treturn `connection:${connectionId}:fs-watch:${scope.watchId}`;\n\t\tcase \"mcpOauth\":\n\t\t\treturn `mcp-oauth:${scope.serverName}`;\n\t}\n}\n","import type {\n\tClientInfo,\n\tClientRequest,\n\tInitializeParams,\n\tInitializeResponse,\n\tRequestId,\n} from \"../../app-server-protocol/schema/typescript\";\nimport {\n\tclientRequestExperimentalReason,\n\tclientRequestSerializationScope,\n} from \"../../app-server-protocol/src/protocol\";\nimport { builtinCollaborationModePresets } from \"../../core/src/collaboration-mode-presets\";\nimport type { CollaborationModeMask as CoreCollaborationModeMask } from \"../../core/src/config-types\";\nimport type {\n\tCollaborationModeListParams,\n\tCollaborationModeListResponse,\n\tCollaborationModeMask,\n\tListMcpServerStatusParams,\n\tListMcpServerStatusResponse,\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tMcpServerRefreshResponse,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tThreadArchiveParams,\n\tThreadArchiveResponse,\n\tThreadCompactStartParams,\n\tThreadCompactStartResponse,\n\tThreadListParams,\n\tThreadListResponse,\n\tThreadMetadataUpdateParams,\n\tThreadMetadataUpdateResponse,\n\tThreadReadParams,\n\tThreadReadResponse,\n\tThreadResumeParams,\n\tThreadResumeResponse,\n\tThreadSetNameParams,\n\tThreadSetNameResponse,\n\tThreadStartParams,\n\tThreadStartResponse,\n\tThreadUnarchiveParams,\n\tThreadUnarchiveResponse,\n\tTurnInterruptParams,\n\tTurnInterruptResponse,\n\tTurnStartParams,\n\tTurnStartResponse,\n\tTurnSteerParams,\n\tTurnSteerResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tCodexAppServerRequestError,\n\tunsupportedMethodError,\n} from \"./request_processors/request_errors\";\nimport {\n\tConnectionRpcGate,\n\tConnectionRpcGateClosedError,\n} from \"./connection_rpc_gate\";\nimport {\n\tRequestSerializationQueues,\n\trequestSerializationQueueKeyFromScope,\n} from \"./request_serialization\";\nimport type {\n\tConnectionId,\n\tConnectionRequestId,\n\tJSONRPCErrorError,\n\tOutgoingMessageSender,\n} from \"./outgoing_message\";\n\nexport type CodexAppServerRequestContext = {\n\tconnectionId: ConnectionId;\n\toutgoing: OutgoingMessageSender;\n\trequestId: ConnectionRequestId;\n\tsession: CodexAppServerConnectionSessionState;\n};\n\nexport type CodexAppServerMethodHandlers<Context = unknown> = {\n\tcollaborationModeList?(\n\t\tparams: CollaborationModeListParams,\n\t\tcontext?: Context,\n\t): Promise<CollaborationModeListResponse>;\n\tinitialize?(\n\t\tparams: InitializeParams,\n\t\tcontext?: Context,\n\t\tsession?: CodexAppServerConnectionSessionState,\n\t): Promise<InitializeResponse>;\n\tconfigMcpServerReload?(\n\t\tparams: undefined,\n\t\tcontext?: Context,\n\t): Promise<McpServerRefreshResponse>;\n\tmcpResourceRead?(\n\t\tparams: McpResourceReadParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpResourceReadResponse | CodexAppServerDeferredResponse>;\n\tmcpServerOauthLogin?(\n\t\tparams: McpServerOauthLoginParams,\n\t\tcontext?: Context,\n\t): Promise<McpServerOauthLoginResponse>;\n\tmcpServerStatusList?(\n\t\tparams: ListMcpServerStatusParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<ListMcpServerStatusResponse | CodexAppServerDeferredResponse>;\n\tmcpServerToolCall?(\n\t\tparams: McpServerToolCallParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpServerToolCallResponse | CodexAppServerDeferredResponse>;\n\tthreadArchive?(\n\t\tparams: ThreadArchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadArchiveResponse>;\n\tthreadCompactStart(\n\t\tparams: ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadCompactStartResponse>;\n\tthreadList?(\n\t\tparams: ThreadListParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadListResponse>;\n\tthreadMetadataUpdate?(\n\t\tparams: ThreadMetadataUpdateParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadMetadataUpdateResponse>;\n\tthreadNameSet?(\n\t\tparams: ThreadSetNameParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadSetNameResponse>;\n\tthreadRead?(\n\t\tparams: ThreadReadParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadReadResponse>;\n\tthreadResume(\n\t\tparams: ThreadResumeParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadResumeResponse>;\n\tthreadStart(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadStartResponse>;\n\tthreadUnarchive?(\n\t\tparams: ThreadUnarchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadUnarchiveResponse>;\n\tturnInterrupt(\n\t\tparams: TurnInterruptParams,\n\t\tcontext?: Context,\n\t): Promise<TurnInterruptResponse>;\n\tturnStart(\n\t\tparams: TurnStartParams,\n\t\tcontext?: Context,\n\t): Promise<TurnStartResponse>;\n\tturnSteer(\n\t\tparams: TurnSteerParams,\n\t\tcontext?: Context,\n\t): Promise<TurnSteerResponse>;\n};\n\nexport type InitializedConnectionSessionState = {\n\tappServerClientName: string;\n\tclientVersion: string;\n\texperimentalApiEnabled: boolean;\n\toptedOutNotificationMethods: ReadonlySet<string>;\n};\n\nexport class CodexAppServerConnectionSessionState {\n\treadonly rpcGate = new ConnectionRpcGate();\n\tprivate initializedState: InitializedConnectionSessionState | null = null;\n\n\tconstructor(initializedState?: InitializedConnectionSessionState | null) {\n\t\tthis.initializedState = initializedState ?? null;\n\t}\n\n\tinitialized(): boolean {\n\t\treturn this.initializedState !== null;\n\t}\n\n\tinitialize(state: InitializedConnectionSessionState): void {\n\t\tif (this.initializedState) {\n\t\t\tthrow invalidRequest(\"Already initialized\");\n\t\t}\n\t\tthis.initializedState = state;\n\t}\n\n\texperimentalApiEnabled(): boolean {\n\t\treturn this.initializedState?.experimentalApiEnabled ?? false;\n\t}\n\n\toptedOutNotificationMethods(): ReadonlySet<string> {\n\t\treturn this.initializedState?.optedOutNotificationMethods ?? new Set();\n\t}\n\n\tappServerClientName(): string | null {\n\t\treturn this.initializedState?.appServerClientName ?? null;\n\t}\n\n\tclientVersion(): string | null {\n\t\treturn this.initializedState?.clientVersion ?? null;\n\t}\n}\n\nexport type CodexAppServerMessageProcessorOptions<Context = unknown> = {\n\tconnectionId?: ConnectionId;\n\thandlers: CodexAppServerMethodHandlers<Context>;\n\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\toutgoing?: OutgoingMessageSender;\n\trequestSerializationQueues?: RequestSerializationQueues;\n\tsession?: CodexAppServerConnectionSessionState;\n};\n\nexport type CodexAppServerConnectionRequestOutcome =\n\t| { result: unknown; type: \"response\" }\n\t| { type: \"deferred\" }\n\t| { error: JSONRPCErrorError; type: \"error\" };\n\nexport type CodexAppServerDeferredResponse = {\n\treadonly __codexAppServerDeferredResponse: true;\n};\n\nconst CODEX_APP_SERVER_DEFERRED_RESPONSE: CodexAppServerDeferredResponse = {\n\t__codexAppServerDeferredResponse: true,\n};\n\nexport function codexAppServerDeferredResponse(): CodexAppServerDeferredResponse {\n\treturn CODEX_APP_SERVER_DEFERRED_RESPONSE;\n}\n\nexport class CodexAppServerMessageProcessor<Context = unknown> {\n\treadonly connectionId: ConnectionId;\n\treadonly requestSerializationQueues: RequestSerializationQueues;\n\treadonly session: CodexAppServerConnectionSessionState;\n\tprivate readonly handlers: CodexAppServerMethodHandlers<Context>;\n\tprivate readonly initializeResponse:\n\t\t| InitializeResponse\n\t\t| (() => InitializeResponse)\n\t\t| undefined;\n\tprivate readonly outgoing: OutgoingMessageSender | undefined;\n\n\tconstructor(options: CodexAppServerMessageProcessorOptions<Context>) {\n\t\tthis.connectionId = options.connectionId ?? defaultConnectionId();\n\t\tthis.handlers = options.handlers;\n\t\tthis.initializeResponse = options.initializeResponse;\n\t\tthis.outgoing = options.outgoing;\n\t\tthis.requestSerializationQueues =\n\t\t\toptions.requestSerializationQueues ?? new RequestSerializationQueues();\n\t\tthis.session = options.session ?? new CodexAppServerConnectionSessionState();\n\t}\n\n\tasync processClientRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<unknown> {\n\t\tif (request.method === \"initialize\") {\n\t\t\treturn this.initialize(request.params, context);\n\t\t}\n\t\tif (!this.session.initialized()) {\n\t\t\tthrow invalidRequest(\"Not initialized\");\n\t\t}\n\t\tconst experimentalReason = clientRequestExperimentalReason(request);\n\t\tif (experimentalReason && !this.session.experimentalApiEnabled()) {\n\t\t\tthrow invalidRequest(experimentalRequiredMessage(experimentalReason));\n\t\t}\n\n\t\tconst scope = clientRequestSerializationScope(request);\n\t\tconst run = () =>\n\t\t\tthis.session.rpcGate.run(() =>\n\t\t\t\tthis.handleInitializedClientRequest(request, context),\n\t\t\t);\n\t\ttry {\n\t\t\tif (!scope) {\n\t\t\t\treturn await run();\n\t\t\t}\n\t\t\treturn await this.requestSerializationQueues.enqueue(\n\t\t\t\trequestSerializationQueueKeyFromScope(this.connectionId, scope),\n\t\t\t\trun,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (error instanceof ConnectionRpcGateClosedError) {\n\t\t\t\tthrow new CodexAppServerRequestError(\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t},\n\t\t\t\t\t499,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync processConnectionRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<CodexAppServerConnectionRequestOutcome> {\n\t\tif (!this.outgoing) {\n\t\t\tconst result = await this.processClientRequest(request, context);\n\t\t\treturn { result, type: \"response\" };\n\t\t}\n\t\tconst requestId = this.connectionRequestId(request.id);\n\t\tthis.outgoing.registerRequestContext({\n\t\t\tconnectionId: requestId.connectionId,\n\t\t\trequestId: requestId.requestId,\n\t\t});\n\t\ttry {\n\t\t\tconst result = await this.processClientRequest(request, context);\n\t\t\tif (isCodexAppServerDeferredResponse(result)) {\n\t\t\t\treturn { type: \"deferred\" };\n\t\t\t}\n\t\t\tawait this.outgoing.sendResponse(requestId, result);\n\t\t\treturn { result, type: \"response\" };\n\t\t} catch (error) {\n\t\t\tconst responseError =\n\t\t\t\terror instanceof CodexAppServerRequestError\n\t\t\t\t\t? error.error\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t: \"Codex App Server request failed.\",\n\t\t\t\t\t };\n\t\t\tawait this.outgoing.sendError(requestId, responseError);\n\t\t\treturn { error: responseError, type: \"error\" };\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.session.rpcGate.shutdown();\n\t}\n\n\tconnectionClosed(): Promise<void> {\n\t\tthis.outgoing?.connectionClosed(this.connectionId);\n\t\treturn this.shutdown();\n\t}\n\n\tprivate async initialize(\n\t\tparams: InitializeParams,\n\t\tcontext?: Context,\n\t): Promise<InitializeResponse> {\n\t\tvalidateClientInfo(params.clientInfo);\n\t\tconst capabilities = params.capabilities;\n\t\tthis.session.initialize({\n\t\t\tappServerClientName: params.clientInfo.name,\n\t\t\tclientVersion: params.clientInfo.version,\n\t\t\texperimentalApiEnabled: capabilities?.experimentalApi ?? false,\n\t\t\toptedOutNotificationMethods: new Set(\n\t\t\t\tcapabilities?.optOutNotificationMethods ?? [],\n\t\t\t),\n\t\t});\n\t\tif (this.handlers.initialize) {\n\t\t\treturn this.handlers.initialize(params, context, this.session);\n\t\t}\n\t\treturn this.defaultInitializeResponse();\n\t}\n\n\tprivate async handleInitializedClientRequest(\n\t\trequest: ClientRequest,\n\t\tcontext?: Context,\n\t): Promise<unknown> {\n\t\tswitch (request.method) {\n\t\t\tcase \"thread/start\":\n\t\t\t\treturn this.handlers.threadStart(request.params, context);\n\t\t\tcase \"thread/resume\":\n\t\t\t\treturn this.handlers.threadResume(request.params, context);\n\t\t\tcase \"thread/list\":\n\t\t\t\tif (this.handlers.threadList) {\n\t\t\t\t\treturn this.handlers.threadList(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/read\":\n\t\t\t\tif (this.handlers.threadRead) {\n\t\t\t\t\treturn this.handlers.threadRead(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/name/set\":\n\t\t\t\tif (this.handlers.threadNameSet) {\n\t\t\t\t\treturn this.handlers.threadNameSet(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/archive\":\n\t\t\t\tif (this.handlers.threadArchive) {\n\t\t\t\t\treturn this.handlers.threadArchive(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/unarchive\":\n\t\t\t\tif (this.handlers.threadUnarchive) {\n\t\t\t\t\treturn this.handlers.threadUnarchive(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"thread/metadata/update\":\n\t\t\t\tif (this.handlers.threadMetadataUpdate) {\n\t\t\t\t\treturn this.handlers.threadMetadataUpdate(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"turn/start\":\n\t\t\t\treturn this.handlers.turnStart(request.params, context);\n\t\t\tcase \"turn/steer\":\n\t\t\t\treturn this.handlers.turnSteer(request.params, context);\n\t\t\tcase \"turn/interrupt\":\n\t\t\t\treturn this.handlers.turnInterrupt(request.params, context);\n\t\t\tcase \"thread/compact/start\":\n\t\t\t\treturn this.handlers.threadCompactStart(request.params, context);\n\t\t\tcase \"collaborationMode/list\":\n\t\t\t\tif (this.handlers.collaborationModeList) {\n\t\t\t\t\treturn this.handlers.collaborationModeList(request.params, context);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdata: builtinCollaborationModePresets().map(\n\t\t\t\t\t\tappServerCollaborationModeMask,\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\tcase \"config/mcpServer/reload\":\n\t\t\t\tif (this.handlers.configMcpServerReload) {\n\t\t\t\t\treturn this.handlers.configMcpServerReload(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServerStatus/list\":\n\t\t\t\tif (this.handlers.mcpServerStatusList) {\n\t\t\t\t\treturn this.handlers.mcpServerStatusList(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/resource/read\":\n\t\t\t\tif (this.handlers.mcpResourceRead) {\n\t\t\t\t\treturn this.handlers.mcpResourceRead(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/tool/call\":\n\t\t\t\tif (this.handlers.mcpServerToolCall) {\n\t\t\t\t\treturn this.handlers.mcpServerToolCall(\n\t\t\t\t\t\trequest.params,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tthis.requestContext(request.id),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mcpServer/oauth/login\":\n\t\t\t\tif (this.handlers.mcpServerOauthLogin) {\n\t\t\t\t\treturn this.handlers.mcpServerOauthLogin(request.params, context);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new CodexAppServerRequestError(\n\t\t\tunsupportedMethodError(request.method, request.id),\n\t\t\t404,\n\t\t);\n\t}\n\n\tprivate defaultInitializeResponse(): InitializeResponse {\n\t\tconst response =\n\t\t\ttypeof this.initializeResponse === \"function\"\n\t\t\t\t? this.initializeResponse()\n\t\t\t\t: this.initializeResponse;\n\t\treturn (\n\t\t\tresponse ?? {\n\t\t\t\tcodexHome: \"/\",\n\t\t\t\tplatformFamily: platformFamily(),\n\t\t\t\tplatformOs: platformOs(),\n\t\t\t\tuserAgent: \"codex-js\",\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate connectionRequestId(requestId: RequestId): ConnectionRequestId {\n\t\treturn {\n\t\t\tconnectionId: this.connectionId,\n\t\t\trequestId,\n\t\t};\n\t}\n\n\tprivate requestContext(requestId: RequestId): CodexAppServerRequestContext | undefined {\n\t\tif (!this.outgoing) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tconnectionId: this.connectionId,\n\t\t\toutgoing: this.outgoing,\n\t\t\trequestId: this.connectionRequestId(requestId),\n\t\t\tsession: this.session,\n\t\t};\n\t}\n}\n\nfunction isCodexAppServerDeferredResponse(\n\tvalue: unknown,\n): value is CodexAppServerDeferredResponse {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as CodexAppServerDeferredResponse)\n\t\t\t.__codexAppServerDeferredResponse === true\n\t);\n}\n\nfunction validateClientInfo(clientInfo: ClientInfo): void {\n\tif (!clientInfo.name || /[\\r\\n]/u.test(clientInfo.name)) {\n\t\tthrow invalidRequest(\n\t\t\t`Invalid clientInfo.name: '${clientInfo.name}'. Must be a valid HTTP header value.`,\n\t\t);\n\t}\n}\n\nfunction invalidRequest(message: string): CodexAppServerRequestError {\n\treturn new CodexAppServerRequestError(\n\t\t{ code: -32600, message } satisfies JSONRPCErrorError,\n\t\t400,\n\t);\n}\n\nfunction experimentalRequiredMessage(reason: string): string {\n\treturn `Experimental API capability is required for ${reason}.`;\n}\n\nfunction defaultConnectionId(): number {\n\treturn Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);\n}\n\nfunction platformFamily(): string {\n\tconst navigatorPlatform = (globalThis as { navigator?: { platform?: string } })\n\t\t.navigator?.platform;\n\tif (navigatorPlatform?.toLowerCase().includes(\"win\")) {\n\t\treturn \"windows\";\n\t}\n\treturn \"unix\";\n}\n\nfunction platformOs(): string {\n\tconst navigatorPlatform = (globalThis as { navigator?: { platform?: string } })\n\t\t.navigator?.platform?.toLowerCase();\n\tif (navigatorPlatform?.includes(\"mac\")) {\n\t\treturn \"macos\";\n\t}\n\tif (navigatorPlatform?.includes(\"win\")) {\n\t\treturn \"windows\";\n\t}\n\tif (navigatorPlatform?.includes(\"linux\")) {\n\t\treturn \"linux\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction appServerCollaborationModeMask(\n\tmask: CoreCollaborationModeMask,\n): CollaborationModeMask {\n\treturn {\n\t\tname: mask.name,\n\t\tmode: mask.mode ?? null,\n\t\tmodel: mask.model ?? null,\n\t\treasoning_effort:\n\t\t\tmask.reasoning_effort === undefined\n\t\t\t\t? null\n\t\t\t\t: (mask.reasoning_effort as CollaborationModeMask[\"reasoning_effort\"]),\n\t};\n}\n","import {\n\tSteerInputErrorKind,\n\tasThreadId,\n\ttype Session,\n\ttype Submission,\n\ttype ThreadId,\n\ttype UserInput as CoreUserInput,\n} from \"../../../core/src\";\nimport type { CollaborationMode } from \"../../../core/src/config-types\";\nimport type {\n\tThreadCompactStartParams,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n\tUserInput,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { AppServerEvent, JSONRPCErrorError } from \"../outgoing_message\";\nimport { CodexAppServerRequestError } from \"./request_errors\";\n\nexport type RuntimeSession = {\n\tabortController: AbortController | null;\n\trunPromise: Promise<unknown> | null;\n\tsession: Session;\n};\n\nexport type ProcessorEmit<Context> = (\n\tthreadId: ThreadId,\n\tevent: AppServerEvent,\n\tcontext?: Context,\n) => Promise<void>;\n\nexport type ProcessorCreateSession<Context> = (\n\tthreadId: ThreadId,\n\tparams:\n\t\t| ThreadStartParams\n\t\t| ThreadResumeParams\n\t\t| TurnStartParams\n\t\t| ThreadCompactStartParams,\n\tcontext?: Context,\n\tsubmission?: Submission,\n) => Promise<Session>;\n\nexport type TurnStartParamsWithClientMessageId = TurnStartParams & {\n\tclientMessageId?: string;\n};\n\nexport type TurnStartParamsWithCollaborationMode = TurnStartParams & {\n\tcollaborationMode?: CollaborationMode;\n\tcollaboration_mode?: CollaborationMode;\n};\n\nexport function appServerUserInputToCoreUserInput(input: UserInput): CoreUserInput {\n\tswitch (input.type) {\n\t\tcase \"text\":\n\t\t\treturn {\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: input.text,\n\t\t\t\ttext_elements: (input.text_elements ?? []).map((element) => ({\n\t\t\t\t\tbyte_range: element.byteRange,\n\t\t\t\t\tplaceholder: element.placeholder ?? undefined,\n\t\t\t\t})),\n\t\t\t};\n\t\tcase \"image\":\n\t\t\treturn { type: \"image\", image_url: input.url };\n\t\tcase \"localImage\":\n\t\t\treturn { type: \"local_image\", path: input.path };\n\t\tcase \"skill\":\n\t\t\treturn { type: \"skill\", name: input.name, path: input.path };\n\t\tcase \"mention\":\n\t\t\treturn { type: \"mention\", name: input.name, path: input.path };\n\t}\n}\n\nexport function threadIdFromStartParams(params: ThreadStartParams): ThreadId {\n\tconst maybeThreadId = (params as { threadId?: unknown }).threadId;\n\treturn asThreadId(typeof maybeThreadId === \"string\" ? maybeThreadId : defaultId());\n}\n\nexport function defaultId(): string {\n\tconst crypto = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n\treturn crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n}\n\nexport function valueOrNull<T>(value: T | null | undefined): T | null {\n\treturn value === undefined ? null : value;\n}\n\nexport function approvalPolicyString(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nexport function jsonRpcError(message: string, code: number, status: number): never {\n\tthrow new CodexAppServerRequestError(\n\t\t{ code, message } satisfies JSONRPCErrorError,\n\t\tstatus,\n\t);\n}\n\nexport function steerErrorCode(kind: SteerInputErrorKind): number {\n\tswitch (kind) {\n\t\tcase SteerInputErrorKind.EmptyInput:\n\t\t\treturn -32602;\n\t\tcase SteerInputErrorKind.NoActiveTurn:\n\t\t\treturn -32012;\n\t\tcase SteerInputErrorKind.ExpectedTurnMismatch:\n\t\t\treturn -32013;\n\t\tcase SteerInputErrorKind.ActiveTurnNotSteerable:\n\t\t\treturn -32015;\n\t}\n}\n","import type {\n\tMcpResourceReadParams,\n\tMcpResourceReadResponse,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tMcpServerRefreshResponse,\n\tMcpServerStatus as AppServerMcpServerStatus,\n\tMcpServerToolCallParams,\n\tMcpServerToolCallResponse,\n\tListMcpServerStatusParams,\n\tListMcpServerStatusResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { Resource } from \"../../../app-server-protocol/schema/typescript/Resource\";\nimport type { ResourceContent } from \"../../../app-server-protocol/schema/typescript/ResourceContent\";\nimport type { ResourceTemplate } from \"../../../app-server-protocol/schema/typescript/ResourceTemplate\";\nimport type { Tool } from \"../../../app-server-protocol/schema/typescript/Tool\";\nimport type { JsonValue } from \"../../../app-server-protocol/schema/typescript/serde_json/JsonValue\";\nimport {\n\tasThreadId,\n\tEmptyMcpConnectionManager,\n\ttype McpConnectionManager,\n\ttype McpResourceInfo,\n\ttype McpResourceTemplateInfo,\n\ttype McpServerStatus,\n\ttype McpToolInfo,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../../core/src\";\nimport type { McpServerToolCallResponse as CoreMcpServerToolCallResponse } from \"../../../core/src/mcp\";\nimport type { JSONRPCErrorError } from \"../outgoing_message\";\nimport { jsonRpcError } from \"./common\";\nimport { CodexAppServerRequestError } from \"./request_errors\";\nimport {\n\tcodexAppServerDeferredResponse,\n\ttype CodexAppServerDeferredResponse,\n\ttype CodexAppServerRequestContext,\n} from \"../message_processor\";\n\nconst MCP_TOOL_THREAD_ID_META_KEY = \"threadId\";\n\nexport type McpRequestProcessorOptions<Context> = {\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tmcpServerOauthLogin?: (input: {\n\t\tcontext?: Context;\n\t\tparams: McpServerOauthLoginParams;\n\t}) => McpServerOauthLoginResponse | Promise<McpServerOauthLoginResponse>;\n\treloadMcpServers?: (input: { context?: Context }) => void | Promise<void>;\n\trunInBackground?: (\n\t\tpromise: Promise<unknown>,\n\t\tcontext: { context?: Context },\n\t) => void;\n\tstore: ThreadStore;\n};\n\nexport class McpRequestProcessor<Context> {\n\tconstructor(private readonly options: McpRequestProcessorOptions<Context>) {}\n\n\tasync mcpServerRefresh(\n\t\t_params: undefined,\n\t\tcontext?: Context,\n\t): Promise<McpServerRefreshResponse> {\n\t\tawait this.options.reloadMcpServers?.({ context });\n\t\treturn {};\n\t}\n\n\tasync mcpServerStatusList(\n\t\tparams: ListMcpServerStatusParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<ListMcpServerStatusResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpServerStatusListResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpServerStatusListResponse(params);\n\t}\n\n\tprivate async mcpServerStatusListResponse(\n\t\tparams: ListMcpServerStatusParams,\n\t): Promise<ListMcpServerStatusResponse> {\n\t\tconst detail = params.detail ?? \"full\";\n\t\tconst statuses = await this.manager().list_server_statuses({ detail });\n\t\tconst total = statuses.length;\n\t\tconst limit = Math.min(Math.max(params.limit ?? total, 1), total);\n\t\tconst start = params.cursor ? parseCursor(params.cursor) : 0;\n\t\tif (start > total) {\n\t\t\tjsonRpcError(\n\t\t\t\t`cursor ${start} exceeds total MCP servers ${total}`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst end = Math.min(start + limit, total);\n\t\treturn {\n\t\t\tdata: statuses.slice(start, end).map((status) =>\n\t\t\t\tappServerMcpServerStatus(status, detail),\n\t\t\t),\n\t\t\tnextCursor: end < total ? String(end) : null,\n\t\t};\n\t}\n\n\tasync mcpResourceRead(\n\t\tparams: McpResourceReadParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpResourceReadResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpResourceReadResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpResourceReadResponse(params);\n\t}\n\n\tprivate async mcpResourceReadResponse(\n\t\tparams: McpResourceReadParams,\n\t): Promise<McpResourceReadResponse> {\n\t\tif (params.threadId) {\n\t\t\tawait this.loadThread(params.threadId);\n\t\t}\n\t\tconst response = await this.manager().read_resource({\n\t\t\tthread_id: params.threadId ? asThreadId(params.threadId) : null,\n\t\t\tserver_name: params.server,\n\t\t\turi: params.uri,\n\t\t});\n\t\treturn {\n\t\t\tcontents: response.contents.map((content) =>\n\t\t\t\tappServerResourceContent(content, params.uri),\n\t\t\t),\n\t\t};\n\t}\n\n\tasync mcpServerToolCall(\n\t\tparams: McpServerToolCallParams,\n\t\tcontext?: Context,\n\t\trequest?: CodexAppServerRequestContext,\n\t): Promise<McpServerToolCallResponse | CodexAppServerDeferredResponse> {\n\t\tif (request) {\n\t\t\tthis.runDeferred(request, context, () =>\n\t\t\t\tthis.mcpServerToolCallResponse(params),\n\t\t\t);\n\t\t\treturn codexAppServerDeferredResponse();\n\t\t}\n\t\treturn this.mcpServerToolCallResponse(params);\n\t}\n\n\tprivate async mcpServerToolCallResponse(\n\t\tparams: McpServerToolCallParams,\n\t): Promise<McpServerToolCallResponse> {\n\t\tconst threadId = await this.loadThread(params.threadId);\n\t\tconst response = await this.manager().call_tool({\n\t\t\targuments: params.arguments,\n\t\t\tmeta: with_mcp_tool_call_thread_id_meta(params._meta, threadId),\n\t\t\tserver_name: params.server,\n\t\t\tthread_id: threadId,\n\t\t\ttool_name: params.tool,\n\t\t});\n\t\treturn appServerMcpToolCallResponse(response);\n\t}\n\n\tasync mcpServerOauthLogin(\n\t\tparams: McpServerOauthLoginParams,\n\t\tcontext?: Context,\n\t): Promise<McpServerOauthLoginResponse> {\n\t\tif (!this.options.mcpServerOauthLogin) {\n\t\t\tjsonRpcError(\"MCP OAuth login is unavailable.\", -32600, 400);\n\t\t}\n\t\treturn this.options.mcpServerOauthLogin({ context, params });\n\t}\n\n\tprivate manager(): McpConnectionManager {\n\t\treturn this.options.mcpConnectionManager ?? EmptyMcpConnectionManager.instance;\n\t}\n\n\tprivate runDeferred<T>(\n\t\trequest: CodexAppServerRequestContext,\n\t\tcontext: Context | undefined,\n\t\twork: () => Promise<T>,\n\t): void {\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait request.outgoing.sendResponse(\n\t\t\t\t\trequest.requestId,\n\t\t\t\t\tawait work(),\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tawait request.outgoing.sendError(\n\t\t\t\t\trequest.requestId,\n\t\t\t\t\tjsonRpcErrorFromUnknown(error),\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\t\t})();\n\t\tif (this.options.runInBackground) {\n\t\t\tthis.options.runInBackground(promise, { context });\n\t\t\treturn;\n\t\t}\n\t\tvoid promise;\n\t}\n\n\tprivate async loadThread(threadIdString: string): Promise<ThreadId> {\n\t\tlet threadId: ThreadId;\n\t\ttry {\n\t\t\tthreadId = asThreadId(threadIdString);\n\t\t} catch (error) {\n\t\t\tjsonRpcError(\n\t\t\t\t`invalid thread id: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tawait this.options.store.readThread({\n\t\t\t\tthread_id: threadId,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tinclude_history: false,\n\t\t\t});\n\t\t} catch {\n\t\t\tjsonRpcError(`thread not found: ${threadId}`, -32600, 400);\n\t\t}\n\t\treturn threadId;\n\t}\n}\n\nfunction parseCursor(cursor: string): number {\n\tif (!/^\\d+$/u.test(cursor)) {\n\t\tjsonRpcError(`invalid cursor: ${cursor}`, -32600, 400);\n\t}\n\tconst parsed = Number.parseInt(cursor, 10);\n\treturn parsed;\n}\n\nfunction appServerMcpServerStatus(\n\tstatus: McpServerStatus,\n\tdetail: ListMcpServerStatusParams[\"detail\"],\n): AppServerMcpServerStatus {\n\treturn {\n\t\tauthStatus: status.authStatus ?? status.auth_status ?? \"unsupported\",\n\t\tname: status.name,\n\t\tresources:\n\t\t\tdetail === \"toolsAndAuthOnly\"\n\t\t\t\t? []\n\t\t\t\t: (status.resources ?? []).map(appServerResource),\n\t\tresourceTemplates:\n\t\t\tdetail === \"toolsAndAuthOnly\"\n\t\t\t\t? []\n\t\t\t\t: (status.resource_templates ?? []).map(appServerResourceTemplate),\n\t\ttools: Object.fromEntries(\n\t\t\t(status.tools ?? []).map((tool) => [tool.name, appServerTool(tool)]),\n\t\t),\n\t};\n}\n\nfunction appServerTool(tool: McpToolInfo): Tool {\n\treturn omitUndefined({\n\t\tname: tool.name,\n\t\ttitle: tool.title ?? undefined,\n\t\tdescription: tool.description ?? undefined,\n\t\tinputSchema: (tool.input_schema ?? { type: \"object\" }) as JsonValue,\n\t});\n}\n\nfunction appServerResource(resource: McpResourceInfo): Resource {\n\treturn omitUndefined({\n\t\turi: resource.uri,\n\t\tname: resource.name ?? resource.uri,\n\t\tdescription: resource.description ?? undefined,\n\t\tmimeType: resource.mime_type ?? undefined,\n\t});\n}\n\nfunction appServerResourceTemplate(\n\ttemplate: McpResourceTemplateInfo,\n): ResourceTemplate {\n\treturn omitUndefined({\n\t\turiTemplate: template.uri_template,\n\t\tname: template.name ?? template.uri_template,\n\t\ttitle: undefined,\n\t\tdescription: template.description ?? undefined,\n\t\tmimeType: template.mime_type ?? undefined,\n\t});\n}\n\nfunction appServerResourceContent(\n\tcontent: unknown,\n\tfallbackUri: string,\n): ResourceContent {\n\tif (!isRecord(content)) {\n\t\treturn { uri: fallbackUri, text: String(content) };\n\t}\n\tconst uri = typeof content.uri === \"string\" ? content.uri : fallbackUri;\n\tconst mimeType =\n\t\ttypeof content.mimeType === \"string\"\n\t\t\t? content.mimeType\n\t\t\t: typeof content.mime_type === \"string\"\n\t\t\t\t? content.mime_type\n\t\t\t\t: undefined;\n\tif (typeof content.blob === \"string\") {\n\t\treturn omitUndefined({\n\t\t\turi,\n\t\t\tmimeType,\n\t\t\tblob: content.blob,\n\t\t\t_meta: content._meta as JsonValue | undefined,\n\t\t});\n\t}\n\treturn omitUndefined({\n\t\turi,\n\t\tmimeType,\n\t\ttext: typeof content.text === \"string\" ? content.text : JSON.stringify(content),\n\t\t_meta: content._meta as JsonValue | undefined,\n\t});\n}\n\nfunction appServerMcpToolCallResponse(\n\tresponse: CoreMcpServerToolCallResponse,\n): McpServerToolCallResponse {\n\tconst output = response.output;\n\tconst record = isRecord(output) ? output : {};\n\tconst structuredContent =\n\t\trecord.structuredContent ?? record.structured_content ?? undefined;\n\tconst isError = record.isError ?? record.is_error ?? undefined;\n\treturn omitUndefined({\n\t\tcontent: Array.isArray(record.content)\n\t\t\t? (record.content as JsonValue[])\n\t\t\t: [],\n\t\tstructuredContent: structuredContent as JsonValue | undefined,\n\t\tisError: typeof isError === \"boolean\" ? isError : undefined,\n\t\t_meta: record._meta as JsonValue | undefined,\n\t});\n}\n\nfunction with_mcp_tool_call_thread_id_meta(\n\tmeta: JsonValue | undefined,\n\tthreadId: ThreadId,\n): unknown {\n\tif (meta === undefined) {\n\t\treturn { [MCP_TOOL_THREAD_ID_META_KEY]: threadId };\n\t}\n\tif (isRecord(meta)) {\n\t\treturn {\n\t\t\t...meta,\n\t\t\t[MCP_TOOL_THREAD_ID_META_KEY]: threadId,\n\t\t};\n\t}\n\treturn meta;\n}\n\nfunction jsonRpcErrorFromUnknown(error: unknown): JSONRPCErrorError {\n\tif (error instanceof CodexAppServerRequestError) {\n\t\treturn error.error;\n\t}\n\treturn {\n\t\tcode: -32000,\n\t\tmessage:\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"Codex App Server request failed.\",\n\t};\n}\n\nfunction omitUndefined<T extends Record<string, unknown>>(record: T): T {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t) as T;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ServerNotification } from \"../../../app-server-protocol/schema/typescript\";\nimport type {\n\tThread,\n\tThreadTokenUsageUpdatedNotification,\n\tTurn,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport { threadTokenUsageFromTokenUsageInfo } from \"../../../app-server-protocol/src/protocol/event-mapping\";\nimport type { ThreadId } from \"../../../core/src/ids\";\nimport type {\n\tRolloutItem,\n\tTokenUsageInfo,\n} from \"../../../core/src/protocol\";\nimport { ThreadHistoryBuilder } from \"../../../core/src/thread-history-builder\";\nimport { appServerTurnFromCoreTurn } from \"../../../app-server-protocol/src/protocol/thread-resume\";\n\n/// Identifies the turn that was active when a TokenCount record appeared.\nexport type TokenUsageTurnOwner = {\n\tid: string;\n\tposition: number | null;\n};\n\nexport function latest_token_usage_turn_id_from_rollout_items(\n\trolloutItems: readonly RolloutItem[],\n\tturns: readonly Turn[],\n): string | null {\n\tconst builder = new ThreadHistoryBuilder();\n\tlet tokenUsageTurnOwner: TokenUsageTurnOwner | null = null;\n\n\tfor (const item of rolloutItems) {\n\t\tif (item.type === \"event_msg\" && item.payload.type === \"token_count\") {\n\t\t\tconst turn = builder.active_turn_snapshot();\n\t\t\ttokenUsageTurnOwner = turn\n\t\t\t\t? {\n\t\t\t\t\t\tid: appServerTurnFromCoreTurn(turn).id,\n\t\t\t\t\t\tposition: builder.active_turn_position(),\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\t}\n\t\tbuilder.handle_rollout_item(item);\n\t}\n\n\tif (!tokenUsageTurnOwner) {\n\t\treturn null;\n\t}\n\tif (turns.some((turn) => turn.id === tokenUsageTurnOwner.id)) {\n\t\treturn tokenUsageTurnOwner.id;\n\t}\n\treturn tokenUsageTurnOwner.position === null\n\t\t? null\n\t\t: (turns[tokenUsageTurnOwner.position]?.id ?? null);\n}\n\nexport function latest_token_usage_turn_id(thread: Thread): string {\n\treturn (\n\t\t[...thread.turns]\n\t\t\t.reverse()\n\t\t\t.find((turn) => turn.status === \"completed\" || turn.status === \"failed\")\n\t\t\t?.id ??\n\t\tthread.turns.at(-1)?.id ??\n\t\t\"\"\n\t);\n}\n\nexport function last_token_info_from_rollout_items(\n\trolloutItems: readonly RolloutItem[],\n): TokenUsageInfo | null {\n\tfor (let index = rolloutItems.length - 1; index >= 0; index -= 1) {\n\t\tconst item = rolloutItems[index];\n\t\tif (\n\t\t\titem?.type === \"event_msg\" &&\n\t\t\titem.payload.type === \"token_count\" &&\n\t\t\titem.payload.info\n\t\t) {\n\t\t\treturn item.payload.info;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function thread_token_usage_updated_notification_from_info(input: {\n\tthread: Thread;\n\tthreadId: ThreadId | string;\n\ttokenUsageInfo: TokenUsageInfo;\n\ttokenUsageTurnId?: string | null;\n}): ServerNotification {\n\tconst params: ThreadTokenUsageUpdatedNotification = {\n\t\tthreadId: String(input.threadId),\n\t\tturnId: input.tokenUsageTurnId ?? latest_token_usage_turn_id(input.thread),\n\t\ttokenUsage: threadTokenUsageFromTokenUsageInfo(input.tokenUsageInfo),\n\t};\n\treturn {\n\t\tmethod: \"thread/tokenUsage/updated\",\n\t\tparams,\n\t};\n}\n\nexport function thread_token_usage_updated_notification_from_rollout_items(input: {\n\trolloutItems: readonly RolloutItem[];\n\tthread: Thread;\n\tthreadId: ThreadId | string;\n}): ServerNotification | null {\n\tconst tokenUsageInfo = last_token_info_from_rollout_items(input.rolloutItems);\n\tif (!tokenUsageInfo) {\n\t\treturn null;\n\t}\n\treturn thread_token_usage_updated_notification_from_info({\n\t\tthread: input.thread,\n\t\tthreadId: input.threadId,\n\t\ttokenUsageInfo,\n\t\ttokenUsageTurnId: latest_token_usage_turn_id_from_rollout_items(\n\t\t\tinput.rolloutItems,\n\t\t\tinput.thread.turns,\n\t\t),\n\t});\n}\n","import {\n\tBaseInstructions,\n\tLiveThread,\n\tThreadEventPersistenceMode,\n\tThreadMemoryMode,\n\tasThreadId,\n\ttype CreateThreadParams,\n\ttype DynamicToolSpec,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../../core/src\";\nimport {\n\tSortDirection as StoreSortDirection,\n\tThreadSortKey as StoreThreadSortKey,\n} from \"../../../core/src/thread-store/types\";\nimport {\n\tbuildThreadResumeResponseFromHistory,\n\tthreadHistoryToAppServerThread,\n} from \"../../../app-server-protocol/src/protocol/thread-resume\";\nimport {\n\tthread_token_usage_updated_notification_from_rollout_items,\n} from \"./token_usage_replay\";\nimport type {\n\tThreadArchiveParams,\n\tThreadArchiveResponse,\n\tThreadCompactStartParams,\n\tThreadCompactStartResponse,\n\tThreadListParams,\n\tThreadListResponse,\n\tThreadMetadataUpdateParams,\n\tThreadMetadataUpdateResponse,\n\tThreadReadParams,\n\tThreadReadResponse,\n\tThreadResumeParams,\n\tThreadResumeResponse,\n\tThreadSetNameParams,\n\tThreadSetNameResponse,\n\tThreadStartParams,\n\tThreadStartResponse,\n\tThreadUnarchiveParams,\n\tThreadUnarchiveResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { StoredThread, StoredThreadHistory } from \"../../../core/src/thread-store/types\";\nimport type { CodexSessionTaskRunner } from \"../session_task_runner\";\nimport {\n\tdefaultId,\n\tjsonRpcError,\n\tthreadIdFromStartParams,\n\ttype ProcessorCreateSession,\n\ttype ProcessorEmit,\n\ttype RuntimeSession,\n} from \"./common\";\n\nconst THREAD_LIST_DEFAULT_LIMIT = 25;\nconst THREAD_LIST_MAX_LIMIT = 100;\n\nexport type ThreadRequestProcessorOptions<Context> = {\n\tbuildCreateThreadParams?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => CreateThreadParams | Promise<CreateThreadParams>;\n\tcreateSession: ProcessorCreateSession<Context>;\n\temit: ProcessorEmit<Context>;\n\tresolveDynamicTools?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => DynamicToolSpec[] | Promise<DynamicToolSpec[]>;\n\tsessions: Map<ThreadId, RuntimeSession>;\n\tstore: ThreadStore;\n\ttaskRunner: CodexSessionTaskRunner<Context>;\n};\n\nexport class ThreadRequestProcessor<Context> {\n\tconstructor(private readonly options: ThreadRequestProcessorOptions<Context>) {}\n\n\tasync threadStart(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadStartResponse> {\n\t\tconst liveThread = await this.ensureLiveThread(params, context);\n\t\tconst response = await this.readThreadResponse(liveThread.threadId);\n\t\tawait this.options.emit(\n\t\t\tliveThread.threadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/started\",\n\t\t\t\t\tparams: { thread: response.thread },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn response;\n\t}\n\n\tasync threadResume(\n\t\tparams: ThreadResumeParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadResumeResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst { history, response } = await this.readThreadResponseWithHistory(threadId);\n\t\tconst replay = thread_token_usage_updated_notification_from_rollout_items({\n\t\t\trolloutItems: history.items,\n\t\t\tthread: response.thread,\n\t\t\tthreadId,\n\t\t});\n\t\tif (replay) {\n\t\t\tawait this.options.emit(threadId, {\n\t\t\t\tnotification: replay,\n\t\t\t\ttype: \"server_notification\",\n\t\t\t}, context);\n\t\t}\n\t\treturn response;\n\t}\n\n\tasync threadCompactStart(\n\t\tparams: ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadCompactStartResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tlet runtimeSession = this.options.sessions.get(threadId);\n\t\tif (runtimeSession?.session.activeTurn) {\n\t\t\tthrow jsonRpcError(\"Wait for the active turn to finish before compacting.\", -32014, 409);\n\t\t}\n\t\tconst submission: Submission = {\n\t\t\tid: `compact-${defaultId()}`,\n\t\t\top: { type: \"compact\" },\n\t\t};\n\t\tif (!runtimeSession) {\n\t\t\tconst session = await this.options.createSession(threadId, params, context, submission);\n\t\t\truntimeSession = {\n\t\t\t\tabortController: null,\n\t\t\t\trunPromise: null,\n\t\t\t\tsession,\n\t\t\t};\n\t\t\tthis.options.sessions.set(threadId, runtimeSession);\n\t\t}\n\t\tawait this.options.taskRunner.startCompactTask({\n\t\t\tcontext,\n\t\t\tparams,\n\t\t\truntimeSession,\n\t\t\tsubmission,\n\t\t\tthreadId,\n\t\t});\n\t\treturn {};\n\t}\n\n\tasync threadList(params: ThreadListParams): Promise<ThreadListResponse> {\n\t\tconst pageSize = Math.max(\n\t\t\t1,\n\t\t\tMath.min(params.limit ?? THREAD_LIST_DEFAULT_LIMIT, THREAD_LIST_MAX_LIMIT),\n\t\t);\n\t\tconst page = await this.options.store.listThreads({\n\t\t\tallowed_sources: params.sourceKinds?.length ? params.sourceKinds : [],\n\t\t\tarchived: params.archived ?? false,\n\t\t\tcursor: params.cursor ?? null,\n\t\t\tcwd_filters: cwdFilters(params.cwd),\n\t\t\tmodel_providers: params.modelProviders ?? null,\n\t\t\tpage_size: pageSize,\n\t\t\tsearch_term: params.searchTerm ?? null,\n\t\t\tsort_direction:\n\t\t\t\tparams.sortDirection === \"asc\"\n\t\t\t\t\t? StoreSortDirection.Asc\n\t\t\t\t\t: StoreSortDirection.Desc,\n\t\t\tsort_key:\n\t\t\t\tparams.sortKey === \"updated_at\"\n\t\t\t\t\t? StoreThreadSortKey.UpdatedAt\n\t\t\t\t\t: StoreThreadSortKey.CreatedAt,\n\t\t\tuse_state_db_only: params.useStateDbOnly ?? false,\n\t\t});\n\t\treturn {\n\t\t\tbackwardsCursor: null,\n\t\t\tdata: page.items.map((thread) =>\n\t\t\t\tthreadHistoryToAppServerThread({\n\t\t\t\t\thistory: { items: [], thread_id: thread.thread_id },\n\t\t\t\t\tthread,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tnextCursor: page.next_cursor ?? null,\n\t\t};\n\t}\n\n\tasync threadRead(params: ThreadReadParams): Promise<ThreadReadResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst storedThread = await this.options.store.readThread({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: true,\n\t\t\tinclude_history: params.includeTurns,\n\t\t});\n\t\tconst history = params.includeTurns\n\t\t\t? storedThread.history ??\n\t\t\t\t(await this.options.store.loadHistory({\n\t\t\t\t\tthread_id: threadId,\n\t\t\t\t\tinclude_archived: true,\n\t\t\t\t}))\n\t\t\t: { items: [], thread_id: threadId };\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory,\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync threadNameSet(\n\t\tparams: ThreadSetNameParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadSetNameResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst name = normalizeThreadName(params.name);\n\t\tif (!name) {\n\t\t\tjsonRpcError(\"thread name must not be empty\", -32600, 400);\n\t\t}\n\t\tawait this.options.store.updateThreadMetadata({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t\tpatch: { name },\n\t\t});\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/name/updated\",\n\t\t\t\t\tparams: { threadId, threadName: name },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {};\n\t}\n\n\tasync threadArchive(\n\t\tparams: ThreadArchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadArchiveResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tawait this.options.store.archiveThread({ thread_id: threadId });\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/archived\",\n\t\t\t\t\tparams: { threadId },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {};\n\t}\n\n\tasync threadUnarchive(\n\t\tparams: ThreadUnarchiveParams,\n\t\tcontext?: Context,\n\t): Promise<ThreadUnarchiveResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst storedThread = await this.options.store.unarchiveThread({\n\t\t\tthread_id: threadId,\n\t\t});\n\t\tawait this.options.emit(\n\t\t\tthreadId,\n\t\t\t{\n\t\t\t\ttype: \"server_notification\",\n\t\t\t\tnotification: {\n\t\t\t\t\tmethod: \"thread/unarchived\",\n\t\t\t\t\tparams: { threadId },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcontext,\n\t\t);\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory: { items: [], thread_id: threadId },\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tasync threadMetadataUpdate(\n\t\tparams: ThreadMetadataUpdateParams,\n\t): Promise<ThreadMetadataUpdateResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tif (\n\t\t\t!params.gitInfo ||\n\t\t\t(params.gitInfo.sha === undefined &&\n\t\t\t\tparams.gitInfo.branch === undefined &&\n\t\t\t\tparams.gitInfo.originUrl === undefined)\n\t\t) {\n\t\t\tjsonRpcError(\"gitInfo must include at least one field\", -32600, 400);\n\t\t}\n\t\tconst storedThread = await this.options.store.updateThreadMetadata({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: true,\n\t\t\tpatch: {\n\t\t\t\tgit_info: {\n\t\t\t\t\tbranch: normalizeOptionalGitField(params.gitInfo.branch, \"gitInfo.branch\"),\n\t\t\t\t\torigin_url: normalizeOptionalGitField(\n\t\t\t\t\t\tparams.gitInfo.originUrl,\n\t\t\t\t\t\t\"gitInfo.originUrl\",\n\t\t\t\t\t),\n\t\t\t\t\tsha: normalizeOptionalGitField(params.gitInfo.sha, \"gitInfo.sha\"),\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\tthread: threadHistoryToAppServerThread({\n\t\t\t\thistory: { items: [], thread_id: threadId },\n\t\t\t\tthread: storedThread,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate async readThreadResponse(\n\t\tthreadId: ThreadId,\n\t): Promise<ThreadStartResponse> {\n\t\treturn (await this.readThreadResponseWithHistory(threadId)).response;\n\t}\n\n\tprivate async readThreadResponseWithHistory(\n\t\tthreadId: ThreadId,\n\t): Promise<{\n\t\thistory: StoredThreadHistory;\n\t\tresponse: ThreadStartResponse;\n\t\tthread: StoredThread;\n\t}> {\n\t\tconst thread = await this.options.store.readThread({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t\tinclude_history: false,\n\t\t});\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\treturn {\n\t\t\thistory,\n\t\t\tresponse: buildThreadResumeResponseFromHistory({ history, thread }),\n\t\t\tthread,\n\t\t};\n\t}\n\n\tprivate async createThreadParams(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<CreateThreadParams> {\n\t\tconst threadId = threadIdFromStartParams(params);\n\t\tif (this.options.buildCreateThreadParams) {\n\t\t\treturn this.options.buildCreateThreadParams({ context, params, threadId });\n\t\t}\n\t\tconst dynamicTools =\n\t\t\t(await this.options.resolveDynamicTools?.({ context, params, threadId })) ?? [];\n\t\treturn {\n\t\t\tbase_instructions: {\n\t\t\t\ttext: params.baseInstructions ?? BaseInstructions.default().text,\n\t\t\t},\n\t\t\tdynamic_tools: dynamicTools,\n\t\t\tevent_persistence_mode: ThreadEventPersistenceMode.Limited,\n\t\t\tmetadata: {\n\t\t\t\tcwd: params.cwd ?? \"/\",\n\t\t\t\tmemory_mode: ThreadMemoryMode.Disabled,\n\t\t\t\tmodel: params.model ?? \"gpt-5.5\",\n\t\t\t\tmodel_provider: params.modelProvider ?? \"openai\",\n\t\t\t},\n\t\t\tsource: \"appServer\",\n\t\t\tthread_id: threadId,\n\t\t\tthread_source:\n\t\t\t\ttypeof params.threadSource === \"string\" ? params.threadSource : null,\n\t\t};\n\t}\n\n\tprivate async ensureLiveThread(\n\t\tparams: ThreadStartParams,\n\t\tcontext?: Context,\n\t): Promise<LiveThread> {\n\t\tconst createParams = await this.createThreadParams(params, context);\n\t\tvalidateDynamicToolSpecs(createParams.dynamic_tools);\n\t\ttry {\n\t\t\tawait this.options.store.readThread({\n\t\t\t\tthread_id: createParams.thread_id,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tinclude_history: false,\n\t\t\t});\n\t\t\treturn LiveThread.resume(this.options.store, {\n\t\t\t\tthread_id: createParams.thread_id,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tmetadata: createParams.metadata,\n\t\t\t\tevent_persistence_mode: createParams.event_persistence_mode,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn LiveThread.create(this.options.store, createParams);\n\t\t}\n\t}\n}\n\nfunction validateDynamicToolSpecs(tools: readonly DynamicToolSpec[]): void {\n\tfor (const tool of tools) {\n\t\tif (tool.defer_loading && !tool.namespace) {\n\t\t\tjsonRpcError(\n\t\t\t\t`Dynamic tool ${tool.name} uses defer_loading and must include a namespace.`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst invalidName = invalidResponsesApiToolName(tool.name)\n\t\t\t? tool.name\n\t\t\t: tool.namespace && invalidResponsesApiToolName(tool.namespace)\n\t\t\t\t? tool.namespace\n\t\t\t\t: null;\n\t\tif (invalidName) {\n\t\t\tjsonRpcError(\n\t\t\t\t`Dynamic tool ${invalidName} is not supported by the Responses API. Tool names and namespaces may only contain letters, numbers, underscores, and hyphens.`,\n\t\t\t\t-32600,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction invalidResponsesApiToolName(value: string): boolean {\n\treturn !/^[A-Za-z0-9_-]+$/.test(value);\n}\n\nfunction cwdFilters(value: ThreadListParams[\"cwd\"]): string[] | null {\n\tif (typeof value === \"string\") {\n\t\treturn [value];\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\treturn null;\n}\n\nfunction normalizeThreadName(value: string): string | null {\n\tconst name = value.trim().replace(/\\s+/gu, \" \");\n\treturn name ? name : null;\n}\n\nfunction normalizeOptionalGitField(\n\tvalue: string | null | undefined,\n\tfield: string,\n): string | null | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn value;\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\tjsonRpcError(`${field} must not be empty`, -32600, 400);\n\t}\n\treturn trimmed;\n}\n","import {\n\tSteerInputError,\n\tasThreadId,\n\ttype Submission,\n\ttype ThreadId,\n} from \"../../../core/src\";\nimport { normalizeCollaborationMode } from \"../../../core/src/collaboration-mode-presets\";\nimport type {\n\tTurnInterruptParams,\n\tTurnInterruptResponse,\n\tTurnStartParams,\n\tTurnStartResponse,\n\tTurnSteerParams,\n\tTurnSteerResponse,\n} from \"../../../app-server-protocol/schema/typescript/v2\";\nimport type { CodexSessionTaskRunner } from \"../session_task_runner\";\nimport {\n\tappServerUserInputToCoreUserInput,\n\tapprovalPolicyString,\n\tdefaultId,\n\tjsonRpcError,\n\tsteerErrorCode,\n\tvalueOrNull,\n\ttype ProcessorCreateSession,\n\ttype RuntimeSession,\n\ttype TurnStartParamsWithClientMessageId,\n\ttype TurnStartParamsWithCollaborationMode,\n} from \"./common\";\n\nexport type TurnRequestProcessorOptions<Context> = {\n\tcreateSession: ProcessorCreateSession<Context>;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\tsessions: Map<ThreadId, RuntimeSession>;\n\ttaskRunner: CodexSessionTaskRunner<Context>;\n};\n\nexport class TurnRequestProcessor<Context> {\n\tconstructor(private readonly options: TurnRequestProcessorOptions<Context>) {}\n\n\tasync turnStart(\n\t\tparams: TurnStartParams,\n\t\tcontext?: Context,\n\t): Promise<TurnStartResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst input = params.input.map(appServerUserInputToCoreUserInput);\n\t\tconst collaborationModeInput =\n\t\t\t(params as TurnStartParamsWithCollaborationMode).collaborationMode ??\n\t\t\t(params as TurnStartParamsWithCollaborationMode).collaboration_mode;\n\t\tconst collaborationMode = collaborationModeInput\n\t\t\t? normalizeCollaborationMode({\n\t\t\t\t\tcollaborationMode: collaborationModeInput,\n\t\t\t\t\tmodel: valueOrNull(params.model) ?? \"gpt-5.5\",\n\t\t\t\t\treasoningEffort: valueOrNull(params.effort) ?? null,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tconst submission: Submission = {\n\t\t\tid:\n\t\t\t\t(params as TurnStartParamsWithClientMessageId).clientMessageId ??\n\t\t\t\tdefaultId(),\n\t\t\top: {\n\t\t\t\ttype: \"user_input_with_turn_context\",\n\t\t\t\titems: input,\n\t\t\t\tcwd: valueOrNull(params.cwd) ?? undefined,\n\t\t\t\tapproval_policy: approvalPolicyString(params.approvalPolicy) ?? undefined,\n\t\t\t\tapprovals_reviewer: valueOrNull(params.approvalsReviewer) ?? undefined,\n\t\t\t\tsandbox_policy: valueOrNull(params.sandboxPolicy) ?? undefined,\n\t\t\t\tmodel: valueOrNull(params.model) ?? undefined,\n\t\t\t\teffort: valueOrNull(params.effort) ?? undefined,\n\t\t\t\tsummary: valueOrNull(params.summary) ?? undefined,\n\t\t\t\tservice_tier: valueOrNull(params.serviceTier) ?? undefined,\n\t\t\t\tcollaboration_mode: collaborationMode,\n\t\t\t\tpersonality: valueOrNull(params.personality) ?? undefined,\n\t\t\t\tfinal_output_json_schema: valueOrNull(params.outputSchema) ?? undefined,\n\t\t\t},\n\t\t};\n\t\tconst runtimeSession = await this.sessionForTurn(threadId, params, submission, context);\n\t\tif (runtimeSession.session.activeTurn) {\n\t\t\tthrow jsonRpcError(\"A Codex turn is already active for this thread.\", -32011, 409);\n\t\t}\n\t\tconst turn = await this.options.taskRunner.startRegularTask({\n\t\t\tcontext,\n\t\t\titems: input,\n\t\t\tparams,\n\t\t\truntimeSession,\n\t\t\tsubmission,\n\t\t\tthreadId,\n\t\t});\n\t\treturn {\n\t\t\tturn: {\n\t\t\t\tid: turn.sub_id,\n\t\t\t\titems: [],\n\t\t\t\titemsView: \"notLoaded\",\n\t\t\t\tstatus: \"inProgress\",\n\t\t\t\terror: null,\n\t\t\t\tstartedAt: Math.floor(Date.now() / 1000),\n\t\t\t\tcompletedAt: null,\n\t\t\t\tdurationMs: null,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync turnSteer(\n\t\tparams: TurnSteerParams,\n\t\tcontext?: Context,\n\t): Promise<TurnSteerResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst runtimeSession = this.options.sessions.get(threadId);\n\t\tif (!runtimeSession) {\n\t\t\tthrow jsonRpcError(\"No active Codex turn is available for steering.\", -32012, 409);\n\t\t}\n\t\ttry {\n\t\t\tconst turnId = await runtimeSession.session.steer_input(\n\t\t\t\tparams.input.map(appServerUserInputToCoreUserInput),\n\t\t\t\tparams.expectedTurnId,\n\t\t\t);\n\t\t\treturn { turnId };\n\t\t} catch (error) {\n\t\t\tif (error instanceof SteerInputError) {\n\t\t\t\tthrow jsonRpcError(error.message, steerErrorCode(error.kind), 409);\n\t\t\t}\n\t\t\tthis.options.onRuntimeError?.(error, { context, threadId });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync turnInterrupt(params: TurnInterruptParams): Promise<TurnInterruptResponse> {\n\t\tconst threadId = asThreadId(params.threadId);\n\t\tconst runtimeSession = this.options.sessions.get(threadId);\n\t\tif (!runtimeSession?.session.activeTurn) {\n\t\t\treturn {};\n\t\t}\n\t\tconst activeTask = runtimeSession.session.activeTurn.firstTask();\n\t\tif (activeTask && activeTask.sub_id !== params.turnId) {\n\t\t\tthrow jsonRpcError(\n\t\t\t\t`Expected active turn ${params.turnId}, but current active turn is ${activeTask.sub_id}.`,\n\t\t\t\t-32013,\n\t\t\t\t409,\n\t\t\t);\n\t\t}\n\t\truntimeSession.abortController?.abort();\n\t\tawait runtimeSession.session.abortActiveTurn(\"interrupted\");\n\t\treturn {};\n\t}\n\n\tprivate async sessionForTurn(\n\t\tthreadId: ThreadId,\n\t\tparams: TurnStartParams,\n\t\tsubmission: Submission,\n\t\tcontext?: Context,\n\t): Promise<RuntimeSession> {\n\t\tconst existing = this.options.sessions.get(threadId);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst session = await this.options.createSession(threadId, params, context, submission);\n\t\tconst runtimeSession: RuntimeSession = {\n\t\t\tabortController: null,\n\t\t\trunPromise: null,\n\t\t\tsession,\n\t\t};\n\t\tthis.options.sessions.set(threadId, runtimeSession);\n\t\treturn runtimeSession;\n\t}\n}\n","import type { DynamicToolCallResponse } from \"../../app-server-protocol/schema/typescript/v2\";\nimport type {\n\tDynamicToolCallOutputContentItem as CoreDynamicToolCallOutputContentItem,\n\tDynamicToolResponse as CoreDynamicToolResponse,\n} from \"../../core/src/protocol/dynamic_tools\";\n\nexport function coreDynamicToolResponseFromAppServerResponse(\n\tvalue: unknown,\n): CoreDynamicToolResponse {\n\tconst response = decodeDynamicToolCallResponse(value);\n\treturn {\n\t\tcontent_items: response.contentItems.map(coreDynamicToolCallOutputContentItem),\n\t\tsuccess: response.success,\n\t};\n}\n\nexport function decodeDynamicToolCallResponse(\n\tvalue: unknown,\n): DynamicToolCallResponse {\n\tif (!isDynamicToolCallResponse(value)) {\n\t\treturn fallbackDynamicToolCallResponse(\"dynamic tool response was invalid\");\n\t}\n\treturn value;\n}\n\nexport function fallbackDynamicToolCallResponse(\n\tmessage: string,\n): DynamicToolCallResponse {\n\treturn {\n\t\tcontentItems: [{ text: message, type: \"inputText\" }],\n\t\tsuccess: false,\n\t};\n}\n\nfunction coreDynamicToolCallOutputContentItem(\n\titem: DynamicToolCallResponse[\"contentItems\"][number],\n): CoreDynamicToolCallOutputContentItem {\n\tswitch (item.type) {\n\t\tcase \"inputText\":\n\t\t\treturn { text: item.text, type: \"inputText\" };\n\t\tcase \"inputImage\":\n\t\t\treturn { imageUrl: item.imageUrl, type: \"inputImage\" };\n\t}\n}\n\nfunction isDynamicToolCallResponse(\n\tvalue: unknown,\n): value is DynamicToolCallResponse {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst candidate = value as DynamicToolCallResponse;\n\treturn (\n\t\ttypeof candidate.success === \"boolean\" &&\n\t\tArray.isArray(candidate.contentItems) &&\n\t\tcandidate.contentItems.every(isDynamicToolCallOutputContentItem)\n\t);\n}\n\nfunction isDynamicToolCallOutputContentItem(\n\tvalue: unknown,\n): value is DynamicToolCallResponse[\"contentItems\"][number] {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst item = value as DynamicToolCallResponse[\"contentItems\"][number];\n\tif (item.type === \"inputText\") {\n\t\treturn typeof item.text === \"string\";\n\t}\n\tif (item.type === \"inputImage\") {\n\t\treturn typeof item.imageUrl === \"string\";\n\t}\n\treturn false;\n}\n","import type {\n\tRequestId,\n\tServerRequest,\n} from \"../../app-server-protocol/schema/typescript\";\nimport type {\n\tDynamicToolCallResponse,\n\tMcpServerElicitationRequestResponse,\n\tPermissionsRequestApprovalResponse,\n\tToolRequestUserInputResponse,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport type { Submission } from \"../../core/src/protocol\";\nimport { coreDynamicToolResponseFromAppServerResponse } from \"./dynamic_tools\";\nimport type { JSONRPCErrorError } from \"../../app-server-client/src/lib\";\n\nexport type ServerRequestResponseTarget =\n\t| { responseId: string; type: \"user_input\" }\n\t| { callId: string; type: \"request_permissions\" }\n\t| { callId: string; type: \"dynamic_tool\" }\n\t| { requestId: string | number; serverName: string; type: \"mcp_elicitation\" };\n\nexport function submissionFromServerRequestResult(input: {\n\trequest: ServerRequest | null;\n\trequestId: RequestId;\n\tresult: unknown;\n\ttarget?: ServerRequestResponseTarget | null;\n}): Submission {\n\tconst target = input.target ?? targetFromServerRequest(input.request);\n\tconst request = input.request;\n\tif (isSubmissionOp(input.result)) {\n\t\tthrow unsupportedServerRequestResponse(request);\n\t}\n\tif (target?.type === \"request_permissions\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: corePermissionsResponse(\n\t\t\t\t\tinput.result as PermissionsRequestApprovalResponse,\n\t\t\t\t),\n\t\t\t\ttype: \"request_permissions_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"dynamic_tool\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: coreDynamicToolResponse(input.result as DynamicToolCallResponse),\n\t\t\t\ttype: \"dynamic_tool_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"mcp_elicitation\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.requestId,\n\t\t\t\tresponse: coreMcpElicitationResponse(\n\t\t\t\t\tinput.result as McpServerElicitationRequestResponse,\n\t\t\t\t),\n\t\t\t\tserver_name: target.serverName,\n\t\t\t\ttype: \"mcp_server_elicitation_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"user_input\") {\n\t\treturn {\n\t\t\tid: `server-request-response-${String(input.requestId)}`,\n\t\t\top: {\n\t\t\t\tid: target.responseId,\n\t\t\t\tresponse: coreToolRequestUserInputResponse(\n\t\t\t\t\tinput.result as ToolRequestUserInputResponse,\n\t\t\t\t),\n\t\t\t\ttype: \"user_input_answer\",\n\t\t\t},\n\t\t};\n\t}\n\tthrow unsupportedServerRequestResponse(request);\n}\n\nfunction coreDynamicToolResponse(response: DynamicToolCallResponse) {\n\treturn coreDynamicToolResponseFromAppServerResponse(response);\n}\n\nfunction corePermissionsResponse(response: PermissionsRequestApprovalResponse) {\n\treturn {\n\t\tpermissions: response.permissions as never,\n\t\tscope: response.scope as never,\n\t\tstrict_auto_review: response.strictAutoReview,\n\t};\n}\n\nfunction coreMcpElicitationResponse(\n\tresponse: McpServerElicitationRequestResponse,\n) {\n\treturn {\n\t\taction: response.action,\n\t\tcontent: response.content ?? undefined,\n\t\tmeta: response._meta ?? undefined,\n\t};\n}\n\nexport function submissionFromServerRequestError(input: {\n\terror: JSONRPCErrorError;\n\trequest: ServerRequest | null;\n\trequestId: RequestId;\n\ttarget?: ServerRequestResponseTarget | null;\n}): Submission {\n\tconst target = input.target ?? targetFromServerRequest(input.request);\n\tconst requestId = String(input.requestId);\n\tif (target?.type === \"dynamic_tool\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: {\n\t\t\t\t\tcontent_items: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: input.error.message,\n\t\t\t\t\t\t\ttype: \"inputText\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tsuccess: false,\n\t\t\t\t},\n\t\t\t\ttype: \"dynamic_tool_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"request_permissions\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.callId,\n\t\t\t\tresponse: {\n\t\t\t\t\tpermissions: {},\n\t\t\t\t},\n\t\t\t\ttype: \"request_permissions_response\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"user_input\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.responseId,\n\t\t\t\tresponse: { answers: {} },\n\t\t\t\ttype: \"user_input_answer\",\n\t\t\t},\n\t\t};\n\t}\n\tif (target?.type === \"mcp_elicitation\") {\n\t\treturn {\n\t\t\tid: `server-request-rejection-${requestId}`,\n\t\t\top: {\n\t\t\t\tid: target.requestId,\n\t\t\t\tresponse: {\n\t\t\t\t\taction: \"cancel\",\n\t\t\t\t\tcontent: undefined,\n\t\t\t\t\tmeta: undefined,\n\t\t\t\t},\n\t\t\t\tserver_name: target.serverName,\n\t\t\t\ttype: \"mcp_server_elicitation_response\",\n\t\t\t},\n\t\t};\n\t}\n\tthrow unsupportedServerRequestResponse(input.request);\n}\n\nfunction coreToolRequestUserInputResponse(\n\tresponse: ToolRequestUserInputResponse,\n) {\n\tconst answers: Record<string, { answers: string[] }> = {};\n\tfor (const [key, value] of Object.entries(response.answers)) {\n\t\tif (value) {\n\t\t\tanswers[key] = value;\n\t\t}\n\t}\n\treturn { answers };\n}\n\nexport function isServerRequestResponseSubmission(\n\tsubmission: Submission,\n): boolean {\n\treturn (\n\t\tsubmission.op.type === \"dynamic_tool_response\" ||\n\t\tsubmission.op.type === \"mcp_server_elicitation_response\" ||\n\t\tsubmission.op.type === \"request_permissions_response\" ||\n\t\tsubmission.op.type === \"user_input_answer\"\n\t);\n}\n\nfunction isSubmissionOp(value: unknown): value is Submission[\"op\"] {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"type\" in value &&\n\t\ttypeof (value as { type?: unknown }).type === \"string\" &&\n\t\tisServerRequestResponseSubmission({ id: \"response\", op: value as Submission[\"op\"] })\n\t);\n}\n\nfunction targetFromServerRequest(\n\trequest: ServerRequest | null,\n): ServerRequestResponseTarget | null {\n\tif (!request) {\n\t\treturn null;\n\t}\n\tswitch (request.method) {\n\t\tcase \"item/tool/requestUserInput\":\n\t\t\treturn {\n\t\t\t\ttype: \"user_input\",\n\t\t\t\tresponseId: request.params.turnId,\n\t\t\t};\n\t\tcase \"item/permissions/requestApproval\":\n\t\t\treturn {\n\t\t\t\ttype: \"request_permissions\",\n\t\t\t\tcallId: request.params.itemId,\n\t\t\t};\n\t\t\tcase \"item/tool/call\":\n\t\t\t\treturn { type: \"dynamic_tool\", callId: request.params.callId };\n\t\tcase \"mcpServer/elicitation/request\":\n\t\t\treturn \"elicitationId\" in request.params\n\t\t\t\t? {\n\t\t\t\t\t\ttype: \"mcp_elicitation\",\n\t\t\t\t\t\tserverName: request.params.serverName,\n\t\t\t\t\t\trequestId: request.params.elicitationId,\n\t\t\t\t\t}\n\t\t\t\t: null;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction unsupportedServerRequestResponse(request: ServerRequest | null): never {\n\tthrow new Error(\n\t\t`Unsupported Codex server-request response: ${request?.method ?? \"unknown\"}`,\n\t);\n}\n","import {\n\tBaseInstructions,\n\tLiveThread,\n\tSession,\n\tThreadEventPersistenceMode,\n\tThreadMemoryMode,\n\tdefaultSessionConfiguration,\n\ttype Event,\n\ttype McpConnectionManager,\n\ttype SessionConfiguration,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../core/src\";\nimport type {\n\tThreadCompactStartParams,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tapprovalPolicyString,\n\tvalueOrNull,\n} from \"./request_processors/common\";\n\nexport type CodexSessionRequestParams =\n\t| ThreadStartParams\n\t| ThreadResumeParams\n\t| TurnStartParams\n\t| ThreadCompactStartParams;\n\nexport type CodexSessionFactoryOptions<Context = unknown> = {\n\tbuildSessionConfiguration?: (input: {\n\t\tcontext?: Context;\n\t\tparams: CodexSessionRequestParams;\n\t\tthread: Awaited<ReturnType<ThreadStore[\"readThread\"]>>;\n\t}) => Partial<SessionConfiguration> | Promise<Partial<SessionConfiguration>>;\n\tcreateSession?: (input: {\n\t\tcontext?: Context;\n\t\teventSink: (event: Event) => void;\n\t\tparams: CodexSessionRequestParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}) => Session | Promise<Session>;\n\temitCoreEvent: (threadId: ThreadId, event: Event, context?: Context) => void;\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tstore: ThreadStore;\n};\n\nexport class CodexSessionFactory<Context = unknown> {\n\tconstructor(private readonly options: CodexSessionFactoryOptions<Context>) {}\n\n\tcreateSession = async (input: {\n\t\tcontext?: Context;\n\t\tparams: CodexSessionRequestParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<Session> => {\n\t\tconst eventSink = (event: Event) =>\n\t\t\tthis.options.emitCoreEvent(input.threadId, event, input.context);\n\t\tif (this.options.createSession) {\n\t\t\treturn this.options.createSession({ ...input, eventSink });\n\t\t}\n\t\tconst thread = await this.options.store.readThread({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t\tinclude_history: false,\n\t\t});\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst overrides = await this.options.buildSessionConfiguration?.({\n\t\t\tcontext: input.context,\n\t\t\tparams: input.params,\n\t\t\tthread,\n\t\t});\n\t\tconst configuration = defaultSessionConfiguration({\n\t\t\tapproval_policy:\n\t\t\t\t\"approvalPolicy\" in input.params\n\t\t\t\t\t? approvalPolicyString(input.params.approvalPolicy) ?? \"never\"\n\t\t\t\t\t: \"never\",\n\t\t\tapprovals_reviewer:\n\t\t\t\t\"approvalsReviewer\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.approvalsReviewer) ?? \"user\"\n\t\t\t\t\t: \"user\",\n\t\t\tbase_instructions: { text: \"\" },\n\t\t\tcwd:\n\t\t\t\t\"cwd\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.cwd) ?? thread.cwd\n\t\t\t\t\t: thread.cwd,\n\t\t\tdeveloper_instructions:\n\t\t\t\t\"developerInstructions\" in input.params\n\t\t\t\t\t? (input.params.developerInstructions ?? null)\n\t\t\t\t\t: null,\n\t\t\tmodel:\n\t\t\t\t\"model\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.model) ?? thread.model ?? \"gpt-5.5\"\n\t\t\t\t\t: thread.model ?? \"gpt-5.5\",\n\t\t\tprovider:\n\t\t\t\t\"modelProvider\" in input.params\n\t\t\t\t\t? (valueOrNull(input.params.modelProvider) ?? thread.model_provider)\n\t\t\t\t\t: thread.model_provider,\n\t\t\treasoning_effort: \"effort\" in input.params ? input.params.effort ?? null : null,\n\t\t\tservice_tier:\n\t\t\t\t\"serviceTier\" in input.params\n\t\t\t\t\t? valueOrNull(input.params.serviceTier) ?? null\n\t\t\t\t\t: null,\n\t\t\tsession_source: \"appServer\",\n\t\t\t...(overrides ?? {}),\n\t\t});\n\t\tif (!configuration.base_instructions.text) {\n\t\t\tconfiguration.base_instructions = {\n\t\t\t\ttext:\n\t\t\t\t\t\"baseInstructions\" in input.params && input.params.baseInstructions\n\t\t\t\t\t\t? input.params.baseInstructions\n\t\t\t\t\t\t: BaseInstructions.default().text,\n\t\t\t};\n\t\t}\n\t\treturn new Session({\n\t\t\tthreadId: input.threadId,\n\t\t\tconfiguration,\n\t\t\tliveThread: await LiveThread.resume(this.options.store, {\n\t\t\t\tthread_id: input.threadId,\n\t\t\t\tinclude_archived: false,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcwd: thread.cwd,\n\t\t\t\t\tmemory_mode: ThreadMemoryMode.Disabled,\n\t\t\t\t\tmodel_provider: thread.model_provider,\n\t\t\t\t},\n\t\t\t\tevent_persistence_mode: ThreadEventPersistenceMode.Limited,\n\t\t\t}),\n\t\t\tinitialHistory: history.items,\n\t\t\trolloutPath: thread.rollout_path ?? null,\n\t\t\tforkedFromId: thread.forked_from_id ?? null,\n\t\t\tthreadName: thread.name ?? null,\n\t\t\tthreadSource: thread.thread_source ?? null,\n\t\t\teventSink,\n\t\t\tmcpConnectionManager: this.options.mcpConnectionManager,\n\t\t});\n\t};\n}\n","import {\n\tCompactTask,\n\tRegularTask,\n\ttype Session,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n\ttype TurnContext,\n\ttype UserInput,\n} from \"../../core/src\";\nimport type { ModelClient } from \"../../core/src\";\nimport type {\n\tThreadCompactStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport { run_compact_task } from \"../../core/src/compact-task-runner\";\nimport { runTurn } from \"../../core/src/session/turn\";\nimport type { RuntimeSession } from \"./request_processors/common\";\n\nexport type CodexSessionTaskRunnerCreateModelClientInput<Context> = {\n\tcontext?: Context;\n\tsession: Session;\n\tthreadId: ThreadId;\n};\n\nexport type CodexSessionTaskRunnerOptions<Context> = {\n\tcreateModelClient: (\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t) => ModelClient | Promise<ModelClient>;\n\tmodelClientCacheKey?: (\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t) => string | null | undefined;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\trunInBackground?: (\n\t\tpromise: Promise<unknown>,\n\t\tcontext: { context?: Context; threadId: ThreadId },\n\t) => void;\n\tstore: ThreadStore;\n};\n\nexport class CodexSessionTaskRunner<Context> {\n\tprivate readonly modelClients = new Map<string, ModelClient>();\n\n\tconstructor(private readonly options: CodexSessionTaskRunnerOptions<Context>) {}\n\n\tasync startRegularTask(input: {\n\t\tcontext?: Context;\n\t\titems: UserInput[];\n\t\tparams: TurnStartParams;\n\t\truntimeSession: RuntimeSession;\n\t\tsubmission: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<TurnContext> {\n\t\tconst turn = await input.runtimeSession.session.startTurn(input.submission);\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst abortController = new AbortController();\n\t\tconst modelClient = await this.modelClient({\n\t\t\tcontext: input.context,\n\t\t\tsession: input.runtimeSession.session,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t\tconst task = RegularTask.new({\n\t\t\thistory: history.items,\n\t\t\tsubmission: input.submission,\n\t\t\trun_turn: async (taskInput) => {\n\t\t\t\tconst result = await runTurn({\n\t\t\t\t\thistory: taskInput.history,\n\t\t\t\t\tmodelClient,\n\t\t\t\t\tsession: taskInput.session,\n\t\t\t\t\tsignal: taskInput.signal,\n\t\t\t\t\tsubmission: taskInput.submission,\n\t\t\t\t\tturn: taskInput.turn,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tlast_agent_message: result.lastAgentMessage,\n\t\t\t\t\tsteps: result.steps,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tthis.spawnTask({\n\t\t\tabortController,\n\t\t\tcontext: input.context,\n\t\t\tinput: input.items,\n\t\t\truntimeSession: input.runtimeSession,\n\t\t\ttask,\n\t\t\tthreadId: input.threadId,\n\t\t\tturn,\n\t\t});\n\t\treturn turn;\n\t}\n\n\tasync startCompactTask(input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadCompactStartParams;\n\t\truntimeSession: RuntimeSession;\n\t\tsubmission: Submission;\n\t\tthreadId: ThreadId;\n\t}): Promise<TurnContext> {\n\t\tconst history = await this.options.store.loadHistory({\n\t\t\tthread_id: input.threadId,\n\t\t\tinclude_archived: false,\n\t\t});\n\t\tconst abortController = new AbortController();\n\t\tconst turn = await input.runtimeSession.session.startCompactTurn(input.submission);\n\t\tconst modelClient = await this.modelClient({\n\t\t\tcontext: input.context,\n\t\t\tsession: input.runtimeSession.session,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t\tconst task = new CompactTask({\n\t\t\thistory: history.items,\n\t\t\tsubmission: input.submission,\n\t\t\trun_compact_task: async (taskInput) => {\n\t\t\t\tconst result = await run_compact_task({\n\t\t\t\t\tmodelClient,\n\t\t\t\t\tsession: taskInput.session,\n\t\t\t\t\thistory: taskInput.history,\n\t\t\t\t\tsubmission: taskInput.submission,\n\t\t\t\t\tturn: taskInput.turn,\n\t\t\t\t\tsignal: taskInput.signal,\n\t\t\t\t\tcompleteTurn: false,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tlast_agent_message: null,\n\t\t\t\t\tsteps: 1,\n\t\t\t\t\tmessage: result.summary,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tthis.spawnTask({\n\t\t\tabortController,\n\t\t\tcontext: input.context,\n\t\t\tinput: [],\n\t\t\truntimeSession: input.runtimeSession,\n\t\t\ttask,\n\t\t\tthreadId: input.threadId,\n\t\t\tturn,\n\t\t});\n\t\treturn turn;\n\t}\n\n\tprivate spawnTask(input: {\n\t\tabortController: AbortController;\n\t\tcontext?: Context;\n\t\tinput: UserInput[];\n\t\truntimeSession: RuntimeSession;\n\t\ttask: CompactTask | RegularTask;\n\t\tthreadId: ThreadId;\n\t\tturn: TurnContext;\n\t}): void {\n\t\tinput.runtimeSession.abortController = input.abortController;\n\t\tinput.runtimeSession.runPromise = input.runtimeSession.session\n\t\t\t.spawn_task({\n\t\t\t\tabortController: input.abortController,\n\t\t\t\tinput: input.input,\n\t\t\t\ttask: input.task,\n\t\t\t\tturnContext: input.turn,\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.options.onRuntimeError?.(error, {\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\tthreadId: input.threadId,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinput.runtimeSession.abortController = null;\n\t\t\t\tinput.runtimeSession.runPromise = null;\n\t\t\t});\n\t\tthis.options.runInBackground?.(input.runtimeSession.runPromise, {\n\t\t\tcontext: input.context,\n\t\t\tthreadId: input.threadId,\n\t\t});\n\t}\n\n\tprivate async modelClient(\n\t\tinput: CodexSessionTaskRunnerCreateModelClientInput<Context>,\n\t): Promise<ModelClient> {\n\t\tconst cacheKey = this.options.modelClientCacheKey?.(input) ?? String(input.threadId);\n\t\tconst existing = this.modelClients.get(cacheKey);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created = await this.options.createModelClient(input);\n\t\tthis.modelClients.set(cacheKey, created);\n\t\treturn created;\n\t}\n}\n","import type { RequestId } from \"../../app-server-protocol/schema/typescript\";\nimport type { Turn } from \"../../app-server-protocol/schema/typescript/v2\";\nimport { appServerTurnFromCoreTurn } from \"../../app-server-protocol/src/protocol/thread-resume\";\nimport type { ThreadId } from \"../../core/src/ids\";\nimport type { EventMsg } from \"../../core/src/protocol\";\nimport { ThreadHistoryBuilder } from \"../../core/src/thread-history-builder\";\n\nexport type PendingInterruptQueue = RequestId[];\n\nexport type PendingThreadResumeRequest = {\n\tincludeTurns: boolean;\n\trequestId: RequestId;\n\tthreadId: ThreadId;\n};\n\nexport type ThreadListenerCommand =\n\t| { request: PendingThreadResumeRequest; type: \"send_thread_resume_response\" }\n\t| { requestId: RequestId; type: \"resolve_server_request\" };\n\nexport type TurnSummary = {\n\tlastError: { message: string } | null;\n\tstartedAt: number | null;\n};\n\nexport type ThreadStateTrackResult = {\n\tactiveTurn: Turn | null;\n\tterminalTurn: Turn | null;\n};\n\nexport class ThreadState {\n\tpendingInterrupts: PendingInterruptQueue = [];\n\tturnSummary: TurnSummary = { lastError: null, startedAt: null };\n\tlastTerminalTurnId: string | null = null;\n\texperimentalRawEvents = false;\n\tlistenerGeneration = 0;\n\tprivate currentTurnHistory = new ThreadHistoryBuilder();\n\tprivate listenerActive = false;\n\n\tsetListener(): number {\n\t\tthis.listenerGeneration = (this.listenerGeneration + 1) >>> 0;\n\t\tthis.listenerActive = true;\n\t\treturn this.listenerGeneration;\n\t}\n\n\tclearListener(): void {\n\t\tthis.listenerActive = false;\n\t\tthis.currentTurnHistory.reset();\n\t}\n\n\thasListener(): boolean {\n\t\treturn this.listenerActive;\n\t}\n\n\tsetExperimentalRawEvents(enabled: boolean): void {\n\t\tthis.experimentalRawEvents = enabled;\n\t}\n\n\tactiveTurnSnapshot(): Turn | null {\n\t\tconst turn = this.currentTurnHistory.active_turn_snapshot();\n\t\treturn turn ? appServerTurnFromCoreTurn(turn) : null;\n\t}\n\n\ttrackCurrentTurnEvent(eventTurnId: string, event: EventMsg): ThreadStateTrackResult {\n\t\tif (event.type === \"turn_started\") {\n\t\t\tthis.turnSummary.startedAt = event.started_at ?? null;\n\t\t}\n\t\tif (event.type === \"error\") {\n\t\t\tthis.turnSummary.lastError = { message: event.message };\n\t\t}\n\t\tthis.currentTurnHistory.handle_event(event, eventTurnId);\n\t\tif (event.type === \"turn_complete\" || event.type === \"turn_aborted\") {\n\t\t\tthis.lastTerminalTurnId = eventTurnId;\n\t\t\tconst terminalTurn =\n\t\t\t\tthis.currentTurnHistory.finish().find((turn) => turn.id === eventTurnId) ??\n\t\t\t\tnull;\n\t\t\tthis.currentTurnHistory.reset();\n\t\t\treturn {\n\t\t\t\tactiveTurn: null,\n\t\t\t\tterminalTurn: terminalTurn ? appServerTurnFromCoreTurn(terminalTurn) : null,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tactiveTurn: this.activeTurnSnapshot(),\n\t\t\tterminalTurn: null,\n\t\t};\n\t}\n}\n\nexport class ThreadStateManager {\n\tprivate readonly liveConnections = new Set<number>();\n\tprivate readonly threads = new Map<ThreadId, ThreadEntry>();\n\tprivate readonly threadIdsByConnection = new Map<number, Set<ThreadId>>();\n\n\tconnectionInitialized(connectionId: number): void {\n\t\tthis.liveConnections.add(connectionId);\n\t}\n\n\tthreadState(threadId: ThreadId): ThreadState {\n\t\tconst entry = this.threadEntry(threadId);\n\t\treturn entry.state;\n\t}\n\n\tremoveThreadState(threadId: ThreadId): void {\n\t\tconst entry = this.threads.get(threadId);\n\t\tentry?.state.clearListener();\n\t\tthis.threads.delete(threadId);\n\t\tfor (const [connectionId, threadIds] of this.threadIdsByConnection) {\n\t\t\tthreadIds.delete(threadId);\n\t\t\tif (threadIds.size === 0) {\n\t\t\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\t\t}\n\t\t}\n\t}\n\n\tclearAllListeners(): void {\n\t\tfor (const entry of this.threads.values()) {\n\t\t\tentry.state.clearListener();\n\t\t}\n\t}\n\n\tsubscribedConnectionIds(threadId: ThreadId): number[] {\n\t\treturn Array.from(this.threads.get(threadId)?.connectionIds ?? []);\n\t}\n\n\ttryEnsureConnectionSubscribed(\n\t\tthreadId: ThreadId,\n\t\tconnectionId: number,\n\t\texperimentalRawEvents = false,\n\t): ThreadState | null {\n\t\tif (!this.liveConnections.has(connectionId)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst threadIds = this.threadIdsByConnection.get(connectionId);\n\t\tif (threadIds) {\n\t\t\tthreadIds.add(threadId);\n\t\t} else {\n\t\t\tthis.threadIdsByConnection.set(connectionId, new Set([threadId]));\n\t\t}\n\t\tconst entry = this.threadEntry(threadId);\n\t\tentry.connectionIds.add(connectionId);\n\t\tif (experimentalRawEvents) {\n\t\t\tentry.state.setExperimentalRawEvents(true);\n\t\t}\n\t\treturn entry.state;\n\t}\n\n\tunsubscribeConnectionFromThread(threadId: ThreadId, connectionId: number): boolean {\n\t\tconst entry = this.threads.get(threadId);\n\t\tconst threadIds = this.threadIdsByConnection.get(connectionId);\n\t\tif (!entry || !threadIds?.has(threadId)) {\n\t\t\treturn false;\n\t\t}\n\t\tentry.connectionIds.delete(connectionId);\n\t\tthreadIds.delete(threadId);\n\t\tif (threadIds.size === 0) {\n\t\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\t}\n\t\treturn true;\n\t}\n\n\tremoveConnection(connectionId: number): ThreadId[] {\n\t\tthis.liveConnections.delete(connectionId);\n\t\tconst threadIds = Array.from(this.threadIdsByConnection.get(connectionId) ?? []);\n\t\tthis.threadIdsByConnection.delete(connectionId);\n\t\tconst emptyThreadIds: ThreadId[] = [];\n\t\tfor (const threadId of threadIds) {\n\t\t\tconst entry = this.threads.get(threadId);\n\t\t\tentry?.connectionIds.delete(connectionId);\n\t\t\tif (entry && entry.connectionIds.size === 0) {\n\t\t\t\temptyThreadIds.push(threadId);\n\t\t\t}\n\t\t}\n\t\treturn emptyThreadIds;\n\t}\n\n\tprivate threadEntry(threadId: ThreadId): ThreadEntry {\n\t\tconst existing = this.threads.get(threadId);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst entry: ThreadEntry = {\n\t\t\tconnectionIds: new Set(),\n\t\t\tstate: new ThreadState(),\n\t\t};\n\t\tthis.threads.set(threadId, entry);\n\t\treturn entry;\n\t}\n}\n\ntype ThreadEntry = {\n\tconnectionIds: Set<number>;\n\tstate: ThreadState;\n};\n","import type { EventMsg } from \"../../core/src/protocol\";\nimport {\n\teventMsgToAppServerEvents,\n\tserverRequestResolvedNotification,\n\ttype AppServerProtocolEvent,\n\ttype EventMappingContext,\n\ttype ServerRequestCoreTarget,\n} from \"../../app-server-protocol/src/protocol/event-mapping\";\n\nexport type {\n\tAppServerProtocolEvent,\n\tEventMappingContext,\n\tServerRequestCoreTarget,\n};\n\nexport function apply_bespoke_event_handling(\n\tmsg: EventMsg,\n\tcontext: EventMappingContext,\n): AppServerProtocolEvent[] {\n\treturn eventMsgToAppServerEvents(msg, context);\n}\n\nexport { serverRequestResolvedNotification };\n","import {\n\tSession,\n\tasThreadId,\n\ttype CreateThreadParams,\n\ttype DynamicToolSpec,\n\ttype Event,\n\ttype McpConnectionManager,\n\ttype SessionConfiguration,\n\ttype Submission,\n\ttype ThreadId,\n\ttype ThreadStore,\n} from \"../../core/src\";\nimport { type ModelClient } from \"../../core/src\";\nimport type {\n\tAppServerEvent,\n\tJSONRPCErrorError,\n\tResult,\n} from \"../../app-server-client/src/lib\";\nimport {\n\tOutgoingMessageSender,\n\toutgoingMessageToAppServerEvent,\n\ttype ConnectionId,\n\ttype OutgoingMessage,\n} from \"./outgoing_message\";\nimport {\n\tMcpRequestProcessor,\n\tThreadRequestProcessor,\n\tTurnRequestProcessor,\n\ttype RuntimeSession,\n} from \"./request_processors\";\nimport {\n\tisServerRequestResponseSubmission,\n\tsubmissionFromServerRequestError,\n\tsubmissionFromServerRequestResult,\n\ttype ServerRequestResponseTarget,\n} from \"./server_request_response\";\nimport { CodexSessionFactory } from \"./session_factory\";\nimport { CodexSessionTaskRunner } from \"./session_task_runner\";\nimport { ThreadStateManager } from \"./thread_state\";\nimport { RequestSerializationQueues } from \"./request_serialization\";\nimport {\n\tapply_bespoke_event_handling,\n\tserverRequestResolvedNotification,\n\ttype AppServerProtocolEvent,\n\ttype ServerRequestCoreTarget,\n} from \"./bespoke_event_handling\";\nimport type {\n\tThreadCompactStartParams,\n\tMcpServerOauthLoginParams,\n\tMcpServerOauthLoginResponse,\n\tThreadResumeParams,\n\tThreadStartParams,\n\tTurnStartParams,\n} from \"../../app-server-protocol/schema/typescript/v2\";\nimport {\n\tCodexAppServerConnectionSessionState,\n\tCodexAppServerMessageProcessor,\n\ttype CodexAppServerMethodHandlers,\n} from \"./message_processor\";\nimport type {\n\tInitializeParams,\n\tInitializeResponse,\n} from \"../../app-server-protocol/schema/typescript\";\n\nexport type CodexAppServerRuntimeContext = unknown;\n\nexport type CodexAppServerEventSink<Context = CodexAppServerRuntimeContext> = (\n\tevent: AppServerEvent,\n\tcontext: {\n\t\tcontext?: Context;\n\t\tthreadId: ThreadId;\n\t},\n) => Promise<void> | void;\n\nexport type CodexAppServerOutgoingSink<Context = CodexAppServerRuntimeContext> = (\n\tmessage: OutgoingMessage,\n\tcontext: {\n\t\tconnectionIds?: ConnectionId[];\n\t\tcontext?: Context;\n\t\tthreadId?: ThreadId;\n\t},\n) => Promise<void> | void;\n\nexport type CodexAppServerRuntimeOptions<Context = CodexAppServerRuntimeContext> = {\n\tbuildCreateThreadParams?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => CreateThreadParams | Promise<CreateThreadParams>;\n\tbuildSessionConfiguration?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams;\n\t\tthread: Awaited<ReturnType<ThreadStore[\"readThread\"]>>;\n\t}) => Partial<SessionConfiguration> | Promise<Partial<SessionConfiguration>>;\n\tcreateModelClient: (input: {\n\t\tcontext?: Context;\n\t\tsession: Session;\n\t\tthreadId: ThreadId;\n\t}) => ModelClient | Promise<ModelClient>;\n\tmodelClientCacheKey?: (input: {\n\t\tcontext?: Context;\n\t\tsession: Session;\n\t\tthreadId: ThreadId;\n\t}) => string | null | undefined;\n\tmcpConnectionManager?: McpConnectionManager | null;\n\tmcpServerOauthLogin?: (input: {\n\t\tcontext?: Context;\n\t\tparams: McpServerOauthLoginParams;\n\t}) => McpServerOauthLoginResponse | Promise<McpServerOauthLoginResponse>;\n\treloadMcpServers?: (input: { context?: Context }) => void | Promise<void>;\n\tcreateSession?: (input: {\n\t\tcontext?: Context;\n\t\teventSink: (event: Event) => void;\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams;\n\t\tsubmission?: Submission;\n\t\tthreadId: ThreadId;\n\t}) => Session | Promise<Session>;\n\teventSink?: CodexAppServerEventSink<Context>;\n\tonRuntimeError?: (error: unknown, context: { context?: Context; threadId?: ThreadId }) => void;\n\trunInBackground?: (promise: Promise<unknown>, context: { context?: Context; threadId: ThreadId }) => void;\n\trunConnectionBackground?: (promise: Promise<unknown>, context: { context?: Context }) => void;\n\tsendOutgoingMessage?: CodexAppServerEventSink<Context>;\n\tsendOutgoingTransportMessage?: CodexAppServerOutgoingSink<Context>;\n\tresolveDynamicTools?: (input: {\n\t\tcontext?: Context;\n\t\tparams: ThreadStartParams;\n\t\tthreadId: ThreadId;\n\t}) => DynamicToolSpec[] | Promise<DynamicToolSpec[]>;\n\tstore: ThreadStore;\n};\n\nexport type CodexAppServerRuntime<Context = CodexAppServerRuntimeContext> = {\n\tconnectionClosed(connectionId: number): Promise<void>;\n\tconnectionInitialized(connectionId: number): void;\n\tcreateMessageProcessor(input: {\n\t\tconnectionId: ConnectionId;\n\t\tinitialize?: (\n\t\t\tparams: InitializeParams,\n\t\t\tcontext?: Context,\n\t\t\tsession?: CodexAppServerConnectionSessionState,\n\t\t) => Promise<InitializeResponse>;\n\t\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\t\tsession?: CodexAppServerConnectionSessionState;\n\t}): CodexAppServerMessageProcessor<Context>;\n\tmethodHandlers: CodexAppServerMethodHandlers<Context>;\n\trejectServerRequest(\n\t\tparams: { error: JSONRPCErrorError; requestId: string | number; threadId: ThreadId | string },\n\t\tcontext?: Context,\n\t): Promise<void>;\n\tresolveServerRequest(\n\t\tparams: { requestId: string | number; result: Result; threadId: ThreadId | string },\n\t\tcontext?: Context,\n\t): Promise<void>;\n};\n\nexport function createCodexAppServerRuntime<Context = CodexAppServerRuntimeContext>(\n\toptions: CodexAppServerRuntimeOptions<Context>,\n): CodexAppServerRuntime<Context> {\n\tconst sessions = new Map<ThreadId, RuntimeSession>();\n\tconst serverRequestTargets = new Map<string, ServerRequestCoreTarget>();\n\tconst threadStateManager = new ThreadStateManager();\n\tconst requestSerializationQueues = new RequestSerializationQueues();\n\tconst sendOutgoingMessage = options.sendOutgoingMessage ?? options.eventSink;\n\tconst outgoing = new OutgoingMessageSender({\n\t\tsend: async (message, messageContext) => {\n\t\t\tif (options.sendOutgoingTransportMessage) {\n\t\t\t\tawait options.sendOutgoingTransportMessage(message, {\n\t\t\t\t\tconnectionIds: messageContext.connectionIds,\n\t\t\t\t\tcontext: messageContext.context as Context | undefined,\n\t\t\t\t\tthreadId: messageContext.threadId,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst event = outgoingMessageToAppServerEvent(message);\n\t\t\tif (event && sendOutgoingMessage) {\n\t\t\t\tawait sendOutgoingMessage(event, {\n\t\t\t\t\tcontext: messageContext.context as Context | undefined,\n\t\t\t\t\tthreadId: messageContext.threadId ?? threadIdFromAppServerEvent(event),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t});\n\n\tasync function emit(\n\t\tthreadId: ThreadId,\n\t\tevent: AppServerEvent | AppServerProtocolEvent,\n\t\tcontext?: Context,\n\t): Promise<void> {\n\t\tif (event.type === \"server_notification\") {\n\t\t\tawait outgoing.sendServerNotification(event.notification, context, threadId);\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"server_request\") {\n\t\t\tconst handle = outgoing.sendRequestWithHandle(\n\t\t\t\tevent.request,\n\t\t\t\tthreadId,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst coreTarget = \"coreTarget\" in event ? event.coreTarget : undefined;\n\t\t\tif (coreTarget) {\n\t\t\t\tserverRequestTargets.set(\n\t\t\t\t\tserverRequestTargetKey(threadId, handle.request.id),\n\t\t\t\t\tcoreTarget,\n\t\t\t\t);\n\t\t\t}\n\t\t\tvoid handle.result.catch((error) => {\n\t\t\t\toptions.onRuntimeError?.(error, { context, threadId });\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait sendOutgoingMessage?.(event, { context, threadId });\n\t}\n\n\tfunction emitCoreEvent(threadId: ThreadId, event: Event, context?: Context): void {\n\t\tif (event.msg.type === \"session_configured\") {\n\t\t\treturn;\n\t\t}\n\t\tconst threadState = threadStateManager.threadState(threadId);\n\t\tconst tracked = threadState.trackCurrentTurnEvent(event.id, event.msg);\n\t\tconst protocolEvents = apply_bespoke_event_handling(event.msg, {\n\t\t\tactiveTurn: tracked.activeTurn,\n\t\t\tterminalTurn: tracked.terminalTurn,\n\t\t\tthreadId,\n\t\t\tturnId:\n\t\t\t\t\"turn_id\" in event.msg && typeof event.msg.turn_id === \"string\"\n\t\t\t\t\t? event.msg.turn_id\n\t\t\t\t\t: event.id,\n\t\t});\n\t\tfor (const protocolEvent of protocolEvents) {\n\t\t\tvoid emit(threadId, protocolEvent, context);\n\t\t}\n\t}\n\n\tconst sessionFactory = new CodexSessionFactory({\n\t\tbuildSessionConfiguration: options.buildSessionConfiguration,\n\t\tcreateSession: options.createSession,\n\t\temitCoreEvent,\n\t\tmcpConnectionManager: options.mcpConnectionManager,\n\t\tstore: options.store,\n\t});\n\tconst createSession = (\n\t\tthreadId: ThreadId,\n\t\tparams: ThreadStartParams | ThreadResumeParams | TurnStartParams | ThreadCompactStartParams,\n\t\tcontext?: Context,\n\t\tsubmission?: Submission,\n\t): Promise<Session> =>\n\t\tsessionFactory.createSession({ context, params, submission, threadId });\n\tconst taskRunner = new CodexSessionTaskRunner({\n\t\tcreateModelClient: options.createModelClient,\n\t\tmodelClientCacheKey: options.modelClientCacheKey,\n\t\tonRuntimeError: options.onRuntimeError,\n\t\trunInBackground: options.runInBackground,\n\t\tstore: options.store,\n\t});\n\n\tconst threadProcessor = new ThreadRequestProcessor({\n\t\tbuildCreateThreadParams: options.buildCreateThreadParams,\n\t\tcreateSession,\n\t\temit,\n\t\tresolveDynamicTools: options.resolveDynamicTools,\n\t\tsessions,\n\t\tstore: options.store,\n\t\ttaskRunner,\n\t});\n\tconst turnProcessor = new TurnRequestProcessor({\n\t\tcreateSession,\n\t\tonRuntimeError: options.onRuntimeError,\n\t\tsessions,\n\t\ttaskRunner,\n\t});\n\tconst mcpProcessor = new McpRequestProcessor({\n\t\tmcpConnectionManager: options.mcpConnectionManager,\n\t\tmcpServerOauthLogin: options.mcpServerOauthLogin,\n\t\treloadMcpServers: options.reloadMcpServers,\n\t\trunInBackground: options.runConnectionBackground,\n\t\tstore: options.store,\n\t});\n\n\tconst methodHandlers: CodexAppServerMethodHandlers<Context> = {\n\t\tconfigMcpServerReload: (params, context) =>\n\t\t\tmcpProcessor.mcpServerRefresh(params, context),\n\t\tmcpResourceRead: (params, context, request) =>\n\t\t\tmcpProcessor.mcpResourceRead(params, context, request),\n\t\tmcpServerOauthLogin: (params, context) =>\n\t\t\tmcpProcessor.mcpServerOauthLogin(params, context),\n\t\tmcpServerStatusList: (params, context, request) =>\n\t\t\tmcpProcessor.mcpServerStatusList(params, context, request),\n\t\tmcpServerToolCall: (params, context, request) =>\n\t\t\tmcpProcessor.mcpServerToolCall(params, context, request),\n\t\tthreadStart: (params, context) => threadProcessor.threadStart(params, context),\n\t\tthreadResume: (params, context) => threadProcessor.threadResume(params, context),\n\t\tthreadList: (params) => threadProcessor.threadList(params),\n\t\tthreadRead: (params) => threadProcessor.threadRead(params),\n\t\tthreadNameSet: (params, context) =>\n\t\t\tthreadProcessor.threadNameSet(params, context),\n\t\tthreadArchive: (params, context) =>\n\t\t\tthreadProcessor.threadArchive(params, context),\n\t\tthreadUnarchive: (params, context) =>\n\t\t\tthreadProcessor.threadUnarchive(params, context),\n\t\tthreadMetadataUpdate: (params) =>\n\t\t\tthreadProcessor.threadMetadataUpdate(params),\n\t\tthreadCompactStart: (params, context) =>\n\t\t\tthreadProcessor.threadCompactStart(params, context),\n\t\tturnStart: (params, context) => turnProcessor.turnStart(params, context),\n\t\tturnSteer: (params, context) => turnProcessor.turnSteer(params, context),\n\t\tturnInterrupt: (params) => turnProcessor.turnInterrupt(params),\n\t};\n\n\tfunction createMessageProcessor(input: {\n\t\tconnectionId: ConnectionId;\n\t\tinitialize?: (\n\t\t\tparams: InitializeParams,\n\t\t\tcontext?: Context,\n\t\t\tsession?: CodexAppServerConnectionSessionState,\n\t\t) => Promise<InitializeResponse>;\n\t\tinitializeResponse?: InitializeResponse | (() => InitializeResponse);\n\t\tsession?: CodexAppServerConnectionSessionState;\n\t}): CodexAppServerMessageProcessor<Context> {\n\t\treturn new CodexAppServerMessageProcessor<Context>({\n\t\t\tconnectionId: input.connectionId,\n\t\t\thandlers: input.initialize\n\t\t\t\t? { ...methodHandlers, initialize: input.initialize }\n\t\t\t\t: methodHandlers,\n\t\t\tinitializeResponse: input.initializeResponse,\n\t\t\toutgoing,\n\t\t\trequestSerializationQueues,\n\t\t\tsession: input.session,\n\t\t});\n\t}\n\n\tasync function resolveServerRequest(\n\t\tparams: { requestId: string | number; result: Result; threadId: ThreadId | string },\n\t): Promise<void> {\n\t\tconst threadId = asThreadId(String(params.threadId));\n\t\tconst targetKey = serverRequestTargetKey(threadId, params.requestId);\n\t\tconst request = outgoing.pendingRequestsForThread(threadId).find(\n\t\t\t(candidate) => candidate.id === params.requestId,\n\t\t) ?? null;\n\t\tif (!request) {\n\t\t\tserverRequestTargets.delete(targetKey);\n\t\t}\n\t\tconst target = request\n\t\t\t? serverRequestResponseTarget(serverRequestTargets.get(targetKey) ?? null)\n\t\t\t: null;\n\t\tconst submission = submissionFromServerRequestResult({\n\t\t\trequest,\n\t\t\trequestId: params.requestId,\n\t\t\tresult: params.result,\n\t\t\ttarget,\n\t\t});\n\t\tawait submitServerRequestResponse(threadId, submission);\n\t\tserverRequestTargets.delete(targetKey);\n\t\tawait outgoing.notifyClientResponse(params.requestId, params.result);\n\t\tawait emit(threadId, serverRequestResolvedNotification({\n\t\t\trequestId: params.requestId,\n\t\t\tthreadId,\n\t\t}));\n\t}\n\n\tasync function connectionClosed(connectionId: number): Promise<void> {\n\t\tconst emptyThreadIds = threadStateManager.removeConnection(connectionId);\n\t\toutgoing.connectionClosed(connectionId);\n\t\tfor (const threadId of emptyThreadIds) {\n\t\t\tthreadStateManager.removeThreadState(threadId);\n\t\t}\n\t}\n\n\tfunction connectionInitialized(connectionId: number): void {\n\t\tthreadStateManager.connectionInitialized(connectionId);\n\t}\n\n\tasync function rejectServerRequest(\n\t\tparams: { error: JSONRPCErrorError; requestId: string | number; threadId: ThreadId | string },\n\t): Promise<void> {\n\t\tconst threadId = asThreadId(String(params.threadId));\n\t\tconst targetKey = serverRequestTargetKey(threadId, params.requestId);\n\t\tconst request = outgoing.pendingRequestsForThread(threadId).find(\n\t\t\t(candidate) => candidate.id === params.requestId,\n\t\t) ?? null;\n\t\tif (!request) {\n\t\t\tserverRequestTargets.delete(targetKey);\n\t\t}\n\t\tconst target = request\n\t\t\t? serverRequestResponseTarget(serverRequestTargets.get(targetKey) ?? null)\n\t\t\t: null;\n\t\tconst submission = submissionFromServerRequestError({\n\t\t\terror: params.error,\n\t\t\trequest,\n\t\t\trequestId: params.requestId,\n\t\t\ttarget,\n\t\t});\n\t\tawait submitServerRequestResponse(threadId, submission);\n\t\tserverRequestTargets.delete(targetKey);\n\t\tawait outgoing.notifyClientError(params.requestId, params.error);\n\t\tawait emit(threadId, serverRequestResolvedNotification({\n\t\t\trequestId: params.requestId,\n\t\t\tthreadId,\n\t\t}));\n\t}\n\n\tasync function submitServerRequestResponse(\n\t\tthreadId: ThreadId,\n\t\tsubmission: Submission,\n\t): Promise<void> {\n\t\tif (!isServerRequestResponseSubmission(submission)) {\n\t\t\tthrow new Error(\"Only server-request response submissions can be routed through CodexAppServerRuntime.\");\n\t\t}\n\t\tconst runtimeSession = sessions.get(threadId);\n\t\tif (!runtimeSession) {\n\t\t\tthrow new Error(\"Codex thread has no active turn for this server request response.\");\n\t\t}\n\t\tawait runtimeSession.session.submit_with_id(submission);\n\t}\n\n\treturn {\n\t\tconnectionClosed,\n\t\tconnectionInitialized,\n\t\tcreateMessageProcessor,\n\t\tmethodHandlers,\n\t\trejectServerRequest,\n\t\tresolveServerRequest,\n\t};\n}\n\nfunction serverRequestTargetKey(threadId: ThreadId, requestId: string | number): string {\n\treturn `${threadId}:${String(requestId)}`;\n}\n\nfunction serverRequestResponseTarget(\n\ttarget: ServerRequestCoreTarget | null,\n): ServerRequestResponseTarget | null {\n\tif (!target) {\n\t\treturn null;\n\t}\n\treturn target;\n}\n\nfunction threadIdFromAppServerEvent(event: AppServerEvent): ThreadId {\n\tif (event.type === \"server_notification\") {\n\t\tconst threadId = (event.notification.params as { threadId?: unknown }).threadId;\n\t\tif (typeof threadId === \"string\") {\n\t\t\treturn asThreadId(threadId);\n\t\t}\n\t}\n\tif (event.type === \"server_request\") {\n\t\tconst threadId = (event.request.params as { threadId?: unknown }).threadId;\n\t\tif (typeof threadId === \"string\") {\n\t\t\treturn asThreadId(threadId);\n\t\t}\n\t}\n\treturn asThreadId(\"00000000-0000-4000-8000-000000000000\");\n}\n"]}
@@ -0,0 +1,117 @@
1
+ // src/upstream/codex-rs/utils/string/src/truncate.ts
2
+ var APPROX_BYTES_PER_TOKEN = 4;
3
+ function truncate_middle_chars(value, maxBytes) {
4
+ return truncate_with_byte_estimate(value, maxBytes, false);
5
+ }
6
+ function truncate_middle_with_token_budget(value, maxTokens) {
7
+ if (value.length === 0) {
8
+ return ["", null];
9
+ }
10
+ if (maxTokens > 0 && utf8ByteLength(value) <= approx_bytes_for_tokens(maxTokens)) {
11
+ return [value, null];
12
+ }
13
+ const truncated = truncate_with_byte_estimate(
14
+ value,
15
+ approx_bytes_for_tokens(maxTokens),
16
+ true
17
+ );
18
+ const totalTokens = approx_token_count(value);
19
+ return truncated === value ? [truncated, null] : [truncated, totalTokens];
20
+ }
21
+ function approx_token_count(text) {
22
+ const length = utf8ByteLength(text);
23
+ return Math.ceil(length / APPROX_BYTES_PER_TOKEN);
24
+ }
25
+ function approx_bytes_for_tokens(tokens) {
26
+ return Math.max(0, Math.trunc(tokens)) * APPROX_BYTES_PER_TOKEN;
27
+ }
28
+ function approx_tokens_from_byte_count(bytes) {
29
+ return Math.ceil(Math.max(0, Math.trunc(bytes)) / APPROX_BYTES_PER_TOKEN);
30
+ }
31
+ function truncate_with_byte_estimate(value, maxBytes, useTokens) {
32
+ if (value.length === 0) {
33
+ return "";
34
+ }
35
+ const normalizedMaxBytes = Math.max(0, Math.trunc(maxBytes));
36
+ const totalBytes = utf8ByteLength(value);
37
+ if (normalizedMaxBytes === 0) {
38
+ return format_truncation_marker(
39
+ useTokens,
40
+ removed_units(useTokens, totalBytes, [...value].length)
41
+ );
42
+ }
43
+ if (totalBytes <= normalizedMaxBytes) {
44
+ return value;
45
+ }
46
+ const [leftBudget, rightBudget] = split_budget(normalizedMaxBytes);
47
+ const { left, removedChars, right } = split_string(value, leftBudget, rightBudget);
48
+ const marker = format_truncation_marker(
49
+ useTokens,
50
+ removed_units(
51
+ useTokens,
52
+ Math.max(0, totalBytes - normalizedMaxBytes),
53
+ removedChars
54
+ )
55
+ );
56
+ return assemble_truncated_output(left, right, marker);
57
+ }
58
+ function split_budget(maxBytes) {
59
+ const left = Math.floor(maxBytes / 2);
60
+ return [left, maxBytes - left];
61
+ }
62
+ function split_string(value, beginningBytes, endBytes) {
63
+ let left = "";
64
+ let right = "";
65
+ let leftBytes = 0;
66
+ const chars = [...value];
67
+ for (const char of chars) {
68
+ const nextBytes = utf8ByteLength(char);
69
+ if (leftBytes + nextBytes > beginningBytes) {
70
+ break;
71
+ }
72
+ left += char;
73
+ leftBytes += nextBytes;
74
+ }
75
+ let rightBytes = 0;
76
+ for (let index = chars.length - 1; index >= 0; index -= 1) {
77
+ const char = chars[index] ?? "";
78
+ const nextBytes = utf8ByteLength(char);
79
+ if (rightBytes + nextBytes > endBytes) {
80
+ break;
81
+ }
82
+ right = `${char}${right}`;
83
+ rightBytes += nextBytes;
84
+ }
85
+ const keptChars = [...left].length + [...right].length;
86
+ return {
87
+ left,
88
+ removedChars: Math.max(0, chars.length - keptChars),
89
+ right
90
+ };
91
+ }
92
+ function assemble_truncated_output(left, right, marker) {
93
+ if (!left && !right) {
94
+ return marker;
95
+ }
96
+ if (!left) {
97
+ return `${marker}${right}`;
98
+ }
99
+ if (!right) {
100
+ return `${left}${marker}`;
101
+ }
102
+ return `${left}${marker}${right}`;
103
+ }
104
+ function format_truncation_marker(useTokens, removedUnits) {
105
+ const unit = useTokens ? "tokens" : "chars";
106
+ return `\u2026${removedUnits} ${unit} truncated\u2026`;
107
+ }
108
+ function removed_units(useTokens, removedBytes, removedChars) {
109
+ return useTokens ? approx_tokens_from_byte_count(removedBytes) : removedChars;
110
+ }
111
+ function utf8ByteLength(value) {
112
+ return new TextEncoder().encode(value).byteLength;
113
+ }
114
+
115
+ export { approx_bytes_for_tokens, approx_token_count, approx_tokens_from_byte_count, truncate_middle_chars, truncate_middle_with_token_budget };
116
+ //# sourceMappingURL=chunk-YHVCFD2D.js.map
117
+ //# sourceMappingURL=chunk-YHVCFD2D.js.map