@hansjm10/volt-coding-agent 0.0.0-bootstrap.0 → 0.1.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 (1364) hide show
  1. package/BINARY-CAPABILITIES.md +28 -0
  2. package/CHANGELOG.md +4845 -0
  3. package/LICENSE +1 -1
  4. package/README.md +716 -3
  5. package/THIRD-PARTY-NOTICES.md +55 -0
  6. package/dist/LICENSES/clipboard-image-MIT.txt +9 -0
  7. package/dist/LICENSES/highlight.js-10.7.3-BSD-3-Clause.txt +29 -0
  8. package/dist/LICENSES/highlight.js-11.9.0-BSD-3-Clause.txt +29 -0
  9. package/dist/LICENSES/marked-18.0.5-LICENSE.txt +44 -0
  10. package/dist/LICENSES/run-jxa-MIT.txt +9 -0
  11. package/dist/cli/args.d.ts +60 -0
  12. package/dist/cli/args.d.ts.map +1 -0
  13. package/dist/cli/args.js +414 -0
  14. package/dist/cli/args.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts +14 -0
  16. package/dist/cli/config-selector.d.ts.map +1 -0
  17. package/dist/cli/config-selector.js +31 -0
  18. package/dist/cli/config-selector.js.map +1 -0
  19. package/dist/cli/file-processor.d.ts +15 -0
  20. package/dist/cli/file-processor.d.ts.map +1 -0
  21. package/dist/cli/file-processor.js +85 -0
  22. package/dist/cli/file-processor.js.map +1 -0
  23. package/dist/cli/initial-message.d.ts +18 -0
  24. package/dist/cli/initial-message.d.ts.map +1 -0
  25. package/dist/cli/initial-message.js +22 -0
  26. package/dist/cli/initial-message.js.map +1 -0
  27. package/dist/cli/list-models.d.ts +9 -0
  28. package/dist/cli/list-models.d.ts.map +1 -0
  29. package/dist/cli/list-models.js +98 -0
  30. package/dist/cli/list-models.js.map +1 -0
  31. package/dist/cli/project-trust.d.ts +10 -0
  32. package/dist/cli/project-trust.d.ts.map +1 -0
  33. package/dist/cli/project-trust.js +48 -0
  34. package/dist/cli/project-trust.js.map +1 -0
  35. package/dist/cli/session-picker.d.ts +9 -0
  36. package/dist/cli/session-picker.d.ts.map +1 -0
  37. package/dist/cli/session-picker.js +35 -0
  38. package/dist/cli/session-picker.js.map +1 -0
  39. package/dist/cli/startup-ui.d.ts +17 -0
  40. package/dist/cli/startup-ui.d.ts.map +1 -0
  41. package/dist/cli/startup-ui.js +133 -0
  42. package/dist/cli/startup-ui.js.map +1 -0
  43. package/dist/cli.d.ts +3 -0
  44. package/dist/cli.d.ts.map +1 -0
  45. package/dist/cli.js +18 -0
  46. package/dist/cli.js.map +1 -0
  47. package/dist/config.d.ts +85 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +487 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/core/agent-session-runtime.d.ts +160 -0
  52. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  53. package/dist/core/agent-session-runtime.js +397 -0
  54. package/dist/core/agent-session-runtime.js.map +1 -0
  55. package/dist/core/agent-session-services.d.ts +98 -0
  56. package/dist/core/agent-session-services.d.ts.map +1 -0
  57. package/dist/core/agent-session-services.js +125 -0
  58. package/dist/core/agent-session-services.js.map +1 -0
  59. package/dist/core/agent-session.d.ts +739 -0
  60. package/dist/core/agent-session.d.ts.map +1 -0
  61. package/dist/core/agent-session.js +3158 -0
  62. package/dist/core/agent-session.js.map +1 -0
  63. package/dist/core/auth-guidance.d.ts +5 -0
  64. package/dist/core/auth-guidance.d.ts.map +1 -0
  65. package/dist/core/auth-guidance.js +21 -0
  66. package/dist/core/auth-guidance.js.map +1 -0
  67. package/dist/core/auth-storage.d.ts +159 -0
  68. package/dist/core/auth-storage.d.ts.map +1 -0
  69. package/dist/core/auth-storage.js +509 -0
  70. package/dist/core/auth-storage.js.map +1 -0
  71. package/dist/core/bash-executor.d.ts +32 -0
  72. package/dist/core/bash-executor.d.ts.map +1 -0
  73. package/dist/core/bash-executor.js +111 -0
  74. package/dist/core/bash-executor.js.map +1 -0
  75. package/dist/core/compaction/branch-summarization.d.ts +92 -0
  76. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  77. package/dist/core/compaction/branch-summarization.js +257 -0
  78. package/dist/core/compaction/branch-summarization.js.map +1 -0
  79. package/dist/core/compaction/compaction.d.ts +121 -0
  80. package/dist/core/compaction/compaction.d.ts.map +1 -0
  81. package/dist/core/compaction/compaction.js +658 -0
  82. package/dist/core/compaction/compaction.js.map +1 -0
  83. package/dist/core/compaction/index.d.ts +7 -0
  84. package/dist/core/compaction/index.d.ts.map +1 -0
  85. package/dist/core/compaction/index.js +7 -0
  86. package/dist/core/compaction/index.js.map +1 -0
  87. package/dist/core/compaction/utils.d.ts +56 -0
  88. package/dist/core/compaction/utils.d.ts.map +1 -0
  89. package/dist/core/compaction/utils.js +271 -0
  90. package/dist/core/compaction/utils.js.map +1 -0
  91. package/dist/core/defaults.d.ts +3 -0
  92. package/dist/core/defaults.d.ts.map +1 -0
  93. package/dist/core/defaults.js +2 -0
  94. package/dist/core/defaults.js.map +1 -0
  95. package/dist/core/diagnostics.d.ts +15 -0
  96. package/dist/core/diagnostics.d.ts.map +1 -0
  97. package/dist/core/diagnostics.js +2 -0
  98. package/dist/core/diagnostics.js.map +1 -0
  99. package/dist/core/event-bus.d.ts +9 -0
  100. package/dist/core/event-bus.d.ts.map +1 -0
  101. package/dist/core/event-bus.js +25 -0
  102. package/dist/core/event-bus.js.map +1 -0
  103. package/dist/core/exec.d.ts +29 -0
  104. package/dist/core/exec.d.ts.map +1 -0
  105. package/dist/core/exec.js +75 -0
  106. package/dist/core/exec.js.map +1 -0
  107. package/dist/core/experimental.d.ts +2 -0
  108. package/dist/core/experimental.d.ts.map +1 -0
  109. package/dist/core/experimental.js +4 -0
  110. package/dist/core/experimental.js.map +1 -0
  111. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  112. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  113. package/dist/core/export-html/ansi-to-html.js +249 -0
  114. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  115. package/dist/core/export-html/index.d.ts +37 -0
  116. package/dist/core/export-html/index.d.ts.map +1 -0
  117. package/dist/core/export-html/index.js +234 -0
  118. package/dist/core/export-html/index.js.map +1 -0
  119. package/dist/core/export-html/template.css +1066 -0
  120. package/dist/core/export-html/template.html +55 -0
  121. package/dist/core/export-html/template.js +1864 -0
  122. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  123. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  124. package/dist/core/export-html/tool-renderer.js +108 -0
  125. package/dist/core/export-html/tool-renderer.js.map +1 -0
  126. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  127. package/dist/core/export-html/vendor/marked.min.js +78 -0
  128. package/dist/core/extensions/index.d.ts +12 -0
  129. package/dist/core/extensions/index.d.ts.map +1 -0
  130. package/dist/core/extensions/index.js +9 -0
  131. package/dist/core/extensions/index.js.map +1 -0
  132. package/dist/core/extensions/loader.d.ts +25 -0
  133. package/dist/core/extensions/loader.d.ts.map +1 -0
  134. package/dist/core/extensions/loader.js +516 -0
  135. package/dist/core/extensions/loader.js.map +1 -0
  136. package/dist/core/extensions/runner.d.ts +180 -0
  137. package/dist/core/extensions/runner.d.ts.map +1 -0
  138. package/dist/core/extensions/runner.js +938 -0
  139. package/dist/core/extensions/runner.js.map +1 -0
  140. package/dist/core/extensions/types.d.ts +1215 -0
  141. package/dist/core/extensions/types.d.ts.map +1 -0
  142. package/dist/core/extensions/types.js +48 -0
  143. package/dist/core/extensions/types.js.map +1 -0
  144. package/dist/core/extensions/wrapper.d.ts +20 -0
  145. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  146. package/dist/core/extensions/wrapper.js +22 -0
  147. package/dist/core/extensions/wrapper.js.map +1 -0
  148. package/dist/core/footer-data-provider.d.ts +54 -0
  149. package/dist/core/footer-data-provider.d.ts.map +1 -0
  150. package/dist/core/footer-data-provider.js +338 -0
  151. package/dist/core/footer-data-provider.js.map +1 -0
  152. package/dist/core/host-actions.d.ts +107 -0
  153. package/dist/core/host-actions.d.ts.map +1 -0
  154. package/dist/core/host-actions.js +632 -0
  155. package/dist/core/host-actions.js.map +1 -0
  156. package/dist/core/host-interaction.d.ts +35 -0
  157. package/dist/core/host-interaction.d.ts.map +1 -0
  158. package/dist/core/host-interaction.js +2 -0
  159. package/dist/core/host-interaction.js.map +1 -0
  160. package/dist/core/http-dispatcher.d.ts +22 -0
  161. package/dist/core/http-dispatcher.d.ts.map +1 -0
  162. package/dist/core/http-dispatcher.js +64 -0
  163. package/dist/core/http-dispatcher.js.map +1 -0
  164. package/dist/core/index.d.ts +18 -0
  165. package/dist/core/index.d.ts.map +1 -0
  166. package/dist/core/index.js +17 -0
  167. package/dist/core/index.js.map +1 -0
  168. package/dist/core/keybindings.d.ts +373 -0
  169. package/dist/core/keybindings.d.ts.map +1 -0
  170. package/dist/core/keybindings.js +303 -0
  171. package/dist/core/keybindings.js.map +1 -0
  172. package/dist/core/lsp/client.d.ts +119 -0
  173. package/dist/core/lsp/client.d.ts.map +1 -0
  174. package/dist/core/lsp/client.js +711 -0
  175. package/dist/core/lsp/client.js.map +1 -0
  176. package/dist/core/lsp/config.d.ts +96 -0
  177. package/dist/core/lsp/config.d.ts.map +1 -0
  178. package/dist/core/lsp/config.js +206 -0
  179. package/dist/core/lsp/config.js.map +1 -0
  180. package/dist/core/lsp/index.d.ts +6 -0
  181. package/dist/core/lsp/index.d.ts.map +1 -0
  182. package/dist/core/lsp/index.js +6 -0
  183. package/dist/core/lsp/index.js.map +1 -0
  184. package/dist/core/lsp/manager.d.ts +122 -0
  185. package/dist/core/lsp/manager.d.ts.map +1 -0
  186. package/dist/core/lsp/manager.js +1136 -0
  187. package/dist/core/lsp/manager.js.map +1 -0
  188. package/dist/core/lsp/trace.d.ts +26 -0
  189. package/dist/core/lsp/trace.d.ts.map +1 -0
  190. package/dist/core/lsp/trace.js +98 -0
  191. package/dist/core/lsp/trace.js.map +1 -0
  192. package/dist/core/lsp/workspace-edit.d.ts +60 -0
  193. package/dist/core/lsp/workspace-edit.d.ts.map +1 -0
  194. package/dist/core/lsp/workspace-edit.js +71 -0
  195. package/dist/core/lsp/workspace-edit.js.map +1 -0
  196. package/dist/core/mcp/audit.d.ts +39 -0
  197. package/dist/core/mcp/audit.d.ts.map +1 -0
  198. package/dist/core/mcp/audit.js +35 -0
  199. package/dist/core/mcp/audit.js.map +1 -0
  200. package/dist/core/mcp/auth.d.ts +7 -0
  201. package/dist/core/mcp/auth.d.ts.map +1 -0
  202. package/dist/core/mcp/auth.js +56 -0
  203. package/dist/core/mcp/auth.js.map +1 -0
  204. package/dist/core/mcp/client-factory.d.ts +20 -0
  205. package/dist/core/mcp/client-factory.d.ts.map +1 -0
  206. package/dist/core/mcp/client-factory.js +200 -0
  207. package/dist/core/mcp/client-factory.js.map +1 -0
  208. package/dist/core/mcp/config-loader.d.ts +9 -0
  209. package/dist/core/mcp/config-loader.d.ts.map +1 -0
  210. package/dist/core/mcp/config-loader.js +104 -0
  211. package/dist/core/mcp/config-loader.js.map +1 -0
  212. package/dist/core/mcp/config-writer.d.ts +21 -0
  213. package/dist/core/mcp/config-writer.d.ts.map +1 -0
  214. package/dist/core/mcp/config-writer.js +124 -0
  215. package/dist/core/mcp/config-writer.js.map +1 -0
  216. package/dist/core/mcp/config.d.ts +32 -0
  217. package/dist/core/mcp/config.d.ts.map +1 -0
  218. package/dist/core/mcp/config.js +385 -0
  219. package/dist/core/mcp/config.js.map +1 -0
  220. package/dist/core/mcp/direct-tools.d.ts +11 -0
  221. package/dist/core/mcp/direct-tools.d.ts.map +1 -0
  222. package/dist/core/mcp/direct-tools.js +47 -0
  223. package/dist/core/mcp/direct-tools.js.map +1 -0
  224. package/dist/core/mcp/gateway-tool.d.ts +29 -0
  225. package/dist/core/mcp/gateway-tool.d.ts.map +1 -0
  226. package/dist/core/mcp/gateway-tool.js +108 -0
  227. package/dist/core/mcp/gateway-tool.js.map +1 -0
  228. package/dist/core/mcp/index.d.ts +19 -0
  229. package/dist/core/mcp/index.d.ts.map +1 -0
  230. package/dist/core/mcp/index.js +18 -0
  231. package/dist/core/mcp/index.js.map +1 -0
  232. package/dist/core/mcp/manager.d.ts +117 -0
  233. package/dist/core/mcp/manager.d.ts.map +1 -0
  234. package/dist/core/mcp/manager.js +819 -0
  235. package/dist/core/mcp/manager.js.map +1 -0
  236. package/dist/core/mcp/metadata-cache.d.ts +27 -0
  237. package/dist/core/mcp/metadata-cache.d.ts.map +1 -0
  238. package/dist/core/mcp/metadata-cache.js +152 -0
  239. package/dist/core/mcp/metadata-cache.js.map +1 -0
  240. package/dist/core/mcp/oauth-flow.d.ts +94 -0
  241. package/dist/core/mcp/oauth-flow.d.ts.map +1 -0
  242. package/dist/core/mcp/oauth-flow.js +473 -0
  243. package/dist/core/mcp/oauth-flow.js.map +1 -0
  244. package/dist/core/mcp/oauth-provider.d.ts +39 -0
  245. package/dist/core/mcp/oauth-provider.d.ts.map +1 -0
  246. package/dist/core/mcp/oauth-provider.js +149 -0
  247. package/dist/core/mcp/oauth-provider.js.map +1 -0
  248. package/dist/core/mcp/oauth-store.d.ts +27 -0
  249. package/dist/core/mcp/oauth-store.d.ts.map +1 -0
  250. package/dist/core/mcp/oauth-store.js +111 -0
  251. package/dist/core/mcp/oauth-store.js.map +1 -0
  252. package/dist/core/mcp/output-store.d.ts +55 -0
  253. package/dist/core/mcp/output-store.d.ts.map +1 -0
  254. package/dist/core/mcp/output-store.js +206 -0
  255. package/dist/core/mcp/output-store.js.map +1 -0
  256. package/dist/core/mcp/rpc.d.ts +13 -0
  257. package/dist/core/mcp/rpc.d.ts.map +1 -0
  258. package/dist/core/mcp/rpc.js +29 -0
  259. package/dist/core/mcp/rpc.js.map +1 -0
  260. package/dist/core/mcp/safety.d.ts +6 -0
  261. package/dist/core/mcp/safety.d.ts.map +1 -0
  262. package/dist/core/mcp/safety.js +65 -0
  263. package/dist/core/mcp/safety.js.map +1 -0
  264. package/dist/core/mcp/search.d.ts +8 -0
  265. package/dist/core/mcp/search.d.ts.map +1 -0
  266. package/dist/core/mcp/search.js +85 -0
  267. package/dist/core/mcp/search.js.map +1 -0
  268. package/dist/core/mcp/server-supervisor.d.ts +59 -0
  269. package/dist/core/mcp/server-supervisor.d.ts.map +1 -0
  270. package/dist/core/mcp/server-supervisor.js +331 -0
  271. package/dist/core/mcp/server-supervisor.js.map +1 -0
  272. package/dist/core/mcp/types.d.ts +321 -0
  273. package/dist/core/mcp/types.d.ts.map +1 -0
  274. package/dist/core/mcp/types.js +2 -0
  275. package/dist/core/mcp/types.js.map +1 -0
  276. package/dist/core/messages.d.ts +78 -0
  277. package/dist/core/messages.d.ts.map +1 -0
  278. package/dist/core/messages.js +138 -0
  279. package/dist/core/messages.js.map +1 -0
  280. package/dist/core/model-catalog-watcher.d.ts +36 -0
  281. package/dist/core/model-catalog-watcher.d.ts.map +1 -0
  282. package/dist/core/model-catalog-watcher.js +101 -0
  283. package/dist/core/model-catalog-watcher.js.map +1 -0
  284. package/dist/core/model-registry.d.ts +160 -0
  285. package/dist/core/model-registry.d.ts.map +1 -0
  286. package/dist/core/model-registry.js +754 -0
  287. package/dist/core/model-registry.js.map +1 -0
  288. package/dist/core/model-resolver.d.ts +111 -0
  289. package/dist/core/model-resolver.d.ts.map +1 -0
  290. package/dist/core/model-resolver.js +534 -0
  291. package/dist/core/model-resolver.js.map +1 -0
  292. package/dist/core/output-guard.d.ts +7 -0
  293. package/dist/core/output-guard.d.ts.map +1 -0
  294. package/dist/core/output-guard.js +89 -0
  295. package/dist/core/output-guard.js.map +1 -0
  296. package/dist/core/package-manager.d.ts +220 -0
  297. package/dist/core/package-manager.d.ts.map +1 -0
  298. package/dist/core/package-manager.js +2217 -0
  299. package/dist/core/package-manager.js.map +1 -0
  300. package/dist/core/project-trust.d.ts +15 -0
  301. package/dist/core/project-trust.d.ts.map +1 -0
  302. package/dist/core/project-trust.js +58 -0
  303. package/dist/core/project-trust.js.map +1 -0
  304. package/dist/core/prompt-templates.d.ts +53 -0
  305. package/dist/core/prompt-templates.d.ts.map +1 -0
  306. package/dist/core/prompt-templates.js +236 -0
  307. package/dist/core/prompt-templates.js.map +1 -0
  308. package/dist/core/provider-attribution.d.ts +4 -0
  309. package/dist/core/provider-attribution.d.ts.map +1 -0
  310. package/dist/core/provider-attribution.js +81 -0
  311. package/dist/core/provider-attribution.js.map +1 -0
  312. package/dist/core/provider-display-names.d.ts +2 -0
  313. package/dist/core/provider-display-names.d.ts.map +1 -0
  314. package/dist/core/provider-display-names.js +36 -0
  315. package/dist/core/provider-display-names.js.map +1 -0
  316. package/dist/core/remote/iroh/access-grant.d.ts +40 -0
  317. package/dist/core/remote/iroh/access-grant.d.ts.map +1 -0
  318. package/dist/core/remote/iroh/access-grant.js +199 -0
  319. package/dist/core/remote/iroh/access-grant.js.map +1 -0
  320. package/dist/core/remote/iroh/active-stream-registry.d.ts +39 -0
  321. package/dist/core/remote/iroh/active-stream-registry.d.ts.map +1 -0
  322. package/dist/core/remote/iroh/active-stream-registry.js +109 -0
  323. package/dist/core/remote/iroh/active-stream-registry.js.map +1 -0
  324. package/dist/core/remote/iroh/audit.d.ts +67 -0
  325. package/dist/core/remote/iroh/audit.d.ts.map +1 -0
  326. package/dist/core/remote/iroh/audit.js +274 -0
  327. package/dist/core/remote/iroh/audit.js.map +1 -0
  328. package/dist/core/remote/iroh/authorization.d.ts +46 -0
  329. package/dist/core/remote/iroh/authorization.d.ts.map +1 -0
  330. package/dist/core/remote/iroh/authorization.js +327 -0
  331. package/dist/core/remote/iroh/authorization.js.map +1 -0
  332. package/dist/core/remote/iroh/control.d.ts +64 -0
  333. package/dist/core/remote/iroh/control.d.ts.map +1 -0
  334. package/dist/core/remote/iroh/control.js +326 -0
  335. package/dist/core/remote/iroh/control.js.map +1 -0
  336. package/dist/core/remote/iroh/device-log-rpc.d.ts +22 -0
  337. package/dist/core/remote/iroh/device-log-rpc.d.ts.map +1 -0
  338. package/dist/core/remote/iroh/device-log-rpc.js +152 -0
  339. package/dist/core/remote/iroh/device-log-rpc.js.map +1 -0
  340. package/dist/core/remote/iroh/engine.d.ts +148 -0
  341. package/dist/core/remote/iroh/engine.d.ts.map +1 -0
  342. package/dist/core/remote/iroh/engine.js +499 -0
  343. package/dist/core/remote/iroh/engine.js.map +1 -0
  344. package/dist/core/remote/iroh/handshake-reader.d.ts +19 -0
  345. package/dist/core/remote/iroh/handshake-reader.d.ts.map +1 -0
  346. package/dist/core/remote/iroh/handshake-reader.js +91 -0
  347. package/dist/core/remote/iroh/handshake-reader.js.map +1 -0
  348. package/dist/core/remote/iroh/handshake.d.ts +119 -0
  349. package/dist/core/remote/iroh/handshake.d.ts.map +1 -0
  350. package/dist/core/remote/iroh/handshake.js +621 -0
  351. package/dist/core/remote/iroh/handshake.js.map +1 -0
  352. package/dist/core/remote/iroh/host-policy.d.ts +13 -0
  353. package/dist/core/remote/iroh/host-policy.d.ts.map +1 -0
  354. package/dist/core/remote/iroh/host-policy.js +15 -0
  355. package/dist/core/remote/iroh/host-policy.js.map +1 -0
  356. package/dist/core/remote/iroh/index.d.ts +25 -0
  357. package/dist/core/remote/iroh/index.d.ts.map +1 -0
  358. package/dist/core/remote/iroh/index.js +25 -0
  359. package/dist/core/remote/iroh/index.js.map +1 -0
  360. package/dist/core/remote/iroh/metadata.d.ts +28 -0
  361. package/dist/core/remote/iroh/metadata.d.ts.map +1 -0
  362. package/dist/core/remote/iroh/metadata.js +16 -0
  363. package/dist/core/remote/iroh/metadata.js.map +1 -0
  364. package/dist/core/remote/iroh/outbound-filter.d.ts +29 -0
  365. package/dist/core/remote/iroh/outbound-filter.d.ts.map +1 -0
  366. package/dist/core/remote/iroh/outbound-filter.js +692 -0
  367. package/dist/core/remote/iroh/outbound-filter.js.map +1 -0
  368. package/dist/core/remote/iroh/protocol.d.ts +60 -0
  369. package/dist/core/remote/iroh/protocol.d.ts.map +1 -0
  370. package/dist/core/remote/iroh/protocol.js +204 -0
  371. package/dist/core/remote/iroh/protocol.js.map +1 -0
  372. package/dist/core/remote/iroh/push.d.ts +179 -0
  373. package/dist/core/remote/iroh/push.d.ts.map +1 -0
  374. package/dist/core/remote/iroh/push.js +662 -0
  375. package/dist/core/remote/iroh/push.js.map +1 -0
  376. package/dist/core/remote/iroh/qr.d.ts +12 -0
  377. package/dist/core/remote/iroh/qr.d.ts.map +1 -0
  378. package/dist/core/remote/iroh/qr.js +27 -0
  379. package/dist/core/remote/iroh/qr.js.map +1 -0
  380. package/dist/core/remote/iroh/rpc-command-filter.d.ts +47 -0
  381. package/dist/core/remote/iroh/rpc-command-filter.d.ts.map +1 -0
  382. package/dist/core/remote/iroh/rpc-command-filter.js +188 -0
  383. package/dist/core/remote/iroh/rpc-command-filter.js.map +1 -0
  384. package/dist/core/remote/iroh/rpc-transport.d.ts +21 -0
  385. package/dist/core/remote/iroh/rpc-transport.d.ts.map +1 -0
  386. package/dist/core/remote/iroh/rpc-transport.js +106 -0
  387. package/dist/core/remote/iroh/rpc-transport.js.map +1 -0
  388. package/dist/core/remote/iroh/state-manager.d.ts +141 -0
  389. package/dist/core/remote/iroh/state-manager.d.ts.map +1 -0
  390. package/dist/core/remote/iroh/state-manager.js +744 -0
  391. package/dist/core/remote/iroh/state-manager.js.map +1 -0
  392. package/dist/core/remote/iroh/state.d.ts +141 -0
  393. package/dist/core/remote/iroh/state.d.ts.map +1 -0
  394. package/dist/core/remote/iroh/state.js +433 -0
  395. package/dist/core/remote/iroh/state.js.map +1 -0
  396. package/dist/core/remote/iroh/ticket.d.ts +46 -0
  397. package/dist/core/remote/iroh/ticket.d.ts.map +1 -0
  398. package/dist/core/remote/iroh/ticket.js +267 -0
  399. package/dist/core/remote/iroh/ticket.js.map +1 -0
  400. package/dist/core/remote/iroh/transcript-text.d.ts +8 -0
  401. package/dist/core/remote/iroh/transcript-text.d.ts.map +1 -0
  402. package/dist/core/remote/iroh/transcript-text.js +26 -0
  403. package/dist/core/remote/iroh/transcript-text.js.map +1 -0
  404. package/dist/core/remote/iroh/workspace-rpc.d.ts +31 -0
  405. package/dist/core/remote/iroh/workspace-rpc.d.ts.map +1 -0
  406. package/dist/core/remote/iroh/workspace-rpc.js +73 -0
  407. package/dist/core/remote/iroh/workspace-rpc.js.map +1 -0
  408. package/dist/core/remote/iroh/workspace.d.ts +16 -0
  409. package/dist/core/remote/iroh/workspace.d.ts.map +1 -0
  410. package/dist/core/remote/iroh/workspace.js +104 -0
  411. package/dist/core/remote/iroh/workspace.js.map +1 -0
  412. package/dist/core/remote/iroh/worktree-rpc.d.ts +83 -0
  413. package/dist/core/remote/iroh/worktree-rpc.d.ts.map +1 -0
  414. package/dist/core/remote/iroh/worktree-rpc.js +148 -0
  415. package/dist/core/remote/iroh/worktree-rpc.js.map +1 -0
  416. package/dist/core/resolve-config-value.d.ts +30 -0
  417. package/dist/core/resolve-config-value.d.ts.map +1 -0
  418. package/dist/core/resolve-config-value.js +245 -0
  419. package/dist/core/resolve-config-value.js.map +1 -0
  420. package/dist/core/resource-loader.d.ts +214 -0
  421. package/dist/core/resource-loader.d.ts.map +1 -0
  422. package/dist/core/resource-loader.js +824 -0
  423. package/dist/core/resource-loader.js.map +1 -0
  424. package/dist/core/review.d.ts +318 -0
  425. package/dist/core/review.d.ts.map +1 -0
  426. package/dist/core/review.js +1271 -0
  427. package/dist/core/review.js.map +1 -0
  428. package/dist/core/rpc/duplex-write-gate.d.ts +29 -0
  429. package/dist/core/rpc/duplex-write-gate.d.ts.map +1 -0
  430. package/dist/core/rpc/duplex-write-gate.js +124 -0
  431. package/dist/core/rpc/duplex-write-gate.js.map +1 -0
  432. package/dist/core/rpc/index.d.ts +6 -0
  433. package/dist/core/rpc/index.d.ts.map +1 -0
  434. package/dist/core/rpc/index.js +5 -0
  435. package/dist/core/rpc/index.js.map +1 -0
  436. package/dist/core/rpc/iroh-transport.d.ts +58 -0
  437. package/dist/core/rpc/iroh-transport.d.ts.map +1 -0
  438. package/dist/core/rpc/iroh-transport.js +278 -0
  439. package/dist/core/rpc/iroh-transport.js.map +1 -0
  440. package/dist/core/rpc/jsonl.d.ts +17 -0
  441. package/dist/core/rpc/jsonl.d.ts.map +1 -0
  442. package/dist/core/rpc/jsonl.js +49 -0
  443. package/dist/core/rpc/jsonl.js.map +1 -0
  444. package/dist/core/rpc/loopback-transport.d.ts +14 -0
  445. package/dist/core/rpc/loopback-transport.d.ts.map +1 -0
  446. package/dist/core/rpc/loopback-transport.js +120 -0
  447. package/dist/core/rpc/loopback-transport.js.map +1 -0
  448. package/dist/core/rpc/transcript.d.ts +37 -0
  449. package/dist/core/rpc/transcript.d.ts.map +1 -0
  450. package/dist/core/rpc/transcript.js +624 -0
  451. package/dist/core/rpc/transcript.js.map +1 -0
  452. package/dist/core/rpc/transport.d.ts +41 -0
  453. package/dist/core/rpc/transport.d.ts.map +1 -0
  454. package/dist/core/rpc/transport.js +155 -0
  455. package/dist/core/rpc/transport.js.map +1 -0
  456. package/dist/core/rpc/types.d.ts +1254 -0
  457. package/dist/core/rpc/types.d.ts.map +1 -0
  458. package/dist/core/rpc/types.js +8 -0
  459. package/dist/core/rpc/types.js.map +1 -0
  460. package/dist/core/rpc/ui-action-args.d.ts +3 -0
  461. package/dist/core/rpc/ui-action-args.d.ts.map +1 -0
  462. package/dist/core/rpc/ui-action-args.js +66 -0
  463. package/dist/core/rpc/ui-action-args.js.map +1 -0
  464. package/dist/core/rpc/ui-actions.d.ts +43 -0
  465. package/dist/core/rpc/ui-actions.d.ts.map +1 -0
  466. package/dist/core/rpc/ui-actions.js +362 -0
  467. package/dist/core/rpc/ui-actions.js.map +1 -0
  468. package/dist/core/sdk.d.ts +138 -0
  469. package/dist/core/sdk.d.ts.map +1 -0
  470. package/dist/core/sdk.js +324 -0
  471. package/dist/core/sdk.js.map +1 -0
  472. package/dist/core/session-cwd.d.ts +19 -0
  473. package/dist/core/session-cwd.d.ts.map +1 -0
  474. package/dist/core/session-cwd.js +38 -0
  475. package/dist/core/session-cwd.js.map +1 -0
  476. package/dist/core/session-manager.d.ts +346 -0
  477. package/dist/core/session-manager.d.ts.map +1 -0
  478. package/dist/core/session-manager.js +1280 -0
  479. package/dist/core/session-manager.js.map +1 -0
  480. package/dist/core/settings-manager.d.ts +359 -0
  481. package/dist/core/settings-manager.d.ts.map +1 -0
  482. package/dist/core/settings-manager.js +1277 -0
  483. package/dist/core/settings-manager.js.map +1 -0
  484. package/dist/core/skills.d.ts +60 -0
  485. package/dist/core/skills.d.ts.map +1 -0
  486. package/dist/core/skills.js +387 -0
  487. package/dist/core/skills.js.map +1 -0
  488. package/dist/core/slash-commands.d.ts +14 -0
  489. package/dist/core/slash-commands.d.ts.map +1 -0
  490. package/dist/core/slash-commands.js +51 -0
  491. package/dist/core/slash-commands.js.map +1 -0
  492. package/dist/core/source-info.d.ts +18 -0
  493. package/dist/core/source-info.d.ts.map +1 -0
  494. package/dist/core/source-info.js +19 -0
  495. package/dist/core/source-info.js.map +1 -0
  496. package/dist/core/subagents/delegation-scope.d.ts +47 -0
  497. package/dist/core/subagents/delegation-scope.d.ts.map +1 -0
  498. package/dist/core/subagents/delegation-scope.js +134 -0
  499. package/dist/core/subagents/delegation-scope.js.map +1 -0
  500. package/dist/core/subagents/index.d.ts +46 -0
  501. package/dist/core/subagents/index.d.ts.map +1 -0
  502. package/dist/core/subagents/index.js +369 -0
  503. package/dist/core/subagents/index.js.map +1 -0
  504. package/dist/core/subagents/manager.d.ts +183 -0
  505. package/dist/core/subagents/manager.d.ts.map +1 -0
  506. package/dist/core/subagents/manager.js +820 -0
  507. package/dist/core/subagents/manager.js.map +1 -0
  508. package/dist/core/system-prompt.d.ts +28 -0
  509. package/dist/core/system-prompt.d.ts.map +1 -0
  510. package/dist/core/system-prompt.js +180 -0
  511. package/dist/core/system-prompt.js.map +1 -0
  512. package/dist/core/telemetry.d.ts +3 -0
  513. package/dist/core/telemetry.d.ts.map +1 -0
  514. package/dist/core/telemetry.js +9 -0
  515. package/dist/core/telemetry.js.map +1 -0
  516. package/dist/core/theme/dark.json +86 -0
  517. package/dist/core/theme/discovery.d.ts +48 -0
  518. package/dist/core/theme/discovery.d.ts.map +1 -0
  519. package/dist/core/theme/discovery.js +239 -0
  520. package/dist/core/theme/discovery.js.map +1 -0
  521. package/dist/core/theme/index.d.ts +6 -0
  522. package/dist/core/theme/index.d.ts.map +1 -0
  523. package/dist/core/theme/index.js +5 -0
  524. package/dist/core/theme/index.js.map +1 -0
  525. package/dist/core/theme/light.json +85 -0
  526. package/dist/core/theme/runtime.d.ts +55 -0
  527. package/dist/core/theme/runtime.d.ts.map +1 -0
  528. package/dist/core/theme/runtime.js +555 -0
  529. package/dist/core/theme/runtime.js.map +1 -0
  530. package/dist/core/theme/theme-schema.json +335 -0
  531. package/dist/core/theme/theme-service.d.ts +37 -0
  532. package/dist/core/theme/theme-service.d.ts.map +1 -0
  533. package/dist/core/theme/theme-service.js +222 -0
  534. package/dist/core/theme/theme-service.js.map +1 -0
  535. package/dist/core/theme/theme.d.ts +100 -0
  536. package/dist/core/theme/theme.d.ts.map +1 -0
  537. package/dist/core/theme/theme.js +243 -0
  538. package/dist/core/theme/theme.js.map +1 -0
  539. package/dist/core/theme/tokens.d.ts +20 -0
  540. package/dist/core/theme/tokens.d.ts.map +1 -0
  541. package/dist/core/theme/tokens.js +178 -0
  542. package/dist/core/theme/tokens.js.map +1 -0
  543. package/dist/core/theme/types.d.ts +21 -0
  544. package/dist/core/theme/types.d.ts.map +1 -0
  545. package/dist/core/theme/types.js +2 -0
  546. package/dist/core/theme/types.js.map +1 -0
  547. package/dist/core/timings.d.ts +8 -0
  548. package/dist/core/timings.d.ts.map +1 -0
  549. package/dist/core/timings.js +31 -0
  550. package/dist/core/timings.js.map +1 -0
  551. package/dist/core/tools/bash.d.ts +68 -0
  552. package/dist/core/tools/bash.d.ts.map +1 -0
  553. package/dist/core/tools/bash.js +345 -0
  554. package/dist/core/tools/bash.js.map +1 -0
  555. package/dist/core/tools/diagnostics-provider.d.ts +12 -0
  556. package/dist/core/tools/diagnostics-provider.d.ts.map +1 -0
  557. package/dist/core/tools/diagnostics-provider.js +2 -0
  558. package/dist/core/tools/diagnostics-provider.js.map +1 -0
  559. package/dist/core/tools/edit-diff.d.ts +77 -0
  560. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  561. package/dist/core/tools/edit-diff.js +506 -0
  562. package/dist/core/tools/edit-diff.js.map +1 -0
  563. package/dist/core/tools/edit.d.ts +56 -0
  564. package/dist/core/tools/edit.d.ts.map +1 -0
  565. package/dist/core/tools/edit.js +300 -0
  566. package/dist/core/tools/edit.js.map +1 -0
  567. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  568. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  569. package/dist/core/tools/file-mutation-queue.js +52 -0
  570. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  571. package/dist/core/tools/find.d.ts +35 -0
  572. package/dist/core/tools/find.d.ts.map +1 -0
  573. package/dist/core/tools/find.js +337 -0
  574. package/dist/core/tools/find.js.map +1 -0
  575. package/dist/core/tools/grep.d.ts +37 -0
  576. package/dist/core/tools/grep.d.ts.map +1 -0
  577. package/dist/core/tools/grep.js +305 -0
  578. package/dist/core/tools/grep.js.map +1 -0
  579. package/dist/core/tools/index.d.ts +56 -0
  580. package/dist/core/tools/index.d.ts.map +1 -0
  581. package/dist/core/tools/index.js +174 -0
  582. package/dist/core/tools/index.js.map +1 -0
  583. package/dist/core/tools/ls.d.ts +37 -0
  584. package/dist/core/tools/ls.d.ts.map +1 -0
  585. package/dist/core/tools/ls.js +167 -0
  586. package/dist/core/tools/ls.js.map +1 -0
  587. package/dist/core/tools/lsp.d.ts +59 -0
  588. package/dist/core/tools/lsp.d.ts.map +1 -0
  589. package/dist/core/tools/lsp.js +157 -0
  590. package/dist/core/tools/lsp.js.map +1 -0
  591. package/dist/core/tools/output-accumulator.d.ts +52 -0
  592. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  593. package/dist/core/tools/output-accumulator.js +184 -0
  594. package/dist/core/tools/output-accumulator.js.map +1 -0
  595. package/dist/core/tools/path-utils.d.ts +10 -0
  596. package/dist/core/tools/path-utils.d.ts.map +1 -0
  597. package/dist/core/tools/path-utils.js +99 -0
  598. package/dist/core/tools/path-utils.js.map +1 -0
  599. package/dist/core/tools/read.d.ts +35 -0
  600. package/dist/core/tools/read.d.ts.map +1 -0
  601. package/dist/core/tools/read.js +292 -0
  602. package/dist/core/tools/read.js.map +1 -0
  603. package/dist/core/tools/render-utils.d.ts +26 -0
  604. package/dist/core/tools/render-utils.d.ts.map +1 -0
  605. package/dist/core/tools/render-utils.js +69 -0
  606. package/dist/core/tools/render-utils.js.map +1 -0
  607. package/dist/core/tools/subagent.d.ts +219 -0
  608. package/dist/core/tools/subagent.d.ts.map +1 -0
  609. package/dist/core/tools/subagent.js +1445 -0
  610. package/dist/core/tools/subagent.js.map +1 -0
  611. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  612. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  613. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  614. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  615. package/dist/core/tools/truncate.d.ts +70 -0
  616. package/dist/core/tools/truncate.d.ts.map +1 -0
  617. package/dist/core/tools/truncate.js +215 -0
  618. package/dist/core/tools/truncate.js.map +1 -0
  619. package/dist/core/tools/web-search.d.ts +69 -0
  620. package/dist/core/tools/web-search.d.ts.map +1 -0
  621. package/dist/core/tools/web-search.js +634 -0
  622. package/dist/core/tools/web-search.js.map +1 -0
  623. package/dist/core/tools/write.d.ts +33 -0
  624. package/dist/core/tools/write.d.ts.map +1 -0
  625. package/dist/core/tools/write.js +210 -0
  626. package/dist/core/tools/write.js.map +1 -0
  627. package/dist/core/trust-manager.d.ts +36 -0
  628. package/dist/core/trust-manager.d.ts.map +1 -0
  629. package/dist/core/trust-manager.js +220 -0
  630. package/dist/core/trust-manager.js.map +1 -0
  631. package/dist/daemon/cli.d.ts +8 -0
  632. package/dist/daemon/cli.d.ts.map +1 -0
  633. package/dist/daemon/cli.js +468 -0
  634. package/dist/daemon/cli.js.map +1 -0
  635. package/dist/daemon/control-client.d.ts +60 -0
  636. package/dist/daemon/control-client.d.ts.map +1 -0
  637. package/dist/daemon/control-client.js +411 -0
  638. package/dist/daemon/control-client.js.map +1 -0
  639. package/dist/daemon/control-protocol.d.ts +507 -0
  640. package/dist/daemon/control-protocol.d.ts.map +1 -0
  641. package/dist/daemon/control-protocol.js +395 -0
  642. package/dist/daemon/control-protocol.js.map +1 -0
  643. package/dist/daemon/control-server.d.ts +77 -0
  644. package/dist/daemon/control-server.d.ts.map +1 -0
  645. package/dist/daemon/control-server.js +327 -0
  646. package/dist/daemon/control-server.js.map +1 -0
  647. package/dist/daemon/conversation-commands.d.ts +176 -0
  648. package/dist/daemon/conversation-commands.d.ts.map +1 -0
  649. package/dist/daemon/conversation-commands.js +1268 -0
  650. package/dist/daemon/conversation-commands.js.map +1 -0
  651. package/dist/daemon/daemon-lock.d.ts +27 -0
  652. package/dist/daemon/daemon-lock.d.ts.map +1 -0
  653. package/dist/daemon/daemon-lock.js +238 -0
  654. package/dist/daemon/daemon-lock.js.map +1 -0
  655. package/dist/daemon/handshake-responses.d.ts +47 -0
  656. package/dist/daemon/handshake-responses.d.ts.map +1 -0
  657. package/dist/daemon/handshake-responses.js +113 -0
  658. package/dist/daemon/handshake-responses.js.map +1 -0
  659. package/dist/daemon/integrated-runtimes.d.ts +137 -0
  660. package/dist/daemon/integrated-runtimes.d.ts.map +1 -0
  661. package/dist/daemon/integrated-runtimes.js +763 -0
  662. package/dist/daemon/integrated-runtimes.js.map +1 -0
  663. package/dist/daemon/iroh-native.d.ts +76 -0
  664. package/dist/daemon/iroh-native.d.ts.map +1 -0
  665. package/dist/daemon/iroh-native.js +18 -0
  666. package/dist/daemon/iroh-native.js.map +1 -0
  667. package/dist/daemon/iroh-resource-guard.d.ts +57 -0
  668. package/dist/daemon/iroh-resource-guard.d.ts.map +1 -0
  669. package/dist/daemon/iroh-resource-guard.js +134 -0
  670. package/dist/daemon/iroh-resource-guard.js.map +1 -0
  671. package/dist/daemon/iroh-service.d.ts +51 -0
  672. package/dist/daemon/iroh-service.d.ts.map +1 -0
  673. package/dist/daemon/iroh-service.js +2604 -0
  674. package/dist/daemon/iroh-service.js.map +1 -0
  675. package/dist/daemon/keep-awake.d.ts +62 -0
  676. package/dist/daemon/keep-awake.d.ts.map +1 -0
  677. package/dist/daemon/keep-awake.js +190 -0
  678. package/dist/daemon/keep-awake.js.map +1 -0
  679. package/dist/daemon/lease-broker.d.ts +139 -0
  680. package/dist/daemon/lease-broker.d.ts.map +1 -0
  681. package/dist/daemon/lease-broker.js +504 -0
  682. package/dist/daemon/lease-broker.js.map +1 -0
  683. package/dist/daemon/log.d.ts +16 -0
  684. package/dist/daemon/log.d.ts.map +1 -0
  685. package/dist/daemon/log.js +40 -0
  686. package/dist/daemon/log.js.map +1 -0
  687. package/dist/daemon/main.d.ts +70 -0
  688. package/dist/daemon/main.d.ts.map +1 -0
  689. package/dist/daemon/main.js +781 -0
  690. package/dist/daemon/main.js.map +1 -0
  691. package/dist/daemon/paths.d.ts +32 -0
  692. package/dist/daemon/paths.d.ts.map +1 -0
  693. package/dist/daemon/paths.js +208 -0
  694. package/dist/daemon/paths.js.map +1 -0
  695. package/dist/daemon/process-identity.d.ts +58 -0
  696. package/dist/daemon/process-identity.d.ts.map +1 -0
  697. package/dist/daemon/process-identity.js +185 -0
  698. package/dist/daemon/process-identity.js.map +1 -0
  699. package/dist/daemon/relay-stream.d.ts +89 -0
  700. package/dist/daemon/relay-stream.d.ts.map +1 -0
  701. package/dist/daemon/relay-stream.js +202 -0
  702. package/dist/daemon/relay-stream.js.map +1 -0
  703. package/dist/daemon/remote-cli.d.ts +7 -0
  704. package/dist/daemon/remote-cli.d.ts.map +1 -0
  705. package/dist/daemon/remote-cli.js +774 -0
  706. package/dist/daemon/remote-cli.js.map +1 -0
  707. package/dist/daemon/service-install.d.ts +43 -0
  708. package/dist/daemon/service-install.d.ts.map +1 -0
  709. package/dist/daemon/service-install.js +198 -0
  710. package/dist/daemon/service-install.js.map +1 -0
  711. package/dist/daemon/session-target.d.ts +62 -0
  712. package/dist/daemon/session-target.d.ts.map +1 -0
  713. package/dist/daemon/session-target.js +66 -0
  714. package/dist/daemon/session-target.js.map +1 -0
  715. package/dist/daemon/spawn.d.ts +53 -0
  716. package/dist/daemon/spawn.d.ts.map +1 -0
  717. package/dist/daemon/spawn.js +205 -0
  718. package/dist/daemon/spawn.js.map +1 -0
  719. package/dist/daemon/state.d.ts +145 -0
  720. package/dist/daemon/state.d.ts.map +1 -0
  721. package/dist/daemon/state.js +454 -0
  722. package/dist/daemon/state.js.map +1 -0
  723. package/dist/daemon/theme-push.d.ts +23 -0
  724. package/dist/daemon/theme-push.d.ts.map +1 -0
  725. package/dist/daemon/theme-push.js +30 -0
  726. package/dist/daemon/theme-push.js.map +1 -0
  727. package/dist/daemon/viewer-feed.d.ts +42 -0
  728. package/dist/daemon/viewer-feed.d.ts.map +1 -0
  729. package/dist/daemon/viewer-feed.js +138 -0
  730. package/dist/daemon/viewer-feed.js.map +1 -0
  731. package/dist/daemon/workspace-directory.d.ts +35 -0
  732. package/dist/daemon/workspace-directory.d.ts.map +1 -0
  733. package/dist/daemon/workspace-directory.js +105 -0
  734. package/dist/daemon/workspace-directory.js.map +1 -0
  735. package/dist/daemon/workspace-streams.d.ts +70 -0
  736. package/dist/daemon/workspace-streams.d.ts.map +1 -0
  737. package/dist/daemon/workspace-streams.js +289 -0
  738. package/dist/daemon/workspace-streams.js.map +1 -0
  739. package/dist/daemon/worktree-manager.d.ts +219 -0
  740. package/dist/daemon/worktree-manager.d.ts.map +1 -0
  741. package/dist/daemon/worktree-manager.js +1204 -0
  742. package/dist/daemon/worktree-manager.js.map +1 -0
  743. package/dist/index.d.ts +44 -0
  744. package/dist/index.d.ts.map +1 -0
  745. package/dist/index.js +57 -0
  746. package/dist/index.js.map +1 -0
  747. package/dist/main.d.ts +12 -0
  748. package/dist/main.d.ts.map +1 -0
  749. package/dist/main.js +773 -0
  750. package/dist/main.js.map +1 -0
  751. package/dist/mcp-cli.d.ts +6 -0
  752. package/dist/mcp-cli.d.ts.map +1 -0
  753. package/dist/mcp-cli.js +347 -0
  754. package/dist/mcp-cli.js.map +1 -0
  755. package/dist/migrations.d.ts +33 -0
  756. package/dist/migrations.d.ts.map +1 -0
  757. package/dist/migrations.js +281 -0
  758. package/dist/migrations.js.map +1 -0
  759. package/dist/modes/index.d.ts +13 -0
  760. package/dist/modes/index.d.ts.map +1 -0
  761. package/dist/modes/index.js +12 -0
  762. package/dist/modes/index.js.map +1 -0
  763. package/dist/modes/interactive/components/armin.d.ts +34 -0
  764. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  765. package/dist/modes/interactive/components/armin.js +333 -0
  766. package/dist/modes/interactive/components/armin.js.map +1 -0
  767. package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  768. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  769. package/dist/modes/interactive/components/assistant-message.js +129 -0
  770. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  771. package/dist/modes/interactive/components/bash-execution.d.ts +39 -0
  772. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  773. package/dist/modes/interactive/components/bash-execution.js +212 -0
  774. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  775. package/dist/modes/interactive/components/bordered-loader.d.ts +17 -0
  776. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  777. package/dist/modes/interactive/components/bordered-loader.js +57 -0
  778. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  779. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  780. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  781. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  782. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  783. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  784. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  785. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  786. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  787. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  788. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  789. package/dist/modes/interactive/components/config-selector.js +510 -0
  790. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  791. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  792. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  793. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  794. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  795. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  796. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  797. package/dist/modes/interactive/components/custom-editor.js +70 -0
  798. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  799. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  800. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  801. package/dist/modes/interactive/components/custom-message.js +76 -0
  802. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  803. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  804. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  805. package/dist/modes/interactive/components/daxnuts.js +140 -0
  806. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  807. package/dist/modes/interactive/components/diff.d.ts +12 -0
  808. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  809. package/dist/modes/interactive/components/diff.js +133 -0
  810. package/dist/modes/interactive/components/diff.js.map +1 -0
  811. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  812. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  813. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  814. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  815. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  816. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  817. package/dist/modes/interactive/components/extension-editor.js +116 -0
  818. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  819. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  820. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  821. package/dist/modes/interactive/components/extension-input.js +61 -0
  822. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  823. package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
  824. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  825. package/dist/modes/interactive/components/extension-selector.js +98 -0
  826. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  827. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  828. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  829. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  830. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  831. package/dist/modes/interactive/components/footer.d.ts +27 -0
  832. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  833. package/dist/modes/interactive/components/footer.js +180 -0
  834. package/dist/modes/interactive/components/footer.js.map +1 -0
  835. package/dist/modes/interactive/components/hotkeys.d.ts +24 -0
  836. package/dist/modes/interactive/components/hotkeys.d.ts.map +1 -0
  837. package/dist/modes/interactive/components/hotkeys.js +97 -0
  838. package/dist/modes/interactive/components/hotkeys.js.map +1 -0
  839. package/dist/modes/interactive/components/index.d.ts +35 -0
  840. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  841. package/dist/modes/interactive/components/index.js +36 -0
  842. package/dist/modes/interactive/components/index.js.map +1 -0
  843. package/dist/modes/interactive/components/keybinding-hints.d.ts +19 -0
  844. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  845. package/dist/modes/interactive/components/keybinding-hints.js +48 -0
  846. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  847. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  848. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  849. package/dist/modes/interactive/components/login-dialog.js +179 -0
  850. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  851. package/dist/modes/interactive/components/logo.d.ts +25 -0
  852. package/dist/modes/interactive/components/logo.d.ts.map +1 -0
  853. package/dist/modes/interactive/components/logo.js +89 -0
  854. package/dist/modes/interactive/components/logo.js.map +1 -0
  855. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  856. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  857. package/dist/modes/interactive/components/model-selector.js +278 -0
  858. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  859. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  860. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  861. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  862. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  863. package/dist/modes/interactive/components/remote-control-center.d.ts +110 -0
  864. package/dist/modes/interactive/components/remote-control-center.d.ts.map +1 -0
  865. package/dist/modes/interactive/components/remote-control-center.js +1217 -0
  866. package/dist/modes/interactive/components/remote-control-center.js.map +1 -0
  867. package/dist/modes/interactive/components/review-tools-selector.d.ts +24 -0
  868. package/dist/modes/interactive/components/review-tools-selector.d.ts.map +1 -0
  869. package/dist/modes/interactive/components/review-tools-selector.js +93 -0
  870. package/dist/modes/interactive/components/review-tools-selector.js.map +1 -0
  871. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  872. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  873. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  874. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  875. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  876. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  877. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  878. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  879. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  880. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  881. package/dist/modes/interactive/components/session-selector.js +856 -0
  882. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  883. package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  884. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  885. package/dist/modes/interactive/components/settings-selector.js +484 -0
  886. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  887. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  888. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  889. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  890. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  891. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  892. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  893. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  894. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  895. package/dist/modes/interactive/components/streaming-render-coalescer.d.ts +29 -0
  896. package/dist/modes/interactive/components/streaming-render-coalescer.d.ts.map +1 -0
  897. package/dist/modes/interactive/components/streaming-render-coalescer.js +98 -0
  898. package/dist/modes/interactive/components/streaming-render-coalescer.js.map +1 -0
  899. package/dist/modes/interactive/components/subagent-inspector.d.ts +32 -0
  900. package/dist/modes/interactive/components/subagent-inspector.d.ts.map +1 -0
  901. package/dist/modes/interactive/components/subagent-inspector.js +439 -0
  902. package/dist/modes/interactive/components/subagent-inspector.js.map +1 -0
  903. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  904. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  905. package/dist/modes/interactive/components/theme-selector.js +50 -0
  906. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  907. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  908. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  909. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  910. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  911. package/dist/modes/interactive/components/tool-execution.d.ts +83 -0
  912. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  913. package/dist/modes/interactive/components/tool-execution.js +421 -0
  914. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  915. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  916. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  917. package/dist/modes/interactive/components/tree-selector.js +1208 -0
  918. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  919. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  920. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  921. package/dist/modes/interactive/components/trust-selector.js +91 -0
  922. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  923. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  924. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  925. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  926. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  927. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  928. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  929. package/dist/modes/interactive/components/user-message.js +42 -0
  930. package/dist/modes/interactive/components/user-message.js.map +1 -0
  931. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  932. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  933. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  934. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  935. package/dist/modes/interactive/components/volt-announcement.d.ts +5 -0
  936. package/dist/modes/interactive/components/volt-announcement.d.ts.map +1 -0
  937. package/dist/modes/interactive/components/volt-announcement.js +15 -0
  938. package/dist/modes/interactive/components/volt-announcement.js.map +1 -0
  939. package/dist/modes/interactive/daemon-attach.d.ts +154 -0
  940. package/dist/modes/interactive/daemon-attach.d.ts.map +1 -0
  941. package/dist/modes/interactive/daemon-attach.js +552 -0
  942. package/dist/modes/interactive/daemon-attach.js.map +1 -0
  943. package/dist/modes/interactive/drain-viewer.d.ts +31 -0
  944. package/dist/modes/interactive/drain-viewer.d.ts.map +1 -0
  945. package/dist/modes/interactive/drain-viewer.js +166 -0
  946. package/dist/modes/interactive/drain-viewer.js.map +1 -0
  947. package/dist/modes/interactive/interactive-mode.d.ts +502 -0
  948. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  949. package/dist/modes/interactive/interactive-mode.js +7007 -0
  950. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  951. package/dist/modes/interactive/prompt-image-attachments.d.ts +34 -0
  952. package/dist/modes/interactive/prompt-image-attachments.d.ts.map +1 -0
  953. package/dist/modes/interactive/prompt-image-attachments.js +120 -0
  954. package/dist/modes/interactive/prompt-image-attachments.js.map +1 -0
  955. package/dist/modes/interactive/relay-stream-adapter.d.ts +19 -0
  956. package/dist/modes/interactive/relay-stream-adapter.d.ts.map +1 -0
  957. package/dist/modes/interactive/relay-stream-adapter.js +107 -0
  958. package/dist/modes/interactive/relay-stream-adapter.js.map +1 -0
  959. package/dist/modes/print-mode.d.ts +28 -0
  960. package/dist/modes/print-mode.d.ts.map +1 -0
  961. package/dist/modes/print-mode.js +132 -0
  962. package/dist/modes/print-mode.js.map +1 -0
  963. package/dist/modes/rpc/in-process-rpc-client.d.ts +31 -0
  964. package/dist/modes/rpc/in-process-rpc-client.d.ts.map +1 -0
  965. package/dist/modes/rpc/in-process-rpc-client.js +63 -0
  966. package/dist/modes/rpc/in-process-rpc-client.js.map +1 -0
  967. package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts +61 -0
  968. package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts.map +1 -0
  969. package/dist/modes/rpc/iroh-remote-agent-runtime.js +155 -0
  970. package/dist/modes/rpc/iroh-remote-agent-runtime.js.map +1 -0
  971. package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts +69 -0
  972. package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts.map +1 -0
  973. package/dist/modes/rpc/iroh-remote-rpc-mode.js +1223 -0
  974. package/dist/modes/rpc/iroh-remote-rpc-mode.js.map +1 -0
  975. package/dist/modes/rpc/jsonl.d.ts +2 -0
  976. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  977. package/dist/modes/rpc/jsonl.js +2 -0
  978. package/dist/modes/rpc/jsonl.js.map +1 -0
  979. package/dist/modes/rpc/rpc-client-base.d.ts +209 -0
  980. package/dist/modes/rpc/rpc-client-base.d.ts.map +1 -0
  981. package/dist/modes/rpc/rpc-client-base.js +530 -0
  982. package/dist/modes/rpc/rpc-client-base.js.map +1 -0
  983. package/dist/modes/rpc/rpc-client.d.ts +50 -0
  984. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  985. package/dist/modes/rpc/rpc-client.js +190 -0
  986. package/dist/modes/rpc/rpc-client.js.map +1 -0
  987. package/dist/modes/rpc/rpc-command-dispatcher.d.ts +43 -0
  988. package/dist/modes/rpc/rpc-command-dispatcher.d.ts.map +1 -0
  989. package/dist/modes/rpc/rpc-command-dispatcher.js +613 -0
  990. package/dist/modes/rpc/rpc-command-dispatcher.js.map +1 -0
  991. package/dist/modes/rpc/rpc-command-validation.d.ts +2 -0
  992. package/dist/modes/rpc/rpc-command-validation.d.ts.map +1 -0
  993. package/dist/modes/rpc/rpc-command-validation.js +207 -0
  994. package/dist/modes/rpc/rpc-command-validation.js.map +1 -0
  995. package/dist/modes/rpc/rpc-mode.d.ts +48 -0
  996. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  997. package/dist/modes/rpc/rpc-mode.js +1089 -0
  998. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  999. package/dist/modes/rpc/rpc-transport-client.d.ts +26 -0
  1000. package/dist/modes/rpc/rpc-transport-client.d.ts.map +1 -0
  1001. package/dist/modes/rpc/rpc-transport-client.js +76 -0
  1002. package/dist/modes/rpc/rpc-transport-client.js.map +1 -0
  1003. package/dist/modes/rpc/rpc-types.d.ts +2 -0
  1004. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  1005. package/dist/modes/rpc/rpc-types.js +2 -0
  1006. package/dist/modes/rpc/rpc-types.js.map +1 -0
  1007. package/dist/package-manager-cli.d.ts +28 -0
  1008. package/dist/package-manager-cli.d.ts.map +1 -0
  1009. package/dist/package-manager-cli.js +667 -0
  1010. package/dist/package-manager-cli.js.map +1 -0
  1011. package/dist/remote/integrated-runtime-retention.d.ts +17 -0
  1012. package/dist/remote/integrated-runtime-retention.d.ts.map +1 -0
  1013. package/dist/remote/integrated-runtime-retention.js +62 -0
  1014. package/dist/remote/integrated-runtime-retention.js.map +1 -0
  1015. package/dist/remote/iroh-native-adapter.cjs +19 -0
  1016. package/dist/sea/cli.d.ts +4 -0
  1017. package/dist/sea/cli.d.ts.map +1 -0
  1018. package/dist/sea/cli.js +4 -0
  1019. package/dist/sea/cli.js.map +1 -0
  1020. package/dist/sea/register-bedrock.d.ts +2 -0
  1021. package/dist/sea/register-bedrock.d.ts.map +1 -0
  1022. package/dist/sea/register-bedrock.js +4 -0
  1023. package/dist/sea/register-bedrock.js.map +1 -0
  1024. package/dist/store/catalog.d.ts +57 -0
  1025. package/dist/store/catalog.d.ts.map +1 -0
  1026. package/dist/store/catalog.js +331 -0
  1027. package/dist/store/catalog.js.map +1 -0
  1028. package/dist/store/inspector.d.ts +36 -0
  1029. package/dist/store/inspector.d.ts.map +1 -0
  1030. package/dist/store/inspector.js +578 -0
  1031. package/dist/store/inspector.js.map +1 -0
  1032. package/dist/store/install-plan.d.ts +26 -0
  1033. package/dist/store/install-plan.d.ts.map +1 -0
  1034. package/dist/store/install-plan.js +80 -0
  1035. package/dist/store/install-plan.js.map +1 -0
  1036. package/dist/store/render.d.ts +11 -0
  1037. package/dist/store/render.d.ts.map +1 -0
  1038. package/dist/store/render.js +153 -0
  1039. package/dist/store/render.js.map +1 -0
  1040. package/dist/store/resolver.d.ts +22 -0
  1041. package/dist/store/resolver.d.ts.map +1 -0
  1042. package/dist/store/resolver.js +207 -0
  1043. package/dist/store/resolver.js.map +1 -0
  1044. package/dist/store/store-cli.d.ts +7 -0
  1045. package/dist/store/store-cli.d.ts.map +1 -0
  1046. package/dist/store/store-cli.js +636 -0
  1047. package/dist/store/store-cli.js.map +1 -0
  1048. package/dist/store/targets.d.ts +21 -0
  1049. package/dist/store/targets.d.ts.map +1 -0
  1050. package/dist/store/targets.js +55 -0
  1051. package/dist/store/targets.js.map +1 -0
  1052. package/dist/utils/ansi.d.ts +2 -0
  1053. package/dist/utils/ansi.d.ts.map +1 -0
  1054. package/dist/utils/ansi.js +52 -0
  1055. package/dist/utils/ansi.js.map +1 -0
  1056. package/dist/utils/changelog.d.ts +22 -0
  1057. package/dist/utils/changelog.d.ts.map +1 -0
  1058. package/dist/utils/changelog.js +165 -0
  1059. package/dist/utils/changelog.js.map +1 -0
  1060. package/dist/utils/child-process.d.ts +18 -0
  1061. package/dist/utils/child-process.d.ts.map +1 -0
  1062. package/dist/utils/child-process.js +106 -0
  1063. package/dist/utils/child-process.js.map +1 -0
  1064. package/dist/utils/clipboard-image.d.ts +11 -0
  1065. package/dist/utils/clipboard-image.d.ts.map +1 -0
  1066. package/dist/utils/clipboard-image.js +245 -0
  1067. package/dist/utils/clipboard-image.js.map +1 -0
  1068. package/dist/utils/clipboard.d.ts +2 -0
  1069. package/dist/utils/clipboard.d.ts.map +1 -0
  1070. package/dist/utils/clipboard.js +94 -0
  1071. package/dist/utils/clipboard.js.map +1 -0
  1072. package/dist/utils/deprecation.d.ts +4 -0
  1073. package/dist/utils/deprecation.d.ts.map +1 -0
  1074. package/dist/utils/deprecation.js +13 -0
  1075. package/dist/utils/deprecation.js.map +1 -0
  1076. package/dist/utils/durable-atomic-write.d.ts +46 -0
  1077. package/dist/utils/durable-atomic-write.d.ts.map +1 -0
  1078. package/dist/utils/durable-atomic-write.js +104 -0
  1079. package/dist/utils/durable-atomic-write.js.map +1 -0
  1080. package/dist/utils/frontmatter.d.ts +8 -0
  1081. package/dist/utils/frontmatter.d.ts.map +1 -0
  1082. package/dist/utils/frontmatter.js +26 -0
  1083. package/dist/utils/frontmatter.js.map +1 -0
  1084. package/dist/utils/fs-watch.d.ts +5 -0
  1085. package/dist/utils/fs-watch.d.ts.map +1 -0
  1086. package/dist/utils/fs-watch.js +25 -0
  1087. package/dist/utils/fs-watch.js.map +1 -0
  1088. package/dist/utils/git.d.ts +26 -0
  1089. package/dist/utils/git.d.ts.map +1 -0
  1090. package/dist/utils/git.js +195 -0
  1091. package/dist/utils/git.js.map +1 -0
  1092. package/dist/utils/html.d.ts +7 -0
  1093. package/dist/utils/html.d.ts.map +1 -0
  1094. package/dist/utils/html.js +40 -0
  1095. package/dist/utils/html.js.map +1 -0
  1096. package/dist/utils/ignore-files.d.ts +5 -0
  1097. package/dist/utils/ignore-files.d.ts.map +1 -0
  1098. package/dist/utils/ignore-files.js +58 -0
  1099. package/dist/utils/ignore-files.js.map +1 -0
  1100. package/dist/utils/image-codec.d.ts +22 -0
  1101. package/dist/utils/image-codec.d.ts.map +1 -0
  1102. package/dist/utils/image-codec.js +35 -0
  1103. package/dist/utils/image-codec.js.map +1 -0
  1104. package/dist/utils/image-convert.d.ts +9 -0
  1105. package/dist/utils/image-convert.d.ts.map +1 -0
  1106. package/dist/utils/image-convert.js +26 -0
  1107. package/dist/utils/image-convert.js.map +1 -0
  1108. package/dist/utils/image-resize-core.d.ts +31 -0
  1109. package/dist/utils/image-resize-core.d.ts.map +1 -0
  1110. package/dist/utils/image-resize-core.js +181 -0
  1111. package/dist/utils/image-resize-core.js.map +1 -0
  1112. package/dist/utils/image-resize-worker.d.ts +2 -0
  1113. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  1114. package/dist/utils/image-resize-worker.js +31 -0
  1115. package/dist/utils/image-resize-worker.js.map +1 -0
  1116. package/dist/utils/image-resize.d.ts +15 -0
  1117. package/dist/utils/image-resize.d.ts.map +1 -0
  1118. package/dist/utils/image-resize.js +92 -0
  1119. package/dist/utils/image-resize.js.map +1 -0
  1120. package/dist/utils/json.d.ts +3 -0
  1121. package/dist/utils/json.d.ts.map +1 -0
  1122. package/dist/utils/json.js +7 -0
  1123. package/dist/utils/json.js.map +1 -0
  1124. package/dist/utils/mime.d.ts +3 -0
  1125. package/dist/utils/mime.d.ts.map +1 -0
  1126. package/dist/utils/mime.js +69 -0
  1127. package/dist/utils/mime.js.map +1 -0
  1128. package/dist/utils/npm-spec.d.ts +9 -0
  1129. package/dist/utils/npm-spec.d.ts.map +1 -0
  1130. package/dist/utils/npm-spec.js +15 -0
  1131. package/dist/utils/npm-spec.js.map +1 -0
  1132. package/dist/utils/open-browser.d.ts +9 -0
  1133. package/dist/utils/open-browser.d.ts.map +1 -0
  1134. package/dist/utils/open-browser.js +22 -0
  1135. package/dist/utils/open-browser.js.map +1 -0
  1136. package/dist/utils/paths.d.ts +31 -0
  1137. package/dist/utils/paths.d.ts.map +1 -0
  1138. package/dist/utils/paths.js +92 -0
  1139. package/dist/utils/paths.js.map +1 -0
  1140. package/dist/utils/private-files.d.ts +21 -0
  1141. package/dist/utils/private-files.d.ts.map +1 -0
  1142. package/dist/utils/private-files.js +103 -0
  1143. package/dist/utils/private-files.js.map +1 -0
  1144. package/dist/utils/process-env.d.ts +2 -0
  1145. package/dist/utils/process-env.d.ts.map +1 -0
  1146. package/dist/utils/process-env.js +31 -0
  1147. package/dist/utils/process-env.js.map +1 -0
  1148. package/dist/utils/shell.d.ts +30 -0
  1149. package/dist/utils/shell.d.ts.map +1 -0
  1150. package/dist/utils/shell.js +195 -0
  1151. package/dist/utils/shell.js.map +1 -0
  1152. package/dist/utils/sleep.d.ts +5 -0
  1153. package/dist/utils/sleep.d.ts.map +1 -0
  1154. package/dist/utils/sleep.js +17 -0
  1155. package/dist/utils/sleep.js.map +1 -0
  1156. package/dist/utils/syntax-highlight.d.ts +18 -0
  1157. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  1158. package/dist/utils/syntax-highlight.js +139 -0
  1159. package/dist/utils/syntax-highlight.js.map +1 -0
  1160. package/dist/utils/tools-manager.d.ts +3 -0
  1161. package/dist/utils/tools-manager.d.ts.map +1 -0
  1162. package/dist/utils/tools-manager.js +328 -0
  1163. package/dist/utils/tools-manager.js.map +1 -0
  1164. package/dist/utils/version-check.d.ts +15 -0
  1165. package/dist/utils/version-check.d.ts.map +1 -0
  1166. package/dist/utils/version-check.js +61 -0
  1167. package/dist/utils/version-check.js.map +1 -0
  1168. package/dist/utils/volt-user-agent.d.ts +2 -0
  1169. package/dist/utils/volt-user-agent.d.ts.map +1 -0
  1170. package/dist/utils/volt-user-agent.js +5 -0
  1171. package/dist/utils/volt-user-agent.js.map +1 -0
  1172. package/dist/utils/windows-self-update.d.ts +3 -0
  1173. package/dist/utils/windows-self-update.d.ts.map +1 -0
  1174. package/dist/utils/windows-self-update.js +77 -0
  1175. package/dist/utils/windows-self-update.js.map +1 -0
  1176. package/docs/compaction.md +394 -0
  1177. package/docs/containerization.md +111 -0
  1178. package/docs/custom-provider.md +737 -0
  1179. package/docs/daemon.md +190 -0
  1180. package/docs/development.md +70 -0
  1181. package/docs/docs.json +176 -0
  1182. package/docs/extensions.md +2692 -0
  1183. package/docs/images/exy.png +0 -0
  1184. package/docs/images/interactive-mode.png +0 -0
  1185. package/docs/images/tree-view.png +0 -0
  1186. package/docs/index.md +82 -0
  1187. package/docs/iroh-remote-access-design.md +340 -0
  1188. package/docs/iroh-remote-protocol.md +431 -0
  1189. package/docs/json.md +87 -0
  1190. package/docs/keybindings.md +200 -0
  1191. package/docs/live-shared-session-daemon-design.md +1090 -0
  1192. package/docs/lsp.md +143 -0
  1193. package/docs/mcp.md +1044 -0
  1194. package/docs/models.md +495 -0
  1195. package/docs/packages.md +230 -0
  1196. package/docs/prompt-templates.md +108 -0
  1197. package/docs/providers.md +274 -0
  1198. package/docs/quickstart.md +165 -0
  1199. package/docs/rpc.md +2050 -0
  1200. package/docs/sdk.md +1267 -0
  1201. package/docs/security.md +139 -0
  1202. package/docs/session-format.md +412 -0
  1203. package/docs/sessions.md +145 -0
  1204. package/docs/settings.md +371 -0
  1205. package/docs/shell-aliases.md +13 -0
  1206. package/docs/skills.md +243 -0
  1207. package/docs/subagents-design.md +419 -0
  1208. package/docs/terminal-setup.md +148 -0
  1209. package/docs/termux.md +127 -0
  1210. package/docs/themes.md +295 -0
  1211. package/docs/tla/ClientAuth.cfg +16 -0
  1212. package/docs/tla/ClientAuth.tla +205 -0
  1213. package/docs/tla/ClientConn.cfg +16 -0
  1214. package/docs/tla/ClientConn.tla +265 -0
  1215. package/docs/tla/LeaseBroker.cfg +43 -0
  1216. package/docs/tla/LeaseBroker.tla +563 -0
  1217. package/docs/tla/PLAN.md +240 -0
  1218. package/docs/tla/PushOrdering.cfg +17 -0
  1219. package/docs/tla/PushOrdering.tla +183 -0
  1220. package/docs/tla/README.md +205 -0
  1221. package/docs/tla/RelayViewer.cfg +26 -0
  1222. package/docs/tla/RelayViewer.tla +299 -0
  1223. package/docs/tla/SessionTarget.cfg +18 -0
  1224. package/docs/tla/SessionTarget.tla +192 -0
  1225. package/docs/tla/check.sh +34 -0
  1226. package/docs/tmux.md +63 -0
  1227. package/docs/tui.md +949 -0
  1228. package/docs/usage.md +482 -0
  1229. package/docs/windows.md +17 -0
  1230. package/docs/worktrees-design.md +605 -0
  1231. package/examples/README.md +28 -0
  1232. package/examples/extensions/README.md +211 -0
  1233. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  1234. package/examples/extensions/bash-spawn-hook.ts +30 -0
  1235. package/examples/extensions/bookmark.ts +50 -0
  1236. package/examples/extensions/border-status-editor.ts +150 -0
  1237. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  1238. package/examples/extensions/claude-rules.ts +86 -0
  1239. package/examples/extensions/commands.ts +72 -0
  1240. package/examples/extensions/confirm-destructive.ts +59 -0
  1241. package/examples/extensions/custom-compaction.ts +127 -0
  1242. package/examples/extensions/custom-footer.ts +64 -0
  1243. package/examples/extensions/custom-header.ts +72 -0
  1244. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  1245. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1246. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1247. package/examples/extensions/custom-provider-gitlab-duo/index.ts +400 -0
  1248. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1249. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1250. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1251. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1252. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  1253. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1254. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1255. package/examples/extensions/dynamic-tools.ts +74 -0
  1256. package/examples/extensions/event-bus.ts +43 -0
  1257. package/examples/extensions/file-trigger.ts +41 -0
  1258. package/examples/extensions/git-checkpoint.ts +53 -0
  1259. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1260. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1261. package/examples/extensions/gondolin/index.ts +531 -0
  1262. package/examples/extensions/gondolin/package-lock.json +185 -0
  1263. package/examples/extensions/gondolin/package.json +19 -0
  1264. package/examples/extensions/handoff.ts +191 -0
  1265. package/examples/extensions/hello.ts +26 -0
  1266. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1267. package/examples/extensions/inline-bash.ts +94 -0
  1268. package/examples/extensions/input-transform-streaming.ts +39 -0
  1269. package/examples/extensions/input-transform.ts +43 -0
  1270. package/examples/extensions/interactive-shell.ts +196 -0
  1271. package/examples/extensions/mac-system-theme.ts +47 -0
  1272. package/examples/extensions/message-renderer.ts +59 -0
  1273. package/examples/extensions/minimal-mode.ts +426 -0
  1274. package/examples/extensions/modal-editor.ts +85 -0
  1275. package/examples/extensions/model-status.ts +31 -0
  1276. package/examples/extensions/notify.ts +55 -0
  1277. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1278. package/examples/extensions/overlay-test.ts +153 -0
  1279. package/examples/extensions/permission-gate.ts +34 -0
  1280. package/examples/extensions/pirate.ts +47 -0
  1281. package/examples/extensions/plan-mode/README.md +65 -0
  1282. package/examples/extensions/plan-mode/index.ts +340 -0
  1283. package/examples/extensions/plan-mode/utils.ts +168 -0
  1284. package/examples/extensions/preset.ts +436 -0
  1285. package/examples/extensions/project-trust.ts +64 -0
  1286. package/examples/extensions/prompt-customizer.ts +97 -0
  1287. package/examples/extensions/protected-paths.ts +30 -0
  1288. package/examples/extensions/provider-payload.ts +18 -0
  1289. package/examples/extensions/qna.ts +122 -0
  1290. package/examples/extensions/question.ts +277 -0
  1291. package/examples/extensions/questionnaire.ts +440 -0
  1292. package/examples/extensions/rainbow-editor.ts +88 -0
  1293. package/examples/extensions/reload-runtime.ts +37 -0
  1294. package/examples/extensions/rpc-demo.ts +118 -0
  1295. package/examples/extensions/sandbox/index.ts +321 -0
  1296. package/examples/extensions/sandbox/package-lock.json +92 -0
  1297. package/examples/extensions/sandbox/package.json +19 -0
  1298. package/examples/extensions/send-user-message.ts +97 -0
  1299. package/examples/extensions/session-name.ts +27 -0
  1300. package/examples/extensions/shutdown-command.ts +63 -0
  1301. package/examples/extensions/snake.ts +343 -0
  1302. package/examples/extensions/space-invaders.ts +560 -0
  1303. package/examples/extensions/ssh.ts +220 -0
  1304. package/examples/extensions/status-line.ts +32 -0
  1305. package/examples/extensions/structured-output.ts +65 -0
  1306. package/examples/extensions/subagent/README.md +175 -0
  1307. package/examples/extensions/subagent/agents/planner.md +37 -0
  1308. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1309. package/examples/extensions/subagent/agents/scout.md +50 -0
  1310. package/examples/extensions/subagent/agents/worker.md +24 -0
  1311. package/examples/extensions/subagent/agents.ts +126 -0
  1312. package/examples/extensions/subagent/index.ts +1009 -0
  1313. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1314. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1315. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1316. package/examples/extensions/summarize.ts +206 -0
  1317. package/examples/extensions/system-prompt-header.ts +17 -0
  1318. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1319. package/examples/extensions/timed-confirm.ts +70 -0
  1320. package/examples/extensions/titlebar-spinner.ts +58 -0
  1321. package/examples/extensions/todo.ts +297 -0
  1322. package/examples/extensions/tool-override.ts +144 -0
  1323. package/examples/extensions/tools.ts +146 -0
  1324. package/examples/extensions/trigger-compact.ts +50 -0
  1325. package/examples/extensions/truncated-tool.ts +195 -0
  1326. package/examples/extensions/widget-placement.ts +9 -0
  1327. package/examples/extensions/with-deps/index.ts +32 -0
  1328. package/examples/extensions/with-deps/package-lock.json +31 -0
  1329. package/examples/extensions/with-deps/package.json +22 -0
  1330. package/examples/extensions/working-indicator.ts +123 -0
  1331. package/examples/extensions/working-message-test.ts +25 -0
  1332. package/examples/remote/firebase-push-relay/README.md +79 -0
  1333. package/examples/remote/firebase-push-relay/firebase.json +12 -0
  1334. package/examples/remote/firebase-push-relay/firestore.indexes.json +11 -0
  1335. package/examples/remote/firebase-push-relay/firestore.rules +9 -0
  1336. package/examples/remote/firebase-push-relay/functions/core.js +511 -0
  1337. package/examples/remote/firebase-push-relay/functions/core.test.js +273 -0
  1338. package/examples/remote/firebase-push-relay/functions/index.js +413 -0
  1339. package/examples/remote/firebase-push-relay/functions/package-lock.json +2974 -0
  1340. package/examples/remote/firebase-push-relay/functions/package.json +18 -0
  1341. package/examples/remote/iroh-sidecar/README.md +211 -0
  1342. package/examples/remote/iroh-sidecar/client.mjs +554 -0
  1343. package/examples/remote/iroh-sidecar/common.mjs +195 -0
  1344. package/examples/remote/iroh-sidecar/host.mjs +4 -0
  1345. package/examples/remote/iroh-sidecar/package-lock.json +213 -0
  1346. package/examples/remote/iroh-sidecar/package.json +13 -0
  1347. package/examples/remote/iroh-sidecar/source-aware-run.mjs +41 -0
  1348. package/examples/rpc-extension-ui.ts +632 -0
  1349. package/examples/sdk/01-minimal.ts +26 -0
  1350. package/examples/sdk/02-custom-model.ts +53 -0
  1351. package/examples/sdk/03-custom-prompt.ts +70 -0
  1352. package/examples/sdk/04-skills.ts +55 -0
  1353. package/examples/sdk/05-tools.ts +48 -0
  1354. package/examples/sdk/06-extensions.ts +94 -0
  1355. package/examples/sdk/07-context-files.ts +42 -0
  1356. package/examples/sdk/08-prompt-templates.ts +51 -0
  1357. package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
  1358. package/examples/sdk/10-settings.ts +53 -0
  1359. package/examples/sdk/11-sessions.ts +52 -0
  1360. package/examples/sdk/12-full-control.ts +78 -0
  1361. package/examples/sdk/13-session-runtime.ts +67 -0
  1362. package/examples/sdk/README.md +147 -0
  1363. package/npm-shrinkwrap.json +3442 -0
  1364. package/package.json +125 -19
@@ -0,0 +1,1280 @@
1
+ import { uuidv7 } from "@hansjm10/volt-agent-core";
2
+ import { randomUUID } from "crypto";
3
+ import { closeSync, createReadStream, existsSync, openSync, readdirSync, readSync, statSync } from "fs";
4
+ import { readdir, stat } from "fs/promises";
5
+ import { basename, join, resolve } from "path";
6
+ import { createInterface } from "readline";
7
+ import { StringDecoder } from "string_decoder";
8
+ import { getAgentDir as getDefaultAgentDir, getSessionsDir } from "../config.js";
9
+ import { writeDurableAtomicFileSync } from "../utils/durable-atomic-write.js";
10
+ import { canonicalizePath, normalizePath, resolvePath } from "../utils/paths.js";
11
+ import { appendPrivateFileSync, ensurePrivateDirectorySync, hardenPrivateRegularFileSync, PRIVATE_DIRECTORY_MODE, PRIVATE_FILE_MODE, writePrivateNewFileSync, } from "../utils/private-files.js";
12
+ import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from "./messages.js";
13
+ export const CURRENT_SESSION_VERSION = 3;
14
+ function createSessionId() {
15
+ return uuidv7();
16
+ }
17
+ export function assertValidSessionId(id) {
18
+ if (!/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/.test(id)) {
19
+ throw new Error("Session id must be non-empty, contain only alphanumeric characters, '-', '_', and '.', and start and end with an alphanumeric character");
20
+ }
21
+ }
22
+ /** Generate a unique short ID (8 hex chars, collision-checked) */
23
+ function generateId(byId) {
24
+ for (let i = 0; i < 100; i++) {
25
+ const id = randomUUID().slice(0, 8);
26
+ if (!byId.has(id))
27
+ return id;
28
+ }
29
+ // Fallback to full UUID if somehow we have collisions
30
+ return randomUUID();
31
+ }
32
+ /** Migrate v1 → v2: add id/parentId tree structure. Mutates in place. */
33
+ function migrateV1ToV2(entries) {
34
+ const ids = new Set();
35
+ let prevId = null;
36
+ for (const entry of entries) {
37
+ if (entry.type === "session") {
38
+ entry.version = 2;
39
+ continue;
40
+ }
41
+ entry.id = generateId(ids);
42
+ entry.parentId = prevId;
43
+ prevId = entry.id;
44
+ // Convert firstKeptEntryIndex to firstKeptEntryId for compaction
45
+ if (entry.type === "compaction") {
46
+ const comp = entry;
47
+ if (typeof comp.firstKeptEntryIndex === "number") {
48
+ const targetEntry = entries[comp.firstKeptEntryIndex];
49
+ if (targetEntry && targetEntry.type !== "session") {
50
+ comp.firstKeptEntryId = targetEntry.id;
51
+ }
52
+ delete comp.firstKeptEntryIndex;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ /** Migrate v2 → v3: rename hookMessage role to custom. Mutates in place. */
58
+ function migrateV2ToV3(entries) {
59
+ for (const entry of entries) {
60
+ if (entry.type === "session") {
61
+ entry.version = 3;
62
+ continue;
63
+ }
64
+ // Update message entries with hookMessage role
65
+ if (entry.type === "message") {
66
+ const msgEntry = entry;
67
+ if (msgEntry.message && msgEntry.message.role === "hookMessage") {
68
+ msgEntry.message.role = "custom";
69
+ }
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * Run all necessary migrations to bring entries to current version.
75
+ * Mutates entries in place. Returns true if any migration was applied.
76
+ */
77
+ function migrateToCurrentVersion(entries) {
78
+ const header = entries.find((e) => e.type === "session");
79
+ const version = header?.version ?? 1;
80
+ if (version >= CURRENT_SESSION_VERSION)
81
+ return false;
82
+ if (version < 2)
83
+ migrateV1ToV2(entries);
84
+ if (version < 3)
85
+ migrateV2ToV3(entries);
86
+ return true;
87
+ }
88
+ /** Exported for testing */
89
+ export function migrateSessionEntries(entries) {
90
+ migrateToCurrentVersion(entries);
91
+ }
92
+ /** Exported for compaction.test.ts */
93
+ export function parseSessionEntries(content) {
94
+ const entries = [];
95
+ const lines = content.trim().split("\n");
96
+ for (const line of lines) {
97
+ if (!line.trim())
98
+ continue;
99
+ try {
100
+ const entry = JSON.parse(line);
101
+ entries.push(entry);
102
+ }
103
+ catch {
104
+ // Skip malformed lines
105
+ }
106
+ }
107
+ return entries;
108
+ }
109
+ export function getLatestCompactionEntry(entries) {
110
+ for (let i = entries.length - 1; i >= 0; i--) {
111
+ if (entries[i].type === "compaction") {
112
+ return entries[i];
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Build the session context from entries using tree traversal.
119
+ * If leafId is provided, walks from that entry to root.
120
+ * Handles compaction and branch summaries along the path.
121
+ */
122
+ export function buildSessionContext(entries, leafId, byId) {
123
+ // Build uuid index if not available
124
+ if (!byId) {
125
+ byId = new Map();
126
+ for (const entry of entries) {
127
+ byId.set(entry.id, entry);
128
+ }
129
+ }
130
+ // Find leaf
131
+ let leaf;
132
+ if (leafId === null) {
133
+ // Explicitly null - return no messages (navigated to before first entry)
134
+ return { messages: [], thinkingLevel: "off", model: null };
135
+ }
136
+ if (leafId) {
137
+ leaf = byId.get(leafId);
138
+ }
139
+ if (!leaf) {
140
+ // Fallback to last entry (when leafId is undefined)
141
+ leaf = entries[entries.length - 1];
142
+ }
143
+ if (!leaf) {
144
+ return { messages: [], thinkingLevel: "off", model: null };
145
+ }
146
+ // Walk from leaf to root, collecting path
147
+ const path = [];
148
+ let current = leaf;
149
+ while (current) {
150
+ path.unshift(current);
151
+ current = current.parentId ? byId.get(current.parentId) : undefined;
152
+ }
153
+ // Extract settings and find compaction
154
+ let thinkingLevel = "off";
155
+ let model = null;
156
+ let compaction = null;
157
+ for (const entry of path) {
158
+ if (entry.type === "thinking_level_change") {
159
+ thinkingLevel = entry.thinkingLevel;
160
+ }
161
+ else if (entry.type === "model_change") {
162
+ model = { provider: entry.provider, modelId: entry.modelId };
163
+ }
164
+ else if (entry.type === "message" && entry.message.role === "assistant") {
165
+ model = { provider: entry.message.provider, modelId: entry.message.model };
166
+ }
167
+ else if (entry.type === "compaction") {
168
+ compaction = entry;
169
+ }
170
+ }
171
+ // Build messages and collect corresponding entries
172
+ // When there's a compaction, we need to:
173
+ // 1. Emit summary first (entry = compaction)
174
+ // 2. Emit kept messages (from firstKeptEntryId up to compaction)
175
+ // 3. Emit messages after compaction
176
+ const messages = [];
177
+ const appendMessage = (entry) => {
178
+ if (entry.type === "message") {
179
+ messages.push(entry.message);
180
+ }
181
+ else if (entry.type === "custom_message") {
182
+ messages.push(createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp));
183
+ }
184
+ else if (entry.type === "branch_summary" && entry.summary) {
185
+ messages.push(createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp));
186
+ }
187
+ };
188
+ if (compaction) {
189
+ // Emit summary first
190
+ messages.push(createCompactionSummaryMessage(compaction.summary, compaction.tokensBefore, compaction.timestamp));
191
+ // Find compaction index in path
192
+ const compactionIdx = path.findIndex((e) => e.type === "compaction" && e.id === compaction.id);
193
+ // Emit kept messages (before compaction, starting from firstKeptEntryId)
194
+ let foundFirstKept = false;
195
+ for (let i = 0; i < compactionIdx; i++) {
196
+ const entry = path[i];
197
+ if (entry.id === compaction.firstKeptEntryId) {
198
+ foundFirstKept = true;
199
+ }
200
+ if (foundFirstKept) {
201
+ appendMessage(entry);
202
+ }
203
+ }
204
+ // Emit messages after compaction
205
+ for (let i = compactionIdx + 1; i < path.length; i++) {
206
+ const entry = path[i];
207
+ appendMessage(entry);
208
+ }
209
+ }
210
+ else {
211
+ // No compaction - emit all messages, handle branch summaries and custom messages
212
+ for (const entry of path) {
213
+ appendMessage(entry);
214
+ }
215
+ }
216
+ return { messages, thinkingLevel, model };
217
+ }
218
+ /** Encode a cwd into the safe `--…--` session-directory name. */
219
+ function encodeSessionDirName(cwd) {
220
+ const resolvedCwd = resolvePath(cwd);
221
+ return `--${resolvedCwd.replace(/^[/\\]/, "").replace(/[/\\:]/g, "-")}--`;
222
+ }
223
+ /**
224
+ * True when a session directory is the default-shaped directory for a cwd
225
+ * (under ANY agent dir). Such directories hold every session of that
226
+ * workspace — including worktree-bound sessions whose header cwd differs —
227
+ * so cwd filtering must not apply to them.
228
+ */
229
+ function isDefaultShapedSessionDir(dir, cwd) {
230
+ return basename(dir) === encodeSessionDirName(cwd);
231
+ }
232
+ /**
233
+ * Compute the default session directory for a cwd.
234
+ * Encodes cwd into a safe directory name under ~/.volt/agent/sessions/.
235
+ */
236
+ function getDefaultSessionDirPath(cwd, agentDir = getDefaultAgentDir()) {
237
+ return join(resolvePath(agentDir), "sessions", encodeSessionDirName(cwd));
238
+ }
239
+ export function getDefaultSessionDir(cwd, agentDir = getDefaultAgentDir()) {
240
+ const sessionDir = getDefaultSessionDirPath(cwd, agentDir);
241
+ ensurePrivateDirectorySync(sessionDir);
242
+ return sessionDir;
243
+ }
244
+ const SESSION_READ_BUFFER_SIZE = 1024 * 1024;
245
+ function parseSessionEntryLine(line) {
246
+ if (!line.trim())
247
+ return null;
248
+ try {
249
+ return JSON.parse(line);
250
+ }
251
+ catch {
252
+ // Skip malformed lines
253
+ return null;
254
+ }
255
+ }
256
+ /** Exported for testing */
257
+ export function loadEntriesFromFile(filePath) {
258
+ const resolvedFilePath = normalizePath(filePath);
259
+ if (!existsSync(resolvedFilePath))
260
+ return [];
261
+ const entries = [];
262
+ const fd = openSync(resolvedFilePath, "r");
263
+ try {
264
+ const decoder = new StringDecoder("utf8");
265
+ const buffer = Buffer.allocUnsafe(SESSION_READ_BUFFER_SIZE);
266
+ let pending = "";
267
+ while (true) {
268
+ const bytesRead = readSync(fd, buffer, 0, buffer.length, null);
269
+ if (bytesRead === 0)
270
+ break;
271
+ pending += decoder.write(buffer.subarray(0, bytesRead));
272
+ let lineStart = 0;
273
+ let newlineIndex = pending.indexOf("\n", lineStart);
274
+ while (newlineIndex !== -1) {
275
+ const entry = parseSessionEntryLine(pending.slice(lineStart, newlineIndex));
276
+ if (entry)
277
+ entries.push(entry);
278
+ lineStart = newlineIndex + 1;
279
+ newlineIndex = pending.indexOf("\n", lineStart);
280
+ }
281
+ pending = pending.slice(lineStart);
282
+ }
283
+ pending += decoder.end();
284
+ const finalEntry = parseSessionEntryLine(pending);
285
+ if (finalEntry)
286
+ entries.push(finalEntry);
287
+ }
288
+ finally {
289
+ closeSync(fd);
290
+ }
291
+ // Validate session header
292
+ if (entries.length === 0)
293
+ return entries;
294
+ const header = entries[0];
295
+ if (header.type !== "session" || typeof header.id !== "string") {
296
+ return [];
297
+ }
298
+ return entries;
299
+ }
300
+ function readSessionHeader(filePath) {
301
+ try {
302
+ hardenPrivateRegularFileSync(filePath);
303
+ const fd = openSync(filePath, "r");
304
+ const buffer = Buffer.alloc(512);
305
+ const bytesRead = readSync(fd, buffer, 0, 512, 0);
306
+ closeSync(fd);
307
+ const firstLine = buffer.toString("utf8", 0, bytesRead).split("\n")[0];
308
+ if (!firstLine)
309
+ return null;
310
+ const header = JSON.parse(firstLine);
311
+ if (header.type !== "session" || typeof header.id !== "string") {
312
+ return null;
313
+ }
314
+ return header;
315
+ }
316
+ catch {
317
+ return null;
318
+ }
319
+ }
320
+ function getSessionHeaderCwd(header) {
321
+ const cwd = header.cwd;
322
+ return typeof cwd === "string" ? cwd : undefined;
323
+ }
324
+ function sessionCwdMatches(cwd, resolvedCwd) {
325
+ return cwd !== undefined && cwd !== "" && canonicalizePath(resolvePath(cwd)) === canonicalizePath(resolvedCwd);
326
+ }
327
+ /** Exported for testing */
328
+ export function findMostRecentSession(sessionDir, cwd) {
329
+ const resolvedSessionDir = normalizePath(sessionDir);
330
+ const resolvedCwd = cwd ? resolvePath(cwd) : undefined;
331
+ try {
332
+ ensurePrivateDirectorySync(resolvedSessionDir, { hardenExisting: false });
333
+ const files = readdirSync(resolvedSessionDir)
334
+ .filter((f) => f.endsWith(".jsonl"))
335
+ .map((f) => join(resolvedSessionDir, f))
336
+ .map((path) => ({ path, header: readSessionHeader(path) }))
337
+ .filter((file) => file.header !== null &&
338
+ (!resolvedCwd || sessionCwdMatches(getSessionHeaderCwd(file.header), resolvedCwd)))
339
+ .map(({ path }) => ({ path, mtime: statSync(path).mtime }))
340
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
341
+ return files[0]?.path || null;
342
+ }
343
+ catch {
344
+ return null;
345
+ }
346
+ }
347
+ function isMessageWithContent(message) {
348
+ return typeof message.role === "string" && "content" in message;
349
+ }
350
+ function extractTextContentFromContent(content) {
351
+ if (typeof content === "string") {
352
+ return content;
353
+ }
354
+ return content
355
+ .filter((block) => block.type === "text" && typeof block.text === "string")
356
+ .map((block) => block.text)
357
+ .join(" ");
358
+ }
359
+ function extractTextContent(message) {
360
+ return extractTextContentFromContent(message.content);
361
+ }
362
+ function getEntryTimestamp(entry) {
363
+ const t = new Date(entry.timestamp).getTime();
364
+ return Number.isNaN(t) ? undefined : t;
365
+ }
366
+ function getMessageActivityTime(entry) {
367
+ const message = entry.message;
368
+ if (!isMessageWithContent(message))
369
+ return undefined;
370
+ if (message.role !== "user" && message.role !== "assistant")
371
+ return undefined;
372
+ const msgTimestamp = message.timestamp;
373
+ if (typeof msgTimestamp === "number") {
374
+ return msgTimestamp;
375
+ }
376
+ return getEntryTimestamp(entry);
377
+ }
378
+ function isDisplayedCustomMessage(entry) {
379
+ return entry.type === "custom_message" && entry.display;
380
+ }
381
+ function isSessionFileFlushContent(entry) {
382
+ return ((entry.type === "message" && entry.message.role === "assistant") ||
383
+ (entry.type === "custom_message" && entry.display));
384
+ }
385
+ export function summarizeSessionEntries(entries) {
386
+ let messageCount = 0;
387
+ let firstUserMessage = "";
388
+ let firstFallbackMessage = "";
389
+ const allMessages = [];
390
+ let lastActivityTime;
391
+ for (const entry of entries) {
392
+ if (entry.type === "message") {
393
+ messageCount++;
394
+ const activityTime = getMessageActivityTime(entry);
395
+ if (typeof activityTime === "number") {
396
+ lastActivityTime = Math.max(lastActivityTime ?? 0, activityTime);
397
+ }
398
+ const message = entry.message;
399
+ if (!isMessageWithContent(message))
400
+ continue;
401
+ if (message.role !== "user" && message.role !== "assistant")
402
+ continue;
403
+ const textContent = extractTextContent(message);
404
+ if (!textContent)
405
+ continue;
406
+ allMessages.push(textContent);
407
+ if (!firstUserMessage && message.role === "user") {
408
+ firstUserMessage = textContent;
409
+ }
410
+ if (!firstFallbackMessage && message.role === "assistant") {
411
+ firstFallbackMessage = textContent;
412
+ }
413
+ continue;
414
+ }
415
+ if (isDisplayedCustomMessage(entry)) {
416
+ messageCount++;
417
+ const activityTime = getEntryTimestamp(entry);
418
+ if (typeof activityTime === "number") {
419
+ lastActivityTime = Math.max(lastActivityTime ?? 0, activityTime);
420
+ }
421
+ const textContent = extractTextContentFromContent(entry.content);
422
+ if (!textContent)
423
+ continue;
424
+ allMessages.push(textContent);
425
+ if (!firstFallbackMessage) {
426
+ firstFallbackMessage = textContent;
427
+ }
428
+ }
429
+ }
430
+ return {
431
+ messageCount,
432
+ firstMessage: firstUserMessage || firstFallbackMessage || "(no messages)",
433
+ allMessagesText: allMessages.join(" "),
434
+ lastActivityTime,
435
+ };
436
+ }
437
+ async function buildSessionInfo(filePath) {
438
+ try {
439
+ hardenPrivateRegularFileSync(filePath);
440
+ const stats = await stat(filePath);
441
+ let header = null;
442
+ const entries = [];
443
+ let name;
444
+ const rl = createInterface({
445
+ input: createReadStream(filePath, { encoding: "utf8" }),
446
+ crlfDelay: Infinity,
447
+ });
448
+ for await (const line of rl) {
449
+ const entry = parseSessionEntryLine(line);
450
+ if (!entry)
451
+ continue;
452
+ if (!header) {
453
+ if (entry.type !== "session")
454
+ return null;
455
+ header = entry;
456
+ continue;
457
+ }
458
+ // Extract session name (use latest, including explicit clears)
459
+ if (entry.type === "session_info") {
460
+ name = entry.name?.trim() || undefined;
461
+ }
462
+ if (entry.type !== "session") {
463
+ entries.push(entry);
464
+ }
465
+ }
466
+ if (!header)
467
+ return null;
468
+ const summary = summarizeSessionEntries(entries);
469
+ const cwd = typeof header.cwd === "string" ? header.cwd : "";
470
+ const parentSessionPath = header.parentSession;
471
+ const origin = header.origin === "subagent" ? header.origin : undefined;
472
+ const headerTime = typeof header.timestamp === "string" ? new Date(header.timestamp).getTime() : NaN;
473
+ const modified = typeof summary.lastActivityTime === "number" && summary.lastActivityTime > 0
474
+ ? new Date(summary.lastActivityTime)
475
+ : !Number.isNaN(headerTime)
476
+ ? new Date(headerTime)
477
+ : stats.mtime;
478
+ return {
479
+ path: filePath,
480
+ id: header.id,
481
+ cwd,
482
+ name,
483
+ parentSessionPath,
484
+ origin,
485
+ created: new Date(header.timestamp),
486
+ modified,
487
+ messageCount: summary.messageCount,
488
+ firstMessage: summary.firstMessage,
489
+ allMessagesText: summary.allMessagesText,
490
+ };
491
+ }
492
+ catch {
493
+ return null;
494
+ }
495
+ }
496
+ const MAX_CONCURRENT_SESSION_INFO_LOADS = 10;
497
+ async function buildSessionInfosWithConcurrency(files, onLoaded) {
498
+ const results = new Array(files.length).fill(null);
499
+ const inFlight = new Set();
500
+ let nextIndex = 0;
501
+ const startNext = () => {
502
+ const index = nextIndex++;
503
+ const file = files[index];
504
+ if (!file)
505
+ return;
506
+ let task;
507
+ task = buildSessionInfo(file)
508
+ .then((info) => {
509
+ results[index] = info;
510
+ })
511
+ .catch(() => {
512
+ results[index] = null;
513
+ })
514
+ .finally(() => {
515
+ inFlight.delete(task);
516
+ onLoaded();
517
+ });
518
+ inFlight.add(task);
519
+ };
520
+ while (nextIndex < files.length || inFlight.size > 0) {
521
+ while (nextIndex < files.length && inFlight.size < MAX_CONCURRENT_SESSION_INFO_LOADS) {
522
+ startNext();
523
+ }
524
+ if (inFlight.size > 0) {
525
+ await Promise.race(inFlight);
526
+ }
527
+ }
528
+ return results;
529
+ }
530
+ async function listSessionsFromDir(dir, onProgress, progressOffset = 0, progressTotal) {
531
+ const sessions = [];
532
+ if (!existsSync(dir)) {
533
+ return sessions;
534
+ }
535
+ try {
536
+ ensurePrivateDirectorySync(dir, { hardenExisting: false });
537
+ const dirEntries = await readdir(dir);
538
+ const files = dirEntries.filter((f) => f.endsWith(".jsonl")).map((f) => join(dir, f));
539
+ const total = progressTotal ?? files.length;
540
+ let loaded = 0;
541
+ const results = await buildSessionInfosWithConcurrency(files, () => {
542
+ loaded++;
543
+ onProgress?.(progressOffset + loaded, total);
544
+ });
545
+ for (const info of results) {
546
+ if (info) {
547
+ sessions.push(info);
548
+ }
549
+ }
550
+ }
551
+ catch {
552
+ // Return empty list on error
553
+ }
554
+ return sessions;
555
+ }
556
+ /**
557
+ * Manages conversation sessions as append-only trees stored in JSONL files.
558
+ *
559
+ * Each session entry has an id and parentId forming a tree structure. The "leaf"
560
+ * pointer tracks the current position. Appending creates a child of the current leaf.
561
+ * Branching moves the leaf to an earlier entry, allowing new branches without
562
+ * modifying history.
563
+ *
564
+ * Use buildSessionContext() to get the resolved message list for the LLM, which
565
+ * handles compaction summaries and follows the path from root to current leaf.
566
+ */
567
+ export class SessionManager {
568
+ sessionId = "";
569
+ sessionFile;
570
+ sessionDir;
571
+ cwd;
572
+ persist;
573
+ flushed = false;
574
+ fileEntries = [];
575
+ byId = new Map();
576
+ labelsById = new Map();
577
+ labelTimestampsById = new Map();
578
+ leafId = null;
579
+ constructor(cwd, sessionDir, sessionFile, persist, newSessionOptions, hardenExistingSessionDir = true) {
580
+ this.cwd = resolvePath(cwd);
581
+ this.sessionDir = normalizePath(sessionDir);
582
+ this.persist = persist;
583
+ if (persist && this.sessionDir) {
584
+ ensurePrivateDirectorySync(this.sessionDir, { hardenExisting: hardenExistingSessionDir });
585
+ }
586
+ if (sessionFile) {
587
+ this.setSessionFile(sessionFile);
588
+ }
589
+ else {
590
+ this.newSession(newSessionOptions);
591
+ }
592
+ }
593
+ /** Switch to a different session file (used for resume and branching) */
594
+ setSessionFile(sessionFile) {
595
+ this.sessionFile = resolvePath(sessionFile);
596
+ if (existsSync(this.sessionFile)) {
597
+ hardenPrivateRegularFileSync(this.sessionFile);
598
+ this.fileEntries = loadEntriesFromFile(this.sessionFile);
599
+ // If file was empty or corrupted (no valid header), truncate and start fresh
600
+ // to avoid appending messages without a session header (which breaks the session)
601
+ if (this.fileEntries.length === 0) {
602
+ const explicitPath = this.sessionFile;
603
+ this.newSession();
604
+ this.sessionFile = explicitPath;
605
+ this._rewriteFile();
606
+ this.flushed = true;
607
+ return;
608
+ }
609
+ const header = this.fileEntries.find((e) => e.type === "session");
610
+ this.sessionId = header?.id ?? createSessionId();
611
+ if (migrateToCurrentVersion(this.fileEntries)) {
612
+ this._rewriteFile();
613
+ }
614
+ this._buildIndex();
615
+ this.flushed = true;
616
+ }
617
+ else {
618
+ const explicitPath = this.sessionFile;
619
+ this.newSession();
620
+ this.sessionFile = explicitPath; // preserve explicit path from --session flag
621
+ }
622
+ }
623
+ newSession(options) {
624
+ if (options?.id !== undefined) {
625
+ assertValidSessionId(options.id);
626
+ }
627
+ this.sessionId = options?.id ?? createSessionId();
628
+ const timestamp = new Date().toISOString();
629
+ const header = {
630
+ type: "session",
631
+ version: CURRENT_SESSION_VERSION,
632
+ id: this.sessionId,
633
+ timestamp,
634
+ cwd: this.cwd,
635
+ parentSession: options?.parentSession,
636
+ origin: options?.origin,
637
+ };
638
+ this.fileEntries = [header];
639
+ this.byId.clear();
640
+ this.labelsById.clear();
641
+ this.leafId = null;
642
+ this.flushed = false;
643
+ if (this.persist) {
644
+ const fileTimestamp = timestamp.replace(/[:.]/g, "-");
645
+ this.sessionFile = join(this.getSessionDir(), `${fileTimestamp}_${this.sessionId}.jsonl`);
646
+ }
647
+ return this.sessionFile;
648
+ }
649
+ _buildIndex() {
650
+ this.byId.clear();
651
+ this.labelsById.clear();
652
+ this.labelTimestampsById.clear();
653
+ this.leafId = null;
654
+ for (const entry of this.fileEntries) {
655
+ if (entry.type === "session")
656
+ continue;
657
+ this.byId.set(entry.id, entry);
658
+ this.leafId = entry.id;
659
+ if (entry.type === "label") {
660
+ if (entry.label) {
661
+ this.labelsById.set(entry.targetId, entry.label);
662
+ this.labelTimestampsById.set(entry.targetId, entry.timestamp);
663
+ }
664
+ else {
665
+ this.labelsById.delete(entry.targetId);
666
+ this.labelTimestampsById.delete(entry.targetId);
667
+ }
668
+ }
669
+ }
670
+ }
671
+ _rewriteFile() {
672
+ if (!this.persist || !this.sessionFile)
673
+ return;
674
+ writeDurableAtomicFileSync(this.sessionFile, `${this.fileEntries.map((entry) => JSON.stringify(entry)).join("\n")}\n`, { directoryMode: PRIVATE_DIRECTORY_MODE, fileMode: PRIVATE_FILE_MODE });
675
+ }
676
+ isPersisted() {
677
+ return this.persist;
678
+ }
679
+ getCwd() {
680
+ return this.cwd;
681
+ }
682
+ getSessionDir() {
683
+ return this.sessionDir;
684
+ }
685
+ usesDefaultSessionDir() {
686
+ return this.sessionDir === getDefaultSessionDirPath(this.cwd);
687
+ }
688
+ getSessionId() {
689
+ return this.sessionId;
690
+ }
691
+ getSessionFile() {
692
+ return this.sessionFile;
693
+ }
694
+ _persist(entry) {
695
+ if (!this.persist || !this.sessionFile)
696
+ return;
697
+ const hasFlushContent = this.fileEntries.some(isSessionFileFlushContent);
698
+ if (!hasFlushContent) {
699
+ if (this.flushed) {
700
+ appendPrivateFileSync(this.sessionFile, `${JSON.stringify(entry)}\n`);
701
+ }
702
+ else {
703
+ // Mark as not flushed so when conversation content arrives, all entries get written.
704
+ this.flushed = false;
705
+ }
706
+ return;
707
+ }
708
+ if (!this.flushed) {
709
+ writePrivateNewFileSync(this.sessionFile, `${this.fileEntries.map((fileEntry) => JSON.stringify(fileEntry)).join("\n")}\n`);
710
+ this.flushed = true;
711
+ }
712
+ else {
713
+ appendPrivateFileSync(this.sessionFile, `${JSON.stringify(entry)}\n`);
714
+ }
715
+ }
716
+ _appendEntry(entry) {
717
+ this.fileEntries.push(entry);
718
+ this.byId.set(entry.id, entry);
719
+ this.leafId = entry.id;
720
+ this._persist(entry);
721
+ }
722
+ /** Append a message as child of current leaf, then advance leaf. Returns entry id.
723
+ * Does not allow writing CompactionSummaryMessage and BranchSummaryMessage directly.
724
+ * Reason: we want these to be top-level entries in the session, not message session entries,
725
+ * so it is easier to find them.
726
+ * These need to be appended via appendCompaction() and appendBranchSummary() methods.
727
+ */
728
+ appendMessage(message) {
729
+ const entry = {
730
+ type: "message",
731
+ id: generateId(this.byId),
732
+ parentId: this.leafId,
733
+ timestamp: new Date().toISOString(),
734
+ message,
735
+ };
736
+ this._appendEntry(entry);
737
+ return entry.id;
738
+ }
739
+ /** Append a thinking level change as child of current leaf, then advance leaf. Returns entry id. */
740
+ appendThinkingLevelChange(thinkingLevel) {
741
+ const entry = {
742
+ type: "thinking_level_change",
743
+ id: generateId(this.byId),
744
+ parentId: this.leafId,
745
+ timestamp: new Date().toISOString(),
746
+ thinkingLevel,
747
+ };
748
+ this._appendEntry(entry);
749
+ return entry.id;
750
+ }
751
+ /** Append a model change as child of current leaf, then advance leaf. Returns entry id. */
752
+ appendModelChange(provider, modelId) {
753
+ const entry = {
754
+ type: "model_change",
755
+ id: generateId(this.byId),
756
+ parentId: this.leafId,
757
+ timestamp: new Date().toISOString(),
758
+ provider,
759
+ modelId,
760
+ };
761
+ this._appendEntry(entry);
762
+ return entry.id;
763
+ }
764
+ /** Append a compaction summary as child of current leaf, then advance leaf. Returns entry id. */
765
+ appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromHook) {
766
+ const entry = {
767
+ type: "compaction",
768
+ id: generateId(this.byId),
769
+ parentId: this.leafId,
770
+ timestamp: new Date().toISOString(),
771
+ summary,
772
+ firstKeptEntryId,
773
+ tokensBefore,
774
+ details,
775
+ fromHook,
776
+ };
777
+ this._appendEntry(entry);
778
+ return entry.id;
779
+ }
780
+ /** Append a custom entry (for extensions) as child of current leaf, then advance leaf. Returns entry id. */
781
+ appendCustomEntry(customType, data) {
782
+ const entry = {
783
+ type: "custom",
784
+ customType,
785
+ data,
786
+ id: generateId(this.byId),
787
+ parentId: this.leafId,
788
+ timestamp: new Date().toISOString(),
789
+ };
790
+ this._appendEntry(entry);
791
+ return entry.id;
792
+ }
793
+ /** Append a session info entry (e.g., display name). Returns entry id. */
794
+ appendSessionInfo(name) {
795
+ const entry = {
796
+ type: "session_info",
797
+ id: generateId(this.byId),
798
+ parentId: this.leafId,
799
+ timestamp: new Date().toISOString(),
800
+ name: name.trim(),
801
+ };
802
+ this._appendEntry(entry);
803
+ return entry.id;
804
+ }
805
+ /** Get the current session name from the latest session_info entry, if any. */
806
+ getSessionName() {
807
+ // Walk entries in reverse to find the latest session_info entry.
808
+ // Empty names explicitly clear the session title.
809
+ const entries = this.getEntries();
810
+ for (let i = entries.length - 1; i >= 0; i--) {
811
+ const entry = entries[i];
812
+ if (entry.type === "session_info") {
813
+ return entry.name?.trim() || undefined;
814
+ }
815
+ }
816
+ return undefined;
817
+ }
818
+ /**
819
+ * Append a custom message entry (for extensions) that participates in LLM context.
820
+ * @param customType Extension identifier for filtering on reload
821
+ * @param content Message content (string or TextContent/ImageContent array)
822
+ * @param display Whether to show in TUI (true = styled display, false = hidden)
823
+ * @param details Optional extension-specific metadata (not sent to LLM)
824
+ * @returns Entry id
825
+ */
826
+ appendCustomMessageEntry(customType, content, display, details) {
827
+ const entry = {
828
+ type: "custom_message",
829
+ customType,
830
+ content,
831
+ display,
832
+ details,
833
+ id: generateId(this.byId),
834
+ parentId: this.leafId,
835
+ timestamp: new Date().toISOString(),
836
+ };
837
+ this._appendEntry(entry);
838
+ return entry.id;
839
+ }
840
+ // =========================================================================
841
+ // Tree Traversal
842
+ // =========================================================================
843
+ getLeafId() {
844
+ return this.leafId;
845
+ }
846
+ getLeafEntry() {
847
+ return this.leafId ? this.byId.get(this.leafId) : undefined;
848
+ }
849
+ getEntry(id) {
850
+ return this.byId.get(id);
851
+ }
852
+ /**
853
+ * Get all direct children of an entry.
854
+ */
855
+ getChildren(parentId) {
856
+ const children = [];
857
+ for (const entry of this.byId.values()) {
858
+ if (entry.parentId === parentId) {
859
+ children.push(entry);
860
+ }
861
+ }
862
+ return children;
863
+ }
864
+ /**
865
+ * Get the label for an entry, if any.
866
+ */
867
+ getLabel(id) {
868
+ return this.labelsById.get(id);
869
+ }
870
+ /**
871
+ * Set or clear a label on an entry.
872
+ * Labels are user-defined markers for bookmarking/navigation.
873
+ * Pass undefined or empty string to clear the label.
874
+ */
875
+ appendLabelChange(targetId, label) {
876
+ if (!this.byId.has(targetId)) {
877
+ throw new Error(`Entry ${targetId} not found`);
878
+ }
879
+ const entry = {
880
+ type: "label",
881
+ id: generateId(this.byId),
882
+ parentId: this.leafId,
883
+ timestamp: new Date().toISOString(),
884
+ targetId,
885
+ label,
886
+ };
887
+ this._appendEntry(entry);
888
+ if (label) {
889
+ this.labelsById.set(targetId, label);
890
+ this.labelTimestampsById.set(targetId, entry.timestamp);
891
+ }
892
+ else {
893
+ this.labelsById.delete(targetId);
894
+ this.labelTimestampsById.delete(targetId);
895
+ }
896
+ return entry.id;
897
+ }
898
+ /**
899
+ * Walk from entry to root, returning all entries in path order.
900
+ * Includes all entry types (messages, compaction, model changes, etc.).
901
+ * Use buildSessionContext() to get the resolved messages for the LLM.
902
+ */
903
+ getBranch(fromId) {
904
+ const path = [];
905
+ const startId = fromId ?? this.leafId;
906
+ let current = startId ? this.byId.get(startId) : undefined;
907
+ while (current) {
908
+ path.unshift(current);
909
+ current = current.parentId ? this.byId.get(current.parentId) : undefined;
910
+ }
911
+ return path;
912
+ }
913
+ /**
914
+ * Build the session context (what gets sent to the LLM).
915
+ * Uses tree traversal from current leaf.
916
+ */
917
+ buildSessionContext() {
918
+ return buildSessionContext(this.getEntries(), this.leafId, this.byId);
919
+ }
920
+ /**
921
+ * Get session header.
922
+ */
923
+ getHeader() {
924
+ const h = this.fileEntries.find((e) => e.type === "session");
925
+ return h ? h : null;
926
+ }
927
+ /**
928
+ * Get all session entries (excludes header). Returns a shallow copy.
929
+ * The session is append-only: use appendXXX() to add entries, branch() to
930
+ * change the leaf pointer. Entries cannot be modified or deleted.
931
+ */
932
+ getEntries() {
933
+ return this.fileEntries.filter((e) => e.type !== "session");
934
+ }
935
+ /**
936
+ * Get the session as a tree structure. Returns a shallow defensive copy of all entries.
937
+ * A well-formed session has exactly one root (first entry with parentId === null).
938
+ * Orphaned entries (broken parent chain) are also returned as roots.
939
+ */
940
+ getTree() {
941
+ const entries = this.getEntries();
942
+ const nodeMap = new Map();
943
+ const roots = [];
944
+ // Create nodes with resolved labels
945
+ for (const entry of entries) {
946
+ const label = this.labelsById.get(entry.id);
947
+ const labelTimestamp = this.labelTimestampsById.get(entry.id);
948
+ nodeMap.set(entry.id, { entry, children: [], label, labelTimestamp });
949
+ }
950
+ // Build tree
951
+ for (const entry of entries) {
952
+ const node = nodeMap.get(entry.id);
953
+ if (entry.parentId === null || entry.parentId === entry.id) {
954
+ roots.push(node);
955
+ }
956
+ else {
957
+ const parent = nodeMap.get(entry.parentId);
958
+ if (parent) {
959
+ parent.children.push(node);
960
+ }
961
+ else {
962
+ // Orphan - treat as root
963
+ roots.push(node);
964
+ }
965
+ }
966
+ }
967
+ // Sort children by timestamp (oldest first, newest at bottom)
968
+ // Use iterative approach to avoid stack overflow on deep trees
969
+ const stack = [...roots];
970
+ while (stack.length > 0) {
971
+ const node = stack.pop();
972
+ node.children.sort((a, b) => new Date(a.entry.timestamp).getTime() - new Date(b.entry.timestamp).getTime());
973
+ stack.push(...node.children);
974
+ }
975
+ return roots;
976
+ }
977
+ // =========================================================================
978
+ // Branching
979
+ // =========================================================================
980
+ /**
981
+ * Start a new branch from an earlier entry.
982
+ * Moves the leaf pointer to the specified entry. The next appendXXX() call
983
+ * will create a child of that entry, forming a new branch. Existing entries
984
+ * are not modified or deleted.
985
+ */
986
+ branch(branchFromId) {
987
+ if (!this.byId.has(branchFromId)) {
988
+ throw new Error(`Entry ${branchFromId} not found`);
989
+ }
990
+ this.leafId = branchFromId;
991
+ }
992
+ /**
993
+ * Reset the leaf pointer to null (before any entries).
994
+ * The next appendXXX() call will create a new root entry (parentId = null).
995
+ * Use this when navigating to re-edit the first user message.
996
+ */
997
+ resetLeaf() {
998
+ this.leafId = null;
999
+ }
1000
+ /**
1001
+ * Start a new branch with a summary of the abandoned path.
1002
+ * Same as branch(), but also appends a branch_summary entry that captures
1003
+ * context from the abandoned conversation path.
1004
+ */
1005
+ branchWithSummary(branchFromId, summary, details, fromHook) {
1006
+ if (branchFromId !== null && !this.byId.has(branchFromId)) {
1007
+ throw new Error(`Entry ${branchFromId} not found`);
1008
+ }
1009
+ this.leafId = branchFromId;
1010
+ const entry = {
1011
+ type: "branch_summary",
1012
+ id: generateId(this.byId),
1013
+ parentId: branchFromId,
1014
+ timestamp: new Date().toISOString(),
1015
+ fromId: branchFromId ?? "root",
1016
+ summary,
1017
+ details,
1018
+ fromHook,
1019
+ };
1020
+ this._appendEntry(entry);
1021
+ return entry.id;
1022
+ }
1023
+ /**
1024
+ * Create a new session file containing only the path from root to the specified leaf.
1025
+ * Useful for extracting a single conversation path from a branched session.
1026
+ * Returns the new session file path, or undefined if not persisting.
1027
+ */
1028
+ createBranchedSession(leafId) {
1029
+ const previousSessionFile = this.sessionFile;
1030
+ const path = this.getBranch(leafId);
1031
+ if (path.length === 0) {
1032
+ throw new Error(`Entry ${leafId} not found`);
1033
+ }
1034
+ // Filter out LabelEntry from path - we'll recreate them from the resolved map.
1035
+ // Because labels are real tree entries, later entries can be children of labels;
1036
+ // removing labels requires re-chaining the retained path to avoid orphaned subtrees.
1037
+ const pathWithoutLabels = [];
1038
+ let pathParentId = null;
1039
+ for (const entry of path) {
1040
+ if (entry.type === "label")
1041
+ continue;
1042
+ pathWithoutLabels.push({ ...entry, parentId: pathParentId });
1043
+ pathParentId = entry.id;
1044
+ }
1045
+ const newSessionId = createSessionId();
1046
+ const timestamp = new Date().toISOString();
1047
+ const fileTimestamp = timestamp.replace(/[:.]/g, "-");
1048
+ const newSessionFile = join(this.getSessionDir(), `${fileTimestamp}_${newSessionId}.jsonl`);
1049
+ const header = {
1050
+ type: "session",
1051
+ version: CURRENT_SESSION_VERSION,
1052
+ id: newSessionId,
1053
+ timestamp,
1054
+ cwd: this.cwd,
1055
+ parentSession: this.persist ? previousSessionFile : undefined,
1056
+ origin: this.getHeader()?.origin,
1057
+ };
1058
+ // Collect labels for entries in the path
1059
+ const pathEntryIds = new Set(pathWithoutLabels.map((e) => e.id));
1060
+ const labelsToWrite = [];
1061
+ for (const [targetId, label] of this.labelsById) {
1062
+ if (pathEntryIds.has(targetId)) {
1063
+ labelsToWrite.push({ targetId, label, timestamp: this.labelTimestampsById.get(targetId) });
1064
+ }
1065
+ }
1066
+ if (this.persist) {
1067
+ // Build label entries
1068
+ const lastEntryId = pathWithoutLabels[pathWithoutLabels.length - 1]?.id || null;
1069
+ let parentId = lastEntryId;
1070
+ const labelEntries = [];
1071
+ for (const { targetId, label, timestamp: labelTimestamp } of labelsToWrite) {
1072
+ const labelEntry = {
1073
+ type: "label",
1074
+ id: generateId(new Set(pathEntryIds)),
1075
+ parentId,
1076
+ timestamp: labelTimestamp,
1077
+ targetId,
1078
+ label,
1079
+ };
1080
+ pathEntryIds.add(labelEntry.id);
1081
+ labelEntries.push(labelEntry);
1082
+ parentId = labelEntry.id;
1083
+ }
1084
+ this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries];
1085
+ this.sessionId = newSessionId;
1086
+ this.sessionFile = newSessionFile;
1087
+ this._buildIndex();
1088
+ // Only write the file now if it contains conversation content that should
1089
+ // make a session visible (assistant output or a displayed custom message).
1090
+ // Otherwise defer to _persist(), which creates the file once such content
1091
+ // arrives, matching the newSession() contract and avoiding the
1092
+ // duplicate-header bug when the no-content guard later resets flushed to false.
1093
+ const hasFlushContent = this.fileEntries.some(isSessionFileFlushContent);
1094
+ if (hasFlushContent) {
1095
+ this._rewriteFile();
1096
+ this.flushed = true;
1097
+ }
1098
+ else {
1099
+ this.flushed = false;
1100
+ }
1101
+ return newSessionFile;
1102
+ }
1103
+ // In-memory mode: replace current session with the path + labels
1104
+ const labelEntries = [];
1105
+ let parentId = pathWithoutLabels[pathWithoutLabels.length - 1]?.id || null;
1106
+ for (const { targetId, label, timestamp: labelTimestamp } of labelsToWrite) {
1107
+ const labelEntry = {
1108
+ type: "label",
1109
+ id: generateId(new Set([...pathEntryIds, ...labelEntries.map((e) => e.id)])),
1110
+ parentId,
1111
+ timestamp: labelTimestamp,
1112
+ targetId,
1113
+ label,
1114
+ };
1115
+ labelEntries.push(labelEntry);
1116
+ parentId = labelEntry.id;
1117
+ }
1118
+ this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries];
1119
+ this.sessionId = newSessionId;
1120
+ this._buildIndex();
1121
+ return undefined;
1122
+ }
1123
+ /**
1124
+ * Create a new session.
1125
+ * @param cwd Working directory (stored in session header)
1126
+ * @param sessionDir Optional session directory. If omitted, uses default (~/.volt/agent/sessions/<encoded-cwd>/).
1127
+ */
1128
+ static create(cwd, sessionDir, options) {
1129
+ const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
1130
+ return new SessionManager(cwd, dir, undefined, true, options);
1131
+ }
1132
+ /**
1133
+ * Open a specific session file.
1134
+ * @param path Path to session file
1135
+ * @param sessionDir Optional session directory for /clear or /branch. If omitted, derives from file's parent.
1136
+ * @param cwdOverride Optional cwd override instead of the session header cwd.
1137
+ */
1138
+ static open(path, sessionDir, cwdOverride) {
1139
+ const resolvedPath = resolvePath(path);
1140
+ if (existsSync(resolvedPath)) {
1141
+ hardenPrivateRegularFileSync(resolvedPath);
1142
+ }
1143
+ // Extract cwd from session header if possible, otherwise use process.cwd()
1144
+ const entries = loadEntriesFromFile(resolvedPath);
1145
+ const header = entries.find((e) => e.type === "session");
1146
+ const cwd = cwdOverride ?? header?.cwd ?? process.cwd();
1147
+ // If no sessionDir provided, derive from file's parent directory
1148
+ const dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, "..");
1149
+ return new SessionManager(cwd, dir, resolvedPath, true, undefined, sessionDir !== undefined);
1150
+ }
1151
+ /**
1152
+ * Continue the most recent session, or create new if none.
1153
+ * @param cwd Working directory
1154
+ * @param sessionDir Optional session directory. If omitted, uses default (~/.volt/agent/sessions/<encoded-cwd>/).
1155
+ */
1156
+ static continueRecent(cwd, sessionDir) {
1157
+ const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
1158
+ const filterCwd = sessionDir !== undefined && !isDefaultShapedSessionDir(dir, cwd);
1159
+ const mostRecent = findMostRecentSession(dir, filterCwd ? cwd : undefined);
1160
+ if (mostRecent) {
1161
+ return new SessionManager(cwd, dir, mostRecent, true);
1162
+ }
1163
+ return new SessionManager(cwd, dir, undefined, true);
1164
+ }
1165
+ /** Create an in-memory session (no file persistence) */
1166
+ static inMemory(cwd = process.cwd()) {
1167
+ return new SessionManager(cwd, "", undefined, false);
1168
+ }
1169
+ /**
1170
+ * Fork a session from another project directory into the current project.
1171
+ * Creates a new session in the target cwd with the full history from the source session.
1172
+ * @param sourcePath Path to the source session file
1173
+ * @param targetCwd Target working directory (where the new session will be stored)
1174
+ * @param sessionDir Optional session directory. If omitted, uses default for targetCwd.
1175
+ */
1176
+ static forkFrom(sourcePath, targetCwd, sessionDir, options) {
1177
+ const resolvedSourcePath = resolvePath(sourcePath);
1178
+ const resolvedTargetCwd = resolvePath(targetCwd);
1179
+ if (existsSync(resolvedSourcePath)) {
1180
+ hardenPrivateRegularFileSync(resolvedSourcePath);
1181
+ }
1182
+ const sourceEntries = loadEntriesFromFile(resolvedSourcePath);
1183
+ if (sourceEntries.length === 0) {
1184
+ throw new Error(`Cannot fork: source session file is empty or invalid: ${resolvedSourcePath}`);
1185
+ }
1186
+ const sourceHeader = sourceEntries.find((e) => e.type === "session");
1187
+ if (!sourceHeader) {
1188
+ throw new Error(`Cannot fork: source session has no header: ${resolvedSourcePath}`);
1189
+ }
1190
+ const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(resolvedTargetCwd);
1191
+ ensurePrivateDirectorySync(dir);
1192
+ // Create new session file with new ID but forked content
1193
+ if (options?.id !== undefined) {
1194
+ assertValidSessionId(options.id);
1195
+ }
1196
+ const newSessionId = options?.id ?? createSessionId();
1197
+ const timestamp = new Date().toISOString();
1198
+ const fileTimestamp = timestamp.replace(/[:.]/g, "-");
1199
+ const newSessionFile = join(dir, `${fileTimestamp}_${newSessionId}.jsonl`);
1200
+ // Write new header pointing to source as parent, with updated cwd
1201
+ const newHeader = {
1202
+ type: "session",
1203
+ version: CURRENT_SESSION_VERSION,
1204
+ id: newSessionId,
1205
+ timestamp,
1206
+ cwd: resolvedTargetCwd,
1207
+ parentSession: resolvedSourcePath,
1208
+ };
1209
+ const forkEntries = [newHeader, ...sourceEntries.filter((entry) => entry.type !== "session")];
1210
+ writeDurableAtomicFileSync(newSessionFile, `${forkEntries.map((entry) => JSON.stringify(entry)).join("\n")}\n`, {
1211
+ directoryMode: PRIVATE_DIRECTORY_MODE,
1212
+ fileMode: PRIVATE_FILE_MODE,
1213
+ });
1214
+ return new SessionManager(resolvedTargetCwd, dir, newSessionFile, true);
1215
+ }
1216
+ /**
1217
+ * List all sessions for a directory.
1218
+ * @param cwd Working directory (used to compute default session directory)
1219
+ * @param sessionDir Optional session directory. If omitted, uses default (~/.volt/agent/sessions/<encoded-cwd>/).
1220
+ * @param onProgress Optional callback for progress updates (loaded, total)
1221
+ */
1222
+ static async list(cwd, sessionDir, onProgress) {
1223
+ const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
1224
+ const filterCwd = sessionDir !== undefined && !isDefaultShapedSessionDir(dir, cwd);
1225
+ const resolvedCwd = resolvePath(cwd);
1226
+ const sessions = (await listSessionsFromDir(dir, onProgress)).filter((session) => !filterCwd || sessionCwdMatches(session.cwd, resolvedCwd));
1227
+ sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1228
+ return sessions;
1229
+ }
1230
+ static async listAll(sessionDirOrOnProgress, onProgress) {
1231
+ const customSessionDir = typeof sessionDirOrOnProgress === "string" ? normalizePath(sessionDirOrOnProgress) : undefined;
1232
+ const progress = typeof sessionDirOrOnProgress === "function" ? sessionDirOrOnProgress : onProgress;
1233
+ if (customSessionDir) {
1234
+ const sessions = await listSessionsFromDir(customSessionDir, progress);
1235
+ sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1236
+ return sessions;
1237
+ }
1238
+ const sessionsDir = getSessionsDir();
1239
+ try {
1240
+ if (!existsSync(sessionsDir)) {
1241
+ return [];
1242
+ }
1243
+ const entries = await readdir(sessionsDir, { withFileTypes: true });
1244
+ const dirs = entries.filter((e) => e.isDirectory()).map((e) => join(sessionsDir, e.name));
1245
+ // Count total files first for accurate progress
1246
+ let totalFiles = 0;
1247
+ const dirFiles = [];
1248
+ for (const dir of dirs) {
1249
+ try {
1250
+ ensurePrivateDirectorySync(dir);
1251
+ const files = (await readdir(dir)).filter((f) => f.endsWith(".jsonl"));
1252
+ dirFiles.push(files.map((f) => join(dir, f)));
1253
+ totalFiles += files.length;
1254
+ }
1255
+ catch {
1256
+ dirFiles.push([]);
1257
+ }
1258
+ }
1259
+ // Process all files with progress tracking
1260
+ let loaded = 0;
1261
+ const sessions = [];
1262
+ const allFiles = dirFiles.flat();
1263
+ const results = await buildSessionInfosWithConcurrency(allFiles, () => {
1264
+ loaded++;
1265
+ progress?.(loaded, totalFiles);
1266
+ });
1267
+ for (const info of results) {
1268
+ if (info) {
1269
+ sessions.push(info);
1270
+ }
1271
+ }
1272
+ sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1273
+ return sessions;
1274
+ }
1275
+ catch {
1276
+ return [];
1277
+ }
1278
+ }
1279
+ }
1280
+ //# sourceMappingURL=session-manager.js.map