@hansjm10/volt-coding-agent 0.0.0-bootstrap.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1364) hide show
  1. package/BINARY-CAPABILITIES.md +28 -0
  2. package/CHANGELOG.md +4845 -0
  3. package/LICENSE +1 -1
  4. package/README.md +716 -3
  5. package/THIRD-PARTY-NOTICES.md +55 -0
  6. package/dist/LICENSES/clipboard-image-MIT.txt +9 -0
  7. package/dist/LICENSES/highlight.js-10.7.3-BSD-3-Clause.txt +29 -0
  8. package/dist/LICENSES/highlight.js-11.9.0-BSD-3-Clause.txt +29 -0
  9. package/dist/LICENSES/marked-18.0.5-LICENSE.txt +44 -0
  10. package/dist/LICENSES/run-jxa-MIT.txt +9 -0
  11. package/dist/cli/args.d.ts +60 -0
  12. package/dist/cli/args.d.ts.map +1 -0
  13. package/dist/cli/args.js +414 -0
  14. package/dist/cli/args.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts +14 -0
  16. package/dist/cli/config-selector.d.ts.map +1 -0
  17. package/dist/cli/config-selector.js +31 -0
  18. package/dist/cli/config-selector.js.map +1 -0
  19. package/dist/cli/file-processor.d.ts +15 -0
  20. package/dist/cli/file-processor.d.ts.map +1 -0
  21. package/dist/cli/file-processor.js +85 -0
  22. package/dist/cli/file-processor.js.map +1 -0
  23. package/dist/cli/initial-message.d.ts +18 -0
  24. package/dist/cli/initial-message.d.ts.map +1 -0
  25. package/dist/cli/initial-message.js +22 -0
  26. package/dist/cli/initial-message.js.map +1 -0
  27. package/dist/cli/list-models.d.ts +9 -0
  28. package/dist/cli/list-models.d.ts.map +1 -0
  29. package/dist/cli/list-models.js +98 -0
  30. package/dist/cli/list-models.js.map +1 -0
  31. package/dist/cli/project-trust.d.ts +10 -0
  32. package/dist/cli/project-trust.d.ts.map +1 -0
  33. package/dist/cli/project-trust.js +48 -0
  34. package/dist/cli/project-trust.js.map +1 -0
  35. package/dist/cli/session-picker.d.ts +9 -0
  36. package/dist/cli/session-picker.d.ts.map +1 -0
  37. package/dist/cli/session-picker.js +35 -0
  38. package/dist/cli/session-picker.js.map +1 -0
  39. package/dist/cli/startup-ui.d.ts +17 -0
  40. package/dist/cli/startup-ui.d.ts.map +1 -0
  41. package/dist/cli/startup-ui.js +133 -0
  42. package/dist/cli/startup-ui.js.map +1 -0
  43. package/dist/cli.d.ts +3 -0
  44. package/dist/cli.d.ts.map +1 -0
  45. package/dist/cli.js +18 -0
  46. package/dist/cli.js.map +1 -0
  47. package/dist/config.d.ts +85 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +487 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/core/agent-session-runtime.d.ts +160 -0
  52. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  53. package/dist/core/agent-session-runtime.js +397 -0
  54. package/dist/core/agent-session-runtime.js.map +1 -0
  55. package/dist/core/agent-session-services.d.ts +98 -0
  56. package/dist/core/agent-session-services.d.ts.map +1 -0
  57. package/dist/core/agent-session-services.js +125 -0
  58. package/dist/core/agent-session-services.js.map +1 -0
  59. package/dist/core/agent-session.d.ts +739 -0
  60. package/dist/core/agent-session.d.ts.map +1 -0
  61. package/dist/core/agent-session.js +3158 -0
  62. package/dist/core/agent-session.js.map +1 -0
  63. package/dist/core/auth-guidance.d.ts +5 -0
  64. package/dist/core/auth-guidance.d.ts.map +1 -0
  65. package/dist/core/auth-guidance.js +21 -0
  66. package/dist/core/auth-guidance.js.map +1 -0
  67. package/dist/core/auth-storage.d.ts +159 -0
  68. package/dist/core/auth-storage.d.ts.map +1 -0
  69. package/dist/core/auth-storage.js +509 -0
  70. package/dist/core/auth-storage.js.map +1 -0
  71. package/dist/core/bash-executor.d.ts +32 -0
  72. package/dist/core/bash-executor.d.ts.map +1 -0
  73. package/dist/core/bash-executor.js +111 -0
  74. package/dist/core/bash-executor.js.map +1 -0
  75. package/dist/core/compaction/branch-summarization.d.ts +92 -0
  76. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  77. package/dist/core/compaction/branch-summarization.js +257 -0
  78. package/dist/core/compaction/branch-summarization.js.map +1 -0
  79. package/dist/core/compaction/compaction.d.ts +121 -0
  80. package/dist/core/compaction/compaction.d.ts.map +1 -0
  81. package/dist/core/compaction/compaction.js +658 -0
  82. package/dist/core/compaction/compaction.js.map +1 -0
  83. package/dist/core/compaction/index.d.ts +7 -0
  84. package/dist/core/compaction/index.d.ts.map +1 -0
  85. package/dist/core/compaction/index.js +7 -0
  86. package/dist/core/compaction/index.js.map +1 -0
  87. package/dist/core/compaction/utils.d.ts +56 -0
  88. package/dist/core/compaction/utils.d.ts.map +1 -0
  89. package/dist/core/compaction/utils.js +271 -0
  90. package/dist/core/compaction/utils.js.map +1 -0
  91. package/dist/core/defaults.d.ts +3 -0
  92. package/dist/core/defaults.d.ts.map +1 -0
  93. package/dist/core/defaults.js +2 -0
  94. package/dist/core/defaults.js.map +1 -0
  95. package/dist/core/diagnostics.d.ts +15 -0
  96. package/dist/core/diagnostics.d.ts.map +1 -0
  97. package/dist/core/diagnostics.js +2 -0
  98. package/dist/core/diagnostics.js.map +1 -0
  99. package/dist/core/event-bus.d.ts +9 -0
  100. package/dist/core/event-bus.d.ts.map +1 -0
  101. package/dist/core/event-bus.js +25 -0
  102. package/dist/core/event-bus.js.map +1 -0
  103. package/dist/core/exec.d.ts +29 -0
  104. package/dist/core/exec.d.ts.map +1 -0
  105. package/dist/core/exec.js +75 -0
  106. package/dist/core/exec.js.map +1 -0
  107. package/dist/core/experimental.d.ts +2 -0
  108. package/dist/core/experimental.d.ts.map +1 -0
  109. package/dist/core/experimental.js +4 -0
  110. package/dist/core/experimental.js.map +1 -0
  111. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  112. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  113. package/dist/core/export-html/ansi-to-html.js +249 -0
  114. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  115. package/dist/core/export-html/index.d.ts +37 -0
  116. package/dist/core/export-html/index.d.ts.map +1 -0
  117. package/dist/core/export-html/index.js +234 -0
  118. package/dist/core/export-html/index.js.map +1 -0
  119. package/dist/core/export-html/template.css +1066 -0
  120. package/dist/core/export-html/template.html +55 -0
  121. package/dist/core/export-html/template.js +1864 -0
  122. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  123. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  124. package/dist/core/export-html/tool-renderer.js +108 -0
  125. package/dist/core/export-html/tool-renderer.js.map +1 -0
  126. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  127. package/dist/core/export-html/vendor/marked.min.js +78 -0
  128. package/dist/core/extensions/index.d.ts +12 -0
  129. package/dist/core/extensions/index.d.ts.map +1 -0
  130. package/dist/core/extensions/index.js +9 -0
  131. package/dist/core/extensions/index.js.map +1 -0
  132. package/dist/core/extensions/loader.d.ts +25 -0
  133. package/dist/core/extensions/loader.d.ts.map +1 -0
  134. package/dist/core/extensions/loader.js +516 -0
  135. package/dist/core/extensions/loader.js.map +1 -0
  136. package/dist/core/extensions/runner.d.ts +180 -0
  137. package/dist/core/extensions/runner.d.ts.map +1 -0
  138. package/dist/core/extensions/runner.js +938 -0
  139. package/dist/core/extensions/runner.js.map +1 -0
  140. package/dist/core/extensions/types.d.ts +1215 -0
  141. package/dist/core/extensions/types.d.ts.map +1 -0
  142. package/dist/core/extensions/types.js +48 -0
  143. package/dist/core/extensions/types.js.map +1 -0
  144. package/dist/core/extensions/wrapper.d.ts +20 -0
  145. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  146. package/dist/core/extensions/wrapper.js +22 -0
  147. package/dist/core/extensions/wrapper.js.map +1 -0
  148. package/dist/core/footer-data-provider.d.ts +54 -0
  149. package/dist/core/footer-data-provider.d.ts.map +1 -0
  150. package/dist/core/footer-data-provider.js +338 -0
  151. package/dist/core/footer-data-provider.js.map +1 -0
  152. package/dist/core/host-actions.d.ts +107 -0
  153. package/dist/core/host-actions.d.ts.map +1 -0
  154. package/dist/core/host-actions.js +632 -0
  155. package/dist/core/host-actions.js.map +1 -0
  156. package/dist/core/host-interaction.d.ts +35 -0
  157. package/dist/core/host-interaction.d.ts.map +1 -0
  158. package/dist/core/host-interaction.js +2 -0
  159. package/dist/core/host-interaction.js.map +1 -0
  160. package/dist/core/http-dispatcher.d.ts +22 -0
  161. package/dist/core/http-dispatcher.d.ts.map +1 -0
  162. package/dist/core/http-dispatcher.js +64 -0
  163. package/dist/core/http-dispatcher.js.map +1 -0
  164. package/dist/core/index.d.ts +18 -0
  165. package/dist/core/index.d.ts.map +1 -0
  166. package/dist/core/index.js +17 -0
  167. package/dist/core/index.js.map +1 -0
  168. package/dist/core/keybindings.d.ts +373 -0
  169. package/dist/core/keybindings.d.ts.map +1 -0
  170. package/dist/core/keybindings.js +303 -0
  171. package/dist/core/keybindings.js.map +1 -0
  172. package/dist/core/lsp/client.d.ts +119 -0
  173. package/dist/core/lsp/client.d.ts.map +1 -0
  174. package/dist/core/lsp/client.js +711 -0
  175. package/dist/core/lsp/client.js.map +1 -0
  176. package/dist/core/lsp/config.d.ts +96 -0
  177. package/dist/core/lsp/config.d.ts.map +1 -0
  178. package/dist/core/lsp/config.js +206 -0
  179. package/dist/core/lsp/config.js.map +1 -0
  180. package/dist/core/lsp/index.d.ts +6 -0
  181. package/dist/core/lsp/index.d.ts.map +1 -0
  182. package/dist/core/lsp/index.js +6 -0
  183. package/dist/core/lsp/index.js.map +1 -0
  184. package/dist/core/lsp/manager.d.ts +122 -0
  185. package/dist/core/lsp/manager.d.ts.map +1 -0
  186. package/dist/core/lsp/manager.js +1136 -0
  187. package/dist/core/lsp/manager.js.map +1 -0
  188. package/dist/core/lsp/trace.d.ts +26 -0
  189. package/dist/core/lsp/trace.d.ts.map +1 -0
  190. package/dist/core/lsp/trace.js +98 -0
  191. package/dist/core/lsp/trace.js.map +1 -0
  192. package/dist/core/lsp/workspace-edit.d.ts +60 -0
  193. package/dist/core/lsp/workspace-edit.d.ts.map +1 -0
  194. package/dist/core/lsp/workspace-edit.js +71 -0
  195. package/dist/core/lsp/workspace-edit.js.map +1 -0
  196. package/dist/core/mcp/audit.d.ts +39 -0
  197. package/dist/core/mcp/audit.d.ts.map +1 -0
  198. package/dist/core/mcp/audit.js +35 -0
  199. package/dist/core/mcp/audit.js.map +1 -0
  200. package/dist/core/mcp/auth.d.ts +7 -0
  201. package/dist/core/mcp/auth.d.ts.map +1 -0
  202. package/dist/core/mcp/auth.js +56 -0
  203. package/dist/core/mcp/auth.js.map +1 -0
  204. package/dist/core/mcp/client-factory.d.ts +20 -0
  205. package/dist/core/mcp/client-factory.d.ts.map +1 -0
  206. package/dist/core/mcp/client-factory.js +200 -0
  207. package/dist/core/mcp/client-factory.js.map +1 -0
  208. package/dist/core/mcp/config-loader.d.ts +9 -0
  209. package/dist/core/mcp/config-loader.d.ts.map +1 -0
  210. package/dist/core/mcp/config-loader.js +104 -0
  211. package/dist/core/mcp/config-loader.js.map +1 -0
  212. package/dist/core/mcp/config-writer.d.ts +21 -0
  213. package/dist/core/mcp/config-writer.d.ts.map +1 -0
  214. package/dist/core/mcp/config-writer.js +124 -0
  215. package/dist/core/mcp/config-writer.js.map +1 -0
  216. package/dist/core/mcp/config.d.ts +32 -0
  217. package/dist/core/mcp/config.d.ts.map +1 -0
  218. package/dist/core/mcp/config.js +385 -0
  219. package/dist/core/mcp/config.js.map +1 -0
  220. package/dist/core/mcp/direct-tools.d.ts +11 -0
  221. package/dist/core/mcp/direct-tools.d.ts.map +1 -0
  222. package/dist/core/mcp/direct-tools.js +47 -0
  223. package/dist/core/mcp/direct-tools.js.map +1 -0
  224. package/dist/core/mcp/gateway-tool.d.ts +29 -0
  225. package/dist/core/mcp/gateway-tool.d.ts.map +1 -0
  226. package/dist/core/mcp/gateway-tool.js +108 -0
  227. package/dist/core/mcp/gateway-tool.js.map +1 -0
  228. package/dist/core/mcp/index.d.ts +19 -0
  229. package/dist/core/mcp/index.d.ts.map +1 -0
  230. package/dist/core/mcp/index.js +18 -0
  231. package/dist/core/mcp/index.js.map +1 -0
  232. package/dist/core/mcp/manager.d.ts +117 -0
  233. package/dist/core/mcp/manager.d.ts.map +1 -0
  234. package/dist/core/mcp/manager.js +819 -0
  235. package/dist/core/mcp/manager.js.map +1 -0
  236. package/dist/core/mcp/metadata-cache.d.ts +27 -0
  237. package/dist/core/mcp/metadata-cache.d.ts.map +1 -0
  238. package/dist/core/mcp/metadata-cache.js +152 -0
  239. package/dist/core/mcp/metadata-cache.js.map +1 -0
  240. package/dist/core/mcp/oauth-flow.d.ts +94 -0
  241. package/dist/core/mcp/oauth-flow.d.ts.map +1 -0
  242. package/dist/core/mcp/oauth-flow.js +473 -0
  243. package/dist/core/mcp/oauth-flow.js.map +1 -0
  244. package/dist/core/mcp/oauth-provider.d.ts +39 -0
  245. package/dist/core/mcp/oauth-provider.d.ts.map +1 -0
  246. package/dist/core/mcp/oauth-provider.js +149 -0
  247. package/dist/core/mcp/oauth-provider.js.map +1 -0
  248. package/dist/core/mcp/oauth-store.d.ts +27 -0
  249. package/dist/core/mcp/oauth-store.d.ts.map +1 -0
  250. package/dist/core/mcp/oauth-store.js +111 -0
  251. package/dist/core/mcp/oauth-store.js.map +1 -0
  252. package/dist/core/mcp/output-store.d.ts +55 -0
  253. package/dist/core/mcp/output-store.d.ts.map +1 -0
  254. package/dist/core/mcp/output-store.js +206 -0
  255. package/dist/core/mcp/output-store.js.map +1 -0
  256. package/dist/core/mcp/rpc.d.ts +13 -0
  257. package/dist/core/mcp/rpc.d.ts.map +1 -0
  258. package/dist/core/mcp/rpc.js +29 -0
  259. package/dist/core/mcp/rpc.js.map +1 -0
  260. package/dist/core/mcp/safety.d.ts +6 -0
  261. package/dist/core/mcp/safety.d.ts.map +1 -0
  262. package/dist/core/mcp/safety.js +65 -0
  263. package/dist/core/mcp/safety.js.map +1 -0
  264. package/dist/core/mcp/search.d.ts +8 -0
  265. package/dist/core/mcp/search.d.ts.map +1 -0
  266. package/dist/core/mcp/search.js +85 -0
  267. package/dist/core/mcp/search.js.map +1 -0
  268. package/dist/core/mcp/server-supervisor.d.ts +59 -0
  269. package/dist/core/mcp/server-supervisor.d.ts.map +1 -0
  270. package/dist/core/mcp/server-supervisor.js +331 -0
  271. package/dist/core/mcp/server-supervisor.js.map +1 -0
  272. package/dist/core/mcp/types.d.ts +321 -0
  273. package/dist/core/mcp/types.d.ts.map +1 -0
  274. package/dist/core/mcp/types.js +2 -0
  275. package/dist/core/mcp/types.js.map +1 -0
  276. package/dist/core/messages.d.ts +78 -0
  277. package/dist/core/messages.d.ts.map +1 -0
  278. package/dist/core/messages.js +138 -0
  279. package/dist/core/messages.js.map +1 -0
  280. package/dist/core/model-catalog-watcher.d.ts +36 -0
  281. package/dist/core/model-catalog-watcher.d.ts.map +1 -0
  282. package/dist/core/model-catalog-watcher.js +101 -0
  283. package/dist/core/model-catalog-watcher.js.map +1 -0
  284. package/dist/core/model-registry.d.ts +160 -0
  285. package/dist/core/model-registry.d.ts.map +1 -0
  286. package/dist/core/model-registry.js +754 -0
  287. package/dist/core/model-registry.js.map +1 -0
  288. package/dist/core/model-resolver.d.ts +111 -0
  289. package/dist/core/model-resolver.d.ts.map +1 -0
  290. package/dist/core/model-resolver.js +534 -0
  291. package/dist/core/model-resolver.js.map +1 -0
  292. package/dist/core/output-guard.d.ts +7 -0
  293. package/dist/core/output-guard.d.ts.map +1 -0
  294. package/dist/core/output-guard.js +89 -0
  295. package/dist/core/output-guard.js.map +1 -0
  296. package/dist/core/package-manager.d.ts +220 -0
  297. package/dist/core/package-manager.d.ts.map +1 -0
  298. package/dist/core/package-manager.js +2217 -0
  299. package/dist/core/package-manager.js.map +1 -0
  300. package/dist/core/project-trust.d.ts +15 -0
  301. package/dist/core/project-trust.d.ts.map +1 -0
  302. package/dist/core/project-trust.js +58 -0
  303. package/dist/core/project-trust.js.map +1 -0
  304. package/dist/core/prompt-templates.d.ts +53 -0
  305. package/dist/core/prompt-templates.d.ts.map +1 -0
  306. package/dist/core/prompt-templates.js +236 -0
  307. package/dist/core/prompt-templates.js.map +1 -0
  308. package/dist/core/provider-attribution.d.ts +4 -0
  309. package/dist/core/provider-attribution.d.ts.map +1 -0
  310. package/dist/core/provider-attribution.js +81 -0
  311. package/dist/core/provider-attribution.js.map +1 -0
  312. package/dist/core/provider-display-names.d.ts +2 -0
  313. package/dist/core/provider-display-names.d.ts.map +1 -0
  314. package/dist/core/provider-display-names.js +36 -0
  315. package/dist/core/provider-display-names.js.map +1 -0
  316. package/dist/core/remote/iroh/access-grant.d.ts +40 -0
  317. package/dist/core/remote/iroh/access-grant.d.ts.map +1 -0
  318. package/dist/core/remote/iroh/access-grant.js +199 -0
  319. package/dist/core/remote/iroh/access-grant.js.map +1 -0
  320. package/dist/core/remote/iroh/active-stream-registry.d.ts +39 -0
  321. package/dist/core/remote/iroh/active-stream-registry.d.ts.map +1 -0
  322. package/dist/core/remote/iroh/active-stream-registry.js +109 -0
  323. package/dist/core/remote/iroh/active-stream-registry.js.map +1 -0
  324. package/dist/core/remote/iroh/audit.d.ts +67 -0
  325. package/dist/core/remote/iroh/audit.d.ts.map +1 -0
  326. package/dist/core/remote/iroh/audit.js +274 -0
  327. package/dist/core/remote/iroh/audit.js.map +1 -0
  328. package/dist/core/remote/iroh/authorization.d.ts +46 -0
  329. package/dist/core/remote/iroh/authorization.d.ts.map +1 -0
  330. package/dist/core/remote/iroh/authorization.js +327 -0
  331. package/dist/core/remote/iroh/authorization.js.map +1 -0
  332. package/dist/core/remote/iroh/control.d.ts +64 -0
  333. package/dist/core/remote/iroh/control.d.ts.map +1 -0
  334. package/dist/core/remote/iroh/control.js +326 -0
  335. package/dist/core/remote/iroh/control.js.map +1 -0
  336. package/dist/core/remote/iroh/device-log-rpc.d.ts +22 -0
  337. package/dist/core/remote/iroh/device-log-rpc.d.ts.map +1 -0
  338. package/dist/core/remote/iroh/device-log-rpc.js +152 -0
  339. package/dist/core/remote/iroh/device-log-rpc.js.map +1 -0
  340. package/dist/core/remote/iroh/engine.d.ts +148 -0
  341. package/dist/core/remote/iroh/engine.d.ts.map +1 -0
  342. package/dist/core/remote/iroh/engine.js +499 -0
  343. package/dist/core/remote/iroh/engine.js.map +1 -0
  344. package/dist/core/remote/iroh/handshake-reader.d.ts +19 -0
  345. package/dist/core/remote/iroh/handshake-reader.d.ts.map +1 -0
  346. package/dist/core/remote/iroh/handshake-reader.js +91 -0
  347. package/dist/core/remote/iroh/handshake-reader.js.map +1 -0
  348. package/dist/core/remote/iroh/handshake.d.ts +119 -0
  349. package/dist/core/remote/iroh/handshake.d.ts.map +1 -0
  350. package/dist/core/remote/iroh/handshake.js +621 -0
  351. package/dist/core/remote/iroh/handshake.js.map +1 -0
  352. package/dist/core/remote/iroh/host-policy.d.ts +13 -0
  353. package/dist/core/remote/iroh/host-policy.d.ts.map +1 -0
  354. package/dist/core/remote/iroh/host-policy.js +15 -0
  355. package/dist/core/remote/iroh/host-policy.js.map +1 -0
  356. package/dist/core/remote/iroh/index.d.ts +25 -0
  357. package/dist/core/remote/iroh/index.d.ts.map +1 -0
  358. package/dist/core/remote/iroh/index.js +25 -0
  359. package/dist/core/remote/iroh/index.js.map +1 -0
  360. package/dist/core/remote/iroh/metadata.d.ts +28 -0
  361. package/dist/core/remote/iroh/metadata.d.ts.map +1 -0
  362. package/dist/core/remote/iroh/metadata.js +16 -0
  363. package/dist/core/remote/iroh/metadata.js.map +1 -0
  364. package/dist/core/remote/iroh/outbound-filter.d.ts +29 -0
  365. package/dist/core/remote/iroh/outbound-filter.d.ts.map +1 -0
  366. package/dist/core/remote/iroh/outbound-filter.js +692 -0
  367. package/dist/core/remote/iroh/outbound-filter.js.map +1 -0
  368. package/dist/core/remote/iroh/protocol.d.ts +60 -0
  369. package/dist/core/remote/iroh/protocol.d.ts.map +1 -0
  370. package/dist/core/remote/iroh/protocol.js +204 -0
  371. package/dist/core/remote/iroh/protocol.js.map +1 -0
  372. package/dist/core/remote/iroh/push.d.ts +179 -0
  373. package/dist/core/remote/iroh/push.d.ts.map +1 -0
  374. package/dist/core/remote/iroh/push.js +662 -0
  375. package/dist/core/remote/iroh/push.js.map +1 -0
  376. package/dist/core/remote/iroh/qr.d.ts +12 -0
  377. package/dist/core/remote/iroh/qr.d.ts.map +1 -0
  378. package/dist/core/remote/iroh/qr.js +27 -0
  379. package/dist/core/remote/iroh/qr.js.map +1 -0
  380. package/dist/core/remote/iroh/rpc-command-filter.d.ts +47 -0
  381. package/dist/core/remote/iroh/rpc-command-filter.d.ts.map +1 -0
  382. package/dist/core/remote/iroh/rpc-command-filter.js +188 -0
  383. package/dist/core/remote/iroh/rpc-command-filter.js.map +1 -0
  384. package/dist/core/remote/iroh/rpc-transport.d.ts +21 -0
  385. package/dist/core/remote/iroh/rpc-transport.d.ts.map +1 -0
  386. package/dist/core/remote/iroh/rpc-transport.js +106 -0
  387. package/dist/core/remote/iroh/rpc-transport.js.map +1 -0
  388. package/dist/core/remote/iroh/state-manager.d.ts +141 -0
  389. package/dist/core/remote/iroh/state-manager.d.ts.map +1 -0
  390. package/dist/core/remote/iroh/state-manager.js +744 -0
  391. package/dist/core/remote/iroh/state-manager.js.map +1 -0
  392. package/dist/core/remote/iroh/state.d.ts +141 -0
  393. package/dist/core/remote/iroh/state.d.ts.map +1 -0
  394. package/dist/core/remote/iroh/state.js +433 -0
  395. package/dist/core/remote/iroh/state.js.map +1 -0
  396. package/dist/core/remote/iroh/ticket.d.ts +46 -0
  397. package/dist/core/remote/iroh/ticket.d.ts.map +1 -0
  398. package/dist/core/remote/iroh/ticket.js +267 -0
  399. package/dist/core/remote/iroh/ticket.js.map +1 -0
  400. package/dist/core/remote/iroh/transcript-text.d.ts +8 -0
  401. package/dist/core/remote/iroh/transcript-text.d.ts.map +1 -0
  402. package/dist/core/remote/iroh/transcript-text.js +26 -0
  403. package/dist/core/remote/iroh/transcript-text.js.map +1 -0
  404. package/dist/core/remote/iroh/workspace-rpc.d.ts +31 -0
  405. package/dist/core/remote/iroh/workspace-rpc.d.ts.map +1 -0
  406. package/dist/core/remote/iroh/workspace-rpc.js +73 -0
  407. package/dist/core/remote/iroh/workspace-rpc.js.map +1 -0
  408. package/dist/core/remote/iroh/workspace.d.ts +16 -0
  409. package/dist/core/remote/iroh/workspace.d.ts.map +1 -0
  410. package/dist/core/remote/iroh/workspace.js +104 -0
  411. package/dist/core/remote/iroh/workspace.js.map +1 -0
  412. package/dist/core/remote/iroh/worktree-rpc.d.ts +83 -0
  413. package/dist/core/remote/iroh/worktree-rpc.d.ts.map +1 -0
  414. package/dist/core/remote/iroh/worktree-rpc.js +148 -0
  415. package/dist/core/remote/iroh/worktree-rpc.js.map +1 -0
  416. package/dist/core/resolve-config-value.d.ts +30 -0
  417. package/dist/core/resolve-config-value.d.ts.map +1 -0
  418. package/dist/core/resolve-config-value.js +245 -0
  419. package/dist/core/resolve-config-value.js.map +1 -0
  420. package/dist/core/resource-loader.d.ts +214 -0
  421. package/dist/core/resource-loader.d.ts.map +1 -0
  422. package/dist/core/resource-loader.js +824 -0
  423. package/dist/core/resource-loader.js.map +1 -0
  424. package/dist/core/review.d.ts +318 -0
  425. package/dist/core/review.d.ts.map +1 -0
  426. package/dist/core/review.js +1271 -0
  427. package/dist/core/review.js.map +1 -0
  428. package/dist/core/rpc/duplex-write-gate.d.ts +29 -0
  429. package/dist/core/rpc/duplex-write-gate.d.ts.map +1 -0
  430. package/dist/core/rpc/duplex-write-gate.js +124 -0
  431. package/dist/core/rpc/duplex-write-gate.js.map +1 -0
  432. package/dist/core/rpc/index.d.ts +6 -0
  433. package/dist/core/rpc/index.d.ts.map +1 -0
  434. package/dist/core/rpc/index.js +5 -0
  435. package/dist/core/rpc/index.js.map +1 -0
  436. package/dist/core/rpc/iroh-transport.d.ts +58 -0
  437. package/dist/core/rpc/iroh-transport.d.ts.map +1 -0
  438. package/dist/core/rpc/iroh-transport.js +278 -0
  439. package/dist/core/rpc/iroh-transport.js.map +1 -0
  440. package/dist/core/rpc/jsonl.d.ts +17 -0
  441. package/dist/core/rpc/jsonl.d.ts.map +1 -0
  442. package/dist/core/rpc/jsonl.js +49 -0
  443. package/dist/core/rpc/jsonl.js.map +1 -0
  444. package/dist/core/rpc/loopback-transport.d.ts +14 -0
  445. package/dist/core/rpc/loopback-transport.d.ts.map +1 -0
  446. package/dist/core/rpc/loopback-transport.js +120 -0
  447. package/dist/core/rpc/loopback-transport.js.map +1 -0
  448. package/dist/core/rpc/transcript.d.ts +37 -0
  449. package/dist/core/rpc/transcript.d.ts.map +1 -0
  450. package/dist/core/rpc/transcript.js +624 -0
  451. package/dist/core/rpc/transcript.js.map +1 -0
  452. package/dist/core/rpc/transport.d.ts +41 -0
  453. package/dist/core/rpc/transport.d.ts.map +1 -0
  454. package/dist/core/rpc/transport.js +155 -0
  455. package/dist/core/rpc/transport.js.map +1 -0
  456. package/dist/core/rpc/types.d.ts +1254 -0
  457. package/dist/core/rpc/types.d.ts.map +1 -0
  458. package/dist/core/rpc/types.js +8 -0
  459. package/dist/core/rpc/types.js.map +1 -0
  460. package/dist/core/rpc/ui-action-args.d.ts +3 -0
  461. package/dist/core/rpc/ui-action-args.d.ts.map +1 -0
  462. package/dist/core/rpc/ui-action-args.js +66 -0
  463. package/dist/core/rpc/ui-action-args.js.map +1 -0
  464. package/dist/core/rpc/ui-actions.d.ts +43 -0
  465. package/dist/core/rpc/ui-actions.d.ts.map +1 -0
  466. package/dist/core/rpc/ui-actions.js +362 -0
  467. package/dist/core/rpc/ui-actions.js.map +1 -0
  468. package/dist/core/sdk.d.ts +138 -0
  469. package/dist/core/sdk.d.ts.map +1 -0
  470. package/dist/core/sdk.js +324 -0
  471. package/dist/core/sdk.js.map +1 -0
  472. package/dist/core/session-cwd.d.ts +19 -0
  473. package/dist/core/session-cwd.d.ts.map +1 -0
  474. package/dist/core/session-cwd.js +38 -0
  475. package/dist/core/session-cwd.js.map +1 -0
  476. package/dist/core/session-manager.d.ts +346 -0
  477. package/dist/core/session-manager.d.ts.map +1 -0
  478. package/dist/core/session-manager.js +1280 -0
  479. package/dist/core/session-manager.js.map +1 -0
  480. package/dist/core/settings-manager.d.ts +359 -0
  481. package/dist/core/settings-manager.d.ts.map +1 -0
  482. package/dist/core/settings-manager.js +1277 -0
  483. package/dist/core/settings-manager.js.map +1 -0
  484. package/dist/core/skills.d.ts +60 -0
  485. package/dist/core/skills.d.ts.map +1 -0
  486. package/dist/core/skills.js +387 -0
  487. package/dist/core/skills.js.map +1 -0
  488. package/dist/core/slash-commands.d.ts +14 -0
  489. package/dist/core/slash-commands.d.ts.map +1 -0
  490. package/dist/core/slash-commands.js +51 -0
  491. package/dist/core/slash-commands.js.map +1 -0
  492. package/dist/core/source-info.d.ts +18 -0
  493. package/dist/core/source-info.d.ts.map +1 -0
  494. package/dist/core/source-info.js +19 -0
  495. package/dist/core/source-info.js.map +1 -0
  496. package/dist/core/subagents/delegation-scope.d.ts +47 -0
  497. package/dist/core/subagents/delegation-scope.d.ts.map +1 -0
  498. package/dist/core/subagents/delegation-scope.js +134 -0
  499. package/dist/core/subagents/delegation-scope.js.map +1 -0
  500. package/dist/core/subagents/index.d.ts +46 -0
  501. package/dist/core/subagents/index.d.ts.map +1 -0
  502. package/dist/core/subagents/index.js +369 -0
  503. package/dist/core/subagents/index.js.map +1 -0
  504. package/dist/core/subagents/manager.d.ts +183 -0
  505. package/dist/core/subagents/manager.d.ts.map +1 -0
  506. package/dist/core/subagents/manager.js +820 -0
  507. package/dist/core/subagents/manager.js.map +1 -0
  508. package/dist/core/system-prompt.d.ts +28 -0
  509. package/dist/core/system-prompt.d.ts.map +1 -0
  510. package/dist/core/system-prompt.js +180 -0
  511. package/dist/core/system-prompt.js.map +1 -0
  512. package/dist/core/telemetry.d.ts +3 -0
  513. package/dist/core/telemetry.d.ts.map +1 -0
  514. package/dist/core/telemetry.js +9 -0
  515. package/dist/core/telemetry.js.map +1 -0
  516. package/dist/core/theme/dark.json +86 -0
  517. package/dist/core/theme/discovery.d.ts +48 -0
  518. package/dist/core/theme/discovery.d.ts.map +1 -0
  519. package/dist/core/theme/discovery.js +239 -0
  520. package/dist/core/theme/discovery.js.map +1 -0
  521. package/dist/core/theme/index.d.ts +6 -0
  522. package/dist/core/theme/index.d.ts.map +1 -0
  523. package/dist/core/theme/index.js +5 -0
  524. package/dist/core/theme/index.js.map +1 -0
  525. package/dist/core/theme/light.json +85 -0
  526. package/dist/core/theme/runtime.d.ts +55 -0
  527. package/dist/core/theme/runtime.d.ts.map +1 -0
  528. package/dist/core/theme/runtime.js +555 -0
  529. package/dist/core/theme/runtime.js.map +1 -0
  530. package/dist/core/theme/theme-schema.json +335 -0
  531. package/dist/core/theme/theme-service.d.ts +37 -0
  532. package/dist/core/theme/theme-service.d.ts.map +1 -0
  533. package/dist/core/theme/theme-service.js +222 -0
  534. package/dist/core/theme/theme-service.js.map +1 -0
  535. package/dist/core/theme/theme.d.ts +100 -0
  536. package/dist/core/theme/theme.d.ts.map +1 -0
  537. package/dist/core/theme/theme.js +243 -0
  538. package/dist/core/theme/theme.js.map +1 -0
  539. package/dist/core/theme/tokens.d.ts +20 -0
  540. package/dist/core/theme/tokens.d.ts.map +1 -0
  541. package/dist/core/theme/tokens.js +178 -0
  542. package/dist/core/theme/tokens.js.map +1 -0
  543. package/dist/core/theme/types.d.ts +21 -0
  544. package/dist/core/theme/types.d.ts.map +1 -0
  545. package/dist/core/theme/types.js +2 -0
  546. package/dist/core/theme/types.js.map +1 -0
  547. package/dist/core/timings.d.ts +8 -0
  548. package/dist/core/timings.d.ts.map +1 -0
  549. package/dist/core/timings.js +31 -0
  550. package/dist/core/timings.js.map +1 -0
  551. package/dist/core/tools/bash.d.ts +68 -0
  552. package/dist/core/tools/bash.d.ts.map +1 -0
  553. package/dist/core/tools/bash.js +345 -0
  554. package/dist/core/tools/bash.js.map +1 -0
  555. package/dist/core/tools/diagnostics-provider.d.ts +12 -0
  556. package/dist/core/tools/diagnostics-provider.d.ts.map +1 -0
  557. package/dist/core/tools/diagnostics-provider.js +2 -0
  558. package/dist/core/tools/diagnostics-provider.js.map +1 -0
  559. package/dist/core/tools/edit-diff.d.ts +77 -0
  560. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  561. package/dist/core/tools/edit-diff.js +506 -0
  562. package/dist/core/tools/edit-diff.js.map +1 -0
  563. package/dist/core/tools/edit.d.ts +56 -0
  564. package/dist/core/tools/edit.d.ts.map +1 -0
  565. package/dist/core/tools/edit.js +300 -0
  566. package/dist/core/tools/edit.js.map +1 -0
  567. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  568. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  569. package/dist/core/tools/file-mutation-queue.js +52 -0
  570. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  571. package/dist/core/tools/find.d.ts +35 -0
  572. package/dist/core/tools/find.d.ts.map +1 -0
  573. package/dist/core/tools/find.js +337 -0
  574. package/dist/core/tools/find.js.map +1 -0
  575. package/dist/core/tools/grep.d.ts +37 -0
  576. package/dist/core/tools/grep.d.ts.map +1 -0
  577. package/dist/core/tools/grep.js +305 -0
  578. package/dist/core/tools/grep.js.map +1 -0
  579. package/dist/core/tools/index.d.ts +56 -0
  580. package/dist/core/tools/index.d.ts.map +1 -0
  581. package/dist/core/tools/index.js +174 -0
  582. package/dist/core/tools/index.js.map +1 -0
  583. package/dist/core/tools/ls.d.ts +37 -0
  584. package/dist/core/tools/ls.d.ts.map +1 -0
  585. package/dist/core/tools/ls.js +167 -0
  586. package/dist/core/tools/ls.js.map +1 -0
  587. package/dist/core/tools/lsp.d.ts +59 -0
  588. package/dist/core/tools/lsp.d.ts.map +1 -0
  589. package/dist/core/tools/lsp.js +157 -0
  590. package/dist/core/tools/lsp.js.map +1 -0
  591. package/dist/core/tools/output-accumulator.d.ts +52 -0
  592. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  593. package/dist/core/tools/output-accumulator.js +184 -0
  594. package/dist/core/tools/output-accumulator.js.map +1 -0
  595. package/dist/core/tools/path-utils.d.ts +10 -0
  596. package/dist/core/tools/path-utils.d.ts.map +1 -0
  597. package/dist/core/tools/path-utils.js +99 -0
  598. package/dist/core/tools/path-utils.js.map +1 -0
  599. package/dist/core/tools/read.d.ts +35 -0
  600. package/dist/core/tools/read.d.ts.map +1 -0
  601. package/dist/core/tools/read.js +292 -0
  602. package/dist/core/tools/read.js.map +1 -0
  603. package/dist/core/tools/render-utils.d.ts +26 -0
  604. package/dist/core/tools/render-utils.d.ts.map +1 -0
  605. package/dist/core/tools/render-utils.js +69 -0
  606. package/dist/core/tools/render-utils.js.map +1 -0
  607. package/dist/core/tools/subagent.d.ts +219 -0
  608. package/dist/core/tools/subagent.d.ts.map +1 -0
  609. package/dist/core/tools/subagent.js +1445 -0
  610. package/dist/core/tools/subagent.js.map +1 -0
  611. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  612. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  613. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  614. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  615. package/dist/core/tools/truncate.d.ts +70 -0
  616. package/dist/core/tools/truncate.d.ts.map +1 -0
  617. package/dist/core/tools/truncate.js +215 -0
  618. package/dist/core/tools/truncate.js.map +1 -0
  619. package/dist/core/tools/web-search.d.ts +69 -0
  620. package/dist/core/tools/web-search.d.ts.map +1 -0
  621. package/dist/core/tools/web-search.js +634 -0
  622. package/dist/core/tools/web-search.js.map +1 -0
  623. package/dist/core/tools/write.d.ts +33 -0
  624. package/dist/core/tools/write.d.ts.map +1 -0
  625. package/dist/core/tools/write.js +210 -0
  626. package/dist/core/tools/write.js.map +1 -0
  627. package/dist/core/trust-manager.d.ts +36 -0
  628. package/dist/core/trust-manager.d.ts.map +1 -0
  629. package/dist/core/trust-manager.js +220 -0
  630. package/dist/core/trust-manager.js.map +1 -0
  631. package/dist/daemon/cli.d.ts +8 -0
  632. package/dist/daemon/cli.d.ts.map +1 -0
  633. package/dist/daemon/cli.js +468 -0
  634. package/dist/daemon/cli.js.map +1 -0
  635. package/dist/daemon/control-client.d.ts +60 -0
  636. package/dist/daemon/control-client.d.ts.map +1 -0
  637. package/dist/daemon/control-client.js +411 -0
  638. package/dist/daemon/control-client.js.map +1 -0
  639. package/dist/daemon/control-protocol.d.ts +507 -0
  640. package/dist/daemon/control-protocol.d.ts.map +1 -0
  641. package/dist/daemon/control-protocol.js +395 -0
  642. package/dist/daemon/control-protocol.js.map +1 -0
  643. package/dist/daemon/control-server.d.ts +77 -0
  644. package/dist/daemon/control-server.d.ts.map +1 -0
  645. package/dist/daemon/control-server.js +327 -0
  646. package/dist/daemon/control-server.js.map +1 -0
  647. package/dist/daemon/conversation-commands.d.ts +176 -0
  648. package/dist/daemon/conversation-commands.d.ts.map +1 -0
  649. package/dist/daemon/conversation-commands.js +1268 -0
  650. package/dist/daemon/conversation-commands.js.map +1 -0
  651. package/dist/daemon/daemon-lock.d.ts +27 -0
  652. package/dist/daemon/daemon-lock.d.ts.map +1 -0
  653. package/dist/daemon/daemon-lock.js +238 -0
  654. package/dist/daemon/daemon-lock.js.map +1 -0
  655. package/dist/daemon/handshake-responses.d.ts +47 -0
  656. package/dist/daemon/handshake-responses.d.ts.map +1 -0
  657. package/dist/daemon/handshake-responses.js +113 -0
  658. package/dist/daemon/handshake-responses.js.map +1 -0
  659. package/dist/daemon/integrated-runtimes.d.ts +137 -0
  660. package/dist/daemon/integrated-runtimes.d.ts.map +1 -0
  661. package/dist/daemon/integrated-runtimes.js +763 -0
  662. package/dist/daemon/integrated-runtimes.js.map +1 -0
  663. package/dist/daemon/iroh-native.d.ts +76 -0
  664. package/dist/daemon/iroh-native.d.ts.map +1 -0
  665. package/dist/daemon/iroh-native.js +18 -0
  666. package/dist/daemon/iroh-native.js.map +1 -0
  667. package/dist/daemon/iroh-resource-guard.d.ts +57 -0
  668. package/dist/daemon/iroh-resource-guard.d.ts.map +1 -0
  669. package/dist/daemon/iroh-resource-guard.js +134 -0
  670. package/dist/daemon/iroh-resource-guard.js.map +1 -0
  671. package/dist/daemon/iroh-service.d.ts +51 -0
  672. package/dist/daemon/iroh-service.d.ts.map +1 -0
  673. package/dist/daemon/iroh-service.js +2604 -0
  674. package/dist/daemon/iroh-service.js.map +1 -0
  675. package/dist/daemon/keep-awake.d.ts +62 -0
  676. package/dist/daemon/keep-awake.d.ts.map +1 -0
  677. package/dist/daemon/keep-awake.js +190 -0
  678. package/dist/daemon/keep-awake.js.map +1 -0
  679. package/dist/daemon/lease-broker.d.ts +139 -0
  680. package/dist/daemon/lease-broker.d.ts.map +1 -0
  681. package/dist/daemon/lease-broker.js +504 -0
  682. package/dist/daemon/lease-broker.js.map +1 -0
  683. package/dist/daemon/log.d.ts +16 -0
  684. package/dist/daemon/log.d.ts.map +1 -0
  685. package/dist/daemon/log.js +40 -0
  686. package/dist/daemon/log.js.map +1 -0
  687. package/dist/daemon/main.d.ts +70 -0
  688. package/dist/daemon/main.d.ts.map +1 -0
  689. package/dist/daemon/main.js +781 -0
  690. package/dist/daemon/main.js.map +1 -0
  691. package/dist/daemon/paths.d.ts +32 -0
  692. package/dist/daemon/paths.d.ts.map +1 -0
  693. package/dist/daemon/paths.js +208 -0
  694. package/dist/daemon/paths.js.map +1 -0
  695. package/dist/daemon/process-identity.d.ts +58 -0
  696. package/dist/daemon/process-identity.d.ts.map +1 -0
  697. package/dist/daemon/process-identity.js +185 -0
  698. package/dist/daemon/process-identity.js.map +1 -0
  699. package/dist/daemon/relay-stream.d.ts +89 -0
  700. package/dist/daemon/relay-stream.d.ts.map +1 -0
  701. package/dist/daemon/relay-stream.js +202 -0
  702. package/dist/daemon/relay-stream.js.map +1 -0
  703. package/dist/daemon/remote-cli.d.ts +7 -0
  704. package/dist/daemon/remote-cli.d.ts.map +1 -0
  705. package/dist/daemon/remote-cli.js +774 -0
  706. package/dist/daemon/remote-cli.js.map +1 -0
  707. package/dist/daemon/service-install.d.ts +43 -0
  708. package/dist/daemon/service-install.d.ts.map +1 -0
  709. package/dist/daemon/service-install.js +198 -0
  710. package/dist/daemon/service-install.js.map +1 -0
  711. package/dist/daemon/session-target.d.ts +62 -0
  712. package/dist/daemon/session-target.d.ts.map +1 -0
  713. package/dist/daemon/session-target.js +66 -0
  714. package/dist/daemon/session-target.js.map +1 -0
  715. package/dist/daemon/spawn.d.ts +53 -0
  716. package/dist/daemon/spawn.d.ts.map +1 -0
  717. package/dist/daemon/spawn.js +205 -0
  718. package/dist/daemon/spawn.js.map +1 -0
  719. package/dist/daemon/state.d.ts +145 -0
  720. package/dist/daemon/state.d.ts.map +1 -0
  721. package/dist/daemon/state.js +454 -0
  722. package/dist/daemon/state.js.map +1 -0
  723. package/dist/daemon/theme-push.d.ts +23 -0
  724. package/dist/daemon/theme-push.d.ts.map +1 -0
  725. package/dist/daemon/theme-push.js +30 -0
  726. package/dist/daemon/theme-push.js.map +1 -0
  727. package/dist/daemon/viewer-feed.d.ts +42 -0
  728. package/dist/daemon/viewer-feed.d.ts.map +1 -0
  729. package/dist/daemon/viewer-feed.js +138 -0
  730. package/dist/daemon/viewer-feed.js.map +1 -0
  731. package/dist/daemon/workspace-directory.d.ts +35 -0
  732. package/dist/daemon/workspace-directory.d.ts.map +1 -0
  733. package/dist/daemon/workspace-directory.js +105 -0
  734. package/dist/daemon/workspace-directory.js.map +1 -0
  735. package/dist/daemon/workspace-streams.d.ts +70 -0
  736. package/dist/daemon/workspace-streams.d.ts.map +1 -0
  737. package/dist/daemon/workspace-streams.js +289 -0
  738. package/dist/daemon/workspace-streams.js.map +1 -0
  739. package/dist/daemon/worktree-manager.d.ts +219 -0
  740. package/dist/daemon/worktree-manager.d.ts.map +1 -0
  741. package/dist/daemon/worktree-manager.js +1204 -0
  742. package/dist/daemon/worktree-manager.js.map +1 -0
  743. package/dist/index.d.ts +44 -0
  744. package/dist/index.d.ts.map +1 -0
  745. package/dist/index.js +57 -0
  746. package/dist/index.js.map +1 -0
  747. package/dist/main.d.ts +12 -0
  748. package/dist/main.d.ts.map +1 -0
  749. package/dist/main.js +773 -0
  750. package/dist/main.js.map +1 -0
  751. package/dist/mcp-cli.d.ts +6 -0
  752. package/dist/mcp-cli.d.ts.map +1 -0
  753. package/dist/mcp-cli.js +347 -0
  754. package/dist/mcp-cli.js.map +1 -0
  755. package/dist/migrations.d.ts +33 -0
  756. package/dist/migrations.d.ts.map +1 -0
  757. package/dist/migrations.js +281 -0
  758. package/dist/migrations.js.map +1 -0
  759. package/dist/modes/index.d.ts +13 -0
  760. package/dist/modes/index.d.ts.map +1 -0
  761. package/dist/modes/index.js +12 -0
  762. package/dist/modes/index.js.map +1 -0
  763. package/dist/modes/interactive/components/armin.d.ts +34 -0
  764. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  765. package/dist/modes/interactive/components/armin.js +333 -0
  766. package/dist/modes/interactive/components/armin.js.map +1 -0
  767. package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  768. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  769. package/dist/modes/interactive/components/assistant-message.js +129 -0
  770. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  771. package/dist/modes/interactive/components/bash-execution.d.ts +39 -0
  772. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  773. package/dist/modes/interactive/components/bash-execution.js +212 -0
  774. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  775. package/dist/modes/interactive/components/bordered-loader.d.ts +17 -0
  776. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  777. package/dist/modes/interactive/components/bordered-loader.js +57 -0
  778. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  779. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  780. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  781. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  782. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  783. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  784. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  785. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  786. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  787. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  788. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  789. package/dist/modes/interactive/components/config-selector.js +510 -0
  790. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  791. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  792. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  793. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  794. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  795. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  796. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  797. package/dist/modes/interactive/components/custom-editor.js +70 -0
  798. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  799. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  800. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  801. package/dist/modes/interactive/components/custom-message.js +76 -0
  802. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  803. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  804. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  805. package/dist/modes/interactive/components/daxnuts.js +140 -0
  806. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  807. package/dist/modes/interactive/components/diff.d.ts +12 -0
  808. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  809. package/dist/modes/interactive/components/diff.js +133 -0
  810. package/dist/modes/interactive/components/diff.js.map +1 -0
  811. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  812. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  813. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  814. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  815. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  816. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  817. package/dist/modes/interactive/components/extension-editor.js +116 -0
  818. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  819. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  820. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  821. package/dist/modes/interactive/components/extension-input.js +61 -0
  822. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  823. package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
  824. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  825. package/dist/modes/interactive/components/extension-selector.js +98 -0
  826. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  827. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  828. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  829. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  830. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  831. package/dist/modes/interactive/components/footer.d.ts +27 -0
  832. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  833. package/dist/modes/interactive/components/footer.js +180 -0
  834. package/dist/modes/interactive/components/footer.js.map +1 -0
  835. package/dist/modes/interactive/components/hotkeys.d.ts +24 -0
  836. package/dist/modes/interactive/components/hotkeys.d.ts.map +1 -0
  837. package/dist/modes/interactive/components/hotkeys.js +97 -0
  838. package/dist/modes/interactive/components/hotkeys.js.map +1 -0
  839. package/dist/modes/interactive/components/index.d.ts +35 -0
  840. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  841. package/dist/modes/interactive/components/index.js +36 -0
  842. package/dist/modes/interactive/components/index.js.map +1 -0
  843. package/dist/modes/interactive/components/keybinding-hints.d.ts +19 -0
  844. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  845. package/dist/modes/interactive/components/keybinding-hints.js +48 -0
  846. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  847. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  848. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  849. package/dist/modes/interactive/components/login-dialog.js +179 -0
  850. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  851. package/dist/modes/interactive/components/logo.d.ts +25 -0
  852. package/dist/modes/interactive/components/logo.d.ts.map +1 -0
  853. package/dist/modes/interactive/components/logo.js +89 -0
  854. package/dist/modes/interactive/components/logo.js.map +1 -0
  855. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  856. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  857. package/dist/modes/interactive/components/model-selector.js +278 -0
  858. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  859. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  860. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  861. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  862. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  863. package/dist/modes/interactive/components/remote-control-center.d.ts +110 -0
  864. package/dist/modes/interactive/components/remote-control-center.d.ts.map +1 -0
  865. package/dist/modes/interactive/components/remote-control-center.js +1217 -0
  866. package/dist/modes/interactive/components/remote-control-center.js.map +1 -0
  867. package/dist/modes/interactive/components/review-tools-selector.d.ts +24 -0
  868. package/dist/modes/interactive/components/review-tools-selector.d.ts.map +1 -0
  869. package/dist/modes/interactive/components/review-tools-selector.js +93 -0
  870. package/dist/modes/interactive/components/review-tools-selector.js.map +1 -0
  871. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  872. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  873. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  874. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  875. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  876. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  877. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  878. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  879. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  880. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  881. package/dist/modes/interactive/components/session-selector.js +856 -0
  882. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  883. package/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  884. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  885. package/dist/modes/interactive/components/settings-selector.js +484 -0
  886. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  887. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  888. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  889. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  890. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  891. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  892. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  893. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  894. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  895. package/dist/modes/interactive/components/streaming-render-coalescer.d.ts +29 -0
  896. package/dist/modes/interactive/components/streaming-render-coalescer.d.ts.map +1 -0
  897. package/dist/modes/interactive/components/streaming-render-coalescer.js +98 -0
  898. package/dist/modes/interactive/components/streaming-render-coalescer.js.map +1 -0
  899. package/dist/modes/interactive/components/subagent-inspector.d.ts +32 -0
  900. package/dist/modes/interactive/components/subagent-inspector.d.ts.map +1 -0
  901. package/dist/modes/interactive/components/subagent-inspector.js +439 -0
  902. package/dist/modes/interactive/components/subagent-inspector.js.map +1 -0
  903. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  904. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  905. package/dist/modes/interactive/components/theme-selector.js +50 -0
  906. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  907. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  908. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  909. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  910. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  911. package/dist/modes/interactive/components/tool-execution.d.ts +83 -0
  912. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  913. package/dist/modes/interactive/components/tool-execution.js +421 -0
  914. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  915. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  916. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  917. package/dist/modes/interactive/components/tree-selector.js +1208 -0
  918. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  919. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  920. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  921. package/dist/modes/interactive/components/trust-selector.js +91 -0
  922. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  923. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  924. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  925. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  926. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  927. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  928. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  929. package/dist/modes/interactive/components/user-message.js +42 -0
  930. package/dist/modes/interactive/components/user-message.js.map +1 -0
  931. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  932. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  933. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  934. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  935. package/dist/modes/interactive/components/volt-announcement.d.ts +5 -0
  936. package/dist/modes/interactive/components/volt-announcement.d.ts.map +1 -0
  937. package/dist/modes/interactive/components/volt-announcement.js +15 -0
  938. package/dist/modes/interactive/components/volt-announcement.js.map +1 -0
  939. package/dist/modes/interactive/daemon-attach.d.ts +154 -0
  940. package/dist/modes/interactive/daemon-attach.d.ts.map +1 -0
  941. package/dist/modes/interactive/daemon-attach.js +552 -0
  942. package/dist/modes/interactive/daemon-attach.js.map +1 -0
  943. package/dist/modes/interactive/drain-viewer.d.ts +31 -0
  944. package/dist/modes/interactive/drain-viewer.d.ts.map +1 -0
  945. package/dist/modes/interactive/drain-viewer.js +166 -0
  946. package/dist/modes/interactive/drain-viewer.js.map +1 -0
  947. package/dist/modes/interactive/interactive-mode.d.ts +502 -0
  948. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  949. package/dist/modes/interactive/interactive-mode.js +7007 -0
  950. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  951. package/dist/modes/interactive/prompt-image-attachments.d.ts +34 -0
  952. package/dist/modes/interactive/prompt-image-attachments.d.ts.map +1 -0
  953. package/dist/modes/interactive/prompt-image-attachments.js +120 -0
  954. package/dist/modes/interactive/prompt-image-attachments.js.map +1 -0
  955. package/dist/modes/interactive/relay-stream-adapter.d.ts +19 -0
  956. package/dist/modes/interactive/relay-stream-adapter.d.ts.map +1 -0
  957. package/dist/modes/interactive/relay-stream-adapter.js +107 -0
  958. package/dist/modes/interactive/relay-stream-adapter.js.map +1 -0
  959. package/dist/modes/print-mode.d.ts +28 -0
  960. package/dist/modes/print-mode.d.ts.map +1 -0
  961. package/dist/modes/print-mode.js +132 -0
  962. package/dist/modes/print-mode.js.map +1 -0
  963. package/dist/modes/rpc/in-process-rpc-client.d.ts +31 -0
  964. package/dist/modes/rpc/in-process-rpc-client.d.ts.map +1 -0
  965. package/dist/modes/rpc/in-process-rpc-client.js +63 -0
  966. package/dist/modes/rpc/in-process-rpc-client.js.map +1 -0
  967. package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts +61 -0
  968. package/dist/modes/rpc/iroh-remote-agent-runtime.d.ts.map +1 -0
  969. package/dist/modes/rpc/iroh-remote-agent-runtime.js +155 -0
  970. package/dist/modes/rpc/iroh-remote-agent-runtime.js.map +1 -0
  971. package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts +69 -0
  972. package/dist/modes/rpc/iroh-remote-rpc-mode.d.ts.map +1 -0
  973. package/dist/modes/rpc/iroh-remote-rpc-mode.js +1223 -0
  974. package/dist/modes/rpc/iroh-remote-rpc-mode.js.map +1 -0
  975. package/dist/modes/rpc/jsonl.d.ts +2 -0
  976. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  977. package/dist/modes/rpc/jsonl.js +2 -0
  978. package/dist/modes/rpc/jsonl.js.map +1 -0
  979. package/dist/modes/rpc/rpc-client-base.d.ts +209 -0
  980. package/dist/modes/rpc/rpc-client-base.d.ts.map +1 -0
  981. package/dist/modes/rpc/rpc-client-base.js +530 -0
  982. package/dist/modes/rpc/rpc-client-base.js.map +1 -0
  983. package/dist/modes/rpc/rpc-client.d.ts +50 -0
  984. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  985. package/dist/modes/rpc/rpc-client.js +190 -0
  986. package/dist/modes/rpc/rpc-client.js.map +1 -0
  987. package/dist/modes/rpc/rpc-command-dispatcher.d.ts +43 -0
  988. package/dist/modes/rpc/rpc-command-dispatcher.d.ts.map +1 -0
  989. package/dist/modes/rpc/rpc-command-dispatcher.js +613 -0
  990. package/dist/modes/rpc/rpc-command-dispatcher.js.map +1 -0
  991. package/dist/modes/rpc/rpc-command-validation.d.ts +2 -0
  992. package/dist/modes/rpc/rpc-command-validation.d.ts.map +1 -0
  993. package/dist/modes/rpc/rpc-command-validation.js +207 -0
  994. package/dist/modes/rpc/rpc-command-validation.js.map +1 -0
  995. package/dist/modes/rpc/rpc-mode.d.ts +48 -0
  996. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  997. package/dist/modes/rpc/rpc-mode.js +1089 -0
  998. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  999. package/dist/modes/rpc/rpc-transport-client.d.ts +26 -0
  1000. package/dist/modes/rpc/rpc-transport-client.d.ts.map +1 -0
  1001. package/dist/modes/rpc/rpc-transport-client.js +76 -0
  1002. package/dist/modes/rpc/rpc-transport-client.js.map +1 -0
  1003. package/dist/modes/rpc/rpc-types.d.ts +2 -0
  1004. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  1005. package/dist/modes/rpc/rpc-types.js +2 -0
  1006. package/dist/modes/rpc/rpc-types.js.map +1 -0
  1007. package/dist/package-manager-cli.d.ts +28 -0
  1008. package/dist/package-manager-cli.d.ts.map +1 -0
  1009. package/dist/package-manager-cli.js +667 -0
  1010. package/dist/package-manager-cli.js.map +1 -0
  1011. package/dist/remote/integrated-runtime-retention.d.ts +17 -0
  1012. package/dist/remote/integrated-runtime-retention.d.ts.map +1 -0
  1013. package/dist/remote/integrated-runtime-retention.js +62 -0
  1014. package/dist/remote/integrated-runtime-retention.js.map +1 -0
  1015. package/dist/remote/iroh-native-adapter.cjs +19 -0
  1016. package/dist/sea/cli.d.ts +4 -0
  1017. package/dist/sea/cli.d.ts.map +1 -0
  1018. package/dist/sea/cli.js +4 -0
  1019. package/dist/sea/cli.js.map +1 -0
  1020. package/dist/sea/register-bedrock.d.ts +2 -0
  1021. package/dist/sea/register-bedrock.d.ts.map +1 -0
  1022. package/dist/sea/register-bedrock.js +4 -0
  1023. package/dist/sea/register-bedrock.js.map +1 -0
  1024. package/dist/store/catalog.d.ts +57 -0
  1025. package/dist/store/catalog.d.ts.map +1 -0
  1026. package/dist/store/catalog.js +331 -0
  1027. package/dist/store/catalog.js.map +1 -0
  1028. package/dist/store/inspector.d.ts +36 -0
  1029. package/dist/store/inspector.d.ts.map +1 -0
  1030. package/dist/store/inspector.js +578 -0
  1031. package/dist/store/inspector.js.map +1 -0
  1032. package/dist/store/install-plan.d.ts +26 -0
  1033. package/dist/store/install-plan.d.ts.map +1 -0
  1034. package/dist/store/install-plan.js +80 -0
  1035. package/dist/store/install-plan.js.map +1 -0
  1036. package/dist/store/render.d.ts +11 -0
  1037. package/dist/store/render.d.ts.map +1 -0
  1038. package/dist/store/render.js +153 -0
  1039. package/dist/store/render.js.map +1 -0
  1040. package/dist/store/resolver.d.ts +22 -0
  1041. package/dist/store/resolver.d.ts.map +1 -0
  1042. package/dist/store/resolver.js +207 -0
  1043. package/dist/store/resolver.js.map +1 -0
  1044. package/dist/store/store-cli.d.ts +7 -0
  1045. package/dist/store/store-cli.d.ts.map +1 -0
  1046. package/dist/store/store-cli.js +636 -0
  1047. package/dist/store/store-cli.js.map +1 -0
  1048. package/dist/store/targets.d.ts +21 -0
  1049. package/dist/store/targets.d.ts.map +1 -0
  1050. package/dist/store/targets.js +55 -0
  1051. package/dist/store/targets.js.map +1 -0
  1052. package/dist/utils/ansi.d.ts +2 -0
  1053. package/dist/utils/ansi.d.ts.map +1 -0
  1054. package/dist/utils/ansi.js +52 -0
  1055. package/dist/utils/ansi.js.map +1 -0
  1056. package/dist/utils/changelog.d.ts +22 -0
  1057. package/dist/utils/changelog.d.ts.map +1 -0
  1058. package/dist/utils/changelog.js +165 -0
  1059. package/dist/utils/changelog.js.map +1 -0
  1060. package/dist/utils/child-process.d.ts +18 -0
  1061. package/dist/utils/child-process.d.ts.map +1 -0
  1062. package/dist/utils/child-process.js +106 -0
  1063. package/dist/utils/child-process.js.map +1 -0
  1064. package/dist/utils/clipboard-image.d.ts +11 -0
  1065. package/dist/utils/clipboard-image.d.ts.map +1 -0
  1066. package/dist/utils/clipboard-image.js +245 -0
  1067. package/dist/utils/clipboard-image.js.map +1 -0
  1068. package/dist/utils/clipboard.d.ts +2 -0
  1069. package/dist/utils/clipboard.d.ts.map +1 -0
  1070. package/dist/utils/clipboard.js +94 -0
  1071. package/dist/utils/clipboard.js.map +1 -0
  1072. package/dist/utils/deprecation.d.ts +4 -0
  1073. package/dist/utils/deprecation.d.ts.map +1 -0
  1074. package/dist/utils/deprecation.js +13 -0
  1075. package/dist/utils/deprecation.js.map +1 -0
  1076. package/dist/utils/durable-atomic-write.d.ts +46 -0
  1077. package/dist/utils/durable-atomic-write.d.ts.map +1 -0
  1078. package/dist/utils/durable-atomic-write.js +104 -0
  1079. package/dist/utils/durable-atomic-write.js.map +1 -0
  1080. package/dist/utils/frontmatter.d.ts +8 -0
  1081. package/dist/utils/frontmatter.d.ts.map +1 -0
  1082. package/dist/utils/frontmatter.js +26 -0
  1083. package/dist/utils/frontmatter.js.map +1 -0
  1084. package/dist/utils/fs-watch.d.ts +5 -0
  1085. package/dist/utils/fs-watch.d.ts.map +1 -0
  1086. package/dist/utils/fs-watch.js +25 -0
  1087. package/dist/utils/fs-watch.js.map +1 -0
  1088. package/dist/utils/git.d.ts +26 -0
  1089. package/dist/utils/git.d.ts.map +1 -0
  1090. package/dist/utils/git.js +195 -0
  1091. package/dist/utils/git.js.map +1 -0
  1092. package/dist/utils/html.d.ts +7 -0
  1093. package/dist/utils/html.d.ts.map +1 -0
  1094. package/dist/utils/html.js +40 -0
  1095. package/dist/utils/html.js.map +1 -0
  1096. package/dist/utils/ignore-files.d.ts +5 -0
  1097. package/dist/utils/ignore-files.d.ts.map +1 -0
  1098. package/dist/utils/ignore-files.js +58 -0
  1099. package/dist/utils/ignore-files.js.map +1 -0
  1100. package/dist/utils/image-codec.d.ts +22 -0
  1101. package/dist/utils/image-codec.d.ts.map +1 -0
  1102. package/dist/utils/image-codec.js +35 -0
  1103. package/dist/utils/image-codec.js.map +1 -0
  1104. package/dist/utils/image-convert.d.ts +9 -0
  1105. package/dist/utils/image-convert.d.ts.map +1 -0
  1106. package/dist/utils/image-convert.js +26 -0
  1107. package/dist/utils/image-convert.js.map +1 -0
  1108. package/dist/utils/image-resize-core.d.ts +31 -0
  1109. package/dist/utils/image-resize-core.d.ts.map +1 -0
  1110. package/dist/utils/image-resize-core.js +181 -0
  1111. package/dist/utils/image-resize-core.js.map +1 -0
  1112. package/dist/utils/image-resize-worker.d.ts +2 -0
  1113. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  1114. package/dist/utils/image-resize-worker.js +31 -0
  1115. package/dist/utils/image-resize-worker.js.map +1 -0
  1116. package/dist/utils/image-resize.d.ts +15 -0
  1117. package/dist/utils/image-resize.d.ts.map +1 -0
  1118. package/dist/utils/image-resize.js +92 -0
  1119. package/dist/utils/image-resize.js.map +1 -0
  1120. package/dist/utils/json.d.ts +3 -0
  1121. package/dist/utils/json.d.ts.map +1 -0
  1122. package/dist/utils/json.js +7 -0
  1123. package/dist/utils/json.js.map +1 -0
  1124. package/dist/utils/mime.d.ts +3 -0
  1125. package/dist/utils/mime.d.ts.map +1 -0
  1126. package/dist/utils/mime.js +69 -0
  1127. package/dist/utils/mime.js.map +1 -0
  1128. package/dist/utils/npm-spec.d.ts +9 -0
  1129. package/dist/utils/npm-spec.d.ts.map +1 -0
  1130. package/dist/utils/npm-spec.js +15 -0
  1131. package/dist/utils/npm-spec.js.map +1 -0
  1132. package/dist/utils/open-browser.d.ts +9 -0
  1133. package/dist/utils/open-browser.d.ts.map +1 -0
  1134. package/dist/utils/open-browser.js +22 -0
  1135. package/dist/utils/open-browser.js.map +1 -0
  1136. package/dist/utils/paths.d.ts +31 -0
  1137. package/dist/utils/paths.d.ts.map +1 -0
  1138. package/dist/utils/paths.js +92 -0
  1139. package/dist/utils/paths.js.map +1 -0
  1140. package/dist/utils/private-files.d.ts +21 -0
  1141. package/dist/utils/private-files.d.ts.map +1 -0
  1142. package/dist/utils/private-files.js +103 -0
  1143. package/dist/utils/private-files.js.map +1 -0
  1144. package/dist/utils/process-env.d.ts +2 -0
  1145. package/dist/utils/process-env.d.ts.map +1 -0
  1146. package/dist/utils/process-env.js +31 -0
  1147. package/dist/utils/process-env.js.map +1 -0
  1148. package/dist/utils/shell.d.ts +30 -0
  1149. package/dist/utils/shell.d.ts.map +1 -0
  1150. package/dist/utils/shell.js +195 -0
  1151. package/dist/utils/shell.js.map +1 -0
  1152. package/dist/utils/sleep.d.ts +5 -0
  1153. package/dist/utils/sleep.d.ts.map +1 -0
  1154. package/dist/utils/sleep.js +17 -0
  1155. package/dist/utils/sleep.js.map +1 -0
  1156. package/dist/utils/syntax-highlight.d.ts +18 -0
  1157. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  1158. package/dist/utils/syntax-highlight.js +139 -0
  1159. package/dist/utils/syntax-highlight.js.map +1 -0
  1160. package/dist/utils/tools-manager.d.ts +3 -0
  1161. package/dist/utils/tools-manager.d.ts.map +1 -0
  1162. package/dist/utils/tools-manager.js +328 -0
  1163. package/dist/utils/tools-manager.js.map +1 -0
  1164. package/dist/utils/version-check.d.ts +15 -0
  1165. package/dist/utils/version-check.d.ts.map +1 -0
  1166. package/dist/utils/version-check.js +61 -0
  1167. package/dist/utils/version-check.js.map +1 -0
  1168. package/dist/utils/volt-user-agent.d.ts +2 -0
  1169. package/dist/utils/volt-user-agent.d.ts.map +1 -0
  1170. package/dist/utils/volt-user-agent.js +5 -0
  1171. package/dist/utils/volt-user-agent.js.map +1 -0
  1172. package/dist/utils/windows-self-update.d.ts +3 -0
  1173. package/dist/utils/windows-self-update.d.ts.map +1 -0
  1174. package/dist/utils/windows-self-update.js +77 -0
  1175. package/dist/utils/windows-self-update.js.map +1 -0
  1176. package/docs/compaction.md +394 -0
  1177. package/docs/containerization.md +111 -0
  1178. package/docs/custom-provider.md +737 -0
  1179. package/docs/daemon.md +190 -0
  1180. package/docs/development.md +70 -0
  1181. package/docs/docs.json +176 -0
  1182. package/docs/extensions.md +2692 -0
  1183. package/docs/images/exy.png +0 -0
  1184. package/docs/images/interactive-mode.png +0 -0
  1185. package/docs/images/tree-view.png +0 -0
  1186. package/docs/index.md +82 -0
  1187. package/docs/iroh-remote-access-design.md +340 -0
  1188. package/docs/iroh-remote-protocol.md +431 -0
  1189. package/docs/json.md +87 -0
  1190. package/docs/keybindings.md +200 -0
  1191. package/docs/live-shared-session-daemon-design.md +1090 -0
  1192. package/docs/lsp.md +143 -0
  1193. package/docs/mcp.md +1044 -0
  1194. package/docs/models.md +495 -0
  1195. package/docs/packages.md +230 -0
  1196. package/docs/prompt-templates.md +108 -0
  1197. package/docs/providers.md +274 -0
  1198. package/docs/quickstart.md +165 -0
  1199. package/docs/rpc.md +2050 -0
  1200. package/docs/sdk.md +1267 -0
  1201. package/docs/security.md +139 -0
  1202. package/docs/session-format.md +412 -0
  1203. package/docs/sessions.md +145 -0
  1204. package/docs/settings.md +371 -0
  1205. package/docs/shell-aliases.md +13 -0
  1206. package/docs/skills.md +243 -0
  1207. package/docs/subagents-design.md +419 -0
  1208. package/docs/terminal-setup.md +148 -0
  1209. package/docs/termux.md +127 -0
  1210. package/docs/themes.md +295 -0
  1211. package/docs/tla/ClientAuth.cfg +16 -0
  1212. package/docs/tla/ClientAuth.tla +205 -0
  1213. package/docs/tla/ClientConn.cfg +16 -0
  1214. package/docs/tla/ClientConn.tla +265 -0
  1215. package/docs/tla/LeaseBroker.cfg +43 -0
  1216. package/docs/tla/LeaseBroker.tla +563 -0
  1217. package/docs/tla/PLAN.md +240 -0
  1218. package/docs/tla/PushOrdering.cfg +17 -0
  1219. package/docs/tla/PushOrdering.tla +183 -0
  1220. package/docs/tla/README.md +205 -0
  1221. package/docs/tla/RelayViewer.cfg +26 -0
  1222. package/docs/tla/RelayViewer.tla +299 -0
  1223. package/docs/tla/SessionTarget.cfg +18 -0
  1224. package/docs/tla/SessionTarget.tla +192 -0
  1225. package/docs/tla/check.sh +34 -0
  1226. package/docs/tmux.md +63 -0
  1227. package/docs/tui.md +949 -0
  1228. package/docs/usage.md +482 -0
  1229. package/docs/windows.md +17 -0
  1230. package/docs/worktrees-design.md +605 -0
  1231. package/examples/README.md +28 -0
  1232. package/examples/extensions/README.md +211 -0
  1233. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  1234. package/examples/extensions/bash-spawn-hook.ts +30 -0
  1235. package/examples/extensions/bookmark.ts +50 -0
  1236. package/examples/extensions/border-status-editor.ts +150 -0
  1237. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  1238. package/examples/extensions/claude-rules.ts +86 -0
  1239. package/examples/extensions/commands.ts +72 -0
  1240. package/examples/extensions/confirm-destructive.ts +59 -0
  1241. package/examples/extensions/custom-compaction.ts +127 -0
  1242. package/examples/extensions/custom-footer.ts +64 -0
  1243. package/examples/extensions/custom-header.ts +72 -0
  1244. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  1245. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1246. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1247. package/examples/extensions/custom-provider-gitlab-duo/index.ts +400 -0
  1248. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1249. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1250. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1251. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1252. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  1253. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1254. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1255. package/examples/extensions/dynamic-tools.ts +74 -0
  1256. package/examples/extensions/event-bus.ts +43 -0
  1257. package/examples/extensions/file-trigger.ts +41 -0
  1258. package/examples/extensions/git-checkpoint.ts +53 -0
  1259. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1260. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1261. package/examples/extensions/gondolin/index.ts +531 -0
  1262. package/examples/extensions/gondolin/package-lock.json +185 -0
  1263. package/examples/extensions/gondolin/package.json +19 -0
  1264. package/examples/extensions/handoff.ts +191 -0
  1265. package/examples/extensions/hello.ts +26 -0
  1266. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1267. package/examples/extensions/inline-bash.ts +94 -0
  1268. package/examples/extensions/input-transform-streaming.ts +39 -0
  1269. package/examples/extensions/input-transform.ts +43 -0
  1270. package/examples/extensions/interactive-shell.ts +196 -0
  1271. package/examples/extensions/mac-system-theme.ts +47 -0
  1272. package/examples/extensions/message-renderer.ts +59 -0
  1273. package/examples/extensions/minimal-mode.ts +426 -0
  1274. package/examples/extensions/modal-editor.ts +85 -0
  1275. package/examples/extensions/model-status.ts +31 -0
  1276. package/examples/extensions/notify.ts +55 -0
  1277. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1278. package/examples/extensions/overlay-test.ts +153 -0
  1279. package/examples/extensions/permission-gate.ts +34 -0
  1280. package/examples/extensions/pirate.ts +47 -0
  1281. package/examples/extensions/plan-mode/README.md +65 -0
  1282. package/examples/extensions/plan-mode/index.ts +340 -0
  1283. package/examples/extensions/plan-mode/utils.ts +168 -0
  1284. package/examples/extensions/preset.ts +436 -0
  1285. package/examples/extensions/project-trust.ts +64 -0
  1286. package/examples/extensions/prompt-customizer.ts +97 -0
  1287. package/examples/extensions/protected-paths.ts +30 -0
  1288. package/examples/extensions/provider-payload.ts +18 -0
  1289. package/examples/extensions/qna.ts +122 -0
  1290. package/examples/extensions/question.ts +277 -0
  1291. package/examples/extensions/questionnaire.ts +440 -0
  1292. package/examples/extensions/rainbow-editor.ts +88 -0
  1293. package/examples/extensions/reload-runtime.ts +37 -0
  1294. package/examples/extensions/rpc-demo.ts +118 -0
  1295. package/examples/extensions/sandbox/index.ts +321 -0
  1296. package/examples/extensions/sandbox/package-lock.json +92 -0
  1297. package/examples/extensions/sandbox/package.json +19 -0
  1298. package/examples/extensions/send-user-message.ts +97 -0
  1299. package/examples/extensions/session-name.ts +27 -0
  1300. package/examples/extensions/shutdown-command.ts +63 -0
  1301. package/examples/extensions/snake.ts +343 -0
  1302. package/examples/extensions/space-invaders.ts +560 -0
  1303. package/examples/extensions/ssh.ts +220 -0
  1304. package/examples/extensions/status-line.ts +32 -0
  1305. package/examples/extensions/structured-output.ts +65 -0
  1306. package/examples/extensions/subagent/README.md +175 -0
  1307. package/examples/extensions/subagent/agents/planner.md +37 -0
  1308. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1309. package/examples/extensions/subagent/agents/scout.md +50 -0
  1310. package/examples/extensions/subagent/agents/worker.md +24 -0
  1311. package/examples/extensions/subagent/agents.ts +126 -0
  1312. package/examples/extensions/subagent/index.ts +1009 -0
  1313. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1314. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1315. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1316. package/examples/extensions/summarize.ts +206 -0
  1317. package/examples/extensions/system-prompt-header.ts +17 -0
  1318. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1319. package/examples/extensions/timed-confirm.ts +70 -0
  1320. package/examples/extensions/titlebar-spinner.ts +58 -0
  1321. package/examples/extensions/todo.ts +297 -0
  1322. package/examples/extensions/tool-override.ts +144 -0
  1323. package/examples/extensions/tools.ts +146 -0
  1324. package/examples/extensions/trigger-compact.ts +50 -0
  1325. package/examples/extensions/truncated-tool.ts +195 -0
  1326. package/examples/extensions/widget-placement.ts +9 -0
  1327. package/examples/extensions/with-deps/index.ts +32 -0
  1328. package/examples/extensions/with-deps/package-lock.json +31 -0
  1329. package/examples/extensions/with-deps/package.json +22 -0
  1330. package/examples/extensions/working-indicator.ts +123 -0
  1331. package/examples/extensions/working-message-test.ts +25 -0
  1332. package/examples/remote/firebase-push-relay/README.md +79 -0
  1333. package/examples/remote/firebase-push-relay/firebase.json +12 -0
  1334. package/examples/remote/firebase-push-relay/firestore.indexes.json +11 -0
  1335. package/examples/remote/firebase-push-relay/firestore.rules +9 -0
  1336. package/examples/remote/firebase-push-relay/functions/core.js +511 -0
  1337. package/examples/remote/firebase-push-relay/functions/core.test.js +273 -0
  1338. package/examples/remote/firebase-push-relay/functions/index.js +413 -0
  1339. package/examples/remote/firebase-push-relay/functions/package-lock.json +2974 -0
  1340. package/examples/remote/firebase-push-relay/functions/package.json +18 -0
  1341. package/examples/remote/iroh-sidecar/README.md +211 -0
  1342. package/examples/remote/iroh-sidecar/client.mjs +554 -0
  1343. package/examples/remote/iroh-sidecar/common.mjs +195 -0
  1344. package/examples/remote/iroh-sidecar/host.mjs +4 -0
  1345. package/examples/remote/iroh-sidecar/package-lock.json +213 -0
  1346. package/examples/remote/iroh-sidecar/package.json +13 -0
  1347. package/examples/remote/iroh-sidecar/source-aware-run.mjs +41 -0
  1348. package/examples/rpc-extension-ui.ts +632 -0
  1349. package/examples/sdk/01-minimal.ts +26 -0
  1350. package/examples/sdk/02-custom-model.ts +53 -0
  1351. package/examples/sdk/03-custom-prompt.ts +70 -0
  1352. package/examples/sdk/04-skills.ts +55 -0
  1353. package/examples/sdk/05-tools.ts +48 -0
  1354. package/examples/sdk/06-extensions.ts +94 -0
  1355. package/examples/sdk/07-context-files.ts +42 -0
  1356. package/examples/sdk/08-prompt-templates.ts +51 -0
  1357. package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
  1358. package/examples/sdk/10-settings.ts +53 -0
  1359. package/examples/sdk/11-sessions.ts +52 -0
  1360. package/examples/sdk/12-full-control.ts +78 -0
  1361. package/examples/sdk/13-session-runtime.ts +67 -0
  1362. package/examples/sdk/README.md +147 -0
  1363. package/npm-shrinkwrap.json +3442 -0
  1364. package/package.json +125 -19
@@ -0,0 +1,106 @@
1
+ import { createIrohRpcTransport, } from "../../rpc/index.js";
2
+ import { getIrohRemoteRpcFilterResult } from "./rpc-command-filter.js";
3
+ /**
4
+ * Wrap an RPC transport with the remote Iroh command policy.
5
+ *
6
+ * Allowed commands are forwarded to the in-process RPC mode unchanged.
7
+ * Disallowed or malformed commands are rejected on the same transport without
8
+ * reaching Volt RPC handlers.
9
+ */
10
+ export function createIrohRemoteFilteredRpcTransport(options) {
11
+ const pendingRejections = new Set();
12
+ let pendingRejectionError;
13
+ const startupAwareTransport = options.transport;
14
+ const recordRejectionError = (error) => {
15
+ const rejectionError = error instanceof Error ? error : new Error(String(error));
16
+ pendingRejectionError ??= rejectionError;
17
+ return rejectionError;
18
+ };
19
+ const trackRejectionWrite = (result) => {
20
+ if (!result) {
21
+ return;
22
+ }
23
+ const pending = Promise.resolve(result)
24
+ .catch((error) => {
25
+ recordRejectionError(error);
26
+ })
27
+ .finally(() => {
28
+ pendingRejections.delete(pending);
29
+ });
30
+ pendingRejections.add(pending);
31
+ };
32
+ const waitForRejectionWrites = async () => {
33
+ while (pendingRejections.size > 0) {
34
+ await Promise.allSettled(pendingRejections);
35
+ }
36
+ if (!pendingRejectionError) {
37
+ return;
38
+ }
39
+ const error = pendingRejectionError;
40
+ pendingRejectionError = undefined;
41
+ throw error;
42
+ };
43
+ return {
44
+ setRpcModeStartupComplete(startupComplete) {
45
+ startupAwareTransport.setRpcModeStartupComplete?.(startupComplete);
46
+ },
47
+ write(value) {
48
+ return options.transport.write(value);
49
+ },
50
+ onLine(handler) {
51
+ return options.transport.onLine(async (line) => {
52
+ const filterResult = getIrohRemoteRpcFilterResult(line, options.rpcGrant);
53
+ if (filterResult.allowed) {
54
+ await handler(line);
55
+ return;
56
+ }
57
+ try {
58
+ const writeResult = options.transport.write(filterResult.response);
59
+ trackRejectionWrite(writeResult);
60
+ await writeResult;
61
+ }
62
+ catch (error) {
63
+ recordRejectionError(error);
64
+ }
65
+ });
66
+ },
67
+ onClose(handler) {
68
+ return options.transport.onClose?.(handler) ?? (() => { });
69
+ },
70
+ async waitForBackpressure() {
71
+ await waitForRejectionWrites();
72
+ await options.transport.waitForBackpressure?.();
73
+ },
74
+ async flush() {
75
+ await waitForRejectionWrites();
76
+ await options.transport.flush?.();
77
+ },
78
+ async close() {
79
+ let rejectionError;
80
+ try {
81
+ await waitForRejectionWrites();
82
+ }
83
+ catch (error) {
84
+ rejectionError = error;
85
+ }
86
+ try {
87
+ await options.transport.close();
88
+ }
89
+ catch (closeError) {
90
+ if (!rejectionError) {
91
+ throw closeError;
92
+ }
93
+ }
94
+ if (rejectionError) {
95
+ throw rejectionError;
96
+ }
97
+ },
98
+ };
99
+ }
100
+ export function createIrohRemoteRpcTransport(options) {
101
+ return createIrohRemoteFilteredRpcTransport({
102
+ transport: createIrohRpcTransport(options),
103
+ rpcGrant: options.rpcGrant,
104
+ });
105
+ }
106
+ //# sourceMappingURL=rpc-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-transport.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/rpc-transport.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tcreateIrohRpcTransport,\n\ttype IrohRpcTransportOptions,\n\ttype RpcCloseHandler,\n\ttype RpcLineHandler,\n\ttype RpcTransport,\n} from \"../../rpc/index.ts\";\nimport type { IrohRemoteRpcGrant } from \"./access-grant.ts\";\nimport { getIrohRemoteRpcFilterResult } from \"./rpc-command-filter.ts\";\n\nexport interface IrohRemoteFilteredRpcTransportOptions {\n\ttransport: RpcTransport;\n\t/** Persisted grant snapshot for this authorized remote stream. */\n\trpcGrant: IrohRemoteRpcGrant;\n}\n\ninterface StartupAwareRpcTransport extends RpcTransport {\n\tsetRpcModeStartupComplete?(startupComplete: boolean): void;\n}\n\n/**\n * Wrap an RPC transport with the remote Iroh command policy.\n *\n * Allowed commands are forwarded to the in-process RPC mode unchanged.\n * Disallowed or malformed commands are rejected on the same transport without\n * reaching Volt RPC handlers.\n */\nexport function createIrohRemoteFilteredRpcTransport(\n\toptions: IrohRemoteFilteredRpcTransportOptions,\n): RpcTransport & { setRpcModeStartupComplete?(startupComplete: boolean): void } {\n\tconst pendingRejections = new Set<Promise<void>>();\n\tlet pendingRejectionError: Error | undefined;\n\tconst startupAwareTransport = options.transport as StartupAwareRpcTransport;\n\n\tconst recordRejectionError = (error: unknown): Error => {\n\t\tconst rejectionError = error instanceof Error ? error : new Error(String(error));\n\t\tpendingRejectionError ??= rejectionError;\n\t\treturn rejectionError;\n\t};\n\n\tconst trackRejectionWrite = (result: void | Promise<void>): void => {\n\t\tif (!result) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = Promise.resolve(result)\n\t\t\t.catch((error: unknown) => {\n\t\t\t\trecordRejectionError(error);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tpendingRejections.delete(pending);\n\t\t\t});\n\t\tpendingRejections.add(pending);\n\t};\n\n\tconst waitForRejectionWrites = async (): Promise<void> => {\n\t\twhile (pendingRejections.size > 0) {\n\t\t\tawait Promise.allSettled(pendingRejections);\n\t\t}\n\t\tif (!pendingRejectionError) {\n\t\t\treturn;\n\t\t}\n\t\tconst error = pendingRejectionError;\n\t\tpendingRejectionError = undefined;\n\t\tthrow error;\n\t};\n\n\treturn {\n\t\tsetRpcModeStartupComplete(startupComplete: boolean) {\n\t\t\tstartupAwareTransport.setRpcModeStartupComplete?.(startupComplete);\n\t\t},\n\t\twrite(value) {\n\t\t\treturn options.transport.write(value);\n\t\t},\n\t\tonLine(handler: RpcLineHandler): () => void {\n\t\t\treturn options.transport.onLine(async (line) => {\n\t\t\t\tconst filterResult = getIrohRemoteRpcFilterResult(line, options.rpcGrant);\n\t\t\t\tif (filterResult.allowed) {\n\t\t\t\t\tawait handler(line);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst writeResult = options.transport.write(filterResult.response);\n\t\t\t\t\ttrackRejectionWrite(writeResult);\n\t\t\t\t\tawait writeResult;\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\trecordRejectionError(error);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tonClose(handler: RpcCloseHandler): () => void {\n\t\t\treturn options.transport.onClose?.(handler) ?? (() => {});\n\t\t},\n\t\tasync waitForBackpressure() {\n\t\t\tawait waitForRejectionWrites();\n\t\t\tawait options.transport.waitForBackpressure?.();\n\t\t},\n\t\tasync flush() {\n\t\t\tawait waitForRejectionWrites();\n\t\t\tawait options.transport.flush?.();\n\t\t},\n\t\tasync close() {\n\t\t\tlet rejectionError: unknown;\n\t\t\ttry {\n\t\t\t\tawait waitForRejectionWrites();\n\t\t\t} catch (error: unknown) {\n\t\t\t\trejectionError = error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait options.transport.close();\n\t\t\t} catch (closeError: unknown) {\n\t\t\t\tif (!rejectionError) {\n\t\t\t\t\tthrow closeError;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rejectionError) {\n\t\t\t\tthrow rejectionError;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function createIrohRemoteRpcTransport(\n\toptions: IrohRpcTransportOptions & { rpcGrant: IrohRemoteRpcGrant },\n): RpcTransport {\n\treturn createIrohRemoteFilteredRpcTransport({\n\t\ttransport: createIrohRpcTransport(options),\n\t\trpcGrant: options.rpcGrant,\n\t});\n}\n"]}
@@ -0,0 +1,141 @@
1
+ import { type IrohRemoteRpcGrant } from "./access-grant.ts";
2
+ import { type AuthorizeIrohRemoteClientOptions, type IrohRemoteClientAuthorizationResult } from "./authorization.ts";
3
+ import type { IrohRemoteHello } from "./handshake.ts";
4
+ import { type IrohRemoteClient, type IrohRemoteGrantedClient, type IrohRemoteHostState, type IrohRemoteLiveActivityRegistration, type IrohRemotePendingPairingTicket, type IrohRemotePushTarget, type IrohRemotePushTargetPlatform, type IrohRemotePushTokenEnvironment, type IrohRemoteRevokedClient, type IrohRemoteWorkspace, type IrohRemoteWorkspaceWorktree } from "./state.ts";
5
+ import { type IrohRemoteWorkspaceAvailabilityClassifier, type IrohRemoteWorkspaceStatus } from "./workspace.ts";
6
+ export interface IrohRemoteHostStateStore {
7
+ read(): IrohRemoteHostState | Promise<IrohRemoteHostState>;
8
+ /** Resolve only after the supplied snapshot is durably persisted. */
9
+ write(state: IrohRemoteHostState): void | Promise<void>;
10
+ }
11
+ export interface IrohRemoteHostStateManagerOptions {
12
+ initialState?: IrohRemoteHostState;
13
+ statePath?: string;
14
+ /** Custom persistence (e.g. the voltd state envelope); mutually exclusive with statePath. */
15
+ store?: IrohRemoteHostStateStore;
16
+ }
17
+ export interface IrohRemoteClientRevocationResult {
18
+ revoked: boolean;
19
+ client?: IrohRemoteClient;
20
+ revokedClient?: IrohRemoteRevokedClient;
21
+ }
22
+ export interface IrohRemoteClientRePairApprovalResult {
23
+ approved: boolean;
24
+ revokedClient?: IrohRemoteRevokedClient;
25
+ }
26
+ export type IrohRemoteClientAccessUpdateResult = {
27
+ ok: true;
28
+ client: IrohRemoteGrantedClient;
29
+ } | {
30
+ ok: false;
31
+ reason: "not_found" | "revision_conflict" | "revision_exhausted";
32
+ currentRevision?: number;
33
+ };
34
+ export interface IrohRemoteLiveActivityDeliveryChannelLookup {
35
+ tokenHash: string;
36
+ tokenEnvironment: IrohRemotePushTokenEnvironment;
37
+ platform: IrohRemotePushTargetPlatform;
38
+ }
39
+ export interface IrohRemoteLiveActivityRegistrationResult {
40
+ client?: IrohRemoteClient;
41
+ registration?: IrohRemoteLiveActivityRegistration;
42
+ replacedRegistration?: IrohRemoteLiveActivityRegistration;
43
+ }
44
+ export interface IrohRemoteLiveActivityPruneResult {
45
+ liveActivityRemoved: boolean;
46
+ registrationsRemoved: number;
47
+ pushTarget?: IrohRemotePushTarget;
48
+ }
49
+ export interface IrohRemoteWorkspaceWorktreeLifecycleContext {
50
+ workspace: IrohRemoteWorkspace;
51
+ worktrees: IrohRemoteWorkspaceWorktree[];
52
+ }
53
+ export interface IrohRemoteWorkspaceWorktreeLifecycleOutcome<T> {
54
+ result: T;
55
+ worktree?: IrohRemoteWorkspaceWorktree;
56
+ }
57
+ export declare const IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR = "workspace_has_worktrees";
58
+ export declare const IROH_REMOTE_WORKTREE_PARENT_WORKSPACE_NOT_FOUND_ERROR = "worktree_parent_workspace_not_found";
59
+ export declare const IROH_REMOTE_WORKTREE_PERSISTENCE_ERROR = "worktree_persistence_failed";
60
+ /**
61
+ * A workspace with persisted worktree children cannot be unregistered. This
62
+ * typed conflict is thrown from the state mutation itself so every caller,
63
+ * including lower-level ones, gets the same non-destructive invariant.
64
+ */
65
+ export declare class IrohRemoteWorkspaceHasWorktreesError extends Error {
66
+ readonly code = "workspace_has_worktrees";
67
+ readonly workspaceName: string;
68
+ readonly worktreeIds: string[];
69
+ constructor(workspaceName: string, worktrees: readonly IrohRemoteWorkspaceWorktree[]);
70
+ }
71
+ export declare function isIrohRemoteWorkspaceHasWorktreesError(error: unknown): error is IrohRemoteWorkspaceHasWorktreesError;
72
+ export declare class IrohRemoteWorktreeParentWorkspaceNotFoundError extends Error {
73
+ readonly code = "worktree_parent_workspace_not_found";
74
+ readonly workspaceName: string;
75
+ constructor(workspaceName: string);
76
+ }
77
+ export declare function isIrohRemoteWorktreeParentWorkspaceNotFoundError(error: unknown): error is IrohRemoteWorktreeParentWorkspaceNotFoundError;
78
+ export declare class IrohRemoteWorktreePersistenceError extends Error {
79
+ readonly code = "worktree_persistence_failed";
80
+ readonly workspaceName: string;
81
+ readonly worktreeId: string;
82
+ constructor(workspaceName: string, worktreeId: string, cause: unknown);
83
+ }
84
+ export declare function isIrohRemoteWorktreePersistenceError(error: unknown): error is IrohRemoteWorktreePersistenceError;
85
+ export declare class IrohRemoteHostStateManager {
86
+ private readonly statePath;
87
+ private readonly store;
88
+ private operationQueue;
89
+ private state;
90
+ constructor(options?: IrohRemoteHostStateManagerOptions);
91
+ load(): Promise<IrohRemoteHostState>;
92
+ save(state?: IrohRemoteHostState): Promise<void>;
93
+ getState(): Promise<IrohRemoteHostState>;
94
+ upsertWorkspace(workspace: IrohRemoteWorkspace, allowTools?: string): Promise<IrohRemoteWorkspace>;
95
+ unregisterWorkspace(name: string): Promise<IrohRemoteWorkspace | undefined>;
96
+ /**
97
+ * Serialize a worktree create/adopt side effect with workspace unregister and
98
+ * commit its child record in the same state transaction. The operation runs
99
+ * while the state lock is held so an unregister cannot observe the gap between
100
+ * `git worktree add` and durable child persistence.
101
+ */
102
+ runWorkspaceWorktreeLifecycle<T>(workspaceName: string, operation: (context: IrohRemoteWorkspaceWorktreeLifecycleContext) => Promise<IrohRemoteWorkspaceWorktreeLifecycleOutcome<T>>): Promise<T>;
103
+ upsertWorktree(worktree: IrohRemoteWorkspaceWorktree): Promise<IrohRemoteWorkspaceWorktree>;
104
+ removeWorktree(workspaceName: string, worktreeId: string): Promise<IrohRemoteWorkspaceWorktree | undefined>;
105
+ listWorktrees(workspaceName?: string): Promise<IrohRemoteWorkspaceWorktree[]>;
106
+ bindWorktreeSession(workspaceName: string, worktreeId: string, sessionId: string): Promise<void>;
107
+ findWorktreeForSession(workspaceName: string, sessionId: string): Promise<IrohRemoteWorkspaceWorktree | undefined>;
108
+ listWorkspaceStatuses(options?: {
109
+ classifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier;
110
+ }): Promise<IrohRemoteWorkspaceStatus[]>;
111
+ addPendingPairingTicket(ticket: IrohRemotePendingPairingTicket): Promise<IrohRemotePendingPairingTicket>;
112
+ removePendingPairingTicket(secretHash: string): Promise<boolean>;
113
+ authorizeClient(hello: IrohRemoteHello, remoteNodeId: string, options: AuthorizeIrohRemoteClientOptions): Promise<IrohRemoteClientAuthorizationResult>;
114
+ listClients(): Promise<IrohRemoteGrantedClient[]>;
115
+ getClient(nodeId: string): Promise<IrohRemoteGrantedClient | undefined>;
116
+ updateClientAccess(nodeId: string, expectedRevision: number, access: {
117
+ allowedTools: string;
118
+ rpcGrant: IrohRemoteRpcGrant;
119
+ }): Promise<IrohRemoteClientAccessUpdateResult>;
120
+ listRevokedClients(): Promise<IrohRemoteRevokedClient[]>;
121
+ setClientLastSessionId(nodeId: string, workspace: string, sessionId: string): Promise<IrohRemoteClient | undefined>;
122
+ upsertClientPushTarget(nodeId: string, pushTarget: IrohRemotePushTarget): Promise<IrohRemoteClient | undefined>;
123
+ disableClientPushTarget(nodeId: string, pushTargetId: string, now?: number): Promise<IrohRemotePushTarget | undefined>;
124
+ findClientLiveActivityDeliveryChannel(nodeId: string, lookup: IrohRemoteLiveActivityDeliveryChannelLookup): Promise<IrohRemotePushTarget | undefined>;
125
+ registerClientLiveActivity(nodeId: string, registration: IrohRemoteLiveActivityRegistration): Promise<IrohRemoteLiveActivityRegistrationResult>;
126
+ unregisterClientLiveActivity(nodeId: string, workspaceName: string, sessionId: string, activityId: string): Promise<boolean>;
127
+ pruneClientLiveActivityDeliveryChannel(nodeId: string, registration: IrohRemoteLiveActivityRegistration, now?: number): Promise<IrohRemoteLiveActivityPruneResult>;
128
+ removeClientLiveActivitiesForSession(nodeId: string, workspaceName: string, sessionId: string): Promise<number>;
129
+ removeClientLiveActivitiesForWorkspace(nodeId: string, workspaceName: string): Promise<number>;
130
+ removeLiveActivitiesForWorkspace(workspaceName: string): Promise<number>;
131
+ revokeClient(nodeId: string, now?: number): Promise<IrohRemoteClientRevocationResult>;
132
+ approveClientRePair(nodeId: string, now?: number): Promise<IrohRemoteClientRePairApprovalResult>;
133
+ private getWorkspaceStatuses;
134
+ private runExclusive;
135
+ private withStateFileLock;
136
+ private loadUnlocked;
137
+ private saveUnlocked;
138
+ private restoreAfterFailedWorktreePersistence;
139
+ private removeClientLiveActivities;
140
+ }
141
+ //# sourceMappingURL=state-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/state-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport lockfile from \"proper-lockfile\";\nimport { cloneIrohRemoteRpcGrant, type IrohRemoteRpcGrant, parseIrohRemoteRpcGrant } from \"./access-grant.ts\";\nimport {\n\ttype AuthorizeIrohRemoteClientOptions,\n\tauthorizeIrohRemoteClient,\n\ttype IrohRemoteClientAuthorizationResult,\n} from \"./authorization.ts\";\nimport type { IrohRemoteHello } from \"./handshake.ts\";\nimport {\n\tcreateEmptyIrohRemoteHostState,\n\ttype IrohRemoteClient,\n\ttype IrohRemoteGrantedClient,\n\ttype IrohRemoteGrantedRevokedClient,\n\ttype IrohRemoteHostState,\n\ttype IrohRemoteLiveActivityRegistration,\n\ttype IrohRemotePairingSecretTombstone,\n\ttype IrohRemotePendingPairingTicket,\n\ttype IrohRemotePushTarget,\n\ttype IrohRemotePushTargetPlatform,\n\ttype IrohRemotePushTokenEnvironment,\n\ttype IrohRemoteRevokedClient,\n\ttype IrohRemoteWorkspace,\n\ttype IrohRemoteWorkspaceWorktree,\n\tnormalizeIrohRemoteLiveActivityRegistrations,\n\tparseIrohRemoteLiveActivityRegistration,\n\treadIrohRemoteHostState,\n\twriteIrohRemoteHostState,\n} from \"./state.ts\";\nimport {\n\tfindIrohRemoteWorkspace,\n\tgetIrohRemoteWorkspaceStatuses,\n\ttype IrohRemoteWorkspaceAvailabilityClassifier,\n\ttype IrohRemoteWorkspaceStatus,\n\tupsertIrohRemoteWorkspace,\n} from \"./workspace.ts\";\n\nexport interface IrohRemoteHostStateStore {\n\tread(): IrohRemoteHostState | Promise<IrohRemoteHostState>;\n\t/** Resolve only after the supplied snapshot is durably persisted. */\n\twrite(state: IrohRemoteHostState): void | Promise<void>;\n}\n\nexport interface IrohRemoteHostStateManagerOptions {\n\tinitialState?: IrohRemoteHostState;\n\tstatePath?: string;\n\t/** Custom persistence (e.g. the voltd state envelope); mutually exclusive with statePath. */\n\tstore?: IrohRemoteHostStateStore;\n}\n\nexport interface IrohRemoteClientRevocationResult {\n\trevoked: boolean;\n\tclient?: IrohRemoteClient;\n\trevokedClient?: IrohRemoteRevokedClient;\n}\n\nexport interface IrohRemoteClientRePairApprovalResult {\n\tapproved: boolean;\n\trevokedClient?: IrohRemoteRevokedClient;\n}\n\nexport type IrohRemoteClientAccessUpdateResult =\n\t| { ok: true; client: IrohRemoteGrantedClient }\n\t| {\n\t\t\tok: false;\n\t\t\treason: \"not_found\" | \"revision_conflict\" | \"revision_exhausted\";\n\t\t\tcurrentRevision?: number;\n\t };\n\nexport interface IrohRemoteLiveActivityDeliveryChannelLookup {\n\ttokenHash: string;\n\ttokenEnvironment: IrohRemotePushTokenEnvironment;\n\tplatform: IrohRemotePushTargetPlatform;\n}\n\nexport interface IrohRemoteLiveActivityRegistrationResult {\n\tclient?: IrohRemoteClient;\n\tregistration?: IrohRemoteLiveActivityRegistration;\n\treplacedRegistration?: IrohRemoteLiveActivityRegistration;\n}\n\nexport interface IrohRemoteLiveActivityPruneResult {\n\tliveActivityRemoved: boolean;\n\tregistrationsRemoved: number;\n\tpushTarget?: IrohRemotePushTarget;\n}\n\nexport interface IrohRemoteWorkspaceWorktreeLifecycleContext {\n\tworkspace: IrohRemoteWorkspace;\n\tworktrees: IrohRemoteWorkspaceWorktree[];\n}\n\nexport interface IrohRemoteWorkspaceWorktreeLifecycleOutcome<T> {\n\tresult: T;\n\tworktree?: IrohRemoteWorkspaceWorktree;\n}\n\nexport const IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR = \"workspace_has_worktrees\";\nexport const IROH_REMOTE_WORKTREE_PARENT_WORKSPACE_NOT_FOUND_ERROR = \"worktree_parent_workspace_not_found\";\nexport const IROH_REMOTE_WORKTREE_PERSISTENCE_ERROR = \"worktree_persistence_failed\";\n\n/**\n * A workspace with persisted worktree children cannot be unregistered. This\n * typed conflict is thrown from the state mutation itself so every caller,\n * including lower-level ones, gets the same non-destructive invariant.\n */\nexport class IrohRemoteWorkspaceHasWorktreesError extends Error {\n\treadonly code = IROH_REMOTE_WORKSPACE_HAS_WORKTREES_ERROR;\n\treadonly workspaceName: string;\n\treadonly worktreeIds: string[];\n\n\tconstructor(workspaceName: string, worktrees: readonly IrohRemoteWorkspaceWorktree[]) {\n\t\tconst worktreeIds = worktrees.map((worktree) => worktree.id).sort();\n\t\tconst noun = worktreeIds.length === 1 ? \"worktree\" : \"worktrees\";\n\t\tsuper(\n\t\t\t`Workspace ${workspaceName} has ${worktreeIds.length} daemon-managed ${noun} (${worktreeIds.join(\", \")}). ` +\n\t\t\t\t`Remove each with \"volt remote worktree remove <id> --workspace ${workspaceName}\" before unregistering; ` +\n\t\t\t\t\"use --force only to explicitly discard dirty or busy worktrees.\",\n\t\t);\n\t\tthis.name = \"IrohRemoteWorkspaceHasWorktreesError\";\n\t\tthis.workspaceName = workspaceName;\n\t\tthis.worktreeIds = worktreeIds;\n\t}\n}\n\nexport function isIrohRemoteWorkspaceHasWorktreesError(error: unknown): error is IrohRemoteWorkspaceHasWorktreesError {\n\treturn error instanceof IrohRemoteWorkspaceHasWorktreesError;\n}\n\nexport class IrohRemoteWorktreeParentWorkspaceNotFoundError extends Error {\n\treadonly code = IROH_REMOTE_WORKTREE_PARENT_WORKSPACE_NOT_FOUND_ERROR;\n\treadonly workspaceName: string;\n\n\tconstructor(workspaceName: string) {\n\t\tsuper(`Cannot persist a worktree for unregistered workspace ${workspaceName}`);\n\t\tthis.name = \"IrohRemoteWorktreeParentWorkspaceNotFoundError\";\n\t\tthis.workspaceName = workspaceName;\n\t}\n}\n\nexport function isIrohRemoteWorktreeParentWorkspaceNotFoundError(\n\terror: unknown,\n): error is IrohRemoteWorktreeParentWorkspaceNotFoundError {\n\treturn error instanceof IrohRemoteWorktreeParentWorkspaceNotFoundError;\n}\n\nexport class IrohRemoteWorktreePersistenceError extends Error {\n\treadonly code = IROH_REMOTE_WORKTREE_PERSISTENCE_ERROR;\n\treadonly workspaceName: string;\n\treadonly worktreeId: string;\n\n\tconstructor(workspaceName: string, worktreeId: string, cause: unknown) {\n\t\tsuper(`Failed to persist worktree ${worktreeId} for workspace ${workspaceName}`, { cause });\n\t\tthis.name = \"IrohRemoteWorktreePersistenceError\";\n\t\tthis.workspaceName = workspaceName;\n\t\tthis.worktreeId = worktreeId;\n\t}\n}\n\nexport function isIrohRemoteWorktreePersistenceError(error: unknown): error is IrohRemoteWorktreePersistenceError {\n\treturn error instanceof IrohRemoteWorktreePersistenceError;\n}\n\nexport class IrohRemoteHostStateManager {\n\tprivate readonly statePath: string | undefined;\n\tprivate readonly store: IrohRemoteHostStateStore | undefined;\n\tprivate operationQueue: Promise<void> = Promise.resolve();\n\tprivate state: IrohRemoteHostState | undefined;\n\n\tconstructor(options: IrohRemoteHostStateManagerOptions = {}) {\n\t\tif (options.initialState && options.statePath) {\n\t\t\tthrow new Error(\"Cannot provide both initialState and statePath for Iroh remote host state manager\");\n\t\t}\n\t\tif (options.store && (options.statePath || options.initialState)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot combine a custom store with statePath/initialState for Iroh remote host state manager\",\n\t\t\t);\n\t\t}\n\t\tthis.statePath = options.statePath;\n\t\tthis.store = options.store;\n\t\tthis.state = options.initialState ? cloneHostState(options.initialState) : undefined;\n\t}\n\n\tasync load(): Promise<IrohRemoteHostState> {\n\t\treturn this.runExclusive(async () => cloneHostState(await this.loadUnlocked()));\n\t}\n\n\tasync save(state?: IrohRemoteHostState): Promise<void> {\n\t\tawait this.runExclusive(async () => {\n\t\t\tif (state !== undefined && this.statePath) {\n\t\t\t\tthrow new Error(\"Cannot save explicit Iroh remote host state snapshots for file-backed state\");\n\t\t\t}\n\t\t\tif (state === undefined && this.statePath) {\n\t\t\t\tthis.state = await this.loadUnlocked();\n\t\t\t}\n\t\t\tawait this.saveUnlocked(state !== undefined ? cloneHostState(state) : this.state);\n\t\t});\n\t}\n\n\tasync getState(): Promise<IrohRemoteHostState> {\n\t\treturn this.runExclusive(async () => cloneHostState(await this.loadUnlocked()));\n\t}\n\n\tasync upsertWorkspace(workspace: IrohRemoteWorkspace, allowTools?: string): Promise<IrohRemoteWorkspace> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst savedWorkspace = upsertIrohRemoteWorkspace(state, workspace, allowTools);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneWorkspace(savedWorkspace);\n\t\t});\n\t}\n\n\tasync unregisterWorkspace(name: string): Promise<IrohRemoteWorkspace | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst index = state.workspaces.findIndex((workspace) => workspace.name === name);\n\t\t\tif (index === -1) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst worktrees = (state.worktrees ?? []).filter((worktree) => worktree.workspaceName === name);\n\t\t\tif (worktrees.length > 0) {\n\t\t\t\tthrow new IrohRemoteWorkspaceHasWorktreesError(name, worktrees);\n\t\t\t}\n\t\t\tconst [removedWorkspace] = state.workspaces.splice(index, 1);\n\t\t\tstate.pendingPairingTickets = (state.pendingPairingTickets ?? []).filter(\n\t\t\t\t(ticket) => ticket.workspace !== name,\n\t\t\t);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn removedWorkspace ? cloneWorkspace(removedWorkspace) : undefined;\n\t\t});\n\t}\n\n\t/**\n\t * Serialize a worktree create/adopt side effect with workspace unregister and\n\t * commit its child record in the same state transaction. The operation runs\n\t * while the state lock is held so an unregister cannot observe the gap between\n\t * `git worktree add` and durable child persistence.\n\t */\n\tasync runWorkspaceWorktreeLifecycle<T>(\n\t\tworkspaceName: string,\n\t\toperation: (\n\t\t\tcontext: IrohRemoteWorkspaceWorktreeLifecycleContext,\n\t\t) => Promise<IrohRemoteWorkspaceWorktreeLifecycleOutcome<T>>,\n\t): Promise<T> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst workspace = state.workspaces.find((entry) => entry.name === workspaceName);\n\t\t\tif (!workspace) {\n\t\t\t\tthrow new IrohRemoteWorktreeParentWorkspaceNotFoundError(workspaceName);\n\t\t\t}\n\t\t\tconst outcome = await operation({\n\t\t\t\tworkspace: cloneWorkspace(workspace),\n\t\t\t\tworktrees: (state.worktrees ?? [])\n\t\t\t\t\t.filter((worktree) => worktree.workspaceName === workspaceName)\n\t\t\t\t\t.map((worktree) => cloneWorktree(worktree)),\n\t\t\t});\n\t\t\tif (!outcome.worktree) {\n\t\t\t\treturn outcome.result;\n\t\t\t}\n\t\t\tif (outcome.worktree.workspaceName !== workspaceName) {\n\t\t\t\tthrow new Error(\"Worktree lifecycle result does not match its parent workspace\");\n\t\t\t}\n\n\t\t\tconst previousState = cloneHostState(state);\n\t\t\tstate.worktrees = [\n\t\t\t\t...(state.worktrees ?? []).filter(\n\t\t\t\t\t(entry) => entry.workspaceName !== workspaceName || entry.id !== outcome.worktree?.id,\n\t\t\t\t),\n\t\t\t\tcloneWorktree(outcome.worktree),\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t} catch (error) {\n\t\t\t\tawait this.restoreAfterFailedWorktreePersistence(previousState);\n\t\t\t\tthrow new IrohRemoteWorktreePersistenceError(workspaceName, outcome.worktree.id, error);\n\t\t\t}\n\t\t\treturn outcome.result;\n\t\t});\n\t}\n\n\tasync upsertWorktree(worktree: IrohRemoteWorkspaceWorktree): Promise<IrohRemoteWorkspaceWorktree> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tif (!state.workspaces.some((workspace) => workspace.name === worktree.workspaceName)) {\n\t\t\t\tthrow new IrohRemoteWorktreeParentWorkspaceNotFoundError(worktree.workspaceName);\n\t\t\t}\n\t\t\tconst previousState = cloneHostState(state);\n\t\t\tstate.worktrees = [\n\t\t\t\t...(state.worktrees ?? []).filter(\n\t\t\t\t\t(entry) => entry.workspaceName !== worktree.workspaceName || entry.id !== worktree.id,\n\t\t\t\t),\n\t\t\t\tcloneWorktree(worktree),\n\t\t\t];\n\t\t\ttry {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t} catch (error) {\n\t\t\t\tawait this.restoreAfterFailedWorktreePersistence(previousState);\n\t\t\t\tthrow new IrohRemoteWorktreePersistenceError(worktree.workspaceName, worktree.id, error);\n\t\t\t}\n\t\t\treturn cloneWorktree(worktree);\n\t\t});\n\t}\n\n\tasync removeWorktree(workspaceName: string, worktreeId: string): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktrees = state.worktrees ?? [];\n\t\t\tconst removed = worktrees.find((entry) => entry.workspaceName === workspaceName && entry.id === worktreeId);\n\t\t\tif (!removed) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tstate.worktrees = worktrees.filter((entry) => entry !== removed);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneWorktree(removed);\n\t\t});\n\t}\n\n\tasync listWorktrees(workspaceName?: string): Promise<IrohRemoteWorkspaceWorktree[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn (state.worktrees ?? [])\n\t\t\t\t.filter((entry) => workspaceName === undefined || entry.workspaceName === workspaceName)\n\t\t\t\t.map((entry) => cloneWorktree(entry));\n\t\t});\n\t}\n\n\tasync bindWorktreeSession(workspaceName: string, worktreeId: string, sessionId: string): Promise<void> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktree = (state.worktrees ?? []).find(\n\t\t\t\t(entry) => entry.workspaceName === workspaceName && entry.id === worktreeId,\n\t\t\t);\n\t\t\tif (!worktree || worktree.sessionIds.includes(sessionId)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworktree.sessionIds = [...worktree.sessionIds, sessionId];\n\t\t\tawait this.saveUnlocked(state);\n\t\t});\n\t}\n\n\tasync findWorktreeForSession(\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst worktree = (state.worktrees ?? []).find(\n\t\t\t\t(entry) => entry.workspaceName === workspaceName && entry.sessionIds.includes(sessionId),\n\t\t\t);\n\t\t\treturn worktree ? cloneWorktree(worktree) : undefined;\n\t\t});\n\t}\n\n\tasync listWorkspaceStatuses(\n\t\toptions: { classifyWorkspaceAvailability?: IrohRemoteWorkspaceAvailabilityClassifier } = {},\n\t): Promise<IrohRemoteWorkspaceStatus[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn await getIrohRemoteWorkspaceStatuses(state, options.classifyWorkspaceAvailability);\n\t\t});\n\t}\n\n\tasync addPendingPairingTicket(ticket: IrohRemotePendingPairingTicket): Promise<IrohRemotePendingPairingTicket> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tstate.pendingPairingTickets = [\n\t\t\t\t...(state.pendingPairingTickets ?? []).filter((entry) => entry.secretHash !== ticket.secretHash),\n\t\t\t\tclonePendingPairingTicket(ticket),\n\t\t\t];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn clonePendingPairingTicket(ticket);\n\t\t});\n\t}\n\n\tasync removePendingPairingTicket(secretHash: string): Promise<boolean> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst pending = state.pendingPairingTickets ?? [];\n\t\t\tconst remaining = pending.filter((entry) => entry.secretHash !== secretHash);\n\t\t\tif (remaining.length === pending.length) return false;\n\t\t\tstate.pendingPairingTickets = remaining;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tasync authorizeClient(\n\t\thello: IrohRemoteHello,\n\t\tremoteNodeId: string,\n\t\toptions: AuthorizeIrohRemoteClientOptions,\n\t): Promise<IrohRemoteClientAuthorizationResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst workspaceStatuses = await this.getWorkspaceStatuses(state, options);\n\t\t\tconst workspace = findIrohRemoteWorkspace(state, hello.workspace);\n\t\t\tconst workspaceStatus = workspaceStatuses.find((entry) => entry.name === hello.workspace)?.status;\n\t\t\tconst workspaceAvailable =\n\t\t\t\tworkspace !== undefined &&\n\t\t\t\tworkspaceStatus === \"available\" &&\n\t\t\t\t(options.validateWorkspace === undefined || (await options.validateWorkspace(workspace)));\n\t\t\tconst result = authorizeIrohRemoteClient(state, hello, remoteNodeId, {\n\t\t\t\t...options,\n\t\t\t\tworkspace: workspaceAvailable ? workspace : undefined,\n\t\t\t\tworkspaceStatuses,\n\t\t\t});\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneAuthorizationResult(result);\n\t\t});\n\t}\n\n\tasync listClients(): Promise<IrohRemoteGrantedClient[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn state.clients.map((client) => cloneClient(client));\n\t\t});\n\t}\n\n\tasync getClient(nodeId: string): Promise<IrohRemoteGrantedClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\treturn client ? cloneClient(client) : undefined;\n\t\t});\n\t}\n\n\tasync updateClientAccess(\n\t\tnodeId: string,\n\t\texpectedRevision: number,\n\t\taccess: { allowedTools: string; rpcGrant: IrohRemoteRpcGrant },\n\t): Promise<IrohRemoteClientAccessUpdateResult> {\n\t\tif (!Number.isSafeInteger(expectedRevision) || expectedRevision < 1) {\n\t\t\tthrow new Error(\"expected RPC grant revision must be a safe integer greater than or equal to 1\");\n\t\t}\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn { ok: false, reason: \"not_found\" };\n\t\t\t}\n\t\t\tconst currentGrant = parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\");\n\t\t\tif (currentGrant.revision !== expectedRevision) {\n\t\t\t\treturn { ok: false, reason: \"revision_conflict\", currentRevision: currentGrant.revision };\n\t\t\t}\n\t\t\tif (currentGrant.revision === Number.MAX_SAFE_INTEGER) {\n\t\t\t\treturn { ok: false, reason: \"revision_exhausted\", currentRevision: currentGrant.revision };\n\t\t\t}\n\t\t\tclient.allowedTools = access.allowedTools;\n\t\t\tclient.rpcGrant = {\n\t\t\t\t...cloneIrohRemoteRpcGrant(access.rpcGrant),\n\t\t\t\trevision: expectedRevision + 1,\n\t\t\t};\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { ok: true, client: cloneClient(client) };\n\t\t});\n\t}\n\n\tasync listRevokedClients(): Promise<IrohRemoteRevokedClient[]> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\treturn getRevokedClients(state).map((client) => cloneRevokedClient(client));\n\t\t});\n\t}\n\n\tasync setClientLastSessionId(\n\t\tnodeId: string,\n\t\tworkspace: string,\n\t\tsessionId: string,\n\t): Promise<IrohRemoteClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tclient.lastSessionIdByWorkspace = {\n\t\t\t\t...(client.lastSessionIdByWorkspace ?? {}),\n\t\t\t\t[workspace]: sessionId,\n\t\t\t};\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneClient(client);\n\t\t});\n\t}\n\n\tasync upsertClientPushTarget(\n\t\tnodeId: string,\n\t\tpushTarget: IrohRemotePushTarget,\n\t): Promise<IrohRemoteClient | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet createdAt = pushTarget.createdAt;\n\t\t\tconst retainedTargets: IrohRemotePushTarget[] = [];\n\t\t\tfor (const existingTarget of client.pushTargets ?? []) {\n\t\t\t\tif (isSamePushTargetSlot(existingTarget, pushTarget)) {\n\t\t\t\t\tcreatedAt = existingTarget.createdAt;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tretainedTargets.push(existingTarget);\n\t\t\t}\n\t\t\tclient.pushTargets = [...retainedTargets, { ...pushTarget, createdAt }];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn cloneClient(client);\n\t\t});\n\t}\n\n\tasync disableClientPushTarget(\n\t\tnodeId: string,\n\t\tpushTargetId: string,\n\t\tnow = Date.now(),\n\t): Promise<IrohRemotePushTarget | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tconst pushTarget = client?.pushTargets?.find((entry) => entry.id === pushTargetId);\n\t\t\tif (!pushTarget) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tpushTarget.enabled = false;\n\t\t\tdelete pushTarget.liveActivity;\n\t\t\tpushTarget.updatedAt = now;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn clonePushTarget(pushTarget);\n\t\t});\n\t}\n\n\tasync findClientLiveActivityDeliveryChannel(\n\t\tnodeId: string,\n\t\tlookup: IrohRemoteLiveActivityDeliveryChannelLookup,\n\t): Promise<IrohRemotePushTarget | undefined> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tconst pushTarget = client?.pushTargets?.find(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.platform === lookup.platform &&\n\t\t\t\t\tentry.liveActivity?.tokenHash === lookup.tokenHash &&\n\t\t\t\t\tentry.liveActivity.tokenEnvironment === lookup.tokenEnvironment,\n\t\t\t);\n\t\t\treturn pushTarget ? clonePushTarget(pushTarget) : undefined;\n\t\t});\n\t}\n\n\tasync registerClientLiveActivity(\n\t\tnodeId: string,\n\t\tregistration: IrohRemoteLiveActivityRegistration,\n\t): Promise<IrohRemoteLiveActivityRegistrationResult> {\n\t\tconst validatedRegistration = parseIrohRemoteLiveActivityRegistration(registration);\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tlet createdAt = validatedRegistration.createdAt;\n\t\t\tlet replacedRegistration: IrohRemoteLiveActivityRegistration | undefined;\n\t\t\tconst retainedRegistrations: IrohRemoteLiveActivityRegistration[] = [];\n\t\t\tfor (const existingRegistration of client.liveActivities ?? []) {\n\t\t\t\tif (\n\t\t\t\t\t(existingRegistration.workspaceName === validatedRegistration.workspaceName &&\n\t\t\t\t\t\texistingRegistration.sessionId === validatedRegistration.sessionId) ||\n\t\t\t\t\texistingRegistration.activityId === validatedRegistration.activityId\n\t\t\t\t) {\n\t\t\t\t\tcreatedAt = existingRegistration.createdAt;\n\t\t\t\t\treplacedRegistration = existingRegistration;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tretainedRegistrations.push(existingRegistration);\n\t\t\t}\n\t\t\tconst savedRegistration = { ...validatedRegistration, createdAt };\n\t\t\tclient.liveActivities = normalizeIrohRemoteLiveActivityRegistrations([\n\t\t\t\t...retainedRegistrations,\n\t\t\t\tsavedRegistration,\n\t\t\t]);\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn {\n\t\t\t\tclient: cloneClient(client),\n\t\t\t\tregistration: cloneLiveActivityRegistration(savedRegistration),\n\t\t\t\t...(replacedRegistration\n\t\t\t\t\t? { replacedRegistration: cloneLiveActivityRegistration(replacedRegistration) }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync unregisterClientLiveActivity(\n\t\tnodeId: string,\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t\tactivityId: string,\n\t): Promise<boolean> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client?.liveActivities) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\tclient.liveActivities = client.liveActivities.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.workspaceName !== workspaceName ||\n\t\t\t\t\tentry.sessionId !== sessionId ||\n\t\t\t\t\tentry.activityId !== activityId,\n\t\t\t);\n\t\t\tconst removed = client.liveActivities.length !== beforeCount;\n\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\tdelete client.liveActivities;\n\t\t\t}\n\t\t\tif (removed) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removed;\n\t\t});\n\t}\n\n\tasync pruneClientLiveActivityDeliveryChannel(\n\t\tnodeId: string,\n\t\tregistration: IrohRemoteLiveActivityRegistration,\n\t\tnow = Date.now(),\n\t): Promise<IrohRemoteLiveActivityPruneResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client) {\n\t\t\t\treturn { liveActivityRemoved: false, registrationsRemoved: 0 };\n\t\t\t}\n\n\t\t\tlet registrationsRemoved = 0;\n\t\t\tif (client.liveActivities) {\n\t\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\t\tclient.liveActivities = client.liveActivities.filter(\n\t\t\t\t\t(entry) => !isSameLiveActivityRegistration(entry, registration),\n\t\t\t\t);\n\t\t\t\tregistrationsRemoved = beforeCount - client.liveActivities.length;\n\t\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\t\tdelete client.liveActivities;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pushTarget = client.pushTargets?.find((entry) => {\n\t\t\t\treturn (\n\t\t\t\t\tentry.id === registration.pushTargetId &&\n\t\t\t\t\tentry.platform === registration.platform &&\n\t\t\t\t\tentry.liveActivity?.tokenHash === registration.tokenHash &&\n\t\t\t\t\tentry.liveActivity.tokenEnvironment === registration.tokenEnvironment\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst liveActivityRemoved = pushTarget?.liveActivity !== undefined;\n\t\t\tif (liveActivityRemoved && pushTarget) {\n\t\t\t\tdelete pushTarget.liveActivity;\n\t\t\t\tpushTarget.updatedAt = now;\n\t\t\t}\n\n\t\t\tif (registrationsRemoved > 0 || liveActivityRemoved) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tliveActivityRemoved,\n\t\t\t\tregistrationsRemoved,\n\t\t\t\t...(pushTarget ? { pushTarget: clonePushTarget(pushTarget) } : {}),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync removeClientLiveActivitiesForSession(\n\t\tnodeId: string,\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t): Promise<number> {\n\t\treturn this.removeClientLiveActivities(nodeId, (entry) => {\n\t\t\treturn entry.workspaceName === workspaceName && entry.sessionId === sessionId;\n\t\t});\n\t}\n\n\tasync removeClientLiveActivitiesForWorkspace(nodeId: string, workspaceName: string): Promise<number> {\n\t\treturn this.removeClientLiveActivities(nodeId, (entry) => entry.workspaceName === workspaceName);\n\t}\n\n\tasync removeLiveActivitiesForWorkspace(workspaceName: string): Promise<number> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tlet removedCount = 0;\n\t\t\tfor (const client of state.clients) {\n\t\t\t\tif (!client.liveActivities) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\t\tclient.liveActivities = client.liveActivities.filter((entry) => entry.workspaceName !== workspaceName);\n\t\t\t\tremovedCount += beforeCount - client.liveActivities.length;\n\t\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\t\tdelete client.liveActivities;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (removedCount > 0) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removedCount;\n\t\t});\n\t}\n\n\tasync revokeClient(nodeId: string, now = Date.now()): Promise<IrohRemoteClientRevocationResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst clientIndex = state.clients.findIndex((client) => client.nodeId === nodeId);\n\t\t\tif (clientIndex === -1) {\n\t\t\t\tconst revokedClient = getRevokedClients(state).find((client) => client.nodeId === nodeId);\n\t\t\t\treturn {\n\t\t\t\t\trevoked: false,\n\t\t\t\t\t...(revokedClient ? { revokedClient: cloneRevokedClient(revokedClient) } : {}),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst [client] = state.clients.splice(clientIndex, 1);\n\t\t\tconst revokedClient: IrohRemoteRevokedClient = {\n\t\t\t\tnodeId: client.nodeId,\n\t\t\t\tlabel: client.label,\n\t\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t\tallowedTools: client.allowedTools,\n\t\t\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\t\t\tpairedAt: client.pairedAt,\n\t\t\t\tlastSeenAt: client.lastSeenAt,\n\t\t\t\trevokedAt: now,\n\t\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t\tstate.revokedClients = [...getRevokedClients(state).filter((entry) => entry.nodeId !== nodeId), revokedClient];\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { revoked: true, client: cloneClient(client), revokedClient: cloneRevokedClient(revokedClient) };\n\t\t});\n\t}\n\n\tasync approveClientRePair(nodeId: string, now = Date.now()): Promise<IrohRemoteClientRePairApprovalResult> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst revokedClient = getRevokedClients(state).find((client) => client.nodeId === nodeId);\n\t\t\tif (!revokedClient) {\n\t\t\t\treturn { approved: false };\n\t\t\t}\n\t\t\trevokedClient.rePairApprovedAt = now;\n\t\t\tawait this.saveUnlocked(state);\n\t\t\treturn { approved: true, revokedClient: cloneRevokedClient(revokedClient) };\n\t\t});\n\t}\n\n\tprivate async getWorkspaceStatuses(\n\t\tstate: IrohRemoteHostState,\n\t\toptions: AuthorizeIrohRemoteClientOptions,\n\t): Promise<IrohRemoteWorkspaceStatus[]> {\n\t\treturn await getIrohRemoteWorkspaceStatuses(state, options.classifyWorkspaceAvailability);\n\t}\n\n\tprivate runExclusive<T>(operation: () => T | Promise<T>): Promise<T> {\n\t\tconst run = this.operationQueue.then(\n\t\t\t() => this.withStateFileLock(operation),\n\t\t\t() => this.withStateFileLock(operation),\n\t\t);\n\t\tthis.operationQueue = run.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn run;\n\t}\n\n\tprivate async withStateFileLock<T>(operation: () => T | Promise<T>): Promise<T> {\n\t\tif (!this.statePath) {\n\t\t\treturn await operation();\n\t\t}\n\n\t\tawait mkdir(dirname(this.statePath), { recursive: true });\n\t\tlet release: (() => Promise<void>) | undefined;\n\t\tlet lockCompromised = false;\n\t\tlet lockCompromisedError: Error | undefined;\n\t\tconst throwIfCompromised = () => {\n\t\t\tif (lockCompromised) {\n\t\t\t\tthrow lockCompromisedError ?? new Error(\"Iroh remote host state lock was compromised\");\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\trelease = await lockfile.lock(this.statePath, {\n\t\t\t\tlockfilePath: `${this.statePath}.lock`,\n\t\t\t\trealpath: false,\n\t\t\t\tretries: {\n\t\t\t\t\tretries: 10,\n\t\t\t\t\tfactor: 2,\n\t\t\t\t\tminTimeout: 100,\n\t\t\t\t\tmaxTimeout: 10000,\n\t\t\t\t\trandomize: true,\n\t\t\t\t},\n\t\t\t\tstale: 30000,\n\t\t\t\tonCompromised: (error) => {\n\t\t\t\t\tlockCompromised = true;\n\t\t\t\t\tlockCompromisedError = error;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthrowIfCompromised();\n\t\t\tconst result = await operation();\n\t\t\tthrowIfCompromised();\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tif (release) {\n\t\t\t\ttry {\n\t\t\t\t\tawait release();\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore unlock errors after a compromised lock.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async loadUnlocked(): Promise<IrohRemoteHostState> {\n\t\tif (this.store) {\n\t\t\tthis.state = cloneHostState(await this.store.read());\n\t\t\treturn this.state;\n\t\t}\n\t\tif (this.statePath) {\n\t\t\tthis.state = await readIrohRemoteHostState(this.statePath);\n\t\t\treturn this.state;\n\t\t}\n\t\tthis.state ??= createEmptyIrohRemoteHostState();\n\t\treturn this.state;\n\t}\n\n\tprivate async saveUnlocked(state: IrohRemoteHostState | undefined): Promise<void> {\n\t\tconst stateToSave = state ? cloneHostState(state) : createEmptyIrohRemoteHostState();\n\t\tthis.state = stateToSave;\n\t\tif (this.store) {\n\t\t\tawait this.store.write(cloneHostState(stateToSave));\n\t\t\treturn;\n\t\t}\n\t\tif (this.statePath) {\n\t\t\tawait writeIrohRemoteHostState(this.statePath, stateToSave);\n\t\t}\n\t}\n\n\tprivate async restoreAfterFailedWorktreePersistence(previousState: IrohRemoteHostState): Promise<void> {\n\t\tconst restoredState = cloneHostState(previousState);\n\t\tthis.state = restoredState;\n\t\tif (!this.store) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.store.write(cloneHostState(restoredState));\n\t\t\tthis.state = restoredState;\n\t\t} catch {\n\t\t\t// A failed rollback may leave the child record in the custom store, which\n\t\t\t// is safer than deleting a checkout whose persistence outcome is unknown.\n\t\t}\n\t}\n\n\tprivate async removeClientLiveActivities(\n\t\tnodeId: string,\n\t\tshouldRemove: (registration: IrohRemoteLiveActivityRegistration) => boolean,\n\t): Promise<number> {\n\t\treturn this.runExclusive(async () => {\n\t\t\tconst state = await this.loadUnlocked();\n\t\t\tconst client = state.clients.find((entry) => entry.nodeId === nodeId);\n\t\t\tif (!client?.liveActivities) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst beforeCount = client.liveActivities.length;\n\t\t\tclient.liveActivities = client.liveActivities.filter((entry) => !shouldRemove(entry));\n\t\t\tconst removedCount = beforeCount - client.liveActivities.length;\n\t\t\tif (client.liveActivities.length === 0) {\n\t\t\t\tdelete client.liveActivities;\n\t\t\t}\n\t\t\tif (removedCount > 0) {\n\t\t\t\tawait this.saveUnlocked(state);\n\t\t\t}\n\t\t\treturn removedCount;\n\t\t});\n\t}\n}\n\nfunction cloneAuthorizationResult(result: IrohRemoteClientAuthorizationResult): IrohRemoteClientAuthorizationResult {\n\tif (!result.ok) {\n\t\treturn {\n\t\t\t...result,\n\t\t\t...(result.client ? { client: cloneClient(result.client) } : {}),\n\t\t\t...(result.expiredPairingTickets\n\t\t\t\t? { expiredPairingTickets: result.expiredPairingTickets.map((ticket) => clonePendingPairingTicket(ticket)) }\n\t\t\t\t: {}),\n\t\t\t...(result.workspace ? { workspace: cloneWorkspace(result.workspace) } : {}),\n\t\t};\n\t}\n\treturn {\n\t\t...result,\n\t\tclient: cloneClient(result.client),\n\t\t...(result.consumedPairingTicket\n\t\t\t? { consumedPairingTicket: clonePendingPairingTicket(result.consumedPairingTicket) }\n\t\t\t: {}),\n\t\t...(result.expiredPairingTickets\n\t\t\t? { expiredPairingTickets: result.expiredPairingTickets.map((ticket) => clonePendingPairingTicket(ticket)) }\n\t\t\t: {}),\n\t\tworkspace: cloneWorkspace(result.workspace),\n\t\tworkspaceNames: [...result.workspaceNames],\n\t\tworkspaces: result.workspaces.map((workspace) => ({ ...workspace })),\n\t};\n}\n\nfunction cloneClient(client: IrohRemoteClient): IrohRemoteGrantedClient {\n\treturn {\n\t\t...client,\n\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\t...(client.lastSessionIdByWorkspace ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } } : {}),\n\t\t...(client.pushTargets ? { pushTargets: client.pushTargets.map((target) => clonePushTarget(target)) } : {}),\n\t\t...(client.liveActivities\n\t\t\t? { liveActivities: client.liveActivities.map((registration) => cloneLiveActivityRegistration(registration)) }\n\t\t\t: {}),\n\t};\n}\n\nfunction cloneHostState(state: IrohRemoteHostState): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: state.hostSecretKey ? [...state.hostSecretKey] : undefined,\n\t\tpairingSecretTombstones: (state.pairingSecretTombstones ?? []).map((tombstone) =>\n\t\t\tclonePairingSecretTombstone(tombstone),\n\t\t),\n\t\tworkspaces: state.workspaces.map((workspace) => cloneWorkspace(workspace)),\n\t\tworktrees: (state.worktrees ?? []).map((worktree) => cloneWorktree(worktree)),\n\t\tclients: state.clients.map((client) => cloneClient(client)),\n\t\trevokedClients: (state.revokedClients ?? []).map((client) => cloneRevokedClient(client)),\n\t\tpendingPairingTickets: (state.pendingPairingTickets ?? []).map((ticket) => clonePendingPairingTicket(ticket)),\n\t};\n}\n\nfunction clonePairingSecretTombstone(tombstone: IrohRemotePairingSecretTombstone): IrohRemotePairingSecretTombstone {\n\treturn { ...tombstone };\n}\n\nfunction clonePendingPairingTicket(ticket: IrohRemotePendingPairingTicket): IrohRemotePendingPairingTicket {\n\treturn {\n\t\t...ticket,\n\t\t...(ticket.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(ticket.rpcGrant) }),\n\t};\n}\n\nfunction clonePushTarget(pushTarget: IrohRemotePushTarget): IrohRemotePushTarget {\n\treturn {\n\t\t...pushTarget,\n\t\t...(pushTarget.liveActivity ? { liveActivity: { ...pushTarget.liveActivity } } : {}),\n\t};\n}\n\nfunction cloneLiveActivityRegistration(\n\tregistration: IrohRemoteLiveActivityRegistration,\n): IrohRemoteLiveActivityRegistration {\n\treturn { ...registration };\n}\n\nfunction cloneRevokedClient(client: IrohRemoteRevokedClient): IrohRemoteGrantedRevokedClient {\n\treturn {\n\t\t...client,\n\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"revoked client rpcGrant\"),\n\t\t...(client.lastSessionIdByWorkspace ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } } : {}),\n\t};\n}\n\nfunction cloneWorkspace(workspace: IrohRemoteWorkspace): IrohRemoteWorkspace {\n\treturn { ...workspace };\n}\n\nfunction cloneWorktree(worktree: IrohRemoteWorkspaceWorktree): IrohRemoteWorkspaceWorktree {\n\treturn { ...worktree, sessionIds: [...worktree.sessionIds] };\n}\n\nfunction getRevokedClients(state: IrohRemoteHostState): IrohRemoteRevokedClient[] {\n\tstate.revokedClients ??= [];\n\treturn state.revokedClients;\n}\n\nfunction isSamePushTargetSlot(a: IrohRemotePushTarget, b: IrohRemotePushTarget): boolean {\n\treturn a.id === b.id || (a.provider === b.provider && a.platform === b.platform);\n}\n\nfunction isSameLiveActivityRegistration(\n\ta: IrohRemoteLiveActivityRegistration,\n\tb: IrohRemoteLiveActivityRegistration,\n): boolean {\n\treturn (\n\t\ta.workspaceName === b.workspaceName &&\n\t\ta.sessionId === b.sessionId &&\n\t\ta.activityId === b.activityId &&\n\t\ta.tokenHash === b.tokenHash &&\n\t\ta.tokenEnvironment === b.tokenEnvironment &&\n\t\ta.platform === b.platform &&\n\t\ta.pushTargetId === b.pushTargetId\n\t);\n}\n"]}