@qduc/term2 0.14.0 → 0.16.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 (1166) hide show
  1. package/README.md +324 -316
  2. package/dist/agent.d.ts +5 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +23 -61
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app-helpers.d.ts +4 -0
  7. package/dist/app-helpers.d.ts.map +1 -1
  8. package/dist/app-helpers.js +6 -0
  9. package/dist/app-helpers.js.map +1 -1
  10. package/dist/app.d.ts +2 -2
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/app.js +265 -27
  13. package/dist/app.js.map +1 -1
  14. package/dist/cli.js +123 -30
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/auto-approve-command.js +3 -3
  17. package/dist/commands/auto-approve-command.js.map +1 -1
  18. package/dist/commands/compact-command.d.ts.map +1 -1
  19. package/dist/commands/compact-command.js +4 -0
  20. package/dist/commands/compact-command.js.map +1 -1
  21. package/dist/commands/effort-command.js +1 -1
  22. package/dist/commands/effort-command.js.map +1 -1
  23. package/dist/commands/guarded-settings-command.d.ts +3 -1
  24. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  25. package/dist/commands/guarded-settings-command.js +17 -5
  26. package/dist/commands/guarded-settings-command.js.map +1 -1
  27. package/dist/commands/mode-commands.d.ts +9 -2
  28. package/dist/commands/mode-commands.d.ts.map +1 -1
  29. package/dist/commands/mode-commands.js +12 -3
  30. package/dist/commands/mode-commands.js.map +1 -1
  31. package/dist/commands/model-command.js +1 -1
  32. package/dist/commands/model-command.js.map +1 -1
  33. package/dist/commands/resume-command.d.ts +10 -0
  34. package/dist/commands/resume-command.d.ts.map +1 -0
  35. package/dist/commands/resume-command.js +40 -0
  36. package/dist/commands/resume-command.js.map +1 -0
  37. package/dist/commands/usage-command.d.ts +10 -1
  38. package/dist/commands/usage-command.d.ts.map +1 -1
  39. package/dist/commands/usage-command.js +11 -1
  40. package/dist/commands/usage-command.js.map +1 -1
  41. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  42. package/dist/components/ErrorBoundary.js +5 -4
  43. package/dist/components/ErrorBoundary.js.map +1 -1
  44. package/dist/components/InputBox.d.ts +2 -0
  45. package/dist/components/InputBox.d.ts.map +1 -1
  46. package/dist/components/InputBox.js +59 -8
  47. package/dist/components/InputBox.js.map +1 -1
  48. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  49. package/dist/components/MarkdownRenderer.js +16 -15
  50. package/dist/components/MarkdownRenderer.js.map +1 -1
  51. package/dist/components/common/MenuContainer.d.ts +25 -2
  52. package/dist/components/common/MenuContainer.d.ts.map +1 -1
  53. package/dist/components/common/MenuContainer.js +35 -11
  54. package/dist/components/common/MenuContainer.js.map +1 -1
  55. package/dist/components/common/ScrollableTabBar.d.ts.map +1 -1
  56. package/dist/components/common/ScrollableTabBar.js +5 -4
  57. package/dist/components/common/ScrollableTabBar.js.map +1 -1
  58. package/dist/components/input/ApplicationInputSurface.d.ts +4 -5
  59. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
  60. package/dist/components/input/ApplicationInputSurface.js.map +1 -1
  61. package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -1
  62. package/dist/components/input/FirstRunSetupPrompt.js +5 -4
  63. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  64. package/dist/components/input/MenuSurface.d.ts.map +1 -1
  65. package/dist/components/input/MenuSurface.js +10 -3
  66. package/dist/components/input/MenuSurface.js.map +1 -1
  67. package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
  68. package/dist/components/input/ModelMenuSession.js +2 -1
  69. package/dist/components/input/ModelMenuSession.js.map +1 -1
  70. package/dist/components/input/PendingQueueList.d.ts +2 -0
  71. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  72. package/dist/components/input/PendingQueueList.js +26 -6
  73. package/dist/components/input/PendingQueueList.js.map +1 -1
  74. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
  75. package/dist/components/input/ProviderMenuSession.js +1 -0
  76. package/dist/components/input/ProviderMenuSession.js.map +1 -1
  77. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  78. package/dist/components/input/SettingsValueMenuSession.js +8 -1
  79. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  80. package/dist/components/layout/BackgroundTaskManager.d.ts +2 -0
  81. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  82. package/dist/components/layout/BackgroundTaskManager.js +166 -73
  83. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  84. package/dist/components/layout/BackgroundTasksPanel.d.ts +12 -3
  85. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  86. package/dist/components/layout/BackgroundTasksPanel.js +197 -62
  87. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  88. package/dist/components/layout/Banner.d.ts +0 -1
  89. package/dist/components/layout/Banner.d.ts.map +1 -1
  90. package/dist/components/layout/Banner.js +43 -73
  91. package/dist/components/layout/Banner.js.map +1 -1
  92. package/dist/components/layout/BottomArea.d.ts +17 -6
  93. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  94. package/dist/components/layout/BottomArea.js +44 -19
  95. package/dist/components/layout/BottomArea.js.map +1 -1
  96. package/dist/components/layout/DiffView.js +5 -5
  97. package/dist/components/layout/DiffView.js.map +1 -1
  98. package/dist/components/layout/StatusBar.d.ts +9 -1
  99. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  100. package/dist/components/layout/StatusBar.js +332 -80
  101. package/dist/components/layout/StatusBar.js.map +1 -1
  102. package/dist/components/layout/background-task-clock.d.ts +43 -0
  103. package/dist/components/layout/background-task-clock.d.ts.map +1 -0
  104. package/dist/components/layout/background-task-clock.js +46 -0
  105. package/dist/components/layout/background-task-clock.js.map +1 -0
  106. package/dist/components/layout/live-task-rows.d.ts +16 -0
  107. package/dist/components/layout/live-task-rows.d.ts.map +1 -0
  108. package/dist/components/layout/live-task-rows.js +28 -0
  109. package/dist/components/layout/live-task-rows.js.map +1 -0
  110. package/dist/components/layout/terminal-text-budget.d.ts +4 -0
  111. package/dist/components/layout/terminal-text-budget.d.ts.map +1 -0
  112. package/dist/components/layout/terminal-text-budget.js +18 -0
  113. package/dist/components/layout/terminal-text-budget.js.map +1 -0
  114. package/dist/components/menu/CopyMenu.d.ts.map +1 -1
  115. package/dist/components/menu/CopyMenu.js +4 -3
  116. package/dist/components/menu/CopyMenu.js.map +1 -1
  117. package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +1 -1
  118. package/dist/components/menu/MentorPoolSelectionMenu.js +28 -21
  119. package/dist/components/menu/MentorPoolSelectionMenu.js.map +1 -1
  120. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  121. package/dist/components/menu/ModelSelectionMenu.js +43 -17
  122. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  123. package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
  124. package/dist/components/menu/PathSelectionMenu.js +4 -3
  125. package/dist/components/menu/PathSelectionMenu.js.map +1 -1
  126. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  127. package/dist/components/menu/ProviderSelectionMenu.js +71 -26
  128. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  129. package/dist/components/menu/RewindMenu.d.ts.map +1 -1
  130. package/dist/components/menu/RewindMenu.js +4 -3
  131. package/dist/components/menu/RewindMenu.js.map +1 -1
  132. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  133. package/dist/components/menu/SettingsSelectionMenu.js +30 -25
  134. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  135. package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
  136. package/dist/components/menu/SettingsValueSelectionMenu.js +22 -20
  137. package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
  138. package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
  139. package/dist/components/menu/SkillSelectionMenu.js +33 -23
  140. package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
  141. package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
  142. package/dist/components/menu/SlashCommandMenu.js +11 -6
  143. package/dist/components/menu/SlashCommandMenu.js.map +1 -1
  144. package/dist/components/message/ChatMessage.js +2 -2
  145. package/dist/components/message/ChatMessage.js.map +1 -1
  146. package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
  147. package/dist/components/message/CodeContextSearchRenderer.js +8 -11
  148. package/dist/components/message/CodeContextSearchRenderer.js.map +1 -1
  149. package/dist/components/message/CommandGroupSummary.d.ts +9 -0
  150. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -0
  151. package/dist/components/message/CommandGroupSummary.js +39 -0
  152. package/dist/components/message/CommandGroupSummary.js.map +1 -0
  153. package/dist/components/message/CommandMessage.d.ts +8 -0
  154. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  155. package/dist/components/message/CommandMessage.js +159 -110
  156. package/dist/components/message/CommandMessage.js.map +1 -1
  157. package/dist/components/message/GrepRenderer.d.ts.map +1 -1
  158. package/dist/components/message/GrepRenderer.js +5 -8
  159. package/dist/components/message/GrepRenderer.js.map +1 -1
  160. package/dist/components/message/MemoryRenderer.d.ts +1 -0
  161. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  162. package/dist/components/message/MemoryRenderer.js +19 -17
  163. package/dist/components/message/MemoryRenderer.js.map +1 -1
  164. package/dist/components/message/MessageList.d.ts +6 -3
  165. package/dist/components/message/MessageList.d.ts.map +1 -1
  166. package/dist/components/message/MessageList.js +68 -13
  167. package/dist/components/message/MessageList.js.map +1 -1
  168. package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
  169. package/dist/components/message/ReadFileRenderer.js +5 -6
  170. package/dist/components/message/ReadFileRenderer.js.map +1 -1
  171. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  172. package/dist/components/message/SubagentActivityMessage.js +21 -15
  173. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  174. package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
  175. package/dist/components/message/WebFetchRenderer.js +7 -11
  176. package/dist/components/message/WebFetchRenderer.js.map +1 -1
  177. package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
  178. package/dist/components/message/WebSearchRenderer.js +5 -10
  179. package/dist/components/message/WebSearchRenderer.js.map +1 -1
  180. package/dist/components/message/command-grouping.d.ts +66 -0
  181. package/dist/components/message/command-grouping.d.ts.map +1 -0
  182. package/dist/components/message/command-grouping.js +184 -0
  183. package/dist/components/message/command-grouping.js.map +1 -0
  184. package/dist/components/message/command-message-helpers.d.ts +11 -37
  185. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  186. package/dist/components/message/command-message-helpers.js +62 -8
  187. package/dist/components/message/command-message-helpers.js.map +1 -1
  188. package/dist/components/message/useCommandVisibility.d.ts.map +1 -1
  189. package/dist/components/message/useCommandVisibility.js +5 -4
  190. package/dist/components/message/useCommandVisibility.js.map +1 -1
  191. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -1
  192. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  193. package/dist/components/prompt/ApprovalPrompt.js +286 -156
  194. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  195. package/dist/components/prompt/HandoffConfirmationPrompt.d.ts.map +1 -1
  196. package/dist/components/prompt/HandoffConfirmationPrompt.js +3 -2
  197. package/dist/components/prompt/HandoffConfirmationPrompt.js.map +1 -1
  198. package/dist/components/prompt/InputSurgeConfirmationPrompt.d.ts.map +1 -1
  199. package/dist/components/prompt/InputSurgeConfirmationPrompt.js +5 -4
  200. package/dist/components/prompt/InputSurgeConfirmationPrompt.js.map +1 -1
  201. package/dist/components/prompt/LargeUncachedConfirmationPrompt.d.ts.map +1 -1
  202. package/dist/components/prompt/LargeUncachedConfirmationPrompt.js +4 -3
  203. package/dist/components/prompt/LargeUncachedConfirmationPrompt.js.map +1 -1
  204. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts +11 -0
  205. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -0
  206. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +51 -0
  207. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -0
  208. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  209. package/dist/components/prompt/QueuePausedPrompt.js +15 -8
  210. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  211. package/dist/components/prompt/StandardModeConfirmationPrompt.d.ts.map +1 -1
  212. package/dist/components/prompt/StandardModeConfirmationPrompt.js +3 -2
  213. package/dist/components/prompt/StandardModeConfirmationPrompt.js.map +1 -1
  214. package/dist/components/theme.d.ts +58 -3
  215. package/dist/components/theme.d.ts.map +1 -1
  216. package/dist/components/theme.js +84 -17
  217. package/dist/components/theme.js.map +1 -1
  218. package/dist/contracts/application-stream.d.ts +21 -0
  219. package/dist/contracts/application-stream.d.ts.map +1 -1
  220. package/dist/contracts/conversation.d.ts +24 -1
  221. package/dist/contracts/conversation.d.ts.map +1 -1
  222. package/dist/contracts/conversation.js +8 -0
  223. package/dist/contracts/conversation.js.map +1 -1
  224. package/dist/contracts/streamed-model-turn.d.ts +22 -1
  225. package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
  226. package/dist/core/index.d.ts +9 -0
  227. package/dist/core/index.d.ts.map +1 -0
  228. package/dist/core/index.js +8 -0
  229. package/dist/core/index.js.map +1 -0
  230. package/dist/core/session-runtime.d.ts +10 -0
  231. package/dist/core/session-runtime.d.ts.map +1 -0
  232. package/dist/core/session-runtime.js +9 -0
  233. package/dist/core/session-runtime.js.map +1 -0
  234. package/dist/gateway/assertion.d.ts +41 -0
  235. package/dist/gateway/assertion.d.ts.map +1 -0
  236. package/dist/gateway/assertion.js +168 -0
  237. package/dist/gateway/assertion.js.map +1 -0
  238. package/dist/gateway/contracts.d.ts +141 -0
  239. package/dist/gateway/contracts.d.ts.map +1 -0
  240. package/dist/gateway/contracts.js +24 -0
  241. package/dist/gateway/contracts.js.map +1 -0
  242. package/dist/gateway/dynamic-workspace-registry.d.ts +76 -0
  243. package/dist/gateway/dynamic-workspace-registry.d.ts.map +1 -0
  244. package/dist/gateway/dynamic-workspace-registry.js +403 -0
  245. package/dist/gateway/dynamic-workspace-registry.js.map +1 -0
  246. package/dist/gateway/gateway.d.ts +95 -0
  247. package/dist/gateway/gateway.d.ts.map +1 -0
  248. package/dist/gateway/gateway.js +1960 -0
  249. package/dist/gateway/gateway.js.map +1 -0
  250. package/dist/gateway/index.d.ts +22 -0
  251. package/dist/gateway/index.d.ts.map +1 -0
  252. package/dist/gateway/index.js +22 -0
  253. package/dist/gateway/index.js.map +1 -0
  254. package/dist/gateway/interaction-protocol.d.ts +76 -0
  255. package/dist/gateway/interaction-protocol.d.ts.map +1 -0
  256. package/dist/gateway/interaction-protocol.js +548 -0
  257. package/dist/gateway/interaction-protocol.js.map +1 -0
  258. package/dist/gateway/launcher-seam.d.ts +18 -0
  259. package/dist/gateway/launcher-seam.d.ts.map +1 -0
  260. package/dist/gateway/launcher-seam.js +43 -0
  261. package/dist/gateway/launcher-seam.js.map +1 -0
  262. package/dist/gateway/launcher.d.ts +8 -0
  263. package/dist/gateway/launcher.d.ts.map +1 -0
  264. package/dist/gateway/launcher.js +20 -0
  265. package/dist/gateway/launcher.js.map +1 -0
  266. package/dist/gateway/lifecycle.d.ts +12 -0
  267. package/dist/gateway/lifecycle.d.ts.map +1 -0
  268. package/dist/gateway/lifecycle.js +38 -0
  269. package/dist/gateway/lifecycle.js.map +1 -0
  270. package/dist/gateway/pairing.d.ts +25 -0
  271. package/dist/gateway/pairing.d.ts.map +1 -0
  272. package/dist/gateway/pairing.js +107 -0
  273. package/dist/gateway/pairing.js.map +1 -0
  274. package/dist/gateway/persistence/admission-persistence.d.ts +82 -0
  275. package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -0
  276. package/dist/gateway/persistence/admission-persistence.js +215 -0
  277. package/dist/gateway/persistence/admission-persistence.js.map +1 -0
  278. package/dist/gateway/persistence/contracts.d.ts +94 -0
  279. package/dist/gateway/persistence/contracts.d.ts.map +1 -0
  280. package/dist/gateway/persistence/contracts.js +32 -0
  281. package/dist/gateway/persistence/contracts.js.map +1 -0
  282. package/dist/gateway/persistence/coordinator.d.ts +27 -0
  283. package/dist/gateway/persistence/coordinator.d.ts.map +1 -0
  284. package/dist/gateway/persistence/coordinator.js +194 -0
  285. package/dist/gateway/persistence/coordinator.js.map +1 -0
  286. package/dist/gateway/persistence/event-journal.d.ts +31 -0
  287. package/dist/gateway/persistence/event-journal.d.ts.map +1 -0
  288. package/dist/gateway/persistence/event-journal.js +378 -0
  289. package/dist/gateway/persistence/event-journal.js.map +1 -0
  290. package/dist/gateway/persistence/interaction-checkpoint.d.ts +17 -0
  291. package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -0
  292. package/dist/gateway/persistence/interaction-checkpoint.js +75 -0
  293. package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -0
  294. package/dist/gateway/persistence/projection.d.ts +53 -0
  295. package/dist/gateway/persistence/projection.d.ts.map +1 -0
  296. package/dist/gateway/persistence/projection.js +226 -0
  297. package/dist/gateway/persistence/projection.js.map +1 -0
  298. package/dist/gateway/persistence/retention.d.ts +16 -0
  299. package/dist/gateway/persistence/retention.d.ts.map +1 -0
  300. package/dist/gateway/persistence/retention.js +93 -0
  301. package/dist/gateway/persistence/retention.js.map +1 -0
  302. package/dist/gateway/persistence/session-index.d.ts +34 -0
  303. package/dist/gateway/persistence/session-index.d.ts.map +1 -0
  304. package/dist/gateway/persistence/session-index.js +348 -0
  305. package/dist/gateway/persistence/session-index.js.map +1 -0
  306. package/dist/gateway/persistence/session-persistence.d.ts +68 -0
  307. package/dist/gateway/persistence/session-persistence.d.ts.map +1 -0
  308. package/dist/gateway/persistence/session-persistence.js +165 -0
  309. package/dist/gateway/persistence/session-persistence.js.map +1 -0
  310. package/dist/gateway/persistence/storage.d.ts +13 -0
  311. package/dist/gateway/persistence/storage.d.ts.map +1 -0
  312. package/dist/gateway/persistence/storage.js +87 -0
  313. package/dist/gateway/persistence/storage.js.map +1 -0
  314. package/dist/gateway/replay-ledger.d.ts +30 -0
  315. package/dist/gateway/replay-ledger.d.ts.map +1 -0
  316. package/dist/gateway/replay-ledger.js +83 -0
  317. package/dist/gateway/replay-ledger.js.map +1 -0
  318. package/dist/gateway/runtime-factory.d.ts +93 -0
  319. package/dist/gateway/runtime-factory.d.ts.map +1 -0
  320. package/dist/gateway/runtime-factory.js +242 -0
  321. package/dist/gateway/runtime-factory.js.map +1 -0
  322. package/dist/gateway/safe-log.d.ts +15 -0
  323. package/dist/gateway/safe-log.d.ts.map +1 -0
  324. package/dist/gateway/safe-log.js +108 -0
  325. package/dist/gateway/safe-log.js.map +1 -0
  326. package/dist/gateway/server-session.d.ts +65 -0
  327. package/dist/gateway/server-session.d.ts.map +1 -0
  328. package/dist/gateway/server-session.js +284 -0
  329. package/dist/gateway/server-session.js.map +1 -0
  330. package/dist/gateway/server.d.ts +65 -0
  331. package/dist/gateway/server.d.ts.map +1 -0
  332. package/dist/gateway/server.js +214 -0
  333. package/dist/gateway/server.js.map +1 -0
  334. package/dist/gateway/settings-rpc.d.ts +95 -0
  335. package/dist/gateway/settings-rpc.d.ts.map +1 -0
  336. package/dist/gateway/settings-rpc.js +227 -0
  337. package/dist/gateway/settings-rpc.js.map +1 -0
  338. package/dist/gateway/trusted-clients.d.ts +27 -0
  339. package/dist/gateway/trusted-clients.d.ts.map +1 -0
  340. package/dist/gateway/trusted-clients.js +157 -0
  341. package/dist/gateway/trusted-clients.js.map +1 -0
  342. package/dist/gateway/worker-boundary.d.ts +41 -0
  343. package/dist/gateway/worker-boundary.d.ts.map +1 -0
  344. package/dist/gateway/worker-boundary.js +159 -0
  345. package/dist/gateway/worker-boundary.js.map +1 -0
  346. package/dist/gateway/workspace-admission.d.ts +48 -0
  347. package/dist/gateway/workspace-admission.d.ts.map +1 -0
  348. package/dist/gateway/workspace-admission.js +358 -0
  349. package/dist/gateway/workspace-admission.js.map +1 -0
  350. package/dist/gateway/workspace-boundary-probe.d.ts +18 -0
  351. package/dist/gateway/workspace-boundary-probe.d.ts.map +1 -0
  352. package/dist/gateway/workspace-boundary-probe.js +37 -0
  353. package/dist/gateway/workspace-boundary-probe.js.map +1 -0
  354. package/dist/hooks/conversation-ui-reducer.d.ts +12 -0
  355. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  356. package/dist/hooks/conversation-ui-reducer.js +12 -1
  357. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  358. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  359. package/dist/hooks/settings-completion-config.js +39 -3
  360. package/dist/hooks/settings-completion-config.js.map +1 -1
  361. package/dist/hooks/use-app-commands.d.ts +9 -1
  362. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  363. package/dist/hooks/use-app-commands.js +34 -14
  364. package/dist/hooks/use-app-commands.js.map +1 -1
  365. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +6 -3
  366. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  367. package/dist/hooks/use-app-keyboard-shortcuts.js +22 -9
  368. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  369. package/dist/hooks/use-conversation.d.ts +9 -0
  370. package/dist/hooks/use-conversation.d.ts.map +1 -1
  371. package/dist/hooks/use-conversation.js +34 -14
  372. package/dist/hooks/use-conversation.js.map +1 -1
  373. package/dist/hooks/use-grok-credit-usage.d.ts +20 -0
  374. package/dist/hooks/use-grok-credit-usage.d.ts.map +1 -0
  375. package/dist/hooks/use-grok-credit-usage.js +48 -0
  376. package/dist/hooks/use-grok-credit-usage.js.map +1 -0
  377. package/dist/hooks/use-opencode-go-usage.d.ts +8 -0
  378. package/dist/hooks/use-opencode-go-usage.d.ts.map +1 -0
  379. package/dist/hooks/use-opencode-go-usage.js +45 -0
  380. package/dist/hooks/use-opencode-go-usage.js.map +1 -0
  381. package/dist/hooks/use-provider-selection.d.ts +10 -0
  382. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  383. package/dist/hooks/use-provider-selection.js +105 -6
  384. package/dist/hooks/use-provider-selection.js.map +1 -1
  385. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  386. package/dist/hooks/use-settings-value-completion.js +10 -2
  387. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  388. package/dist/hooks/use-shell-mode.d.ts +3 -4
  389. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  390. package/dist/hooks/use-shell-mode.js +14 -12
  391. package/dist/hooks/use-shell-mode.js.map +1 -1
  392. package/dist/hooks/use-terminal-columns.d.ts +15 -0
  393. package/dist/hooks/use-terminal-columns.d.ts.map +1 -0
  394. package/dist/hooks/use-terminal-columns.js +45 -0
  395. package/dist/hooks/use-terminal-columns.js.map +1 -0
  396. package/dist/lib/agent-client.d.ts +12 -3
  397. package/dist/lib/agent-client.d.ts.map +1 -1
  398. package/dist/lib/agent-client.js +116 -23
  399. package/dist/lib/agent-client.js.map +1 -1
  400. package/dist/lib/agent-configuration.d.ts +5 -0
  401. package/dist/lib/agent-configuration.d.ts.map +1 -1
  402. package/dist/lib/agent-configuration.js +10 -2
  403. package/dist/lib/agent-configuration.js.map +1 -1
  404. package/dist/lib/agent-factory.d.ts +5 -0
  405. package/dist/lib/agent-factory.d.ts.map +1 -1
  406. package/dist/lib/agent-factory.js +36 -11
  407. package/dist/lib/agent-factory.js.map +1 -1
  408. package/dist/lib/editor-impl.d.ts.map +1 -1
  409. package/dist/lib/editor-impl.js +14 -17
  410. package/dist/lib/editor-impl.js.map +1 -1
  411. package/dist/lib/harness-input-idle.d.ts +16 -0
  412. package/dist/lib/harness-input-idle.d.ts.map +1 -0
  413. package/dist/lib/harness-input-idle.js +51 -0
  414. package/dist/lib/harness-input-idle.js.map +1 -0
  415. package/dist/lib/input-owner.d.ts +3 -0
  416. package/dist/lib/input-owner.d.ts.map +1 -1
  417. package/dist/lib/input-owner.js +2 -0
  418. package/dist/lib/input-owner.js.map +1 -1
  419. package/dist/lib/subagent-bridge.d.ts +3 -3
  420. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  421. package/dist/lib/subagent-bridge.js +16 -9
  422. package/dist/lib/subagent-bridge.js.map +1 -1
  423. package/dist/lib/tool-invoke.d.ts +2 -0
  424. package/dist/lib/tool-invoke.d.ts.map +1 -1
  425. package/dist/lib/tool-invoke.js +3 -0
  426. package/dist/lib/tool-invoke.js.map +1 -1
  427. package/dist/non-interactive.d.ts.map +1 -1
  428. package/dist/non-interactive.js +12 -0
  429. package/dist/non-interactive.js.map +1 -1
  430. package/dist/prompts/approval-model.md +22 -0
  431. package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
  432. package/dist/prompts/gpt-5.6.md +4 -3
  433. package/dist/prompts/kimi.md +1 -1
  434. package/dist/prompts/mentor-mode-stub.md +3 -0
  435. package/dist/prompts/orchestrator-mode-stub.md +3 -0
  436. package/dist/prompts/orchestrator.md +10 -1
  437. package/dist/prompts/plan-mode-info.md +3 -3
  438. package/dist/prompts/plan-mode-stub.md +7 -0
  439. package/dist/prompts/prefix-quality.test.ts +112 -0
  440. package/dist/prompts/prompt-constructor.d.ts +2 -0
  441. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  442. package/dist/prompts/prompt-constructor.js +24 -11
  443. package/dist/prompts/prompt-constructor.js.map +1 -1
  444. package/dist/prompts/prompt-constructor.test.ts +48 -6
  445. package/dist/prompts/prompt-constructor.ts +28 -13
  446. package/dist/prompts/prompt-profiles.d.ts +1 -3
  447. package/dist/prompts/prompt-profiles.d.ts.map +1 -1
  448. package/dist/prompts/prompt-profiles.js +2 -7
  449. package/dist/prompts/prompt-profiles.js.map +1 -1
  450. package/dist/prompts/prompt-profiles.ts +3 -16
  451. package/dist/prompts/session-browser.md +3 -0
  452. package/dist/prompts/subagent-delegation.d.ts +3 -2
  453. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  454. package/dist/prompts/subagent-delegation.js +9 -13
  455. package/dist/prompts/subagent-delegation.js.map +1 -1
  456. package/dist/prompts/subagent-delegation.ts +9 -13
  457. package/dist/prompts/subagents/explorer.md +7 -1
  458. package/dist/prompts/subagents/librarian.md +2 -0
  459. package/dist/prompts/subagents/mentor.md +2 -0
  460. package/dist/prompts/subagents/worker.md +2 -0
  461. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  462. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  463. package/dist/providers/ai-sdk-streamed-model.js +64 -1
  464. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  465. package/dist/providers/chained-wire-state.d.ts +13 -2
  466. package/dist/providers/chained-wire-state.d.ts.map +1 -1
  467. package/dist/providers/chained-wire-state.js +17 -10
  468. package/dist/providers/chained-wire-state.js.map +1 -1
  469. package/dist/providers/codex-auth.d.ts +70 -2
  470. package/dist/providers/codex-auth.d.ts.map +1 -1
  471. package/dist/providers/codex-auth.js +168 -2
  472. package/dist/providers/codex-auth.js.map +1 -1
  473. package/dist/providers/codex-responses-model.d.ts +3 -0
  474. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  475. package/dist/providers/codex-responses-model.js +314 -162
  476. package/dist/providers/codex-responses-model.js.map +1 -1
  477. package/dist/providers/codex-turn-converter.d.ts.map +1 -1
  478. package/dist/providers/codex-turn-converter.js +7 -1
  479. package/dist/providers/codex-turn-converter.js.map +1 -1
  480. package/dist/providers/codex.provider.d.ts +25 -2
  481. package/dist/providers/codex.provider.d.ts.map +1 -1
  482. package/dist/providers/codex.provider.js +83 -71
  483. package/dist/providers/codex.provider.js.map +1 -1
  484. package/dist/providers/common/provider-errors.d.ts +20 -0
  485. package/dist/providers/common/provider-errors.d.ts.map +1 -1
  486. package/dist/providers/common/provider-errors.js +35 -0
  487. package/dist/providers/common/provider-errors.js.map +1 -1
  488. package/dist/providers/grok-auth.d.ts +102 -0
  489. package/dist/providers/grok-auth.d.ts.map +1 -0
  490. package/dist/providers/grok-auth.js +318 -0
  491. package/dist/providers/grok-auth.js.map +1 -0
  492. package/dist/providers/grok-credit-usage.d.ts +53 -0
  493. package/dist/providers/grok-credit-usage.d.ts.map +1 -0
  494. package/dist/providers/grok-credit-usage.js +108 -0
  495. package/dist/providers/grok-credit-usage.js.map +1 -0
  496. package/dist/providers/grok.provider.d.ts +24 -0
  497. package/dist/providers/grok.provider.d.ts.map +1 -0
  498. package/dist/providers/grok.provider.js +153 -0
  499. package/dist/providers/grok.provider.js.map +1 -0
  500. package/dist/providers/index.d.ts +1 -0
  501. package/dist/providers/index.d.ts.map +1 -1
  502. package/dist/providers/index.js +1 -0
  503. package/dist/providers/index.js.map +1 -1
  504. package/dist/providers/jwt-claims.d.ts +12 -0
  505. package/dist/providers/jwt-claims.d.ts.map +1 -0
  506. package/dist/providers/jwt-claims.js +25 -0
  507. package/dist/providers/jwt-claims.js.map +1 -0
  508. package/dist/providers/luna-responses-lite-wire-protocol.d.ts +1 -0
  509. package/dist/providers/luna-responses-lite-wire-protocol.d.ts.map +1 -1
  510. package/dist/providers/luna-responses-lite-wire-protocol.js +19 -0
  511. package/dist/providers/luna-responses-lite-wire-protocol.js.map +1 -1
  512. package/dist/providers/model-catalog/catalog.generated.d.ts +360 -232
  513. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  514. package/dist/providers/model-catalog/catalog.generated.js +360 -232
  515. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  516. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
  517. package/dist/providers/model-catalog/generate-catalog.js +21 -1
  518. package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
  519. package/dist/providers/oauth-account-store.d.ts +89 -0
  520. package/dist/providers/oauth-account-store.d.ts.map +1 -0
  521. package/dist/providers/oauth-account-store.js +193 -0
  522. package/dist/providers/oauth-account-store.js.map +1 -0
  523. package/dist/providers/oauth-accounts.d.ts +24 -0
  524. package/dist/providers/oauth-accounts.d.ts.map +1 -0
  525. package/dist/providers/oauth-accounts.js +37 -0
  526. package/dist/providers/oauth-accounts.js.map +1 -0
  527. package/dist/providers/oauth-pkce.d.ts +61 -0
  528. package/dist/providers/oauth-pkce.d.ts.map +1 -0
  529. package/dist/providers/oauth-pkce.js +272 -0
  530. package/dist/providers/oauth-pkce.js.map +1 -0
  531. package/dist/providers/oauth-session-account.d.ts +5 -0
  532. package/dist/providers/oauth-session-account.d.ts.map +1 -0
  533. package/dist/providers/oauth-session-account.js +24 -0
  534. package/dist/providers/oauth-session-account.js.map +1 -0
  535. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  536. package/dist/providers/openai-chat-completions-model.js +37 -16
  537. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  538. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  539. package/dist/providers/openai-compatible.provider.d.ts +5 -0
  540. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  541. package/dist/providers/openai-compatible.provider.js +40 -3
  542. package/dist/providers/openai-compatible.provider.js.map +1 -1
  543. package/dist/providers/openai-responses-model.d.ts +13 -3
  544. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  545. package/dist/providers/openai-responses-model.js +92 -39
  546. package/dist/providers/openai-responses-model.js.map +1 -1
  547. package/dist/providers/openai.provider.d.ts.map +1 -1
  548. package/dist/providers/openai.provider.js +23 -2
  549. package/dist/providers/openai.provider.js.map +1 -1
  550. package/dist/providers/opencode-go-usage.d.ts +24 -0
  551. package/dist/providers/opencode-go-usage.d.ts.map +1 -0
  552. package/dist/providers/opencode-go-usage.js +37 -0
  553. package/dist/providers/opencode-go-usage.js.map +1 -0
  554. package/dist/providers/opencode-routing.d.ts +2 -0
  555. package/dist/providers/opencode-routing.d.ts.map +1 -1
  556. package/dist/providers/opencode-routing.js +12 -6
  557. package/dist/providers/opencode-routing.js.map +1 -1
  558. package/dist/providers/opencode-transport-discovery.d.ts +18 -0
  559. package/dist/providers/opencode-transport-discovery.d.ts.map +1 -0
  560. package/dist/providers/opencode-transport-discovery.js +115 -0
  561. package/dist/providers/opencode-transport-discovery.js.map +1 -0
  562. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  563. package/dist/providers/openrouter.provider.js +8 -1
  564. package/dist/providers/openrouter.provider.js.map +1 -1
  565. package/dist/providers/provider-opaque-compatibility.d.ts +58 -0
  566. package/dist/providers/provider-opaque-compatibility.d.ts.map +1 -0
  567. package/dist/providers/provider-opaque-compatibility.js +80 -0
  568. package/dist/providers/provider-opaque-compatibility.js.map +1 -0
  569. package/dist/providers/provider-service.d.ts +1 -1
  570. package/dist/providers/provider-service.d.ts.map +1 -1
  571. package/dist/providers/provider-service.js.map +1 -1
  572. package/dist/providers/registry.d.ts +10 -1
  573. package/dist/providers/registry.d.ts.map +1 -1
  574. package/dist/providers/registry.js.map +1 -1
  575. package/dist/providers/responses-websocket-sessions.d.ts +26 -0
  576. package/dist/providers/responses-websocket-sessions.d.ts.map +1 -0
  577. package/dist/providers/responses-websocket-sessions.js +116 -0
  578. package/dist/providers/responses-websocket-sessions.js.map +1 -0
  579. package/dist/providers/retrying-model.d.ts.map +1 -1
  580. package/dist/providers/retrying-model.js +31 -3
  581. package/dist/providers/retrying-model.js.map +1 -1
  582. package/dist/providers/websocket-close-evidence.d.ts +45 -0
  583. package/dist/providers/websocket-close-evidence.d.ts.map +1 -0
  584. package/dist/providers/websocket-close-evidence.js +78 -0
  585. package/dist/providers/websocket-close-evidence.js.map +1 -0
  586. package/dist/providers/websocket-receive-watchdog.d.ts +9 -1
  587. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  588. package/dist/providers/websocket-receive-watchdog.js +27 -1
  589. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  590. package/dist/providers/websocket-request-dispatch.d.ts +35 -0
  591. package/dist/providers/websocket-request-dispatch.d.ts.map +1 -0
  592. package/dist/providers/websocket-request-dispatch.js +23 -0
  593. package/dist/providers/websocket-request-dispatch.js.map +1 -0
  594. package/dist/scripts/eval-context-compaction/runner.js +1 -1
  595. package/dist/scripts/eval-context-compaction/runner.js.map +1 -1
  596. package/dist/services/agent-runtime/agent-handle.d.ts.map +1 -1
  597. package/dist/services/agent-runtime/agent-handle.js +8 -5
  598. package/dist/services/agent-runtime/agent-handle.js.map +1 -1
  599. package/dist/services/agent-runtime/agent-runtime.d.ts +1 -1
  600. package/dist/services/agent-runtime/agent-runtime.js +1 -1
  601. package/dist/services/agent-runtime/application-run-loop.d.ts +37 -9
  602. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  603. package/dist/services/agent-runtime/application-run-loop.js +512 -219
  604. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  605. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +6 -1
  606. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
  607. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +72 -4
  608. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
  609. package/dist/services/agent-runtime/executor.d.ts +1 -1
  610. package/dist/services/agent-runtime/executor.d.ts.map +1 -1
  611. package/dist/services/agent-runtime/executor.js +5 -5
  612. package/dist/services/agent-runtime/executor.js.map +1 -1
  613. package/dist/services/agent-runtime/generation-guard.d.ts +39 -24
  614. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  615. package/dist/services/agent-runtime/generation-guard.js +100 -97
  616. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  617. package/dist/services/agent-runtime/run-budget.d.ts +131 -0
  618. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -0
  619. package/dist/services/agent-runtime/run-budget.js +272 -0
  620. package/dist/services/agent-runtime/run-budget.js.map +1 -0
  621. package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
  622. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
  623. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
  624. package/dist/services/agent-runtime/types.d.ts +5 -4
  625. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  626. package/dist/services/agent-stream.d.ts.map +1 -1
  627. package/dist/services/agent-stream.js +3 -1
  628. package/dist/services/agent-stream.js.map +1 -1
  629. package/dist/services/approval/approval-decision-executor.d.ts +6 -1
  630. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
  631. package/dist/services/approval/approval-decision-executor.js +15 -3
  632. package/dist/services/approval/approval-decision-executor.js.map +1 -1
  633. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  634. package/dist/services/approval/approval-decision-policy.js +3 -0
  635. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  636. package/dist/services/approval/approval-flow-coordinator.d.ts +2 -0
  637. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  638. package/dist/services/approval/approval-flow-coordinator.js +14 -2
  639. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  640. package/dist/services/approval/background-subagent-approval-controller.d.ts +3 -1
  641. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
  642. package/dist/services/approval/background-subagent-approval-controller.js +7 -4
  643. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
  644. package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
  645. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  646. package/dist/services/approval/shell-auto-approval-resolver.js +8 -0
  647. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  648. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  649. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -11
  650. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  651. package/dist/services/approval/tool-ownership-registry.d.ts +5 -1
  652. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -1
  653. package/dist/services/approval/tool-ownership-registry.js +5 -22
  654. package/dist/services/approval/tool-ownership-registry.js.map +1 -1
  655. package/dist/services/background-task-activity.d.ts +79 -0
  656. package/dist/services/background-task-activity.d.ts.map +1 -0
  657. package/dist/services/background-task-activity.js +34 -0
  658. package/dist/services/background-task-activity.js.map +1 -0
  659. package/dist/services/command-message-streaming.d.ts +4 -2
  660. package/dist/services/command-message-streaming.d.ts.map +1 -1
  661. package/dist/services/command-message-streaming.js +2 -2
  662. package/dist/services/command-message-streaming.js.map +1 -1
  663. package/dist/services/conversation/conversation-adapter-factory.d.ts +6 -2
  664. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  665. package/dist/services/conversation/conversation-adapter-factory.js +5 -1
  666. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  667. package/dist/services/conversation/conversation-adapter.d.ts +53 -10
  668. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  669. package/dist/services/conversation/conversation-adapter.js +252 -43
  670. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  671. package/dist/services/conversation/conversation-admission-workflow.d.ts +3 -2
  672. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
  673. package/dist/services/conversation/conversation-admission-workflow.js +6 -1
  674. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
  675. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
  676. package/dist/services/conversation/conversation-decoder.js +4 -0
  677. package/dist/services/conversation/conversation-decoder.js.map +1 -1
  678. package/dist/services/conversation/conversation-events.d.ts +97 -3
  679. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  680. package/dist/services/conversation/conversation-orchestrator.d.ts +14 -1
  681. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  682. package/dist/services/conversation/conversation-orchestrator.js +245 -22
  683. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  684. package/dist/services/conversation/conversation-orchestrator.types.d.ts +6 -1
  685. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  686. package/dist/services/conversation/conversation-persistence.d.ts +60 -3
  687. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  688. package/dist/services/conversation/conversation-persistence.js +221 -16
  689. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  690. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  691. package/dist/services/conversation/conversation-replay.js +27 -0
  692. package/dist/services/conversation/conversation-replay.js.map +1 -1
  693. package/dist/services/conversation/conversation-result-builder.d.ts +6 -2
  694. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  695. package/dist/services/conversation/conversation-result-builder.js +60 -1
  696. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  697. package/dist/services/conversation/conversation-runtime-factory.d.ts +9 -1
  698. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  699. package/dist/services/conversation/conversation-runtime-factory.js +5 -1
  700. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  701. package/dist/services/conversation/conversation-service.d.ts +32 -3
  702. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  703. package/dist/services/conversation/conversation-service.js +122 -32
  704. package/dist/services/conversation/conversation-service.js.map +1 -1
  705. package/dist/services/conversation/conversation-state-projector.d.ts +2 -1
  706. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  707. package/dist/services/conversation/conversation-state-projector.js +31 -3
  708. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  709. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
  710. package/dist/services/conversation/run-item-normalizer.js +24 -1
  711. package/dist/services/conversation/run-item-normalizer.js.map +1 -1
  712. package/dist/services/conversation/session-audit.d.ts +70 -0
  713. package/dist/services/conversation/session-audit.d.ts.map +1 -0
  714. package/dist/services/conversation/session-audit.js +164 -0
  715. package/dist/services/conversation/session-audit.js.map +1 -0
  716. package/dist/services/conversation/session-browser.d.ts +46 -0
  717. package/dist/services/conversation/session-browser.d.ts.map +1 -0
  718. package/dist/services/conversation/session-browser.js +380 -0
  719. package/dist/services/conversation/session-browser.js.map +1 -0
  720. package/dist/services/conversation-agent-client.d.ts +21 -2
  721. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  722. package/dist/services/cost/model-cost.d.ts +13 -1
  723. package/dist/services/cost/model-cost.d.ts.map +1 -1
  724. package/dist/services/cost/model-cost.js +59 -0
  725. package/dist/services/cost/model-cost.js.map +1 -1
  726. package/dist/services/cost/subscription-providers.d.ts +2 -0
  727. package/dist/services/cost/subscription-providers.d.ts.map +1 -0
  728. package/dist/services/cost/subscription-providers.js +14 -0
  729. package/dist/services/cost/subscription-providers.js.map +1 -0
  730. package/dist/services/grok/grok-credit-usage-service.d.ts +62 -0
  731. package/dist/services/grok/grok-credit-usage-service.d.ts.map +1 -0
  732. package/dist/services/grok/grok-credit-usage-service.js +137 -0
  733. package/dist/services/grok/grok-credit-usage-service.js.map +1 -0
  734. package/dist/services/history-service.d.ts +9 -0
  735. package/dist/services/history-service.d.ts.map +1 -1
  736. package/dist/services/history-service.js +49 -2
  737. package/dist/services/history-service.js.map +1 -1
  738. package/dist/services/hooks/hook-composition.d.ts +17 -0
  739. package/dist/services/hooks/hook-composition.d.ts.map +1 -0
  740. package/dist/services/hooks/hook-composition.js +19 -0
  741. package/dist/services/hooks/hook-composition.js.map +1 -0
  742. package/dist/services/input-surge-approval.d.ts +21 -0
  743. package/dist/services/input-surge-approval.d.ts.map +1 -0
  744. package/dist/services/input-surge-approval.js +42 -0
  745. package/dist/services/input-surge-approval.js.map +1 -0
  746. package/dist/services/large-uncached-input-guard.js +4 -4
  747. package/dist/services/large-uncached-input-guard.js.map +1 -1
  748. package/dist/services/logging/assistant-turn-journal.d.ts +15 -0
  749. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  750. package/dist/services/logging/assistant-turn-journal.js +27 -0
  751. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  752. package/dist/services/logging/conversation-log-events.d.ts +35 -1
  753. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  754. package/dist/services/logging/conversation-log-events.js +17 -0
  755. package/dist/services/logging/conversation-log-events.js.map +1 -1
  756. package/dist/services/logging/conversation-log-writer.d.ts +8 -1
  757. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  758. package/dist/services/logging/conversation-log-writer.js +145 -10
  759. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  760. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  761. package/dist/services/logging/conversation-logger.js +18 -0
  762. package/dist/services/logging/conversation-logger.js.map +1 -1
  763. package/dist/services/logging/logging-service.d.ts +6 -6
  764. package/dist/services/logging/logging-service.d.ts.map +1 -1
  765. package/dist/services/logging/logging-service.js.map +1 -1
  766. package/dist/services/logging/provider-traffic.d.ts +17 -1
  767. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  768. package/dist/services/logging/provider-traffic.js +283 -139
  769. package/dist/services/logging/provider-traffic.js.map +1 -1
  770. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  771. package/dist/services/memory/memory-capabilities.js +22 -3
  772. package/dist/services/memory/memory-capabilities.js.map +1 -1
  773. package/dist/services/memory/memory-search.d.ts +16 -0
  774. package/dist/services/memory/memory-search.d.ts.map +1 -0
  775. package/dist/services/memory/memory-search.js +55 -0
  776. package/dist/services/memory/memory-search.js.map +1 -0
  777. package/dist/services/memory/memory-store.d.ts +12 -0
  778. package/dist/services/memory/memory-store.d.ts.map +1 -1
  779. package/dist/services/memory/memory-store.js +14 -35
  780. package/dist/services/memory/memory-store.js.map +1 -1
  781. package/dist/services/mode-notices.d.ts +12 -6
  782. package/dist/services/mode-notices.d.ts.map +1 -1
  783. package/dist/services/mode-notices.js +51 -4
  784. package/dist/services/mode-notices.js.map +1 -1
  785. package/dist/services/model-service.d.ts +2 -2
  786. package/dist/services/model-service.d.ts.map +1 -1
  787. package/dist/services/model-service.js.map +1 -1
  788. package/dist/services/queue/queue-controller.d.ts +14 -1
  789. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  790. package/dist/services/queue/queue-controller.js +51 -6
  791. package/dist/services/queue/queue-controller.js.map +1 -1
  792. package/dist/services/retry/chain-recovery-fingerprint.d.ts +10 -0
  793. package/dist/services/retry/chain-recovery-fingerprint.d.ts.map +1 -0
  794. package/dist/services/retry/chain-recovery-fingerprint.js +23 -0
  795. package/dist/services/retry/chain-recovery-fingerprint.js.map +1 -0
  796. package/dist/services/retry/in-loop-model-retry.d.ts +12 -0
  797. package/dist/services/retry/in-loop-model-retry.d.ts.map +1 -0
  798. package/dist/services/retry/in-loop-model-retry.js +115 -0
  799. package/dist/services/retry/in-loop-model-retry.js.map +1 -0
  800. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  801. package/dist/services/retry/recovery-executor.js +2 -0
  802. package/dist/services/retry/recovery-executor.js.map +1 -1
  803. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  804. package/dist/services/retry/recovery-policy.js +4 -0
  805. package/dist/services/retry/recovery-policy.js.map +1 -1
  806. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  807. package/dist/services/retry/retry-classifier.js +42 -4
  808. package/dist/services/retry/retry-classifier.js.map +1 -1
  809. package/dist/services/retry/retry-contracts.d.ts +14 -0
  810. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  811. package/dist/services/retry/retry-error-classification.d.ts +17 -3
  812. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  813. package/dist/services/retry/retry-error-classification.js +58 -13
  814. package/dist/services/retry/retry-error-classification.js.map +1 -1
  815. package/dist/services/retry/retry-errors.d.ts +4 -0
  816. package/dist/services/retry/retry-errors.d.ts.map +1 -1
  817. package/dist/services/retry/retry-errors.js +7 -0
  818. package/dist/services/retry/retry-errors.js.map +1 -1
  819. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  820. package/dist/services/retry/retry-event-presenter.js +20 -0
  821. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  822. package/dist/services/retry/upstream-retry-policy.d.ts.map +1 -1
  823. package/dist/services/retry/upstream-retry-policy.js +40 -7
  824. package/dist/services/retry/upstream-retry-policy.js.map +1 -1
  825. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  826. package/dist/services/runtime-setting-router.js +13 -2
  827. package/dist/services/runtime-setting-router.js.map +1 -1
  828. package/dist/services/service-interfaces.d.ts +96 -13
  829. package/dist/services/service-interfaces.d.ts.map +1 -1
  830. package/dist/services/session/background-check-in-scheduler.d.ts +44 -0
  831. package/dist/services/session/background-check-in-scheduler.d.ts.map +1 -0
  832. package/dist/services/session/background-check-in-scheduler.js +88 -0
  833. package/dist/services/session/background-check-in-scheduler.js.map +1 -0
  834. package/dist/services/session/background-task-control.d.ts +6 -0
  835. package/dist/services/session/background-task-control.d.ts.map +1 -1
  836. package/dist/services/session/background-task-control.js +35 -7
  837. package/dist/services/session/background-task-control.js.map +1 -1
  838. package/dist/services/session/background-task-liveness.d.ts +2 -18
  839. package/dist/services/session/background-task-liveness.d.ts.map +1 -1
  840. package/dist/services/session/background-task-liveness.js +7 -22
  841. package/dist/services/session/background-task-liveness.js.map +1 -1
  842. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  843. package/dist/services/session/continuation-plan-applier.js +23 -0
  844. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  845. package/dist/services/session/continuation-recovery-handler.d.ts +2 -0
  846. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  847. package/dist/services/session/continuation-recovery-handler.js +7 -1
  848. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  849. package/dist/services/session/initial-input-preparer.d.ts +2 -1
  850. package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
  851. package/dist/services/session/initial-input-preparer.js +3 -1
  852. package/dist/services/session/initial-input-preparer.js.map +1 -1
  853. package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -0
  854. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  855. package/dist/services/session/initial-turn-recovery-handler.js +12 -2
  856. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  857. package/dist/services/session/repetition-detector.d.ts +0 -4
  858. package/dist/services/session/repetition-detector.d.ts.map +1 -1
  859. package/dist/services/session/repetition-detector.js +0 -7
  860. package/dist/services/session/repetition-detector.js.map +1 -1
  861. package/dist/services/session/session-client-factory.d.ts +3 -1
  862. package/dist/services/session/session-client-factory.d.ts.map +1 -1
  863. package/dist/services/session/session-client-factory.js +2 -2
  864. package/dist/services/session/session-client-factory.js.map +1 -1
  865. package/dist/services/session/session-composition.d.ts +9 -2
  866. package/dist/services/session/session-composition.d.ts.map +1 -1
  867. package/dist/services/session/session-composition.js +151 -37
  868. package/dist/services/session/session-composition.js.map +1 -1
  869. package/dist/services/session/session-lifecycle.d.ts +8 -0
  870. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  871. package/dist/services/session/session-lifecycle.js +4 -0
  872. package/dist/services/session/session-lifecycle.js.map +1 -1
  873. package/dist/services/session/session-stream-processor.d.ts +2 -0
  874. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  875. package/dist/services/session/session-stream-processor.js +9 -15
  876. package/dist/services/session/session-stream-processor.js.map +1 -1
  877. package/dist/services/session/terminal-result-collector.d.ts +2 -2
  878. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  879. package/dist/services/session/terminal-result-collector.js +2 -1
  880. package/dist/services/session/terminal-result-collector.js.map +1 -1
  881. package/dist/services/session/turn-attempt-factory.d.ts +3 -1
  882. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  883. package/dist/services/session/turn-attempt-factory.js +1 -0
  884. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  885. package/dist/services/session/turn-attempt.d.ts +3 -0
  886. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  887. package/dist/services/session/turn-attempt.js +5 -0
  888. package/dist/services/session/turn-attempt.js.map +1 -1
  889. package/dist/services/session/turn-coordinator.d.ts +2 -2
  890. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  891. package/dist/services/session/turn-coordinator.js +31 -6
  892. package/dist/services/session/turn-coordinator.js.map +1 -1
  893. package/dist/services/session/turn-workflow.d.ts +4 -1
  894. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  895. package/dist/services/session/turn-workflow.js +52 -8
  896. package/dist/services/session/turn-workflow.js.map +1 -1
  897. package/dist/services/settings/settings-persistence.d.ts +33 -0
  898. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  899. package/dist/services/settings/settings-persistence.js +102 -4
  900. package/dist/services/settings/settings-persistence.js.map +1 -1
  901. package/dist/services/settings/settings-schema.d.ts +92 -0
  902. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  903. package/dist/services/settings/settings-schema.js +119 -9
  904. package/dist/services/settings/settings-schema.js.map +1 -1
  905. package/dist/services/settings/settings-service.d.ts +66 -3
  906. package/dist/services/settings/settings-service.d.ts.map +1 -1
  907. package/dist/services/settings/settings-service.js +211 -28
  908. package/dist/services/settings/settings-service.js.map +1 -1
  909. package/dist/services/settings/settings-service.mock.d.ts +1 -1
  910. package/dist/services/settings/settings-service.mock.d.ts.map +1 -1
  911. package/dist/services/settings/settings-service.mock.js +3 -6
  912. package/dist/services/settings/settings-service.mock.js.map +1 -1
  913. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  914. package/dist/services/settings/settings-sources.js +21 -0
  915. package/dist/services/settings/settings-sources.js.map +1 -1
  916. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +28 -0
  917. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -0
  918. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +171 -0
  919. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -0
  920. package/dist/services/shell/background-shell-registry.d.ts +10 -0
  921. package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
  922. package/dist/services/shell/background-shell-registry.js +9 -1
  923. package/dist/services/shell/background-shell-registry.js.map +1 -1
  924. package/dist/services/shell/background-shell-watches.d.ts +28 -3
  925. package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
  926. package/dist/services/shell/background-shell-watches.js +41 -9
  927. package/dist/services/shell/background-shell-watches.js.map +1 -1
  928. package/dist/services/shell/shell-interaction-session.d.ts +4 -5
  929. package/dist/services/shell/shell-interaction-session.d.ts.map +1 -1
  930. package/dist/services/shell/shell-interaction-session.js +8 -20
  931. package/dist/services/shell/shell-interaction-session.js.map +1 -1
  932. package/dist/services/ssh-service.d.ts +81 -9
  933. package/dist/services/ssh-service.d.ts.map +1 -1
  934. package/dist/services/ssh-service.js +211 -37
  935. package/dist/services/ssh-service.js.map +1 -1
  936. package/dist/services/stream-event-processor.d.ts +2 -0
  937. package/dist/services/stream-event-processor.d.ts.map +1 -1
  938. package/dist/services/stream-event-processor.js +32 -7
  939. package/dist/services/stream-event-processor.js.map +1 -1
  940. package/dist/services/subagents/execution-runner.d.ts +1 -1
  941. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  942. package/dist/services/subagents/execution-runner.js +34 -22
  943. package/dist/services/subagents/execution-runner.js.map +1 -1
  944. package/dist/services/subagents/foreground-subagent-lease.d.ts +11 -1
  945. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
  946. package/dist/services/subagents/foreground-subagent-lease.js +10 -1
  947. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
  948. package/dist/services/subagents/mentor-runner.d.ts +1 -1
  949. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  950. package/dist/services/subagents/mentor-runner.js +12 -3
  951. package/dist/services/subagents/mentor-runner.js.map +1 -1
  952. package/dist/services/subagents/nested-runner.d.ts +11 -1
  953. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  954. package/dist/services/subagents/nested-runner.js +79 -11
  955. package/dist/services/subagents/nested-runner.js.map +1 -1
  956. package/dist/services/subagents/runtime.d.ts.map +1 -1
  957. package/dist/services/subagents/runtime.js +7 -0
  958. package/dist/services/subagents/runtime.js.map +1 -1
  959. package/dist/services/subagents/subagent-async-registry.d.ts +4 -0
  960. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  961. package/dist/services/subagents/subagent-async-registry.js +81 -17
  962. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  963. package/dist/services/subagents/subagent-manager.d.ts +1 -1
  964. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  965. package/dist/services/subagents/subagent-manager.js +4 -4
  966. package/dist/services/subagents/subagent-manager.js.map +1 -1
  967. package/dist/services/subagents/subagent-notification-store.d.ts +47 -2
  968. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  969. package/dist/services/subagents/subagent-notification-store.js +33 -0
  970. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  971. package/dist/services/subagents/subagent-run-control.d.ts +9 -1
  972. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
  973. package/dist/services/subagents/subagent-run-control.js +12 -13
  974. package/dist/services/subagents/subagent-run-control.js.map +1 -1
  975. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  976. package/dist/services/subagents/tool-policy.js +20 -7
  977. package/dist/services/subagents/tool-policy.js.map +1 -1
  978. package/dist/services/subagents/types.d.ts +25 -2
  979. package/dist/services/subagents/types.d.ts.map +1 -1
  980. package/dist/services/subagents/types.js.map +1 -1
  981. package/dist/services/subagents/utils.d.ts +5 -1
  982. package/dist/services/subagents/utils.d.ts.map +1 -1
  983. package/dist/services/subagents/utils.js +33 -2
  984. package/dist/services/subagents/utils.js.map +1 -1
  985. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  986. package/dist/services/tool-execution-ledger.js +5 -1
  987. package/dist/services/tool-execution-ledger.js.map +1 -1
  988. package/dist/services/workspace/active-workspace-root.d.ts +6 -0
  989. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -1
  990. package/dist/services/workspace/active-workspace-root.js +22 -0
  991. package/dist/services/workspace/active-workspace-root.js.map +1 -1
  992. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  993. package/dist/test-helpers/ink-testing.js +4 -1
  994. package/dist/test-helpers/ink-testing.js.map +1 -1
  995. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
  996. package/dist/test-helpers/terminal-e2e.js +12 -2
  997. package/dist/test-helpers/terminal-e2e.js.map +1 -1
  998. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  999. package/dist/tools/agent/activate-skill.js +2 -2
  1000. package/dist/tools/agent/activate-skill.js.map +1 -1
  1001. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  1002. package/dist/tools/agent/ask-mentor.js +2 -2
  1003. package/dist/tools/agent/ask-mentor.js.map +1 -1
  1004. package/dist/tools/agent/ask-user-constants.d.ts +2 -2
  1005. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  1006. package/dist/tools/agent/ask-user-constants.js +1 -1
  1007. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  1008. package/dist/tools/agent/ask-user.d.ts.map +1 -1
  1009. package/dist/tools/agent/ask-user.js +2 -0
  1010. package/dist/tools/agent/ask-user.js.map +1 -1
  1011. package/dist/tools/agent/run-subagent-async.d.ts +2 -11
  1012. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  1013. package/dist/tools/agent/run-subagent-async.js +8 -2
  1014. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  1015. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  1016. package/dist/tools/agent/run-subagent.js +44 -29
  1017. package/dist/tools/agent/run-subagent.js.map +1 -1
  1018. package/dist/tools/file/apply-patch.d.ts +2 -0
  1019. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  1020. package/dist/tools/file/apply-patch.js +58 -14
  1021. package/dist/tools/file/apply-patch.js.map +1 -1
  1022. package/dist/tools/file/code-context.d.ts +5 -0
  1023. package/dist/tools/file/code-context.d.ts.map +1 -1
  1024. package/dist/tools/file/code-context.js +18 -6
  1025. package/dist/tools/file/code-context.js.map +1 -1
  1026. package/dist/tools/file/create-file.d.ts.map +1 -1
  1027. package/dist/tools/file/create-file.js +11 -5
  1028. package/dist/tools/file/create-file.js.map +1 -1
  1029. package/dist/tools/file/edit-healing.d.ts +7 -0
  1030. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  1031. package/dist/tools/file/edit-healing.js +7 -7
  1032. package/dist/tools/file/edit-healing.js.map +1 -1
  1033. package/dist/tools/file/glob.d.ts +3 -0
  1034. package/dist/tools/file/glob.d.ts.map +1 -1
  1035. package/dist/tools/file/glob.js +9 -3
  1036. package/dist/tools/file/glob.js.map +1 -1
  1037. package/dist/tools/file/grep.d.ts +5 -0
  1038. package/dist/tools/file/grep.d.ts.map +1 -1
  1039. package/dist/tools/file/grep.js +10 -6
  1040. package/dist/tools/file/grep.js.map +1 -1
  1041. package/dist/tools/file/patch-healing.d.ts +31 -0
  1042. package/dist/tools/file/patch-healing.d.ts.map +1 -0
  1043. package/dist/tools/file/patch-healing.js +231 -0
  1044. package/dist/tools/file/patch-healing.js.map +1 -0
  1045. package/dist/tools/file/read-file.d.ts +3 -0
  1046. package/dist/tools/file/read-file.d.ts.map +1 -1
  1047. package/dist/tools/file/read-file.js +9 -3
  1048. package/dist/tools/file/read-file.js.map +1 -1
  1049. package/dist/tools/file/search-replace.d.ts.map +1 -1
  1050. package/dist/tools/file/search-replace.js +24 -6
  1051. package/dist/tools/file/search-replace.js.map +1 -1
  1052. package/dist/tools/format-helpers.d.ts +6 -0
  1053. package/dist/tools/format-helpers.d.ts.map +1 -1
  1054. package/dist/tools/format-helpers.js +23 -0
  1055. package/dist/tools/format-helpers.js.map +1 -1
  1056. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  1057. package/dist/tools/memory/memory-tools.js +324 -61
  1058. package/dist/tools/memory/memory-tools.js.map +1 -1
  1059. package/dist/tools/session-browser/session-browser-tools.d.ts +4 -0
  1060. package/dist/tools/session-browser/session-browser-tools.d.ts.map +1 -0
  1061. package/dist/tools/session-browser/session-browser-tools.js +47 -0
  1062. package/dist/tools/session-browser/session-browser-tools.js.map +1 -0
  1063. package/dist/tools/system/shell.d.ts +16 -1
  1064. package/dist/tools/system/shell.d.ts.map +1 -1
  1065. package/dist/tools/system/shell.js +97 -25
  1066. package/dist/tools/system/shell.js.map +1 -1
  1067. package/dist/tools/types.d.ts +8 -0
  1068. package/dist/tools/types.d.ts.map +1 -1
  1069. package/dist/tools/types.js.map +1 -1
  1070. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  1071. package/dist/tools/web/web-fetch.js +2 -2
  1072. package/dist/tools/web/web-fetch.js.map +1 -1
  1073. package/dist/tools/web/web-search.d.ts.map +1 -1
  1074. package/dist/tools/web/web-search.js +2 -2
  1075. package/dist/tools/web/web-search.js.map +1 -1
  1076. package/dist/types/message.d.ts +1 -1
  1077. package/dist/types/message.d.ts.map +1 -1
  1078. package/dist/utils/ai/provider-credentials.d.ts +1 -1
  1079. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  1080. package/dist/utils/ai/provider-credentials.js +18 -2
  1081. package/dist/utils/ai/provider-credentials.js.map +1 -1
  1082. package/dist/utils/ai/token-usage.d.ts +3 -1
  1083. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  1084. package/dist/utils/ai/token-usage.js +7 -2
  1085. package/dist/utils/ai/token-usage.js.map +1 -1
  1086. package/dist/utils/apply-diff.d.ts.map +1 -1
  1087. package/dist/utils/apply-diff.js +8 -0
  1088. package/dist/utils/apply-diff.js.map +1 -1
  1089. package/dist/utils/busy-turn-guard.d.ts +17 -0
  1090. package/dist/utils/busy-turn-guard.d.ts.map +1 -0
  1091. package/dist/utils/busy-turn-guard.js +24 -0
  1092. package/dist/utils/busy-turn-guard.js.map +1 -0
  1093. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  1094. package/dist/utils/conversation/conversation-event-handler.js +88 -9
  1095. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  1096. package/dist/utils/error-helpers.d.ts.map +1 -1
  1097. package/dist/utils/error-helpers.js +8 -0
  1098. package/dist/utils/error-helpers.js.map +1 -1
  1099. package/dist/utils/inject-warning-into-tool-output.d.ts +30 -0
  1100. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  1101. package/dist/utils/inject-warning-into-tool-output.js +39 -0
  1102. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  1103. package/dist/utils/output/bounded-json.d.ts +33 -0
  1104. package/dist/utils/output/bounded-json.d.ts.map +1 -0
  1105. package/dist/utils/output/bounded-json.js +59 -0
  1106. package/dist/utils/output/bounded-json.js.map +1 -0
  1107. package/dist/utils/output/output-trim.d.ts.map +1 -1
  1108. package/dist/utils/output/output-trim.js +7 -7
  1109. package/dist/utils/output/output-trim.js.map +1 -1
  1110. package/dist/utils/output/text-snippet.d.ts +6 -0
  1111. package/dist/utils/output/text-snippet.d.ts.map +1 -0
  1112. package/dist/utils/output/text-snippet.js +106 -0
  1113. package/dist/utils/output/text-snippet.js.map +1 -0
  1114. package/dist/utils/output/tty-osc.d.ts +1 -1
  1115. package/dist/utils/output/tty-osc.js +1 -1
  1116. package/dist/utils/resume-list.d.ts +3 -1
  1117. package/dist/utils/resume-list.d.ts.map +1 -1
  1118. package/dist/utils/resume-list.js +3 -2
  1119. package/dist/utils/resume-list.js.map +1 -1
  1120. package/dist/utils/settings-command.d.ts.map +1 -1
  1121. package/dist/utils/settings-command.js +120 -6
  1122. package/dist/utils/settings-command.js.map +1 -1
  1123. package/dist/utils/shell/execute-shell.d.ts +8 -0
  1124. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  1125. package/dist/utils/shell/execute-shell.js +36 -30
  1126. package/dist/utils/shell/execute-shell.js.map +1 -1
  1127. package/dist/utils/shell/sandbox/sandbox-env.d.ts +1 -0
  1128. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  1129. package/dist/utils/shell/sandbox/sandbox-env.js +2 -0
  1130. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  1131. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +4 -0
  1132. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  1133. package/dist/utils/shell/sandbox/sandbox-policy.js +1 -1
  1134. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  1135. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts +1 -0
  1136. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  1137. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +21 -3
  1138. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  1139. package/dist/utils/shell/shell-child-registry.d.ts +11 -0
  1140. package/dist/utils/shell/shell-child-registry.d.ts.map +1 -0
  1141. package/dist/utils/shell/shell-child-registry.js +40 -0
  1142. package/dist/utils/shell/shell-child-registry.js.map +1 -0
  1143. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  1144. package/dist/utils/shell/shell-output.js +10 -6
  1145. package/dist/utils/shell/shell-output.js.map +1 -1
  1146. package/dist/utils/shell/temp-sweep.d.ts +28 -0
  1147. package/dist/utils/shell/temp-sweep.d.ts.map +1 -0
  1148. package/dist/utils/shell/temp-sweep.js +140 -0
  1149. package/dist/utils/shell/temp-sweep.js.map +1 -0
  1150. package/dist/utils/streaming/extract-command-messages.d.ts +12 -5
  1151. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  1152. package/dist/utils/streaming/extract-command-messages.js +29 -33
  1153. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  1154. package/dist/utils/streaming/streaming-session-factory.d.ts +8 -0
  1155. package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
  1156. package/dist/utils/streaming/streaming-session-factory.js +3 -0
  1157. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  1158. package/dist/utils/value-suggestions.d.ts +8 -0
  1159. package/dist/utils/value-suggestions.d.ts.map +1 -1
  1160. package/dist/utils/value-suggestions.js +72 -0
  1161. package/dist/utils/value-suggestions.js.map +1 -1
  1162. package/package.json +17 -11
  1163. package/dist/utils/output/synchronized-output.d.ts +0 -35
  1164. package/dist/utils/output/synchronized-output.d.ts.map +0 -1
  1165. package/dist/utils/output/synchronized-output.js +0 -66
  1166. package/dist/utils/output/synchronized-output.js.map +0 -1
@@ -1,16 +1,20 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { ResponsesWS } from 'openai/resources/responses/ws';
3
- import OpenAI from 'openai';
3
+ import OpenAI, { InternalServerError } from 'openai';
4
4
  import { toCodexResponsesInput } from './codex-turn-converter.js';
5
5
  import { sanitizeHeaders } from '../utils/header-sanitizer.js';
6
6
  import { AbortedStreamRecorder } from './aborted-stream-recorder.js';
7
- import { OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
8
- import { AmbiguousModelOutcomeError } from '../services/retry/retry-errors.js';
7
+ import { isOrphanedChainedToolOutputError, OrphanedChainedToolOutputError } from '../lib/chained-input-filter.js';
8
+ import { AmbiguousModelOutcomeError, ConversationStateNoProgressError } from '../services/retry/retry-errors.js';
9
+ import { fingerprintChainRequest } from '../services/retry/chain-recovery-fingerprint.js';
9
10
  import { ChainedWireState } from './chained-wire-state.js';
10
11
  import { LunaResponsesLiteWireProtocol } from './luna-responses-lite-wire-protocol.js';
11
12
  import { captureProviderRequest } from './provider-request-capture.js';
12
13
  import { createWebSocketReceiveWatchdog, DEFAULT_WEBSOCKET_RECEIVE_TIMEOUTS, } from './websocket-receive-watchdog.js';
14
+ import { readWebSocketDispatch, recordWebSocketDispatch, UnsentWebSocketRequestError, } from './websocket-request-dispatch.js';
15
+ import { WebSocketClosedEarlyError, webSocketCloseError, findWebSocketClosedEarly, readWebSocketCloseFrame, } from './websocket-close-evidence.js';
13
16
  import { markContextCompactionFailure, resolveContextManagement } from './openai-responses-model.js';
17
+ import { ResponsesWebSocketSessions } from './responses-websocket-sessions.js';
14
18
  const DUMMY_PROVIDER_TRAFFIC = {
15
19
  recordRequestStart() { },
16
20
  async recordResponseReceived() { },
@@ -25,18 +29,31 @@ function toCodexToolChoice(choice) {
25
29
  }
26
30
  throw new Error('Unsupported Codex tool choice.');
27
31
  }
32
+ const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
33
+ 'response.completed',
34
+ 'response.failed',
35
+ 'response.incomplete',
36
+ 'response.error',
37
+ ]);
38
+ // RFC 6455 readyState values, named so the send path's evidence is readable.
39
+ const WEBSOCKET_CONNECTING = 0;
40
+ const WEBSOCKET_OPEN = 1;
28
41
  /** Provider-owned transport seam used by Codex's HTTP and WebSocket models. */
29
42
  export class CodexResponsesTransport {
30
43
  client;
31
44
  model;
32
45
  websocket;
33
46
  options;
47
+ #sessions = new ResponsesWebSocketSessions((headers) => new ResponsesWS(this.client, headers ? { headers } : undefined));
34
48
  constructor(client = {}, model = '', websocket = false, options = {}) {
35
49
  this.client = client;
36
50
  this.model = model;
37
51
  this.websocket = websocket;
38
52
  this.options = options;
39
53
  }
54
+ close() {
55
+ this.#sessions.close();
56
+ }
40
57
  buildResponsesCreateRequest(request, stream) {
41
58
  const providerOptions = request.providerOptions ?? {};
42
59
  // contextCompaction is an app-level option; context_management is capability-gated
@@ -74,40 +91,69 @@ export class CodexResponsesTransport {
74
91
  return this.client.responses.create(requestData);
75
92
  }
76
93
  const headers = request.providerOptions?.extraHeaders;
77
- const socket = new ResponsesWS(this.client, headers ? { headers: headers } : undefined);
94
+ const socket = this.#sessions.acquire(headers);
78
95
  const messages = socket.stream();
79
96
  const requestEvent = { type: 'response.create', ...requestData };
80
- if (socket.socket?.readyState === 0) {
81
- socket.socket.once('open', () => socket.send(requestEvent));
97
+ // Until the frame is written to an OPEN socket it is still ours, so a
98
+ // receive timeout before that point is provably unsent. `send` on a
99
+ // connecting or closing socket only queues, which proves nothing —
100
+ // record what the socket actually was, and `unknown` when it cannot be
101
+ // observed at all.
102
+ recordWebSocketDispatch(request, 'unsent');
103
+ const dispatchRequestEvent = () => {
104
+ const readyState = socket.socket?.readyState;
105
+ socket.send(requestEvent);
106
+ recordWebSocketDispatch(request, readyState === WEBSOCKET_OPEN ? 'flushed' : 'unknown');
107
+ };
108
+ if (socket.socket?.readyState === WEBSOCKET_CONNECTING) {
109
+ socket.socket.once('open', dispatchRequestEvent);
82
110
  }
83
111
  else {
84
- socket.send(requestEvent);
112
+ dispatchRequestEvent();
85
113
  }
86
114
  const sessionState = this.options.contextCompactionSessionState;
115
+ const sessions = this.#sessions;
87
116
  return (async function* () {
117
+ let terminalReceived = false;
118
+ let released = false;
119
+ const release = (keepAlive) => {
120
+ if (released)
121
+ return;
122
+ released = true;
123
+ sessions.release(socket, { keepAlive });
124
+ };
88
125
  try {
89
126
  for await (const message of messages) {
90
- if (message.type === 'message')
91
- yield message.message;
92
- else if (message.event)
93
- yield message.event;
94
- else if (message.type === 'error')
127
+ if (message.type === 'message') {
128
+ const event = message.message;
129
+ if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type) || event?.type === 'response.completed') {
130
+ terminalReceived = true;
131
+ }
132
+ yield event;
133
+ }
134
+ else if (message.event) {
135
+ const event = message.event;
136
+ if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type) || event?.type === 'response.completed') {
137
+ terminalReceived = true;
138
+ }
139
+ yield event;
140
+ }
141
+ else if (message.type === 'error') {
95
142
  throw message.error;
96
- else if (message.type === 'close')
97
- throw new Error('Codex WebSocket connection closed before a terminal response event.');
143
+ }
144
+ else if (message.type === 'close') {
145
+ throw webSocketCloseError(message, readWebSocketDispatch(request));
146
+ }
98
147
  }
99
148
  }
100
149
  catch (error) {
101
- markContextCompactionFailure(error, request, sessionState);
102
- throw error;
150
+ release(false);
151
+ const normalizedError = normalizeExplicitCodexServerError(error);
152
+ markContextCompactionFailure(normalizedError, request, sessionState);
153
+ throw normalizedError;
103
154
  }
104
155
  finally {
105
- try {
106
- socket.close();
107
- }
108
- catch {
109
- /* best effort */
110
- }
156
+ release(terminalReceived);
111
157
  }
112
158
  })();
113
159
  }
@@ -131,6 +177,9 @@ export class OpenAIResponsesModel {
131
177
  this.model = model;
132
178
  this.transport = transport ?? new CodexResponsesTransport(client, model, websocket);
133
179
  }
180
+ async close() {
181
+ this.transport.close?.();
182
+ }
134
183
  buildResponsesCreateRequest(request, stream) {
135
184
  const built = this.transport.buildResponsesCreateRequest(request, stream);
136
185
  if (this.transport instanceof CodexResponsesTransport && built?.requestData) {
@@ -147,16 +196,47 @@ export class OpenAIResponsesModel {
147
196
  }
148
197
  async *rawStream(request) {
149
198
  const source = await this.fetchResponse(request, true);
150
- for await (const event of source) {
151
- if (event?.type === 'error')
152
- throw new Error(event.error?.message ?? 'Codex WebSocket provider error');
153
- if (event?.type === 'close')
154
- throw new Error('Codex WebSocket connection closed before a terminal response event.');
155
- yield event;
156
- if (event?.type === 'response.completed' ||
157
- event?.type === 'response.incomplete' ||
158
- event?.type === 'response.failed')
159
- return;
199
+ const iterator = source[Symbol.asyncIterator]();
200
+ let terminal = false;
201
+ let iteratorFinished = false;
202
+ try {
203
+ while (true) {
204
+ const next = await iterator.next();
205
+ if (next.done) {
206
+ iteratorFinished = true;
207
+ return;
208
+ }
209
+ const event = next.value;
210
+ if (event?.type === 'error')
211
+ throw new Error(event.error?.message ?? 'Codex WebSocket provider error');
212
+ if (event?.type === 'close')
213
+ throw new WebSocketClosedEarlyError(readWebSocketCloseFrame(event));
214
+ terminal =
215
+ event?.type === 'response.completed' ||
216
+ event?.type === 'response.incomplete' ||
217
+ event?.type === 'response.failed';
218
+ yield event;
219
+ if (terminal)
220
+ return;
221
+ }
222
+ }
223
+ finally {
224
+ if (!iteratorFinished) {
225
+ if (terminal) {
226
+ // The Responses WebSocket stream is session-scoped. Detach this
227
+ // completed request without awaiting an SDK iterator return that
228
+ // waits for the retained socket to close.
229
+ try {
230
+ void iterator.return?.().catch(() => undefined);
231
+ }
232
+ catch {
233
+ // Completion is authoritative; socket disposal remains best effort.
234
+ }
235
+ }
236
+ else {
237
+ await iterator.return?.();
238
+ }
239
+ }
160
240
  }
161
241
  }
162
242
  async *stream(request) {
@@ -338,19 +418,29 @@ function toCodexUsage(rawUsage) {
338
418
  function codexString(value) {
339
419
  return typeof value === 'string' && value.length > 0 ? value : undefined;
340
420
  }
341
- import { isIncompleteStreamTerminalError, isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
421
+ import { isIncompleteStreamTerminalError, isMissingServerToolOutputError, isPreviousResponseNotFoundError, isRetryableTransportError, isWebSocketConnectionLimitReachedError, } from '../services/retry/retry-error-classification.js';
342
422
  const SUSPICIOUS_RECONSTRUCTED_OUTPUT_ITEM_COUNT = 20;
343
- const TERMINAL_RESPONSE_EVENT_TYPES = new Set([
344
- 'response.completed',
345
- 'response.failed',
346
- 'response.incomplete',
347
- 'response.error',
348
- ]);
349
423
  const WS_RESPONSE_MODEL_CLASS = 'OpenAIResponsesWSModel';
350
424
  const WS_RESPONSE_WRAPPER_CLASS = 'CodexResponsesWSModel';
351
425
  const RESPONSES_LITE_MODELS = new Set(['gpt-5.6-luna']);
352
426
  const asRecord = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : null;
353
427
  const stringValue = (value) => (typeof value === 'string' && value ? value : undefined);
428
+ /**
429
+ * A Codex WebSocket `error` frame is an explicit provider rejection, unlike a
430
+ * socket close after sending a request. Normalize only its documented
431
+ * `server_error` shape to the SDK's 5xx error so the pre-event retry wrapper
432
+ * can retry it without treating an ambiguous outcome as safe to replay.
433
+ */
434
+ function normalizeExplicitCodexServerError(error) {
435
+ const outer = asRecord(asRecord(error)?.error) ?? asRecord(error);
436
+ const details = asRecord(outer?.error) ?? outer;
437
+ if (!details || (details.type !== 'server_error' && details.code !== 'server_error')) {
438
+ return error;
439
+ }
440
+ const normalized = new InternalServerError(500, details, stringValue(details.message), new Headers());
441
+ Object.defineProperty(normalized, 'cause', { value: error, configurable: true });
442
+ return normalized;
443
+ }
354
444
  const CODEX_REPLAY_ITEM_TYPES_WITHOUT_IDS = new Set([
355
445
  'message',
356
446
  'reasoning',
@@ -597,6 +687,15 @@ const collectFunctionCallIds = (input) => {
597
687
  }
598
688
  return ids;
599
689
  };
690
+ const isExactInputPrefix = (input, prefix) => {
691
+ if (prefix.length > input.length)
692
+ return false;
693
+ return prefix.every((item, index) => JSON.stringify(item) === JSON.stringify(input[index]));
694
+ };
695
+ const collectUnpairedToolResultCallIds = (original, filtered) => {
696
+ const remaining = new Set(collectToolResultCallIds(filtered));
697
+ return collectToolResultCallIds(original).filter((callId) => !remaining.has(callId));
698
+ };
600
699
  const dropUnpairedCodexToolItems = (history) => {
601
700
  const callIds = new Set();
602
701
  const resultIds = new Set();
@@ -722,10 +821,26 @@ const isDefinitelyUnsentWebSocketError = (error, seen = new Set()) => {
722
821
  }
723
822
  return isDefinitelyUnsentWebSocketError(record.message, seen) || isDefinitelyUnsentWebSocketError(record.cause, seen);
724
823
  };
824
+ /**
825
+ * A receive-watchdog timeout that the send path proved never reached the wire.
826
+ *
827
+ * Three conditions must all hold, and each rules out a way of being wrong: the
828
+ * failure is the watchdog's own (not a provider error wearing a timeout
829
+ * message), no frame ever arrived (a single frame means the server had the
830
+ * request), and the send path positively recorded `unsent` (an unrecorded
831
+ * request is not evidence). Anything less stays ambiguous and terminates.
832
+ */
833
+ const asProvablyUnsentTimeout = (timeoutError, timing, request) => {
834
+ if (!timeoutError || timing.frameCount > 0)
835
+ return undefined;
836
+ if (readWebSocketDispatch(request) !== 'unsent')
837
+ return undefined;
838
+ return new UnsentWebSocketRequestError(timeoutError.message, { cause: timeoutError });
839
+ };
725
840
  const asAmbiguousModelOutcome = (error) => {
726
841
  // Connection never carried the request: safe to let outer retry / transport
727
842
  // fallback policies decide. Do not pretend the model may have run.
728
- if (isDefinitelyUnsentWebSocketError(error)) {
843
+ if (error instanceof UnsentWebSocketRequestError || isDefinitelyUnsentWebSocketError(error)) {
729
844
  return undefined;
730
845
  }
731
846
  // Incomplete stream terminals keep transportFallback=false so Codex does not
@@ -740,13 +855,6 @@ const asAmbiguousModelOutcome = (error) => {
740
855
  return undefined;
741
856
  };
742
857
  const hasGenerateFalse = (request) => request.providerOptions?.generate === false;
743
- const withProviderOptions = (request, providerOptions) => ({
744
- ...request,
745
- providerOptions: {
746
- ...request.providerOptions,
747
- ...providerOptions,
748
- },
749
- });
750
858
  export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
751
859
  modelId;
752
860
  tokenManager;
@@ -755,6 +863,9 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
755
863
  codexFunctionCallIdsByResponseId = new Map();
756
864
  codexTurnIdsBySession = new Map();
757
865
  #serverHistoryReuseDisabled = false;
866
+ #lastSentChainFingerprint;
867
+ #lastRejectedChainFingerprint;
868
+ #lastLogicalRequestByKey = new Map();
758
869
  providerTraffic;
759
870
  diagnosticLogger;
760
871
  sessionContextService;
@@ -805,7 +916,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
805
916
  modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
806
917
  });
807
918
  }
808
- #logTrafficReceived(requestId, requestData, response) {
919
+ #logTrafficReceived(requestId, requestData, response, receiveTiming) {
809
920
  const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
810
921
  const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
811
922
  providerTraffic.recordResponseReceived({
@@ -815,11 +926,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
815
926
  status: 200,
816
927
  response: response,
817
928
  transport: 'websocket',
929
+ ...(receiveTiming ? { receiveTiming } : {}),
818
930
  modelClass: WS_RESPONSE_MODEL_CLASS,
819
931
  modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
820
932
  });
821
933
  }
822
- #logTrafficFailed(requestId, requestData, error) {
934
+ #logTrafficFailed(requestId, requestData, error, receiveTiming) {
823
935
  const providerTraffic = this.providerTraffic ?? DUMMY_PROVIDER_TRAFFIC;
824
936
  const model = typeof requestData.model === 'string' ? requestData.model : this.#modelNameFallback();
825
937
  providerTraffic.recordRequestFailed({
@@ -827,6 +939,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
827
939
  provider: 'codex',
828
940
  model,
829
941
  error,
942
+ ...(receiveTiming ? { receiveTiming } : {}),
830
943
  modelClass: WS_RESPONSE_MODEL_CLASS,
831
944
  modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
832
945
  });
@@ -845,7 +958,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
845
958
  modelWrapperClass: WS_RESPONSE_WRAPPER_CLASS,
846
959
  });
847
960
  }
848
- async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal) {
961
+ async #withTrafficLogging(responseStream, requestId, requestData, wireStateKey, wireStateToken, signal, receiveTiming, asProvablyUnsent) {
849
962
  const logReceived = this.#logTrafficReceived.bind(this);
850
963
  const logFailed = this.#logTrafficFailed.bind(this);
851
964
  const logClosed = this.#logTrafficClosed.bind(this);
@@ -878,7 +991,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
878
991
  if (wireStateKey && wireStateToken && typeof response.id === 'string' && response.id.length > 0) {
879
992
  wireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
880
993
  }
881
- logReceived(requestId, requestData, response);
994
+ logReceived(requestId, requestData, response, receiveTiming?.());
882
995
  }
883
996
  yield event;
884
997
  }
@@ -889,8 +1002,12 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
889
1002
  if (wireStateKey && !isWebSocketConnectionLimitReachedError(error)) {
890
1003
  wireState.invalidate(wireStateKey);
891
1004
  }
892
- logFailed(requestId, requestData, error);
893
- throw error;
1005
+ // The watchdog's own timeout may carry proof that the request never
1006
+ // reached the wire; the wire-state decision above still keys off the
1007
+ // error as thrown.
1008
+ const failure = asProvablyUnsent?.() ?? error;
1009
+ logFailed(requestId, requestData, failure, receiveTiming?.());
1010
+ throw failure;
894
1011
  }
895
1012
  finally {
896
1013
  if (!sawTerminalEvent && !sourceExhausted && !streamFailed) {
@@ -908,29 +1025,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
908
1025
  }
909
1026
  return wrapped();
910
1027
  }
911
- async #warmupCodexUnary(request) {
912
- if (!request) {
913
- return undefined;
914
- }
915
- const response = await super.fetchUnaryResponse(request);
916
- const responseId = getResponseIdFromResponse(response);
917
- this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, true);
918
- return responseId;
919
- }
920
- async #warmupCodexStream(request) {
921
- if (!request) {
922
- return undefined;
923
- }
924
- let responseId;
925
- for await (const event of super.rawStream(request)) {
926
- const eventResponseId = getResponseIdFromStreamEvent(event);
927
- if (eventResponseId) {
928
- responseId = eventResponseId;
929
- this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, true);
930
- }
931
- }
932
- return responseId;
933
- }
934
1028
  #prepareCodexServerHistoryRequest(request) {
935
1029
  const explicitPreviousResponseId = typeof request.previousResponseId === 'string' && request.previousResponseId.length > 0
936
1030
  ? request.previousResponseId
@@ -960,28 +1054,38 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
960
1054
  };
961
1055
  }
962
1056
  #getRememberedCodexResponseIdForRequest(request) {
963
- if (this.#serverHistoryReuseDisabled) {
1057
+ if (this.#serverHistoryReuseDisabled || hasGenerateFalse(request)) {
964
1058
  return undefined;
965
1059
  }
966
1060
  const key = this.#getCodexServerHistoryKey();
967
- if (!key || hasGenerateFalse(request)) {
1061
+ const stored = key ? this.#lastLogicalRequestByKey.get(key) : undefined;
1062
+ if (!stored || !Array.isArray(request.input)) {
968
1063
  return undefined;
969
1064
  }
970
- const hasToolResultBeforeTrailingUserMessages = (items) => {
971
- let endUserIndex = items.length;
972
- while (endUserIndex > 0 && isUserInputMessage(items[endUserIndex - 1])) {
973
- endUserIndex--;
974
- }
975
- return endUserIndex > 0 && isToolResultItem(items[endUserIndex - 1]);
976
- };
977
- const input = request.input;
978
- const isInternalToolContinuation = Array.isArray(input) &&
979
- input.length > 1 &&
980
- input.some(isUserInputMessage) &&
981
- hasToolResultBeforeTrailingUserMessages(input);
982
- return isInternalToolContinuation ? this.codexPreviousResponseIds.get(key) : undefined;
1065
+ return isExactInputPrefix(request.input, stored.input) ? stored.responseId : undefined;
983
1066
  }
984
1067
  #prepareCodexServerHistoryRequests(request) {
1068
+ if (request?.disableChaining === true) {
1069
+ this.#forgetCodexResponseId();
1070
+ const { previousResponseId: _previousResponseId, ...rest } = request;
1071
+ const input = Array.isArray(rest.input) ? dropUnpairedCodexToolItems(rest.input) : rest.input;
1072
+ this.diagnosticLogger?.debug?.('Codex chain recovery bypassed warmup and previous_response_id', {
1073
+ eventType: 'codex.chain_recovery.warmup_bypassed',
1074
+ category: 'provider',
1075
+ phase: 'request_prepare',
1076
+ droppedOrphanCallIds: collectUnpairedToolResultCallIds(rest.input, input),
1077
+ });
1078
+ return { request: input === rest.input ? rest : { ...rest, input } };
1079
+ }
1080
+ if (RESPONSES_LITE_MODELS.has(this.modelId)) {
1081
+ // Luna chaining is owned by ChainedWireState in buildResponsesCreateRequest.
1082
+ // That machine adopts the stored response id when the caller omits
1083
+ // previousResponseId (nested explorers do). Injecting a terra-style
1084
+ // remembered id here would duplicate that owner. disableChaining still
1085
+ // clears the wire state via #forgetCodexResponseId above.
1086
+ const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
1087
+ return { request: input === request.input ? request : { ...request, input } };
1088
+ }
985
1089
  const key = this.#getCodexServerHistoryKey();
986
1090
  if (!key || hasGenerateFalse(request)) {
987
1091
  return { request };
@@ -990,52 +1094,31 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
990
1094
  if (preparedRequest.previousResponseId) {
991
1095
  return { request: preparedRequest };
992
1096
  }
1097
+ // No usable server-held anchor, so this request carries its full history.
1098
+ //
1099
+ // Codex's `generate:false` warmup is deliberately not used here. It is only
1100
+ // a win when it can be issued ahead of an upcoming turn, and this call site
1101
+ // sits immediately before the request it would prepare -- so it bought a
1102
+ // serial round trip while the paired generate call still reported the full
1103
+ // uncached prompt (`cached_tokens: 0`), counting the prompt twice. The
1104
+ // response ID that anchors the next turn comes from the generate response
1105
+ // either way, so dropping warmup costs no chaining.
993
1106
  const input = Array.isArray(request.input) ? dropUnpairedCodexToolItems(request.input) : request.input;
994
- const replayRequest = input === request.input ? request : { ...request, input };
995
- if (!Array.isArray(input) || input.length === 0) {
996
- return { request: replayRequest };
997
- }
998
- const deltaStart = findServerManagedDeltaStart(input);
999
- const warmupItems = deltaStart > 0 ? [...input.slice(0, deltaStart)] : [];
1000
- const rawDelta = deltaStart > 0 ? input.slice(deltaStart) : [...input];
1001
- // The trailing walk collects interleaved function-call items alongside
1002
- // their tool results to keep parallel outputs together. Move those
1003
- // function-call items back to the warmup so the server receives them
1004
- // as history (generate: false) and can pair them with the tool results
1005
- // that arrive in the delta request.
1006
- const deltaInput = [];
1007
- for (const item of rawDelta) {
1008
- if (isToolResultItem(item)) {
1009
- deltaInput.push(item);
1010
- }
1011
- else if (isToolContinuationItem(item)) {
1012
- warmupItems.push(item);
1013
- }
1014
- else {
1015
- deltaInput.push(item);
1016
- }
1017
- }
1018
- return {
1019
- warmupRequest: withProviderOptions({
1020
- ...replayRequest,
1021
- input: warmupItems,
1022
- }, { generate: false }),
1023
- request: {
1024
- ...replayRequest,
1025
- input: deltaInput,
1026
- },
1027
- };
1028
- }
1029
- #withCodexPreviousResponseId(request, previousResponseId) {
1030
- if (!previousResponseId) {
1031
- return request;
1032
- }
1033
- return this.#prepareCodexServerHistoryRequest({
1034
- ...request,
1035
- previousResponseId,
1036
- });
1037
- }
1038
- #rememberCodexResponseId(responseId, output, input, recordChainAnchor = false) {
1107
+ return { request: input === request.input ? request : { ...request, input } };
1108
+ }
1109
+ /**
1110
+ * Records a response ID as the anchor for the next turn's `previous_response_id`.
1111
+ *
1112
+ * The chain anchor -- the set of function call IDs a response is known to hold
1113
+ * -- is recorded only for a full-history request, meaning one sent without
1114
+ * `previous_response_id`. That condition used to be implicit: only the
1115
+ * `generate:false` warmup leg recorded an anchor, and warmup always carried
1116
+ * complete history. Recording it from a chained request instead would be a
1117
+ * false-positive machine, because a chained request's `input` is only the
1118
+ * delta -- the orphan guard below would then reject every genuinely new tool
1119
+ * output as unknown to the chain.
1120
+ */
1121
+ #rememberCodexResponseId(responseId, output, input, sentAsFullHistory = false) {
1039
1122
  if (!responseId) {
1040
1123
  return;
1041
1124
  }
@@ -1043,8 +1126,13 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1043
1126
  const key = this.#getCodexServerHistoryKey();
1044
1127
  if (key) {
1045
1128
  this.codexPreviousResponseIds.set(key, responseId);
1129
+ this.#lastLogicalRequestByKey.set(key, {
1130
+ input: Array.isArray(input) ? [...input] : this.#lastLogicalRequestByKey.get(key)?.input ?? [],
1131
+ output: Array.isArray(output) ? [...output] : [],
1132
+ responseId,
1133
+ });
1046
1134
  }
1047
- if (recordChainAnchor && (Array.isArray(output) || Array.isArray(input))) {
1135
+ if (sentAsFullHistory && (Array.isArray(output) || Array.isArray(input))) {
1048
1136
  this.codexFunctionCallIdsByResponseId.set(responseId, new Set([...collectFunctionCallIds(output), ...collectFunctionCallIds(input)]));
1049
1137
  }
1050
1138
  }
@@ -1092,6 +1180,50 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1092
1180
  this.codexFunctionCallIdsByResponseId.clear();
1093
1181
  this.codexTurnIdsBySession.clear();
1094
1182
  this.chainedWireState.clear();
1183
+ this.#lastLogicalRequestByKey.clear();
1184
+ this.#lastSentChainFingerprint = undefined;
1185
+ }
1186
+ #getEffectivePreviousResponseId(request) {
1187
+ if (typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0) {
1188
+ return request.previousResponseId;
1189
+ }
1190
+ if (request?.disableChaining === true) {
1191
+ return undefined;
1192
+ }
1193
+ if (RESPONSES_LITE_MODELS.has(this.modelId)) {
1194
+ const key = this.#getCodexServerHistoryKey();
1195
+ return key ? this.chainedWireState.getStoredResponseId(key) : undefined;
1196
+ }
1197
+ return undefined;
1198
+ }
1199
+ #fingerprintPreparedRequest(request, recoveryClass = 'chain_recovery') {
1200
+ const previousResponseId = this.#getEffectivePreviousResponseId(request);
1201
+ return fingerprintChainRequest({
1202
+ provider: 'codex',
1203
+ model: this.modelId,
1204
+ previousResponseId: previousResponseId ?? null,
1205
+ input: Array.isArray(request?.input) ? request.input : [],
1206
+ recoveryClass,
1207
+ });
1208
+ }
1209
+ #assertChainRequestMakesProgress(request) {
1210
+ const fingerprint = this.#fingerprintPreparedRequest(request);
1211
+ if (this.#lastRejectedChainFingerprint && this.#lastRejectedChainFingerprint === fingerprint) {
1212
+ this.diagnosticLogger?.warn?.('Codex chain recovery would repeat a rejected request', {
1213
+ eventType: 'retry.conversation_state_no_progress',
1214
+ category: 'retry',
1215
+ phase: 'request_prepare',
1216
+ });
1217
+ throw new ConversationStateNoProgressError();
1218
+ }
1219
+ this.#lastSentChainFingerprint = fingerprint;
1220
+ }
1221
+ #recordRejectedChainRequest(error) {
1222
+ if (isMissingServerToolOutputError(error) ||
1223
+ isOrphanedChainedToolOutputError(error) ||
1224
+ isPreviousResponseNotFoundError(error)) {
1225
+ this.#lastRejectedChainFingerprint = this.#lastSentChainFingerprint;
1226
+ }
1095
1227
  }
1096
1228
  #shouldForgetCodexServerHistory(error) {
1097
1229
  // This rejects the new request before generation; it expires the socket,
@@ -1103,6 +1235,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1103
1235
  const message = getErrorMessage(error);
1104
1236
  return (isPreviousResponseNotFoundError(error) ||
1105
1237
  message.includes('previous_response_not_found') ||
1238
+ isMissingServerToolOutputError(error) ||
1239
+ isOrphanedChainedToolOutputError(error) ||
1106
1240
  isRetryableTransportError(error).transportFallback);
1107
1241
  }
1108
1242
  #getCodexServerHistoryKey() {
@@ -1115,7 +1249,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1115
1249
  return undefined;
1116
1250
  }
1117
1251
  const sessionContext = this.sessionContextService?.getContext();
1118
- const sessionId = sessionContext?.sessionId ?? requestId;
1252
+ const sessionId = sessionContext?.providerHistoryKey ?? sessionContext?.sessionId ?? requestId;
1119
1253
  const threadId = sessionId;
1120
1254
  const hasPreviousResponseId = typeof request?.previousResponseId === 'string' && request.previousResponseId.length > 0;
1121
1255
  const turnId = hasPreviousResponseId ? this.codexTurnIdsBySession.get(sessionId) ?? randomUUID() : randomUUID();
@@ -1152,14 +1286,6 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1152
1286
  },
1153
1287
  };
1154
1288
  }
1155
- #getEffectiveCodexRequestAfterWarmup(originalRequest, preparedRequest, warmupResponseId) {
1156
- if (!preparedRequest.warmupRequest) {
1157
- return preparedRequest.request;
1158
- }
1159
- return warmupResponseId
1160
- ? this.#withCodexPreviousResponseId(preparedRequest.request, warmupResponseId)
1161
- : originalRequest;
1162
- }
1163
1289
  #withoutCodexServerHistory(request) {
1164
1290
  if (!request || typeof request !== 'object') {
1165
1291
  return request;
@@ -1172,16 +1298,17 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1172
1298
  let attemptedWithServerHistory = false;
1173
1299
  try {
1174
1300
  const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
1175
- attemptedWithServerHistory = Boolean(preparedRequest.warmupRequest || preparedRequest.request?.previousResponseId);
1176
- const warmupResponseId = await this.#warmupCodexUnary(preparedRequest.warmupRequest);
1177
- const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
1301
+ attemptedWithServerHistory = Boolean(this.#getEffectivePreviousResponseId(preparedRequest.request));
1302
+ const effectiveRequest = preparedRequest.request;
1303
+ this.#assertChainRequestMakesProgress(effectiveRequest);
1178
1304
  const response = await super.fetchUnaryResponse(effectiveRequest);
1179
1305
  const responseId = getResponseIdFromResponse(response);
1180
- this.#rememberCodexResponseId(responseId, asRecord(response)?.output, effectiveRequest.input);
1306
+ this.#rememberCodexResponseId(responseId, asRecord(response)?.output, request.input, !effectiveRequest.previousResponseId);
1181
1307
  this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
1182
1308
  return response;
1183
1309
  }
1184
1310
  catch (error) {
1311
+ this.#recordRejectedChainRequest(error);
1185
1312
  if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory) {
1186
1313
  this.#forgetCodexResponseId();
1187
1314
  if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
@@ -1190,7 +1317,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1190
1317
  const fallbackRequest = this.#withoutCodexServerHistory(request);
1191
1318
  const response = await super.fetchUnaryResponse(fallbackRequest);
1192
1319
  const responseId = getResponseIdFromResponse(response);
1193
- this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input);
1320
+ this.#rememberCodexResponseId(responseId, asRecord(response)?.output, fallbackRequest.input, true);
1194
1321
  this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
1195
1322
  return response;
1196
1323
  }
@@ -1207,15 +1334,15 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1207
1334
  let attemptedWithServerHistory = false;
1208
1335
  try {
1209
1336
  const preparedRequest = this.#prepareCodexServerHistoryRequests(request);
1210
- attemptedWithServerHistory = Boolean(preparedRequest.warmupRequest || preparedRequest.request?.previousResponseId);
1211
- const warmupResponseId = await this.#warmupCodexStream(preparedRequest.warmupRequest);
1212
- const effectiveRequest = this.#getEffectiveCodexRequestAfterWarmup(request, preparedRequest, warmupResponseId);
1337
+ attemptedWithServerHistory = Boolean(this.#getEffectivePreviousResponseId(preparedRequest.request));
1338
+ const effectiveRequest = preparedRequest.request;
1339
+ this.#assertChainRequestMakesProgress(effectiveRequest);
1213
1340
  let responseId;
1214
1341
  for await (const event of super.rawStream(effectiveRequest)) {
1215
1342
  const eventResponseId = getResponseIdFromStreamEvent(event);
1216
1343
  if (eventResponseId) {
1217
1344
  responseId = eventResponseId;
1218
- this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), effectiveRequest.input);
1345
+ this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), request.input, !effectiveRequest.previousResponseId);
1219
1346
  }
1220
1347
  if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
1221
1348
  this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
@@ -1226,6 +1353,8 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1226
1353
  this.#rememberConsumedToolResultCallIds(responseId, effectiveRequest.previousResponseId, effectiveRequest.input);
1227
1354
  }
1228
1355
  catch (error) {
1356
+ this.#logWebSocketClosedEarly(error, receivedRawFrame);
1357
+ this.#recordRejectedChainRequest(error);
1229
1358
  if (isPreviousResponseUnavailableError(error) && attemptedWithServerHistory && !receivedRawFrame) {
1230
1359
  this.#forgetCodexResponseId();
1231
1360
  if (isPreviousResponseUnavailableError(error) && hasToolResultInput(request)) {
@@ -1239,7 +1368,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1239
1368
  const eventResponseId = getResponseIdFromStreamEvent(event);
1240
1369
  if (eventResponseId) {
1241
1370
  responseId = eventResponseId;
1242
- this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input);
1371
+ this.#rememberCodexResponseId(responseId, getResponseOutputFromStreamEvent(event), fallbackRequest.input, true);
1243
1372
  }
1244
1373
  if (TERMINAL_RESPONSE_EVENT_TYPES.has(event?.type)) {
1245
1374
  this.#rememberConsumedToolResultCallIds(responseId, undefined, fallbackRequest.input);
@@ -1259,6 +1388,27 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1259
1388
  throw asAmbiguousModelOutcome(error) ?? error;
1260
1389
  }
1261
1390
  }
1391
+ /**
1392
+ * The close code is the only field that distinguishes a network drop from a
1393
+ * deliberate server close, and it is discarded once the error is wrapped for
1394
+ * recovery. Record it here, where the retry decision that follows can be read
1395
+ * against it.
1396
+ */
1397
+ #logWebSocketClosedEarly(error, receivedRawFrame) {
1398
+ const closed = findWebSocketClosedEarly(error);
1399
+ if (!closed)
1400
+ return;
1401
+ this.diagnosticLogger?.warn?.('Codex WebSocket closed before a terminal response event', {
1402
+ eventType: 'codex.websocket.closed_early',
1403
+ category: 'provider',
1404
+ model: this.modelId,
1405
+ closeCode: closed.closeCode ?? null,
1406
+ closeReason: closed.closeReason ?? null,
1407
+ unsentCount: closed.unsentCount,
1408
+ receivedRawFrame,
1409
+ provablyUnsent: error instanceof UnsentWebSocketRequestError,
1410
+ });
1411
+ }
1262
1412
  buildResponsesCreateRequest(request, stream) {
1263
1413
  const built = super.buildResponsesCreateRequest(request, stream);
1264
1414
  const requestData = normalizeCodexRequestData(built.requestData, request, this.modelId, {
@@ -1342,13 +1492,14 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1342
1492
  if (wireStateKey && wireStateToken && typeof response?.id === 'string' && response.id.length > 0) {
1343
1493
  this.chainedWireState.recordResponse(wireStateKey, wireStateToken, response.id, response.output);
1344
1494
  }
1345
- this.#logTrafficReceived(requestId, requestData, response);
1495
+ this.#logTrafficReceived(requestId, requestData, response, watchdog.receiveTiming());
1346
1496
  return response;
1347
1497
  }
1348
1498
  catch (error) {
1349
1499
  const timeoutError = watchdog.timeoutError();
1500
+ const receiveTiming = watchdog.receiveTiming();
1350
1501
  watchdog.close();
1351
- const failure = timeoutError ?? error;
1502
+ const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
1352
1503
  if (wireStateKey) {
1353
1504
  if (isWebSocketConnectionLimitReachedError(failure)) {
1354
1505
  if (wireStateToken)
@@ -1358,19 +1509,20 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1358
1509
  this.chainedWireState.invalidate(wireStateKey);
1359
1510
  }
1360
1511
  }
1361
- this.#logTrafficFailed(requestId, requestData, failure);
1512
+ this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
1362
1513
  throw failure;
1363
1514
  }
1364
1515
  }
1365
1516
  try {
1366
1517
  const response = (await super.fetchResponse(updatedRequest, stream));
1367
1518
  const patched = wrapCodexStream(watchdog.wrap(response), this.diagnosticLogger);
1368
- return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal);
1519
+ return this.#withTrafficLogging(patched, requestId, requestData, wireStateKey, wireStateToken, updatedRequest.signal, () => watchdog.receiveTiming(), () => asProvablyUnsentTimeout(watchdog.timeoutError(), watchdog.receiveTiming(), updatedRequest));
1369
1520
  }
1370
1521
  catch (error) {
1371
1522
  const timeoutError = watchdog.timeoutError();
1523
+ const receiveTiming = watchdog.receiveTiming();
1372
1524
  watchdog.close();
1373
- const failure = timeoutError ?? error;
1525
+ const failure = asProvablyUnsentTimeout(timeoutError, receiveTiming, updatedRequest) ?? timeoutError ?? error;
1374
1526
  if (wireStateKey) {
1375
1527
  if (isWebSocketConnectionLimitReachedError(failure)) {
1376
1528
  if (wireStateToken)
@@ -1380,7 +1532,7 @@ export class CodexResponsesWSModel extends OpenAIResponsesWSModel {
1380
1532
  this.chainedWireState.invalidate(wireStateKey);
1381
1533
  }
1382
1534
  }
1383
- this.#logTrafficFailed(requestId, requestData, failure);
1535
+ this.#logTrafficFailed(requestId, requestData, failure, receiveTiming);
1384
1536
  throw failure;
1385
1537
  }
1386
1538
  }