@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
@@ -8,17 +8,17 @@ import { logValidationError as logValidationErrorUtil } from '../../utils/shell/
8
8
  import { executeShellCommand } from '../../utils/shell/execute-shell.js';
9
9
  import { setTrimConfig, getTrimConfig, DEFAULT_TRIM_CONFIG, } from '../../utils/output/output-trim.js';
10
10
  import { formatShellExecutionOutput } from '../../utils/shell/shell-output.js';
11
- import { coerceToText, getOutputText, normalizeToolArguments, createBaseMessage, getCallIdFromItem, } from '../format-helpers.js';
11
+ import { coerceToText, getOutputText, normalizeToolArguments, createBaseMessage, getCallIdFromItem, safeJsonParse, } from '../format-helpers.js';
12
12
  import { ensureRtkInstalled, isRtkSupportedCommand, wrapWithRtk } from '../../services/rtk-service.js';
13
13
  import { shouldPreferPatchEditingModel } from '../../lib/tool-selection-policy.js';
14
+ import { HarnessInvariantError } from '../../lib/harness-invariant-error.js';
14
15
  import { createSandboxEnvironment } from '../../utils/shell/sandbox/sandbox-env.js';
15
16
  import { SANDBOX_ESCAPE_INSTRUCTION, createSandboxRuntimeConfig, } from '../../utils/shell/sandbox/sandbox-policy.js';
16
17
  import { getDefaultShellSandboxRunner } from '../../utils/shell/sandbox/shell-sandbox-runner.js';
17
18
  import { DETAILED_DENIED_READ_INSTRUCTION } from '../../utils/shell/sandbox/denied-read-detector.js';
18
- import { deniedReadStore, executionOverrideStore, getProjectAllowReadStore, } from '../../utils/shell/sandbox/denied-read-stores.js';
19
+ import { getProjectAllowReadStore } from '../../utils/shell/sandbox/denied-read-stores.js';
19
20
  import { classifySandboxFailure } from '../../utils/shell/sandbox/sandbox-failure-classifier.js';
20
21
  import { createDockerHostControl, DOCKER_HOST_CONTROL_RETRY_INSTRUCTION, } from '../../utils/shell/sandbox/docker-host-control.js';
21
- import { configureDockerHostControlGrants, consumeDockerHostControlDenial, consumeDockerHostControlOnce, recordDockerHostControlDenial, requiresDockerHostControlApproval, hasDockerHostControlProject, hasDockerHostControlSession, } from '../../utils/shell/sandbox/docker-host-control-grants.js';
22
22
  const shellSandboxModeSchema = z.enum(['default', 'unsandboxed']).optional().default('default');
23
23
  const shellParametersSchema = z.object({
24
24
  command: z.string().min(1).describe('Single shell command to execute.'),
@@ -26,16 +26,300 @@ const shellParametersSchema = z.object({
26
26
  .int()
27
27
  .positive()
28
28
  .optional()
29
- .describe('Optional timeout in milliseconds for each command. Defaults to 120000 ms (2 minutes) if not specified.'),
29
+ .describe('Optional timeout in milliseconds for each command. Defaults to shell.timeout (foreground) or shell.backgroundTimeout (background) if not specified.'),
30
30
  max_output_length: relaxedNumber
31
31
  .int()
32
32
  .positive()
33
33
  .optional()
34
34
  .describe('Optional maximum output length in characters for each command. Outputs exceeding this length will be trimmed. Defaults to 40000 characters if not specified.'),
35
35
  sandbox: shellSandboxModeSchema.describe('Run mode. default runs inside the sandbox when available. unsandboxed requires explicit user approval.'),
36
+ background: z
37
+ .boolean()
38
+ .optional()
39
+ .default(false)
40
+ .describe('Run locally in the background and return a job ID immediately. Defaults to false.'),
36
41
  });
37
42
  // Re-export trim utilities for backwards compatibility
38
43
  export { setTrimConfig, getTrimConfig, DEFAULT_TRIM_CONFIG };
44
+ const getBackgroundShellJobParameters = z.object({
45
+ job_id: z.string().min(1).describe('The background shell job ID.'),
46
+ });
47
+ const monitorShellJobParameters = z.object({
48
+ job_id: z.string().min(1).describe('The background shell job ID to monitor.'),
49
+ pattern: z
50
+ .string()
51
+ .optional()
52
+ .describe('Regular expression matched against each complete output line; absent matches any line.'),
53
+ stream: z.enum(['stdout', 'stderr', 'both']).optional().describe('Which output stream to monitor. Defaults to both.'),
54
+ idle_ms: relaxedNumber
55
+ .int()
56
+ .nonnegative()
57
+ .optional()
58
+ .describe('Quiet window in milliseconds that coalesces a burst of matches into one notification. Defaults to 1500.'),
59
+ notify_limit: relaxedNumber
60
+ .int()
61
+ .positive()
62
+ .optional()
63
+ .describe('Maximum number of notifications this watch may deliver before retiring. Defaults to 1 with a pattern, 5 without.'),
64
+ once: z.boolean().optional().describe('Retire the watch after its first notification (notify_limit 1).'),
65
+ });
66
+ const cancelShellMonitorParameters = z.object({
67
+ watch_id: z.string().min(1).describe('The watch ID returned by monitor_shell_job.'),
68
+ });
69
+ function backgroundShellJobResponse(job) {
70
+ return {
71
+ jobId: job.id,
72
+ command: job.command,
73
+ status: job.status,
74
+ ...(job.result === undefined ? {} : { output: job.result.output }),
75
+ ...(job.error === undefined ? {} : { error: job.error }),
76
+ };
77
+ }
78
+ const ACTIVE_JOB_MESSAGE = 'This background shell job is still running. End the current turn and wait for its automatic completion notification; do not poll get_shell_job.';
79
+ function activeBackgroundShellJobResponse(job, output) {
80
+ const tail = output?.store.readTail(job.id);
81
+ if (!tail) {
82
+ // The store has no stream for this job (no monitoring layer, or a job
83
+ // that never went through the shell-tool seam): keep the refusal form.
84
+ return {
85
+ status: 'background_job_active',
86
+ jobId: job.id,
87
+ message: ACTIVE_JOB_MESSAGE,
88
+ };
89
+ }
90
+ return {
91
+ status: 'background_job_active',
92
+ jobId: job.id,
93
+ command: job.command,
94
+ tail: tail.text,
95
+ droppedBytes: tail.droppedBytes,
96
+ message: ACTIVE_JOB_MESSAGE,
97
+ };
98
+ }
99
+ /**
100
+ * Common transcript extraction for the job/monitor control tools: call id,
101
+ * normalized arguments, the parsed tool result, and a string reader.
102
+ */
103
+ function backgroundShellToolTranscript(item, toolCallArgumentsById) {
104
+ const callId = getCallIdFromItem(item);
105
+ const fallbackArgs = callId && toolCallArgumentsById.has(callId) ? toolCallArgumentsById.get(callId) : null;
106
+ const args = normalizeToolArguments(item?.rawItem?.arguments ?? item?.arguments) ?? normalizeToolArguments(fallbackArgs) ?? {};
107
+ const toolName = item?.toolName ?? item?.rawItem?.name ?? 'shell_job';
108
+ const outputText = getOutputText(item);
109
+ const response = safeJsonParse(outputText);
110
+ const readString = (value) => (typeof value === 'string' ? value : '');
111
+ return { callId, args, toolName, outputText, response, readString };
112
+ }
113
+ /**
114
+ * Job control is part of what the model did, so it belongs in the transcript.
115
+ * It also has to be: the UI opens a `running` command row on every
116
+ * `tool_started` and only closes it when a command message arrives for the same
117
+ * callId. A formatter returning `[]` leaves that row running forever, and
118
+ * because a running command is the first thing that cannot render statically,
119
+ * every message behind it stays out of Ink's Static region for the rest of the
120
+ * session.
121
+ */
122
+ export const formatBackgroundShellJobCommandMessage = (item, index, toolCallArgumentsById) => {
123
+ const { args, toolName, outputText, response, readString } = backgroundShellToolTranscript(item, toolCallArgumentsById);
124
+ const jobId = readString(response?.jobId) || readString(args?.job_id);
125
+ const status = readString(response?.status);
126
+ const jobCommand = readString(response?.command);
127
+ const output = (() => {
128
+ if (!response) {
129
+ return outputText || 'No output';
130
+ }
131
+ if (status === 'not_found') {
132
+ return `Job ${jobId} not found.`;
133
+ }
134
+ // The active-job response carries an instruction aimed at the model
135
+ // ("do not poll"), which is noise in the transcript: show the bounded
136
+ // tail and drop accounting instead of the static refusal string.
137
+ if (status === 'background_job_active') {
138
+ const tail = readString(response?.tail);
139
+ const droppedBytes = typeof response?.droppedBytes === 'number' ? response.droppedBytes : 0;
140
+ const body = [tail, droppedBytes > 0 ? `(${droppedBytes} bytes of earlier output dropped)` : '']
141
+ .filter(Boolean)
142
+ .join('\n');
143
+ return body || 'Still running.';
144
+ }
145
+ const header = jobCommand ? `${status} · ${jobCommand}` : status ? `status: ${status}` : '';
146
+ const body = readString(response.output);
147
+ const error = readString(response.error);
148
+ return [header, body, error].filter(Boolean).join('\n') || outputText || 'No output';
149
+ })();
150
+ return [
151
+ createBaseMessage(item, index, 0, false, {
152
+ command: jobId ? `${toolName} ${jobId}` : toolName,
153
+ output,
154
+ success: status !== 'not_found' && !readString(response?.error),
155
+ toolName,
156
+ toolArgs: args,
157
+ }),
158
+ ];
159
+ };
160
+ /**
161
+ * Transcript row for `monitor_shell_job`. Renders the returned watchId and the
162
+ * job it is attached to; a later `background_shell_output` notification carries
163
+ * the seq/matchedLines of each firing.
164
+ */
165
+ export const formatBackgroundShellMonitorCommandMessage = (item, index, toolCallArgumentsById) => {
166
+ const { args, toolName, outputText, response, readString } = backgroundShellToolTranscript(item, toolCallArgumentsById);
167
+ const jobId = readString(response?.jobId) || readString(args?.job_id);
168
+ const watchId = readString(response?.watchId);
169
+ const status = readString(response?.status);
170
+ const output = (() => {
171
+ if (!response) {
172
+ return outputText || 'No output';
173
+ }
174
+ if (status === 'not_found') {
175
+ return `Job ${jobId} not found.`;
176
+ }
177
+ const error = readString(response?.error);
178
+ if (error) {
179
+ return error;
180
+ }
181
+ if (status === 'monitoring') {
182
+ const seq = typeof response?.seq === 'number' ? ` (firing ${response.seq})` : '';
183
+ const matched = readString(response?.matchedLines);
184
+ return [watchId ? `Monitoring job ${jobId} (watch ${watchId}).${seq}` : `Monitoring job ${jobId}.`, matched]
185
+ .filter(Boolean)
186
+ .join('\n');
187
+ }
188
+ return outputText || 'No output';
189
+ })();
190
+ return [
191
+ createBaseMessage(item, index, 0, false, {
192
+ command: watchId ? `${toolName} ${watchId}` : `${toolName} ${jobId}`,
193
+ output,
194
+ success: status === 'monitoring',
195
+ toolName,
196
+ toolArgs: args,
197
+ }),
198
+ ];
199
+ };
200
+ /** Transcript row for `cancel_shell_monitor`. */
201
+ export const formatBackgroundShellCancelMonitorCommandMessage = (item, index, toolCallArgumentsById) => {
202
+ const { args, toolName, outputText, response, readString } = backgroundShellToolTranscript(item, toolCallArgumentsById);
203
+ const watchId = readString(response?.watchId) || readString(args?.watch_id);
204
+ const status = readString(response?.status);
205
+ const output = (() => {
206
+ if (!response) {
207
+ return outputText || 'No output';
208
+ }
209
+ const error = readString(response?.error);
210
+ if (error) {
211
+ return error;
212
+ }
213
+ if (status === 'not_found') {
214
+ return `Watch ${watchId} not found.`;
215
+ }
216
+ if (status === 'cancelled') {
217
+ return `Stopped monitoring (watch ${watchId}).`;
218
+ }
219
+ return outputText || 'No output';
220
+ })();
221
+ return [
222
+ createBaseMessage(item, index, 0, false, {
223
+ command: watchId ? `${toolName} ${watchId}` : toolName,
224
+ output,
225
+ success: status === 'cancelled',
226
+ toolName,
227
+ toolArgs: args,
228
+ }),
229
+ ];
230
+ };
231
+ /**
232
+ * Root composition registers these alongside `shell` when it supplies the
233
+ * session-owned registry. Keeping them here makes the model contract and its
234
+ * shell lifecycle use the same job representation.
235
+ *
236
+ * `output` carries the session-owned store + watch layer; when it is absent
237
+ * (legacy callers), the monitor tools are not registered.
238
+ */
239
+ export function createBackgroundShellJobToolDefinitions(registry, output) {
240
+ const definitions = {
241
+ get: {
242
+ name: 'get_shell_job',
243
+ description: 'Get the non-blocking status and bounded output of a background shell job. Do not use this to poll a running job; completion is delivered automatically.',
244
+ parameters: getBackgroundShellJobParameters,
245
+ needsApproval: () => false,
246
+ execute: ({ job_id }) => {
247
+ const job = registry.get(job_id);
248
+ if (job?.status === 'running' || job?.status === 'cancelling')
249
+ return JSON.stringify(activeBackgroundShellJobResponse(job, output));
250
+ return JSON.stringify(job ? backgroundShellJobResponse(job) : { jobId: job_id, status: 'not_found' });
251
+ },
252
+ formatCommandMessage: formatBackgroundShellJobCommandMessage,
253
+ },
254
+ cancel: {
255
+ name: 'cancel_shell_job',
256
+ description: 'Request cancellation of a running background shell job without waiting for it to exit.',
257
+ parameters: getBackgroundShellJobParameters,
258
+ needsApproval: () => false,
259
+ execute: ({ job_id }) => {
260
+ const job = registry.get(job_id);
261
+ if (!job)
262
+ return JSON.stringify({ jobId: job_id, status: 'not_found' });
263
+ registry.cancel(job_id);
264
+ const current = registry.get(job_id);
265
+ return JSON.stringify(backgroundShellJobResponse(current ?? job));
266
+ },
267
+ formatCommandMessage: formatBackgroundShellJobCommandMessage,
268
+ },
269
+ };
270
+ if (output) {
271
+ definitions.monitor = {
272
+ name: 'monitor_shell_job',
273
+ description: "Attach a watch to a running background shell job. The watch replays the job's retained output, and each time a complete line in the selected stream matches `pattern` (or any line arrives when `pattern` is absent) and the output has been quiet for `idle_ms`, a `shell_output` notification carrying the matched lines is delivered through the conversation; the job keeps running. Returns a watchId; stop the watch with cancel_shell_monitor.",
274
+ parameters: monitorShellJobParameters,
275
+ needsApproval: () => false,
276
+ execute: ({ job_id, pattern, stream, idle_ms, notify_limit, once }) => {
277
+ const job = registry.get(job_id);
278
+ if (!job ||
279
+ output.store.readTail(job_id) === undefined ||
280
+ (job.status !== 'running' && job.status !== 'cancelling')) {
281
+ return JSON.stringify({ jobId: job_id, status: 'not_found' });
282
+ }
283
+ let compiled;
284
+ if (pattern !== undefined) {
285
+ try {
286
+ compiled = new RegExp(pattern);
287
+ }
288
+ catch (error) {
289
+ return JSON.stringify({
290
+ jobId: job_id,
291
+ status: 'error',
292
+ error: `Invalid monitor pattern: ${error instanceof Error ? error.message : String(error)}`,
293
+ });
294
+ }
295
+ }
296
+ const options = {
297
+ jobId: job_id,
298
+ pattern: compiled,
299
+ stream,
300
+ idleMs: idle_ms,
301
+ notifyLimit: once ? 1 : notify_limit,
302
+ command: job.command,
303
+ };
304
+ const watchId = output.watches.registerWatch(options);
305
+ return JSON.stringify({ watchId, jobId: job_id, status: 'monitoring' });
306
+ },
307
+ formatCommandMessage: formatBackgroundShellMonitorCommandMessage,
308
+ };
309
+ definitions.cancelMonitor = {
310
+ name: 'cancel_shell_monitor',
311
+ description: 'Stop a shell monitor watch so it stops delivering shell_output notifications.',
312
+ parameters: cancelShellMonitorParameters,
313
+ needsApproval: () => false,
314
+ execute: ({ watch_id }) => {
315
+ const cancelled = output.watches.cancelWatch(watch_id);
316
+ return JSON.stringify({ watchId: watch_id, status: cancelled ? 'cancelled' : 'not_found' });
317
+ },
318
+ formatCommandMessage: formatBackgroundShellCancelMonitorCommandMessage,
319
+ };
320
+ }
321
+ return definitions;
322
+ }
39
323
  /**
40
324
  * Strip redundant 'cd <path> &&' prefix if it targets the current working directory
41
325
  */
@@ -98,11 +382,12 @@ export const formatShellCommandMessage = (item, index, toolCallArgumentsById) =>
98
382
  if (typeof args === 'string') {
99
383
  return args;
100
384
  }
101
- const directCommand = coerceCommandText(args?.command);
385
+ const argsRecord = args && typeof args === 'object' && !Array.isArray(args) ? args : {};
386
+ const directCommand = coerceCommandText(argsRecord.command);
102
387
  if (directCommand) {
103
388
  return directCommand;
104
389
  }
105
- const commandsValue = args?.commands;
390
+ const commandsValue = argsRecord.commands;
106
391
  if (typeof commandsValue === 'string') {
107
392
  return commandsValue;
108
393
  }
@@ -122,6 +407,23 @@ export const formatShellCommandMessage = (item, index, toolCallArgumentsById) =>
122
407
  return 'Unknown command';
123
408
  })();
124
409
  const outputText = getOutputText(item);
410
+ const backgroundRequested = args !== null && typeof args === 'object' && !Array.isArray(args) && args.background === true;
411
+ const launchAcknowledgement = backgroundRequested
412
+ ? safeJsonParse(outputText)
413
+ : null;
414
+ if (launchAcknowledgement?.status === 'running' &&
415
+ typeof launchAcknowledgement.jobId === 'string' &&
416
+ launchAcknowledgement.jobId.length > 0) {
417
+ return [
418
+ createBaseMessage(item, index, 0, false, {
419
+ command,
420
+ output: `Background job ${launchAcknowledgement.jobId} is running.`,
421
+ success: true,
422
+ toolName: 'shell',
423
+ toolArgs: args,
424
+ }),
425
+ ];
426
+ }
125
427
  // Check if this is an error message (doesn't start with expected status formats)
126
428
  const firstLine = outputText.split('\n')[0]?.trim() || '';
127
429
  const isErrorMessage = firstLine.includes('error') ||
@@ -173,8 +475,9 @@ const getShellDescription = (searchViaShell) => 'Execute a single shell command.
173
475
  const SHELL_DESCRIPTION_ORCHESTRATOR = 'Execute a single shell command. Directly inspect, test, or perform a small clear operation when that is the most efficient path. By default, local shell commands run inside the sandbox when available. Use sandbox: "unsandboxed" only for network or outside-host access; it requires explicit user approval and must be run by the main agent. Long output is truncated, the full output is saved to a file; ' +
174
476
  'delegate complex, risky, or separable work when specialization, context compression, or safe parallelism provides meaningful leverage.';
175
477
  export function createShellToolDefinition(deps) {
176
- const { loggingService, settingsService, executionContext, rtkInstaller = ensureRtkInstalled, executeShellCommandImpl = executeShellCommand, shellSandboxRunner = getDefaultShellSandboxRunner(), dockerHostControlFactory = createDockerHostControl, orchestratorMode = false, searchViaShell: searchViaShellExplicit, } = deps;
177
- configureDockerHostControlGrants(settingsService);
478
+ const { loggingService, settingsService, executionContext, rtkInstaller = ensureRtkInstalled, executeShellCommandImpl = executeShellCommand, shellSandboxRunner = getDefaultShellSandboxRunner(), dockerHostControlFactory = createDockerHostControl, orchestratorMode = false, searchViaShell: searchViaShellExplicit, postExecuteDeniedRead = false, sessionAccess, nestedCompatibility, backgroundShellRegistry, backgroundShellWatches, } = deps;
479
+ const deniedReadByCallId = new Map();
480
+ const overrideByCallId = new Map();
178
481
  // Create command logger function with dependencies
179
482
  const logValidationError = (message) => logValidationErrorUtil(settingsService, message);
180
483
  const searchViaShellSetting = settingsService.get('app.searchViaShell') ?? 'auto';
@@ -203,17 +506,22 @@ export function createShellToolDefinition(deps) {
203
506
  const cwd = executionContext?.getCwd() || process.cwd();
204
507
  const sessionId = getConversationSessionId(context);
205
508
  const sandboxEnabled = isSandboxEnabled();
206
- const dockerHostControlRequested = sandboxEnabled && requiresDockerHostControlApproval(params.command);
509
+ const dockerHostControlRequested = sandboxEnabled &&
510
+ (sessionAccess?.requiresDockerApproval(params.command) ??
511
+ nestedCompatibility?.docker.requiresApproval(sessionId, params.command) ??
512
+ false);
207
513
  if (dockerHostControlRequested &&
208
- !hasDockerHostControlProject(cwd) &&
209
- (!sessionId || !hasDockerHostControlSession(sessionId, cwd))) {
514
+ !(sessionAccess?.hasDockerProject(cwd) ?? nestedCompatibility?.docker.hasProject(cwd) ?? false) &&
515
+ !(sessionAccess?.hasDockerSessionGrant(cwd) ??
516
+ (sessionId ? nestedCompatibility?.docker.hasSession(sessionId, cwd) : false) ??
517
+ false)) {
210
518
  return true;
211
519
  }
212
520
  const sshService = executionContext?.getSSHService();
213
521
  if (!sshService && sandboxEnabled) {
214
522
  // If a previous sandboxed run denied a read for this command, require
215
523
  // approval so the user can allow/remember the path or escape unsandboxed.
216
- if (deniedReadStore.peek(params.command)) {
524
+ if (!postExecuteDeniedRead && nestedCompatibility?.deniedReads.peek(params.command)) {
217
525
  return true;
218
526
  }
219
527
  const availability = await shellSandboxRunner.availability();
@@ -236,20 +544,34 @@ export function createShellToolDefinition(deps) {
236
544
  logValidationError(`Validation failed: ${errorMessage}`);
237
545
  loggingService.error('Shell tool validation error', {
238
546
  error: errorMessage,
239
- commands: [params.command.substring(0, 100)],
547
+ // params.command may itself be why we're in this catch (e.g. undefined
548
+ // after a malformed tool call), so don't re-dereference it unguarded.
549
+ commands: [typeof params.command === 'string' ? params.command.substring(0, 100) : String(params.command)],
240
550
  });
241
551
  return true; // fail-safe: require approval on validation errors
242
552
  }
243
553
  },
244
- execute: async ({ command, timeout_ms, max_output_length, sandbox = 'default' }, _context, details) => {
554
+ execute: async ({ command, timeout_ms, max_output_length, sandbox = 'default', background = false }, _context, details) => {
555
+ const toolCallId = details?.toolCall?.callId;
556
+ // The application run loop owns turn cancellation on its typed context;
557
+ // SDK details only identify the provider tool call.
558
+ const toolSignal = _context?.signal ??
559
+ details?.signal;
245
560
  const cwd = executionContext?.getCwd() || process.cwd();
246
561
  const sessionId = getConversationSessionId(_context);
247
562
  const sandboxEnabled = isSandboxEnabled();
248
- const dockerHostControlRequested = sandboxEnabled && requiresDockerHostControlApproval(command);
563
+ const dockerHostControlRequested = sandboxEnabled &&
564
+ (sessionAccess?.requiresDockerApproval(command) ??
565
+ nestedCompatibility?.docker.requiresApproval(sessionId, command) ??
566
+ false);
249
567
  const hasDockerGrant = dockerHostControlRequested &&
250
- (hasDockerHostControlProject(cwd) ||
251
- (sessionId &&
252
- (hasDockerHostControlSession(sessionId, cwd) || consumeDockerHostControlOnce(sessionId, command))));
568
+ (sessionAccess?.hasDockerGrant(command, cwd) ??
569
+ (nestedCompatibility
570
+ ? nestedCompatibility.docker.hasProject(cwd) ||
571
+ (sessionId &&
572
+ (nestedCompatibility.docker.hasSession(sessionId, cwd) ||
573
+ nestedCompatibility.docker.consumeOnce(sessionId, command)))
574
+ : false));
253
575
  if (dockerHostControlRequested && !hasDockerGrant) {
254
576
  return 'Error: Docker host control requires explicit approval.';
255
577
  }
@@ -257,54 +579,89 @@ export function createShellToolDefinition(deps) {
257
579
  return `Error: plan mode is read-only. Command not executed: ${command}`;
258
580
  }
259
581
  const sshService = executionContext?.getSSHService();
582
+ if (background && !backgroundShellRegistry) {
583
+ return 'Error: Background shell execution is unavailable in this session.';
584
+ }
585
+ if (background && sshService) {
586
+ return 'Error: Background shell execution is only available for local sessions.';
587
+ }
260
588
  const previousCorrelationId = loggingService.getCorrelationId();
261
589
  const correlationId = randomUUID();
262
590
  const startedAt = Date.now();
263
591
  let sandboxed = false;
264
592
  let dockerHostControl;
265
- // Set correlation ID for tracking related operations
266
- loggingService.setCorrelationId(correlationId);
593
+ let backgroundCleanupDeferred = false;
594
+ let transferred = false;
595
+ let observedJobId;
596
+ // Background-only monitor seam: set when the background branch opens the
597
+ // job's output stream, so the shared onOutputChunk never touches the
598
+ // store for a foreground lease job.
599
+ let monitoredJobId;
600
+ const ownsCorrelationId = !background;
601
+ let foregroundCorrelationRestored = false;
602
+ const restoreForegroundCorrelation = () => {
603
+ if (!ownsCorrelationId || foregroundCorrelationRestored)
604
+ return;
605
+ foregroundCorrelationRestored = true;
606
+ if (previousCorrelationId) {
607
+ loggingService.setCorrelationId(previousCorrelationId);
608
+ }
609
+ else {
610
+ loggingService.clearCorrelationId();
611
+ }
612
+ };
613
+ // The logger correlation ID is process-global. A foreground command owns
614
+ // it for the duration of its await; a background job uses the explicit
615
+ // `correlationId` fields below instead so it cannot contaminate another
616
+ // overlapping command's logs.
617
+ if (ownsCorrelationId)
618
+ loggingService.setCorrelationId(correlationId);
619
+ const withExecutionCorrelation = (metadata) => background || transferred ? { ...metadata, correlationId } : metadata;
267
620
  try {
268
- // Use provided values or settings defaults or hardcoded defaults
269
- const timeoutValue = timeout_ms ?? settingsService.get('shell.timeout');
621
+ // Use provided values or settings defaults or hardcoded defaults. A
622
+ // background launch uses shell.backgroundTimeout instead of
623
+ // shell.timeout (background jobs may legitimately outlive the
624
+ // foreground budget); an explicit timeout_ms always wins.
625
+ const timeoutValue = timeout_ms ?? settingsService.get(background ? 'shell.backgroundTimeout' : 'shell.timeout');
270
626
  const timeout = timeoutValue != null ? timeoutValue : undefined;
271
627
  const maxOutputLengthValue = max_output_length ?? settingsService.get('shell.maxOutputChars');
272
- const maxOutputLength = maxOutputLengthValue != null ? maxOutputLengthValue : undefined;
273
- loggingService.debug('Shell command execution started', {
628
+ const configuredMaxOutputLength = settingsService.get('shell.maxOutputChars');
629
+ const foregroundMaxOutputLength = maxOutputLengthValue != null ? maxOutputLengthValue : undefined;
630
+ const backgroundMaxOutputLength = configuredMaxOutputLength != null
631
+ ? Math.min(foregroundMaxOutputLength ?? configuredMaxOutputLength, configuredMaxOutputLength)
632
+ : foregroundMaxOutputLength;
633
+ const initialMaxOutputLength = background ? backgroundMaxOutputLength : foregroundMaxOutputLength;
634
+ loggingService.debug('Shell command execution started', withExecutionCorrelation({
274
635
  commandCount: 1,
275
636
  commands: [command],
276
637
  timeout,
277
638
  workingDirectory: cwd,
278
- maxOutputLength,
279
- });
639
+ maxOutputLength: initialMaxOutputLength,
640
+ }));
280
641
  // Strip redundant 'cd <path> &&' if it targets the current directory
281
642
  const optimizedCommand = stripRedundantCd(command, cwd);
282
643
  if (optimizedCommand !== command) {
283
- loggingService.debug('Stripped redundant cd command', {
284
- original: command,
285
- optimized: optimizedCommand,
286
- cwd,
287
- });
644
+ loggingService.debug('Stripped redundant cd command', withExecutionCorrelation({ original: command, optimized: optimizedCommand, cwd }));
288
645
  }
289
646
  let commandToRun = optimizedCommand;
290
647
  let sandboxAvailability;
291
- if (!sshService &&
292
- settingsService.get('shell.useRtkCompression') &&
293
- isRtkSupportedCommand(optimizedCommand)) {
648
+ if (!sshService && settingsService.get('shell.useRtkCompression') && isRtkSupportedCommand(optimizedCommand)) {
294
649
  const rtkPath = await rtkInstaller({ loggingService });
295
650
  if (rtkPath) {
296
651
  commandToRun = wrapWithRtk(optimizedCommand, rtkPath);
297
- loggingService.debug('Wrapped command with rtk', { rtkPath, original: optimizedCommand });
652
+ loggingService.debug('Wrapped command with rtk', withExecutionCorrelation({ rtkPath, original: optimizedCommand }));
298
653
  }
299
654
  }
300
655
  // Consume any execution override set by a denied-read approval decision.
301
656
  // This is a one-shot override for this single execution only.
302
- const override = executionOverrideStore.consume(command);
657
+ const override = postExecuteDeniedRead && typeof toolCallId === 'string'
658
+ ? overrideByCallId.get(toolCallId) ?? null
659
+ : nestedCompatibility?.executionOverrides.consume(command) ?? null;
660
+ if (postExecuteDeniedRead && typeof toolCallId === 'string')
661
+ overrideByCallId.delete(toolCallId);
303
662
  if (override?.forceUnsandboxed) {
304
663
  sandbox = 'unsandboxed';
305
- loggingService.debug('Shell executing unsandboxed by approved override', {
306
- command: optimizedCommand.substring(0, 100),
307
- });
664
+ loggingService.debug('Shell executing unsandboxed by approved override', withExecutionCorrelation({ command: optimizedCommand.substring(0, 100) }));
308
665
  }
309
666
  const extraAllowReadFromOverride = override?.extraAllowRead ?? [];
310
667
  if (dockerHostControlRequested) {
@@ -315,13 +672,15 @@ export function createShellToolDefinition(deps) {
315
672
  dockerHostControl = dockerHostControlFactory();
316
673
  // The run that uses the approval settles the pending block, so a
317
674
  // later run of the same command is judged on its own.
318
- consumeDockerHostControlDenial(command);
319
- loggingService.security('Docker host-control capability granted for shell command', {
675
+ if (sessionAccess)
676
+ sessionAccess.consumeDockerDenial(command);
677
+ else
678
+ nestedCompatibility?.docker.consumeDenial(sessionId, command);
679
+ loggingService.security('Docker host-control capability granted for shell command', withExecutionCorrelation({
320
680
  command: optimizedCommand.substring(0, 100),
321
681
  cwd,
322
682
  socketPath: dockerHostControl.socketPath,
323
- correlationId,
324
- });
683
+ }));
325
684
  }
326
685
  catch (error) {
327
686
  return `Error: ${error instanceof Error ? error.message : String(error)}`;
@@ -346,146 +705,292 @@ export function createShellToolDefinition(deps) {
346
705
  ...extraAllowReadFromOverride,
347
706
  ],
348
707
  onProtectedFiltered: (filtered) => {
349
- loggingService.info('Shell sandbox removed write access to protected paths', {
350
- filtered,
351
- cwd,
352
- });
708
+ loggingService.info('Shell sandbox removed write access to protected paths', withExecutionCorrelation({ filtered, cwd }));
353
709
  },
354
710
  });
355
711
  const wrapped = await shellSandboxRunner.wrap(commandToRun, {
356
712
  cwd,
357
713
  config: sandboxConfig,
358
- signal: details?.signal,
714
+ signal: toolSignal,
359
715
  });
360
716
  commandToRun = wrapped.command;
361
717
  sandboxed = true;
362
718
  if (wrapped.diagnostics?.length) {
363
- loggingService.debug('Shell sandbox diagnostics', { diagnostics: wrapped.diagnostics });
719
+ loggingService.debug('Shell sandbox diagnostics', withExecutionCorrelation({ diagnostics: wrapped.diagnostics }));
364
720
  }
365
721
  }
366
722
  catch (error) {
367
- loggingService.warn('Shell sandbox initialization failed; refusing unsandboxed fallback', {
368
- error: error instanceof Error ? error.message : String(error),
369
- });
723
+ loggingService.warn('Shell sandbox initialization failed; refusing unsandboxed fallback', withExecutionCorrelation({ error: error instanceof Error ? error.message : String(error) }));
370
724
  return `Error: ${SANDBOX_ESCAPE_INSTRUCTION}`;
371
725
  }
372
726
  }
373
- else if (sandboxAvailability.type !== 'disabled') {
374
- loggingService.warn('Shell sandbox unavailable; running command without sandbox', {
727
+ else {
728
+ loggingService.warn('Shell sandbox unavailable; refusing unsandboxed fallback', withExecutionCorrelation({
375
729
  availability: sandboxAvailability.type,
376
730
  reason: 'reason' in sandboxAvailability ? sandboxAvailability.reason : undefined,
377
- });
731
+ }));
732
+ return `Error: ${SANDBOX_ESCAPE_INSTRUCTION}`;
378
733
  }
379
734
  }
380
- const result = await executeShellCommandImpl(commandToRun, {
381
- cwd,
382
- timeout,
383
- maxBuffer: 1024 * 1024, // 1MB max buffer
384
- env: sandboxed
385
- ? createSandboxEnvironment(undefined, {
386
- cwd,
387
- readPolicy: settingsService.get('sandbox.readPolicy'),
388
- dockerHostControl,
389
- })
390
- : undefined,
391
- pauseOnSandboxNetworkApproval: sandboxed,
392
- signal: details?.signal,
393
- sshService,
394
- });
395
- const stdout = result.stdout ?? '';
396
- const rawStderr = stripRtkWarning(result.stderr ?? '');
397
- const annotatedStderr = sandboxed ? shellSandboxRunner.annotateFailure(optimizedCommand, rawStderr) : rawStderr;
398
- const readPolicy = settingsService.get('sandbox.readPolicy');
399
- const sandboxFailure = classifySandboxFailure({
400
- command: optimizedCommand,
401
- rawStderr,
402
- annotatedStderr,
403
- sandboxed,
404
- readPolicy,
405
- dockerHostControlActive: Boolean(dockerHostControl),
406
- exitCode: result.exitCode,
407
- });
408
- if (sandboxFailure?.type === 'docker_blocked') {
409
- // Keyed by the command the model passed, because that is what the
410
- // approval flow and the retry will present.
411
- recordDockerHostControlDenial(command);
412
- loggingService.security('Sandbox blocked Docker daemon access; agent retry will prompt for approval', {
413
- confidence: sandboxFailure.confidence,
414
- command: command.substring(0, 100),
735
+ const executePreparedCommand = async (signal) => {
736
+ const result = await executeShellCommandImpl(commandToRun, {
415
737
  cwd,
416
- correlationId,
417
- });
418
- return `Error: ${DOCKER_HOST_CONTROL_RETRY_INSTRUCTION}`;
419
- }
420
- if (sandboxFailure?.type === 'denied_read') {
421
- deniedReadStore.record(optimizedCommand, sandboxFailure.deniedRead);
422
- loggingService.security('Sandbox denied read; agent retry will prompt for approval', {
423
- deniedPath: sandboxFailure.deniedRead.path,
424
- suggestedParent: sandboxFailure.deniedRead.suggestedParent,
425
- sensitive: sandboxFailure.deniedRead.sensitive,
426
- confidence: sandboxFailure.confidence,
427
- command: optimizedCommand.substring(0, 100),
428
- correlationId,
429
- });
430
- return `Error: ${DETAILED_DENIED_READ_INSTRUCTION}`;
431
- }
432
- const stderr = sandboxFailure ? `${sandboxFailure.stderr}\n\n${SANDBOX_ESCAPE_INSTRUCTION}` : annotatedStderr;
433
- const exitCode = result.exitCode ?? null;
434
- const outcome = result.timedOut
435
- ? { type: 'timeout' }
436
- : { type: 'exit', exitCode };
437
- if (result.timedOut) {
438
- loggingService.warn('Shell command timeout', {
439
- command: optimizedCommand.substring(0, 100),
440
738
  timeout,
739
+ maxBuffer: 1024 * 1024, // 1MB max buffer
740
+ // A long-running monitored background job must survive a full
741
+ // buffer: drop from the head of the retained text instead of
742
+ // killing the child. Foreground keeps the 'kill' default.
743
+ overflow: background ? 'truncate' : 'kill',
744
+ env: sandboxed
745
+ ? createSandboxEnvironment(undefined, {
746
+ cwd,
747
+ readPolicy: settingsService.get('sandbox.readPolicy'),
748
+ dockerHostControl,
749
+ })
750
+ : undefined,
751
+ pauseOnSandboxNetworkApproval: sandboxed,
752
+ signal,
753
+ sshService,
754
+ onOutputChunk: (stream, text) => {
755
+ if (observedJobId)
756
+ backgroundShellRegistry?.recordOutputChunk(observedJobId);
757
+ // Monitoring is background-only: the store stream is opened only
758
+ // for the background branch, so a foreground lease job is never
759
+ // pushed here. watches.push feeds the store and evaluates the
760
+ // job's watches in one call.
761
+ if (monitoredJobId)
762
+ backgroundShellWatches?.push(monitoredJobId, stream, text);
763
+ },
441
764
  });
442
- }
443
- else if (exitCode === 0) {
444
- loggingService.debug('Shell command executed successfully', {
445
- command: optimizedCommand.substring(0, 100),
446
- exitCode: 0,
447
- stdoutLength: stdout.length,
448
- stderrLength: stderr.length,
765
+ const stdout = result.stdout ?? '';
766
+ const rawStderr = stripRtkWarning(result.stderr ?? '');
767
+ const annotatedStderr = sandboxed
768
+ ? shellSandboxRunner.annotateFailure(optimizedCommand, rawStderr)
769
+ : rawStderr;
770
+ const readPolicy = settingsService.get('sandbox.readPolicy');
771
+ const sandboxFailure = classifySandboxFailure({
772
+ command: optimizedCommand,
773
+ rawStderr,
774
+ annotatedStderr,
775
+ sandboxed,
776
+ readPolicy,
777
+ dockerHostControlActive: Boolean(dockerHostControl),
778
+ exitCode: result.exitCode,
449
779
  });
450
- }
451
- else {
452
- loggingService.debug('Shell command execution failed', {
453
- command: optimizedCommand.substring(0, 100),
780
+ if (sandboxFailure?.type === 'docker_blocked') {
781
+ // Keyed by the command the model passed, because that is what the
782
+ // approval flow and the retry will present.
783
+ if (sessionAccess)
784
+ sessionAccess.recordDockerDenial(command);
785
+ else
786
+ nestedCompatibility?.docker.recordDenial(sessionId, command);
787
+ loggingService.security('Sandbox blocked Docker daemon access; agent retry will prompt for approval', withExecutionCorrelation({
788
+ confidence: sandboxFailure.confidence,
789
+ command: command.substring(0, 100),
790
+ cwd,
791
+ sessionId,
792
+ // Without a session the block is unattributable, so it is not
793
+ // remembered and the retry will be sandboxed again.
794
+ denialRecorded: Boolean(sessionId),
795
+ }));
796
+ return { output: `Error: ${DOCKER_HOST_CONTROL_RETRY_INSTRUCTION}`, status: 'failed' };
797
+ }
798
+ if (sandboxFailure?.type === 'denied_read') {
799
+ if (!background && !transferred && postExecuteDeniedRead && typeof toolCallId !== 'string') {
800
+ throw new HarnessInvariantError('Root shell denied-read handling requires an SDK tool call ID');
801
+ }
802
+ // Keyed by the command the model passed, not `optimizedCommand`: the
803
+ // retry and both approval lookups (needsApproval here, and the
804
+ // conversation layer, which has no cwd to re-derive the stripped form)
805
+ // only ever see the raw string.
806
+ if ((background || transferred) && postExecuteDeniedRead) {
807
+ loggingService.security('Sandbox denied read in background shell job; foreground retry is required', withExecutionCorrelation({
808
+ deniedPath: sandboxFailure.deniedRead.path,
809
+ suggestedParent: sandboxFailure.deniedRead.suggestedParent,
810
+ sensitive: sandboxFailure.deniedRead.sensitive,
811
+ confidence: sandboxFailure.confidence,
812
+ command: optimizedCommand.substring(0, 100),
813
+ }));
814
+ return {
815
+ output: 'Error: Sandbox blocked a read access. Background jobs cannot request permission after launch; rerun this command in the foreground to choose an allow option.',
816
+ status: 'failed',
817
+ };
818
+ }
819
+ if (postExecuteDeniedRead) {
820
+ deniedReadByCallId.set(toolCallId, sandboxFailure.deniedRead);
821
+ }
822
+ else {
823
+ nestedCompatibility?.deniedReads.record(command, sandboxFailure.deniedRead);
824
+ }
825
+ loggingService.security('Sandbox denied read; agent retry will prompt for approval', withExecutionCorrelation({
826
+ deniedPath: sandboxFailure.deniedRead.path,
827
+ suggestedParent: sandboxFailure.deniedRead.suggestedParent,
828
+ sensitive: sandboxFailure.deniedRead.sensitive,
829
+ confidence: sandboxFailure.confidence,
830
+ command: optimizedCommand.substring(0, 100),
831
+ }));
832
+ return { output: `Error: ${DETAILED_DENIED_READ_INSTRUCTION}`, status: 'failed' };
833
+ }
834
+ const stderr = sandboxFailure ? `${sandboxFailure.stderr}\n\n${SANDBOX_ESCAPE_INSTRUCTION}` : annotatedStderr;
835
+ const exitCode = result.exitCode ?? null;
836
+ const outcome = result.timedOut
837
+ ? { type: 'timeout' }
838
+ : { type: 'exit', exitCode };
839
+ if (result.timedOut) {
840
+ loggingService.warn('Shell command timeout', withExecutionCorrelation({ command: optimizedCommand.substring(0, 100), timeout }));
841
+ }
842
+ else if (exitCode === 0) {
843
+ loggingService.debug('Shell command executed successfully', withExecutionCorrelation({
844
+ command: optimizedCommand.substring(0, 100),
845
+ exitCode: 0,
846
+ stdoutLength: stdout.length,
847
+ stderrLength: stderr.length,
848
+ }));
849
+ }
850
+ else {
851
+ loggingService.debug('Shell command execution failed', withExecutionCorrelation({
852
+ command: optimizedCommand.substring(0, 100),
853
+ exitCode,
854
+ stderrLength: stderr.length,
855
+ }));
856
+ }
857
+ loggingService.debug('Shell command execution completed', withExecutionCorrelation({
858
+ commandCount: 1,
859
+ successCount: outcome.type === 'exit' && outcome.exitCode === 0 ? 1 : 0,
860
+ failureCount: outcome.type === 'exit' && outcome.exitCode !== 0 ? 1 : 0,
861
+ timeoutCount: outcome.type === 'timeout' ? 1 : 0,
862
+ }));
863
+ const formattedOutput = await formatShellExecutionOutput({
864
+ command: optimizedCommand,
865
+ cwd,
866
+ stdout,
867
+ stderr,
454
868
  exitCode,
455
- stderrLength: stderr.length,
869
+ timedOut: outcome.type === 'timeout',
870
+ maxOutputLength: background || transferred ? backgroundMaxOutputLength : foregroundMaxOutputLength,
871
+ durationMs: Date.now() - startedAt,
456
872
  });
873
+ return {
874
+ output: formattedOutput.text,
875
+ status: result.timedOut ? 'timed_out' : exitCode === 0 ? 'completed' : 'failed',
876
+ };
877
+ };
878
+ const cleanupAfterExecution = async () => {
879
+ if (sandboxed) {
880
+ await shellSandboxRunner.cleanupAfterCommand?.();
881
+ }
882
+ dockerHostControl?.cleanup();
883
+ restoreForegroundCorrelation();
884
+ };
885
+ if (background) {
886
+ try {
887
+ const job = backgroundShellRegistry.launch({
888
+ command: optimizedCommand,
889
+ run: executePreparedCommand,
890
+ onStarted: (jobId) => {
891
+ observedJobId = jobId;
892
+ // Open the retained output stream (and the watch layer) for
893
+ // this job at launch; settled in onSettled below.
894
+ if (backgroundShellWatches) {
895
+ monitoredJobId = jobId;
896
+ backgroundShellWatches.open(jobId);
897
+ }
898
+ },
899
+ onSettled: () => {
900
+ // Flush matched-but-undelivered watch firings before the
901
+ // registry emits background_shell_completed (it awaits this
902
+ // callback first): no monitor firing may trail the terminal
903
+ // notification. Then release shell resources as before.
904
+ if (monitoredJobId)
905
+ backgroundShellWatches?.settleJob(monitoredJobId);
906
+ return cleanupAfterExecution();
907
+ },
908
+ resultToStatus: (result) => result.status,
909
+ });
910
+ backgroundCleanupDeferred = true;
911
+ return JSON.stringify({ jobId: job.id, status: job.status });
912
+ }
913
+ catch (error) {
914
+ return `Error: ${error instanceof Error ? error.message : String(error)}`;
915
+ }
457
916
  }
458
- loggingService.debug('Shell command execution completed', {
459
- commandCount: 1,
460
- successCount: outcome.type === 'exit' && outcome.exitCode === 0 ? 1 : 0,
461
- failureCount: outcome.type === 'exit' && outcome.exitCode !== 0 ? 1 : 0,
462
- timeoutCount: outcome.type === 'timeout' ? 1 : 0,
463
- });
464
- const formattedOutput = await formatShellExecutionOutput({
465
- command: optimizedCommand,
466
- cwd,
467
- stdout,
468
- stderr,
469
- exitCode,
470
- timedOut: outcome.type === 'timeout',
471
- maxOutputLength,
472
- durationMs: Date.now() - startedAt,
473
- });
474
- return formattedOutput.text;
917
+ if (backgroundShellRegistry && !sshService && typeof toolCallId === 'string') {
918
+ const lease = backgroundShellRegistry.startForeground({
919
+ callId: toolCallId,
920
+ command: optimizedCommand,
921
+ parentSignal: toolSignal,
922
+ run: executePreparedCommand,
923
+ onStarted: (jobId) => {
924
+ observedJobId = jobId;
925
+ },
926
+ onSettled: cleanupAfterExecution,
927
+ resultToStatus: (result) => result.status,
928
+ onAdopted: () => {
929
+ transferred = true;
930
+ restoreForegroundCorrelation();
931
+ },
932
+ });
933
+ // Cleanup is lease-owned now, whether it stays foreground or moves.
934
+ backgroundCleanupDeferred = true;
935
+ const result = await lease.foregroundResult;
936
+ if ('jobId' in result) {
937
+ // The tool call returns now, but only the parent-turn ownership is
938
+ // released. Process cleanup remains deferred to lease settlement.
939
+ restoreForegroundCorrelation();
940
+ return JSON.stringify(result);
941
+ }
942
+ return result.output;
943
+ }
944
+ return (await executePreparedCommand(toolSignal)).output;
475
945
  }
476
946
  finally {
477
- if (sandboxed) {
478
- await shellSandboxRunner.cleanupAfterCommand?.();
479
- }
480
- dockerHostControl?.cleanup();
481
- if (previousCorrelationId) {
482
- loggingService.setCorrelationId(previousCorrelationId);
483
- }
484
- else {
485
- loggingService.clearCorrelationId();
947
+ if (!backgroundCleanupDeferred) {
948
+ if (sandboxed) {
949
+ await shellSandboxRunner.cleanupAfterCommand?.();
950
+ }
951
+ dockerHostControl?.cleanup();
952
+ restoreForegroundCorrelation();
486
953
  }
487
954
  }
488
955
  },
956
+ postExecutePause: postExecuteDeniedRead
957
+ ? {
958
+ describe: (params, _result, details) => {
959
+ const callId = details?.toolCall?.callId;
960
+ if (typeof callId !== 'string')
961
+ return null;
962
+ const info = deniedReadByCallId.get(callId);
963
+ if (!info)
964
+ return null;
965
+ return {
966
+ toolName: 'shell',
967
+ argumentsText: JSON.stringify(params),
968
+ deniedRead: {
969
+ deniedPath: info.path,
970
+ suggestedParent: info.suggestedParent,
971
+ sensitive: info.sensitive,
972
+ command: params.command,
973
+ },
974
+ };
975
+ },
976
+ resolve: async ({ result, details, executeAgain }, decision) => {
977
+ const callId = details?.toolCall?.callId;
978
+ const info = typeof callId === 'string' ? deniedReadByCallId.get(callId) : undefined;
979
+ if (typeof callId === 'string')
980
+ deniedReadByCallId.delete(callId);
981
+ if (typeof callId !== 'string' ||
982
+ !info ||
983
+ (decision !== 'allow-once' && decision !== 'allow-remember' && decision !== 'unsandboxed-once')) {
984
+ return result;
985
+ }
986
+ if (decision === 'allow-remember') {
987
+ getProjectAllowReadStore(executionContext?.getCwd() || process.cwd()).append(info.suggestedParent);
988
+ }
989
+ overrideByCallId.set(callId, decision === 'unsandboxed-once' ? { forceUnsandboxed: true } : { extraAllowRead: [info.suggestedParent] });
990
+ return executeAgain();
991
+ },
992
+ }
993
+ : undefined,
489
994
  formatCommandMessage: formatShellCommandMessage,
490
995
  };
491
996
  }