@qduc/term2 0.9.2 → 0.9.3

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 (1118) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js.map +1 -1
  3. package/dist/app-helpers.d.ts.map +1 -1
  4. package/dist/app-helpers.js.map +1 -1
  5. package/dist/app.d.ts +1 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +101 -86
  8. package/dist/app.js.map +1 -1
  9. package/dist/app.large-uncached-warning.test.js.map +1 -1
  10. package/dist/cli.js +18 -16
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/mode-commands.d.ts +1 -1
  13. package/dist/commands/mode-commands.d.ts.map +1 -1
  14. package/dist/commands/sandbox-command.d.ts +10 -0
  15. package/dist/commands/sandbox-command.d.ts.map +1 -0
  16. package/dist/commands/sandbox-command.js +17 -0
  17. package/dist/commands/sandbox-command.js.map +1 -0
  18. package/dist/commands/skills-command.d.ts.map +1 -1
  19. package/dist/components/Common/MenuContainer.d.ts.map +1 -1
  20. package/dist/components/Common/MenuContainer.js.map +1 -1
  21. package/dist/components/Common/MenuContainer.test.d.ts.map +1 -1
  22. package/dist/components/Common/MenuContainer.test.js +24 -53
  23. package/dist/components/Common/MenuContainer.test.js.map +1 -1
  24. package/dist/components/Common/ScrollableTabBar.d.ts.map +1 -1
  25. package/dist/components/Common/ScrollableTabBar.js.map +1 -1
  26. package/dist/components/Common/compute-visible-tabs.d.ts.map +1 -1
  27. package/dist/components/Common/compute-visible-tabs.js.map +1 -1
  28. package/dist/components/Common/compute-visible-tabs.test.d.ts.map +1 -1
  29. package/dist/components/Common/compute-visible-tabs.test.js +28 -28
  30. package/dist/components/Common/compute-visible-tabs.test.js.map +1 -1
  31. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  32. package/dist/components/Input/PopupManager.d.ts +10 -2
  33. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  34. package/dist/components/Input/PopupManager.js +10 -8
  35. package/dist/components/Input/PopupManager.js.map +1 -1
  36. package/dist/components/Input/determine-active-menu.d.ts +3 -0
  37. package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
  38. package/dist/components/Input/determine-active-menu.js +10 -2
  39. package/dist/components/Input/determine-active-menu.js.map +1 -1
  40. package/dist/components/Input/input-width.d.ts.map +1 -1
  41. package/dist/components/Input/input-width.js.map +1 -1
  42. package/dist/components/Input/insertions.d.ts +11 -1
  43. package/dist/components/Input/insertions.d.ts.map +1 -1
  44. package/dist/components/Input/insertions.js +18 -3
  45. package/dist/components/Input/insertions.js.map +1 -1
  46. package/dist/components/Input/popup-key-navigation.d.ts.map +1 -1
  47. package/dist/components/Input/popup-key-navigation.js.map +1 -1
  48. package/dist/components/Input/popup-key-navigation.test.d.ts.map +1 -1
  49. package/dist/components/Input/popup-key-navigation.test.js +21 -21
  50. package/dist/components/Input/popup-key-navigation.test.js.map +1 -1
  51. package/dist/components/Input/popup-props.d.ts +3 -1
  52. package/dist/components/Input/popup-props.d.ts.map +1 -1
  53. package/dist/components/Input/popup-props.js +8 -1
  54. package/dist/components/Input/popup-props.js.map +1 -1
  55. package/dist/components/Input/popup-props.test.d.ts.map +1 -1
  56. package/dist/components/Input/popup-props.test.js +10 -3
  57. package/dist/components/Input/popup-props.test.js.map +1 -1
  58. package/dist/components/Input/triggers.d.ts +1 -0
  59. package/dist/components/Input/triggers.d.ts.map +1 -1
  60. package/dist/components/Input/triggers.js +1 -0
  61. package/dist/components/Input/triggers.js.map +1 -1
  62. package/dist/components/InputBox.d.ts.map +1 -1
  63. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  64. package/dist/components/MarkdownRenderer.js.map +1 -1
  65. package/dist/components/ModelSelectionMenu.debug.test.d.ts +2 -0
  66. package/dist/components/ModelSelectionMenu.debug.test.d.ts.map +1 -0
  67. package/dist/components/ModelSelectionMenu.debug.test.js.map +1 -0
  68. package/dist/components/layout/Banner.d.ts.map +1 -1
  69. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  70. package/dist/components/layout/DiffView.d.ts.map +1 -1
  71. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  72. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  73. package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
  74. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  75. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  76. package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
  77. package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
  78. package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
  79. package/dist/components/menu/UndoSelectionMenu.d.ts.map +1 -1
  80. package/dist/components/message/ChatMessage.d.ts.map +1 -1
  81. package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
  82. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  83. package/dist/components/message/GrepRenderer.d.ts.map +1 -1
  84. package/dist/components/message/MessageList.d.ts.map +1 -1
  85. package/dist/components/message/MessageList.js +13 -0
  86. package/dist/components/message/MessageList.js.map +1 -1
  87. package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
  88. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  89. package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
  90. package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
  91. package/dist/components/message/command-message-helpers.d.ts +3 -3
  92. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  93. package/dist/components/message/command-message-helpers.js.map +1 -1
  94. package/dist/components/prompt/ApprovalPrompt.ask-user.test.js +12 -35
  95. package/dist/components/prompt/ApprovalPrompt.ask-user.test.js.map +1 -1
  96. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  97. package/dist/components/prompt/HandoffConfirmationPrompt.d.ts.map +1 -1
  98. package/dist/components/prompt/InputSurgeConfirmationPrompt.d.ts.map +1 -1
  99. package/dist/components/prompt/LargeUncachedConfirmationPrompt.d.ts.map +1 -1
  100. package/dist/components/prompt/StandardModeConfirmationPrompt.d.ts.map +1 -1
  101. package/dist/context/InputContext.d.ts +6 -6
  102. package/dist/context/InputContext.d.ts.map +1 -1
  103. package/dist/context/InputContext.js.map +1 -1
  104. package/dist/hooks/conversation-ui-reducer.ask-user-bugfix.test.js +7 -7
  105. package/dist/hooks/conversation-ui-reducer.ask-user-bugfix.test.js.map +1 -1
  106. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  107. package/dist/hooks/conversation-ui-reducer.multi-select.test.d.ts +2 -0
  108. package/dist/hooks/conversation-ui-reducer.multi-select.test.d.ts.map +1 -0
  109. package/dist/hooks/conversation-ui-reducer.multi-select.test.js +123 -0
  110. package/dist/hooks/conversation-ui-reducer.multi-select.test.js.map +1 -0
  111. package/dist/hooks/message-id.d.ts +1 -1
  112. package/dist/hooks/message-id.d.ts.map +1 -1
  113. package/dist/hooks/message-id.js +2 -15
  114. package/dist/hooks/message-id.js.map +1 -1
  115. package/dist/hooks/path-completion-filter.d.ts.map +1 -1
  116. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  117. package/dist/hooks/settings-completion-config.js +1 -0
  118. package/dist/hooks/settings-completion-config.js.map +1 -1
  119. package/dist/hooks/settings-completion-logic.js.map +1 -1
  120. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  121. package/dist/hooks/use-app-commands.js +3 -1
  122. package/dist/hooks/use-app-commands.js.map +1 -1
  123. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +28 -0
  124. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -0
  125. package/dist/hooks/use-app-keyboard-shortcuts.js +86 -0
  126. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -0
  127. package/dist/hooks/use-conversation-messages.js.map +1 -1
  128. package/dist/hooks/use-conversation.ask-user-multi-select.test.d.ts +2 -0
  129. package/dist/hooks/use-conversation.ask-user-multi-select.test.d.ts.map +1 -0
  130. package/dist/hooks/use-conversation.ask-user-multi-select.test.js +159 -0
  131. package/dist/hooks/use-conversation.ask-user-multi-select.test.js.map +1 -0
  132. package/dist/hooks/use-conversation.d.ts +7 -4
  133. package/dist/hooks/use-conversation.d.ts.map +1 -1
  134. package/dist/hooks/use-conversation.js +100 -521
  135. package/dist/hooks/use-conversation.js.map +1 -1
  136. package/dist/hooks/use-escape-key.d.ts.map +1 -1
  137. package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
  138. package/dist/hooks/use-input-history.d.ts.map +1 -1
  139. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  140. package/dist/hooks/use-model-selection.d.ts +1 -1
  141. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  142. package/dist/hooks/use-model-selection.js.map +1 -1
  143. package/dist/hooks/use-path-completion.d.ts +1 -1
  144. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  145. package/dist/hooks/use-pending-turn-guards.d.ts.map +1 -1
  146. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  147. package/dist/hooks/use-provider-selection.js +5 -3
  148. package/dist/hooks/use-provider-selection.js.map +1 -1
  149. package/dist/hooks/use-runtime-settings.d.ts +5 -4
  150. package/dist/hooks/use-runtime-settings.d.ts.map +1 -1
  151. package/dist/hooks/use-runtime-settings.js +8 -82
  152. package/dist/hooks/use-runtime-settings.js.map +1 -1
  153. package/dist/hooks/use-settings-completion.d.ts +1 -1
  154. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  155. package/dist/hooks/use-settings-completion.js.map +1 -1
  156. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  157. package/dist/hooks/use-shell-mode.d.ts +0 -6
  158. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  159. package/dist/hooks/use-shell-mode.js +9 -43
  160. package/dist/hooks/use-shell-mode.js.map +1 -1
  161. package/dist/hooks/use-skill-selection.d.ts.map +1 -1
  162. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  163. package/dist/hooks/use-terminal-focus-notifier.d.ts.map +1 -1
  164. package/dist/hooks/use-terminal-width.d.ts.map +1 -1
  165. package/dist/hooks/use-trigger-detection.d.ts.map +1 -1
  166. package/dist/hooks/use-trigger-detection.js.map +1 -1
  167. package/dist/inspect_zod.d.ts +2 -0
  168. package/dist/inspect_zod.d.ts.map +1 -0
  169. package/dist/inspect_zod.js +16 -0
  170. package/dist/inspect_zod.js.map +1 -0
  171. package/dist/lib/agent-chat-service.d.ts.map +1 -1
  172. package/dist/lib/agent-chat-service.js.map +1 -1
  173. package/dist/lib/agent-client.d.ts.map +1 -1
  174. package/dist/lib/agent-client.js.map +1 -1
  175. package/dist/lib/agent-configuration.d.ts +4 -4
  176. package/dist/lib/agent-configuration.d.ts.map +1 -1
  177. package/dist/lib/agent-factory.test.js +0 -21
  178. package/dist/lib/agent-factory.test.js.map +1 -1
  179. package/dist/lib/agent-run-orchestrator.d.ts.map +1 -1
  180. package/dist/lib/agent-run-orchestrator.js.map +1 -1
  181. package/dist/lib/ask-user-answer-store.d.ts.map +1 -1
  182. package/dist/lib/chained-input-filter.d.ts +5 -0
  183. package/dist/lib/chained-input-filter.d.ts.map +1 -1
  184. package/dist/lib/chained-input-filter.js +17 -1
  185. package/dist/lib/chained-input-filter.js.map +1 -1
  186. package/dist/lib/editor-impl.d.ts +3 -3
  187. package/dist/lib/editor-impl.d.ts.map +1 -1
  188. package/dist/lib/editor-impl.js.map +1 -1
  189. package/dist/lib/editor-impl.test.js +29 -73
  190. package/dist/lib/editor-impl.test.js.map +1 -1
  191. package/dist/lib/openai-agent-client.public-methods.test.js +1 -9
  192. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  193. package/dist/lib/openai-strict-tool-schema.d.ts.map +1 -1
  194. package/dist/lib/runner-manager.d.ts.map +1 -1
  195. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  196. package/dist/lib/subagent-bridge.js +0 -1
  197. package/dist/lib/subagent-bridge.js.map +1 -1
  198. package/dist/lib/tool-interceptor-registry.d.ts.map +1 -1
  199. package/dist/lib/tool-invoke.d.ts.map +1 -1
  200. package/dist/lib/tool-invoke.js.map +1 -1
  201. package/dist/non-interactive.d.ts +2 -0
  202. package/dist/non-interactive.d.ts.map +1 -1
  203. package/dist/non-interactive.js +22 -8
  204. package/dist/non-interactive.js.map +1 -1
  205. package/dist/prompts/gpt-5.md +7 -4
  206. package/dist/prompts/prompt-constructor.test.ts +1 -1
  207. package/dist/prompts/prompt-profiles.js +1 -1
  208. package/dist/prompts/prompt-profiles.ts +1 -1
  209. package/dist/prompts/search-via-shell.js.map +1 -1
  210. package/dist/prompts/simple_prev2.md +33 -0
  211. package/dist/prompts/simple_v4.md +25 -0
  212. package/dist/prompts/subagent-delegation.js.map +1 -1
  213. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -1
  214. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -1
  215. package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -1
  216. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +0 -2
  217. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
  218. package/dist/providers/ai-sdk-openai-compatible.provider.js +4 -8
  219. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
  220. package/dist/providers/ai-sdk-openai-compatible.provider.test.js +1 -119
  221. package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -1
  222. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -1
  223. package/dist/providers/codex-responses-model.d.ts +1 -6
  224. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  225. package/dist/providers/codex-responses-model.js +62 -80
  226. package/dist/providers/codex-responses-model.js.map +1 -1
  227. package/dist/providers/codex.provider.d.ts.map +1 -1
  228. package/dist/providers/codex.provider.js.map +1 -1
  229. package/dist/providers/common/provider-errors.d.ts.map +1 -1
  230. package/dist/providers/fallback-responses-model.d.ts +2 -2
  231. package/dist/providers/fallback-responses-model.d.ts.map +1 -1
  232. package/dist/providers/fallback-responses-model.js.map +1 -1
  233. package/dist/providers/fetch/logging-middleware.js.map +1 -1
  234. package/dist/providers/openai-compatible-behavior-gate.test.js +1 -42
  235. package/dist/providers/openai-compatible-behavior-gate.test.js.map +1 -1
  236. package/dist/providers/openai-compatible-lazy.d.ts.map +1 -1
  237. package/dist/providers/openai-compatible-lazy.js +7 -3
  238. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  239. package/dist/providers/openai-compatible.provider.d.ts +1 -0
  240. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  241. package/dist/providers/openai-compatible.provider.js +6 -3
  242. package/dist/providers/openai-compatible.provider.js.map +1 -1
  243. package/dist/providers/openai.provider.d.ts.map +1 -1
  244. package/dist/providers/openai.provider.js.map +1 -1
  245. package/dist/providers/openrouter.provider.js.map +1 -1
  246. package/dist/providers/provider-service.d.ts.map +1 -1
  247. package/dist/providers/provider-service.js +31 -20
  248. package/dist/providers/provider-service.js.map +1 -1
  249. package/dist/providers/retrying-model.d.ts.map +1 -1
  250. package/dist/providers/retrying-model.js.map +1 -1
  251. package/dist/scripts/eval-auto-approval/cache.d.ts.map +1 -1
  252. package/dist/scripts/eval-auto-approval/dataset.d.ts +3 -3
  253. package/dist/scripts/eval-auto-approval/leaderboard.js.map +1 -1
  254. package/dist/scripts/eval-auto-approval/report.js.map +1 -1
  255. package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
  256. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  257. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  258. package/dist/services/approval/approval-flow-coordinator.d.ts +7 -0
  259. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  260. package/dist/services/approval/approval-flow-coordinator.js +8 -0
  261. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  262. package/dist/services/approval/approval-presentation-policy.d.ts +1 -1
  263. package/dist/services/approval/approval-presentation-policy.d.ts.map +1 -1
  264. package/dist/services/approval/approval-presentation-policy.js.map +1 -1
  265. package/dist/services/approval/approval-state.d.ts.map +1 -1
  266. package/dist/services/approval/shell-auto-approval-resolver.d.ts +12 -0
  267. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  268. package/dist/services/approval/shell-auto-approval-resolver.js +28 -0
  269. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  270. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  271. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  272. package/dist/services/approval/tool-approval-policy-registry.d.ts.map +1 -1
  273. package/dist/services/approval/tool-owner.d.ts.map +1 -1
  274. package/dist/services/approval-flow-coordinator.js +1 -1
  275. package/dist/services/approval-flow-coordinator.js.map +1 -1
  276. package/dist/services/approval-state.d.ts +1 -1
  277. package/dist/services/approval-state.d.ts.map +1 -1
  278. package/dist/services/command-message-streaming.d.ts.map +1 -1
  279. package/dist/services/command-message-streaming.js.map +1 -1
  280. package/dist/services/continuation-driver.js +1 -1
  281. package/dist/services/continuation-driver.js.map +1 -1
  282. package/dist/services/conversation/conversation-adapter.d.ts +2 -0
  283. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  284. package/dist/services/conversation/conversation-adapter.js +9 -4
  285. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  286. package/dist/services/conversation/conversation-input-routing.d.ts +23 -0
  287. package/dist/services/conversation/conversation-input-routing.d.ts.map +1 -0
  288. package/dist/services/conversation/conversation-input-routing.js +20 -0
  289. package/dist/services/conversation/conversation-input-routing.js.map +1 -0
  290. package/dist/services/conversation/conversation-orchestrator.d.ts +36 -0
  291. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -0
  292. package/dist/services/conversation/conversation-orchestrator.js +440 -0
  293. package/dist/services/conversation/conversation-orchestrator.js.map +1 -0
  294. package/dist/services/conversation/conversation-orchestrator.types.d.ts +58 -0
  295. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -0
  296. package/dist/services/conversation/conversation-orchestrator.types.js +2 -0
  297. package/dist/services/conversation/conversation-orchestrator.types.js.map +1 -0
  298. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  299. package/dist/services/conversation/conversation-replay.js +46 -21
  300. package/dist/services/conversation/conversation-replay.js.map +1 -1
  301. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  302. package/dist/services/conversation/conversation-service.d.ts +2 -1
  303. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  304. package/dist/services/conversation/conversation-service.js +9 -0
  305. package/dist/services/conversation/conversation-service.js.map +1 -1
  306. package/dist/services/conversation/conversation-state-projector.d.ts +52 -0
  307. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -0
  308. package/dist/services/conversation/conversation-state-projector.js +71 -0
  309. package/dist/services/conversation/conversation-state-projector.js.map +1 -0
  310. package/dist/services/conversation/conversation-state-schema.d.ts +44 -0
  311. package/dist/services/conversation/conversation-state-schema.d.ts.map +1 -0
  312. package/dist/services/conversation/conversation-state-schema.js +25 -0
  313. package/dist/services/conversation/conversation-state-schema.js.map +1 -0
  314. package/dist/services/conversation/conversation-store.d.ts +5 -1
  315. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  316. package/dist/services/conversation/conversation-store.js +5 -1
  317. package/dist/services/conversation/conversation-store.js.map +1 -1
  318. package/dist/services/conversation/conversation-turn-items.d.ts.map +1 -1
  319. package/dist/services/conversation/conversation-turn-items.js +13 -1
  320. package/dist/services/conversation/conversation-turn-items.js.map +1 -1
  321. package/dist/services/conversation/journal-to-ledger.d.ts +17 -0
  322. package/dist/services/conversation/journal-to-ledger.d.ts.map +1 -0
  323. package/dist/services/conversation/journal-to-ledger.js +220 -0
  324. package/dist/services/conversation/journal-to-ledger.js.map +1 -0
  325. package/dist/services/conversation-adapter.d.ts +2 -3
  326. package/dist/services/conversation-adapter.d.ts.map +1 -1
  327. package/dist/services/conversation-adapter.js +8 -10
  328. package/dist/services/conversation-adapter.js.map +1 -1
  329. package/dist/services/conversation-events.d.ts +1 -1
  330. package/dist/services/conversation-events.d.ts.map +1 -1
  331. package/dist/services/conversation-log-events.d.ts +1 -1
  332. package/dist/services/conversation-log-events.d.ts.map +1 -1
  333. package/dist/services/conversation-replay.d.ts +1 -1
  334. package/dist/services/conversation-replay.d.ts.map +1 -1
  335. package/dist/services/conversation-replay.js +1 -1
  336. package/dist/services/conversation-replay.js.map +1 -1
  337. package/dist/services/conversation-result-builder.d.ts +1 -1
  338. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  339. package/dist/services/conversation-result-builder.js +2 -2
  340. package/dist/services/conversation-result-builder.js.map +1 -1
  341. package/dist/services/conversation-result-builder.test.js +3 -3
  342. package/dist/services/conversation-result-builder.test.js.map +1 -1
  343. package/dist/services/conversation-result-resolver.d.ts +25 -0
  344. package/dist/services/conversation-result-resolver.d.ts.map +1 -0
  345. package/dist/services/conversation-result-resolver.js +79 -0
  346. package/dist/services/conversation-result-resolver.js.map +1 -0
  347. package/dist/services/conversation-result-resolver.test.d.ts +2 -0
  348. package/dist/services/conversation-result-resolver.test.d.ts.map +1 -0
  349. package/dist/services/conversation-result-resolver.test.js +186 -0
  350. package/dist/services/conversation-result-resolver.test.js.map +1 -0
  351. package/dist/services/conversation-service.test.js +2 -2
  352. package/dist/services/conversation-service.test.js.map +1 -1
  353. package/dist/services/conversation-session-composition.d.ts +1 -3
  354. package/dist/services/conversation-session-composition.d.ts.map +1 -1
  355. package/dist/services/conversation-session-composition.js +2 -3
  356. package/dist/services/conversation-session-composition.js.map +1 -1
  357. package/dist/services/conversation-session-factory.d.ts +1 -3
  358. package/dist/services/conversation-session-factory.d.ts.map +1 -1
  359. package/dist/services/conversation-session-factory.js +1 -7
  360. package/dist/services/conversation-session-factory.js.map +1 -1
  361. package/dist/services/conversation-session.characterization.test.js +13 -23
  362. package/dist/services/conversation-session.characterization.test.js.map +1 -1
  363. package/dist/services/conversation-store.merge-modes.test.d.ts.map +1 -1
  364. package/dist/services/conversation-store.merge-modes.test.js +160 -1
  365. package/dist/services/conversation-store.merge-modes.test.js.map +1 -1
  366. package/dist/services/conversation-turn-runner.d.ts +1 -2
  367. package/dist/services/conversation-turn-runner.d.ts.map +1 -1
  368. package/dist/services/execution-context.d.ts.map +1 -1
  369. package/dist/services/execution-context.js.map +1 -1
  370. package/dist/services/file-service.d.ts.map +1 -1
  371. package/dist/services/file-service.js.map +1 -1
  372. package/dist/services/generation-guard.d.ts.map +1 -1
  373. package/dist/services/history-service.d.ts.map +1 -1
  374. package/dist/services/input-surge-guard.d.ts.map +1 -1
  375. package/dist/services/input-surge-guard.js.map +1 -1
  376. package/dist/services/interruption-info.d.ts.map +1 -1
  377. package/dist/services/large-uncached-input-guard.d.ts.map +1 -1
  378. package/dist/services/large-uncached-input-guard.js.map +1 -1
  379. package/dist/services/logging/assistant-turn-journal.d.ts +28 -3
  380. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  381. package/dist/services/logging/assistant-turn-journal.js +52 -3
  382. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  383. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  384. package/dist/services/logging/conversation-logger.d.ts +2 -2
  385. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  386. package/dist/services/logging/conversation-logger.js +4 -5
  387. package/dist/services/logging/conversation-logger.js.map +1 -1
  388. package/dist/services/logging/logging-contract.d.ts +1 -1
  389. package/dist/services/logging/logging-contract.d.ts.map +1 -1
  390. package/dist/services/logging/logging-service.d.ts.map +1 -1
  391. package/dist/services/logging/logging-service.js.map +1 -1
  392. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  393. package/dist/services/logging/provider-traffic.js.map +1 -1
  394. package/dist/services/logging-service.js +1 -1
  395. package/dist/services/logging-service.js.map +1 -1
  396. package/dist/services/mode-notices.d.ts.map +1 -1
  397. package/dist/services/model-service.js.map +1 -1
  398. package/dist/services/notification-service.js.map +1 -1
  399. package/dist/services/plan-mode-interceptor.d.ts.map +1 -1
  400. package/dist/services/provider-continuity.d.ts.map +1 -1
  401. package/dist/services/retry/conversation-retry-policy.d.ts.map +1 -1
  402. package/dist/services/retry/conversation-retry-policy.js.map +1 -1
  403. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  404. package/dist/services/retry/recovery-executor.js +22 -10
  405. package/dist/services/retry/recovery-executor.js.map +1 -1
  406. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  407. package/dist/services/retry/recovery-policy.js.map +1 -1
  408. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  409. package/dist/services/retry/retry-classifier.js +2 -1
  410. package/dist/services/retry/retry-classifier.js.map +1 -1
  411. package/dist/services/retry/retry-contracts.d.ts +3 -2
  412. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  413. package/dist/services/retry/retry-error-classification.d.ts +2 -2
  414. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  415. package/dist/services/retry/retry-error-classification.js.map +1 -1
  416. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  417. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  418. package/dist/services/retry/upstream-retry-policy.d.ts.map +1 -1
  419. package/dist/services/rtk-service.js.map +1 -1
  420. package/dist/services/runtime-setting-router.d.ts +15 -0
  421. package/dist/services/runtime-setting-router.d.ts.map +1 -0
  422. package/dist/services/runtime-setting-router.js +52 -0
  423. package/dist/services/runtime-setting-router.js.map +1 -0
  424. package/dist/services/service-interfaces.d.ts +1 -1
  425. package/dist/services/service-interfaces.d.ts.map +1 -1
  426. package/dist/services/session/continuation-driver.d.ts.map +1 -1
  427. package/dist/services/session/continuation-driver.js.map +1 -1
  428. package/dist/services/session/continuation-driver.test.js +7 -169
  429. package/dist/services/session/continuation-driver.test.js.map +1 -1
  430. package/dist/services/session/continuation-plan-applier.d.ts +3 -2
  431. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  432. package/dist/services/session/continuation-plan-applier.js +2 -2
  433. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  434. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  435. package/dist/services/session/continuation-recovery-handler.js +1 -1
  436. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  437. package/dist/services/session/continuation-recovery-handler.test.js +4 -3
  438. package/dist/services/session/continuation-recovery-handler.test.js.map +1 -1
  439. package/dist/services/session/continuation-state.d.ts +16 -4
  440. package/dist/services/session/continuation-state.d.ts.map +1 -1
  441. package/dist/services/session/continuation-state.js +6 -6
  442. package/dist/services/session/continuation-state.js.map +1 -1
  443. package/dist/services/session/continuation-stream-cycle.d.ts.map +1 -1
  444. package/dist/services/session/continuation-stream-cycle.js.map +1 -1
  445. package/dist/services/session/conversation-session.d.ts +0 -1
  446. package/dist/services/session/conversation-session.d.ts.map +1 -1
  447. package/dist/services/session/conversation-session.js.map +1 -1
  448. package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
  449. package/dist/services/session/initial-input-preparer.js.map +1 -1
  450. package/dist/services/session/initial-stream-cycle.d.ts.map +1 -1
  451. package/dist/services/session/initial-stream-cycle.js.map +1 -1
  452. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  453. package/dist/services/session/initial-turn-recovery-handler.js +2 -2
  454. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  455. package/dist/services/session/initial-turn-runner.d.ts.map +1 -1
  456. package/dist/services/session/initial-turn-runner.js.map +1 -1
  457. package/dist/services/session/session-adapter-bridge.d.ts +11 -1
  458. package/dist/services/session/session-adapter-bridge.d.ts.map +1 -1
  459. package/dist/services/session/session-adapter-bridge.js +10 -1
  460. package/dist/services/session/session-adapter-bridge.js.map +1 -1
  461. package/dist/services/session/session-composition.d.ts +8 -23
  462. package/dist/services/session/session-composition.d.ts.map +1 -1
  463. package/dist/services/session/session-composition.js +48 -98
  464. package/dist/services/session/session-composition.js.map +1 -1
  465. package/dist/services/session/session-context-service.d.ts.map +1 -1
  466. package/dist/services/session/session-continuity-reset.d.ts +23 -0
  467. package/dist/services/session/session-continuity-reset.d.ts.map +1 -0
  468. package/dist/services/session/session-continuity-reset.js +34 -0
  469. package/dist/services/session/session-continuity-reset.js.map +1 -0
  470. package/dist/services/session/session-factory.d.ts +3 -46
  471. package/dist/services/session/session-factory.d.ts.map +1 -1
  472. package/dist/services/session/session-factory.js +3 -44
  473. package/dist/services/session/session-factory.js.map +1 -1
  474. package/dist/services/session/session-factory.test.js +18 -17
  475. package/dist/services/session/session-factory.test.js.map +1 -1
  476. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  477. package/dist/services/session/session-lifecycle.d.ts +2 -8
  478. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  479. package/dist/services/session/session-lifecycle.js +25 -44
  480. package/dist/services/session/session-lifecycle.js.map +1 -1
  481. package/dist/services/session/session-manager.d.ts +1 -1
  482. package/dist/services/session/session-manager.d.ts.map +1 -1
  483. package/dist/services/session/session-manager.js +4 -5
  484. package/dist/services/session/session-manager.js.map +1 -1
  485. package/dist/services/session/session-runtime-controller.d.ts +2 -2
  486. package/dist/services/session/session-runtime-controller.d.ts.map +1 -1
  487. package/dist/services/session/session-runtime-controller.js +17 -8
  488. package/dist/services/session/session-runtime-controller.js.map +1 -1
  489. package/dist/services/session/session-stream-processor.d.ts +3 -3
  490. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  491. package/dist/services/session/session-stream-processor.js +1 -1
  492. package/dist/services/session/session-stream-processor.js.map +1 -1
  493. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  494. package/dist/services/session/session-tool-tracker.js +18 -9
  495. package/dist/services/session/session-tool-tracker.js.map +1 -1
  496. package/dist/services/session/terminal-result-collector.js.map +1 -1
  497. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -1
  498. package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -1
  499. package/dist/services/session/turn-attempt-factory.d.ts +2 -0
  500. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  501. package/dist/services/session/turn-attempt-factory.js +1 -1
  502. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  503. package/dist/services/session/turn-attempt.d.ts +3 -3
  504. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  505. package/dist/services/session/turn-attempt.js +4 -4
  506. package/dist/services/session/turn-attempt.js.map +1 -1
  507. package/dist/services/session/turn-coordinator.d.ts +5 -12
  508. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  509. package/dist/services/session/turn-coordinator.js +4 -53
  510. package/dist/services/session/turn-coordinator.js.map +1 -1
  511. package/dist/services/session/turn-executor.d.ts.map +1 -1
  512. package/dist/services/session/turn-executor.js +2 -1
  513. package/dist/services/session/turn-executor.js.map +1 -1
  514. package/dist/services/session/turn-item-accumulator.d.ts.map +1 -1
  515. package/dist/services/session/turn-status-machine.d.ts +20 -0
  516. package/dist/services/session/turn-status-machine.d.ts.map +1 -1
  517. package/dist/services/session/turn-status-machine.js +28 -0
  518. package/dist/services/session/turn-status-machine.js.map +1 -1
  519. package/dist/services/session/turn-transition.js.map +1 -1
  520. package/dist/services/session/turn-workflow.d.ts +84 -0
  521. package/dist/services/session/turn-workflow.d.ts.map +1 -0
  522. package/dist/services/session/turn-workflow.js +648 -0
  523. package/dist/services/session/turn-workflow.js.map +1 -0
  524. package/dist/services/session-state-controller.test.d.ts +2 -0
  525. package/dist/services/session-state-controller.test.d.ts.map +1 -0
  526. package/dist/services/session-state-controller.test.js +125 -0
  527. package/dist/services/session-state-controller.test.js.map +1 -0
  528. package/dist/services/session-state-facade.d.ts +2 -2
  529. package/dist/services/session-state-facade.d.ts.map +1 -1
  530. package/dist/services/session-state-facade.js.map +1 -1
  531. package/dist/services/settings/custom-provider-normalization.d.ts +4 -0
  532. package/dist/services/settings/custom-provider-normalization.d.ts.map +1 -0
  533. package/dist/services/settings/custom-provider-normalization.js +26 -0
  534. package/dist/services/settings/custom-provider-normalization.js.map +1 -0
  535. package/dist/services/settings/settings-env.d.ts.map +1 -1
  536. package/dist/services/settings/settings-persistence.js.map +1 -1
  537. package/dist/services/settings/settings-schema.d.ts +156 -128
  538. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  539. package/dist/services/settings/settings-schema.js +23 -1
  540. package/dist/services/settings/settings-schema.js.map +1 -1
  541. package/dist/services/settings/settings-service.d.ts +2 -0
  542. package/dist/services/settings/settings-service.d.ts.map +1 -1
  543. package/dist/services/settings/settings-service.js +47 -3
  544. package/dist/services/settings/settings-service.js.map +1 -1
  545. package/dist/services/settings/settings-service.mock.js.map +1 -1
  546. package/dist/services/shell-auto-approval-evaluator.js +1 -1
  547. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  548. package/dist/services/skills/skills-service.d.ts.map +1 -1
  549. package/dist/services/skills/skills-service.js.map +1 -1
  550. package/dist/services/skills/skills-service.test.js +0 -19
  551. package/dist/services/skills/skills-service.test.js.map +1 -1
  552. package/dist/services/ssh-service.d.ts.map +1 -1
  553. package/dist/services/ssh-service.js.map +1 -1
  554. package/dist/services/stream-snapshot.d.ts.map +1 -1
  555. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  556. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  557. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  558. package/dist/services/subagents/nested-runner.js +13 -1
  559. package/dist/services/subagents/nested-runner.js.map +1 -1
  560. package/dist/services/subagents/role-loader.d.ts.map +1 -1
  561. package/dist/services/subagents/role-loader.js +11 -0
  562. package/dist/services/subagents/role-loader.js.map +1 -1
  563. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  564. package/dist/services/subagents/subagent-session.d.ts.map +1 -1
  565. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -1
  566. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -1
  567. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  568. package/dist/services/subagents/types.d.ts +1 -1
  569. package/dist/services/subagents/types.d.ts.map +1 -1
  570. package/dist/services/test-helpers/mock-stream.d.ts.map +1 -1
  571. package/dist/services/tool-call-arguments.d.ts.map +1 -1
  572. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  573. package/dist/services/turn-execution-orchestrator.d.ts +79 -0
  574. package/dist/services/turn-execution-orchestrator.d.ts.map +1 -0
  575. package/dist/services/turn-execution-orchestrator.js +687 -0
  576. package/dist/services/turn-execution-orchestrator.js.map +1 -0
  577. package/dist/services/turn-execution-orchestrator.test.d.ts +2 -0
  578. package/dist/services/turn-execution-orchestrator.test.d.ts.map +1 -0
  579. package/dist/services/turn-execution-orchestrator.test.js +236 -0
  580. package/dist/services/turn-execution-orchestrator.test.js.map +1 -0
  581. package/dist/services/turn-item-accumulator.d.ts +1 -1
  582. package/dist/services/turn-item-accumulator.d.ts.map +1 -1
  583. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  584. package/dist/test-helpers/terminal-e2e.d.ts +21 -0
  585. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -0
  586. package/dist/test-helpers/terminal-e2e.js +98 -0
  587. package/dist/test-helpers/terminal-e2e.js.map +1 -0
  588. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  589. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  590. package/dist/tools/agent/ask-user.d.ts.map +1 -1
  591. package/dist/tools/agent/ask-user.test.js +11 -50
  592. package/dist/tools/agent/ask-user.test.js.map +1 -1
  593. package/dist/tools/agent/run-subagent.d.ts +2 -2
  594. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  595. package/dist/tools/agent/run-subagent.js.map +1 -1
  596. package/dist/tools/command-message-formatters.d.ts +1 -1
  597. package/dist/tools/command-message-formatters.d.ts.map +1 -1
  598. package/dist/tools/file/apply-patch.d.ts +0 -3
  599. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  600. package/dist/tools/file/apply-patch.js +31 -0
  601. package/dist/tools/file/apply-patch.js.map +1 -1
  602. package/dist/tools/file/apply-patch.test.js +0 -27
  603. package/dist/tools/file/apply-patch.test.js.map +1 -1
  604. package/dist/tools/file/code-context.d.ts +1 -1
  605. package/dist/tools/file/code-context.d.ts.map +1 -1
  606. package/dist/tools/file/code-context.js.map +1 -1
  607. package/dist/tools/file/create-file.test.js +0 -24
  608. package/dist/tools/file/create-file.test.js.map +1 -1
  609. package/dist/tools/file/edit-healing.js.map +1 -1
  610. package/dist/tools/file/glob.d.ts.map +1 -1
  611. package/dist/tools/file/glob.js.map +1 -1
  612. package/dist/tools/file/grep.d.ts.map +1 -1
  613. package/dist/tools/file/grep.js.map +1 -1
  614. package/dist/tools/file/read-file.d.ts.map +1 -1
  615. package/dist/tools/file/read-file.js.map +1 -1
  616. package/dist/tools/file/search-replace-matcher.d.ts.map +1 -1
  617. package/dist/tools/file/search-replace.test.js +0 -30
  618. package/dist/tools/file/search-replace.test.js.map +1 -1
  619. package/dist/tools/format-helpers.d.ts.map +1 -1
  620. package/dist/tools/format-helpers.js.map +1 -1
  621. package/dist/tools/language-providers.d.ts.map +1 -1
  622. package/dist/tools/language-providers.js +379 -0
  623. package/dist/tools/language-providers.js.map +1 -1
  624. package/dist/tools/search.d.ts.map +1 -1
  625. package/dist/tools/search.js +1 -2
  626. package/dist/tools/search.js.map +1 -1
  627. package/dist/tools/system/shell.d.ts.map +1 -1
  628. package/dist/tools/system/shell.js +22 -18
  629. package/dist/tools/system/shell.js.map +1 -1
  630. package/dist/tools/tool-capabilities.d.ts.map +1 -1
  631. package/dist/tools/utils.js.map +1 -1
  632. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  633. package/dist/tools/web/web-search.d.ts.map +1 -1
  634. package/dist/types/message.d.ts.map +1 -1
  635. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  636. package/dist/utils/ai/token-usage.js.map +1 -1
  637. package/dist/utils/clipboard.js.map +1 -1
  638. package/dist/utils/command-safety/_scratch-classify.test.d.ts +2 -0
  639. package/dist/utils/command-safety/_scratch-classify.test.d.ts.map +1 -0
  640. package/dist/utils/command-safety/_scratch-classify.test.js +22 -0
  641. package/dist/utils/command-safety/_scratch-classify.test.js.map +1 -0
  642. package/dist/utils/command-safety/scratch-classify.test.d.ts +2 -0
  643. package/dist/utils/command-safety/scratch-classify.test.d.ts.map +1 -0
  644. package/dist/utils/command-safety/scratch-classify.test.js +22 -0
  645. package/dist/utils/command-safety/scratch-classify.test.js.map +1 -0
  646. package/dist/utils/command-safety/scratch-tally.test.d.ts +2 -0
  647. package/dist/utils/command-safety/scratch-tally.test.d.ts.map +1 -0
  648. package/dist/utils/command-safety/scratch-tally.test.js +68 -0
  649. package/dist/utils/command-safety/scratch-tally.test.js.map +1 -0
  650. package/dist/utils/conversation/apply-conversation-result.d.ts +1 -1
  651. package/dist/utils/conversation/apply-conversation-result.d.ts.map +1 -1
  652. package/dist/utils/conversation/conversation-event-handler.js +2 -2
  653. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  654. package/dist/utils/conversation/markdown-commit-frontier.d.ts.map +1 -1
  655. package/dist/utils/conversation/message-utils.d.ts +2 -2
  656. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  657. package/dist/utils/conversation/message-utils.js.map +1 -1
  658. package/dist/utils/error-helpers.d.ts.map +1 -1
  659. package/dist/utils/error-helpers.js.map +1 -1
  660. package/dist/utils/extract-command-messages.test.js +6 -6
  661. package/dist/utils/extract-command-messages.test.js.map +1 -1
  662. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  663. package/dist/utils/message-id-factory.d.ts +9 -0
  664. package/dist/utils/message-id-factory.d.ts.map +1 -0
  665. package/dist/utils/message-id-factory.js +21 -0
  666. package/dist/utils/message-id-factory.js.map +1 -0
  667. package/dist/utils/output/terminal-title.d.ts +6 -0
  668. package/dist/utils/output/terminal-title.d.ts.map +1 -0
  669. package/dist/utils/output/terminal-title.js +26 -0
  670. package/dist/utils/output/terminal-title.js.map +1 -0
  671. package/dist/utils/output/trim-tool-output.d.ts.map +1 -1
  672. package/dist/utils/output/tty-osc.js.map +1 -1
  673. package/dist/utils/project-tree.js.map +1 -1
  674. package/dist/utils/project-tree.test.d.ts +2 -0
  675. package/dist/utils/project-tree.test.d.ts.map +1 -0
  676. package/dist/utils/project-tree.test.js +149 -0
  677. package/dist/utils/project-tree.test.js.map +1 -0
  678. package/dist/utils/shell/execute-shell.d.ts +1 -0
  679. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  680. package/dist/utils/shell/execute-shell.js +87 -3
  681. package/dist/utils/shell/execute-shell.js.map +1 -1
  682. package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -1
  683. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  684. package/dist/utils/shell/sandbox/sandbox-failure-classifier.d.ts +24 -0
  685. package/dist/utils/shell/sandbox/sandbox-failure-classifier.d.ts.map +1 -0
  686. package/dist/utils/shell/sandbox/sandbox-failure-classifier.js +43 -0
  687. package/dist/utils/shell/sandbox/sandbox-failure-classifier.js.map +1 -0
  688. package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts +14 -0
  689. package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts.map +1 -0
  690. package/dist/utils/shell/sandbox/sandbox-network-approval.js +50 -0
  691. package/dist/utils/shell/sandbox/sandbox-network-approval.js.map +1 -0
  692. package/dist/utils/shell/sandbox/sandbox-network-diagnostic.d.ts +6 -0
  693. package/dist/utils/shell/sandbox/sandbox-network-diagnostic.d.ts.map +1 -0
  694. package/dist/utils/shell/sandbox/sandbox-network-diagnostic.js +71 -0
  695. package/dist/utils/shell/sandbox/sandbox-network-diagnostic.js.map +1 -0
  696. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  697. package/dist/utils/shell/sandbox/sandbox-policy.js +245 -1
  698. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  699. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  700. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +5 -1
  701. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  702. package/dist/utils/shell/shell-session.d.ts +22 -0
  703. package/dist/utils/shell/shell-session.d.ts.map +1 -0
  704. package/dist/utils/shell/shell-session.js +48 -0
  705. package/dist/utils/shell/shell-session.js.map +1 -0
  706. package/dist/utils/skill-discovery-paths.d.ts +1 -1
  707. package/dist/utils/skill-discovery-paths.d.ts.map +1 -1
  708. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  709. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  710. package/dist/utils/streaming/streaming-session-factory.js +1 -1
  711. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  712. package/dist/utils/streaming/streaming-updater.d.ts.map +1 -1
  713. package/dist/utils/subsequence-filter.d.ts.map +1 -1
  714. package/dist/utils/terminal-clear.d.ts +7 -0
  715. package/dist/utils/terminal-clear.d.ts.map +1 -0
  716. package/dist/utils/terminal-clear.js +5 -0
  717. package/dist/utils/terminal-clear.js.map +1 -0
  718. package/dist/utils/terminal-clear.test.d.ts +2 -0
  719. package/dist/utils/terminal-clear.test.d.ts.map +1 -0
  720. package/dist/utils/terminal-clear.test.js +13 -0
  721. package/dist/utils/terminal-clear.test.js.map +1 -0
  722. package/dist/utils/test-render.d.ts +14 -0
  723. package/dist/utils/test-render.d.ts.map +1 -0
  724. package/dist/utils/test-render.js +44 -0
  725. package/dist/utils/test-render.js.map +1 -0
  726. package/dist/utils/throttle.d.ts.map +1 -1
  727. package/dist/utils/throttle.js.map +1 -1
  728. package/dist/utils/value-suggestions.js.map +1 -1
  729. package/package.json +6 -4
  730. package/dist/agent.lite-mode.test.d.ts +0 -2
  731. package/dist/agent.lite-mode.test.d.ts.map +0 -1
  732. package/dist/agent.lite-mode.test.js +0 -39
  733. package/dist/agent.lite-mode.test.js.map +0 -1
  734. package/dist/app.large-uncached-warning.test.js +0 -15
  735. package/dist/components/ApprovalPrompt.test.d.ts +0 -2
  736. package/dist/components/ApprovalPrompt.test.d.ts.map +0 -1
  737. package/dist/components/ApprovalPrompt.test.js +0 -23
  738. package/dist/components/ApprovalPrompt.test.js.map +0 -1
  739. package/dist/components/LiveResponse.test.d.ts +0 -2
  740. package/dist/components/LiveResponse.test.d.ts.map +0 -1
  741. package/dist/components/LiveResponse.test.js +0 -13
  742. package/dist/components/LiveResponse.test.js.map +0 -1
  743. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
  744. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
  745. package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
  746. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
  747. package/dist/components/TextInput.d.ts +0 -42
  748. package/dist/components/TextInput.d.ts.map +0 -1
  749. package/dist/components/TextInput.js +0 -398
  750. package/dist/components/TextInput.js.map +0 -1
  751. package/dist/components/TextInput.test.d.ts +0 -2
  752. package/dist/components/TextInput.test.d.ts.map +0 -1
  753. package/dist/components/TextInput.test.js +0 -75
  754. package/dist/components/TextInput.test.js.map +0 -1
  755. package/dist/components/__test_act.test.d.ts +0 -2
  756. package/dist/components/__test_act.test.d.ts.map +0 -1
  757. package/dist/components/__test_act.test.js +0 -22
  758. package/dist/components/__test_act.test.js.map +0 -1
  759. package/dist/components/__test_act_test.d.ts +0 -2
  760. package/dist/components/__test_act_test.d.ts.map +0 -1
  761. package/dist/components/__test_act_test.js +0 -22
  762. package/dist/components/__test_act_test.js.map +0 -1
  763. package/dist/components/act-test.test.d.ts +0 -2
  764. package/dist/components/act-test.test.d.ts.map +0 -1
  765. package/dist/components/act-test.test.js +0 -22
  766. package/dist/components/act-test.test.js.map +0 -1
  767. package/dist/components/common/MenuContainer.d.ts +0 -19
  768. package/dist/components/common/MenuContainer.d.ts.map +0 -1
  769. package/dist/components/common/MenuContainer.js +0 -52
  770. package/dist/components/common/MenuContainer.js.map +0 -1
  771. package/dist/components/common/MenuContainer.test.d.ts +0 -2
  772. package/dist/components/common/MenuContainer.test.d.ts.map +0 -1
  773. package/dist/components/common/MenuContainer.test.js +0 -37
  774. package/dist/components/common/MenuContainer.test.js.map +0 -1
  775. package/dist/components/common/ScrollableTabBar.d.ts +0 -26
  776. package/dist/components/common/ScrollableTabBar.d.ts.map +0 -1
  777. package/dist/components/common/ScrollableTabBar.js +0 -26
  778. package/dist/components/common/ScrollableTabBar.js.map +0 -1
  779. package/dist/components/common/compute-visible-tabs.d.ts +0 -16
  780. package/dist/components/common/compute-visible-tabs.d.ts.map +0 -1
  781. package/dist/components/common/compute-visible-tabs.js +0 -53
  782. package/dist/components/common/compute-visible-tabs.js.map +0 -1
  783. package/dist/components/common/compute-visible-tabs.test.d.ts +0 -2
  784. package/dist/components/common/compute-visible-tabs.test.d.ts.map +0 -1
  785. package/dist/components/common/compute-visible-tabs.test.js +0 -97
  786. package/dist/components/common/compute-visible-tabs.test.js.map +0 -1
  787. package/dist/components/input/PopupManager.d.ts +0 -88
  788. package/dist/components/input/PopupManager.d.ts.map +0 -1
  789. package/dist/components/input/PopupManager.js +0 -21
  790. package/dist/components/input/PopupManager.js.map +0 -1
  791. package/dist/components/input/determine-active-menu.d.ts +0 -27
  792. package/dist/components/input/determine-active-menu.d.ts.map +0 -1
  793. package/dist/components/input/determine-active-menu.js +0 -81
  794. package/dist/components/input/determine-active-menu.js.map +0 -1
  795. package/dist/components/input/input-width.d.ts +0 -8
  796. package/dist/components/input/input-width.d.ts.map +0 -1
  797. package/dist/components/input/input-width.js +0 -24
  798. package/dist/components/input/input-width.js.map +0 -1
  799. package/dist/components/input/insertions.d.ts +0 -44
  800. package/dist/components/input/insertions.d.ts.map +0 -1
  801. package/dist/components/input/insertions.js +0 -67
  802. package/dist/components/input/insertions.js.map +0 -1
  803. package/dist/components/input/popup-key-navigation.d.ts +0 -18
  804. package/dist/components/input/popup-key-navigation.d.ts.map +0 -1
  805. package/dist/components/input/popup-key-navigation.js +0 -16
  806. package/dist/components/input/popup-key-navigation.js.map +0 -1
  807. package/dist/components/input/popup-key-navigation.test.d.ts +0 -2
  808. package/dist/components/input/popup-key-navigation.test.d.ts.map +0 -1
  809. package/dist/components/input/popup-key-navigation.test.js +0 -75
  810. package/dist/components/input/popup-key-navigation.test.js.map +0 -1
  811. package/dist/components/input/popup-props.d.ts +0 -24
  812. package/dist/components/input/popup-props.d.ts.map +0 -1
  813. package/dist/components/input/popup-props.js +0 -72
  814. package/dist/components/input/popup-props.js.map +0 -1
  815. package/dist/components/input/popup-props.test.d.ts +0 -2
  816. package/dist/components/input/popup-props.test.d.ts.map +0 -1
  817. package/dist/components/input/popup-props.test.js +0 -86
  818. package/dist/components/input/popup-props.test.js.map +0 -1
  819. package/dist/components/input/triggers.d.ts +0 -11
  820. package/dist/components/input/triggers.d.ts.map +0 -1
  821. package/dist/components/input/triggers.js +0 -27
  822. package/dist/components/input/triggers.js.map +0 -1
  823. package/dist/debug-test.d.ts +0 -2
  824. package/dist/debug-test.d.ts.map +0 -1
  825. package/dist/debug-test.js +0 -18
  826. package/dist/debug-test.js.map +0 -1
  827. package/dist/debug_ask_mentor.d.ts +0 -2
  828. package/dist/debug_ask_mentor.d.ts.map +0 -1
  829. package/dist/debug_ask_mentor.js +0 -73
  830. package/dist/debug_ask_mentor.js.map +0 -1
  831. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts +0 -2
  832. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts.map +0 -1
  833. package/dist/hooks/use-conversation.max-turns-undo.test.js +0 -118
  834. package/dist/hooks/use-conversation.max-turns-undo.test.js.map +0 -1
  835. package/dist/hooks/use-path-completion.repro.test.d.ts +0 -2
  836. package/dist/hooks/use-path-completion.repro.test.d.ts.map +0 -1
  837. package/dist/hooks/use-path-completion.repro.test.js.map +0 -1
  838. package/dist/lib/shell.d.ts +0 -7
  839. package/dist/lib/shell.d.ts.map +0 -1
  840. package/dist/lib/shell.js +0 -56
  841. package/dist/lib/shell.js.map +0 -1
  842. package/dist/modes/companion/command-index.d.ts +0 -26
  843. package/dist/modes/companion/command-index.d.ts.map +0 -1
  844. package/dist/modes/companion/command-index.js +0 -50
  845. package/dist/modes/companion/command-index.js.map +0 -1
  846. package/dist/modes/companion/command-index.test.d.ts +0 -2
  847. package/dist/modes/companion/command-index.test.d.ts.map +0 -1
  848. package/dist/modes/companion/command-index.test.js +0 -86
  849. package/dist/modes/companion/command-index.test.js.map +0 -1
  850. package/dist/modes/companion/companion-app.d.ts +0 -12
  851. package/dist/modes/companion/companion-app.d.ts.map +0 -1
  852. package/dist/modes/companion/companion-app.js +0 -297
  853. package/dist/modes/companion/companion-app.js.map +0 -1
  854. package/dist/modes/companion/companion-session.d.ts +0 -63
  855. package/dist/modes/companion/companion-session.d.ts.map +0 -1
  856. package/dist/modes/companion/companion-session.js +0 -146
  857. package/dist/modes/companion/companion-session.js.map +0 -1
  858. package/dist/modes/companion/companion-session.test.d.ts +0 -2
  859. package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
  860. package/dist/modes/companion/companion-session.test.js +0 -28
  861. package/dist/modes/companion/companion-session.test.js.map +0 -1
  862. package/dist/modes/companion/components/status-bar.d.ts +0 -13
  863. package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
  864. package/dist/modes/companion/components/status-bar.js +0 -26
  865. package/dist/modes/companion/components/status-bar.js.map +0 -1
  866. package/dist/modes/companion/context-buffer.d.ts +0 -65
  867. package/dist/modes/companion/context-buffer.d.ts.map +0 -1
  868. package/dist/modes/companion/context-buffer.js +0 -156
  869. package/dist/modes/companion/context-buffer.js.map +0 -1
  870. package/dist/modes/companion/context-buffer.test.d.ts +0 -2
  871. package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
  872. package/dist/modes/companion/context-buffer.test.js +0 -154
  873. package/dist/modes/companion/context-buffer.test.js.map +0 -1
  874. package/dist/modes/companion/event-detector.d.ts +0 -46
  875. package/dist/modes/companion/event-detector.d.ts.map +0 -1
  876. package/dist/modes/companion/event-detector.js +0 -169
  877. package/dist/modes/companion/event-detector.js.map +0 -1
  878. package/dist/modes/companion/event-detector.test.d.ts +0 -2
  879. package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
  880. package/dist/modes/companion/event-detector.test.js +0 -121
  881. package/dist/modes/companion/event-detector.test.js.map +0 -1
  882. package/dist/modes/companion/index.d.ts +0 -33
  883. package/dist/modes/companion/index.d.ts.map +0 -1
  884. package/dist/modes/companion/index.js +0 -21
  885. package/dist/modes/companion/index.js.map +0 -1
  886. package/dist/modes/companion/input-key-mapper.d.ts +0 -3
  887. package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
  888. package/dist/modes/companion/input-key-mapper.js +0 -31
  889. package/dist/modes/companion/input-key-mapper.js.map +0 -1
  890. package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
  891. package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
  892. package/dist/modes/companion/input-key-mapper.test.js +0 -26
  893. package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
  894. package/dist/modes/companion/input-parser.d.ts +0 -53
  895. package/dist/modes/companion/input-parser.d.ts.map +0 -1
  896. package/dist/modes/companion/input-parser.js +0 -114
  897. package/dist/modes/companion/input-parser.js.map +0 -1
  898. package/dist/modes/companion/input-parser.test.d.ts +0 -2
  899. package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
  900. package/dist/modes/companion/input-parser.test.js +0 -123
  901. package/dist/modes/companion/input-parser.test.js.map +0 -1
  902. package/dist/modes/companion/mode-manager.d.ts +0 -41
  903. package/dist/modes/companion/mode-manager.d.ts.map +0 -1
  904. package/dist/modes/companion/mode-manager.js +0 -56
  905. package/dist/modes/companion/mode-manager.js.map +0 -1
  906. package/dist/modes/companion/mode-manager.test.d.ts +0 -2
  907. package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
  908. package/dist/modes/companion/mode-manager.test.js +0 -65
  909. package/dist/modes/companion/mode-manager.test.js.map +0 -1
  910. package/dist/modes/companion/output-classifier.d.ts +0 -15
  911. package/dist/modes/companion/output-classifier.d.ts.map +0 -1
  912. package/dist/modes/companion/output-classifier.js +0 -77
  913. package/dist/modes/companion/output-classifier.js.map +0 -1
  914. package/dist/modes/companion/output-classifier.test.d.ts +0 -2
  915. package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
  916. package/dist/modes/companion/output-classifier.test.js +0 -133
  917. package/dist/modes/companion/output-classifier.test.js.map +0 -1
  918. package/dist/modes/companion/pty-wrapper.d.ts +0 -46
  919. package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
  920. package/dist/modes/companion/pty-wrapper.js +0 -143
  921. package/dist/modes/companion/pty-wrapper.js.map +0 -1
  922. package/dist/modes/companion/safety-classifier.d.ts +0 -31
  923. package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
  924. package/dist/modes/companion/safety-classifier.js +0 -140
  925. package/dist/modes/companion/safety-classifier.js.map +0 -1
  926. package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
  927. package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
  928. package/dist/modes/companion/safety-classifier.test.js +0 -151
  929. package/dist/modes/companion/safety-classifier.test.js.map +0 -1
  930. package/dist/modes/companion/summarizer.d.ts +0 -24
  931. package/dist/modes/companion/summarizer.d.ts.map +0 -1
  932. package/dist/modes/companion/summarizer.js +0 -132
  933. package/dist/modes/companion/summarizer.js.map +0 -1
  934. package/dist/modes/companion/terminal-history.d.ts +0 -27
  935. package/dist/modes/companion/terminal-history.d.ts.map +0 -1
  936. package/dist/modes/companion/terminal-history.js +0 -142
  937. package/dist/modes/companion/terminal-history.js.map +0 -1
  938. package/dist/prompts/simple-mentor.md +0 -215
  939. package/dist/providers/ai-sdk-openai.provider.d.ts +0 -14
  940. package/dist/providers/ai-sdk-openai.provider.d.ts.map +0 -1
  941. package/dist/providers/ai-sdk-openai.provider.js +0 -18
  942. package/dist/providers/ai-sdk-openai.provider.js.map +0 -1
  943. package/dist/providers/github-copilot/converters.d.ts +0 -45
  944. package/dist/providers/github-copilot/converters.d.ts.map +0 -1
  945. package/dist/providers/github-copilot/converters.js +0 -118
  946. package/dist/providers/github-copilot/converters.js.map +0 -1
  947. package/dist/providers/github-copilot/converters.test.d.ts +0 -2
  948. package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
  949. package/dist/providers/github-copilot/converters.test.js +0 -162
  950. package/dist/providers/github-copilot/converters.test.js.map +0 -1
  951. package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
  952. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
  953. package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
  954. package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
  955. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
  956. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
  957. package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
  958. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
  959. package/dist/providers/github-copilot/index.d.ts +0 -4
  960. package/dist/providers/github-copilot/index.d.ts.map +0 -1
  961. package/dist/providers/github-copilot/index.js +0 -4
  962. package/dist/providers/github-copilot/index.js.map +0 -1
  963. package/dist/providers/github-copilot/model.d.ts +0 -24
  964. package/dist/providers/github-copilot/model.d.ts.map +0 -1
  965. package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
  966. package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
  967. package/dist/providers/github-copilot/model.delta.test.js +0 -15
  968. package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
  969. package/dist/providers/github-copilot/model.js +0 -498
  970. package/dist/providers/github-copilot/model.js.map +0 -1
  971. package/dist/providers/github-copilot/model.test.d.ts +0 -2
  972. package/dist/providers/github-copilot/model.test.d.ts.map +0 -1
  973. package/dist/providers/github-copilot/model.test.js +0 -63
  974. package/dist/providers/github-copilot/model.test.js.map +0 -1
  975. package/dist/providers/github-copilot/provider.d.ts +0 -15
  976. package/dist/providers/github-copilot/provider.d.ts.map +0 -1
  977. package/dist/providers/github-copilot/provider.js +0 -25
  978. package/dist/providers/github-copilot/provider.js.map +0 -1
  979. package/dist/providers/github-copilot/provider.test.d.ts +0 -2
  980. package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
  981. package/dist/providers/github-copilot/provider.test.js +0 -52
  982. package/dist/providers/github-copilot/provider.test.js.map +0 -1
  983. package/dist/providers/github-copilot/utils.d.ts +0 -20
  984. package/dist/providers/github-copilot/utils.d.ts.map +0 -1
  985. package/dist/providers/github-copilot/utils.js +0 -142
  986. package/dist/providers/github-copilot/utils.js.map +0 -1
  987. package/dist/providers/github-copilot/utils.test.d.ts +0 -2
  988. package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
  989. package/dist/providers/github-copilot/utils.test.js +0 -21
  990. package/dist/providers/github-copilot/utils.test.js.map +0 -1
  991. package/dist/providers/openai-compatible/api.d.ts +0 -17
  992. package/dist/providers/openai-compatible/api.d.ts.map +0 -1
  993. package/dist/providers/openai-compatible/api.js +0 -58
  994. package/dist/providers/openai-compatible/api.js.map +0 -1
  995. package/dist/providers/openai-compatible/model.d.ts +0 -17
  996. package/dist/providers/openai-compatible/model.d.ts.map +0 -1
  997. package/dist/providers/openai-compatible/model.js +0 -473
  998. package/dist/providers/openai-compatible/model.js.map +0 -1
  999. package/dist/providers/openai-compatible/provider.d.ts +0 -22
  1000. package/dist/providers/openai-compatible/provider.d.ts.map +0 -1
  1001. package/dist/providers/openai-compatible/provider.js +0 -43
  1002. package/dist/providers/openai-compatible/provider.js.map +0 -1
  1003. package/dist/providers/openai-compatible/reasoning-content.test.d.ts +0 -2
  1004. package/dist/providers/openai-compatible/reasoning-content.test.d.ts.map +0 -1
  1005. package/dist/providers/openai-compatible/reasoning-content.test.js +0 -258
  1006. package/dist/providers/openai-compatible/reasoning-content.test.js.map +0 -1
  1007. package/dist/providers/openai-compatible/utils.d.ts +0 -3
  1008. package/dist/providers/openai-compatible/utils.d.ts.map +0 -1
  1009. package/dist/providers/openai-compatible/utils.js +0 -11
  1010. package/dist/providers/openai-compatible/utils.js.map +0 -1
  1011. package/dist/providers/openrouter/api.d.ts +0 -39
  1012. package/dist/providers/openrouter/api.d.ts.map +0 -1
  1013. package/dist/providers/openrouter/api.js +0 -164
  1014. package/dist/providers/openrouter/api.js.map +0 -1
  1015. package/dist/providers/openrouter/converters.d.ts +0 -8
  1016. package/dist/providers/openrouter/converters.d.ts.map +0 -1
  1017. package/dist/providers/openrouter/converters.js +0 -391
  1018. package/dist/providers/openrouter/converters.js.map +0 -1
  1019. package/dist/providers/openrouter/converters.test.d.ts +0 -2
  1020. package/dist/providers/openrouter/converters.test.d.ts.map +0 -1
  1021. package/dist/providers/openrouter/converters.test.js +0 -179
  1022. package/dist/providers/openrouter/converters.test.js.map +0 -1
  1023. package/dist/providers/openrouter/index.d.ts +0 -4
  1024. package/dist/providers/openrouter/index.d.ts.map +0 -1
  1025. package/dist/providers/openrouter/index.js +0 -4
  1026. package/dist/providers/openrouter/index.js.map +0 -1
  1027. package/dist/providers/openrouter/model.d.ts +0 -14
  1028. package/dist/providers/openrouter/model.d.ts.map +0 -1
  1029. package/dist/providers/openrouter/model.js +0 -457
  1030. package/dist/providers/openrouter/model.js.map +0 -1
  1031. package/dist/providers/openrouter/provider.d.ts +0 -15
  1032. package/dist/providers/openrouter/provider.d.ts.map +0 -1
  1033. package/dist/providers/openrouter/provider.js +0 -21
  1034. package/dist/providers/openrouter/provider.js.map +0 -1
  1035. package/dist/providers/openrouter/reasoning-content.test.d.ts +0 -2
  1036. package/dist/providers/openrouter/reasoning-content.test.d.ts.map +0 -1
  1037. package/dist/providers/openrouter/reasoning-content.test.js +0 -122
  1038. package/dist/providers/openrouter/reasoning-content.test.js.map +0 -1
  1039. package/dist/providers/openrouter/utils.d.ts +0 -11
  1040. package/dist/providers/openrouter/utils.d.ts.map +0 -1
  1041. package/dist/providers/openrouter/utils.js +0 -29
  1042. package/dist/providers/openrouter/utils.js.map +0 -1
  1043. package/dist/providers/openrouter.api.retry.test.d.ts +0 -2
  1044. package/dist/providers/openrouter.api.retry.test.d.ts.map +0 -1
  1045. package/dist/providers/openrouter.api.retry.test.js +0 -148
  1046. package/dist/providers/openrouter.api.retry.test.js.map +0 -1
  1047. package/dist/providers/openrouter.test.d.ts +0 -2
  1048. package/dist/providers/openrouter.test.d.ts.map +0 -1
  1049. package/dist/providers/openrouter.test.js +0 -1449
  1050. package/dist/providers/openrouter.test.js.map +0 -1
  1051. package/dist/providers/protocol-client.d.ts +0 -17
  1052. package/dist/providers/protocol-client.d.ts.map +0 -1
  1053. package/dist/providers/protocol-client.js +0 -57
  1054. package/dist/providers/protocol-client.js.map +0 -1
  1055. package/dist/providers/protocol-client.test.d.ts +0 -2
  1056. package/dist/providers/protocol-client.test.d.ts.map +0 -1
  1057. package/dist/providers/protocol-client.test.js +0 -55
  1058. package/dist/providers/protocol-client.test.js.map +0 -1
  1059. package/dist/safety-checker.js +0 -57
  1060. package/dist/services/check_mock.d.ts +0 -2
  1061. package/dist/services/check_mock.d.ts.map +0 -1
  1062. package/dist/services/check_mock.js +0 -22
  1063. package/dist/services/check_mock.js.map +0 -1
  1064. package/dist/services/conversation-store.merge-modes.removed.d.ts +0 -2
  1065. package/dist/services/conversation-store.merge-modes.removed.d.ts.map +0 -1
  1066. package/dist/services/conversation-store.merge-modes.removed.js +0 -2
  1067. package/dist/services/conversation-store.merge-modes.removed.js.map +0 -1
  1068. package/dist/services/repro-error.test.d.ts +0 -2
  1069. package/dist/services/repro-error.test.d.ts.map +0 -1
  1070. package/dist/services/repro-error.test.js +0 -38
  1071. package/dist/services/repro-error.test.js.map +0 -1
  1072. package/dist/services/subagents/reasoning-inheritance.test.d.ts +0 -2
  1073. package/dist/services/subagents/reasoning-inheritance.test.d.ts.map +0 -1
  1074. package/dist/services/subagents/reasoning-inheritance.test.js +0 -73
  1075. package/dist/services/subagents/reasoning-inheritance.test.js.map +0 -1
  1076. package/dist/services/subagents/subagent-manager-abort-state.test.d.ts +0 -2
  1077. package/dist/services/subagents/subagent-manager-abort-state.test.d.ts.map +0 -1
  1078. package/dist/services/subagents/subagent-manager-abort-state.test.js +0 -36
  1079. package/dist/services/subagents/subagent-manager-abort-state.test.js.map +0 -1
  1080. package/dist/services/subagents/subagent-manager-abort.test.d.ts +0 -2
  1081. package/dist/services/subagents/subagent-manager-abort.test.d.ts.map +0 -1
  1082. package/dist/services/subagents/subagent-manager-abort.test.js +0 -3
  1083. package/dist/services/subagents/subagent-manager-abort.test.js.map +0 -1
  1084. package/dist/tools/bash.d.ts +0 -10
  1085. package/dist/tools/bash.d.ts.map +0 -1
  1086. package/dist/tools/bash.js +0 -55
  1087. package/dist/tools/bash.js.map +0 -1
  1088. package/dist/utils/command-safety/handlers/script-handler.d.ts +0 -3
  1089. package/dist/utils/command-safety/handlers/script-handler.d.ts.map +0 -1
  1090. package/dist/utils/command-safety/handlers/script-handler.js +0 -92
  1091. package/dist/utils/command-safety/handlers/script-handler.js.map +0 -1
  1092. package/dist/utils/command-safety/handlers/script-handler.test.d.ts +0 -2
  1093. package/dist/utils/command-safety/handlers/script-handler.test.d.ts.map +0 -1
  1094. package/dist/utils/command-safety/handlers/script-handler.test.js +0 -44
  1095. package/dist/utils/command-safety/handlers/script-handler.test.js.map +0 -1
  1096. package/dist/utils/command-safety/index.test.d.ts +0 -2
  1097. package/dist/utils/command-safety/index.test.d.ts.map +0 -1
  1098. package/dist/utils/command-safety/index.test.js +0 -22
  1099. package/dist/utils/command-safety/index.test.js.map +0 -1
  1100. package/dist/utils/command-safety.d.ts +0 -21
  1101. package/dist/utils/command-safety.d.ts.map +0 -1
  1102. package/dist/utils/command-safety.devnull.test.d.ts +0 -2
  1103. package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
  1104. package/dist/utils/command-safety.devnull.test.js +0 -13
  1105. package/dist/utils/command-safety.devnull.test.js.map +0 -1
  1106. package/dist/utils/command-safety.js +0 -348
  1107. package/dist/utils/command-safety.js.map +0 -1
  1108. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +0 -2
  1109. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +0 -1
  1110. package/dist/utils/provider-traffic-extractor.repro.test.js.map +0 -1
  1111. /package/dist/components/{input → Input}/input-width.test.d.ts +0 -0
  1112. /package/dist/components/{input → Input}/input-width.test.d.ts.map +0 -0
  1113. /package/dist/components/{input → Input}/input-width.test.js +0 -0
  1114. /package/dist/components/{input → Input}/input-width.test.js.map +0 -0
  1115. /package/dist/components/{input → Input}/insertions.test.d.ts +0 -0
  1116. /package/dist/components/{input → Input}/insertions.test.d.ts.map +0 -0
  1117. /package/dist/components/{input → Input}/insertions.test.js +0 -0
  1118. /package/dist/components/{input → Input}/insertions.test.js.map +0 -0
@@ -1,25 +1,12 @@
1
1
  import { useCallback, useEffect, useReducer, useRef } from 'react';
2
- import { describeError, isAbortLikeError } from '../utils/error-helpers.js';
3
- import { ASK_USER_DECLINE_RESULT } from '../tools/agent/ask-user-constants.js';
4
- import { createMessageId } from './message-id.js';
5
- import { countUndoableUserTurnsFrom, findLastUndoableUserMessage, trimTrailingAssistantMessages, } from '../utils/conversation/message-utils.js';
6
- import { clearStreamingBotMessage, computeNextMessages } from '../utils/conversation/apply-conversation-result.js';
7
2
  import { useConversationMessages } from './use-conversation-messages.js';
8
3
  import { useConversationSettings } from './use-conversation-settings.js';
9
- import { enhanceApiKeyError, isMaxTurnsError } from '../utils/conversation/conversation-utils.js';
10
- import { createStreamingSession } from '../utils/streaming/streaming-session-factory.js';
11
- import { isBotMessage, isUserMessage } from '../types/message.js';
12
- import { isDeniedReadApproveAnswer } from '../contracts/conversation.js';
13
4
  import { useSetting } from './use-setting.js';
14
- import { annotateApprovedCommandMessage, filterPendingCommandMessagesForApproval, } from '../services/approval/approval-presentation-policy.js';
15
- import { formatUserTurnForDisplay, hasUserTurnContent, injectSkillIntoTurn, normalizeUserTurn, } from '../types/user-turn.js';
5
+ import { ConversationOrchestrator } from '../services/conversation/conversation-orchestrator.js';
6
+ import { normalizeApprovalDecision, routeConversationTurnSubmission, } from '../services/conversation/conversation-input-routing.js';
7
+ import { isBotMessage } from '../types/message.js';
16
8
  import { conversationUIReducer, createInitialUIState, getConversationUIFlags } from './conversation-ui-reducer.js';
17
- const REASONING_RESPONSE_THROTTLE_MS = 200;
18
9
  const MAX_MESSAGE_COUNT = 300;
19
- const clearsThinkingIndicator = (eventType) => eventType === 'text_delta' ||
20
- eventType === 'tool_started' ||
21
- eventType === 'tool_call_streaming_delta' ||
22
- eventType === 'final';
23
10
  const getInitialLastUsage = (messages) => {
24
11
  for (let i = messages.length - 1; i >= 0; i--) {
25
12
  const message = messages[i];
@@ -37,7 +24,7 @@ const dummySettingsService = {
37
24
  get: () => 'openai',
38
25
  onChange: () => () => { },
39
26
  };
40
- export const useConversation = ({ conversationService, loggingService, usageAccumulator, subagentUsageAccumulator, initialMessages = [], sessionId, onClear, settingsService, onRestoreInput, logWriter, notifier, }) => {
27
+ export const useConversation = ({ conversationService, loggingService, usageAccumulator, subagentUsageAccumulator, initialMessages = [], sessionId, onClear, settingsService, replaceInput, onRestoreInput, logWriter, notifier, }) => {
41
28
  const { messages, setMessages, trimMessages, appendMessages, addSystemMessage, addShellMessage, getUserMessages } = useConversationMessages({
42
29
  initialMessages,
43
30
  maxMessageCount: MAX_MESSAGE_COUNT,
@@ -47,530 +34,120 @@ export const useConversation = ({ conversationService, loggingService, usageAccu
47
34
  });
48
35
  const [uiState, dispatch] = useReducer(conversationUIReducer, initialMessages, (init) => createInitialUIState(getInitialLastUsage(init)));
49
36
  const { thinkingStartedAt, toolCallStreamingInfo, lastUsage, lastCodexRateLimit } = uiState;
50
- const { isProcessing, waitingForApproval, waitingForRejectionReason, waitingForAskUserAnswer, askUserAnswers, currentAskUserQuestionIndex, pendingApproval, } = getConversationUIFlags(uiState);
37
+ const { isProcessing, waitingForApproval, waitingForRejectionReason, waitingForAskUserAnswer, currentAskUserQuestionIndex, pendingApproval, } = getConversationUIFlags(uiState);
51
38
  const approvedContextRef = useRef(null);
52
- // Use a ref to keep askUserAnswers current for the handleApprovalDecision callback
53
- // This fixes the stale closure bug in multi-question ask_user flows
54
- const askUserAnswersRef = useRef(askUserAnswers);
55
- useEffect(() => {
56
- askUserAnswersRef.current = askUserAnswers;
57
- }, [askUserAnswers]);
58
39
  const provider = useSetting(settingsService || dummySettingsService, 'agent.provider') ?? 'openai';
59
40
  useEffect(() => {
60
41
  dispatch({ type: 'rate_limit/cleared' });
61
42
  }, [provider]);
62
- const annotateCommandMessage = useCallback((cmdMsg) => {
63
- const approvedMessage = annotateApprovedCommandMessage(cmdMsg, approvedContextRef.current);
64
- const matchedByToolName = approvedMessage !== cmdMsg &&
65
- !approvedContextRef.current?.callId &&
66
- Boolean(approvedContextRef.current?.toolName) &&
67
- approvedContextRef.current?.toolName === cmdMsg.toolName;
68
- if (matchedByToolName) {
69
- approvedContextRef.current = null;
70
- }
71
- return approvedMessage;
72
- }, []);
73
- const createOnEventWithSubagentTracking = useCallback((baseOnEvent) => {
74
- return (event) => {
75
- const eventType = typeof event?.type === 'string' ? event.type : undefined;
76
- if (eventType === 'reasoning_delta') {
77
- dispatch({ type: 'streaming/thinking_started', timestamp: Date.now() });
78
- }
79
- else if (eventType && clearsThinkingIndicator(eventType)) {
80
- dispatch({ type: 'streaming/thinking_cleared' });
81
- }
82
- if (eventType === 'tool_call_streaming_delta') {
83
- dispatch({
84
- type: 'streaming/tool_info',
85
- info: { toolName: event.toolName, argumentCharCount: event.argumentCharCount },
86
- });
87
- }
88
- else if (eventType === 'tool_started' || eventType === 'text_delta' || eventType === 'final') {
89
- dispatch({ type: 'streaming/tool_info', info: null });
90
- }
91
- baseOnEvent(event);
92
- if (subagentUsageAccumulator && event?.type === 'subagent_completed' && event?.result?.usage) {
93
- subagentUsageAccumulator.add(event.result.usage);
94
- }
95
- };
96
- }, [subagentUsageAccumulator]);
97
- const applyServiceResult = useCallback((result, streamingState, latestStreamedUsage) => {
98
- if (!result) {
99
- return;
100
- }
101
- if (result.type === 'approval_required') {
102
- if (result.usage) {
103
- // result.usage here is the run-cumulative usage *so far* for a run
104
- // that is still in progress (paused for approval). The terminal
105
- // `response` result will carry the full run-cumulative usage once
106
- // the run completes, so accumulating here would double-count the
107
- // pre-approval turns. Only update the live footer.
108
- dispatch({ type: 'usage/updated', usage: latestStreamedUsage ?? result.usage });
109
- }
110
- // Don't also show the transient pending/running command message.
111
- setMessages((prev) => trimMessages(filterPendingCommandMessagesForApproval(prev, result.approval)));
112
- dispatch({
113
- type: 'approval/requested',
114
- approval: { ...result.approval, llmAdvisory: result.approval.llmAdvisory },
115
- });
116
- notifier?.approvalNeeded();
117
- return;
118
- }
119
- // Apply the response result via the pure helper. The helper finalizes
120
- // the live streaming bot message in place when one exists, instead of
121
- // appending a duplicate finalized copy. This prevents the assistant's
122
- // reply from rendering twice when streaming text never crossed a safe
123
- // markdown boundary.
124
- setMessages((prev) => computeNextMessages({
125
- prev,
126
- result,
127
- streamingState,
128
- createMessageId,
129
- trimMessages,
130
- annotateCommandMessage,
131
- }).next);
132
- if (result.type === 'response' && streamingState.currentBotMessageId !== null) {
133
- clearStreamingBotMessage(streamingState);
134
- }
135
- dispatch({ type: 'approval/resolved' });
136
- notifier?.turnComplete();
137
- if (result.usage) {
138
- usageAccumulator?.add(result.usage);
139
- dispatch({ type: 'usage/updated', usage: latestStreamedUsage ?? result.usage });
140
- }
141
- }, [annotateCommandMessage, trimMessages, usageAccumulator, notifier, setMessages]);
142
- const createTurnSession = useCallback((label) => createStreamingSession({
143
- appendMessages,
144
- setMessages,
145
- trimMessages,
146
- annotateCommandMessage,
147
- loggingService,
148
- setLastUsage: (usage) => dispatch({ type: 'usage/updated', usage }),
149
- setCodexRateLimit: (rateLimit) => dispatch({ type: 'rate_limit/updated', rateLimit }),
150
- reasoningThrottleMs: REASONING_RESPONSE_THROTTLE_MS,
151
- }, label), [appendMessages, setMessages, trimMessages, annotateCommandMessage, loggingService]);
152
- const sendUserMessage = useCallback(async (input, options) => {
153
- const turn = normalizeUserTurn(input);
154
- if (!hasUserTurnContent(turn)) {
155
- return;
156
- }
157
- const userMessage = {
158
- id: createMessageId(),
159
- sender: 'user',
160
- text: formatUserTurnForDisplay(turn),
161
- ...(turn.skill ? { skill: turn.skill } : {}),
162
- };
163
- appendMessages([userMessage]);
164
- logWriter?.append({ type: 'user_message', message: userMessage });
165
- dispatch({ type: 'turn/started' });
166
- const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = createTurnSession('sendUserMessage');
167
- const wrappedOnEvent = (event) => {
168
- if (event?.type === 'user_message_consumed_for_abort') {
169
- setMessages((prev) => {
170
- for (let i = prev.length - 1; i >= 0; i--) {
171
- const msg = prev[i];
172
- if (isUserMessage(msg)) {
173
- if (msg.consumedForAbort)
174
- return prev;
175
- const next = prev.slice();
176
- next[i] = { ...msg, consumedForAbort: true };
177
- return next;
178
- }
179
- }
180
- return prev;
181
- });
182
- return;
183
- }
184
- applyConversationEvent(event);
185
- };
186
- try {
187
- // Inject skill content into the turn text before sending to AI
188
- const turnToSend = turn.skill ? injectSkillIntoTurn(turn) : turn;
189
- const result = await conversationService.sendMessage(turnToSend, {
190
- onEvent: createOnEventWithSubagentTracking(wrappedOnEvent),
191
- bypassInputSurgeGuard: options?.bypassInputSurgeGuard,
192
- });
193
- applyConversationEvent({ type: 'final', finalText: '' });
194
- // Flush any throttled bot update so the streaming message reflects the
195
- // last delta before we decide whether to finalize it in place.
196
- botResponseUpdater.flush();
197
- applyServiceResult(result, streamingState, streamingState.latestUsage);
198
- }
199
- catch (error) {
200
- loggingService.error('Error in sendUserMessage', {
201
- error: error instanceof Error ? error.message : String(error),
202
- stack: error instanceof Error ? error.stack : undefined,
203
- ...(error instanceof Error && error.eventKind ? { eventKind: error.eventKind } : {}),
204
- });
205
- // Don't show error messages for user-initiated aborts
206
- if (isAbortLikeError(error)) {
207
- loggingService.debug('Suppressing abort error in sendUserMessage');
208
- // The finally block will handle cleanup
209
- return;
210
- }
211
- const rawErrorMessage = describeError(error);
212
- const errorMessage = enhanceApiKeyError(rawErrorMessage);
213
- // If the session dropped the user turn from the store as part of this
214
- // error, mirror that in the UI: remove the trailing user message and
215
- // restore its text to the input box for editing/retry.
216
- const dropped = error?.rawEvent?.droppedUserMessage;
217
- if (dropped) {
218
- setMessages((prev) => {
219
- for (let i = prev.length - 1; i >= 0; i--) {
220
- if (prev[i].sender === 'user') {
221
- return prev.slice(0, i);
222
- }
223
- }
224
- return prev;
225
- });
226
- onRestoreInput?.(dropped.text);
227
- }
228
- if (isMaxTurnsError(errorMessage)) {
229
- // Create an approval prompt for max turns continuation
230
- dispatch({
231
- type: 'approval/requested',
232
- approval: {
233
- agentName: 'System',
234
- toolName: 'max_turns_exceeded',
235
- argumentsText: errorMessage,
236
- rawInterruption: null,
237
- isMaxTurnsPrompt: true,
238
- },
239
- });
240
- }
241
- else {
242
- // For other errors, just show the error message
243
- const botErrorMessage = {
244
- id: createMessageId(),
245
- sender: 'bot',
246
- status: 'finalized',
247
- text: `Error: ${errorMessage}`,
248
- };
249
- appendMessages([botErrorMessage]);
250
- // Reset approval state on error to allow user to continue
251
- dispatch({ type: 'approval/resolved' });
252
- }
253
- }
254
- finally {
255
- loggingService.debug('sendUserMessage finally block - resetting state');
256
- // flushLog();
257
- reasoningUpdater.flush();
258
- botResponseUpdater.cancel();
259
- dispatch({ type: 'turn/completed' });
260
- // Don't reset waitingForApproval here - it's set by applyServiceResult
261
- // and should only be cleared by handleApprovalDecision or stopProcessing
262
- }
263
- }, [
264
- conversationService,
265
- applyServiceResult,
266
- appendMessages,
267
- loggingService,
268
- createOnEventWithSubagentTracking,
269
- onRestoreInput,
270
- createTurnSession,
271
- logWriter,
272
- setMessages,
273
- ]);
274
- const handleApprovalDecision = useCallback(async (answer, rejectionReason, approvalAnswer) => {
275
- if (!waitingForApproval || !pendingApproval) {
276
- return;
277
- }
278
- // Check if this is a max turns exceeded prompt
279
- const isMaxTurnsPrompt = pendingApproval.isMaxTurnsPrompt;
280
- const isAskUser = pendingApproval.toolName === 'ask_user';
281
- if (isAskUser && answer === 'y' && approvalAnswer !== ASK_USER_DECLINE_RESULT) {
282
- // Parse questions
283
- let questions = [];
284
- try {
285
- const parsed = JSON.parse(pendingApproval.argumentsText);
286
- questions = parsed.questions || [];
287
- }
288
- catch {
289
- // noop
290
- }
291
- // Only JSON-parse multi-select arrays; single-select answers are plain strings
292
- let parsedAns = approvalAnswer ?? '';
293
- const currentQuestion = questions[askUserAnswersRef.current.length];
294
- if (currentQuestion?.is_multi_select) {
295
- try {
296
- const maybeArray = JSON.parse(approvalAnswer ?? '');
297
- if (Array.isArray(maybeArray)) {
298
- parsedAns = maybeArray;
299
- }
300
- }
301
- catch {
302
- // Not JSON — keep as plain string
303
- }
304
- }
305
- const nextAnswers = [...askUserAnswersRef.current, parsedAns];
306
- if (nextAnswers.length < questions.length) {
307
- // More questions to answer!
308
- dispatch({ type: 'ask_user/answer_submitted', answer: parsedAns });
309
- dispatch({ type: 'ask_user/advance_to_next', nextIndex: nextAnswers.length });
310
- return;
311
- }
312
- // All questions answered — dispatch final answer to complete the ask_user sequence
313
- dispatch({ type: 'ask_user/answer_submitted', answer: parsedAns });
314
- approvalAnswer = JSON.stringify(nextAnswers);
315
- }
316
- if (answer === 'y' || isDeniedReadApproveAnswer(answer)) {
317
- approvedContextRef.current = {
318
- callId: pendingApproval.callId,
319
- toolName: pendingApproval.toolName,
320
- };
321
- }
322
- dispatch({ type: 'approval/resolved' });
323
- // Handle "n" answer for max turns - return to input
324
- if (isMaxTurnsPrompt && answer === 'n') {
325
- dispatch({ type: 'turn/completed' });
43
+ useEffect(() => {
44
+ if (typeof conversationService.setRetryCallback !== 'function') {
326
45
  return;
327
46
  }
328
- // Handle "y" answer for max turns - continue execution automatically
329
- if (isMaxTurnsPrompt && answer === 'y') {
330
- dispatch({ type: 'turn/started' });
331
- const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = createTurnSession('maxTurnsContinuation');
332
- try {
333
- // Send a continuation message to resume work
334
- const continuationMessage = 'Please continue with your previous task.';
335
- const result = await conversationService.sendMessage(continuationMessage, {
336
- onEvent: createOnEventWithSubagentTracking(applyConversationEvent),
337
- });
338
- applyConversationEvent({ type: 'final', finalText: '' });
339
- applyServiceResult(result, streamingState, streamingState.latestUsage);
340
- }
341
- catch (error) {
342
- loggingService.error('Error in continuation after max turns', {
343
- error: error instanceof Error ? error.message : String(error),
344
- stack: error instanceof Error ? error.stack : undefined,
345
- });
346
- // Don't show error messages for user-initiated aborts
347
- if (isAbortLikeError(error)) {
348
- loggingService.debug('Suppressing abort error in max turns continuation');
349
- // The finally block will handle cleanup
350
- return;
351
- }
352
- const errorMessage = error instanceof Error ? error.message : String(error);
353
- const botErrorMessage = {
354
- id: createMessageId(),
355
- sender: 'bot',
356
- status: 'finalized',
357
- text: `Error: ${errorMessage}`,
358
- };
359
- appendMessages([botErrorMessage]);
360
- dispatch({ type: 'approval/resolved' });
361
- }
362
- finally {
363
- // flushLog();
364
- reasoningUpdater.flush();
365
- botResponseUpdater.cancel();
366
- dispatch({ type: 'turn/completed' });
367
- }
47
+ conversationService.setRetryCallback(() => addSystemMessage('Retrying due to upstream error...'));
48
+ }, [conversationService, addSystemMessage]);
49
+ // ── Orchestrator instantiation (lazy, once) ─────────────────────────────
50
+ const messagesRef = useRef(messages);
51
+ messagesRef.current = messages;
52
+ const orchestratorRef = useRef(null);
53
+ if (!orchestratorRef.current) {
54
+ orchestratorRef.current = new ConversationOrchestrator({
55
+ conversationService,
56
+ loggingService,
57
+ messages: {
58
+ getMessages: () => messagesRef.current,
59
+ setMessages,
60
+ appendMessages,
61
+ trimMessages,
62
+ },
63
+ ui: {
64
+ onTurnStart: () => dispatch({ type: 'turn/started' }),
65
+ onTurnEnd: () => dispatch({ type: 'turn/completed' }),
66
+ onApprovalRequested: (approval) => dispatch({ type: 'approval/requested', approval }),
67
+ onApprovalResolved: () => dispatch({ type: 'approval/resolved' }),
68
+ onUsageUpdate: (usage) => dispatch({ type: 'usage/updated', usage }),
69
+ onRateLimitUpdate: (rateLimit) => dispatch({ type: 'rate_limit/updated', rateLimit }),
70
+ onRateLimitClear: () => dispatch({ type: 'rate_limit/cleared' }),
71
+ onResetTransient: () => dispatch({ type: 'reset_transient' }),
72
+ onResetAll: () => dispatch({ type: 'reset_all' }),
73
+ onStreamingThinkingStarted: (timestamp) => dispatch({ type: 'streaming/thinking_started', timestamp }),
74
+ onStreamingThinkingCleared: () => dispatch({ type: 'streaming/thinking_cleared' }),
75
+ onStreamingToolInfo: (info) => dispatch({ type: 'streaming/tool_info', info }),
76
+ onAskUserAnswerSubmitted: (answer) => dispatch({ type: 'ask_user/answer_submitted', answer }),
77
+ onAskUserAdvanceToNext: (nextIndex) => dispatch({ type: 'ask_user/advance_to_next', nextIndex }),
78
+ onAskUserGoBack: (_currentIndex, _answers) => dispatch({ type: 'ask_user/go_back' }),
79
+ },
80
+ approvedContext: approvedContextRef,
81
+ usageAccumulator,
82
+ subagentUsageAccumulator,
83
+ notifier,
84
+ onRestoreInput,
85
+ onClear,
86
+ logWriter,
87
+ });
88
+ }
89
+ const orchestrator = orchestratorRef.current;
90
+ // Keep mutable config in sync across renders.
91
+ useEffect(() => {
92
+ orchestrator.updateCallbacks({ onRestoreInput, onClear });
93
+ }, [orchestrator, onRestoreInput, onClear]);
94
+ // ── Public API — all orchestration delegates to the orchestrator ─────────
95
+ const sendUserMessage = useCallback((input, options) => orchestrator.sendUserMessage(input, options), [orchestrator]);
96
+ const handleApprovalDecision = useCallback((answer, rejectionReason, approvalAnswer) => orchestrator.handleApprovalDecision(answer, rejectionReason, approvalAnswer), [orchestrator]);
97
+ const clearConversation = useCallback(() => orchestrator.clearConversation(), [orchestrator]);
98
+ const stopProcessing = useCallback(() => orchestrator.stopProcessing(), [orchestrator]);
99
+ const stopProcessingWithNotice = useCallback(() => {
100
+ stopProcessing();
101
+ addSystemMessage('Stopped');
102
+ }, [stopProcessing, addSystemMessage]);
103
+ const undoLastUserMessage = useCallback(() => orchestrator.undoLastUserMessage(), [orchestrator]);
104
+ const retryLastToolOutput = useCallback(() => orchestrator.retryLastToolOutput(), [orchestrator]);
105
+ const undoToUserMessage = useCallback((uiIndex) => orchestrator.undoToUserMessage(uiIndex), [orchestrator]);
106
+ const getSubagentUsage = useCallback(() => orchestrator.getSubagentUsage(), [orchestrator]);
107
+ const goToPreviousQuestion = useCallback(() => orchestrator.goToPreviousQuestion(), [orchestrator]);
108
+ const goToNextQuestion = useCallback(() => orchestrator.goToNextQuestion(), [orchestrator]);
109
+ const submitApprovalDecision = useCallback(async (answer) => {
110
+ const normalized = normalizeApprovalDecision(answer);
111
+ if (normalized.approvalAnswer !== undefined) {
112
+ replaceInput?.('');
113
+ await handleApprovalDecision(normalized.answer, undefined, normalized.approvalAnswer);
368
114
  return;
369
115
  }
370
- dispatch({ type: 'turn/started' });
371
- const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = createTurnSession('approvalDecision');
372
- try {
373
- const result = await conversationService.handleApprovalDecision(answer, rejectionReason, {
374
- onEvent: createOnEventWithSubagentTracking(applyConversationEvent),
375
- approvalAnswer,
376
- });
377
- applyConversationEvent({ type: 'final', finalText: '' });
378
- // Flush any throttled bot update so the streaming message reflects the
379
- // last delta before we decide whether to finalize it in place.
380
- botResponseUpdater.flush();
381
- applyServiceResult(result, streamingState, streamingState.latestUsage);
116
+ await handleApprovalDecision(normalized.answer);
117
+ }, [handleApprovalDecision, replaceInput]);
118
+ const submitConversationTurn = useCallback(async (turn) => {
119
+ const route = routeConversationTurnSubmission({
120
+ text: turn.text,
121
+ waitingForAskUserAnswer,
122
+ waitingForRejectionReason,
123
+ waitingForApproval,
124
+ });
125
+ if (route.kind === 'blocked') {
126
+ return true;
382
127
  }
383
- catch (error) {
384
- loggingService.error('Error in handleApprovalDecision', {
385
- error: error instanceof Error ? error.message : String(error),
386
- stack: error instanceof Error ? error.stack : undefined,
387
- });
388
- // Don't show error messages for user-initiated aborts
389
- if (isAbortLikeError(error)) {
390
- loggingService.debug('Suppressing abort error in handleApprovalDecision');
391
- // The finally block will handle cleanup
392
- return;
393
- }
394
- const errorMessage = error instanceof Error ? error.message : String(error);
395
- const botErrorMessage = {
396
- id: createMessageId(),
397
- sender: 'bot',
398
- status: 'finalized',
399
- text: `Error: ${errorMessage}`,
400
- };
401
- appendMessages([botErrorMessage]);
402
- // Reset approval state on error to allow user to continue
403
- dispatch({ type: 'approval/resolved' });
128
+ if (route.kind === 'approval_answer') {
129
+ replaceInput?.('');
130
+ await handleApprovalDecision(route.answer, undefined, route.approvalAnswer);
131
+ return true;
404
132
  }
405
- finally {
406
- loggingService.debug('handleApprovalDecision finally block - resetting state');
407
- reasoningUpdater.flush();
408
- botResponseUpdater.cancel();
409
- dispatch({ type: 'turn/completed' });
410
- // Don't reset approval state here - if the result is another approval_required,
411
- // applyServiceResult will set waitingForApproval=true, but this finally block
412
- // would immediately clear it, causing the input box to reappear
133
+ if (route.kind === 'rejection_reason') {
134
+ replaceInput?.('');
135
+ await handleApprovalDecision('n', route.reason);
136
+ return true;
413
137
  }
414
- }, [
415
- applyServiceResult,
416
- conversationService,
417
- waitingForApproval,
418
- pendingApproval,
419
- appendMessages,
420
- loggingService,
421
- createOnEventWithSubagentTracking,
422
- createTurnSession,
423
- ]);
138
+ return false;
139
+ }, [handleApprovalDecision, replaceInput, waitingForApproval, waitingForAskUserAnswer, waitingForRejectionReason]);
140
+ // ── Compatibility wrappers (pure UI state, no orchestration) ────────────
424
141
  const onTypeAnswer = useCallback(() => {
425
142
  dispatch({ type: 'ask_user/set_waiting' });
426
143
  }, []);
427
- const clearConversation = useCallback(async () => {
428
- if (onClear) {
429
- await onClear();
430
- }
431
- else {
432
- conversationService.resetWithNewId(crypto.randomUUID());
433
- }
434
- setMessages([]);
435
- approvedContextRef.current = null;
436
- dispatch({ type: 'reset_all' });
437
- usageAccumulator?.reset();
438
- subagentUsageAccumulator?.reset();
439
- }, [conversationService, usageAccumulator, subagentUsageAccumulator, onClear, setMessages]);
440
- const stopProcessing = useCallback(() => {
441
- conversationService.abort();
442
- approvedContextRef.current = null;
443
- dispatch({ type: 'reset_transient' });
444
- }, [conversationService]);
445
- const undoLastUserMessage = useCallback(() => {
446
- const lastUserIndex = findLastUndoableUserMessage(messages);
447
- if (lastUserIndex === -1) {
448
- return null;
449
- }
450
- const lastUserMessage = messages[lastUserIndex];
451
- const uiText = isUserMessage(lastUserMessage) ? lastUserMessage.text : '';
452
- conversationService.abort();
453
- const removed = conversationService.undoLastUserTurn();
454
- const restored = removed ?? { text: uiText };
455
- setMessages((prev) => prev.slice(0, lastUserIndex));
456
- approvedContextRef.current = null;
457
- dispatch({ type: 'reset_transient' });
458
- return restored;
459
- }, [messages, conversationService, setMessages]);
460
- const retryLastToolOutput = useCallback(async () => {
461
- conversationService.abort();
462
- approvedContextRef.current = null;
463
- dispatch({ type: 'reset_transient' });
464
- if (!conversationService.peekLastToolOutput()) {
465
- return false;
466
- }
467
- setMessages((prev) => trimTrailingAssistantMessages(prev));
468
- dispatch({ type: 'turn/started' });
469
- const { botResponseUpdater, reasoningUpdater, applyConversationEvent, streamingState } = createTurnSession('retryLastToolOutput');
470
- const wrappedOnEvent = (event) => {
471
- if (event?.type === 'user_message_consumed_for_abort') {
472
- setMessages((prev) => {
473
- for (let i = prev.length - 1; i >= 0; i--) {
474
- const msg = prev[i];
475
- if (isUserMessage(msg)) {
476
- if (msg.consumedForAbort)
477
- return prev;
478
- const next = prev.slice();
479
- next[i] = { ...msg, consumedForAbort: true };
480
- return next;
481
- }
482
- }
483
- return prev;
484
- });
485
- return;
486
- }
487
- applyConversationEvent(event);
488
- };
489
- try {
490
- const result = await conversationService.retryLastToolOutput({
491
- onEvent: createOnEventWithSubagentTracking(wrappedOnEvent),
492
- });
493
- if (!result) {
494
- return false;
495
- }
496
- applyConversationEvent({ type: 'final', finalText: '' });
497
- botResponseUpdater.flush();
498
- applyServiceResult(result, streamingState, streamingState.latestUsage);
499
- return true;
500
- }
501
- catch (error) {
502
- loggingService.error('Error in retryLastToolOutput', {
503
- error: error instanceof Error ? error.message : String(error),
504
- stack: error instanceof Error ? error.stack : undefined,
505
- ...(error instanceof Error && error.eventKind ? { eventKind: error.eventKind } : {}),
506
- });
507
- if (isAbortLikeError(error)) {
508
- loggingService.debug('Suppressing abort error in retryLastToolOutput');
509
- return true;
510
- }
511
- const errorMessage = enhanceApiKeyError(describeError(error));
512
- const botErrorMessage = {
513
- id: createMessageId(),
514
- sender: 'bot',
515
- status: 'finalized',
516
- text: `Error: ${errorMessage}`,
517
- };
518
- appendMessages([botErrorMessage]);
519
- dispatch({ type: 'approval/resolved' });
520
- return true;
521
- }
522
- finally {
523
- loggingService.debug('retryLastToolOutput finally block - resetting state');
524
- reasoningUpdater.flush();
525
- botResponseUpdater.cancel();
526
- dispatch({ type: 'turn/completed' });
527
- }
528
- }, [
529
- appendMessages,
530
- applyServiceResult,
531
- conversationService,
532
- createOnEventWithSubagentTracking,
533
- createTurnSession,
534
- loggingService,
535
- setMessages,
536
- ]);
537
- const undoToUserMessage = useCallback((uiIndex) => {
538
- // Count how many genuine user turns (excluding abort-consumed messages) are
539
- // at or after this index — that's what the store needs to roll back.
540
- const undoCount = countUndoableUserTurnsFrom(messages, uiIndex);
541
- if (undoCount === 0)
542
- return null;
543
- const selectedMessage = messages[uiIndex];
544
- const uiText = isUserMessage(selectedMessage) ? selectedMessage.text : '';
545
- conversationService.abort();
546
- const removed = conversationService.undoNUserTurns(undoCount);
547
- const restored = removed?.text ?? uiText;
548
- setMessages((prev) => prev.slice(0, uiIndex));
549
- approvedContextRef.current = null;
550
- dispatch({ type: 'reset_transient' });
551
- return restored;
552
- }, [messages, conversationService, setMessages]);
553
- // Compatibility wrappers for app.tsx — these dispatch domain actions.
554
144
  const setWaitingForRejectionReason = useCallback((value) => {
555
145
  dispatch({ type: value ? 'rejection/set_waiting' : 'rejection/cleared' });
556
146
  }, []);
557
147
  const setWaitingForAskUserAnswer = useCallback((value) => {
558
148
  dispatch({ type: value ? 'ask_user/set_waiting' : 'ask_user/clear_waiting' });
559
149
  }, []);
560
- const goToPreviousQuestion = useCallback(() => {
561
- if (currentAskUserQuestionIndex > 0) {
562
- dispatch({
563
- type: 'ask_user/go_back',
564
- });
565
- }
566
- }, [currentAskUserQuestionIndex]);
567
- const goToNextQuestion = useCallback(() => {
568
- dispatch({
569
- type: 'ask_user/advance_to_next',
570
- nextIndex: currentAskUserQuestionIndex + 1,
571
- });
572
- }, [currentAskUserQuestionIndex]);
573
- const getSubagentUsage = useCallback(() => subagentUsageAccumulator?.get() ?? null, [subagentUsageAccumulator]);
150
+ // ── Return object (identical shape to the old monolith) ─────────────────
574
151
  return {
575
152
  messages,
576
153
  sessionId: sessionId ?? conversationService.sessionId,
@@ -587,10 +164,12 @@ export const useConversation = ({ conversationService, loggingService, usageAccu
587
164
  thinkingStartedAt,
588
165
  toolCallStreamingInfo,
589
166
  sendUserMessage,
167
+ submitConversationTurn,
168
+ submitApprovalDecision,
590
169
  handleApprovalDecision,
591
170
  onTypeAnswer,
592
171
  clearConversation,
593
- stopProcessing,
172
+ stopProcessing: stopProcessingWithNotice,
594
173
  undoLastUserMessage,
595
174
  retryLastToolOutput,
596
175
  getUserMessages,