@pentoshi/clai 3.9.1 → 3.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) 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 +14 -1
  43. package/dist/agent/runner.js +850 -237
  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/stream-recovery.d.ts +83 -0
  53. package/dist/agent/stream-recovery.js +270 -0
  54. package/dist/agent/stream-recovery.js.map +1 -0
  55. package/dist/agent/task-analyzer.js +7 -3
  56. package/dist/agent/task-analyzer.js.map +1 -1
  57. package/dist/agent/task-evidence.js +2 -0
  58. package/dist/agent/task-evidence.js.map +1 -1
  59. package/dist/agent/task-sync.d.ts +11 -0
  60. package/dist/agent/task-sync.js +31 -0
  61. package/dist/agent/task-sync.js.map +1 -1
  62. package/dist/agent/tool-call-parser.d.ts +6 -13
  63. package/dist/agent/tool-call-parser.js +186 -82
  64. package/dist/agent/tool-call-parser.js.map +1 -1
  65. package/dist/agent/tool-history.d.ts +8 -2
  66. package/dist/agent/tool-history.js +8 -1
  67. package/dist/agent/tool-history.js.map +1 -1
  68. package/dist/agent/turn-outcome.d.ts +4 -1
  69. package/dist/agent/turn-outcome.js +16 -2
  70. package/dist/agent/turn-outcome.js.map +1 -1
  71. package/dist/app/adapters/agent-event-adapter.js +27 -0
  72. package/dist/app/adapters/agent-event-adapter.js.map +1 -1
  73. package/dist/app/adapters/current-agent-adapter.js +1 -0
  74. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  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/job-controller.d.ts +4 -3
  85. package/dist/app/controllers/job-controller.js +9 -6
  86. package/dist/app/controllers/job-controller.js.map +1 -1
  87. package/dist/app/controllers/plan-controller.js +14 -0
  88. package/dist/app/controllers/plan-controller.js.map +1 -1
  89. package/dist/app/controllers/responder-settlement.js +2 -2
  90. package/dist/app/controllers/responder-settlement.js.map +1 -1
  91. package/dist/app/controllers/session-compact-helper.d.ts +23 -1
  92. package/dist/app/controllers/session-compact-helper.js +117 -7
  93. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  94. package/dist/app/controllers/session-context-usage.d.ts +24 -0
  95. package/dist/app/controllers/session-context-usage.js +89 -0
  96. package/dist/app/controllers/session-context-usage.js.map +1 -0
  97. package/dist/app/controllers/session-controller.d.ts +18 -17
  98. package/dist/app/controllers/session-controller.js +127 -119
  99. package/dist/app/controllers/session-controller.js.map +1 -1
  100. package/dist/app/controllers/session-prompt-queue.d.ts +3 -0
  101. package/dist/app/controllers/session-prompt-queue.js +20 -1
  102. package/dist/app/controllers/session-prompt-queue.js.map +1 -1
  103. package/dist/app/controllers/session-responder.js +16 -6
  104. package/dist/app/controllers/session-responder.js.map +1 -1
  105. package/dist/app/controllers/session-turn-request.d.ts +18 -0
  106. package/dist/app/controllers/session-turn-request.js +31 -0
  107. package/dist/app/controllers/session-turn-request.js.map +1 -0
  108. package/dist/app/controllers/turn-continuation.d.ts +14 -0
  109. package/dist/app/controllers/turn-continuation.js +46 -0
  110. package/dist/app/controllers/turn-continuation.js.map +1 -0
  111. package/dist/app/events/app-event.d.ts +21 -0
  112. package/dist/app/events/app-event.js +1 -0
  113. package/dist/app/events/app-event.js.map +1 -1
  114. package/dist/app/ports/agent-port.d.ts +7 -0
  115. package/dist/app/ports/jobs-port.d.ts +4 -3
  116. package/dist/app/ports/persistence-port.d.ts +11 -0
  117. package/dist/app/ports/updates-port.d.ts +8 -0
  118. package/dist/attachments/service.js +13 -2
  119. package/dist/attachments/service.js.map +1 -1
  120. package/dist/commands/providers.js +13 -10
  121. package/dist/commands/providers.js.map +1 -1
  122. package/dist/commands/update.d.ts +4 -0
  123. package/dist/commands/update.js +14 -0
  124. package/dist/commands/update.js.map +1 -1
  125. package/dist/llm/adapters/anthropic-tools.d.ts +14 -1
  126. package/dist/llm/adapters/anthropic-tools.js +36 -5
  127. package/dist/llm/adapters/anthropic-tools.js.map +1 -1
  128. package/dist/llm/adapters/gemini-tools.d.ts +3 -1
  129. package/dist/llm/adapters/gemini-tools.js +5 -2
  130. package/dist/llm/adapters/gemini-tools.js.map +1 -1
  131. package/dist/llm/adapters/ollama-tools.js +8 -3
  132. package/dist/llm/adapters/ollama-tools.js.map +1 -1
  133. package/dist/llm/adapters/openai-tools.js +8 -1
  134. package/dist/llm/adapters/openai-tools.js.map +1 -1
  135. package/dist/llm/agentrouter.js +2 -0
  136. package/dist/llm/agentrouter.js.map +1 -1
  137. package/dist/llm/anthropic.d.ts +8 -0
  138. package/dist/llm/anthropic.js +68 -9
  139. package/dist/llm/anthropic.js.map +1 -1
  140. package/dist/llm/aws-mantle.js +60 -12
  141. package/dist/llm/aws-mantle.js.map +1 -1
  142. package/dist/llm/bynara.js +2 -0
  143. package/dist/llm/bynara.js.map +1 -1
  144. package/dist/llm/capabilities.d.ts +7 -0
  145. package/dist/llm/capabilities.js +22 -0
  146. package/dist/llm/capabilities.js.map +1 -1
  147. package/dist/llm/gemini.d.ts +3 -0
  148. package/dist/llm/gemini.js +71 -11
  149. package/dist/llm/gemini.js.map +1 -1
  150. package/dist/llm/groq.d.ts +20 -1
  151. package/dist/llm/groq.js +32 -4
  152. package/dist/llm/groq.js.map +1 -1
  153. package/dist/llm/http.d.ts +29 -0
  154. package/dist/llm/http.js +122 -29
  155. package/dist/llm/http.js.map +1 -1
  156. package/dist/llm/kimchi.js +2 -0
  157. package/dist/llm/kimchi.js.map +1 -1
  158. package/dist/llm/nvidia.js +2 -0
  159. package/dist/llm/nvidia.js.map +1 -1
  160. package/dist/llm/ollama.d.ts +5 -0
  161. package/dist/llm/ollama.js +53 -6
  162. package/dist/llm/ollama.js.map +1 -1
  163. package/dist/llm/openai.js +2 -0
  164. package/dist/llm/openai.js.map +1 -1
  165. package/dist/llm/openrouter.js +2 -0
  166. package/dist/llm/openrouter.js.map +1 -1
  167. package/dist/llm/qwen-cloud.js +2 -0
  168. package/dist/llm/qwen-cloud.js.map +1 -1
  169. package/dist/llm/router.d.ts +16 -0
  170. package/dist/llm/router.js +79 -23
  171. package/dist/llm/router.js.map +1 -1
  172. package/dist/llm/sampling.d.ts +32 -0
  173. package/dist/llm/sampling.js +48 -0
  174. package/dist/llm/sampling.js.map +1 -0
  175. package/dist/llm/stream-progress.d.ts +4 -0
  176. package/dist/llm/stream-progress.js +43 -0
  177. package/dist/llm/stream-progress.js.map +1 -0
  178. package/dist/llm/system-messages.d.ts +29 -0
  179. package/dist/llm/system-messages.js +51 -0
  180. package/dist/llm/system-messages.js.map +1 -0
  181. package/dist/llm/token-usage.d.ts +4 -1
  182. package/dist/llm/token-usage.js +56 -4
  183. package/dist/llm/token-usage.js.map +1 -1
  184. package/dist/llm/tool-protocol.js +30 -0
  185. package/dist/llm/tool-protocol.js.map +1 -1
  186. package/dist/os/process-tree.d.ts +15 -0
  187. package/dist/os/process-tree.js +77 -0
  188. package/dist/os/process-tree.js.map +1 -0
  189. package/dist/prompts/embedded.js +1 -1
  190. package/dist/prompts/embedded.js.map +1 -1
  191. package/dist/prompts/system.agent.md +13 -12
  192. package/dist/repl/prompt-line.d.ts +5 -0
  193. package/dist/repl/prompt-line.js +7 -1
  194. package/dist/repl/prompt-line.js.map +1 -1
  195. package/dist/repl.js +61 -41
  196. package/dist/repl.js.map +1 -1
  197. package/dist/safety/classifier.js +98 -44
  198. package/dist/safety/classifier.js.map +1 -1
  199. package/dist/safety/engagement-policy.d.ts +8 -0
  200. package/dist/safety/engagement-policy.js +52 -7
  201. package/dist/safety/engagement-policy.js.map +1 -1
  202. package/dist/safety/patterns.d.ts +44 -0
  203. package/dist/safety/patterns.js +168 -37
  204. package/dist/safety/patterns.js.map +1 -1
  205. package/dist/store/config.d.ts +9 -1
  206. package/dist/store/config.js +51 -1
  207. package/dist/store/config.js.map +1 -1
  208. package/dist/store/history-index.d.ts +12 -0
  209. package/dist/store/history-index.js +47 -18
  210. package/dist/store/history-index.js.map +1 -1
  211. package/dist/store/history.d.ts +5 -2
  212. package/dist/store/history.js +153 -62
  213. package/dist/store/history.js.map +1 -1
  214. package/dist/store/plan.d.ts +81 -5
  215. package/dist/store/plan.js +406 -46
  216. package/dist/store/plan.js.map +1 -1
  217. package/dist/store/redaction-cache.d.ts +12 -0
  218. package/dist/store/redaction-cache.js +51 -0
  219. package/dist/store/redaction-cache.js.map +1 -0
  220. package/dist/store/responder-settlement.d.ts +5 -1
  221. package/dist/store/responder-settlement.js +42 -30
  222. package/dist/store/responder-settlement.js.map +1 -1
  223. package/dist/store/scope.js +36 -27
  224. package/dist/store/scope.js.map +1 -1
  225. package/dist/store/task-transitions.d.ts +19 -0
  226. package/dist/store/task-transitions.js +46 -0
  227. package/dist/store/task-transitions.js.map +1 -0
  228. package/dist/tools/capabilities.js +33 -18
  229. package/dist/tools/capabilities.js.map +1 -1
  230. package/dist/tools/command-intent.d.ts +24 -0
  231. package/dist/tools/command-intent.js +158 -4
  232. package/dist/tools/command-intent.js.map +1 -1
  233. package/dist/tools/definitions.d.ts +5 -1
  234. package/dist/tools/definitions.js +162 -21
  235. package/dist/tools/definitions.js.map +1 -1
  236. package/dist/tools/fs.d.ts +16 -0
  237. package/dist/tools/fs.js +122 -46
  238. package/dist/tools/fs.js.map +1 -1
  239. package/dist/tools/image.js +1 -1
  240. package/dist/tools/image.js.map +1 -1
  241. package/dist/tools/jobs.d.ts +78 -4
  242. package/dist/tools/jobs.js +542 -115
  243. package/dist/tools/jobs.js.map +1 -1
  244. package/dist/tools/net-ping-sweep.d.ts +3 -1
  245. package/dist/tools/net-ping-sweep.js +64 -26
  246. package/dist/tools/net-ping-sweep.js.map +1 -1
  247. package/dist/tools/nmap-runner.js +5 -2
  248. package/dist/tools/nmap-runner.js.map +1 -1
  249. package/dist/tools/pdf.js +50 -7
  250. package/dist/tools/pdf.js.map +1 -1
  251. package/dist/tools/registry.js +154 -96
  252. package/dist/tools/registry.js.map +1 -1
  253. package/dist/tools/shell.d.ts +24 -2
  254. package/dist/tools/shell.js +113 -28
  255. package/dist/tools/shell.js.map +1 -1
  256. package/dist/tools/tool-types.d.ts +2 -0
  257. package/dist/tools/validate.d.ts +8 -5
  258. package/dist/tools/validate.js +177 -7
  259. package/dist/tools/validate.js.map +1 -1
  260. package/dist/tools/wordlists.js +69 -17
  261. package/dist/tools/wordlists.js.map +1 -1
  262. package/dist/tui/state.d.ts +4 -0
  263. package/dist/tui/state.js +88 -2
  264. package/dist/tui/state.js.map +1 -1
  265. package/dist/tui-v2/actions/keymap.js +3 -8
  266. package/dist/tui-v2/actions/keymap.js.map +1 -1
  267. package/dist/tui-v2/app/App.js +56 -5
  268. package/dist/tui-v2/app/App.js.map +1 -1
  269. package/dist/tui-v2/app/commands/config-commands.js +5 -2
  270. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  271. package/dist/tui-v2/app/commands/picker-commands.js +3 -0
  272. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  273. package/dist/tui-v2/app/plan-lifecycle.d.ts +1 -1
  274. package/dist/tui-v2/app/plan-lifecycle.js +2 -1
  275. package/dist/tui-v2/app/plan-lifecycle.js.map +1 -1
  276. package/dist/tui-v2/components/composer/composer-input-box.d.ts +1 -1
  277. package/dist/tui-v2/components/composer/composer-input-box.js +12 -3
  278. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  279. package/dist/tui-v2/components/jobs/jobs-panel.js +19 -6
  280. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  281. package/dist/tui-v2/components/plan/plan-view.js +9 -6
  282. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  283. package/dist/tui-v2/components/status/status-line.d.ts +15 -0
  284. package/dist/tui-v2/components/status/status-line.js +33 -25
  285. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  286. package/dist/tui-v2/components/transcript/assistant-message.js +17 -9
  287. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  288. package/dist/tui-v2/components/transcript/compacted-row.js +49 -22
  289. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  290. package/dist/tui-v2/components/transcript/intro-card.js +3 -0
  291. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  292. package/dist/tui-v2/components/transcript/thinking-block.js +2 -1
  293. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  294. package/dist/tui-v2/components/transcript/transcript-view.js +27 -2
  295. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  296. package/dist/tui-v2/components/transcript/use-transcript-selection.js +57 -6
  297. package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -1
  298. package/dist/tui-v2/composer/composer-editor.js +20 -12
  299. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  300. package/dist/tui-v2/rendering/incremental-strip.d.ts +11 -0
  301. package/dist/tui-v2/rendering/incremental-strip.js +89 -0
  302. package/dist/tui-v2/rendering/incremental-strip.js.map +1 -0
  303. package/dist/tui-v2/rendering/plan-view.d.ts +12 -0
  304. package/dist/tui-v2/rendering/plan-view.js +71 -2
  305. package/dist/tui-v2/rendering/plan-view.js.map +1 -1
  306. package/dist/tui-v2/rendering/streaming-markdown.d.ts +25 -0
  307. package/dist/tui-v2/rendering/streaming-markdown.js +108 -0
  308. package/dist/tui-v2/rendering/streaming-markdown.js.map +1 -0
  309. package/dist/tui-v2/rendering/thinking-tail.d.ts +5 -0
  310. package/dist/tui-v2/rendering/thinking-tail.js +26 -0
  311. package/dist/tui-v2/rendering/thinking-tail.js.map +1 -0
  312. package/dist/tui-v2/state/transcript-hydrate.js +6 -2
  313. package/dist/tui-v2/state/transcript-hydrate.js.map +1 -1
  314. package/dist/tui-v2/state/transcript-reducer.js +146 -25
  315. package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
  316. package/dist/tui-v2/state/transcript-types.d.ts +6 -0
  317. package/dist/tui-v2/state/transcript-types.js +17 -0
  318. package/dist/tui-v2/state/transcript-types.js.map +1 -1
  319. package/dist/types.d.ts +29 -0
  320. package/dist/types.js.map +1 -1
  321. package/dist/ui/intro-header.d.ts +1 -0
  322. package/dist/ui/intro-header.js +10 -13
  323. package/dist/ui/intro-header.js.map +1 -1
  324. package/dist/ui/markdown.js +9 -2
  325. package/dist/ui/markdown.js.map +1 -1
  326. package/dist/ui/mentions.d.ts +5 -0
  327. package/dist/ui/mentions.js +66 -7
  328. package/dist/ui/mentions.js.map +1 -1
  329. package/dist/ui/thinking.d.ts +5 -1
  330. package/dist/ui/thinking.js +3 -2
  331. package/dist/ui/thinking.js.map +1 -1
  332. package/dist/version.generated.d.ts +2 -2
  333. package/dist/version.generated.js +2 -2
  334. package/package.json +2 -1
@@ -6,10 +6,27 @@ export const destructiveCommandPatterns = [
6
6
  /\bdel\s+\/f\s+\/s\s+\/q\s+[A-Z]:\\/i,
7
7
  /\bformat\s+[A-Z]:/i,
8
8
  /\bdd\s+if=.*\s+of=\/dev\//,
9
+ // Raw block-device writes through redirection (`> /dev/sda`, `>> /dev/nvme0n1`).
10
+ />>?\s*\/dev\/(?:[sh]d[a-z]\d*|nvme\d+n\d+(?:p\d+)?|disk\d+|mmcblk\d+)\b/i,
9
11
  /mkfs\.[a-z0-9]+\s+\/dev\//i,
12
+ // Recursive permission/ownership destruction of the whole filesystem.
13
+ /\b(?:chmod|chown|chgrp)\s+(?:-[a-zA-Z]*\s+)*-[a-zA-Z]*R[a-zA-Z]*\s+\S+\s+\/(?:\s|$)/,
14
+ /\bchmod\s+(?:-[a-zA-Z]*\s+)*777\s+\/(?:\s|$)/,
15
+ // `find / -delete` / `find / -exec rm` sweeps from the filesystem root.
16
+ /\bfind\s+\/\s+[^|;&]*-(?:delete|exec\s+rm)\b/i,
17
+ // Truncating a critical system file to zero.
18
+ /\btruncate\s+(?:-[a-zA-Z]*\s+)*-s\s*0\s+\/(?:etc|boot|var\/lib)\//i,
10
19
  /:\(\)\s*\{\s*:\|:\s*&\s*}\s*;/,
11
20
  /\bshutdown\b.*\b(now|\/s|\/r)\b/i,
12
21
  ];
22
+ /**
23
+ * Commands that pipe remote content into a shell or push local data into a
24
+ * network sink. These are RECOVERABLE and routinely legitimate — `curl
25
+ * https://sh.rustup.rs | sh` is a documented installer, and `base64 file | nc
26
+ * target 4444` is a textbook authorized-exfiltration test on an engagement —
27
+ * so they are CONFIRMED rather than hard-blocked. The operator is the right
28
+ * authority; a hard block only pushed the model into retrying variants.
29
+ */
13
30
  export const exfiltrationPatterns = [
14
31
  /curl\s+.*\|\s*sh/i,
15
32
  /wget\s+.*\|\s*sh/i,
@@ -20,6 +37,54 @@ export const exfiltrationPatterns = [
20
37
  /base64\s+.*\|\s*(curl|wget|nc)/i,
21
38
  ];
22
39
  export const networkScanTools = ['nmap', 'masscan', 'nikto', 'sqlmap', 'gobuster', 'ffuf', 'hydra', 'dirb', 'wfuzz', 'nuclei'];
40
+ const networkScanToolSet = new Set(networkScanTools);
41
+ const SEGMENT_SPLIT_RE = /(?:\|\||&&|;|\||\n)/g;
42
+ /**
43
+ * Split a command line on pipes / chaining operators and resolve the real
44
+ * executable of each segment, seeing through env-var prefixes, `command`,
45
+ * `exec`, `time`, and `sudo`/`doas` (including their value-taking flags).
46
+ */
47
+ export function splitCommandSegments(command) {
48
+ const segments = [];
49
+ for (const raw of command.split(SEGMENT_SPLIT_RE)) {
50
+ const trimmed = raw.trim();
51
+ if (!trimmed)
52
+ continue;
53
+ const tokens = trimmed.split(/\s+/).filter(Boolean);
54
+ let i = 0;
55
+ let elevated = false;
56
+ while (i < tokens.length && /^[A-Za-z_][\w]*=.*$/.test(tokens[i]))
57
+ i += 1;
58
+ while (i < tokens.length &&
59
+ (tokens[i] === "command" || tokens[i] === "exec" || tokens[i] === "time")) {
60
+ i += 1;
61
+ }
62
+ if (i < tokens.length && (tokens[i] === "sudo" || tokens[i] === "doas")) {
63
+ elevated = true;
64
+ i += 1;
65
+ while (i < tokens.length && tokens[i].startsWith("-")) {
66
+ const flag = tokens[i];
67
+ i += 1;
68
+ if (/^-(?:u|g|p|C|h|U|r|t|T)$/.test(flag) && i < tokens.length)
69
+ i += 1;
70
+ }
71
+ }
72
+ const head = tokens[i];
73
+ if (!head)
74
+ continue;
75
+ segments.push({
76
+ raw: trimmed,
77
+ tokens: tokens.slice(i),
78
+ base: head.replace(/^.*[\\/]/, "").toLowerCase(),
79
+ sub: tokens[i + 1],
80
+ elevated,
81
+ });
82
+ }
83
+ return segments;
84
+ }
85
+ export function isApprovedScannerSegment(segment) {
86
+ return networkScanToolSet.has(segment.base);
87
+ }
23
88
  /**
24
89
  * Commands that never mutate state and never expose secrets through their
25
90
  * default arguments. Powerful commands whose arguments can leak data
@@ -37,10 +102,11 @@ export const readOnlyShellCommands = new Set([
37
102
  'ls', 'dir', 'wc', 'file', 'stat',
38
103
  'find', 'which', 'where', 'whereis', 'type', 'readlink', 'realpath',
39
104
  'tree', 'du', 'df', 'lsof', 'md5', 'md5sum', 'sha256sum', 'shasum',
40
- // networking info
41
- 'ifconfig', 'ipconfig', 'ip', 'ping', 'traceroute', 'tracert', 'dig',
42
- 'nslookup', 'host', 'whois', 'netstat', 'ss', 'route',
43
- 'arp', 'iwconfig', 'nmcli',
105
+ // networking info (state-changing CLIs like ip/nmcli/route/arp are NOT here —
106
+ // they live in subcommandSafeMap so only their read verbs auto-run)
107
+ 'ifconfig', 'ipconfig', 'ping', 'traceroute', 'tracert', 'dig',
108
+ 'nslookup', 'host', 'whois', 'netstat', 'ss',
109
+ 'iwconfig',
44
110
  // process info
45
111
  'ps', 'top', 'htop', 'pgrep', 'lscpu', 'free', 'vmstat', 'iostat',
46
112
  // text processing (operate on stdin/files — safe by themselves)
@@ -85,7 +151,74 @@ export const subcommandSafeMap = {
85
151
  rpm: new Set(['-q', '-qa', '-qi', '-ql', '--query']),
86
152
  docker: new Set(['ps', 'images', 'inspect', 'logs', 'version', 'info', 'history']),
87
153
  kubectl: new Set(['get', 'describe', 'logs', 'version', 'cluster-info', 'api-resources', 'api-versions']),
154
+ // Network configuration CLIs: only the read verbs are safe. `ip link set`,
155
+ // `ip addr add`, `ip route del`, `nmcli con delete`, and `route delete`
156
+ // change host networking and must confirm.
157
+ ip: new Set(['show', 'list', 'sh', 'l', 'monitor', 'help']),
158
+ nmcli: new Set(['show', 'list', 'status', 'help']),
159
+ route: new Set(['show', 'list', 'get', 'print', '-n']),
160
+ arp: new Set(['-a', '-n', '-e', '-v', 'show', 'list']),
88
161
  };
162
+ /**
163
+ * Second-token read verbs for the network CLIs above, so `ip addr show`,
164
+ * `ip -br link`, `nmcli device status`, and `nmcli connection show` auto-run
165
+ * while any other verb confirms. `undefined` means "no verb at all", which is
166
+ * a plain listing (`ip addr`, `nmcli`) and therefore read-only.
167
+ */
168
+ const NETWORK_OBJECT_WORDS = {
169
+ ip: new Set([
170
+ 'addr', 'a', 'address', 'link', 'l', 'route', 'r', 'neigh', 'n',
171
+ 'neighbour', 'neighbor', 'rule', 'maddr', 'tunnel', 'netns', 'monitor',
172
+ ]),
173
+ nmcli: new Set([
174
+ 'device', 'dev', 'd', 'connection', 'con', 'c', 'general', 'g',
175
+ 'networking', 'n', 'radio', 'r', 'monitor', 'agent',
176
+ ]),
177
+ };
178
+ const NETWORK_READ_VERBS = new Set([
179
+ 'show', 'list', 'sh', 'ls', 'l', 'status', 'get', 'print', 'monitor', 'help',
180
+ ]);
181
+ /**
182
+ * True when a network-configuration command mutates host state. `ip`, `nmcli`,
183
+ * `route`, and `arp` are argument-shaped rather than subcommand-shaped, so the
184
+ * read verbs are enumerated explicitly and everything else (set/add/del/
185
+ * delete/flush/up/down/modify/replace/change) requires confirmation.
186
+ */
187
+ export function commandHasStatefulSysadminArg(command) {
188
+ for (const segment of splitCommandSegments(command)) {
189
+ const objects = NETWORK_OBJECT_WORDS[segment.base];
190
+ if (segment.base === 'route' || segment.base === 'arp') {
191
+ const words = segment.tokens
192
+ .slice(1)
193
+ .filter((token) => !token.startsWith('-'));
194
+ const verb = words[0]?.toLowerCase();
195
+ if (verb === undefined)
196
+ continue;
197
+ if (NETWORK_READ_VERBS.has(verb))
198
+ continue;
199
+ return true;
200
+ }
201
+ if (!objects)
202
+ continue;
203
+ const words = segment.tokens
204
+ .slice(1)
205
+ .filter((token) => !token.startsWith('-'));
206
+ const object = words[0]?.toLowerCase();
207
+ if (object === undefined)
208
+ continue;
209
+ if (!objects.has(object)) {
210
+ // Unknown object word for this CLI — be conservative and confirm.
211
+ return true;
212
+ }
213
+ const verb = words[1]?.toLowerCase();
214
+ if (verb === undefined)
215
+ continue;
216
+ if (NETWORK_READ_VERBS.has(verb))
217
+ continue;
218
+ return true;
219
+ }
220
+ return false;
221
+ }
89
222
  /**
90
223
  * Patterns that move an otherwise-safe-looking command into the
91
224
  * confirm bucket because their arguments mutate state, exfiltrate
@@ -299,43 +432,12 @@ export function isVersionOrHelpProbe(command) {
299
432
  * auto-run, while a chain that includes a mutator (`cat a | tee b`) is flagged.
300
433
  */
301
434
  export function commandIsMutating(command) {
302
- const segments = command
303
- .split(/(?:\|\||&&|;|\|)/g)
304
- .map((segment) => segment.trim())
305
- .filter(Boolean);
306
- for (const segment of segments) {
307
- const tokens = segment.split(/\s+/);
308
- let i = 0;
309
- // Skip env-var assignment prefixes ("FOO=bar cmd ...") and exec/command.
310
- while (i < tokens.length && /^[A-Za-z_][\w]*=.*$/.test(tokens[i]))
311
- i += 1;
312
- if (i < tokens.length &&
313
- (tokens[i] === "command" || tokens[i] === "exec" || tokens[i] === "time")) {
314
- i += 1;
315
- }
316
- // See through a leading sudo/doas (and its flags) so the REAL command is
317
- // classified: `sudo rm` / `sudo apt install` confirm, while `sudo
318
- // systemctl start` / `sudo cat` stay non-mutating. sudo itself no longer
319
- // forces a confirm — the OS password prompt is the real gate.
320
- if (i < tokens.length && (tokens[i] === "sudo" || tokens[i] === "doas")) {
321
- i += 1;
322
- while (i < tokens.length && tokens[i].startsWith("-")) {
323
- const flag = tokens[i];
324
- i += 1;
325
- // sudo flags that consume a following value.
326
- if (/^-(?:u|g|p|C|h|U|r|t|T)$/.test(flag) && i < tokens.length)
327
- i += 1;
328
- }
329
- }
330
- const head = tokens[i];
331
- if (!head)
332
- continue;
333
- const base = head.replace(/^.*[\\/]/, "").toLowerCase();
435
+ for (const segment of splitCommandSegments(command)) {
436
+ const { base, sub } = segment;
334
437
  if (!mutatingCommandBases.has(base))
335
438
  continue;
336
439
  // A read-only subcommand of an otherwise-mutating CLI (git status,
337
440
  // docker ps, npm list) is NOT a mutation.
338
- const sub = tokens[i + 1];
339
441
  const allow = subcommandSafeMap[base];
340
442
  if (allow && sub && (allow.has(sub) || allow.has(sub.replace(/^--/, "")))) {
341
443
  continue;
@@ -344,6 +446,35 @@ export function commandIsMutating(command) {
344
446
  }
345
447
  return false;
346
448
  }
449
+ /**
450
+ * True only when EVERY executable segment of the command is either an
451
+ * approved network scanner or an already-read-only command, and at least one
452
+ * segment is a scanner. This is what makes the scanner exemption monotonic:
453
+ * a scanner token can never turn a mutating or unknown segment into `safe`,
454
+ * so `nmap host && rm -rf build` or `nmap host > /etc/hosts` keep the risk
455
+ * level they would have had without the scanner word.
456
+ */
457
+ export function commandIsScannerOnly(command) {
458
+ const segments = splitCommandSegments(command);
459
+ if (segments.length === 0)
460
+ return false;
461
+ let sawScanner = false;
462
+ for (const segment of segments) {
463
+ if (isApprovedScannerSegment(segment)) {
464
+ sawScanner = true;
465
+ continue;
466
+ }
467
+ if (readOnlyShellCommands.has(segment.base))
468
+ continue;
469
+ const allow = subcommandSafeMap[segment.base];
470
+ const sub = segment.sub;
471
+ if (allow && sub && (allow.has(sub) || allow.has(sub.replace(/^--/, "")))) {
472
+ continue;
473
+ }
474
+ return false;
475
+ }
476
+ return sawScanner;
477
+ }
347
478
  /**
348
479
  * @deprecated Secret-path hard blocks were removed. Patterns retained only
349
480
  * for diagnostics / legacy tests — {@link isSecretPath} always returns false
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/safety/patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/safety/patterns.ts"],"names":[],"mappings":"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"}
@@ -44,8 +44,10 @@ export interface ClaiConfig {
44
44
  toolCalling?: "auto" | "native" | "text";
45
45
  /** E1: auto-compact at softCompactTokenBudget before the hard 100k ceiling. */
46
46
  softEarlyCompact?: boolean;
47
- /** E1: soft auto-compact trigger (tokens). Clamped to ≤ hard budget. */
47
+ /** @deprecated Legacy soft trigger; migrated to autoCompactRequestTokens. */
48
48
  softCompactTokenBudget?: number;
49
+ /** Total estimated request tokens that trigger auto-compaction. */
50
+ autoCompactRequestTokens?: number;
49
51
  /** E2: max chars of fs.read/list/search body kept in model context (full on disk). */
50
52
  fsPassthroughCapChars?: number;
51
53
  /** E3: lower maxTokens on tool steps vs legacy 32k fixed. */
@@ -74,6 +76,12 @@ export declare function setDefaultProvider(provider: ProviderId): ClaiConfig;
74
76
  export declare function setDefaultMode(mode: Mode): ClaiConfig;
75
77
  export declare function setProviderModel(provider: ProviderId, model: string): ClaiConfig;
76
78
  export declare function getProviderModel(provider: ProviderId): string;
79
+ /**
80
+ * True when the user (or a migration) actually persisted this key. Defaults are
81
+ * resolved by Conf, so a resolved value alone cannot prove intent — the raw file
82
+ * is the only honest source for migration decisions.
83
+ */
84
+ export declare function hasExplicitConfigKey(key: keyof ClaiConfig): boolean;
77
85
  export declare function getConfigPath(): string;
78
86
  export declare function setThinking(patch: Partial<ReasoningPreference>): ClaiConfig;
79
87
  export declare function getActiveSearchProvider(): SearchProviderId;
@@ -1,5 +1,6 @@
1
1
  import Conf from "conf";
2
2
  import { dirname } from "node:path";
3
+ import { readFileSync, statSync } from "node:fs";
3
4
  import { DEFAULT_EXA_SEARCH_TYPE } from "../tools/web/types.js";
4
5
  import { defaultModels, sanitizeProviderModel } from "../llm/provider.js";
5
6
  import { safeCwd } from "../os/cwd.js";
@@ -51,7 +52,7 @@ const defaults = {
51
52
  permissions: "default",
52
53
  toolCalling: "auto",
53
54
  softEarlyCompact: true,
54
- softCompactTokenBudget: 72_000,
55
+ autoCompactRequestTokens: 80_000,
55
56
  fsPassthroughCapChars: 64_000,
56
57
  adaptiveMaxTokens: true,
57
58
  freeTierContextGuard: true,
@@ -76,7 +77,41 @@ const store = (() => {
76
77
  handlePermissionError(err);
77
78
  }
78
79
  })();
80
+ let cachedConfig;
81
+ /** Cheap identity of the on-disk config so external edits invalidate the cache. */
82
+ function configFileKey() {
83
+ try {
84
+ const info = statSync(store.path);
85
+ return `${info.mtimeMs}:${info.size}`;
86
+ }
87
+ catch {
88
+ return undefined;
89
+ }
90
+ }
91
+ function invalidateConfigCache() {
92
+ cachedConfig = undefined;
93
+ }
94
+ /** Fresh mutable view over the cached snapshot; callers may edit their copy. */
95
+ function cloneConfig(config) {
96
+ return {
97
+ ...config,
98
+ providerModels: { ...config.providerModels },
99
+ allowAlwaysTools: [...config.allowAlwaysTools],
100
+ sandboxRoots: [...config.sandboxRoots],
101
+ thinking: { ...config.thinking },
102
+ };
103
+ }
79
104
  export function getConfig() {
105
+ const key = configFileKey();
106
+ if (key !== undefined && cachedConfig?.key === key) {
107
+ return cloneConfig(cachedConfig.value);
108
+ }
109
+ const resolved = readConfigFromStore();
110
+ if (key !== undefined)
111
+ cachedConfig = { key, value: resolved };
112
+ return cloneConfig(resolved);
113
+ }
114
+ function readConfigFromStore() {
80
115
  const current = store.store;
81
116
  const providerModels = {};
82
117
  for (const [provider, model] of Object.entries(current.providerModels ?? {})) {
@@ -97,6 +132,7 @@ export function updateConfig(patch) {
97
132
  catch (err) {
98
133
  handlePermissionError(err);
99
134
  }
135
+ invalidateConfigCache();
100
136
  return getConfig();
101
137
  }
102
138
  export function setDefaultProvider(provider) {
@@ -118,6 +154,20 @@ export function getProviderModel(provider) {
118
154
  ? sanitizeProviderModel(provider, configured)
119
155
  : defaultModels[provider];
120
156
  }
157
+ /**
158
+ * True when the user (or a migration) actually persisted this key. Defaults are
159
+ * resolved by Conf, so a resolved value alone cannot prove intent — the raw file
160
+ * is the only honest source for migration decisions.
161
+ */
162
+ export function hasExplicitConfigKey(key) {
163
+ try {
164
+ const raw = JSON.parse(readFileSync(store.path, "utf8"));
165
+ return Object.prototype.hasOwnProperty.call(raw, key);
166
+ }
167
+ catch {
168
+ return false;
169
+ }
170
+ }
121
171
  export function getConfigPath() {
122
172
  return store.path;
123
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/store/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/store/config.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,18 @@ interface HistoryRecordShape {
34
34
  workspaceCode?: string | undefined;
35
35
  }
36
36
  export declare function historySummary(record: HistoryRecordShape): HistorySummary;
37
+ export interface HistoryAppendResult {
38
+ entries: HistoryIndexEntry[];
39
+ fileSize: number;
40
+ liveBytes: number;
41
+ }
42
+ export declare function historyIndexLiveBytes(entries: readonly HistoryIndexEntry[]): number;
43
+ /**
44
+ * Append one record and refresh the (small) index instead of rewriting every
45
+ * session. Older lines for the same id stay on disk until compaction; the
46
+ * index keeps only the newest offset per id, matching rebuild semantics.
47
+ */
48
+ export declare function appendIndexedHistoryRecord<T extends HistoryRecordShape>(jsonlPath: string, indexPath: string, entries: readonly HistoryIndexEntry[], record: T): Promise<HistoryAppendResult>;
37
49
  export declare function writeIndexedJsonl(jsonlPath: string, indexPath: string, records: readonly HistoryRecordShape[]): Promise<void>;
38
50
  export declare function readValidatedHistoryIndex(jsonlPath: string, indexPath: string): Promise<HistoryIndexEntry[] | undefined>;
39
51
  export declare function readIndexedHistoryRecord<T>(jsonlPath: string, entry: HistoryIndexEntry): Promise<T | undefined>;
@@ -24,6 +24,51 @@ export function historySummary(record) {
24
24
  ...(record.workspaceCode ? { workspaceCode: record.workspaceCode } : {}),
25
25
  };
26
26
  }
27
+ async function writeHistoryIndexFile(jsonlPath, indexPath, entries) {
28
+ const source = await stat(jsonlPath);
29
+ const index = {
30
+ schemaVersion: 1,
31
+ source: { size: source.size, mtimeMs: source.mtimeMs },
32
+ entries: [...entries],
33
+ };
34
+ const temp = `${indexPath}.${process.pid}.${randomUUID()}.tmp`;
35
+ await writeFile(temp, `${JSON.stringify(index)}\n`, { mode: 0o600 });
36
+ await rename(temp, indexPath);
37
+ }
38
+ export function historyIndexLiveBytes(entries) {
39
+ return entries.reduce((total, entry) => total + entry.length, 0);
40
+ }
41
+ /**
42
+ * Append one record and refresh the (small) index instead of rewriting every
43
+ * session. Older lines for the same id stay on disk until compaction; the
44
+ * index keeps only the newest offset per id, matching rebuild semantics.
45
+ */
46
+ export async function appendIndexedHistoryRecord(jsonlPath, indexPath, entries, record) {
47
+ const line = Buffer.from(`${JSON.stringify(record)}\n`, "utf8");
48
+ const handle = await open(jsonlPath, "a", 0o600);
49
+ let offset = 0;
50
+ try {
51
+ offset = (await handle.stat()).size;
52
+ await handle.write(line, 0, line.length, offset);
53
+ await handle.sync().catch(() => undefined);
54
+ }
55
+ finally {
56
+ await handle.close();
57
+ }
58
+ const next = entries.filter((entry) => entry.id !== record.id);
59
+ next.push({
60
+ id: record.id,
61
+ offset,
62
+ length: line.length,
63
+ summary: historySummary(record),
64
+ });
65
+ await writeHistoryIndexFile(jsonlPath, indexPath, next);
66
+ return {
67
+ entries: next,
68
+ fileSize: offset + line.length,
69
+ liveBytes: historyIndexLiveBytes(next),
70
+ };
71
+ }
27
72
  export async function writeIndexedJsonl(jsonlPath, indexPath, records) {
28
73
  const entries = [];
29
74
  const lines = [];
@@ -41,17 +86,9 @@ export async function writeIndexedJsonl(jsonlPath, indexPath, records) {
41
86
  }
42
87
  const token = `${process.pid}.${randomUUID()}`;
43
88
  const jsonlTemp = `${jsonlPath}.${token}.tmp`;
44
- const indexTemp = `${indexPath}.${token}.tmp`;
45
89
  await writeFile(jsonlTemp, Buffer.concat(lines), { mode: 0o600 });
46
90
  await rename(jsonlTemp, jsonlPath);
47
- const source = await stat(jsonlPath);
48
- const index = {
49
- schemaVersion: 1,
50
- source: { size: source.size, mtimeMs: source.mtimeMs },
51
- entries,
52
- };
53
- await writeFile(indexTemp, `${JSON.stringify(index)}\n`, { mode: 0o600 });
54
- await rename(indexTemp, indexPath);
91
+ await writeHistoryIndexFile(jsonlPath, indexPath, entries);
55
92
  }
56
93
  export async function readValidatedHistoryIndex(jsonlPath, indexPath) {
57
94
  try {
@@ -171,15 +208,7 @@ export async function rebuildHistoryIndex(jsonlPath, indexPath) {
171
208
  });
172
209
  const entries = [...byId.values()];
173
210
  try {
174
- const source = await stat(jsonlPath);
175
- const index = {
176
- schemaVersion: 1,
177
- source: { size: source.size, mtimeMs: source.mtimeMs },
178
- entries,
179
- };
180
- const temp = `${indexPath}.${process.pid}.${randomUUID()}.tmp`;
181
- await writeFile(temp, `${JSON.stringify(index)}\n`, { mode: 0o600 });
182
- await rename(temp, indexPath);
211
+ await writeHistoryIndexFile(jsonlPath, indexPath, entries);
183
212
  }
184
213
  catch {
185
214
  // Listing remains usable from the in-memory streaming result.
@@ -1 +1 @@
1
- {"version":3,"file":"history-index.js","sourceRoot":"","sources":["../../src/store/history-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history-index.js","sourceRoot":"","sources":["../../src/store/history-index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type ChatMessage, type ToolCall, type ToolResult } from "../types.js";
2
2
  import type { TranscriptItem } from "../tui/state.js";
3
+ import type { PreviousTurnSignal } from "../agent/continue-orient.js";
3
4
  import { type HistorySummary } from "./history-index.js";
4
5
  export type { HistorySummary } from "./history-index.js";
5
6
  /** Persisted token/context footer snapshot (survives /history resume). */
@@ -35,6 +36,8 @@ export interface HistoryRecord {
35
36
  * falls back to a cheap estimate that under-counts vs live turns.
36
37
  */
37
38
  contextUsage?: PersistedContextUsage | undefined;
39
+ /** Last settled outcome, or an interrupted in-flight turn, for restart recovery. */
40
+ previousTurn?: PreviousTurnSignal | undefined;
38
41
  /**
39
42
  * Session workspace folder name under `{tmpdir}/clai/`
40
43
  * (e.g. `a3f9c1-18-07-2026-14-24-23`). Bound on resume so scratch +
@@ -76,8 +79,8 @@ export declare function recoverOrphanedHistory(): Promise<{
76
79
  recovered: number;
77
80
  sources: string[];
78
81
  }>;
79
- export declare function saveSession(messages: ChatMessage[], name?: string | undefined, transcript?: TranscriptItem[] | undefined, contextUsage?: PersistedContextUsage | undefined, revision?: number | undefined, writerGeneration?: string | undefined): Promise<HistoryRecord>;
80
- export declare function upsertSession(id: string, messages: ChatMessage[], name?: string | undefined, transcript?: TranscriptItem[] | undefined, contextUsage?: PersistedContextUsage | undefined, revision?: number | undefined, writerGeneration?: string | undefined): Promise<HistoryRecord>;
82
+ export declare function saveSession(messages: ChatMessage[], name?: string | undefined, transcript?: TranscriptItem[] | undefined, contextUsage?: PersistedContextUsage | undefined, revision?: number | undefined, writerGeneration?: string | undefined, previousTurn?: PreviousTurnSignal | null | undefined): Promise<HistoryRecord>;
83
+ export declare function upsertSession(id: string, messages: ChatMessage[], name?: string | undefined, transcript?: TranscriptItem[] | undefined, contextUsage?: PersistedContextUsage | undefined, revision?: number | undefined, writerGeneration?: string | undefined, previousTurn?: PreviousTurnSignal | null | undefined): Promise<HistoryRecord>;
81
84
  export declare function saveToolCall(sessionId: string, call: ToolCall, result: ToolResult): Promise<ToolCallRecord>;
82
85
  export declare function listSessionSummaries(limit?: number, options?: {
83
86
  recovery?: "blocking" | "background";