@qduc/term2 0.11.1 → 0.13.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 (1386) hide show
  1. package/README.md +12 -5
  2. package/dist/agent.d.ts +24 -24
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +107 -31
  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 +359 -131
  9. package/dist/app.js.map +1 -1
  10. package/dist/cli.js +124 -49
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/auto-approve-command.d.ts.map +1 -1
  13. package/dist/commands/auto-approve-command.js +12 -4
  14. package/dist/commands/auto-approve-command.js.map +1 -1
  15. package/dist/commands/copy-command.d.ts +3 -1
  16. package/dist/commands/copy-command.d.ts.map +1 -1
  17. package/dist/commands/copy-command.js +36 -9
  18. package/dist/commands/copy-command.js.map +1 -1
  19. package/dist/commands/mode-commands.js.map +1 -1
  20. package/dist/commands/retry-tool-command.d.ts +13 -0
  21. package/dist/commands/retry-tool-command.d.ts.map +1 -0
  22. package/dist/commands/retry-tool-command.js +20 -0
  23. package/dist/commands/retry-tool-command.js.map +1 -0
  24. package/dist/commands/rewind-command.d.ts +37 -0
  25. package/dist/commands/rewind-command.d.ts.map +1 -0
  26. package/dist/commands/rewind-command.js +97 -0
  27. package/dist/commands/rewind-command.js.map +1 -0
  28. package/dist/commands/sandbox-command.d.ts.map +1 -1
  29. package/dist/commands/sandbox-command.js +6 -1
  30. package/dist/commands/sandbox-command.js.map +1 -1
  31. package/dist/components/InputBox.d.ts +17 -32
  32. package/dist/components/InputBox.d.ts.map +1 -1
  33. package/dist/components/InputBox.js +182 -579
  34. package/dist/components/InputBox.js.map +1 -1
  35. package/dist/components/input/ApplicationInputSurface.d.ts +42 -0
  36. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -0
  37. package/dist/components/input/ApplicationInputSurface.js +82 -0
  38. package/dist/components/input/ApplicationInputSurface.js.map +1 -0
  39. package/dist/components/input/CopyMenuSession.d.ts +16 -0
  40. package/dist/components/input/CopyMenuSession.d.ts.map +1 -0
  41. package/dist/components/input/CopyMenuSession.js +49 -0
  42. package/dist/components/input/CopyMenuSession.js.map +1 -0
  43. package/dist/components/input/FirstRunSetupPrompt.d.ts +9 -0
  44. package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -0
  45. package/dist/components/input/FirstRunSetupPrompt.js +20 -0
  46. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -0
  47. package/dist/components/input/MenuStackHost.d.ts +12 -0
  48. package/dist/components/input/MenuStackHost.d.ts.map +1 -0
  49. package/dist/components/input/MenuStackHost.js +13 -0
  50. package/dist/components/input/MenuStackHost.js.map +1 -0
  51. package/dist/components/input/MenuSurface.d.ts +13 -0
  52. package/dist/components/input/MenuSurface.d.ts.map +1 -0
  53. package/dist/components/input/MenuSurface.js +87 -0
  54. package/dist/components/input/MenuSurface.js.map +1 -0
  55. package/dist/components/input/ModelMenuSession.d.ts +19 -0
  56. package/dist/components/input/ModelMenuSession.d.ts.map +1 -0
  57. package/dist/components/input/ModelMenuSession.js +154 -0
  58. package/dist/components/input/ModelMenuSession.js.map +1 -0
  59. package/dist/components/input/PathMenuSession.d.ts +16 -0
  60. package/dist/components/input/PathMenuSession.d.ts.map +1 -0
  61. package/dist/components/input/PathMenuSession.js +68 -0
  62. package/dist/components/input/PathMenuSession.js.map +1 -0
  63. package/dist/components/input/PendingQueueList.d.ts +20 -0
  64. package/dist/components/input/PendingQueueList.d.ts.map +1 -0
  65. package/dist/components/input/PendingQueueList.js +26 -0
  66. package/dist/components/input/PendingQueueList.js.map +1 -0
  67. package/dist/components/input/ProviderMenuSession.d.ts +16 -0
  68. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -0
  69. package/dist/components/input/ProviderMenuSession.js +99 -0
  70. package/dist/components/input/ProviderMenuSession.js.map +1 -0
  71. package/dist/components/input/RewindMenuSession.d.ts +14 -0
  72. package/dist/components/input/RewindMenuSession.d.ts.map +1 -0
  73. package/dist/components/input/RewindMenuSession.js +77 -0
  74. package/dist/components/input/RewindMenuSession.js.map +1 -0
  75. package/dist/components/input/SettingsMenuSession.d.ts +17 -0
  76. package/dist/components/input/SettingsMenuSession.d.ts.map +1 -0
  77. package/dist/components/input/SettingsMenuSession.js +136 -0
  78. package/dist/components/input/SettingsMenuSession.js.map +1 -0
  79. package/dist/components/input/SettingsValueMenuSession.d.ts +19 -0
  80. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -0
  81. package/dist/components/input/SettingsValueMenuSession.js +113 -0
  82. package/dist/components/input/SettingsValueMenuSession.js.map +1 -0
  83. package/dist/components/input/SkillsMenuSession.d.ts +19 -0
  84. package/dist/components/input/SkillsMenuSession.d.ts.map +1 -0
  85. package/dist/components/input/SkillsMenuSession.js +58 -0
  86. package/dist/components/input/SkillsMenuSession.js.map +1 -0
  87. package/dist/components/input/SlashMenuSession.d.ts +25 -0
  88. package/dist/components/input/SlashMenuSession.d.ts.map +1 -0
  89. package/dist/components/input/SlashMenuSession.js +69 -0
  90. package/dist/components/input/SlashMenuSession.js.map +1 -0
  91. package/dist/components/input/determine-active-menu.d.ts +2 -0
  92. package/dist/components/input/determine-active-menu.d.ts.map +1 -1
  93. package/dist/components/input/determine-active-menu.js +12 -4
  94. package/dist/components/input/determine-active-menu.js.map +1 -1
  95. package/dist/components/input/insertions.d.ts +0 -13
  96. package/dist/components/input/insertions.d.ts.map +1 -1
  97. package/dist/components/input/insertions.js +0 -26
  98. package/dist/components/input/insertions.js.map +1 -1
  99. package/dist/components/input/menu-controller.d.ts +52 -0
  100. package/dist/components/input/menu-controller.d.ts.map +1 -0
  101. package/dist/components/input/menu-controller.js +690 -0
  102. package/dist/components/input/menu-controller.js.map +1 -0
  103. package/dist/components/input/menu-editor.d.ts +9 -0
  104. package/dist/components/input/menu-editor.d.ts.map +1 -0
  105. package/dist/components/input/menu-editor.js +45 -0
  106. package/dist/components/input/menu-editor.js.map +1 -0
  107. package/dist/components/input/menu-registry.d.ts +20 -0
  108. package/dist/components/input/menu-registry.d.ts.map +1 -0
  109. package/dist/components/input/menu-registry.js +27 -0
  110. package/dist/components/input/menu-registry.js.map +1 -0
  111. package/dist/components/input/menu-types.d.ts +327 -0
  112. package/dist/components/input/menu-types.d.ts.map +1 -0
  113. package/dist/components/input/menu-types.js +2 -0
  114. package/dist/components/input/menu-types.js.map +1 -0
  115. package/dist/components/input/settings-intent-host.d.ts +22 -0
  116. package/dist/components/input/settings-intent-host.d.ts.map +1 -0
  117. package/dist/components/input/settings-intent-host.js +69 -0
  118. package/dist/components/input/settings-intent-host.js.map +1 -0
  119. package/dist/components/input/triggers.d.ts +3 -0
  120. package/dist/components/input/triggers.d.ts.map +1 -1
  121. package/dist/components/input/triggers.js +258 -0
  122. package/dist/components/input/triggers.js.map +1 -1
  123. package/dist/components/layout/BackgroundTaskManager.d.ts +16 -0
  124. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -0
  125. package/dist/components/layout/BackgroundTaskManager.js +254 -0
  126. package/dist/components/layout/BackgroundTaskManager.js.map +1 -0
  127. package/dist/components/layout/BackgroundTasksPanel.d.ts +3 -2
  128. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  129. package/dist/components/layout/BackgroundTasksPanel.js +80 -34
  130. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  131. package/dist/components/layout/Banner.js.map +1 -1
  132. package/dist/components/layout/BottomArea.d.ts +39 -21
  133. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  134. package/dist/components/layout/BottomArea.js +77 -48
  135. package/dist/components/layout/BottomArea.js.map +1 -1
  136. package/dist/components/layout/StatusBar.d.ts +3 -1
  137. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  138. package/dist/components/layout/StatusBar.js +100 -66
  139. package/dist/components/layout/StatusBar.js.map +1 -1
  140. package/dist/components/menu/CopyMenu.d.ts +9 -0
  141. package/dist/components/menu/CopyMenu.d.ts.map +1 -0
  142. package/dist/components/menu/CopyMenu.js +7 -0
  143. package/dist/components/menu/CopyMenu.js.map +1 -0
  144. package/dist/components/menu/ModelSelectionMenu.d.ts +1 -0
  145. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  146. package/dist/components/menu/ModelSelectionMenu.js +23 -6
  147. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  148. package/dist/components/menu/ProviderSelectionMenu.d.ts +1 -0
  149. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  150. package/dist/components/menu/ProviderSelectionMenu.js +12 -4
  151. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  152. package/dist/components/menu/RewindMenu.d.ts +18 -0
  153. package/dist/components/menu/RewindMenu.d.ts.map +1 -0
  154. package/dist/components/menu/RewindMenu.js +59 -0
  155. package/dist/components/menu/RewindMenu.js.map +1 -0
  156. package/dist/components/message/ChatMessage.d.ts +2 -1
  157. package/dist/components/message/ChatMessage.d.ts.map +1 -1
  158. package/dist/components/message/ChatMessage.js +1 -1
  159. package/dist/components/message/ChatMessage.js.map +1 -1
  160. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  161. package/dist/components/message/CommandMessage.js +142 -17
  162. package/dist/components/message/CommandMessage.js.map +1 -1
  163. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  164. package/dist/components/message/MemoryRenderer.js +16 -10
  165. package/dist/components/message/MemoryRenderer.js.map +1 -1
  166. package/dist/components/message/MessageList.d.ts +20 -3
  167. package/dist/components/message/MessageList.d.ts.map +1 -1
  168. package/dist/components/message/MessageList.js +1 -1
  169. package/dist/components/message/MessageList.js.map +1 -1
  170. package/dist/components/message/SubagentActivityMessage.d.ts +5 -1
  171. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  172. package/dist/components/message/SubagentActivityMessage.js +12 -4
  173. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  174. package/dist/components/message/command-message-helpers.d.ts +37 -0
  175. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  176. package/dist/components/message/command-message-helpers.js +49 -8
  177. package/dist/components/message/command-message-helpers.js.map +1 -1
  178. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -0
  179. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  180. package/dist/components/prompt/ApprovalPrompt.js +135 -83
  181. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  182. package/dist/context/InputContext.d.ts +15 -8
  183. package/dist/context/InputContext.d.ts.map +1 -1
  184. package/dist/context/InputContext.js +94 -15
  185. package/dist/context/InputContext.js.map +1 -1
  186. package/dist/contracts/application-stream.d.ts +44 -0
  187. package/dist/contracts/application-stream.d.ts.map +1 -0
  188. package/dist/contracts/application-stream.js +2 -0
  189. package/dist/contracts/application-stream.js.map +1 -0
  190. package/dist/contracts/continuation-handle.d.ts +18 -0
  191. package/dist/contracts/continuation-handle.d.ts.map +1 -0
  192. package/dist/contracts/continuation-handle.js +22 -0
  193. package/dist/contracts/continuation-handle.js.map +1 -0
  194. package/dist/contracts/conversation-items.d.ts +47 -0
  195. package/dist/contracts/conversation-items.d.ts.map +1 -0
  196. package/dist/contracts/conversation-items.js +2 -0
  197. package/dist/contracts/conversation-items.js.map +1 -0
  198. package/dist/contracts/conversation.d.ts +44 -4
  199. package/dist/contracts/conversation.d.ts.map +1 -1
  200. package/dist/contracts/conversation.js +9 -0
  201. package/dist/contracts/conversation.js.map +1 -1
  202. package/dist/contracts/model-errors.d.ts +10 -0
  203. package/dist/contracts/model-errors.d.ts.map +1 -0
  204. package/dist/contracts/model-errors.js +15 -0
  205. package/dist/contracts/model-errors.js.map +1 -0
  206. package/dist/contracts/model-types.d.ts +16 -0
  207. package/dist/contracts/model-types.d.ts.map +1 -0
  208. package/dist/contracts/model-types.js +2 -0
  209. package/dist/contracts/model-types.js.map +1 -0
  210. package/dist/contracts/patch.d.ts +17 -0
  211. package/dist/contracts/patch.d.ts.map +1 -0
  212. package/dist/contracts/patch.js +2 -0
  213. package/dist/contracts/patch.js.map +1 -0
  214. package/dist/contracts/provider-input.d.ts +34 -0
  215. package/dist/contracts/provider-input.d.ts.map +1 -0
  216. package/dist/contracts/provider-input.js +2 -0
  217. package/dist/contracts/provider-input.js.map +1 -0
  218. package/dist/contracts/streamed-model-turn.d.ts +230 -0
  219. package/dist/contracts/streamed-model-turn.d.ts.map +1 -0
  220. package/dist/contracts/streamed-model-turn.js +2 -0
  221. package/dist/contracts/streamed-model-turn.js.map +1 -0
  222. package/dist/env-setup.js +1 -1
  223. package/dist/hooks/conversation-ui-reducer.d.ts +28 -4
  224. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  225. package/dist/hooks/conversation-ui-reducer.js +46 -4
  226. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  227. package/dist/hooks/handoff-flow-reducer.d.ts +1 -36
  228. package/dist/hooks/handoff-flow-reducer.d.ts.map +1 -1
  229. package/dist/hooks/handoff-flow-reducer.js +3 -57
  230. package/dist/hooks/handoff-flow-reducer.js.map +1 -1
  231. package/dist/hooks/settings-completion-config.d.ts +1 -0
  232. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  233. package/dist/hooks/settings-completion-config.js +32 -6
  234. package/dist/hooks/settings-completion-config.js.map +1 -1
  235. package/dist/hooks/use-app-commands.d.ts +15 -11
  236. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  237. package/dist/hooks/use-app-commands.js +91 -63
  238. package/dist/hooks/use-app-commands.js.map +1 -1
  239. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +24 -1
  240. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  241. package/dist/hooks/use-app-keyboard-shortcuts.js +145 -6
  242. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  243. package/dist/hooks/use-conversation.d.ts +34 -13
  244. package/dist/hooks/use-conversation.d.ts.map +1 -1
  245. package/dist/hooks/use-conversation.js +96 -20
  246. package/dist/hooks/use-conversation.js.map +1 -1
  247. package/dist/hooks/use-debounced-value.d.ts +13 -0
  248. package/dist/hooks/use-debounced-value.d.ts.map +1 -0
  249. package/dist/hooks/use-debounced-value.js +27 -0
  250. package/dist/hooks/use-debounced-value.js.map +1 -0
  251. package/dist/hooks/use-escape-key.d.ts +4 -32
  252. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  253. package/dist/hooks/use-escape-key.js +27 -68
  254. package/dist/hooks/use-escape-key.js.map +1 -1
  255. package/dist/hooks/use-first-run-setup.d.ts +24 -0
  256. package/dist/hooks/use-first-run-setup.d.ts.map +1 -0
  257. package/dist/hooks/use-first-run-setup.js +114 -0
  258. package/dist/hooks/use-first-run-setup.js.map +1 -0
  259. package/dist/hooks/use-handoff-flow.d.ts +6 -6
  260. package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
  261. package/dist/hooks/use-handoff-flow.js +110 -118
  262. package/dist/hooks/use-handoff-flow.js.map +1 -1
  263. package/dist/hooks/use-model-selection.d.ts +1 -0
  264. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  265. package/dist/hooks/use-model-selection.js +93 -59
  266. package/dist/hooks/use-model-selection.js.map +1 -1
  267. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  268. package/dist/hooks/use-path-completion.js +20 -11
  269. package/dist/hooks/use-path-completion.js.map +1 -1
  270. package/dist/hooks/use-provider-selection.d.ts +5 -1
  271. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  272. package/dist/hooks/use-provider-selection.js +55 -27
  273. package/dist/hooks/use-provider-selection.js.map +1 -1
  274. package/dist/hooks/use-rewind-selection.d.ts +30 -0
  275. package/dist/hooks/use-rewind-selection.d.ts.map +1 -0
  276. package/dist/hooks/{use-undo-selection.js → use-rewind-selection.js} +37 -28
  277. package/dist/hooks/use-rewind-selection.js.map +1 -0
  278. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  279. package/dist/hooks/use-runtime-settings.js +4 -3
  280. package/dist/hooks/use-runtime-settings.js.map +1 -1
  281. package/dist/hooks/use-selection.d.ts +1 -0
  282. package/dist/hooks/use-selection.d.ts.map +1 -1
  283. package/dist/hooks/use-selection.js +1 -1
  284. package/dist/hooks/use-selection.js.map +1 -1
  285. package/dist/hooks/use-setting.d.ts +3 -2
  286. package/dist/hooks/use-setting.d.ts.map +1 -1
  287. package/dist/hooks/use-setting.js +1 -1
  288. package/dist/hooks/use-setting.js.map +1 -1
  289. package/dist/hooks/use-settings-completion.d.ts +1 -0
  290. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  291. package/dist/hooks/use-settings-completion.js +22 -15
  292. package/dist/hooks/use-settings-completion.js.map +1 -1
  293. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  294. package/dist/hooks/use-settings-value-completion.js +40 -28
  295. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  296. package/dist/hooks/use-shell-mode.d.ts +3 -13
  297. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  298. package/dist/hooks/use-shell-mode.js +14 -53
  299. package/dist/hooks/use-shell-mode.js.map +1 -1
  300. package/dist/hooks/use-skill-selection.d.ts.map +1 -1
  301. package/dist/hooks/use-skill-selection.js +17 -11
  302. package/dist/hooks/use-skill-selection.js.map +1 -1
  303. package/dist/hooks/use-slash-commands.d.ts +0 -1
  304. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  305. package/dist/hooks/use-slash-commands.js +11 -18
  306. package/dist/hooks/use-slash-commands.js.map +1 -1
  307. package/dist/hooks/use-terminal-focus-notifier.js.map +1 -1
  308. package/dist/lib/agent-chat-service.d.ts +12 -8
  309. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  310. package/dist/lib/agent-chat-service.js +88 -49
  311. package/dist/lib/agent-chat-service.js.map +1 -1
  312. package/dist/lib/agent-client.d.ts +98 -17
  313. package/dist/lib/agent-client.d.ts.map +1 -1
  314. package/dist/lib/agent-client.js +427 -37
  315. package/dist/lib/agent-client.js.map +1 -1
  316. package/dist/lib/agent-configuration.d.ts +36 -15
  317. package/dist/lib/agent-configuration.d.ts.map +1 -1
  318. package/dist/lib/agent-configuration.js +107 -9
  319. package/dist/lib/agent-configuration.js.map +1 -1
  320. package/dist/lib/agent-factory.d.ts +25 -4
  321. package/dist/lib/agent-factory.d.ts.map +1 -1
  322. package/dist/lib/agent-factory.js +143 -106
  323. package/dist/lib/agent-factory.js.map +1 -1
  324. package/dist/lib/chained-input-filter.d.ts +7 -1
  325. package/dist/lib/chained-input-filter.d.ts.map +1 -1
  326. package/dist/lib/chained-input-filter.js +46 -62
  327. package/dist/lib/chained-input-filter.js.map +1 -1
  328. package/dist/lib/continuation-projection-mode.d.ts +3 -0
  329. package/dist/lib/continuation-projection-mode.d.ts.map +1 -0
  330. package/dist/lib/continuation-projection-mode.js +2 -0
  331. package/dist/lib/continuation-projection-mode.js.map +1 -0
  332. package/dist/lib/editor-impl.d.ts +1 -1
  333. package/dist/lib/editor-impl.d.ts.map +1 -1
  334. package/dist/lib/editor-impl.js +1 -1
  335. package/dist/lib/editor-impl.js.map +1 -1
  336. package/dist/lib/harness-invariant-error.d.ts +22 -0
  337. package/dist/lib/harness-invariant-error.d.ts.map +1 -0
  338. package/dist/lib/harness-invariant-error.js +30 -0
  339. package/dist/lib/harness-invariant-error.js.map +1 -0
  340. package/dist/lib/input-owner.d.ts +67 -0
  341. package/dist/lib/input-owner.d.ts.map +1 -0
  342. package/dist/lib/input-owner.js +39 -0
  343. package/dist/lib/input-owner.js.map +1 -0
  344. package/dist/lib/openai-strict-tool-schema.d.ts +7 -4
  345. package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
  346. package/dist/lib/openai-strict-tool-schema.js +8 -0
  347. package/dist/lib/openai-strict-tool-schema.js.map +1 -1
  348. package/dist/lib/subagent-bridge.d.ts +38 -4
  349. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  350. package/dist/lib/subagent-bridge.js +96 -21
  351. package/dist/lib/subagent-bridge.js.map +1 -1
  352. package/dist/lib/tool-invoke.d.ts +18 -10
  353. package/dist/lib/tool-invoke.d.ts.map +1 -1
  354. package/dist/lib/tool-invoke.js +92 -44
  355. package/dist/lib/tool-invoke.js.map +1 -1
  356. package/dist/non-interactive.d.ts +14 -4
  357. package/dist/non-interactive.d.ts.map +1 -1
  358. package/dist/non-interactive.js +91 -84
  359. package/dist/non-interactive.js.map +1 -1
  360. package/dist/prompts/async-subagent-delegation.d.ts +1 -4
  361. package/dist/prompts/async-subagent-delegation.d.ts.map +1 -1
  362. package/dist/prompts/async-subagent-delegation.js +9 -47
  363. package/dist/prompts/async-subagent-delegation.js.map +1 -1
  364. package/dist/prompts/async-subagent-delegation.ts +9 -58
  365. package/dist/prompts/background-shell.d.ts +3 -0
  366. package/dist/prompts/background-shell.d.ts.map +1 -0
  367. package/dist/prompts/background-shell.js +11 -0
  368. package/dist/prompts/background-shell.js.map +1 -0
  369. package/dist/prompts/background-shell.ts +10 -0
  370. package/dist/prompts/memory.md +1 -1
  371. package/dist/prompts/orchestrator-prompt.test.ts +22 -0
  372. package/dist/prompts/orchestrator.md +7 -5
  373. package/dist/prompts/plan-mode-info.md +1 -1
  374. package/dist/prompts/prompt-constructor.d.ts +2 -0
  375. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  376. package/dist/prompts/prompt-constructor.js +9 -7
  377. package/dist/prompts/prompt-constructor.js.map +1 -1
  378. package/dist/prompts/prompt-constructor.test.ts +25 -9
  379. package/dist/prompts/prompt-constructor.ts +13 -7
  380. package/dist/prompts/shell-auto-approval.d.ts +2 -2
  381. package/dist/prompts/shell-auto-approval.d.ts.map +1 -1
  382. package/dist/prompts/shell-auto-approval.js +20 -5
  383. package/dist/prompts/shell-auto-approval.js.map +1 -1
  384. package/dist/prompts/shell-auto-approval.ts +20 -5
  385. package/dist/prompts/steering-notice.d.ts +16 -0
  386. package/dist/prompts/steering-notice.d.ts.map +1 -0
  387. package/dist/prompts/steering-notice.js +24 -0
  388. package/dist/prompts/steering-notice.js.map +1 -0
  389. package/dist/prompts/steering-notice.ts +24 -0
  390. package/dist/prompts/subagent-delegation.d.ts +6 -5
  391. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  392. package/dist/prompts/subagent-delegation.js +36 -13
  393. package/dist/prompts/subagent-delegation.js.map +1 -1
  394. package/dist/prompts/subagent-delegation.test.ts +9 -2
  395. package/dist/prompts/subagent-delegation.ts +54 -14
  396. package/dist/prompts/subagents/explorer.md +24 -14
  397. package/dist/prompts/subagents/worker-prompt.test.ts +2 -2
  398. package/dist/prompts/subagents/worker.md +1 -1
  399. package/dist/prompts/worktree-hygiene.md +1 -0
  400. package/dist/providers/ai-sdk-anthropic.provider.d.ts +3 -3
  401. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  402. package/dist/providers/ai-sdk-anthropic.provider.js +8 -4
  403. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  404. package/dist/providers/ai-sdk-google.provider.d.ts +5 -4
  405. package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
  406. package/dist/providers/ai-sdk-google.provider.js +23 -3
  407. package/dist/providers/ai-sdk-google.provider.js.map +1 -1
  408. package/dist/providers/ai-sdk-message-normalizer.d.ts +3 -7
  409. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -1
  410. package/dist/providers/ai-sdk-message-normalizer.js +27 -11
  411. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -1
  412. package/dist/providers/ai-sdk-openrouter.provider.d.ts +5 -4
  413. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
  414. package/dist/providers/ai-sdk-openrouter.provider.js +25 -3
  415. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -1
  416. package/dist/providers/ai-sdk-provider-settings.d.ts +10 -0
  417. package/dist/providers/ai-sdk-provider-settings.d.ts.map +1 -0
  418. package/dist/providers/ai-sdk-provider-settings.js +37 -0
  419. package/dist/providers/ai-sdk-provider-settings.js.map +1 -0
  420. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  421. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -0
  422. package/dist/providers/ai-sdk-streamed-model.js +338 -0
  423. package/dist/providers/ai-sdk-streamed-model.js.map +1 -0
  424. package/dist/providers/codex-auth.d.ts +6 -0
  425. package/dist/providers/codex-auth.d.ts.map +1 -0
  426. package/dist/providers/codex-auth.js +35 -0
  427. package/dist/providers/codex-auth.js.map +1 -0
  428. package/dist/providers/codex-responses-model.d.ts +39 -12
  429. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  430. package/dist/providers/codex-responses-model.js +669 -159
  431. package/dist/providers/codex-responses-model.js.map +1 -1
  432. package/dist/providers/codex-turn-converter.d.ts +12 -0
  433. package/dist/providers/codex-turn-converter.d.ts.map +1 -0
  434. package/dist/providers/codex-turn-converter.js +168 -0
  435. package/dist/providers/codex-turn-converter.js.map +1 -0
  436. package/dist/providers/codex.provider.d.ts +23 -1
  437. package/dist/providers/codex.provider.d.ts.map +1 -1
  438. package/dist/providers/codex.provider.js +60 -55
  439. package/dist/providers/codex.provider.js.map +1 -1
  440. package/dist/providers/common/openai-compatible-message-contract.d.ts +8 -0
  441. package/dist/providers/common/openai-compatible-message-contract.d.ts.map +1 -0
  442. package/dist/providers/common/openai-compatible-message-contract.js +23 -0
  443. package/dist/providers/common/openai-compatible-message-contract.js.map +1 -0
  444. package/dist/providers/common/openai-compatible-messages.d.ts +0 -4
  445. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  446. package/dist/providers/common/openai-compatible-messages.js +0 -288
  447. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  448. package/dist/providers/fetch/composer.d.ts.map +1 -1
  449. package/dist/providers/fetch/composer.js +1 -0
  450. package/dist/providers/fetch/composer.js.map +1 -1
  451. package/dist/providers/model-catalog/catalog.d.ts +64 -0
  452. package/dist/providers/model-catalog/catalog.d.ts.map +1 -0
  453. package/dist/providers/model-catalog/catalog.generated.d.ts +3010 -0
  454. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -0
  455. package/dist/providers/model-catalog/catalog.generated.js +3004 -0
  456. package/dist/providers/model-catalog/catalog.generated.js.map +1 -0
  457. package/dist/providers/model-catalog/catalog.js +126 -0
  458. package/dist/providers/model-catalog/catalog.js.map +1 -0
  459. package/dist/providers/model-catalog/generate-catalog.d.ts +42 -0
  460. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -0
  461. package/dist/providers/model-catalog/generate-catalog.js +96 -0
  462. package/dist/providers/model-catalog/generate-catalog.js.map +1 -0
  463. package/dist/providers/openai-chained-input-compatibility.d.ts +36 -0
  464. package/dist/providers/openai-chained-input-compatibility.d.ts.map +1 -0
  465. package/dist/providers/openai-chained-input-compatibility.js +60 -0
  466. package/dist/providers/openai-chained-input-compatibility.js.map +1 -0
  467. package/dist/providers/openai-chat-completions-model.d.ts +13 -0
  468. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -0
  469. package/dist/providers/openai-chat-completions-model.js +441 -0
  470. package/dist/providers/openai-chat-completions-model.js.map +1 -0
  471. package/dist/providers/openai-compatible-lazy.d.ts +1 -1
  472. package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
  473. package/dist/providers/openai-compatible-lazy.js +25 -36
  474. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  475. package/dist/providers/openai-compatible-middleware.d.ts +4 -1
  476. package/dist/providers/openai-compatible-middleware.d.ts.map +1 -1
  477. package/dist/providers/openai-compatible-middleware.js +16 -27
  478. package/dist/providers/openai-compatible-middleware.js.map +1 -1
  479. package/dist/providers/openai-compatible-response-normalizer.d.ts +12 -2
  480. package/dist/providers/openai-compatible-response-normalizer.d.ts.map +1 -1
  481. package/dist/providers/openai-compatible-response-normalizer.js +18 -18
  482. package/dist/providers/openai-compatible-response-normalizer.js.map +1 -1
  483. package/dist/providers/openai-compatible.provider.d.ts +8 -10
  484. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  485. package/dist/providers/openai-compatible.provider.js +89 -78
  486. package/dist/providers/openai-compatible.provider.js.map +1 -1
  487. package/dist/providers/openai-request-prefix-binding.d.ts +28 -0
  488. package/dist/providers/openai-request-prefix-binding.d.ts.map +1 -0
  489. package/dist/providers/openai-request-prefix-binding.js +78 -0
  490. package/dist/providers/openai-request-prefix-binding.js.map +1 -0
  491. package/dist/providers/openai-responses-model.d.ts +43 -0
  492. package/dist/providers/openai-responses-model.d.ts.map +1 -0
  493. package/dist/providers/openai-responses-model.js +564 -0
  494. package/dist/providers/openai-responses-model.js.map +1 -0
  495. package/dist/providers/openai.provider.d.ts +11 -8
  496. package/dist/providers/openai.provider.d.ts.map +1 -1
  497. package/dist/providers/openai.provider.js +43 -91
  498. package/dist/providers/openai.provider.js.map +1 -1
  499. package/dist/providers/opencode-routing.d.ts +1 -1
  500. package/dist/providers/opencode-routing.d.ts.map +1 -1
  501. package/dist/providers/opencode-routing.js +4 -2
  502. package/dist/providers/opencode-routing.js.map +1 -1
  503. package/dist/providers/opencode-session.d.ts.map +1 -1
  504. package/dist/providers/opencode-session.js +28 -3
  505. package/dist/providers/opencode-session.js.map +1 -1
  506. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  507. package/dist/providers/openrouter.provider.js +33 -33
  508. package/dist/providers/openrouter.provider.js.map +1 -1
  509. package/dist/providers/provider-request-capture.d.ts +35 -0
  510. package/dist/providers/provider-request-capture.d.ts.map +1 -0
  511. package/dist/providers/provider-request-capture.js +22 -0
  512. package/dist/providers/provider-request-capture.js.map +1 -0
  513. package/dist/providers/provider-service.d.ts +10 -7
  514. package/dist/providers/provider-service.d.ts.map +1 -1
  515. package/dist/providers/provider-service.js +33 -28
  516. package/dist/providers/provider-service.js.map +1 -1
  517. package/dist/providers/registry.d.ts +14 -9
  518. package/dist/providers/registry.d.ts.map +1 -1
  519. package/dist/providers/registry.js.map +1 -1
  520. package/dist/providers/retrying-model.d.ts +8 -6
  521. package/dist/providers/retrying-model.d.ts.map +1 -1
  522. package/dist/providers/retrying-model.js +7 -20
  523. package/dist/providers/retrying-model.js.map +1 -1
  524. package/dist/providers/web-search/exa.provider.js.map +1 -1
  525. package/dist/providers/web-search/registry.js.map +1 -1
  526. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  527. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  528. package/dist/providers/websocket-receive-watchdog.js +9 -1
  529. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  530. package/dist/scripts/eval-auto-approval/runner.js +2 -0
  531. package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
  532. package/dist/services/agent-runtime/application-run-loop.d.ts +205 -0
  533. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -0
  534. package/dist/services/agent-runtime/application-run-loop.js +1258 -0
  535. package/dist/services/agent-runtime/application-run-loop.js.map +1 -0
  536. package/dist/services/agent-runtime/compose-agent-runtime.d.ts +3 -0
  537. package/dist/services/agent-runtime/compose-agent-runtime.d.ts.map +1 -1
  538. package/dist/services/agent-runtime/compose-agent-runtime.js +4 -0
  539. package/dist/services/agent-runtime/compose-agent-runtime.js.map +1 -1
  540. package/dist/services/agent-runtime/generation-guard.d.ts +69 -0
  541. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -0
  542. package/dist/services/agent-runtime/generation-guard.js +270 -0
  543. package/dist/services/agent-runtime/generation-guard.js.map +1 -0
  544. package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
  545. package/dist/services/agent-runtime/model-resolver.js +7 -6
  546. package/dist/services/agent-runtime/model-resolver.js.map +1 -1
  547. package/dist/services/agent-runtime/scope-resolver.d.ts.map +1 -1
  548. package/dist/services/agent-runtime/scope-resolver.js +2 -1
  549. package/dist/services/agent-runtime/scope-resolver.js.map +1 -1
  550. package/dist/services/agent-runtime/structured-output.d.ts.map +1 -1
  551. package/dist/services/agent-runtime/structured-output.js +1 -21
  552. package/dist/services/agent-runtime/structured-output.js.map +1 -1
  553. package/dist/services/agent-runtime/tool-invocation-context.d.ts +73 -0
  554. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -0
  555. package/dist/services/agent-runtime/tool-invocation-context.js +66 -0
  556. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -0
  557. package/dist/services/agent-stream.d.ts +41 -2
  558. package/dist/services/agent-stream.d.ts.map +1 -1
  559. package/dist/services/agent-stream.js +47 -1
  560. package/dist/services/agent-stream.js.map +1 -1
  561. package/dist/services/approval/approval-decision-executor.d.ts +42 -0
  562. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -0
  563. package/dist/services/approval/approval-decision-executor.js +210 -0
  564. package/dist/services/approval/approval-decision-executor.js.map +1 -0
  565. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  566. package/dist/services/approval/approval-decision-policy.js +0 -2
  567. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  568. package/dist/services/approval/approval-flow-coordinator.d.ts +25 -8
  569. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  570. package/dist/services/approval/approval-flow-coordinator.js +34 -167
  571. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  572. package/dist/services/approval/approval-replay.d.ts +52 -0
  573. package/dist/services/approval/approval-replay.d.ts.map +1 -0
  574. package/dist/services/approval/approval-replay.js +68 -0
  575. package/dist/services/approval/approval-replay.js.map +1 -0
  576. package/dist/services/approval/approval-state.d.ts +3 -6
  577. package/dist/services/approval/approval-state.d.ts.map +1 -1
  578. package/dist/services/approval/approval-state.js +0 -10
  579. package/dist/services/approval/approval-state.js.map +1 -1
  580. package/dist/services/approval/background-subagent-approval-controller.d.ts +25 -0
  581. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -0
  582. package/dist/services/approval/background-subagent-approval-controller.js +65 -0
  583. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -0
  584. package/dist/services/approval/background-subagent-approval-queue.d.ts +137 -0
  585. package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -0
  586. package/dist/services/approval/background-subagent-approval-queue.js +200 -0
  587. package/dist/services/approval/background-subagent-approval-queue.js.map +1 -0
  588. package/dist/services/approval/non-interactive-approval-policy.d.ts +33 -0
  589. package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -0
  590. package/dist/services/approval/non-interactive-approval-policy.js +85 -0
  591. package/dist/services/approval/non-interactive-approval-policy.js.map +1 -0
  592. package/dist/services/approval/session-read-access.d.ts +10 -0
  593. package/dist/services/approval/session-read-access.d.ts.map +1 -1
  594. package/dist/services/approval/session-read-access.js +14 -1
  595. package/dist/services/approval/session-read-access.js.map +1 -1
  596. package/dist/services/approval/session-read-grant-target.d.ts +7 -0
  597. package/dist/services/approval/session-read-grant-target.d.ts.map +1 -0
  598. package/dist/services/approval/session-read-grant-target.js +36 -0
  599. package/dist/services/approval/session-read-grant-target.js.map +1 -0
  600. package/dist/services/approval/shell-auto-approval-evaluator.d.ts +11 -3
  601. package/dist/services/approval/shell-auto-approval-evaluator.d.ts.map +1 -1
  602. package/dist/services/approval/shell-auto-approval-evaluator.js +140 -46
  603. package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
  604. package/dist/services/approval/shell-auto-approval-resolver.d.ts +14 -1
  605. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  606. package/dist/services/approval/shell-auto-approval-resolver.js +83 -7
  607. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  608. package/dist/services/approval/shell-sandbox-approval.d.ts +22 -1
  609. package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -1
  610. package/dist/services/approval/shell-sandbox-approval.js +31 -4
  611. package/dist/services/approval/shell-sandbox-approval.js.map +1 -1
  612. package/dist/services/approval/tool-approval-batch-coordinator.d.ts +9 -0
  613. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  614. package/dist/services/approval/tool-approval-batch-coordinator.js +22 -5
  615. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  616. package/dist/services/approval/tool-owner.d.ts +5 -2
  617. package/dist/services/approval/tool-owner.d.ts.map +1 -1
  618. package/dist/services/approval/tool-owner.js +0 -56
  619. package/dist/services/approval/tool-owner.js.map +1 -1
  620. package/dist/services/approval/tool-ownership-registry.d.ts +25 -0
  621. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -0
  622. package/dist/services/approval/tool-ownership-registry.js +63 -0
  623. package/dist/services/approval/tool-ownership-registry.js.map +1 -0
  624. package/dist/services/command-message-streaming.d.ts +8 -4
  625. package/dist/services/command-message-streaming.d.ts.map +1 -1
  626. package/dist/services/command-message-streaming.js +13 -52
  627. package/dist/services/command-message-streaming.js.map +1 -1
  628. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  629. package/dist/services/conversation/conversation-adapter-factory.js +1 -0
  630. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  631. package/dist/services/conversation/conversation-adapter.d.ts +112 -13
  632. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  633. package/dist/services/conversation/conversation-adapter.js +270 -47
  634. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  635. package/dist/services/conversation/conversation-admission-workflow.d.ts +69 -0
  636. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -0
  637. package/dist/services/conversation/conversation-admission-workflow.js +112 -0
  638. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -0
  639. package/dist/services/conversation/conversation-decoder.d.ts +14 -0
  640. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -0
  641. package/dist/services/conversation/conversation-decoder.js +155 -0
  642. package/dist/services/conversation/conversation-decoder.js.map +1 -0
  643. package/dist/services/conversation/conversation-events.d.ts +80 -26
  644. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  645. package/dist/services/conversation/conversation-history-repair.d.ts.map +1 -1
  646. package/dist/services/conversation/conversation-history-repair.js +34 -37
  647. package/dist/services/conversation/conversation-history-repair.js.map +1 -1
  648. package/dist/services/conversation/conversation-message-projection.d.ts +27 -0
  649. package/dist/services/conversation/conversation-message-projection.d.ts.map +1 -0
  650. package/dist/services/conversation/conversation-message-projection.js +59 -0
  651. package/dist/services/conversation/conversation-message-projection.js.map +1 -0
  652. package/dist/services/conversation/conversation-orchestrator.d.ts +25 -14
  653. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  654. package/dist/services/conversation/conversation-orchestrator.js +471 -160
  655. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  656. package/dist/services/conversation/conversation-orchestrator.types.d.ts +16 -11
  657. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  658. package/dist/services/conversation/conversation-persistence-types.d.ts +15 -38
  659. package/dist/services/conversation/conversation-persistence-types.d.ts.map +1 -1
  660. package/dist/services/conversation/conversation-persistence.d.ts +3 -10
  661. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  662. package/dist/services/conversation/conversation-persistence.js +66 -15
  663. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  664. package/dist/services/conversation/conversation-replay.d.ts +7 -5
  665. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  666. package/dist/services/conversation/conversation-replay.js +172 -66
  667. package/dist/services/conversation/conversation-replay.js.map +1 -1
  668. package/dist/services/conversation/conversation-result-builder.d.ts +16 -2
  669. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  670. package/dist/services/conversation/conversation-result-builder.js +63 -15
  671. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  672. package/dist/services/conversation/conversation-runtime-factory.d.ts +18 -0
  673. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  674. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  675. package/dist/services/conversation/conversation-service.d.ts +65 -12
  676. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  677. package/dist/services/conversation/conversation-service.js +129 -16
  678. package/dist/services/conversation/conversation-service.js.map +1 -1
  679. package/dist/services/conversation/conversation-state-projector.d.ts +3 -3
  680. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  681. package/dist/services/conversation/conversation-state-projector.js +18 -0
  682. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  683. package/dist/services/conversation/conversation-store.d.ts +78 -12
  684. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  685. package/dist/services/conversation/conversation-store.js +228 -119
  686. package/dist/services/conversation/conversation-store.js.map +1 -1
  687. package/dist/services/conversation/conversation-turn-items.d.ts +8 -2
  688. package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
  689. package/dist/services/conversation/conversation-turn-items.js +96 -275
  690. package/dist/services/conversation/conversation-turn-items.js.map +1 -1
  691. package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -1
  692. package/dist/services/conversation/journal-to-ledger.js +4 -24
  693. package/dist/services/conversation/journal-to-ledger.js.map +1 -1
  694. package/dist/services/conversation/run-item-normalizer.d.ts +5 -0
  695. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -0
  696. package/dist/services/conversation/run-item-normalizer.js +245 -0
  697. package/dist/services/conversation/run-item-normalizer.js.map +1 -0
  698. package/dist/services/conversation/user-turn-item.d.ts +14 -0
  699. package/dist/services/conversation/user-turn-item.d.ts.map +1 -0
  700. package/dist/services/conversation/user-turn-item.js +27 -0
  701. package/dist/services/conversation/user-turn-item.js.map +1 -0
  702. package/dist/services/conversation-agent-client.d.ts +77 -6
  703. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  704. package/dist/services/cost/model-cost.d.ts +158 -0
  705. package/dist/services/cost/model-cost.d.ts.map +1 -0
  706. package/dist/services/cost/model-cost.js +218 -0
  707. package/dist/services/cost/model-cost.js.map +1 -0
  708. package/dist/services/cost/pricing-overlay.d.ts +26 -0
  709. package/dist/services/cost/pricing-overlay.d.ts.map +1 -0
  710. package/dist/services/cost/pricing-overlay.js +39 -0
  711. package/dist/services/cost/pricing-overlay.js.map +1 -0
  712. package/dist/services/cost/pricing.d.ts +13 -0
  713. package/dist/services/cost/pricing.d.ts.map +1 -0
  714. package/dist/services/cost/pricing.js +82 -0
  715. package/dist/services/cost/pricing.js.map +1 -0
  716. package/dist/services/execution-context.d.ts +31 -0
  717. package/dist/services/execution-context.d.ts.map +1 -1
  718. package/dist/services/execution-context.js +59 -0
  719. package/dist/services/execution-context.js.map +1 -1
  720. package/dist/services/file-service.d.ts.map +1 -1
  721. package/dist/services/file-service.js +12 -3
  722. package/dist/services/file-service.js.map +1 -1
  723. package/dist/services/handoff/handoff-flow-reducer.d.ts +27 -0
  724. package/dist/services/handoff/handoff-flow-reducer.d.ts.map +1 -0
  725. package/dist/services/handoff/handoff-flow-reducer.js +26 -0
  726. package/dist/services/handoff/handoff-flow-reducer.js.map +1 -0
  727. package/dist/services/handoff/handoff-session.d.ts +35 -0
  728. package/dist/services/handoff/handoff-session.d.ts.map +1 -0
  729. package/dist/services/handoff/handoff-session.js +136 -0
  730. package/dist/services/handoff/handoff-session.js.map +1 -0
  731. package/dist/services/hooks/hook-contracts.d.ts +124 -0
  732. package/dist/services/hooks/hook-contracts.d.ts.map +1 -0
  733. package/dist/services/hooks/hook-contracts.js +92 -0
  734. package/dist/services/hooks/hook-contracts.js.map +1 -0
  735. package/dist/services/hooks/hook-discovery.d.ts +45 -0
  736. package/dist/services/hooks/hook-discovery.d.ts.map +1 -0
  737. package/dist/services/hooks/hook-discovery.js +255 -0
  738. package/dist/services/hooks/hook-discovery.js.map +1 -0
  739. package/dist/services/hooks/hook-editor-shim.d.ts +6 -0
  740. package/dist/services/hooks/hook-editor-shim.d.ts.map +1 -0
  741. package/dist/services/hooks/hook-editor-shim.js +190 -0
  742. package/dist/services/hooks/hook-editor-shim.js.map +1 -0
  743. package/dist/services/hooks/hook-event-factory.d.ts +19 -0
  744. package/dist/services/hooks/hook-event-factory.d.ts.map +1 -0
  745. package/dist/services/hooks/hook-event-factory.js +45 -0
  746. package/dist/services/hooks/hook-event-factory.js.map +1 -0
  747. package/dist/services/hooks/hook-module-loader.d.ts +38 -0
  748. package/dist/services/hooks/hook-module-loader.d.ts.map +1 -0
  749. package/dist/services/hooks/hook-module-loader.js +69 -0
  750. package/dist/services/hooks/hook-module-loader.js.map +1 -0
  751. package/dist/services/hooks/hook-registry.d.ts +47 -0
  752. package/dist/services/hooks/hook-registry.d.ts.map +1 -0
  753. package/dist/services/hooks/hook-registry.js +185 -0
  754. package/dist/services/hooks/hook-registry.js.map +1 -0
  755. package/dist/services/hooks/hook-service.d.ts +44 -0
  756. package/dist/services/hooks/hook-service.d.ts.map +1 -0
  757. package/dist/services/hooks/hook-service.js +138 -0
  758. package/dist/services/hooks/hook-service.js.map +1 -0
  759. package/dist/services/hooks/hook-tool-lifecycle.d.ts +6 -0
  760. package/dist/services/hooks/hook-tool-lifecycle.d.ts.map +1 -0
  761. package/dist/services/hooks/hook-tool-lifecycle.js +33 -0
  762. package/dist/services/hooks/hook-tool-lifecycle.js.map +1 -0
  763. package/dist/services/hooks/index.d.ts +2 -0
  764. package/dist/services/hooks/index.d.ts.map +1 -0
  765. package/dist/services/hooks/index.js +2 -0
  766. package/dist/services/hooks/index.js.map +1 -0
  767. package/dist/services/input-surge-guard.d.ts.map +1 -1
  768. package/dist/services/input-surge-guard.js +13 -34
  769. package/dist/services/input-surge-guard.js.map +1 -1
  770. package/dist/services/large-uncached-input-guard.d.ts +26 -1
  771. package/dist/services/large-uncached-input-guard.d.ts.map +1 -1
  772. package/dist/services/large-uncached-input-guard.js +73 -38
  773. package/dist/services/large-uncached-input-guard.js.map +1 -1
  774. package/dist/services/logging/assistant-turn-journal.d.ts +1 -1
  775. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  776. package/dist/services/logging/assistant-turn-journal.js +21 -36
  777. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  778. package/dist/services/logging/conversation-log-events.d.ts +75 -7
  779. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  780. package/dist/services/logging/conversation-log-events.js +9 -0
  781. package/dist/services/logging/conversation-log-events.js.map +1 -1
  782. package/dist/services/logging/conversation-log-writer.d.ts +9 -4
  783. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  784. package/dist/services/logging/conversation-log-writer.js +183 -56
  785. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  786. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  787. package/dist/services/logging/conversation-logger.js +35 -1
  788. package/dist/services/logging/conversation-logger.js.map +1 -1
  789. package/dist/services/logging/logging-contract.d.ts.map +1 -1
  790. package/dist/services/logging/logging-contract.js +4 -0
  791. package/dist/services/logging/logging-contract.js.map +1 -1
  792. package/dist/services/logging/logging-service.d.ts.map +1 -1
  793. package/dist/services/logging/logging-service.js +6 -2
  794. package/dist/services/logging/logging-service.js.map +1 -1
  795. package/dist/services/logging/provider-traffic.d.ts +2 -1
  796. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  797. package/dist/services/logging/provider-traffic.js +81 -5
  798. package/dist/services/logging/provider-traffic.js.map +1 -1
  799. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  800. package/dist/services/memory/memory-capabilities.js +13 -8
  801. package/dist/services/memory/memory-capabilities.js.map +1 -1
  802. package/dist/services/model-service.d.ts +10 -0
  803. package/dist/services/model-service.d.ts.map +1 -1
  804. package/dist/services/model-service.js +24 -1
  805. package/dist/services/model-service.js.map +1 -1
  806. package/dist/services/models/model-catalog-session.d.ts +26 -0
  807. package/dist/services/models/model-catalog-session.d.ts.map +1 -0
  808. package/dist/services/models/model-catalog-session.js +77 -0
  809. package/dist/services/models/model-catalog-session.js.map +1 -0
  810. package/dist/services/openai-candidate-observer.d.ts +18 -0
  811. package/dist/services/openai-candidate-observer.d.ts.map +1 -0
  812. package/dist/services/openai-candidate-observer.js +56 -0
  813. package/dist/services/openai-candidate-observer.js.map +1 -0
  814. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts +20 -0
  815. package/dist/services/openai-root-checkpoint-lifecycle-observer.d.ts.map +1 -0
  816. package/dist/services/openai-root-checkpoint-lifecycle-observer.js +21 -0
  817. package/dist/services/openai-root-checkpoint-lifecycle-observer.js.map +1 -0
  818. package/dist/services/openai-root-provider-identity.d.ts +11 -0
  819. package/dist/services/openai-root-provider-identity.d.ts.map +1 -0
  820. package/dist/services/openai-root-provider-identity.js +16 -0
  821. package/dist/services/openai-root-provider-identity.js.map +1 -0
  822. package/dist/services/openai-root-selector-parity-observer.d.ts +53 -0
  823. package/dist/services/openai-root-selector-parity-observer.d.ts.map +1 -0
  824. package/dist/services/openai-root-selector-parity-observer.js +62 -0
  825. package/dist/services/openai-root-selector-parity-observer.js.map +1 -0
  826. package/dist/services/plan-mode-interceptor.js +2 -2
  827. package/dist/services/plan-mode-interceptor.js.map +1 -1
  828. package/dist/services/provider-continuity.d.ts +94 -0
  829. package/dist/services/provider-continuity.d.ts.map +1 -1
  830. package/dist/services/provider-continuity.js +203 -0
  831. package/dist/services/provider-continuity.js.map +1 -1
  832. package/dist/services/providers/provider-management-session.d.ts +12 -0
  833. package/dist/services/providers/provider-management-session.d.ts.map +1 -0
  834. package/dist/services/providers/provider-management-session.js +21 -0
  835. package/dist/services/providers/provider-management-session.js.map +1 -0
  836. package/dist/services/queue/queue-controller.d.ts +9 -14
  837. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  838. package/dist/services/queue/queue-controller.js +75 -60
  839. package/dist/services/queue/queue-controller.js.map +1 -1
  840. package/dist/services/retry/conversation-retry-policy.js +3 -3
  841. package/dist/services/retry/conversation-retry-policy.js.map +1 -1
  842. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  843. package/dist/services/retry/recovery-executor.js +15 -8
  844. package/dist/services/retry/recovery-executor.js.map +1 -1
  845. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  846. package/dist/services/retry/recovery-policy.js +4 -1
  847. package/dist/services/retry/recovery-policy.js.map +1 -1
  848. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  849. package/dist/services/retry/retry-classifier.js +3 -1
  850. package/dist/services/retry/retry-classifier.js.map +1 -1
  851. package/dist/services/retry/retry-contracts.d.ts +3 -5
  852. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  853. package/dist/services/retry/retry-error-classification.d.ts +20 -0
  854. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  855. package/dist/services/retry/retry-error-classification.js +82 -0
  856. package/dist/services/retry/retry-error-classification.js.map +1 -1
  857. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  858. package/dist/services/retry/retry-event-presenter.js +4 -1
  859. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  860. package/dist/services/retry/upstream-retry-policy.js +3 -3
  861. package/dist/services/rtk-service.d.ts.map +1 -1
  862. package/dist/services/rtk-service.js +3 -15
  863. package/dist/services/rtk-service.js.map +1 -1
  864. package/dist/services/runtime-setting-router.d.ts +19 -0
  865. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  866. package/dist/services/runtime-setting-router.js +33 -0
  867. package/dist/services/runtime-setting-router.js.map +1 -1
  868. package/dist/services/service-interfaces.d.ts +19 -2
  869. package/dist/services/service-interfaces.d.ts.map +1 -1
  870. package/dist/services/session/background-task-control.d.ts +128 -0
  871. package/dist/services/session/background-task-control.d.ts.map +1 -0
  872. package/dist/services/session/background-task-control.js +217 -0
  873. package/dist/services/session/background-task-control.js.map +1 -0
  874. package/dist/services/session/background-task-liveness.d.ts +24 -0
  875. package/dist/services/session/background-task-liveness.d.ts.map +1 -0
  876. package/dist/services/session/background-task-liveness.js +23 -0
  877. package/dist/services/session/background-task-liveness.js.map +1 -0
  878. package/dist/services/session/continuation-call-id-resolver.d.ts +16 -9
  879. package/dist/services/session/continuation-call-id-resolver.d.ts.map +1 -1
  880. package/dist/services/session/continuation-call-id-resolver.js +34 -48
  881. package/dist/services/session/continuation-call-id-resolver.js.map +1 -1
  882. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  883. package/dist/services/session/continuation-plan-applier.js +1 -3
  884. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  885. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  886. package/dist/services/session/continuation-recovery-handler.js +0 -2
  887. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  888. package/dist/services/session/continuation-state.d.ts +9 -5
  889. package/dist/services/session/continuation-state.d.ts.map +1 -1
  890. package/dist/services/session/continuation-state.js +1 -1
  891. package/dist/services/session/continuation-state.js.map +1 -1
  892. package/dist/services/session/live-run.d.ts +29 -0
  893. package/dist/services/session/live-run.d.ts.map +1 -0
  894. package/dist/services/session/live-run.js +111 -0
  895. package/dist/services/session/live-run.js.map +1 -0
  896. package/dist/services/session/nested-tool-compatibility-state.d.ts +20 -0
  897. package/dist/services/session/nested-tool-compatibility-state.d.ts.map +1 -0
  898. package/dist/services/session/nested-tool-compatibility-state.js +29 -0
  899. package/dist/services/session/nested-tool-compatibility-state.js.map +1 -0
  900. package/dist/services/session/pending-interaction-state.d.ts +60 -0
  901. package/dist/services/session/pending-interaction-state.d.ts.map +1 -0
  902. package/dist/services/session/pending-interaction-state.js +132 -0
  903. package/dist/services/session/pending-interaction-state.js.map +1 -0
  904. package/dist/services/session/post-execute-pause-capability.d.ts +17 -0
  905. package/dist/services/session/post-execute-pause-capability.d.ts.map +1 -0
  906. package/dist/services/session/post-execute-pause-capability.js +27 -0
  907. package/dist/services/session/post-execute-pause-capability.js.map +1 -0
  908. package/dist/services/session/post-execute-pause-policy.d.ts +20 -0
  909. package/dist/services/session/post-execute-pause-policy.d.ts.map +1 -0
  910. package/dist/services/session/post-execute-pause-policy.js +34 -0
  911. package/dist/services/session/post-execute-pause-policy.js.map +1 -0
  912. package/dist/services/session/post-execute-pending-registry.d.ts +63 -0
  913. package/dist/services/session/post-execute-pending-registry.d.ts.map +1 -0
  914. package/dist/services/session/post-execute-pending-registry.js +123 -0
  915. package/dist/services/session/post-execute-pending-registry.js.map +1 -0
  916. package/dist/services/session/session-access-state.d.ts +24 -0
  917. package/dist/services/session/session-access-state.d.ts.map +1 -0
  918. package/dist/services/session/session-access-state.js +92 -0
  919. package/dist/services/session/session-access-state.js.map +1 -0
  920. package/dist/services/session/session-client-factory.d.ts +71 -0
  921. package/dist/services/session/session-client-factory.d.ts.map +1 -0
  922. package/dist/services/session/session-client-factory.js +130 -0
  923. package/dist/services/session/session-client-factory.js.map +1 -0
  924. package/dist/services/session/session-composition.d.ts +58 -0
  925. package/dist/services/session/session-composition.d.ts.map +1 -1
  926. package/dist/services/session/session-composition.js +179 -13
  927. package/dist/services/session/session-composition.js.map +1 -1
  928. package/dist/services/session/session-input-planner.d.ts +22 -2
  929. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  930. package/dist/services/session/session-input-planner.js +121 -10
  931. package/dist/services/session/session-input-planner.js.map +1 -1
  932. package/dist/services/session/session-lifecycle.d.ts +5 -0
  933. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  934. package/dist/services/session/session-lifecycle.js +16 -6
  935. package/dist/services/session/session-lifecycle.js.map +1 -1
  936. package/dist/services/session/session-manager.d.ts +11 -1
  937. package/dist/services/session/session-manager.d.ts.map +1 -1
  938. package/dist/services/session/session-manager.js +16 -3
  939. package/dist/services/session/session-manager.js.map +1 -1
  940. package/dist/services/session/session-stream-processor.d.ts +6 -0
  941. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  942. package/dist/services/session/session-stream-processor.js +177 -35
  943. package/dist/services/session/session-stream-processor.js.map +1 -1
  944. package/dist/services/session/session-tool-tracker.d.ts +16 -21
  945. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  946. package/dist/services/session/session-tool-tracker.js +21 -52
  947. package/dist/services/session/session-tool-tracker.js.map +1 -1
  948. package/dist/services/session/terminal-result-collector.d.ts +8 -0
  949. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  950. package/dist/services/session/terminal-result-collector.js +30 -4
  951. package/dist/services/session/terminal-result-collector.js.map +1 -1
  952. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
  953. package/dist/services/session/test-helpers/conversation-session-fixtures.js +8 -1
  954. package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
  955. package/dist/services/session/turn-attempt-factory.d.ts +2 -2
  956. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  957. package/dist/services/session/turn-attempt.d.ts +4 -2
  958. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  959. package/dist/services/session/turn-attempt.js +5 -0
  960. package/dist/services/session/turn-attempt.js.map +1 -1
  961. package/dist/services/session/turn-coordinator.d.ts +32 -2
  962. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  963. package/dist/services/session/turn-coordinator.js +180 -9
  964. package/dist/services/session/turn-coordinator.js.map +1 -1
  965. package/dist/services/session/turn-status-machine.d.ts +21 -6
  966. package/dist/services/session/turn-status-machine.d.ts.map +1 -1
  967. package/dist/services/session/turn-status-machine.js +50 -13
  968. package/dist/services/session/turn-status-machine.js.map +1 -1
  969. package/dist/services/session/turn-workflow.d.ts +35 -0
  970. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  971. package/dist/services/session/turn-workflow.js +377 -27
  972. package/dist/services/session/turn-workflow.js.map +1 -1
  973. package/dist/services/settings/ancillary-settings-migration.js +3 -3
  974. package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
  975. package/dist/services/settings/custom-provider-normalization.d.ts +10 -0
  976. package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -1
  977. package/dist/services/settings/custom-provider-normalization.js +35 -2
  978. package/dist/services/settings/custom-provider-normalization.js.map +1 -1
  979. package/dist/services/settings/settings-env.d.ts +3 -0
  980. package/dist/services/settings/settings-env.d.ts.map +1 -1
  981. package/dist/services/settings/settings-env.js +3 -3
  982. package/dist/services/settings/settings-env.js.map +1 -1
  983. package/dist/services/settings/settings-merger.d.ts +6 -5
  984. package/dist/services/settings/settings-merger.d.ts.map +1 -1
  985. package/dist/services/settings/settings-merger.js +9 -4
  986. package/dist/services/settings/settings-merger.js.map +1 -1
  987. package/dist/services/settings/settings-path.d.ts +6 -0
  988. package/dist/services/settings/settings-path.d.ts.map +1 -0
  989. package/dist/services/settings/settings-path.js +15 -0
  990. package/dist/services/settings/settings-path.js.map +1 -0
  991. package/dist/services/settings/settings-persistence.d.ts +17 -6
  992. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  993. package/dist/services/settings/settings-persistence.js +155 -28
  994. package/dist/services/settings/settings-persistence.js.map +1 -1
  995. package/dist/services/settings/settings-schema.d.ts +107 -5
  996. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  997. package/dist/services/settings/settings-schema.js +91 -9
  998. package/dist/services/settings/settings-schema.js.map +1 -1
  999. package/dist/services/settings/settings-service.d.ts +42 -5
  1000. package/dist/services/settings/settings-service.d.ts.map +1 -1
  1001. package/dist/services/settings/settings-service.js +282 -12
  1002. package/dist/services/settings/settings-service.js.map +1 -1
  1003. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  1004. package/dist/services/settings/settings-sources.js +7 -0
  1005. package/dist/services/settings/settings-sources.js.map +1 -1
  1006. package/dist/services/shell/background-shell-output-store.d.ts +90 -0
  1007. package/dist/services/shell/background-shell-output-store.d.ts.map +1 -0
  1008. package/dist/services/shell/background-shell-output-store.js +207 -0
  1009. package/dist/services/shell/background-shell-output-store.js.map +1 -0
  1010. package/dist/services/shell/background-shell-registry.d.ts +128 -0
  1011. package/dist/services/shell/background-shell-registry.d.ts.map +1 -0
  1012. package/dist/services/shell/background-shell-registry.js +341 -0
  1013. package/dist/services/shell/background-shell-registry.js.map +1 -0
  1014. package/dist/services/shell/background-shell-watches.d.ts +141 -0
  1015. package/dist/services/shell/background-shell-watches.d.ts.map +1 -0
  1016. package/dist/services/shell/background-shell-watches.js +245 -0
  1017. package/dist/services/shell/background-shell-watches.js.map +1 -0
  1018. package/dist/services/shell/shell-interaction-session.d.ts +43 -0
  1019. package/dist/services/shell/shell-interaction-session.d.ts.map +1 -0
  1020. package/dist/services/shell/shell-interaction-session.js +113 -0
  1021. package/dist/services/shell/shell-interaction-session.js.map +1 -0
  1022. package/dist/services/stream-event-processor.d.ts +11 -12
  1023. package/dist/services/stream-event-processor.d.ts.map +1 -1
  1024. package/dist/services/stream-event-processor.js +119 -352
  1025. package/dist/services/stream-event-processor.js.map +1 -1
  1026. package/dist/services/stream-snapshot.d.ts +0 -1
  1027. package/dist/services/stream-snapshot.d.ts.map +1 -1
  1028. package/dist/services/stream-snapshot.js +0 -1
  1029. package/dist/services/stream-snapshot.js.map +1 -1
  1030. package/dist/services/subagents/codename-run-id.d.ts +43 -0
  1031. package/dist/services/subagents/codename-run-id.d.ts.map +1 -0
  1032. package/dist/services/subagents/codename-run-id.js +683 -0
  1033. package/dist/services/subagents/codename-run-id.js.map +1 -0
  1034. package/dist/services/subagents/execution-runner.d.ts +2 -0
  1035. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  1036. package/dist/services/subagents/execution-runner.js +60 -6
  1037. package/dist/services/subagents/execution-runner.js.map +1 -1
  1038. package/dist/services/subagents/foreground-subagent-lease.d.ts +77 -0
  1039. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -0
  1040. package/dist/services/subagents/foreground-subagent-lease.js +156 -0
  1041. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -0
  1042. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  1043. package/dist/services/subagents/mentor-runner.js +50 -31
  1044. package/dist/services/subagents/mentor-runner.js.map +1 -1
  1045. package/dist/services/subagents/nested-runner.d.ts +47 -23
  1046. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  1047. package/dist/services/subagents/nested-runner.js +313 -66
  1048. package/dist/services/subagents/nested-runner.js.map +1 -1
  1049. package/dist/services/subagents/role-loader.d.ts +3 -3
  1050. package/dist/services/subagents/role-loader.d.ts.map +1 -1
  1051. package/dist/services/subagents/role-loader.js +6 -7
  1052. package/dist/services/subagents/role-loader.js.map +1 -1
  1053. package/dist/services/subagents/runtime.d.ts +10 -0
  1054. package/dist/services/subagents/runtime.d.ts.map +1 -1
  1055. package/dist/services/subagents/runtime.js +15 -1
  1056. package/dist/services/subagents/runtime.js.map +1 -1
  1057. package/dist/services/subagents/subagent-async-registry.d.ts +21 -2
  1058. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  1059. package/dist/services/subagents/subagent-async-registry.js +193 -13
  1060. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  1061. package/dist/services/subagents/subagent-client-types.d.ts +2 -0
  1062. package/dist/services/subagents/subagent-client-types.d.ts.map +1 -1
  1063. package/dist/services/subagents/subagent-manager.d.ts +26 -7
  1064. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  1065. package/dist/services/subagents/subagent-manager.js +31 -1
  1066. package/dist/services/subagents/subagent-manager.js.map +1 -1
  1067. package/dist/services/subagents/subagent-notification-store.d.ts +91 -6
  1068. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  1069. package/dist/services/subagents/subagent-notification-store.js +140 -10
  1070. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  1071. package/dist/services/subagents/subagent-session.d.ts +12 -7
  1072. package/dist/services/subagents/subagent-session.d.ts.map +1 -1
  1073. package/dist/services/subagents/subagent-session.js +13 -14
  1074. package/dist/services/subagents/subagent-session.js.map +1 -1
  1075. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +4 -5
  1076. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
  1077. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +72 -70
  1078. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
  1079. package/dist/services/subagents/tool-policy.d.ts +21 -17
  1080. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  1081. package/dist/services/subagents/tool-policy.js +100 -60
  1082. package/dist/services/subagents/tool-policy.js.map +1 -1
  1083. package/dist/services/subagents/types.d.ts +37 -3
  1084. package/dist/services/subagents/types.d.ts.map +1 -1
  1085. package/dist/services/subagents/types.js +2 -2
  1086. package/dist/services/subagents/types.js.map +1 -1
  1087. package/dist/services/subagents/utils.d.ts +8 -1
  1088. package/dist/services/subagents/utils.d.ts.map +1 -1
  1089. package/dist/services/subagents/utils.js +46 -16
  1090. package/dist/services/subagents/utils.js.map +1 -1
  1091. package/dist/services/subagents/worker-worktree.d.ts +25 -0
  1092. package/dist/services/subagents/worker-worktree.d.ts.map +1 -0
  1093. package/dist/services/subagents/worker-worktree.js +74 -0
  1094. package/dist/services/subagents/worker-worktree.js.map +1 -0
  1095. package/dist/services/test-helpers/mock-stream.d.ts +3 -0
  1096. package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
  1097. package/dist/services/test-helpers/mock-stream.js +8 -0
  1098. package/dist/services/test-helpers/mock-stream.js.map +1 -1
  1099. package/dist/services/tool-execution-ledger.d.ts +2 -0
  1100. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  1101. package/dist/services/tool-execution-ledger.js +59 -81
  1102. package/dist/services/tool-execution-ledger.js.map +1 -1
  1103. package/dist/services/workspace/active-workspace-root.d.ts +5 -0
  1104. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -0
  1105. package/dist/services/workspace/active-workspace-root.js +24 -0
  1106. package/dist/services/workspace/active-workspace-root.js.map +1 -0
  1107. package/dist/services/workspace/parse-worktree-list.d.ts +24 -0
  1108. package/dist/services/workspace/parse-worktree-list.d.ts.map +1 -0
  1109. package/dist/services/workspace/parse-worktree-list.js +59 -0
  1110. package/dist/services/workspace/parse-worktree-list.js.map +1 -0
  1111. package/dist/services/workspace/worktree-inventory.d.ts +10 -0
  1112. package/dist/services/workspace/worktree-inventory.d.ts.map +1 -0
  1113. package/dist/services/workspace/worktree-inventory.js +28 -0
  1114. package/dist/services/workspace/worktree-inventory.js.map +1 -0
  1115. package/dist/services/workspace/worktree-transition.d.ts +85 -0
  1116. package/dist/services/workspace/worktree-transition.d.ts.map +1 -0
  1117. package/dist/services/workspace/worktree-transition.js +70 -0
  1118. package/dist/services/workspace/worktree-transition.js.map +1 -0
  1119. package/dist/test-helpers/conversation-session-with-adapter.d.ts +1 -1
  1120. package/dist/test-helpers/conversation-session-with-adapter.d.ts.map +1 -1
  1121. package/dist/test-helpers/conversation-session-with-adapter.js +5 -1
  1122. package/dist/test-helpers/conversation-session-with-adapter.js.map +1 -1
  1123. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  1124. package/dist/test-helpers/ink-testing.js +2 -1
  1125. package/dist/test-helpers/ink-testing.js.map +1 -1
  1126. package/dist/tools/agent/activate-skill.d.ts +6 -1
  1127. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  1128. package/dist/tools/agent/activate-skill.js.map +1 -1
  1129. package/dist/tools/agent/ask-mentor.d.ts +1 -1
  1130. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  1131. package/dist/tools/agent/ask-mentor.js.map +1 -1
  1132. package/dist/tools/agent/ask-orchestrator.d.ts +1 -1
  1133. package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -1
  1134. package/dist/tools/agent/ask-user-constants.d.ts +6 -0
  1135. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  1136. package/dist/tools/agent/ask-user-constants.js +6 -0
  1137. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  1138. package/dist/tools/agent/run-subagent-async.d.ts +6 -6
  1139. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  1140. package/dist/tools/agent/run-subagent-async.js +34 -55
  1141. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  1142. package/dist/tools/agent/run-subagent.d.ts +30 -14
  1143. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  1144. package/dist/tools/agent/run-subagent.js +191 -68
  1145. package/dist/tools/agent/run-subagent.js.map +1 -1
  1146. package/dist/tools/file/apply-patch.d.ts +3 -1
  1147. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  1148. package/dist/tools/file/apply-patch.js +34 -10
  1149. package/dist/tools/file/apply-patch.js.map +1 -1
  1150. package/dist/tools/file/code-context.d.ts +2 -2
  1151. package/dist/tools/file/code-context.d.ts.map +1 -1
  1152. package/dist/tools/file/code-context.js +1 -1
  1153. package/dist/tools/file/code-context.js.map +1 -1
  1154. package/dist/tools/file/create-file.d.ts +4 -2
  1155. package/dist/tools/file/create-file.d.ts.map +1 -1
  1156. package/dist/tools/file/create-file.js +10 -7
  1157. package/dist/tools/file/create-file.js.map +1 -1
  1158. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  1159. package/dist/tools/file/edit-healing.js +54 -35
  1160. package/dist/tools/file/edit-healing.js.map +1 -1
  1161. package/dist/tools/file/glob-target.d.ts +12 -0
  1162. package/dist/tools/file/glob-target.d.ts.map +1 -0
  1163. package/dist/tools/file/glob-target.js +22 -0
  1164. package/dist/tools/file/glob-target.js.map +1 -0
  1165. package/dist/tools/file/glob.d.ts +9 -2
  1166. package/dist/tools/file/glob.d.ts.map +1 -1
  1167. package/dist/tools/file/glob.js +12 -16
  1168. package/dist/tools/file/glob.js.map +1 -1
  1169. package/dist/tools/file/grep.d.ts +8 -1
  1170. package/dist/tools/file/grep.d.ts.map +1 -1
  1171. package/dist/tools/file/grep.js +60 -4
  1172. package/dist/tools/file/grep.js.map +1 -1
  1173. package/dist/tools/file/read-file.d.ts +7 -1
  1174. package/dist/tools/file/read-file.d.ts.map +1 -1
  1175. package/dist/tools/file/read-file.js +3 -4
  1176. package/dist/tools/file/read-file.js.map +1 -1
  1177. package/dist/tools/file/search-replace.d.ts +5 -3
  1178. package/dist/tools/file/search-replace.d.ts.map +1 -1
  1179. package/dist/tools/file/search-replace.js +29 -19
  1180. package/dist/tools/file/search-replace.js.map +1 -1
  1181. package/dist/tools/format-helpers.d.ts +4 -3
  1182. package/dist/tools/format-helpers.d.ts.map +1 -1
  1183. package/dist/tools/format-helpers.js +16 -17
  1184. package/dist/tools/format-helpers.js.map +1 -1
  1185. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  1186. package/dist/tools/memory/memory-tools.js +61 -49
  1187. package/dist/tools/memory/memory-tools.js.map +1 -1
  1188. package/dist/tools/run-agent-workflow.d.ts +1 -1
  1189. package/dist/tools/run-agent-workflow.d.ts.map +1 -1
  1190. package/dist/tools/system/shell.d.ts +80 -3
  1191. package/dist/tools/system/shell.d.ts.map +1 -1
  1192. package/dist/tools/system/shell.js +657 -152
  1193. package/dist/tools/system/shell.js.map +1 -1
  1194. package/dist/tools/system/worktree.d.ts +22 -0
  1195. package/dist/tools/system/worktree.d.ts.map +1 -0
  1196. package/dist/tools/system/worktree.js +138 -0
  1197. package/dist/tools/system/worktree.js.map +1 -0
  1198. package/dist/tools/types.d.ts +102 -5
  1199. package/dist/tools/types.d.ts.map +1 -1
  1200. package/dist/tools/types.js +4 -1
  1201. package/dist/tools/types.js.map +1 -1
  1202. package/dist/tools/utils.d.ts +18 -0
  1203. package/dist/tools/utils.d.ts.map +1 -1
  1204. package/dist/tools/utils.js +80 -1
  1205. package/dist/tools/utils.js.map +1 -1
  1206. package/dist/tools/web/web-fetch.d.ts +1 -1
  1207. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  1208. package/dist/tools/web/web-fetch.js.map +1 -1
  1209. package/dist/tools/web/web-search.d.ts +1 -1
  1210. package/dist/tools/web/web-search.d.ts.map +1 -1
  1211. package/dist/tools/web/web-search.js.map +1 -1
  1212. package/dist/types/message.d.ts +2 -0
  1213. package/dist/types/message.d.ts.map +1 -1
  1214. package/dist/types/message.js.map +1 -1
  1215. package/dist/utils/ai/model-settings.d.ts.map +1 -1
  1216. package/dist/utils/ai/model-settings.js +0 -6
  1217. package/dist/utils/ai/model-settings.js.map +1 -1
  1218. package/dist/utils/ai/provider-credentials.d.ts +31 -2
  1219. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  1220. package/dist/utils/ai/provider-credentials.js +119 -11
  1221. package/dist/utils/ai/provider-credentials.js.map +1 -1
  1222. package/dist/utils/ai/token-usage.d.ts +10 -5
  1223. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  1224. package/dist/utils/ai/token-usage.js +48 -35
  1225. package/dist/utils/ai/token-usage.js.map +1 -1
  1226. package/dist/utils/apply-diff.d.ts +3 -0
  1227. package/dist/utils/apply-diff.d.ts.map +1 -0
  1228. package/dist/utils/apply-diff.js +192 -0
  1229. package/dist/utils/apply-diff.js.map +1 -0
  1230. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  1231. package/dist/utils/conversation/conversation-event-handler.js +72 -16
  1232. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  1233. package/dist/utils/conversation/conversation-utils.d.ts +5 -0
  1234. package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
  1235. package/dist/utils/conversation/conversation-utils.js +1 -0
  1236. package/dist/utils/conversation/conversation-utils.js.map +1 -1
  1237. package/dist/utils/conversation/message-utils.d.ts +14 -2
  1238. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  1239. package/dist/utils/conversation/message-utils.js +55 -35
  1240. package/dist/utils/conversation/message-utils.js.map +1 -1
  1241. package/dist/utils/conversation/rewind-items.d.ts +32 -0
  1242. package/dist/utils/conversation/rewind-items.d.ts.map +1 -0
  1243. package/dist/utils/conversation/rewind-items.js +33 -0
  1244. package/dist/utils/conversation/rewind-items.js.map +1 -0
  1245. package/dist/utils/copy-selections.d.ts +8 -0
  1246. package/dist/utils/copy-selections.d.ts.map +1 -0
  1247. package/dist/utils/copy-selections.js +42 -0
  1248. package/dist/utils/copy-selections.js.map +1 -0
  1249. package/dist/utils/inject-warning-into-tool-output.d.ts +10 -0
  1250. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  1251. package/dist/utils/inject-warning-into-tool-output.js +17 -0
  1252. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  1253. package/dist/utils/settings-command.d.ts.map +1 -1
  1254. package/dist/utils/settings-command.js +46 -4
  1255. package/dist/utils/settings-command.js.map +1 -1
  1256. package/dist/utils/shell/command-logger.js.map +1 -1
  1257. package/dist/utils/shell/command-safety/find-helpers.d.ts +3 -2
  1258. package/dist/utils/shell/command-safety/find-helpers.d.ts.map +1 -1
  1259. package/dist/utils/shell/command-safety/find-helpers.js +34 -17
  1260. package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
  1261. package/dist/utils/shell/command-safety/handlers/find-handler.d.ts.map +1 -1
  1262. package/dist/utils/shell/command-safety/handlers/find-handler.js +0 -2
  1263. package/dist/utils/shell/command-safety/handlers/find-handler.js.map +1 -1
  1264. package/dist/utils/shell/command-safety/handlers/git-handler.d.ts.map +1 -1
  1265. package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
  1266. package/dist/utils/shell/command-safety/handlers/sed-handler.d.ts.map +1 -1
  1267. package/dist/utils/shell/command-safety/handlers/sed-handler.js +14 -9
  1268. package/dist/utils/shell/command-safety/handlers/sed-handler.js.map +1 -1
  1269. package/dist/utils/shell/command-safety/handlers/types.d.ts +5 -4
  1270. package/dist/utils/shell/command-safety/handlers/types.d.ts.map +1 -1
  1271. package/dist/utils/shell/command-safety/index.d.ts.map +1 -1
  1272. package/dist/utils/shell/command-safety/index.js +212 -88
  1273. package/dist/utils/shell/command-safety/index.js.map +1 -1
  1274. package/dist/utils/shell/command-safety/path-analysis.d.ts.map +1 -1
  1275. package/dist/utils/shell/command-safety/path-analysis.js +5 -1
  1276. package/dist/utils/shell/command-safety/path-analysis.js.map +1 -1
  1277. package/dist/utils/shell/command-safety/utils.d.ts +2 -1
  1278. package/dist/utils/shell/command-safety/utils.d.ts.map +1 -1
  1279. package/dist/utils/shell/command-safety/utils.js +5 -5
  1280. package/dist/utils/shell/command-safety/utils.js.map +1 -1
  1281. package/dist/utils/shell/execute-shell.d.ts +49 -3
  1282. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  1283. package/dist/utils/shell/execute-shell.js +245 -28
  1284. package/dist/utils/shell/execute-shell.js.map +1 -1
  1285. package/dist/utils/shell/sandbox/denied-read-stores.d.ts +1 -8
  1286. package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
  1287. package/dist/utils/shell/sandbox/denied-read-stores.js +1 -8
  1288. package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -1
  1289. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts +36 -6
  1290. package/dist/utils/shell/sandbox/docker-host-control-grants.d.ts.map +1 -1
  1291. package/dist/utils/shell/sandbox/docker-host-control-grants.js +47 -17
  1292. package/dist/utils/shell/sandbox/docker-host-control-grants.js.map +1 -1
  1293. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  1294. package/dist/utils/shell/sandbox/sandbox-env.js +2 -1
  1295. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  1296. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts +21 -0
  1297. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.d.ts.map +1 -0
  1298. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js +66 -0
  1299. package/dist/utils/shell/sandbox/sandbox-network-approval-coordinator.js.map +1 -0
  1300. package/dist/utils/shell/sandbox/sandbox-network-store.d.ts.map +1 -1
  1301. package/dist/utils/shell/sandbox/sandbox-network-store.js +3 -2
  1302. package/dist/utils/shell/sandbox/sandbox-network-store.js.map +1 -1
  1303. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  1304. package/dist/utils/shell/sandbox/sandbox-policy.js +2 -1
  1305. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  1306. package/dist/utils/shell/shell-session.js.map +1 -1
  1307. package/dist/utils/slash-command-dispatch.d.ts +21 -0
  1308. package/dist/utils/slash-command-dispatch.d.ts.map +1 -0
  1309. package/dist/utils/slash-command-dispatch.js +34 -0
  1310. package/dist/utils/slash-command-dispatch.js.map +1 -0
  1311. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  1312. package/dist/utils/streaming/extract-command-messages.js +29 -51
  1313. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  1314. package/dist/utils/value-suggestions.d.ts.map +1 -1
  1315. package/dist/utils/value-suggestions.js +6 -8
  1316. package/dist/utils/value-suggestions.js.map +1 -1
  1317. package/package.json +21 -19
  1318. package/dist/commands/retry-command.d.ts +0 -20
  1319. package/dist/commands/retry-command.d.ts.map +0 -1
  1320. package/dist/commands/retry-command.js +0 -39
  1321. package/dist/commands/retry-command.js.map +0 -1
  1322. package/dist/commands/undo-command.d.ts +0 -15
  1323. package/dist/commands/undo-command.d.ts.map +0 -1
  1324. package/dist/commands/undo-command.js +0 -28
  1325. package/dist/commands/undo-command.js.map +0 -1
  1326. package/dist/components/input/PopupManager.d.ts +0 -88
  1327. package/dist/components/input/PopupManager.d.ts.map +0 -1
  1328. package/dist/components/input/PopupManager.js +0 -21
  1329. package/dist/components/input/PopupManager.js.map +0 -1
  1330. package/dist/components/input/popup-key-navigation.d.ts +0 -18
  1331. package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
  1332. package/dist/components/input/popup-key-navigation.js +0 -16
  1333. package/dist/components/input/popup-key-navigation.js.map +0 -1
  1334. package/dist/components/input/popup-props.d.ts +0 -24
  1335. package/dist/components/input/popup-props.d.ts.map +0 -1
  1336. package/dist/components/input/popup-props.js +0 -72
  1337. package/dist/components/input/popup-props.js.map +0 -1
  1338. package/dist/components/menu/UndoSelectionMenu.d.ts +0 -12
  1339. package/dist/components/menu/UndoSelectionMenu.d.ts.map +0 -1
  1340. package/dist/components/menu/UndoSelectionMenu.js +0 -19
  1341. package/dist/components/menu/UndoSelectionMenu.js.map +0 -1
  1342. package/dist/hooks/use-mode-handlers.d.ts +0 -79
  1343. package/dist/hooks/use-mode-handlers.d.ts.map +0 -1
  1344. package/dist/hooks/use-mode-handlers.js +0 -183
  1345. package/dist/hooks/use-mode-handlers.js.map +0 -1
  1346. package/dist/hooks/use-pending-turn-guards.d.ts +0 -43
  1347. package/dist/hooks/use-pending-turn-guards.d.ts.map +0 -1
  1348. package/dist/hooks/use-pending-turn-guards.js +0 -120
  1349. package/dist/hooks/use-pending-turn-guards.js.map +0 -1
  1350. package/dist/hooks/use-trigger-detection.d.ts +0 -49
  1351. package/dist/hooks/use-trigger-detection.d.ts.map +0 -1
  1352. package/dist/hooks/use-trigger-detection.js +0 -104
  1353. package/dist/hooks/use-trigger-detection.js.map +0 -1
  1354. package/dist/hooks/use-undo-selection.d.ts +0 -23
  1355. package/dist/hooks/use-undo-selection.d.ts.map +0 -1
  1356. package/dist/hooks/use-undo-selection.js.map +0 -1
  1357. package/dist/lib/agent-run-orchestrator.d.ts +0 -38
  1358. package/dist/lib/agent-run-orchestrator.d.ts.map +0 -1
  1359. package/dist/lib/agent-run-orchestrator.js +0 -266
  1360. package/dist/lib/agent-run-orchestrator.js.map +0 -1
  1361. package/dist/lib/retry-executor.d.ts +0 -16
  1362. package/dist/lib/retry-executor.d.ts.map +0 -1
  1363. package/dist/lib/retry-executor.js +0 -53
  1364. package/dist/lib/retry-executor.js.map +0 -1
  1365. package/dist/lib/runner-manager.d.ts +0 -22
  1366. package/dist/lib/runner-manager.d.ts.map +0 -1
  1367. package/dist/lib/runner-manager.js +0 -56
  1368. package/dist/lib/runner-manager.js.map +0 -1
  1369. package/dist/prompts/shell-sandbox.md +0 -18
  1370. package/dist/prompts/simple.md +0 -53
  1371. package/dist/prompts/simple_prev.md +0 -33
  1372. package/dist/prompts/simple_v2.md +0 -84
  1373. package/dist/prompts/simple_v3.md +0 -267
  1374. package/dist/prompts/subagents/researcher.md +0 -46
  1375. package/dist/providers/ai-sdk-agents-adapter.d.ts +0 -7
  1376. package/dist/providers/ai-sdk-agents-adapter.d.ts.map +0 -1
  1377. package/dist/providers/ai-sdk-agents-adapter.js +0 -80
  1378. package/dist/providers/ai-sdk-agents-adapter.js.map +0 -1
  1379. package/dist/providers/fallback-responses-model.d.ts +0 -46
  1380. package/dist/providers/fallback-responses-model.d.ts.map +0 -1
  1381. package/dist/providers/fallback-responses-model.js +0 -296
  1382. package/dist/providers/fallback-responses-model.js.map +0 -1
  1383. package/dist/services/stream-event-parsing.d.ts +0 -4
  1384. package/dist/services/stream-event-parsing.d.ts.map +0 -1
  1385. package/dist/services/stream-event-parsing.js +0 -79
  1386. package/dist/services/stream-event-parsing.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import { describeError, isAbortLikeError } from '../../utils/error-helpers.js';
2
- import { ASK_USER_DECLINE_RESULT } from '../../tools/agent/ask-user-constants.js';
3
2
  import { createMessageIdFactory } from '../../utils/message-id-factory.js';
4
- import { isUserMessage } from '../../types/message.js';
3
+ import { isCommandMessage, isUserMessage } from '../../types/message.js';
5
4
  import { isDeniedReadApproveAnswer } from '../../contracts/conversation.js';
6
5
  import { createStreamingSession } from '../../utils/streaming/streaming-session-factory.js';
7
6
  import { enhanceApiKeyError, isMaxTurnsError } from '../../utils/conversation/conversation-utils.js';
8
7
  import { clearStreamingBotMessage, computeNextMessages } from '../../utils/conversation/apply-conversation-result.js';
9
- import { countUndoableUserTurnsFrom, findLastUndoableUserMessage, trimTrailingAssistantMessages, } from '../../utils/conversation/message-utils.js';
8
+ import { trimTrailingAssistantMessages } from '../../utils/conversation/message-utils.js';
9
+ import { ASK_USER_NO_ANSWER_RESULT } from '../../tools/agent/ask-user-constants.js';
10
10
  import { annotateApprovedCommandMessage, filterPendingCommandMessagesForApproval, } from '../approval/approval-presentation-policy.js';
11
11
  import { formatUserTurnForDisplay, hasUserTurnContent, injectSkillIntoTurn, normalizeUserTurn, } from '../../types/user-turn.js';
12
12
  const REASONING_RESPONSE_THROTTLE_MS = 200;
@@ -18,6 +18,9 @@ const REASONING_RESPONSE_THROTTLE_MS = 200;
18
18
  function formatBackgroundSubagentNotifications(notifications) {
19
19
  const completions = notifications.filter((notification) => notification.kind === 'completion');
20
20
  const questions = notifications.filter((notification) => notification.kind === 'question');
21
+ const shellCompletions = notifications.filter((notification) => notification.kind === 'shell_completion');
22
+ const shellOutputs = notifications.filter((notification) => notification.kind === 'shell_output');
23
+ const userControls = notifications.filter((notification) => notification.kind === 'user_control');
21
24
  const sections = [];
22
25
  if (completions.length > 0) {
23
26
  const noun = completions.length === 1 ? 'run' : 'runs';
@@ -25,7 +28,11 @@ function formatBackgroundSubagentNotifications(notifications) {
25
28
  const lines = [
26
29
  `- runId: ${notification.runId} | role: ${notification.role} | status: ${notification.status}`,
27
30
  ...(notification.error ? [` error: ${notification.error}`] : []),
28
- ...(notification.preview ? [` preview: ${notification.preview}`] : []),
31
+ ' result:',
32
+ notification.formattedResult
33
+ .split('\n')
34
+ .map((line) => ` ${line}`)
35
+ .join('\n'),
29
36
  ];
30
37
  return lines.join('\n');
31
38
  });
@@ -34,7 +41,7 @@ function formatBackgroundSubagentNotifications(notifications) {
34
41
  '',
35
42
  ...entries,
36
43
  '',
37
- 'Call get_subagent_result(runId) for the full report. Assess it against the task before you accept it, then continue through the next necessary steps yourself rather than stopping at the fact that a run finished. Tell the user concisely, in your own words, what you concluded — the report is input to your judgement, not a message to relay.',
44
+ 'The full result is inlined above; you do not need to call get_subagent_result. Assess it against the task before you accept it, then continue through the next necessary steps yourself rather than stopping at the fact that a run finished. Tell the user concisely, in your own words, what you concluded — the report is input to your judgement, not a message to relay.',
38
45
  ].join('\n'));
39
46
  }
40
47
  if (questions.length > 0) {
@@ -53,6 +60,74 @@ function formatBackgroundSubagentNotifications(notifications) {
53
60
  'Decide the answer, investigate it yourself, or escalate to the user if needed. To answer a specific waiting subagent, call send_message({ target, reply_to: messageId, message }). The subagent has no direct user channel; an answer resumes only its waiting tool call.',
54
61
  ].join('\n'));
55
62
  }
63
+ if (shellCompletions.length > 0) {
64
+ const noun = shellCompletions.length === 1 ? 'job' : 'jobs';
65
+ const entries = shellCompletions.map((notification) => [
66
+ `- jobId: ${notification.jobId} | command: ${notification.command} | status: ${notification.status}`,
67
+ ...(notification.error ? [` error: ${notification.error}`] : []),
68
+ ' output:',
69
+ notification.output
70
+ .split('\n')
71
+ .map((line) => ` ${line}`)
72
+ .join('\n'),
73
+ ].join('\n'));
74
+ sections.push([
75
+ `Background shell ${noun} finished (${shellCompletions.length}). This is an automatic system notification, not a user message.`,
76
+ '',
77
+ ...entries,
78
+ '',
79
+ 'Assess the command result against the task and continue through the next necessary steps. Tell the user concisely, in your own words, what you concluded.',
80
+ ].join('\n'));
81
+ }
82
+ if (shellOutputs.length > 0) {
83
+ const noun = shellOutputs.length === 1 ? 'watch' : 'watches';
84
+ const entries = shellOutputs.map((notification) => [
85
+ `- jobId: ${notification.jobId} | command: ${notification.command} | watchId: ${notification.watchId} | seq: ${notification.seq}`,
86
+ ...(notification.droppedBytes !== undefined ? [` droppedBytes: ${notification.droppedBytes}`] : []),
87
+ ' matchedLines:',
88
+ notification.matchedLines
89
+ .split('\n')
90
+ .map((line) => ` ${line}`)
91
+ .join('\n'),
92
+ ].join('\n'));
93
+ sections.push([
94
+ `Background shell ${noun} matched output (${shellOutputs.length}). This is an automatic system notification, not a user message.`,
95
+ '',
96
+ ...entries,
97
+ '',
98
+ 'Assess whether the matched output changes what you should do next and continue through the next necessary steps yourself, telling the user concisely, in your own words, what you concluded.',
99
+ ].join('\n'));
100
+ }
101
+ if (userControls.length > 0) {
102
+ const stopControls = userControls.filter((notification) => notification.action === 'stop');
103
+ const backgroundMoves = userControls.filter((notification) => notification.action === 'background');
104
+ const entriesFor = (notifications, verb) => notifications.map((notification) => {
105
+ const details = notification.details;
106
+ return details.kind === 'subagent'
107
+ ? `- ${verb} background subagent ${details.name ?? details.id} | runId: ${details.id} | role: ${details.role} | task: ${details.task}`
108
+ : `- ${verb} background shell | jobId: ${details.id} | command: ${details.command}`;
109
+ });
110
+ if (stopControls.length > 0) {
111
+ sections.push([
112
+ `The user requested that ${stopControls.length === 1 ? 'a background task be stopped' : 'background tasks be stopped'}. This is an automatic user control notification, not a user message.`,
113
+ '',
114
+ ...entriesFor(stopControls, 'stop requested for'),
115
+ '',
116
+ 'Plan the next step around the requested stop. The task may settle later with a cancelled completion notification; do not assume its result is available yet.',
117
+ ].join('\n'));
118
+ }
119
+ if (backgroundMoves.length > 0) {
120
+ sections.push([
121
+ `The user moved ${backgroundMoves.length === 1
122
+ ? 'a foreground shell into the background'
123
+ : 'foreground shells into the background'}. This is an automatic user control notification, not a user message.`,
124
+ '',
125
+ ...entriesFor(backgroundMoves, 'moved to'),
126
+ '',
127
+ 'The same execution continues running in the background. Plan the next step without waiting for it, and do not stop or relaunch it unless the task now requires that.',
128
+ ].join('\n'));
129
+ }
130
+ }
56
131
  return sections.join('\n\n');
57
132
  }
58
133
  /** The user-facing companion to the model-only background notification instruction. */
@@ -66,6 +141,31 @@ function formatBackgroundSubagentNotificationDisplay(notifications) {
66
141
  `question: ${notification.question}`,
67
142
  ].join('\n');
68
143
  }
144
+ if (notification.kind === 'shell_completion') {
145
+ return [
146
+ `- jobId: ${notification.jobId} | command: ${notification.command} | status: ${notification.status}`,
147
+ ...(notification.error ? [` error: ${notification.error}`] : []),
148
+ ...(notification.output ? [` output: ${notification.output}`] : []),
149
+ ].join('\n');
150
+ }
151
+ if (notification.kind === 'shell_output') {
152
+ return [
153
+ `- jobId: ${notification.jobId} | command: ${notification.command} | watchId: ${notification.watchId} | seq: ${notification.seq}`,
154
+ ...(notification.droppedBytes !== undefined ? [` droppedBytes: ${notification.droppedBytes}`] : []),
155
+ ...(notification.matchedLines ? [` matchedLines: ${notification.matchedLines}`] : []),
156
+ ].join('\n');
157
+ }
158
+ if (notification.kind === 'user_control') {
159
+ const details = notification.details;
160
+ if (notification.action === 'background') {
161
+ return details.kind === 'subagent'
162
+ ? `Moved to background: ${details.name ?? details.id} (${details.role})`
163
+ : `Moved to background: shell ${details.command}`;
164
+ }
165
+ return details.kind === 'subagent'
166
+ ? `Stop requested: background ${details.name ?? details.id} (${details.role})`
167
+ : `Stop requested: shell ${details.command}`;
168
+ }
69
169
  const lines = [
70
170
  `- runId: ${notification.runId} | role: ${notification.role} | status: ${notification.status}`,
71
171
  ...(notification.error ? [` error: ${notification.error}`] : []),
@@ -77,9 +177,6 @@ function formatBackgroundSubagentNotificationDisplay(notifications) {
77
177
  }
78
178
  export class ConversationOrchestrator {
79
179
  config;
80
- pendingApproval = null;
81
- askUserAnswers = [];
82
- currentAskUserQuestionIndex = 0;
83
180
  createMessageId;
84
181
  #directlyAppendedMessageIds = new Set();
85
182
  #displayedBackgroundNotificationMessageIds = new Set();
@@ -89,6 +186,14 @@ export class ConversationOrchestrator {
89
186
  * them — remove/discard/reject must not require a matching `#endTurn`.
90
187
  */
91
188
  #deferredTurnActivators = new Map();
189
+ /**
190
+ * A pending steer retracted through the id-addressed mutation path. The
191
+ * adapter intentionally keeps the shared steer API boolean, so this marker
192
+ * distinguishes a deliberate retraction from an ordinary failed steer.
193
+ */
194
+ #retractedSteerIds = new Set();
195
+ /** Latest user turn for a pending steer edited before admission. */
196
+ #editedSteerTurns = new Map();
92
197
  /**
93
198
  * Turns this orchestrator currently owns. Count only executions that have
94
199
  * actually started (direct submit or queue-start activation), never merely
@@ -97,6 +202,8 @@ export class ConversationOrchestrator {
97
202
  #activeTurns = 0;
98
203
  /** True while {@link stopProcessing} is tearing the conversation down. */
99
204
  #stoppingByUser = false;
205
+ /** Stranded rows already reported, so the warning stays one per occurrence. */
206
+ #reportedStrandedCallIds = new Set();
100
207
  constructor(config) {
101
208
  this.config = config;
102
209
  this.createMessageId = config.createMessageId ?? createMessageIdFactory(config.now);
@@ -144,17 +251,14 @@ export class ConversationOrchestrator {
144
251
  getSubagentUsage() {
145
252
  return this.config.subagentUsageAccumulator?.get() ?? null;
146
253
  }
254
+ getCostSummary() {
255
+ return this.config.costAccumulator?.getSummary() ?? null;
256
+ }
147
257
  goToPreviousQuestion() {
148
- if (this.currentAskUserQuestionIndex <= 0) {
149
- return;
150
- }
151
- this.currentAskUserQuestionIndex -= 1;
152
- this.askUserAnswers.pop();
153
- this.config.ui.onAskUserGoBack(this.currentAskUserQuestionIndex, this.askUserAnswers.slice());
258
+ this.config.conversationService.goToPreviousPendingInteractionQuestion?.();
154
259
  }
155
260
  goToNextQuestion() {
156
- this.currentAskUserQuestionIndex += 1;
157
- this.config.ui.onAskUserAdvanceToNext(this.currentAskUserQuestionIndex);
261
+ this.config.conversationService.goToNextPendingInteractionQuestion?.();
158
262
  }
159
263
  async clearConversation() {
160
264
  if (this.config.onClear) {
@@ -165,13 +269,16 @@ export class ConversationOrchestrator {
165
269
  }
166
270
  this.config.messages.setMessages(() => []);
167
271
  this.config.approvedContext.current = null;
168
- this.pendingApproval = null;
169
- this.resetAskUserState();
272
+ this.config.conversationService.clearPendingInteraction?.();
170
273
  this.config.ui.onResetAll();
171
274
  this.config.usageAccumulator?.reset();
172
275
  this.config.subagentUsageAccumulator?.reset();
276
+ this.config.costAccumulator?.reset();
173
277
  this.#directlyAppendedMessageIds.clear();
174
278
  this.#displayedBackgroundNotificationMessageIds.clear();
279
+ this.#retractedSteerIds.clear();
280
+ this.#editedSteerTurns.clear();
281
+ this.#reportedStrandedCallIds.clear();
175
282
  }
176
283
  stopProcessing() {
177
284
  // The user asked everything to stop, so background subagent runs go too.
@@ -188,67 +295,68 @@ export class ConversationOrchestrator {
188
295
  ? { ...message, status: 'aborted' }
189
296
  : message));
190
297
  this.config.approvedContext.current = null;
191
- this.pendingApproval = null;
192
- this.resetAskUserState();
298
+ this.config.conversationService.clearPendingInteraction?.();
193
299
  this.config.ui.onResetTransient();
194
300
  this.#directlyAppendedMessageIds.clear();
195
301
  this.#displayedBackgroundNotificationMessageIds.clear();
302
+ this.#retractedSteerIds.clear();
303
+ this.#editedSteerTurns.clear();
196
304
  this.config.conversationService.backgroundSubagentNotifications?.drain();
197
305
  }
198
306
  finally {
199
307
  this.#stoppingByUser = false;
200
308
  }
201
309
  }
202
- undoLastUserMessage() {
203
- const messages = this.config.messages.getMessages();
204
- const lastUserIndex = findLastUndoableUserMessage(messages);
205
- if (lastUserIndex === -1) {
310
+ /**
311
+ * Rewind through an opaque store target. `uiIndex` is used only to trim the
312
+ * rendered projection after the domain operation accepted the same target.
313
+ */
314
+ rewindToTarget(targetId, uiIndex) {
315
+ const restored = this.config.conversationService.rewindToTarget(targetId);
316
+ if (restored === null)
206
317
  return null;
207
- }
208
- const lastUserMessage = messages[lastUserIndex];
209
- const uiText = isUserMessage(lastUserMessage) ? lastUserMessage.text : '';
318
+ // Keep rewind's historical foreground-only cancellation behavior, but do
319
+ // not abort an active turn for a stale picker target that the store rejects.
210
320
  this.config.conversationService.abort();
211
- const removed = this.config.conversationService.undoLastUserTurn();
212
- const restored = removed ?? { text: uiText };
213
- this.config.messages.setMessages((prev) => prev.slice(0, lastUserIndex));
321
+ this.config.messages.setMessages((prev) => prev.slice(0, uiIndex));
214
322
  this.config.approvedContext.current = null;
215
- this.pendingApproval = null;
216
- this.resetAskUserState();
323
+ this.config.conversationService.clearPendingInteraction?.();
217
324
  this.config.ui.onResetTransient();
218
325
  this.#directlyAppendedMessageIds.clear();
219
326
  this.#displayedBackgroundNotificationMessageIds.clear();
220
327
  return restored;
221
328
  }
222
- /**
223
- * Cancel the most recently queued message and return its text so the UI
224
- * can move it back into the input box. Returns null when there are no
225
- * pending queued messages, the service cannot cancel the tail item, or the
226
- * service does not implement cancellation.
227
- */
228
- async removeLastQueuedPendingMessage() {
329
+ async retractPendingSubmission(id) {
229
330
  const service = this.config.conversationService;
230
- if (typeof service.removeLastQueuedItem !== 'function') {
231
- return null;
232
- }
233
- const result = await service.removeLastQueuedItem();
234
- if (!result)
235
- return null;
236
- // The pending indicator above the input box is managed by the UI. The
237
- // adapter already removed the matching internal entry, but the UI state
238
- // is still showing it until we tell it to drop the last entry.
239
- if (this.config.ui.onQueuedMessageRemoved) {
240
- this.config.ui.onQueuedMessageRemoved(result.id);
331
+ if (typeof service.retractSubmission !== 'function')
332
+ return { kind: 'unknown_id' };
333
+ const result = await service.retractSubmission(id);
334
+ if (result.kind === 'applied') {
335
+ if (result.stage === 'pending_steer') {
336
+ this.#retractedSteerIds.add(id);
337
+ this.#editedSteerTurns.delete(id);
338
+ }
339
+ this.config.ui.onQueuedMessageRemoved?.(id);
241
340
  }
242
- else {
243
- this.config.ui.onRemoveLastPendingMessage?.();
341
+ return result;
342
+ }
343
+ async editPendingSubmission(id, turn) {
344
+ const service = this.config.conversationService;
345
+ if (typeof service.editSubmission !== 'function')
346
+ return { kind: 'unknown_id' };
347
+ const result = await service.editSubmission(id, turn);
348
+ if (result.kind === 'applied') {
349
+ if (result.stage === 'pending_steer') {
350
+ this.#editedSteerTurns.set(id, structuredClone(normalizeUserTurn(turn)));
351
+ }
352
+ this.config.ui.onQueuedMessageEdited?.(id, formatUserTurnForDisplay(normalizeUserTurn(turn)));
244
353
  }
245
- return result.text;
354
+ return result;
246
355
  }
247
356
  async retryLastToolOutput() {
248
357
  this.config.conversationService.abort();
249
358
  this.config.approvedContext.current = null;
250
- this.pendingApproval = null;
251
- this.resetAskUserState();
359
+ this.config.conversationService.clearPendingInteraction?.();
252
360
  this.config.ui.onResetTransient();
253
361
  if (!this.config.conversationService.peekLastToolOutput()) {
254
362
  return false;
@@ -275,7 +383,6 @@ export class ConversationOrchestrator {
275
383
  }
276
384
  const errorMessage = enhanceApiKeyError(describeError(error));
277
385
  this.appendBotError(errorMessage);
278
- this.config.ui.onApprovalResolved();
279
386
  return true;
280
387
  }
281
388
  finally {
@@ -285,25 +392,6 @@ export class ConversationOrchestrator {
285
392
  this.#endTurn();
286
393
  }
287
394
  }
288
- undoToUserMessage(uiIndex) {
289
- const messages = this.config.messages.getMessages();
290
- const undoCount = countUndoableUserTurnsFrom(messages, uiIndex);
291
- if (undoCount === 0) {
292
- return null;
293
- }
294
- const selectedMessage = messages[uiIndex];
295
- const uiText = isUserMessage(selectedMessage) ? selectedMessage.text : '';
296
- this.config.conversationService.abort();
297
- const removed = this.config.conversationService.undoNUserTurns(undoCount);
298
- const restored = removed?.text ?? uiText;
299
- this.config.messages.setMessages((prev) => prev.slice(0, uiIndex));
300
- this.config.approvedContext.current = null;
301
- this.pendingApproval = null;
302
- this.resetAskUserState();
303
- this.config.ui.onResetTransient();
304
- this.#directlyAppendedMessageIds.clear();
305
- return restored;
306
- }
307
395
  async sendUserMessage(input, options) {
308
396
  const turn = normalizeUserTurn(input);
309
397
  if (!hasUserTurnContent(turn)) {
@@ -324,12 +412,80 @@ export class ConversationOrchestrator {
324
412
  const queueOwnsSubmission = this.config.conversationService.isQueueOwningSubmissions?.() ??
325
413
  this.config.conversationService.isQueueActive?.() ??
326
414
  false;
415
+ // Logged before the branch below, not inside it. "Steer attempt resolved"
416
+ // only exists on the path that actually tries to steer, so a submission
417
+ // that never enters that path — because it arrived without busyMode
418
+ // 'steer', or because the queue did not claim it — is indistinguishable in
419
+ // the logs from one that was never submitted at all. That gap hid a real
420
+ // report of a steer silently queueing: the queue file held the message and
421
+ // the transcript held the user_message, and nothing recorded the decision
422
+ // in between. These four fields name that decision.
423
+ this.config.loggingService.info('Submission routing decided', {
424
+ busyMode: options?.busyMode ?? 'none',
425
+ queueOwnsSubmission,
426
+ queueStateKind: this.config.conversationService.queueStateKind?.() ?? 'unknown',
427
+ canSteer: Boolean(this.config.conversationService.steerActiveTurn),
428
+ messageId: userMessage.id,
429
+ });
327
430
  if (queueOwnsSubmission) {
328
431
  // A turn is already in flight or the queue is paused with retained work.
329
432
  // Show the message above the input box until the queue actually starts
330
433
  // processing it; the message list will be updated when the queue pops
331
434
  // this turn.
332
435
  this.config.ui.onQueuedMessagePending?.(userMessage.id, userMessage.text);
436
+ // A steer belongs to the turn already running: hand it to that turn so
437
+ // the model reads it at its next request, rather than making the user
438
+ // wait for the whole turn to end. The message joins the transcript at the
439
+ // moment the turn takes it, which is when the model actually sees it.
440
+ if (options?.busyMode === 'steer' && this.config.conversationService.steerActiveTurn) {
441
+ // Diagnostics for "my steer just queued". The three fields below
442
+ // separate the ways delivery can fail, which otherwise look identical
443
+ // in the UI because the queued label is drawn before this even runs:
444
+ // queueActive=false → refused by the adapter's predicate;
445
+ // the queue owns the submission but is not in a state that offers
446
+ // steering (awaiting_preflight, paused, idle with retained work).
447
+ // queueActive=true, waited≈0ms → refused synchronously downstream:
448
+ // awaiting an approval, or no run in flight at the run loop.
449
+ // queueActive=true, waited>0ms → held as pending and released when
450
+ // the run ended: the turn never reached another request boundary.
451
+ // steered=true → admitted; waitedMs is how long the
452
+ // user waited for the turn to reach that boundary.
453
+ const queueActive = this.config.conversationService.isQueueActive?.() ?? false;
454
+ const queueStateKind = this.config.conversationService.queueStateKind?.() ?? 'unknown';
455
+ const steerStartedAt = Date.now();
456
+ const steered = await this.config.conversationService
457
+ .steerActiveTurn(turn, { id: userMessage.id })
458
+ .catch((error) => {
459
+ this.logError('Error steering the active turn', error);
460
+ return false;
461
+ });
462
+ this.config.loggingService.info('Steer attempt resolved', {
463
+ steered,
464
+ queueActive,
465
+ queueStateKind,
466
+ waitedMs: Date.now() - steerStartedAt,
467
+ messageId: userMessage.id,
468
+ });
469
+ if (steered) {
470
+ const admittedTurn = this.#editedSteerTurns.get(userMessage.id) ?? turn;
471
+ this.#editedSteerTurns.delete(userMessage.id);
472
+ const { skill: _originalSkill, ...messageWithoutSkill } = userMessage;
473
+ const admittedMessage = {
474
+ ...messageWithoutSkill,
475
+ text: formatUserTurnForDisplay(admittedTurn),
476
+ ...(admittedTurn.skill ? { skill: admittedTurn.skill } : {}),
477
+ };
478
+ this.config.ui.onQueuedMessageStarted?.(userMessage.id);
479
+ this.config.messages.appendMessages([admittedMessage]);
480
+ this.config.logWriter?.append({ type: 'user_message', message: { ...admittedMessage } });
481
+ return;
482
+ }
483
+ if (this.#retractedSteerIds.delete(userMessage.id)) {
484
+ this.#editedSteerTurns.delete(userMessage.id);
485
+ return;
486
+ }
487
+ this.#editedSteerTurns.delete(userMessage.id);
488
+ }
333
489
  }
334
490
  else {
335
491
  // No turn is in flight — append directly. The queue observer will also
@@ -338,7 +494,7 @@ export class ConversationOrchestrator {
338
494
  this.config.messages.appendMessages([userMessage]);
339
495
  this.#directlyAppendedMessageIds.add(userMessage.id);
340
496
  }
341
- this.config.logWriter?.append({ type: 'user_message', message: userMessage });
497
+ this.config.logWriter?.append({ type: 'user_message', message: { ...userMessage } });
342
498
  // Streaming callbacks are bound at submit time, but deferred submissions
343
499
  // must not count as active turns until the queue starts them. Otherwise
344
500
  // remove/discard would need a matching endTurn for work that never ran.
@@ -360,6 +516,7 @@ export class ConversationOrchestrator {
360
516
  const result = await this.config.conversationService.sendMessage(turnToSend, {
361
517
  onEvent: this.createOnEventHandler(applyConversationEvent),
362
518
  bypassInputSurgeGuard: options?.bypassInputSurgeGuard,
519
+ busyMode: options?.busyMode,
363
520
  preferredMessageId: userMessage.id,
364
521
  });
365
522
  applyConversationEvent({ type: 'final', finalText: '' });
@@ -375,9 +532,12 @@ export class ConversationOrchestrator {
375
532
  this.config.loggingService.debug('Suppressing abort error in sendUserMessage');
376
533
  return;
377
534
  }
378
- // Errors for work that never left the pending queue should not paint a bot
379
- // error into the transcript; the submission simply did not run.
535
+ // A submission that never left the pending queue produced no turn to
536
+ // report on, but it also produced no answer: the pending indicator has
537
+ // just been cleared, so saying nothing would make the user's text vanish
538
+ // without explanation. Report the rejection and hand the text back.
380
539
  if (queueOwnsSubmission && !turnActivated) {
540
+ this.appendBotError(`${enhanceApiKeyError(describeError(error))}\n\nThis message was not sent: ${userMessage.text}`);
381
541
  return;
382
542
  }
383
543
  const rawErrorMessage = describeError(error);
@@ -402,12 +562,11 @@ export class ConversationOrchestrator {
402
562
  rawInterruption: null,
403
563
  isMaxTurnsPrompt: true,
404
564
  };
405
- this.pendingApproval = pendingApproval;
565
+ this.config.conversationService.presentPendingInteraction?.(pendingApproval);
406
566
  this.config.ui.onApprovalRequested(pendingApproval);
407
567
  }
408
568
  else {
409
569
  this.appendBotError(errorMessage);
410
- this.config.ui.onApprovalResolved();
411
570
  }
412
571
  }
413
572
  finally {
@@ -420,56 +579,27 @@ export class ConversationOrchestrator {
420
579
  }
421
580
  }
422
581
  }
423
- async handleApprovalDecision(answer, rejectionReason, approvalAnswer) {
424
- const pendingApproval = this.pendingApproval;
425
- if (!pendingApproval) {
582
+ async handleApprovalDecision(answer, rejectionReason, approvalAnswer, expectedInteractionId, options = {}) {
583
+ const resolution = this.config.conversationService.resolvePendingInteraction?.({
584
+ expectedInteractionId,
585
+ answer,
586
+ rejectionReason,
587
+ approvalAnswer,
588
+ });
589
+ if (!resolution || resolution.kind === 'none' || resolution.kind === 'stale_interaction') {
426
590
  return;
427
591
  }
592
+ if (resolution.kind === 'awaiting_next_question')
593
+ return;
594
+ const pendingApproval = resolution.approval;
428
595
  const isMaxTurnsPrompt = pendingApproval.isMaxTurnsPrompt;
429
- const isAskUser = pendingApproval.toolName === 'ask_user';
430
- if (isAskUser && answer === 'y' && approvalAnswer !== ASK_USER_DECLINE_RESULT) {
431
- let questions = [];
432
- try {
433
- const parsed = JSON.parse(pendingApproval.argumentsText);
434
- questions = parsed.questions || [];
435
- }
436
- catch {
437
- // noop
438
- }
439
- let parsedAns = approvalAnswer ?? '';
440
- const currentQuestion = questions[this.askUserAnswers.length];
441
- if (currentQuestion?.is_multi_select) {
442
- try {
443
- const maybeArray = JSON.parse(approvalAnswer ?? '');
444
- if (Array.isArray(maybeArray)) {
445
- parsedAns = maybeArray;
446
- }
447
- }
448
- catch {
449
- // keep plain string
450
- }
451
- }
452
- const nextAnswers = [...this.askUserAnswers, parsedAns];
453
- this.config.ui.onAskUserAnswerSubmitted(parsedAns);
454
- if (nextAnswers.length < questions.length) {
455
- this.askUserAnswers = nextAnswers;
456
- this.currentAskUserQuestionIndex = nextAnswers.length;
457
- this.config.ui.onAskUserAdvanceToNext(nextAnswers.length);
458
- return;
459
- }
460
- this.askUserAnswers = nextAnswers;
461
- this.currentAskUserQuestionIndex = nextAnswers.length;
462
- approvalAnswer = JSON.stringify(nextAnswers);
463
- }
596
+ this.config.ui.onApprovalResolved();
464
597
  if (answer === 'y' || isDeniedReadApproveAnswer(answer)) {
465
598
  this.config.approvedContext.current = {
466
599
  callId: pendingApproval.callId,
467
600
  toolName: pendingApproval.toolName,
468
601
  };
469
602
  }
470
- this.config.ui.onApprovalResolved();
471
- this.pendingApproval = null;
472
- this.resetAskUserState();
473
603
  if (isMaxTurnsPrompt && answer === 'n') {
474
604
  this.#endTurn();
475
605
  return;
@@ -491,7 +621,6 @@ export class ConversationOrchestrator {
491
621
  }
492
622
  const errorMessage = error instanceof Error ? error.message : String(error);
493
623
  this.appendBotError(errorMessage);
494
- this.config.ui.onApprovalResolved();
495
624
  }
496
625
  finally {
497
626
  reasoningUpdater.flush();
@@ -504,7 +633,8 @@ export class ConversationOrchestrator {
504
633
  try {
505
634
  const result = await this.config.conversationService.handleApprovalDecision(answer, rejectionReason, {
506
635
  onEvent: this.createOnEventHandler(applyConversationEvent),
507
- approvalAnswer,
636
+ approvalAnswer: resolution.approvalAnswer,
637
+ ...(options.stopAfterApprovalResolution ? { stopAfterApprovalResolution: true } : {}),
508
638
  });
509
639
  applyConversationEvent({ type: 'final', finalText: '' });
510
640
  botResponseUpdater.flush();
@@ -518,7 +648,6 @@ export class ConversationOrchestrator {
518
648
  }
519
649
  const errorMessage = error instanceof Error ? error.message : String(error);
520
650
  this.appendBotError(errorMessage);
521
- this.config.ui.onApprovalResolved();
522
651
  }
523
652
  finally {
524
653
  this.config.loggingService.debug('handleApprovalDecision finally block - resetting state');
@@ -527,6 +656,18 @@ export class ConversationOrchestrator {
527
656
  this.#endTurn();
528
657
  }
529
658
  }
659
+ /**
660
+ * Escape on an `ask_user` prompt. The tool still returns
661
+ * {@link ASK_USER_NO_ANSWER_RESULT}, so the question and the fact that it
662
+ * went unanswered are committed to history and travel with the user's next
663
+ * message. The turn then ends instead of handing the model another turn:
664
+ * cancelling means the user speaks next.
665
+ */
666
+ async cancelAskUser(expectedInteractionId) {
667
+ return this.handleApprovalDecision('y', undefined, ASK_USER_NO_ANSWER_RESULT, expectedInteractionId, {
668
+ stopAfterApprovalResolution: true,
669
+ });
670
+ }
530
671
  /** Open a turn this orchestrator owns, and its streaming session. */
531
672
  #beginTurn(label) {
532
673
  this.#activeTurns += 1;
@@ -541,15 +682,186 @@ export class ConversationOrchestrator {
541
682
  #endTurn(flushNotifications = true) {
542
683
  this.#activeTurns = Math.max(0, this.#activeTurns - 1);
543
684
  this.config.ui.onTurnEnd();
685
+ this.#finalizeStrandedCommandMessages();
544
686
  if (flushNotifications) {
545
687
  void this.#deliverBackgroundSubagentNotifications();
546
688
  }
547
689
  }
548
690
  /**
549
- * Hand every settled background subagent run to the main agent as one
550
- * system-initiated turn. Does nothing unless the conversation is idle: a
551
- * running turn or a pending approval owns the agent, and the store keeps the
552
- * notifications until the next terminal state re-attempts delivery.
691
+ * Close command rows that no completion will ever close.
692
+ *
693
+ * A row opens as `running` on `tool_started` and closes only when a command
694
+ * message carrying the same callId arrives. Anything that ends a turn without
695
+ * that message — a stream error, a retry, a tool whose result is never
696
+ * rendered — leaves the row running for the rest of the session. That is not
697
+ * cosmetic: a running command is the first message that cannot render
698
+ * statically, so one stranded row keeps every later message re-rendering
699
+ * outside Ink's Static region.
700
+ *
701
+ * The warning is half the point. A silent net would hide the next tool that
702
+ * strands a row the way the last one hid for fourteen hours.
703
+ */
704
+ #finalizeStrandedCommandMessages() {
705
+ // A turn that parks on an approval closes and reopens around the prompt, so
706
+ // reaching here does not mean the work finished. Anything still running is
707
+ // legitimately in flight until the user decides.
708
+ if (this.#activeTurns > 0)
709
+ return;
710
+ if (this.config.conversationService.getPendingInteractionSnapshot?.())
711
+ return;
712
+ const stranded = this.config.messages
713
+ .getMessages()
714
+ .filter((message) => isCommandMessage(message) && message.status === 'running');
715
+ if (stranded.length === 0)
716
+ return;
717
+ this.config.messages.setMessages((messages) => messages.map((message) => message.sender === 'command' && message.status === 'running'
718
+ ? { ...message, status: 'aborted' }
719
+ : message));
720
+ const unreported = stranded.filter((message) => !this.#reportedStrandedCallIds.has(message.callId ?? message.id));
721
+ if (unreported.length === 0)
722
+ return;
723
+ for (const message of unreported) {
724
+ this.#reportedStrandedCallIds.add(message.callId ?? message.id);
725
+ }
726
+ this.config.loggingService.warn('Command rows left running at turn end; aborting them', {
727
+ tools: unreported.map((message) => message.toolName ?? 'unknown'),
728
+ callIds: unreported.map((message) => message.callId ?? message.id),
729
+ });
730
+ }
731
+ /**
732
+ * Announce settled runs in the transcript, once each.
733
+ *
734
+ * Display is deliberately not tied to the agent receiving them: the user
735
+ * should see a run land the moment it does, whether the report reaches the
736
+ * agent at the next request boundary or waits for a turn of its own.
737
+ */
738
+ #announceBackgroundSubagentNotifications(notifications) {
739
+ const newlyDisplayed = notifications.filter((notification) => !this.#displayedBackgroundNotificationMessageIds.has(notification.messageId));
740
+ if (newlyDisplayed.length === 0)
741
+ return;
742
+ for (const notification of newlyDisplayed) {
743
+ this.#displayedBackgroundNotificationMessageIds.add(notification.messageId);
744
+ }
745
+ const subagentNotifications = newlyDisplayed.filter((notification) => notification.kind === 'completion' || notification.kind === 'question');
746
+ const runs = subagentNotifications
747
+ .filter((notification) => notification.kind === 'completion')
748
+ .map(({ name, role, status, error }) => ({
749
+ ...(name !== undefined ? { name } : {}),
750
+ role,
751
+ status,
752
+ ...(error ? { error } : {}),
753
+ }));
754
+ const shellJobs = newlyDisplayed.filter((notification) => notification.kind === 'shell_completion');
755
+ const shellOutputs = newlyDisplayed.filter((notification) => notification.kind === 'shell_output');
756
+ const userControls = newlyDisplayed.filter((notification) => notification.kind === 'user_control');
757
+ this.config.messages.appendMessages([
758
+ ...(subagentNotifications.length > 0
759
+ ? [
760
+ {
761
+ id: this.createMessageId(),
762
+ sender: 'command',
763
+ status: 'completed',
764
+ command: 'background_subagent_notification',
765
+ output: formatBackgroundSubagentNotificationDisplay(subagentNotifications),
766
+ success: true,
767
+ toolName: 'background_subagent_notification',
768
+ toolArgs: { runs },
769
+ },
770
+ ]
771
+ : []),
772
+ ...(shellJobs.length > 0
773
+ ? [
774
+ {
775
+ id: this.createMessageId(),
776
+ sender: 'command',
777
+ status: 'completed',
778
+ command: 'background_shell_notification',
779
+ output: formatBackgroundSubagentNotificationDisplay(shellJobs),
780
+ success: true,
781
+ toolName: 'background_shell_notification',
782
+ toolArgs: {
783
+ jobs: shellJobs.map(({ jobId, command, status, error }) => ({
784
+ jobId,
785
+ command,
786
+ status,
787
+ ...(error ? { error } : {}),
788
+ })),
789
+ },
790
+ },
791
+ ]
792
+ : []),
793
+ ...(shellOutputs.length > 0
794
+ ? [
795
+ {
796
+ id: this.createMessageId(),
797
+ sender: 'command',
798
+ status: 'completed',
799
+ command: 'background_shell_output_notification',
800
+ output: formatBackgroundSubagentNotificationDisplay(shellOutputs),
801
+ success: true,
802
+ toolName: 'background_shell_output_notification',
803
+ toolArgs: {
804
+ firings: shellOutputs.map(({ jobId, command, watchId, seq, matchedLines, droppedBytes }) => ({
805
+ jobId,
806
+ command,
807
+ watchId,
808
+ seq,
809
+ matchedLines,
810
+ ...(droppedBytes !== undefined ? { droppedBytes } : {}),
811
+ })),
812
+ },
813
+ },
814
+ ]
815
+ : []),
816
+ ...(userControls.length > 0
817
+ ? [
818
+ {
819
+ id: this.createMessageId(),
820
+ sender: 'command',
821
+ status: 'completed',
822
+ command: 'background_task_control_notification',
823
+ output: formatBackgroundSubagentNotificationDisplay(userControls),
824
+ success: true,
825
+ toolName: 'background_task_control_notification',
826
+ toolArgs: {
827
+ actions: userControls.map(({ action, target }) => ({ action, target })),
828
+ },
829
+ },
830
+ ]
831
+ : []),
832
+ ]);
833
+ }
834
+ /**
835
+ * Offer settled runs to the turn already in flight.
836
+ *
837
+ * Taken as one report at that turn's next request boundary. If the turn will
838
+ * not take them they go back to the store unchanged, so the idle path still
839
+ * delivers them and the agent never sees the same run twice.
840
+ */
841
+ async #injectBackgroundSubagentNotifications(pending) {
842
+ if (!this.config.conversationService.injectIntoActiveTurn)
843
+ return;
844
+ const notifications = pending.drain();
845
+ if (notifications.length === 0)
846
+ return;
847
+ this.#announceBackgroundSubagentNotifications(notifications);
848
+ const injected = await this.config.conversationService
849
+ .injectIntoActiveTurn([
850
+ { type: 'message', role: 'user', content: formatBackgroundSubagentNotifications(notifications) },
851
+ ])
852
+ .catch((error) => {
853
+ this.logError('Error delivering background subagent notifications', error);
854
+ return false;
855
+ });
856
+ if (!injected)
857
+ pending.retain(notifications);
858
+ }
859
+ /**
860
+ * Hand every settled background subagent run to the main agent.
861
+ *
862
+ * The agent that launched these runs is usually still working when they
863
+ * settle, so delivery goes into that turn at its next request boundary. Only
864
+ * when no turn will take them does this open one of its own.
553
865
  */
554
866
  async #deliverBackgroundSubagentNotifications() {
555
867
  const pending = this.config.conversationService.backgroundSubagentNotifications;
@@ -557,31 +869,17 @@ export class ConversationOrchestrator {
557
869
  return;
558
870
  if (this.#stoppingByUser)
559
871
  return;
560
- if (this.#activeTurns > 0 || this.pendingApproval)
872
+ const turnIsRunning = this.#activeTurns > 0 || this.config.conversationService.isQueueActive?.() === true;
873
+ if (turnIsRunning) {
874
+ await this.#injectBackgroundSubagentNotifications(pending);
561
875
  return;
562
- if (this.config.conversationService.isQueueActive?.())
876
+ }
877
+ if (this.config.conversationService.getPendingInteractionSnapshot?.())
563
878
  return;
564
879
  const notifications = pending.drain();
565
880
  if (notifications.length === 0)
566
881
  return;
567
- const newlyDisplayed = notifications.filter((notification) => !this.#displayedBackgroundNotificationMessageIds.has(notification.messageId));
568
- if (newlyDisplayed.length > 0) {
569
- for (const notification of newlyDisplayed) {
570
- this.#displayedBackgroundNotificationMessageIds.add(notification.messageId);
571
- }
572
- this.config.messages.appendMessages([
573
- {
574
- id: this.createMessageId(),
575
- sender: 'command',
576
- status: 'completed',
577
- command: 'background_subagent_notification',
578
- output: formatBackgroundSubagentNotificationDisplay(newlyDisplayed),
579
- success: true,
580
- toolName: 'background_subagent_notification',
581
- toolArgs: { count: newlyDisplayed.length },
582
- },
583
- ]);
584
- }
882
+ this.#announceBackgroundSubagentNotifications(notifications);
585
883
  const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = this.#beginTurn('backgroundSubagentNotification');
586
884
  let delivered = false;
587
885
  try {
@@ -603,7 +901,6 @@ export class ConversationOrchestrator {
603
901
  return;
604
902
  }
605
903
  this.appendBotError(enhanceApiKeyError(describeError(error)));
606
- this.config.ui.onApprovalResolved();
607
904
  }
608
905
  finally {
609
906
  reasoningUpdater.flush();
@@ -631,11 +928,11 @@ export class ConversationOrchestrator {
631
928
  }
632
929
  createOnEventHandler(baseOnEvent) {
633
930
  return (event) => {
634
- const eventType = typeof event?.type === 'string' ? event.type : undefined;
931
+ const eventType = event.type;
635
932
  if (eventType === 'reasoning_delta') {
636
933
  this.config.ui.onStreamingThinkingStarted((this.config.now ?? Date.now)());
637
934
  }
638
- else if (eventType && this.clearsThinkingIndicator(eventType)) {
935
+ else if (this.clearsThinkingIndicator(eventType)) {
639
936
  this.config.ui.onStreamingThinkingCleared();
640
937
  }
641
938
  if (eventType === 'tool_call_streaming_delta') {
@@ -644,7 +941,7 @@ export class ConversationOrchestrator {
644
941
  else if (eventType === 'tool_started' || eventType === 'text_delta' || eventType === 'final') {
645
942
  this.config.ui.onStreamingToolInfo(null);
646
943
  }
647
- if (event?.type === 'user_message_consumed_for_abort') {
944
+ if (eventType === 'user_message_consumed_for_abort') {
648
945
  this.config.messages.setMessages((prev) => {
649
946
  for (let i = prev.length - 1; i >= 0; i--) {
650
947
  const msg = prev[i];
@@ -661,11 +958,29 @@ export class ConversationOrchestrator {
661
958
  return;
662
959
  }
663
960
  baseOnEvent(event);
664
- if (event?.type === 'subagent_completed' && event?.result?.usage) {
665
- this.config.subagentUsageAccumulator?.add(event.result.usage);
961
+ if (eventType === 'cost_update') {
962
+ // Per-request cost records arrive live during the run; the terminal
963
+ // result re-delivers the same records and the accumulator dedups them
964
+ // by request id, so adding here is idempotent.
965
+ this.config.costAccumulator?.addRecord(event.record);
966
+ this.emitCostSummary();
967
+ return;
968
+ }
969
+ if (eventType === 'subagent_completed') {
970
+ if (event.result.usage) {
971
+ this.config.subagentUsageAccumulator?.add(event.result.usage);
972
+ }
973
+ this.config.costAccumulator?.addRecords(event.result.costRecords ?? []);
974
+ this.emitCostSummary();
666
975
  }
667
976
  };
668
977
  }
978
+ /** Push the accumulator's current summary to the UI after any cost add. */
979
+ emitCostSummary() {
980
+ const summary = this.config.costAccumulator?.getSummary();
981
+ if (summary)
982
+ this.config.ui.onCostUpdate?.(summary);
983
+ }
669
984
  applyServiceResult(result, streamingState, latestStreamedUsage) {
670
985
  if (!result) {
671
986
  return;
@@ -674,13 +989,11 @@ export class ConversationOrchestrator {
674
989
  if (result.usage) {
675
990
  this.config.ui.onUsageUpdate(latestStreamedUsage ?? result.usage);
676
991
  }
677
- this.pendingApproval = result.approval;
678
992
  this.config.messages.setMessages((prev) => this.config.messages.trimMessages(filterPendingCommandMessagesForApproval(prev, result.approval)));
679
993
  this.config.ui.onApprovalRequested({ ...result.approval, llmAdvisory: result.approval.llmAdvisory });
680
994
  this.config.notifier?.approvalNeeded();
681
995
  return;
682
996
  }
683
- this.pendingApproval = null;
684
997
  this.config.messages.setMessages((prev) => computeNextMessages({
685
998
  prev,
686
999
  result,
@@ -698,6 +1011,8 @@ export class ConversationOrchestrator {
698
1011
  this.config.usageAccumulator?.add(result.usage);
699
1012
  this.config.ui.onUsageUpdate(latestStreamedUsage ?? result.usage);
700
1013
  }
1014
+ this.config.costAccumulator?.addRecords(result.costRecords ?? []);
1015
+ this.emitCostSummary();
701
1016
  }
702
1017
  /**
703
1018
  * Append a previously-queued user message into the message list. Called by
@@ -752,10 +1067,6 @@ export class ConversationOrchestrator {
752
1067
  eventType === 'tool_call_streaming_delta' ||
753
1068
  eventType === 'final');
754
1069
  }
755
- resetAskUserState() {
756
- this.askUserAnswers = [];
757
- this.currentAskUserQuestionIndex = 0;
758
- }
759
1070
  appendBotError(errorMessage) {
760
1071
  const botErrorMessage = {
761
1072
  id: this.createMessageId(),