@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 @@
1
+ {"version":3,"file":"worktree-manager.d.ts","sourceRoot":"","sources":["../../src/daemon/worktree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomInt } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { mkdir, readdir, realpath, rename } from \"node:fs/promises\";\nimport { basename, dirname, isAbsolute, join, posix, relative, resolve, sep } from \"node:path\";\nimport type { IrohRemoteAuditLogger } from \"../core/remote/iroh/audit.ts\";\nimport { IROH_REMOTE_WORKTREE_ID_PATTERN } from \"../core/remote/iroh/protocol.ts\";\nimport type { IrohRemoteWorkspace, IrohRemoteWorkspaceWorktree } from \"../core/remote/iroh/state.ts\";\nimport {\n\ttype IrohRemoteHostStateManager,\n\tisIrohRemoteWorktreeParentWorkspaceNotFoundError,\n\tisIrohRemoteWorktreePersistenceError,\n} from \"../core/remote/iroh/state-manager.ts\";\nimport { spawnProcess, waitForChildProcess } from \"../utils/child-process.ts\";\nimport type { ControlRequest, ControlWorktreeStatus } from \"./control-protocol.ts\";\nimport type { ControlConnection } from \"./control-server.ts\";\nimport { resolveWorkspaceDirectory, type WorkspaceDirectoryResolution } from \"./workspace-directory.ts\";\n\n/** join(agentDir, \"worktrees\") — sibling of sessions/, daemon/, trust.json. */\nexport function getWorktreesRoot(agentDir: string): string {\n\treturn join(resolve(agentDir), \"worktrees\");\n}\n\nexport const WORKTREE_ID_PATTERN = IROH_REMOTE_WORKTREE_ID_PATTERN;\n\n/**\n * Encode a workspace path into the per-workspace worktrees directory segment,\n * reusing the `--<encoded-cwd>--` scheme from the session dirs so the layout\n * survives workspace renames. Long encodings are shortened with a hash suffix\n * to stay clear of Windows MAX_PATH limits.\n */\nfunction getWorkspaceWorktreesSegment(workspacePath: string): string {\n\tconst encoded = resolve(workspacePath)\n\t\t.replace(/^[/\\\\]/, \"\")\n\t\t.replace(/[/\\\\:]/g, \"-\");\n\tif (encoded.length <= 80) {\n\t\treturn `--${encoded}--`;\n\t}\n\tconst digest = createHash(\"sha1\").update(encoded).digest(\"hex\").slice(0, 8);\n\treturn `--${encoded.slice(0, 72)}-${digest}--`;\n}\n\n/** Per-workspace directory holding that workspace's worktree checkouts. */\nexport function getWorkspaceWorktreesDir(agentDir: string, workspacePath: string): string {\n\treturn join(getWorktreesRoot(agentDir), getWorkspaceWorktreesSegment(workspacePath));\n}\n\n/**\n * Deterministic checkout path; the ONLY producer of checkout paths. Validates\n * the id and asserts the resolved path stays under the worktrees root — never\n * accepts a caller-supplied path.\n */\nexport function getWorktreeCheckoutPath(agentDir: string, workspacePath: string, worktreeId: string): string {\n\tif (!WORKTREE_ID_PATTERN.test(worktreeId)) {\n\t\tthrow new Error(`invalid worktree id: ${worktreeId}`);\n\t}\n\tconst root = resolve(getWorktreesRoot(agentDir));\n\tconst checkoutPath = resolve(join(getWorkspaceWorktreesDir(agentDir, workspacePath), worktreeId));\n\tconst rootPrefix = `${root}${sep}`;\n\tconst contained =\n\t\tprocess.platform === \"win32\"\n\t\t\t? checkoutPath.toLowerCase().startsWith(rootPrefix.toLowerCase())\n\t\t\t: checkoutPath.startsWith(rootPrefix);\n\tif (!contained) {\n\t\tthrow new Error(\"worktree checkout path escapes the worktrees root\");\n\t}\n\treturn checkoutPath;\n}\n\n/**\n * Convert a path relative to a daemon-managed worktree checkout back into the\n * registered-workspace-relative path used on the remote protocol. Nested repo\n * worktrees store sourceRootRelativePath (e.g. `Volt`), so a worktree cwd of\n * `packages/coding-agent` displays as `Volt/packages/coding-agent`.\n */\nexport function getRegisteredWorkingDirectoryForWorktree(\n\tworktree: Pick<IrohRemoteWorkspaceWorktree, \"sourceRootRelativePath\">,\n\tworktreeRelativePath?: string,\n): string | undefined {\n\tif (worktree.sourceRootRelativePath === undefined) {\n\t\treturn worktreeRelativePath;\n\t}\n\treturn worktreeRelativePath === undefined\n\t\t? worktree.sourceRootRelativePath\n\t\t: posix.join(worktree.sourceRootRelativePath, worktreeRelativePath);\n}\n\n/** win32-aware \"path is inside root\" prefix check on resolved paths. */\nfunction isPathContained(root: string, path: string): boolean {\n\tconst resolvedRoot = resolve(root);\n\tconst resolvedPath = resolve(path);\n\tconst rootPrefix = `${resolvedRoot}${sep}`;\n\tif (process.platform === \"win32\") {\n\t\tconst lowerPath = resolvedPath.toLowerCase();\n\t\treturn lowerPath === resolvedRoot.toLowerCase() || lowerPath.startsWith(rootPrefix.toLowerCase());\n\t}\n\treturn resolvedPath === resolvedRoot || resolvedPath.startsWith(rootPrefix);\n}\n\n/** True when path is inside the daemon's worktrees root (a daemon-managed checkout or below). */\nexport function isPathUnderWorktreesRoot(agentDir: string, path: string): boolean {\n\tconst root = resolve(getWorktreesRoot(agentDir));\n\tconst resolved = resolve(path);\n\treturn resolved !== root && isPathContained(root, resolved);\n}\n\n/**\n * Resolve the PARENT checkout of a daemon-managed worktree from the checkout's\n * `.git` gitdir pointer (`gitdir: <parent>/.git/worktrees/<id>`), without a\n * daemon round-trip or a git subprocess. Returns undefined when the path is\n * not under the worktrees root or the pointer cannot be parsed. Used by the\n * TUI to pin trust decisions to the parent workspace path — trust entries are\n * never prompted for or persisted on worktree paths (design §5.1.9/§5.2.1).\n */\nexport function resolveWorktreeParentCheckout(agentDir: string, path: string): string | undefined {\n\tif (!isPathUnderWorktreesRoot(agentDir, path)) {\n\t\treturn undefined;\n\t}\n\tconst root = resolve(getWorktreesRoot(agentDir));\n\tconst relativeSegments = resolve(path)\n\t\t.slice(root.length + 1)\n\t\t.split(sep)\n\t\t.filter((segment) => segment.length > 0);\n\tif (relativeSegments.length < 2) {\n\t\treturn undefined;\n\t}\n\t// Layout: <root>/<encoded-workspace-segment>/<worktreeId>/...\n\tconst checkoutPath = join(root, relativeSegments[0] ?? \"\", relativeSegments[1] ?? \"\");\n\tlet gitFileContents: string;\n\ttry {\n\t\tgitFileContents = readFileSync(join(checkoutPath, \".git\"), \"utf8\");\n\t} catch {\n\t\treturn undefined;\n\t}\n\tconst match = gitFileContents.match(/^gitdir:\\s*(.+)\\s*$/m);\n\tif (!match?.[1]) {\n\t\treturn undefined;\n\t}\n\tconst gitDir = match[1].trim();\n\tif (!isAbsolute(gitDir)) {\n\t\treturn undefined;\n\t}\n\t// gitDir is <parent>/.git/worktrees/<name>; the parent checkout is three levels up.\n\tconst worktreesDir = dirname(resolve(gitDir));\n\tconst dotGitDir = dirname(worktreesDir);\n\tif (worktreesDir.split(sep).pop() !== \"worktrees\" || dotGitDir.split(sep).pop() !== \".git\") {\n\t\treturn undefined;\n\t}\n\treturn dirname(dotGitDir);\n}\n\nexport type WorktreeRelayGate = { ok: true } | { ok: false; reason: \"checkout_missing\" | \"tui_not_capable\" };\n\n/**\n * Gate a worktree-bound conversation relay: the checkout must exist and the\n * owning TUI must have advertised the worktrees control capability. Old TUIs\n * (no capability) are never offered worktree-session relays (design §5.2.3).\n */\nexport function evaluateWorktreeRelayGate(\n\tworktree: { path: string } | undefined,\n\ttuiCapabilities: ReadonlySet<string> | undefined,\n\tworktreesCapability: string,\n): WorktreeRelayGate {\n\tif (worktree === undefined) {\n\t\treturn { ok: true };\n\t}\n\tif (!existsSync(worktree.path)) {\n\t\treturn { ok: false, reason: \"checkout_missing\" };\n\t}\n\tif (tuiCapabilities === undefined || !tuiCapabilities.has(worktreesCapability)) {\n\t\treturn { ok: false, reason: \"tui_not_capable\" };\n\t}\n\treturn { ok: true };\n}\n\nexport type WorktreeError =\n\t| \"not_a_git_repository\"\n\t| \"worktree_exists\"\n\t| \"worktree_branch_conflict\"\n\t| \"worktree_not_found\"\n\t| \"worktree_dirty\"\n\t| \"worktree_busy\"\n\t| \"worktree_limit_reached\"\n\t| \"worktree_source_unregistered\"\n\t| \"invalid_worktree_id\"\n\t| \"invalid_working_directory\"\n\t| \"nested_git_repository_unsupported\"\n\t| \"git_failed\";\n\nexport type WorktreeGitRunner = (\n\targs: string[],\n\tcwd: string,\n) => Promise<{ ok: boolean; code: number | null; stdout: string; stderr: string }>;\n\nexport interface WorktreeManagerOptions {\n\tagentDir: string;\n\tstateManager: IrohRemoteHostStateManager;\n\tauditLogger: IrohRemoteAuditLogger;\n\t/** Injectable for tests; defaults to a spawnProcess/waitForChildProcess wrapper. */\n\trunGit?: WorktreeGitRunner;\n\t/** Max worktrees per workspace (default 16). */\n\tmaxWorktreesPerWorkspace?: number;\n\t/** Seam for \"is a runtime using this worktree\" (wired to IntegratedRuntimeRegistry). */\n\thasActiveRuntimeForSession?: (workspaceName: string, sessionId: string) => boolean;\n\t/** Durable-write seam (VoltdStateStore.flush); records must survive a crash the moment they exist. */\n\tflushState?: () => Promise<void>;\n\tnow?: () => number;\n}\n\nexport interface WorktreeStatus extends IrohRemoteWorkspaceWorktree {\n\t/** Checkout directory exists and `git worktree list` still knows it. */\n\tavailable: boolean;\n\t/** `git status --porcelain` non-empty, i.e. has uncommitted work (best-effort; undefined when unavailable). */\n\tdirty?: boolean;\n\t/** Branch commits vs the base ref (`git rev-list --left-right --count`); undefined when unavailable. */\n\taheadBehind?: { ahead: number; behind: number };\n}\n\nexport type WorktreeResult<T> = ({ ok: true } & T) | { ok: false; error: WorktreeError; detail?: string };\n\ninterface WorktreeSourceResolution {\n\t/** Selected directory under the registered workspace, preserving the remote relative path. */\n\tworkspaceDirectory: WorkspaceDirectoryResolution;\n\t/** Git repository root used as `git worktree add` cwd. Host-local; never sent on the wire. */\n\tsourceRootPath: string;\n\t/** Registered-workspace-relative git repository root. Undefined means the registered workspace root. */\n\tsourceRootRelativePath?: string;\n\t/** Selected cwd relative to the git repository root. Undefined means the repo root. */\n\tworkingDirectoryRelativePath?: string;\n}\n\nconst DEFAULT_MAX_WORKTREES_PER_WORKSPACE = 16;\n\nconst SLUG_ADJECTIVES = [\"amber\", \"brisk\", \"calm\", \"dusky\", \"eager\", \"fresh\", \"keen\", \"lucid\", \"quiet\", \"swift\"];\nconst SLUG_NOUNS = [\"basin\", \"cedar\", \"delta\", \"ember\", \"grove\", \"harbor\", \"mesa\", \"ridge\", \"summit\", \"vale\"];\n\nfunction generateWorktreeIdSlug(): string {\n\tconst adjective = SLUG_ADJECTIVES[randomInt(SLUG_ADJECTIVES.length)];\n\tconst noun = SLUG_NOUNS[randomInt(SLUG_NOUNS.length)];\n\treturn `${adjective}-${noun}-${String(randomInt(100)).padStart(2, \"0\")}`;\n}\n\n/** Default runner: no shell, argv only, captured stdio. */\nexport function createDefaultWorktreeGitRunner(): WorktreeGitRunner {\n\treturn async (args, cwd) => {\n\t\ttry {\n\t\t\tconst child = spawnProcess(\"git\", args, { cwd, stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n\t\t\tlet stdout = \"\";\n\t\t\tlet stderr = \"\";\n\t\t\tchild.stdout?.setEncoding(\"utf8\");\n\t\t\tchild.stderr?.setEncoding(\"utf8\");\n\t\t\tchild.stdout?.on(\"data\", (chunk: string) => {\n\t\t\t\tstdout += chunk;\n\t\t\t});\n\t\t\tchild.stderr?.on(\"data\", (chunk: string) => {\n\t\t\t\tstderr += chunk;\n\t\t\t});\n\t\t\tconst code = await waitForChildProcess(child);\n\t\t\treturn { ok: code === 0, code, stdout, stderr };\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst detail = message.includes(\"ENOENT\") ? \"git not found on daemon PATH; see docs/daemon.md\" : message;\n\t\t\treturn { ok: false, code: null, stdout: \"\", stderr: detail };\n\t\t}\n\t};\n}\n\n/**\n * Basic `git check-ref-format`-equivalent syntax gate for branch/baseRef\n * values. Rejects option injection (leading '-') and git-invalid ref\n * sequences; values are always passed as separate argv entries.\n */\nexport function isValidGitRefSyntax(ref: string): boolean {\n\tif (ref.length === 0 || ref.length > 255 || ref.startsWith(\"-\")) {\n\t\treturn false;\n\t}\n\tif (/[\\s~^:?*[\\\\\\x00-\\x1f\\x7f]/.test(ref)) {\n\t\treturn false;\n\t}\n\tif (ref.includes(\"..\") || ref.includes(\"@{\") || ref.includes(\"//\")) {\n\t\treturn false;\n\t}\n\tif (ref.startsWith(\"/\") || ref.endsWith(\"/\") || ref.endsWith(\".\") || ref.endsWith(\".lock\")) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport class WorktreeManager {\n\tprivate readonly agentDir: string;\n\tprivate readonly stateManager: IrohRemoteHostStateManager;\n\tprivate readonly auditLogger: IrohRemoteAuditLogger;\n\tprivate readonly runGit: WorktreeGitRunner;\n\tprivate readonly maxWorktreesPerWorkspace: number;\n\tprivate readonly hasActiveRuntimeForSession: ((workspaceName: string, sessionId: string) => boolean) | undefined;\n\tprivate readonly flushState: (() => Promise<void>) | undefined;\n\tprivate readonly now: () => number;\n\n\tconstructor(options: WorktreeManagerOptions) {\n\t\tthis.agentDir = options.agentDir;\n\t\tthis.stateManager = options.stateManager;\n\t\tthis.auditLogger = options.auditLogger;\n\t\tthis.runGit = options.runGit ?? createDefaultWorktreeGitRunner();\n\t\tthis.maxWorktreesPerWorkspace = options.maxWorktreesPerWorkspace ?? DEFAULT_MAX_WORKTREES_PER_WORKSPACE;\n\t\tthis.hasActiveRuntimeForSession = options.hasActiveRuntimeForSession;\n\t\tthis.flushState = options.flushState;\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\t/** git worktree add; persists the record durably after git succeeds. */\n\tasync create(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\toptions: { id?: string; branch?: string; baseRef?: string; workingDirectory?: string } = {},\n\t): Promise<WorktreeResult<{ worktree: IrohRemoteWorkspaceWorktree }>> {\n\t\tconst id = options.id ?? generateWorktreeIdSlug();\n\t\tif (!WORKTREE_ID_PATTERN.test(id)) {\n\t\t\treturn { ok: false, error: \"invalid_worktree_id\" };\n\t\t}\n\t\tconst branch = options.branch ?? `volt/${id}`;\n\t\tconst baseRef = options.baseRef ?? \"HEAD\";\n\t\tif (!isValidGitRefSyntax(branch)) {\n\t\t\treturn { ok: false, error: \"git_failed\", detail: \"invalid branch ref syntax\" };\n\t\t}\n\t\tif (!isValidGitRefSyntax(baseRef)) {\n\t\t\treturn { ok: false, error: \"git_failed\", detail: \"invalid baseRef ref syntax\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.stateManager.runWorkspaceWorktreeLifecycle<\n\t\t\t\tWorktreeResult<{ worktree: IrohRemoteWorkspaceWorktree }>\n\t\t\t>(workspace.name, async ({ workspace: registeredWorkspace, worktrees: existing }) => {\n\t\t\t\tif (existing.length >= this.maxWorktreesPerWorkspace) {\n\t\t\t\t\treturn { result: { ok: false, error: \"worktree_limit_reached\" } };\n\t\t\t\t}\n\t\t\t\tconst checkoutPath = getWorktreeCheckoutPath(this.agentDir, registeredWorkspace.path, id);\n\t\t\t\tif (existing.some((entry) => entry.id === id) || existsSync(checkoutPath)) {\n\t\t\t\t\treturn { result: { ok: false, error: \"worktree_exists\" } };\n\t\t\t\t}\n\n\t\t\t\tconst source = await this.resolveCreateSource(registeredWorkspace, options.workingDirectory);\n\t\t\t\tif (!source.ok) {\n\t\t\t\t\treturn { result: source };\n\t\t\t\t}\n\t\t\t\tconst repoCheck = await this.runGit([\"rev-parse\", \"--git-common-dir\"], source.source.sourceRootPath);\n\t\t\t\tif (!repoCheck.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: this.mapGitFailure(repoCheck.stderr, registeredWorkspace, checkoutPath, [\n\t\t\t\t\t\t\tsource.source.sourceRootPath,\n\t\t\t\t\t\t]),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Resolve a defaulted base to a concrete ref (the source checkout's branch,\n\t\t\t\t// falling back to its commit sha) so merge-back guidance — aheadBehind,\n\t\t\t\t// retention merge checks, `worktree diff` — has a stable base later.\n\t\t\t\tconst recordedBaseRef = options.baseRef ?? (await this.resolveDefaultBaseRef(source.source.sourceRootPath));\n\n\t\t\t\tawait mkdir(getWorkspaceWorktreesDir(this.agentDir, registeredWorkspace.path), {\n\t\t\t\t\trecursive: true,\n\t\t\t\t\tmode: 0o700,\n\t\t\t\t});\n\t\t\t\tconst added = await this.runGit(\n\t\t\t\t\t[\"worktree\", \"add\", checkoutPath, \"-b\", branch, baseRef],\n\t\t\t\t\tsource.source.sourceRootPath,\n\t\t\t\t);\n\t\t\t\tif (!added.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: this.mapGitFailure(added.stderr, registeredWorkspace, checkoutPath, [\n\t\t\t\t\t\t\tsource.source.sourceRootPath,\n\t\t\t\t\t\t]),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst worktree: IrohRemoteWorkspaceWorktree = {\n\t\t\t\t\tid,\n\t\t\t\t\tworkspaceName: registeredWorkspace.name,\n\t\t\t\t\tpath: checkoutPath,\n\t\t\t\t\t...(source.source.sourceRootRelativePath === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { sourceRootRelativePath: source.source.sourceRootRelativePath }),\n\t\t\t\t\tbranch,\n\t\t\t\t\t...(recordedBaseRef === undefined ? {} : { baseRef: recordedBaseRef }),\n\t\t\t\t\tcreatedAt: this.now(),\n\t\t\t\t\tsessionIds: [],\n\t\t\t\t};\n\t\t\t\treturn { result: { ok: true, worktree }, worktree };\n\t\t\t});\n\t\t\tif (result.ok) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.flushState?.();\n\t\t\t\t} catch {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tok: false,\n\t\t\t\t\t\terror: \"git_failed\",\n\t\t\t\t\t\tdetail: \"worktree state could not be flushed; the checkout and daemon record were preserved\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (isIrohRemoteWorktreeParentWorkspaceNotFoundError(error)) {\n\t\t\t\treturn { ok: false, error: \"worktree_source_unregistered\" };\n\t\t\t}\n\t\t\tif (isIrohRemoteWorktreePersistenceError(error)) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: \"git_failed\",\n\t\t\t\t\tdetail: \"worktree state could not be persisted; the created checkout was preserved for recovery\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Adopt an existing git worktree checkout into daemon state; local control socket only. */\n\tasync adopt(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\toptions: { path: string; id?: string; baseRef?: string },\n\t): Promise<WorktreeResult<{ worktree: IrohRemoteWorkspaceWorktree }>> {\n\t\tconst requestedPath = resolve(options.path);\n\t\tif (options.id !== undefined && !WORKTREE_ID_PATTERN.test(options.id)) {\n\t\t\treturn { ok: false, error: \"invalid_worktree_id\" };\n\t\t}\n\t\tif (options.baseRef !== undefined && !isValidGitRefSyntax(options.baseRef)) {\n\t\t\treturn { ok: false, error: \"git_failed\", detail: \"invalid baseRef ref syntax\" };\n\t\t}\n\t\tif (!existsSync(requestedPath)) {\n\t\t\treturn { ok: false, error: \"worktree_not_found\", detail: \"checkout path does not exist\" };\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.stateManager.runWorkspaceWorktreeLifecycle<\n\t\t\t\tWorktreeResult<{ worktree: IrohRemoteWorkspaceWorktree }>\n\t\t\t>(workspace.name, async ({ workspace: registeredWorkspace, worktrees: existing }) => {\n\t\t\t\tif (existing.length >= this.maxWorktreesPerWorkspace) {\n\t\t\t\t\treturn { result: { ok: false, error: \"worktree_limit_reached\" } };\n\t\t\t\t}\n\n\t\t\t\tconst topLevel = await this.runGit([\"rev-parse\", \"--show-toplevel\"], requestedPath);\n\t\t\t\tif (!topLevel.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: this.mapGitFailure(topLevel.stderr, registeredWorkspace, requestedPath, [requestedPath]),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst targetRootPath = await realpathOrResolve(topLevel.stdout.trim());\n\t\t\t\tif (existing.some((entry) => entry.id === options.id || isSamePath(entry.path, targetRootPath))) {\n\t\t\t\t\treturn { result: { ok: false, error: \"worktree_exists\" } };\n\t\t\t\t}\n\t\t\t\tconst id =\n\t\t\t\t\toptions.id ?? deriveAdoptedWorktreeId(targetRootPath, new Set(existing.map((entry) => entry.id)));\n\t\t\t\tif (!WORKTREE_ID_PATTERN.test(id)) {\n\t\t\t\t\treturn { result: { ok: false, error: \"invalid_worktree_id\" } };\n\t\t\t\t}\n\n\t\t\t\tconst gitList = await this.runGit([\"worktree\", \"list\", \"--porcelain\"], targetRootPath);\n\t\t\t\tif (!gitList.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: this.mapGitFailure(gitList.stderr, registeredWorkspace, targetRootPath, [\n\t\t\t\t\t\t\trequestedPath,\n\t\t\t\t\t\t\ttargetRootPath,\n\t\t\t\t\t\t]),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst entries = parseWorktreeListEntries(gitList.stdout);\n\t\t\t\tconst targetEntry = await findWorktreeListEntryByPath(entries, targetRootPath);\n\t\t\t\tif (targetEntry === undefined) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\terror: \"worktree_not_found\",\n\t\t\t\t\t\t\tdetail: \"checkout is not listed by git worktree\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst workspaceRootPath = await realpathOrResolve(registeredWorkspace.path);\n\t\t\t\tconst sourceRootPath = await findAdoptSourceRootPath(entries, workspaceRootPath, targetRootPath);\n\t\t\t\tif (sourceRootPath === undefined) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\terror: \"worktree_source_unregistered\",\n\t\t\t\t\t\t\tdetail: \"worktree source checkout is not inside the registered workspace\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst sourceRootRelativePath = await findWorkspaceRelativePathForRealpath(\n\t\t\t\t\tworkspaceRootPath,\n\t\t\t\t\tundefined,\n\t\t\t\t\tsourceRootPath,\n\t\t\t\t);\n\t\t\t\tif (sourceRootRelativePath === null) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\terror: \"worktree_source_unregistered\",\n\t\t\t\t\t\t\tdetail: \"worktree source checkout is not inside the registered workspace\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst branch = targetEntry.branch ?? targetEntry.detached ?? \"HEAD\";\n\t\t\t\tif (!isValidGitRefSyntax(branch)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: { ok: false, error: \"git_failed\", detail: \"invalid worktree branch ref syntax\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst baseRef = options.baseRef ?? (await this.resolveDefaultBaseRef(sourceRootPath));\n\n\t\t\t\tconst worktree: IrohRemoteWorkspaceWorktree = {\n\t\t\t\t\tid,\n\t\t\t\t\tworkspaceName: registeredWorkspace.name,\n\t\t\t\t\tpath: targetRootPath,\n\t\t\t\t\t...(sourceRootRelativePath === undefined ? {} : { sourceRootRelativePath }),\n\t\t\t\t\tbranch,\n\t\t\t\t\t...(baseRef === undefined ? {} : { baseRef }),\n\t\t\t\t\tcreatedAt: this.now(),\n\t\t\t\t\tsessionIds: [],\n\t\t\t\t};\n\t\t\t\treturn { result: { ok: true, worktree }, worktree };\n\t\t\t});\n\t\t\tif (result.ok) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.flushState?.();\n\t\t\t\t} catch {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tok: false,\n\t\t\t\t\t\terror: \"git_failed\",\n\t\t\t\t\t\tdetail: \"worktree state could not be flushed; the existing checkout and daemon record were preserved\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (isIrohRemoteWorktreeParentWorkspaceNotFoundError(error)) {\n\t\t\t\treturn { ok: false, error: \"worktree_source_unregistered\" };\n\t\t\t}\n\t\t\tif (isIrohRemoteWorktreePersistenceError(error)) {\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: \"git_failed\",\n\t\t\t\t\tdetail: \"worktree state could not be persisted; the existing checkout was left unchanged\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync validateWorkingDirectory(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworkingDirectory?: string,\n\t): Promise<WorktreeResult<{ directory: WorkspaceDirectoryResolution }>> {\n\t\tconst resolved = await resolveWorkspaceDirectory(workspace.path, workingDirectory);\n\t\tif (!resolved.ok) {\n\t\t\treturn { ok: false, error: \"invalid_working_directory\", detail: resolved.error };\n\t\t}\n\t\treturn { ok: true, directory: resolved.value };\n\t}\n\n\tasync resolveWorktreeWorkingDirectory(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworktree: IrohRemoteWorkspaceWorktree,\n\t\tworkingDirectory?: string,\n\t): Promise<WorktreeResult<{ directory: WorkspaceDirectoryResolution }>> {\n\t\tif (workingDirectory === undefined) {\n\t\t\tconst rootDirectory = await resolveWorkspaceDirectory(worktree.path);\n\t\t\treturn rootDirectory.ok\n\t\t\t\t? { ok: true, directory: rootDirectory.value }\n\t\t\t\t: { ok: false, error: \"invalid_working_directory\", detail: rootDirectory.error };\n\t\t}\n\t\tconst parentDirectory = await this.validateWorkingDirectory(workspace, workingDirectory);\n\t\tif (!parentDirectory.ok) {\n\t\t\treturn parentDirectory;\n\t\t}\n\t\tconst sourceRootPath = await this.resolveRecordSourceRootPath(workspace, worktree);\n\t\tif (sourceRootPath === undefined || !isPathContained(sourceRootPath, parentDirectory.directory.absolutePath)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"invalid_working_directory\",\n\t\t\t\tdetail: \"workingDirectory is outside the worktree source repository\",\n\t\t\t};\n\t\t}\n\t\tconst worktreeRelativePath = getContainedRelativePath(sourceRootPath, parentDirectory.directory.absolutePath);\n\t\tif (worktreeRelativePath === null) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"invalid_working_directory\",\n\t\t\t\tdetail: \"workingDirectory is outside the worktree source repository\",\n\t\t\t};\n\t\t}\n\t\tconst worktreeDirectory = await resolveWorkspaceDirectory(worktree.path, worktreeRelativePath);\n\t\treturn worktreeDirectory.ok\n\t\t\t? { ok: true, directory: worktreeDirectory.value }\n\t\t\t: { ok: false, error: \"invalid_working_directory\", detail: worktreeDirectory.error };\n\t}\n\n\tprivate async resolveCreateSource(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworkingDirectory?: string,\n\t): Promise<WorktreeResult<{ source: WorktreeSourceResolution }>> {\n\t\tconst workspaceDirectory = await this.validateWorkingDirectory(workspace, workingDirectory);\n\t\tif (!workspaceDirectory.ok) {\n\t\t\treturn workspaceDirectory;\n\t\t}\n\t\tconst topLevel = await this.runGit(\n\t\t\t[\"-C\", workspaceDirectory.directory.absolutePath, \"rev-parse\", \"--show-toplevel\"],\n\t\t\tworkspace.path,\n\t\t);\n\t\tif (!topLevel.ok) {\n\t\t\tconst detail = sanitizeGitDetail(topLevel.stderr, [\n\t\t\t\tworkspace.path,\n\t\t\t\tworkspaceDirectory.directory.absolutePath,\n\t\t\t\tgetWorktreesRoot(this.agentDir),\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: topLevel.stderr.toLowerCase().includes(\"not a git repository\")\n\t\t\t\t\t? \"not_a_git_repository\"\n\t\t\t\t\t: \"git_failed\",\n\t\t\t\t...(detail.length === 0 ? {} : { detail }),\n\t\t\t};\n\t\t}\n\t\tconst workspaceRootPath = await realpathOrResolve(workspace.path);\n\t\tconst sourceRootPath = await realpathOrResolve(topLevel.stdout.trim());\n\t\tif (!isPathContained(workspaceRootPath, sourceRootPath)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"invalid_working_directory\",\n\t\t\t\tdetail: \"git repository is outside the registered workspace\",\n\t\t\t};\n\t\t}\n\t\tconst sourceRootRelativePath = await findWorkspaceRelativePathForRealpath(\n\t\t\tworkspaceRootPath,\n\t\t\tworkspaceDirectory.directory.relativePath,\n\t\t\tsourceRootPath,\n\t\t);\n\t\tif (sourceRootRelativePath === null) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"invalid_working_directory\",\n\t\t\t\tdetail: \"git repository is outside the registered workspace\",\n\t\t\t};\n\t\t}\n\t\tconst workingDirectoryRelativePath = getContainedRelativePath(\n\t\t\tsourceRootPath,\n\t\t\tworkspaceDirectory.directory.absolutePath,\n\t\t);\n\t\tif (workingDirectoryRelativePath === null) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: \"invalid_working_directory\",\n\t\t\t\tdetail: \"workingDirectory is outside the source repository\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsource: {\n\t\t\t\tworkspaceDirectory: workspaceDirectory.directory,\n\t\t\t\tsourceRootPath,\n\t\t\t\t...(sourceRootRelativePath === undefined ? {} : { sourceRootRelativePath }),\n\t\t\t\t...(workingDirectoryRelativePath === undefined ? {} : { workingDirectoryRelativePath }),\n\t\t\t},\n\t\t};\n\t}\n\n\tasync list(workspace: IrohRemoteWorkspace): Promise<WorktreeStatus[]> {\n\t\tconst records = await this.stateManager.listWorktrees(workspace.name);\n\t\tconst gitListBySourceRoot = new Map<string, Set<string> | undefined>();\n\t\tconst statuses: WorktreeStatus[] = [];\n\t\tfor (const record of records) {\n\t\t\tconst sourceRootPath = await this.resolveRecordSourceRootPath(workspace, record);\n\t\t\tconst knownCheckouts =\n\t\t\t\tsourceRootPath === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: await this.getKnownWorktreeCheckouts(sourceRootPath, gitListBySourceRoot);\n\t\t\tconst onDisk = existsSync(record.path);\n\t\t\tconst available =\n\t\t\t\tonDisk &&\n\t\t\t\tsourceRootPath !== undefined &&\n\t\t\t\t(knownCheckouts === undefined || knownCheckouts.has(resolve(record.path)));\n\t\t\tlet dirty: boolean | undefined;\n\t\t\tlet aheadBehind: { ahead: number; behind: number } | undefined;\n\t\t\tif (available) {\n\t\t\t\t// --no-optional-locks is a git-level option and must precede the subcommand.\n\t\t\t\tconst status = await this.runGit(\n\t\t\t\t\t[\"-C\", record.path, \"--no-optional-locks\", \"status\", \"--porcelain\"],\n\t\t\t\t\tsourceRootPath,\n\t\t\t\t);\n\t\t\t\tdirty = status.ok ? status.stdout.trim().length > 0 : undefined;\n\t\t\t\taheadBehind = await this.computeAheadBehind(sourceRootPath, record);\n\t\t\t}\n\t\t\tstatuses.push({\n\t\t\t\t...record,\n\t\t\t\tavailable,\n\t\t\t\t...(dirty === undefined ? {} : { dirty }),\n\t\t\t\t...(aheadBehind === undefined ? {} : { aheadBehind }),\n\t\t\t});\n\t\t}\n\t\treturn statuses;\n\t}\n\n\tprivate async getKnownWorktreeCheckouts(\n\t\tsourceRootPath: string,\n\t\tcache: Map<string, Set<string> | undefined>,\n\t): Promise<Set<string> | undefined> {\n\t\tconst key = resolve(sourceRootPath);\n\t\tif (cache.has(key)) {\n\t\t\treturn cache.get(key);\n\t\t}\n\t\tconst gitList = await this.runGit([\"worktree\", \"list\", \"--porcelain\"], sourceRootPath);\n\t\tconst knownCheckouts = gitList.ok ? parseWorktreeListCheckouts(gitList.stdout) : undefined;\n\t\tcache.set(key, knownCheckouts);\n\t\treturn knownCheckouts;\n\t}\n\n\tprivate async resolveRecordSourceRootPath(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\trecord: IrohRemoteWorkspaceWorktree,\n\t): Promise<string | undefined> {\n\t\tconst resolved = await resolveWorkspaceDirectory(workspace.path, record.sourceRootRelativePath);\n\t\treturn resolved.ok ? resolved.value.absolutePath : undefined;\n\t}\n\n\t/** Concrete base for a defaulted create: current branch name, else commit sha. */\n\tprivate async resolveDefaultBaseRef(sourceRootPath: string): Promise<string | undefined> {\n\t\tconst symbolic = await this.runGit([\"symbolic-ref\", \"--short\", \"-q\", \"HEAD\"], sourceRootPath);\n\t\tconst shortRef = symbolic.ok ? symbolic.stdout.trim() : \"\";\n\t\tif (shortRef.length > 0 && isValidGitRefSyntax(shortRef)) {\n\t\t\treturn shortRef;\n\t\t}\n\t\tconst sha = await this.runGit([\"rev-parse\", \"HEAD\"], sourceRootPath);\n\t\tconst shaValue = sha.ok ? sha.stdout.trim() : \"\";\n\t\treturn /^[0-9a-f]{4,64}$/i.test(shaValue) ? shaValue : undefined;\n\t}\n\n\t/**\n\t * Merge-back guidance (design §5.3): branch commits relative to the base\n\t * ref, computed read-only in the source checkout. `left...right` with\n\t * left = base and right = branch yields \"behind<TAB>ahead\".\n\t */\n\tprivate async computeAheadBehind(\n\t\tsourceRootPath: string,\n\t\trecord: IrohRemoteWorkspaceWorktree,\n\t): Promise<{ ahead: number; behind: number } | undefined> {\n\t\tconst baseRef = record.baseRef ?? \"HEAD\";\n\t\tconst counted = await this.runGit(\n\t\t\t[\"rev-list\", \"--left-right\", \"--count\", `${baseRef}...${record.branch}`],\n\t\t\tsourceRootPath,\n\t\t);\n\t\tif (!counted.ok) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst match = counted.stdout.trim().match(/^(\\d+)\\s+(\\d+)$/);\n\t\tif (!match?.[1] || !match[2]) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { behind: Number.parseInt(match[1], 10), ahead: Number.parseInt(match[2], 10) };\n\t}\n\n\t/** Refuses dirty/busy unless force; `git worktree remove [--force]`, then drops the record. */\n\tasync remove(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworktreeId: string,\n\t\toptions: { force?: boolean } = {},\n\t): Promise<WorktreeResult<Record<never, never>>> {\n\t\tconst force = options.force === true;\n\t\tconst records = await this.stateManager.listWorktrees(workspace.name);\n\t\tconst record = records.find((entry) => entry.id === worktreeId);\n\t\tif (!record) {\n\t\t\treturn { ok: false, error: \"worktree_not_found\" };\n\t\t}\n\t\tif (!force && this.hasActiveRuntimeForSession) {\n\t\t\tconst busy = record.sessionIds.some((sessionId) =>\n\t\t\t\tthis.hasActiveRuntimeForSession?.(workspace.name, sessionId),\n\t\t\t);\n\t\t\tif (busy) {\n\t\t\t\treturn { ok: false, error: \"worktree_busy\" };\n\t\t\t}\n\t\t}\n\t\tconst sourceRootPath = await this.resolveRecordSourceRootPath(workspace, record);\n\t\tif (existsSync(record.path)) {\n\t\t\tif (sourceRootPath === undefined) {\n\t\t\t\treturn { ok: false, error: \"not_a_git_repository\", detail: \"worktree source repository is unavailable\" };\n\t\t\t}\n\t\t\tif (!force) {\n\t\t\t\tconst status = await this.runGit(\n\t\t\t\t\t[\"-C\", record.path, \"--no-optional-locks\", \"status\", \"--porcelain\"],\n\t\t\t\t\tsourceRootPath,\n\t\t\t\t);\n\t\t\t\tif (status.ok && status.stdout.trim().length > 0) {\n\t\t\t\t\treturn { ok: false, error: \"worktree_dirty\", detail: \"dirty\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst args = force ? [\"worktree\", \"remove\", \"--force\", record.path] : [\"worktree\", \"remove\", record.path];\n\t\t\tconst removed = await this.runGit(args, sourceRootPath);\n\t\t\tif (!removed.ok) {\n\t\t\t\treturn this.mapGitFailure(removed.stderr, workspace, record.path, [sourceRootPath]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Checkout vanished out-of-band: clear the stale gitdir entry best-effort.\n\t\t\tif (sourceRootPath !== undefined) {\n\t\t\t\tawait this.runGit([\"worktree\", \"prune\"], sourceRootPath).catch(() => undefined);\n\t\t\t}\n\t\t}\n\t\tawait this.stateManager.removeWorktree(workspace.name, worktreeId);\n\t\tawait this.flushState?.();\n\t\treturn { ok: true };\n\t}\n\n\t/**\n\t * Reconcile persisted records vs filesystem vs `git worktree list`. Drops\n\t * records without checkouts, quarantines unrecognized checkout directories\n\t * (rename, never delete), and runs `git worktree prune` in each known source checkout.\n\t */\n\tasync prune(workspace: IrohRemoteWorkspace): Promise<{ removedRecords: string[]; orphanCheckouts: string[] }> {\n\t\tconst records = await this.stateManager.listWorktrees(workspace.name);\n\t\tconst removedRecords: string[] = [];\n\t\tconst sourceRootPaths = new Set<string>();\n\t\tfor (const record of records) {\n\t\t\tconst sourceRootPath = await this.resolveRecordSourceRootPath(workspace, record);\n\t\t\tif (sourceRootPath !== undefined) {\n\t\t\t\tsourceRootPaths.add(sourceRootPath);\n\t\t\t}\n\t\t\tif (!existsSync(record.path)) {\n\t\t\t\tawait this.stateManager.removeWorktree(workspace.name, record.id);\n\t\t\t\tremovedRecords.push(record.id);\n\t\t\t}\n\t\t}\n\t\tconst parentSourceRootPath = await this.resolveRecordSourceRootPath(workspace, {\n\t\t\tid: \"root\",\n\t\t\tworkspaceName: workspace.name,\n\t\t\tpath: workspace.path,\n\t\t\tbranch: \"HEAD\",\n\t\t\tcreatedAt: 0,\n\t\t\tsessionIds: [],\n\t\t});\n\t\tif (parentSourceRootPath !== undefined) {\n\t\t\tsourceRootPaths.add(parentSourceRootPath);\n\t\t}\n\t\tconst orphanCheckouts: string[] = [];\n\t\tconst workspaceDir = getWorkspaceWorktreesDir(this.agentDir, workspace.path);\n\t\tconst recordedPaths = new Set(records.map((record) => resolve(record.path)));\n\t\tif (existsSync(workspaceDir)) {\n\t\t\tfor (const entry of await readdir(workspaceDir, { withFileTypes: true })) {\n\t\t\t\tif (!entry.isDirectory() || entry.name.includes(\".orphan-\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst entryPath = resolve(join(workspaceDir, entry.name));\n\t\t\t\tif (recordedPaths.has(entryPath)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst quarantinePath = `${entryPath}.orphan-${this.now()}`;\n\t\t\t\ttry {\n\t\t\t\t\tawait rename(entryPath, quarantinePath);\n\t\t\t\t\torphanCheckouts.push(entry.name);\n\t\t\t\t} catch {\n\t\t\t\t\t// Quarantine is best-effort; a busy directory stays put for the next prune.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const sourceRootPath of sourceRootPaths) {\n\t\t\tawait this.runGit([\"worktree\", \"prune\"], sourceRootPath).catch(() => undefined);\n\t\t}\n\t\tif (removedRecords.length > 0) {\n\t\t\tawait this.flushState?.();\n\t\t}\n\t\tawait this.logAudit({\n\t\t\ttype: \"worktree_pruned\",\n\t\t\tworkspace: workspace.name,\n\t\t\tsuccess: true,\n\t\t\tdetails: { removedRecords, orphanCheckouts },\n\t\t});\n\t\treturn { removedRecords, orphanCheckouts };\n\t}\n\n\t/**\n\t * Retention removal (design §5.3): remove a worktree ONLY when it is not\n\t * busy, has no uncommitted work, and its branch is fully merged into the\n\t * base ref. Never forces; a skip returns the reason for the audit trail.\n\t */\n\tasync removeIfCleanAndMerged(\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworktreeId: string,\n\t): Promise<{ removed: true } | { removed: false; reason: string }> {\n\t\tconst record = (await this.stateManager.listWorktrees(workspace.name)).find((entry) => entry.id === worktreeId);\n\t\tif (!record) {\n\t\t\treturn { removed: false, reason: \"worktree_not_found\" };\n\t\t}\n\t\tif (\n\t\t\tthis.hasActiveRuntimeForSession &&\n\t\t\trecord.sessionIds.some((sessionId) => this.hasActiveRuntimeForSession?.(workspace.name, sessionId))\n\t\t) {\n\t\t\treturn { removed: false, reason: \"busy\" };\n\t\t}\n\t\tif (!existsSync(record.path)) {\n\t\t\treturn { removed: false, reason: \"checkout_missing\" };\n\t\t}\n\t\tconst sourceRootPath = await this.resolveRecordSourceRootPath(workspace, record);\n\t\tif (sourceRootPath === undefined) {\n\t\t\treturn { removed: false, reason: \"source_unavailable\" };\n\t\t}\n\t\tconst status = await this.runGit(\n\t\t\t[\"-C\", record.path, \"--no-optional-locks\", \"status\", \"--porcelain\"],\n\t\t\tsourceRootPath,\n\t\t);\n\t\tif (!status.ok || status.stdout.trim().length > 0) {\n\t\t\treturn { removed: false, reason: \"dirty\" };\n\t\t}\n\t\tconst merged = await this.runGit(\n\t\t\t[\"merge-base\", \"--is-ancestor\", record.branch, record.baseRef ?? \"HEAD\"],\n\t\t\tsourceRootPath,\n\t\t);\n\t\tif (!merged.ok) {\n\t\t\treturn { removed: false, reason: \"unmerged\" };\n\t\t}\n\t\tconst removedResult = await this.remove(workspace, worktreeId, { force: false });\n\t\tif (!removedResult.ok) {\n\t\t\treturn { removed: false, reason: removedResult.error };\n\t\t}\n\t\treturn { removed: true };\n\t}\n\n\t/** Lookup used by conversation open/resume and relay preamble resolution. */\n\tasync resolveSessionWorktree(\n\t\tworkspaceName: string,\n\t\tsessionId: string,\n\t): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\treturn this.stateManager.findWorktreeForSession(workspaceName, sessionId);\n\t}\n\n\tasync bindSession(workspaceName: string, worktreeId: string, sessionId: string): Promise<void> {\n\t\tawait this.stateManager.bindWorktreeSession(workspaceName, worktreeId, sessionId);\n\t\tawait this.flushState?.();\n\t}\n\n\tasync findWorktree(workspaceName: string, worktreeId: string): Promise<IrohRemoteWorkspaceWorktree | undefined> {\n\t\tconst records = await this.stateManager.listWorktrees(workspaceName);\n\t\treturn records.find((entry) => entry.id === worktreeId);\n\t}\n\n\t/**\n\t * Compatibility guard for post-unregister callers. Workspace unregister is\n\t * deliberately non-destructive: persisted worktrees block the state mutation,\n\t * and unknown checkout directories are preserved for manual reconciliation.\n\t */\n\tasync cleanupUnregisteredWorkspace(workspace: IrohRemoteWorkspace): Promise<void> {\n\t\tconst workspaceDir = getWorkspaceWorktreesDir(this.agentDir, workspace.path);\n\t\tif (!existsSync(workspaceDir)) {\n\t\t\treturn;\n\t\t}\n\t\tlet preservedEntryCount = 0;\n\t\ttry {\n\t\t\tpreservedEntryCount = (await readdir(workspaceDir)).length;\n\t\t} catch {\n\t\t\t// Inspection is best-effort. Failure still leaves every path untouched.\n\t\t}\n\t\tconst persistedWorktreeIds = (await this.stateManager.listWorktrees(workspace.name))\n\t\t\t.map((worktree) => worktree.id)\n\t\t\t.sort();\n\t\tawait this.logAudit({\n\t\t\ttype: \"worktree_unregister_cleanup_skipped\",\n\t\t\tworkspace: workspace.name,\n\t\t\tsuccess: false,\n\t\t\terror: \"workspace unregister never removes worktree checkouts\",\n\t\t\tdetails: {\n\t\t\t\tpersistedWorktreeIds,\n\t\t\t\tpreservedEntryCount,\n\t\t\t\treason: \"non_destructive_workspace_unregister\",\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate mapGitFailure(\n\t\tstderr: string,\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tcheckoutPath: string,\n\t\textraPaths: string[] = [],\n\t): { ok: false; error: WorktreeError; detail: string } {\n\t\tconst detail = sanitizeGitDetail(stderr, [\n\t\t\tcheckoutPath,\n\t\t\tworkspace.path,\n\t\t\t...extraPaths,\n\t\t\tgetWorktreesRoot(this.agentDir),\n\t\t]);\n\t\tconst lower = stderr.toLowerCase();\n\t\tif (lower.includes(\"not a git repository\")) {\n\t\t\treturn { ok: false, error: \"not_a_git_repository\", detail };\n\t\t}\n\t\tif (lower.includes(\"already exists\")) {\n\t\t\treturn lower.includes(\"branch\") || lower.includes(\"-b\")\n\t\t\t\t? { ok: false, error: \"worktree_branch_conflict\", detail }\n\t\t\t\t: { ok: false, error: \"worktree_exists\", detail };\n\t\t}\n\t\tif (lower.includes(\"contains modified or untracked files\")) {\n\t\t\treturn { ok: false, error: \"worktree_dirty\", detail };\n\t\t}\n\t\treturn { ok: false, error: \"git_failed\", detail };\n\t}\n\n\tprivate async logAudit(event: Parameters<IrohRemoteAuditLogger[\"log\"]>[0]): Promise<void> {\n\t\ttry {\n\t\t\tawait this.auditLogger.log(event);\n\t\t} catch {\n\t\t\t// Audit logging is best-effort.\n\t\t}\n\t}\n}\n\nasync function realpathOrResolve(path: string): Promise<string> {\n\ttry {\n\t\treturn await realpath(path);\n\t} catch {\n\t\treturn resolve(path);\n\t}\n}\n\nfunction getContainedRelativePath(root: string, child: string): string | null | undefined {\n\tconst relativePath = relative(resolve(root), resolve(child));\n\tif (relativePath.length === 0 || relativePath === \".\") {\n\t\treturn undefined;\n\t}\n\tif (relativePath === \"..\" || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath)) {\n\t\treturn null;\n\t}\n\treturn relativePath.split(sep).join(\"/\");\n}\n\nasync function findWorkspaceRelativePathForRealpath(\n\tworkspaceRootPath: string,\n\tselectedRelativePath: string | undefined,\n\ttargetRealpath: string,\n): Promise<string | null | undefined> {\n\tconst selectedSegments = selectedRelativePath?.split(\"/\") ?? [];\n\tfor (let count = selectedSegments.length; count >= 0; count -= 1) {\n\t\tconst candidateRelativePath = count === 0 ? undefined : selectedSegments.slice(0, count).join(\"/\");\n\t\tconst candidatePath =\n\t\t\tcandidateRelativePath === undefined ? workspaceRootPath : resolve(workspaceRootPath, candidateRelativePath);\n\t\ttry {\n\t\t\tconst candidateRealpath = await realpath(candidatePath);\n\t\t\tif (isSamePath(candidateRealpath, targetRealpath)) {\n\t\t\t\treturn candidateRelativePath;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore missing ancestors and fall back to the canonical realpath-relative form below.\n\t\t}\n\t}\n\treturn getContainedRelativePath(workspaceRootPath, targetRealpath);\n}\n\nfunction isSamePath(left: string, right: string): boolean {\n\tconst resolvedLeft = resolve(left);\n\tconst resolvedRight = resolve(right);\n\treturn process.platform === \"win32\"\n\t\t? resolvedLeft.toLowerCase() === resolvedRight.toLowerCase()\n\t\t: resolvedLeft === resolvedRight;\n}\n\ninterface GitWorktreeListEntry {\n\tpath: string;\n\tbranch?: string;\n\tdetached?: string;\n}\n\nfunction parseWorktreeListEntries(porcelainOutput: string): GitWorktreeListEntry[] {\n\tconst entries: GitWorktreeListEntry[] = [];\n\tlet current: GitWorktreeListEntry | undefined;\n\tconst pushCurrent = () => {\n\t\tif (current !== undefined) {\n\t\t\tentries.push(current);\n\t\t\tcurrent = undefined;\n\t\t}\n\t};\n\tfor (const line of porcelainOutput.split(\"\\n\")) {\n\t\tif (line.length === 0) {\n\t\t\tpushCurrent();\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"worktree \")) {\n\t\t\tpushCurrent();\n\t\t\tcurrent = { path: line.slice(\"worktree \".length).trim() };\n\t\t\tcontinue;\n\t\t}\n\t\tif (current === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"branch \")) {\n\t\t\tconst ref = line.slice(\"branch \".length).trim();\n\t\t\tcurrent.branch = ref.startsWith(\"refs/heads/\") ? ref.slice(\"refs/heads/\".length) : ref;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"detached \")) {\n\t\t\tcurrent.detached = line.slice(\"detached \".length).trim();\n\t\t}\n\t}\n\tpushCurrent();\n\treturn entries;\n}\n\nfunction parseWorktreeListCheckouts(porcelainOutput: string): Set<string> {\n\treturn new Set(parseWorktreeListEntries(porcelainOutput).map((entry) => resolve(entry.path)));\n}\n\nasync function findWorktreeListEntryByPath(\n\tentries: readonly GitWorktreeListEntry[],\n\tpath: string,\n): Promise<GitWorktreeListEntry | undefined> {\n\tfor (const entry of entries) {\n\t\tif (isSamePath(await realpathOrResolve(entry.path), path)) {\n\t\t\treturn entry;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nasync function findAdoptSourceRootPath(\n\tentries: readonly GitWorktreeListEntry[],\n\tworkspaceRootPath: string,\n\ttargetRootPath: string,\n): Promise<string | undefined> {\n\tfor (const entry of entries) {\n\t\tconst entryPath = await realpathOrResolve(entry.path);\n\t\tif (!isSamePath(entryPath, targetRootPath) && isPathContained(workspaceRootPath, entryPath)) {\n\t\t\treturn entryPath;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction deriveAdoptedWorktreeId(path: string, usedIds: ReadonlySet<string>): string {\n\tconst baseName = basename(path)\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9._-]+/g, \"-\")\n\t\t.replace(/^[^a-z0-9]+/, \"\")\n\t\t.slice(0, 64);\n\tconst base = WORKTREE_ID_PATTERN.test(baseName) ? baseName : \"adopted\";\n\tfor (let index = 0; index < 100; index++) {\n\t\tconst suffix = index === 0 ? \"\" : `-${index}`;\n\t\tconst candidate = `${base.slice(0, 64 - suffix.length)}${suffix}`;\n\t\tif (WORKTREE_ID_PATTERN.test(candidate) && !usedIds.has(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\treturn generateWorktreeIdSlug();\n}\n\n/** Strip host paths from git stderr before it lands in an RPC detail field. */\nfunction sanitizeGitDetail(stderr: string, paths: string[]): string {\n\tlet detail = stderr.trim();\n\tfor (const path of paths) {\n\t\twhile (detail.includes(path)) {\n\t\t\tdetail = detail.replace(path, \"<redacted>\");\n\t\t}\n\t}\n\treturn detail;\n}\n\nexport interface WorktreeRetentionSweeperOptions {\n\tmanager: WorktreeManager;\n\tstateManager: IrohRemoteHostStateManager;\n\tauditLogger: IrohRemoteAuditLogger;\n\t/** Resolved at sweep time so settings changes apply without a restart. */\n\tgetRetentionPolicy: () => { enabled: boolean; ttlMs: number } | undefined;\n\t/** Injectable timers (tests). */\n\tsetTimer?: (callback: () => void, ttlMs: number) => NodeJS.Timeout;\n\tclearTimer?: (timer: NodeJS.Timeout) => void;\n}\n\n/**\n * Opt-in worktree retention (design §5.3): when a worktree-bound runtime is\n * disposed, schedule a TTL sweep that removes the worktree ONLY when it is\n * clean and fully merged into its base ref; otherwise the skip is audited as\n * worktree_retention_skipped_dirty and the checkout stays put.\n */\nexport class WorktreeRetentionSweeper {\n\tprivate readonly options: WorktreeRetentionSweeperOptions;\n\tprivate readonly timers = new Map<string, NodeJS.Timeout>();\n\tprivate disposed = false;\n\n\tconstructor(options: WorktreeRetentionSweeperOptions) {\n\t\tthis.options = options;\n\t}\n\n\t/** Hooked to IntegratedRuntimeRegistry.onRuntimeDisposed for worktree-bound entries. */\n\tonRuntimeDisposed(workspaceName: string, worktreeId: string): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tconst policy = this.options.getRetentionPolicy();\n\t\tif (policy === undefined || !policy.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst key = `${workspaceName}\\0${worktreeId}`;\n\t\tconst existing = this.timers.get(key);\n\t\tif (existing !== undefined) {\n\t\t\t(this.options.clearTimer ?? clearTimeout)(existing);\n\t\t}\n\t\tconst timer = (this.options.setTimer ?? setTimeout)(() => {\n\t\t\tthis.timers.delete(key);\n\t\t\tvoid this.sweep(workspaceName, worktreeId);\n\t\t}, policy.ttlMs);\n\t\ttimer.unref?.();\n\t\tthis.timers.set(key, timer);\n\t}\n\n\tprivate async sweep(workspaceName: string, worktreeId: string): Promise<void> {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst state = await this.options.stateManager.getState();\n\t\t\tconst workspace = state.workspaces.find((entry) => entry.name === workspaceName);\n\t\t\tif (!workspace) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst result = await this.options.manager.removeIfCleanAndMerged(workspace, worktreeId);\n\t\t\tif (result.removed) {\n\t\t\t\tawait this.options.auditLogger.log({\n\t\t\t\t\ttype: \"worktree_retention_removed\",\n\t\t\t\t\tworkspace: workspaceName,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tdetails: { worktreeId },\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (result.reason === \"worktree_not_found\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.options.auditLogger.log({\n\t\t\t\ttype: \"worktree_retention_skipped_dirty\",\n\t\t\t\tworkspace: workspaceName,\n\t\t\t\tsuccess: false,\n\t\t\t\tdetails: { worktreeId, reason: result.reason },\n\t\t\t});\n\t\t} catch {\n\t\t\t// Retention is best-effort; the next disposal reschedules.\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tfor (const timer of this.timers.values()) {\n\t\t\t(this.options.clearTimer ?? clearTimeout)(timer);\n\t\t}\n\t\tthis.timers.clear();\n\t}\n}\n\nexport type WorktreeControlRequest = Extract<\n\tControlRequest,\n\t{\n\t\ttype:\n\t\t\t| \"worktree_create\"\n\t\t\t| \"worktree_adopt\"\n\t\t\t| \"worktree_list\"\n\t\t\t| \"worktree_remove\"\n\t\t\t| \"worktree_prune\"\n\t\t\t| \"worktree_resolve\"\n\t\t\t| \"worktree_bind\";\n\t}\n>;\n\nexport interface WorktreeControlRequestHooks {\n\tmanager: WorktreeManager;\n\tstateManager: IrohRemoteHostStateManager;\n\t/** Force-remove hook that stops bound runtimes first (wired by the iroh service). */\n\tremoveWorktree?: (\n\t\tworkspace: IrohRemoteWorkspace,\n\t\tworktreeId: string,\n\t\tforce: boolean,\n\t) => Promise<WorktreeResult<Record<never, never>>>;\n}\n\nexport function isWorktreeControlRequest(request: ControlRequest): request is WorktreeControlRequest {\n\treturn (\n\t\trequest.type === \"worktree_create\" ||\n\t\trequest.type === \"worktree_adopt\" ||\n\t\trequest.type === \"worktree_list\" ||\n\t\trequest.type === \"worktree_remove\" ||\n\t\trequest.type === \"worktree_prune\" ||\n\t\trequest.type === \"worktree_resolve\" ||\n\t\trequest.type === \"worktree_bind\"\n\t);\n}\n\n/**\n * Shared `worktree_*` control-socket handler: used by the daemon skeleton\n * (main.ts fallback) and the iroh service (which layers runtime-aware remove\n * on top via hooks.removeWorktree). Control responses MAY include checkout\n * paths — the no-paths rule applies to the iroh wire, not the local socket.\n */\nexport async function handleWorktreeControlRequest(\n\tconnection: ControlConnection,\n\trequest: WorktreeControlRequest,\n\thooks: WorktreeControlRequestHooks,\n): Promise<void> {\n\tconst state = await hooks.stateManager.getState();\n\tconst findWorkspace = (name: string): IrohRemoteWorkspace | undefined =>\n\t\tstate.workspaces.find((workspace) => workspace.name === name);\n\tconst sendWorkspaceNotFound = (name: string) => {\n\t\tconnection.send({\n\t\t\ttype: \"error\",\n\t\t\tid: request.id,\n\t\t\tcode: \"not_found\",\n\t\t\tmessage: `No registered workspace named ${name}`,\n\t\t});\n\t};\n\n\tif (request.type === \"worktree_create\") {\n\t\tconst workspace = findWorkspace(request.workspaceName);\n\t\tif (!workspace) {\n\t\t\tsendWorkspaceNotFound(request.workspaceName);\n\t\t\treturn;\n\t\t}\n\t\tconst created = await hooks.manager.create(workspace, {\n\t\t\t...(request.worktreeName === undefined ? {} : { id: request.worktreeName }),\n\t\t\t...(request.branch === undefined ? {} : { branch: request.branch }),\n\t\t\t...(request.baseRef === undefined ? {} : { baseRef: request.baseRef }),\n\t\t});\n\t\tif (!created.ok) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: created.error,\n\t\t\t\tmessage: created.detail ?? created.error,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconnection.send({\n\t\t\ttype: \"worktree_result\",\n\t\t\tid: request.id,\n\t\t\tworktree: toControlWorktreeStatus(created.worktree, true),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (request.type === \"worktree_adopt\") {\n\t\tconst workspace = findWorkspace(request.workspaceName);\n\t\tif (!workspace) {\n\t\t\tsendWorkspaceNotFound(request.workspaceName);\n\t\t\treturn;\n\t\t}\n\t\tconst adopted = await hooks.manager.adopt(workspace, {\n\t\t\tpath: request.path,\n\t\t\t...(request.worktreeName === undefined ? {} : { id: request.worktreeName }),\n\t\t\t...(request.baseRef === undefined ? {} : { baseRef: request.baseRef }),\n\t\t});\n\t\tif (!adopted.ok) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: adopted.error,\n\t\t\t\tmessage: adopted.detail ?? adopted.error,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconnection.send({\n\t\t\ttype: \"worktree_result\",\n\t\t\tid: request.id,\n\t\t\tworktree: toControlWorktreeStatus(adopted.worktree, true),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (request.type === \"worktree_list\") {\n\t\tconst workspaces = resolveRequestWorkspaces(state.workspaces, request.workspaceName);\n\t\tif (!workspaces.ok) {\n\t\t\tsendWorkspaceNotFound(workspaces.missing);\n\t\t\treturn;\n\t\t}\n\t\tconst worktrees: ControlWorktreeStatus[] = [];\n\t\tfor (const workspace of workspaces.workspaces) {\n\t\t\tfor (const status of await hooks.manager.list(workspace)) {\n\t\t\t\tworktrees.push(toControlWorktreeStatus(status, status.available, status.dirty));\n\t\t\t}\n\t\t}\n\t\tconnection.send({ type: \"worktrees_result\", id: request.id, worktrees });\n\t\treturn;\n\t}\n\n\tif (request.type === \"worktree_resolve\") {\n\t\tconst worktrees = await hooks.stateManager.listWorktrees();\n\t\tconst match = worktrees.find((worktree) => isPathContained(worktree.path, request.path));\n\t\tconst workspace = match ? findWorkspace(match.workspaceName) : undefined;\n\t\tif (!match || !workspace) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: \"not_found\",\n\t\t\t\tmessage: \"path is not inside a daemon-managed worktree\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconnection.send({\n\t\t\ttype: \"worktree_resolve_result\",\n\t\t\tid: request.id,\n\t\t\tworkspaceName: workspace.name,\n\t\t\tworkspacePath: workspace.path,\n\t\t\tworktreeId: match.id,\n\t\t\tworktreePath: match.path,\n\t\t});\n\t\treturn;\n\t}\n\n\tif (request.type === \"worktree_bind\") {\n\t\tconst workspace = findWorkspace(request.workspaceName);\n\t\tif (!workspace) {\n\t\t\tsendWorkspaceNotFound(request.workspaceName);\n\t\t\treturn;\n\t\t}\n\t\tconst record = await hooks.manager.findWorktree(request.workspaceName, request.worktreeId);\n\t\tif (!record) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: \"worktree_not_found\",\n\t\t\t\tmessage: `No worktree ${request.worktreeId} in workspace ${request.workspaceName}`,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait hooks.manager.bindSession(request.workspaceName, request.worktreeId, request.sessionId);\n\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\treturn;\n\t}\n\n\tif (request.type === \"worktree_remove\") {\n\t\tconst workspace = findWorkspace(request.workspaceName);\n\t\tif (!workspace) {\n\t\t\tsendWorkspaceNotFound(request.workspaceName);\n\t\t\treturn;\n\t\t}\n\t\tconst force = request.force === true;\n\t\tconst removed = hooks.removeWorktree\n\t\t\t? await hooks.removeWorktree(workspace, request.worktreeId, force)\n\t\t\t: await hooks.manager.remove(workspace, request.worktreeId, { force });\n\t\tif (!removed.ok) {\n\t\t\tconnection.send({\n\t\t\t\ttype: \"error\",\n\t\t\t\tid: request.id,\n\t\t\t\tcode: removed.error,\n\t\t\t\tmessage: removed.detail ?? removed.error,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconnection.send({ type: \"ok\", id: request.id });\n\t\treturn;\n\t}\n\n\tconst workspaces = resolveRequestWorkspaces(state.workspaces, request.workspaceName);\n\tif (!workspaces.ok) {\n\t\tsendWorkspaceNotFound(workspaces.missing);\n\t\treturn;\n\t}\n\tconst results: Array<{ workspaceName: string; removedRecords: string[]; orphanCheckouts: string[] }> = [];\n\tfor (const workspace of workspaces.workspaces) {\n\t\tconst pruned = await hooks.manager.prune(workspace);\n\t\tresults.push({ workspaceName: workspace.name, ...pruned });\n\t}\n\tconnection.send({ type: \"worktree_prune_result\", id: request.id, results });\n}\n\nfunction resolveRequestWorkspaces(\n\tworkspaces: IrohRemoteWorkspace[],\n\tworkspaceName: string | undefined,\n): { ok: true; workspaces: IrohRemoteWorkspace[] } | { ok: false; missing: string } {\n\tif (workspaceName === undefined) {\n\t\treturn { ok: true, workspaces };\n\t}\n\tconst workspace = workspaces.find((entry) => entry.name === workspaceName);\n\treturn workspace ? { ok: true, workspaces: [workspace] } : { ok: false, missing: workspaceName };\n}\n\nfunction toControlWorktreeStatus(\n\tworktree: IrohRemoteWorkspaceWorktree & Partial<Pick<WorktreeStatus, \"aheadBehind\">>,\n\tavailable?: boolean,\n\tdirty?: boolean,\n): ControlWorktreeStatus {\n\treturn {\n\t\tid: worktree.id,\n\t\tworkspaceName: worktree.workspaceName,\n\t\tpath: worktree.path,\n\t\tbranch: worktree.branch,\n\t\t...(worktree.baseRef === undefined ? {} : { baseRef: worktree.baseRef }),\n\t\tcreatedAt: worktree.createdAt,\n\t\tsessionIds: [...worktree.sessionIds],\n\t\t...(available === undefined ? {} : { available }),\n\t\t...(dirty === undefined ? {} : { dirty }),\n\t\t...(worktree.aheadBehind === undefined ? {} : { aheadBehind: worktree.aheadBehind }),\n\t};\n}\n"]}