@qduc/term2 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (903) hide show
  1. package/dist/agent.d.ts +2 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +17 -7
  4. package/dist/agent.js.map +1 -1
  5. package/dist/app-helpers.d.ts +4 -0
  6. package/dist/app-helpers.d.ts.map +1 -1
  7. package/dist/app-helpers.js +6 -0
  8. package/dist/app-helpers.js.map +1 -1
  9. package/dist/app.d.ts +1 -1
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +141 -13
  12. package/dist/app.js.map +1 -1
  13. package/dist/cli.js +112 -28
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/auto-approve-command.js +3 -3
  16. package/dist/commands/auto-approve-command.js.map +1 -1
  17. package/dist/commands/guarded-settings-command.d.ts +3 -1
  18. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  19. package/dist/commands/guarded-settings-command.js +21 -5
  20. package/dist/commands/guarded-settings-command.js.map +1 -1
  21. package/dist/commands/mode-commands.d.ts +9 -2
  22. package/dist/commands/mode-commands.d.ts.map +1 -1
  23. package/dist/commands/mode-commands.js +12 -3
  24. package/dist/commands/mode-commands.js.map +1 -1
  25. package/dist/commands/usage-command.d.ts +10 -1
  26. package/dist/commands/usage-command.d.ts.map +1 -1
  27. package/dist/commands/usage-command.js +11 -1
  28. package/dist/commands/usage-command.js.map +1 -1
  29. package/dist/components/InputBox.js +14 -1
  30. package/dist/components/InputBox.js.map +1 -1
  31. package/dist/components/input/FirstRunSetupPrompt.js +1 -1
  32. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  33. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  34. package/dist/components/input/PendingQueueList.js +22 -5
  35. package/dist/components/input/PendingQueueList.js.map +1 -1
  36. package/dist/components/input/ProviderMenuSession.d.ts.map +1 -1
  37. package/dist/components/input/ProviderMenuSession.js +1 -0
  38. package/dist/components/input/ProviderMenuSession.js.map +1 -1
  39. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  40. package/dist/components/input/SettingsValueMenuSession.js +6 -0
  41. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  42. package/dist/components/layout/BackgroundTaskManager.d.ts +2 -0
  43. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  44. package/dist/components/layout/BackgroundTaskManager.js +156 -64
  45. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  46. package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -1
  47. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  48. package/dist/components/layout/BackgroundTasksPanel.js +193 -59
  49. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  50. package/dist/components/layout/BottomArea.d.ts +11 -1
  51. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  52. package/dist/components/layout/BottomArea.js +30 -13
  53. package/dist/components/layout/BottomArea.js.map +1 -1
  54. package/dist/components/layout/StatusBar.d.ts +5 -0
  55. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  56. package/dist/components/layout/StatusBar.js +45 -3
  57. package/dist/components/layout/StatusBar.js.map +1 -1
  58. package/dist/components/layout/live-task-rows.d.ts +16 -0
  59. package/dist/components/layout/live-task-rows.d.ts.map +1 -0
  60. package/dist/components/layout/live-task-rows.js +28 -0
  61. package/dist/components/layout/live-task-rows.js.map +1 -0
  62. package/dist/components/layout/terminal-text-budget.d.ts +4 -0
  63. package/dist/components/layout/terminal-text-budget.d.ts.map +1 -0
  64. package/dist/components/layout/terminal-text-budget.js +18 -0
  65. package/dist/components/layout/terminal-text-budget.js.map +1 -0
  66. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/menu/ModelSelectionMenu.js +18 -5
  68. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  69. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  70. package/dist/components/menu/ProviderSelectionMenu.js +27 -2
  71. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  72. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  73. package/dist/components/menu/SettingsSelectionMenu.js +5 -0
  74. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  75. package/dist/components/message/CommandGroupSummary.d.ts +9 -0
  76. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -0
  77. package/dist/components/message/CommandGroupSummary.js +31 -0
  78. package/dist/components/message/CommandGroupSummary.js.map +1 -0
  79. package/dist/components/message/CommandMessage.d.ts +8 -0
  80. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  81. package/dist/components/message/CommandMessage.js +54 -25
  82. package/dist/components/message/CommandMessage.js.map +1 -1
  83. package/dist/components/message/MessageList.d.ts +6 -2
  84. package/dist/components/message/MessageList.d.ts.map +1 -1
  85. package/dist/components/message/MessageList.js +64 -10
  86. package/dist/components/message/MessageList.js.map +1 -1
  87. package/dist/components/message/SubagentActivityMessage.js +4 -2
  88. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  89. package/dist/components/message/command-grouping.d.ts +43 -0
  90. package/dist/components/message/command-grouping.d.ts.map +1 -0
  91. package/dist/components/message/command-grouping.js +142 -0
  92. package/dist/components/message/command-grouping.js.map +1 -0
  93. package/dist/components/message/command-message-helpers.d.ts +6 -5
  94. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  95. package/dist/components/message/command-message-helpers.js +36 -0
  96. package/dist/components/message/command-message-helpers.js.map +1 -1
  97. package/dist/components/prompt/ApprovalPrompt.d.ts +1 -1
  98. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  99. package/dist/components/prompt/ApprovalPrompt.js +136 -90
  100. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  101. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts +11 -0
  102. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -0
  103. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +50 -0
  104. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -0
  105. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  106. package/dist/components/prompt/QueuePausedPrompt.js +14 -8
  107. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  108. package/dist/contracts/application-stream.d.ts +7 -0
  109. package/dist/contracts/application-stream.d.ts.map +1 -1
  110. package/dist/contracts/conversation.d.ts +24 -1
  111. package/dist/contracts/conversation.d.ts.map +1 -1
  112. package/dist/contracts/conversation.js +8 -0
  113. package/dist/contracts/conversation.js.map +1 -1
  114. package/dist/contracts/streamed-model-turn.d.ts +22 -1
  115. package/dist/contracts/streamed-model-turn.d.ts.map +1 -1
  116. package/dist/core/index.d.ts +9 -0
  117. package/dist/core/index.d.ts.map +1 -0
  118. package/dist/core/index.js +8 -0
  119. package/dist/core/index.js.map +1 -0
  120. package/dist/core/session-runtime.d.ts +10 -0
  121. package/dist/core/session-runtime.d.ts.map +1 -0
  122. package/dist/core/session-runtime.js +9 -0
  123. package/dist/core/session-runtime.js.map +1 -0
  124. package/dist/gateway/assertion.d.ts +38 -0
  125. package/dist/gateway/assertion.d.ts.map +1 -0
  126. package/dist/gateway/assertion.js +146 -0
  127. package/dist/gateway/assertion.js.map +1 -0
  128. package/dist/gateway/contracts.d.ts +124 -0
  129. package/dist/gateway/contracts.d.ts.map +1 -0
  130. package/dist/gateway/contracts.js +13 -0
  131. package/dist/gateway/contracts.js.map +1 -0
  132. package/dist/gateway/gateway.d.ts +72 -0
  133. package/dist/gateway/gateway.d.ts.map +1 -0
  134. package/dist/gateway/gateway.js +1277 -0
  135. package/dist/gateway/gateway.js.map +1 -0
  136. package/dist/gateway/index.d.ts +22 -0
  137. package/dist/gateway/index.d.ts.map +1 -0
  138. package/dist/gateway/index.js +22 -0
  139. package/dist/gateway/index.js.map +1 -0
  140. package/dist/gateway/interaction-protocol.d.ts +76 -0
  141. package/dist/gateway/interaction-protocol.d.ts.map +1 -0
  142. package/dist/gateway/interaction-protocol.js +548 -0
  143. package/dist/gateway/interaction-protocol.js.map +1 -0
  144. package/dist/gateway/launcher.d.ts +8 -0
  145. package/dist/gateway/launcher.d.ts.map +1 -0
  146. package/dist/gateway/launcher.js +20 -0
  147. package/dist/gateway/launcher.js.map +1 -0
  148. package/dist/gateway/lifecycle.d.ts +12 -0
  149. package/dist/gateway/lifecycle.d.ts.map +1 -0
  150. package/dist/gateway/lifecycle.js +38 -0
  151. package/dist/gateway/lifecycle.js.map +1 -0
  152. package/dist/gateway/persistence/admission-persistence.d.ts +82 -0
  153. package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -0
  154. package/dist/gateway/persistence/admission-persistence.js +215 -0
  155. package/dist/gateway/persistence/admission-persistence.js.map +1 -0
  156. package/dist/gateway/persistence/contracts.d.ts +94 -0
  157. package/dist/gateway/persistence/contracts.d.ts.map +1 -0
  158. package/dist/gateway/persistence/contracts.js +32 -0
  159. package/dist/gateway/persistence/contracts.js.map +1 -0
  160. package/dist/gateway/persistence/coordinator.d.ts +25 -0
  161. package/dist/gateway/persistence/coordinator.d.ts.map +1 -0
  162. package/dist/gateway/persistence/coordinator.js +181 -0
  163. package/dist/gateway/persistence/coordinator.js.map +1 -0
  164. package/dist/gateway/persistence/event-journal.d.ts +31 -0
  165. package/dist/gateway/persistence/event-journal.d.ts.map +1 -0
  166. package/dist/gateway/persistence/event-journal.js +378 -0
  167. package/dist/gateway/persistence/event-journal.js.map +1 -0
  168. package/dist/gateway/persistence/interaction-checkpoint.d.ts +17 -0
  169. package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -0
  170. package/dist/gateway/persistence/interaction-checkpoint.js +75 -0
  171. package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -0
  172. package/dist/gateway/persistence/projection.d.ts +53 -0
  173. package/dist/gateway/persistence/projection.d.ts.map +1 -0
  174. package/dist/gateway/persistence/projection.js +226 -0
  175. package/dist/gateway/persistence/projection.js.map +1 -0
  176. package/dist/gateway/persistence/retention.d.ts +16 -0
  177. package/dist/gateway/persistence/retention.d.ts.map +1 -0
  178. package/dist/gateway/persistence/retention.js +93 -0
  179. package/dist/gateway/persistence/retention.js.map +1 -0
  180. package/dist/gateway/persistence/session-index.d.ts +34 -0
  181. package/dist/gateway/persistence/session-index.d.ts.map +1 -0
  182. package/dist/gateway/persistence/session-index.js +348 -0
  183. package/dist/gateway/persistence/session-index.js.map +1 -0
  184. package/dist/gateway/persistence/session-persistence.d.ts +68 -0
  185. package/dist/gateway/persistence/session-persistence.d.ts.map +1 -0
  186. package/dist/gateway/persistence/session-persistence.js +165 -0
  187. package/dist/gateway/persistence/session-persistence.js.map +1 -0
  188. package/dist/gateway/persistence/storage.d.ts +13 -0
  189. package/dist/gateway/persistence/storage.d.ts.map +1 -0
  190. package/dist/gateway/persistence/storage.js +87 -0
  191. package/dist/gateway/persistence/storage.js.map +1 -0
  192. package/dist/gateway/replay-ledger.d.ts +30 -0
  193. package/dist/gateway/replay-ledger.d.ts.map +1 -0
  194. package/dist/gateway/replay-ledger.js +83 -0
  195. package/dist/gateway/replay-ledger.js.map +1 -0
  196. package/dist/gateway/runtime-factory.d.ts +84 -0
  197. package/dist/gateway/runtime-factory.d.ts.map +1 -0
  198. package/dist/gateway/runtime-factory.js +213 -0
  199. package/dist/gateway/runtime-factory.js.map +1 -0
  200. package/dist/gateway/safe-log.d.ts +15 -0
  201. package/dist/gateway/safe-log.d.ts.map +1 -0
  202. package/dist/gateway/safe-log.js +89 -0
  203. package/dist/gateway/safe-log.js.map +1 -0
  204. package/dist/gateway/server-session.d.ts +65 -0
  205. package/dist/gateway/server-session.d.ts.map +1 -0
  206. package/dist/gateway/server-session.js +252 -0
  207. package/dist/gateway/server-session.js.map +1 -0
  208. package/dist/gateway/server.d.ts +42 -0
  209. package/dist/gateway/server.d.ts.map +1 -0
  210. package/dist/gateway/server.js +126 -0
  211. package/dist/gateway/server.js.map +1 -0
  212. package/dist/gateway/worker-boundary.d.ts +40 -0
  213. package/dist/gateway/worker-boundary.d.ts.map +1 -0
  214. package/dist/gateway/worker-boundary.js +149 -0
  215. package/dist/gateway/worker-boundary.js.map +1 -0
  216. package/dist/gateway/workspace-admission.d.ts +37 -0
  217. package/dist/gateway/workspace-admission.d.ts.map +1 -0
  218. package/dist/gateway/workspace-admission.js +285 -0
  219. package/dist/gateway/workspace-admission.js.map +1 -0
  220. package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
  221. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  222. package/dist/hooks/conversation-ui-reducer.js +3 -0
  223. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  224. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  225. package/dist/hooks/settings-completion-config.js +30 -2
  226. package/dist/hooks/settings-completion-config.js.map +1 -1
  227. package/dist/hooks/use-app-commands.d.ts +4 -1
  228. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  229. package/dist/hooks/use-app-commands.js +14 -3
  230. package/dist/hooks/use-app-commands.js.map +1 -1
  231. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +5 -0
  232. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  233. package/dist/hooks/use-app-keyboard-shortcuts.js +11 -0
  234. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  235. package/dist/hooks/use-conversation.d.ts +1 -0
  236. package/dist/hooks/use-conversation.d.ts.map +1 -1
  237. package/dist/hooks/use-conversation.js +14 -3
  238. package/dist/hooks/use-conversation.js.map +1 -1
  239. package/dist/hooks/use-grok-credit-usage.d.ts +20 -0
  240. package/dist/hooks/use-grok-credit-usage.d.ts.map +1 -0
  241. package/dist/hooks/use-grok-credit-usage.js +48 -0
  242. package/dist/hooks/use-grok-credit-usage.js.map +1 -0
  243. package/dist/hooks/use-provider-selection.d.ts +10 -0
  244. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  245. package/dist/hooks/use-provider-selection.js +105 -6
  246. package/dist/hooks/use-provider-selection.js.map +1 -1
  247. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  248. package/dist/hooks/use-settings-value-completion.js +10 -2
  249. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  250. package/dist/lib/agent-client.d.ts +10 -3
  251. package/dist/lib/agent-client.d.ts.map +1 -1
  252. package/dist/lib/agent-client.js +115 -23
  253. package/dist/lib/agent-client.js.map +1 -1
  254. package/dist/lib/agent-configuration.d.ts +2 -0
  255. package/dist/lib/agent-configuration.d.ts.map +1 -1
  256. package/dist/lib/agent-configuration.js +6 -2
  257. package/dist/lib/agent-configuration.js.map +1 -1
  258. package/dist/lib/agent-factory.d.ts +2 -0
  259. package/dist/lib/agent-factory.d.ts.map +1 -1
  260. package/dist/lib/agent-factory.js +28 -10
  261. package/dist/lib/agent-factory.js.map +1 -1
  262. package/dist/lib/editor-impl.d.ts.map +1 -1
  263. package/dist/lib/editor-impl.js +14 -17
  264. package/dist/lib/editor-impl.js.map +1 -1
  265. package/dist/lib/harness-input-idle.d.ts +16 -0
  266. package/dist/lib/harness-input-idle.d.ts.map +1 -0
  267. package/dist/lib/harness-input-idle.js +51 -0
  268. package/dist/lib/harness-input-idle.js.map +1 -0
  269. package/dist/lib/input-owner.d.ts +3 -0
  270. package/dist/lib/input-owner.d.ts.map +1 -1
  271. package/dist/lib/input-owner.js +2 -0
  272. package/dist/lib/input-owner.js.map +1 -1
  273. package/dist/lib/subagent-bridge.d.ts +3 -3
  274. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  275. package/dist/lib/subagent-bridge.js +16 -9
  276. package/dist/lib/subagent-bridge.js.map +1 -1
  277. package/dist/lib/tool-invoke.d.ts +2 -0
  278. package/dist/lib/tool-invoke.d.ts.map +1 -1
  279. package/dist/lib/tool-invoke.js +3 -0
  280. package/dist/lib/tool-invoke.js.map +1 -1
  281. package/dist/non-interactive.d.ts.map +1 -1
  282. package/dist/non-interactive.js +5 -0
  283. package/dist/non-interactive.js.map +1 -1
  284. package/dist/prompts/explorer-delegation-contract.test.ts +22 -0
  285. package/dist/prompts/gpt-5.6.md +1 -1
  286. package/dist/prompts/kimi.md +1 -1
  287. package/dist/prompts/orchestrator.md +10 -1
  288. package/dist/prompts/plan-mode-info.md +3 -3
  289. package/dist/prompts/plan-mode-stub.md +7 -0
  290. package/dist/prompts/prefix-quality.test.ts +102 -0
  291. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  292. package/dist/prompts/prompt-constructor.js +4 -1
  293. package/dist/prompts/prompt-constructor.js.map +1 -1
  294. package/dist/prompts/prompt-constructor.test.ts +12 -4
  295. package/dist/prompts/prompt-constructor.ts +4 -1
  296. package/dist/prompts/subagents/explorer.md +7 -1
  297. package/dist/prompts/subagents/librarian.md +2 -0
  298. package/dist/prompts/subagents/mentor.md +2 -0
  299. package/dist/prompts/subagents/worker.md +2 -0
  300. package/dist/providers/ai-sdk-streamed-model.d.ts +5 -0
  301. package/dist/providers/ai-sdk-streamed-model.d.ts.map +1 -1
  302. package/dist/providers/ai-sdk-streamed-model.js +64 -1
  303. package/dist/providers/ai-sdk-streamed-model.js.map +1 -1
  304. package/dist/providers/chained-wire-state.d.ts +6 -0
  305. package/dist/providers/chained-wire-state.d.ts.map +1 -1
  306. package/dist/providers/chained-wire-state.js +1 -3
  307. package/dist/providers/chained-wire-state.js.map +1 -1
  308. package/dist/providers/codex-auth.d.ts +73 -2
  309. package/dist/providers/codex-auth.d.ts.map +1 -1
  310. package/dist/providers/codex-auth.js +166 -2
  311. package/dist/providers/codex-auth.js.map +1 -1
  312. package/dist/providers/codex-responses-model.d.ts +3 -0
  313. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  314. package/dist/providers/codex-responses-model.js +295 -162
  315. package/dist/providers/codex-responses-model.js.map +1 -1
  316. package/dist/providers/codex-turn-converter.d.ts.map +1 -1
  317. package/dist/providers/codex-turn-converter.js +7 -1
  318. package/dist/providers/codex-turn-converter.js.map +1 -1
  319. package/dist/providers/codex.provider.d.ts +25 -2
  320. package/dist/providers/codex.provider.d.ts.map +1 -1
  321. package/dist/providers/codex.provider.js +83 -71
  322. package/dist/providers/codex.provider.js.map +1 -1
  323. package/dist/providers/common/provider-errors.d.ts +20 -0
  324. package/dist/providers/common/provider-errors.d.ts.map +1 -1
  325. package/dist/providers/common/provider-errors.js +35 -0
  326. package/dist/providers/common/provider-errors.js.map +1 -1
  327. package/dist/providers/grok-auth.d.ts +105 -0
  328. package/dist/providers/grok-auth.d.ts.map +1 -0
  329. package/dist/providers/grok-auth.js +316 -0
  330. package/dist/providers/grok-auth.js.map +1 -0
  331. package/dist/providers/grok-credit-usage.d.ts +53 -0
  332. package/dist/providers/grok-credit-usage.d.ts.map +1 -0
  333. package/dist/providers/grok-credit-usage.js +108 -0
  334. package/dist/providers/grok-credit-usage.js.map +1 -0
  335. package/dist/providers/grok.provider.d.ts +24 -0
  336. package/dist/providers/grok.provider.d.ts.map +1 -0
  337. package/dist/providers/grok.provider.js +153 -0
  338. package/dist/providers/grok.provider.js.map +1 -0
  339. package/dist/providers/index.d.ts +1 -0
  340. package/dist/providers/index.d.ts.map +1 -1
  341. package/dist/providers/index.js +1 -0
  342. package/dist/providers/index.js.map +1 -1
  343. package/dist/providers/jwt-claims.d.ts +12 -0
  344. package/dist/providers/jwt-claims.d.ts.map +1 -0
  345. package/dist/providers/jwt-claims.js +25 -0
  346. package/dist/providers/jwt-claims.js.map +1 -0
  347. package/dist/providers/luna-responses-lite-wire-protocol.d.ts +1 -0
  348. package/dist/providers/luna-responses-lite-wire-protocol.d.ts.map +1 -1
  349. package/dist/providers/luna-responses-lite-wire-protocol.js +19 -0
  350. package/dist/providers/luna-responses-lite-wire-protocol.js.map +1 -1
  351. package/dist/providers/model-catalog/catalog.generated.d.ts +360 -232
  352. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  353. package/dist/providers/model-catalog/catalog.generated.js +360 -232
  354. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  355. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
  356. package/dist/providers/model-catalog/generate-catalog.js +21 -1
  357. package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
  358. package/dist/providers/oauth-account-store.d.ts +84 -0
  359. package/dist/providers/oauth-account-store.d.ts.map +1 -0
  360. package/dist/providers/oauth-account-store.js +142 -0
  361. package/dist/providers/oauth-account-store.js.map +1 -0
  362. package/dist/providers/oauth-accounts.d.ts +24 -0
  363. package/dist/providers/oauth-accounts.d.ts.map +1 -0
  364. package/dist/providers/oauth-accounts.js +37 -0
  365. package/dist/providers/oauth-accounts.js.map +1 -0
  366. package/dist/providers/oauth-pkce.d.ts +53 -0
  367. package/dist/providers/oauth-pkce.d.ts.map +1 -0
  368. package/dist/providers/oauth-pkce.js +200 -0
  369. package/dist/providers/oauth-pkce.js.map +1 -0
  370. package/dist/providers/oauth-session-account.d.ts +5 -0
  371. package/dist/providers/oauth-session-account.d.ts.map +1 -0
  372. package/dist/providers/oauth-session-account.js +24 -0
  373. package/dist/providers/oauth-session-account.js.map +1 -0
  374. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  375. package/dist/providers/openai-chat-completions-model.js +37 -16
  376. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  377. package/dist/providers/openai-compatible-lazy.js.map +1 -1
  378. package/dist/providers/openai-compatible.provider.d.ts +5 -0
  379. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  380. package/dist/providers/openai-compatible.provider.js +32 -2
  381. package/dist/providers/openai-compatible.provider.js.map +1 -1
  382. package/dist/providers/openai-responses-model.d.ts +13 -3
  383. package/dist/providers/openai-responses-model.d.ts.map +1 -1
  384. package/dist/providers/openai-responses-model.js +92 -39
  385. package/dist/providers/openai-responses-model.js.map +1 -1
  386. package/dist/providers/openai.provider.d.ts.map +1 -1
  387. package/dist/providers/openai.provider.js +23 -2
  388. package/dist/providers/openai.provider.js.map +1 -1
  389. package/dist/providers/opencode-routing.d.ts +2 -0
  390. package/dist/providers/opencode-routing.d.ts.map +1 -1
  391. package/dist/providers/opencode-routing.js +12 -6
  392. package/dist/providers/opencode-routing.js.map +1 -1
  393. package/dist/providers/opencode-transport-discovery.d.ts +18 -0
  394. package/dist/providers/opencode-transport-discovery.d.ts.map +1 -0
  395. package/dist/providers/opencode-transport-discovery.js +115 -0
  396. package/dist/providers/opencode-transport-discovery.js.map +1 -0
  397. package/dist/providers/openrouter.provider.js.map +1 -1
  398. package/dist/providers/provider-opaque-compatibility.d.ts +58 -0
  399. package/dist/providers/provider-opaque-compatibility.d.ts.map +1 -0
  400. package/dist/providers/provider-opaque-compatibility.js +80 -0
  401. package/dist/providers/provider-opaque-compatibility.js.map +1 -0
  402. package/dist/providers/provider-service.d.ts +1 -1
  403. package/dist/providers/provider-service.d.ts.map +1 -1
  404. package/dist/providers/provider-service.js.map +1 -1
  405. package/dist/providers/registry.d.ts +10 -1
  406. package/dist/providers/registry.d.ts.map +1 -1
  407. package/dist/providers/registry.js.map +1 -1
  408. package/dist/providers/responses-websocket-sessions.d.ts +25 -0
  409. package/dist/providers/responses-websocket-sessions.d.ts.map +1 -0
  410. package/dist/providers/responses-websocket-sessions.js +102 -0
  411. package/dist/providers/responses-websocket-sessions.js.map +1 -0
  412. package/dist/providers/websocket-close-evidence.d.ts +45 -0
  413. package/dist/providers/websocket-close-evidence.d.ts.map +1 -0
  414. package/dist/providers/websocket-close-evidence.js +78 -0
  415. package/dist/providers/websocket-close-evidence.js.map +1 -0
  416. package/dist/providers/websocket-receive-watchdog.d.ts +9 -1
  417. package/dist/providers/websocket-receive-watchdog.d.ts.map +1 -1
  418. package/dist/providers/websocket-receive-watchdog.js +27 -1
  419. package/dist/providers/websocket-receive-watchdog.js.map +1 -1
  420. package/dist/providers/websocket-request-dispatch.d.ts +35 -0
  421. package/dist/providers/websocket-request-dispatch.d.ts.map +1 -0
  422. package/dist/providers/websocket-request-dispatch.js +23 -0
  423. package/dist/providers/websocket-request-dispatch.js.map +1 -0
  424. package/dist/scripts/eval-context-compaction/runner.js +1 -1
  425. package/dist/scripts/eval-context-compaction/runner.js.map +1 -1
  426. package/dist/services/agent-runtime/agent-handle.d.ts.map +1 -1
  427. package/dist/services/agent-runtime/agent-handle.js +8 -5
  428. package/dist/services/agent-runtime/agent-handle.js.map +1 -1
  429. package/dist/services/agent-runtime/agent-runtime.d.ts +1 -1
  430. package/dist/services/agent-runtime/agent-runtime.js +1 -1
  431. package/dist/services/agent-runtime/application-run-loop.d.ts +33 -9
  432. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  433. package/dist/services/agent-runtime/application-run-loop.js +300 -87
  434. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  435. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +6 -1
  436. package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
  437. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +72 -4
  438. package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
  439. package/dist/services/agent-runtime/executor.d.ts +1 -1
  440. package/dist/services/agent-runtime/executor.d.ts.map +1 -1
  441. package/dist/services/agent-runtime/executor.js +5 -5
  442. package/dist/services/agent-runtime/executor.js.map +1 -1
  443. package/dist/services/agent-runtime/generation-guard.d.ts +2 -1
  444. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  445. package/dist/services/agent-runtime/generation-guard.js +7 -2
  446. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  447. package/dist/services/agent-runtime/run-budget.d.ts +131 -0
  448. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -0
  449. package/dist/services/agent-runtime/run-budget.js +268 -0
  450. package/dist/services/agent-runtime/run-budget.js.map +1 -0
  451. package/dist/services/agent-runtime/tool-invocation-context.d.ts +12 -0
  452. package/dist/services/agent-runtime/tool-invocation-context.d.ts.map +1 -1
  453. package/dist/services/agent-runtime/tool-invocation-context.js.map +1 -1
  454. package/dist/services/agent-runtime/types.d.ts +5 -4
  455. package/dist/services/agent-runtime/types.d.ts.map +1 -1
  456. package/dist/services/agent-stream.d.ts.map +1 -1
  457. package/dist/services/agent-stream.js +2 -1
  458. package/dist/services/agent-stream.js.map +1 -1
  459. package/dist/services/approval/approval-decision-executor.d.ts +6 -1
  460. package/dist/services/approval/approval-decision-executor.d.ts.map +1 -1
  461. package/dist/services/approval/approval-decision-executor.js +15 -3
  462. package/dist/services/approval/approval-decision-executor.js.map +1 -1
  463. package/dist/services/approval/approval-decision-policy.d.ts.map +1 -1
  464. package/dist/services/approval/approval-decision-policy.js +3 -0
  465. package/dist/services/approval/approval-decision-policy.js.map +1 -1
  466. package/dist/services/approval/approval-flow-coordinator.d.ts +2 -0
  467. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  468. package/dist/services/approval/approval-flow-coordinator.js +14 -2
  469. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  470. package/dist/services/approval/background-subagent-approval-controller.d.ts +3 -1
  471. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
  472. package/dist/services/approval/background-subagent-approval-controller.js +7 -4
  473. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
  474. package/dist/services/approval/shell-auto-approval-resolver.d.ts +5 -0
  475. package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
  476. package/dist/services/approval/shell-auto-approval-resolver.js +8 -0
  477. package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
  478. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  479. package/dist/services/approval/tool-approval-batch-coordinator.js +20 -11
  480. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  481. package/dist/services/approval/tool-ownership-registry.d.ts +5 -1
  482. package/dist/services/approval/tool-ownership-registry.d.ts.map +1 -1
  483. package/dist/services/approval/tool-ownership-registry.js +5 -22
  484. package/dist/services/approval/tool-ownership-registry.js.map +1 -1
  485. package/dist/services/background-task-activity.d.ts +79 -0
  486. package/dist/services/background-task-activity.d.ts.map +1 -0
  487. package/dist/services/background-task-activity.js +34 -0
  488. package/dist/services/background-task-activity.js.map +1 -0
  489. package/dist/services/command-message-streaming.d.ts +4 -2
  490. package/dist/services/command-message-streaming.d.ts.map +1 -1
  491. package/dist/services/command-message-streaming.js +2 -2
  492. package/dist/services/command-message-streaming.js.map +1 -1
  493. package/dist/services/conversation/conversation-adapter-factory.d.ts +6 -2
  494. package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
  495. package/dist/services/conversation/conversation-adapter-factory.js +5 -1
  496. package/dist/services/conversation/conversation-adapter-factory.js.map +1 -1
  497. package/dist/services/conversation/conversation-adapter.d.ts +41 -9
  498. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  499. package/dist/services/conversation/conversation-adapter.js +218 -37
  500. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  501. package/dist/services/conversation/conversation-decoder.d.ts.map +1 -1
  502. package/dist/services/conversation/conversation-decoder.js +4 -0
  503. package/dist/services/conversation/conversation-decoder.js.map +1 -1
  504. package/dist/services/conversation/conversation-events.d.ts +55 -2
  505. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  506. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  507. package/dist/services/conversation/conversation-orchestrator.js +103 -11
  508. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  509. package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -0
  510. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  511. package/dist/services/conversation/conversation-persistence.d.ts +38 -2
  512. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  513. package/dist/services/conversation/conversation-persistence.js +160 -16
  514. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  515. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  516. package/dist/services/conversation/conversation-replay.js +27 -0
  517. package/dist/services/conversation/conversation-replay.js.map +1 -1
  518. package/dist/services/conversation/conversation-result-builder.d.ts +6 -2
  519. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  520. package/dist/services/conversation/conversation-result-builder.js +60 -1
  521. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  522. package/dist/services/conversation/conversation-runtime-factory.d.ts +9 -1
  523. package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
  524. package/dist/services/conversation/conversation-runtime-factory.js +5 -1
  525. package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
  526. package/dist/services/conversation/conversation-service.d.ts +32 -3
  527. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  528. package/dist/services/conversation/conversation-service.js +82 -8
  529. package/dist/services/conversation/conversation-service.js.map +1 -1
  530. package/dist/services/conversation/conversation-state-projector.d.ts +2 -1
  531. package/dist/services/conversation/conversation-state-projector.d.ts.map +1 -1
  532. package/dist/services/conversation/conversation-state-projector.js +31 -3
  533. package/dist/services/conversation/conversation-state-projector.js.map +1 -1
  534. package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
  535. package/dist/services/conversation/run-item-normalizer.js +24 -1
  536. package/dist/services/conversation/run-item-normalizer.js.map +1 -1
  537. package/dist/services/conversation-agent-client.d.ts +21 -2
  538. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  539. package/dist/services/cost/model-cost.d.ts +13 -1
  540. package/dist/services/cost/model-cost.d.ts.map +1 -1
  541. package/dist/services/cost/model-cost.js +59 -0
  542. package/dist/services/cost/model-cost.js.map +1 -1
  543. package/dist/services/cost/subscription-providers.d.ts +2 -0
  544. package/dist/services/cost/subscription-providers.d.ts.map +1 -0
  545. package/dist/services/cost/subscription-providers.js +14 -0
  546. package/dist/services/cost/subscription-providers.js.map +1 -0
  547. package/dist/services/grok/grok-credit-usage-service.d.ts +62 -0
  548. package/dist/services/grok/grok-credit-usage-service.d.ts.map +1 -0
  549. package/dist/services/grok/grok-credit-usage-service.js +137 -0
  550. package/dist/services/grok/grok-credit-usage-service.js.map +1 -0
  551. package/dist/services/history-service.d.ts +9 -0
  552. package/dist/services/history-service.d.ts.map +1 -1
  553. package/dist/services/history-service.js +49 -2
  554. package/dist/services/history-service.js.map +1 -1
  555. package/dist/services/hooks/hook-composition.d.ts +17 -0
  556. package/dist/services/hooks/hook-composition.d.ts.map +1 -0
  557. package/dist/services/hooks/hook-composition.js +19 -0
  558. package/dist/services/hooks/hook-composition.js.map +1 -0
  559. package/dist/services/logging/conversation-log-events.d.ts +35 -1
  560. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  561. package/dist/services/logging/conversation-log-events.js +17 -0
  562. package/dist/services/logging/conversation-log-events.js.map +1 -1
  563. package/dist/services/logging/conversation-log-writer.d.ts +8 -1
  564. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  565. package/dist/services/logging/conversation-log-writer.js +145 -10
  566. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  567. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  568. package/dist/services/logging/conversation-logger.js +18 -0
  569. package/dist/services/logging/conversation-logger.js.map +1 -1
  570. package/dist/services/logging/logging-service.d.ts +6 -6
  571. package/dist/services/logging/logging-service.d.ts.map +1 -1
  572. package/dist/services/logging/logging-service.js.map +1 -1
  573. package/dist/services/logging/provider-traffic.d.ts +17 -1
  574. package/dist/services/logging/provider-traffic.d.ts.map +1 -1
  575. package/dist/services/logging/provider-traffic.js +283 -139
  576. package/dist/services/logging/provider-traffic.js.map +1 -1
  577. package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
  578. package/dist/services/memory/memory-capabilities.js +20 -1
  579. package/dist/services/memory/memory-capabilities.js.map +1 -1
  580. package/dist/services/mode-notices.d.ts +1 -6
  581. package/dist/services/mode-notices.d.ts.map +1 -1
  582. package/dist/services/mode-notices.js +16 -3
  583. package/dist/services/mode-notices.js.map +1 -1
  584. package/dist/services/model-service.d.ts +2 -2
  585. package/dist/services/model-service.d.ts.map +1 -1
  586. package/dist/services/model-service.js.map +1 -1
  587. package/dist/services/queue/queue-controller.d.ts +1 -1
  588. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  589. package/dist/services/queue/queue-controller.js +19 -5
  590. package/dist/services/queue/queue-controller.js.map +1 -1
  591. package/dist/services/retry/chain-recovery-fingerprint.d.ts +10 -0
  592. package/dist/services/retry/chain-recovery-fingerprint.d.ts.map +1 -0
  593. package/dist/services/retry/chain-recovery-fingerprint.js +23 -0
  594. package/dist/services/retry/chain-recovery-fingerprint.js.map +1 -0
  595. package/dist/services/retry/recovery-executor.d.ts.map +1 -1
  596. package/dist/services/retry/recovery-executor.js +2 -0
  597. package/dist/services/retry/recovery-executor.js.map +1 -1
  598. package/dist/services/retry/recovery-policy.d.ts.map +1 -1
  599. package/dist/services/retry/recovery-policy.js +4 -0
  600. package/dist/services/retry/recovery-policy.js.map +1 -1
  601. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  602. package/dist/services/retry/retry-classifier.js +34 -2
  603. package/dist/services/retry/retry-classifier.js.map +1 -1
  604. package/dist/services/retry/retry-contracts.d.ts +14 -0
  605. package/dist/services/retry/retry-contracts.d.ts.map +1 -1
  606. package/dist/services/retry/retry-error-classification.d.ts +17 -3
  607. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  608. package/dist/services/retry/retry-error-classification.js +48 -7
  609. package/dist/services/retry/retry-error-classification.js.map +1 -1
  610. package/dist/services/retry/retry-errors.d.ts +4 -0
  611. package/dist/services/retry/retry-errors.d.ts.map +1 -1
  612. package/dist/services/retry/retry-errors.js +7 -0
  613. package/dist/services/retry/retry-errors.js.map +1 -1
  614. package/dist/services/retry/retry-event-presenter.d.ts.map +1 -1
  615. package/dist/services/retry/retry-event-presenter.js +20 -0
  616. package/dist/services/retry/retry-event-presenter.js.map +1 -1
  617. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  618. package/dist/services/runtime-setting-router.js +6 -0
  619. package/dist/services/runtime-setting-router.js.map +1 -1
  620. package/dist/services/service-interfaces.d.ts +96 -13
  621. package/dist/services/service-interfaces.d.ts.map +1 -1
  622. package/dist/services/session/background-task-control.d.ts +6 -0
  623. package/dist/services/session/background-task-control.d.ts.map +1 -1
  624. package/dist/services/session/background-task-control.js +31 -6
  625. package/dist/services/session/background-task-control.js.map +1 -1
  626. package/dist/services/session/background-task-liveness.d.ts +2 -18
  627. package/dist/services/session/background-task-liveness.d.ts.map +1 -1
  628. package/dist/services/session/background-task-liveness.js +7 -22
  629. package/dist/services/session/background-task-liveness.js.map +1 -1
  630. package/dist/services/session/continuation-plan-applier.d.ts.map +1 -1
  631. package/dist/services/session/continuation-plan-applier.js +23 -0
  632. package/dist/services/session/continuation-plan-applier.js.map +1 -1
  633. package/dist/services/session/continuation-recovery-handler.d.ts +2 -0
  634. package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
  635. package/dist/services/session/continuation-recovery-handler.js +7 -1
  636. package/dist/services/session/continuation-recovery-handler.js.map +1 -1
  637. package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -0
  638. package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
  639. package/dist/services/session/initial-turn-recovery-handler.js +12 -2
  640. package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
  641. package/dist/services/session/session-client-factory.d.ts +3 -1
  642. package/dist/services/session/session-client-factory.d.ts.map +1 -1
  643. package/dist/services/session/session-client-factory.js +2 -2
  644. package/dist/services/session/session-client-factory.js.map +1 -1
  645. package/dist/services/session/session-composition.d.ts +3 -0
  646. package/dist/services/session/session-composition.d.ts.map +1 -1
  647. package/dist/services/session/session-composition.js +52 -8
  648. package/dist/services/session/session-composition.js.map +1 -1
  649. package/dist/services/session/session-stream-processor.d.ts +2 -0
  650. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  651. package/dist/services/session/session-stream-processor.js +4 -0
  652. package/dist/services/session/session-stream-processor.js.map +1 -1
  653. package/dist/services/session/terminal-result-collector.d.ts +2 -2
  654. package/dist/services/session/terminal-result-collector.d.ts.map +1 -1
  655. package/dist/services/session/terminal-result-collector.js +2 -1
  656. package/dist/services/session/terminal-result-collector.js.map +1 -1
  657. package/dist/services/session/turn-attempt-factory.d.ts +1 -0
  658. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  659. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  660. package/dist/services/session/turn-coordinator.d.ts +1 -1
  661. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  662. package/dist/services/session/turn-coordinator.js +31 -6
  663. package/dist/services/session/turn-coordinator.js.map +1 -1
  664. package/dist/services/session/turn-workflow.d.ts +4 -1
  665. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  666. package/dist/services/session/turn-workflow.js +48 -7
  667. package/dist/services/session/turn-workflow.js.map +1 -1
  668. package/dist/services/settings/settings-persistence.d.ts +33 -0
  669. package/dist/services/settings/settings-persistence.d.ts.map +1 -1
  670. package/dist/services/settings/settings-persistence.js +102 -4
  671. package/dist/services/settings/settings-persistence.js.map +1 -1
  672. package/dist/services/settings/settings-schema.d.ts +70 -2
  673. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  674. package/dist/services/settings/settings-schema.js +92 -6
  675. package/dist/services/settings/settings-schema.js.map +1 -1
  676. package/dist/services/settings/settings-service.d.ts +57 -3
  677. package/dist/services/settings/settings-service.d.ts.map +1 -1
  678. package/dist/services/settings/settings-service.js +171 -28
  679. package/dist/services/settings/settings-service.js.map +1 -1
  680. package/dist/services/settings/settings-service.mock.d.ts +1 -1
  681. package/dist/services/settings/settings-service.mock.d.ts.map +1 -1
  682. package/dist/services/settings/settings-service.mock.js +3 -6
  683. package/dist/services/settings/settings-service.mock.js.map +1 -1
  684. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  685. package/dist/services/settings/settings-sources.js +16 -0
  686. package/dist/services/settings/settings-sources.js.map +1 -1
  687. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +27 -0
  688. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -0
  689. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +165 -0
  690. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -0
  691. package/dist/services/shell/background-shell-registry.d.ts +10 -0
  692. package/dist/services/shell/background-shell-registry.d.ts.map +1 -1
  693. package/dist/services/shell/background-shell-registry.js +9 -1
  694. package/dist/services/shell/background-shell-registry.js.map +1 -1
  695. package/dist/services/shell/background-shell-watches.d.ts +28 -3
  696. package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
  697. package/dist/services/shell/background-shell-watches.js +41 -9
  698. package/dist/services/shell/background-shell-watches.js.map +1 -1
  699. package/dist/services/ssh-service.d.ts +81 -9
  700. package/dist/services/ssh-service.d.ts.map +1 -1
  701. package/dist/services/ssh-service.js +211 -37
  702. package/dist/services/ssh-service.js.map +1 -1
  703. package/dist/services/stream-event-processor.d.ts +2 -0
  704. package/dist/services/stream-event-processor.d.ts.map +1 -1
  705. package/dist/services/stream-event-processor.js +17 -7
  706. package/dist/services/stream-event-processor.js.map +1 -1
  707. package/dist/services/subagents/execution-runner.d.ts +1 -1
  708. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  709. package/dist/services/subagents/execution-runner.js +34 -22
  710. package/dist/services/subagents/execution-runner.js.map +1 -1
  711. package/dist/services/subagents/foreground-subagent-lease.d.ts +11 -1
  712. package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
  713. package/dist/services/subagents/foreground-subagent-lease.js +10 -1
  714. package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
  715. package/dist/services/subagents/mentor-runner.d.ts +1 -1
  716. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  717. package/dist/services/subagents/mentor-runner.js +10 -3
  718. package/dist/services/subagents/mentor-runner.js.map +1 -1
  719. package/dist/services/subagents/nested-runner.d.ts +11 -1
  720. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  721. package/dist/services/subagents/nested-runner.js +45 -10
  722. package/dist/services/subagents/nested-runner.js.map +1 -1
  723. package/dist/services/subagents/runtime.d.ts.map +1 -1
  724. package/dist/services/subagents/runtime.js +7 -0
  725. package/dist/services/subagents/runtime.js.map +1 -1
  726. package/dist/services/subagents/subagent-async-registry.d.ts +4 -0
  727. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
  728. package/dist/services/subagents/subagent-async-registry.js +80 -16
  729. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  730. package/dist/services/subagents/subagent-manager.d.ts +1 -1
  731. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  732. package/dist/services/subagents/subagent-manager.js +4 -4
  733. package/dist/services/subagents/subagent-manager.js.map +1 -1
  734. package/dist/services/subagents/subagent-notification-store.d.ts +19 -1
  735. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  736. package/dist/services/subagents/subagent-notification-store.js +22 -0
  737. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  738. package/dist/services/subagents/subagent-run-control.d.ts +9 -1
  739. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
  740. package/dist/services/subagents/subagent-run-control.js +12 -13
  741. package/dist/services/subagents/subagent-run-control.js.map +1 -1
  742. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  743. package/dist/services/subagents/tool-policy.js +11 -3
  744. package/dist/services/subagents/tool-policy.js.map +1 -1
  745. package/dist/services/subagents/types.d.ts +25 -2
  746. package/dist/services/subagents/types.d.ts.map +1 -1
  747. package/dist/services/subagents/types.js.map +1 -1
  748. package/dist/services/subagents/utils.d.ts +3 -1
  749. package/dist/services/subagents/utils.d.ts.map +1 -1
  750. package/dist/services/subagents/utils.js +4 -2
  751. package/dist/services/subagents/utils.js.map +1 -1
  752. package/dist/services/workspace/active-workspace-root.d.ts +6 -0
  753. package/dist/services/workspace/active-workspace-root.d.ts.map +1 -1
  754. package/dist/services/workspace/active-workspace-root.js +22 -0
  755. package/dist/services/workspace/active-workspace-root.js.map +1 -1
  756. package/dist/test-helpers/ink-testing.d.ts.map +1 -1
  757. package/dist/test-helpers/ink-testing.js +4 -1
  758. package/dist/test-helpers/ink-testing.js.map +1 -1
  759. package/dist/test-helpers/terminal-e2e.d.ts.map +1 -1
  760. package/dist/test-helpers/terminal-e2e.js +12 -2
  761. package/dist/test-helpers/terminal-e2e.js.map +1 -1
  762. package/dist/tools/agent/activate-skill.d.ts.map +1 -1
  763. package/dist/tools/agent/activate-skill.js +2 -2
  764. package/dist/tools/agent/activate-skill.js.map +1 -1
  765. package/dist/tools/agent/ask-mentor.d.ts.map +1 -1
  766. package/dist/tools/agent/ask-mentor.js +2 -2
  767. package/dist/tools/agent/ask-mentor.js.map +1 -1
  768. package/dist/tools/agent/ask-user-constants.d.ts +2 -2
  769. package/dist/tools/agent/ask-user-constants.d.ts.map +1 -1
  770. package/dist/tools/agent/ask-user-constants.js +1 -1
  771. package/dist/tools/agent/ask-user-constants.js.map +1 -1
  772. package/dist/tools/agent/run-subagent-async.d.ts +2 -11
  773. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
  774. package/dist/tools/agent/run-subagent-async.js +8 -2
  775. package/dist/tools/agent/run-subagent-async.js.map +1 -1
  776. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  777. package/dist/tools/agent/run-subagent.js +8 -9
  778. package/dist/tools/agent/run-subagent.js.map +1 -1
  779. package/dist/tools/file/apply-patch.d.ts +2 -0
  780. package/dist/tools/file/apply-patch.d.ts.map +1 -1
  781. package/dist/tools/file/apply-patch.js +58 -14
  782. package/dist/tools/file/apply-patch.js.map +1 -1
  783. package/dist/tools/file/code-context.d.ts +5 -0
  784. package/dist/tools/file/code-context.d.ts.map +1 -1
  785. package/dist/tools/file/code-context.js +18 -6
  786. package/dist/tools/file/code-context.js.map +1 -1
  787. package/dist/tools/file/create-file.d.ts.map +1 -1
  788. package/dist/tools/file/create-file.js +11 -5
  789. package/dist/tools/file/create-file.js.map +1 -1
  790. package/dist/tools/file/edit-healing.d.ts +7 -0
  791. package/dist/tools/file/edit-healing.d.ts.map +1 -1
  792. package/dist/tools/file/edit-healing.js +7 -7
  793. package/dist/tools/file/edit-healing.js.map +1 -1
  794. package/dist/tools/file/glob.d.ts +3 -0
  795. package/dist/tools/file/glob.d.ts.map +1 -1
  796. package/dist/tools/file/glob.js +9 -3
  797. package/dist/tools/file/glob.js.map +1 -1
  798. package/dist/tools/file/grep.d.ts +5 -0
  799. package/dist/tools/file/grep.d.ts.map +1 -1
  800. package/dist/tools/file/grep.js +10 -6
  801. package/dist/tools/file/grep.js.map +1 -1
  802. package/dist/tools/file/patch-healing.d.ts +31 -0
  803. package/dist/tools/file/patch-healing.d.ts.map +1 -0
  804. package/dist/tools/file/patch-healing.js +231 -0
  805. package/dist/tools/file/patch-healing.js.map +1 -0
  806. package/dist/tools/file/read-file.d.ts +3 -0
  807. package/dist/tools/file/read-file.d.ts.map +1 -1
  808. package/dist/tools/file/read-file.js +9 -3
  809. package/dist/tools/file/read-file.js.map +1 -1
  810. package/dist/tools/file/search-replace.d.ts.map +1 -1
  811. package/dist/tools/file/search-replace.js +24 -6
  812. package/dist/tools/file/search-replace.js.map +1 -1
  813. package/dist/tools/format-helpers.d.ts +6 -0
  814. package/dist/tools/format-helpers.d.ts.map +1 -1
  815. package/dist/tools/format-helpers.js +23 -0
  816. package/dist/tools/format-helpers.js.map +1 -1
  817. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  818. package/dist/tools/memory/memory-tools.js +2 -2
  819. package/dist/tools/memory/memory-tools.js.map +1 -1
  820. package/dist/tools/system/shell.d.ts +16 -1
  821. package/dist/tools/system/shell.d.ts.map +1 -1
  822. package/dist/tools/system/shell.js +90 -25
  823. package/dist/tools/system/shell.js.map +1 -1
  824. package/dist/tools/types.d.ts +4 -0
  825. package/dist/tools/types.d.ts.map +1 -1
  826. package/dist/tools/types.js.map +1 -1
  827. package/dist/tools/web/web-fetch.d.ts.map +1 -1
  828. package/dist/tools/web/web-fetch.js +2 -2
  829. package/dist/tools/web/web-fetch.js.map +1 -1
  830. package/dist/tools/web/web-search.d.ts.map +1 -1
  831. package/dist/tools/web/web-search.js +2 -2
  832. package/dist/tools/web/web-search.js.map +1 -1
  833. package/dist/types/message.d.ts +1 -1
  834. package/dist/types/message.d.ts.map +1 -1
  835. package/dist/utils/ai/provider-credentials.d.ts +1 -1
  836. package/dist/utils/ai/provider-credentials.d.ts.map +1 -1
  837. package/dist/utils/ai/provider-credentials.js +18 -2
  838. package/dist/utils/ai/provider-credentials.js.map +1 -1
  839. package/dist/utils/ai/token-usage.d.ts +3 -1
  840. package/dist/utils/ai/token-usage.d.ts.map +1 -1
  841. package/dist/utils/ai/token-usage.js +7 -2
  842. package/dist/utils/ai/token-usage.js.map +1 -1
  843. package/dist/utils/apply-diff.d.ts.map +1 -1
  844. package/dist/utils/apply-diff.js +8 -0
  845. package/dist/utils/apply-diff.js.map +1 -1
  846. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  847. package/dist/utils/conversation/conversation-event-handler.js +60 -2
  848. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  849. package/dist/utils/error-helpers.d.ts.map +1 -1
  850. package/dist/utils/error-helpers.js +8 -0
  851. package/dist/utils/error-helpers.js.map +1 -1
  852. package/dist/utils/inject-warning-into-tool-output.d.ts +30 -0
  853. package/dist/utils/inject-warning-into-tool-output.d.ts.map +1 -1
  854. package/dist/utils/inject-warning-into-tool-output.js +39 -0
  855. package/dist/utils/inject-warning-into-tool-output.js.map +1 -1
  856. package/dist/utils/output/tty-osc.d.ts +1 -1
  857. package/dist/utils/output/tty-osc.js +1 -1
  858. package/dist/utils/settings-command.d.ts.map +1 -1
  859. package/dist/utils/settings-command.js +105 -6
  860. package/dist/utils/settings-command.js.map +1 -1
  861. package/dist/utils/shell/execute-shell.d.ts +8 -0
  862. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  863. package/dist/utils/shell/execute-shell.js +36 -30
  864. package/dist/utils/shell/execute-shell.js.map +1 -1
  865. package/dist/utils/shell/sandbox/sandbox-env.d.ts +1 -0
  866. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -1
  867. package/dist/utils/shell/sandbox/sandbox-env.js +2 -0
  868. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -1
  869. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
  870. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  871. package/dist/utils/shell/sandbox/sandbox-policy.js +1 -1
  872. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  873. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  874. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +1 -2
  875. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  876. package/dist/utils/shell/shell-child-registry.d.ts +11 -0
  877. package/dist/utils/shell/shell-child-registry.d.ts.map +1 -0
  878. package/dist/utils/shell/shell-child-registry.js +40 -0
  879. package/dist/utils/shell/shell-child-registry.js.map +1 -0
  880. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  881. package/dist/utils/shell/shell-output.js +10 -6
  882. package/dist/utils/shell/shell-output.js.map +1 -1
  883. package/dist/utils/shell/temp-sweep.d.ts +28 -0
  884. package/dist/utils/shell/temp-sweep.d.ts.map +1 -0
  885. package/dist/utils/shell/temp-sweep.js +140 -0
  886. package/dist/utils/shell/temp-sweep.js.map +1 -0
  887. package/dist/utils/streaming/extract-command-messages.d.ts +12 -5
  888. package/dist/utils/streaming/extract-command-messages.d.ts.map +1 -1
  889. package/dist/utils/streaming/extract-command-messages.js +29 -33
  890. package/dist/utils/streaming/extract-command-messages.js.map +1 -1
  891. package/dist/utils/streaming/streaming-session-factory.d.ts +8 -0
  892. package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
  893. package/dist/utils/streaming/streaming-session-factory.js +3 -0
  894. package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
  895. package/dist/utils/value-suggestions.d.ts +8 -0
  896. package/dist/utils/value-suggestions.d.ts.map +1 -1
  897. package/dist/utils/value-suggestions.js +71 -0
  898. package/dist/utils/value-suggestions.js.map +1 -1
  899. package/package.json +14 -10
  900. package/dist/utils/output/synchronized-output.d.ts +0 -35
  901. package/dist/utils/output/synchronized-output.d.ts.map +0 -1
  902. package/dist/utils/output/synchronized-output.js +0 -66
  903. package/dist/utils/output/synchronized-output.js.map +0 -1
@@ -20,8 +20,8 @@ export interface BackgroundShellOutputBundle {
20
20
  * carrying the burst, not 200 firings. The idle window is quiet *for this
21
21
  * watch*: only new matching lines extend it; unrelated output does not delay
22
22
  * the firing. Firings are counted per watch (`seq` 1, 2, …); a watch retires
23
- * when it has fired `notifyLimit` times, when its job settles, or when
24
- * cancelled by id.
23
+ * when it has fired `notifyLimit` times (`notifyLimit: 0` means the firing
24
+ * count never retires it), when its job settles, or when cancelled by id.
25
25
  *
26
26
  * Watches replay the job's retained buffer from `fromOffset` (default 0 = the
27
27
  * head of the buffer), which is the whole reason no launch-time monitor
@@ -51,7 +51,12 @@ export interface ShellOutputWatch {
51
51
  stream: ShellOutputWatchStream;
52
52
  /** Coalescing window in ms; default 1500. */
53
53
  idleMs: number;
54
- /** Firing budget; default 1 when a pattern is set, 5 otherwise. */
54
+ /**
55
+ * Firing budget; 0 means unlimited (retire only on job settlement or
56
+ * explicit cancel). Defaults to 0 — the previous "1 with a pattern,
57
+ * 5 otherwise" default retired long-running watches before consumers
58
+ * could tell anything was being clipped.
59
+ */
55
60
  notifyLimit: number;
56
61
  /**
57
62
  * Number of retained complete lines to skip from the head of the job's
@@ -70,6 +75,8 @@ export interface RegisterShellOutputWatchOptions {
70
75
  fromOffset?: number;
71
76
  /** Passed through to every firing so the consumer can name the job. */
72
77
  command?: string;
78
+ /** Defer replay delivery to the scheduler so a launching tool can publish its result first. */
79
+ deferInitialDelivery?: boolean;
73
80
  }
74
81
  export interface ShellOutputFiring {
75
82
  jobId: string;
@@ -81,6 +88,24 @@ export interface ShellOutputFiring {
81
88
  * newest text.
82
89
  */
83
90
  matchedLines: string;
91
+ /**
92
+ * Number of distinct complete lines that were coalesced into this firing.
93
+ * Always >= 1; equal to `matchedLines.split('\n').length` while the cap
94
+ * is not engaged. Surfaces bursts the idle window collapsed into one
95
+ * delivery so consumers can detect coalescing without parsing the text.
96
+ */
97
+ coalescedCount: number;
98
+ /**
99
+ * The inclusive range of per-watch seqs this firing represents. Today
100
+ * every firing represents exactly one seq, so `{ first, last }` always
101
+ * equals `{ seq, seq }`; the explicit range is published up front so that
102
+ * if the engine later evolves to coalesce *across* idle windows (one
103
+ * firing for seqs 1..3), consumers already have a single field to read.
104
+ */
105
+ seqRange: {
106
+ first: number;
107
+ last: number;
108
+ };
84
109
  /** Store evictions since the job opened, from the store read at delivery. */
85
110
  droppedBytes: number;
86
111
  command?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"background-shell-watches.d.ts","sourceRoot":"","sources":["../../../source/services/shell/background-shell-watches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAElH;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,0BAA0B,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,GAAG,MAAM,CAAC;AAE1E,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,0BAA0B,CAAC;IAClC,SAAS,EAAE,6BAA6B,CAAC;IACzC,kFAAkF;IAClF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAChD;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAsBD,qBAAa,sBAAsB;;IAOjC,YAAY,OAAO,EAAE,6BAA6B,EAIjD;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAE7E;IAED,4DAA4D;IAC5D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAExB;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAM3E;IAED;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAuD9D;IAED,sEAAsE;IACtE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAe7B;CAwFF"}
1
+ {"version":3,"file":"background-shell-watches.d.ts","sourceRoot":"","sources":["../../../source/services/shell/background-shell-watches.ts"],"names":[],"mappings":"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"}
@@ -52,14 +52,17 @@ export class BackgroundShellWatches {
52
52
  */
53
53
  registerWatch(options) {
54
54
  const idleMs = options.idleMs ?? DEFAULT_IDLE_MS;
55
- const notifyLimit = options.notifyLimit ?? (options.pattern === undefined ? 5 : 1);
55
+ // 0 = unlimited (default). The previous 1-with-pattern / 5-without-pattern
56
+ // defaults quietly retired long-running watches; consumers wanting a cap
57
+ // pass it explicitly.
58
+ const notifyLimit = options.notifyLimit ?? 0;
56
59
  const fromOffset = options.fromOffset ?? 0;
57
60
  const stream = options.stream ?? 'both';
58
61
  if (!Number.isInteger(idleMs) || idleMs < 0) {
59
62
  throw new RangeError('idleMs must be a non-negative integer.');
60
63
  }
61
- if (!Number.isInteger(notifyLimit) || notifyLimit < 1) {
62
- throw new RangeError('notifyLimit must be a positive integer.');
64
+ if (!Number.isInteger(notifyLimit) || notifyLimit < 0) {
65
+ throw new RangeError('notifyLimit must be a non-negative integer (0 = unlimited).');
63
66
  }
64
67
  if (!Number.isInteger(fromOffset) || fromOffset < 0) {
65
68
  throw new RangeError('fromOffset must be a non-negative integer.');
@@ -84,6 +87,9 @@ export class BackgroundShellWatches {
84
87
  lastDroppedLines: read.droppedLines,
85
88
  pending: [],
86
89
  pendingBytes: 0,
90
+ pendingTotalLines: 0,
91
+ // The first line matched (now or during replay) belongs to seq 1.
92
+ pendingSeqStart: 1,
87
93
  firedCount: 0,
88
94
  timer: null,
89
95
  };
@@ -96,9 +102,19 @@ export class BackgroundShellWatches {
96
102
  this.#scheduler.cancel(record.timer);
97
103
  record.timer = null;
98
104
  }
99
- if (record.pending.length > 0)
100
- this.#fire(record);
101
- this.#retire(watch.watchId);
105
+ if (record.pending.length > 0 && options.deferInitialDelivery) {
106
+ record.timer = this.#scheduler.schedule(() => {
107
+ record.timer = null;
108
+ if (record.pending.length > 0)
109
+ this.#fire(record);
110
+ this.#retire(watch.watchId);
111
+ }, 0);
112
+ }
113
+ else {
114
+ if (record.pending.length > 0)
115
+ this.#fire(record);
116
+ this.#retire(watch.watchId);
117
+ }
102
118
  }
103
119
  else if (record.pending.length > 0) {
104
120
  this.#reschedule(record);
@@ -158,8 +174,18 @@ export class BackgroundShellWatches {
158
174
  if (watch.pattern !== undefined && !patternMatches(watch.pattern, line.text))
159
175
  continue;
160
176
  matched = true;
177
+ if (record.pending.length === 0) {
178
+ // First line of a fresh batch: anchor its seq so the firing can
179
+ // publish the range this batch will cover. After delivery, the next
180
+ // line is seq (firedCount + 1) again.
181
+ record.pendingSeqStart = record.firedCount + 1;
182
+ }
161
183
  record.pending.push(line.text);
162
184
  record.pendingBytes += line.text.length;
185
+ record.pendingTotalLines += 1;
186
+ // The cap evicts from the head to keep `matchedLines` bounded; the
187
+ // dropped lines were part of the same firing anyway, so the seq range
188
+ // this batch will cover is unchanged.
163
189
  while (record.pendingBytes > MAX_MATCHED_TEXT && record.pending.length > 1) {
164
190
  const dropped = record.pending.shift();
165
191
  if (dropped !== undefined)
@@ -187,23 +213,29 @@ export class BackgroundShellWatches {
187
213
  }
188
214
  /**
189
215
  * Delivers one firing (the next `seq`), then retires the watch if it has
190
- * reached `notifyLimit` — delivering the last firing is what retires it.
216
+ * reached `notifyLimit` (and `notifyLimit` is not 0, the unlimited sentinel)
217
+ * — delivering the last firing is what retires it.
191
218
  */
192
219
  #fire(record) {
193
220
  const { watch } = record;
194
221
  record.firedCount += 1;
222
+ const seq = record.firedCount;
195
223
  const firing = {
196
224
  jobId: watch.jobId,
197
225
  watchId: watch.watchId,
198
- seq: record.firedCount,
226
+ seq,
199
227
  matchedLines: joinPending(record.pending),
228
+ coalescedCount: record.pendingTotalLines,
229
+ seqRange: { first: record.pendingSeqStart, last: seq },
200
230
  droppedBytes: this.#store.readLines(watch.jobId)?.droppedBytes ?? 0,
201
231
  ...(record.command === undefined ? {} : { command: record.command }),
202
232
  };
203
233
  record.pending = [];
204
234
  record.pendingBytes = 0;
235
+ record.pendingTotalLines = 0;
236
+ record.pendingSeqStart = seq + 1;
205
237
  this.#emit(firing);
206
- if (record.firedCount >= watch.notifyLimit)
238
+ if (watch.notifyLimit !== 0 && record.firedCount >= watch.notifyLimit)
207
239
  this.#retire(watch.watchId);
208
240
  }
209
241
  #retire(watchId) {
@@ -1 +1 @@
1
- {"version":3,"file":"background-shell-watches.js","sourceRoot":"","sources":["../../../source/services/shell/background-shell-watches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background-shell-watches.js","sourceRoot":"","sources":["../../../source/services/shell/background-shell-watches.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Client } from 'ssh2';
2
- import { ISSHService } from './service-interfaces.js';
2
+ import { ISSHService, SSHCommandOptions, SSHCommandResult } from './service-interfaces.js';
3
3
  export interface SSHConfig {
4
4
  host: string;
5
5
  port: number;
@@ -7,22 +7,94 @@ export interface SSHConfig {
7
7
  agent?: string;
8
8
  identityFile?: string;
9
9
  }
10
+ /**
11
+ * Typed discriminant for how an `executeCommand` promise settled without a
12
+ * terminal remote exit code. The kind names the observation that settled the
13
+ * promise; it is not a claim about what happened on the remote host.
14
+ */
15
+ export type SSHTransportErrorKind = 'not_connected' | 'exec_failed' | 'connection_error' | 'connection_end' | 'connection_close' | 'channel_error' | 'explicit_disconnect' | 'aborted' | 'timeout';
16
+ /**
17
+ * Truthful remote-effect classification carried by a transport-level
18
+ * settlement:
19
+ *
20
+ * - `'none'` — proven pre-dispatch; no command string was ever handed to the
21
+ * transport, so no remote side effect can have occurred.
22
+ * - `'unknown'` — the command may have completed, partially completed, or be
23
+ * orphaned on the remote host. Blind replay of a non-idempotent command is
24
+ * never safe on this classification.
25
+ */
26
+ export type SSHRemoteEffect = 'none' | 'unknown';
27
+ /**
28
+ * Typed transport settlement for a remote command. Replacing raw/unclassified
29
+ * rejections lets callers and recovery paths distinguish a local containment
30
+ * decision (`'aborted'`, `'timeout'`, `'not_connected'`) from an ambiguous
31
+ * transport drop without guessing at message text.
32
+ */
33
+ export declare class SSHTransportError extends Error {
34
+ readonly kind: SSHTransportErrorKind;
35
+ readonly remoteEffect: SSHRemoteEffect;
36
+ /** Bytes received before settlement. Best effort only — never a complete result. */
37
+ readonly partialOutput?: {
38
+ stdout: string;
39
+ stderr: string;
40
+ };
41
+ constructor(kind: SSHTransportErrorKind, message: string, options?: {
42
+ cause?: unknown;
43
+ remoteEffect?: SSHRemoteEffect;
44
+ partialOutput?: {
45
+ stdout: string;
46
+ stderr: string;
47
+ };
48
+ });
49
+ }
50
+ /**
51
+ * Canonical POSIX single-quote escaping: the value is wrapped in single quotes
52
+ * and any embedded `'` is rewritten as `'\''` (close quote, escaped quote,
53
+ * reopen quote). Shell metacharacters, `$VAR`, `$(...)`, and operators inside
54
+ * the value become inert data. Applies to every remote path argument and the
55
+ * optional `cwd`.
56
+ */
57
+ export declare function quoteShellArg(value: string): string;
58
+ /**
59
+ * Owns the SSH transport lifecycle and remote command execution.
60
+ *
61
+ * Connection-state listeners are attached exactly once per client instance
62
+ * (`attachLifecycleListeners`), so repeated `connect()` calls cannot stack
63
+ * handlers. `connect()` is single-flight: an in-progress attempt is shared and
64
+ * a call while already connected is a no-op, so an old connection era's
65
+ * listeners can never settle a later command. Keepalive policy is explicitly
66
+ * **none** — no keepalive configuration and no background pings; drops are
67
+ * detected by socket/stream events and reported through typed settlement.
68
+ *
69
+ * Every in-flight `executeCommand` registers a settler in
70
+ * `activeCommandSettlers`. A terminal connection event settles all active
71
+ * commands with a typed `SSHTransportError`; each command also settles on its
72
+ * own stream close, channel error, `timeoutMs` elapse, or abort signal. The
73
+ * promise never hangs on a dropped transport.
74
+ */
10
75
  export declare class SSHService implements ISSHService {
11
76
  private config;
12
77
  private client;
13
78
  private connected;
79
+ private lifecycleAttached;
80
+ private connecting;
81
+ /** Settlers for commands currently in flight; a terminal transport event settles them all. */
82
+ private activeCommandSettlers;
14
83
  constructor(config: SSHConfig, client?: Client);
84
+ /**
85
+ * Attaches connection-level lifecycle listeners once per client instance.
86
+ * The first terminal event (`error`/`end`/`close`) wins per era: after the
87
+ * first drop the connection is marked down and every command active at that
88
+ * moment settles; later events from the same close sequence find an empty
89
+ * active set.
90
+ */
91
+ private attachLifecycleListeners;
92
+ private onTransportDrop;
15
93
  connect(): Promise<void>;
94
+ private performConnect;
16
95
  disconnect(): Promise<void>;
17
96
  isConnected(): boolean;
18
- executeCommand(cmd: string, opts?: {
19
- cwd?: string;
20
- }): Promise<{
21
- stdout: string;
22
- stderr: string;
23
- exitCode: number | null;
24
- timedOut: boolean;
25
- }>;
97
+ executeCommand(cmd: string, opts?: SSHCommandOptions): Promise<SSHCommandResult>;
26
98
  readFile(path: string): Promise<string>;
27
99
  writeFile(path: string, content: string): Promise<void>;
28
100
  mkdir(path: string, opts?: {
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-service.d.ts","sourceRoot":"","sources":["../../source/services/ssh-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,UAAW,YAAW,WAAW;IAIhC,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;IAEnC,YAAoB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAErD;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmC7B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKhC;IAED,WAAW,IAAI,OAAO,CAErB;IAEK,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAiCD;IAEK,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5C;IAEK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;CACF"}
1
+ {"version":3,"file":"ssh-service.d.ts","sourceRoot":"","sources":["../../source/services/ssh-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,MAAM,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,qBAAqB,GACrB,SAAS,GACT,SAAS,CAAC;AAEd;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5D,YACE,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,eAAe,CAAC;QAC/B,aAAa,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/C,EAQP;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,UAAW,YAAW,WAAW;IAQhC,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,UAAU,CAA8B;IAChD,8FAA8F;IAC9F,OAAO,CAAC,qBAAqB,CAAqE;IAElG,YAAoB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAErD;IAED;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,eAAe;IASjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAO7B;YAEa,cAAc;IA8CtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhC;IAED,WAAW,IAAI,OAAO,CAErB;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuGrF;IAEK,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5C;IAEK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;CACF"}
@@ -1,16 +1,124 @@
1
1
  import { Client } from 'ssh2';
2
2
  import { readFileSync } from 'fs';
3
3
  import { homedir } from 'os';
4
+ /**
5
+ * Typed transport settlement for a remote command. Replacing raw/unclassified
6
+ * rejections lets callers and recovery paths distinguish a local containment
7
+ * decision (`'aborted'`, `'timeout'`, `'not_connected'`) from an ambiguous
8
+ * transport drop without guessing at message text.
9
+ */
10
+ export class SSHTransportError extends Error {
11
+ kind;
12
+ remoteEffect;
13
+ /** Bytes received before settlement. Best effort only — never a complete result. */
14
+ partialOutput;
15
+ constructor(kind, message, options = {}) {
16
+ super(message);
17
+ this.name = 'SSHTransportError';
18
+ this.kind = kind;
19
+ this.remoteEffect = options.remoteEffect ?? 'unknown';
20
+ this.cause = options.cause;
21
+ this.partialOutput = options.partialOutput;
22
+ }
23
+ }
24
+ /**
25
+ * Canonical POSIX single-quote escaping: the value is wrapped in single quotes
26
+ * and any embedded `'` is rewritten as `'\''` (close quote, escaped quote,
27
+ * reopen quote). Shell metacharacters, `$VAR`, `$(...)`, and operators inside
28
+ * the value become inert data. Applies to every remote path argument and the
29
+ * optional `cwd`.
30
+ */
31
+ export function quoteShellArg(value) {
32
+ return `'${value.replace(/'/g, "'\\''")}'`;
33
+ }
34
+ function transportDropMessage(kind, cause) {
35
+ const detail = cause instanceof Error ? `: ${cause.message}` : '';
36
+ switch (kind) {
37
+ case 'connection_error':
38
+ return `SSH connection error${detail}`;
39
+ case 'connection_end':
40
+ return 'SSH connection ended while a command was in flight';
41
+ case 'connection_close':
42
+ return 'SSH connection closed while a command was in flight';
43
+ case 'channel_error':
44
+ return `SSH channel error${detail}`;
45
+ case 'explicit_disconnect':
46
+ return 'SSH connection disconnected while a command was in flight';
47
+ case 'exec_failed':
48
+ return `SSH exec failed${detail}`;
49
+ case 'aborted':
50
+ return 'SSH command aborted';
51
+ case 'timeout':
52
+ return 'SSH command timed out';
53
+ case 'not_connected':
54
+ return 'SSH client not connected';
55
+ }
56
+ }
57
+ /**
58
+ * Owns the SSH transport lifecycle and remote command execution.
59
+ *
60
+ * Connection-state listeners are attached exactly once per client instance
61
+ * (`attachLifecycleListeners`), so repeated `connect()` calls cannot stack
62
+ * handlers. `connect()` is single-flight: an in-progress attempt is shared and
63
+ * a call while already connected is a no-op, so an old connection era's
64
+ * listeners can never settle a later command. Keepalive policy is explicitly
65
+ * **none** — no keepalive configuration and no background pings; drops are
66
+ * detected by socket/stream events and reported through typed settlement.
67
+ *
68
+ * Every in-flight `executeCommand` registers a settler in
69
+ * `activeCommandSettlers`. A terminal connection event settles all active
70
+ * commands with a typed `SSHTransportError`; each command also settles on its
71
+ * own stream close, channel error, `timeoutMs` elapse, or abort signal. The
72
+ * promise never hangs on a dropped transport.
73
+ */
4
74
  export class SSHService {
5
75
  config;
6
76
  client;
7
77
  connected = false;
78
+ lifecycleAttached = false;
79
+ connecting = null;
80
+ /** Settlers for commands currently in flight; a terminal transport event settles them all. */
81
+ activeCommandSettlers = new Set();
8
82
  constructor(config, client) {
9
83
  this.config = config;
10
84
  this.client = client ?? new Client();
11
85
  }
86
+ /**
87
+ * Attaches connection-level lifecycle listeners once per client instance.
88
+ * The first terminal event (`error`/`end`/`close`) wins per era: after the
89
+ * first drop the connection is marked down and every command active at that
90
+ * moment settles; later events from the same close sequence find an empty
91
+ * active set.
92
+ */
93
+ attachLifecycleListeners() {
94
+ if (this.lifecycleAttached)
95
+ return;
96
+ this.lifecycleAttached = true;
97
+ this.client.on('error', (err) => this.onTransportDrop('connection_error', err));
98
+ this.client.on('end', () => this.onTransportDrop('connection_end'));
99
+ this.client.on('close', () => this.onTransportDrop('connection_close'));
100
+ }
101
+ onTransportDrop(kind, cause) {
102
+ this.connected = false;
103
+ const settlers = Array.from(this.activeCommandSettlers);
104
+ this.activeCommandSettlers.clear();
105
+ for (const settle of settlers) {
106
+ settle(kind, cause);
107
+ }
108
+ }
12
109
  async connect() {
110
+ if (this.connected)
111
+ return;
112
+ if (this.connecting)
113
+ return this.connecting;
114
+ this.connecting = this.performConnect().finally(() => {
115
+ this.connecting = null;
116
+ });
117
+ return this.connecting;
118
+ }
119
+ async performConnect() {
13
120
  return new Promise((resolve, reject) => {
121
+ this.attachLifecycleListeners();
14
122
  // Build connection config, including private key if identity file specified
15
123
  const connectConfig = {
16
124
  host: this.config.host,
@@ -29,25 +137,35 @@ export class SSHService {
29
137
  return;
30
138
  }
31
139
  }
32
- this.client
33
- .on('ready', () => {
140
+ // Per-attempt listeners are `once` and each removes the other on
141
+ // settlement, so repeated connect attempts never accumulate handlers.
142
+ let settled = false;
143
+ const onReady = () => {
144
+ if (settled)
145
+ return;
146
+ settled = true;
147
+ this.client.removeListener('error', onError);
34
148
  this.connected = true;
35
149
  resolve();
36
- })
37
- .on('error', (err) => {
150
+ };
151
+ const onError = (err) => {
152
+ if (settled)
153
+ return;
154
+ settled = true;
155
+ this.client.removeListener('ready', onReady);
38
156
  this.connected = false;
39
157
  reject(err);
40
- })
41
- .on('end', () => {
42
- this.connected = false;
43
- })
44
- .connect(connectConfig);
158
+ };
159
+ this.client.once('ready', onReady);
160
+ this.client.once('error', onError);
161
+ this.client.connect(connectConfig);
45
162
  });
46
163
  }
47
164
  async disconnect() {
48
165
  if (this.connected) {
49
- this.client.end();
50
166
  this.connected = false;
167
+ this.onTransportDrop('explicit_disconnect');
168
+ this.client.end();
51
169
  }
52
170
  }
53
171
  isConnected() {
@@ -55,37 +173,93 @@ export class SSHService {
55
173
  }
56
174
  async executeCommand(cmd, opts) {
57
175
  if (!this.connected) {
58
- throw new Error('SSH client not connected');
176
+ throw new SSHTransportError('not_connected', 'SSH client not connected', { remoteEffect: 'none' });
177
+ }
178
+ const signal = opts?.signal;
179
+ if (signal?.aborted) {
180
+ throw new SSHTransportError('aborted', 'SSH command aborted before dispatch', {
181
+ cause: signal.reason,
182
+ remoteEffect: 'none',
183
+ });
59
184
  }
60
185
  return new Promise((resolve, reject) => {
61
- // If cwd is provided, wrap command to change directory first
62
- // We use simple string concatenation. In a more robust system we might want to escape the cwd path.
63
- const commandToExec = opts?.cwd ? `cd "${opts.cwd}" && ${cmd}` : cmd;
64
- this.client.exec(commandToExec, (err, stream) => {
65
- if (err)
66
- return reject(err);
67
- let stdout = '';
68
- let stderr = '';
69
- stream
70
- .on('close', (code) => {
71
- resolve({
72
- stdout,
73
- stderr,
74
- exitCode: code, // code is null if terminated by signal
75
- timedOut: false,
76
- });
77
- })
78
- .on('data', (data) => {
79
- stdout += data.toString();
80
- })
81
- .stderr.on('data', (data) => {
82
- stderr += data.toString();
83
- });
186
+ // cwd and file paths are treated strictly as data: canonical POSIX
187
+ // single-quote escaping keeps quotes, $VAR, $(...), and shell operators
188
+ // from breaking out of the command string.
189
+ const commandToExec = opts?.cwd ? `cd ${quoteShellArg(opts.cwd)} && ${cmd}` : cmd;
190
+ const timeoutMs = opts?.timeoutMs;
191
+ let settled = false;
192
+ let stream = null;
193
+ let timeoutHandle;
194
+ let stdout = '';
195
+ let stderr = '';
196
+ // Each command builds its own typed drop error so the settlement carries
197
+ // that command's own partial output and message.
198
+ const settleOnTransportDrop = (kind, cause) => rejectWith(kind, transportDropMessage(kind, cause), { cause, remoteEffect: 'unknown' });
199
+ const onAbort = () => rejectWith('aborted', 'SSH command aborted', { cause: signal?.reason });
200
+ const onStreamClose = (code) => {
201
+ settle(() => resolve({ stdout, stderr, exitCode: code, timedOut: false }));
202
+ };
203
+ const onStdout = (chunk) => {
204
+ stdout += chunk.toString();
205
+ };
206
+ const onStderr = (chunk) => {
207
+ stderr += chunk.toString();
208
+ };
209
+ const onStreamError = (err) => rejectWith('channel_error', `SSH channel error: ${err.message}`, { cause: err });
210
+ const cleanup = () => {
211
+ this.activeCommandSettlers.delete(settleOnTransportDrop);
212
+ if (timeoutHandle !== undefined) {
213
+ clearTimeout(timeoutHandle);
214
+ timeoutHandle = undefined;
215
+ }
216
+ if (stream) {
217
+ stream.removeListener('close', onStreamClose);
218
+ stream.removeListener('data', onStdout);
219
+ stream.removeListener('error', onStreamError);
220
+ stream.stderr.removeListener('data', onStderr);
221
+ }
222
+ if (signal) {
223
+ signal.removeEventListener('abort', onAbort);
224
+ }
225
+ };
226
+ function settle(fn) {
227
+ if (settled)
228
+ return;
229
+ settled = true;
230
+ cleanup();
231
+ fn();
232
+ }
233
+ function rejectWith(kind, message, options) {
234
+ settle(() => reject(new SSHTransportError(kind, message, { ...options, partialOutput: { stdout, stderr } })));
235
+ }
236
+ this.activeCommandSettlers.add(settleOnTransportDrop);
237
+ if (signal) {
238
+ signal.addEventListener('abort', onAbort, { once: true });
239
+ }
240
+ if (timeoutMs !== undefined && timeoutMs > 0) {
241
+ timeoutHandle = setTimeout(() => {
242
+ timeoutHandle = undefined;
243
+ rejectWith('timeout', `SSH command timed out after ${timeoutMs}ms`);
244
+ }, timeoutMs);
245
+ }
246
+ this.client.exec(commandToExec, (err, channel) => {
247
+ if (settled)
248
+ return;
249
+ if (err) {
250
+ rejectWith('exec_failed', `SSH exec failed: ${err.message}`, { cause: err });
251
+ return;
252
+ }
253
+ stream = channel;
254
+ stream.on('close', onStreamClose);
255
+ stream.on('data', onStdout);
256
+ stream.on('error', onStreamError);
257
+ stream.stderr.on('data', onStderr);
84
258
  });
85
259
  });
86
260
  }
87
261
  async readFile(path) {
88
- const result = await this.executeCommand(`cat "${path}"`);
262
+ const result = await this.executeCommand(`cat ${quoteShellArg(path)}`);
89
263
  if (result.exitCode !== 0) {
90
264
  throw new Error(`Failed to read file ${path}: ${result.stderr}`);
91
265
  }
@@ -103,7 +277,7 @@ export class SSHService {
103
277
  throw new Error('Content contains internal delimiter');
104
278
  }
105
279
  // We use cat with a quoted heredoc 'EOF' to prevent variable expansion in the content
106
- const cmd = `cat > "${path}" << '${delimiter}'\n${content}\n${delimiter}`;
280
+ const cmd = `cat > ${quoteShellArg(path)} << '${delimiter}'\n${content}\n${delimiter}`;
107
281
  const result = await this.executeCommand(cmd);
108
282
  if (result.exitCode !== 0) {
109
283
  throw new Error(`Failed to write file ${path}: ${result.stderr}`);
@@ -111,7 +285,7 @@ export class SSHService {
111
285
  }
112
286
  async mkdir(path, opts) {
113
287
  const flags = opts?.recursive ? '-p' : '';
114
- const result = await this.executeCommand(`mkdir ${flags} "${path}"`);
288
+ const result = await this.executeCommand(`mkdir ${flags} ${quoteShellArg(path)}`);
115
289
  if (result.exitCode !== 0) {
116
290
  throw new Error(`Failed to mkdir ${path}: ${result.stderr}`);
117
291
  }