@qduc/term2 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1278) hide show
  1. package/README.md +6 -4
  2. package/dist/agent.d.ts +21 -13
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +123 -35
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app.d.ts +3 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +283 -128
  9. package/dist/app.js.map +1 -1
  10. package/dist/cli.js +91 -27
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/auto-approve-command.js.map +1 -1
  13. package/dist/commands/mode-commands.js.map +1 -1
  14. package/dist/commands/retry-tool-command.d.ts +13 -0
  15. package/dist/commands/retry-tool-command.d.ts.map +1 -0
  16. package/dist/commands/retry-tool-command.js +20 -0
  17. package/dist/commands/retry-tool-command.js.map +1 -0
  18. package/dist/commands/rewind-command.d.ts +37 -0
  19. package/dist/commands/rewind-command.d.ts.map +1 -0
  20. package/dist/commands/rewind-command.js +97 -0
  21. package/dist/commands/rewind-command.js.map +1 -0
  22. package/dist/commands/sandbox-command.js.map +1 -1
  23. package/dist/components/InputBox.d.ts +18 -32
  24. package/dist/components/InputBox.d.ts.map +1 -1
  25. package/dist/components/InputBox.js +178 -579
  26. package/dist/components/InputBox.js.map +1 -1
  27. package/dist/components/input/ApplicationInputSurface.d.ts +37 -0
  28. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
  29. package/dist/components/input/ApplicationInputSurface.js +78 -0
  30. package/dist/components/input/ApplicationInputSurface.js.map +1 -0
  31. package/dist/components/input/MenuStackHost.d.ts +12 -0
  32. package/dist/components/input/MenuStackHost.d.ts.map +1 -0
  33. package/dist/components/input/MenuStackHost.js +13 -0
  34. package/dist/components/input/MenuStackHost.js.map +1 -0
  35. package/dist/components/input/MenuSurface.d.ts +13 -0
  36. package/dist/components/input/MenuSurface.d.ts.map +1 -0
  37. package/dist/components/input/MenuSurface.js +86 -0
  38. package/dist/components/input/MenuSurface.js.map +1 -0
  39. package/dist/components/input/ModelMenuSession.d.ts +19 -0
  40. package/dist/components/input/ModelMenuSession.d.ts.map +1 -0
  41. package/dist/components/input/ModelMenuSession.js +144 -0
  42. package/dist/components/input/ModelMenuSession.js.map +1 -0
  43. package/dist/components/input/PathMenuSession.d.ts +16 -0
  44. package/dist/components/input/PathMenuSession.d.ts.map +1 -0
  45. package/dist/components/input/PathMenuSession.js +68 -0
  46. package/dist/components/input/PathMenuSession.js.map +1 -0
  47. package/dist/components/input/PendingQueueList.d.ts +20 -0
  48. package/dist/components/input/PendingQueueList.d.ts.map +1 -0
  49. package/dist/components/input/PendingQueueList.js +26 -0
  50. package/dist/components/input/PendingQueueList.js.map +1 -0
  51. package/dist/components/input/ProviderMenuSession.d.ts +16 -0
  52. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -0
  53. package/dist/components/input/ProviderMenuSession.js +93 -0
  54. package/dist/components/input/ProviderMenuSession.js.map +1 -0
  55. package/dist/components/input/RewindMenuSession.d.ts +14 -0
  56. package/dist/components/input/RewindMenuSession.d.ts.map +1 -0
  57. package/dist/components/input/RewindMenuSession.js +77 -0
  58. package/dist/components/input/RewindMenuSession.js.map +1 -0
  59. package/dist/components/input/SettingsMenuSession.d.ts +17 -0
  60. package/dist/components/input/SettingsMenuSession.d.ts.map +1 -0
  61. package/dist/components/input/SettingsMenuSession.js +136 -0
  62. package/dist/components/input/SettingsMenuSession.js.map +1 -0
  63. package/dist/components/input/SettingsValueMenuSession.d.ts +19 -0
  64. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -0
  65. package/dist/components/input/SettingsValueMenuSession.js +113 -0
  66. package/dist/components/input/SettingsValueMenuSession.js.map +1 -0
  67. package/dist/components/input/SkillsMenuSession.d.ts +16 -0
  68. package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
  69. package/dist/components/input/SkillsMenuSession.js +64 -0
  70. package/dist/components/input/SkillsMenuSession.js.map +1 -0
  71. package/dist/components/input/SlashMenuSession.d.ts +17 -0
  72. package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
  73. package/dist/components/input/SlashMenuSession.js +57 -0
  74. package/dist/components/input/SlashMenuSession.js.map +1 -0
  75. package/dist/components/input/determine-active-menu.d.ts +2 -0
  76. package/dist/components/input/determine-active-menu.d.ts.map +1 -1
  77. package/dist/components/input/determine-active-menu.js +12 -4
  78. package/dist/components/input/determine-active-menu.js.map +1 -1
  79. package/dist/components/input/insertions.d.ts +0 -13
  80. package/dist/components/input/insertions.d.ts.map +1 -1
  81. package/dist/components/input/insertions.js +0 -26
  82. package/dist/components/input/insertions.js.map +1 -1
  83. package/dist/components/input/menu-controller.d.ts +52 -0
  84. package/dist/components/input/menu-controller.d.ts.map +1 -0
  85. package/dist/components/input/menu-controller.js +690 -0
  86. package/dist/components/input/menu-controller.js.map +1 -0
  87. package/dist/components/input/menu-editor.d.ts +9 -0
  88. package/dist/components/input/menu-editor.d.ts.map +1 -0
  89. package/dist/components/input/menu-editor.js +45 -0
  90. package/dist/components/input/menu-editor.js.map +1 -0
  91. package/dist/components/input/menu-registry.d.ts +20 -0
  92. package/dist/components/input/menu-registry.d.ts.map +1 -0
  93. package/dist/components/input/menu-registry.js +25 -0
  94. package/dist/components/input/menu-registry.js.map +1 -0
  95. package/dist/components/input/menu-types.d.ts +320 -0
  96. package/dist/components/input/menu-types.d.ts.map +1 -0
  97. package/dist/components/input/menu-types.js +2 -0
  98. package/dist/components/input/menu-types.js.map +1 -0
  99. package/dist/components/input/settings-intent-host.d.ts +22 -0
  100. package/dist/components/input/settings-intent-host.d.ts.map +1 -0
  101. package/dist/components/input/settings-intent-host.js +69 -0
  102. package/dist/components/input/settings-intent-host.js.map +1 -0
  103. package/dist/components/input/triggers.d.ts +3 -0
  104. package/dist/components/input/triggers.d.ts.map +1 -1
  105. package/dist/components/input/triggers.js +258 -0
  106. package/dist/components/input/triggers.js.map +1 -1
  107. package/dist/components/layout/BackgroundTaskManager.d.ts +16 -0
  108. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -0
  109. package/dist/components/layout/BackgroundTaskManager.js +236 -0
  110. package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
  111. package/dist/components/layout/BackgroundTasksPanel.d.ts +2 -2
  112. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  113. package/dist/components/layout/BackgroundTasksPanel.js +64 -24
  114. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  115. package/dist/components/layout/Banner.js.map +1 -1
  116. package/dist/components/layout/BottomArea.d.ts +23 -19
  117. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  118. package/dist/components/layout/BottomArea.js +74 -48
  119. package/dist/components/layout/BottomArea.js.map +1 -1
  120. package/dist/components/layout/StatusBar.d.ts +3 -1
  121. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  122. package/dist/components/layout/StatusBar.js +102 -83
  123. package/dist/components/layout/StatusBar.js.map +1 -1
  124. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  125. package/dist/components/menu/RewindMenu.d.ts +18 -0
  126. package/dist/components/menu/RewindMenu.d.ts.map +1 -0
  127. package/dist/components/menu/RewindMenu.js +59 -0
  128. package/dist/components/menu/RewindMenu.js.map +1 -0
  129. package/dist/components/message/ChatMessage.d.ts +2 -1
  130. package/dist/components/message/ChatMessage.d.ts.map +1 -1
  131. package/dist/components/message/ChatMessage.js +1 -1
  132. package/dist/components/message/ChatMessage.js.map +1 -1
  133. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  134. package/dist/components/message/CommandMessage.js +138 -15
  135. package/dist/components/message/CommandMessage.js.map +1 -1
  136. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  137. package/dist/components/message/MemoryRenderer.js +16 -10
  138. package/dist/components/message/MemoryRenderer.js.map +1 -1
  139. package/dist/components/message/MessageList.d.ts +20 -3
  140. package/dist/components/message/MessageList.d.ts.map +1 -1
  141. package/dist/components/message/MessageList.js +1 -1
  142. package/dist/components/message/MessageList.js.map +1 -1
  143. package/dist/components/message/SubagentActivityMessage.d.ts +5 -1
  144. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  145. package/dist/components/message/SubagentActivityMessage.js +12 -4
  146. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  147. package/dist/components/message/command-message-helpers.d.ts +40 -3
  148. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  149. package/dist/components/message/command-message-helpers.js +49 -8
  150. package/dist/components/message/command-message-helpers.js.map +1 -1
  151. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -0
  152. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  153. package/dist/components/prompt/ApprovalPrompt.js +136 -59
  154. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  155. package/dist/context/InputContext.d.ts +15 -8
  156. package/dist/context/InputContext.d.ts.map +1 -1
  157. package/dist/context/InputContext.js +92 -15
  158. package/dist/context/InputContext.js.map +1 -1
  159. package/dist/contracts/application-stream.d.ts +38 -0
  160. package/dist/contracts/application-stream.d.ts.map +1 -0
  161. package/dist/contracts/application-stream.js +2 -0
  162. package/dist/contracts/application-stream.js.map +1 -0
  163. package/dist/contracts/continuation-handle.d.ts +18 -0
  164. package/dist/contracts/continuation-handle.d.ts.map +1 -0
  165. package/dist/contracts/continuation-handle.js +22 -0
  166. package/dist/contracts/continuation-handle.js.map +1 -0
  167. package/dist/contracts/conversation-items.d.ts +47 -0
  168. package/dist/contracts/conversation-items.d.ts.map +1 -0
  169. package/dist/contracts/conversation-items.js +2 -0
  170. package/dist/contracts/conversation-items.js.map +1 -0
  171. package/dist/contracts/conversation.d.ts +44 -4
  172. package/dist/contracts/conversation.d.ts.map +1 -1
  173. package/dist/contracts/conversation.js +9 -0
  174. package/dist/contracts/conversation.js.map +1 -1
  175. package/dist/contracts/model-errors.d.ts +10 -0
  176. package/dist/contracts/model-errors.d.ts.map +1 -0
  177. package/dist/contracts/model-errors.js +15 -0
  178. package/dist/contracts/model-errors.js.map +1 -0
  179. package/dist/contracts/model-types.d.ts +16 -0
  180. package/dist/contracts/model-types.d.ts.map +1 -0
  181. package/dist/contracts/model-types.js +2 -0
  182. package/dist/contracts/model-types.js.map +1 -0
  183. package/dist/contracts/patch.d.ts +17 -0
  184. package/dist/contracts/patch.d.ts.map +1 -0
  185. package/dist/contracts/patch.js +2 -0
  186. package/dist/contracts/patch.js.map +1 -0
  187. package/dist/contracts/provider-input.d.ts +34 -0
  188. package/dist/contracts/provider-input.d.ts.map +1 -0
  189. package/dist/contracts/provider-input.js +2 -0
  190. package/dist/contracts/provider-input.js.map +1 -0
  191. package/dist/contracts/streamed-model-turn.d.ts +230 -0
  192. package/dist/contracts/streamed-model-turn.d.ts.map +1 -0
  193. package/dist/contracts/streamed-model-turn.js +2 -0
  194. package/dist/contracts/streamed-model-turn.js.map +1 -0
  195. package/dist/env-setup.js +1 -1
  196. package/dist/hooks/conversation-ui-reducer.d.ts +27 -4
  197. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  198. package/dist/hooks/conversation-ui-reducer.js +51 -4
  199. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  200. package/dist/hooks/handoff-flow-reducer.d.ts +1 -36
  201. package/dist/hooks/handoff-flow-reducer.d.ts.map +1 -1
  202. package/dist/hooks/handoff-flow-reducer.js +3 -57
  203. package/dist/hooks/handoff-flow-reducer.js.map +1 -1
  204. package/dist/hooks/settings-completion-config.d.ts +1 -0
  205. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  206. package/dist/hooks/settings-completion-config.js +30 -6
  207. package/dist/hooks/settings-completion-config.js.map +1 -1
  208. package/dist/hooks/use-app-commands.d.ts +13 -11
  209. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  210. package/dist/hooks/use-app-commands.js +90 -63
  211. package/dist/hooks/use-app-commands.js.map +1 -1
  212. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +18 -1
  213. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  214. package/dist/hooks/use-app-keyboard-shortcuts.js +77 -8
  215. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  216. package/dist/hooks/use-conversation.d.ts +30 -13
  217. package/dist/hooks/use-conversation.d.ts.map +1 -1
  218. package/dist/hooks/use-conversation.js +85 -18
  219. package/dist/hooks/use-conversation.js.map +1 -1
  220. package/dist/hooks/use-escape-key.d.ts +4 -32
  221. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  222. package/dist/hooks/use-escape-key.js +27 -68
  223. package/dist/hooks/use-escape-key.js.map +1 -1
  224. package/dist/hooks/use-handoff-flow.d.ts +6 -6
  225. package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
  226. package/dist/hooks/use-handoff-flow.js +110 -118
  227. package/dist/hooks/use-handoff-flow.js.map +1 -1
  228. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  229. package/dist/hooks/use-model-selection.js +50 -59
  230. package/dist/hooks/use-model-selection.js.map +1 -1
  231. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  232. package/dist/hooks/use-path-completion.js +20 -11
  233. package/dist/hooks/use-path-completion.js.map +1 -1
  234. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  235. package/dist/hooks/use-provider-selection.js +19 -16
  236. package/dist/hooks/use-provider-selection.js.map +1 -1
  237. package/dist/hooks/use-rewind-selection.d.ts +30 -0
  238. package/dist/hooks/use-rewind-selection.d.ts.map +1 -0
  239. package/dist/hooks/{use-undo-selection.js → use-rewind-selection.js} +37 -28
  240. package/dist/hooks/use-rewind-selection.js.map +1 -0
  241. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  242. package/dist/hooks/use-runtime-settings.js +4 -3
  243. package/dist/hooks/use-runtime-settings.js.map +1 -1
  244. package/dist/hooks/use-selection.d.ts +1 -0
  245. package/dist/hooks/use-selection.d.ts.map +1 -1
  246. package/dist/hooks/use-selection.js +1 -1
  247. package/dist/hooks/use-selection.js.map +1 -1
  248. package/dist/hooks/use-setting.d.ts +3 -2
  249. package/dist/hooks/use-setting.d.ts.map +1 -1
  250. package/dist/hooks/use-setting.js +1 -1
  251. package/dist/hooks/use-setting.js.map +1 -1
  252. package/dist/hooks/use-settings-completion.d.ts +1 -0
  253. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  254. package/dist/hooks/use-settings-completion.js +22 -15
  255. package/dist/hooks/use-settings-completion.js.map +1 -1
  256. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  257. package/dist/hooks/use-settings-value-completion.js +40 -28
  258. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  259. package/dist/hooks/use-shell-mode.d.ts +3 -13
  260. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  261. package/dist/hooks/use-shell-mode.js +14 -53
  262. package/dist/hooks/use-shell-mode.js.map +1 -1
  263. package/dist/hooks/use-skill-selection.d.ts.map +1 -1
  264. package/dist/hooks/use-skill-selection.js +17 -11
  265. package/dist/hooks/use-skill-selection.js.map +1 -1
  266. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  267. package/dist/hooks/use-slash-commands.js +11 -10
  268. package/dist/hooks/use-slash-commands.js.map +1 -1
  269. package/dist/hooks/use-terminal-focus-notifier.js.map +1 -1
  270. package/dist/lib/agent-chat-service.d.ts +12 -8
  271. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  272. package/dist/lib/agent-chat-service.js +79 -44
  273. package/dist/lib/agent-chat-service.js.map +1 -1
  274. package/dist/lib/agent-client.d.ts +93 -17
  275. package/dist/lib/agent-client.d.ts.map +1 -1
  276. package/dist/lib/agent-client.js +398 -37
  277. package/dist/lib/agent-client.js.map +1 -1
  278. package/dist/lib/agent-configuration.d.ts +33 -15
  279. package/dist/lib/agent-configuration.d.ts.map +1 -1
  280. package/dist/lib/agent-configuration.js +107 -9
  281. package/dist/lib/agent-configuration.js.map +1 -1
  282. package/dist/lib/agent-factory.d.ts +33 -4
  283. package/dist/lib/agent-factory.d.ts.map +1 -1
  284. package/dist/lib/agent-factory.js +140 -101
  285. package/dist/lib/agent-factory.js.map +1 -1
  286. package/dist/lib/chained-input-filter.d.ts +27 -1
  287. package/dist/lib/chained-input-filter.d.ts.map +1 -1
  288. package/dist/lib/chained-input-filter.js +92 -33
  289. package/dist/lib/chained-input-filter.js.map +1 -1
  290. package/dist/lib/continuation-projection-mode.d.ts +3 -0
  291. package/dist/lib/continuation-projection-mode.d.ts.map +1 -0
  292. package/dist/lib/continuation-projection-mode.js +2 -0
  293. package/dist/lib/continuation-projection-mode.js.map +1 -0
  294. package/dist/lib/editor-impl.d.ts +1 -1
  295. package/dist/lib/editor-impl.d.ts.map +1 -1
  296. package/dist/lib/editor-impl.js +1 -1
  297. package/dist/lib/editor-impl.js.map +1 -1
  298. package/dist/lib/harness-invariant-error.d.ts +22 -0
  299. package/dist/lib/harness-invariant-error.d.ts.map +1 -0
  300. package/dist/lib/harness-invariant-error.js +30 -0
  301. package/dist/lib/harness-invariant-error.js.map +1 -0
  302. package/dist/lib/input-owner.d.ts +64 -0
  303. package/dist/lib/input-owner.d.ts.map +1 -0
  304. package/dist/lib/input-owner.js +34 -0
  305. package/dist/lib/input-owner.js.map +1 -0
  306. package/dist/lib/openai-strict-tool-schema.d.ts +7 -4
  307. package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
  308. package/dist/lib/openai-strict-tool-schema.js +8 -0
  309. package/dist/lib/openai-strict-tool-schema.js.map +1 -1
  310. package/dist/lib/subagent-bridge.d.ts +54 -3
  311. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  312. package/dist/lib/subagent-bridge.js +118 -20
  313. package/dist/lib/subagent-bridge.js.map +1 -1
  314. package/dist/lib/tool-invoke.d.ts +18 -10
  315. package/dist/lib/tool-invoke.d.ts.map +1 -1
  316. package/dist/lib/tool-invoke.js +92 -44
  317. package/dist/lib/tool-invoke.js.map +1 -1
  318. package/dist/non-interactive.d.ts +14 -4
  319. package/dist/non-interactive.d.ts.map +1 -1
  320. package/dist/non-interactive.js +91 -84
  321. package/dist/non-interactive.js.map +1 -1
  322. package/dist/prompts/anthropic.md +6 -55
  323. package/dist/prompts/async-subagent-delegation.d.ts +3 -5
  324. package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
  325. package/dist/prompts/async-subagent-delegation.js +10 -34
  326. package/dist/prompts/async-subagent-delegation.js.map +1 -1
  327. package/dist/prompts/async-subagent-delegation.ts +11 -40
  328. package/dist/prompts/gpt-5.6.md +49 -0
  329. package/dist/prompts/kimi.md +25 -63
  330. package/dist/prompts/memory.md +1 -1
  331. package/dist/prompts/orchestrator-prompt.test.ts +92 -0
  332. package/dist/prompts/orchestrator.md +20 -4
  333. package/dist/prompts/plan-mode-info.md +1 -1
  334. package/dist/prompts/prompt-constructor.d.ts +2 -0
  335. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  336. package/dist/prompts/prompt-constructor.js +9 -7
  337. package/dist/prompts/prompt-constructor.js.map +1 -1
  338. package/dist/prompts/prompt-constructor.test.ts +30 -8
  339. package/dist/prompts/prompt-constructor.ts +14 -7
  340. package/dist/prompts/prompt-profiles.d.ts.map +1 -1
  341. package/dist/prompts/prompt-profiles.js +5 -0
  342. package/dist/prompts/prompt-profiles.js.map +1 -1
  343. package/dist/prompts/prompt-profiles.test.ts +20 -0
  344. package/dist/prompts/prompt-profiles.ts +5 -0
  345. package/dist/prompts/search-via-shell.d.ts.map +1 -1
  346. package/dist/prompts/search-via-shell.js +8 -25
  347. package/dist/prompts/search-via-shell.js.map +1 -1
  348. package/dist/prompts/search-via-shell.test.ts +18 -0
  349. package/dist/prompts/search-via-shell.ts +8 -25
  350. package/dist/prompts/shell-auto-approval.d.ts +2 -2
  351. package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
  352. package/dist/prompts/shell-auto-approval.js +20 -5
  353. package/dist/prompts/shell-auto-approval.js.map +1 -1
  354. package/dist/prompts/shell-auto-approval.ts +20 -5
  355. package/dist/prompts/steering-notice.d.ts +16 -0
  356. package/dist/prompts/steering-notice.d.ts.map +1 -0
  357. package/dist/prompts/steering-notice.js +24 -0
  358. package/dist/prompts/steering-notice.js.map +1 -0
  359. package/dist/prompts/steering-notice.ts +24 -0
  360. package/dist/prompts/subagent-delegation.d.ts +6 -5
  361. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  362. package/dist/prompts/subagent-delegation.js +36 -13
  363. package/dist/prompts/subagent-delegation.js.map +1 -1
  364. package/dist/prompts/subagent-delegation.test.ts +24 -2
  365. package/dist/prompts/subagent-delegation.ts +54 -14
  366. package/dist/prompts/subagents/explorer.md +24 -14
  367. package/dist/prompts/subagents/worker-prompt.test.ts +35 -0
  368. package/dist/prompts/subagents/worker.md +8 -0
  369. package/dist/prompts/worktree-hygiene.md +1 -0
  370. package/dist/providers/ai-sdk-anthropic.provider.d.ts +3 -3
  371. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  372. package/dist/providers/ai-sdk-anthropic.provider.js +8 -4
  373. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  374. package/dist/providers/ai-sdk-google.provider.d.ts +5 -4
  375. package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
  376. package/dist/providers/ai-sdk-google.provider.js +23 -3
  377. package/dist/providers/ai-sdk-google.provider.js.map +1 -1
  378. package/dist/providers/ai-sdk-message-normalizer.d.ts +3 -7
  379. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -1
  380. package/dist/providers/ai-sdk-message-normalizer.js +27 -11
  381. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -1
  382. package/dist/providers/ai-sdk-openrouter.provider.d.ts +5 -4
  383. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
  384. package/dist/providers/ai-sdk-openrouter.provider.js +25 -3
  385. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
  386. package/dist/providers/ai-sdk-provider-settings.d.ts +10 -0
  387. package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -0
  388. package/dist/providers/ai-sdk-provider-settings.js +37 -0
  389. package/dist/providers/ai-sdk-provider-settings.js.map +1 -0
  390. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  391. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -0
  392. package/dist/providers/ai-sdk-streamed-model.js +338 -0
  393. package/dist/providers/ai-sdk-streamed-model.js.map +1 -0
  394. package/dist/providers/codex-responses-model.d.ts +39 -12
  395. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  396. package/dist/providers/codex-responses-model.js +656 -155
  397. package/dist/providers/codex-responses-model.js.map +1 -1
  398. package/dist/providers/codex-turn-converter.d.ts +12 -0
  399. package/dist/providers/codex-turn-converter.d.ts.map +1 -0
  400. package/dist/providers/codex-turn-converter.js +168 -0
  401. package/dist/providers/codex-turn-converter.js.map +1 -0
  402. package/dist/providers/codex.provider.d.ts +21 -0
  403. package/dist/providers/codex.provider.d.ts.map +1 -1
  404. package/dist/providers/codex.provider.js +57 -27
  405. package/dist/providers/codex.provider.js.map +1 -1
  406. package/dist/providers/common/openai-compatible-message-contract.d.ts +8 -0
  407. package/dist/providers/common/openai-compatible-message-contract.d.ts.map +1 -0
  408. package/dist/providers/common/openai-compatible-message-contract.js +23 -0
  409. package/dist/providers/common/openai-compatible-message-contract.js.map +1 -0
  410. package/dist/providers/common/openai-compatible-messages.d.ts +0 -4
  411. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  412. package/dist/providers/common/openai-compatible-messages.js +0 -288
  413. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  414. package/dist/providers/fetch/composer.d.ts.map +1 -1
  415. package/dist/providers/fetch/composer.js +1 -0
  416. package/dist/providers/fetch/composer.js.map +1 -1
  417. package/dist/providers/model-catalog/catalog.d.ts +31 -0
  418. package/dist/providers/model-catalog/catalog.d.ts.map +1 -0
  419. package/dist/providers/model-catalog/catalog.generated.d.ts +3010 -0
  420. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -0
  421. package/dist/providers/model-catalog/catalog.generated.js +3004 -0
  422. package/dist/providers/model-catalog/catalog.generated.js.map +1 -0
  423. package/dist/providers/model-catalog/catalog.js +62 -0
  424. package/dist/providers/model-catalog/catalog.js.map +1 -0
  425. package/dist/providers/model-catalog/generate-catalog.d.ts +42 -0
  426. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -0
  427. package/dist/providers/model-catalog/generate-catalog.js +96 -0
  428. package/dist/providers/model-catalog/generate-catalog.js.map +1 -0
  429. package/dist/providers/openai-chained-input-compatibility.d.ts +36 -0
  430. package/dist/providers/openai-chained-input-compatibility.d.ts.map +1 -0
  431. package/dist/providers/openai-chained-input-compatibility.js +60 -0
  432. package/dist/providers/openai-chained-input-compatibility.js.map +1 -0
  433. package/dist/providers/openai-chat-completions-model.d.ts +12 -0
  434. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
  435. package/dist/providers/openai-chat-completions-model.js +271 -0
  436. package/dist/providers/openai-chat-completions-model.js.map +1 -0
  437. package/dist/providers/openai-compatible-lazy.d.ts +1 -1
  438. package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
  439. package/dist/providers/openai-compatible-lazy.js +24 -36
  440. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  441. package/dist/providers/openai-compatible-middleware.d.ts +4 -1
  442. package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
  443. package/dist/providers/openai-compatible-middleware.js +15 -14
  444. package/dist/providers/openai-compatible-middleware.js.map +1 -1
  445. package/dist/providers/openai-compatible-response-normalizer.d.ts +10 -1
  446. package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
  447. package/dist/providers/openai-compatible-response-normalizer.js +15 -4
  448. package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
  449. package/dist/providers/openai-compatible.provider.d.ts +7 -10
  450. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  451. package/dist/providers/openai-compatible.provider.js +80 -78
  452. package/dist/providers/openai-compatible.provider.js.map +1 -1
  453. package/dist/providers/openai-request-prefix-binding.d.ts +28 -0
  454. package/dist/providers/openai-request-prefix-binding.d.ts.map +1 -0
  455. package/dist/providers/openai-request-prefix-binding.js +78 -0
  456. package/dist/providers/openai-request-prefix-binding.js.map +1 -0
  457. package/dist/providers/openai-responses-model.d.ts +43 -0
  458. package/dist/providers/openai-responses-model.d.ts.map +1 -0
  459. package/dist/providers/openai-responses-model.js +564 -0
  460. package/dist/providers/openai-responses-model.js.map +1 -0
  461. package/dist/providers/openai.provider.d.ts +11 -8
  462. package/dist/providers/openai.provider.d.ts.map +1 -1
  463. package/dist/providers/openai.provider.js +43 -91
  464. package/dist/providers/openai.provider.js.map +1 -1
  465. package/dist/providers/opencode-routing.d.ts +1 -1
  466. package/dist/providers/opencode-routing.d.ts.map +1 -1
  467. package/dist/providers/opencode-routing.js +4 -2
  468. package/dist/providers/opencode-routing.js.map +1 -1
  469. package/dist/providers/opencode-session.d.ts.map +1 -1
  470. package/dist/providers/opencode-session.js +28 -3
  471. package/dist/providers/opencode-session.js.map +1 -1
  472. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  473. package/dist/providers/openrouter.provider.js +33 -33
  474. package/dist/providers/openrouter.provider.js.map +1 -1
  475. package/dist/providers/provider-request-capture.d.ts +35 -0
  476. package/dist/providers/provider-request-capture.d.ts.map +1 -0
  477. package/dist/providers/provider-request-capture.js +22 -0
  478. package/dist/providers/provider-request-capture.js.map +1 -0
  479. package/dist/providers/provider-service.d.ts +9 -7
  480. package/dist/providers/provider-service.d.ts.map +1 -1
  481. package/dist/providers/provider-service.js +29 -28
  482. package/dist/providers/provider-service.js.map +1 -1
  483. package/dist/providers/registry.d.ts +14 -9
  484. package/dist/providers/registry.d.ts.map +1 -1
  485. package/dist/providers/registry.js.map +1 -1
  486. package/dist/providers/retrying-model.d.ts +8 -6
  487. package/dist/providers/retrying-model.d.ts.map +1 -1
  488. package/dist/providers/retrying-model.js +7 -20
  489. package/dist/providers/retrying-model.js.map +1 -1
  490. package/dist/providers/web-search/exa.provider.js.map +1 -1
  491. package/dist/providers/web-search/registry.js.map +1 -1
  492. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  493. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  494. package/dist/providers/websocket-receive-watchdog.js +9 -1
  495. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  496. package/dist/scripts/eval-auto-approval/runner.js +2 -0
  497. package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
  498. package/dist/services/agent-runtime/application-run-loop.d.ts +205 -0
  499. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -0
  500. package/dist/services/agent-runtime/application-run-loop.js +1236 -0
  501. package/dist/services/agent-runtime/application-run-loop.js.map +1 -0
  502. package/dist/services/agent-runtime/compose-agent-runtime.d.ts +3 -0
  503. package/dist/services/agent-runtime/compose-agent-runtime.d.ts.map +1 -1
  504. package/dist/services/agent-runtime/compose-agent-runtime.js +4 -0
  505. package/dist/services/agent-runtime/compose-agent-runtime.js.map +1 -1
  506. package/dist/services/agent-runtime/generation-guard.d.ts +69 -0
  507. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -0
  508. package/dist/services/agent-runtime/generation-guard.js +270 -0
  509. package/dist/services/agent-runtime/generation-guard.js.map +1 -0
  510. package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
  511. package/dist/services/agent-runtime/model-resolver.js +7 -6
  512. package/dist/services/agent-runtime/model-resolver.js.map +1 -1
  513. package/dist/services/agent-runtime/structured-output.d.ts.map +1 -1
  514. package/dist/services/agent-runtime/structured-output.js +1 -21
  515. package/dist/services/agent-runtime/structured-output.js.map +1 -1
  516. package/dist/services/agent-runtime/tool-invocation-context.d.ts +73 -0
  517. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -0
  518. package/dist/services/agent-runtime/tool-invocation-context.js +66 -0
  519. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -0
  520. package/dist/services/agent-stream.d.ts +41 -2
  521. package/dist/services/agent-stream.d.ts.map +1 -1
  522. package/dist/services/agent-stream.js +46 -1
  523. package/dist/services/agent-stream.js.map +1 -1
  524. package/dist/services/approval/approval-decision-executor.d.ts +42 -0
  525. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -0
  526. package/dist/services/approval/approval-decision-executor.js +207 -0
  527. package/dist/services/approval/approval-decision-executor.js.map +1 -0
  528. package/dist/services/approval/approval-flow-coordinator.d.ts +25 -8
  529. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  530. package/dist/services/approval/approval-flow-coordinator.js +34 -167
  531. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  532. package/dist/services/approval/approval-replay.d.ts +52 -0
  533. package/dist/services/approval/approval-replay.d.ts.map +1 -0
  534. package/dist/services/approval/approval-replay.js +68 -0
  535. package/dist/services/approval/approval-replay.js.map +1 -0
  536. package/dist/services/approval/approval-state.d.ts +3 -6
  537. package/dist/services/approval/approval-state.d.ts.map +1 -1
  538. package/dist/services/approval/approval-state.js +0 -10
  539. package/dist/services/approval/approval-state.js.map +1 -1
  540. package/dist/services/approval/background-subagent-approval-controller.d.ts +25 -0
  541. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -0
  542. package/dist/services/approval/background-subagent-approval-controller.js +65 -0
  543. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -0
  544. package/dist/services/approval/background-subagent-approval-queue.d.ts +137 -0
  545. package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -0
  546. package/dist/services/approval/background-subagent-approval-queue.js +200 -0
  547. package/dist/services/approval/background-subagent-approval-queue.js.map +1 -0
  548. package/dist/services/approval/non-interactive-approval-policy.d.ts +33 -0
  549. package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -0
  550. package/dist/services/approval/non-interactive-approval-policy.js +85 -0
  551. package/dist/services/approval/non-interactive-approval-policy.js.map +1 -0
  552. package/dist/services/approval/session-read-access.d.ts +10 -0
  553. package/dist/services/approval/session-read-access.d.ts.map +1 -1
  554. package/dist/services/approval/session-read-access.js +12 -0
  555. package/dist/services/approval/session-read-access.js.map +1 -1
  556. package/dist/services/approval/session-read-grant-target.d.ts +7 -0
  557. package/dist/services/approval/session-read-grant-target.d.ts.map +1 -0
  558. package/dist/services/approval/session-read-grant-target.js +36 -0
  559. package/dist/services/approval/session-read-grant-target.js.map +1 -0
  560. package/dist/services/approval/shell-auto-approval-evaluator.d.ts +11 -3
  561. package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
  562. package/dist/services/approval/shell-auto-approval-evaluator.js +140 -46
  563. package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
  564. package/dist/services/approval/shell-auto-approval-resolver.d.ts +13 -0
  565. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  566. package/dist/services/approval/shell-auto-approval-resolver.js +74 -6
  567. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  568. package/dist/services/approval/shell-sandbox-approval.d.ts +22 -1
  569. package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -1
  570. package/dist/services/approval/shell-sandbox-approval.js +31 -4
  571. package/dist/services/approval/shell-sandbox-approval.js.map +1 -1
  572. package/dist/services/approval/tool-approval-batch-coordinator.d.ts +9 -0
  573. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  574. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -4
  575. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  576. package/dist/services/approval/tool-owner.d.ts +5 -2
  577. package/dist/services/approval/tool-owner.d.ts.map +1 -1
  578. package/dist/services/approval/tool-owner.js +0 -56
  579. package/dist/services/approval/tool-owner.js.map +1 -1
  580. package/dist/services/approval/tool-ownership-registry.d.ts +25 -0
  581. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -0
  582. package/dist/services/approval/tool-ownership-registry.js +63 -0
  583. package/dist/services/approval/tool-ownership-registry.js.map +1 -0
  584. package/dist/services/command-message-streaming.d.ts +8 -4
  585. package/dist/services/command-message-streaming.d.ts.map +1 -1
  586. package/dist/services/command-message-streaming.js +13 -52
  587. package/dist/services/command-message-streaming.js.map +1 -1
  588. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  589. package/dist/services/conversation/conversation-adapter-factory.js +1 -0
  590. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  591. package/dist/services/conversation/conversation-adapter.d.ts +120 -13
  592. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  593. package/dist/services/conversation/conversation-adapter.js +378 -63
  594. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  595. package/dist/services/conversation/conversation-admission-workflow.d.ts +69 -0
  596. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -0
  597. package/dist/services/conversation/conversation-admission-workflow.js +110 -0
  598. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -0
  599. package/dist/services/conversation/conversation-decoder.d.ts +14 -0
  600. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -0
  601. package/dist/services/conversation/conversation-decoder.js +149 -0
  602. package/dist/services/conversation/conversation-decoder.js.map +1 -0
  603. package/dist/services/conversation/conversation-events.d.ts +72 -24
  604. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  605. package/dist/services/conversation/conversation-history-repair.d.ts.map +1 -1
  606. package/dist/services/conversation/conversation-history-repair.js +34 -37
  607. package/dist/services/conversation/conversation-history-repair.js.map +1 -1
  608. package/dist/services/conversation/conversation-message-projection.d.ts +27 -0
  609. package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -0
  610. package/dist/services/conversation/conversation-message-projection.js +59 -0
  611. package/dist/services/conversation/conversation-message-projection.js.map +1 -0
  612. package/dist/services/conversation/conversation-orchestrator.d.ts +23 -14
  613. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  614. package/dist/services/conversation/conversation-orchestrator.js +472 -158
  615. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  616. package/dist/services/conversation/conversation-orchestrator.types.d.ts +16 -11
  617. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  618. package/dist/services/conversation/conversation-persistence-types.d.ts +15 -38
  619. package/dist/services/conversation/conversation-persistence-types.d.ts.map +1 -1
  620. package/dist/services/conversation/conversation-persistence.d.ts +3 -10
  621. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  622. package/dist/services/conversation/conversation-persistence.js +66 -15
  623. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  624. package/dist/services/conversation/conversation-replay.d.ts +7 -5
  625. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  626. package/dist/services/conversation/conversation-replay.js +127 -66
  627. package/dist/services/conversation/conversation-replay.js.map +1 -1
  628. package/dist/services/conversation/conversation-result-builder.d.ts +16 -2
  629. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  630. package/dist/services/conversation/conversation-result-builder.js +51 -15
  631. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  632. package/dist/services/conversation/conversation-runtime-factory.d.ts +18 -0
  633. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  634. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  635. package/dist/services/conversation/conversation-service.d.ts +67 -11
  636. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  637. package/dist/services/conversation/conversation-service.js +133 -16
  638. package/dist/services/conversation/conversation-service.js.map +1 -1
  639. package/dist/services/conversation/conversation-state-projector.d.ts +3 -3
  640. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  641. package/dist/services/conversation/conversation-state-projector.js +18 -0
  642. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  643. package/dist/services/conversation/conversation-store.d.ts +69 -12
  644. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  645. package/dist/services/conversation/conversation-store.js +216 -119
  646. package/dist/services/conversation/conversation-store.js.map +1 -1
  647. package/dist/services/conversation/conversation-turn-items.d.ts +8 -2
  648. package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
  649. package/dist/services/conversation/conversation-turn-items.js +96 -275
  650. package/dist/services/conversation/conversation-turn-items.js.map +1 -1
  651. package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -1
  652. package/dist/services/conversation/journal-to-ledger.js +4 -24
  653. package/dist/services/conversation/journal-to-ledger.js.map +1 -1
  654. package/dist/services/conversation/run-item-normalizer.d.ts +5 -0
  655. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -0
  656. package/dist/services/conversation/run-item-normalizer.js +245 -0
  657. package/dist/services/conversation/run-item-normalizer.js.map +1 -0
  658. package/dist/services/conversation/user-turn-item.d.ts +14 -0
  659. package/dist/services/conversation/user-turn-item.d.ts.map +1 -0
  660. package/dist/services/conversation/user-turn-item.js +27 -0
  661. package/dist/services/conversation/user-turn-item.js.map +1 -0
  662. package/dist/services/conversation-agent-client.d.ts +77 -6
  663. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  664. package/dist/services/cost/model-cost.d.ts +147 -0
  665. package/dist/services/cost/model-cost.d.ts.map +1 -0
  666. package/dist/services/cost/model-cost.js +217 -0
  667. package/dist/services/cost/model-cost.js.map +1 -0
  668. package/dist/services/cost/pricing-overlay.d.ts +26 -0
  669. package/dist/services/cost/pricing-overlay.d.ts.map +1 -0
  670. package/dist/services/cost/pricing-overlay.js +39 -0
  671. package/dist/services/cost/pricing-overlay.js.map +1 -0
  672. package/dist/services/cost/pricing.d.ts +13 -0
  673. package/dist/services/cost/pricing.d.ts.map +1 -0
  674. package/dist/services/cost/pricing.js +76 -0
  675. package/dist/services/cost/pricing.js.map +1 -0
  676. package/dist/services/handoff/handoff-flow-reducer.d.ts +27 -0
  677. package/dist/services/handoff/handoff-flow-reducer.d.ts.map +1 -0
  678. package/dist/services/handoff/handoff-flow-reducer.js +26 -0
  679. package/dist/services/handoff/handoff-flow-reducer.js.map +1 -0
  680. package/dist/services/handoff/handoff-session.d.ts +35 -0
  681. package/dist/services/handoff/handoff-session.d.ts.map +1 -0
  682. package/dist/services/handoff/handoff-session.js +136 -0
  683. package/dist/services/handoff/handoff-session.js.map +1 -0
  684. package/dist/services/hooks/hook-contracts.d.ts +124 -0
  685. package/dist/services/hooks/hook-contracts.d.ts.map +1 -0
  686. package/dist/services/hooks/hook-contracts.js +92 -0
  687. package/dist/services/hooks/hook-contracts.js.map +1 -0
  688. package/dist/services/hooks/hook-discovery.d.ts +45 -0
  689. package/dist/services/hooks/hook-discovery.d.ts.map +1 -0
  690. package/dist/services/hooks/hook-discovery.js +255 -0
  691. package/dist/services/hooks/hook-discovery.js.map +1 -0
  692. package/dist/services/hooks/hook-editor-shim.d.ts +6 -0
  693. package/dist/services/hooks/hook-editor-shim.d.ts.map +1 -0
  694. package/dist/services/hooks/hook-editor-shim.js +190 -0
  695. package/dist/services/hooks/hook-editor-shim.js.map +1 -0
  696. package/dist/services/hooks/hook-event-factory.d.ts +19 -0
  697. package/dist/services/hooks/hook-event-factory.d.ts.map +1 -0
  698. package/dist/services/hooks/hook-event-factory.js +45 -0
  699. package/dist/services/hooks/hook-event-factory.js.map +1 -0
  700. package/dist/services/hooks/hook-module-loader.d.ts +38 -0
  701. package/dist/services/hooks/hook-module-loader.d.ts.map +1 -0
  702. package/dist/services/hooks/hook-module-loader.js +69 -0
  703. package/dist/services/hooks/hook-module-loader.js.map +1 -0
  704. package/dist/services/hooks/hook-registry.d.ts +47 -0
  705. package/dist/services/hooks/hook-registry.d.ts.map +1 -0
  706. package/dist/services/hooks/hook-registry.js +185 -0
  707. package/dist/services/hooks/hook-registry.js.map +1 -0
  708. package/dist/services/hooks/hook-service.d.ts +44 -0
  709. package/dist/services/hooks/hook-service.d.ts.map +1 -0
  710. package/dist/services/hooks/hook-service.js +138 -0
  711. package/dist/services/hooks/hook-service.js.map +1 -0
  712. package/dist/services/hooks/hook-tool-lifecycle.d.ts +6 -0
  713. package/dist/services/hooks/hook-tool-lifecycle.d.ts.map +1 -0
  714. package/dist/services/hooks/hook-tool-lifecycle.js +33 -0
  715. package/dist/services/hooks/hook-tool-lifecycle.js.map +1 -0
  716. package/dist/services/hooks/index.d.ts +2 -0
  717. package/dist/services/hooks/index.d.ts.map +1 -0
  718. package/dist/services/hooks/index.js +2 -0
  719. package/dist/services/hooks/index.js.map +1 -0
  720. package/dist/services/input-surge-guard.d.ts.map +1 -1
  721. package/dist/services/input-surge-guard.js +13 -34
  722. package/dist/services/input-surge-guard.js.map +1 -1
  723. package/dist/services/logging/assistant-turn-journal.d.ts +1 -1
  724. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  725. package/dist/services/logging/assistant-turn-journal.js +21 -36
  726. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  727. package/dist/services/logging/conversation-log-events.d.ts +70 -7
  728. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  729. package/dist/services/logging/conversation-log-events.js +9 -0
  730. package/dist/services/logging/conversation-log-events.js.map +1 -1
  731. package/dist/services/logging/conversation-log-writer.d.ts +10 -4
  732. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  733. package/dist/services/logging/conversation-log-writer.js +184 -57
  734. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  735. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  736. package/dist/services/logging/conversation-logger.js +34 -1
  737. package/dist/services/logging/conversation-logger.js.map +1 -1
  738. package/dist/services/logging/logging-service.d.ts.map +1 -1
  739. package/dist/services/logging/logging-service.js +6 -2
  740. package/dist/services/logging/logging-service.js.map +1 -1
  741. package/dist/services/logging/provider-traffic.d.ts +2 -1
  742. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  743. package/dist/services/logging/provider-traffic.js +81 -5
  744. package/dist/services/logging/provider-traffic.js.map +1 -1
  745. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  746. package/dist/services/memory/memory-capabilities.js +13 -8
  747. package/dist/services/memory/memory-capabilities.js.map +1 -1
  748. package/dist/services/model-service.d.ts +3 -0
  749. package/dist/services/model-service.d.ts.map +1 -1
  750. package/dist/services/model-service.js +3 -1
  751. package/dist/services/model-service.js.map +1 -1
  752. package/dist/services/models/model-catalog-session.d.ts +24 -0
  753. package/dist/services/models/model-catalog-session.d.ts.map +1 -0
  754. package/dist/services/models/model-catalog-session.js +70 -0
  755. package/dist/services/models/model-catalog-session.js.map +1 -0
  756. package/dist/services/openai-candidate-observer.d.ts +18 -0
  757. package/dist/services/openai-candidate-observer.d.ts.map +1 -0
  758. package/dist/services/openai-candidate-observer.js +56 -0
  759. package/dist/services/openai-candidate-observer.js.map +1 -0
  760. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts +20 -0
  761. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts.map +1 -0
  762. package/dist/services/openai-root-checkpoint-lifecycle-observer.js +21 -0
  763. package/dist/services/openai-root-checkpoint-lifecycle-observer.js.map +1 -0
  764. package/dist/services/openai-root-provider-identity.d.ts +11 -0
  765. package/dist/services/openai-root-provider-identity.d.ts.map +1 -0
  766. package/dist/services/openai-root-provider-identity.js +16 -0
  767. package/dist/services/openai-root-provider-identity.js.map +1 -0
  768. package/dist/services/openai-root-selector-parity-observer.d.ts +53 -0
  769. package/dist/services/openai-root-selector-parity-observer.d.ts.map +1 -0
  770. package/dist/services/openai-root-selector-parity-observer.js +62 -0
  771. package/dist/services/openai-root-selector-parity-observer.js.map +1 -0
  772. package/dist/services/plan-mode-interceptor.js +2 -2
  773. package/dist/services/plan-mode-interceptor.js.map +1 -1
  774. package/dist/services/provider-continuity.d.ts +79 -0
  775. package/dist/services/provider-continuity.d.ts.map +1 -1
  776. package/dist/services/provider-continuity.js +170 -0
  777. package/dist/services/provider-continuity.js.map +1 -1
  778. package/dist/services/providers/provider-management-session.d.ts +12 -0
  779. package/dist/services/providers/provider-management-session.d.ts.map +1 -0
  780. package/dist/services/providers/provider-management-session.js +21 -0
  781. package/dist/services/providers/provider-management-session.js.map +1 -0
  782. package/dist/services/queue/queue-controller.d.ts +10 -14
  783. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  784. package/dist/services/queue/queue-controller.js +77 -59
  785. package/dist/services/queue/queue-controller.js.map +1 -1
  786. package/dist/services/retry/conversation-retry-policy.js +3 -3
  787. package/dist/services/retry/conversation-retry-policy.js.map +1 -1
  788. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  789. package/dist/services/retry/recovery-executor.js +7 -8
  790. package/dist/services/retry/recovery-executor.js.map +1 -1
  791. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  792. package/dist/services/retry/recovery-policy.js +4 -1
  793. package/dist/services/retry/recovery-policy.js.map +1 -1
  794. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  795. package/dist/services/retry/retry-classifier.js +6 -3
  796. package/dist/services/retry/retry-classifier.js.map +1 -1
  797. package/dist/services/retry/retry-contracts.d.ts +3 -5
  798. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  799. package/dist/services/retry/retry-error-classification.d.ts +1 -0
  800. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  801. package/dist/services/retry/retry-error-classification.js +28 -0
  802. package/dist/services/retry/retry-error-classification.js.map +1 -1
  803. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  804. package/dist/services/retry/retry-event-presenter.js +4 -1
  805. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  806. package/dist/services/retry/upstream-retry-policy.js +3 -3
  807. package/dist/services/rtk-service.d.ts.map +1 -1
  808. package/dist/services/rtk-service.js +3 -15
  809. package/dist/services/rtk-service.js.map +1 -1
  810. package/dist/services/runtime-setting-router.d.ts +19 -0
  811. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  812. package/dist/services/runtime-setting-router.js +33 -0
  813. package/dist/services/runtime-setting-router.js.map +1 -1
  814. package/dist/services/service-interfaces.d.ts +19 -2
  815. package/dist/services/service-interfaces.d.ts.map +1 -1
  816. package/dist/services/session/background-task-control.d.ts +123 -0
  817. package/dist/services/session/background-task-control.d.ts.map +1 -0
  818. package/dist/services/session/background-task-control.js +183 -0
  819. package/dist/services/session/background-task-control.js.map +1 -0
  820. package/dist/services/session/continuation-call-id-resolver.d.ts +16 -9
  821. package/dist/services/session/continuation-call-id-resolver.d.ts.map +1 -1
  822. package/dist/services/session/continuation-call-id-resolver.js +34 -48
  823. package/dist/services/session/continuation-call-id-resolver.js.map +1 -1
  824. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  825. package/dist/services/session/continuation-plan-applier.js +1 -3
  826. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  827. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  828. package/dist/services/session/continuation-recovery-handler.js +0 -2
  829. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  830. package/dist/services/session/continuation-state.d.ts +9 -5
  831. package/dist/services/session/continuation-state.d.ts.map +1 -1
  832. package/dist/services/session/continuation-state.js +1 -1
  833. package/dist/services/session/continuation-state.js.map +1 -1
  834. package/dist/services/session/live-run.d.ts +29 -0
  835. package/dist/services/session/live-run.d.ts.map +1 -0
  836. package/dist/services/session/live-run.js +111 -0
  837. package/dist/services/session/live-run.js.map +1 -0
  838. package/dist/services/session/nested-tool-compatibility-state.d.ts +20 -0
  839. package/dist/services/session/nested-tool-compatibility-state.d.ts.map +1 -0
  840. package/dist/services/session/nested-tool-compatibility-state.js +29 -0
  841. package/dist/services/session/nested-tool-compatibility-state.js.map +1 -0
  842. package/dist/services/session/pending-interaction-state.d.ts +60 -0
  843. package/dist/services/session/pending-interaction-state.d.ts.map +1 -0
  844. package/dist/services/session/pending-interaction-state.js +132 -0
  845. package/dist/services/session/pending-interaction-state.js.map +1 -0
  846. package/dist/services/session/post-execute-pause-capability.d.ts +17 -0
  847. package/dist/services/session/post-execute-pause-capability.d.ts.map +1 -0
  848. package/dist/services/session/post-execute-pause-capability.js +27 -0
  849. package/dist/services/session/post-execute-pause-capability.js.map +1 -0
  850. package/dist/services/session/post-execute-pause-policy.d.ts +20 -0
  851. package/dist/services/session/post-execute-pause-policy.d.ts.map +1 -0
  852. package/dist/services/session/post-execute-pause-policy.js +34 -0
  853. package/dist/services/session/post-execute-pause-policy.js.map +1 -0
  854. package/dist/services/session/post-execute-pending-registry.d.ts +63 -0
  855. package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -0
  856. package/dist/services/session/post-execute-pending-registry.js +123 -0
  857. package/dist/services/session/post-execute-pending-registry.js.map +1 -0
  858. package/dist/services/session/session-access-state.d.ts +24 -0
  859. package/dist/services/session/session-access-state.d.ts.map +1 -0
  860. package/dist/services/session/session-access-state.js +91 -0
  861. package/dist/services/session/session-access-state.js.map +1 -0
  862. package/dist/services/session/session-client-factory.d.ts +61 -0
  863. package/dist/services/session/session-client-factory.d.ts.map +1 -0
  864. package/dist/services/session/session-client-factory.js +103 -0
  865. package/dist/services/session/session-client-factory.js.map +1 -0
  866. package/dist/services/session/session-composition.d.ts +58 -0
  867. package/dist/services/session/session-composition.d.ts.map +1 -1
  868. package/dist/services/session/session-composition.js +178 -13
  869. package/dist/services/session/session-composition.js.map +1 -1
  870. package/dist/services/session/session-input-planner.d.ts +6 -2
  871. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  872. package/dist/services/session/session-input-planner.js +4 -0
  873. package/dist/services/session/session-input-planner.js.map +1 -1
  874. package/dist/services/session/session-lifecycle.d.ts +5 -0
  875. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  876. package/dist/services/session/session-lifecycle.js +16 -6
  877. package/dist/services/session/session-lifecycle.js.map +1 -1
  878. package/dist/services/session/session-manager.d.ts +11 -1
  879. package/dist/services/session/session-manager.d.ts.map +1 -1
  880. package/dist/services/session/session-manager.js +16 -3
  881. package/dist/services/session/session-manager.js.map +1 -1
  882. package/dist/services/session/session-stream-processor.d.ts +5 -0
  883. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  884. package/dist/services/session/session-stream-processor.js +164 -35
  885. package/dist/services/session/session-stream-processor.js.map +1 -1
  886. package/dist/services/session/session-tool-tracker.d.ts +10 -21
  887. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  888. package/dist/services/session/session-tool-tracker.js +12 -52
  889. package/dist/services/session/session-tool-tracker.js.map +1 -1
  890. package/dist/services/session/terminal-result-collector.d.ts +8 -0
  891. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  892. package/dist/services/session/terminal-result-collector.js +18 -4
  893. package/dist/services/session/terminal-result-collector.js.map +1 -1
  894. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
  895. package/dist/services/session/test-helpers/conversation-session-fixtures.js +8 -1
  896. package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
  897. package/dist/services/session/turn-attempt-factory.d.ts +2 -2
  898. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  899. package/dist/services/session/turn-attempt.d.ts +4 -2
  900. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  901. package/dist/services/session/turn-attempt.js +5 -0
  902. package/dist/services/session/turn-attempt.js.map +1 -1
  903. package/dist/services/session/turn-coordinator.d.ts +32 -2
  904. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  905. package/dist/services/session/turn-coordinator.js +180 -9
  906. package/dist/services/session/turn-coordinator.js.map +1 -1
  907. package/dist/services/session/turn-status-machine.d.ts +21 -6
  908. package/dist/services/session/turn-status-machine.d.ts.map +1 -1
  909. package/dist/services/session/turn-status-machine.js +50 -13
  910. package/dist/services/session/turn-status-machine.js.map +1 -1
  911. package/dist/services/session/turn-workflow.d.ts +35 -0
  912. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  913. package/dist/services/session/turn-workflow.js +373 -27
  914. package/dist/services/session/turn-workflow.js.map +1 -1
  915. package/dist/services/settings/ancillary-settings-migration.js +3 -3
  916. package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
  917. package/dist/services/settings/custom-provider-normalization.d.ts +10 -0
  918. package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -1
  919. package/dist/services/settings/custom-provider-normalization.js +35 -2
  920. package/dist/services/settings/custom-provider-normalization.js.map +1 -1
  921. package/dist/services/settings/settings-env.d.ts +3 -0
  922. package/dist/services/settings/settings-env.d.ts.map +1 -1
  923. package/dist/services/settings/settings-env.js +3 -3
  924. package/dist/services/settings/settings-env.js.map +1 -1
  925. package/dist/services/settings/settings-merger.d.ts +6 -5
  926. package/dist/services/settings/settings-merger.d.ts.map +1 -1
  927. package/dist/services/settings/settings-merger.js +9 -4
  928. package/dist/services/settings/settings-merger.js.map +1 -1
  929. package/dist/services/settings/settings-persistence.d.ts +17 -6
  930. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  931. package/dist/services/settings/settings-persistence.js +155 -28
  932. package/dist/services/settings/settings-persistence.js.map +1 -1
  933. package/dist/services/settings/settings-schema.d.ts +100 -4
  934. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  935. package/dist/services/settings/settings-schema.js +78 -8
  936. package/dist/services/settings/settings-schema.js.map +1 -1
  937. package/dist/services/settings/settings-service.d.ts +34 -5
  938. package/dist/services/settings/settings-service.d.ts.map +1 -1
  939. package/dist/services/settings/settings-service.js +200 -8
  940. package/dist/services/settings/settings-service.js.map +1 -1
  941. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  942. package/dist/services/settings/settings-sources.js +6 -0
  943. package/dist/services/settings/settings-sources.js.map +1 -1
  944. package/dist/services/shell/background-shell-registry.d.ts +110 -0
  945. package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
  946. package/dist/services/shell/background-shell-registry.js +326 -0
  947. package/dist/services/shell/background-shell-registry.js.map +1 -0
  948. package/dist/services/shell/shell-interaction-session.d.ts +43 -0
  949. package/dist/services/shell/shell-interaction-session.d.ts.map +1 -0
  950. package/dist/services/shell/shell-interaction-session.js +113 -0
  951. package/dist/services/shell/shell-interaction-session.js.map +1 -0
  952. package/dist/services/stream-event-processor.d.ts +11 -12
  953. package/dist/services/stream-event-processor.d.ts.map +1 -1
  954. package/dist/services/stream-event-processor.js +115 -352
  955. package/dist/services/stream-event-processor.js.map +1 -1
  956. package/dist/services/stream-snapshot.d.ts +0 -1
  957. package/dist/services/stream-snapshot.d.ts.map +1 -1
  958. package/dist/services/stream-snapshot.js +0 -1
  959. package/dist/services/stream-snapshot.js.map +1 -1
  960. package/dist/services/subagents/codename-run-id.d.ts +43 -0
  961. package/dist/services/subagents/codename-run-id.d.ts.map +1 -0
  962. package/dist/services/subagents/codename-run-id.js +683 -0
  963. package/dist/services/subagents/codename-run-id.js.map +1 -0
  964. package/dist/services/subagents/execution-runner.d.ts +5 -3
  965. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  966. package/dist/services/subagents/execution-runner.js +109 -10
  967. package/dist/services/subagents/execution-runner.js.map +1 -1
  968. package/dist/services/subagents/foreground-subagent-lease.d.ts +77 -0
  969. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -0
  970. package/dist/services/subagents/foreground-subagent-lease.js +156 -0
  971. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -0
  972. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  973. package/dist/services/subagents/mentor-runner.js +65 -34
  974. package/dist/services/subagents/mentor-runner.js.map +1 -1
  975. package/dist/services/subagents/nested-runner.d.ts +47 -23
  976. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  977. package/dist/services/subagents/nested-runner.js +263 -64
  978. package/dist/services/subagents/nested-runner.js.map +1 -1
  979. package/dist/services/subagents/role-loader.d.ts +3 -3
  980. package/dist/services/subagents/role-loader.d.ts.map +1 -1
  981. package/dist/services/subagents/role-loader.js +6 -7
  982. package/dist/services/subagents/role-loader.js.map +1 -1
  983. package/dist/services/subagents/runtime.d.ts +10 -0
  984. package/dist/services/subagents/runtime.d.ts.map +1 -1
  985. package/dist/services/subagents/runtime.js +31 -7
  986. package/dist/services/subagents/runtime.js.map +1 -1
  987. package/dist/services/subagents/subagent-async-registry.d.ts +50 -3
  988. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  989. package/dist/services/subagents/subagent-async-registry.js +463 -44
  990. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  991. package/dist/services/subagents/subagent-client-types.d.ts +2 -0
  992. package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
  993. package/dist/services/subagents/subagent-manager.d.ts +40 -7
  994. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  995. package/dist/services/subagents/subagent-manager.js +47 -1
  996. package/dist/services/subagents/subagent-manager.js.map +1 -1
  997. package/dist/services/subagents/subagent-notification-store.d.ts +112 -28
  998. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  999. package/dist/services/subagents/subagent-notification-store.js +197 -47
  1000. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  1001. package/dist/services/subagents/subagent-run-control.d.ts +41 -0
  1002. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
  1003. package/dist/services/subagents/subagent-run-control.js +166 -0
  1004. package/dist/services/subagents/subagent-run-control.js.map +1 -0
  1005. package/dist/services/subagents/subagent-session.d.ts +12 -7
  1006. package/dist/services/subagents/subagent-session.d.ts.map +1 -1
  1007. package/dist/services/subagents/subagent-session.js +13 -14
  1008. package/dist/services/subagents/subagent-session.js.map +1 -1
  1009. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +4 -5
  1010. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
  1011. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +66 -65
  1012. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
  1013. package/dist/services/subagents/tool-policy.d.ts +39 -17
  1014. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  1015. package/dist/services/subagents/tool-policy.js +209 -53
  1016. package/dist/services/subagents/tool-policy.js.map +1 -1
  1017. package/dist/services/subagents/types.d.ts +114 -2
  1018. package/dist/services/subagents/types.d.ts.map +1 -1
  1019. package/dist/services/subagents/types.js +2 -2
  1020. package/dist/services/subagents/types.js.map +1 -1
  1021. package/dist/services/subagents/utils.d.ts +8 -1
  1022. package/dist/services/subagents/utils.d.ts.map +1 -1
  1023. package/dist/services/subagents/utils.js +43 -16
  1024. package/dist/services/subagents/utils.js.map +1 -1
  1025. package/dist/services/test-helpers/mock-stream.d.ts +3 -0
  1026. package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
  1027. package/dist/services/test-helpers/mock-stream.js +8 -0
  1028. package/dist/services/test-helpers/mock-stream.js.map +1 -1
  1029. package/dist/services/tool-execution-ledger.d.ts +2 -0
  1030. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  1031. package/dist/services/tool-execution-ledger.js +59 -81
  1032. package/dist/services/tool-execution-ledger.js.map +1 -1
  1033. package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
  1034. package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
  1035. package/dist/test-helpers/conversation-session-with-adapter.js +5 -1
  1036. package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
  1037. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  1038. package/dist/test-helpers/ink-testing.js +2 -1
  1039. package/dist/test-helpers/ink-testing.js.map +1 -1
  1040. package/dist/tools/agent/activate-skill.d.ts +6 -1
  1041. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  1042. package/dist/tools/agent/activate-skill.js.map +1 -1
  1043. package/dist/tools/agent/ask-mentor.d.ts +1 -1
  1044. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  1045. package/dist/tools/agent/ask-mentor.js.map +1 -1
  1046. package/dist/tools/agent/ask-orchestrator.d.ts +11 -0
  1047. package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
  1048. package/dist/tools/agent/ask-orchestrator.js +39 -0
  1049. package/dist/tools/agent/ask-orchestrator.js.map +1 -0
  1050. package/dist/tools/agent/ask-user-constants.d.ts +6 -0
  1051. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  1052. package/dist/tools/agent/ask-user-constants.js +6 -0
  1053. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  1054. package/dist/tools/agent/run-subagent-async.d.ts +46 -4
  1055. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  1056. package/dist/tools/agent/run-subagent-async.js +220 -33
  1057. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  1058. package/dist/tools/agent/run-subagent.d.ts +28 -14
  1059. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  1060. package/dist/tools/agent/run-subagent.js +173 -68
  1061. package/dist/tools/agent/run-subagent.js.map +1 -1
  1062. package/dist/tools/file/apply-patch.d.ts +3 -1
  1063. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  1064. package/dist/tools/file/apply-patch.js +34 -10
  1065. package/dist/tools/file/apply-patch.js.map +1 -1
  1066. package/dist/tools/file/code-context.d.ts +3 -2
  1067. package/dist/tools/file/code-context.d.ts.map +1 -1
  1068. package/dist/tools/file/code-context.js +5 -5
  1069. package/dist/tools/file/code-context.js.map +1 -1
  1070. package/dist/tools/file/create-file.d.ts +4 -2
  1071. package/dist/tools/file/create-file.d.ts.map +1 -1
  1072. package/dist/tools/file/create-file.js +10 -7
  1073. package/dist/tools/file/create-file.js.map +1 -1
  1074. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  1075. package/dist/tools/file/edit-healing.js +54 -35
  1076. package/dist/tools/file/edit-healing.js.map +1 -1
  1077. package/dist/tools/file/glob-target.d.ts +12 -0
  1078. package/dist/tools/file/glob-target.d.ts.map +1 -0
  1079. package/dist/tools/file/glob-target.js +22 -0
  1080. package/dist/tools/file/glob-target.js.map +1 -0
  1081. package/dist/tools/file/glob.d.ts +9 -2
  1082. package/dist/tools/file/glob.d.ts.map +1 -1
  1083. package/dist/tools/file/glob.js +12 -16
  1084. package/dist/tools/file/glob.js.map +1 -1
  1085. package/dist/tools/file/grep.d.ts +9 -1
  1086. package/dist/tools/file/grep.d.ts.map +1 -1
  1087. package/dist/tools/file/grep.js +75 -13
  1088. package/dist/tools/file/grep.js.map +1 -1
  1089. package/dist/tools/file/read-file.d.ts +7 -1
  1090. package/dist/tools/file/read-file.d.ts.map +1 -1
  1091. package/dist/tools/file/read-file.js +3 -4
  1092. package/dist/tools/file/read-file.js.map +1 -1
  1093. package/dist/tools/file/search-replace.d.ts +5 -3
  1094. package/dist/tools/file/search-replace.d.ts.map +1 -1
  1095. package/dist/tools/file/search-replace.js +29 -19
  1096. package/dist/tools/file/search-replace.js.map +1 -1
  1097. package/dist/tools/format-helpers.d.ts +4 -3
  1098. package/dist/tools/format-helpers.d.ts.map +1 -1
  1099. package/dist/tools/format-helpers.js +16 -17
  1100. package/dist/tools/format-helpers.js.map +1 -1
  1101. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  1102. package/dist/tools/memory/memory-tools.js +61 -49
  1103. package/dist/tools/memory/memory-tools.js.map +1 -1
  1104. package/dist/tools/run-agent-workflow.d.ts +1 -1
  1105. package/dist/tools/run-agent-workflow.d.ts.map +1 -1
  1106. package/dist/tools/system/shell.d.ts +39 -3
  1107. package/dist/tools/system/shell.d.ts.map +1 -1
  1108. package/dist/tools/system/shell.js +380 -149
  1109. package/dist/tools/system/shell.js.map +1 -1
  1110. package/dist/tools/types.d.ts +102 -5
  1111. package/dist/tools/types.d.ts.map +1 -1
  1112. package/dist/tools/types.js +4 -1
  1113. package/dist/tools/types.js.map +1 -1
  1114. package/dist/tools/utils.d.ts +18 -0
  1115. package/dist/tools/utils.d.ts.map +1 -1
  1116. package/dist/tools/utils.js +78 -0
  1117. package/dist/tools/utils.js.map +1 -1
  1118. package/dist/tools/web/web-fetch.d.ts +1 -1
  1119. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  1120. package/dist/tools/web/web-fetch.js.map +1 -1
  1121. package/dist/tools/web/web-search.d.ts +1 -1
  1122. package/dist/tools/web/web-search.d.ts.map +1 -1
  1123. package/dist/tools/web/web-search.js.map +1 -1
  1124. package/dist/types/message.d.ts +2 -0
  1125. package/dist/types/message.d.ts.map +1 -1
  1126. package/dist/types/message.js.map +1 -1
  1127. package/dist/utils/ai/model-settings.d.ts.map +1 -1
  1128. package/dist/utils/ai/model-settings.js +0 -6
  1129. package/dist/utils/ai/model-settings.js.map +1 -1
  1130. package/dist/utils/ai/token-usage.d.ts +10 -5
  1131. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  1132. package/dist/utils/ai/token-usage.js +48 -35
  1133. package/dist/utils/ai/token-usage.js.map +1 -1
  1134. package/dist/utils/apply-diff.d.ts +3 -0
  1135. package/dist/utils/apply-diff.d.ts.map +1 -0
  1136. package/dist/utils/apply-diff.js +192 -0
  1137. package/dist/utils/apply-diff.js.map +1 -0
  1138. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  1139. package/dist/utils/conversation/conversation-event-handler.js +72 -13
  1140. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  1141. package/dist/utils/conversation/conversation-utils.d.ts +5 -0
  1142. package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
  1143. package/dist/utils/conversation/conversation-utils.js +1 -0
  1144. package/dist/utils/conversation/conversation-utils.js.map +1 -1
  1145. package/dist/utils/conversation/message-utils.d.ts +6 -0
  1146. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  1147. package/dist/utils/conversation/message-utils.js +17 -14
  1148. package/dist/utils/conversation/message-utils.js.map +1 -1
  1149. package/dist/utils/conversation/rewind-items.d.ts +32 -0
  1150. package/dist/utils/conversation/rewind-items.d.ts.map +1 -0
  1151. package/dist/utils/conversation/rewind-items.js +33 -0
  1152. package/dist/utils/conversation/rewind-items.js.map +1 -0
  1153. package/dist/utils/inject-warning-into-tool-output.d.ts +10 -0
  1154. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  1155. package/dist/utils/inject-warning-into-tool-output.js +17 -0
  1156. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  1157. package/dist/utils/settings-command.d.ts.map +1 -1
  1158. package/dist/utils/settings-command.js +41 -4
  1159. package/dist/utils/settings-command.js.map +1 -1
  1160. package/dist/utils/shell/command-logger.js.map +1 -1
  1161. package/dist/utils/shell/command-safety/find-helpers.d.ts +3 -2
  1162. package/dist/utils/shell/command-safety/find-helpers.d.ts.map +1 -1
  1163. package/dist/utils/shell/command-safety/find-helpers.js +34 -17
  1164. package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
  1165. package/dist/utils/shell/command-safety/handlers/find-handler.d.ts.map +1 -1
  1166. package/dist/utils/shell/command-safety/handlers/find-handler.js +0 -2
  1167. package/dist/utils/shell/command-safety/handlers/find-handler.js.map +1 -1
  1168. package/dist/utils/shell/command-safety/handlers/git-handler.d.ts.map +1 -1
  1169. package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
  1170. package/dist/utils/shell/command-safety/handlers/sed-handler.d.ts.map +1 -1
  1171. package/dist/utils/shell/command-safety/handlers/sed-handler.js +14 -9
  1172. package/dist/utils/shell/command-safety/handlers/sed-handler.js.map +1 -1
  1173. package/dist/utils/shell/command-safety/handlers/types.d.ts +5 -4
  1174. package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
  1175. package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
  1176. package/dist/utils/shell/command-safety/index.js +212 -88
  1177. package/dist/utils/shell/command-safety/index.js.map +1 -1
  1178. package/dist/utils/shell/command-safety/utils.d.ts +2 -1
  1179. package/dist/utils/shell/command-safety/utils.d.ts.map +1 -1
  1180. package/dist/utils/shell/command-safety/utils.js +5 -5
  1181. package/dist/utils/shell/command-safety/utils.js.map +1 -1
  1182. package/dist/utils/shell/execute-shell.d.ts +24 -3
  1183. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  1184. package/dist/utils/shell/execute-shell.js +228 -28
  1185. package/dist/utils/shell/execute-shell.js.map +1 -1
  1186. package/dist/utils/shell/sandbox/denied-read-stores.d.ts +1 -8
  1187. package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
  1188. package/dist/utils/shell/sandbox/denied-read-stores.js +1 -8
  1189. package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -1
  1190. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts +36 -6
  1191. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts.map +1 -1
  1192. package/dist/utils/shell/sandbox/docker-host-control-grants.js +47 -17
  1193. package/dist/utils/shell/sandbox/docker-host-control-grants.js.map +1 -1
  1194. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts +21 -0
  1195. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts.map +1 -0
  1196. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js +66 -0
  1197. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js.map +1 -0
  1198. package/dist/utils/shell/shell-session.js.map +1 -1
  1199. package/dist/utils/slash-command-dispatch.d.ts +21 -0
  1200. package/dist/utils/slash-command-dispatch.d.ts.map +1 -0
  1201. package/dist/utils/slash-command-dispatch.js +34 -0
  1202. package/dist/utils/slash-command-dispatch.js.map +1 -0
  1203. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  1204. package/dist/utils/streaming/extract-command-messages.js +29 -51
  1205. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  1206. package/dist/utils/value-suggestions.d.ts.map +1 -1
  1207. package/dist/utils/value-suggestions.js +0 -8
  1208. package/dist/utils/value-suggestions.js.map +1 -1
  1209. package/package.json +21 -19
  1210. package/dist/commands/retry-command.d.ts +0 -20
  1211. package/dist/commands/retry-command.d.ts.map +0 -1
  1212. package/dist/commands/retry-command.js +0 -39
  1213. package/dist/commands/retry-command.js.map +0 -1
  1214. package/dist/commands/undo-command.d.ts +0 -15
  1215. package/dist/commands/undo-command.d.ts.map +0 -1
  1216. package/dist/commands/undo-command.js +0 -28
  1217. package/dist/commands/undo-command.js.map +0 -1
  1218. package/dist/components/input/PopupManager.d.ts +0 -88
  1219. package/dist/components/input/PopupManager.d.ts.map +0 -1
  1220. package/dist/components/input/PopupManager.js +0 -21
  1221. package/dist/components/input/PopupManager.js.map +0 -1
  1222. package/dist/components/input/popup-key-navigation.d.ts +0 -18
  1223. package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
  1224. package/dist/components/input/popup-key-navigation.js +0 -16
  1225. package/dist/components/input/popup-key-navigation.js.map +0 -1
  1226. package/dist/components/input/popup-props.d.ts +0 -24
  1227. package/dist/components/input/popup-props.d.ts.map +0 -1
  1228. package/dist/components/input/popup-props.js +0 -72
  1229. package/dist/components/input/popup-props.js.map +0 -1
  1230. package/dist/components/menu/UndoSelectionMenu.d.ts +0 -12
  1231. package/dist/components/menu/UndoSelectionMenu.d.ts.map +0 -1
  1232. package/dist/components/menu/UndoSelectionMenu.js +0 -19
  1233. package/dist/components/menu/UndoSelectionMenu.js.map +0 -1
  1234. package/dist/hooks/use-mode-handlers.d.ts +0 -79
  1235. package/dist/hooks/use-mode-handlers.d.ts.map +0 -1
  1236. package/dist/hooks/use-mode-handlers.js +0 -183
  1237. package/dist/hooks/use-mode-handlers.js.map +0 -1
  1238. package/dist/hooks/use-pending-turn-guards.d.ts +0 -43
  1239. package/dist/hooks/use-pending-turn-guards.d.ts.map +0 -1
  1240. package/dist/hooks/use-pending-turn-guards.js +0 -120
  1241. package/dist/hooks/use-pending-turn-guards.js.map +0 -1
  1242. package/dist/hooks/use-trigger-detection.d.ts +0 -49
  1243. package/dist/hooks/use-trigger-detection.d.ts.map +0 -1
  1244. package/dist/hooks/use-trigger-detection.js +0 -104
  1245. package/dist/hooks/use-trigger-detection.js.map +0 -1
  1246. package/dist/hooks/use-undo-selection.d.ts +0 -23
  1247. package/dist/hooks/use-undo-selection.d.ts.map +0 -1
  1248. package/dist/hooks/use-undo-selection.js.map +0 -1
  1249. package/dist/lib/agent-run-orchestrator.d.ts +0 -38
  1250. package/dist/lib/agent-run-orchestrator.d.ts.map +0 -1
  1251. package/dist/lib/agent-run-orchestrator.js +0 -266
  1252. package/dist/lib/agent-run-orchestrator.js.map +0 -1
  1253. package/dist/lib/retry-executor.d.ts +0 -16
  1254. package/dist/lib/retry-executor.d.ts.map +0 -1
  1255. package/dist/lib/retry-executor.js +0 -53
  1256. package/dist/lib/retry-executor.js.map +0 -1
  1257. package/dist/lib/runner-manager.d.ts +0 -22
  1258. package/dist/lib/runner-manager.d.ts.map +0 -1
  1259. package/dist/lib/runner-manager.js +0 -56
  1260. package/dist/lib/runner-manager.js.map +0 -1
  1261. package/dist/prompts/shell-sandbox.md +0 -18
  1262. package/dist/prompts/simple.md +0 -53
  1263. package/dist/prompts/simple_prev.md +0 -33
  1264. package/dist/prompts/simple_v2.md +0 -84
  1265. package/dist/prompts/simple_v3.md +0 -267
  1266. package/dist/prompts/subagents/researcher.md +0 -40
  1267. package/dist/providers/ai-sdk-agents-adapter.d.ts +0 -7
  1268. package/dist/providers/ai-sdk-agents-adapter.d.ts.map +0 -1
  1269. package/dist/providers/ai-sdk-agents-adapter.js +0 -80
  1270. package/dist/providers/ai-sdk-agents-adapter.js.map +0 -1
  1271. package/dist/providers/fallback-responses-model.d.ts +0 -46
  1272. package/dist/providers/fallback-responses-model.d.ts.map +0 -1
  1273. package/dist/providers/fallback-responses-model.js +0 -296
  1274. package/dist/providers/fallback-responses-model.js.map +0 -1
  1275. package/dist/services/stream-event-parsing.d.ts +0 -4
  1276. package/dist/services/stream-event-parsing.d.ts.map +0 -1
  1277. package/dist/services/stream-event-parsing.js +0 -79
  1278. package/dist/services/stream-event-parsing.js.map +0 -1
@@ -0,0 +1,1236 @@
1
+ import { z } from 'zod';
2
+ import { createContinuationHandle, unwrapContinuationHandle, } from '../../contracts/continuation-handle.js';
3
+ import { createAgentStream } from '../agent-stream.js';
4
+ import { isZodToolParameterSchema } from '../../tools/types.js';
5
+ import { normalizeToolParameters } from '../../lib/tool-invoke.js';
6
+ import { isCancellationError, isHarnessInvariantError } from '../../lib/harness-invariant-error.js';
7
+ import { ApprovalLedger } from './tool-invocation-context.js';
8
+ import { addTokenUsage, normalizeUsage } from '../../utils/ai/token-usage.js';
9
+ import { computeModelCost } from '../../services/cost/model-cost.js';
10
+ import { getCatalogPricingVersion, getModelPricing } from '../../services/cost/pricing.js';
11
+ import { GenerationDeadline, GenerationGuard, GenerationGuardError, } from './generation-guard.js';
12
+ /**
13
+ * Raised when a run exceeds its `maxTurns` budget. The loop owns turn counting
14
+ * — the SDK-era `callModelInputFilter` hook is deliberately not reintroduced.
15
+ */
16
+ export class MaxTurnsExceededError extends Error {
17
+ maxTurns;
18
+ constructor(maxTurns) {
19
+ super(`Max turns (${maxTurns}) exceeded`);
20
+ this.name = 'MaxTurnsExceededError';
21
+ this.maxTurns = maxTurns;
22
+ }
23
+ }
24
+ class EventQueue {
25
+ #items = [];
26
+ #waiters = [];
27
+ #closed = false;
28
+ #failure;
29
+ push(item) {
30
+ const waiter = this.#waiters.shift();
31
+ if (waiter)
32
+ waiter.resolve({ done: false, value: item });
33
+ else
34
+ this.#items.push(item);
35
+ }
36
+ close(error) {
37
+ this.#closed = true;
38
+ this.#failure = error;
39
+ for (const waiter of this.#waiters.splice(0)) {
40
+ if (error)
41
+ waiter.reject(error);
42
+ else
43
+ waiter.resolve({ done: true, value: undefined });
44
+ }
45
+ }
46
+ next() {
47
+ const item = this.#items.shift();
48
+ if (item !== undefined)
49
+ return Promise.resolve({ done: false, value: item });
50
+ if (this.#closed) {
51
+ if (this.#failure)
52
+ return Promise.reject(this.#failure);
53
+ return Promise.resolve({ done: true, value: undefined });
54
+ }
55
+ return new Promise((resolve, reject) => this.#waiters.push({ resolve, reject }));
56
+ }
57
+ }
58
+ /**
59
+ * Small provider-neutral agent loop. It owns model-turn sequencing and tool
60
+ * execution; providers only implement `StreamedModelTurn`.
61
+ */
62
+ export class ApplicationRunLoop {
63
+ #deps;
64
+ #contextCompactionSessionState;
65
+ #activeAbortController = null;
66
+ #runInFlight = false;
67
+ /**
68
+ * Set when a segment ends holding approvals, meaning the turn is pausing
69
+ * rather than finishing. Injections offered during the pause wait here for
70
+ * the continuation segment instead of being refused for want of a run.
71
+ */
72
+ #turnPaused = false;
73
+ /**
74
+ * Set while a caller that owns turn boundaries has a turn open, from before
75
+ * its first request is built until after its last one settles.
76
+ *
77
+ * `#runInFlight` and `#turnPaused` only ever describe a *segment*, so between
78
+ * them they leave every gap in a turn where no run exists yet: the startup
79
+ * before the first request (provider model discovery, hooks, input
80
+ * preparation) and the backoff before a retry restarts the stream. A turn is
81
+ * steerable across those gaps, and only the caller that opened the turn knows
82
+ * they belong to it.
83
+ */
84
+ #turnOpen = false;
85
+ #pendingSteers = [];
86
+ constructor(deps) {
87
+ this.#deps = deps;
88
+ this.#contextCompactionSessionState = deps.contextCompactionSessionState ?? { disabled: false };
89
+ }
90
+ /**
91
+ * Declare a turn open, making it steerable before its first run exists.
92
+ *
93
+ * Anything still waiting belongs to a turn that never closed, and can never
94
+ * be admitted now.
95
+ */
96
+ openTurn() {
97
+ this.#releasePendingSteers({ reason: 'superseded_by_new_turn' });
98
+ this.#turnOpen = true;
99
+ this.#turnPaused = false;
100
+ }
101
+ /**
102
+ * Declare the turn over. Whatever is still waiting had no boundary left, so
103
+ * it is handed back for the caller to send as its own turn.
104
+ */
105
+ closeTurn() {
106
+ this.#turnOpen = false;
107
+ this.#turnPaused = false;
108
+ this.#releasePendingSteers({ reason: 'turn_closed' });
109
+ }
110
+ abort() {
111
+ this.abortSegment();
112
+ // An aborted turn will not resume, so nothing may keep waiting on it.
113
+ this.#turnOpen = false;
114
+ this.#turnPaused = false;
115
+ this.#releasePendingSteers({ reason: 'aborted' });
116
+ }
117
+ /**
118
+ * Stop the segment currently streaming without judging the turn's fate.
119
+ *
120
+ * Resuming a paused turn goes through here, so waiting injections survive;
121
+ * only `abort`, which means the turn itself is over, discards them.
122
+ */
123
+ abortSegment() {
124
+ this.#activeAbortController?.abort();
125
+ this.#activeAbortController = null;
126
+ }
127
+ /**
128
+ * Hand the running turn a user message to send with its next model request.
129
+ *
130
+ * The loop admits it at a request boundary — after the tool results of the
131
+ * current round are in history and before the next request is built — so the
132
+ * model reads it in sequence without the turn being interrupted. Nothing is
133
+ * cancelled, and a tool already running is untouched.
134
+ *
135
+ * The wait spans the whole turn, not just the segment it was offered to: a
136
+ * turn that pauses for an approval resumes as a new segment, and the message
137
+ * is admitted at that segment's first boundary. A caller that declares its
138
+ * turn boundaries with `openTurn`/`closeTurn` extends the wait further still,
139
+ * to the gaps where no segment exists at all — before the first request, and
140
+ * across a retry that restarts the stream.
141
+ *
142
+ * Resolves `'admitted'` once the message has been admitted, `'released'`
143
+ * when the turn ends first (or none is running) — it offered no further
144
+ * request boundary, so the caller must send the message as its own turn
145
+ * instead — and `'retracted'` when `retractSteer` pulled it out first.
146
+ *
147
+ * `options.id` correlates this steer with `retractSteer`/`editSteer`. A
148
+ * steer offered without an id can never be retracted or edited in place —
149
+ * only released or admitted.
150
+ */
151
+ steer(items, options) {
152
+ if (items.length === 0)
153
+ return Promise.resolve('released');
154
+ if (!this.#turnOpen && !this.#runInFlight && !this.#turnPaused)
155
+ return Promise.resolve('released');
156
+ return new Promise((resolve) => {
157
+ this.#pendingSteers.push({ id: options?.id, items, resolve });
158
+ });
159
+ }
160
+ /**
161
+ * Drop a still-waiting steer before it reaches a request boundary. Returns
162
+ * `false` when the id is unknown, including when it was already admitted.
163
+ *
164
+ * Invariant: this and `#admitPendingSteers` are both synchronous, and the
165
+ * latter drains `#pendingSteers` in a single pass — so the two can never
166
+ * interleave. A retraction is decided in the same tick against whatever is
167
+ * currently in `#pendingSteers`; once an item has been admitted it is no
168
+ * longer in that array for this method to find. No locking is needed to
169
+ * close the race between "the user retracts" and "the turn admits".
170
+ */
171
+ retractSteer(id) {
172
+ const index = this.#pendingSteers.findIndex((steer) => steer.id === id);
173
+ if (index < 0)
174
+ return false;
175
+ const [steer] = this.#pendingSteers.splice(index, 1);
176
+ steer.resolve('retracted');
177
+ return true;
178
+ }
179
+ /**
180
+ * Replace a waiting steer's items in place, keeping its position (and thus
181
+ * its priority relative to other pending steers) and its id. Returns
182
+ * `false` when the id is unknown, including when it was already admitted —
183
+ * same synchronicity invariant as `retractSteer`.
184
+ */
185
+ editSteer(id, items) {
186
+ const index = this.#pendingSteers.findIndex((steer) => steer.id === id);
187
+ if (index < 0)
188
+ return false;
189
+ this.#pendingSteers[index] = { ...this.#pendingSteers[index], items };
190
+ return true;
191
+ }
192
+ /** Settle every steer this run did not admit so callers stop waiting on it. */
193
+ #releasePendingSteers(reason = {}) {
194
+ const pending = this.#pendingSteers;
195
+ this.#pendingSteers = [];
196
+ if (pending.length > 0) {
197
+ this.#deps.logDiagnostic?.('Steer released at run end', { released: pending.length, ...reason });
198
+ }
199
+ for (const steer of pending)
200
+ steer.resolve('released');
201
+ }
202
+ /**
203
+ * Append waiting steers to the turn as ordinary user messages.
204
+ *
205
+ * They enter history and model input exactly as a user turn does — never
206
+ * folded into a tool result — so the provider sees the user speaking after
207
+ * the tool results of the round that was in flight when they typed.
208
+ */
209
+ #admitPendingSteers(state, stream, queue) {
210
+ if (this.#pendingSteers.length === 0)
211
+ return;
212
+ const admitted = this.#pendingSteers;
213
+ this.#pendingSteers = [];
214
+ this.#deps.logDiagnostic?.('Steer admitted at request boundary', {
215
+ admitted: admitted.length,
216
+ turnCount: state.turnCount,
217
+ });
218
+ for (const steer of admitted) {
219
+ for (const item of steer.items) {
220
+ state.history.push(item);
221
+ state.input.push(...normalizeApplicationInput([item]));
222
+ outputPush(stream, queue, { type: 'item', item });
223
+ }
224
+ steer.resolve('admitted');
225
+ }
226
+ }
227
+ startStream(agent, input, options = {}) {
228
+ // Without a declared turn scope, a fresh stream is the only evidence this
229
+ // loop gets that a new turn has begun: anything still waiting belonged to
230
+ // the previous one and must not leak into work the user did not aim it at.
231
+ // With one, this call may equally be the same turn restarting after a
232
+ // retry, which the loop cannot tell apart — so `openTurn`/`closeTurn` own
233
+ // the decision instead.
234
+ this.#turnPaused = false;
235
+ if (!this.#turnOpen)
236
+ this.#releasePendingSteers({ reason: 'superseded_by_new_turn' });
237
+ const state = {
238
+ agent,
239
+ input: normalizeInput(input),
240
+ history: normalizeHistory(input),
241
+ // A response ID is usable only after its provider origin is recorded.
242
+ // This also makes old callers that omit providerId fail closed.
243
+ responseId: options.providerId && options.supportsConversationChaining === true
244
+ ? options.previousResponseId ?? undefined
245
+ : undefined,
246
+ pendingApprovals: [],
247
+ supportsConversationChaining: options.supportsConversationChaining === true,
248
+ currentProviderId: options.providerId,
249
+ responseProviderId: options.providerId && options.supportsConversationChaining === true && options.previousResponseId
250
+ ? options.providerId
251
+ : undefined,
252
+ requestPreparation: options.requestPreparation,
253
+ sessionId: options.sessionId,
254
+ turnId: options.turnId,
255
+ hookScope: options.hookScope,
256
+ context: options.context,
257
+ approvals: options.approvals ?? new ApprovalLedger(),
258
+ turnCount: 0,
259
+ maxTurns: options.maxTurns,
260
+ };
261
+ state.approve = (interruption) => {
262
+ state.approvalDecision = 'approved';
263
+ state.approvalDecisionCallId = getInterruptionCallId(interruption);
264
+ };
265
+ state.reject = (interruption, approvalOptions) => {
266
+ state.approvalDecision = 'rejected';
267
+ state.approvalDecisionCallId = getInterruptionCallId(interruption);
268
+ state.approvalMessage = approvalOptions?.message;
269
+ };
270
+ return this.#run(state, options);
271
+ }
272
+ continueRunStream(handle, options = {}) {
273
+ const state = unwrapContinuationHandle(handle);
274
+ if (!state || typeof state !== 'object' || !('agent' in state) || !('input' in state)) {
275
+ throw new Error('Invalid application continuation state');
276
+ }
277
+ // Handles created before the ledger existed cannot resume meaningfully;
278
+ // give them a fresh ledger rather than crashing on `approvals` access.
279
+ if (!state.approvals)
280
+ state.approvals = new ApprovalLedger();
281
+ // A continuation handle from before approval batching carried only the
282
+ // current pending item. Normalize it into the queue used by current runs.
283
+ if (!state.pendingApprovals)
284
+ state.pendingApprovals = state.pendingApproval ? [state.pendingApproval] : [];
285
+ if (!state.pendingApproval && state.pendingApprovals.length > 0) {
286
+ state.pendingApproval = state.pendingApprovals[0];
287
+ }
288
+ // Handles created before cost accounting existed have no record list.
289
+ if (!state.costRecords)
290
+ state.costRecords = [];
291
+ // Response IDs are provider-owned. A handle from before provenance was
292
+ // recorded, a missing providerId, or a provider switch must never forward
293
+ // its opaque ID. In particular, do not use previousResponseId as a
294
+ // compatibility fallback here: its origin cannot be proven.
295
+ const previousProviderId = state.currentProviderId;
296
+ const sameProvider = typeof previousProviderId === 'string' &&
297
+ typeof options.providerId === 'string' &&
298
+ previousProviderId === options.providerId;
299
+ if (!sameProvider || options.supportsConversationChaining !== true) {
300
+ state.responseId = undefined;
301
+ state.responseProviderId = undefined;
302
+ }
303
+ else if (options.previousResponseId) {
304
+ // A same-provider caller may supply a refreshed continuity anchor (for
305
+ // example after persisted-session recovery). Its origin is now proven
306
+ // by the provider identity carried in this continuation state.
307
+ state.responseId = options.previousResponseId;
308
+ state.responseProviderId = options.providerId;
309
+ }
310
+ state.currentProviderId = options.providerId;
311
+ // The turn budget belongs to the run, so a resumed run keeps spending the
312
+ // same one rather than starting over after every approval pause.
313
+ if (typeof state.turnCount !== 'number')
314
+ state.turnCount = 0;
315
+ if (state.maxTurns === undefined)
316
+ state.maxTurns = options.maxTurns;
317
+ if (typeof state.supportsConversationChaining !== 'boolean') {
318
+ state.supportsConversationChaining = options.supportsConversationChaining === true;
319
+ }
320
+ else {
321
+ // AgentClient supplies the current provider capability on every resume.
322
+ state.supportsConversationChaining = options.supportsConversationChaining === true;
323
+ }
324
+ // A continuation receives a fresh immutable snapshot from the session;
325
+ // refresh the preparation closure when supplied, while preserving the
326
+ // root closure for callers that do not provide one again.
327
+ if (options.requestPreparation)
328
+ state.requestPreparation = options.requestPreparation;
329
+ if (options.sessionId !== undefined)
330
+ state.sessionId = options.sessionId;
331
+ if (options.turnId !== undefined)
332
+ state.turnId = options.turnId;
333
+ if (options.hookScope !== undefined)
334
+ state.hookScope = options.hookScope;
335
+ return this.#run(state, options);
336
+ }
337
+ #run(state, options) {
338
+ const queue = new EventQueue();
339
+ this.abortSegment();
340
+ const controller = new AbortController();
341
+ this.#activeAbortController = controller;
342
+ this.#runInFlight = true;
343
+ // This segment is running, so the turn is no longer paused between them.
344
+ this.#turnPaused = false;
345
+ if (options.signal) {
346
+ if (options.signal.aborted)
347
+ controller.abort();
348
+ else
349
+ options.signal.addEventListener('abort', () => controller.abort(), { once: true });
350
+ }
351
+ const effectiveOptions = { ...options, signal: controller.signal };
352
+ const toolContext = {
353
+ context: state.context,
354
+ approvals: state.approvals,
355
+ signal: effectiveOptions.signal,
356
+ // A getter, not a snapshot: the context object outlives every turn, and
357
+ // tools read it while deciding whether to warn about the turn budget.
358
+ get turn() {
359
+ return { count: state.turnCount, max: state.maxTurns };
360
+ },
361
+ };
362
+ const output = [];
363
+ const stream = createAgentStream({
364
+ [Symbol.asyncIterator]: () => ({ next: () => queue.next() }),
365
+ completed: Promise.resolve(undefined),
366
+ history: state.history,
367
+ newItems: output,
368
+ output,
369
+ finalOutput: undefined,
370
+ lastResponseId: state.responseId ?? null,
371
+ interruptions: [],
372
+ state: createContinuationHandle(state),
373
+ rawResponses: [],
374
+ get runUsage() {
375
+ return state.usage;
376
+ },
377
+ get runCostRecords() {
378
+ return state.costRecords ?? [];
379
+ },
380
+ });
381
+ let exitError;
382
+ stream.completed = this.#execute(state, stream, queue, effectiveOptions, toolContext, controller)
383
+ .catch((error) => {
384
+ exitError = error;
385
+ stream.cancelled = error instanceof Error && error.name === 'AbortError';
386
+ queue.close(error);
387
+ throw error;
388
+ })
389
+ .finally(() => {
390
+ if (this.#activeAbortController === controller)
391
+ this.#activeAbortController = null;
392
+ this.#runInFlight = false;
393
+ // A segment that ends holding approvals has paused the turn, not ended
394
+ // it: the caller resumes through continueRunStream, which offers
395
+ // another request boundary. Injections wait for it. Only a segment
396
+ // that ends with nothing outstanding has truly finished the turn, and
397
+ // then anything still waiting has to be sent as its own turn instead.
398
+ const pendingApprovals = state.pendingApprovals?.length ?? 0;
399
+ const cancelled = stream.cancelled === true;
400
+ this.#turnPaused = pendingApprovals > 0 && !cancelled && exitError === undefined;
401
+ if (this.#turnPaused)
402
+ return;
403
+ // A declared turn outlives its segments — this one may be about to be
404
+ // retried, or resumed past a post-execute gate. Its owner says when it
405
+ // is over.
406
+ if (this.#turnOpen)
407
+ return;
408
+ this.#releasePendingSteers({
409
+ pendingApprovals,
410
+ cancelled,
411
+ error: exitError instanceof Error ? exitError.name : exitError ? String(exitError) : undefined,
412
+ turnCount: state.turnCount,
413
+ });
414
+ });
415
+ return stream;
416
+ }
417
+ async #execute(state, stream, queue, options, toolContext, requestAbortController) {
418
+ while (true) {
419
+ if (options.signal?.aborted)
420
+ throw Object.assign(new Error('Operation aborted'), { name: 'AbortError' });
421
+ state.pendingApprovals ??= state.pendingApproval ? [state.pendingApproval] : [];
422
+ if (state.pendingApprovals.length > 0 && state.approvalDecision) {
423
+ const selectedIndex = state.approvalDecisionCallId
424
+ ? state.pendingApprovals.findIndex((pending) => getInterruptionCallId(pending.interruption) === state.approvalDecisionCallId)
425
+ : -1;
426
+ if (state.approvalDecisionCallId && selectedIndex < 0) {
427
+ throw new Error(`Approval decision references unknown pending tool call: ${state.approvalDecisionCallId}`);
428
+ }
429
+ const pendingIndex = selectedIndex >= 0 ? selectedIndex : 0;
430
+ const pending = state.pendingApprovals[pendingIndex];
431
+ const approved = state.approvalDecision === 'approved';
432
+ if (approved) {
433
+ state.approvals.approveTool({ toolName: pending.toolName, callId: pending.callId });
434
+ }
435
+ else {
436
+ state.approvals.rejectTool({ toolName: pending.toolName, callId: pending.callId }, { message: state.approvalMessage });
437
+ }
438
+ const rawResult = approved
439
+ ? await this.#invokeTool(pending.definition, pending.params, toolContext, pending.callId, state)
440
+ : state.approvalMessage ?? 'rejected';
441
+ const result = typeof rawResult === 'string' ? rawResult : JSON.stringify(rawResult);
442
+ const resultItem = {
443
+ type: 'function_call_result',
444
+ callId: pending.callId,
445
+ name: pending.toolName,
446
+ output: result,
447
+ };
448
+ state.history.push(resultItem);
449
+ state.input.push({ type: 'tool_result', id: pending.callId, output: result });
450
+ outputPush(stream, queue, { type: 'item', item: resultItem });
451
+ state.pendingApprovals.splice(pendingIndex, 1);
452
+ state.pendingApproval = state.pendingApprovals[0];
453
+ state.approvalDecision = undefined;
454
+ state.approvalDecisionCallId = undefined;
455
+ state.approvalMessage = undefined;
456
+ stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
457
+ if (state.pendingApprovals.length > 0)
458
+ return finish(stream, state, queue);
459
+ // Nothing is outstanding, so this segment is terminal — see
460
+ // `stopAfterApprovalResolution`. Stopping here rather than at the
461
+ // request boundary below is what keeps the just-recorded tool result
462
+ // in the committed history.
463
+ if (options.stopAfterApprovalResolution)
464
+ return finish(stream, state, queue);
465
+ }
466
+ // The request boundary: every tool result of the previous round is in
467
+ // history, and the next request has not been built. A user message
468
+ // admitted here reaches the model in sequence, mid-turn.
469
+ this.#admitPendingSteers(state, stream, queue);
470
+ state.turnCount += 1;
471
+ if (state.maxTurns !== undefined && state.turnCount > state.maxTurns) {
472
+ throw new MaxTurnsExceededError(state.maxTurns);
473
+ }
474
+ const model = await this.#deps.resolveModel(state.agent.model);
475
+ let sawToolCall = false;
476
+ let completion;
477
+ let pendingNativeReasoning;
478
+ // Stable run-local request id, allocated immediately before dispatch so a
479
+ // cost record can be settled exactly once (success or failure).
480
+ const requestId = this.#nextRequestId(state);
481
+ const request = {
482
+ instructions: state.agent.instructions,
483
+ ...(state.supportsConversationChaining &&
484
+ state.responseId &&
485
+ state.responseProviderId !== undefined &&
486
+ state.responseProviderId === state.currentProviderId
487
+ ? { previousResponseId: state.responseId }
488
+ : {}),
489
+ input: state.input,
490
+ tools: toModelTools(state.agent.tools),
491
+ applicationTools: state.agent.tools,
492
+ ...(state.agent.modelSettings?.temperature !== undefined
493
+ ? { temperature: state.agent.modelSettings.temperature }
494
+ : {}),
495
+ ...(state.agent.modelSettings?.reasoning ? { reasoning: state.agent.modelSettings.reasoning } : {}),
496
+ ...(state.agent.modelSettings?.maxTokens !== undefined
497
+ ? { maxTokens: state.agent.modelSettings.maxTokens }
498
+ : {}),
499
+ ...(state.agent.outputType !== undefined ? { outputType: state.agent.outputType } : {}),
500
+ ...(state.agent.modelSettings?.codex ? { codex: state.agent.modelSettings.codex } : {}),
501
+ ...(state.agent.modelSettings?.providerData
502
+ ? {
503
+ providerOptions: this.#contextCompactionSessionState.disabled
504
+ ? Object.fromEntries(Object.entries(state.agent.modelSettings.providerData).filter(([key]) => key !== 'contextCompaction'))
505
+ : state.agent.modelSettings.providerData,
506
+ }
507
+ : {}),
508
+ ...(options.signal ? { signal: options.signal } : {}),
509
+ };
510
+ const generationGuard = new GenerationGuard({
511
+ maxOutputCharacters: state.agent.modelSettings?.maxStreamOutputChars,
512
+ maxTextCharacters: state.agent.modelSettings?.maxStreamOutputChars,
513
+ maxReasoningCharacters: state.agent.modelSettings?.maxStreamOutputChars,
514
+ maxToolArgumentCharacters: state.agent.modelSettings?.maxStreamOutputChars,
515
+ maxCumulativeToolArgumentCharacters: state.agent.modelSettings?.maxStreamOutputChars,
516
+ requestDeadlineMs: state.agent.modelSettings?.maxModelRequestDurationMs,
517
+ ...options.generationGuard,
518
+ });
519
+ const consume = async () => {
520
+ const deadline = new GenerationDeadline(generationGuard.requestDeadlineMs, () => requestAbortController.abort());
521
+ let iterator;
522
+ let iteratorFinished = false;
523
+ try {
524
+ iterator = model.stream(request)[Symbol.asyncIterator]();
525
+ while (true) {
526
+ const next = await deadline.wait(iterator.next());
527
+ if (next.done) {
528
+ iteratorFinished = true;
529
+ return;
530
+ }
531
+ const event = next.value;
532
+ if (event.type === 'completion') {
533
+ generationGuard.observeCompletion(event.output);
534
+ completion = event;
535
+ continue;
536
+ }
537
+ if (event.type === 'text_delta') {
538
+ generationGuard.observeText(event.text);
539
+ outputPush(stream, queue, { type: 'text_delta', text: event.text });
540
+ continue;
541
+ }
542
+ if (event.type === 'codex_rate_limits') {
543
+ outputPush(stream, queue, { type: 'codex_rate_limits', rateLimits: event.rateLimits });
544
+ continue;
545
+ }
546
+ if (event.type === 'reasoning_delta') {
547
+ generationGuard.observeReasoning(event.text);
548
+ pendingNativeReasoning = appendNativeReasoning(pendingNativeReasoning, event);
549
+ outputPush(stream, queue, { type: 'reasoning_delta', text: event.text });
550
+ continue;
551
+ }
552
+ if (event.type === 'tool_call_streaming_delta') {
553
+ generationGuard.observeToolArgumentProgress(event.argumentCharCount);
554
+ outputPush(stream, queue, event);
555
+ continue;
556
+ }
557
+ if (event.type === 'context_compaction_started' || event.type === 'context_compaction_completed') {
558
+ outputPush(stream, queue, event);
559
+ continue;
560
+ }
561
+ if (event.type === 'tool_call') {
562
+ generationGuard.observeToolCall(event.arguments);
563
+ pendingNativeReasoning = commitPendingNativeReasoning(state, stream, queue, pendingNativeReasoning);
564
+ sawToolCall = true;
565
+ await this.#handleToolCall(state, stream, queue, event, toolContext);
566
+ }
567
+ }
568
+ }
569
+ finally {
570
+ deadline.dispose();
571
+ if (iterator && !iteratorFinished)
572
+ void iterator.return?.().catch(() => undefined);
573
+ }
574
+ };
575
+ const dispatch = async () => {
576
+ state.requestPreparation?.prepare(request);
577
+ await consume();
578
+ };
579
+ try {
580
+ if (state.requestPreparation)
581
+ await state.requestPreparation.run(dispatch);
582
+ else
583
+ await dispatch();
584
+ }
585
+ catch (error) {
586
+ if (error instanceof GenerationGuardError)
587
+ requestAbortController.abort();
588
+ // Dispatch began, but no terminal completion was accepted. Record an
589
+ // unpriced marker so the summary stays honest (partial) rather than
590
+ // appearing exact. Observational only: the error still propagates.
591
+ const cancelled = error instanceof Error && error.name === 'AbortError';
592
+ this.#appendCostRecord(state, {
593
+ requestId,
594
+ provider: state.currentProviderId,
595
+ model: state.agent.model,
596
+ tier: resolveServiceTier(request),
597
+ outcome: cancelled ? 'cancelled' : 'failed',
598
+ });
599
+ throw error;
600
+ }
601
+ if (!completion)
602
+ throw new Error('Application model turn ended without completion');
603
+ // Commit the authoritative terminal state before handling terminal-only
604
+ // tool calls. Approval may pause immediately after this point, and the
605
+ // continuation must still carry the response that produced the calls.
606
+ // Response IDs are provider-chain state, not generic run metadata. Keep
607
+ // them out of continuation handles for providers that do not support
608
+ // chaining, while still exposing the completed provider response on the
609
+ // current stream for diagnostics.
610
+ if (state.supportsConversationChaining && state.currentProviderId !== undefined) {
611
+ state.responseId = completion.responseId;
612
+ state.responseProviderId = state.currentProviderId;
613
+ }
614
+ else {
615
+ state.responseId = undefined;
616
+ state.responseProviderId = undefined;
617
+ }
618
+ let normalizedCompletionUsage;
619
+ if (completion.usage !== undefined) {
620
+ normalizedCompletionUsage = normalizeModelUsage(completion.usage);
621
+ if (normalizedCompletionUsage) {
622
+ const accumulated = addTokenUsage(normalizeModelUsage(state.usage), normalizedCompletionUsage);
623
+ state.usage = {
624
+ ...(accumulated.prompt_tokens !== undefined ? { inputTokens: accumulated.prompt_tokens } : {}),
625
+ ...(accumulated.completion_tokens !== undefined ? { outputTokens: accumulated.completion_tokens } : {}),
626
+ // `total_tokens` is the billable normalized total, including cache
627
+ // creation tokens. Keep it alongside the application aliases so the
628
+ // authoritative run accumulator never reconstructs a smaller total.
629
+ ...(accumulated.total_tokens !== undefined ? { totalTokens: accumulated.total_tokens } : {}),
630
+ ...(accumulated.cache_read_tokens !== undefined
631
+ ? { cachedInputTokens: accumulated.cache_read_tokens }
632
+ : {}),
633
+ ...(accumulated.cache_creation_tokens !== undefined
634
+ ? { cacheWriteTokens: accumulated.cache_creation_tokens }
635
+ : {}),
636
+ };
637
+ }
638
+ else {
639
+ // Providers may carry a future/opaque usage shape. Preserve the old
640
+ // pass-through behavior when normalization cannot recognize it.
641
+ state.usage = completion.usage;
642
+ }
643
+ }
644
+ else {
645
+ normalizedCompletionUsage = undefined;
646
+ }
647
+ // Attribute cost while the dispatched request's identity is still known.
648
+ this.#appendCostRecord(state, {
649
+ requestId,
650
+ provider: state.currentProviderId,
651
+ model: state.agent.model,
652
+ tier: resolveServiceTier(request),
653
+ outcome: 'completed',
654
+ usage: normalizedCompletionUsage,
655
+ providerUsd: completion.costUsd,
656
+ });
657
+ stream.lastResponseId = completion.responseId;
658
+ stream.rawResponses?.push(completion);
659
+ // Some provider adapters report function calls only in the terminal
660
+ // completion rather than as separate stream events. Their reasoning may
661
+ // likewise be terminal-only, so associate it before replaying calls.
662
+ if (!sawToolCall) {
663
+ for (const item of completion.output) {
664
+ if (item.type === 'reasoning')
665
+ pendingNativeReasoning = appendNativeReasoning(pendingNativeReasoning, item);
666
+ }
667
+ for (const item of completion.output) {
668
+ if (item.type !== 'tool_call')
669
+ continue;
670
+ pendingNativeReasoning = commitPendingNativeReasoning(state, stream, queue, pendingNativeReasoning);
671
+ sawToolCall = true;
672
+ await this.#handleToolCall(state, stream, queue, item, toolContext);
673
+ }
674
+ }
675
+ // A native reasoning item belongs to the completed assistant turn even
676
+ // when no tool call follows it. Commit it before assistant text so both
677
+ // stateless continuation and persisted canonical history retain the
678
+ // provider-specific metadata exactly once.
679
+ pendingNativeReasoning = commitPendingNativeReasoning(state, stream, queue, pendingNativeReasoning);
680
+ // Provider-native completion items (notably OpenAI compaction items)
681
+ // must stay in the live provider history. The session layer later
682
+ // applies compaction's replacement rule; keeping the item here also
683
+ // makes it available to an in-flight tool continuation before that
684
+ // terminal history commit occurs.
685
+ for (const item of completion.output) {
686
+ if (item.type !== 'provider_opaque')
687
+ continue;
688
+ const historyItem = {
689
+ ...item.item,
690
+ providerOpaque: { provider: item.provider },
691
+ };
692
+ state.history.push(historyItem);
693
+ state.input.push(item);
694
+ outputPush(stream, queue, { type: 'item', item });
695
+ }
696
+ const assistantText = completion.output
697
+ .filter((item) => item.type === 'message')
698
+ .flatMap((item) => item.content)
699
+ .map((part) => part.text)
700
+ .join('');
701
+ if (assistantText) {
702
+ stream.finalOutput = assistantText;
703
+ const item = {
704
+ type: 'message',
705
+ role: 'assistant',
706
+ content: [{ type: 'output_text', text: assistantText }],
707
+ };
708
+ state.history.push(item);
709
+ outputPush(stream, queue, { type: 'item', item });
710
+ state.input.push({ type: 'message', role: 'assistant', content: [{ type: 'text', text: assistantText }] });
711
+ }
712
+ if (state.pendingApprovals.length > 0) {
713
+ stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
714
+ return finish(stream, state, queue);
715
+ }
716
+ if (!sawToolCall)
717
+ return finish(stream, state, queue);
718
+ }
719
+ }
720
+ async #handleToolCall(state, stream, queue, event, toolContext) {
721
+ const definition = state.agent.tools.find((tool) => tool.name === event.name);
722
+ const args = parseArguments(event.arguments);
723
+ const callItem = {
724
+ type: 'function_call',
725
+ callId: event.id,
726
+ name: event.name,
727
+ arguments: event.arguments,
728
+ };
729
+ state.history.push(callItem);
730
+ state.input.push({ type: 'tool_call', id: event.id, name: event.name, arguments: event.arguments });
731
+ outputPush(stream, queue, { type: 'item', item: callItem });
732
+ if (!definition) {
733
+ const output = `Unknown tool: ${event.name}`;
734
+ const resultItem = {
735
+ type: 'function_call_result',
736
+ callId: event.id,
737
+ name: event.name,
738
+ output,
739
+ };
740
+ state.history.push(resultItem);
741
+ state.input.push({ type: 'tool_result', id: event.id, output });
742
+ outputPush(stream, queue, { type: 'item', item: resultItem });
743
+ return;
744
+ }
745
+ // Keep the raw-model invocation contract: normalization repairs the
746
+ // accepted object shape but intentionally does not Zod-parse it, which
747
+ // would apply schema defaults before execute. web_fetch relies on its
748
+ // executor fallbacks on the strict JSON-schema path.
749
+ const params = normalizeToolParameters(args, definition.parameters);
750
+ // Consult this run's ledger before prompting: a decision already taken
751
+ // (in the parent run and replayed in, or earlier in this run) must not
752
+ // prompt again. This is what makes approval replay observable.
753
+ const alreadyDecided = state.approvals.isToolApproved({ toolName: event.name, callId: event.id });
754
+ if (alreadyDecided === false) {
755
+ const message = state.approvals.getRejectionMessage(event.name, event.id) ?? 'Tool execution was not approved.';
756
+ const resultItem = {
757
+ type: 'function_call_result',
758
+ callId: event.id,
759
+ name: event.name,
760
+ output: message,
761
+ };
762
+ state.history.push(resultItem);
763
+ state.input.push({ type: 'tool_result', id: event.id, output: message });
764
+ outputPush(stream, queue, { type: 'item', item: resultItem });
765
+ return;
766
+ }
767
+ if (alreadyDecided === true) {
768
+ const result = await this.#invokeTool(definition, params, toolContext, event.id, state);
769
+ const output = typeof result === 'string' ? result : JSON.stringify(result);
770
+ const resultItem = {
771
+ type: 'function_call_result',
772
+ callId: event.id,
773
+ name: event.name,
774
+ output,
775
+ };
776
+ state.history.push(resultItem);
777
+ state.input.push({ type: 'tool_result', id: event.id, output });
778
+ outputPush(stream, queue, { type: 'item', item: resultItem });
779
+ return;
780
+ }
781
+ if (await definition.needsApproval(params, toolContext)) {
782
+ const pending = {
783
+ callId: event.id,
784
+ toolName: event.name,
785
+ argumentsText: event.arguments,
786
+ interruption: {
787
+ type: 'tool_approval_item',
788
+ rawItem: { type: 'function_call', callId: event.id, name: event.name, arguments: event.arguments },
789
+ callId: event.id,
790
+ name: event.name,
791
+ arguments: event.arguments,
792
+ },
793
+ definition,
794
+ params,
795
+ };
796
+ state.pendingApprovals ??= [];
797
+ if (!state.pendingApproval)
798
+ state.pendingApproval = pending;
799
+ state.pendingApprovals.push(pending);
800
+ stream.interruptions = state.pendingApprovals.map((item) => item.interruption);
801
+ return;
802
+ }
803
+ const result = await this.#invokeTool(definition, params, toolContext, event.id, state);
804
+ const output = typeof result === 'string' ? result : JSON.stringify(result);
805
+ const resultItem = {
806
+ type: 'function_call_result',
807
+ callId: event.id,
808
+ name: event.name,
809
+ output,
810
+ };
811
+ state.history.push(resultItem);
812
+ state.input.push({ type: 'tool_result', id: event.id, output });
813
+ outputPush(stream, queue, { type: 'item', item: resultItem });
814
+ }
815
+ /**
816
+ * A tool that throws must not take the run down with it.
817
+ *
818
+ * Most tools already report failure by returning `Error: ...` as their
819
+ * output, which the model reads and acts on. The handful that throw got the
820
+ * opposite treatment for no principled reason: the exception escaped to
821
+ * `#execute`, closed the event queue, and ended the turn — so the model never
822
+ * saw a recoverable problem like a path that does not exist, and the caller
823
+ * lost the whole turn. Worse, `#handleToolCall` pushes the `function_call`
824
+ * into history before executing, so an escape leaves a call with no matching
825
+ * result.
826
+ *
827
+ * Errors are therefore normalized into tool output, with two exceptions that
828
+ * must still propagate: cancellation (the run is ending on purpose) and
829
+ * `HarnessInvariantError` (a bug here, which the model cannot act on).
830
+ */
831
+ async #invokeTool(definition, params, toolContext, callId, state) {
832
+ const startedAt = Date.now();
833
+ const attempt = state
834
+ ? ((state.toolAttempts ??= new Map()).set(callId, (state.toolAttempts.get(callId) ?? 0) + 1),
835
+ state.toolAttempts.get(callId))
836
+ : 1;
837
+ const lifecycleContext = {
838
+ ...(state?.sessionId ? { sessionId: state.sessionId } : {}),
839
+ ...(state?.turnId ? { turnId: state.turnId } : {}),
840
+ toolCallId: callId,
841
+ toolName: definition.name,
842
+ normalizedArguments: params,
843
+ attempt,
844
+ scope: state?.hookScope ?? 'root',
845
+ };
846
+ await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.before(lifecycleContext));
847
+ try {
848
+ const result = await definition.execute(params, toolContext, { toolCall: { callId } });
849
+ await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.after(lifecycleContext, result, Date.now() - startedAt));
850
+ return result;
851
+ }
852
+ catch (error) {
853
+ if (isCancellationError(error) || isHarnessInvariantError(error) || error instanceof MaxTurnsExceededError) {
854
+ await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, false));
855
+ throw error;
856
+ }
857
+ const message = error instanceof Error ? error.message : String(error);
858
+ // Feeding the same failure back forever is its own failure mode: some
859
+ // errors no argument can fix. Repeat the identical result once, then say
860
+ // so plainly rather than inviting a third identical attempt.
861
+ const repeated = state ? countRepeatedFailure(state, definition.name, params, message) : 1;
862
+ if (repeated > MAX_IDENTICAL_TOOL_FAILURES) {
863
+ 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.`;
864
+ await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
865
+ return result;
866
+ }
867
+ const result = `Error: ${message}`;
868
+ await this.#notifyToolLifecycle(() => this.#deps.toolLifecycle?.error(lifecycleContext, error, Date.now() - startedAt, true));
869
+ return result;
870
+ }
871
+ }
872
+ #nextRequestId(state) {
873
+ state.costRequestSeq = (state.costRequestSeq ?? 0) + 1;
874
+ return `req-${state.turnCount}-${state.costRequestSeq}`;
875
+ }
876
+ #appendCostRecord(state, input) {
877
+ const record = computeModelCost({
878
+ requestId: input.requestId,
879
+ provider: input.provider ?? 'unknown',
880
+ model: input.model,
881
+ serviceTier: input.tier,
882
+ outcome: input.outcome,
883
+ usage: input.usage,
884
+ providerUsd: input.providerUsd,
885
+ getPrice: (provider, model, tier) => getModelPricing(provider, model, tier),
886
+ pricingVersion: getCatalogPricingVersion(),
887
+ });
888
+ state.costRecords = [...(state.costRecords ?? []), record];
889
+ }
890
+ async #notifyToolLifecycle(operation) {
891
+ if (!operation)
892
+ return;
893
+ try {
894
+ await operation();
895
+ }
896
+ catch {
897
+ // Lifecycle observers are passive. A broken observer must not alter tool
898
+ // execution or turn recovery semantics.
899
+ }
900
+ }
901
+ }
902
+ /**
903
+ * How many times an identical failing call is fed back before the loop stops
904
+ * inviting retries. One repeat is worth allowing: a transient failure resolves,
905
+ * and a model given the error often corrects on its second attempt.
906
+ */
907
+ const MAX_IDENTICAL_TOOL_FAILURES = 2;
908
+ function countRepeatedFailure(state, toolName, params, message) {
909
+ let key;
910
+ try {
911
+ key = JSON.stringify([toolName, params, message]);
912
+ }
913
+ catch {
914
+ // Unserializable params cannot be compared for identity; treat every such
915
+ // failure as distinct rather than collapsing unrelated calls together.
916
+ return 1;
917
+ }
918
+ state.toolFailureCounts ??= new Map();
919
+ const count = (state.toolFailureCounts.get(key) ?? 0) + 1;
920
+ state.toolFailureCounts.set(key, count);
921
+ return count;
922
+ }
923
+ function outputPush(stream, queue, item) {
924
+ stream.output.push(item);
925
+ if (stream.newItems !== stream.output)
926
+ stream.newItems.push(item);
927
+ queue.push(item);
928
+ }
929
+ function finish(stream, state, queue) {
930
+ stream.history = state.history;
931
+ if (state.supportsConversationChaining &&
932
+ state.responseId &&
933
+ state.responseProviderId !== undefined &&
934
+ state.responseProviderId === state.currentProviderId) {
935
+ stream.lastResponseId = state.responseId;
936
+ }
937
+ else {
938
+ stream.lastResponseId = null;
939
+ }
940
+ queue.close();
941
+ return { usage: state.usage, output: stream.output, costRecords: state.costRecords ?? [] };
942
+ }
943
+ /**
944
+ * Only replay native reasoning when the provider explicitly supplies the
945
+ * Chat-Completions continuation field. Generic reasoning remains display-only
946
+ * so providers with different native formats are not given a foreign field.
947
+ */
948
+ function appendNativeReasoning(current, event) {
949
+ const nativeReasoning = event.providerMetadata?.reasoning_content;
950
+ if (typeof nativeReasoning === 'string') {
951
+ const text = current?.text === nativeReasoning
952
+ ? current.text
953
+ : current?.text && nativeReasoning.startsWith(current.text)
954
+ ? nativeReasoning
955
+ : `${current?.text ?? ''}${nativeReasoning}`;
956
+ return {
957
+ ...(event.id ? { id: event.id } : current?.id ? { id: current.id } : {}),
958
+ text,
959
+ providerMetadata: { ...event.providerMetadata, reasoning_content: text },
960
+ };
961
+ }
962
+ // Responses providers return encrypted reasoning only on their terminal
963
+ // output. Their metadata is namespaced, so retain it without turning it into
964
+ // the Chat-Completions-only reasoning_content convention.
965
+ if (asRecord(event.providerMetadata?.codex) || asRecord(event.providerMetadata?.openai)) {
966
+ return {
967
+ ...(event.id ? { id: event.id } : current?.id ? { id: current.id } : {}),
968
+ text: event.text,
969
+ providerMetadata: event.providerMetadata,
970
+ };
971
+ }
972
+ return current;
973
+ }
974
+ function commitPendingNativeReasoning(state, stream, queue, pending) {
975
+ if (!pending)
976
+ return undefined;
977
+ const reasoningInput = {
978
+ type: 'reasoning',
979
+ ...(pending.id ? { id: pending.id } : {}),
980
+ text: pending.text,
981
+ providerMetadata: pending.providerMetadata,
982
+ };
983
+ const reasoningHistory = {
984
+ type: 'reasoning',
985
+ ...(pending.id ? { id: pending.id } : {}),
986
+ content: [{ type: 'reasoning_text', text: pending.text }],
987
+ providerData: pending.providerMetadata,
988
+ };
989
+ state.input.push(reasoningInput);
990
+ state.history.push(reasoningHistory);
991
+ outputPush(stream, queue, { type: 'item', item: reasoningHistory });
992
+ return undefined;
993
+ }
994
+ /**
995
+ * Resolve the effective billing service tier from the dispatched request. The
996
+ * default service tier is standard; only a flex/batch request that was actually
997
+ * dispatched resolves to its tier, and anything unrecognized fails closed.
998
+ */
999
+ function resolveServiceTier(request) {
1000
+ const options = request.providerOptions;
1001
+ const raw = options?.service_tier ?? options?.serviceTier;
1002
+ if (raw === 'flex' || raw === 'batch' || raw === 'standard')
1003
+ return raw;
1004
+ return raw === undefined ? 'standard' : 'unknown';
1005
+ }
1006
+ function normalizeModelUsage(usage) {
1007
+ if (!usage || typeof usage !== 'object')
1008
+ return undefined;
1009
+ const rawUsage = usage;
1010
+ return normalizeUsage({
1011
+ ...rawUsage,
1012
+ cacheReadTokens: rawUsage.cachedInputTokens ?? rawUsage.cacheReadTokens,
1013
+ cacheCreationTokens: rawUsage.cacheWriteTokens ?? rawUsage.cacheCreationTokens,
1014
+ });
1015
+ }
1016
+ function parseArguments(value) {
1017
+ try {
1018
+ return JSON.parse(value);
1019
+ }
1020
+ catch {
1021
+ return {};
1022
+ }
1023
+ }
1024
+ function getInterruptionCallId(value) {
1025
+ if (typeof value !== 'object' || value === null)
1026
+ return undefined;
1027
+ const callId = value.callId;
1028
+ return typeof callId === 'string' ? callId : undefined;
1029
+ }
1030
+ function toModelTools(tools) {
1031
+ return tools.map((tool) => ({
1032
+ name: tool.name,
1033
+ description: tool.description,
1034
+ parameters: isJsonSchema(tool.parameters) ? tool.parameters : z.toJSONSchema(tool.parameters),
1035
+ }));
1036
+ }
1037
+ function isJsonSchema(value) {
1038
+ return typeof value === 'object' && value !== null && !isZodToolParameterSchema(value);
1039
+ }
1040
+ /**
1041
+ * The canonical application projection used for both model requests and
1042
+ * continuation-prefix comparisons. Keep this at the application boundary so
1043
+ * callers never need to inspect opaque continuation state.
1044
+ */
1045
+ export function normalizeApplicationInput(input) {
1046
+ if (typeof input === 'string')
1047
+ return [{ type: 'message', role: 'user', content: [{ type: 'text', text: input }] }];
1048
+ const items = (Array.isArray(input) ? input : [input]);
1049
+ return items.flatMap((item) => normalizeInputItem(item));
1050
+ }
1051
+ function normalizeInput(input) {
1052
+ return normalizeApplicationInput(input);
1053
+ }
1054
+ function normalizeHistory(input) {
1055
+ if (typeof input === 'string')
1056
+ return [{ type: 'message', role: 'user', content: input }];
1057
+ return Array.isArray(input) ? [...input] : [input];
1058
+ }
1059
+ function asRecord(value) {
1060
+ return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
1061
+ }
1062
+ function unsupportedInput(description) {
1063
+ throw new Error(`Unsupported restored input ${description}`);
1064
+ }
1065
+ function normalizeTextPart(value, description) {
1066
+ if (typeof value === 'string')
1067
+ return { type: 'text', text: value };
1068
+ const record = asRecord(value);
1069
+ if (!record ||
1070
+ !['text', 'input_text', 'output_text'].includes(String(record.type)) ||
1071
+ typeof record.text !== 'string') {
1072
+ unsupportedInput(description);
1073
+ }
1074
+ return { type: 'text', text: record.text };
1075
+ }
1076
+ function normalizeMessageImage(record) {
1077
+ const image = record.image ?? record.image_url;
1078
+ const detail = typeof record.detail === 'string' ? record.detail : undefined;
1079
+ if (image === undefined)
1080
+ return { type: 'image', ...(detail ? { detail } : {}) };
1081
+ if (typeof image === 'string')
1082
+ return { type: 'image', image, ...(detail ? { detail } : {}) };
1083
+ const reference = asRecord(image);
1084
+ if (typeof reference?.id === 'string')
1085
+ return { type: 'image', image: { id: reference.id }, ...(detail ? { detail } : {}) };
1086
+ unsupportedInput('message image reference');
1087
+ }
1088
+ function normalizeMessagePart(value) {
1089
+ const record = asRecord(value);
1090
+ if (record?.type === 'image' || record?.type === 'input_image')
1091
+ return normalizeMessageImage(record);
1092
+ return normalizeTextPart(value, record?.type ? `message content: ${record.type}` : 'message content');
1093
+ }
1094
+ function normalizeMessageContent(value) {
1095
+ if (value === undefined || value === null)
1096
+ return [{ type: 'text', text: '' }];
1097
+ return (Array.isArray(value) ? value : [value]).map((part) => normalizeMessagePart(part));
1098
+ }
1099
+ function isTextMessagePart(part) {
1100
+ return part.type === 'text';
1101
+ }
1102
+ function normalizeToolImagePart(record) {
1103
+ const rawImage = record.image ?? record.image_url;
1104
+ const detail = typeof record.detail === 'string' ? record.detail : undefined;
1105
+ if (rawImage === undefined)
1106
+ return { type: 'image', ...(detail ? { detail } : {}) };
1107
+ if (typeof rawImage === 'string')
1108
+ return { type: 'image', image: rawImage, ...(detail ? { detail } : {}) };
1109
+ const image = asRecord(rawImage);
1110
+ if (!image)
1111
+ unsupportedInput('tool image reference');
1112
+ const normalized = typeof image.id === 'string'
1113
+ ? { id: image.id }
1114
+ : typeof image.url === 'string'
1115
+ ? { url: image.url }
1116
+ : typeof image.fileId === 'string'
1117
+ ? { fileId: image.fileId }
1118
+ : (typeof image.data === 'string' || image.data instanceof Uint8Array) && typeof image.mediaType === 'string'
1119
+ ? { data: image.data, mediaType: image.mediaType }
1120
+ : undefined;
1121
+ if (!normalized)
1122
+ unsupportedInput('tool image reference');
1123
+ return { type: 'image', image: normalized, ...(detail ? { detail } : {}) };
1124
+ }
1125
+ function normalizeToolFilePart(record) {
1126
+ const rawFile = record.file ?? record.file_id ?? record.file_url;
1127
+ const outerFilename = typeof record.filename === 'string' ? record.filename : undefined;
1128
+ if (typeof rawFile === 'string')
1129
+ return { type: 'file', file: rawFile };
1130
+ const file = asRecord(rawFile);
1131
+ if (!file)
1132
+ unsupportedInput('tool file reference');
1133
+ if (typeof file.id === 'string')
1134
+ return { type: 'file', file: { id: file.id, ...(outerFilename ? { filename: outerFilename } : {}) } };
1135
+ if (typeof file.url === 'string')
1136
+ return { type: 'file', file: { url: file.url, ...(outerFilename ? { filename: outerFilename } : {}) } };
1137
+ const filename = outerFilename ?? (typeof file.filename === 'string' ? file.filename : undefined);
1138
+ if ((typeof file.data === 'string' || file.data instanceof Uint8Array) &&
1139
+ typeof file.mediaType === 'string' &&
1140
+ filename !== undefined) {
1141
+ return { type: 'file', file: { data: file.data, mediaType: file.mediaType, filename } };
1142
+ }
1143
+ unsupportedInput('tool file reference');
1144
+ }
1145
+ function normalizeToolResultPart(value) {
1146
+ const record = asRecord(value);
1147
+ if (record?.type === 'image' || record?.type === 'input_image')
1148
+ return normalizeToolImagePart(record);
1149
+ if (record?.type === 'file' || record?.type === 'input_file')
1150
+ return normalizeToolFilePart(record);
1151
+ return normalizeTextPart(value, record?.type ? `tool result part: ${record.type}` : 'tool result part');
1152
+ }
1153
+ function normalizeToolResultOutput(value) {
1154
+ if (typeof value === 'string')
1155
+ return value;
1156
+ if (value === undefined || value === null)
1157
+ return '';
1158
+ if (!Array.isArray(value))
1159
+ unsupportedInput('tool result output');
1160
+ return value.map(normalizeToolResultPart);
1161
+ }
1162
+ function normalizeReasoningText(value) {
1163
+ if (value === undefined || value === null)
1164
+ return '';
1165
+ if (typeof value === 'string')
1166
+ return value;
1167
+ const parts = Array.isArray(value) ? value : [value];
1168
+ return parts
1169
+ .map((part) => {
1170
+ const record = asRecord(part);
1171
+ if (!record ||
1172
+ !['reasoning_text', 'text', 'summary_text'].includes(String(record.type)) ||
1173
+ typeof record.text !== 'string') {
1174
+ return unsupportedInput('reasoning content part');
1175
+ }
1176
+ return record.text;
1177
+ })
1178
+ .join('');
1179
+ }
1180
+ /** True when the adapter marked this item as provider-native and opaque. */
1181
+ function isProviderOpaque(item) {
1182
+ const marker = item.providerOpaque;
1183
+ return typeof marker?.provider === 'string' && marker.provider.length > 0;
1184
+ }
1185
+ function normalizeInputItem(item) {
1186
+ if (isProviderOpaque(item)) {
1187
+ const { providerOpaque: _marker, ...providerItem } = item;
1188
+ return [{ type: 'provider_opaque', provider: item.providerOpaque.provider, item: providerItem }];
1189
+ }
1190
+ if (item.type === 'function_call') {
1191
+ return [
1192
+ {
1193
+ type: 'tool_call',
1194
+ id: String(item.callId ?? item.call_id ?? ''),
1195
+ name: String(item.name ?? ''),
1196
+ arguments: String(item.arguments ?? '{}'),
1197
+ },
1198
+ ];
1199
+ }
1200
+ if (item.type === 'function_call_result' || item.type === 'function_call_output') {
1201
+ return [
1202
+ {
1203
+ type: 'tool_result',
1204
+ id: String(item.callId ?? item.call_id ?? item.tool_call_id ?? ''),
1205
+ output: normalizeToolResultOutput(item.output),
1206
+ },
1207
+ ];
1208
+ }
1209
+ if (item.type === 'reasoning') {
1210
+ const providerMetadata = item.providerData;
1211
+ return [
1212
+ {
1213
+ type: 'reasoning',
1214
+ ...(typeof item.id === 'string' ? { id: item.id } : {}),
1215
+ text: normalizeReasoningText(item.content ?? item.output ?? ''),
1216
+ ...(providerMetadata ? { providerMetadata } : {}),
1217
+ },
1218
+ ];
1219
+ }
1220
+ if (item.type !== undefined && item.type !== 'message')
1221
+ unsupportedInput(`item type: ${String(item.type)}`);
1222
+ const role = item.role === undefined
1223
+ ? 'user'
1224
+ : item.role === 'assistant' || item.role === 'system' || item.role === 'user'
1225
+ ? item.role
1226
+ : unsupportedInput(`message role: ${String(item.role)}`);
1227
+ const content = normalizeMessageContent(item.content);
1228
+ if (role === 'system') {
1229
+ const textContent = content.filter(isTextMessagePart);
1230
+ if (textContent.length !== content.length)
1231
+ unsupportedInput('system message content');
1232
+ return [{ type: 'message', role, content: textContent }];
1233
+ }
1234
+ return [{ type: 'message', role, content }];
1235
+ }
1236
+ //# sourceMappingURL=application-run-loop.js.map