@pentoshi/clai 3.9.2 → 3.9.4

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 (407) hide show
  1. package/dist/agent/compaction-attempt.d.ts +22 -0
  2. package/dist/agent/compaction-attempt.js +69 -0
  3. package/dist/agent/compaction-attempt.js.map +1 -0
  4. package/dist/agent/compaction-summary.d.ts +27 -0
  5. package/dist/agent/compaction-summary.js +62 -0
  6. package/dist/agent/compaction-summary.js.map +1 -1
  7. package/dist/agent/context-breakdown.d.ts +2 -0
  8. package/dist/agent/context-breakdown.js +37 -0
  9. package/dist/agent/context-breakdown.js.map +1 -1
  10. package/dist/agent/context-manager.d.ts +7 -1
  11. package/dist/agent/context-manager.js +64 -15
  12. package/dist/agent/context-manager.js.map +1 -1
  13. package/dist/agent/continue-orient.d.ts +8 -0
  14. package/dist/agent/continue-orient.js +26 -3
  15. package/dist/agent/continue-orient.js.map +1 -1
  16. package/dist/agent/durable-envelope.d.ts +39 -0
  17. package/dist/agent/durable-envelope.js +195 -0
  18. package/dist/agent/durable-envelope.js.map +1 -0
  19. package/dist/agent/events.d.ts +21 -0
  20. package/dist/agent/loop-guard.d.ts +13 -5
  21. package/dist/agent/loop-guard.js +114 -1
  22. package/dist/agent/loop-guard.js.map +1 -1
  23. package/dist/agent/outcomes.d.ts +29 -0
  24. package/dist/agent/outcomes.js +118 -3
  25. package/dist/agent/outcomes.js.map +1 -1
  26. package/dist/agent/plan-decision.js +8 -3
  27. package/dist/agent/plan-decision.js.map +1 -1
  28. package/dist/agent/plan-tool.d.ts +5 -0
  29. package/dist/agent/plan-tool.js +166 -6
  30. package/dist/agent/plan-tool.js.map +1 -1
  31. package/dist/agent/reliability-policy.d.ts +11 -6
  32. package/dist/agent/reliability-policy.js +19 -13
  33. package/dist/agent/reliability-policy.js.map +1 -1
  34. package/dist/agent/request-budget.d.ts +24 -0
  35. package/dist/agent/request-budget.js +59 -0
  36. package/dist/agent/request-budget.js.map +1 -0
  37. package/dist/agent/responder-context.js +2 -2
  38. package/dist/agent/responder-context.js.map +1 -1
  39. package/dist/agent/responder-parent.d.ts +30 -0
  40. package/dist/agent/responder-parent.js +82 -0
  41. package/dist/agent/responder-parent.js.map +1 -0
  42. package/dist/agent/runner.d.ts +15 -2
  43. package/dist/agent/runner.js +766 -213
  44. package/dist/agent/runner.js.map +1 -1
  45. package/dist/agent/scope-context.d.ts +5 -0
  46. package/dist/agent/scope-context.js +7 -1
  47. package/dist/agent/scope-context.js.map +1 -1
  48. package/dist/agent/session-policy.js +1 -0
  49. package/dist/agent/session-policy.js.map +1 -1
  50. package/dist/agent/stop-summary.js +13 -7
  51. package/dist/agent/stop-summary.js.map +1 -1
  52. package/dist/agent/task-analyzer.js +7 -3
  53. package/dist/agent/task-analyzer.js.map +1 -1
  54. package/dist/agent/task-evidence.js +2 -0
  55. package/dist/agent/task-evidence.js.map +1 -1
  56. package/dist/agent/task-sync.d.ts +11 -0
  57. package/dist/agent/task-sync.js +31 -0
  58. package/dist/agent/task-sync.js.map +1 -1
  59. package/dist/agent/tool-call-parser.d.ts +6 -13
  60. package/dist/agent/tool-call-parser.js +186 -82
  61. package/dist/agent/tool-call-parser.js.map +1 -1
  62. package/dist/agent/tool-history.d.ts +8 -2
  63. package/dist/agent/tool-history.js +8 -1
  64. package/dist/agent/tool-history.js.map +1 -1
  65. package/dist/agent/turn-outcome.d.ts +4 -1
  66. package/dist/agent/turn-outcome.js +16 -2
  67. package/dist/agent/turn-outcome.js.map +1 -1
  68. package/dist/app/adapters/agent-event-adapter.js +27 -0
  69. package/dist/app/adapters/agent-event-adapter.js.map +1 -1
  70. package/dist/app/adapters/current-agent-adapter.js +1 -0
  71. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  72. package/dist/app/adapters/current-interactive-sessions-adapter.d.ts +4 -0
  73. package/dist/app/adapters/current-interactive-sessions-adapter.js +11 -0
  74. package/dist/app/adapters/current-interactive-sessions-adapter.js.map +1 -0
  75. package/dist/app/adapters/current-jobs-adapter.js +4 -3
  76. package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
  77. package/dist/app/adapters/current-store-adapter.js +4 -3
  78. package/dist/app/adapters/current-store-adapter.js.map +1 -1
  79. package/dist/app/adapters/current-updates-adapter.d.ts +1 -1
  80. package/dist/app/adapters/current-updates-adapter.js +34 -5
  81. package/dist/app/adapters/current-updates-adapter.js.map +1 -1
  82. package/dist/app/adapters/quiet-meta-tools.js +2 -1
  83. package/dist/app/adapters/quiet-meta-tools.js.map +1 -1
  84. package/dist/app/controllers/cancel-all-result.d.ts +8 -0
  85. package/dist/app/controllers/cancel-all-result.js +32 -0
  86. package/dist/app/controllers/cancel-all-result.js.map +1 -0
  87. package/dist/app/controllers/job-controller.d.ts +4 -3
  88. package/dist/app/controllers/job-controller.js +9 -6
  89. package/dist/app/controllers/job-controller.js.map +1 -1
  90. package/dist/app/controllers/plan-controller.js +14 -0
  91. package/dist/app/controllers/plan-controller.js.map +1 -1
  92. package/dist/app/controllers/responder-settlement.js +2 -2
  93. package/dist/app/controllers/responder-settlement.js.map +1 -1
  94. package/dist/app/controllers/session-compact-helper.d.ts +23 -1
  95. package/dist/app/controllers/session-compact-helper.js +117 -7
  96. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  97. package/dist/app/controllers/session-context-usage.d.ts +24 -0
  98. package/dist/app/controllers/session-context-usage.js +89 -0
  99. package/dist/app/controllers/session-context-usage.js.map +1 -0
  100. package/dist/app/controllers/session-controller.d.ts +25 -17
  101. package/dist/app/controllers/session-controller.js +142 -128
  102. package/dist/app/controllers/session-controller.js.map +1 -1
  103. package/dist/app/controllers/session-prompt-queue.d.ts +3 -0
  104. package/dist/app/controllers/session-prompt-queue.js +20 -1
  105. package/dist/app/controllers/session-prompt-queue.js.map +1 -1
  106. package/dist/app/controllers/session-responder.js +16 -6
  107. package/dist/app/controllers/session-responder.js.map +1 -1
  108. package/dist/app/controllers/session-turn-request.d.ts +18 -0
  109. package/dist/app/controllers/session-turn-request.js +31 -0
  110. package/dist/app/controllers/session-turn-request.js.map +1 -0
  111. package/dist/app/controllers/turn-continuation.d.ts +14 -0
  112. package/dist/app/controllers/turn-continuation.js +46 -0
  113. package/dist/app/controllers/turn-continuation.js.map +1 -0
  114. package/dist/app/events/app-event.d.ts +21 -0
  115. package/dist/app/events/app-event.js +1 -0
  116. package/dist/app/events/app-event.js.map +1 -1
  117. package/dist/app/ports/agent-port.d.ts +7 -0
  118. package/dist/app/ports/interactive-sessions-port.d.ts +21 -0
  119. package/dist/app/ports/interactive-sessions-port.js +9 -0
  120. package/dist/app/ports/interactive-sessions-port.js.map +1 -0
  121. package/dist/app/ports/jobs-port.d.ts +4 -3
  122. package/dist/app/ports/persistence-port.d.ts +11 -0
  123. package/dist/app/ports/updates-port.d.ts +8 -0
  124. package/dist/attachments/service.js +13 -2
  125. package/dist/attachments/service.js.map +1 -1
  126. package/dist/commands/providers.js +13 -10
  127. package/dist/commands/providers.js.map +1 -1
  128. package/dist/commands/update.d.ts +4 -0
  129. package/dist/commands/update.js +14 -0
  130. package/dist/commands/update.js.map +1 -1
  131. package/dist/index.js +21 -8
  132. package/dist/index.js.map +1 -1
  133. package/dist/interactive-session/artifact-writer.d.ts +54 -0
  134. package/dist/interactive-session/artifact-writer.js +161 -0
  135. package/dist/interactive-session/artifact-writer.js.map +1 -0
  136. package/dist/interactive-session/cleanup.d.ts +36 -0
  137. package/dist/interactive-session/cleanup.js +157 -0
  138. package/dist/interactive-session/cleanup.js.map +1 -0
  139. package/dist/interactive-session/config.d.ts +118 -0
  140. package/dist/interactive-session/config.js +141 -0
  141. package/dist/interactive-session/config.js.map +1 -0
  142. package/dist/interactive-session/input-policy.d.ts +41 -0
  143. package/dist/interactive-session/input-policy.js +163 -0
  144. package/dist/interactive-session/input-policy.js.map +1 -0
  145. package/dist/interactive-session/manager.d.ts +107 -0
  146. package/dist/interactive-session/manager.js +927 -0
  147. package/dist/interactive-session/manager.js.map +1 -0
  148. package/dist/interactive-session/output-store.d.ts +81 -0
  149. package/dist/interactive-session/output-store.js +239 -0
  150. package/dist/interactive-session/output-store.js.map +1 -0
  151. package/dist/interactive-session/output-view.d.ts +20 -0
  152. package/dist/interactive-session/output-view.js +142 -0
  153. package/dist/interactive-session/output-view.js.map +1 -0
  154. package/dist/interactive-session/recovery-journal.d.ts +55 -0
  155. package/dist/interactive-session/recovery-journal.js +115 -0
  156. package/dist/interactive-session/recovery-journal.js.map +1 -0
  157. package/dist/interactive-session/registry.d.ts +59 -0
  158. package/dist/interactive-session/registry.js +170 -0
  159. package/dist/interactive-session/registry.js.map +1 -0
  160. package/dist/interactive-session/runtime.d.ts +107 -0
  161. package/dist/interactive-session/runtime.js +191 -0
  162. package/dist/interactive-session/runtime.js.map +1 -0
  163. package/dist/interactive-session/session-runtime.d.ts +50 -0
  164. package/dist/interactive-session/session-runtime.js +63 -0
  165. package/dist/interactive-session/session-runtime.js.map +1 -0
  166. package/dist/interactive-session/streaming-redactor.d.ts +53 -0
  167. package/dist/interactive-session/streaming-redactor.js +263 -0
  168. package/dist/interactive-session/streaming-redactor.js.map +1 -0
  169. package/dist/interactive-session/telemetry.d.ts +30 -0
  170. package/dist/interactive-session/telemetry.js +47 -0
  171. package/dist/interactive-session/telemetry.js.map +1 -0
  172. package/dist/interactive-session/transport-factory.d.ts +8 -0
  173. package/dist/interactive-session/transport-factory.js +16 -0
  174. package/dist/interactive-session/transport-factory.js.map +1 -0
  175. package/dist/interactive-session/transport-node-pty.d.ts +49 -0
  176. package/dist/interactive-session/transport-node-pty.js +219 -0
  177. package/dist/interactive-session/transport-node-pty.js.map +1 -0
  178. package/dist/interactive-session/transport-pipe.d.ts +9 -0
  179. package/dist/interactive-session/transport-pipe.js +215 -0
  180. package/dist/interactive-session/transport-pipe.js.map +1 -0
  181. package/dist/interactive-session/transport.d.ts +104 -0
  182. package/dist/interactive-session/transport.js +89 -0
  183. package/dist/interactive-session/transport.js.map +1 -0
  184. package/dist/interactive-session/types.d.ts +254 -0
  185. package/dist/interactive-session/types.js +191 -0
  186. package/dist/interactive-session/types.js.map +1 -0
  187. package/dist/llm/adapters/anthropic-tools.d.ts +14 -1
  188. package/dist/llm/adapters/anthropic-tools.js +36 -5
  189. package/dist/llm/adapters/anthropic-tools.js.map +1 -1
  190. package/dist/llm/adapters/gemini-tools.d.ts +3 -1
  191. package/dist/llm/adapters/gemini-tools.js +5 -2
  192. package/dist/llm/adapters/gemini-tools.js.map +1 -1
  193. package/dist/llm/adapters/ollama-tools.js +8 -3
  194. package/dist/llm/adapters/ollama-tools.js.map +1 -1
  195. package/dist/llm/adapters/openai-tools.js +8 -1
  196. package/dist/llm/adapters/openai-tools.js.map +1 -1
  197. package/dist/llm/agentrouter.js +2 -0
  198. package/dist/llm/agentrouter.js.map +1 -1
  199. package/dist/llm/anthropic.d.ts +8 -0
  200. package/dist/llm/anthropic.js +68 -9
  201. package/dist/llm/anthropic.js.map +1 -1
  202. package/dist/llm/aws-mantle.js +60 -12
  203. package/dist/llm/aws-mantle.js.map +1 -1
  204. package/dist/llm/bynara.js +2 -0
  205. package/dist/llm/bynara.js.map +1 -1
  206. package/dist/llm/capabilities.d.ts +7 -0
  207. package/dist/llm/capabilities.js +22 -0
  208. package/dist/llm/capabilities.js.map +1 -1
  209. package/dist/llm/gemini.d.ts +3 -0
  210. package/dist/llm/gemini.js +71 -11
  211. package/dist/llm/gemini.js.map +1 -1
  212. package/dist/llm/groq.d.ts +20 -1
  213. package/dist/llm/groq.js +32 -4
  214. package/dist/llm/groq.js.map +1 -1
  215. package/dist/llm/http.d.ts +29 -0
  216. package/dist/llm/http.js +122 -29
  217. package/dist/llm/http.js.map +1 -1
  218. package/dist/llm/kimchi.js +2 -0
  219. package/dist/llm/kimchi.js.map +1 -1
  220. package/dist/llm/nvidia.js +2 -0
  221. package/dist/llm/nvidia.js.map +1 -1
  222. package/dist/llm/ollama.d.ts +5 -0
  223. package/dist/llm/ollama.js +53 -6
  224. package/dist/llm/ollama.js.map +1 -1
  225. package/dist/llm/openai.js +2 -0
  226. package/dist/llm/openai.js.map +1 -1
  227. package/dist/llm/openrouter.js +2 -0
  228. package/dist/llm/openrouter.js.map +1 -1
  229. package/dist/llm/qwen-cloud.js +2 -0
  230. package/dist/llm/qwen-cloud.js.map +1 -1
  231. package/dist/llm/router.d.ts +16 -0
  232. package/dist/llm/router.js +79 -23
  233. package/dist/llm/router.js.map +1 -1
  234. package/dist/llm/sampling.d.ts +32 -0
  235. package/dist/llm/sampling.js +48 -0
  236. package/dist/llm/sampling.js.map +1 -0
  237. package/dist/llm/stream-progress.d.ts +4 -0
  238. package/dist/llm/stream-progress.js +43 -0
  239. package/dist/llm/stream-progress.js.map +1 -0
  240. package/dist/llm/system-messages.d.ts +29 -0
  241. package/dist/llm/system-messages.js +51 -0
  242. package/dist/llm/system-messages.js.map +1 -0
  243. package/dist/llm/token-usage.d.ts +4 -1
  244. package/dist/llm/token-usage.js +56 -4
  245. package/dist/llm/token-usage.js.map +1 -1
  246. package/dist/llm/tool-protocol.js +30 -0
  247. package/dist/llm/tool-protocol.js.map +1 -1
  248. package/dist/os/process-identity.d.ts +46 -0
  249. package/dist/os/process-identity.js +147 -0
  250. package/dist/os/process-identity.js.map +1 -0
  251. package/dist/os/process-tree.d.ts +15 -0
  252. package/dist/os/process-tree.js +77 -0
  253. package/dist/os/process-tree.js.map +1 -0
  254. package/dist/prompts/embedded.js +1 -1
  255. package/dist/prompts/embedded.js.map +1 -1
  256. package/dist/prompts/system.agent.md +13 -12
  257. package/dist/repl/prompt-line.d.ts +5 -0
  258. package/dist/repl/prompt-line.js +7 -1
  259. package/dist/repl/prompt-line.js.map +1 -1
  260. package/dist/repl.js +71 -41
  261. package/dist/repl.js.map +1 -1
  262. package/dist/safety/classifier.js +98 -44
  263. package/dist/safety/classifier.js.map +1 -1
  264. package/dist/safety/engagement-policy.d.ts +8 -0
  265. package/dist/safety/engagement-policy.js +52 -7
  266. package/dist/safety/engagement-policy.js.map +1 -1
  267. package/dist/safety/patterns.d.ts +44 -0
  268. package/dist/safety/patterns.js +168 -37
  269. package/dist/safety/patterns.js.map +1 -1
  270. package/dist/store/config.d.ts +9 -1
  271. package/dist/store/config.js +51 -1
  272. package/dist/store/config.js.map +1 -1
  273. package/dist/store/history-index.d.ts +12 -0
  274. package/dist/store/history-index.js +47 -18
  275. package/dist/store/history-index.js.map +1 -1
  276. package/dist/store/history.d.ts +5 -2
  277. package/dist/store/history.js +153 -62
  278. package/dist/store/history.js.map +1 -1
  279. package/dist/store/plan.d.ts +81 -5
  280. package/dist/store/plan.js +406 -46
  281. package/dist/store/plan.js.map +1 -1
  282. package/dist/store/redaction-cache.d.ts +12 -0
  283. package/dist/store/redaction-cache.js +51 -0
  284. package/dist/store/redaction-cache.js.map +1 -0
  285. package/dist/store/responder-settlement.d.ts +5 -1
  286. package/dist/store/responder-settlement.js +42 -30
  287. package/dist/store/responder-settlement.js.map +1 -1
  288. package/dist/store/scope.js +36 -27
  289. package/dist/store/scope.js.map +1 -1
  290. package/dist/store/task-transitions.d.ts +19 -0
  291. package/dist/store/task-transitions.js +46 -0
  292. package/dist/store/task-transitions.js.map +1 -0
  293. package/dist/tools/capabilities.js +33 -18
  294. package/dist/tools/capabilities.js.map +1 -1
  295. package/dist/tools/command-intent.d.ts +24 -0
  296. package/dist/tools/command-intent.js +158 -4
  297. package/dist/tools/command-intent.js.map +1 -1
  298. package/dist/tools/definitions.d.ts +5 -1
  299. package/dist/tools/definitions.js +257 -21
  300. package/dist/tools/definitions.js.map +1 -1
  301. package/dist/tools/fs.d.ts +16 -0
  302. package/dist/tools/fs.js +122 -46
  303. package/dist/tools/fs.js.map +1 -1
  304. package/dist/tools/image.js +1 -1
  305. package/dist/tools/image.js.map +1 -1
  306. package/dist/tools/interactive-session-tools.d.ts +11 -0
  307. package/dist/tools/interactive-session-tools.js +261 -0
  308. package/dist/tools/interactive-session-tools.js.map +1 -0
  309. package/dist/tools/jobs.d.ts +78 -4
  310. package/dist/tools/jobs.js +486 -127
  311. package/dist/tools/jobs.js.map +1 -1
  312. package/dist/tools/net-ping-sweep.d.ts +3 -1
  313. package/dist/tools/net-ping-sweep.js +64 -26
  314. package/dist/tools/net-ping-sweep.js.map +1 -1
  315. package/dist/tools/nmap-runner.js +5 -2
  316. package/dist/tools/nmap-runner.js.map +1 -1
  317. package/dist/tools/pdf.js +50 -7
  318. package/dist/tools/pdf.js.map +1 -1
  319. package/dist/tools/registry.js +158 -96
  320. package/dist/tools/registry.js.map +1 -1
  321. package/dist/tools/shell.d.ts +24 -2
  322. package/dist/tools/shell.js +113 -28
  323. package/dist/tools/shell.js.map +1 -1
  324. package/dist/tools/tool-types.d.ts +2 -0
  325. package/dist/tools/validate.d.ts +8 -5
  326. package/dist/tools/validate.js +177 -7
  327. package/dist/tools/validate.js.map +1 -1
  328. package/dist/tools/wordlists.js +69 -17
  329. package/dist/tools/wordlists.js.map +1 -1
  330. package/dist/tui/state.d.ts +4 -0
  331. package/dist/tui/state.js +88 -2
  332. package/dist/tui/state.js.map +1 -1
  333. package/dist/tui-v2/actions/keymap.js +3 -8
  334. package/dist/tui-v2/actions/keymap.js.map +1 -1
  335. package/dist/tui-v2/app/App.js +52 -4
  336. package/dist/tui-v2/app/App.js.map +1 -1
  337. package/dist/tui-v2/app/commands/config-commands.js +5 -2
  338. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  339. package/dist/tui-v2/app/commands/picker-commands.js +3 -0
  340. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  341. package/dist/tui-v2/app/plan-lifecycle.d.ts +1 -1
  342. package/dist/tui-v2/app/plan-lifecycle.js +2 -1
  343. package/dist/tui-v2/app/plan-lifecycle.js.map +1 -1
  344. package/dist/tui-v2/bootstrap/composition-root.d.ts +3 -0
  345. package/dist/tui-v2/bootstrap/composition-root.js +3 -0
  346. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  347. package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -0
  348. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  349. package/dist/tui-v2/components/composer/composer-input-box.d.ts +1 -1
  350. package/dist/tui-v2/components/composer/composer-input-box.js +12 -3
  351. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  352. package/dist/tui-v2/components/jobs/jobs-panel.js +19 -6
  353. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  354. package/dist/tui-v2/components/plan/plan-view.js +9 -6
  355. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  356. package/dist/tui-v2/components/status/status-line.d.ts +15 -0
  357. package/dist/tui-v2/components/status/status-line.js +33 -25
  358. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  359. package/dist/tui-v2/components/transcript/assistant-message.js +17 -9
  360. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  361. package/dist/tui-v2/components/transcript/compacted-row.js +49 -22
  362. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  363. package/dist/tui-v2/components/transcript/intro-card.js +3 -0
  364. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  365. package/dist/tui-v2/components/transcript/thinking-block.js +2 -1
  366. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  367. package/dist/tui-v2/components/transcript/transcript-view.js +27 -2
  368. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  369. package/dist/tui-v2/components/transcript/use-transcript-selection.js +57 -6
  370. package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -1
  371. package/dist/tui-v2/composer/composer-editor.js +12 -6
  372. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  373. package/dist/tui-v2/rendering/incremental-strip.d.ts +11 -0
  374. package/dist/tui-v2/rendering/incremental-strip.js +89 -0
  375. package/dist/tui-v2/rendering/incremental-strip.js.map +1 -0
  376. package/dist/tui-v2/rendering/plan-view.d.ts +12 -0
  377. package/dist/tui-v2/rendering/plan-view.js +71 -2
  378. package/dist/tui-v2/rendering/plan-view.js.map +1 -1
  379. package/dist/tui-v2/rendering/streaming-markdown.d.ts +25 -0
  380. package/dist/tui-v2/rendering/streaming-markdown.js +108 -0
  381. package/dist/tui-v2/rendering/streaming-markdown.js.map +1 -0
  382. package/dist/tui-v2/rendering/thinking-tail.d.ts +5 -0
  383. package/dist/tui-v2/rendering/thinking-tail.js +26 -0
  384. package/dist/tui-v2/rendering/thinking-tail.js.map +1 -0
  385. package/dist/tui-v2/state/transcript-hydrate.js +6 -2
  386. package/dist/tui-v2/state/transcript-hydrate.js.map +1 -1
  387. package/dist/tui-v2/state/transcript-reducer.js +146 -25
  388. package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
  389. package/dist/tui-v2/state/transcript-types.d.ts +6 -0
  390. package/dist/tui-v2/state/transcript-types.js +17 -0
  391. package/dist/tui-v2/state/transcript-types.js.map +1 -1
  392. package/dist/types.d.ts +34 -0
  393. package/dist/types.js.map +1 -1
  394. package/dist/ui/intro-header.d.ts +1 -0
  395. package/dist/ui/intro-header.js +10 -13
  396. package/dist/ui/intro-header.js.map +1 -1
  397. package/dist/ui/markdown.js +9 -2
  398. package/dist/ui/markdown.js.map +1 -1
  399. package/dist/ui/mentions.d.ts +5 -0
  400. package/dist/ui/mentions.js +66 -7
  401. package/dist/ui/mentions.js.map +1 -1
  402. package/dist/ui/thinking.d.ts +5 -1
  403. package/dist/ui/thinking.js +3 -2
  404. package/dist/ui/thinking.js.map +1 -1
  405. package/dist/version.generated.d.ts +2 -2
  406. package/dist/version.generated.js +2 -2
  407. package/package.json +2 -1
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Tool adapter for the seven additive `terminal.*` operations.
3
+ *
4
+ * Existing shell and job tools are untouched. Every handler requires an owning
5
+ * conversation id, projects a concise ANSI-free `output` for providers and
6
+ * transcripts, and returns the structured result under `interactiveSession`.
7
+ */
8
+ import { isScopeActive, loadScope } from "../store/scope.js";
9
+ import { interactiveSessionManager, } from "../interactive-session/manager.js";
10
+ import { isInteractiveSessionsEnabled, resolveInteractiveSessionConfig, } from "../interactive-session/config.js";
11
+ import { asStableError, } from "../interactive-session/types.js";
12
+ import { CONTROL_INPUTS } from "../interactive-session/types.js";
13
+ export const INTERACTIVE_SESSION_TOOL_NAMES = [
14
+ "terminal.start",
15
+ "terminal.send",
16
+ "terminal.read",
17
+ "terminal.status",
18
+ "terminal.list",
19
+ "terminal.resize",
20
+ "terminal.close",
21
+ ];
22
+ function requireString(args, key) {
23
+ const value = args[key];
24
+ if (typeof value !== "string" || value.length === 0) {
25
+ throw new Error(`${key} must be a non-empty string`);
26
+ }
27
+ return value;
28
+ }
29
+ function optionalString(args, key) {
30
+ const value = args[key];
31
+ return typeof value === "string" ? value : undefined;
32
+ }
33
+ function optionalNumber(args, key) {
34
+ const value = args[key];
35
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
36
+ }
37
+ function optionalView(args) {
38
+ const value = optionalString(args, "view");
39
+ if (value === undefined)
40
+ return undefined;
41
+ if (value !== "plain" && value !== "encoded") {
42
+ throw new Error("view must be plain or encoded");
43
+ }
44
+ return value;
45
+ }
46
+ /** Strict validation of the dependent send fields before the manager sees them. */
47
+ function parseInput(args) {
48
+ const kind = requireString(args, "kind");
49
+ if (kind === "text") {
50
+ const text = args.text;
51
+ if (typeof text !== "string")
52
+ throw new Error("text is required when kind is text");
53
+ if (args.control !== undefined)
54
+ throw new Error("control is not allowed when kind is text");
55
+ const submit = optionalString(args, "submit") ?? "enter";
56
+ if (submit !== "enter" && submit !== "none") {
57
+ throw new Error("submit must be enter or none");
58
+ }
59
+ return { kind: "text", text, submit };
60
+ }
61
+ if (kind === "control") {
62
+ const control = requireString(args, "control");
63
+ if (args.text !== undefined)
64
+ throw new Error("text is not allowed when kind is control");
65
+ if (!CONTROL_INPUTS.includes(control)) {
66
+ throw new Error(`control must be one of: ${CONTROL_INPUTS.join(", ")}`);
67
+ }
68
+ return { kind: "control", control: control };
69
+ }
70
+ if (kind === "eof") {
71
+ if (args.text !== undefined || args.control !== undefined) {
72
+ throw new Error("text and control are not allowed when kind is eof");
73
+ }
74
+ return { kind: "eof" };
75
+ }
76
+ throw new Error("kind must be text, control, or eof");
77
+ }
78
+ /** Active engagement scope, so interactive risk matches the shell boundary. */
79
+ async function activeScope() {
80
+ const scope = await loadScope();
81
+ return isScopeActive(scope) ? scope : undefined;
82
+ }
83
+ function requireOwner(options, operation) {
84
+ const ownerId = options?.sessionId;
85
+ if (typeof ownerId === "string" && ownerId.length > 0)
86
+ return ownerId;
87
+ throw new Error(`terminal.${operation} requires an active clai session that owns the interactive session`);
88
+ }
89
+ /**
90
+ * Interactive confirmation. The runner already prompted when it marked the call
91
+ * confirmed; otherwise the managed secret/confirm path is unavailable and a
92
+ * `confirm`-level action is refused rather than silently delivered.
93
+ */
94
+ function confirmPort(options) {
95
+ return async () => options?.confirmed === true;
96
+ }
97
+ function summarizePage(page) {
98
+ if (!page)
99
+ return [];
100
+ const lines = [];
101
+ const body = page.events.map((event) => event.content).join("");
102
+ if (body.length > 0)
103
+ lines.push(body.replace(/\s+$/, ""));
104
+ lines.push(`[cursor ${page.requestedCursor}→${page.nextCursor}${page.hasMore ? " more" : ""}${page.decodingLoss ? " lossy" : ""}${page.omittedBytes ? ` omitted=${page.omittedBytes}B` : ""}]`);
105
+ return lines;
106
+ }
107
+ function describeError(error) {
108
+ return `[${error.code}] ${error.message} (retryable=${error.retryable})`;
109
+ }
110
+ function project(result) {
111
+ const lines = [];
112
+ let ok = true;
113
+ switch (result.operation) {
114
+ case "start":
115
+ lines.push(`session ${result.sessionId} ${result.state} transport=${result.transport}` +
116
+ (result.dimensions
117
+ ? ` ${result.dimensions.columns}x${result.dimensions.rows}`
118
+ : "") +
119
+ (result.degradedReason ? ` degraded=${result.degradedReason}` : ""), `artifact=${result.artifact.path}`);
120
+ break;
121
+ case "send":
122
+ lines.push(`seq=${result.inputSequence} delivery=${result.delivery} bytes=${result.deliveredBytes} state=${result.state}`, ...summarizePage(result.page));
123
+ if (result.error) {
124
+ ok = false;
125
+ lines.push(describeError(result.error));
126
+ }
127
+ break;
128
+ case "read":
129
+ lines.push(`state=${result.state}`, ...summarizePage(result.page));
130
+ if (result.error) {
131
+ ok = false;
132
+ lines.push(describeError(result.error));
133
+ }
134
+ break;
135
+ case "status": {
136
+ const session = result.session;
137
+ lines.push(`${session.id} ${session.state} transport=${session.transport} cursor=${session.earliestCursor}..${session.latestCursor}` +
138
+ (session.inputClosed ? " input=closed" : "") +
139
+ (session.terminationReason ? ` reason=${session.terminationReason}` : ""));
140
+ break;
141
+ }
142
+ case "list":
143
+ lines.push(result.sessions.length === 0
144
+ ? "No interactive sessions for this conversation."
145
+ : result.sessions
146
+ .map((session) => `${session.id} ${session.state} transport=${session.transport} latestCursor=${session.latestCursor}`)
147
+ .join("\n"));
148
+ break;
149
+ case "resize":
150
+ lines.push(`${result.sessionId} resized to ${result.dimensions.columns}x${result.dimensions.rows} (${result.state})`);
151
+ break;
152
+ case "close":
153
+ lines.push(`${result.sessionId} ${result.state}` +
154
+ (result.terminationReason ? ` reason=${result.terminationReason}` : "") +
155
+ ` cleanupVerified=${result.cleanupVerified}`);
156
+ if (result.error) {
157
+ ok = false;
158
+ lines.push(describeError(result.error));
159
+ }
160
+ break;
161
+ }
162
+ return { ok, output: lines.filter((line) => line.length > 0).join("\n"), interactiveSession: result };
163
+ }
164
+ function failure(error, operation) {
165
+ const stable = asStableError(error, {
166
+ code: "INVALID_REQUEST",
167
+ operation,
168
+ message: error instanceof Error ? error.message : "Invalid interactive session request.",
169
+ });
170
+ return { ok: false, output: describeError(stable), exitCode: 1 };
171
+ }
172
+ async function guarded(operation, run) {
173
+ try {
174
+ if (!isInteractiveSessionsEnabled(resolveInteractiveSessionConfig())) {
175
+ return {
176
+ ok: false,
177
+ output: "Interactive terminal sessions are disabled. Use shell.exec or shell.start instead.",
178
+ exitCode: 1,
179
+ };
180
+ }
181
+ return project(await run());
182
+ }
183
+ catch (error) {
184
+ return failure(error, operation);
185
+ }
186
+ }
187
+ export function createInteractiveSessionHandlers(manager = interactiveSessionManager) {
188
+ return {
189
+ "terminal.start": async (args, options) => guarded("start", async () => {
190
+ const ownerId = requireOwner(options, "start");
191
+ const mode = optionalString(args, "terminalMode");
192
+ return await manager.start({
193
+ ownerId,
194
+ command: requireString(args, "command"),
195
+ cwd: optionalString(args, "cwd"),
196
+ terminalMode: mode,
197
+ columns: optionalNumber(args, "columns"),
198
+ rows: optionalNumber(args, "rows"),
199
+ idleTimeoutMs: optionalNumber(args, "idleTimeoutMs"),
200
+ lifetimeTimeoutMs: optionalNumber(args, "lifetimeTimeoutMs"),
201
+ deadlineMs: optionalNumber(args, "deadlineMs"),
202
+ signal: options?.signal,
203
+ confirm: confirmPort(options),
204
+ scope: await activeScope(),
205
+ });
206
+ }),
207
+ "terminal.send": async (args, options) => guarded("send", async () => {
208
+ const ownerId = requireOwner(options, "send");
209
+ return await manager.send({
210
+ ownerId,
211
+ id: requireString(args, "id"),
212
+ input: parseInput(args),
213
+ cursor: optionalNumber(args, "cursor"),
214
+ quietMs: optionalNumber(args, "quietMs"),
215
+ deadlineMs: optionalNumber(args, "deadlineMs"),
216
+ view: optionalView(args),
217
+ signal: options?.signal,
218
+ confirm: confirmPort(options),
219
+ scope: await activeScope(),
220
+ });
221
+ }),
222
+ "terminal.read": async (args, options) => guarded("read", async () => {
223
+ const ownerId = requireOwner(options, "read");
224
+ const cursor = optionalNumber(args, "cursor");
225
+ if (cursor === undefined)
226
+ throw new Error("cursor is required");
227
+ return await manager.read({
228
+ ownerId,
229
+ id: requireString(args, "id"),
230
+ cursor,
231
+ waitMs: optionalNumber(args, "waitMs"),
232
+ view: optionalView(args),
233
+ signal: options?.signal,
234
+ });
235
+ }),
236
+ "terminal.status": async (args, options) => guarded("status", () => manager.status({
237
+ ownerId: requireOwner(options, "status"),
238
+ id: requireString(args, "id"),
239
+ })),
240
+ "terminal.list": async (_args, options) => guarded("list", () => manager.list({ ownerId: requireOwner(options, "list") })),
241
+ "terminal.resize": async (args, options) => guarded("resize", async () => {
242
+ const columns = optionalNumber(args, "columns");
243
+ const rows = optionalNumber(args, "rows");
244
+ if (columns === undefined || rows === undefined) {
245
+ throw new Error("columns and rows are required");
246
+ }
247
+ return await manager.resize({
248
+ ownerId: requireOwner(options, "resize"),
249
+ id: requireString(args, "id"),
250
+ columns,
251
+ rows,
252
+ });
253
+ }),
254
+ "terminal.close": async (args, options) => guarded("close", async () => await manager.close({
255
+ ownerId: requireOwner(options, "close"),
256
+ id: requireString(args, "id"),
257
+ deadlineMs: optionalNumber(args, "deadlineMs"),
258
+ })),
259
+ };
260
+ }
261
+ //# sourceMappingURL=interactive-session-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-session-tools.js","sourceRoot":"","sources":["../../src/tools/interactive-session-tools.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,12 @@ export type JobMonitorMetadata = Record<string, unknown>;
14
14
  export interface JobLinkMetadata {
15
15
  taskId?: string | undefined;
16
16
  parentTaskId?: string | undefined;
17
+ /**
18
+ * Stable delegation identity minted before launch. It is the
19
+ * reconciliation key between a job and its responder child task, so a fast
20
+ * exit or a failed link cannot orphan the child.
21
+ */
22
+ delegationId?: string | undefined;
17
23
  wakeOnCompletion?: boolean | undefined;
18
24
  monitor?: JobMonitorMetadata | undefined;
19
25
  /** Runtime listening lease that authorized this responder delegation. */
@@ -65,6 +71,19 @@ export interface BackgroundJob extends JobLinkMetadata {
65
71
  timeoutAt?: string | undefined;
66
72
  }
67
73
  export declare function formatJobElapsed(job: Pick<BackgroundJob, "startedAt" | "endedAt">, now?: number): string;
74
+ export interface SupersededResultRevision {
75
+ resultRevision: number;
76
+ resultHash: string;
77
+ status: JobTerminalStatus;
78
+ endedAt: string;
79
+ exitCode?: number | undefined;
80
+ signal?: string | undefined;
81
+ deliveredAt?: string | undefined;
82
+ readAt?: string | undefined;
83
+ analyzedAt?: string | undefined;
84
+ acknowledgedAt?: string | undefined;
85
+ settledAt?: string | undefined;
86
+ }
68
87
  export interface ResponderNotification {
69
88
  id: string;
70
89
  ownerSessionId: string;
@@ -84,10 +103,21 @@ export interface ResponderNotification {
84
103
  responder: boolean;
85
104
  monitor?: JobMonitorMetadata | undefined;
86
105
  responderLeaseId?: string | undefined;
106
+ /** A delivery attempt began; not durable consumption. Cleared claims may retry. */
107
+ deliveryStartedAt?: string | undefined;
87
108
  deliveredAt?: string | undefined;
88
109
  readAt?: string | undefined;
89
110
  analyzedAt?: string | undefined;
90
111
  acknowledgedAt?: string | undefined;
112
+ /** User discarded this receipt (cancel/new session); never model analysis. */
113
+ discardedAt?: string | undefined;
114
+ discardReason?: "session-cancelled" | undefined;
115
+ /** Monotonic revision of the authoritative result this receipt carries. */
116
+ resultRevision?: number | undefined;
117
+ /** Content hash of the authoritative result, used to detect a correction. */
118
+ resultHash?: string | undefined;
119
+ /** Bounded audit trail of revisions this receipt superseded. */
120
+ supersededRevisions?: readonly SupersededResultRevision[] | undefined;
91
121
  archivedAt?: string | undefined;
92
122
  settledAt?: string | undefined;
93
123
  }
@@ -100,6 +130,16 @@ export type JobManagerChange = {
100
130
  notificationId: string;
101
131
  };
102
132
  export type JobManagerListener = (change: JobManagerChange) => void;
133
+ /** Durable projection marker for a terminal result whose plan child is unsettled. */
134
+ export interface PendingSettlement {
135
+ jobId: string;
136
+ resultRevision: number;
137
+ attempts: number;
138
+ firstAttemptAt: string;
139
+ lastAttemptAt: string;
140
+ lastReason: string;
141
+ deadLetteredAt?: string | undefined;
142
+ }
103
143
  interface TailCursor {
104
144
  stream?: "stdout" | "stderr" | "combined";
105
145
  offset?: number;
@@ -137,7 +177,9 @@ export declare class JobManager {
137
177
  private authorizationTimers;
138
178
  private responderLeases;
139
179
  private settlementTimers;
140
- private settlementAttempts;
180
+ private pendingSettlements;
181
+ private consumedResponderResults;
182
+ private livenessWatchTimer;
141
183
  private finalizations;
142
184
  private listeners;
143
185
  /**
@@ -147,11 +189,19 @@ export declare class JobManager {
147
189
  * observed alive again or finalized.
148
190
  */
149
191
  private livenessMisses;
192
+ private livenessCheckedAt;
150
193
  private registryRetryTimer;
151
194
  private readonly registryPath;
152
195
  private readonly transientV2RegistryPath;
153
196
  constructor(jobsDir?: string);
154
197
  private isDurable;
198
+ private artifactPathsOf;
199
+ /** Delete a dropped job's artifact chunks, never one still referenced. */
200
+ private removeJobArtifacts;
201
+ /** Drop a job row plus its per-job caches and artifacts. */
202
+ private forgetJob;
203
+ /** Remove artifact files whose job row no longer exists. */
204
+ private sweepOrphanArtifacts;
155
205
  private isLive;
156
206
  private isTerminalStatus;
157
207
  private emit;
@@ -170,6 +220,25 @@ export declare class JobManager {
170
220
  /** Reconcile a restored process that no longer has a ChildProcess close event. */
171
221
  private refreshJobLiveness;
172
222
  private scheduleTaskSettlement;
223
+ private completeSettlement;
224
+ /**
225
+ * Retry until the projection lands. The marker is durable, so a crash or a
226
+ * long-lived plan-write conflict cannot silently strand a green child, and an
227
+ * unrecoverable case is dead-lettered with a visible reason.
228
+ */
229
+ private retrySettlement;
230
+ /**
231
+ * One coalesced, unref'd watcher that reconciles restored live jobs without a
232
+ * UI read. Without it a headless session can leave a finished responder job
233
+ * "running" forever, because liveness was only refreshed by list/get calls.
234
+ */
235
+ private scheduleLivenessWatch;
236
+ /** Ownership guard: a receipt may only be mutated by its owning session. */
237
+ private ownsNotification;
238
+ /** Receipt for a launch that was deduplicated by its delegation key. */
239
+ private startJobReceipt;
240
+ /** Terminal results whose plan child could not be settled yet. */
241
+ getPendingSettlements(): PendingSettlement[];
173
242
  /**
174
243
  * Register an in-flight tool for stall tracking only.
175
244
  * Never appears in shell.jobs and never touches the durable registry.
@@ -188,10 +257,15 @@ export declare class JobManager {
188
257
  pendingNotifications(sessionId?: string): ResponderNotification[];
189
258
  claimNextResponderNotification(sessionId: string, leaseId: string): ResponderNotification | undefined;
190
259
  releaseResponderNotificationClaim(notificationId: string): void;
191
- markDelivered(notificationId: string): boolean;
260
+ /**
261
+ * Record that a delivery attempt started. This is deliberately weaker than
262
+ * `markDelivered`: an aborted or failed analysis turn must remain deliverable.
263
+ */
264
+ markDeliveryStarted(notificationId: string, sessionId?: string): boolean;
265
+ markDelivered(notificationId: string, sessionId?: string): boolean;
192
266
  markRead(notificationId: string, sessionId: string): boolean;
193
- markAnalyzed(notificationId: string): boolean;
194
- acknowledge(notificationId: string): boolean;
267
+ markAnalyzed(notificationId: string, sessionId?: string): boolean;
268
+ acknowledge(notificationId: string, sessionId?: string): boolean;
195
269
  linkJob(jobId: string, metadata: JobLinkMetadata): BackgroundJob | undefined;
196
270
  tailJob(id: string, bytesOrCursor?: number | TailCursor): Promise<ToolResult>;
197
271
  stopJob(id: string, options?: {