@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
package/docs/rpc.md ADDED
@@ -0,0 +1,2050 @@
1
+ # RPC Mode
2
+
3
+ RPC mode enables headless operation of the coding agent via a JSON protocol over stdin/stdout. This is useful for embedding the agent in other applications, IDEs, or custom UIs.
4
+
5
+ **Note for Node.js/TypeScript users**: If you're building a Node.js application, consider using `AgentSession` directly from `@hansjm10/volt-coding-agent` instead of spawning a subprocess. See [`src/core/agent-session.ts`](../src/core/agent-session.ts) for the API. For typed RPC clients, use [`RpcClient`](../src/modes/rpc/rpc-client.ts) for subprocess stdio, [`RpcTransportClient`](../src/modes/rpc/rpc-transport-client.ts) for caller-provided transports, or [`createInProcessRpcClient`](../src/modes/rpc/in-process-rpc-client.ts) to run RPC mode in the same process.
6
+
7
+ ## Starting RPC Mode
8
+
9
+ ```bash
10
+ volt --mode rpc [options]
11
+ ```
12
+
13
+ Common options:
14
+ - `--provider <name>`: Set the LLM provider (anthropic, openai, google, etc.)
15
+ - `--model <pattern>`: Model pattern or ID (supports `provider/id` and optional `:<thinking>`)
16
+ - `--name <name>` / `-n <name>`: Set the session display name at startup
17
+ - `--no-session`: Disable session persistence
18
+ - `--session-dir <path>`: Custom session storage directory
19
+
20
+ ## Protocol Overview
21
+
22
+ - **Commands**: JSON objects sent to stdin, one per line
23
+ - **Responses**: JSON objects with `type: "response"` indicating command success/failure
24
+ - **Events**: Agent events streamed to stdout as JSON lines
25
+
26
+ All commands support an optional `id` field for request/response correlation. If provided, the corresponding response will include the same `id`.
27
+
28
+ ### Framing
29
+
30
+ RPC mode uses strict JSONL semantics with LF (`\n`) as the only record delimiter.
31
+
32
+ This matters for clients:
33
+ - Split records on `\n` only
34
+ - Accept optional `\r\n` input by stripping a trailing `\r`
35
+ - Do not use generic line readers that treat Unicode separators as newlines
36
+
37
+ In particular, Node `readline` is not protocol-compliant for RPC mode because it also splits on `U+2028` and `U+2029`, which are valid inside JSON strings.
38
+
39
+ ### Lifecycle and Cancellation
40
+
41
+ Transport lifetime is separate from cancellation semantics. A clean input close, socket close, stream EOF, or write failure is a transport event, not an RPC command, and must not be interpreted as an implicit `abort`.
42
+
43
+ Clients that intend to stop active agent work must send the `abort` command and wait for its response. Plain subprocess RPC mode still treats transport close as mode/process shutdown, and remote transports may use close as detach/reconnect; neither path changes the RPC cancellation command.
44
+
45
+ RPC mode is not durable job recovery. If the Volt process or embedding host process exits or crashes, in-memory work stops; clients can only reopen persisted session state that was written before exit.
46
+
47
+ ## Commands
48
+
49
+ ### Prompting
50
+
51
+ #### prompt
52
+
53
+ Send a user prompt to the agent. The command response is emitted after the prompt is accepted, queued, or handled. Events continue streaming asynchronously after acceptance.
54
+
55
+ ```json
56
+ {"id": "req-1", "type": "prompt", "message": "Hello, world!"}
57
+ ```
58
+
59
+ With images:
60
+ ```json
61
+ {"type": "prompt", "message": "What's in this image?", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
62
+ ```
63
+
64
+ **During streaming**: If the agent is already streaming, you must specify `streamingBehavior` to queue the message:
65
+
66
+ ```json
67
+ {"type": "prompt", "message": "New instruction", "streamingBehavior": "steer"}
68
+ ```
69
+
70
+ - `"steer"`: Queue the message while the agent is running. It is delivered after the current assistant turn finishes executing its tool calls, before the next LLM call.
71
+ - `"followUp"`: Wait until the agent finishes. Message is delivered only when agent stops.
72
+
73
+ If the agent is streaming and no `streamingBehavior` is specified, the command returns an error.
74
+
75
+ **Extension commands**: If the message is an extension command (e.g., `/mycommand`), it executes immediately even during streaming. Extension commands manage their own LLM interaction via `volt.sendMessage()`.
76
+
77
+ **Input expansion**: Skill commands (`/skill:name`) and prompt templates (`/template`) are expanded before sending/queueing.
78
+
79
+ Response:
80
+ ```json
81
+ {"id": "req-1", "type": "response", "command": "prompt", "success": true}
82
+ ```
83
+
84
+ `success: true` means the prompt was accepted, queued, or handled immediately. `success: false` means the prompt was rejected before acceptance. Failures after acceptance are reported through the normal event and message stream, not as a second `response` for the same request id.
85
+
86
+ The `images` field is optional. Each image uses `ImageContent` format: `{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}`.
87
+
88
+ #### steer
89
+
90
+ Queue a steering message while the agent is running. It is delivered after the current assistant turn finishes executing its tool calls, before the next LLM call. Skill commands and prompt templates are expanded. Extension commands are not allowed (use `prompt` instead).
91
+
92
+ ```json
93
+ {"type": "steer", "message": "Stop and do this instead"}
94
+ ```
95
+
96
+ With images:
97
+ ```json
98
+ {"type": "steer", "message": "Look at this instead", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
99
+ ```
100
+
101
+ The `images` field is optional. Each image uses `ImageContent` format (same as `prompt`).
102
+
103
+ Response:
104
+ ```json
105
+ {"type": "response", "command": "steer", "success": true}
106
+ ```
107
+
108
+ See [set_steering_mode](#set_steering_mode) for controlling how steering messages are processed.
109
+
110
+ #### follow_up
111
+
112
+ Queue a follow-up message to be processed after the agent finishes. Delivered only when agent has no more tool calls or steering messages. Skill commands and prompt templates are expanded. Extension commands are not allowed (use `prompt` instead).
113
+
114
+ ```json
115
+ {"type": "follow_up", "message": "After you're done, also do this"}
116
+ ```
117
+
118
+ With images:
119
+ ```json
120
+ {"type": "follow_up", "message": "Also check this image", "images": [{"type": "image", "data": "base64-encoded-data", "mimeType": "image/png"}]}
121
+ ```
122
+
123
+ The `images` field is optional. Each image uses `ImageContent` format (same as `prompt`).
124
+
125
+ Response:
126
+ ```json
127
+ {"type": "response", "command": "follow_up", "success": true}
128
+ ```
129
+
130
+ See [set_follow_up_mode](#set_follow_up_mode) for controlling how follow-up messages are processed.
131
+
132
+ #### abort
133
+
134
+ Abort the current agent operation.
135
+
136
+ ```json
137
+ {"type": "abort"}
138
+ ```
139
+
140
+ Response:
141
+ ```json
142
+ {"type": "response", "command": "abort", "success": true}
143
+ ```
144
+
145
+ `abort` is the semantic cancellation command. Closing the RPC transport without sending `abort` requests transport shutdown or remote detach according to the transport, but it does not ask Volt to cancel the active run.
146
+
147
+ #### new_session
148
+
149
+ Start a fresh session. Can be cancelled by a `session_before_switch` extension event handler.
150
+
151
+ ```json
152
+ {"type": "new_session"}
153
+ ```
154
+
155
+ With optional parent session tracking:
156
+ ```json
157
+ {"type": "new_session", "parentSession": "/path/to/parent-session.jsonl"}
158
+ ```
159
+
160
+ Response:
161
+ ```json
162
+ {"type": "response", "command": "new_session", "success": true, "data": {"cancelled": false}}
163
+ ```
164
+
165
+ If an extension cancelled:
166
+ ```json
167
+ {"type": "response", "command": "new_session", "success": true, "data": {"cancelled": true}}
168
+ ```
169
+
170
+ ### State
171
+
172
+ #### get_state
173
+
174
+ Get current session state.
175
+
176
+ ```json
177
+ {"type": "get_state"}
178
+ ```
179
+
180
+ Response:
181
+ ```json
182
+ {
183
+ "type": "response",
184
+ "command": "get_state",
185
+ "success": true,
186
+ "data": {
187
+ "model": {...},
188
+ "thinkingLevel": "medium",
189
+ "availableThinkingLevels": ["off", "minimal", "low", "medium", "high"],
190
+ "isStreaming": false,
191
+ "isBusy": true,
192
+ "isCompacting": true,
193
+ "steeringMode": "all",
194
+ "followUpMode": "one-at-a-time",
195
+ "sessionFile": "/path/to/session.jsonl",
196
+ "sessionId": "abc123",
197
+ "sessionName": "my-feature-work",
198
+ "autoCompactionEnabled": true,
199
+ "messageCount": 5,
200
+ "pendingMessageCount": 0,
201
+ "activeCompaction": {"reason": "threshold", "startedAt": 1782470400000}
202
+ }
203
+ }
204
+ ```
205
+
206
+ The `model` field is a full [Model](#model) object or `null`. `availableThinkingLevels` lists the thinking levels the current model supports (`["off"]` for non-reasoning models). `isStreaming` indicates an active provider run or session-level continuation; `isBusy` also includes asynchronous prompt preflight and standalone session operations such as manual compaction and tree navigation. The `sessionName` field is the display name set via `set_session_name`, or omitted if not set. `activeCompaction` is present only while context compaction is currently running; `startedAt` is Unix epoch milliseconds.
207
+
208
+ #### get_transcript
209
+
210
+ Get a UI-ready projected transcript for the active session. The response is ordered oldest-to-newest and omits raw provider payloads, thinking blocks, image data, raw tool output, full file contents, and session file paths. Text, summaries, and mutation previews are bounded.
211
+
212
+ ```json
213
+ {"type": "get_transcript", "limit": 100}
214
+ ```
215
+
216
+ Use `beforeEntryId` to request older items than the first item already loaded:
217
+
218
+ ```json
219
+ {"type": "get_transcript", "limit": 100, "beforeEntryId": "entry-id"}
220
+ ```
221
+
222
+ `limit` defaults to 100 and is capped at 200.
223
+
224
+ Response:
225
+ ```json
226
+ {
227
+ "type": "response",
228
+ "command": "get_transcript",
229
+ "success": true,
230
+ "data": {
231
+ "sessionId": "abc123",
232
+ "items": [
233
+ {"id": "entry-user", "role": "user", "text": "User prompt", "timestamp": "2026-06-22T15:00:00.000Z"},
234
+ {"id": "entry-assistant", "role": "assistant", "text": "Assistant response", "timestamp": "2026-06-22T15:01:00.000Z"},
235
+ {"id": "entry-tool", "role": "tool", "toolName": "read", "status": "completed", "path": "src/file.ts", "summary": "Read src/file.ts (completed)", "timestamp": "2026-06-22T15:01:30.000Z"},
236
+ {"id": "entry-summary", "role": "summary", "title": "Conversation compacted", "text": "Earlier conversation summary...", "timestamp": "2026-06-22T15:02:00.000Z"}
237
+ ],
238
+ "hasMore": false,
239
+ "nextBeforeEntryId": null
240
+ }
241
+ }
242
+ ```
243
+
244
+ Tool items may include bounded `diffPreview` and `patchPreview` fields for mutation tools.
245
+
246
+ Recommended resume flow for remote or headless UI clients:
247
+
248
+ 1. After a successful connection or reconnect, send `get_state`, then `get_transcript` for the active persisted session.
249
+ 2. After a successful `switch_session_by_id`, clear or replace the visible transcript with a loading state, refresh with `get_state`, then call `get_transcript` for the selected session.
250
+ 3. After a successful `new_session`, refresh state only and keep the fresh empty transcript; do not reuse or load older transcript from the previous session.
251
+ 4. For pagination, keep `hasMore` and `nextBeforeEntryId`; when `hasMore` is true, request older items with `beforeEntryId` and prepend returned items by stable `id`.
252
+
253
+ #### get_messages
254
+
255
+ Get all messages in the conversation.
256
+
257
+ ```json
258
+ {"type": "get_messages"}
259
+ ```
260
+
261
+ Response:
262
+ ```json
263
+ {
264
+ "type": "response",
265
+ "command": "get_messages",
266
+ "success": true,
267
+ "data": {"messages": [...]}
268
+ }
269
+ ```
270
+
271
+ Messages are `AgentMessage` objects (see [Message Types](#message-types)).
272
+
273
+ ### Subagents (local RPC only)
274
+
275
+ Local RPC clients can manage definition-backed subagents over the same connection. These commands are local RPC only for now; Iroh remote transports reject them until a later explicit remote policy slice.
276
+
277
+ #### list_subagents
278
+
279
+ List built-in and discovered subagent definition summaries. The response omits definition file paths, source paths, base directories, and system prompts.
280
+
281
+ ```json
282
+ {"type": "list_subagents"}
283
+ ```
284
+
285
+ Response:
286
+ ```json
287
+ {
288
+ "type": "response",
289
+ "command": "list_subagents",
290
+ "success": true,
291
+ "data": {
292
+ "subagents": [
293
+ {
294
+ "name": "scout",
295
+ "description": "Fast codebase reconnaissance",
296
+ "source": "project",
297
+ "sourceInfo": {"source": "local", "scope": "project", "origin": "top-level"},
298
+ "tools": ["read", "grep", "find", "ls"],
299
+ "model": "claude-haiku-4-5",
300
+ "thinking": "off"
301
+ }
302
+ ]
303
+ }
304
+ }
305
+ ```
306
+
307
+ #### subagent_start
308
+
309
+ Start a definition-backed child subagent, send its initial prompt, and return after the prompt is accepted. Child tools are clamped by the current parent/session tool policy.
310
+
311
+ ```json
312
+ {"type": "subagent_start", "agent": "scout", "prompt": "Find auth code"}
313
+ ```
314
+
315
+ Response:
316
+ ```json
317
+ {
318
+ "type": "response",
319
+ "command": "subagent_start",
320
+ "success": true,
321
+ "data": {"subagentId": "sa_123", "sessionId": "child-session-id"}
322
+ }
323
+ ```
324
+
325
+ Child events are wrapped on the parent RPC stream:
326
+
327
+ ```json
328
+ {"type": "subagent_event", "subagentId": "sa_123", "event": {"type": "agent_start"}}
329
+ {"type": "subagent_end", "subagentId": "sa_123", "result": {"id": "sa_123", "sessionId": "child-session-id", "event": {"type": "agent_end", "messages": [], "willRetry": false}}}
330
+ ```
331
+
332
+ `subagent_event.event` is the child RPC event. `subagent_end.result` is emitted after the child session settles, including automatic retries, overflow compaction, and queued continuations. The result contains the latest low-level `agent_end` event; `willRetry` is normalized to `false` if a planned retry was cancelled before another run started.
333
+
334
+ #### subagent_abort
335
+
336
+ Abort and dispose a local RPC-managed subagent.
337
+
338
+ ```json
339
+ {"type": "subagent_abort", "subagentId": "sa_123"}
340
+ ```
341
+
342
+ Response:
343
+ ```json
344
+ {"type": "response", "command": "subagent_abort", "success": true}
345
+ ```
346
+
347
+ #### subagent_get_state
348
+
349
+ Get the child session state for an active local RPC-managed subagent.
350
+
351
+ ```json
352
+ {"type": "subagent_get_state", "subagentId": "sa_123"}
353
+ ```
354
+
355
+ Response data uses the same shape as [`get_state`](#get_state).
356
+
357
+ #### subagent_get_transcript
358
+
359
+ Get the child transcript projection for an active local RPC-managed subagent.
360
+
361
+ ```json
362
+ {"type": "subagent_get_transcript", "subagentId": "sa_123", "limit": 100, "beforeEntryId": "entry-id"}
363
+ ```
364
+
365
+ Response data uses the same shape as [`get_transcript`](#get_transcript).
366
+
367
+ #### subagent_dispose
368
+
369
+ Dispose a local RPC-managed subagent and remove it from this RPC connection's active subagent map. Later commands for the same `subagentId` fail with the normal RPC error shape.
370
+
371
+ ```json
372
+ {"type": "subagent_dispose", "subagentId": "sa_123"}
373
+ ```
374
+
375
+ Response:
376
+ ```json
377
+ {"type": "response", "command": "subagent_dispose", "success": true}
378
+ ```
379
+
380
+ Active RPC-started subagents are scoped to the RPC connection/runtime and are disposed on RPC shutdown and session replacement.
381
+
382
+ ### MCP management
383
+
384
+ Local RPC clients can inspect and manage configured MCP servers. Iroh remote transports allow only the remote-safe subset: capabilities, list/get server status, recent calls, disconnect, and device-code auth start/poll/cancel.
385
+
386
+ #### get_mcp_capabilities
387
+
388
+ ```json
389
+ {"type": "get_mcp_capabilities"}
390
+ ```
391
+
392
+ Response data:
393
+
394
+ ```json
395
+ {"protocolVersion": 1, "features": ["mcp_management.v1", "mcp_oauth.v1", "mcp_device_auth.v1", "mcp_events.v1"], "remoteSafeByDefault": ["list_mcp_servers", "get_mcp_server", "list_mcp_recent_calls", "disconnect_mcp_server", "start_mcp_server_auth", "poll_mcp_server_auth", "cancel_mcp_server_auth"]}
396
+ ```
397
+
398
+ #### list_mcp_servers / get_mcp_server
399
+
400
+ ```json
401
+ {"type": "list_mcp_servers"}
402
+ {"type": "get_mcp_server", "server": "github"}
403
+ ```
404
+
405
+ Responses return sanitized server summaries with status, auth state, transport/lifecycle, tool counts, capabilities, and recent call summaries. File paths, raw env, headers, tokens, and schemas are omitted.
406
+
407
+ #### connect_mcp_server / refresh_mcp_server / disconnect_mcp_server / set_mcp_server_enabled
408
+
409
+ ```json
410
+ {"type": "connect_mcp_server", "server": "github"}
411
+ {"type": "refresh_mcp_server", "server": "github"}
412
+ {"type": "disconnect_mcp_server", "server": "github"}
413
+ {"type": "set_mcp_server_enabled", "server": "github", "enabled": false}
414
+ ```
415
+
416
+ `connect_mcp_server` and `refresh_mcp_server` connect to the MCP server and refresh cached metadata; they are local RPC only. `disconnect_mcp_server` closes a live connection. `set_mcp_server_enabled` persists an overlay in the relevant Volt-owned MCP config file and is local RPC only.
417
+
418
+ #### MCP OAuth auth
419
+
420
+ Browser auth-code + PKCE is local RPC only:
421
+
422
+ ```json
423
+ {"type": "start_mcp_server_auth", "server": "linear", "flow": "browser", "redirectUrl": "http://127.0.0.1:49152/mcp/oauth/callback/random"}
424
+ {"type": "complete_mcp_server_auth", "server": "linear", "redirectUrl": "http://127.0.0.1:49152/mcp/oauth/callback/random", "code": "...", "state": "..."}
425
+ ```
426
+
427
+ Device-code auth can be started and polled over local RPC or Iroh remote transports:
428
+
429
+ ```json
430
+ {"type": "start_mcp_server_auth", "server": "linear", "flow": "device"}
431
+ {"type": "poll_mcp_server_auth", "server": "linear"}
432
+ {"type": "cancel_mcp_server_auth", "server": "linear"}
433
+ ```
434
+
435
+ `start_mcp_server_auth` with `flow: "device"` returns `verificationUri`, optional `verificationUriComplete`, `userCode`, `expiresAt`, and `intervalMs`; it never returns the OAuth `device_code`. Tokens stay on the host in MCP OAuth storage. `logout_mcp_server` clears stored OAuth credentials and is local RPC only.
436
+
437
+ #### list_mcp_tools / get_mcp_tool
438
+
439
+ ```json
440
+ {"type": "list_mcp_tools", "server": "github"}
441
+ {"type": "get_mcp_tool", "server": "github", "tool": "search_issues"}
442
+ ```
443
+
444
+ Returns sanitized tool metadata, risk classification, metadata hash, stale flag, and whether the tool is currently promoted as a direct tool.
445
+
446
+ #### list_mcp_resources / read_mcp_resource
447
+
448
+ ```json
449
+ {"type": "list_mcp_resources", "server": "docs"}
450
+ {"type": "read_mcp_resource", "server": "docs", "resourceUri": "file:///guide.md"}
451
+ ```
452
+
453
+ Resource contents are returned through the same truncation/cache shaping as the `mcp` gateway. Remote transports do not expose resource listing or content reads by default because those operations can start MCP backends.
454
+
455
+ #### list_mcp_prompts / get_mcp_prompt
456
+
457
+ ```json
458
+ {"type": "list_mcp_prompts", "server": "prompts"}
459
+ {"type": "get_mcp_prompt", "server": "prompts", "prompt": "review", "arguments": {"focus": "security"}}
460
+ ```
461
+
462
+ Prompt content is available for user-initiated preview when prompts are not disabled; model-initiated access still requires `settings.prompts: "model"`. Remote transports do not expose prompt listing or content reads by default because those operations can start MCP backends.
463
+
464
+ #### list_mcp_recent_calls
465
+
466
+ ```json
467
+ {"type": "list_mcp_recent_calls"}
468
+ {"type": "list_mcp_recent_calls", "server": "github"}
469
+ ```
470
+
471
+ Returns bounded recent MCP tool-call summaries for one server or all servers.
472
+
473
+ ### Native UI Actions
474
+
475
+ Native UI action commands let typed clients discover host-owned actions for native cards, buttons, toggles, pickers, and command palettes. They are distinct from raw slash command strings: slash commands are presentation aliases, while action ids are the invocation contract.
476
+
477
+ The current local RPC implementation exposes the v1 protocol shape, sanitized palette descriptors, shared built-in actions, review cards, Fast mode, and prompt-like invocation for extension commands, prompt templates, and skills. Iroh remote transports allow discovery plus `invoke_ui_action` for the currently advertised remote-safe built-in, review, Fast mode, projected extension command, prompt template, and skill actions. Local-only built-ins and unreviewed action ids remain blocked remotely.
478
+
479
+ Native clients should treat this as an optional capability:
480
+
481
+ 1. Call `get_ui_capabilities`.
482
+ 2. If `ui_actions.v1` is present, call `get_ui_actions` and render descriptors that the client supports.
483
+ 3. If `ui_action_invocation.v1` is present, invoke by descriptor `id` with `invoke_ui_action`.
484
+ 4. Keep raw `prompt` slash-text submission as compatibility for clients or hosts that do not expose native actions.
485
+
486
+ `scope` defaults to `"all"`. In v1, `scope: "primary"` returns built-in cards and toggles such as Review and Fast mode. `scope: "palette"` returns descriptors with `presentation.kind: "palette"`, including searchable built-ins, extension commands, prompt templates, and skills. `scope: "all"` lets a client build both surfaces from one response.
487
+
488
+ #### get_ui_capabilities
489
+
490
+ Get supported native UI action protocol features.
491
+
492
+ ```json
493
+ {"type": "get_ui_capabilities"}
494
+ ```
495
+
496
+ Response:
497
+ ```json
498
+ {
499
+ "type": "response",
500
+ "command": "get_ui_capabilities",
501
+ "success": true,
502
+ "data": {
503
+ "protocolVersion": 1,
504
+ "features": ["ui_actions.v1", "ui_action_invocation.v1", "ui_action_completions.v1"],
505
+ "maxActions": 200,
506
+ "maxDescriptorBytes": 65536
507
+ }
508
+ }
509
+ ```
510
+
511
+ `ui_actions.v1` means the host understands `get_ui_actions` descriptors. `ui_action_invocation.v1` means the host accepts `invoke_ui_action` for currently advertised actions. `ui_action_completions.v1` means the host accepts `get_ui_action_completions` for descriptor arguments that advertise a `completion` source. Clients must only rely on features present in this list.
512
+
513
+ #### get_ui_actions
514
+
515
+ Get native UI action descriptors. `scope` is optional, defaults to `"all"`, and may be `"primary"`, `"palette"`, or `"all"`.
516
+
517
+ ```json
518
+ {"type": "get_ui_actions", "scope": "palette"}
519
+ ```
520
+
521
+ Example response:
522
+ ```json
523
+ {
524
+ "type": "response",
525
+ "command": "get_ui_actions",
526
+ "success": true,
527
+ "data": {
528
+ "actions": [
529
+ {
530
+ "schemaVersion": 1,
531
+ "id": "extension.command.ec_a1b2c3d4e5f6_1",
532
+ "label": "session-name",
533
+ "description": "Set or clear session name",
534
+ "source": "extension",
535
+ "sourceScope": "project",
536
+ "sourceOrigin": "top-level",
537
+ "sourceLabel": "Project",
538
+ "category": "extension",
539
+ "presentation": {"kind": "palette", "group": "Extensions"},
540
+ "args": [{"name": "arguments", "label": "Arguments", "type": "string", "required": false}],
541
+ "enabled": true,
542
+ "disabledReason": null,
543
+ "destructive": false,
544
+ "requiresConfirmation": false,
545
+ "streamingBehavior": "immediate",
546
+ "remoteSafe": true,
547
+ "slash": {"name": "session-name", "example": "/session-name"}
548
+ }
549
+ ]
550
+ }
551
+ }
552
+ ```
553
+
554
+ Each descriptor uses this v1 shape:
555
+
556
+ ```json
557
+ {
558
+ "schemaVersion": 1,
559
+ "id": "review.uncommitted",
560
+ "label": "Review changes",
561
+ "description": "Review uncommitted workspace changes for bugs and regressions.",
562
+ "source": "builtin",
563
+ "category": "review",
564
+ "presentation": {
565
+ "kind": "card",
566
+ "group": "Review",
567
+ "priority": 100,
568
+ "icon": "magnifyingglass"
569
+ },
570
+ "args": [],
571
+ "enabled": true,
572
+ "disabledReason": null,
573
+ "destructive": false,
574
+ "requiresConfirmation": true,
575
+ "streamingBehavior": "disabled",
576
+ "remoteSafe": true,
577
+ "slash": {
578
+ "name": "review",
579
+ "example": "/review uncommitted"
580
+ }
581
+ }
582
+ ```
583
+
584
+ Required fields are `schemaVersion`, `id`, `label`, `source`, `category`, `enabled`, and `remoteSafe`. Clients should ignore unknown fields, skip invalid descriptors, render unknown categories as advanced or other actions, and treat unknown presentation kinds as palette rows.
585
+
586
+ Descriptor fields are advisory snapshots. The host remains authoritative and may omit actions that are unavailable, unsafe, too large, or unsupported by the client. Dynamic action ids are session-local unless a future descriptor explicitly documents stronger stability.
587
+
588
+ Projected extension command, prompt template, and skill actions use session-local opaque ids. Descriptors include bounded display strings, source kind, source scope/origin, and a safe source label such as `"Project"`, `"User"`, `"Temporary"`, or `"Package"`. They do not include extension source paths, prompt file paths or bodies, skill file paths, skill base directories, or raw `sourceInfo`.
589
+
590
+ Built-in v1 actions currently include:
591
+
592
+ | Action id | Slash alias | Remote over Iroh | Notes |
593
+ | --- | --- | --- | --- |
594
+ | `session.new` | `/clear` | yes | Starts a fresh session through the same host path as `new_session`. |
595
+ | `run.cancel` | none | yes | Aborts the current agent operation through the same host path as `abort`; descriptors may be disabled when no run is active. |
596
+ | `context.compact` | `/compact` | no | Runs host compaction through the same handler as the local `compact` RPC command. |
597
+ | `session.rename` | `/name <name>` | no | Sets the current session display name through the same handler as `set_session_name`. |
598
+ | `thinking.fast_mode` | none | yes | Session-local, non-persistent toggle that lowers current thinking to the fastest supported host-owned level and restores the captured level when disabled. |
599
+ | `review.uncommitted` | `/review uncommitted` | yes | Reviews uncommitted changes against `HEAD`, requires confirmation remotely, uses host-owned git/model/session policy, and returns only bounded workflow status. |
600
+ | `review.branch` | `/review branch [base]` | yes | Reviews `HEAD` against a base branch; optional `base` is validated by the host and omitted values use host auto-detection. |
601
+
602
+ Slash aliases are display and compatibility metadata. Clients may show them in palettes or advanced detail views, but should not synthesize slash strings when an action id is available. The host may change slash syntax without changing a stable built-in action id.
603
+
604
+ Unsupported or deferred native surfaces in v1:
605
+
606
+ - Extension commands project as palette actions only. First-class extension cards/toggles are deferred until a future `volt.registerAction()` policy defines stable extension-owned ids, trust, descriptor validation, and remote safety.
607
+ - Prompt templates and skills project as palette actions; descriptors omit prompt bodies, skill bodies, file paths, and base directories.
608
+ - Model selection is not a native action; remote clients use the direct `get_available_models`/`set_model`/`set_thinking_level` RPC commands, which are forwarded over Iroh conversation streams. Profile switching, scoped-model editing, login/logout, package management, and local settings screens remain unexposed over Iroh.
609
+ - Local-only built-ins such as `context.compact` and `session.rename` may appear in local RPC descriptors but are blocked over Iroh until separate remote policy exists.
610
+
611
+ #### get_ui_action_completions
612
+
613
+ Get completion options for one action argument. Clients should only call this when the descriptor argument includes a supported `completion` value. V1 currently supports extension command argument completions via `"completion": "commandArguments"`.
614
+
615
+ ```json
616
+ {"type": "get_ui_action_completions", "action": "extension.command.ec_a1b2c3d4e5f6_1", "argument": "arguments", "prefix": "pr"}
617
+ ```
618
+
619
+ Response:
620
+
621
+ ```json
622
+ {
623
+ "type": "response",
624
+ "command": "get_ui_action_completions",
625
+ "success": true,
626
+ "data": {
627
+ "completions": [
628
+ {"value": "prod", "label": "Production", "description": "Production target"}
629
+ ]
630
+ }
631
+ }
632
+ ```
633
+
634
+ Unknown or stale action ids fail with the normal RPC error shape. Unsupported arguments or completion kinds return an empty completion list unless the argument name itself is not present in the descriptor.
635
+
636
+ #### invoke_ui_action
637
+
638
+ Invoke a native UI action by descriptor id.
639
+
640
+ ```json
641
+ {"type": "invoke_ui_action", "action": "review.uncommitted", "args": {}, "streamingBehavior": "followUp"}
642
+ ```
643
+
644
+ `args` is an optional object matching the descriptor's argument metadata. V1 hosts validate the supported descriptor subset: `string` and multiline `string` values are JSON strings, `boolean` values are JSON booleans, `enum` values are strings present in `options`, and `integer` values are JSON numbers with integer values. Unknown argument names, unknown argument types, missing required values, and mismatched value types fail before invocation. `streamingBehavior` is optional and may be `"steer"` or `"followUp"` when the descriptor allows queued invocation while the agent is streaming.
645
+
646
+ Unknown, stale, disabled, unauthorized, or unavailable action ids fail with the normal RPC error shape:
647
+ ```json
648
+ {
649
+ "type": "response",
650
+ "command": "invoke_ui_action",
651
+ "success": false,
652
+ "error": "UI action not available: prompt.template.pt_a1b2c3d4e5f6_1"
653
+ }
654
+ ```
655
+
656
+ Successful response data reports the command disposition:
657
+
658
+ ```json
659
+ {
660
+ "type": "response",
661
+ "command": "invoke_ui_action",
662
+ "success": true,
663
+ "data": {
664
+ "action": "review.uncommitted",
665
+ "status": "completed",
666
+ "actionsChanged": true,
667
+ "stateChanged": true,
668
+ "message": "Review complete: no issues found; fresh session created with findings"
669
+ }
670
+ }
671
+ ```
672
+
673
+ Possible statuses:
674
+ - `"accepted"`: a prompt-like action was accepted while idle. Normal agent events report completion; wait for `agent_settled` for final settlement.
675
+ - `"queued"`: a prompt-like action was queued while another turn is streaming. `queuedAs` is `"steer"` or `"followUp"`.
676
+ - `"completed"`: the action finished synchronously. No `agent_end` is expected for this invocation.
677
+ - `"handled"`: the host, extension command, or input hook handled the action without starting an agent turn.
678
+ - `"cancelled"`: the action was cancelled before execution.
679
+
680
+ Only `accepted` and `queued` may require waiting for later agent events. Clients must clear pending UI immediately for `completed`, `handled`, `cancelled`, and RPC errors.
681
+
682
+ For projected dynamic actions, invocation uses the host's existing prompt semantics:
683
+
684
+ - Extension command actions invoke their registered slash command and return `handled` when the command handler completes. They do not require an `agent_end` event.
685
+ - Prompt template and skill actions send their slash alias through host prompt expansion. While idle they return `accepted`; while the agent is streaming they require `streamingBehavior: "steer"` or `"followUp"` and return `queued`.
686
+ - Dynamic action ids are opaque and tied to the current action catalog. After a reload, session replacement, or catalog change, clients must refresh descriptors; stale ids are rejected instead of being remapped to another action.
687
+ - `thinking.fast_mode` uses a required boolean `enabled` argument. Enabling captures the current thinking level, applies the fastest supported lower thinking level among `off`, `minimal`, and `low`, and returns updated boolean state. Disabling restores the captured thinking level after host clamping. It never switches models, exposes model catalogs, changes scoped-model/profile settings, or persists model/thinking defaults. Manual thinking/model/profile/scoped-model changes clear the session-local restore marker.
688
+ - Review actions run a host workflow: the host resolves git targets, applies review-model settings, runs an isolated review session with the approved tool policy, and creates a fresh session seeded with findings. Responses do not include raw diffs, review prompts, configured model names, auth state, or raw tool output. While the workflow runs, hosts may emit sanitized `workflow_*` and `tool_execution_*` activity events so clients can show progress. Remote review actions require confirmation and use the host-owned read-only tool set (`read`, `grep`, `find`, `ls`).
689
+ - Over Iroh, v1 invocation is allowlist-based and forwards only exact reviewed built-in ids (`session.new`, `run.cancel`, `thinking.fast_mode`, `review.uncommitted`, `review.branch`) plus projected dynamic ids under `extension.command.*`, `prompt.template.*`, and `skill.*`. Local-only built-ins such as `context.compact`, `session.rename`, deferred review actions, and unreviewed prefixes are rejected with a normal RPC error. Model and thinking changes use the direct `set_model`/`set_thinking_level` RPC commands, which are forwarded over Iroh conversation streams.
690
+
691
+ #### Native UI Action Security
692
+
693
+ Descriptors must not expose host-local paths, extension source paths, prompt template bodies, skill content, provider secrets, environment values, auth internals, raw model/provider metadata, raw transcript payloads, or host session file paths. Iroh remote discovery responses pass through the remote outbound redaction layer in addition to descriptor-level sanitization. Remote invocation is allowlist-based and re-checks action availability, remote safety, authorization, streaming policy, and argument validity at invocation time.
694
+
695
+ `get_commands` remains the legacy local command-discovery surface for raw slash invocation and may include source metadata useful to local clients. Remote clients and native mobile clients should use sanitized `get_ui_actions`; raw `get_commands` remains blocked over Iroh.
696
+
697
+ ### Host-Initiated Action Requests
698
+
699
+ Host-initiated action requests let Volt pause a running workflow and ask an RPC client to approve a host-owned action. This is separate from native UI actions: native UI actions are client-initiated, while host action requests are emitted by Volt when it needs user/app approval to continue.
700
+
701
+ Clients must opt in before Volt will block on host action requests:
702
+
703
+ ```json
704
+ {"type": "set_client_capabilities", "features": ["host_action_requests.v1"]}
705
+ ```
706
+
707
+ Response:
708
+
709
+ ```json
710
+ {"type": "response", "command": "set_client_capabilities", "success": true}
711
+ ```
712
+
713
+ When a host action is needed, Volt emits:
714
+
715
+ ```json
716
+ {
717
+ "type": "host_action_request",
718
+ "id": "ha_123",
719
+ "action": "lsp.install_server",
720
+ "title": "Install typescript language server?",
721
+ "message": "Volt tried to use LSP for typescript, but typescript-language-server is not installed. Install it now and retry diagnostics?",
722
+ "confirmLabel": "Install",
723
+ "cancelLabel": "Skip",
724
+ "commandPreview": "npm install -g typescript-language-server typescript",
725
+ "blocking": true,
726
+ "destructive": false,
727
+ "metadata": {"server": "typescript", "binary": "typescript-language-server"}
728
+ }
729
+ ```
730
+
731
+ The client responds with one of `"approved"`, `"denied"`, or `"dismissed"`:
732
+
733
+ ```json
734
+ {"type": "host_action_response", "id": "ha_123", "decision": "approved"}
735
+ ```
736
+
737
+ Volt may emit progress updates for approved actions:
738
+
739
+ ```json
740
+ {"type": "host_action_update", "id": "ha_123", "action": "lsp.install_server", "status": "running", "message": "Running npm install -g typescript-language-server typescript"}
741
+ {"type": "host_action_update", "id": "ha_123", "action": "lsp.install_server", "status": "completed", "message": "typescript language server installed. Retrying diagnostics.", "exitCode": 0}
742
+ ```
743
+
744
+ Use `get_pending_host_actions` to recover currently pending requests after reconnect:
745
+
746
+ ```json
747
+ {"type": "get_pending_host_actions"}
748
+ ```
749
+
750
+ Clients approve only the advertised host-owned action; they cannot alter the command. If the client does not advertise `host_action_requests.v1`, Volt falls back without blocking (for example, an LSP missing-server message with install instructions). Current LSP install requests are limited to trusted built-in install recipes; custom LSP commands and manual-install-only servers still produce instructions only.
751
+
752
+ ### Model
753
+
754
+ #### set_model
755
+
756
+ Switch to a specific model. Matches CLI `/model` behavior: the change is recorded in the session and persisted as the default model and provider for future sessions. Pass `"persistDefault": false` to change the current session's model without rewriting the host default (used e.g. for per-agent model overrides). Switching models re-clamps the thinking level to the new model's capabilities (emitting `thinking_level_changed` when it changes) and clears any active Fast mode overlay. Unknown provider/model pairs fail with `Model not found: <provider>/<modelId>`.
757
+
758
+ ```json
759
+ {"type": "set_model", "provider": "anthropic", "modelId": "claude-sonnet-4-20250514"}
760
+ ```
761
+
762
+ Response contains the full [Model](#model) object plus `availableThinkingLevels`, the thinking levels the model supports:
763
+ ```json
764
+ {
765
+ "type": "response",
766
+ "command": "set_model",
767
+ "success": true,
768
+ "data": {..., "availableThinkingLevels": ["off", "minimal", "low", "medium", "high"]}
769
+ }
770
+ ```
771
+
772
+ #### cycle_model
773
+
774
+ Cycle to the next available model. Returns `null` data if only one model available.
775
+
776
+ ```json
777
+ {"type": "cycle_model"}
778
+ ```
779
+
780
+ Response:
781
+ ```json
782
+ {
783
+ "type": "response",
784
+ "command": "cycle_model",
785
+ "success": true,
786
+ "data": {
787
+ "model": {...},
788
+ "thinkingLevel": "medium",
789
+ "isScoped": false
790
+ }
791
+ }
792
+ ```
793
+
794
+ The `model` field is a full [Model](#model) object.
795
+
796
+ #### get_available_models
797
+
798
+ List all configured models. The host reloads `auth.json` and `models.json` from disk before answering, so logins, logouts, and API keys saved by other volt processes become selectable without restarting the host.
799
+
800
+ ```json
801
+ {"type": "get_available_models"}
802
+ ```
803
+
804
+ Response contains an array of full [Model](#model) objects, each enriched with `availableThinkingLevels` (the thinking levels that model supports, `["off"]` for non-reasoning models) so clients can present valid choices without provider capability matrices:
805
+ ```json
806
+ {
807
+ "type": "response",
808
+ "command": "get_available_models",
809
+ "success": true,
810
+ "data": {
811
+ "models": [...]
812
+ }
813
+ }
814
+ ```
815
+
816
+ ### Thinking
817
+
818
+ #### set_thinking_level
819
+
820
+ Set the reasoning/thinking level for models that support it. Pass `"persistDefault": false` to apply the level to the current session without persisting it as the host default.
821
+
822
+ ```json
823
+ {"type": "set_thinking_level", "level": "high"}
824
+ ```
825
+
826
+ Levels: `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`
827
+
828
+ `"xhigh"` and `"max"` are advertised only for models whose metadata explicitly supports them. GPT-5.6 Sol, Terra, and Luna expose both as distinct efforts.
829
+
830
+ Levels the current model does not support are silently clamped to the nearest supported level, not rejected. The response reports the effective post-clamp level, and a `thinking_level_changed` event fires only when the effective level actually changes. Use `get_state`'s `availableThinkingLevels` to present valid choices.
831
+
832
+ Response:
833
+ ```json
834
+ {"type": "response", "command": "set_thinking_level", "success": true, "data": {"level": "high"}}
835
+ ```
836
+
837
+ #### cycle_thinking_level
838
+
839
+ Cycle through available thinking levels. Returns `null` data if model doesn't support thinking.
840
+
841
+ ```json
842
+ {"type": "cycle_thinking_level"}
843
+ ```
844
+
845
+ Response:
846
+ ```json
847
+ {
848
+ "type": "response",
849
+ "command": "cycle_thinking_level",
850
+ "success": true,
851
+ "data": {"level": "high"}
852
+ }
853
+ ```
854
+
855
+ ### Queue Modes
856
+
857
+ #### set_steering_mode
858
+
859
+ Control how steering messages (from `steer`) are delivered.
860
+
861
+ ```json
862
+ {"type": "set_steering_mode", "mode": "one-at-a-time"}
863
+ ```
864
+
865
+ Modes:
866
+ - `"all"`: Deliver all steering messages after the current assistant turn finishes executing its tool calls
867
+ - `"one-at-a-time"`: Deliver one steering message per completed assistant turn (default)
868
+
869
+ Response:
870
+ ```json
871
+ {"type": "response", "command": "set_steering_mode", "success": true}
872
+ ```
873
+
874
+ #### set_follow_up_mode
875
+
876
+ Control how follow-up messages (from `follow_up`) are delivered.
877
+
878
+ ```json
879
+ {"type": "set_follow_up_mode", "mode": "one-at-a-time"}
880
+ ```
881
+
882
+ Modes:
883
+ - `"all"`: Deliver all follow-up messages when agent finishes
884
+ - `"one-at-a-time"`: Deliver one follow-up message per agent completion (default)
885
+
886
+ Response:
887
+ ```json
888
+ {"type": "response", "command": "set_follow_up_mode", "success": true}
889
+ ```
890
+
891
+ ### Compaction
892
+
893
+ #### compact
894
+
895
+ Manually compact conversation context to reduce token usage.
896
+
897
+ ```json
898
+ {"type": "compact"}
899
+ ```
900
+
901
+ With custom instructions:
902
+ ```json
903
+ {"type": "compact", "customInstructions": "Focus on code changes"}
904
+ ```
905
+
906
+ Response:
907
+ ```json
908
+ {
909
+ "type": "response",
910
+ "command": "compact",
911
+ "success": true,
912
+ "data": {
913
+ "summary": "Summary of conversation...",
914
+ "firstKeptEntryId": "abc123",
915
+ "tokensBefore": 150000,
916
+ "details": {}
917
+ }
918
+ }
919
+ ```
920
+
921
+ #### set_auto_compaction
922
+
923
+ Enable or disable automatic compaction when context is nearly full.
924
+
925
+ ```json
926
+ {"type": "set_auto_compaction", "enabled": true}
927
+ ```
928
+
929
+ Response:
930
+ ```json
931
+ {"type": "response", "command": "set_auto_compaction", "success": true}
932
+ ```
933
+
934
+ ### Retry
935
+
936
+ #### set_auto_retry
937
+
938
+ Enable or disable automatic retry on transient errors (overloaded, rate limit, 5xx).
939
+
940
+ ```json
941
+ {"type": "set_auto_retry", "enabled": true}
942
+ ```
943
+
944
+ Response:
945
+ ```json
946
+ {"type": "response", "command": "set_auto_retry", "success": true}
947
+ ```
948
+
949
+ #### abort_retry
950
+
951
+ Abort an in-progress retry (cancel the delay and stop retrying).
952
+
953
+ ```json
954
+ {"type": "abort_retry"}
955
+ ```
956
+
957
+ Response:
958
+ ```json
959
+ {"type": "response", "command": "abort_retry", "success": true}
960
+ ```
961
+
962
+ ### Bash
963
+
964
+ #### bash
965
+
966
+ Execute a shell command and add output to conversation context.
967
+
968
+ ```json
969
+ {"type": "bash", "command": "ls -la"}
970
+ ```
971
+
972
+ Response:
973
+ ```json
974
+ {
975
+ "type": "response",
976
+ "command": "bash",
977
+ "success": true,
978
+ "data": {
979
+ "output": "total 48\ndrwxr-xr-x ...",
980
+ "exitCode": 0,
981
+ "cancelled": false,
982
+ "truncated": false
983
+ }
984
+ }
985
+ ```
986
+
987
+ If output was truncated, includes `fullOutputPath`:
988
+ ```json
989
+ {
990
+ "type": "response",
991
+ "command": "bash",
992
+ "success": true,
993
+ "data": {
994
+ "output": "truncated output...",
995
+ "exitCode": 0,
996
+ "cancelled": false,
997
+ "truncated": true,
998
+ "fullOutputPath": "/tmp/volt-bash-abc123.log"
999
+ }
1000
+ }
1001
+ ```
1002
+
1003
+ **How bash results reach the LLM:**
1004
+
1005
+ The `bash` command executes immediately and returns a `BashResult`. Internally, a `BashExecutionMessage` is created and stored in the agent's message state. This message does NOT emit an event.
1006
+
1007
+ When the next `prompt` command is sent, all messages (including `BashExecutionMessage`) are transformed before being sent to the LLM. The `BashExecutionMessage` is converted to a `UserMessage` with this format:
1008
+
1009
+ ````
1010
+ Ran `ls -la`
1011
+ ```
1012
+ total 48
1013
+ drwxr-xr-x ...
1014
+ ```
1015
+ ````
1016
+
1017
+ This means:
1018
+ 1. Bash output is included in the LLM context on the **next prompt**, not immediately
1019
+ 2. Multiple bash commands can be executed before a prompt; all outputs will be included
1020
+ 3. No event is emitted for the `BashExecutionMessage` itself
1021
+
1022
+ #### abort_bash
1023
+
1024
+ Abort a running bash command.
1025
+
1026
+ ```json
1027
+ {"type": "abort_bash"}
1028
+ ```
1029
+
1030
+ Response:
1031
+ ```json
1032
+ {"type": "response", "command": "abort_bash", "success": true}
1033
+ ```
1034
+
1035
+ ### Session
1036
+
1037
+ #### get_session_stats
1038
+
1039
+ Get token usage, cost statistics, and current context window usage.
1040
+
1041
+ ```json
1042
+ {"type": "get_session_stats"}
1043
+ ```
1044
+
1045
+ Response:
1046
+ ```json
1047
+ {
1048
+ "type": "response",
1049
+ "command": "get_session_stats",
1050
+ "success": true,
1051
+ "data": {
1052
+ "sessionFile": "/path/to/session.jsonl",
1053
+ "sessionId": "abc123",
1054
+ "userMessages": 5,
1055
+ "assistantMessages": 5,
1056
+ "toolCalls": 12,
1057
+ "toolResults": 12,
1058
+ "totalMessages": 22,
1059
+ "tokens": {
1060
+ "input": 50000,
1061
+ "output": 10000,
1062
+ "cacheRead": 40000,
1063
+ "cacheWrite": 5000,
1064
+ "total": 105000
1065
+ },
1066
+ "cost": 0.45,
1067
+ "contextUsage": {
1068
+ "tokens": 60000,
1069
+ "contextWindow": 200000,
1070
+ "percent": 30
1071
+ }
1072
+ }
1073
+ }
1074
+ ```
1075
+
1076
+ `tokens` contains assistant usage totals for the current session state. `contextUsage` contains the actual current context-window estimate used for compaction and footer display.
1077
+
1078
+ `contextUsage` is omitted when no model or context window is available. `contextUsage.tokens` and `contextUsage.percent` are `null` immediately after compaction until a fresh post-compaction assistant response provides valid usage data.
1079
+
1080
+ #### list_sessions
1081
+
1082
+ List sessions for the current workspace. The response omits host file paths so remote clients can present workspace-scoped session choices safely.
1083
+
1084
+ ```json
1085
+ {"type": "list_sessions"}
1086
+ ```
1087
+
1088
+ Response:
1089
+ ```json
1090
+ {
1091
+ "type": "response",
1092
+ "command": "list_sessions",
1093
+ "success": true,
1094
+ "data": {
1095
+ "sessions": [
1096
+ {
1097
+ "sessionId": "abc123",
1098
+ "sessionName": "my-feature-work",
1099
+ "createdAt": "2026-06-22T15:00:00.000Z",
1100
+ "modifiedAt": "2026-06-22T15:10:00.000Z",
1101
+ "messageCount": 12,
1102
+ "firstMessage": "Implement the feature",
1103
+ "current": true
1104
+ }
1105
+ ]
1106
+ }
1107
+ }
1108
+ ```
1109
+
1110
+ #### export_html
1111
+
1112
+ Export session to an HTML file.
1113
+
1114
+ ```json
1115
+ {"type": "export_html"}
1116
+ ```
1117
+
1118
+ With custom path:
1119
+ ```json
1120
+ {"type": "export_html", "outputPath": "/tmp/session.html"}
1121
+ ```
1122
+
1123
+ Response:
1124
+ ```json
1125
+ {
1126
+ "type": "response",
1127
+ "command": "export_html",
1128
+ "success": true,
1129
+ "data": {"path": "/tmp/session.html"}
1130
+ }
1131
+ ```
1132
+
1133
+ #### switch_session
1134
+
1135
+ Load a different session file. Can be cancelled by a `session_before_switch` extension event handler.
1136
+
1137
+ ```json
1138
+ {"type": "switch_session", "sessionPath": "/path/to/session.jsonl"}
1139
+ ```
1140
+
1141
+ Response:
1142
+ ```json
1143
+ {"type": "response", "command": "switch_session", "success": true, "data": {"cancelled": false}}
1144
+ ```
1145
+
1146
+ If an extension cancelled the switch:
1147
+ ```json
1148
+ {"type": "response", "command": "switch_session", "success": true, "data": {"cancelled": true}}
1149
+ ```
1150
+
1151
+ #### switch_session_by_id
1152
+
1153
+ Load another session from the current workspace by session ID. This is the remote-safe form of session switching; clients do not need to know host session file paths.
1154
+
1155
+ ```json
1156
+ {"type": "switch_session_by_id", "sessionId": "abc123"}
1157
+ ```
1158
+
1159
+ Response:
1160
+ ```json
1161
+ {"type": "response", "command": "switch_session_by_id", "success": true, "data": {"cancelled": false}}
1162
+ ```
1163
+
1164
+ If an extension cancelled the switch:
1165
+ ```json
1166
+ {"type": "response", "command": "switch_session_by_id", "success": true, "data": {"cancelled": true}}
1167
+ ```
1168
+
1169
+ #### fork
1170
+
1171
+ Create a new fork from a previous user message on the active branch. Can be cancelled by a `session_before_fork` extension event handler. Returns the text of the message being forked from.
1172
+
1173
+ ```json
1174
+ {"type": "fork", "entryId": "abc123"}
1175
+ ```
1176
+
1177
+ Response:
1178
+ ```json
1179
+ {
1180
+ "type": "response",
1181
+ "command": "fork",
1182
+ "success": true,
1183
+ "data": {"text": "The original prompt text...", "cancelled": false}
1184
+ }
1185
+ ```
1186
+
1187
+ If an extension cancelled the fork:
1188
+ ```json
1189
+ {
1190
+ "type": "response",
1191
+ "command": "fork",
1192
+ "success": true,
1193
+ "data": {"text": "The original prompt text...", "cancelled": true}
1194
+ }
1195
+ ```
1196
+
1197
+ #### clone
1198
+
1199
+ Duplicate the current active branch into a new session at the current position. Can be cancelled by a `session_before_fork` extension event handler.
1200
+
1201
+ ```json
1202
+ {"type": "clone"}
1203
+ ```
1204
+
1205
+ Response:
1206
+ ```json
1207
+ {
1208
+ "type": "response",
1209
+ "command": "clone",
1210
+ "success": true,
1211
+ "data": {"cancelled": false}
1212
+ }
1213
+ ```
1214
+
1215
+ If an extension cancelled the clone:
1216
+ ```json
1217
+ {
1218
+ "type": "response",
1219
+ "command": "clone",
1220
+ "success": true,
1221
+ "data": {"cancelled": true}
1222
+ }
1223
+ ```
1224
+
1225
+ #### get_fork_messages
1226
+
1227
+ Get user messages available for forking.
1228
+
1229
+ ```json
1230
+ {"type": "get_fork_messages"}
1231
+ ```
1232
+
1233
+ Response:
1234
+ ```json
1235
+ {
1236
+ "type": "response",
1237
+ "command": "get_fork_messages",
1238
+ "success": true,
1239
+ "data": {
1240
+ "messages": [
1241
+ {"entryId": "abc123", "text": "First prompt..."},
1242
+ {"entryId": "def456", "text": "Second prompt..."}
1243
+ ]
1244
+ }
1245
+ }
1246
+ ```
1247
+
1248
+ #### get_last_assistant_text
1249
+
1250
+ Get the text content of the last assistant message.
1251
+
1252
+ ```json
1253
+ {"type": "get_last_assistant_text"}
1254
+ ```
1255
+
1256
+ Response:
1257
+ ```json
1258
+ {
1259
+ "type": "response",
1260
+ "command": "get_last_assistant_text",
1261
+ "success": true,
1262
+ "data": {"text": "The assistant's response..."}
1263
+ }
1264
+ ```
1265
+
1266
+ Returns `{"text": null}` if no assistant messages exist.
1267
+
1268
+ #### set_session_name
1269
+
1270
+ Set a display name for the current session. The name appears in session listings and helps identify sessions.
1271
+
1272
+ ```json
1273
+ {"type": "set_session_name", "name": "my-feature-work"}
1274
+ ```
1275
+
1276
+ Response:
1277
+ ```json
1278
+ {
1279
+ "type": "response",
1280
+ "command": "set_session_name",
1281
+ "success": true
1282
+ }
1283
+ ```
1284
+
1285
+ The current session name is available via `get_state` in the `sessionName` field. To set the initial name when starting RPC mode, pass `--name <name>` or `-n <name>` to the `volt --mode rpc` process.
1286
+
1287
+ ### Commands
1288
+
1289
+ #### get_commands
1290
+
1291
+ Get available commands (extension commands, prompt templates, and skills). These can be invoked via the `prompt` command by prefixing with `/`.
1292
+
1293
+ ```json
1294
+ {"type": "get_commands"}
1295
+ ```
1296
+
1297
+ Response:
1298
+ ```json
1299
+ {
1300
+ "type": "response",
1301
+ "command": "get_commands",
1302
+ "success": true,
1303
+ "data": {
1304
+ "commands": [
1305
+ {"name": "session-name", "description": "Set or clear session name", "source": "extension", "path": "/home/user/.volt/agent/extensions/session.ts"},
1306
+ {"name": "fix-tests", "description": "Fix failing tests", "source": "prompt", "location": "project", "path": "/home/user/myproject/.volt/agent/prompts/fix-tests.md"},
1307
+ {"name": "skill:brave-search", "description": "Web search via Brave API", "source": "skill", "location": "user", "path": "/home/user/.volt/agent/skills/brave-search/SKILL.md"}
1308
+ ]
1309
+ }
1310
+ }
1311
+ ```
1312
+
1313
+ Each command has:
1314
+ - `name`: Command name (invoke with `/name`)
1315
+ - `description`: Human-readable description (optional for extension commands)
1316
+ - `source`: What kind of command:
1317
+ - `"extension"`: Registered via `volt.registerCommand()` in an extension
1318
+ - `"prompt"`: Loaded from a prompt template `.md` file
1319
+ - `"skill"`: Loaded from a skill directory (name is prefixed with `skill:`)
1320
+ - `location`: Where it was loaded from (optional, not present for extensions):
1321
+ - `"user"`: User-level (`~/.volt/agent/`)
1322
+ - `"project"`: Project-level (`./.volt/agent/`)
1323
+ - `"path"`: Explicit path via CLI or settings
1324
+ - `path`: Absolute file path to the command source (optional)
1325
+
1326
+ **Note**: Built-in TUI commands (`/settings`, `/hotkeys`, etc.) are not included. They are handled only in interactive mode and would not execute if sent via `prompt`.
1327
+
1328
+ ## Events
1329
+
1330
+ Events are streamed to stdout as JSON lines during agent operation. Events do NOT include an `id` field (only responses do).
1331
+
1332
+ ### Event Types
1333
+
1334
+ | Event | Description |
1335
+ |-------|-------------|
1336
+ | `agent_start` | Agent begins processing |
1337
+ | `agent_end` | Agent run completes (includes all generated messages); a retry or continuation may still follow |
1338
+ | `agent_settled` | Prompt fully settles: no further automatic retries, compaction continuations, or queued continuations |
1339
+ | `turn_start` | New turn begins |
1340
+ | `turn_end` | Turn completes (includes assistant message and tool results) |
1341
+ | `message_start` | Message begins |
1342
+ | `message_update` | Streaming update (text/thinking/toolcall deltas) |
1343
+ | `message_end` | Message completes |
1344
+ | `tool_execution_start` | Tool begins execution |
1345
+ | `tool_execution_update` | Tool execution progress (streaming output) |
1346
+ | `tool_execution_end` | Tool completes |
1347
+ | `workflow_start` | Host-owned workflow begins (for example, review) |
1348
+ | `workflow_update` | Host-owned workflow progress update |
1349
+ | `workflow_end` | Host-owned workflow completes, fails, or is cancelled |
1350
+ | `queue_update` | Pending steering/follow-up queue changed |
1351
+ | `compaction_start` | Compaction begins |
1352
+ | `compaction_end` | Compaction completes |
1353
+ | `auto_retry_start` | Auto-retry begins (after transient error) |
1354
+ | `auto_retry_end` | Auto-retry completes (success or final failure) |
1355
+ | `subagent_event` | Wrapped child event from a local RPC-managed subagent |
1356
+ | `subagent_end` | Terminal completion result for a local RPC-managed subagent |
1357
+ | `extension_error` | Extension threw an error |
1358
+ | `models_changed` | Available model catalog changed on disk (login, logout, or API key save) |
1359
+ | `mcp_servers_changed` | MCP server list or enablement changed (`servers`: full summary list) |
1360
+ | `mcp_server_status_changed` | An MCP server's status or auth state changed (`server`: full summary) |
1361
+ | `mcp_auth_request` | An MCP OAuth flow needs user action (`serverId`, `auth`: flow, URL/device-code details) |
1362
+ | `mcp_auth_update` | An MCP OAuth flow progressed (`serverId`, `status`, `authState`, optional `server` summary) |
1363
+ | `mcp_call_start` | MCP gateway tool call began (`call`: id, server, tool, risk) |
1364
+ | `mcp_call_update` | MCP tool call progress notification (`call`, `progress`) |
1365
+ | `mcp_call_end` | MCP tool call completed, failed, or was cancelled (`call`, optional `cacheId`) |
1366
+
1367
+ ### agent_start
1368
+
1369
+ Emitted when the agent begins processing a prompt.
1370
+
1371
+ ```json
1372
+ {"type": "agent_start"}
1373
+ ```
1374
+
1375
+ ### agent_end
1376
+
1377
+ Emitted when an agent run completes. Contains all messages generated during this run.
1378
+
1379
+ ```json
1380
+ {
1381
+ "type": "agent_end",
1382
+ "messages": [...]
1383
+ }
1384
+ ```
1385
+
1386
+ A single prompt can produce multiple `agent_end` events: automatic retries, overflow/threshold compaction, and queued follow-up messages each continue the run after a raw `agent_end`. Wait for `agent_settled` to know the prompt is finished.
1387
+
1388
+ ### agent_settled
1389
+
1390
+ Emitted when all tracked prompt work reaches a global idle boundary, after any final `agent_end`, automatic retries, compaction continuations, and queued-message continuations have finished. Overlapping prompt transactions share one boundary, and handled or rejected preflight can settle without an `agent_end`; this event does not carry a prompt correlation id. Client helpers such as `waitForIdle`, `collectEvents`, and `promptAndWait` terminate on this event.
1391
+
1392
+ ```json
1393
+ {"type": "agent_settled"}
1394
+ ```
1395
+
1396
+ ### turn_start / turn_end
1397
+
1398
+ A turn consists of one assistant response plus any resulting tool calls and results.
1399
+
1400
+ ```json
1401
+ {"type": "turn_start"}
1402
+ ```
1403
+
1404
+ ```json
1405
+ {
1406
+ "type": "turn_end",
1407
+ "message": {...},
1408
+ "toolResults": [...]
1409
+ }
1410
+ ```
1411
+
1412
+ ### message_start / message_end
1413
+
1414
+ Emitted when a message begins and completes. The `message` field contains an `AgentMessage`.
1415
+
1416
+ ```json
1417
+ {"type": "message_start", "message": {...}}
1418
+ {"type": "message_end", "message": {...}}
1419
+ ```
1420
+
1421
+ ### message_update (Streaming)
1422
+
1423
+ Emitted during streaming of assistant messages. Contains both the partial message and a streaming delta event.
1424
+
1425
+ ```json
1426
+ {
1427
+ "type": "message_update",
1428
+ "message": {...},
1429
+ "assistantMessageEvent": {
1430
+ "type": "text_delta",
1431
+ "contentIndex": 0,
1432
+ "delta": "Hello ",
1433
+ "partial": {...}
1434
+ }
1435
+ }
1436
+ ```
1437
+
1438
+ The `assistantMessageEvent` field contains one of these delta types:
1439
+
1440
+ | Type | Description |
1441
+ |------|-------------|
1442
+ | `start` | Message generation started |
1443
+ | `text_start` | Text content block started |
1444
+ | `text_delta` | Text content chunk |
1445
+ | `text_end` | Text content block ended |
1446
+ | `thinking_start` | Thinking block started |
1447
+ | `thinking_delta` | Thinking content chunk |
1448
+ | `thinking_end` | Thinking block ended |
1449
+ | `toolcall_start` | Tool call started |
1450
+ | `toolcall_delta` | Tool call arguments chunk |
1451
+ | `toolcall_end` | Tool call ended (includes full `toolCall` object) |
1452
+ | `done` | Message complete (reason: `"stop"`, `"length"`, `"toolUse"`) |
1453
+ | `error` | Error occurred (reason: `"aborted"`, `"error"`) |
1454
+
1455
+ Example streaming a text response:
1456
+ ```json
1457
+ {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_start","contentIndex":0,"partial":{...}}}
1458
+ {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":"Hello","partial":{...}}}
1459
+ {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_delta","contentIndex":0,"delta":" world","partial":{...}}}
1460
+ {"type":"message_update","message":{...},"assistantMessageEvent":{"type":"text_end","contentIndex":0,"content":"Hello world","partial":{...}}}
1461
+ ```
1462
+
1463
+ ### tool_execution_start / tool_execution_update / tool_execution_end
1464
+
1465
+ Emitted when a tool begins, streams progress, and completes execution.
1466
+
1467
+ ```json
1468
+ {
1469
+ "type": "tool_execution_start",
1470
+ "toolCallId": "call_abc123",
1471
+ "toolName": "bash",
1472
+ "args": {"command": "ls -la"}
1473
+ }
1474
+ ```
1475
+
1476
+ During execution, `tool_execution_update` events stream partial results (e.g., bash output as it arrives):
1477
+
1478
+ ```json
1479
+ {
1480
+ "type": "tool_execution_update",
1481
+ "toolCallId": "call_abc123",
1482
+ "toolName": "bash",
1483
+ "args": {"command": "ls -la"},
1484
+ "partialResult": {
1485
+ "content": [{"type": "text", "text": "partial output so far..."}],
1486
+ "details": {"truncation": null, "fullOutputPath": null}
1487
+ }
1488
+ }
1489
+ ```
1490
+
1491
+ When complete:
1492
+
1493
+ ```json
1494
+ {
1495
+ "type": "tool_execution_end",
1496
+ "toolCallId": "call_abc123",
1497
+ "toolName": "bash",
1498
+ "result": {
1499
+ "content": [{"type": "text", "text": "total 48\n..."}],
1500
+ "details": {...}
1501
+ },
1502
+ "isError": false
1503
+ }
1504
+ ```
1505
+
1506
+ Use `toolCallId` to correlate events. The `partialResult` in `tool_execution_update` contains the accumulated output so far (not just the delta), allowing clients to simply replace their display on each update.
1507
+
1508
+ Host-owned workflows can also emit sanitized tool lifecycle events with workflow metadata. For example, review actions emit tool names and bounded arguments, but omit raw file contents and raw tool output:
1509
+
1510
+ ```json
1511
+ {"type":"tool_execution_start","workflowId":"review:abc","workflowKind":"review","workflowAction":"review.uncommitted","toolCallId":"review:abc:call_1","toolName":"read","args":{"path":"src/file.ts"}}
1512
+ {"type":"tool_execution_end","workflowId":"review:abc","workflowKind":"review","workflowAction":"review.uncommitted","toolCallId":"review:abc:call_1","toolName":"read","isError":false}
1513
+ ```
1514
+
1515
+ ### workflow_start / workflow_update / workflow_end
1516
+
1517
+ Emitted for host-owned workflows that are not ordinary assistant chat turns, such as a review action. Clients can render these as a temporary live timeline until the action response and any resulting session refresh arrive.
1518
+
1519
+ ```json
1520
+ {"type":"workflow_start","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Reviewing uncommitted changes.","status":"running"}
1521
+ {"type":"workflow_update","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Finalizing findings.","status":"finalizing"}
1522
+ {"type":"workflow_end","workflowId":"review:abc","kind":"review","action":"review.uncommitted","title":"Review","message":"Review complete: 2 findings. Opening review session.","status":"completed"}
1523
+ ```
1524
+
1525
+ `status` is advisory. Known review statuses are `running`, `finalizing`, `completed`, `cancelled`, and `failed`. Unknown workflow kinds, statuses, and extra fields should be ignored or rendered generically.
1526
+
1527
+ ### queue_update
1528
+
1529
+ Emitted whenever the pending steering or follow-up queue changes.
1530
+
1531
+ ```json
1532
+ {
1533
+ "type": "queue_update",
1534
+ "steering": ["Focus on error handling"],
1535
+ "followUp": ["After that, summarize the result"]
1536
+ }
1537
+ ```
1538
+
1539
+ ### compaction_start / compaction_end
1540
+
1541
+ Emitted when compaction runs, whether manual or automatic.
1542
+
1543
+ ```json
1544
+ {"type": "compaction_start", "reason": "threshold"}
1545
+ ```
1546
+
1547
+ The `reason` field is `"manual"`, `"threshold"`, or `"overflow"`.
1548
+
1549
+ ```json
1550
+ {
1551
+ "type": "compaction_end",
1552
+ "reason": "threshold",
1553
+ "result": {
1554
+ "summary": "Summary of conversation...",
1555
+ "firstKeptEntryId": "abc123",
1556
+ "tokensBefore": 150000,
1557
+ "details": {}
1558
+ },
1559
+ "aborted": false,
1560
+ "willRetry": false
1561
+ }
1562
+ ```
1563
+
1564
+ If `reason` was `"overflow"` and compaction succeeds, `willRetry` is `true` and the agent will automatically retry the prompt.
1565
+
1566
+ If compaction was aborted, `result` is `null` and `aborted` is `true`.
1567
+
1568
+ If compaction failed (e.g., API quota exceeded), `result` is `null`, `aborted` is `false`, and `errorMessage` contains the error description.
1569
+
1570
+ ### auto_retry_start / auto_retry_end
1571
+
1572
+ Emitted when automatic retry is triggered after a transient error (overloaded, rate limit, 5xx).
1573
+
1574
+ ```json
1575
+ {
1576
+ "type": "auto_retry_start",
1577
+ "attempt": 1,
1578
+ "maxAttempts": 3,
1579
+ "delayMs": 2000,
1580
+ "errorMessage": "529 {\"type\":\"error\",\"error\":{\"type\":\"overloaded_error\",\"message\":\"Overloaded\"}}"
1581
+ }
1582
+ ```
1583
+
1584
+ ```json
1585
+ {
1586
+ "type": "auto_retry_end",
1587
+ "success": true,
1588
+ "attempt": 2
1589
+ }
1590
+ ```
1591
+
1592
+ On final failure (max retries exceeded):
1593
+ ```json
1594
+ {
1595
+ "type": "auto_retry_end",
1596
+ "success": false,
1597
+ "attempt": 3,
1598
+ "finalError": "529 overloaded_error: Overloaded"
1599
+ }
1600
+ ```
1601
+
1602
+ ### extension_error
1603
+
1604
+ Emitted when an extension throws an error.
1605
+
1606
+ ```json
1607
+ {
1608
+ "type": "extension_error",
1609
+ "extensionPath": "/path/to/extension.ts",
1610
+ "event": "tool_call",
1611
+ "error": "Error message..."
1612
+ }
1613
+ ```
1614
+
1615
+ ### models_changed
1616
+
1617
+ Emitted when the host detects that the available model catalog changed on disk — for example after `/login`, `/logout`, or an API key save in another volt process rewrote `auth.json` or `models.json`. The event carries no payload; clients should re-request `get_available_models` to fetch the updated catalog. Rewrites that do not change the available catalog (such as OAuth token refreshes) do not emit this event.
1618
+
1619
+ ```json
1620
+ {"type": "models_changed"}
1621
+ ```
1622
+
1623
+ ## Extension UI Protocol
1624
+
1625
+ Extensions can request user interaction via `ctx.ui.select()`, `ctx.ui.confirm()`, etc. In RPC mode, these are translated into a request/response sub-protocol on top of the base command/event flow.
1626
+
1627
+ There are two categories of extension UI methods:
1628
+
1629
+ - **Dialog methods** (`select`, `confirm`, `input`, `editor`): emit an `extension_ui_request` on stdout and block until the client sends back an `extension_ui_response` on stdin with the matching `id`.
1630
+ - **Fire-and-forget methods** (`notify`, `setStatus`, `setWidget`, `setTitle`, `set_editor_text`): emit an `extension_ui_request` on stdout but do not expect a response. The client can display the information or ignore it.
1631
+
1632
+ If a dialog method includes a `timeout` field, the agent-side will auto-resolve with a default value when the timeout expires. The client does not need to track timeouts.
1633
+
1634
+ Some `ExtensionUIContext` methods are not supported or degraded in RPC mode because they require direct TUI access:
1635
+ - `custom()` returns `undefined`
1636
+ - `setWorkingMessage()`, `setWorkingIndicator()`, `setFooter()`, `setHeader()`, `setEditorComponent()`, `setToolsExpanded()` are no-ops
1637
+ - `getEditorText()` returns `""`
1638
+ - `getToolsExpanded()` returns `false`
1639
+ - `pasteToEditor()` delegates to `setEditorText()` (no paste/collapse handling)
1640
+
1641
+ The theme facade is fully functional in RPC mode: `getAllThemes()` returns the real theme list (builtin plus extension-registered), `getTheme()` resolves by name, and `setTheme()` applies the theme to the process and persists the choice. Under the background daemon, a successful `setTheme()` also broadcasts a `theme_snapshot` to connected desktop TUIs, which apply it unless the user explicitly picked a theme in that TUI session.
1642
+
1643
+ For conversations owned by a desktop TUI and served to phones over the daemon's byte relay, `extension_ui_request` frames are suppressed on the relayed stream: dialogs are answered on the desktop where the extension's UI actually lives, and phones receive none of them.
1644
+
1645
+ Note: `ctx.mode` is `"rpc"` and `ctx.hasUI` is `true` in RPC mode because the dialog and fire-and-forget methods are functional via the extension UI sub-protocol. Use `ctx.mode === "tui"` to guard TUI-specific features like `custom()` that require a real terminal.
1646
+
1647
+ ### Extension UI Requests (stdout)
1648
+
1649
+ All requests have `type: "extension_ui_request"`, a unique `id`, and a `method` field.
1650
+
1651
+ #### select
1652
+
1653
+ Prompt the user to choose from a list. Dialog methods with a `timeout` field include the timeout in milliseconds; the agent auto-resolves with `undefined` if the client doesn't respond in time.
1654
+
1655
+ ```json
1656
+ {
1657
+ "type": "extension_ui_request",
1658
+ "id": "uuid-1",
1659
+ "method": "select",
1660
+ "title": "Allow dangerous command?",
1661
+ "options": ["Allow", "Block"],
1662
+ "timeout": 10000
1663
+ }
1664
+ ```
1665
+
1666
+ Expected response: `extension_ui_response` with `value` (the selected option string) or `cancelled: true`.
1667
+
1668
+ #### confirm
1669
+
1670
+ Prompt the user for yes/no confirmation.
1671
+
1672
+ ```json
1673
+ {
1674
+ "type": "extension_ui_request",
1675
+ "id": "uuid-2",
1676
+ "method": "confirm",
1677
+ "title": "Clear session?",
1678
+ "message": "All messages will be lost.",
1679
+ "timeout": 5000
1680
+ }
1681
+ ```
1682
+
1683
+ Expected response: `extension_ui_response` with `confirmed: true/false` or `cancelled: true`.
1684
+
1685
+ #### input
1686
+
1687
+ Prompt the user for free-form text.
1688
+
1689
+ ```json
1690
+ {
1691
+ "type": "extension_ui_request",
1692
+ "id": "uuid-3",
1693
+ "method": "input",
1694
+ "title": "Enter a value",
1695
+ "placeholder": "type something..."
1696
+ }
1697
+ ```
1698
+
1699
+ Expected response: `extension_ui_response` with `value` (the entered text) or `cancelled: true`.
1700
+
1701
+ #### editor
1702
+
1703
+ Open a multi-line text editor with optional prefilled content.
1704
+
1705
+ ```json
1706
+ {
1707
+ "type": "extension_ui_request",
1708
+ "id": "uuid-4",
1709
+ "method": "editor",
1710
+ "title": "Edit some text",
1711
+ "prefill": "Line 1\nLine 2\nLine 3"
1712
+ }
1713
+ ```
1714
+
1715
+ Expected response: `extension_ui_response` with `value` (the edited text) or `cancelled: true`.
1716
+
1717
+ #### notify
1718
+
1719
+ Display a notification. Fire-and-forget, no response expected.
1720
+
1721
+ ```json
1722
+ {
1723
+ "type": "extension_ui_request",
1724
+ "id": "uuid-5",
1725
+ "method": "notify",
1726
+ "message": "Command blocked by user",
1727
+ "notifyType": "warning"
1728
+ }
1729
+ ```
1730
+
1731
+ The `notifyType` field is `"info"`, `"warning"`, or `"error"`. Defaults to `"info"` if omitted.
1732
+
1733
+ #### setStatus
1734
+
1735
+ Set or clear a status entry in the footer/status bar. Fire-and-forget.
1736
+
1737
+ ```json
1738
+ {
1739
+ "type": "extension_ui_request",
1740
+ "id": "uuid-6",
1741
+ "method": "setStatus",
1742
+ "statusKey": "my-ext",
1743
+ "statusText": "Turn 3 running..."
1744
+ }
1745
+ ```
1746
+
1747
+ Send `statusText: undefined` (or omit it) to clear the status entry for that key.
1748
+
1749
+ #### setWidget
1750
+
1751
+ Set or clear a widget (block of text lines) displayed above or below the editor. Fire-and-forget.
1752
+
1753
+ ```json
1754
+ {
1755
+ "type": "extension_ui_request",
1756
+ "id": "uuid-7",
1757
+ "method": "setWidget",
1758
+ "widgetKey": "my-ext",
1759
+ "widgetLines": ["--- My Widget ---", "Line 1", "Line 2"],
1760
+ "widgetPlacement": "aboveEditor"
1761
+ }
1762
+ ```
1763
+
1764
+ Send `widgetLines: undefined` (or omit it) to clear the widget. The `widgetPlacement` field is `"aboveEditor"` (default) or `"belowEditor"`. Only string arrays are supported in RPC mode; component factories are ignored.
1765
+
1766
+ #### setTitle
1767
+
1768
+ Set the terminal window/tab title. Fire-and-forget.
1769
+
1770
+ ```json
1771
+ {
1772
+ "type": "extension_ui_request",
1773
+ "id": "uuid-8",
1774
+ "method": "setTitle",
1775
+ "title": "volt - my project"
1776
+ }
1777
+ ```
1778
+
1779
+ #### set_editor_text
1780
+
1781
+ Set the text in the input editor. Fire-and-forget.
1782
+
1783
+ ```json
1784
+ {
1785
+ "type": "extension_ui_request",
1786
+ "id": "uuid-9",
1787
+ "method": "set_editor_text",
1788
+ "text": "prefilled text for the user"
1789
+ }
1790
+ ```
1791
+
1792
+ ### Extension UI Responses (stdin)
1793
+
1794
+ Responses are sent for dialog methods only (`select`, `confirm`, `input`, `editor`). The `id` must match the request.
1795
+
1796
+ #### Value response (select, input, editor)
1797
+
1798
+ ```json
1799
+ {"type": "extension_ui_response", "id": "uuid-1", "value": "Allow"}
1800
+ ```
1801
+
1802
+ #### Confirmation response (confirm)
1803
+
1804
+ ```json
1805
+ {"type": "extension_ui_response", "id": "uuid-2", "confirmed": true}
1806
+ ```
1807
+
1808
+ #### Cancellation response (any dialog)
1809
+
1810
+ Dismiss any dialog method. The extension receives `undefined` (for select/input/editor) or `false` (for confirm).
1811
+
1812
+ ```json
1813
+ {"type": "extension_ui_response", "id": "uuid-3", "cancelled": true}
1814
+ ```
1815
+
1816
+ ## Error Handling
1817
+
1818
+ Failed commands return a response with `success: false`:
1819
+
1820
+ ```json
1821
+ {
1822
+ "type": "response",
1823
+ "command": "set_model",
1824
+ "success": false,
1825
+ "error": "Model not found: invalid/model"
1826
+ }
1827
+ ```
1828
+
1829
+ Parse errors:
1830
+
1831
+ ```json
1832
+ {
1833
+ "type": "response",
1834
+ "command": "parse",
1835
+ "success": false,
1836
+ "error": "Failed to parse command: Unexpected token..."
1837
+ }
1838
+ ```
1839
+
1840
+ ## Types
1841
+
1842
+ Source files:
1843
+ - [`packages/ai/src/types.ts`](../../ai/src/types.ts) - `Model`, `UserMessage`, `AssistantMessage`, `ToolResultMessage`
1844
+ - [`packages/agent/src/types.ts`](../../agent/src/types.ts) - `AgentMessage`, `AgentEvent`
1845
+ - [`src/core/messages.ts`](../src/core/messages.ts) - `BashExecutionMessage`
1846
+ - [`src/core/rpc/types.ts`](../src/core/rpc/types.ts) - RPC command/response types, extension UI request/response types
1847
+ - [`src/core/rpc/transport.ts`](../src/core/rpc/transport.ts) - RPC transport abstraction and JSONL stream adapters
1848
+ - [`src/core/rpc/loopback-transport.ts`](../src/core/rpc/loopback-transport.ts) - in-memory transport pair for in-process clients
1849
+ - [`src/modes/rpc/rpc-transport-client.ts`](../src/modes/rpc/rpc-transport-client.ts) - typed RPC client for caller-provided transports
1850
+
1851
+ ### Model
1852
+
1853
+ ```json
1854
+ {
1855
+ "id": "claude-sonnet-4-20250514",
1856
+ "name": "Claude Sonnet 4",
1857
+ "api": "anthropic-messages",
1858
+ "provider": "anthropic",
1859
+ "baseUrl": "https://api.anthropic.com",
1860
+ "reasoning": true,
1861
+ "input": ["text", "image"],
1862
+ "contextWindow": 200000,
1863
+ "maxTokens": 16384,
1864
+ "cost": {
1865
+ "input": 3.0,
1866
+ "output": 15.0,
1867
+ "cacheRead": 0.3,
1868
+ "cacheWrite": 3.75
1869
+ }
1870
+ }
1871
+ ```
1872
+
1873
+ ### UserMessage
1874
+
1875
+ ```json
1876
+ {
1877
+ "role": "user",
1878
+ "content": "Hello!",
1879
+ "timestamp": 1733234567890,
1880
+ "attachments": []
1881
+ }
1882
+ ```
1883
+
1884
+ The `content` field can be a string or an array of `TextContent`/`ImageContent` blocks.
1885
+
1886
+ ### AssistantMessage
1887
+
1888
+ ```json
1889
+ {
1890
+ "role": "assistant",
1891
+ "content": [
1892
+ {"type": "text", "text": "Hello! How can I help?"},
1893
+ {"type": "thinking", "thinking": "User is greeting me..."},
1894
+ {"type": "toolCall", "id": "call_123", "name": "bash", "arguments": {"command": "ls"}}
1895
+ ],
1896
+ "api": "anthropic-messages",
1897
+ "provider": "anthropic",
1898
+ "model": "claude-sonnet-4-20250514",
1899
+ "usage": {
1900
+ "input": 100,
1901
+ "output": 50,
1902
+ "cacheRead": 0,
1903
+ "cacheWrite": 0,
1904
+ "cost": {"input": 0.0003, "output": 0.00075, "cacheRead": 0, "cacheWrite": 0, "total": 0.00105}
1905
+ },
1906
+ "stopReason": "stop",
1907
+ "timestamp": 1733234567890
1908
+ }
1909
+ ```
1910
+
1911
+ Stop reasons: `"stop"`, `"length"`, `"toolUse"`, `"error"`, `"aborted"`
1912
+
1913
+ ### ToolResultMessage
1914
+
1915
+ ```json
1916
+ {
1917
+ "role": "toolResult",
1918
+ "toolCallId": "call_123",
1919
+ "toolName": "bash",
1920
+ "content": [{"type": "text", "text": "total 48\ndrwxr-xr-x ..."}],
1921
+ "isError": false,
1922
+ "timestamp": 1733234567890
1923
+ }
1924
+ ```
1925
+
1926
+ ### BashExecutionMessage
1927
+
1928
+ Created by the `bash` RPC command (not by LLM tool calls):
1929
+
1930
+ ```json
1931
+ {
1932
+ "role": "bashExecution",
1933
+ "command": "ls -la",
1934
+ "output": "total 48\ndrwxr-xr-x ...",
1935
+ "exitCode": 0,
1936
+ "cancelled": false,
1937
+ "truncated": false,
1938
+ "fullOutputPath": null,
1939
+ "timestamp": 1733234567890
1940
+ }
1941
+ ```
1942
+
1943
+ ### Attachment
1944
+
1945
+ ```json
1946
+ {
1947
+ "id": "img1",
1948
+ "type": "image",
1949
+ "fileName": "photo.jpg",
1950
+ "mimeType": "image/jpeg",
1951
+ "size": 102400,
1952
+ "content": "base64-encoded-data...",
1953
+ "extractedText": null,
1954
+ "preview": null
1955
+ }
1956
+ ```
1957
+
1958
+ ## Example: Basic Client (Python)
1959
+
1960
+ ```python
1961
+ import subprocess
1962
+ import json
1963
+
1964
+ proc = subprocess.Popen(
1965
+ ["volt", "--mode", "rpc", "--no-session"],
1966
+ stdin=subprocess.PIPE,
1967
+ stdout=subprocess.PIPE,
1968
+ text=True
1969
+ )
1970
+
1971
+ def send(cmd):
1972
+ proc.stdin.write(json.dumps(cmd) + "\n")
1973
+ proc.stdin.flush()
1974
+
1975
+ def read_events():
1976
+ for line in proc.stdout:
1977
+ yield json.loads(line)
1978
+
1979
+ # Send prompt
1980
+ send({"type": "prompt", "message": "Hello!"})
1981
+
1982
+ # Process events
1983
+ for event in read_events():
1984
+ if event.get("type") == "message_update":
1985
+ delta = event.get("assistantMessageEvent", {})
1986
+ if delta.get("type") == "text_delta":
1987
+ print(delta["delta"], end="", flush=True)
1988
+
1989
+ if event.get("type") == "agent_settled":
1990
+ print()
1991
+ break
1992
+ ```
1993
+
1994
+ ## Example: Interactive Client (Node.js)
1995
+
1996
+ See [`test/rpc-example.ts`](../test/rpc-example.ts) for a complete interactive example, [`src/modes/rpc/rpc-client.ts`](../src/modes/rpc/rpc-client.ts) for the subprocess typed client, or [`src/modes/rpc/rpc-transport-client.ts`](../src/modes/rpc/rpc-transport-client.ts) for the transport-backed typed client.
1997
+
1998
+ For a complete example of handling the extension UI protocol, see [`examples/rpc-extension-ui.ts`](../examples/rpc-extension-ui.ts) which pairs with the [`examples/extensions/rpc-demo.ts`](../examples/extensions/rpc-demo.ts) extension.
1999
+
2000
+ ```javascript
2001
+ const { spawn } = require("child_process");
2002
+ const { StringDecoder } = require("string_decoder");
2003
+
2004
+ const agent = spawn("volt", ["--mode", "rpc", "--no-session"]);
2005
+
2006
+ function attachJsonlReader(stream, onLine) {
2007
+ const decoder = new StringDecoder("utf8");
2008
+ let buffer = "";
2009
+
2010
+ stream.on("data", (chunk) => {
2011
+ buffer += typeof chunk === "string" ? chunk : decoder.write(chunk);
2012
+
2013
+ while (true) {
2014
+ const newlineIndex = buffer.indexOf("\n");
2015
+ if (newlineIndex === -1) break;
2016
+
2017
+ let line = buffer.slice(0, newlineIndex);
2018
+ buffer = buffer.slice(newlineIndex + 1);
2019
+ if (line.endsWith("\r")) line = line.slice(0, -1);
2020
+ onLine(line);
2021
+ }
2022
+ });
2023
+
2024
+ stream.on("end", () => {
2025
+ buffer += decoder.end();
2026
+ if (buffer.length > 0) {
2027
+ onLine(buffer.endsWith("\r") ? buffer.slice(0, -1) : buffer);
2028
+ }
2029
+ });
2030
+ }
2031
+
2032
+ attachJsonlReader(agent.stdout, (line) => {
2033
+ const event = JSON.parse(line);
2034
+
2035
+ if (event.type === "message_update") {
2036
+ const { assistantMessageEvent } = event;
2037
+ if (assistantMessageEvent.type === "text_delta") {
2038
+ process.stdout.write(assistantMessageEvent.delta);
2039
+ }
2040
+ }
2041
+ });
2042
+
2043
+ // Send prompt
2044
+ agent.stdin.write(JSON.stringify({ type: "prompt", message: "Hello" }) + "\n");
2045
+
2046
+ // Abort on Ctrl+C
2047
+ process.on("SIGINT", () => {
2048
+ agent.stdin.write(JSON.stringify({ type: "abort" }) + "\n");
2049
+ });
2050
+ ```