@qduc/term2 0.14.0 → 0.15.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 (903) hide show
  1. package/dist/agent.d.ts +2 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +17 -7
  4. package/dist/agent.js.map +1 -1
  5. package/dist/app-helpers.d.ts +4 -0
  6. package/dist/app-helpers.d.ts.map +1 -1
  7. package/dist/app-helpers.js +6 -0
  8. package/dist/app-helpers.js.map +1 -1
  9. package/dist/app.d.ts +1 -1
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +141 -13
  12. package/dist/app.js.map +1 -1
  13. package/dist/cli.js +112 -28
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/auto-approve-command.js +3 -3
  16. package/dist/commands/auto-approve-command.js.map +1 -1
  17. package/dist/commands/guarded-settings-command.d.ts +3 -1
  18. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  19. package/dist/commands/guarded-settings-command.js +21 -5
  20. package/dist/commands/guarded-settings-command.js.map +1 -1
  21. package/dist/commands/mode-commands.d.ts +9 -2
  22. package/dist/commands/mode-commands.d.ts.map +1 -1
  23. package/dist/commands/mode-commands.js +12 -3
  24. package/dist/commands/mode-commands.js.map +1 -1
  25. package/dist/commands/usage-command.d.ts +10 -1
  26. package/dist/commands/usage-command.d.ts.map +1 -1
  27. package/dist/commands/usage-command.js +11 -1
  28. package/dist/commands/usage-command.js.map +1 -1
  29. package/dist/components/InputBox.js +14 -1
  30. package/dist/components/InputBox.js.map +1 -1
  31. package/dist/components/input/FirstRunSetupPrompt.js +1 -1
  32. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  33. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  34. package/dist/components/input/PendingQueueList.js +22 -5
  35. package/dist/components/input/PendingQueueList.js.map +1 -1
  36. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
  37. package/dist/components/input/ProviderMenuSession.js +1 -0
  38. package/dist/components/input/ProviderMenuSession.js.map +1 -1
  39. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  40. package/dist/components/input/SettingsValueMenuSession.js +6 -0
  41. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  42. package/dist/components/layout/BackgroundTaskManager.d.ts +2 -0
  43. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  44. package/dist/components/layout/BackgroundTaskManager.js +156 -64
  45. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  46. package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -1
  47. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  48. package/dist/components/layout/BackgroundTasksPanel.js +193 -59
  49. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  50. package/dist/components/layout/BottomArea.d.ts +11 -1
  51. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  52. package/dist/components/layout/BottomArea.js +30 -13
  53. package/dist/components/layout/BottomArea.js.map +1 -1
  54. package/dist/components/layout/StatusBar.d.ts +5 -0
  55. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  56. package/dist/components/layout/StatusBar.js +45 -3
  57. package/dist/components/layout/StatusBar.js.map +1 -1
  58. package/dist/components/layout/live-task-rows.d.ts +16 -0
  59. package/dist/components/layout/live-task-rows.d.ts.map +1 -0
  60. package/dist/components/layout/live-task-rows.js +28 -0
  61. package/dist/components/layout/live-task-rows.js.map +1 -0
  62. package/dist/components/layout/terminal-text-budget.d.ts +4 -0
  63. package/dist/components/layout/terminal-text-budget.d.ts.map +1 -0
  64. package/dist/components/layout/terminal-text-budget.js +18 -0
  65. package/dist/components/layout/terminal-text-budget.js.map +1 -0
  66. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/menu/ModelSelectionMenu.js +18 -5
  68. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  69. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  70. package/dist/components/menu/ProviderSelectionMenu.js +27 -2
  71. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  72. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  73. package/dist/components/menu/SettingsSelectionMenu.js +5 -0
  74. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  75. package/dist/components/message/CommandGroupSummary.d.ts +9 -0
  76. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -0
  77. package/dist/components/message/CommandGroupSummary.js +31 -0
  78. package/dist/components/message/CommandGroupSummary.js.map +1 -0
  79. package/dist/components/message/CommandMessage.d.ts +8 -0
  80. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  81. package/dist/components/message/CommandMessage.js +54 -25
  82. package/dist/components/message/CommandMessage.js.map +1 -1
  83. package/dist/components/message/MessageList.d.ts +6 -2
  84. package/dist/components/message/MessageList.d.ts.map +1 -1
  85. package/dist/components/message/MessageList.js +64 -10
  86. package/dist/components/message/MessageList.js.map +1 -1
  87. package/dist/components/message/SubagentActivityMessage.js +4 -2
  88. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  89. package/dist/components/message/command-grouping.d.ts +43 -0
  90. package/dist/components/message/command-grouping.d.ts.map +1 -0
  91. package/dist/components/message/command-grouping.js +142 -0
  92. package/dist/components/message/command-grouping.js.map +1 -0
  93. package/dist/components/message/command-message-helpers.d.ts +6 -5
  94. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  95. package/dist/components/message/command-message-helpers.js +36 -0
  96. package/dist/components/message/command-message-helpers.js.map +1 -1
  97. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -1
  98. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  99. package/dist/components/prompt/ApprovalPrompt.js +136 -90
  100. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  101. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts +11 -0
  102. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -0
  103. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +50 -0
  104. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -0
  105. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  106. package/dist/components/prompt/QueuePausedPrompt.js +14 -8
  107. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  108. package/dist/contracts/application-stream.d.ts +7 -0
  109. package/dist/contracts/application-stream.d.ts.map +1 -1
  110. package/dist/contracts/conversation.d.ts +24 -1
  111. package/dist/contracts/conversation.d.ts.map +1 -1
  112. package/dist/contracts/conversation.js +8 -0
  113. package/dist/contracts/conversation.js.map +1 -1
  114. package/dist/contracts/streamed-model-turn.d.ts +22 -1
  115. package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
  116. package/dist/core/index.d.ts +9 -0
  117. package/dist/core/index.d.ts.map +1 -0
  118. package/dist/core/index.js +8 -0
  119. package/dist/core/index.js.map +1 -0
  120. package/dist/core/session-runtime.d.ts +10 -0
  121. package/dist/core/session-runtime.d.ts.map +1 -0
  122. package/dist/core/session-runtime.js +9 -0
  123. package/dist/core/session-runtime.js.map +1 -0
  124. package/dist/gateway/assertion.d.ts +38 -0
  125. package/dist/gateway/assertion.d.ts.map +1 -0
  126. package/dist/gateway/assertion.js +146 -0
  127. package/dist/gateway/assertion.js.map +1 -0
  128. package/dist/gateway/contracts.d.ts +124 -0
  129. package/dist/gateway/contracts.d.ts.map +1 -0
  130. package/dist/gateway/contracts.js +13 -0
  131. package/dist/gateway/contracts.js.map +1 -0
  132. package/dist/gateway/gateway.d.ts +72 -0
  133. package/dist/gateway/gateway.d.ts.map +1 -0
  134. package/dist/gateway/gateway.js +1277 -0
  135. package/dist/gateway/gateway.js.map +1 -0
  136. package/dist/gateway/index.d.ts +22 -0
  137. package/dist/gateway/index.d.ts.map +1 -0
  138. package/dist/gateway/index.js +22 -0
  139. package/dist/gateway/index.js.map +1 -0
  140. package/dist/gateway/interaction-protocol.d.ts +76 -0
  141. package/dist/gateway/interaction-protocol.d.ts.map +1 -0
  142. package/dist/gateway/interaction-protocol.js +548 -0
  143. package/dist/gateway/interaction-protocol.js.map +1 -0
  144. package/dist/gateway/launcher.d.ts +8 -0
  145. package/dist/gateway/launcher.d.ts.map +1 -0
  146. package/dist/gateway/launcher.js +20 -0
  147. package/dist/gateway/launcher.js.map +1 -0
  148. package/dist/gateway/lifecycle.d.ts +12 -0
  149. package/dist/gateway/lifecycle.d.ts.map +1 -0
  150. package/dist/gateway/lifecycle.js +38 -0
  151. package/dist/gateway/lifecycle.js.map +1 -0
  152. package/dist/gateway/persistence/admission-persistence.d.ts +82 -0
  153. package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -0
  154. package/dist/gateway/persistence/admission-persistence.js +215 -0
  155. package/dist/gateway/persistence/admission-persistence.js.map +1 -0
  156. package/dist/gateway/persistence/contracts.d.ts +94 -0
  157. package/dist/gateway/persistence/contracts.d.ts.map +1 -0
  158. package/dist/gateway/persistence/contracts.js +32 -0
  159. package/dist/gateway/persistence/contracts.js.map +1 -0
  160. package/dist/gateway/persistence/coordinator.d.ts +25 -0
  161. package/dist/gateway/persistence/coordinator.d.ts.map +1 -0
  162. package/dist/gateway/persistence/coordinator.js +181 -0
  163. package/dist/gateway/persistence/coordinator.js.map +1 -0
  164. package/dist/gateway/persistence/event-journal.d.ts +31 -0
  165. package/dist/gateway/persistence/event-journal.d.ts.map +1 -0
  166. package/dist/gateway/persistence/event-journal.js +378 -0
  167. package/dist/gateway/persistence/event-journal.js.map +1 -0
  168. package/dist/gateway/persistence/interaction-checkpoint.d.ts +17 -0
  169. package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -0
  170. package/dist/gateway/persistence/interaction-checkpoint.js +75 -0
  171. package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -0
  172. package/dist/gateway/persistence/projection.d.ts +53 -0
  173. package/dist/gateway/persistence/projection.d.ts.map +1 -0
  174. package/dist/gateway/persistence/projection.js +226 -0
  175. package/dist/gateway/persistence/projection.js.map +1 -0
  176. package/dist/gateway/persistence/retention.d.ts +16 -0
  177. package/dist/gateway/persistence/retention.d.ts.map +1 -0
  178. package/dist/gateway/persistence/retention.js +93 -0
  179. package/dist/gateway/persistence/retention.js.map +1 -0
  180. package/dist/gateway/persistence/session-index.d.ts +34 -0
  181. package/dist/gateway/persistence/session-index.d.ts.map +1 -0
  182. package/dist/gateway/persistence/session-index.js +348 -0
  183. package/dist/gateway/persistence/session-index.js.map +1 -0
  184. package/dist/gateway/persistence/session-persistence.d.ts +68 -0
  185. package/dist/gateway/persistence/session-persistence.d.ts.map +1 -0
  186. package/dist/gateway/persistence/session-persistence.js +165 -0
  187. package/dist/gateway/persistence/session-persistence.js.map +1 -0
  188. package/dist/gateway/persistence/storage.d.ts +13 -0
  189. package/dist/gateway/persistence/storage.d.ts.map +1 -0
  190. package/dist/gateway/persistence/storage.js +87 -0
  191. package/dist/gateway/persistence/storage.js.map +1 -0
  192. package/dist/gateway/replay-ledger.d.ts +30 -0
  193. package/dist/gateway/replay-ledger.d.ts.map +1 -0
  194. package/dist/gateway/replay-ledger.js +83 -0
  195. package/dist/gateway/replay-ledger.js.map +1 -0
  196. package/dist/gateway/runtime-factory.d.ts +84 -0
  197. package/dist/gateway/runtime-factory.d.ts.map +1 -0
  198. package/dist/gateway/runtime-factory.js +213 -0
  199. package/dist/gateway/runtime-factory.js.map +1 -0
  200. package/dist/gateway/safe-log.d.ts +15 -0
  201. package/dist/gateway/safe-log.d.ts.map +1 -0
  202. package/dist/gateway/safe-log.js +89 -0
  203. package/dist/gateway/safe-log.js.map +1 -0
  204. package/dist/gateway/server-session.d.ts +65 -0
  205. package/dist/gateway/server-session.d.ts.map +1 -0
  206. package/dist/gateway/server-session.js +252 -0
  207. package/dist/gateway/server-session.js.map +1 -0
  208. package/dist/gateway/server.d.ts +42 -0
  209. package/dist/gateway/server.d.ts.map +1 -0
  210. package/dist/gateway/server.js +126 -0
  211. package/dist/gateway/server.js.map +1 -0
  212. package/dist/gateway/worker-boundary.d.ts +40 -0
  213. package/dist/gateway/worker-boundary.d.ts.map +1 -0
  214. package/dist/gateway/worker-boundary.js +149 -0
  215. package/dist/gateway/worker-boundary.js.map +1 -0
  216. package/dist/gateway/workspace-admission.d.ts +37 -0
  217. package/dist/gateway/workspace-admission.d.ts.map +1 -0
  218. package/dist/gateway/workspace-admission.js +285 -0
  219. package/dist/gateway/workspace-admission.js.map +1 -0
  220. package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
  221. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  222. package/dist/hooks/conversation-ui-reducer.js +3 -0
  223. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  224. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  225. package/dist/hooks/settings-completion-config.js +30 -2
  226. package/dist/hooks/settings-completion-config.js.map +1 -1
  227. package/dist/hooks/use-app-commands.d.ts +4 -1
  228. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  229. package/dist/hooks/use-app-commands.js +14 -3
  230. package/dist/hooks/use-app-commands.js.map +1 -1
  231. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +5 -0
  232. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  233. package/dist/hooks/use-app-keyboard-shortcuts.js +11 -0
  234. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  235. package/dist/hooks/use-conversation.d.ts +1 -0
  236. package/dist/hooks/use-conversation.d.ts.map +1 -1
  237. package/dist/hooks/use-conversation.js +14 -3
  238. package/dist/hooks/use-conversation.js.map +1 -1
  239. package/dist/hooks/use-grok-credit-usage.d.ts +20 -0
  240. package/dist/hooks/use-grok-credit-usage.d.ts.map +1 -0
  241. package/dist/hooks/use-grok-credit-usage.js +48 -0
  242. package/dist/hooks/use-grok-credit-usage.js.map +1 -0
  243. package/dist/hooks/use-provider-selection.d.ts +10 -0
  244. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  245. package/dist/hooks/use-provider-selection.js +105 -6
  246. package/dist/hooks/use-provider-selection.js.map +1 -1
  247. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  248. package/dist/hooks/use-settings-value-completion.js +10 -2
  249. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  250. package/dist/lib/agent-client.d.ts +10 -3
  251. package/dist/lib/agent-client.d.ts.map +1 -1
  252. package/dist/lib/agent-client.js +115 -23
  253. package/dist/lib/agent-client.js.map +1 -1
  254. package/dist/lib/agent-configuration.d.ts +2 -0
  255. package/dist/lib/agent-configuration.d.ts.map +1 -1
  256. package/dist/lib/agent-configuration.js +6 -2
  257. package/dist/lib/agent-configuration.js.map +1 -1
  258. package/dist/lib/agent-factory.d.ts +2 -0
  259. package/dist/lib/agent-factory.d.ts.map +1 -1
  260. package/dist/lib/agent-factory.js +28 -10
  261. package/dist/lib/agent-factory.js.map +1 -1
  262. package/dist/lib/editor-impl.d.ts.map +1 -1
  263. package/dist/lib/editor-impl.js +14 -17
  264. package/dist/lib/editor-impl.js.map +1 -1
  265. package/dist/lib/harness-input-idle.d.ts +16 -0
  266. package/dist/lib/harness-input-idle.d.ts.map +1 -0
  267. package/dist/lib/harness-input-idle.js +51 -0
  268. package/dist/lib/harness-input-idle.js.map +1 -0
  269. package/dist/lib/input-owner.d.ts +3 -0
  270. package/dist/lib/input-owner.d.ts.map +1 -1
  271. package/dist/lib/input-owner.js +2 -0
  272. package/dist/lib/input-owner.js.map +1 -1
  273. package/dist/lib/subagent-bridge.d.ts +3 -3
  274. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  275. package/dist/lib/subagent-bridge.js +16 -9
  276. package/dist/lib/subagent-bridge.js.map +1 -1
  277. package/dist/lib/tool-invoke.d.ts +2 -0
  278. package/dist/lib/tool-invoke.d.ts.map +1 -1
  279. package/dist/lib/tool-invoke.js +3 -0
  280. package/dist/lib/tool-invoke.js.map +1 -1
  281. package/dist/non-interactive.d.ts.map +1 -1
  282. package/dist/non-interactive.js +5 -0
  283. package/dist/non-interactive.js.map +1 -1
  284. package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
  285. package/dist/prompts/gpt-5.6.md +1 -1
  286. package/dist/prompts/kimi.md +1 -1
  287. package/dist/prompts/orchestrator.md +10 -1
  288. package/dist/prompts/plan-mode-info.md +3 -3
  289. package/dist/prompts/plan-mode-stub.md +7 -0
  290. package/dist/prompts/prefix-quality.test.ts +102 -0
  291. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  292. package/dist/prompts/prompt-constructor.js +4 -1
  293. package/dist/prompts/prompt-constructor.js.map +1 -1
  294. package/dist/prompts/prompt-constructor.test.ts +12 -4
  295. package/dist/prompts/prompt-constructor.ts +4 -1
  296. package/dist/prompts/subagents/explorer.md +7 -1
  297. package/dist/prompts/subagents/librarian.md +2 -0
  298. package/dist/prompts/subagents/mentor.md +2 -0
  299. package/dist/prompts/subagents/worker.md +2 -0
  300. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  301. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  302. package/dist/providers/ai-sdk-streamed-model.js +64 -1
  303. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  304. package/dist/providers/chained-wire-state.d.ts +6 -0
  305. package/dist/providers/chained-wire-state.d.ts.map +1 -1
  306. package/dist/providers/chained-wire-state.js +1 -3
  307. package/dist/providers/chained-wire-state.js.map +1 -1
  308. package/dist/providers/codex-auth.d.ts +73 -2
  309. package/dist/providers/codex-auth.d.ts.map +1 -1
  310. package/dist/providers/codex-auth.js +166 -2
  311. package/dist/providers/codex-auth.js.map +1 -1
  312. package/dist/providers/codex-responses-model.d.ts +3 -0
  313. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  314. package/dist/providers/codex-responses-model.js +295 -162
  315. package/dist/providers/codex-responses-model.js.map +1 -1
  316. package/dist/providers/codex-turn-converter.d.ts.map +1 -1
  317. package/dist/providers/codex-turn-converter.js +7 -1
  318. package/dist/providers/codex-turn-converter.js.map +1 -1
  319. package/dist/providers/codex.provider.d.ts +25 -2
  320. package/dist/providers/codex.provider.d.ts.map +1 -1
  321. package/dist/providers/codex.provider.js +83 -71
  322. package/dist/providers/codex.provider.js.map +1 -1
  323. package/dist/providers/common/provider-errors.d.ts +20 -0
  324. package/dist/providers/common/provider-errors.d.ts.map +1 -1
  325. package/dist/providers/common/provider-errors.js +35 -0
  326. package/dist/providers/common/provider-errors.js.map +1 -1
  327. package/dist/providers/grok-auth.d.ts +105 -0
  328. package/dist/providers/grok-auth.d.ts.map +1 -0
  329. package/dist/providers/grok-auth.js +316 -0
  330. package/dist/providers/grok-auth.js.map +1 -0
  331. package/dist/providers/grok-credit-usage.d.ts +53 -0
  332. package/dist/providers/grok-credit-usage.d.ts.map +1 -0
  333. package/dist/providers/grok-credit-usage.js +108 -0
  334. package/dist/providers/grok-credit-usage.js.map +1 -0
  335. package/dist/providers/grok.provider.d.ts +24 -0
  336. package/dist/providers/grok.provider.d.ts.map +1 -0
  337. package/dist/providers/grok.provider.js +153 -0
  338. package/dist/providers/grok.provider.js.map +1 -0
  339. package/dist/providers/index.d.ts +1 -0
  340. package/dist/providers/index.d.ts.map +1 -1
  341. package/dist/providers/index.js +1 -0
  342. package/dist/providers/index.js.map +1 -1
  343. package/dist/providers/jwt-claims.d.ts +12 -0
  344. package/dist/providers/jwt-claims.d.ts.map +1 -0
  345. package/dist/providers/jwt-claims.js +25 -0
  346. package/dist/providers/jwt-claims.js.map +1 -0
  347. package/dist/providers/luna-responses-lite-wire-protocol.d.ts +1 -0
  348. package/dist/providers/luna-responses-lite-wire-protocol.d.ts.map +1 -1
  349. package/dist/providers/luna-responses-lite-wire-protocol.js +19 -0
  350. package/dist/providers/luna-responses-lite-wire-protocol.js.map +1 -1
  351. package/dist/providers/model-catalog/catalog.generated.d.ts +360 -232
  352. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  353. package/dist/providers/model-catalog/catalog.generated.js +360 -232
  354. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  355. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
  356. package/dist/providers/model-catalog/generate-catalog.js +21 -1
  357. package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
  358. package/dist/providers/oauth-account-store.d.ts +84 -0
  359. package/dist/providers/oauth-account-store.d.ts.map +1 -0
  360. package/dist/providers/oauth-account-store.js +142 -0
  361. package/dist/providers/oauth-account-store.js.map +1 -0
  362. package/dist/providers/oauth-accounts.d.ts +24 -0
  363. package/dist/providers/oauth-accounts.d.ts.map +1 -0
  364. package/dist/providers/oauth-accounts.js +37 -0
  365. package/dist/providers/oauth-accounts.js.map +1 -0
  366. package/dist/providers/oauth-pkce.d.ts +53 -0
  367. package/dist/providers/oauth-pkce.d.ts.map +1 -0
  368. package/dist/providers/oauth-pkce.js +200 -0
  369. package/dist/providers/oauth-pkce.js.map +1 -0
  370. package/dist/providers/oauth-session-account.d.ts +5 -0
  371. package/dist/providers/oauth-session-account.d.ts.map +1 -0
  372. package/dist/providers/oauth-session-account.js +24 -0
  373. package/dist/providers/oauth-session-account.js.map +1 -0
  374. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  375. package/dist/providers/openai-chat-completions-model.js +37 -16
  376. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  377. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  378. package/dist/providers/openai-compatible.provider.d.ts +5 -0
  379. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  380. package/dist/providers/openai-compatible.provider.js +32 -2
  381. package/dist/providers/openai-compatible.provider.js.map +1 -1
  382. package/dist/providers/openai-responses-model.d.ts +13 -3
  383. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  384. package/dist/providers/openai-responses-model.js +92 -39
  385. package/dist/providers/openai-responses-model.js.map +1 -1
  386. package/dist/providers/openai.provider.d.ts.map +1 -1
  387. package/dist/providers/openai.provider.js +23 -2
  388. package/dist/providers/openai.provider.js.map +1 -1
  389. package/dist/providers/opencode-routing.d.ts +2 -0
  390. package/dist/providers/opencode-routing.d.ts.map +1 -1
  391. package/dist/providers/opencode-routing.js +12 -6
  392. package/dist/providers/opencode-routing.js.map +1 -1
  393. package/dist/providers/opencode-transport-discovery.d.ts +18 -0
  394. package/dist/providers/opencode-transport-discovery.d.ts.map +1 -0
  395. package/dist/providers/opencode-transport-discovery.js +115 -0
  396. package/dist/providers/opencode-transport-discovery.js.map +1 -0
  397. package/dist/providers/openrouter.provider.js.map +1 -1
  398. package/dist/providers/provider-opaque-compatibility.d.ts +58 -0
  399. package/dist/providers/provider-opaque-compatibility.d.ts.map +1 -0
  400. package/dist/providers/provider-opaque-compatibility.js +80 -0
  401. package/dist/providers/provider-opaque-compatibility.js.map +1 -0
  402. package/dist/providers/provider-service.d.ts +1 -1
  403. package/dist/providers/provider-service.d.ts.map +1 -1
  404. package/dist/providers/provider-service.js.map +1 -1
  405. package/dist/providers/registry.d.ts +10 -1
  406. package/dist/providers/registry.d.ts.map +1 -1
  407. package/dist/providers/registry.js.map +1 -1
  408. package/dist/providers/responses-websocket-sessions.d.ts +25 -0
  409. package/dist/providers/responses-websocket-sessions.d.ts.map +1 -0
  410. package/dist/providers/responses-websocket-sessions.js +102 -0
  411. package/dist/providers/responses-websocket-sessions.js.map +1 -0
  412. package/dist/providers/websocket-close-evidence.d.ts +45 -0
  413. package/dist/providers/websocket-close-evidence.d.ts.map +1 -0
  414. package/dist/providers/websocket-close-evidence.js +78 -0
  415. package/dist/providers/websocket-close-evidence.js.map +1 -0
  416. package/dist/providers/websocket-receive-watchdog.d.ts +9 -1
  417. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  418. package/dist/providers/websocket-receive-watchdog.js +27 -1
  419. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  420. package/dist/providers/websocket-request-dispatch.d.ts +35 -0
  421. package/dist/providers/websocket-request-dispatch.d.ts.map +1 -0
  422. package/dist/providers/websocket-request-dispatch.js +23 -0
  423. package/dist/providers/websocket-request-dispatch.js.map +1 -0
  424. package/dist/scripts/eval-context-compaction/runner.js +1 -1
  425. package/dist/scripts/eval-context-compaction/runner.js.map +1 -1
  426. package/dist/services/agent-runtime/agent-handle.d.ts.map +1 -1
  427. package/dist/services/agent-runtime/agent-handle.js +8 -5
  428. package/dist/services/agent-runtime/agent-handle.js.map +1 -1
  429. package/dist/services/agent-runtime/agent-runtime.d.ts +1 -1
  430. package/dist/services/agent-runtime/agent-runtime.js +1 -1
  431. package/dist/services/agent-runtime/application-run-loop.d.ts +33 -9
  432. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  433. package/dist/services/agent-runtime/application-run-loop.js +300 -87
  434. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  435. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +6 -1
  436. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
  437. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +72 -4
  438. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
  439. package/dist/services/agent-runtime/executor.d.ts +1 -1
  440. package/dist/services/agent-runtime/executor.d.ts.map +1 -1
  441. package/dist/services/agent-runtime/executor.js +5 -5
  442. package/dist/services/agent-runtime/executor.js.map +1 -1
  443. package/dist/services/agent-runtime/generation-guard.d.ts +2 -1
  444. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  445. package/dist/services/agent-runtime/generation-guard.js +7 -2
  446. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  447. package/dist/services/agent-runtime/run-budget.d.ts +131 -0
  448. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -0
  449. package/dist/services/agent-runtime/run-budget.js +268 -0
  450. package/dist/services/agent-runtime/run-budget.js.map +1 -0
  451. package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
  452. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
  453. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
  454. package/dist/services/agent-runtime/types.d.ts +5 -4
  455. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  456. package/dist/services/agent-stream.d.ts.map +1 -1
  457. package/dist/services/agent-stream.js +2 -1
  458. package/dist/services/agent-stream.js.map +1 -1
  459. package/dist/services/approval/approval-decision-executor.d.ts +6 -1
  460. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
  461. package/dist/services/approval/approval-decision-executor.js +15 -3
  462. package/dist/services/approval/approval-decision-executor.js.map +1 -1
  463. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  464. package/dist/services/approval/approval-decision-policy.js +3 -0
  465. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  466. package/dist/services/approval/approval-flow-coordinator.d.ts +2 -0
  467. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  468. package/dist/services/approval/approval-flow-coordinator.js +14 -2
  469. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  470. package/dist/services/approval/background-subagent-approval-controller.d.ts +3 -1
  471. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
  472. package/dist/services/approval/background-subagent-approval-controller.js +7 -4
  473. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
  474. package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
  475. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  476. package/dist/services/approval/shell-auto-approval-resolver.js +8 -0
  477. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  478. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  479. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -11
  480. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  481. package/dist/services/approval/tool-ownership-registry.d.ts +5 -1
  482. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -1
  483. package/dist/services/approval/tool-ownership-registry.js +5 -22
  484. package/dist/services/approval/tool-ownership-registry.js.map +1 -1
  485. package/dist/services/background-task-activity.d.ts +79 -0
  486. package/dist/services/background-task-activity.d.ts.map +1 -0
  487. package/dist/services/background-task-activity.js +34 -0
  488. package/dist/services/background-task-activity.js.map +1 -0
  489. package/dist/services/command-message-streaming.d.ts +4 -2
  490. package/dist/services/command-message-streaming.d.ts.map +1 -1
  491. package/dist/services/command-message-streaming.js +2 -2
  492. package/dist/services/command-message-streaming.js.map +1 -1
  493. package/dist/services/conversation/conversation-adapter-factory.d.ts +6 -2
  494. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  495. package/dist/services/conversation/conversation-adapter-factory.js +5 -1
  496. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  497. package/dist/services/conversation/conversation-adapter.d.ts +41 -9
  498. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  499. package/dist/services/conversation/conversation-adapter.js +218 -37
  500. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  501. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
  502. package/dist/services/conversation/conversation-decoder.js +4 -0
  503. package/dist/services/conversation/conversation-decoder.js.map +1 -1
  504. package/dist/services/conversation/conversation-events.d.ts +55 -2
  505. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  506. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  507. package/dist/services/conversation/conversation-orchestrator.js +103 -11
  508. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  509. package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -0
  510. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  511. package/dist/services/conversation/conversation-persistence.d.ts +38 -2
  512. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  513. package/dist/services/conversation/conversation-persistence.js +160 -16
  514. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  515. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  516. package/dist/services/conversation/conversation-replay.js +27 -0
  517. package/dist/services/conversation/conversation-replay.js.map +1 -1
  518. package/dist/services/conversation/conversation-result-builder.d.ts +6 -2
  519. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  520. package/dist/services/conversation/conversation-result-builder.js +60 -1
  521. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  522. package/dist/services/conversation/conversation-runtime-factory.d.ts +9 -1
  523. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  524. package/dist/services/conversation/conversation-runtime-factory.js +5 -1
  525. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  526. package/dist/services/conversation/conversation-service.d.ts +32 -3
  527. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  528. package/dist/services/conversation/conversation-service.js +82 -8
  529. package/dist/services/conversation/conversation-service.js.map +1 -1
  530. package/dist/services/conversation/conversation-state-projector.d.ts +2 -1
  531. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  532. package/dist/services/conversation/conversation-state-projector.js +31 -3
  533. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  534. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
  535. package/dist/services/conversation/run-item-normalizer.js +24 -1
  536. package/dist/services/conversation/run-item-normalizer.js.map +1 -1
  537. package/dist/services/conversation-agent-client.d.ts +21 -2
  538. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  539. package/dist/services/cost/model-cost.d.ts +13 -1
  540. package/dist/services/cost/model-cost.d.ts.map +1 -1
  541. package/dist/services/cost/model-cost.js +59 -0
  542. package/dist/services/cost/model-cost.js.map +1 -1
  543. package/dist/services/cost/subscription-providers.d.ts +2 -0
  544. package/dist/services/cost/subscription-providers.d.ts.map +1 -0
  545. package/dist/services/cost/subscription-providers.js +14 -0
  546. package/dist/services/cost/subscription-providers.js.map +1 -0
  547. package/dist/services/grok/grok-credit-usage-service.d.ts +62 -0
  548. package/dist/services/grok/grok-credit-usage-service.d.ts.map +1 -0
  549. package/dist/services/grok/grok-credit-usage-service.js +137 -0
  550. package/dist/services/grok/grok-credit-usage-service.js.map +1 -0
  551. package/dist/services/history-service.d.ts +9 -0
  552. package/dist/services/history-service.d.ts.map +1 -1
  553. package/dist/services/history-service.js +49 -2
  554. package/dist/services/history-service.js.map +1 -1
  555. package/dist/services/hooks/hook-composition.d.ts +17 -0
  556. package/dist/services/hooks/hook-composition.d.ts.map +1 -0
  557. package/dist/services/hooks/hook-composition.js +19 -0
  558. package/dist/services/hooks/hook-composition.js.map +1 -0
  559. package/dist/services/logging/conversation-log-events.d.ts +35 -1
  560. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  561. package/dist/services/logging/conversation-log-events.js +17 -0
  562. package/dist/services/logging/conversation-log-events.js.map +1 -1
  563. package/dist/services/logging/conversation-log-writer.d.ts +8 -1
  564. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  565. package/dist/services/logging/conversation-log-writer.js +145 -10
  566. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  567. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  568. package/dist/services/logging/conversation-logger.js +18 -0
  569. package/dist/services/logging/conversation-logger.js.map +1 -1
  570. package/dist/services/logging/logging-service.d.ts +6 -6
  571. package/dist/services/logging/logging-service.d.ts.map +1 -1
  572. package/dist/services/logging/logging-service.js.map +1 -1
  573. package/dist/services/logging/provider-traffic.d.ts +17 -1
  574. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  575. package/dist/services/logging/provider-traffic.js +283 -139
  576. package/dist/services/logging/provider-traffic.js.map +1 -1
  577. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  578. package/dist/services/memory/memory-capabilities.js +20 -1
  579. package/dist/services/memory/memory-capabilities.js.map +1 -1
  580. package/dist/services/mode-notices.d.ts +1 -6
  581. package/dist/services/mode-notices.d.ts.map +1 -1
  582. package/dist/services/mode-notices.js +16 -3
  583. package/dist/services/mode-notices.js.map +1 -1
  584. package/dist/services/model-service.d.ts +2 -2
  585. package/dist/services/model-service.d.ts.map +1 -1
  586. package/dist/services/model-service.js.map +1 -1
  587. package/dist/services/queue/queue-controller.d.ts +1 -1
  588. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  589. package/dist/services/queue/queue-controller.js +19 -5
  590. package/dist/services/queue/queue-controller.js.map +1 -1
  591. package/dist/services/retry/chain-recovery-fingerprint.d.ts +10 -0
  592. package/dist/services/retry/chain-recovery-fingerprint.d.ts.map +1 -0
  593. package/dist/services/retry/chain-recovery-fingerprint.js +23 -0
  594. package/dist/services/retry/chain-recovery-fingerprint.js.map +1 -0
  595. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  596. package/dist/services/retry/recovery-executor.js +2 -0
  597. package/dist/services/retry/recovery-executor.js.map +1 -1
  598. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  599. package/dist/services/retry/recovery-policy.js +4 -0
  600. package/dist/services/retry/recovery-policy.js.map +1 -1
  601. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  602. package/dist/services/retry/retry-classifier.js +34 -2
  603. package/dist/services/retry/retry-classifier.js.map +1 -1
  604. package/dist/services/retry/retry-contracts.d.ts +14 -0
  605. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  606. package/dist/services/retry/retry-error-classification.d.ts +17 -3
  607. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  608. package/dist/services/retry/retry-error-classification.js +48 -7
  609. package/dist/services/retry/retry-error-classification.js.map +1 -1
  610. package/dist/services/retry/retry-errors.d.ts +4 -0
  611. package/dist/services/retry/retry-errors.d.ts.map +1 -1
  612. package/dist/services/retry/retry-errors.js +7 -0
  613. package/dist/services/retry/retry-errors.js.map +1 -1
  614. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  615. package/dist/services/retry/retry-event-presenter.js +20 -0
  616. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  617. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  618. package/dist/services/runtime-setting-router.js +6 -0
  619. package/dist/services/runtime-setting-router.js.map +1 -1
  620. package/dist/services/service-interfaces.d.ts +96 -13
  621. package/dist/services/service-interfaces.d.ts.map +1 -1
  622. package/dist/services/session/background-task-control.d.ts +6 -0
  623. package/dist/services/session/background-task-control.d.ts.map +1 -1
  624. package/dist/services/session/background-task-control.js +31 -6
  625. package/dist/services/session/background-task-control.js.map +1 -1
  626. package/dist/services/session/background-task-liveness.d.ts +2 -18
  627. package/dist/services/session/background-task-liveness.d.ts.map +1 -1
  628. package/dist/services/session/background-task-liveness.js +7 -22
  629. package/dist/services/session/background-task-liveness.js.map +1 -1
  630. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  631. package/dist/services/session/continuation-plan-applier.js +23 -0
  632. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  633. package/dist/services/session/continuation-recovery-handler.d.ts +2 -0
  634. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  635. package/dist/services/session/continuation-recovery-handler.js +7 -1
  636. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  637. package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -0
  638. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  639. package/dist/services/session/initial-turn-recovery-handler.js +12 -2
  640. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  641. package/dist/services/session/session-client-factory.d.ts +3 -1
  642. package/dist/services/session/session-client-factory.d.ts.map +1 -1
  643. package/dist/services/session/session-client-factory.js +2 -2
  644. package/dist/services/session/session-client-factory.js.map +1 -1
  645. package/dist/services/session/session-composition.d.ts +3 -0
  646. package/dist/services/session/session-composition.d.ts.map +1 -1
  647. package/dist/services/session/session-composition.js +52 -8
  648. package/dist/services/session/session-composition.js.map +1 -1
  649. package/dist/services/session/session-stream-processor.d.ts +2 -0
  650. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  651. package/dist/services/session/session-stream-processor.js +4 -0
  652. package/dist/services/session/session-stream-processor.js.map +1 -1
  653. package/dist/services/session/terminal-result-collector.d.ts +2 -2
  654. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  655. package/dist/services/session/terminal-result-collector.js +2 -1
  656. package/dist/services/session/terminal-result-collector.js.map +1 -1
  657. package/dist/services/session/turn-attempt-factory.d.ts +1 -0
  658. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  659. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  660. package/dist/services/session/turn-coordinator.d.ts +1 -1
  661. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  662. package/dist/services/session/turn-coordinator.js +31 -6
  663. package/dist/services/session/turn-coordinator.js.map +1 -1
  664. package/dist/services/session/turn-workflow.d.ts +4 -1
  665. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  666. package/dist/services/session/turn-workflow.js +48 -7
  667. package/dist/services/session/turn-workflow.js.map +1 -1
  668. package/dist/services/settings/settings-persistence.d.ts +33 -0
  669. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  670. package/dist/services/settings/settings-persistence.js +102 -4
  671. package/dist/services/settings/settings-persistence.js.map +1 -1
  672. package/dist/services/settings/settings-schema.d.ts +70 -2
  673. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  674. package/dist/services/settings/settings-schema.js +92 -6
  675. package/dist/services/settings/settings-schema.js.map +1 -1
  676. package/dist/services/settings/settings-service.d.ts +57 -3
  677. package/dist/services/settings/settings-service.d.ts.map +1 -1
  678. package/dist/services/settings/settings-service.js +171 -28
  679. package/dist/services/settings/settings-service.js.map +1 -1
  680. package/dist/services/settings/settings-service.mock.d.ts +1 -1
  681. package/dist/services/settings/settings-service.mock.d.ts.map +1 -1
  682. package/dist/services/settings/settings-service.mock.js +3 -6
  683. package/dist/services/settings/settings-service.mock.js.map +1 -1
  684. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  685. package/dist/services/settings/settings-sources.js +16 -0
  686. package/dist/services/settings/settings-sources.js.map +1 -1
  687. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +27 -0
  688. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -0
  689. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +165 -0
  690. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -0
  691. package/dist/services/shell/background-shell-registry.d.ts +10 -0
  692. package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
  693. package/dist/services/shell/background-shell-registry.js +9 -1
  694. package/dist/services/shell/background-shell-registry.js.map +1 -1
  695. package/dist/services/shell/background-shell-watches.d.ts +28 -3
  696. package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
  697. package/dist/services/shell/background-shell-watches.js +41 -9
  698. package/dist/services/shell/background-shell-watches.js.map +1 -1
  699. package/dist/services/ssh-service.d.ts +81 -9
  700. package/dist/services/ssh-service.d.ts.map +1 -1
  701. package/dist/services/ssh-service.js +211 -37
  702. package/dist/services/ssh-service.js.map +1 -1
  703. package/dist/services/stream-event-processor.d.ts +2 -0
  704. package/dist/services/stream-event-processor.d.ts.map +1 -1
  705. package/dist/services/stream-event-processor.js +17 -7
  706. package/dist/services/stream-event-processor.js.map +1 -1
  707. package/dist/services/subagents/execution-runner.d.ts +1 -1
  708. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  709. package/dist/services/subagents/execution-runner.js +34 -22
  710. package/dist/services/subagents/execution-runner.js.map +1 -1
  711. package/dist/services/subagents/foreground-subagent-lease.d.ts +11 -1
  712. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
  713. package/dist/services/subagents/foreground-subagent-lease.js +10 -1
  714. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
  715. package/dist/services/subagents/mentor-runner.d.ts +1 -1
  716. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  717. package/dist/services/subagents/mentor-runner.js +10 -3
  718. package/dist/services/subagents/mentor-runner.js.map +1 -1
  719. package/dist/services/subagents/nested-runner.d.ts +11 -1
  720. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  721. package/dist/services/subagents/nested-runner.js +45 -10
  722. package/dist/services/subagents/nested-runner.js.map +1 -1
  723. package/dist/services/subagents/runtime.d.ts.map +1 -1
  724. package/dist/services/subagents/runtime.js +7 -0
  725. package/dist/services/subagents/runtime.js.map +1 -1
  726. package/dist/services/subagents/subagent-async-registry.d.ts +4 -0
  727. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  728. package/dist/services/subagents/subagent-async-registry.js +80 -16
  729. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  730. package/dist/services/subagents/subagent-manager.d.ts +1 -1
  731. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  732. package/dist/services/subagents/subagent-manager.js +4 -4
  733. package/dist/services/subagents/subagent-manager.js.map +1 -1
  734. package/dist/services/subagents/subagent-notification-store.d.ts +19 -1
  735. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  736. package/dist/services/subagents/subagent-notification-store.js +22 -0
  737. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  738. package/dist/services/subagents/subagent-run-control.d.ts +9 -1
  739. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
  740. package/dist/services/subagents/subagent-run-control.js +12 -13
  741. package/dist/services/subagents/subagent-run-control.js.map +1 -1
  742. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  743. package/dist/services/subagents/tool-policy.js +11 -3
  744. package/dist/services/subagents/tool-policy.js.map +1 -1
  745. package/dist/services/subagents/types.d.ts +25 -2
  746. package/dist/services/subagents/types.d.ts.map +1 -1
  747. package/dist/services/subagents/types.js.map +1 -1
  748. package/dist/services/subagents/utils.d.ts +3 -1
  749. package/dist/services/subagents/utils.d.ts.map +1 -1
  750. package/dist/services/subagents/utils.js +4 -2
  751. package/dist/services/subagents/utils.js.map +1 -1
  752. package/dist/services/workspace/active-workspace-root.d.ts +6 -0
  753. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -1
  754. package/dist/services/workspace/active-workspace-root.js +22 -0
  755. package/dist/services/workspace/active-workspace-root.js.map +1 -1
  756. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  757. package/dist/test-helpers/ink-testing.js +4 -1
  758. package/dist/test-helpers/ink-testing.js.map +1 -1
  759. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
  760. package/dist/test-helpers/terminal-e2e.js +12 -2
  761. package/dist/test-helpers/terminal-e2e.js.map +1 -1
  762. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  763. package/dist/tools/agent/activate-skill.js +2 -2
  764. package/dist/tools/agent/activate-skill.js.map +1 -1
  765. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  766. package/dist/tools/agent/ask-mentor.js +2 -2
  767. package/dist/tools/agent/ask-mentor.js.map +1 -1
  768. package/dist/tools/agent/ask-user-constants.d.ts +2 -2
  769. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  770. package/dist/tools/agent/ask-user-constants.js +1 -1
  771. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  772. package/dist/tools/agent/run-subagent-async.d.ts +2 -11
  773. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  774. package/dist/tools/agent/run-subagent-async.js +8 -2
  775. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  776. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  777. package/dist/tools/agent/run-subagent.js +8 -9
  778. package/dist/tools/agent/run-subagent.js.map +1 -1
  779. package/dist/tools/file/apply-patch.d.ts +2 -0
  780. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  781. package/dist/tools/file/apply-patch.js +58 -14
  782. package/dist/tools/file/apply-patch.js.map +1 -1
  783. package/dist/tools/file/code-context.d.ts +5 -0
  784. package/dist/tools/file/code-context.d.ts.map +1 -1
  785. package/dist/tools/file/code-context.js +18 -6
  786. package/dist/tools/file/code-context.js.map +1 -1
  787. package/dist/tools/file/create-file.d.ts.map +1 -1
  788. package/dist/tools/file/create-file.js +11 -5
  789. package/dist/tools/file/create-file.js.map +1 -1
  790. package/dist/tools/file/edit-healing.d.ts +7 -0
  791. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  792. package/dist/tools/file/edit-healing.js +7 -7
  793. package/dist/tools/file/edit-healing.js.map +1 -1
  794. package/dist/tools/file/glob.d.ts +3 -0
  795. package/dist/tools/file/glob.d.ts.map +1 -1
  796. package/dist/tools/file/glob.js +9 -3
  797. package/dist/tools/file/glob.js.map +1 -1
  798. package/dist/tools/file/grep.d.ts +5 -0
  799. package/dist/tools/file/grep.d.ts.map +1 -1
  800. package/dist/tools/file/grep.js +10 -6
  801. package/dist/tools/file/grep.js.map +1 -1
  802. package/dist/tools/file/patch-healing.d.ts +31 -0
  803. package/dist/tools/file/patch-healing.d.ts.map +1 -0
  804. package/dist/tools/file/patch-healing.js +231 -0
  805. package/dist/tools/file/patch-healing.js.map +1 -0
  806. package/dist/tools/file/read-file.d.ts +3 -0
  807. package/dist/tools/file/read-file.d.ts.map +1 -1
  808. package/dist/tools/file/read-file.js +9 -3
  809. package/dist/tools/file/read-file.js.map +1 -1
  810. package/dist/tools/file/search-replace.d.ts.map +1 -1
  811. package/dist/tools/file/search-replace.js +24 -6
  812. package/dist/tools/file/search-replace.js.map +1 -1
  813. package/dist/tools/format-helpers.d.ts +6 -0
  814. package/dist/tools/format-helpers.d.ts.map +1 -1
  815. package/dist/tools/format-helpers.js +23 -0
  816. package/dist/tools/format-helpers.js.map +1 -1
  817. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  818. package/dist/tools/memory/memory-tools.js +2 -2
  819. package/dist/tools/memory/memory-tools.js.map +1 -1
  820. package/dist/tools/system/shell.d.ts +16 -1
  821. package/dist/tools/system/shell.d.ts.map +1 -1
  822. package/dist/tools/system/shell.js +90 -25
  823. package/dist/tools/system/shell.js.map +1 -1
  824. package/dist/tools/types.d.ts +4 -0
  825. package/dist/tools/types.d.ts.map +1 -1
  826. package/dist/tools/types.js.map +1 -1
  827. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  828. package/dist/tools/web/web-fetch.js +2 -2
  829. package/dist/tools/web/web-fetch.js.map +1 -1
  830. package/dist/tools/web/web-search.d.ts.map +1 -1
  831. package/dist/tools/web/web-search.js +2 -2
  832. package/dist/tools/web/web-search.js.map +1 -1
  833. package/dist/types/message.d.ts +1 -1
  834. package/dist/types/message.d.ts.map +1 -1
  835. package/dist/utils/ai/provider-credentials.d.ts +1 -1
  836. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  837. package/dist/utils/ai/provider-credentials.js +18 -2
  838. package/dist/utils/ai/provider-credentials.js.map +1 -1
  839. package/dist/utils/ai/token-usage.d.ts +3 -1
  840. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  841. package/dist/utils/ai/token-usage.js +7 -2
  842. package/dist/utils/ai/token-usage.js.map +1 -1
  843. package/dist/utils/apply-diff.d.ts.map +1 -1
  844. package/dist/utils/apply-diff.js +8 -0
  845. package/dist/utils/apply-diff.js.map +1 -1
  846. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  847. package/dist/utils/conversation/conversation-event-handler.js +60 -2
  848. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  849. package/dist/utils/error-helpers.d.ts.map +1 -1
  850. package/dist/utils/error-helpers.js +8 -0
  851. package/dist/utils/error-helpers.js.map +1 -1
  852. package/dist/utils/inject-warning-into-tool-output.d.ts +30 -0
  853. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  854. package/dist/utils/inject-warning-into-tool-output.js +39 -0
  855. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  856. package/dist/utils/output/tty-osc.d.ts +1 -1
  857. package/dist/utils/output/tty-osc.js +1 -1
  858. package/dist/utils/settings-command.d.ts.map +1 -1
  859. package/dist/utils/settings-command.js +105 -6
  860. package/dist/utils/settings-command.js.map +1 -1
  861. package/dist/utils/shell/execute-shell.d.ts +8 -0
  862. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  863. package/dist/utils/shell/execute-shell.js +36 -30
  864. package/dist/utils/shell/execute-shell.js.map +1 -1
  865. package/dist/utils/shell/sandbox/sandbox-env.d.ts +1 -0
  866. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  867. package/dist/utils/shell/sandbox/sandbox-env.js +2 -0
  868. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  869. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
  870. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  871. package/dist/utils/shell/sandbox/sandbox-policy.js +1 -1
  872. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  873. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  874. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +1 -2
  875. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  876. package/dist/utils/shell/shell-child-registry.d.ts +11 -0
  877. package/dist/utils/shell/shell-child-registry.d.ts.map +1 -0
  878. package/dist/utils/shell/shell-child-registry.js +40 -0
  879. package/dist/utils/shell/shell-child-registry.js.map +1 -0
  880. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  881. package/dist/utils/shell/shell-output.js +10 -6
  882. package/dist/utils/shell/shell-output.js.map +1 -1
  883. package/dist/utils/shell/temp-sweep.d.ts +28 -0
  884. package/dist/utils/shell/temp-sweep.d.ts.map +1 -0
  885. package/dist/utils/shell/temp-sweep.js +140 -0
  886. package/dist/utils/shell/temp-sweep.js.map +1 -0
  887. package/dist/utils/streaming/extract-command-messages.d.ts +12 -5
  888. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  889. package/dist/utils/streaming/extract-command-messages.js +29 -33
  890. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  891. package/dist/utils/streaming/streaming-session-factory.d.ts +8 -0
  892. package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
  893. package/dist/utils/streaming/streaming-session-factory.js +3 -0
  894. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  895. package/dist/utils/value-suggestions.d.ts +8 -0
  896. package/dist/utils/value-suggestions.d.ts.map +1 -1
  897. package/dist/utils/value-suggestions.js +71 -0
  898. package/dist/utils/value-suggestions.js.map +1 -1
  899. package/package.json +14 -10
  900. package/dist/utils/output/synchronized-output.d.ts +0 -35
  901. package/dist/utils/output/synchronized-output.d.ts.map +0 -1
  902. package/dist/utils/output/synchronized-output.js +0 -66
  903. package/dist/utils/output/synchronized-output.js.map +0 -1
@@ -5,13 +5,15 @@ import { isZodToolParameterSchema } from '../../tools/types.js';
5
5
  import { normalizeToolParameters } from '../../lib/tool-invoke.js';
6
6
  import { isCancellationError, isHarnessInvariantError } from '../../lib/harness-invariant-error.js';
7
7
  import { ApprovalLedger } from './tool-invocation-context.js';
8
+ import { RunBudget, isRunBudgetInteraction, } from './run-budget.js';
8
9
  import { addTokenUsage, normalizeUsage } from '../../utils/ai/token-usage.js';
9
10
  import { computeModelCost } from '../../services/cost/model-cost.js';
10
11
  import { getCatalogPricingVersion, getModelPricing } from '../../services/cost/pricing.js';
11
12
  import { GenerationDeadline, GenerationGuard, GenerationGuardError, } from './generation-guard.js';
12
13
  /**
13
- * Raised when a run exceeds its `maxTurns` budget. The loop owns turn counting
14
- * — the SDK-era `callModelInputFilter` hook is deliberately not reintroduced.
14
+ * Compatibility error for legacy callers without a staged run budget. The loop
15
+ * owns turn counting — the SDK-era `callModelInputFilter` hook is deliberately
16
+ * not reintroduced.
15
17
  */
16
18
  export class MaxTurnsExceededError extends Error {
17
19
  maxTurns;
@@ -66,7 +68,7 @@ class EventQueue {
66
68
  */
67
69
  let nextCostRequestSeq = 0;
68
70
  let nextToolBatchSeq = 0;
69
- const DEFAULT_MAX_PARALLEL_TOOL_CALLS = 4;
71
+ const DEFAULT_MAX_PARALLEL_TOOL_CALLS = 3;
70
72
  /**
71
73
  * Small provider-neutral agent loop. It owns model-turn sequencing and tool
72
74
  * execution; providers only implement `StreamedModelTurn`.
@@ -74,7 +76,6 @@ const DEFAULT_MAX_PARALLEL_TOOL_CALLS = 4;
74
76
  export class ApplicationRunLoop {
75
77
  #deps;
76
78
  #contextCompactionSessionState;
77
- #maxParallelToolCalls;
78
79
  #activeAbortController = null;
79
80
  #runInFlight = false;
80
81
  #segmentGeneration = 0;
@@ -97,10 +98,11 @@ export class ApplicationRunLoop {
97
98
  */
98
99
  #turnOpen = false;
99
100
  #pendingSteers = [];
101
+ /** The run whose budget an out-of-band grant applies to, held across a pause. */
102
+ #activeRunBudgetState;
100
103
  constructor(deps) {
101
104
  this.#deps = deps;
102
105
  this.#contextCompactionSessionState = deps.contextCompactionSessionState ?? { disabled: false };
103
- this.#maxParallelToolCalls = Math.max(1, Math.floor(deps.maxParallelToolCalls ?? DEFAULT_MAX_PARALLEL_TOOL_CALLS));
104
106
  }
105
107
  /**
106
108
  * Declare a turn open, making it steerable before its first run exists.
@@ -139,6 +141,38 @@ export class ApplicationRunLoop {
139
141
  this.#activeAbortController?.abort();
140
142
  this.#activeAbortController = null;
141
143
  }
144
+ /**
145
+ * Grant one finite continuation extension to the current logical run.
146
+ *
147
+ * The interactive prompt calls this before resuming because it has to show
148
+ * the human a refusal rather than a silent stop. The grant is recorded so the
149
+ * matching `approve` does not charge a second one.
150
+ */
151
+ grantRunBudgetExtension(grantedBy = 'human') {
152
+ const state = this.#activeRunBudgetState;
153
+ if (!state?.runBudget)
154
+ return { granted: false, extensionsGranted: 0 };
155
+ const grant = state.runBudget.grantExtension(grantedBy);
156
+ if (grant.granted)
157
+ state.runBudgetGrantConsumed = true;
158
+ return grant;
159
+ }
160
+ /**
161
+ * Charge this interaction's extension unless a caller already took it.
162
+ *
163
+ * An ungranted arrival here means nobody was prompted — the continuation
164
+ * applier, non-interactive mode, `--auto-approve`. That is a parent-class
165
+ * grant, so it is capped and eventually refuses.
166
+ */
167
+ #takeRunBudgetGrant(state) {
168
+ if (state.runBudgetGrantConsumed) {
169
+ state.runBudgetGrantConsumed = false;
170
+ return true;
171
+ }
172
+ if (!state.runBudget)
173
+ return true;
174
+ return state.runBudget.grantExtension('parent').granted;
175
+ }
142
176
  /**
143
177
  * Hand the running turn a user message to send with its next model request.
144
178
  *
@@ -255,7 +289,9 @@ export class ApplicationRunLoop {
255
289
  history: normalizeHistory(input),
256
290
  // A response ID is usable only after its provider origin is recorded.
257
291
  // This also makes old callers that omit providerId fail closed.
258
- responseId: options.providerId && options.supportsConversationChaining === true
292
+ responseId: options.disableChainingForAttempt !== true &&
293
+ options.providerId &&
294
+ options.supportsConversationChaining === true
259
295
  ? options.previousResponseId ?? undefined
260
296
  : undefined,
261
297
  pendingApprovals: [],
@@ -265,6 +301,7 @@ export class ApplicationRunLoop {
265
301
  ? options.providerId
266
302
  : undefined,
267
303
  requestPreparation: options.requestPreparation,
304
+ disableChainingForAttempt: options.disableChainingForAttempt === true,
268
305
  sessionId: options.sessionId,
269
306
  turnId: options.turnId,
270
307
  hookScope: options.hookScope,
@@ -272,13 +309,36 @@ export class ApplicationRunLoop {
272
309
  approvals: options.approvals ?? new ApprovalLedger(),
273
310
  turnCount: 0,
274
311
  maxTurns: options.maxTurns,
312
+ ...(options.runBudget
313
+ ? {
314
+ runBudget: new RunBudget(options.runBudget),
315
+ onRunBudgetEvent: options.onRunBudgetEvent,
316
+ wrapUpOnCriticalRunBudget: options.wrapUpOnCriticalRunBudget,
317
+ runBudgetEscalation: options.runBudget.escalation,
318
+ }
319
+ : {}),
275
320
  automaticCompactionsThisRun: 0,
276
321
  };
277
322
  state.approve = (interruption) => {
323
+ if (isRunBudgetInteraction(interruption)) {
324
+ // Continuing past an exhausted envelope must cost a finite extension no
325
+ // matter which surface answered. A caller that already took the grant
326
+ // (the interactive prompt, which needs the outcome before resuming)
327
+ // marks it consumed; every other path — the continuation applier,
328
+ // non-interactive, --auto-approve — lands here ungranted and takes it
329
+ // now. Without this, an auto-approved 'y' would resume with every stage
330
+ // still latched and never check in again.
331
+ state.runBudgetInteractionDecision = this.#takeRunBudgetGrant(state) ? 'continue' : 'stop';
332
+ return;
333
+ }
278
334
  state.approvalDecision = 'approved';
279
335
  state.approvalDecisionCallId = getInterruptionCallId(interruption);
280
336
  };
281
337
  state.reject = (interruption, approvalOptions) => {
338
+ if (isRunBudgetInteraction(interruption)) {
339
+ state.runBudgetInteractionDecision = 'stop';
340
+ return;
341
+ }
282
342
  state.approvalDecision = 'rejected';
283
343
  state.approvalDecisionCallId = getInterruptionCallId(interruption);
284
344
  state.approvalMessage = approvalOptions?.message;
@@ -304,6 +364,15 @@ export class ApplicationRunLoop {
304
364
  // Handles created before cost accounting existed have no record list.
305
365
  if (!state.costRecords)
306
366
  state.costRecords = [];
367
+ if (!state.runBudget && options.runBudget) {
368
+ state.runBudget = new RunBudget(options.runBudget);
369
+ }
370
+ if (options.runBudget)
371
+ state.runBudgetEscalation = options.runBudget.escalation;
372
+ if (options.onRunBudgetEvent)
373
+ state.onRunBudgetEvent = options.onRunBudgetEvent;
374
+ if (options.wrapUpOnCriticalRunBudget)
375
+ state.wrapUpOnCriticalRunBudget = true;
307
376
  // Response IDs are provider-owned. A handle from before provenance was
308
377
  // recorded, a missing providerId, or a provider switch must never forward
309
378
  // its opaque ID. In particular, do not use previousResponseId as a
@@ -342,6 +411,11 @@ export class ApplicationRunLoop {
342
411
  // root closure for callers that do not provide one again.
343
412
  if (options.requestPreparation)
344
413
  state.requestPreparation = options.requestPreparation;
414
+ if (options.disableChainingForAttempt === true) {
415
+ state.disableChainingForAttempt = true;
416
+ state.responseId = undefined;
417
+ state.responseProviderId = undefined;
418
+ }
345
419
  if (options.sessionId !== undefined)
346
420
  state.sessionId = options.sessionId;
347
421
  if (options.turnId !== undefined)
@@ -357,6 +431,7 @@ export class ApplicationRunLoop {
357
431
  const controller = new AbortController();
358
432
  this.#activeAbortController = controller;
359
433
  this.#runInFlight = true;
434
+ state.runBudget?.resume();
360
435
  // This segment is running, so the turn is no longer paused between them.
361
436
  this.#turnPaused = false;
362
437
  if (options.signal) {
@@ -375,6 +450,15 @@ export class ApplicationRunLoop {
375
450
  get turn() {
376
451
  return { count: state.turnCount, max: state.maxTurns };
377
452
  },
453
+ get budget() {
454
+ return state.runBudget
455
+ ? {
456
+ takeSoftEvidence: () => state.runBudget?.takeSoftEvidence(),
457
+ takeStallEvidence: () => state.runBudget?.takeStallEvidence(),
458
+ remainingPolicy: () => state.runBudget?.remainingPolicy(),
459
+ }
460
+ : undefined;
461
+ },
378
462
  };
379
463
  const output = [];
380
464
  const stream = createAgentStream({
@@ -404,6 +488,7 @@ export class ApplicationRunLoop {
404
488
  throw error;
405
489
  })
406
490
  .finally(() => {
491
+ state.runBudget?.pause();
407
492
  if (segmentGeneration !== this.#segmentGeneration)
408
493
  return;
409
494
  if (this.#activeAbortController === controller)
@@ -415,10 +500,13 @@ export class ApplicationRunLoop {
415
500
  // that ends with nothing outstanding has truly finished the turn, and
416
501
  // then anything still waiting has to be sent as its own turn instead.
417
502
  const pendingApprovals = state.pendingApprovals?.length ?? 0;
503
+ const pendingBudgetInteraction = state.pendingRunBudgetInteraction !== undefined;
418
504
  const cancelled = stream.cancelled === true;
419
- this.#turnPaused = pendingApprovals > 0 && !cancelled && exitError === undefined;
505
+ this.#turnPaused = (pendingApprovals > 0 || pendingBudgetInteraction) && !cancelled && exitError === undefined;
420
506
  if (this.#turnPaused)
421
507
  return;
508
+ if (this.#activeRunBudgetState === state)
509
+ this.#activeRunBudgetState = undefined;
422
510
  // A declared turn outlives its segments — this one may be about to be
423
511
  // retried, or resumed past a post-execute gate. Its owner says when it
424
512
  // is over.
@@ -426,17 +514,33 @@ export class ApplicationRunLoop {
426
514
  return;
427
515
  this.#releasePendingSteers({
428
516
  pendingApprovals,
517
+ pendingBudgetInteraction,
429
518
  cancelled,
430
519
  error: exitError instanceof Error ? exitError.name : exitError ? String(exitError) : undefined,
431
520
  turnCount: state.turnCount,
432
521
  });
433
522
  });
523
+ this.#activeRunBudgetState = state.runBudget ? state : undefined;
434
524
  return stream;
435
525
  }
436
526
  async #execute(state, stream, queue, options, toolContext, requestAbortController) {
437
527
  while (true) {
438
528
  if (options.signal?.aborted)
439
529
  throw Object.assign(new Error('Operation aborted'), { name: 'AbortError' });
530
+ if (state.pendingRunBudgetInteraction) {
531
+ if (state.runBudgetInteractionDecision === 'stop') {
532
+ state.pendingRunBudgetInteraction = undefined;
533
+ state.runBudgetInteractionDecision = undefined;
534
+ return finish(stream, state, queue);
535
+ }
536
+ if (state.runBudgetInteractionDecision === 'continue') {
537
+ state.pendingRunBudgetInteraction = undefined;
538
+ state.runBudgetInteractionDecision = undefined;
539
+ }
540
+ else {
541
+ return this.#pauseForRunBudgetInteraction(state, stream, queue);
542
+ }
543
+ }
440
544
  state.pendingApprovals ??= state.pendingApproval ? [state.pendingApproval] : [];
441
545
  if (state.pendingApprovals.length > 0 && state.approvalDecision) {
442
546
  const selectedIndex = state.approvalDecisionCallId
@@ -475,52 +579,82 @@ export class ApplicationRunLoop {
475
579
  if (options.stopAfterApprovalResolution)
476
580
  return finish(stream, state, queue);
477
581
  }
582
+ // A budget interaction can park a response after its tool calls are
583
+ // recorded but before any body runs. Resume those retained calls only
584
+ // after processing an ordinary approval decision for that same plan.
585
+ if (state.toolPlan) {
586
+ await this.#settleToolPlan(state, stream, queue, toolContext);
587
+ if (state.pendingApprovals?.length) {
588
+ stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
589
+ this.#turnPaused = true;
590
+ return finish(stream, state, queue);
591
+ }
592
+ }
478
593
  // The request boundary: every tool result of the previous round is in
479
594
  // history, and the next request has not been built. A user message
480
595
  // admitted here reaches the model in sequence, mid-turn.
481
- this.#admitPendingSteers(state, stream, queue);
482
- if (options.boundaryCompaction) {
483
- const compactionStartedAt = Date.now();
484
- const compaction = await options.boundaryCompaction.compact({
485
- history: state.history,
486
- automaticCompactionsThisRun: state.automaticCompactionsThisRun ?? 0,
487
- signal: options.signal,
488
- onStarted: (provider) => outputPush(stream, queue, { type: 'context_compaction_started', provider, strategy: 'local' }),
489
- });
490
- if (compaction.kind === 'compacted') {
491
- state.history.splice(0, state.history.length, ...compaction.history);
492
- state.input.splice(0, state.input.length, ...normalizeApplicationInput(compaction.modelInput));
493
- state.responseId = undefined;
494
- state.responseProviderId = undefined;
495
- if (compaction.costRecords?.length) {
496
- state.costRecords ??= [];
497
- state.costRecords.push(...compaction.costRecords);
498
- }
499
- state.automaticCompactionsThisRun = (state.automaticCompactionsThisRun ?? 0) + 1;
500
- outputPush(stream, queue, {
501
- type: 'context_compaction_completed',
502
- provider: state.currentProviderId ?? 'unknown',
503
- strategy: 'local',
504
- durationMs: Math.max(0, Date.now() - compactionStartedAt),
596
+ if (!state.requestBoundaryReady) {
597
+ this.#admitPendingSteers(state, stream, queue);
598
+ this.#evaluateRunBudget(state, stream, queue);
599
+ if (state.pendingRunBudgetInteraction)
600
+ return this.#pauseForRunBudgetInteraction(state, stream, queue);
601
+ if (options.boundaryCompaction) {
602
+ const compactionStartedAt = Date.now();
603
+ const compaction = await options.boundaryCompaction.compact({
604
+ history: state.history,
605
+ automaticCompactionsThisRun: state.automaticCompactionsThisRun ?? 0,
606
+ signal: options.signal,
607
+ onStarted: (provider) => outputPush(stream, queue, { type: 'context_compaction_started', provider, strategy: 'local' }),
505
608
  });
609
+ if (compaction.kind === 'compacted') {
610
+ state.history.splice(0, state.history.length, ...compaction.history);
611
+ state.input.splice(0, state.input.length, ...normalizeApplicationInput(compaction.modelInput));
612
+ state.responseId = undefined;
613
+ state.responseProviderId = undefined;
614
+ if (compaction.costRecords?.length) {
615
+ state.costRecords ??= [];
616
+ state.costRecords.push(...compaction.costRecords);
617
+ }
618
+ state.automaticCompactionsThisRun = (state.automaticCompactionsThisRun ?? 0) + 1;
619
+ outputPush(stream, queue, {
620
+ type: 'context_compaction_completed',
621
+ provider: state.currentProviderId ?? 'unknown',
622
+ strategy: 'local',
623
+ durationMs: Math.max(0, Date.now() - compactionStartedAt),
624
+ });
625
+ }
626
+ else if (compaction.kind === 'failed') {
627
+ outputPush(stream, queue, {
628
+ type: 'context_compaction_failed',
629
+ provider: compaction.provider,
630
+ strategy: 'local',
631
+ durationMs: Math.max(0, Date.now() - compactionStartedAt),
632
+ });
633
+ }
634
+ // Summarization is an asynchronous part of this same request
635
+ // boundary. Admit anything that arrived while it was in flight after
636
+ // applying a replacement, so the steer cannot be overwritten by the
637
+ // checkpoint or miss a terminal model request.
638
+ this.#admitPendingSteers(state, stream, queue);
639
+ this.#evaluateRunBudget(state, stream, queue);
640
+ if (state.pendingRunBudgetInteraction)
641
+ return this.#pauseForRunBudgetInteraction(state, stream, queue);
506
642
  }
507
- else if (compaction.kind === 'failed') {
508
- outputPush(stream, queue, {
509
- type: 'context_compaction_failed',
510
- provider: compaction.provider,
511
- strategy: 'local',
512
- durationMs: Math.max(0, Date.now() - compactionStartedAt),
513
- });
643
+ state.turnCount += 1;
644
+ this.#evaluateRunBudget(state, stream, queue);
645
+ if (state.pendingRunBudgetInteraction) {
646
+ state.requestBoundaryReady = true;
647
+ return this.#pauseForRunBudgetInteraction(state, stream, queue);
648
+ }
649
+ // Retain the legacy error only for callers that have not adopted staged
650
+ // budgets. A configured run budget turns the same count into critical
651
+ // evidence and lets the decision surface choose what happens next.
652
+ if (!state.runBudget && state.maxTurns !== undefined && state.turnCount > state.maxTurns) {
653
+ throw new MaxTurnsExceededError(state.maxTurns);
514
654
  }
515
- // Summarization is an asynchronous part of this same request
516
- // boundary. Admit anything that arrived while it was in flight after
517
- // applying a replacement, so the steer cannot be overwritten by the
518
- // checkpoint or miss a terminal model request.
519
- this.#admitPendingSteers(state, stream, queue);
520
655
  }
521
- state.turnCount += 1;
522
- if (state.maxTurns !== undefined && state.turnCount > state.maxTurns) {
523
- throw new MaxTurnsExceededError(state.maxTurns);
656
+ else {
657
+ state.requestBoundaryReady = undefined;
524
658
  }
525
659
  const model = await this.#deps.resolveModel(state.agent.model);
526
660
  let sawToolCall = false;
@@ -530,17 +664,30 @@ export class ApplicationRunLoop {
530
664
  // Stable process-unique request id, allocated immediately before dispatch
531
665
  // so a cost record can be settled exactly once (success or failure).
532
666
  const requestId = this.#nextRequestId();
667
+ const criticalWrapUp = state.criticalWrapUpPending === true && state.criticalWrapUpDispatched !== true;
668
+ if (criticalWrapUp)
669
+ state.criticalWrapUpDispatched = true;
670
+ const disableChaining = state.disableChainingForAttempt === true;
671
+ if (disableChaining) {
672
+ state.disableChainingForAttempt = false;
673
+ state.responseId = undefined;
674
+ state.responseProviderId = undefined;
675
+ }
533
676
  const request = {
534
- instructions: state.agent.instructions,
677
+ instructions: criticalWrapUp
678
+ ? `${state.agent.instructions}\n\nBudget containment is terminal. Do not call tools. In this one final response, summarize what you completed, the evidence you have, and what remains.`
679
+ : state.agent.instructions,
535
680
  ...(state.supportsConversationChaining &&
681
+ !disableChaining &&
536
682
  state.responseId &&
537
683
  state.responseProviderId !== undefined &&
538
684
  state.responseProviderId === state.currentProviderId
539
685
  ? { previousResponseId: state.responseId }
540
686
  : {}),
687
+ ...(disableChaining ? { disableChaining: true } : {}),
541
688
  input: state.input,
542
- tools: toModelTools(state.agent.tools),
543
- applicationTools: state.agent.tools,
689
+ tools: toModelTools(criticalWrapUp ? [] : state.agent.tools),
690
+ applicationTools: criticalWrapUp ? [] : state.agent.tools,
544
691
  ...(state.agent.modelSettings?.temperature !== undefined
545
692
  ? { temperature: state.agent.modelSettings.temperature }
546
693
  : {}),
@@ -652,6 +799,7 @@ export class ApplicationRunLoop {
652
799
  // persistence and replay, and a cost event must never become a
653
800
  // restored history item.
654
801
  queue.push({ type: 'cost_update', record });
802
+ this.#evaluateRunBudget(state, stream, queue);
655
803
  throw error;
656
804
  }
657
805
  if (!completion) {
@@ -662,6 +810,8 @@ export class ApplicationRunLoop {
662
810
  // fails closed as an incomplete model turn.
663
811
  if (streamedToolCalls.length === 0)
664
812
  throw new Error('Application model turn ended without completion');
813
+ if (criticalWrapUp)
814
+ return finish(stream, state, queue);
665
815
  await this.#dispatchToolCalls(state, stream, queue, streamedToolCalls, toolContext);
666
816
  if (state.pendingApprovals && state.pendingApprovals.length > 0) {
667
817
  stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
@@ -731,6 +881,12 @@ export class ApplicationRunLoop {
731
881
  providerUsd: completion.costUsd,
732
882
  });
733
883
  queue.push({ type: 'cost_update', record });
884
+ // Cost and usage arrive in the same completion metadata, so surface both
885
+ // live. The footer is a per-request indicator: emit this request's own
886
+ // usage, never the run accumulator in `state.usage`.
887
+ if (normalizedCompletionUsage)
888
+ queue.push({ type: 'usage_update', usage: normalizedCompletionUsage });
889
+ this.#evaluateRunBudget(state, stream, queue);
734
890
  stream.lastResponseId = completion.responseId;
735
891
  stream.rawResponses?.push(completion);
736
892
  // Some provider adapters report function calls only in the terminal
@@ -750,8 +906,6 @@ export class ApplicationRunLoop {
750
906
  toolCalls.push(item);
751
907
  }
752
908
  }
753
- if (toolCalls.length > 0)
754
- await this.#dispatchToolCalls(state, stream, queue, toolCalls, toolContext);
755
909
  // A native reasoning item belongs to the completed assistant turn even
756
910
  // when no tool call follows it. Commit it before assistant text so both
757
911
  // stateless continuation and persisted canonical history retain the
@@ -789,13 +943,34 @@ export class ApplicationRunLoop {
789
943
  outputPush(stream, queue, { type: 'item', item });
790
944
  state.input.push({ type: 'message', role: 'assistant', content: [{ type: 'text', text: assistantText }] });
791
945
  }
946
+ // Tool calls are dispatched only after the reasoning, provider-opaque,
947
+ // and assistant-text items from the same completion are committed. A
948
+ // response that carries both prose and a tool call must serialize as
949
+ // text -> function_call -> function_call_result; dispatching first left
950
+ // the text stranded after its own tool result, where the assistant
951
+ // message merger glued it onto the *next* turn's tool call and every
952
+ // request ended with a bare assistant message. Models read that as a
953
+ // turn truncated mid-sentence and restart instead of progressing.
954
+ if (!state.criticalWrapUpPending && toolCalls.length > 0) {
955
+ await this.#dispatchToolCalls(state, stream, queue, toolCalls, toolContext);
956
+ }
957
+ // A critical subagent gets exactly this final tool-free model call.
958
+ if (criticalWrapUp)
959
+ return finish(stream, state, queue);
960
+ if (state.pendingRunBudgetInteraction && toolCalls.length > 0) {
961
+ return this.#pauseForRunBudgetInteraction(state, stream, queue);
962
+ }
792
963
  if (state.pendingApprovals.length > 0) {
793
964
  stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
794
965
  this.#turnPaused = true;
795
966
  return finish(stream, state, queue);
796
967
  }
797
- if (!sawToolCall)
968
+ if (!sawToolCall) {
969
+ // Evidence discovered when a response has already completed needs no
970
+ // human boundary: there is no later request or tool to block.
971
+ state.pendingRunBudgetInteraction = undefined;
798
972
  return finish(stream, state, queue);
973
+ }
799
974
  }
800
975
  }
801
976
  async #dispatchToolCalls(state, stream, queue, events, toolContext) {
@@ -829,6 +1004,14 @@ export class ApplicationRunLoop {
829
1004
  // would apply schema defaults before execute. web_fetch relies on its
830
1005
  // executor fallbacks on the strict JSON-schema path.
831
1006
  entry.params = normalizeToolParameters(parseArguments(event.arguments), definition.parameters);
1007
+ const stallEvent = state.runBudget?.observeToolCall({
1008
+ name: event.name,
1009
+ argumentsText: event.arguments,
1010
+ effect: definition.effect,
1011
+ });
1012
+ if (stallEvent) {
1013
+ this.#emitRunBudgetEvent(state, stallEvent, 'Tool stall evidence', stream, queue);
1014
+ }
832
1015
  // Consult this run's ledger before prompting: a decision already taken
833
1016
  // (in the parent run and replayed in, or earlier in this run) must not
834
1017
  // prompt again. This is what makes approval replay observable.
@@ -870,12 +1053,17 @@ export class ApplicationRunLoop {
870
1053
  approvalPending: entry.status === 'approval_pending',
871
1054
  })),
872
1055
  });
873
- await this.#settleToolPlan(state, stream, queue, toolContext);
1056
+ // A main-agent budget escalation is a real boundary: retain the planned
1057
+ // calls, but do not execute one more tool while human judgement is pending.
1058
+ if (!state.pendingRunBudgetInteraction) {
1059
+ await this.#settleToolPlan(state, stream, queue, toolContext);
1060
+ }
874
1061
  }
875
1062
  async #settleToolPlan(state, stream, queue, toolContext) {
876
1063
  const plan = state.toolPlan;
877
1064
  if (!plan)
878
1065
  return;
1066
+ const maxParallelToolCalls = Math.max(1, Math.floor(this.#deps.resolveMaxParallelToolCalls?.() ?? DEFAULT_MAX_PARALLEL_TOOL_CALLS));
879
1067
  while (true) {
880
1068
  const firstPending = plan.find((entry) => entry.status !== 'completed');
881
1069
  if (!firstPending) {
@@ -890,8 +1078,7 @@ export class ApplicationRunLoop {
890
1078
  continue;
891
1079
  if (entry.status === 'approval_pending')
892
1080
  break;
893
- if (group.length > 0 &&
894
- (!entry.parallelSafe || !group[0].parallelSafe || group.length >= this.#maxParallelToolCalls))
1081
+ if (group.length > 0 && (!entry.parallelSafe || !group[0].parallelSafe || group.length >= maxParallelToolCalls))
895
1082
  break;
896
1083
  group.push(entry);
897
1084
  if (!entry.parallelSafe)
@@ -902,6 +1089,7 @@ export class ApplicationRunLoop {
902
1089
  batchId,
903
1090
  callIds: group.map((entry) => entry.event.id),
904
1091
  parallel: group.length > 1,
1092
+ maxParallelToolCalls,
905
1093
  dispatchOrder: group.map((entry) => entry.event.id),
906
1094
  });
907
1095
  if (group.length > 1) {
@@ -940,6 +1128,7 @@ export class ApplicationRunLoop {
940
1128
  state.history.push(resultItem);
941
1129
  state.input.push({ type: 'tool_result', id: entry.event.id, output });
942
1130
  outputPush(stream, queue, { type: 'item', item: resultItem });
1131
+ this.#evaluateRunBudget(state, stream, queue);
943
1132
  }
944
1133
  /**
945
1134
  * A tool that throws must not take the run down with it.
@@ -987,15 +1176,6 @@ export class ApplicationRunLoop {
987
1176
  throw error;
988
1177
  }
989
1178
  const message = error instanceof Error ? error.message : String(error);
990
- // Feeding the same failure back forever is its own failure mode: some
991
- // errors no argument can fix. Repeat the identical result once, then say
992
- // so plainly rather than inviting a third identical attempt.
993
- const repeated = state ? countRepeatedFailure(state, definition.name, params, message) : 1;
994
- if (repeated > MAX_IDENTICAL_TOOL_FAILURES) {
995
- const result = `Error: ${message}\n\nThis exact call has now failed ${repeated} times with the same error. Do not call ${definition.name} with these arguments again — either change your approach or report the problem to the user.`;
996
- await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
997
- return result;
998
- }
999
1179
  const result = `Error: ${message}`;
1000
1180
  await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
1001
1181
  return result;
@@ -1020,6 +1200,49 @@ export class ApplicationRunLoop {
1020
1200
  state.costRecords = [...(state.costRecords ?? []), record];
1021
1201
  return record;
1022
1202
  }
1203
+ #evaluateRunBudget(state, stream, queue) {
1204
+ if (!state.runBudget)
1205
+ return;
1206
+ for (const event of state.runBudget.evaluate({
1207
+ turns: state.turnCount,
1208
+ costRecords: state.costRecords ?? [],
1209
+ })) {
1210
+ this.#emitRunBudgetEvent(state, event, 'Run budget evidence', stream, queue);
1211
+ }
1212
+ }
1213
+ #emitRunBudgetEvent(state, event, message, stream, queue) {
1214
+ if (event.type === 'budget_stage' && event.stage === 'critical' && state.wrapUpOnCriticalRunBudget) {
1215
+ state.criticalWrapUpPending = true;
1216
+ }
1217
+ if (!state.wrapUpOnCriticalRunBudget &&
1218
+ !state.pendingRunBudgetInteraction &&
1219
+ state.runBudgetEscalation !== 'warn' &&
1220
+ this.#requiresHumanBudgetDecision(event)) {
1221
+ state.pendingRunBudgetInteraction = { type: 'run_budget_interaction', event };
1222
+ state.runBudgetGrantConsumed = false;
1223
+ }
1224
+ if (stream && queue)
1225
+ outputPush(stream, queue, { type: 'run_budget', evidence: event });
1226
+ try {
1227
+ state.onRunBudgetEvent?.(event);
1228
+ }
1229
+ catch {
1230
+ // Evidence observers are delivery adapters, not budget owners.
1231
+ this.#deps.logDiagnostic?.('Run budget event observer failed', { type: event.type });
1232
+ }
1233
+ this.#deps.logDiagnostic?.(message, event);
1234
+ }
1235
+ #requiresHumanBudgetDecision(event) {
1236
+ return event.type === 'tool_stall' || (event.type === 'budget_stage' && event.stage !== 'soft');
1237
+ }
1238
+ #pauseForRunBudgetInteraction(state, stream, queue) {
1239
+ const interaction = state.pendingRunBudgetInteraction;
1240
+ if (!interaction)
1241
+ return finish(stream, state, queue);
1242
+ stream.interruptions = [interaction];
1243
+ this.#turnPaused = true;
1244
+ return finish(stream, state, queue);
1245
+ }
1023
1246
  async #notifyToolLifecycle(operation) {
1024
1247
  if (!operation)
1025
1248
  return;
@@ -1032,27 +1255,6 @@ export class ApplicationRunLoop {
1032
1255
  }
1033
1256
  }
1034
1257
  }
1035
- /**
1036
- * How many times an identical failing call is fed back before the loop stops
1037
- * inviting retries. One repeat is worth allowing: a transient failure resolves,
1038
- * and a model given the error often corrects on its second attempt.
1039
- */
1040
- const MAX_IDENTICAL_TOOL_FAILURES = 2;
1041
- function countRepeatedFailure(state, toolName, params, message) {
1042
- let key;
1043
- try {
1044
- key = JSON.stringify([toolName, params, message]);
1045
- }
1046
- catch {
1047
- // Unserializable params cannot be compared for identity; treat every such
1048
- // failure as distinct rather than collapsing unrelated calls together.
1049
- return 1;
1050
- }
1051
- state.toolFailureCounts ??= new Map();
1052
- const count = (state.toolFailureCounts.get(key) ?? 0) + 1;
1053
- state.toolFailureCounts.set(key, count);
1054
- return count;
1055
- }
1056
1258
  function outputPush(stream, queue, item) {
1057
1259
  stream.output.push(item);
1058
1260
  if (stream.newItems !== stream.output)
@@ -1078,6 +1280,15 @@ function finish(stream, state, queue) {
1078
1280
  * Chat-Completions continuation field. Generic reasoning remains display-only
1079
1281
  * so providers with different native formats are not given a foreign field.
1080
1282
  */
1283
+ /**
1284
+ * True when any lane namespace in the metadata carries an `encrypted_content`
1285
+ * blob — the shape every Responses adapter produces, whichever vendor it is.
1286
+ */
1287
+ function hasNamespacedEncryptedReasoning(metadata) {
1288
+ if (!metadata)
1289
+ return false;
1290
+ return Object.values(metadata).some((value) => asRecord(value)?.encrypted_content !== undefined);
1291
+ }
1081
1292
  function appendNativeReasoning(current, event) {
1082
1293
  const nativeReasoning = event.providerMetadata?.reasoning_content;
1083
1294
  if (typeof nativeReasoning === 'string') {
@@ -1094,8 +1305,10 @@ function appendNativeReasoning(current, event) {
1094
1305
  }
1095
1306
  // Responses providers return encrypted reasoning only on their terminal
1096
1307
  // output. Their metadata is namespaced, so retain it without turning it into
1097
- // the Chat-Completions-only reasoning_content convention.
1098
- if (asRecord(event.providerMetadata?.codex) || asRecord(event.providerMetadata?.openai)) {
1308
+ // the Chat-Completions-only reasoning_content convention. Match on the
1309
+ // namespaced shape rather than an allowlist of lane names: an allowlist
1310
+ // silently drops the reasoning of every Responses lane added later.
1311
+ if (hasNamespacedEncryptedReasoning(event.providerMetadata)) {
1099
1312
  return {
1100
1313
  ...(event.id ? { id: event.id } : current?.id ? { id: current.id } : {}),
1101
1314
  text: event.text,