@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,433 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { readFile } from "node:fs/promises";
3
+ import { writeDurableAtomicFile } from "../../../utils/durable-atomic-write.js";
4
+ import { cloneIrohRemoteRpcGrant, parseIrohRemoteRpcGrant } from "./access-grant.js";
5
+ import { DEFAULT_IROH_REMOTE_ALLOW_TOOLS, isIrohRemoteWorkingDirectory, isIrohRemoteWorktreeId, normalizeIrohRemoteAllowTools, } from "./protocol.js";
6
+ export const MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT = 32;
7
+ export const MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES = 512;
8
+ export const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES = 512;
9
+ export const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS = 128;
10
+ export function createEmptyIrohRemoteHostState() {
11
+ return {
12
+ hostSecretKey: undefined,
13
+ pairingSecretTombstones: [],
14
+ workspaces: [],
15
+ worktrees: [],
16
+ clients: [],
17
+ revokedClients: [],
18
+ pendingPairingTickets: [],
19
+ };
20
+ }
21
+ export async function readIrohRemoteHostState(path) {
22
+ let parsed;
23
+ try {
24
+ parsed = JSON.parse(await readFile(path, "utf8"));
25
+ }
26
+ catch (error) {
27
+ if (isNodeErrorWithCode(error, "ENOENT")) {
28
+ return createEmptyIrohRemoteHostState();
29
+ }
30
+ throw error;
31
+ }
32
+ return parseIrohRemoteHostState(parsed);
33
+ }
34
+ export async function writeIrohRemoteHostState(path, state) {
35
+ await writeDurableAtomicFile(path, `${JSON.stringify(serializeIrohRemoteHostState(state), null, 2)}\n`);
36
+ }
37
+ export function parseIrohRemoteHostState(value) {
38
+ const state = expectRecord(value, "Iroh remote host state");
39
+ return {
40
+ hostSecretKey: parseOptionalByteArray(state.hostSecretKey, "hostSecretKey"),
41
+ pairingSecretTombstones: parseOptionalArray(state.pairingSecretTombstones, "pairingSecretTombstones", parseIrohRemotePairingSecretTombstone),
42
+ workspaces: parseArray(state.workspaces, "workspaces", parseIrohRemoteWorkspace),
43
+ worktrees: parseOptionalArray(state.worktrees, "worktrees", parseIrohRemoteWorkspaceWorktree),
44
+ clients: parseArray(state.clients, "clients", parseIrohRemoteClient),
45
+ revokedClients: parseOptionalArray(state.revokedClients, "revokedClients", parseIrohRemoteRevokedClient),
46
+ pendingPairingTickets: parseOptionalArray(state.pendingPairingTickets, "pendingPairingTickets", parseIrohRemotePendingPairingTicket),
47
+ };
48
+ }
49
+ function serializeIrohRemoteHostState(state) {
50
+ return {
51
+ hostSecretKey: state.hostSecretKey ? [...state.hostSecretKey] : undefined,
52
+ pairingSecretTombstones: (state.pairingSecretTombstones ?? []).map((tombstone) => ({ ...tombstone })),
53
+ workspaces: state.workspaces.map((workspace) => ({ ...workspace })),
54
+ worktrees: (state.worktrees ?? []).map((worktree) => ({ ...worktree, sessionIds: [...worktree.sessionIds] })),
55
+ clients: state.clients.map((client) => ({
56
+ ...client,
57
+ allowedWorkspaces: [...client.allowedWorkspaces],
58
+ ...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),
59
+ ...(client.lastSessionIdByWorkspace
60
+ ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }
61
+ : {}),
62
+ ...(client.pushTargets
63
+ ? {
64
+ pushTargets: client.pushTargets.map((target) => ({
65
+ ...target,
66
+ ...(target.liveActivity ? { liveActivity: { ...target.liveActivity } } : {}),
67
+ })),
68
+ }
69
+ : {}),
70
+ ...(client.liveActivities
71
+ ? { liveActivities: client.liveActivities.map((registration) => ({ ...registration })) }
72
+ : {}),
73
+ })),
74
+ revokedClients: (state.revokedClients ?? []).map((client) => ({
75
+ ...client,
76
+ allowedWorkspaces: [...client.allowedWorkspaces],
77
+ ...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),
78
+ ...(client.lastSessionIdByWorkspace
79
+ ? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }
80
+ : {}),
81
+ })),
82
+ pendingPairingTickets: (state.pendingPairingTickets ?? []).map((ticket) => ({
83
+ ...ticket,
84
+ ...(ticket.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(ticket.rpcGrant) }),
85
+ })),
86
+ };
87
+ }
88
+ export function parseIrohRemoteWorkspace(value) {
89
+ const workspace = expectRecord(value, "Iroh remote workspace");
90
+ const allowedTools = expectOptionalAllowTools(workspace.allowedTools, "workspace allowedTools");
91
+ return {
92
+ name: expectString(workspace.name, "workspace name"),
93
+ path: expectString(workspace.path, "workspace path"),
94
+ allowedTools: allowedTools === undefined ? undefined : normalizeIrohRemoteAllowTools(allowedTools),
95
+ };
96
+ }
97
+ export function parseIrohRemoteWorkspaceWorktree(value) {
98
+ const worktree = expectRecord(value, "Iroh remote worktree");
99
+ const baseRef = expectOptionalString(worktree.baseRef, "worktree baseRef");
100
+ const sourceRootRelativePath = expectOptionalWorkspaceRelativePath(worktree.sourceRootRelativePath, "worktree sourceRootRelativePath");
101
+ return {
102
+ id: expectWorktreeId(worktree.id),
103
+ workspaceName: expectString(worktree.workspaceName, "worktree workspaceName"),
104
+ path: expectString(worktree.path, "worktree path"),
105
+ ...(sourceRootRelativePath === undefined ? {} : { sourceRootRelativePath }),
106
+ branch: expectString(worktree.branch, "worktree branch"),
107
+ ...(baseRef === undefined ? {} : { baseRef }),
108
+ createdAt: expectNumber(worktree.createdAt, "worktree createdAt"),
109
+ sessionIds: parseArray(worktree.sessionIds, "worktree sessionIds", (entry) => expectString(entry, "worktree session id")),
110
+ };
111
+ }
112
+ function expectWorktreeId(value) {
113
+ if (!isIrohRemoteWorktreeId(value)) {
114
+ throw new Error("worktree id must match lowercase worktree id syntax");
115
+ }
116
+ return value;
117
+ }
118
+ function expectOptionalWorkspaceRelativePath(value, label) {
119
+ if (value === undefined) {
120
+ return undefined;
121
+ }
122
+ if (!isIrohRemoteWorkingDirectory(value)) {
123
+ throw new Error(`${label} must be a relative workspace path`);
124
+ }
125
+ return value;
126
+ }
127
+ export function parseIrohRemoteClient(value) {
128
+ const client = expectRecord(value, "Iroh remote client");
129
+ return {
130
+ nodeId: expectString(client.nodeId, "client nodeId"),
131
+ label: expectString(client.label, "client label"),
132
+ allowedWorkspaces: parseArray(client.allowedWorkspaces, "client allowedWorkspaces", (entry) => expectString(entry, "client allowed workspace")),
133
+ allowedTools: normalizeIrohRemoteAllowTools(expectOptionalAllowTools(client.allowedTools, "client allowedTools") ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS),
134
+ rpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, "client rpcGrant"),
135
+ pairedAt: expectNumber(client.pairedAt, "client pairedAt"),
136
+ lastSeenAt: expectNumber(client.lastSeenAt, "client lastSeenAt"),
137
+ ...parseOptionalStringRecordProperty(client.lastSessionIdByWorkspace, "client lastSessionIdByWorkspace", "client last session workspace", "client last session id"),
138
+ ...parseOptionalPushTargetsProperty(client.pushTargets, "client pushTargets"),
139
+ ...parseOptionalLiveActivityRegistrationsProperty(client.liveActivities, "client liveActivities"),
140
+ };
141
+ }
142
+ export function parseIrohRemotePushTarget(value) {
143
+ const target = expectRecord(value, "push target");
144
+ return {
145
+ id: expectString(target.id, "push target id"),
146
+ provider: expectPushTargetProvider(target.provider, "push target provider"),
147
+ platform: expectPushTargetPlatform(target.platform, "push target platform"),
148
+ pushTargetAuthToken: expectString(target.pushTargetAuthToken, "push target pushTargetAuthToken"),
149
+ relayUrl: expectOptionalString(target.relayUrl, "push target relayUrl"),
150
+ tokenHash: expectOptionalString(target.tokenHash, "push target tokenHash"),
151
+ liveActivity: parseOptionalIrohRemoteLiveActivityTarget(target.liveActivity, "push target liveActivity"),
152
+ enabled: expectBoolean(target.enabled, "push target enabled"),
153
+ createdAt: expectNumber(target.createdAt, "push target createdAt"),
154
+ updatedAt: expectNumber(target.updatedAt, "push target updatedAt"),
155
+ };
156
+ }
157
+ function parseOptionalIrohRemoteLiveActivityTarget(value, label) {
158
+ if (value === undefined) {
159
+ return undefined;
160
+ }
161
+ const target = expectRecord(value, label);
162
+ return {
163
+ activityId: expectString(target.activityId, `${label} activityId`),
164
+ pushToken: expectString(target.pushToken, `${label} pushToken`),
165
+ tokenHash: expectOptionalString(target.tokenHash, `${label} tokenHash`),
166
+ tokenEnvironment: expectOptionalPushTokenEnvironment(target.tokenEnvironment, `${label} tokenEnvironment`),
167
+ updatedAt: expectNumber(target.updatedAt, `${label} updatedAt`),
168
+ };
169
+ }
170
+ export function parseIrohRemoteLiveActivityRegistration(value) {
171
+ const registration = expectRecord(value, "live activity registration");
172
+ return {
173
+ workspaceName: expectBoundedUtf8String(registration.workspaceName, "live activity workspaceName", MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES),
174
+ sessionId: expectBoundedUtf8String(registration.sessionId, "live activity sessionId", MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES),
175
+ activityId: expectBoundedUtf8String(registration.activityId, "live activity activityId", MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES, MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS),
176
+ tokenHash: expectSha256Hex(registration.tokenHash, "live activity tokenHash"),
177
+ tokenEnvironment: expectPushTokenEnvironment(registration.tokenEnvironment, "live activity tokenEnvironment"),
178
+ platform: expectPushTargetPlatform(registration.platform, "live activity platform"),
179
+ pushTargetId: expectBoundedUtf8String(registration.pushTargetId, "live activity pushTargetId", MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES),
180
+ createdAt: expectNonNegativeSafeInteger(registration.createdAt, "live activity createdAt"),
181
+ updatedAt: expectNonNegativeSafeInteger(registration.updatedAt, "live activity updatedAt"),
182
+ };
183
+ }
184
+ /**
185
+ * Normalize legacy registration arrays into the same bounded shape enforced at
186
+ * mutation time: one newest entry per workspace/session and the newest 32
187
+ * sessions overall, ordered oldest-first for deterministic future eviction.
188
+ */
189
+ export function normalizeIrohRemoteLiveActivityRegistrations(registrations) {
190
+ const newestBySession = new Map();
191
+ for (const [index, registration] of registrations.entries()) {
192
+ const candidate = { registration, index };
193
+ const key = JSON.stringify([registration.workspaceName, registration.sessionId]);
194
+ const existing = newestBySession.get(key);
195
+ if (!existing || compareLiveActivityRecency(existing, candidate) <= 0) {
196
+ newestBySession.set(key, candidate);
197
+ }
198
+ }
199
+ const normalized = [...newestBySession.values()].sort(compareLiveActivityAge);
200
+ return normalized
201
+ .slice(Math.max(0, normalized.length - MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT))
202
+ .map(({ registration }) => registration);
203
+ }
204
+ function compareLiveActivityRecency(left, right) {
205
+ return (compareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||
206
+ compareNumbers(left.registration.createdAt, right.registration.createdAt) ||
207
+ compareNumbers(left.index, right.index));
208
+ }
209
+ function compareLiveActivityAge(left, right) {
210
+ return (compareNumbers(left.registration.createdAt, right.registration.createdAt) ||
211
+ compareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||
212
+ compareStrings(left.registration.workspaceName, right.registration.workspaceName) ||
213
+ compareStrings(left.registration.sessionId, right.registration.sessionId) ||
214
+ compareStrings(left.registration.activityId, right.registration.activityId) ||
215
+ compareNumbers(left.index, right.index));
216
+ }
217
+ export function parseIrohRemoteRevokedClient(value) {
218
+ const client = expectRecord(value, "Iroh remote revoked client");
219
+ const rePairApprovedAt = expectOptionalNumber(client.rePairApprovedAt, "revoked client rePairApprovedAt");
220
+ return {
221
+ nodeId: expectString(client.nodeId, "revoked client nodeId"),
222
+ label: expectString(client.label, "revoked client label"),
223
+ allowedWorkspaces: parseArray(client.allowedWorkspaces, "revoked client allowedWorkspaces", (entry) => expectString(entry, "revoked client allowed workspace")),
224
+ allowedTools: normalizeIrohRemoteAllowTools(expectOptionalAllowTools(client.allowedTools, "revoked client allowedTools") ??
225
+ DEFAULT_IROH_REMOTE_ALLOW_TOOLS),
226
+ rpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, "revoked client rpcGrant"),
227
+ pairedAt: expectNumber(client.pairedAt, "revoked client pairedAt"),
228
+ lastSeenAt: expectNumber(client.lastSeenAt, "revoked client lastSeenAt"),
229
+ revokedAt: expectNumber(client.revokedAt, "revoked client revokedAt"),
230
+ ...parseOptionalStringRecordProperty(client.lastSessionIdByWorkspace, "revoked client lastSessionIdByWorkspace", "revoked client last session workspace", "revoked client last session id"),
231
+ ...(rePairApprovedAt === undefined ? {} : { rePairApprovedAt }),
232
+ };
233
+ }
234
+ export function parseIrohRemotePairingSecretTombstone(value) {
235
+ const tombstone = expectRecord(value, "Iroh remote pairing secret tombstone");
236
+ const outcome = expectPairingSecretTombstoneOutcome(tombstone.outcome);
237
+ const createdAt = expectOptionalNumber(tombstone.createdAt, "pairing secret tombstone createdAt");
238
+ const expiresAt = expectOptionalNumber(tombstone.expiresAt, "pairing secret tombstone expiresAt");
239
+ const labelHint = expectOptionalString(tombstone.labelHint, "pairing secret tombstone labelHint");
240
+ const common = {
241
+ secretHash: expectString(tombstone.secretHash, "pairing secret tombstone secretHash"),
242
+ workspace: expectString(tombstone.workspace, "pairing secret tombstone workspace"),
243
+ outcome,
244
+ retainUntil: expectNumber(tombstone.retainUntil, "pairing secret tombstone retainUntil"),
245
+ ...(createdAt === undefined ? {} : { createdAt }),
246
+ ...(expiresAt === undefined ? {} : { expiresAt }),
247
+ ...(labelHint === undefined ? {} : { labelHint }),
248
+ };
249
+ if (outcome === "pairing_secret_consumed") {
250
+ return {
251
+ ...common,
252
+ consumedAt: expectNumber(tombstone.consumedAt, "pairing secret tombstone consumedAt"),
253
+ clientNodeId: expectString(tombstone.clientNodeId, "pairing secret tombstone clientNodeId"),
254
+ };
255
+ }
256
+ return {
257
+ ...common,
258
+ expiredAt: expectNumber(tombstone.expiredAt, "pairing secret tombstone expiredAt"),
259
+ };
260
+ }
261
+ export function parseIrohRemotePendingPairingTicket(value) {
262
+ const ticket = expectRecord(value, "Iroh remote pending pairing ticket");
263
+ const labelHint = expectOptionalString(ticket.labelHint, "pending pairing ticket labelHint");
264
+ return {
265
+ secretHash: expectString(ticket.secretHash, "pending pairing ticket secretHash"),
266
+ workspace: expectString(ticket.workspace, "pending pairing ticket workspace"),
267
+ allowedTools: normalizeIrohRemoteAllowTools(expectAllowTools(ticket.allowedTools, "pending pairing ticket allowedTools")),
268
+ rpcGrant: parseIrohRemoteRpcGrant(ticket.rpcGrant, "pending pairing ticket rpcGrant"),
269
+ expiresAt: expectNumber(ticket.expiresAt, "pending pairing ticket expiresAt"),
270
+ createdAt: expectNumber(ticket.createdAt, "pending pairing ticket createdAt"),
271
+ ...(labelHint === undefined ? {} : { labelHint }),
272
+ };
273
+ }
274
+ function parseArray(value, label, parseEntry) {
275
+ if (!Array.isArray(value)) {
276
+ throw new Error(`${label} must be an array`);
277
+ }
278
+ return value.map((entry) => parseEntry(entry));
279
+ }
280
+ function parseOptionalArray(value, label, parseEntry) {
281
+ if (value === undefined) {
282
+ return [];
283
+ }
284
+ return parseArray(value, label, parseEntry);
285
+ }
286
+ function parseOptionalByteArray(value, label) {
287
+ if (value === undefined) {
288
+ return undefined;
289
+ }
290
+ return parseArray(value, label, (entry) => {
291
+ if (typeof entry !== "number" || !Number.isInteger(entry) || entry < 0 || entry > 255) {
292
+ throw new Error(`${label} must contain byte values`);
293
+ }
294
+ return entry;
295
+ });
296
+ }
297
+ function parseOptionalStringRecordProperty(value, label, keyLabel, valueLabel) {
298
+ if (value === undefined) {
299
+ return {};
300
+ }
301
+ const record = expectRecord(value, label);
302
+ const parsed = {};
303
+ for (const [key, entry] of Object.entries(record)) {
304
+ if (key.length === 0) {
305
+ throw new Error(`${keyLabel} must be a non-empty string`);
306
+ }
307
+ parsed[key] = expectString(entry, valueLabel);
308
+ }
309
+ return { lastSessionIdByWorkspace: parsed };
310
+ }
311
+ function parseOptionalPushTargetsProperty(value, label) {
312
+ if (value === undefined) {
313
+ return {};
314
+ }
315
+ return { pushTargets: parseArray(value, label, parseIrohRemotePushTarget) };
316
+ }
317
+ function parseOptionalLiveActivityRegistrationsProperty(value, label) {
318
+ if (value === undefined) {
319
+ return {};
320
+ }
321
+ const registrations = parseArray(value, label, parseIrohRemoteLiveActivityRegistration);
322
+ const normalized = normalizeIrohRemoteLiveActivityRegistrations(registrations);
323
+ return normalized.length === 0 ? {} : { liveActivities: normalized };
324
+ }
325
+ function expectPairingSecretTombstoneOutcome(value) {
326
+ if (value === "pairing_secret_consumed" || value === "pairing_secret_expired") {
327
+ return value;
328
+ }
329
+ throw new Error("pairing secret tombstone outcome must be pairing_secret_consumed or pairing_secret_expired");
330
+ }
331
+ function expectPushTargetProvider(value, label) {
332
+ if (value === "fcm") {
333
+ return value;
334
+ }
335
+ throw new Error(`${label} must be fcm`);
336
+ }
337
+ function expectPushTargetPlatform(value, label) {
338
+ if (value === "ios") {
339
+ return value;
340
+ }
341
+ throw new Error(`${label} must be ios`);
342
+ }
343
+ function expectPushTokenEnvironment(value, label) {
344
+ if (value === "development" || value === "production") {
345
+ return value;
346
+ }
347
+ throw new Error(`${label} must be development or production`);
348
+ }
349
+ function expectOptionalPushTokenEnvironment(value, label) {
350
+ if (value === undefined) {
351
+ return undefined;
352
+ }
353
+ return expectPushTokenEnvironment(value, label);
354
+ }
355
+ function expectRecord(value, label) {
356
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
357
+ throw new Error(`${label} must be an object`);
358
+ }
359
+ return value;
360
+ }
361
+ function expectString(value, label) {
362
+ if (typeof value !== "string" || value.length === 0) {
363
+ throw new Error(`${label} must be a non-empty string`);
364
+ }
365
+ return value;
366
+ }
367
+ function expectBoundedUtf8String(value, label, maxBytes, maxCodePoints) {
368
+ const parsed = expectString(value, label);
369
+ if (Buffer.byteLength(parsed, "utf8") > maxBytes) {
370
+ throw new Error(`${label} must be at most ${maxBytes} UTF-8 bytes`);
371
+ }
372
+ if (maxCodePoints !== undefined && Array.from(parsed).length > maxCodePoints) {
373
+ throw new Error(`${label} must contain at most ${maxCodePoints} characters`);
374
+ }
375
+ return parsed;
376
+ }
377
+ function expectSha256Hex(value, label) {
378
+ const parsed = expectString(value, label);
379
+ if (!/^[0-9a-f]{64}$/.test(parsed)) {
380
+ throw new Error(`${label} must be a lowercase SHA-256 hex digest`);
381
+ }
382
+ return parsed;
383
+ }
384
+ function expectOptionalString(value, label) {
385
+ if (value === undefined) {
386
+ return undefined;
387
+ }
388
+ return expectString(value, label);
389
+ }
390
+ function expectAllowTools(value, label) {
391
+ if (typeof value !== "string") {
392
+ throw new Error(`${label} must be a string`);
393
+ }
394
+ return value;
395
+ }
396
+ function expectOptionalAllowTools(value, label) {
397
+ return value === undefined ? undefined : expectAllowTools(value, label);
398
+ }
399
+ function expectOptionalNumber(value, label) {
400
+ if (value === undefined) {
401
+ return undefined;
402
+ }
403
+ return expectNumber(value, label);
404
+ }
405
+ function expectBoolean(value, label) {
406
+ if (typeof value !== "boolean") {
407
+ throw new Error(`${label} must be a boolean`);
408
+ }
409
+ return value;
410
+ }
411
+ function expectNumber(value, label) {
412
+ if (typeof value !== "number" || !Number.isFinite(value)) {
413
+ throw new Error(`${label} must be a finite number`);
414
+ }
415
+ return value;
416
+ }
417
+ function expectNonNegativeSafeInteger(value, label) {
418
+ const parsed = expectNumber(value, label);
419
+ if (!Number.isSafeInteger(parsed) || parsed < 0) {
420
+ throw new Error(`${label} must be a non-negative safe integer`);
421
+ }
422
+ return parsed;
423
+ }
424
+ function compareNumbers(left, right) {
425
+ return left < right ? -1 : left > right ? 1 : 0;
426
+ }
427
+ function compareStrings(left, right) {
428
+ return left < right ? -1 : left > right ? 1 : 0;
429
+ }
430
+ function isNodeErrorWithCode(error, code) {
431
+ return error instanceof Error && "code" in error && error.code === code;
432
+ }
433
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/core/remote/iroh/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { readFile } from \"node:fs/promises\";\nimport { writeDurableAtomicFile } from \"../../../utils/durable-atomic-write.ts\";\nimport { cloneIrohRemoteRpcGrant, type IrohRemoteRpcGrant, parseIrohRemoteRpcGrant } from \"./access-grant.ts\";\nimport {\n\tDEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\tisIrohRemoteWorkingDirectory,\n\tisIrohRemoteWorktreeId,\n\tnormalizeIrohRemoteAllowTools,\n} from \"./protocol.ts\";\n\nexport interface IrohRemoteWorkspace {\n\tname: string;\n\tpath: string;\n\tallowedTools?: string;\n}\n\n/** A daemon-managed git worktree, keyed under its parent workspace. */\nexport interface IrohRemoteWorkspaceWorktree {\n\t/** ^[a-z0-9][a-z0-9._-]{0,63}$ — unique per workspace. */\n\tid: string;\n\tworkspaceName: string;\n\t/** Absolute checkout path; host-local, never sent on the wire. */\n\tpath: string;\n\t/** Registered-workspace-relative git repo root this worktree was created from. Omitted for the workspace root. */\n\tsourceRootRelativePath?: string;\n\tbranch: string;\n\tbaseRef?: string;\n\tcreatedAt: number;\n\t/** Sessions bound to this worktree (usually exactly one). */\n\tsessionIds: string[];\n}\n\nexport type IrohRemotePushTargetProvider = \"fcm\";\nexport type IrohRemotePushTargetPlatform = \"ios\";\nexport type IrohRemotePushTokenEnvironment = \"development\" | \"production\";\n\nexport interface IrohRemoteLiveActivityTarget {\n\tactivityId: string;\n\tpushToken: string;\n\ttokenHash?: string;\n\ttokenEnvironment?: IrohRemotePushTokenEnvironment;\n\tupdatedAt: number;\n}\n\nexport interface IrohRemotePushTarget {\n\tid: string;\n\tprovider: IrohRemotePushTargetProvider;\n\tplatform: IrohRemotePushTargetPlatform;\n\tpushTargetAuthToken: string;\n\trelayUrl?: string;\n\ttokenHash?: string;\n\tliveActivity?: IrohRemoteLiveActivityTarget;\n\tenabled: boolean;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nexport interface IrohRemoteLiveActivityRegistration {\n\tworkspaceName: string;\n\tsessionId: string;\n\tactivityId: string;\n\ttokenHash: string;\n\ttokenEnvironment: IrohRemotePushTokenEnvironment;\n\tplatform: IrohRemotePushTargetPlatform;\n\tpushTargetId: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT = 32;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES = 512;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES = 512;\nexport const MAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS = 128;\n\nexport interface IrohRemoteClient {\n\tnodeId: string;\n\tlabel: string;\n\tallowedWorkspaces: string[];\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\tpairedAt: number;\n\tlastSeenAt: number;\n\tlastSessionIdByWorkspace?: Record<string, string>;\n\tpushTargets?: IrohRemotePushTarget[];\n\tliveActivities?: IrohRemoteLiveActivityRegistration[];\n}\n\nexport type IrohRemoteGrantedClient = IrohRemoteClient & { rpcGrant: IrohRemoteRpcGrant };\n\nexport interface IrohRemoteRevokedClient {\n\tnodeId: string;\n\tlabel: string;\n\tallowedWorkspaces: string[];\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\tpairedAt: number;\n\tlastSeenAt: number;\n\trevokedAt: number;\n\tlastSessionIdByWorkspace?: Record<string, string>;\n\trePairApprovedAt?: number;\n}\n\nexport type IrohRemoteGrantedRevokedClient = IrohRemoteRevokedClient & { rpcGrant: IrohRemoteRpcGrant };\n\nexport interface IrohRemotePendingPairingTicket {\n\tsecretHash: string;\n\tworkspace: string;\n\tallowedTools: string;\n\trpcGrant?: IrohRemoteRpcGrant;\n\texpiresAt: number;\n\tcreatedAt: number;\n\tlabelHint?: string;\n}\n\nexport type IrohRemoteGrantedPendingPairingTicket = IrohRemotePendingPairingTicket & {\n\trpcGrant: IrohRemoteRpcGrant;\n};\n\nexport type IrohRemotePairingSecretTombstoneOutcome = \"pairing_secret_consumed\" | \"pairing_secret_expired\";\n\nexport interface IrohRemotePairingSecretTombstone {\n\tsecretHash: string;\n\tworkspace: string;\n\toutcome: IrohRemotePairingSecretTombstoneOutcome;\n\tretainUntil: number;\n\tcreatedAt?: number;\n\texpiresAt?: number;\n\tlabelHint?: string;\n\tconsumedAt?: number;\n\tclientNodeId?: string;\n\texpiredAt?: number;\n}\n\nexport interface IrohRemoteHostState {\n\thostSecretKey?: number[];\n\tpairingSecretTombstones?: IrohRemotePairingSecretTombstone[];\n\tworkspaces: IrohRemoteWorkspace[];\n\tworktrees?: IrohRemoteWorkspaceWorktree[];\n\tclients: IrohRemoteClient[];\n\trevokedClients?: IrohRemoteRevokedClient[];\n\tpendingPairingTickets?: IrohRemotePendingPairingTicket[];\n}\n\nexport function createEmptyIrohRemoteHostState(): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: undefined,\n\t\tpairingSecretTombstones: [],\n\t\tworkspaces: [],\n\t\tworktrees: [],\n\t\tclients: [],\n\t\trevokedClients: [],\n\t\tpendingPairingTickets: [],\n\t};\n}\n\nexport async function readIrohRemoteHostState(path: string): Promise<IrohRemoteHostState> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(await readFile(path, \"utf8\"));\n\t} catch (error: unknown) {\n\t\tif (isNodeErrorWithCode(error, \"ENOENT\")) {\n\t\t\treturn createEmptyIrohRemoteHostState();\n\t\t}\n\t\tthrow error;\n\t}\n\treturn parseIrohRemoteHostState(parsed);\n}\n\nexport async function writeIrohRemoteHostState(path: string, state: IrohRemoteHostState): Promise<void> {\n\tawait writeDurableAtomicFile(path, `${JSON.stringify(serializeIrohRemoteHostState(state), null, 2)}\\n`);\n}\n\nexport function parseIrohRemoteHostState(value: unknown): IrohRemoteHostState {\n\tconst state = expectRecord(value, \"Iroh remote host state\");\n\treturn {\n\t\thostSecretKey: parseOptionalByteArray(state.hostSecretKey, \"hostSecretKey\"),\n\t\tpairingSecretTombstones: parseOptionalArray(\n\t\t\tstate.pairingSecretTombstones,\n\t\t\t\"pairingSecretTombstones\",\n\t\t\tparseIrohRemotePairingSecretTombstone,\n\t\t),\n\t\tworkspaces: parseArray(state.workspaces, \"workspaces\", parseIrohRemoteWorkspace),\n\t\tworktrees: parseOptionalArray(state.worktrees, \"worktrees\", parseIrohRemoteWorkspaceWorktree),\n\t\tclients: parseArray(state.clients, \"clients\", parseIrohRemoteClient),\n\t\trevokedClients: parseOptionalArray(state.revokedClients, \"revokedClients\", parseIrohRemoteRevokedClient),\n\t\tpendingPairingTickets: parseOptionalArray(\n\t\t\tstate.pendingPairingTickets,\n\t\t\t\"pendingPairingTickets\",\n\t\t\tparseIrohRemotePendingPairingTicket,\n\t\t),\n\t};\n}\n\nfunction serializeIrohRemoteHostState(state: IrohRemoteHostState): IrohRemoteHostState {\n\treturn {\n\t\thostSecretKey: state.hostSecretKey ? [...state.hostSecretKey] : undefined,\n\t\tpairingSecretTombstones: (state.pairingSecretTombstones ?? []).map((tombstone) => ({ ...tombstone })),\n\t\tworkspaces: state.workspaces.map((workspace) => ({ ...workspace })),\n\t\tworktrees: (state.worktrees ?? []).map((worktree) => ({ ...worktree, sessionIds: [...worktree.sessionIds] })),\n\t\tclients: state.clients.map((client) => ({\n\t\t\t...client,\n\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),\n\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t: {}),\n\t\t\t...(client.pushTargets\n\t\t\t\t? {\n\t\t\t\t\t\tpushTargets: client.pushTargets.map((target) => ({\n\t\t\t\t\t\t\t...target,\n\t\t\t\t\t\t\t...(target.liveActivity ? { liveActivity: { ...target.liveActivity } } : {}),\n\t\t\t\t\t\t})),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(client.liveActivities\n\t\t\t\t? { liveActivities: client.liveActivities.map((registration) => ({ ...registration })) }\n\t\t\t\t: {}),\n\t\t})),\n\t\trevokedClients: (state.revokedClients ?? []).map((client) => ({\n\t\t\t...client,\n\t\t\tallowedWorkspaces: [...client.allowedWorkspaces],\n\t\t\t...(client.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(client.rpcGrant) }),\n\t\t\t...(client.lastSessionIdByWorkspace\n\t\t\t\t? { lastSessionIdByWorkspace: { ...client.lastSessionIdByWorkspace } }\n\t\t\t\t: {}),\n\t\t})),\n\t\tpendingPairingTickets: (state.pendingPairingTickets ?? []).map((ticket) => ({\n\t\t\t...ticket,\n\t\t\t...(ticket.rpcGrant === undefined ? {} : { rpcGrant: cloneIrohRemoteRpcGrant(ticket.rpcGrant) }),\n\t\t})),\n\t};\n}\n\nexport function parseIrohRemoteWorkspace(value: unknown): IrohRemoteWorkspace {\n\tconst workspace = expectRecord(value, \"Iroh remote workspace\");\n\tconst allowedTools = expectOptionalAllowTools(workspace.allowedTools, \"workspace allowedTools\");\n\treturn {\n\t\tname: expectString(workspace.name, \"workspace name\"),\n\t\tpath: expectString(workspace.path, \"workspace path\"),\n\t\tallowedTools: allowedTools === undefined ? undefined : normalizeIrohRemoteAllowTools(allowedTools),\n\t};\n}\n\nexport function parseIrohRemoteWorkspaceWorktree(value: unknown): IrohRemoteWorkspaceWorktree {\n\tconst worktree = expectRecord(value, \"Iroh remote worktree\");\n\tconst baseRef = expectOptionalString(worktree.baseRef, \"worktree baseRef\");\n\tconst sourceRootRelativePath = expectOptionalWorkspaceRelativePath(\n\t\tworktree.sourceRootRelativePath,\n\t\t\"worktree sourceRootRelativePath\",\n\t);\n\treturn {\n\t\tid: expectWorktreeId(worktree.id),\n\t\tworkspaceName: expectString(worktree.workspaceName, \"worktree workspaceName\"),\n\t\tpath: expectString(worktree.path, \"worktree path\"),\n\t\t...(sourceRootRelativePath === undefined ? {} : { sourceRootRelativePath }),\n\t\tbranch: expectString(worktree.branch, \"worktree branch\"),\n\t\t...(baseRef === undefined ? {} : { baseRef }),\n\t\tcreatedAt: expectNumber(worktree.createdAt, \"worktree createdAt\"),\n\t\tsessionIds: parseArray(worktree.sessionIds, \"worktree sessionIds\", (entry) =>\n\t\t\texpectString(entry, \"worktree session id\"),\n\t\t),\n\t};\n}\n\nfunction expectWorktreeId(value: unknown): string {\n\tif (!isIrohRemoteWorktreeId(value)) {\n\t\tthrow new Error(\"worktree id must match lowercase worktree id syntax\");\n\t}\n\treturn value;\n}\n\nfunction expectOptionalWorkspaceRelativePath(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isIrohRemoteWorkingDirectory(value)) {\n\t\tthrow new Error(`${label} must be a relative workspace path`);\n\t}\n\treturn value;\n}\n\nexport function parseIrohRemoteClient(value: unknown): IrohRemoteClient {\n\tconst client = expectRecord(value, \"Iroh remote client\");\n\treturn {\n\t\tnodeId: expectString(client.nodeId, \"client nodeId\"),\n\t\tlabel: expectString(client.label, \"client label\"),\n\t\tallowedWorkspaces: parseArray(client.allowedWorkspaces, \"client allowedWorkspaces\", (entry) =>\n\t\t\texpectString(entry, \"client allowed workspace\"),\n\t\t),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectOptionalAllowTools(client.allowedTools, \"client allowedTools\") ?? DEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"client rpcGrant\"),\n\t\tpairedAt: expectNumber(client.pairedAt, \"client pairedAt\"),\n\t\tlastSeenAt: expectNumber(client.lastSeenAt, \"client lastSeenAt\"),\n\t\t...parseOptionalStringRecordProperty(\n\t\t\tclient.lastSessionIdByWorkspace,\n\t\t\t\"client lastSessionIdByWorkspace\",\n\t\t\t\"client last session workspace\",\n\t\t\t\"client last session id\",\n\t\t),\n\t\t...parseOptionalPushTargetsProperty(client.pushTargets, \"client pushTargets\"),\n\t\t...parseOptionalLiveActivityRegistrationsProperty(client.liveActivities, \"client liveActivities\"),\n\t};\n}\n\nexport function parseIrohRemotePushTarget(value: unknown): IrohRemotePushTarget {\n\tconst target = expectRecord(value, \"push target\");\n\treturn {\n\t\tid: expectString(target.id, \"push target id\"),\n\t\tprovider: expectPushTargetProvider(target.provider, \"push target provider\"),\n\t\tplatform: expectPushTargetPlatform(target.platform, \"push target platform\"),\n\t\tpushTargetAuthToken: expectString(target.pushTargetAuthToken, \"push target pushTargetAuthToken\"),\n\t\trelayUrl: expectOptionalString(target.relayUrl, \"push target relayUrl\"),\n\t\ttokenHash: expectOptionalString(target.tokenHash, \"push target tokenHash\"),\n\t\tliveActivity: parseOptionalIrohRemoteLiveActivityTarget(target.liveActivity, \"push target liveActivity\"),\n\t\tenabled: expectBoolean(target.enabled, \"push target enabled\"),\n\t\tcreatedAt: expectNumber(target.createdAt, \"push target createdAt\"),\n\t\tupdatedAt: expectNumber(target.updatedAt, \"push target updatedAt\"),\n\t};\n}\n\nfunction parseOptionalIrohRemoteLiveActivityTarget(\n\tvalue: unknown,\n\tlabel: string,\n): IrohRemoteLiveActivityTarget | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst target = expectRecord(value, label);\n\treturn {\n\t\tactivityId: expectString(target.activityId, `${label} activityId`),\n\t\tpushToken: expectString(target.pushToken, `${label} pushToken`),\n\t\ttokenHash: expectOptionalString(target.tokenHash, `${label} tokenHash`),\n\t\ttokenEnvironment: expectOptionalPushTokenEnvironment(target.tokenEnvironment, `${label} tokenEnvironment`),\n\t\tupdatedAt: expectNumber(target.updatedAt, `${label} updatedAt`),\n\t};\n}\n\nexport function parseIrohRemoteLiveActivityRegistration(value: unknown): IrohRemoteLiveActivityRegistration {\n\tconst registration = expectRecord(value, \"live activity registration\");\n\treturn {\n\t\tworkspaceName: expectBoundedUtf8String(\n\t\t\tregistration.workspaceName,\n\t\t\t\"live activity workspaceName\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tsessionId: expectBoundedUtf8String(\n\t\t\tregistration.sessionId,\n\t\t\t\"live activity sessionId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tactivityId: expectBoundedUtf8String(\n\t\t\tregistration.activityId,\n\t\t\t\"live activity activityId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_ID_BYTES,\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_ID_CODE_POINTS,\n\t\t),\n\t\ttokenHash: expectSha256Hex(registration.tokenHash, \"live activity tokenHash\"),\n\t\ttokenEnvironment: expectPushTokenEnvironment(registration.tokenEnvironment, \"live activity tokenEnvironment\"),\n\t\tplatform: expectPushTargetPlatform(registration.platform, \"live activity platform\"),\n\t\tpushTargetId: expectBoundedUtf8String(\n\t\t\tregistration.pushTargetId,\n\t\t\t\"live activity pushTargetId\",\n\t\t\tMAX_IROH_REMOTE_LIVE_ACTIVITY_SCOPE_BYTES,\n\t\t),\n\t\tcreatedAt: expectNonNegativeSafeInteger(registration.createdAt, \"live activity createdAt\"),\n\t\tupdatedAt: expectNonNegativeSafeInteger(registration.updatedAt, \"live activity updatedAt\"),\n\t};\n}\n\n/**\n * Normalize legacy registration arrays into the same bounded shape enforced at\n * mutation time: one newest entry per workspace/session and the newest 32\n * sessions overall, ordered oldest-first for deterministic future eviction.\n */\nexport function normalizeIrohRemoteLiveActivityRegistrations(\n\tregistrations: readonly IrohRemoteLiveActivityRegistration[],\n): IrohRemoteLiveActivityRegistration[] {\n\tinterface IndexedRegistration {\n\t\tregistration: IrohRemoteLiveActivityRegistration;\n\t\tindex: number;\n\t}\n\n\tconst newestBySession = new Map<string, IndexedRegistration>();\n\tfor (const [index, registration] of registrations.entries()) {\n\t\tconst candidate = { registration, index };\n\t\tconst key = JSON.stringify([registration.workspaceName, registration.sessionId]);\n\t\tconst existing = newestBySession.get(key);\n\t\tif (!existing || compareLiveActivityRecency(existing, candidate) <= 0) {\n\t\t\tnewestBySession.set(key, candidate);\n\t\t}\n\t}\n\n\tconst normalized = [...newestBySession.values()].sort(compareLiveActivityAge);\n\treturn normalized\n\t\t.slice(Math.max(0, normalized.length - MAX_IROH_REMOTE_LIVE_ACTIVITIES_PER_CLIENT))\n\t\t.map(({ registration }) => registration);\n}\n\nfunction compareLiveActivityRecency(\n\tleft: { registration: IrohRemoteLiveActivityRegistration; index: number },\n\tright: { registration: IrohRemoteLiveActivityRegistration; index: number },\n): number {\n\treturn (\n\t\tcompareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||\n\t\tcompareNumbers(left.registration.createdAt, right.registration.createdAt) ||\n\t\tcompareNumbers(left.index, right.index)\n\t);\n}\n\nfunction compareLiveActivityAge(\n\tleft: { registration: IrohRemoteLiveActivityRegistration; index: number },\n\tright: { registration: IrohRemoteLiveActivityRegistration; index: number },\n): number {\n\treturn (\n\t\tcompareNumbers(left.registration.createdAt, right.registration.createdAt) ||\n\t\tcompareNumbers(left.registration.updatedAt, right.registration.updatedAt) ||\n\t\tcompareStrings(left.registration.workspaceName, right.registration.workspaceName) ||\n\t\tcompareStrings(left.registration.sessionId, right.registration.sessionId) ||\n\t\tcompareStrings(left.registration.activityId, right.registration.activityId) ||\n\t\tcompareNumbers(left.index, right.index)\n\t);\n}\n\nexport function parseIrohRemoteRevokedClient(value: unknown): IrohRemoteRevokedClient {\n\tconst client = expectRecord(value, \"Iroh remote revoked client\");\n\tconst rePairApprovedAt = expectOptionalNumber(client.rePairApprovedAt, \"revoked client rePairApprovedAt\");\n\treturn {\n\t\tnodeId: expectString(client.nodeId, \"revoked client nodeId\"),\n\t\tlabel: expectString(client.label, \"revoked client label\"),\n\t\tallowedWorkspaces: parseArray(client.allowedWorkspaces, \"revoked client allowedWorkspaces\", (entry) =>\n\t\t\texpectString(entry, \"revoked client allowed workspace\"),\n\t\t),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectOptionalAllowTools(client.allowedTools, \"revoked client allowedTools\") ??\n\t\t\t\tDEFAULT_IROH_REMOTE_ALLOW_TOOLS,\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(client.rpcGrant, \"revoked client rpcGrant\"),\n\t\tpairedAt: expectNumber(client.pairedAt, \"revoked client pairedAt\"),\n\t\tlastSeenAt: expectNumber(client.lastSeenAt, \"revoked client lastSeenAt\"),\n\t\trevokedAt: expectNumber(client.revokedAt, \"revoked client revokedAt\"),\n\t\t...parseOptionalStringRecordProperty(\n\t\t\tclient.lastSessionIdByWorkspace,\n\t\t\t\"revoked client lastSessionIdByWorkspace\",\n\t\t\t\"revoked client last session workspace\",\n\t\t\t\"revoked client last session id\",\n\t\t),\n\t\t...(rePairApprovedAt === undefined ? {} : { rePairApprovedAt }),\n\t};\n}\n\nexport function parseIrohRemotePairingSecretTombstone(value: unknown): IrohRemotePairingSecretTombstone {\n\tconst tombstone = expectRecord(value, \"Iroh remote pairing secret tombstone\");\n\tconst outcome = expectPairingSecretTombstoneOutcome(tombstone.outcome);\n\tconst createdAt = expectOptionalNumber(tombstone.createdAt, \"pairing secret tombstone createdAt\");\n\tconst expiresAt = expectOptionalNumber(tombstone.expiresAt, \"pairing secret tombstone expiresAt\");\n\tconst labelHint = expectOptionalString(tombstone.labelHint, \"pairing secret tombstone labelHint\");\n\tconst common = {\n\t\tsecretHash: expectString(tombstone.secretHash, \"pairing secret tombstone secretHash\"),\n\t\tworkspace: expectString(tombstone.workspace, \"pairing secret tombstone workspace\"),\n\t\toutcome,\n\t\tretainUntil: expectNumber(tombstone.retainUntil, \"pairing secret tombstone retainUntil\"),\n\t\t...(createdAt === undefined ? {} : { createdAt }),\n\t\t...(expiresAt === undefined ? {} : { expiresAt }),\n\t\t...(labelHint === undefined ? {} : { labelHint }),\n\t};\n\tif (outcome === \"pairing_secret_consumed\") {\n\t\treturn {\n\t\t\t...common,\n\t\t\tconsumedAt: expectNumber(tombstone.consumedAt, \"pairing secret tombstone consumedAt\"),\n\t\t\tclientNodeId: expectString(tombstone.clientNodeId, \"pairing secret tombstone clientNodeId\"),\n\t\t};\n\t}\n\treturn {\n\t\t...common,\n\t\texpiredAt: expectNumber(tombstone.expiredAt, \"pairing secret tombstone expiredAt\"),\n\t};\n}\n\nexport function parseIrohRemotePendingPairingTicket(value: unknown): IrohRemotePendingPairingTicket {\n\tconst ticket = expectRecord(value, \"Iroh remote pending pairing ticket\");\n\tconst labelHint = expectOptionalString(ticket.labelHint, \"pending pairing ticket labelHint\");\n\treturn {\n\t\tsecretHash: expectString(ticket.secretHash, \"pending pairing ticket secretHash\"),\n\t\tworkspace: expectString(ticket.workspace, \"pending pairing ticket workspace\"),\n\t\tallowedTools: normalizeIrohRemoteAllowTools(\n\t\t\texpectAllowTools(ticket.allowedTools, \"pending pairing ticket allowedTools\"),\n\t\t),\n\t\trpcGrant: parseIrohRemoteRpcGrant(ticket.rpcGrant, \"pending pairing ticket rpcGrant\"),\n\t\texpiresAt: expectNumber(ticket.expiresAt, \"pending pairing ticket expiresAt\"),\n\t\tcreatedAt: expectNumber(ticket.createdAt, \"pending pairing ticket createdAt\"),\n\t\t...(labelHint === undefined ? {} : { labelHint }),\n\t};\n}\n\nfunction parseArray<T>(value: unknown, label: string, parseEntry: (value: unknown) => T): T[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an array`);\n\t}\n\treturn value.map((entry) => parseEntry(entry));\n}\n\nfunction parseOptionalArray<T>(value: unknown, label: string, parseEntry: (value: unknown) => T): T[] {\n\tif (value === undefined) {\n\t\treturn [];\n\t}\n\treturn parseArray(value, label, parseEntry);\n}\n\nfunction parseOptionalByteArray(value: unknown, label: string): number[] | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn parseArray(value, label, (entry) => {\n\t\tif (typeof entry !== \"number\" || !Number.isInteger(entry) || entry < 0 || entry > 255) {\n\t\t\tthrow new Error(`${label} must contain byte values`);\n\t\t}\n\t\treturn entry;\n\t});\n}\n\nfunction parseOptionalStringRecordProperty(\n\tvalue: unknown,\n\tlabel: string,\n\tkeyLabel: string,\n\tvalueLabel: string,\n): { lastSessionIdByWorkspace?: Record<string, string> } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\tconst record = expectRecord(value, label);\n\tconst parsed: Record<string, string> = {};\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (key.length === 0) {\n\t\t\tthrow new Error(`${keyLabel} must be a non-empty string`);\n\t\t}\n\t\tparsed[key] = expectString(entry, valueLabel);\n\t}\n\treturn { lastSessionIdByWorkspace: parsed };\n}\n\nfunction parseOptionalPushTargetsProperty(value: unknown, label: string): { pushTargets?: IrohRemotePushTarget[] } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\treturn { pushTargets: parseArray(value, label, parseIrohRemotePushTarget) };\n}\n\nfunction parseOptionalLiveActivityRegistrationsProperty(\n\tvalue: unknown,\n\tlabel: string,\n): { liveActivities?: IrohRemoteLiveActivityRegistration[] } {\n\tif (value === undefined) {\n\t\treturn {};\n\t}\n\tconst registrations = parseArray(value, label, parseIrohRemoteLiveActivityRegistration);\n\tconst normalized = normalizeIrohRemoteLiveActivityRegistrations(registrations);\n\treturn normalized.length === 0 ? {} : { liveActivities: normalized };\n}\n\nfunction expectPairingSecretTombstoneOutcome(value: unknown): IrohRemotePairingSecretTombstoneOutcome {\n\tif (value === \"pairing_secret_consumed\" || value === \"pairing_secret_expired\") {\n\t\treturn value;\n\t}\n\tthrow new Error(\"pairing secret tombstone outcome must be pairing_secret_consumed or pairing_secret_expired\");\n}\n\nfunction expectPushTargetProvider(value: unknown, label: string): IrohRemotePushTargetProvider {\n\tif (value === \"fcm\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be fcm`);\n}\n\nfunction expectPushTargetPlatform(value: unknown, label: string): IrohRemotePushTargetPlatform {\n\tif (value === \"ios\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be ios`);\n}\n\nfunction expectPushTokenEnvironment(value: unknown, label: string): IrohRemotePushTokenEnvironment {\n\tif (value === \"development\" || value === \"production\") {\n\t\treturn value;\n\t}\n\tthrow new Error(`${label} must be development or production`);\n}\n\nfunction expectOptionalPushTokenEnvironment(value: unknown, label: string): IrohRemotePushTokenEnvironment | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectPushTokenEnvironment(value, label);\n}\n\nfunction expectRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction expectString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction expectBoundedUtf8String(value: unknown, label: string, maxBytes: number, maxCodePoints?: number): string {\n\tconst parsed = expectString(value, label);\n\tif (Buffer.byteLength(parsed, \"utf8\") > maxBytes) {\n\t\tthrow new Error(`${label} must be at most ${maxBytes} UTF-8 bytes`);\n\t}\n\tif (maxCodePoints !== undefined && Array.from(parsed).length > maxCodePoints) {\n\t\tthrow new Error(`${label} must contain at most ${maxCodePoints} characters`);\n\t}\n\treturn parsed;\n}\n\nfunction expectSha256Hex(value: unknown, label: string): string {\n\tconst parsed = expectString(value, label);\n\tif (!/^[0-9a-f]{64}$/.test(parsed)) {\n\t\tthrow new Error(`${label} must be a lowercase SHA-256 hex digest`);\n\t}\n\treturn parsed;\n}\n\nfunction expectOptionalString(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectString(value, label);\n}\n\nfunction expectAllowTools(value: unknown, label: string): string {\n\tif (typeof value !== \"string\") {\n\t\tthrow new Error(`${label} must be a string`);\n\t}\n\treturn value;\n}\n\nfunction expectOptionalAllowTools(value: unknown, label: string): string | undefined {\n\treturn value === undefined ? undefined : expectAllowTools(value, label);\n}\n\nfunction expectOptionalNumber(value: unknown, label: string): number | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectNumber(value, label);\n}\n\nfunction expectBoolean(value: unknown, label: string): boolean {\n\tif (typeof value !== \"boolean\") {\n\t\tthrow new Error(`${label} must be a boolean`);\n\t}\n\treturn value;\n}\n\nfunction expectNumber(value: unknown, label: string): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\tthrow new Error(`${label} must be a finite number`);\n\t}\n\treturn value;\n}\n\nfunction expectNonNegativeSafeInteger(value: unknown, label: string): number {\n\tconst parsed = expectNumber(value, label);\n\tif (!Number.isSafeInteger(parsed) || parsed < 0) {\n\t\tthrow new Error(`${label} must be a non-negative safe integer`);\n\t}\n\treturn parsed;\n}\n\nfunction compareNumbers(left: number, right: number): number {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareStrings(left: string, right: string): number {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction isNodeErrorWithCode(error: unknown, code: string): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error && error.code === code;\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { IROH_REMOTE_ALPN, type IrohRemoteRelayMode } from "./protocol.ts";
2
+ export interface IrohRemoteTicketPayload {
3
+ alpn: typeof IROH_REMOTE_ALPN;
4
+ expiresAt?: number;
5
+ irohTicket: string;
6
+ nodeId?: string;
7
+ relayMode?: IrohRemoteRelayMode;
8
+ /** Relay server URLs the client should use; required when relayMode is "production". */
9
+ relayUrls?: string[];
10
+ /**
11
+ * Bearer token for relays behind access.shared_token. Secret-like: carried
12
+ * in pairing tickets (clients keychain it) and stripped from sanitized
13
+ * reconnect tickets.
14
+ */
15
+ relayAuthToken?: string;
16
+ secret?: string;
17
+ workspace: string;
18
+ }
19
+ export interface IrohRemoteSanitizedReconnectTicketPayload extends IrohRemoteTicketPayload {
20
+ nodeId: string;
21
+ relayMode: IrohRemoteRelayMode;
22
+ }
23
+ /** Non-secret values a user can compare before accepting a pairing ticket. */
24
+ export interface IrohRemotePairingVerificationDetails {
25
+ expiresAt?: number;
26
+ hostFingerprint: string;
27
+ hostNodeId: string;
28
+ relayMode: IrohRemoteRelayMode;
29
+ relayOrigins: string[];
30
+ workspace: string;
31
+ }
32
+ /**
33
+ * Match the iOS pairing confirmation fingerprint: the first 128 bits of the
34
+ * SHA-256 digest, rendered as four uppercase 32-bit groups.
35
+ */
36
+ export declare function formatIrohRemoteHostFingerprint(endpointIdBytes: ArrayLike<number>): string;
37
+ /** Decode a ticket into only the values that are safe to display for comparison. */
38
+ export declare function getIrohRemotePairingVerificationDetails(ticket: string): IrohRemotePairingVerificationDetails;
39
+ export declare function encodeIrohRemoteTicketPayload(payload: IrohRemoteTicketPayload): string;
40
+ export declare function decodeIrohRemoteTicketPayload(ticket: string): IrohRemoteTicketPayload;
41
+ export declare function parseIrohRemoteTicketPayload(value: unknown): IrohRemoteTicketPayload;
42
+ export declare function assertIrohRemoteTicketNotExpired(payload: IrohRemoteTicketPayload, now?: number): void;
43
+ export declare function createIrohRemoteSanitizedReconnectTicketPayload(payload: IrohRemoteTicketPayload): IrohRemoteSanitizedReconnectTicketPayload;
44
+ export declare function createIrohRemoteSanitizedReconnectTicket(ticket: string): string;
45
+ export declare function assertIrohRemoteTicketPayloadHostIdentity(payload: IrohRemoteTicketPayload, expectedHostNodeId: string): void;
46
+ //# sourceMappingURL=ticket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../../src/core/remote/iroh/ticket.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,gBAAgB,EAGhB,KAAK,mBAAmB,EAGxB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,OAAO,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yCAA0C,SAAQ,uBAAuB;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,mBAAmB,CAAC;CAC/B;AAED,8EAA8E;AAC9E,MAAM,WAAW,oCAAoC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAc1F;AAED,oFAAoF;AACpF,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,MAAM,GAAG,oCAAoC,CAsB5G;AA6GD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAEtF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAarF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAoCpF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,SAAa,GAAG,IAAI,CAIzG;AAED,wBAAgB,+CAA+C,CAC9D,OAAO,EAAE,uBAAuB,GAC9B,yCAAyC,CAkB3C;AAED,wBAAgB,wCAAwC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/E;AAED,wBAAgB,yCAAyC,CACxD,OAAO,EAAE,uBAAuB,EAChC,kBAAkB,EAAE,MAAM,GACxB,IAAI,CAaN","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nimport { isIP } from \"node:net\";\nimport {\n\tIROH_REMOTE_ALPN,\n\tIROH_REMOTE_TICKET_PREFIX,\n\tIrohRemoteOutcomeError,\n\ttype IrohRemoteRelayMode,\n\tisIrohRemoteRelayMode,\n\tisIrohRemoteRelayUrls,\n} from \"./protocol.ts\";\n\nexport interface IrohRemoteTicketPayload {\n\talpn: typeof IROH_REMOTE_ALPN;\n\texpiresAt?: number;\n\tirohTicket: string;\n\tnodeId?: string;\n\trelayMode?: IrohRemoteRelayMode;\n\t/** Relay server URLs the client should use; required when relayMode is \"production\". */\n\trelayUrls?: string[];\n\t/**\n\t * Bearer token for relays behind access.shared_token. Secret-like: carried\n\t * in pairing tickets (clients keychain it) and stripped from sanitized\n\t * reconnect tickets.\n\t */\n\trelayAuthToken?: string;\n\tsecret?: string;\n\tworkspace: string;\n}\n\nexport interface IrohRemoteSanitizedReconnectTicketPayload extends IrohRemoteTicketPayload {\n\tnodeId: string;\n\trelayMode: IrohRemoteRelayMode;\n}\n\n/** Non-secret values a user can compare before accepting a pairing ticket. */\nexport interface IrohRemotePairingVerificationDetails {\n\texpiresAt?: number;\n\thostFingerprint: string;\n\thostNodeId: string;\n\trelayMode: IrohRemoteRelayMode;\n\trelayOrigins: string[];\n\tworkspace: string;\n}\n\n/**\n * Match the iOS pairing confirmation fingerprint: the first 128 bits of the\n * SHA-256 digest, rendered as four uppercase 32-bit groups.\n */\nexport function formatIrohRemoteHostFingerprint(endpointIdBytes: ArrayLike<number>): string {\n\tif (endpointIdBytes.length !== 32) {\n\t\tthrow new Error(\"Iroh endpoint identity must be exactly 32 bytes\");\n\t}\n\tconst bytes = new Uint8Array(endpointIdBytes.length);\n\tfor (let index = 0; index < endpointIdBytes.length; index++) {\n\t\tconst value = endpointIdBytes[index];\n\t\tif (value === undefined || !Number.isInteger(value) || value < 0 || value > 0xff) {\n\t\t\tthrow new Error(\"Iroh endpoint identity contains an invalid byte\");\n\t\t}\n\t\tbytes[index] = value;\n\t}\n\tconst digest = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 32).toUpperCase();\n\treturn digest.match(/.{8}/g)!.join(\"-\");\n}\n\n/** Decode a ticket into only the values that are safe to display for comparison. */\nexport function getIrohRemotePairingVerificationDetails(ticket: string): IrohRemotePairingVerificationDetails {\n\tconst payload = decodeIrohRemoteTicketPayload(ticket);\n\tif (payload.nodeId === undefined) {\n\t\tthrow new Error(\"ticket nodeId is required for pairing verification\");\n\t}\n\tconst hostNodeId = payload.nodeId.trim().toLowerCase();\n\tif (!/^[0-9a-f]{64}$/.test(hostNodeId)) {\n\t\tthrow new Error(\"ticket nodeId must be a 32-byte hexadecimal Iroh endpoint identity\");\n\t}\n\tconst workspace = payload.workspace.trim();\n\tif (workspace.length === 0) {\n\t\tthrow new Error(\"ticket workspace is required for pairing verification\");\n\t}\n\tconst relayMode = payload.relayMode ?? \"disabled\";\n\treturn {\n\t\t...(payload.expiresAt === undefined ? {} : { expiresAt: payload.expiresAt }),\n\t\thostFingerprint: formatIrohRemoteHostFingerprint(Buffer.from(hostNodeId, \"hex\")),\n\t\thostNodeId,\n\t\trelayMode,\n\t\trelayOrigins: normalizePairingRelayOrigins(payload.relayUrls ?? [], relayMode),\n\t\tworkspace,\n\t};\n}\n\nfunction normalizePairingRelayOrigins(values: string[], relayMode: IrohRemoteRelayMode): string[] {\n\tconst nonEmptyValues = values.filter((value) => value.trim().length > 0);\n\tif (relayMode !== \"production\") {\n\t\tif (nonEmptyValues.length > 0) {\n\t\t\tthrow new Error(\"ticket relay URLs are only valid in production relay mode\");\n\t\t}\n\t\treturn [];\n\t}\n\tif (nonEmptyValues.length === 0) {\n\t\tthrow new Error(\"ticket production relay mode requires HTTPS relay origins\");\n\t}\n\treturn [...new Set(nonEmptyValues.map(normalizeHttpsRelayOrigin))].sort();\n}\n\nfunction normalizeHttpsRelayOrigin(value: string): string {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(value.trim());\n\t} catch {\n\t\tthrow new Error(\"ticket relay URL must be a valid HTTPS origin\");\n\t}\n\tif (\n\t\turl.protocol !== \"https:\" ||\n\t\turl.username.length > 0 ||\n\t\turl.password.length > 0 ||\n\t\turl.search.length > 0 ||\n\t\turl.hash.length > 0 ||\n\t\t(url.pathname !== \"\" && url.pathname !== \"/\")\n\t) {\n\t\tthrow new Error(\"ticket relay URL must be an HTTPS origin without credentials, path, query, or fragment\");\n\t}\n\n\tconst bracketed = url.hostname.startsWith(\"[\") && url.hostname.endsWith(\"]\");\n\tconst rawHostname = bracketed ? url.hostname.slice(1, -1) : url.hostname;\n\tconst hostname = rawHostname.toLowerCase().replace(/\\.+$/, \"\");\n\tif (hostname.length === 0 || isUnsafeLocalRelayHost(hostname)) {\n\t\tthrow new Error(\"ticket relay URL must not target a local or private host\");\n\t}\n\tconst formattedHostname = isIP(hostname) === 6 ? `[${hostname}]` : hostname;\n\treturn `https://${formattedHostname}${url.port.length === 0 || url.port === \"443\" ? \"\" : `:${url.port}`}`;\n}\n\nfunction isUnsafeLocalRelayHost(hostname: string): boolean {\n\tif (\n\t\thostname === \"localhost\" ||\n\t\thostname.endsWith(\".localhost\") ||\n\t\thostname === \"local\" ||\n\t\thostname.endsWith(\".local\") ||\n\t\thostname.includes(\"%\")\n\t) {\n\t\treturn true;\n\t}\n\tif (isIP(hostname) === 4) {\n\t\treturn isUnsafeIpv4(hostname.split(\".\").map(Number));\n\t}\n\tif (isIP(hostname) !== 6) {\n\t\treturn false;\n\t}\n\tconst bytes = parseIpv6Bytes(hostname);\n\tif (bytes === undefined) return true;\n\tconst unspecified = bytes.every((byte) => byte === 0);\n\tconst loopback = bytes.slice(0, 15).every((byte) => byte === 0) && bytes[15] === 1;\n\tconst linkLocal = bytes[0] === 0xfe && (bytes[1]! & 0xc0) === 0x80;\n\tconst uniqueLocal = (bytes[0]! & 0xfe) === 0xfc;\n\tconst multicast = bytes[0] === 0xff;\n\tif (unspecified || loopback || linkLocal || uniqueLocal || multicast) return true;\n\tconst ipv4Mapped = bytes.slice(0, 10).every((byte) => byte === 0) && bytes[10] === 0xff && bytes[11] === 0xff;\n\treturn ipv4Mapped && isUnsafeIpv4(bytes.slice(12));\n}\n\nfunction isUnsafeIpv4(bytes: number[]): boolean {\n\tif (bytes.length !== 4 || bytes.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 0xff)) return true;\n\treturn (\n\t\tbytes[0] === 0 ||\n\t\tbytes[0] === 10 ||\n\t\tbytes[0] === 127 ||\n\t\t(bytes[0] === 100 && bytes[1]! >= 64 && bytes[1]! <= 127) ||\n\t\t(bytes[0] === 169 && bytes[1] === 254) ||\n\t\t(bytes[0] === 172 && bytes[1]! >= 16 && bytes[1]! <= 31) ||\n\t\t(bytes[0] === 192 && bytes[1] === 168) ||\n\t\t(bytes[0] === 198 && (bytes[1] === 18 || bytes[1] === 19)) ||\n\t\tbytes[0]! >= 224\n\t);\n}\n\nfunction parseIpv6Bytes(address: string): number[] | undefined {\n\tconst halves = address.split(\"::\");\n\tif (halves.length > 2) return undefined;\n\tconst parseHalf = (value: string): number[] | undefined => {\n\t\tif (value.length === 0) return [];\n\t\tconst words: number[] = [];\n\t\tfor (const part of value.split(\":\")) {\n\t\t\tif (!/^[0-9a-f]{1,4}$/i.test(part)) return undefined;\n\t\t\twords.push(Number.parseInt(part, 16));\n\t\t}\n\t\treturn words;\n\t};\n\tconst head = parseHalf(halves[0]!);\n\tconst tail = parseHalf(halves[1] ?? \"\");\n\tif (head === undefined || tail === undefined) return undefined;\n\tconst omitted = 8 - head.length - tail.length;\n\tif ((halves.length === 1 && omitted !== 0) || (halves.length === 2 && omitted < 1)) return undefined;\n\tconst words = [...head, ...Array.from({ length: omitted }, () => 0), ...tail];\n\tif (words.length !== 8) return undefined;\n\treturn words.flatMap((word) => [word >> 8, word & 0xff]);\n}\n\nexport function encodeIrohRemoteTicketPayload(payload: IrohRemoteTicketPayload): string {\n\treturn `${IROH_REMOTE_TICKET_PREFIX}${Buffer.from(JSON.stringify(payload), \"utf8\").toString(\"base64url\")}`;\n}\n\nexport function decodeIrohRemoteTicketPayload(ticket: string): IrohRemoteTicketPayload {\n\tif (!ticket.startsWith(IROH_REMOTE_TICKET_PREFIX)) {\n\t\tthrow new Error(`Expected ticket prefix ${IROH_REMOTE_TICKET_PREFIX}`);\n\t}\n\n\tconst encoded = ticket.slice(IROH_REMOTE_TICKET_PREFIX.length);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(Buffer.from(encoded, \"base64url\").toString(\"utf8\"));\n\t} catch (error: unknown) {\n\t\tthrow new Error(`Failed to decode Iroh remote ticket: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\treturn parseIrohRemoteTicketPayload(parsed);\n}\n\nexport function parseIrohRemoteTicketPayload(value: unknown): IrohRemoteTicketPayload {\n\tconst payload = expectRecord(value, \"Iroh remote ticket payload\");\n\tconst alpn = expectString(payload.alpn, \"ticket alpn\");\n\tif (alpn !== IROH_REMOTE_ALPN) {\n\t\tthrow new Error(`Unsupported ticket ALPN: ${alpn}`);\n\t}\n\n\tconst expiresAt = expectOptionalNumber(payload.expiresAt, \"ticket expiresAt\");\n\tconst irohTicket = expectString(payload.irohTicket, \"ticket irohTicket\");\n\tconst nodeId = expectOptionalString(payload.nodeId, \"ticket nodeId\");\n\tconst relayModeValue = payload.relayMode;\n\tif (relayModeValue !== undefined && !isIrohRemoteRelayMode(relayModeValue)) {\n\t\tthrow new Error(\"ticket relayMode must be disabled, development, or production\");\n\t}\n\tconst relayUrlsValue = payload.relayUrls;\n\tif (relayUrlsValue !== undefined && !isIrohRemoteRelayUrls(relayUrlsValue)) {\n\t\tthrow new Error(\"ticket relayUrls must be a non-empty array of relay URLs\");\n\t}\n\tif (relayModeValue === \"production\" && relayUrlsValue === undefined) {\n\t\tthrow new Error(\"ticket relayMode production requires relayUrls\");\n\t}\n\tconst relayAuthToken = expectOptionalString(payload.relayAuthToken, \"ticket relayAuthToken\");\n\tconst secret = expectOptionalString(payload.secret, \"ticket secret\");\n\tconst workspace = expectString(payload.workspace, \"ticket workspace\");\n\n\treturn {\n\t\talpn,\n\t\texpiresAt,\n\t\tirohTicket,\n\t\tnodeId,\n\t\trelayMode: relayModeValue,\n\t\trelayUrls: relayUrlsValue,\n\t\trelayAuthToken,\n\t\tsecret,\n\t\tworkspace,\n\t};\n}\n\nexport function assertIrohRemoteTicketNotExpired(payload: IrohRemoteTicketPayload, now = Date.now()): void {\n\tif (payload.expiresAt !== undefined && now > payload.expiresAt) {\n\t\tthrow new Error(\"Pairing ticket has expired\");\n\t}\n}\n\nexport function createIrohRemoteSanitizedReconnectTicketPayload(\n\tpayload: IrohRemoteTicketPayload,\n): IrohRemoteSanitizedReconnectTicketPayload {\n\tif (payload.nodeId === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket nodeId is required for saved-host reconnect\");\n\t}\n\tif (payload.relayMode === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket relayMode is required for saved-host reconnect\");\n\t}\n\tif (payload.relayMode === \"production\" && payload.relayUrls === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\"saved_host_invalid\", \"ticket relayUrls are required for production relayMode\");\n\t}\n\treturn {\n\t\talpn: payload.alpn,\n\t\tirohTicket: payload.irohTicket,\n\t\tnodeId: payload.nodeId,\n\t\trelayMode: payload.relayMode,\n\t\t...(payload.relayUrls === undefined ? {} : { relayUrls: payload.relayUrls }),\n\t\tworkspace: payload.workspace,\n\t};\n}\n\nexport function createIrohRemoteSanitizedReconnectTicket(ticket: string): string {\n\treturn encodeIrohRemoteTicketPayload(\n\t\tcreateIrohRemoteSanitizedReconnectTicketPayload(decodeIrohRemoteTicketPayload(ticket)),\n\t);\n}\n\nexport function assertIrohRemoteTicketPayloadHostIdentity(\n\tpayload: IrohRemoteTicketPayload,\n\texpectedHostNodeId: string,\n): void {\n\tif (payload.nodeId === undefined) {\n\t\tthrow new IrohRemoteOutcomeError(\n\t\t\t\"saved_host_invalid\",\n\t\t\t\"ticket nodeId is required for host identity verification\",\n\t\t);\n\t}\n\tif (payload.nodeId !== expectedHostNodeId) {\n\t\tthrow new IrohRemoteOutcomeError(\n\t\t\t\"host_identity_mismatch\",\n\t\t\t`expected ${expectedHostNodeId}, got ${payload.nodeId}`,\n\t\t);\n\t}\n}\n\nfunction expectRecord(value: unknown, label: string): Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction expectString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction expectOptionalString(value: unknown, label: string): string | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn expectString(value, label);\n}\n\nfunction expectOptionalNumber(value: unknown, label: string): number | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\tthrow new Error(`${label} must be a finite number`);\n\t}\n\treturn value;\n}\n"]}