@qduc/term2 0.11.0 → 0.12.0

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 (1278) hide show
  1. package/README.md +6 -4
  2. package/dist/agent.d.ts +21 -13
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +123 -35
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app.d.ts +3 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +283 -128
  9. package/dist/app.js.map +1 -1
  10. package/dist/cli.js +91 -27
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/auto-approve-command.js.map +1 -1
  13. package/dist/commands/mode-commands.js.map +1 -1
  14. package/dist/commands/retry-tool-command.d.ts +13 -0
  15. package/dist/commands/retry-tool-command.d.ts.map +1 -0
  16. package/dist/commands/retry-tool-command.js +20 -0
  17. package/dist/commands/retry-tool-command.js.map +1 -0
  18. package/dist/commands/rewind-command.d.ts +37 -0
  19. package/dist/commands/rewind-command.d.ts.map +1 -0
  20. package/dist/commands/rewind-command.js +97 -0
  21. package/dist/commands/rewind-command.js.map +1 -0
  22. package/dist/commands/sandbox-command.js.map +1 -1
  23. package/dist/components/InputBox.d.ts +18 -32
  24. package/dist/components/InputBox.d.ts.map +1 -1
  25. package/dist/components/InputBox.js +178 -579
  26. package/dist/components/InputBox.js.map +1 -1
  27. package/dist/components/input/ApplicationInputSurface.d.ts +37 -0
  28. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
  29. package/dist/components/input/ApplicationInputSurface.js +78 -0
  30. package/dist/components/input/ApplicationInputSurface.js.map +1 -0
  31. package/dist/components/input/MenuStackHost.d.ts +12 -0
  32. package/dist/components/input/MenuStackHost.d.ts.map +1 -0
  33. package/dist/components/input/MenuStackHost.js +13 -0
  34. package/dist/components/input/MenuStackHost.js.map +1 -0
  35. package/dist/components/input/MenuSurface.d.ts +13 -0
  36. package/dist/components/input/MenuSurface.d.ts.map +1 -0
  37. package/dist/components/input/MenuSurface.js +86 -0
  38. package/dist/components/input/MenuSurface.js.map +1 -0
  39. package/dist/components/input/ModelMenuSession.d.ts +19 -0
  40. package/dist/components/input/ModelMenuSession.d.ts.map +1 -0
  41. package/dist/components/input/ModelMenuSession.js +144 -0
  42. package/dist/components/input/ModelMenuSession.js.map +1 -0
  43. package/dist/components/input/PathMenuSession.d.ts +16 -0
  44. package/dist/components/input/PathMenuSession.d.ts.map +1 -0
  45. package/dist/components/input/PathMenuSession.js +68 -0
  46. package/dist/components/input/PathMenuSession.js.map +1 -0
  47. package/dist/components/input/PendingQueueList.d.ts +20 -0
  48. package/dist/components/input/PendingQueueList.d.ts.map +1 -0
  49. package/dist/components/input/PendingQueueList.js +26 -0
  50. package/dist/components/input/PendingQueueList.js.map +1 -0
  51. package/dist/components/input/ProviderMenuSession.d.ts +16 -0
  52. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -0
  53. package/dist/components/input/ProviderMenuSession.js +93 -0
  54. package/dist/components/input/ProviderMenuSession.js.map +1 -0
  55. package/dist/components/input/RewindMenuSession.d.ts +14 -0
  56. package/dist/components/input/RewindMenuSession.d.ts.map +1 -0
  57. package/dist/components/input/RewindMenuSession.js +77 -0
  58. package/dist/components/input/RewindMenuSession.js.map +1 -0
  59. package/dist/components/input/SettingsMenuSession.d.ts +17 -0
  60. package/dist/components/input/SettingsMenuSession.d.ts.map +1 -0
  61. package/dist/components/input/SettingsMenuSession.js +136 -0
  62. package/dist/components/input/SettingsMenuSession.js.map +1 -0
  63. package/dist/components/input/SettingsValueMenuSession.d.ts +19 -0
  64. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -0
  65. package/dist/components/input/SettingsValueMenuSession.js +113 -0
  66. package/dist/components/input/SettingsValueMenuSession.js.map +1 -0
  67. package/dist/components/input/SkillsMenuSession.d.ts +16 -0
  68. package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
  69. package/dist/components/input/SkillsMenuSession.js +64 -0
  70. package/dist/components/input/SkillsMenuSession.js.map +1 -0
  71. package/dist/components/input/SlashMenuSession.d.ts +17 -0
  72. package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
  73. package/dist/components/input/SlashMenuSession.js +57 -0
  74. package/dist/components/input/SlashMenuSession.js.map +1 -0
  75. package/dist/components/input/determine-active-menu.d.ts +2 -0
  76. package/dist/components/input/determine-active-menu.d.ts.map +1 -1
  77. package/dist/components/input/determine-active-menu.js +12 -4
  78. package/dist/components/input/determine-active-menu.js.map +1 -1
  79. package/dist/components/input/insertions.d.ts +0 -13
  80. package/dist/components/input/insertions.d.ts.map +1 -1
  81. package/dist/components/input/insertions.js +0 -26
  82. package/dist/components/input/insertions.js.map +1 -1
  83. package/dist/components/input/menu-controller.d.ts +52 -0
  84. package/dist/components/input/menu-controller.d.ts.map +1 -0
  85. package/dist/components/input/menu-controller.js +690 -0
  86. package/dist/components/input/menu-controller.js.map +1 -0
  87. package/dist/components/input/menu-editor.d.ts +9 -0
  88. package/dist/components/input/menu-editor.d.ts.map +1 -0
  89. package/dist/components/input/menu-editor.js +45 -0
  90. package/dist/components/input/menu-editor.js.map +1 -0
  91. package/dist/components/input/menu-registry.d.ts +20 -0
  92. package/dist/components/input/menu-registry.d.ts.map +1 -0
  93. package/dist/components/input/menu-registry.js +25 -0
  94. package/dist/components/input/menu-registry.js.map +1 -0
  95. package/dist/components/input/menu-types.d.ts +320 -0
  96. package/dist/components/input/menu-types.d.ts.map +1 -0
  97. package/dist/components/input/menu-types.js +2 -0
  98. package/dist/components/input/menu-types.js.map +1 -0
  99. package/dist/components/input/settings-intent-host.d.ts +22 -0
  100. package/dist/components/input/settings-intent-host.d.ts.map +1 -0
  101. package/dist/components/input/settings-intent-host.js +69 -0
  102. package/dist/components/input/settings-intent-host.js.map +1 -0
  103. package/dist/components/input/triggers.d.ts +3 -0
  104. package/dist/components/input/triggers.d.ts.map +1 -1
  105. package/dist/components/input/triggers.js +258 -0
  106. package/dist/components/input/triggers.js.map +1 -1
  107. package/dist/components/layout/BackgroundTaskManager.d.ts +16 -0
  108. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -0
  109. package/dist/components/layout/BackgroundTaskManager.js +236 -0
  110. package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
  111. package/dist/components/layout/BackgroundTasksPanel.d.ts +2 -2
  112. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  113. package/dist/components/layout/BackgroundTasksPanel.js +64 -24
  114. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  115. package/dist/components/layout/Banner.js.map +1 -1
  116. package/dist/components/layout/BottomArea.d.ts +23 -19
  117. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  118. package/dist/components/layout/BottomArea.js +74 -48
  119. package/dist/components/layout/BottomArea.js.map +1 -1
  120. package/dist/components/layout/StatusBar.d.ts +3 -1
  121. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  122. package/dist/components/layout/StatusBar.js +102 -83
  123. package/dist/components/layout/StatusBar.js.map +1 -1
  124. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  125. package/dist/components/menu/RewindMenu.d.ts +18 -0
  126. package/dist/components/menu/RewindMenu.d.ts.map +1 -0
  127. package/dist/components/menu/RewindMenu.js +59 -0
  128. package/dist/components/menu/RewindMenu.js.map +1 -0
  129. package/dist/components/message/ChatMessage.d.ts +2 -1
  130. package/dist/components/message/ChatMessage.d.ts.map +1 -1
  131. package/dist/components/message/ChatMessage.js +1 -1
  132. package/dist/components/message/ChatMessage.js.map +1 -1
  133. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  134. package/dist/components/message/CommandMessage.js +138 -15
  135. package/dist/components/message/CommandMessage.js.map +1 -1
  136. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  137. package/dist/components/message/MemoryRenderer.js +16 -10
  138. package/dist/components/message/MemoryRenderer.js.map +1 -1
  139. package/dist/components/message/MessageList.d.ts +20 -3
  140. package/dist/components/message/MessageList.d.ts.map +1 -1
  141. package/dist/components/message/MessageList.js +1 -1
  142. package/dist/components/message/MessageList.js.map +1 -1
  143. package/dist/components/message/SubagentActivityMessage.d.ts +5 -1
  144. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  145. package/dist/components/message/SubagentActivityMessage.js +12 -4
  146. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  147. package/dist/components/message/command-message-helpers.d.ts +40 -3
  148. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  149. package/dist/components/message/command-message-helpers.js +49 -8
  150. package/dist/components/message/command-message-helpers.js.map +1 -1
  151. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -0
  152. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  153. package/dist/components/prompt/ApprovalPrompt.js +136 -59
  154. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  155. package/dist/context/InputContext.d.ts +15 -8
  156. package/dist/context/InputContext.d.ts.map +1 -1
  157. package/dist/context/InputContext.js +92 -15
  158. package/dist/context/InputContext.js.map +1 -1
  159. package/dist/contracts/application-stream.d.ts +38 -0
  160. package/dist/contracts/application-stream.d.ts.map +1 -0
  161. package/dist/contracts/application-stream.js +2 -0
  162. package/dist/contracts/application-stream.js.map +1 -0
  163. package/dist/contracts/continuation-handle.d.ts +18 -0
  164. package/dist/contracts/continuation-handle.d.ts.map +1 -0
  165. package/dist/contracts/continuation-handle.js +22 -0
  166. package/dist/contracts/continuation-handle.js.map +1 -0
  167. package/dist/contracts/conversation-items.d.ts +47 -0
  168. package/dist/contracts/conversation-items.d.ts.map +1 -0
  169. package/dist/contracts/conversation-items.js +2 -0
  170. package/dist/contracts/conversation-items.js.map +1 -0
  171. package/dist/contracts/conversation.d.ts +44 -4
  172. package/dist/contracts/conversation.d.ts.map +1 -1
  173. package/dist/contracts/conversation.js +9 -0
  174. package/dist/contracts/conversation.js.map +1 -1
  175. package/dist/contracts/model-errors.d.ts +10 -0
  176. package/dist/contracts/model-errors.d.ts.map +1 -0
  177. package/dist/contracts/model-errors.js +15 -0
  178. package/dist/contracts/model-errors.js.map +1 -0
  179. package/dist/contracts/model-types.d.ts +16 -0
  180. package/dist/contracts/model-types.d.ts.map +1 -0
  181. package/dist/contracts/model-types.js +2 -0
  182. package/dist/contracts/model-types.js.map +1 -0
  183. package/dist/contracts/patch.d.ts +17 -0
  184. package/dist/contracts/patch.d.ts.map +1 -0
  185. package/dist/contracts/patch.js +2 -0
  186. package/dist/contracts/patch.js.map +1 -0
  187. package/dist/contracts/provider-input.d.ts +34 -0
  188. package/dist/contracts/provider-input.d.ts.map +1 -0
  189. package/dist/contracts/provider-input.js +2 -0
  190. package/dist/contracts/provider-input.js.map +1 -0
  191. package/dist/contracts/streamed-model-turn.d.ts +230 -0
  192. package/dist/contracts/streamed-model-turn.d.ts.map +1 -0
  193. package/dist/contracts/streamed-model-turn.js +2 -0
  194. package/dist/contracts/streamed-model-turn.js.map +1 -0
  195. package/dist/env-setup.js +1 -1
  196. package/dist/hooks/conversation-ui-reducer.d.ts +27 -4
  197. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  198. package/dist/hooks/conversation-ui-reducer.js +51 -4
  199. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  200. package/dist/hooks/handoff-flow-reducer.d.ts +1 -36
  201. package/dist/hooks/handoff-flow-reducer.d.ts.map +1 -1
  202. package/dist/hooks/handoff-flow-reducer.js +3 -57
  203. package/dist/hooks/handoff-flow-reducer.js.map +1 -1
  204. package/dist/hooks/settings-completion-config.d.ts +1 -0
  205. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  206. package/dist/hooks/settings-completion-config.js +30 -6
  207. package/dist/hooks/settings-completion-config.js.map +1 -1
  208. package/dist/hooks/use-app-commands.d.ts +13 -11
  209. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  210. package/dist/hooks/use-app-commands.js +90 -63
  211. package/dist/hooks/use-app-commands.js.map +1 -1
  212. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +18 -1
  213. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  214. package/dist/hooks/use-app-keyboard-shortcuts.js +77 -8
  215. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  216. package/dist/hooks/use-conversation.d.ts +30 -13
  217. package/dist/hooks/use-conversation.d.ts.map +1 -1
  218. package/dist/hooks/use-conversation.js +85 -18
  219. package/dist/hooks/use-conversation.js.map +1 -1
  220. package/dist/hooks/use-escape-key.d.ts +4 -32
  221. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  222. package/dist/hooks/use-escape-key.js +27 -68
  223. package/dist/hooks/use-escape-key.js.map +1 -1
  224. package/dist/hooks/use-handoff-flow.d.ts +6 -6
  225. package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
  226. package/dist/hooks/use-handoff-flow.js +110 -118
  227. package/dist/hooks/use-handoff-flow.js.map +1 -1
  228. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  229. package/dist/hooks/use-model-selection.js +50 -59
  230. package/dist/hooks/use-model-selection.js.map +1 -1
  231. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  232. package/dist/hooks/use-path-completion.js +20 -11
  233. package/dist/hooks/use-path-completion.js.map +1 -1
  234. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  235. package/dist/hooks/use-provider-selection.js +19 -16
  236. package/dist/hooks/use-provider-selection.js.map +1 -1
  237. package/dist/hooks/use-rewind-selection.d.ts +30 -0
  238. package/dist/hooks/use-rewind-selection.d.ts.map +1 -0
  239. package/dist/hooks/{use-undo-selection.js → use-rewind-selection.js} +37 -28
  240. package/dist/hooks/use-rewind-selection.js.map +1 -0
  241. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  242. package/dist/hooks/use-runtime-settings.js +4 -3
  243. package/dist/hooks/use-runtime-settings.js.map +1 -1
  244. package/dist/hooks/use-selection.d.ts +1 -0
  245. package/dist/hooks/use-selection.d.ts.map +1 -1
  246. package/dist/hooks/use-selection.js +1 -1
  247. package/dist/hooks/use-selection.js.map +1 -1
  248. package/dist/hooks/use-setting.d.ts +3 -2
  249. package/dist/hooks/use-setting.d.ts.map +1 -1
  250. package/dist/hooks/use-setting.js +1 -1
  251. package/dist/hooks/use-setting.js.map +1 -1
  252. package/dist/hooks/use-settings-completion.d.ts +1 -0
  253. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  254. package/dist/hooks/use-settings-completion.js +22 -15
  255. package/dist/hooks/use-settings-completion.js.map +1 -1
  256. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  257. package/dist/hooks/use-settings-value-completion.js +40 -28
  258. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  259. package/dist/hooks/use-shell-mode.d.ts +3 -13
  260. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  261. package/dist/hooks/use-shell-mode.js +14 -53
  262. package/dist/hooks/use-shell-mode.js.map +1 -1
  263. package/dist/hooks/use-skill-selection.d.ts.map +1 -1
  264. package/dist/hooks/use-skill-selection.js +17 -11
  265. package/dist/hooks/use-skill-selection.js.map +1 -1
  266. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  267. package/dist/hooks/use-slash-commands.js +11 -10
  268. package/dist/hooks/use-slash-commands.js.map +1 -1
  269. package/dist/hooks/use-terminal-focus-notifier.js.map +1 -1
  270. package/dist/lib/agent-chat-service.d.ts +12 -8
  271. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  272. package/dist/lib/agent-chat-service.js +79 -44
  273. package/dist/lib/agent-chat-service.js.map +1 -1
  274. package/dist/lib/agent-client.d.ts +93 -17
  275. package/dist/lib/agent-client.d.ts.map +1 -1
  276. package/dist/lib/agent-client.js +398 -37
  277. package/dist/lib/agent-client.js.map +1 -1
  278. package/dist/lib/agent-configuration.d.ts +33 -15
  279. package/dist/lib/agent-configuration.d.ts.map +1 -1
  280. package/dist/lib/agent-configuration.js +107 -9
  281. package/dist/lib/agent-configuration.js.map +1 -1
  282. package/dist/lib/agent-factory.d.ts +33 -4
  283. package/dist/lib/agent-factory.d.ts.map +1 -1
  284. package/dist/lib/agent-factory.js +140 -101
  285. package/dist/lib/agent-factory.js.map +1 -1
  286. package/dist/lib/chained-input-filter.d.ts +27 -1
  287. package/dist/lib/chained-input-filter.d.ts.map +1 -1
  288. package/dist/lib/chained-input-filter.js +92 -33
  289. package/dist/lib/chained-input-filter.js.map +1 -1
  290. package/dist/lib/continuation-projection-mode.d.ts +3 -0
  291. package/dist/lib/continuation-projection-mode.d.ts.map +1 -0
  292. package/dist/lib/continuation-projection-mode.js +2 -0
  293. package/dist/lib/continuation-projection-mode.js.map +1 -0
  294. package/dist/lib/editor-impl.d.ts +1 -1
  295. package/dist/lib/editor-impl.d.ts.map +1 -1
  296. package/dist/lib/editor-impl.js +1 -1
  297. package/dist/lib/editor-impl.js.map +1 -1
  298. package/dist/lib/harness-invariant-error.d.ts +22 -0
  299. package/dist/lib/harness-invariant-error.d.ts.map +1 -0
  300. package/dist/lib/harness-invariant-error.js +30 -0
  301. package/dist/lib/harness-invariant-error.js.map +1 -0
  302. package/dist/lib/input-owner.d.ts +64 -0
  303. package/dist/lib/input-owner.d.ts.map +1 -0
  304. package/dist/lib/input-owner.js +34 -0
  305. package/dist/lib/input-owner.js.map +1 -0
  306. package/dist/lib/openai-strict-tool-schema.d.ts +7 -4
  307. package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
  308. package/dist/lib/openai-strict-tool-schema.js +8 -0
  309. package/dist/lib/openai-strict-tool-schema.js.map +1 -1
  310. package/dist/lib/subagent-bridge.d.ts +54 -3
  311. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  312. package/dist/lib/subagent-bridge.js +118 -20
  313. package/dist/lib/subagent-bridge.js.map +1 -1
  314. package/dist/lib/tool-invoke.d.ts +18 -10
  315. package/dist/lib/tool-invoke.d.ts.map +1 -1
  316. package/dist/lib/tool-invoke.js +92 -44
  317. package/dist/lib/tool-invoke.js.map +1 -1
  318. package/dist/non-interactive.d.ts +14 -4
  319. package/dist/non-interactive.d.ts.map +1 -1
  320. package/dist/non-interactive.js +91 -84
  321. package/dist/non-interactive.js.map +1 -1
  322. package/dist/prompts/anthropic.md +6 -55
  323. package/dist/prompts/async-subagent-delegation.d.ts +3 -5
  324. package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
  325. package/dist/prompts/async-subagent-delegation.js +10 -34
  326. package/dist/prompts/async-subagent-delegation.js.map +1 -1
  327. package/dist/prompts/async-subagent-delegation.ts +11 -40
  328. package/dist/prompts/gpt-5.6.md +49 -0
  329. package/dist/prompts/kimi.md +25 -63
  330. package/dist/prompts/memory.md +1 -1
  331. package/dist/prompts/orchestrator-prompt.test.ts +92 -0
  332. package/dist/prompts/orchestrator.md +20 -4
  333. package/dist/prompts/plan-mode-info.md +1 -1
  334. package/dist/prompts/prompt-constructor.d.ts +2 -0
  335. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  336. package/dist/prompts/prompt-constructor.js +9 -7
  337. package/dist/prompts/prompt-constructor.js.map +1 -1
  338. package/dist/prompts/prompt-constructor.test.ts +30 -8
  339. package/dist/prompts/prompt-constructor.ts +14 -7
  340. package/dist/prompts/prompt-profiles.d.ts.map +1 -1
  341. package/dist/prompts/prompt-profiles.js +5 -0
  342. package/dist/prompts/prompt-profiles.js.map +1 -1
  343. package/dist/prompts/prompt-profiles.test.ts +20 -0
  344. package/dist/prompts/prompt-profiles.ts +5 -0
  345. package/dist/prompts/search-via-shell.d.ts.map +1 -1
  346. package/dist/prompts/search-via-shell.js +8 -25
  347. package/dist/prompts/search-via-shell.js.map +1 -1
  348. package/dist/prompts/search-via-shell.test.ts +18 -0
  349. package/dist/prompts/search-via-shell.ts +8 -25
  350. package/dist/prompts/shell-auto-approval.d.ts +2 -2
  351. package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
  352. package/dist/prompts/shell-auto-approval.js +20 -5
  353. package/dist/prompts/shell-auto-approval.js.map +1 -1
  354. package/dist/prompts/shell-auto-approval.ts +20 -5
  355. package/dist/prompts/steering-notice.d.ts +16 -0
  356. package/dist/prompts/steering-notice.d.ts.map +1 -0
  357. package/dist/prompts/steering-notice.js +24 -0
  358. package/dist/prompts/steering-notice.js.map +1 -0
  359. package/dist/prompts/steering-notice.ts +24 -0
  360. package/dist/prompts/subagent-delegation.d.ts +6 -5
  361. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  362. package/dist/prompts/subagent-delegation.js +36 -13
  363. package/dist/prompts/subagent-delegation.js.map +1 -1
  364. package/dist/prompts/subagent-delegation.test.ts +24 -2
  365. package/dist/prompts/subagent-delegation.ts +54 -14
  366. package/dist/prompts/subagents/explorer.md +24 -14
  367. package/dist/prompts/subagents/worker-prompt.test.ts +35 -0
  368. package/dist/prompts/subagents/worker.md +8 -0
  369. package/dist/prompts/worktree-hygiene.md +1 -0
  370. package/dist/providers/ai-sdk-anthropic.provider.d.ts +3 -3
  371. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  372. package/dist/providers/ai-sdk-anthropic.provider.js +8 -4
  373. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  374. package/dist/providers/ai-sdk-google.provider.d.ts +5 -4
  375. package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
  376. package/dist/providers/ai-sdk-google.provider.js +23 -3
  377. package/dist/providers/ai-sdk-google.provider.js.map +1 -1
  378. package/dist/providers/ai-sdk-message-normalizer.d.ts +3 -7
  379. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -1
  380. package/dist/providers/ai-sdk-message-normalizer.js +27 -11
  381. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -1
  382. package/dist/providers/ai-sdk-openrouter.provider.d.ts +5 -4
  383. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
  384. package/dist/providers/ai-sdk-openrouter.provider.js +25 -3
  385. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
  386. package/dist/providers/ai-sdk-provider-settings.d.ts +10 -0
  387. package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -0
  388. package/dist/providers/ai-sdk-provider-settings.js +37 -0
  389. package/dist/providers/ai-sdk-provider-settings.js.map +1 -0
  390. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  391. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -0
  392. package/dist/providers/ai-sdk-streamed-model.js +338 -0
  393. package/dist/providers/ai-sdk-streamed-model.js.map +1 -0
  394. package/dist/providers/codex-responses-model.d.ts +39 -12
  395. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  396. package/dist/providers/codex-responses-model.js +656 -155
  397. package/dist/providers/codex-responses-model.js.map +1 -1
  398. package/dist/providers/codex-turn-converter.d.ts +12 -0
  399. package/dist/providers/codex-turn-converter.d.ts.map +1 -0
  400. package/dist/providers/codex-turn-converter.js +168 -0
  401. package/dist/providers/codex-turn-converter.js.map +1 -0
  402. package/dist/providers/codex.provider.d.ts +21 -0
  403. package/dist/providers/codex.provider.d.ts.map +1 -1
  404. package/dist/providers/codex.provider.js +57 -27
  405. package/dist/providers/codex.provider.js.map +1 -1
  406. package/dist/providers/common/openai-compatible-message-contract.d.ts +8 -0
  407. package/dist/providers/common/openai-compatible-message-contract.d.ts.map +1 -0
  408. package/dist/providers/common/openai-compatible-message-contract.js +23 -0
  409. package/dist/providers/common/openai-compatible-message-contract.js.map +1 -0
  410. package/dist/providers/common/openai-compatible-messages.d.ts +0 -4
  411. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  412. package/dist/providers/common/openai-compatible-messages.js +0 -288
  413. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  414. package/dist/providers/fetch/composer.d.ts.map +1 -1
  415. package/dist/providers/fetch/composer.js +1 -0
  416. package/dist/providers/fetch/composer.js.map +1 -1
  417. package/dist/providers/model-catalog/catalog.d.ts +31 -0
  418. package/dist/providers/model-catalog/catalog.d.ts.map +1 -0
  419. package/dist/providers/model-catalog/catalog.generated.d.ts +3010 -0
  420. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -0
  421. package/dist/providers/model-catalog/catalog.generated.js +3004 -0
  422. package/dist/providers/model-catalog/catalog.generated.js.map +1 -0
  423. package/dist/providers/model-catalog/catalog.js +62 -0
  424. package/dist/providers/model-catalog/catalog.js.map +1 -0
  425. package/dist/providers/model-catalog/generate-catalog.d.ts +42 -0
  426. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -0
  427. package/dist/providers/model-catalog/generate-catalog.js +96 -0
  428. package/dist/providers/model-catalog/generate-catalog.js.map +1 -0
  429. package/dist/providers/openai-chained-input-compatibility.d.ts +36 -0
  430. package/dist/providers/openai-chained-input-compatibility.d.ts.map +1 -0
  431. package/dist/providers/openai-chained-input-compatibility.js +60 -0
  432. package/dist/providers/openai-chained-input-compatibility.js.map +1 -0
  433. package/dist/providers/openai-chat-completions-model.d.ts +12 -0
  434. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
  435. package/dist/providers/openai-chat-completions-model.js +271 -0
  436. package/dist/providers/openai-chat-completions-model.js.map +1 -0
  437. package/dist/providers/openai-compatible-lazy.d.ts +1 -1
  438. package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
  439. package/dist/providers/openai-compatible-lazy.js +24 -36
  440. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  441. package/dist/providers/openai-compatible-middleware.d.ts +4 -1
  442. package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
  443. package/dist/providers/openai-compatible-middleware.js +15 -14
  444. package/dist/providers/openai-compatible-middleware.js.map +1 -1
  445. package/dist/providers/openai-compatible-response-normalizer.d.ts +10 -1
  446. package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
  447. package/dist/providers/openai-compatible-response-normalizer.js +15 -4
  448. package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
  449. package/dist/providers/openai-compatible.provider.d.ts +7 -10
  450. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  451. package/dist/providers/openai-compatible.provider.js +80 -78
  452. package/dist/providers/openai-compatible.provider.js.map +1 -1
  453. package/dist/providers/openai-request-prefix-binding.d.ts +28 -0
  454. package/dist/providers/openai-request-prefix-binding.d.ts.map +1 -0
  455. package/dist/providers/openai-request-prefix-binding.js +78 -0
  456. package/dist/providers/openai-request-prefix-binding.js.map +1 -0
  457. package/dist/providers/openai-responses-model.d.ts +43 -0
  458. package/dist/providers/openai-responses-model.d.ts.map +1 -0
  459. package/dist/providers/openai-responses-model.js +564 -0
  460. package/dist/providers/openai-responses-model.js.map +1 -0
  461. package/dist/providers/openai.provider.d.ts +11 -8
  462. package/dist/providers/openai.provider.d.ts.map +1 -1
  463. package/dist/providers/openai.provider.js +43 -91
  464. package/dist/providers/openai.provider.js.map +1 -1
  465. package/dist/providers/opencode-routing.d.ts +1 -1
  466. package/dist/providers/opencode-routing.d.ts.map +1 -1
  467. package/dist/providers/opencode-routing.js +4 -2
  468. package/dist/providers/opencode-routing.js.map +1 -1
  469. package/dist/providers/opencode-session.d.ts.map +1 -1
  470. package/dist/providers/opencode-session.js +28 -3
  471. package/dist/providers/opencode-session.js.map +1 -1
  472. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  473. package/dist/providers/openrouter.provider.js +33 -33
  474. package/dist/providers/openrouter.provider.js.map +1 -1
  475. package/dist/providers/provider-request-capture.d.ts +35 -0
  476. package/dist/providers/provider-request-capture.d.ts.map +1 -0
  477. package/dist/providers/provider-request-capture.js +22 -0
  478. package/dist/providers/provider-request-capture.js.map +1 -0
  479. package/dist/providers/provider-service.d.ts +9 -7
  480. package/dist/providers/provider-service.d.ts.map +1 -1
  481. package/dist/providers/provider-service.js +29 -28
  482. package/dist/providers/provider-service.js.map +1 -1
  483. package/dist/providers/registry.d.ts +14 -9
  484. package/dist/providers/registry.d.ts.map +1 -1
  485. package/dist/providers/registry.js.map +1 -1
  486. package/dist/providers/retrying-model.d.ts +8 -6
  487. package/dist/providers/retrying-model.d.ts.map +1 -1
  488. package/dist/providers/retrying-model.js +7 -20
  489. package/dist/providers/retrying-model.js.map +1 -1
  490. package/dist/providers/web-search/exa.provider.js.map +1 -1
  491. package/dist/providers/web-search/registry.js.map +1 -1
  492. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  493. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  494. package/dist/providers/websocket-receive-watchdog.js +9 -1
  495. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  496. package/dist/scripts/eval-auto-approval/runner.js +2 -0
  497. package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
  498. package/dist/services/agent-runtime/application-run-loop.d.ts +205 -0
  499. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -0
  500. package/dist/services/agent-runtime/application-run-loop.js +1236 -0
  501. package/dist/services/agent-runtime/application-run-loop.js.map +1 -0
  502. package/dist/services/agent-runtime/compose-agent-runtime.d.ts +3 -0
  503. package/dist/services/agent-runtime/compose-agent-runtime.d.ts.map +1 -1
  504. package/dist/services/agent-runtime/compose-agent-runtime.js +4 -0
  505. package/dist/services/agent-runtime/compose-agent-runtime.js.map +1 -1
  506. package/dist/services/agent-runtime/generation-guard.d.ts +69 -0
  507. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -0
  508. package/dist/services/agent-runtime/generation-guard.js +270 -0
  509. package/dist/services/agent-runtime/generation-guard.js.map +1 -0
  510. package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
  511. package/dist/services/agent-runtime/model-resolver.js +7 -6
  512. package/dist/services/agent-runtime/model-resolver.js.map +1 -1
  513. package/dist/services/agent-runtime/structured-output.d.ts.map +1 -1
  514. package/dist/services/agent-runtime/structured-output.js +1 -21
  515. package/dist/services/agent-runtime/structured-output.js.map +1 -1
  516. package/dist/services/agent-runtime/tool-invocation-context.d.ts +73 -0
  517. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -0
  518. package/dist/services/agent-runtime/tool-invocation-context.js +66 -0
  519. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -0
  520. package/dist/services/agent-stream.d.ts +41 -2
  521. package/dist/services/agent-stream.d.ts.map +1 -1
  522. package/dist/services/agent-stream.js +46 -1
  523. package/dist/services/agent-stream.js.map +1 -1
  524. package/dist/services/approval/approval-decision-executor.d.ts +42 -0
  525. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -0
  526. package/dist/services/approval/approval-decision-executor.js +207 -0
  527. package/dist/services/approval/approval-decision-executor.js.map +1 -0
  528. package/dist/services/approval/approval-flow-coordinator.d.ts +25 -8
  529. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  530. package/dist/services/approval/approval-flow-coordinator.js +34 -167
  531. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  532. package/dist/services/approval/approval-replay.d.ts +52 -0
  533. package/dist/services/approval/approval-replay.d.ts.map +1 -0
  534. package/dist/services/approval/approval-replay.js +68 -0
  535. package/dist/services/approval/approval-replay.js.map +1 -0
  536. package/dist/services/approval/approval-state.d.ts +3 -6
  537. package/dist/services/approval/approval-state.d.ts.map +1 -1
  538. package/dist/services/approval/approval-state.js +0 -10
  539. package/dist/services/approval/approval-state.js.map +1 -1
  540. package/dist/services/approval/background-subagent-approval-controller.d.ts +25 -0
  541. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -0
  542. package/dist/services/approval/background-subagent-approval-controller.js +65 -0
  543. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -0
  544. package/dist/services/approval/background-subagent-approval-queue.d.ts +137 -0
  545. package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -0
  546. package/dist/services/approval/background-subagent-approval-queue.js +200 -0
  547. package/dist/services/approval/background-subagent-approval-queue.js.map +1 -0
  548. package/dist/services/approval/non-interactive-approval-policy.d.ts +33 -0
  549. package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -0
  550. package/dist/services/approval/non-interactive-approval-policy.js +85 -0
  551. package/dist/services/approval/non-interactive-approval-policy.js.map +1 -0
  552. package/dist/services/approval/session-read-access.d.ts +10 -0
  553. package/dist/services/approval/session-read-access.d.ts.map +1 -1
  554. package/dist/services/approval/session-read-access.js +12 -0
  555. package/dist/services/approval/session-read-access.js.map +1 -1
  556. package/dist/services/approval/session-read-grant-target.d.ts +7 -0
  557. package/dist/services/approval/session-read-grant-target.d.ts.map +1 -0
  558. package/dist/services/approval/session-read-grant-target.js +36 -0
  559. package/dist/services/approval/session-read-grant-target.js.map +1 -0
  560. package/dist/services/approval/shell-auto-approval-evaluator.d.ts +11 -3
  561. package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
  562. package/dist/services/approval/shell-auto-approval-evaluator.js +140 -46
  563. package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
  564. package/dist/services/approval/shell-auto-approval-resolver.d.ts +13 -0
  565. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  566. package/dist/services/approval/shell-auto-approval-resolver.js +74 -6
  567. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  568. package/dist/services/approval/shell-sandbox-approval.d.ts +22 -1
  569. package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -1
  570. package/dist/services/approval/shell-sandbox-approval.js +31 -4
  571. package/dist/services/approval/shell-sandbox-approval.js.map +1 -1
  572. package/dist/services/approval/tool-approval-batch-coordinator.d.ts +9 -0
  573. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  574. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -4
  575. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  576. package/dist/services/approval/tool-owner.d.ts +5 -2
  577. package/dist/services/approval/tool-owner.d.ts.map +1 -1
  578. package/dist/services/approval/tool-owner.js +0 -56
  579. package/dist/services/approval/tool-owner.js.map +1 -1
  580. package/dist/services/approval/tool-ownership-registry.d.ts +25 -0
  581. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -0
  582. package/dist/services/approval/tool-ownership-registry.js +63 -0
  583. package/dist/services/approval/tool-ownership-registry.js.map +1 -0
  584. package/dist/services/command-message-streaming.d.ts +8 -4
  585. package/dist/services/command-message-streaming.d.ts.map +1 -1
  586. package/dist/services/command-message-streaming.js +13 -52
  587. package/dist/services/command-message-streaming.js.map +1 -1
  588. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  589. package/dist/services/conversation/conversation-adapter-factory.js +1 -0
  590. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  591. package/dist/services/conversation/conversation-adapter.d.ts +120 -13
  592. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  593. package/dist/services/conversation/conversation-adapter.js +378 -63
  594. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  595. package/dist/services/conversation/conversation-admission-workflow.d.ts +69 -0
  596. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -0
  597. package/dist/services/conversation/conversation-admission-workflow.js +110 -0
  598. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -0
  599. package/dist/services/conversation/conversation-decoder.d.ts +14 -0
  600. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -0
  601. package/dist/services/conversation/conversation-decoder.js +149 -0
  602. package/dist/services/conversation/conversation-decoder.js.map +1 -0
  603. package/dist/services/conversation/conversation-events.d.ts +72 -24
  604. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  605. package/dist/services/conversation/conversation-history-repair.d.ts.map +1 -1
  606. package/dist/services/conversation/conversation-history-repair.js +34 -37
  607. package/dist/services/conversation/conversation-history-repair.js.map +1 -1
  608. package/dist/services/conversation/conversation-message-projection.d.ts +27 -0
  609. package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -0
  610. package/dist/services/conversation/conversation-message-projection.js +59 -0
  611. package/dist/services/conversation/conversation-message-projection.js.map +1 -0
  612. package/dist/services/conversation/conversation-orchestrator.d.ts +23 -14
  613. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  614. package/dist/services/conversation/conversation-orchestrator.js +472 -158
  615. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  616. package/dist/services/conversation/conversation-orchestrator.types.d.ts +16 -11
  617. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  618. package/dist/services/conversation/conversation-persistence-types.d.ts +15 -38
  619. package/dist/services/conversation/conversation-persistence-types.d.ts.map +1 -1
  620. package/dist/services/conversation/conversation-persistence.d.ts +3 -10
  621. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  622. package/dist/services/conversation/conversation-persistence.js +66 -15
  623. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  624. package/dist/services/conversation/conversation-replay.d.ts +7 -5
  625. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  626. package/dist/services/conversation/conversation-replay.js +127 -66
  627. package/dist/services/conversation/conversation-replay.js.map +1 -1
  628. package/dist/services/conversation/conversation-result-builder.d.ts +16 -2
  629. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  630. package/dist/services/conversation/conversation-result-builder.js +51 -15
  631. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  632. package/dist/services/conversation/conversation-runtime-factory.d.ts +18 -0
  633. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  634. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  635. package/dist/services/conversation/conversation-service.d.ts +67 -11
  636. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  637. package/dist/services/conversation/conversation-service.js +133 -16
  638. package/dist/services/conversation/conversation-service.js.map +1 -1
  639. package/dist/services/conversation/conversation-state-projector.d.ts +3 -3
  640. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  641. package/dist/services/conversation/conversation-state-projector.js +18 -0
  642. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  643. package/dist/services/conversation/conversation-store.d.ts +69 -12
  644. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  645. package/dist/services/conversation/conversation-store.js +216 -119
  646. package/dist/services/conversation/conversation-store.js.map +1 -1
  647. package/dist/services/conversation/conversation-turn-items.d.ts +8 -2
  648. package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
  649. package/dist/services/conversation/conversation-turn-items.js +96 -275
  650. package/dist/services/conversation/conversation-turn-items.js.map +1 -1
  651. package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -1
  652. package/dist/services/conversation/journal-to-ledger.js +4 -24
  653. package/dist/services/conversation/journal-to-ledger.js.map +1 -1
  654. package/dist/services/conversation/run-item-normalizer.d.ts +5 -0
  655. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -0
  656. package/dist/services/conversation/run-item-normalizer.js +245 -0
  657. package/dist/services/conversation/run-item-normalizer.js.map +1 -0
  658. package/dist/services/conversation/user-turn-item.d.ts +14 -0
  659. package/dist/services/conversation/user-turn-item.d.ts.map +1 -0
  660. package/dist/services/conversation/user-turn-item.js +27 -0
  661. package/dist/services/conversation/user-turn-item.js.map +1 -0
  662. package/dist/services/conversation-agent-client.d.ts +77 -6
  663. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  664. package/dist/services/cost/model-cost.d.ts +147 -0
  665. package/dist/services/cost/model-cost.d.ts.map +1 -0
  666. package/dist/services/cost/model-cost.js +217 -0
  667. package/dist/services/cost/model-cost.js.map +1 -0
  668. package/dist/services/cost/pricing-overlay.d.ts +26 -0
  669. package/dist/services/cost/pricing-overlay.d.ts.map +1 -0
  670. package/dist/services/cost/pricing-overlay.js +39 -0
  671. package/dist/services/cost/pricing-overlay.js.map +1 -0
  672. package/dist/services/cost/pricing.d.ts +13 -0
  673. package/dist/services/cost/pricing.d.ts.map +1 -0
  674. package/dist/services/cost/pricing.js +76 -0
  675. package/dist/services/cost/pricing.js.map +1 -0
  676. package/dist/services/handoff/handoff-flow-reducer.d.ts +27 -0
  677. package/dist/services/handoff/handoff-flow-reducer.d.ts.map +1 -0
  678. package/dist/services/handoff/handoff-flow-reducer.js +26 -0
  679. package/dist/services/handoff/handoff-flow-reducer.js.map +1 -0
  680. package/dist/services/handoff/handoff-session.d.ts +35 -0
  681. package/dist/services/handoff/handoff-session.d.ts.map +1 -0
  682. package/dist/services/handoff/handoff-session.js +136 -0
  683. package/dist/services/handoff/handoff-session.js.map +1 -0
  684. package/dist/services/hooks/hook-contracts.d.ts +124 -0
  685. package/dist/services/hooks/hook-contracts.d.ts.map +1 -0
  686. package/dist/services/hooks/hook-contracts.js +92 -0
  687. package/dist/services/hooks/hook-contracts.js.map +1 -0
  688. package/dist/services/hooks/hook-discovery.d.ts +45 -0
  689. package/dist/services/hooks/hook-discovery.d.ts.map +1 -0
  690. package/dist/services/hooks/hook-discovery.js +255 -0
  691. package/dist/services/hooks/hook-discovery.js.map +1 -0
  692. package/dist/services/hooks/hook-editor-shim.d.ts +6 -0
  693. package/dist/services/hooks/hook-editor-shim.d.ts.map +1 -0
  694. package/dist/services/hooks/hook-editor-shim.js +190 -0
  695. package/dist/services/hooks/hook-editor-shim.js.map +1 -0
  696. package/dist/services/hooks/hook-event-factory.d.ts +19 -0
  697. package/dist/services/hooks/hook-event-factory.d.ts.map +1 -0
  698. package/dist/services/hooks/hook-event-factory.js +45 -0
  699. package/dist/services/hooks/hook-event-factory.js.map +1 -0
  700. package/dist/services/hooks/hook-module-loader.d.ts +38 -0
  701. package/dist/services/hooks/hook-module-loader.d.ts.map +1 -0
  702. package/dist/services/hooks/hook-module-loader.js +69 -0
  703. package/dist/services/hooks/hook-module-loader.js.map +1 -0
  704. package/dist/services/hooks/hook-registry.d.ts +47 -0
  705. package/dist/services/hooks/hook-registry.d.ts.map +1 -0
  706. package/dist/services/hooks/hook-registry.js +185 -0
  707. package/dist/services/hooks/hook-registry.js.map +1 -0
  708. package/dist/services/hooks/hook-service.d.ts +44 -0
  709. package/dist/services/hooks/hook-service.d.ts.map +1 -0
  710. package/dist/services/hooks/hook-service.js +138 -0
  711. package/dist/services/hooks/hook-service.js.map +1 -0
  712. package/dist/services/hooks/hook-tool-lifecycle.d.ts +6 -0
  713. package/dist/services/hooks/hook-tool-lifecycle.d.ts.map +1 -0
  714. package/dist/services/hooks/hook-tool-lifecycle.js +33 -0
  715. package/dist/services/hooks/hook-tool-lifecycle.js.map +1 -0
  716. package/dist/services/hooks/index.d.ts +2 -0
  717. package/dist/services/hooks/index.d.ts.map +1 -0
  718. package/dist/services/hooks/index.js +2 -0
  719. package/dist/services/hooks/index.js.map +1 -0
  720. package/dist/services/input-surge-guard.d.ts.map +1 -1
  721. package/dist/services/input-surge-guard.js +13 -34
  722. package/dist/services/input-surge-guard.js.map +1 -1
  723. package/dist/services/logging/assistant-turn-journal.d.ts +1 -1
  724. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  725. package/dist/services/logging/assistant-turn-journal.js +21 -36
  726. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  727. package/dist/services/logging/conversation-log-events.d.ts +70 -7
  728. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  729. package/dist/services/logging/conversation-log-events.js +9 -0
  730. package/dist/services/logging/conversation-log-events.js.map +1 -1
  731. package/dist/services/logging/conversation-log-writer.d.ts +10 -4
  732. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  733. package/dist/services/logging/conversation-log-writer.js +184 -57
  734. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  735. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  736. package/dist/services/logging/conversation-logger.js +34 -1
  737. package/dist/services/logging/conversation-logger.js.map +1 -1
  738. package/dist/services/logging/logging-service.d.ts.map +1 -1
  739. package/dist/services/logging/logging-service.js +6 -2
  740. package/dist/services/logging/logging-service.js.map +1 -1
  741. package/dist/services/logging/provider-traffic.d.ts +2 -1
  742. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  743. package/dist/services/logging/provider-traffic.js +81 -5
  744. package/dist/services/logging/provider-traffic.js.map +1 -1
  745. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  746. package/dist/services/memory/memory-capabilities.js +13 -8
  747. package/dist/services/memory/memory-capabilities.js.map +1 -1
  748. package/dist/services/model-service.d.ts +3 -0
  749. package/dist/services/model-service.d.ts.map +1 -1
  750. package/dist/services/model-service.js +3 -1
  751. package/dist/services/model-service.js.map +1 -1
  752. package/dist/services/models/model-catalog-session.d.ts +24 -0
  753. package/dist/services/models/model-catalog-session.d.ts.map +1 -0
  754. package/dist/services/models/model-catalog-session.js +70 -0
  755. package/dist/services/models/model-catalog-session.js.map +1 -0
  756. package/dist/services/openai-candidate-observer.d.ts +18 -0
  757. package/dist/services/openai-candidate-observer.d.ts.map +1 -0
  758. package/dist/services/openai-candidate-observer.js +56 -0
  759. package/dist/services/openai-candidate-observer.js.map +1 -0
  760. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts +20 -0
  761. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts.map +1 -0
  762. package/dist/services/openai-root-checkpoint-lifecycle-observer.js +21 -0
  763. package/dist/services/openai-root-checkpoint-lifecycle-observer.js.map +1 -0
  764. package/dist/services/openai-root-provider-identity.d.ts +11 -0
  765. package/dist/services/openai-root-provider-identity.d.ts.map +1 -0
  766. package/dist/services/openai-root-provider-identity.js +16 -0
  767. package/dist/services/openai-root-provider-identity.js.map +1 -0
  768. package/dist/services/openai-root-selector-parity-observer.d.ts +53 -0
  769. package/dist/services/openai-root-selector-parity-observer.d.ts.map +1 -0
  770. package/dist/services/openai-root-selector-parity-observer.js +62 -0
  771. package/dist/services/openai-root-selector-parity-observer.js.map +1 -0
  772. package/dist/services/plan-mode-interceptor.js +2 -2
  773. package/dist/services/plan-mode-interceptor.js.map +1 -1
  774. package/dist/services/provider-continuity.d.ts +79 -0
  775. package/dist/services/provider-continuity.d.ts.map +1 -1
  776. package/dist/services/provider-continuity.js +170 -0
  777. package/dist/services/provider-continuity.js.map +1 -1
  778. package/dist/services/providers/provider-management-session.d.ts +12 -0
  779. package/dist/services/providers/provider-management-session.d.ts.map +1 -0
  780. package/dist/services/providers/provider-management-session.js +21 -0
  781. package/dist/services/providers/provider-management-session.js.map +1 -0
  782. package/dist/services/queue/queue-controller.d.ts +10 -14
  783. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  784. package/dist/services/queue/queue-controller.js +77 -59
  785. package/dist/services/queue/queue-controller.js.map +1 -1
  786. package/dist/services/retry/conversation-retry-policy.js +3 -3
  787. package/dist/services/retry/conversation-retry-policy.js.map +1 -1
  788. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  789. package/dist/services/retry/recovery-executor.js +7 -8
  790. package/dist/services/retry/recovery-executor.js.map +1 -1
  791. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  792. package/dist/services/retry/recovery-policy.js +4 -1
  793. package/dist/services/retry/recovery-policy.js.map +1 -1
  794. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  795. package/dist/services/retry/retry-classifier.js +6 -3
  796. package/dist/services/retry/retry-classifier.js.map +1 -1
  797. package/dist/services/retry/retry-contracts.d.ts +3 -5
  798. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  799. package/dist/services/retry/retry-error-classification.d.ts +1 -0
  800. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  801. package/dist/services/retry/retry-error-classification.js +28 -0
  802. package/dist/services/retry/retry-error-classification.js.map +1 -1
  803. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  804. package/dist/services/retry/retry-event-presenter.js +4 -1
  805. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  806. package/dist/services/retry/upstream-retry-policy.js +3 -3
  807. package/dist/services/rtk-service.d.ts.map +1 -1
  808. package/dist/services/rtk-service.js +3 -15
  809. package/dist/services/rtk-service.js.map +1 -1
  810. package/dist/services/runtime-setting-router.d.ts +19 -0
  811. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  812. package/dist/services/runtime-setting-router.js +33 -0
  813. package/dist/services/runtime-setting-router.js.map +1 -1
  814. package/dist/services/service-interfaces.d.ts +19 -2
  815. package/dist/services/service-interfaces.d.ts.map +1 -1
  816. package/dist/services/session/background-task-control.d.ts +123 -0
  817. package/dist/services/session/background-task-control.d.ts.map +1 -0
  818. package/dist/services/session/background-task-control.js +183 -0
  819. package/dist/services/session/background-task-control.js.map +1 -0
  820. package/dist/services/session/continuation-call-id-resolver.d.ts +16 -9
  821. package/dist/services/session/continuation-call-id-resolver.d.ts.map +1 -1
  822. package/dist/services/session/continuation-call-id-resolver.js +34 -48
  823. package/dist/services/session/continuation-call-id-resolver.js.map +1 -1
  824. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  825. package/dist/services/session/continuation-plan-applier.js +1 -3
  826. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  827. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  828. package/dist/services/session/continuation-recovery-handler.js +0 -2
  829. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  830. package/dist/services/session/continuation-state.d.ts +9 -5
  831. package/dist/services/session/continuation-state.d.ts.map +1 -1
  832. package/dist/services/session/continuation-state.js +1 -1
  833. package/dist/services/session/continuation-state.js.map +1 -1
  834. package/dist/services/session/live-run.d.ts +29 -0
  835. package/dist/services/session/live-run.d.ts.map +1 -0
  836. package/dist/services/session/live-run.js +111 -0
  837. package/dist/services/session/live-run.js.map +1 -0
  838. package/dist/services/session/nested-tool-compatibility-state.d.ts +20 -0
  839. package/dist/services/session/nested-tool-compatibility-state.d.ts.map +1 -0
  840. package/dist/services/session/nested-tool-compatibility-state.js +29 -0
  841. package/dist/services/session/nested-tool-compatibility-state.js.map +1 -0
  842. package/dist/services/session/pending-interaction-state.d.ts +60 -0
  843. package/dist/services/session/pending-interaction-state.d.ts.map +1 -0
  844. package/dist/services/session/pending-interaction-state.js +132 -0
  845. package/dist/services/session/pending-interaction-state.js.map +1 -0
  846. package/dist/services/session/post-execute-pause-capability.d.ts +17 -0
  847. package/dist/services/session/post-execute-pause-capability.d.ts.map +1 -0
  848. package/dist/services/session/post-execute-pause-capability.js +27 -0
  849. package/dist/services/session/post-execute-pause-capability.js.map +1 -0
  850. package/dist/services/session/post-execute-pause-policy.d.ts +20 -0
  851. package/dist/services/session/post-execute-pause-policy.d.ts.map +1 -0
  852. package/dist/services/session/post-execute-pause-policy.js +34 -0
  853. package/dist/services/session/post-execute-pause-policy.js.map +1 -0
  854. package/dist/services/session/post-execute-pending-registry.d.ts +63 -0
  855. package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -0
  856. package/dist/services/session/post-execute-pending-registry.js +123 -0
  857. package/dist/services/session/post-execute-pending-registry.js.map +1 -0
  858. package/dist/services/session/session-access-state.d.ts +24 -0
  859. package/dist/services/session/session-access-state.d.ts.map +1 -0
  860. package/dist/services/session/session-access-state.js +91 -0
  861. package/dist/services/session/session-access-state.js.map +1 -0
  862. package/dist/services/session/session-client-factory.d.ts +61 -0
  863. package/dist/services/session/session-client-factory.d.ts.map +1 -0
  864. package/dist/services/session/session-client-factory.js +103 -0
  865. package/dist/services/session/session-client-factory.js.map +1 -0
  866. package/dist/services/session/session-composition.d.ts +58 -0
  867. package/dist/services/session/session-composition.d.ts.map +1 -1
  868. package/dist/services/session/session-composition.js +178 -13
  869. package/dist/services/session/session-composition.js.map +1 -1
  870. package/dist/services/session/session-input-planner.d.ts +6 -2
  871. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  872. package/dist/services/session/session-input-planner.js +4 -0
  873. package/dist/services/session/session-input-planner.js.map +1 -1
  874. package/dist/services/session/session-lifecycle.d.ts +5 -0
  875. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  876. package/dist/services/session/session-lifecycle.js +16 -6
  877. package/dist/services/session/session-lifecycle.js.map +1 -1
  878. package/dist/services/session/session-manager.d.ts +11 -1
  879. package/dist/services/session/session-manager.d.ts.map +1 -1
  880. package/dist/services/session/session-manager.js +16 -3
  881. package/dist/services/session/session-manager.js.map +1 -1
  882. package/dist/services/session/session-stream-processor.d.ts +5 -0
  883. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  884. package/dist/services/session/session-stream-processor.js +164 -35
  885. package/dist/services/session/session-stream-processor.js.map +1 -1
  886. package/dist/services/session/session-tool-tracker.d.ts +10 -21
  887. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  888. package/dist/services/session/session-tool-tracker.js +12 -52
  889. package/dist/services/session/session-tool-tracker.js.map +1 -1
  890. package/dist/services/session/terminal-result-collector.d.ts +8 -0
  891. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  892. package/dist/services/session/terminal-result-collector.js +18 -4
  893. package/dist/services/session/terminal-result-collector.js.map +1 -1
  894. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
  895. package/dist/services/session/test-helpers/conversation-session-fixtures.js +8 -1
  896. package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
  897. package/dist/services/session/turn-attempt-factory.d.ts +2 -2
  898. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  899. package/dist/services/session/turn-attempt.d.ts +4 -2
  900. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  901. package/dist/services/session/turn-attempt.js +5 -0
  902. package/dist/services/session/turn-attempt.js.map +1 -1
  903. package/dist/services/session/turn-coordinator.d.ts +32 -2
  904. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  905. package/dist/services/session/turn-coordinator.js +180 -9
  906. package/dist/services/session/turn-coordinator.js.map +1 -1
  907. package/dist/services/session/turn-status-machine.d.ts +21 -6
  908. package/dist/services/session/turn-status-machine.d.ts.map +1 -1
  909. package/dist/services/session/turn-status-machine.js +50 -13
  910. package/dist/services/session/turn-status-machine.js.map +1 -1
  911. package/dist/services/session/turn-workflow.d.ts +35 -0
  912. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  913. package/dist/services/session/turn-workflow.js +373 -27
  914. package/dist/services/session/turn-workflow.js.map +1 -1
  915. package/dist/services/settings/ancillary-settings-migration.js +3 -3
  916. package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
  917. package/dist/services/settings/custom-provider-normalization.d.ts +10 -0
  918. package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -1
  919. package/dist/services/settings/custom-provider-normalization.js +35 -2
  920. package/dist/services/settings/custom-provider-normalization.js.map +1 -1
  921. package/dist/services/settings/settings-env.d.ts +3 -0
  922. package/dist/services/settings/settings-env.d.ts.map +1 -1
  923. package/dist/services/settings/settings-env.js +3 -3
  924. package/dist/services/settings/settings-env.js.map +1 -1
  925. package/dist/services/settings/settings-merger.d.ts +6 -5
  926. package/dist/services/settings/settings-merger.d.ts.map +1 -1
  927. package/dist/services/settings/settings-merger.js +9 -4
  928. package/dist/services/settings/settings-merger.js.map +1 -1
  929. package/dist/services/settings/settings-persistence.d.ts +17 -6
  930. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  931. package/dist/services/settings/settings-persistence.js +155 -28
  932. package/dist/services/settings/settings-persistence.js.map +1 -1
  933. package/dist/services/settings/settings-schema.d.ts +100 -4
  934. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  935. package/dist/services/settings/settings-schema.js +78 -8
  936. package/dist/services/settings/settings-schema.js.map +1 -1
  937. package/dist/services/settings/settings-service.d.ts +34 -5
  938. package/dist/services/settings/settings-service.d.ts.map +1 -1
  939. package/dist/services/settings/settings-service.js +200 -8
  940. package/dist/services/settings/settings-service.js.map +1 -1
  941. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  942. package/dist/services/settings/settings-sources.js +6 -0
  943. package/dist/services/settings/settings-sources.js.map +1 -1
  944. package/dist/services/shell/background-shell-registry.d.ts +110 -0
  945. package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
  946. package/dist/services/shell/background-shell-registry.js +326 -0
  947. package/dist/services/shell/background-shell-registry.js.map +1 -0
  948. package/dist/services/shell/shell-interaction-session.d.ts +43 -0
  949. package/dist/services/shell/shell-interaction-session.d.ts.map +1 -0
  950. package/dist/services/shell/shell-interaction-session.js +113 -0
  951. package/dist/services/shell/shell-interaction-session.js.map +1 -0
  952. package/dist/services/stream-event-processor.d.ts +11 -12
  953. package/dist/services/stream-event-processor.d.ts.map +1 -1
  954. package/dist/services/stream-event-processor.js +115 -352
  955. package/dist/services/stream-event-processor.js.map +1 -1
  956. package/dist/services/stream-snapshot.d.ts +0 -1
  957. package/dist/services/stream-snapshot.d.ts.map +1 -1
  958. package/dist/services/stream-snapshot.js +0 -1
  959. package/dist/services/stream-snapshot.js.map +1 -1
  960. package/dist/services/subagents/codename-run-id.d.ts +43 -0
  961. package/dist/services/subagents/codename-run-id.d.ts.map +1 -0
  962. package/dist/services/subagents/codename-run-id.js +683 -0
  963. package/dist/services/subagents/codename-run-id.js.map +1 -0
  964. package/dist/services/subagents/execution-runner.d.ts +5 -3
  965. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  966. package/dist/services/subagents/execution-runner.js +109 -10
  967. package/dist/services/subagents/execution-runner.js.map +1 -1
  968. package/dist/services/subagents/foreground-subagent-lease.d.ts +77 -0
  969. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -0
  970. package/dist/services/subagents/foreground-subagent-lease.js +156 -0
  971. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -0
  972. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  973. package/dist/services/subagents/mentor-runner.js +65 -34
  974. package/dist/services/subagents/mentor-runner.js.map +1 -1
  975. package/dist/services/subagents/nested-runner.d.ts +47 -23
  976. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  977. package/dist/services/subagents/nested-runner.js +263 -64
  978. package/dist/services/subagents/nested-runner.js.map +1 -1
  979. package/dist/services/subagents/role-loader.d.ts +3 -3
  980. package/dist/services/subagents/role-loader.d.ts.map +1 -1
  981. package/dist/services/subagents/role-loader.js +6 -7
  982. package/dist/services/subagents/role-loader.js.map +1 -1
  983. package/dist/services/subagents/runtime.d.ts +10 -0
  984. package/dist/services/subagents/runtime.d.ts.map +1 -1
  985. package/dist/services/subagents/runtime.js +31 -7
  986. package/dist/services/subagents/runtime.js.map +1 -1
  987. package/dist/services/subagents/subagent-async-registry.d.ts +50 -3
  988. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  989. package/dist/services/subagents/subagent-async-registry.js +463 -44
  990. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  991. package/dist/services/subagents/subagent-client-types.d.ts +2 -0
  992. package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
  993. package/dist/services/subagents/subagent-manager.d.ts +40 -7
  994. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  995. package/dist/services/subagents/subagent-manager.js +47 -1
  996. package/dist/services/subagents/subagent-manager.js.map +1 -1
  997. package/dist/services/subagents/subagent-notification-store.d.ts +112 -28
  998. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  999. package/dist/services/subagents/subagent-notification-store.js +197 -47
  1000. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  1001. package/dist/services/subagents/subagent-run-control.d.ts +41 -0
  1002. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
  1003. package/dist/services/subagents/subagent-run-control.js +166 -0
  1004. package/dist/services/subagents/subagent-run-control.js.map +1 -0
  1005. package/dist/services/subagents/subagent-session.d.ts +12 -7
  1006. package/dist/services/subagents/subagent-session.d.ts.map +1 -1
  1007. package/dist/services/subagents/subagent-session.js +13 -14
  1008. package/dist/services/subagents/subagent-session.js.map +1 -1
  1009. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +4 -5
  1010. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
  1011. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +66 -65
  1012. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
  1013. package/dist/services/subagents/tool-policy.d.ts +39 -17
  1014. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  1015. package/dist/services/subagents/tool-policy.js +209 -53
  1016. package/dist/services/subagents/tool-policy.js.map +1 -1
  1017. package/dist/services/subagents/types.d.ts +114 -2
  1018. package/dist/services/subagents/types.d.ts.map +1 -1
  1019. package/dist/services/subagents/types.js +2 -2
  1020. package/dist/services/subagents/types.js.map +1 -1
  1021. package/dist/services/subagents/utils.d.ts +8 -1
  1022. package/dist/services/subagents/utils.d.ts.map +1 -1
  1023. package/dist/services/subagents/utils.js +43 -16
  1024. package/dist/services/subagents/utils.js.map +1 -1
  1025. package/dist/services/test-helpers/mock-stream.d.ts +3 -0
  1026. package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
  1027. package/dist/services/test-helpers/mock-stream.js +8 -0
  1028. package/dist/services/test-helpers/mock-stream.js.map +1 -1
  1029. package/dist/services/tool-execution-ledger.d.ts +2 -0
  1030. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  1031. package/dist/services/tool-execution-ledger.js +59 -81
  1032. package/dist/services/tool-execution-ledger.js.map +1 -1
  1033. package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
  1034. package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
  1035. package/dist/test-helpers/conversation-session-with-adapter.js +5 -1
  1036. package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
  1037. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  1038. package/dist/test-helpers/ink-testing.js +2 -1
  1039. package/dist/test-helpers/ink-testing.js.map +1 -1
  1040. package/dist/tools/agent/activate-skill.d.ts +6 -1
  1041. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  1042. package/dist/tools/agent/activate-skill.js.map +1 -1
  1043. package/dist/tools/agent/ask-mentor.d.ts +1 -1
  1044. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  1045. package/dist/tools/agent/ask-mentor.js.map +1 -1
  1046. package/dist/tools/agent/ask-orchestrator.d.ts +11 -0
  1047. package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
  1048. package/dist/tools/agent/ask-orchestrator.js +39 -0
  1049. package/dist/tools/agent/ask-orchestrator.js.map +1 -0
  1050. package/dist/tools/agent/ask-user-constants.d.ts +6 -0
  1051. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  1052. package/dist/tools/agent/ask-user-constants.js +6 -0
  1053. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  1054. package/dist/tools/agent/run-subagent-async.d.ts +46 -4
  1055. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  1056. package/dist/tools/agent/run-subagent-async.js +220 -33
  1057. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  1058. package/dist/tools/agent/run-subagent.d.ts +28 -14
  1059. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  1060. package/dist/tools/agent/run-subagent.js +173 -68
  1061. package/dist/tools/agent/run-subagent.js.map +1 -1
  1062. package/dist/tools/file/apply-patch.d.ts +3 -1
  1063. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  1064. package/dist/tools/file/apply-patch.js +34 -10
  1065. package/dist/tools/file/apply-patch.js.map +1 -1
  1066. package/dist/tools/file/code-context.d.ts +3 -2
  1067. package/dist/tools/file/code-context.d.ts.map +1 -1
  1068. package/dist/tools/file/code-context.js +5 -5
  1069. package/dist/tools/file/code-context.js.map +1 -1
  1070. package/dist/tools/file/create-file.d.ts +4 -2
  1071. package/dist/tools/file/create-file.d.ts.map +1 -1
  1072. package/dist/tools/file/create-file.js +10 -7
  1073. package/dist/tools/file/create-file.js.map +1 -1
  1074. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  1075. package/dist/tools/file/edit-healing.js +54 -35
  1076. package/dist/tools/file/edit-healing.js.map +1 -1
  1077. package/dist/tools/file/glob-target.d.ts +12 -0
  1078. package/dist/tools/file/glob-target.d.ts.map +1 -0
  1079. package/dist/tools/file/glob-target.js +22 -0
  1080. package/dist/tools/file/glob-target.js.map +1 -0
  1081. package/dist/tools/file/glob.d.ts +9 -2
  1082. package/dist/tools/file/glob.d.ts.map +1 -1
  1083. package/dist/tools/file/glob.js +12 -16
  1084. package/dist/tools/file/glob.js.map +1 -1
  1085. package/dist/tools/file/grep.d.ts +9 -1
  1086. package/dist/tools/file/grep.d.ts.map +1 -1
  1087. package/dist/tools/file/grep.js +75 -13
  1088. package/dist/tools/file/grep.js.map +1 -1
  1089. package/dist/tools/file/read-file.d.ts +7 -1
  1090. package/dist/tools/file/read-file.d.ts.map +1 -1
  1091. package/dist/tools/file/read-file.js +3 -4
  1092. package/dist/tools/file/read-file.js.map +1 -1
  1093. package/dist/tools/file/search-replace.d.ts +5 -3
  1094. package/dist/tools/file/search-replace.d.ts.map +1 -1
  1095. package/dist/tools/file/search-replace.js +29 -19
  1096. package/dist/tools/file/search-replace.js.map +1 -1
  1097. package/dist/tools/format-helpers.d.ts +4 -3
  1098. package/dist/tools/format-helpers.d.ts.map +1 -1
  1099. package/dist/tools/format-helpers.js +16 -17
  1100. package/dist/tools/format-helpers.js.map +1 -1
  1101. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  1102. package/dist/tools/memory/memory-tools.js +61 -49
  1103. package/dist/tools/memory/memory-tools.js.map +1 -1
  1104. package/dist/tools/run-agent-workflow.d.ts +1 -1
  1105. package/dist/tools/run-agent-workflow.d.ts.map +1 -1
  1106. package/dist/tools/system/shell.d.ts +39 -3
  1107. package/dist/tools/system/shell.d.ts.map +1 -1
  1108. package/dist/tools/system/shell.js +380 -149
  1109. package/dist/tools/system/shell.js.map +1 -1
  1110. package/dist/tools/types.d.ts +102 -5
  1111. package/dist/tools/types.d.ts.map +1 -1
  1112. package/dist/tools/types.js +4 -1
  1113. package/dist/tools/types.js.map +1 -1
  1114. package/dist/tools/utils.d.ts +18 -0
  1115. package/dist/tools/utils.d.ts.map +1 -1
  1116. package/dist/tools/utils.js +78 -0
  1117. package/dist/tools/utils.js.map +1 -1
  1118. package/dist/tools/web/web-fetch.d.ts +1 -1
  1119. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  1120. package/dist/tools/web/web-fetch.js.map +1 -1
  1121. package/dist/tools/web/web-search.d.ts +1 -1
  1122. package/dist/tools/web/web-search.d.ts.map +1 -1
  1123. package/dist/tools/web/web-search.js.map +1 -1
  1124. package/dist/types/message.d.ts +2 -0
  1125. package/dist/types/message.d.ts.map +1 -1
  1126. package/dist/types/message.js.map +1 -1
  1127. package/dist/utils/ai/model-settings.d.ts.map +1 -1
  1128. package/dist/utils/ai/model-settings.js +0 -6
  1129. package/dist/utils/ai/model-settings.js.map +1 -1
  1130. package/dist/utils/ai/token-usage.d.ts +10 -5
  1131. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  1132. package/dist/utils/ai/token-usage.js +48 -35
  1133. package/dist/utils/ai/token-usage.js.map +1 -1
  1134. package/dist/utils/apply-diff.d.ts +3 -0
  1135. package/dist/utils/apply-diff.d.ts.map +1 -0
  1136. package/dist/utils/apply-diff.js +192 -0
  1137. package/dist/utils/apply-diff.js.map +1 -0
  1138. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  1139. package/dist/utils/conversation/conversation-event-handler.js +72 -13
  1140. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  1141. package/dist/utils/conversation/conversation-utils.d.ts +5 -0
  1142. package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
  1143. package/dist/utils/conversation/conversation-utils.js +1 -0
  1144. package/dist/utils/conversation/conversation-utils.js.map +1 -1
  1145. package/dist/utils/conversation/message-utils.d.ts +6 -0
  1146. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  1147. package/dist/utils/conversation/message-utils.js +17 -14
  1148. package/dist/utils/conversation/message-utils.js.map +1 -1
  1149. package/dist/utils/conversation/rewind-items.d.ts +32 -0
  1150. package/dist/utils/conversation/rewind-items.d.ts.map +1 -0
  1151. package/dist/utils/conversation/rewind-items.js +33 -0
  1152. package/dist/utils/conversation/rewind-items.js.map +1 -0
  1153. package/dist/utils/inject-warning-into-tool-output.d.ts +10 -0
  1154. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  1155. package/dist/utils/inject-warning-into-tool-output.js +17 -0
  1156. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  1157. package/dist/utils/settings-command.d.ts.map +1 -1
  1158. package/dist/utils/settings-command.js +41 -4
  1159. package/dist/utils/settings-command.js.map +1 -1
  1160. package/dist/utils/shell/command-logger.js.map +1 -1
  1161. package/dist/utils/shell/command-safety/find-helpers.d.ts +3 -2
  1162. package/dist/utils/shell/command-safety/find-helpers.d.ts.map +1 -1
  1163. package/dist/utils/shell/command-safety/find-helpers.js +34 -17
  1164. package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
  1165. package/dist/utils/shell/command-safety/handlers/find-handler.d.ts.map +1 -1
  1166. package/dist/utils/shell/command-safety/handlers/find-handler.js +0 -2
  1167. package/dist/utils/shell/command-safety/handlers/find-handler.js.map +1 -1
  1168. package/dist/utils/shell/command-safety/handlers/git-handler.d.ts.map +1 -1
  1169. package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
  1170. package/dist/utils/shell/command-safety/handlers/sed-handler.d.ts.map +1 -1
  1171. package/dist/utils/shell/command-safety/handlers/sed-handler.js +14 -9
  1172. package/dist/utils/shell/command-safety/handlers/sed-handler.js.map +1 -1
  1173. package/dist/utils/shell/command-safety/handlers/types.d.ts +5 -4
  1174. package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
  1175. package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
  1176. package/dist/utils/shell/command-safety/index.js +212 -88
  1177. package/dist/utils/shell/command-safety/index.js.map +1 -1
  1178. package/dist/utils/shell/command-safety/utils.d.ts +2 -1
  1179. package/dist/utils/shell/command-safety/utils.d.ts.map +1 -1
  1180. package/dist/utils/shell/command-safety/utils.js +5 -5
  1181. package/dist/utils/shell/command-safety/utils.js.map +1 -1
  1182. package/dist/utils/shell/execute-shell.d.ts +24 -3
  1183. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  1184. package/dist/utils/shell/execute-shell.js +228 -28
  1185. package/dist/utils/shell/execute-shell.js.map +1 -1
  1186. package/dist/utils/shell/sandbox/denied-read-stores.d.ts +1 -8
  1187. package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
  1188. package/dist/utils/shell/sandbox/denied-read-stores.js +1 -8
  1189. package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -1
  1190. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts +36 -6
  1191. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts.map +1 -1
  1192. package/dist/utils/shell/sandbox/docker-host-control-grants.js +47 -17
  1193. package/dist/utils/shell/sandbox/docker-host-control-grants.js.map +1 -1
  1194. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts +21 -0
  1195. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts.map +1 -0
  1196. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js +66 -0
  1197. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js.map +1 -0
  1198. package/dist/utils/shell/shell-session.js.map +1 -1
  1199. package/dist/utils/slash-command-dispatch.d.ts +21 -0
  1200. package/dist/utils/slash-command-dispatch.d.ts.map +1 -0
  1201. package/dist/utils/slash-command-dispatch.js +34 -0
  1202. package/dist/utils/slash-command-dispatch.js.map +1 -0
  1203. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  1204. package/dist/utils/streaming/extract-command-messages.js +29 -51
  1205. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  1206. package/dist/utils/value-suggestions.d.ts.map +1 -1
  1207. package/dist/utils/value-suggestions.js +0 -8
  1208. package/dist/utils/value-suggestions.js.map +1 -1
  1209. package/package.json +21 -19
  1210. package/dist/commands/retry-command.d.ts +0 -20
  1211. package/dist/commands/retry-command.d.ts.map +0 -1
  1212. package/dist/commands/retry-command.js +0 -39
  1213. package/dist/commands/retry-command.js.map +0 -1
  1214. package/dist/commands/undo-command.d.ts +0 -15
  1215. package/dist/commands/undo-command.d.ts.map +0 -1
  1216. package/dist/commands/undo-command.js +0 -28
  1217. package/dist/commands/undo-command.js.map +0 -1
  1218. package/dist/components/input/PopupManager.d.ts +0 -88
  1219. package/dist/components/input/PopupManager.d.ts.map +0 -1
  1220. package/dist/components/input/PopupManager.js +0 -21
  1221. package/dist/components/input/PopupManager.js.map +0 -1
  1222. package/dist/components/input/popup-key-navigation.d.ts +0 -18
  1223. package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
  1224. package/dist/components/input/popup-key-navigation.js +0 -16
  1225. package/dist/components/input/popup-key-navigation.js.map +0 -1
  1226. package/dist/components/input/popup-props.d.ts +0 -24
  1227. package/dist/components/input/popup-props.d.ts.map +0 -1
  1228. package/dist/components/input/popup-props.js +0 -72
  1229. package/dist/components/input/popup-props.js.map +0 -1
  1230. package/dist/components/menu/UndoSelectionMenu.d.ts +0 -12
  1231. package/dist/components/menu/UndoSelectionMenu.d.ts.map +0 -1
  1232. package/dist/components/menu/UndoSelectionMenu.js +0 -19
  1233. package/dist/components/menu/UndoSelectionMenu.js.map +0 -1
  1234. package/dist/hooks/use-mode-handlers.d.ts +0 -79
  1235. package/dist/hooks/use-mode-handlers.d.ts.map +0 -1
  1236. package/dist/hooks/use-mode-handlers.js +0 -183
  1237. package/dist/hooks/use-mode-handlers.js.map +0 -1
  1238. package/dist/hooks/use-pending-turn-guards.d.ts +0 -43
  1239. package/dist/hooks/use-pending-turn-guards.d.ts.map +0 -1
  1240. package/dist/hooks/use-pending-turn-guards.js +0 -120
  1241. package/dist/hooks/use-pending-turn-guards.js.map +0 -1
  1242. package/dist/hooks/use-trigger-detection.d.ts +0 -49
  1243. package/dist/hooks/use-trigger-detection.d.ts.map +0 -1
  1244. package/dist/hooks/use-trigger-detection.js +0 -104
  1245. package/dist/hooks/use-trigger-detection.js.map +0 -1
  1246. package/dist/hooks/use-undo-selection.d.ts +0 -23
  1247. package/dist/hooks/use-undo-selection.d.ts.map +0 -1
  1248. package/dist/hooks/use-undo-selection.js.map +0 -1
  1249. package/dist/lib/agent-run-orchestrator.d.ts +0 -38
  1250. package/dist/lib/agent-run-orchestrator.d.ts.map +0 -1
  1251. package/dist/lib/agent-run-orchestrator.js +0 -266
  1252. package/dist/lib/agent-run-orchestrator.js.map +0 -1
  1253. package/dist/lib/retry-executor.d.ts +0 -16
  1254. package/dist/lib/retry-executor.d.ts.map +0 -1
  1255. package/dist/lib/retry-executor.js +0 -53
  1256. package/dist/lib/retry-executor.js.map +0 -1
  1257. package/dist/lib/runner-manager.d.ts +0 -22
  1258. package/dist/lib/runner-manager.d.ts.map +0 -1
  1259. package/dist/lib/runner-manager.js +0 -56
  1260. package/dist/lib/runner-manager.js.map +0 -1
  1261. package/dist/prompts/shell-sandbox.md +0 -18
  1262. package/dist/prompts/simple.md +0 -53
  1263. package/dist/prompts/simple_prev.md +0 -33
  1264. package/dist/prompts/simple_v2.md +0 -84
  1265. package/dist/prompts/simple_v3.md +0 -267
  1266. package/dist/prompts/subagents/researcher.md +0 -40
  1267. package/dist/providers/ai-sdk-agents-adapter.d.ts +0 -7
  1268. package/dist/providers/ai-sdk-agents-adapter.d.ts.map +0 -1
  1269. package/dist/providers/ai-sdk-agents-adapter.js +0 -80
  1270. package/dist/providers/ai-sdk-agents-adapter.js.map +0 -1
  1271. package/dist/providers/fallback-responses-model.d.ts +0 -46
  1272. package/dist/providers/fallback-responses-model.d.ts.map +0 -1
  1273. package/dist/providers/fallback-responses-model.js +0 -296
  1274. package/dist/providers/fallback-responses-model.js.map +0 -1
  1275. package/dist/services/stream-event-parsing.d.ts +0 -4
  1276. package/dist/services/stream-event-parsing.d.ts.map +0 -1
  1277. package/dist/services/stream-event-parsing.js +0 -79
  1278. package/dist/services/stream-event-parsing.js.map +0 -1
@@ -1,18 +1,324 @@
1
- import { OpenAIResponsesModel, OpenAIResponsesWSModel } from '@openai/agents-openai';
2
- import { getCurrentTrace, withTrace } from '@openai/agents-core';
3
1
  import { randomUUID } from 'node:crypto';
2
+ import { ResponsesWS } from 'openai/resources/responses/ws';
3
+ import OpenAI from 'openai';
4
+ import { toCodexResponsesInput } from './codex-turn-converter.js';
4
5
  import { sanitizeHeaders } from '../utils/header-sanitizer.js';
5
- import { dropUnpairedFunctionCalls } from '../services/tool-execution-ledger.js';
6
+ import { OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
6
7
  import { AmbiguousModelOutcomeError } from '../services/retry/retry-errors.js';
7
8
  import { ChainedWireState } from './chained-wire-state.js';
8
9
  import { LunaResponsesLiteWireProtocol } from './luna-responses-lite-wire-protocol.js';
10
+ import { captureProviderRequest } from './provider-request-capture.js';
9
11
  import { createWebSocketReceiveWatchdog, DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, } from './websocket-receive-watchdog.js';
10
12
  const DUMMY_PROVIDER_TRAFFIC = {
11
13
  recordRequestStart() { },
12
14
  async recordResponseReceived() { },
15
+ recordResponseClosed() { },
13
16
  recordRequestFailed() { },
14
17
  };
15
- import { isPreviousResponseNotFoundError, isRetryableTransportError, } from '../services/retry/retry-error-classification.js';
18
+ function toCodexToolChoice(choice) {
19
+ if (choice === 'auto' || choice === 'required' || choice === 'none')
20
+ return choice;
21
+ if (choice && typeof choice === 'object' && typeof choice.name === 'string') {
22
+ return { type: 'function', name: choice.name };
23
+ }
24
+ throw new Error('Unsupported Codex tool choice.');
25
+ }
26
+ /** Provider-owned transport seam used by Codex's HTTP and WebSocket models. */
27
+ export class CodexResponsesTransport {
28
+ client;
29
+ model;
30
+ websocket;
31
+ constructor(client = {}, model = '', websocket = false) {
32
+ this.client = client;
33
+ this.model = model;
34
+ this.websocket = websocket;
35
+ }
36
+ buildResponsesCreateRequest(request, stream) {
37
+ const providerOptions = request.providerOptions ?? {};
38
+ const { extraBody, extraHeaders: _extraHeaders, ...nativeProviderData } = providerOptions;
39
+ return {
40
+ requestData: {
41
+ model: this.model,
42
+ input: toCodexResponsesInput(request.input),
43
+ stream,
44
+ ...(request.instructions !== undefined ? { instructions: request.instructions } : {}),
45
+ ...(request.tools.length > 0 ? { tools: request.tools.map((tool) => ({ type: 'function', ...tool })) } : {}),
46
+ ...(request.toolChoice !== undefined ? { tool_choice: toCodexToolChoice(request.toolChoice) } : {}),
47
+ ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),
48
+ ...(request.topP !== undefined ? { top_p: request.topP } : {}),
49
+ ...(request.frequencyPenalty !== undefined ? { frequency_penalty: request.frequencyPenalty } : {}),
50
+ ...(request.presencePenalty !== undefined ? { presence_penalty: request.presencePenalty } : {}),
51
+ ...(request.maxTokens !== undefined ? { max_output_tokens: request.maxTokens } : {}),
52
+ ...(request.reasoning !== undefined ? { reasoning: request.reasoning } : {}),
53
+ ...nativeProviderData,
54
+ ...(extraBody ?? {}),
55
+ ...(request.previousResponseId ? { previous_response_id: request.previousResponseId } : {}),
56
+ ...(request.codex?.promptCacheKey ? { prompt_cache_key: request.codex.promptCacheKey } : {}),
57
+ ...(request.codex?.include ? { include: request.codex.include } : {}),
58
+ },
59
+ };
60
+ }
61
+ async fetchResponse(request, stream, requestData) {
62
+ if (stream && this.websocket) {
63
+ if (!(this.client instanceof OpenAI) && typeof this.client?.responses?.create === 'function') {
64
+ return this.client.responses.create(requestData);
65
+ }
66
+ const headers = request.providerOptions?.extraHeaders;
67
+ const socket = new ResponsesWS(this.client, headers ? { headers: headers } : undefined);
68
+ const messages = socket.stream();
69
+ const requestEvent = { type: 'response.create', ...requestData };
70
+ if (socket.socket?.readyState === 0) {
71
+ socket.socket.once('open', () => socket.send(requestEvent));
72
+ }
73
+ else {
74
+ socket.send(requestEvent);
75
+ }
76
+ return (async function* () {
77
+ try {
78
+ for await (const message of messages) {
79
+ if (message.type === 'message')
80
+ yield message.message;
81
+ else if (message.event)
82
+ yield message.event;
83
+ else if (message.type === 'error')
84
+ throw message.error;
85
+ else if (message.type === 'close')
86
+ throw new Error('Codex WebSocket closed before a terminal response event.');
87
+ }
88
+ }
89
+ finally {
90
+ try {
91
+ socket.close();
92
+ }
93
+ catch {
94
+ /* best effort */
95
+ }
96
+ }
97
+ })();
98
+ }
99
+ return this.client.responses.create(requestData, {
100
+ ...(request.signal ? { signal: request.signal } : {}),
101
+ ...(request.providerOptions?.extraHeaders ? { headers: request.providerOptions.extraHeaders } : {}),
102
+ });
103
+ }
104
+ }
105
+ export class OpenAIResponsesModel {
106
+ client;
107
+ model;
108
+ transport;
109
+ constructor(client, model, transport, websocket = false) {
110
+ this.client = client;
111
+ this.model = model;
112
+ this.transport = transport ?? new CodexResponsesTransport(client, model, websocket);
113
+ }
114
+ buildResponsesCreateRequest(request, stream) {
115
+ const built = this.transport.buildResponsesCreateRequest(request, stream);
116
+ if (this.transport instanceof CodexResponsesTransport && built?.requestData) {
117
+ built.requestData.model = this.model;
118
+ }
119
+ return built;
120
+ }
121
+ async fetchResponse(request, stream) {
122
+ const built = this.buildResponsesCreateRequest(request, stream);
123
+ return this.transport.fetchResponse(request, stream, built.requestData);
124
+ }
125
+ async fetchUnaryResponse(request) {
126
+ return this.fetchResponse(request, false);
127
+ }
128
+ async *rawStream(request) {
129
+ const source = await this.fetchResponse(request, true);
130
+ for await (const event of source) {
131
+ if (event?.type === 'error')
132
+ throw new Error(event.error?.message ?? 'Codex WebSocket provider error');
133
+ if (event?.type === 'close')
134
+ throw new Error('Codex WebSocket closed before a terminal response event.');
135
+ yield event;
136
+ if (event?.type === 'response.completed' ||
137
+ event?.type === 'response.incomplete' ||
138
+ event?.type === 'response.failed')
139
+ return;
140
+ }
141
+ }
142
+ async *stream(request) {
143
+ yield* convertCodexRawStream(this.rawStream(request));
144
+ }
145
+ }
146
+ export class OpenAIResponsesWSModel extends OpenAIResponsesModel {
147
+ constructor(client, model, transport) {
148
+ super(client, model, transport, true);
149
+ }
150
+ }
151
+ async function* convertCodexRawStream(source) {
152
+ const output = [];
153
+ const pendingToolCalls = [];
154
+ const terminalReasoning = [];
155
+ const toolNamesByIndex = new Map();
156
+ const toolArgumentLengthsByIndex = new Map();
157
+ let sawReasoningDelta = false;
158
+ let responseId = '';
159
+ let finishReason;
160
+ let usage;
161
+ let sawCompletedResponse = false;
162
+ for await (const event of source) {
163
+ if (event?.type === 'codex.rate_limits') {
164
+ const rateLimits = event.rate_limits ?? event;
165
+ if (rateLimits && typeof rateLimits === 'object')
166
+ yield { type: 'codex_rate_limits', rateLimits };
167
+ }
168
+ else if (event?.type === 'response.output_text.delta') {
169
+ yield { type: 'text_delta', text: String(event.delta ?? '') };
170
+ }
171
+ else if (event?.type === 'response.reasoning_summary_text.delta') {
172
+ const text = String(event.delta ?? '');
173
+ if (text) {
174
+ sawReasoningDelta = true;
175
+ yield {
176
+ type: 'reasoning_delta',
177
+ ...(typeof event.item_id === 'string' ? { id: event.item_id } : {}),
178
+ text,
179
+ };
180
+ }
181
+ }
182
+ else if (event?.type === 'response.output_item.added' && event.output_item?.type === 'function_call') {
183
+ const index = typeof event.output_index === 'number' ? event.output_index : event.output_item.id ?? 0;
184
+ if (typeof event.output_item.name === 'string')
185
+ toolNamesByIndex.set(index, event.output_item.name);
186
+ toolArgumentLengthsByIndex.set(index, 0);
187
+ }
188
+ else if ((event?.type === 'response.function_call_arguments.delta' ||
189
+ event?.type === 'response.custom_tool_call_input.delta' ||
190
+ event?.type === 'response.mcp_call_arguments.delta') &&
191
+ typeof event.delta === 'string' &&
192
+ event.delta) {
193
+ const index = typeof event.output_index === 'number' ? event.output_index : event.item_id ?? 0;
194
+ const argumentCharCount = (toolArgumentLengthsByIndex.get(index) ?? 0) + event.delta.length;
195
+ toolArgumentLengthsByIndex.set(index, argumentCharCount);
196
+ const toolName = toolNamesByIndex.get(index);
197
+ yield { type: 'tool_call_streaming_delta', ...(toolName ? { toolName } : {}), argumentCharCount };
198
+ }
199
+ else if (event?.type === 'response.output_item.done' && event.item?.type === 'function_call') {
200
+ const call = toCodexToolCallOutput(event.item);
201
+ output.push(call);
202
+ pendingToolCalls.push(call);
203
+ }
204
+ else if (event?.type === 'response.completed') {
205
+ sawCompletedResponse = true;
206
+ responseId = codexString(event.response?.id) ?? responseId;
207
+ finishReason = codexString(event.response?.status) ?? codexString(event.response?.incomplete_details?.reason);
208
+ usage = toCodexUsage(event.response?.usage);
209
+ for (const item of event.response?.output ?? []) {
210
+ const converted = toCodexOutputItem(item);
211
+ if (converted.type !== 'tool_call') {
212
+ output.push(converted);
213
+ if (converted.type === 'reasoning')
214
+ terminalReasoning.push(converted);
215
+ }
216
+ }
217
+ const authoritativeReasoning = sawReasoningDelta ? [] : terminalReasoning;
218
+ for (const reasoning of authoritativeReasoning) {
219
+ yield {
220
+ type: 'reasoning_delta',
221
+ ...(reasoning.id ? { id: reasoning.id } : {}),
222
+ text: reasoning.text,
223
+ ...(reasoning.providerMetadata ? { providerMetadata: reasoning.providerMetadata } : {}),
224
+ };
225
+ }
226
+ for (const call of pendingToolCalls)
227
+ yield call;
228
+ break;
229
+ }
230
+ else if (event?.type === 'response.incomplete' ||
231
+ event?.type === 'response.failed' ||
232
+ event?.type === 'response.error') {
233
+ const status = String(event.type).slice('response.'.length);
234
+ const message = event.response?.error?.message ?? event.error?.message ?? `Codex response ${status}`;
235
+ throw new Error(`Codex provider response ${status}: ${message}`);
236
+ }
237
+ }
238
+ if (!sawCompletedResponse)
239
+ throw new Error('Codex streamed response ended without a completed response event.');
240
+ if (!responseId)
241
+ throw new Error('Codex completed response did not include an id.');
242
+ yield {
243
+ type: 'completion',
244
+ responseId,
245
+ output,
246
+ ...(finishReason ? { finishReason } : {}),
247
+ ...(usage ? { usage } : {}),
248
+ };
249
+ }
250
+ function toCodexToolCallOutput(item) {
251
+ const id = codexString(item?.call_id) ?? codexString(item?.id);
252
+ const name = codexString(item?.name);
253
+ if (!id || !name)
254
+ throw new Error('Codex function call output is missing its call id or name.');
255
+ return { type: 'tool_call', id, name, arguments: typeof item.arguments === 'string' ? item.arguments : '{}' };
256
+ }
257
+ function toCodexOutputItem(item) {
258
+ if (!item || typeof item !== 'object')
259
+ throw new Error('Unsupported Codex response output item.');
260
+ if (item.type === 'function_call')
261
+ return toCodexToolCallOutput(item);
262
+ if (item.type === 'message') {
263
+ const content = Array.isArray(item.content) ? item.content : [];
264
+ return {
265
+ type: 'message',
266
+ content: content.map((part) => {
267
+ if (part?.type && !['output_text', 'input_text', 'text'].includes(part.type))
268
+ throw new Error(`Unsupported Codex response message content: ${String(part.type)}.`);
269
+ if (typeof part?.text !== 'string')
270
+ throw new Error('Unsupported Codex response message content without text.');
271
+ return { type: 'text', text: part.text };
272
+ }),
273
+ };
274
+ }
275
+ if (item.type === 'reasoning') {
276
+ return {
277
+ type: 'reasoning',
278
+ ...(codexString(item.id) ? { id: item.id } : {}),
279
+ text: codexReasoningText(item.summary ?? item.content ?? ''),
280
+ providerMetadata: { codex: codexReasoningMetadata(item) },
281
+ };
282
+ }
283
+ throw new Error(`Unsupported Codex response output item type: ${String(item.type)}.`);
284
+ }
285
+ function codexReasoningText(value) {
286
+ if (typeof value === 'string')
287
+ return value;
288
+ if (!Array.isArray(value))
289
+ return '';
290
+ return value
291
+ .map((part) => {
292
+ if (!part || typeof part !== 'object' || typeof part.text !== 'string')
293
+ throw new Error('Unsupported Codex reasoning content without text.');
294
+ return part.text;
295
+ })
296
+ .join('');
297
+ }
298
+ function codexReasoningMetadata(item) {
299
+ const { type: _type, id: _id, summary: _summary, content: _content, ...metadata } = item;
300
+ return metadata;
301
+ }
302
+ function toCodexUsage(rawUsage) {
303
+ if (!rawUsage || typeof rawUsage !== 'object')
304
+ return undefined;
305
+ const inputTokens = rawUsage.input_tokens ?? rawUsage.inputTokens;
306
+ const outputTokens = rawUsage.output_tokens ?? rawUsage.outputTokens;
307
+ if (inputTokens === undefined && outputTokens === undefined)
308
+ return undefined;
309
+ const cachedInputTokens = rawUsage.input_tokens_details?.cached_tokens ?? rawUsage.inputTokensDetails?.cachedTokens;
310
+ const cacheWriteTokens = rawUsage.input_tokens_details?.cache_write_tokens ?? rawUsage.inputTokensDetails?.cacheWriteTokens;
311
+ return {
312
+ ...(inputTokens !== undefined ? { inputTokens } : {}),
313
+ ...(outputTokens !== undefined ? { outputTokens } : {}),
314
+ ...(cachedInputTokens !== undefined ? { cachedInputTokens } : {}),
315
+ ...(cacheWriteTokens !== undefined ? { cacheWriteTokens } : {}),
316
+ };
317
+ }
318
+ function codexString(value) {
319
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
320
+ }
321
+ import { isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
16
322
  const SUSPICIOUS_RECONSTRUCTED_OUTPUT_ITEM_COUNT = 20;
17
323
  const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
18
324
  'response.completed',
@@ -53,23 +359,52 @@ function stripCodexReplayIds(input) {
53
359
  }
54
360
  function normalizeCodexRequestData(requestData, request, model, options = {}) {
55
361
  const normalizedRequestData = { ...requestData };
56
- // Codex responses endpoint rejects temperature; always omit it.
362
+ // Codex responses endpoint rejects temperature and max_output_tokens; always omit them.
57
363
  if ('temperature' in normalizedRequestData) {
58
364
  delete normalizedRequestData.temperature;
59
365
  }
366
+ if ('max_output_tokens' in normalizedRequestData) {
367
+ delete normalizedRequestData.max_output_tokens;
368
+ }
60
369
  const hasPreviousResponseId = (typeof normalizedRequestData.previous_response_id === 'string' &&
61
370
  normalizedRequestData.previous_response_id.length > 0) ||
62
371
  (typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0);
63
372
  const normalizedInput = !hasPreviousResponseId && Array.isArray(normalizedRequestData.input)
64
- ? dropUnpairedFunctionCalls(normalizedRequestData.input)
373
+ ? dropUnpairedCodexToolItems(normalizedRequestData.input)
65
374
  : normalizedRequestData.input;
66
- normalizedRequestData.input = stripCodexReplayIds(normalizedInput);
67
- const modelInclude = request?.modelSettings?.include;
375
+ normalizedRequestData.input = stripCodexReplayIds(Array.isArray(normalizedInput)
376
+ ? normalizedInput.map((item) => {
377
+ if (item?.type === 'function_call_result' || item?.type === 'function_call_output') {
378
+ // The Responses API rejects unknown parameters, so the camelCase
379
+ // spellings must be dropped, not just shadowed by the snake_case one
380
+ // added below — spreading `...item` alone leaves `callId` on the
381
+ // object alongside the new `call_id`.
382
+ const { callId: _callId, call_id: _call_id, tool_call_id: _toolCallId, ...rest } = item;
383
+ return {
384
+ ...rest,
385
+ type: 'function_call_output',
386
+ call_id: item.call_id ?? item.callId ?? item.tool_call_id,
387
+ // Responses supports rich function output content (input text,
388
+ // images, and files). Preserve the already-normalized array;
389
+ // only legacy object output needs JSON serialization.
390
+ output: typeof item.output === 'string' || Array.isArray(item.output)
391
+ ? item.output
392
+ : JSON.stringify(item.output ?? ''),
393
+ };
394
+ }
395
+ if (item?.type === 'function_call' && item.callId && !item.call_id) {
396
+ const { callId: _callId, ...rest } = item;
397
+ return { ...rest, call_id: item.callId };
398
+ }
399
+ return item;
400
+ })
401
+ : normalizedInput);
402
+ const modelInclude = request?.codex?.include;
68
403
  if (Array.isArray(modelInclude) && modelInclude.length > 0) {
69
404
  const existingInclude = Array.isArray(normalizedRequestData.include) ? normalizedRequestData.include : [];
70
405
  normalizedRequestData.include = Array.from(new Set([...existingInclude, ...modelInclude].filter((entry) => typeof entry === 'string' && entry.length > 0)));
71
406
  }
72
- const promptCacheKey = request?.modelSettings?.prompt_cache_key;
407
+ const promptCacheKey = request?.codex?.promptCacheKey;
73
408
  if (typeof promptCacheKey === 'string' && promptCacheKey.length > 0) {
74
409
  normalizedRequestData.prompt_cache_key = promptCacheKey;
75
410
  }
@@ -133,17 +468,13 @@ const summarizeReconstructedItems = (items) => {
133
468
  // Codex's `/backend-api/codex/responses` endpoint can ship terminal response
134
469
  // frames with either an empty `output` array or no `output` field at all, even
135
470
  // when the assistant message was already delivered via
136
- // `response.output_item.done`. The agents-SDK runner trusts terminal
137
- // `response.output` as the final output; when it is empty or missing it either
138
- // sees no items and re-runs the same request until maxTurns or crashes while
139
- // converting the terminal payload.
471
+ // `response.output_item.done`. The application transport must treat the
472
+ // terminal frame as authoritative; when it is empty or missing, retaining the
473
+ // completed output items prevents a false empty completion.
140
474
  //
141
- // This wrapper subclasses `OpenAIResponsesModel`, overrides the streaming
142
- // fetch path, and patches the terminal frame in flight: it accumulates raw
143
- // items from `response.output_item.done` and, only when terminal
144
- // `response.output` is empty or missing, swaps in the accumulated items so the
145
- // parent's existing conversion logic (`convertToOutputItem`) produces a normal
146
- // `response_done` event.
475
+ // The Codex transport accumulates raw items from `response.output_item.done`
476
+ // and, only when terminal `response.output` is empty or missing, uses those
477
+ // accumulated items for its application-owned completion event.
147
478
  const CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES = new Set([
148
479
  'function_call_output',
149
480
  'function_call_result',
@@ -161,13 +492,16 @@ const normalizeCodexServerHistoryItem = (item) => {
161
492
  const record = asRecord(item);
162
493
  const type = stringValue(record?.type);
163
494
  const itemId = stringValue(record?.id);
164
- const callId = stringValue(record?.call_id) ?? stringValue(record?.callId) ?? stringValue(record?.tool_call_id);
495
+ const callId = stringValue(record?.call_id) ??
496
+ stringValue(record?.callId) ??
497
+ stringValue(record?.tool_call_id) ??
498
+ (type === 'tool_call' || type === 'tool_result' ? stringValue(record?.id) : undefined);
165
499
  return {
166
500
  type,
167
501
  itemId,
168
502
  callId,
169
- isFunctionCall: type === 'function_call',
170
- isToolResult: typeof type === 'string' && CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES.has(type),
503
+ isFunctionCall: type === 'function_call' || type === 'tool_call',
504
+ isToolResult: type === 'tool_result' || (typeof type === 'string' && CODEX_SERVER_HISTORY_TOOL_RESULT_TYPES.has(type)),
171
505
  };
172
506
  };
173
507
  const isUserInputMessage = (item) => asRecord(item)?.role === 'user';
@@ -190,17 +524,16 @@ const isToolContinuationItem = (item) => {
190
524
  return normalized.isFunctionCall && Boolean(normalized.itemId);
191
525
  };
192
526
  const findServerManagedDeltaStart = (input) => {
193
- let trailingToolResultStart = input.length;
194
- // Walk backward through tool-continuation items (tool results and
195
- // their interleaved function calls) so parallel outputs from the same
196
- // model response stay together in the delta instead of leaking into
197
- // the warmup. Items without a call id (user messages, assistant
198
- // messages, reasoning) naturally stop the walk.
199
- while (trailingToolResultStart > 0 && isToolContinuationItem(input[trailingToolResultStart - 1])) {
200
- trailingToolResultStart--;
201
- }
202
- if (trailingToolResultStart < input.length) {
203
- return trailingToolResultStart;
527
+ let endUserIndex = input.length;
528
+ while (endUserIndex > 0 && isUserInputMessage(input[endUserIndex - 1])) {
529
+ endUserIndex--;
530
+ }
531
+ if (endUserIndex > 0 && isToolContinuationItem(input[endUserIndex - 1])) {
532
+ let toolStart = endUserIndex;
533
+ while (toolStart > 0 && isToolContinuationItem(input[toolStart - 1])) {
534
+ toolStart--;
535
+ }
536
+ return toolStart;
204
537
  }
205
538
  for (let index = input.length - 1; index >= 0; index--) {
206
539
  if (isUserInputMessage(input[index])) {
@@ -231,6 +564,45 @@ const collectToolResultCallIds = (input) => {
231
564
  }
232
565
  return ids;
233
566
  };
567
+ const collectFunctionCallIds = (input) => {
568
+ if (!Array.isArray(input)) {
569
+ return [];
570
+ }
571
+ const ids = [];
572
+ for (const item of input) {
573
+ const normalized = normalizeCodexServerHistoryItem(item);
574
+ if (normalized.isFunctionCall && normalized.callId) {
575
+ ids.push(normalized.callId);
576
+ }
577
+ }
578
+ return ids;
579
+ };
580
+ const dropUnpairedCodexToolItems = (history) => {
581
+ const callIds = new Set();
582
+ const resultIds = new Set();
583
+ for (const item of history) {
584
+ const normalized = normalizeCodexServerHistoryItem(item);
585
+ if (!normalized.callId)
586
+ continue;
587
+ if (normalized.isFunctionCall)
588
+ callIds.add(normalized.callId);
589
+ if (normalized.isToolResult)
590
+ resultIds.add(normalized.callId);
591
+ }
592
+ if (callIds.size === 0 && resultIds.size === 0)
593
+ return history;
594
+ const filtered = history.filter((item) => {
595
+ const normalized = normalizeCodexServerHistoryItem(item);
596
+ if (!normalized.callId)
597
+ return true;
598
+ if (normalized.isFunctionCall)
599
+ return resultIds.has(normalized.callId);
600
+ if (normalized.isToolResult)
601
+ return callIds.has(normalized.callId);
602
+ return true;
603
+ });
604
+ return filtered.length === history.length ? history : filtered;
605
+ };
234
606
  const filterServerManagedInput = (input, consumedToolResultCallIds) => {
235
607
  if (!Array.isArray(input)) {
236
608
  return input;
@@ -245,27 +617,24 @@ const filterServerManagedInput = (input, consumedToolResultCallIds) => {
245
617
  // function calls it issued). The request only needs the *new* items
246
618
  // produced since then.
247
619
  // Tool continuation: the input ends with a tool-call output answering the
248
- // previous response's function call(s). A previous response may issue
249
- // several parallel calls, and the reconstructed history pairs each call
250
- // with its result (fc₁,fco₁,fc₂,fco₂,…) instead of grouping every output
251
- // in one trailing block. Collect EVERY trailing tool-result item — walking
252
- // back across tool results and their interleaved function calls (everything
253
- // carrying a call id) — so the outputs for the earlier parallel calls are
254
- // not dropped. Stopping at the first interleaved function call would send
255
- // only the trailing output and the server rejects the request with a 400
256
- // ("No tool output found for function call …"). The interleaved
257
- // function-call items are then dropped because the server already holds
258
- // them via previous_response_id.
259
- if (isToolResultItem(input[input.length - 1])) {
260
- let start = input.length - 1;
620
+ // previous response's function call(s) — or tool-call output(s) followed by
621
+ // user steer message(s) admitted mid-turn.
622
+ let endUserIndex = input.length;
623
+ while (endUserIndex > 0 && isUserInputMessage(input[endUserIndex - 1])) {
624
+ endUserIndex--;
625
+ }
626
+ if (endUserIndex > 0 && isToolResultItem(input[endUserIndex - 1])) {
627
+ let start = endUserIndex - 1;
261
628
  while (start > 0 && isToolContinuationItem(input[start - 1])) {
262
629
  start--;
263
630
  }
264
- const trailing = input.slice(start);
631
+ const trailing = input.slice(start, endUserIndex);
265
632
  // A clean run of tool results (grouped layout) needs no filtering; for
266
633
  // the paired layout, drop the interleaved function-call items.
267
634
  const toolResults = trailing.every(isToolResultItem) ? trailing : trailing.filter(isToolResultItem);
268
- return filterConsumedToolResults(toolResults, consumedToolResultCallIds);
635
+ const filteredToolResults = filterConsumedToolResults(toolResults, consumedToolResultCallIds);
636
+ const trailingUserMessages = input.slice(endUserIndex);
637
+ return [...filteredToolResults, ...trailingUserMessages];
269
638
  }
270
639
  // Fresh user turn with no trailing tool output: the delta is the latest
271
640
  // user message onward.
@@ -278,11 +647,21 @@ const getResponseIdFromResponse = (response) => {
278
647
  return typeof responseId === 'string' && responseId.length > 0 ? responseId : undefined;
279
648
  };
280
649
  const getResponseIdFromStreamEvent = (event) => {
281
- const record = asRecord(event);
282
- if (record?.type !== 'response_done') {
650
+ const candidate = asRecord(event);
651
+ if (!candidate ||
652
+ !['response.completed', 'response.incomplete', 'response.failed'].includes(String(candidate.type))) {
283
653
  return undefined;
284
654
  }
285
- return getResponseIdFromResponse(record.response) ?? getResponseIdFromResponse(record);
655
+ return getResponseIdFromResponse(candidate.response) ?? getResponseIdFromResponse(candidate);
656
+ };
657
+ const getResponseOutputFromStreamEvent = (event) => {
658
+ const candidate = asRecord(event);
659
+ if (!candidate ||
660
+ !['response.completed', 'response.incomplete', 'response.failed'].includes(String(candidate.type))) {
661
+ return undefined;
662
+ }
663
+ const response = asRecord(candidate.response);
664
+ return Array.isArray(response?.output) ? response.output : undefined;
286
665
  };
287
666
  const getErrorMessage = (error) => {
288
667
  if (typeof error === 'string') {
@@ -301,6 +680,11 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
301
680
  if (!error || seen.has(error))
302
681
  return false;
303
682
  seen.add(error);
683
+ // The server explicitly rejects this request before model generation and
684
+ // instructs the client to reconnect. Retrying from durable history is safe;
685
+ // treating it as an ambiguous model outcome would suppress recovery.
686
+ if (isWebSocketConnectionLimitReachedError(error))
687
+ return true;
304
688
  if (typeof error === 'string') {
305
689
  const message = error.toLowerCase();
306
690
  return (message.includes('before opening') ||
@@ -326,38 +710,54 @@ const asAmbiguousModelOutcome = (error) => {
326
710
  cause: error,
327
711
  });
328
712
  };
329
- const hasGenerateFalse = (request) => request.modelSettings?.providerData?.generate === false;
330
- const withProviderData = (request, providerData) => ({
713
+ const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
714
+ const withProviderOptions = (request, providerOptions) => ({
331
715
  ...request,
332
- modelSettings: {
333
- ...request.modelSettings,
334
- providerData: {
335
- ...request.modelSettings?.providerData,
336
- ...providerData,
337
- },
716
+ providerOptions: {
717
+ ...request.providerOptions,
718
+ ...providerOptions,
338
719
  },
339
720
  });
340
721
  export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
341
722
  modelId;
342
723
  tokenManager;
343
- diagnosticLogger;
344
- sessionContextService;
345
- websocketReceiveTimeouts;
346
724
  codexPreviousResponseIds = new Map();
347
725
  codexConsumedToolResultCallIdsByResponseId = new Map();
726
+ codexFunctionCallIdsByResponseId = new Map();
348
727
  codexTurnIdsBySession = new Map();
349
728
  #serverHistoryReuseDisabled = false;
350
729
  providerTraffic;
730
+ diagnosticLogger;
731
+ sessionContextService;
732
+ requestCapture;
351
733
  chainedWireState = new ChainedWireState(new LunaResponsesLiteWireProtocol());
352
734
  requestTokens = new WeakMap();
353
- constructor(client, modelId, tokenManager, diagnosticLogger, providerTraffic, sessionContextService, websocketReceiveTimeouts = DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS) {
354
- super(client, modelId);
735
+ websocketReceiveTimeouts;
736
+ constructor(client, modelId, tokenManager, diagnosticLogger, providerTraffic, sessionContextService, websocketReceiveTimeouts = DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, requestCapture, transport) {
737
+ const candidates = [
738
+ transport,
739
+ diagnosticLogger,
740
+ providerTraffic,
741
+ sessionContextService,
742
+ websocketReceiveTimeouts,
743
+ requestCapture,
744
+ ];
745
+ const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
746
+ super(client, modelId, injectedTransport);
355
747
  this.modelId = modelId;
356
748
  this.tokenManager = tokenManager;
357
- this.diagnosticLogger = diagnosticLogger;
358
- this.sessionContextService = sessionContextService;
359
- this.websocketReceiveTimeouts = websocketReceiveTimeouts;
360
- this.providerTraffic = providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
749
+ this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
750
+ this.providerTraffic =
751
+ providerTraffic instanceof CodexResponsesTransport
752
+ ? DUMMY_PROVIDER_TRAFFIC
753
+ : providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
754
+ this.sessionContextService =
755
+ sessionContextService instanceof CodexResponsesTransport ? undefined : sessionContextService;
756
+ this.websocketReceiveTimeouts =
757
+ websocketReceiveTimeouts instanceof CodexResponsesTransport
758
+ ? DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS
759
+ : websocketReceiveTimeouts;
760
+ this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
361
761
  }
362
762
  #modelNameFallback() {
363
763
  return this.modelId;
@@ -402,13 +802,39 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
402
802
  modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
403
803
  });
404
804
  }
405
- async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken) {
805
+ #logTrafficClosed(requestId, requestData, outcome, eventCount) {
806
+ const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
807
+ const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
808
+ providerTraffic.recordResponseClosed({
809
+ requestId,
810
+ provider: 'codex',
811
+ model,
812
+ outcome,
813
+ eventCount,
814
+ modelClass: WS_RESPONSE_MODEL_CLASS,
815
+ modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
816
+ });
817
+ }
818
+ async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
406
819
  const logReceived = this.#logTrafficReceived.bind(this);
407
820
  const logFailed = this.#logTrafficFailed.bind(this);
821
+ const logClosed = this.#logTrafficClosed.bind(this);
408
822
  const wireState = this.chainedWireState;
409
823
  async function* wrapped() {
824
+ let sawTerminalEvent = false;
825
+ let sourceExhausted = false;
826
+ let streamFailed = false;
827
+ let eventCount = 0;
410
828
  try {
411
829
  for await (const event of responseStream) {
830
+ eventCount += 1;
831
+ if (event &&
832
+ typeof event === 'object' &&
833
+ (event.type === 'response.completed' ||
834
+ event.type === 'response.incomplete' ||
835
+ event.type === 'response.failed')) {
836
+ sawTerminalEvent = true;
837
+ }
412
838
  if (event &&
413
839
  typeof event === 'object' &&
414
840
  (event.type === 'response.completed' || event.type === 'response.incomplete') &&
@@ -421,15 +847,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
421
847
  }
422
848
  yield event;
423
849
  }
850
+ sourceExhausted = true;
424
851
  }
425
852
  catch (error) {
426
- if (wireStateKey) {
853
+ streamFailed = true;
854
+ if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
427
855
  wireState.invalidate(wireStateKey);
428
856
  }
429
857
  logFailed(requestId, requestData, error);
430
858
  throw error;
431
859
  }
432
860
  finally {
861
+ if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
862
+ logClosed(requestId, requestData, signal?.aborted ? 'aborted' : 'consumer_closed', eventCount);
863
+ }
433
864
  if (wireStateKey && wireStateToken) {
434
865
  wireState.abandon(wireStateKey, wireStateToken);
435
866
  }
@@ -441,9 +872,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
441
872
  if (!request) {
442
873
  return undefined;
443
874
  }
444
- const response = await super.getResponse(request);
875
+ const response = await super.fetchUnaryResponse(request);
445
876
  const responseId = getResponseIdFromResponse(response);
446
- this.#rememberCodexResponseId(responseId);
877
+ this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
447
878
  return responseId;
448
879
  }
449
880
  async #warmupCodexStream(request) {
@@ -451,10 +882,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
451
882
  return undefined;
452
883
  }
453
884
  let responseId;
454
- for await (const event of super.getStreamedResponse(request)) {
455
- responseId = getResponseIdFromStreamEvent(event) ?? responseId;
885
+ for await (const event of super.rawStream(request)) {
886
+ const eventResponseId = getResponseIdFromStreamEvent(event);
887
+ if (eventResponseId) {
888
+ responseId = eventResponseId;
889
+ this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, true);
890
+ }
456
891
  }
457
- this.#rememberCodexResponseId(responseId);
458
892
  return responseId;
459
893
  }
460
894
  #prepareCodexServerHistoryRequest(request) {
@@ -468,6 +902,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
468
902
  }
469
903
  const consumedToolResultCallIds = this.#getConsumedToolResultCallIds(previousResponseId);
470
904
  const filteredInput = filterServerManagedInput(input, consumedToolResultCallIds);
905
+ const knownFunctionCallIds = this.codexFunctionCallIdsByResponseId.get(previousResponseId);
906
+ if (request.previousResponseId === previousResponseId && knownFunctionCallIds) {
907
+ const orphanedCallIds = collectToolResultCallIds(filteredInput).filter((callId) => !knownFunctionCallIds.has(callId));
908
+ if (orphanedCallIds.length > 0) {
909
+ throw new OrphanedChainedToolOutputError([...new Set(orphanedCallIds)]);
910
+ }
911
+ }
471
912
  this.#warnIfConsumedToolResultsWereDropped(previousResponseId, input, filteredInput, consumedToolResultCallIds);
472
913
  if (request.previousResponseId === previousResponseId && filteredInput === input) {
473
914
  return request;
@@ -486,11 +927,18 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
486
927
  if (!key || hasGenerateFalse(request)) {
487
928
  return undefined;
488
929
  }
930
+ const hasToolResultBeforeTrailingUserMessages = (items) => {
931
+ let endUserIndex = items.length;
932
+ while (endUserIndex > 0 && isUserInputMessage(items[endUserIndex - 1])) {
933
+ endUserIndex--;
934
+ }
935
+ return endUserIndex > 0 && isToolResultItem(items[endUserIndex - 1]);
936
+ };
489
937
  const input = request.input;
490
938
  const isInternalToolContinuation = Array.isArray(input) &&
491
939
  input.length > 1 &&
492
940
  input.some(isUserInputMessage) &&
493
- isToolResultItem(input[input.length - 1]);
941
+ hasToolResultBeforeTrailingUserMessages(input);
494
942
  return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
495
943
  }
496
944
  #prepareCodexServerHistoryRequests(request) {
@@ -502,7 +950,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
502
950
  if (preparedRequest.previousResponseId) {
503
951
  return { request: preparedRequest };
504
952
  }
505
- const input = Array.isArray(request.input) ? dropUnpairedFunctionCalls(request.input) : request.input;
953
+ const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
506
954
  const replayRequest = input === request.input ? request : { ...request, input };
507
955
  if (!Array.isArray(input) || input.length === 0) {
508
956
  return { request: replayRequest };
@@ -528,7 +976,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
528
976
  }
529
977
  }
530
978
  return {
531
- warmupRequest: withProviderData({
979
+ warmupRequest: withProviderOptions({
532
980
  ...replayRequest,
533
981
  input: warmupItems,
534
982
  }, { generate: false }),
@@ -547,7 +995,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
547
995
  previousResponseId,
548
996
  });
549
997
  }
550
- #rememberCodexResponseId(responseId) {
998
+ #rememberCodexResponseId(responseId, output, input, recordChainAnchor = false) {
551
999
  if (!responseId) {
552
1000
  return;
553
1001
  }
@@ -556,6 +1004,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
556
1004
  if (key) {
557
1005
  this.codexPreviousResponseIds.set(key, responseId);
558
1006
  }
1007
+ if (recordChainAnchor && (Array.isArray(output) || Array.isArray(input))) {
1008
+ this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
1009
+ }
559
1010
  }
560
1011
  #getConsumedToolResultCallIds(responseId) {
561
1012
  if (!responseId) {
@@ -589,15 +1040,26 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
589
1040
  consumed.add(callId);
590
1041
  }
591
1042
  this.codexConsumedToolResultCallIdsByResponseId.set(responseId, consumed);
1043
+ // A continuation may explicitly reuse the prior response ID; retain the
1044
+ // consumed-output checkpoint under that anchor as well as the new response.
1045
+ if (previousResponseId)
1046
+ this.codexConsumedToolResultCallIdsByResponseId.set(previousResponseId, consumed);
592
1047
  }
593
1048
  #forgetCodexResponseId() {
594
1049
  this.#serverHistoryReuseDisabled = true;
595
1050
  this.codexPreviousResponseIds.clear();
596
1051
  this.codexConsumedToolResultCallIdsByResponseId.clear();
1052
+ this.codexFunctionCallIdsByResponseId.clear();
597
1053
  this.codexTurnIdsBySession.clear();
598
1054
  this.chainedWireState.clear();
599
1055
  }
600
1056
  #shouldForgetCodexServerHistory(error) {
1057
+ // This rejects the new request before generation; it expires the socket,
1058
+ // not the last acknowledged response. Retaining that response keeps an
1059
+ // already-executed tool output paired with the call that introduced it.
1060
+ if (isWebSocketConnectionLimitReachedError(error)) {
1061
+ return false;
1062
+ }
601
1063
  const message = getErrorMessage(error);
602
1064
  return (isPreviousResponseNotFoundError(error) ||
603
1065
  message.includes('previous_response_not_found') ||
@@ -665,7 +1127,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
665
1127
  const { previousResponseId: _previousResponseId, ...rest } = request;
666
1128
  return rest;
667
1129
  }
668
- async getResponse(request) {
1130
+ async fetchUnaryResponse(request) {
669
1131
  const run = async () => {
670
1132
  let attemptedWithServerHistory = false;
671
1133
  try {
@@ -673,9 +1135,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
673
1135
  attemptedWithServerHistory = Boolean(preparedRequest.warmupRequest || preparedRequest.request?.previousResponseId);
674
1136
  const warmupResponseId = await this.#warmupCodexUnary(preparedRequest.warmupRequest);
675
1137
  const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
676
- const response = await super.getResponse(effectiveRequest);
1138
+ const response = await super.fetchUnaryResponse(effectiveRequest);
677
1139
  const responseId = getResponseIdFromResponse(response);
678
- this.#rememberCodexResponseId(responseId);
1140
+ this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.input);
679
1141
  this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
680
1142
  return response;
681
1143
  }
@@ -686,9 +1148,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
686
1148
  throw error;
687
1149
  }
688
1150
  const fallbackRequest = this.#withoutCodexServerHistory(request);
689
- const response = await super.getResponse(fallbackRequest);
1151
+ const response = await super.fetchUnaryResponse(fallbackRequest);
690
1152
  const responseId = getResponseIdFromResponse(response);
691
- this.#rememberCodexResponseId(responseId);
1153
+ this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
692
1154
  this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
693
1155
  return response;
694
1156
  }
@@ -698,14 +1160,10 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
698
1160
  throw asAmbiguousModelOutcome(error) ?? error;
699
1161
  }
700
1162
  };
701
- const currentTrace = getCurrentTrace();
702
- if (currentTrace) {
703
- return run();
704
- }
705
- return withTrace('codex-responses-ws-model-trace', run);
1163
+ return run();
706
1164
  }
707
- async *getStreamedResponse(request) {
708
- let yieldedAnyEvent = false;
1165
+ async *rawStream(request) {
1166
+ let receivedRawFrame = false;
709
1167
  let attemptedWithServerHistory = false;
710
1168
  try {
711
1169
  const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
@@ -713,38 +1171,56 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
713
1171
  const warmupResponseId = await this.#warmupCodexStream(preparedRequest.warmupRequest);
714
1172
  const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
715
1173
  let responseId;
716
- for await (const event of super.getStreamedResponse(effectiveRequest)) {
717
- responseId = getResponseIdFromStreamEvent(event) ?? responseId;
718
- this.#rememberCodexResponseId(responseId);
719
- yieldedAnyEvent = true;
1174
+ for await (const event of super.rawStream(effectiveRequest)) {
1175
+ const eventResponseId = getResponseIdFromStreamEvent(event);
1176
+ if (eventResponseId) {
1177
+ responseId = eventResponseId;
1178
+ this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.input);
1179
+ }
1180
+ if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
1181
+ this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
1182
+ }
1183
+ receivedRawFrame = true;
720
1184
  yield event;
721
1185
  }
722
1186
  this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
723
1187
  }
724
1188
  catch (error) {
725
- if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !yieldedAnyEvent) {
1189
+ if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
726
1190
  this.#forgetCodexResponseId();
727
1191
  if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
728
1192
  throw error;
729
1193
  }
730
1194
  const fallbackRequest = this.#withoutCodexServerHistory(request);
731
1195
  let responseId;
732
- for await (const event of super.getStreamedResponse(fallbackRequest)) {
733
- responseId = getResponseIdFromStreamEvent(event) ?? responseId;
734
- this.#rememberCodexResponseId(responseId);
735
- yield event;
1196
+ try {
1197
+ for await (const event of super.rawStream(fallbackRequest)) {
1198
+ receivedRawFrame = true;
1199
+ const eventResponseId = getResponseIdFromStreamEvent(event);
1200
+ if (eventResponseId) {
1201
+ responseId = eventResponseId;
1202
+ this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
1203
+ }
1204
+ if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
1205
+ this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
1206
+ }
1207
+ yield event;
1208
+ }
1209
+ this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
1210
+ return;
1211
+ }
1212
+ catch (fallbackError) {
1213
+ throw asAmbiguousModelOutcome(fallbackError) ?? fallbackError;
736
1214
  }
737
- this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
738
- return;
739
1215
  }
740
1216
  if (this.#shouldForgetCodexServerHistory(error)) {
741
1217
  this.#forgetCodexResponseId();
742
1218
  }
743
- throw (!yieldedAnyEvent ? asAmbiguousModelOutcome(error) : undefined) ?? error;
1219
+ throw (receivedRawFrame ? asAmbiguousModelOutcome(error) : undefined) ?? error;
744
1220
  }
745
1221
  }
746
- _buildResponsesCreateRequest(request, stream) {
747
- const built = super._buildResponsesCreateRequest(request, stream);
1222
+ buildResponsesCreateRequest(request, stream) {
1223
+ const built = super.buildResponsesCreateRequest(request, stream);
748
1224
  const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
749
1225
  includeDeveloperInstructionsOnChainedRequest: true,
750
1226
  });
@@ -760,7 +1236,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
760
1236
  requestData: prepared.requestData,
761
1237
  };
762
1238
  }
763
- async _fetchResponse(request, stream) {
1239
+ async fetchResponse(request, stream) {
764
1240
  const requestId = randomUUID();
765
1241
  const wireStateKey = RESPONSES_LITE_MODELS.has(this.modelId)
766
1242
  ? this.#getCodexServerHistoryKey() ?? undefined
@@ -783,46 +1259,46 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
783
1259
  if (accountId) {
784
1260
  extraHeaders['chatgpt-account-id'] = accountId;
785
1261
  }
1262
+ const watchdog = createWebSocketReceiveWatchdog(request.signal, this.websocketReceiveTimeouts);
786
1263
  const updatedRequest = {
787
1264
  ...request,
788
- signal: undefined,
789
- modelSettings: {
790
- ...request.modelSettings,
791
- providerData: {
792
- ...request.modelSettings?.providerData,
793
- ...(codexIdentity
794
- ? {
795
- client_metadata: {
796
- ...request.modelSettings?.providerData?.client_metadata,
797
- ...codexIdentity.clientMetadata,
798
- },
799
- }
800
- : {}),
801
- ...(isResponsesLite
802
- ? {
803
- client_metadata: {
804
- ...request.modelSettings?.providerData?.client_metadata,
805
- ...(codexIdentity?.clientMetadata ?? {}),
806
- ws_request_header_x_openai_internal_codex_responses_lite: 'true',
807
- },
808
- }
809
- : {}),
810
- extraHeaders: {
811
- ...request.modelSettings?.providerData?.extraHeaders,
812
- ...extraHeaders,
813
- },
1265
+ signal: watchdog.signal,
1266
+ providerOptions: {
1267
+ ...request.providerOptions,
1268
+ ...(codexIdentity
1269
+ ? {
1270
+ client_metadata: {
1271
+ ...asRecord(request.providerOptions?.client_metadata),
1272
+ ...codexIdentity.clientMetadata,
1273
+ },
1274
+ }
1275
+ : {}),
1276
+ ...(isResponsesLite
1277
+ ? {
1278
+ client_metadata: {
1279
+ ...asRecord(request.providerOptions?.client_metadata),
1280
+ ...(codexIdentity?.clientMetadata ?? {}),
1281
+ ws_request_header_x_openai_internal_codex_responses_lite: 'true',
1282
+ },
1283
+ }
1284
+ : {}),
1285
+ extraHeaders: {
1286
+ ...asRecord(request.providerOptions?.extraHeaders),
1287
+ ...extraHeaders,
814
1288
  },
815
1289
  },
816
1290
  };
817
- const watchdog = createWebSocketReceiveWatchdog(request.signal, this.websocketReceiveTimeouts);
818
- updatedRequest.signal = watchdog.signal;
819
- const builtRequest = this._buildResponsesCreateRequest(updatedRequest, true);
1291
+ const builtRequest = this.buildResponsesCreateRequest(updatedRequest, true);
820
1292
  const requestData = (asRecord(builtRequest?.requestData) ?? {});
821
1293
  const wireStateToken = this.requestTokens.get(updatedRequest);
1294
+ // This is the last application-owned point before the inherited
1295
+ // transport's private fetch path. Capture it without changing the
1296
+ // prepared request or wire state.
1297
+ captureProviderRequest(this.requestCapture, { provider: 'codex', transport: 'websocket', requestData });
822
1298
  this.#logTrafficStarted(requestId, requestData, extraHeaders);
823
1299
  if (!stream) {
824
1300
  try {
825
- const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super._fetchResponse(updatedRequest, true)), this.diagnosticLogger);
1301
+ const response = await fetchAndReconstructUnaryResponse(async () => watchdog.wrap(await super.fetchResponse(updatedRequest, true)), this.diagnosticLogger);
826
1302
  if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
827
1303
  this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
828
1304
  }
@@ -832,49 +1308,73 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
832
1308
  catch (error) {
833
1309
  const timeoutError = watchdog.timeoutError();
834
1310
  watchdog.close();
1311
+ const failure = timeoutError ?? error;
835
1312
  if (wireStateKey) {
836
- this.chainedWireState.invalidate(wireStateKey);
1313
+ if (isWebSocketConnectionLimitReachedError(failure)) {
1314
+ if (wireStateToken)
1315
+ this.chainedWireState.abandon(wireStateKey, wireStateToken);
1316
+ }
1317
+ else {
1318
+ this.chainedWireState.invalidate(wireStateKey);
1319
+ }
837
1320
  }
838
- this.#logTrafficFailed(requestId, requestData, timeoutError ?? error);
839
- throw timeoutError ?? error;
1321
+ this.#logTrafficFailed(requestId, requestData, failure);
1322
+ throw failure;
840
1323
  }
841
1324
  }
842
1325
  try {
843
- const response = (await super._fetchResponse(updatedRequest, stream));
1326
+ const response = (await super.fetchResponse(updatedRequest, stream));
844
1327
  const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
845
- return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken);
1328
+ return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal);
846
1329
  }
847
1330
  catch (error) {
848
1331
  const timeoutError = watchdog.timeoutError();
849
1332
  watchdog.close();
1333
+ const failure = timeoutError ?? error;
850
1334
  if (wireStateKey) {
851
- this.chainedWireState.invalidate(wireStateKey);
1335
+ if (isWebSocketConnectionLimitReachedError(failure)) {
1336
+ if (wireStateToken)
1337
+ this.chainedWireState.abandon(wireStateKey, wireStateToken);
1338
+ }
1339
+ else {
1340
+ this.chainedWireState.invalidate(wireStateKey);
1341
+ }
852
1342
  }
853
- this.#logTrafficFailed(requestId, requestData, timeoutError ?? error);
854
- throw timeoutError ?? error;
1343
+ this.#logTrafficFailed(requestId, requestData, failure);
1344
+ throw failure;
855
1345
  }
856
1346
  }
857
1347
  }
858
1348
  export class CodexResponsesModel extends OpenAIResponsesModel {
859
1349
  modelId;
860
1350
  diagnosticLogger;
861
- constructor(client, modelId, diagnosticLogger) {
862
- super(client, modelId);
1351
+ requestCapture;
1352
+ constructor(client, modelId, diagnosticLogger, requestCapture, transport) {
1353
+ const candidates = [transport, diagnosticLogger, requestCapture];
1354
+ const injectedTransport = candidates.find((candidate) => candidate instanceof CodexResponsesTransport);
1355
+ super(client, modelId, injectedTransport);
863
1356
  this.modelId = modelId;
864
- this.diagnosticLogger = diagnosticLogger;
1357
+ this.diagnosticLogger = diagnosticLogger instanceof CodexResponsesTransport ? undefined : diagnosticLogger;
1358
+ this.requestCapture = requestCapture instanceof CodexResponsesTransport ? undefined : requestCapture;
865
1359
  }
866
- _buildResponsesCreateRequest(request, stream) {
867
- const built = OpenAIResponsesModel.prototype._buildResponsesCreateRequest.call(this, request, stream);
868
- return {
1360
+ buildResponsesCreateRequest(request, stream) {
1361
+ const built = super.buildResponsesCreateRequest(request, stream);
1362
+ const result = {
869
1363
  ...built,
870
1364
  requestData: normalizeCodexRequestData(built.requestData, request, this.modelId),
871
1365
  };
1366
+ captureProviderRequest(this.requestCapture, {
1367
+ provider: 'codex',
1368
+ transport: 'http',
1369
+ requestData: result.requestData,
1370
+ });
1371
+ return result;
872
1372
  }
873
- async _fetchResponse(request, stream) {
1373
+ async fetchResponse(request, stream) {
874
1374
  if (!stream) {
875
- return fetchAndReconstructUnaryResponse(() => OpenAIResponsesModel.prototype._fetchResponse.call(this, request, true), this.diagnosticLogger);
1375
+ return fetchAndReconstructUnaryResponse(() => super.fetchResponse(request, true), this.diagnosticLogger);
876
1376
  }
877
- const response = await OpenAIResponsesModel.prototype._fetchResponse.call(this, request, stream);
1377
+ const response = await super.fetchResponse(request, stream);
878
1378
  return wrapCodexStream(response, this.diagnosticLogger);
879
1379
  }
880
1380
  }
@@ -917,8 +1417,9 @@ export async function* wrapCodexStream(source, logger) {
917
1417
  const item = event.item;
918
1418
  const itemRecord = asRecord(item);
919
1419
  // If the accumulated function_call item is missing call_id, backfill it
920
- // from the itemCallIds map so the SDK's convertToOutputItem picks up the
921
- // correct identifier and the continuation request sends the right call_id.
1420
+ // from the itemCallIds map so the inherited transport's
1421
+ // convertToOutputItem picks up the correct identifier and the continuation
1422
+ // request sends the right call_id.
922
1423
  if (itemRecord?.type === 'function_call' &&
923
1424
  !stringValue(itemRecord?.call_id) &&
924
1425
  typeof itemRecord?.id === 'string') {