borgmcp 1.1.14 → 2.0.1

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 (459) hide show
  1. package/CONTRIBUTING.md +15 -0
  2. package/LICENSE +201 -33
  3. package/NOTICE +2 -0
  4. package/README.md +86 -37
  5. package/SECURITY.md +7 -0
  6. package/dist/agent-runtime.d.ts.map +1 -0
  7. package/dist/agent-runtime.js +63 -1
  8. package/dist/agent-runtime.js.map +1 -0
  9. package/dist/assimilate-cmd.d.ts +96 -17
  10. package/dist/assimilate-cmd.d.ts.map +1 -0
  11. package/dist/assimilate-cmd.js +1396 -48
  12. package/dist/assimilate-cmd.js.map +1 -0
  13. package/dist/assimilate-deps.d.ts.map +1 -0
  14. package/dist/assimilate-deps.js +384 -3
  15. package/dist/assimilate-deps.js.map +1 -0
  16. package/dist/assimilate-guard.d.ts +5 -7
  17. package/dist/assimilate-guard.d.ts.map +1 -0
  18. package/dist/assimilate-guard.js +60 -2
  19. package/dist/assimilate-guard.js.map +1 -0
  20. package/dist/assimilate-welcome.d.ts +1 -1
  21. package/dist/assimilate-welcome.d.ts.map +1 -0
  22. package/dist/assimilate-welcome.js +32 -2
  23. package/dist/assimilate-welcome.js.map +1 -0
  24. package/dist/auth-env.d.ts +7 -50
  25. package/dist/auth-env.d.ts.map +1 -0
  26. package/dist/auth-env.js +22 -1
  27. package/dist/auth-env.js.map +1 -0
  28. package/dist/backends/launch-all-pastelist.d.ts.map +1 -0
  29. package/dist/backends/launch-all-pastelist.js +11 -4
  30. package/dist/backends/launch-all-pastelist.js.map +1 -0
  31. package/dist/backends/launch-all-tmux.d.ts.map +1 -0
  32. package/dist/backends/launch-all-tmux.js +49 -1
  33. package/dist/backends/launch-all-tmux.js.map +1 -0
  34. package/dist/backends/launch-all-windows.d.ts.map +1 -0
  35. package/dist/backends/launch-all-windows.js +86 -12
  36. package/dist/backends/launch-all-windows.js.map +1 -0
  37. package/dist/bare-launch-menu.d.ts.map +1 -0
  38. package/dist/bare-launch-menu.js +83 -6
  39. package/dist/bare-launch-menu.js.map +1 -0
  40. package/dist/claude-launch-args.d.ts.map +1 -0
  41. package/dist/claude-launch-args.js +34 -1
  42. package/dist/claude-launch-args.js.map +1 -0
  43. package/dist/claude.d.ts.map +1 -0
  44. package/dist/claude.js +486 -14
  45. package/dist/claude.js.map +1 -0
  46. package/dist/cleanup-cmd.d.ts +5 -5
  47. package/dist/cleanup-cmd.d.ts.map +1 -0
  48. package/dist/cleanup-cmd.js +453 -14
  49. package/dist/cleanup-cmd.js.map +1 -0
  50. package/dist/clear-rewake-core.d.ts.map +1 -0
  51. package/dist/clear-rewake-core.js +23 -2
  52. package/dist/clear-rewake-core.js.map +1 -0
  53. package/dist/clear-rewake.d.ts.map +1 -0
  54. package/dist/clear-rewake.js +19 -1
  55. package/dist/clear-rewake.js.map +1 -0
  56. package/dist/cli-help.d.ts +5 -0
  57. package/dist/cli-help.d.ts.map +1 -0
  58. package/dist/cli-help.js +104 -56
  59. package/dist/cli-help.js.map +1 -0
  60. package/dist/cli-platform.d.ts.map +1 -0
  61. package/dist/cli-platform.js +106 -4
  62. package/dist/cli-platform.js.map +1 -0
  63. package/dist/cli-tool-approval.d.ts +84 -0
  64. package/dist/cli-tool-approval.d.ts.map +1 -0
  65. package/dist/cli-tool-approval.js +583 -0
  66. package/dist/cli-tool-approval.js.map +1 -0
  67. package/dist/codex-app-server.d.ts.map +1 -0
  68. package/dist/codex-app-server.js +228 -4
  69. package/dist/codex-app-server.js.map +1 -0
  70. package/dist/codex-app-wake.d.ts.map +1 -0
  71. package/dist/codex-app-wake.js +432 -2
  72. package/dist/codex-app-wake.js.map +1 -0
  73. package/dist/codex-launch.d.ts.map +1 -0
  74. package/dist/codex-launch.js +102 -2
  75. package/dist/codex-launch.js.map +1 -0
  76. package/dist/codex-remote.d.ts +6 -1
  77. package/dist/codex-remote.d.ts.map +1 -0
  78. package/dist/codex-remote.js +394 -1
  79. package/dist/codex-remote.js.map +1 -0
  80. package/dist/codex-wake-resolve.d.ts.map +1 -0
  81. package/dist/codex-wake-resolve.js +127 -1
  82. package/dist/codex-wake-resolve.js.map +1 -0
  83. package/dist/config-utils.d.ts +2 -2
  84. package/dist/config-utils.d.ts.map +1 -0
  85. package/dist/config-utils.js +766 -3
  86. package/dist/config-utils.js.map +1 -0
  87. package/dist/config.d.ts +98 -61
  88. package/dist/config.d.ts.map +1 -0
  89. package/dist/config.js +426 -1
  90. package/dist/config.js.map +1 -0
  91. package/dist/console-prefix.d.ts.map +1 -0
  92. package/dist/console-prefix.js +96 -1
  93. package/dist/console-prefix.js.map +1 -0
  94. package/dist/cube-name.d.ts.map +1 -0
  95. package/dist/cube-name.js +67 -1
  96. package/dist/cube-name.js.map +1 -0
  97. package/dist/cubes.d.ts +126 -18
  98. package/dist/cubes.d.ts.map +1 -0
  99. package/dist/cubes.js +412 -4
  100. package/dist/cubes.js.map +1 -0
  101. package/dist/debug.d.ts.map +1 -0
  102. package/dist/debug.js +71 -1
  103. package/dist/debug.js.map +1 -0
  104. package/dist/direct-log.d.ts.map +1 -0
  105. package/dist/direct-log.js +11 -1
  106. package/dist/direct-log.js.map +1 -0
  107. package/dist/docs-sections.d.ts +11 -10
  108. package/dist/docs-sections.d.ts.map +1 -0
  109. package/dist/docs-sections.js +113 -3
  110. package/dist/docs-sections.js.map +1 -0
  111. package/dist/drone-lifecycle.d.ts +5 -21
  112. package/dist/drone-lifecycle.d.ts.map +1 -0
  113. package/dist/drone-lifecycle.js +57 -8
  114. package/dist/drone-lifecycle.js.map +1 -0
  115. package/dist/drone-management.d.ts +29 -0
  116. package/dist/drone-management.d.ts.map +1 -0
  117. package/dist/drone-management.js +109 -0
  118. package/dist/drone-management.js.map +1 -0
  119. package/dist/ensure-mcp-config.d.ts.map +1 -0
  120. package/dist/ensure-mcp-config.js +36 -1
  121. package/dist/ensure-mcp-config.js.map +1 -0
  122. package/dist/evict-drone.d.ts +10 -2
  123. package/dist/evict-drone.d.ts.map +1 -0
  124. package/dist/evict-drone.js +60 -1
  125. package/dist/evict-drone.js.map +1 -0
  126. package/dist/gc-orphan-inboxes.d.ts.map +1 -0
  127. package/dist/gc-orphan-inboxes.js +177 -1
  128. package/dist/gc-orphan-inboxes.js.map +1 -0
  129. package/dist/inbox-monitor.d.ts +1 -1
  130. package/dist/inbox-monitor.d.ts.map +1 -0
  131. package/dist/inbox-monitor.js +856 -3
  132. package/dist/inbox-monitor.js.map +1 -0
  133. package/dist/index.d.ts +6 -4
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +1034 -37
  136. package/dist/index.js.map +1 -0
  137. package/dist/launch-all-cmd.d.ts.map +1 -0
  138. package/dist/launch-all-cmd.js +377 -37
  139. package/dist/launch-all-cmd.js.map +1 -0
  140. package/dist/launch-all-command.d.ts.map +1 -0
  141. package/dist/launch-all-command.js +24 -1
  142. package/dist/launch-all-command.js.map +1 -0
  143. package/dist/launch-all-deps.d.ts +3 -8
  144. package/dist/launch-all-deps.d.ts.map +1 -0
  145. package/dist/launch-all-deps.js +99 -1
  146. package/dist/launch-all-deps.js.map +1 -0
  147. package/dist/launch-all-discovery.d.ts +1 -0
  148. package/dist/launch-all-discovery.d.ts.map +1 -0
  149. package/dist/launch-all-discovery.js +90 -4
  150. package/dist/launch-all-discovery.js.map +1 -0
  151. package/dist/launch-all-locks.d.ts.map +1 -0
  152. package/dist/launch-all-locks.js +54 -1
  153. package/dist/launch-all-locks.js.map +1 -0
  154. package/dist/launch-gate.d.ts +2 -2
  155. package/dist/launch-gate.d.ts.map +1 -0
  156. package/dist/launch-gate.js +73 -1
  157. package/dist/launch-gate.js.map +1 -0
  158. package/dist/lifecycle-log-guard.d.ts.map +1 -0
  159. package/dist/lifecycle-log-guard.js +93 -2
  160. package/dist/lifecycle-log-guard.js.map +1 -0
  161. package/dist/list-roles-render.d.ts.map +1 -0
  162. package/dist/list-roles-render.js +40 -6
  163. package/dist/list-roles-render.js.map +1 -0
  164. package/dist/local-log-routing.d.ts +19 -0
  165. package/dist/local-log-routing.d.ts.map +1 -0
  166. package/dist/local-log-routing.js +67 -0
  167. package/dist/local-log-routing.js.map +1 -0
  168. package/dist/local-manage-tool-result.d.ts +8 -0
  169. package/dist/local-manage-tool-result.d.ts.map +1 -0
  170. package/dist/local-manage-tool-result.js +10 -0
  171. package/dist/local-manage-tool-result.js.map +1 -0
  172. package/dist/local-server-cursor.d.ts +34 -0
  173. package/dist/local-server-cursor.d.ts.map +1 -0
  174. package/dist/local-server-cursor.js +151 -0
  175. package/dist/local-server-cursor.js.map +1 -0
  176. package/dist/log-audit.d.ts.map +1 -0
  177. package/dist/log-audit.js +194 -3
  178. package/dist/log-audit.js.map +1 -0
  179. package/dist/log-stream.d.ts +31 -18
  180. package/dist/log-stream.d.ts.map +1 -0
  181. package/dist/log-stream.js +1214 -12
  182. package/dist/log-stream.js.map +1 -0
  183. package/dist/model-presets.d.ts.map +1 -0
  184. package/dist/model-presets.js +19 -1
  185. package/dist/model-presets.js.map +1 -0
  186. package/dist/name-validator.d.ts.map +1 -0
  187. package/dist/name-validator.js +22 -1
  188. package/dist/name-validator.js.map +1 -0
  189. package/dist/opencode-drone.d.ts.map +1 -0
  190. package/dist/opencode-drone.js +438 -4
  191. package/dist/opencode-drone.js.map +1 -0
  192. package/dist/opencode-plugin.d.ts +1 -1
  193. package/dist/opencode-plugin.d.ts.map +1 -0
  194. package/dist/opencode-plugin.js +29 -4
  195. package/dist/opencode-plugin.js.map +1 -0
  196. package/dist/parse-assimilate-args.d.ts +1 -1
  197. package/dist/parse-assimilate-args.d.ts.map +1 -0
  198. package/dist/parse-assimilate-args.js +125 -1
  199. package/dist/parse-assimilate-args.js.map +1 -0
  200. package/dist/parse-launch-all-args.d.ts.map +1 -0
  201. package/dist/parse-launch-all-args.js +70 -1
  202. package/dist/parse-launch-all-args.js.map +1 -0
  203. package/dist/postinstall-banner.d.ts.map +1 -0
  204. package/dist/postinstall-banner.js +27 -2
  205. package/dist/postinstall-banner.js.map +1 -0
  206. package/dist/postinstall.d.ts.map +1 -0
  207. package/dist/postinstall.js +32 -5
  208. package/dist/postinstall.js.map +1 -0
  209. package/dist/readiness-probe.d.ts.map +1 -0
  210. package/dist/readiness-probe.js +9 -1
  211. package/dist/readiness-probe.js.map +1 -0
  212. package/dist/regen-format.d.ts.map +1 -0
  213. package/dist/regen-format.js +545 -13
  214. package/dist/regen-format.js.map +1 -0
  215. package/dist/regen.d.ts.map +1 -0
  216. package/dist/regen.js +141 -5
  217. package/dist/regen.js.map +1 -0
  218. package/dist/remote-client.d.ts +65 -175
  219. package/dist/remote-client.d.ts.map +1 -0
  220. package/dist/remote-client.js +942 -1
  221. package/dist/remote-client.js.map +1 -0
  222. package/dist/reset-local-seat-cmd.d.ts +50 -0
  223. package/dist/reset-local-seat-cmd.d.ts.map +1 -0
  224. package/dist/reset-local-seat-cmd.js +169 -0
  225. package/dist/reset-local-seat-cmd.js.map +1 -0
  226. package/dist/role-match.d.ts.map +1 -0
  227. package/dist/role-match.js +23 -1
  228. package/dist/role-match.js.map +1 -0
  229. package/dist/role-resolver.d.ts.map +1 -0
  230. package/dist/role-resolver.js +60 -1
  231. package/dist/role-resolver.js.map +1 -0
  232. package/dist/roster-render.d.ts.map +1 -0
  233. package/dist/roster-render.js +121 -3
  234. package/dist/roster-render.js.map +1 -0
  235. package/dist/seat-probe.d.ts +32 -13
  236. package/dist/seat-probe.d.ts.map +1 -0
  237. package/dist/seat-probe.js +78 -1
  238. package/dist/seat-probe.js.map +1 -0
  239. package/dist/seat-store.d.ts +76 -0
  240. package/dist/seat-store.d.ts.map +1 -0
  241. package/dist/seat-store.js +309 -0
  242. package/dist/seat-store.js.map +1 -0
  243. package/dist/seats.d.ts +303 -0
  244. package/dist/seats.d.ts.map +1 -0
  245. package/dist/seats.js +551 -0
  246. package/dist/seats.js.map +1 -0
  247. package/dist/self-path.d.ts +27 -0
  248. package/dist/self-path.d.ts.map +1 -0
  249. package/dist/self-path.js +43 -0
  250. package/dist/self-path.js.map +1 -0
  251. package/dist/server-endpoint.d.ts +9 -0
  252. package/dist/server-endpoint.d.ts.map +1 -0
  253. package/dist/server-endpoint.js +38 -0
  254. package/dist/server-endpoint.js.map +1 -0
  255. package/dist/server-errors.d.ts +50 -0
  256. package/dist/server-errors.d.ts.map +1 -0
  257. package/dist/server-errors.js +79 -0
  258. package/dist/server-errors.js.map +1 -0
  259. package/dist/server-handshake.d.ts +197 -0
  260. package/dist/server-handshake.d.ts.map +1 -0
  261. package/dist/server-handshake.js +505 -0
  262. package/dist/server-handshake.js.map +1 -0
  263. package/dist/server-response.d.ts +3 -0
  264. package/dist/server-response.d.ts.map +1 -0
  265. package/dist/server-response.js +67 -0
  266. package/dist/server-response.js.map +1 -0
  267. package/dist/server-trust.d.ts +14 -0
  268. package/dist/server-trust.d.ts.map +1 -0
  269. package/dist/server-trust.js +225 -0
  270. package/dist/server-trust.js.map +1 -0
  271. package/dist/setup-confirm.d.ts +3 -3
  272. package/dist/setup-confirm.d.ts.map +1 -0
  273. package/dist/setup-confirm.js +126 -2
  274. package/dist/setup-confirm.js.map +1 -0
  275. package/dist/setup.d.ts +5 -3
  276. package/dist/setup.d.ts.map +1 -0
  277. package/dist/setup.js +169 -46
  278. package/dist/setup.js.map +1 -0
  279. package/dist/shell-escape.d.ts.map +1 -0
  280. package/dist/shell-escape.js +22 -1
  281. package/dist/shell-escape.js.map +1 -0
  282. package/dist/spawn.d.ts +2 -2
  283. package/dist/spawn.d.ts.map +1 -0
  284. package/dist/spawn.js +29 -10
  285. package/dist/spawn.js.map +1 -0
  286. package/dist/startup-services.d.ts +0 -1
  287. package/dist/startup-services.d.ts.map +1 -0
  288. package/dist/startup-services.js +26 -1
  289. package/dist/startup-services.js.map +1 -0
  290. package/dist/stream-owner.d.ts +6 -2
  291. package/dist/stream-owner.d.ts.map +1 -0
  292. package/dist/stream-owner.js +547 -2
  293. package/dist/stream-owner.js.map +1 -0
  294. package/dist/stream-status.d.ts +1 -1
  295. package/dist/stream-status.d.ts.map +1 -0
  296. package/dist/stream-status.js +268 -3
  297. package/dist/stream-status.js.map +1 -0
  298. package/dist/sync-roles-render.d.ts.map +1 -0
  299. package/dist/sync-roles-render.js +118 -3
  300. package/dist/sync-roles-render.js.map +1 -0
  301. package/dist/sync.d.ts +1 -1
  302. package/dist/sync.d.ts.map +1 -0
  303. package/dist/sync.js +286 -22
  304. package/dist/sync.js.map +1 -0
  305. package/dist/terminal-title.d.ts.map +1 -0
  306. package/dist/terminal-title.js +68 -1
  307. package/dist/terminal-title.js.map +1 -0
  308. package/dist/token-store.d.ts +17 -111
  309. package/dist/token-store.d.ts.map +1 -0
  310. package/dist/token-store.js +81 -1
  311. package/dist/token-store.js.map +1 -0
  312. package/dist/tool-manifest.d.ts +4 -8
  313. package/dist/tool-manifest.d.ts.map +1 -0
  314. package/dist/tool-manifest.js +554 -1
  315. package/dist/tool-manifest.js.map +1 -0
  316. package/dist/tool-scope.d.ts +8 -12
  317. package/dist/tool-scope.d.ts.map +1 -0
  318. package/dist/tool-scope.js +97 -1
  319. package/dist/tool-scope.js.map +1 -0
  320. package/dist/types.d.ts +1 -5
  321. package/dist/types.d.ts.map +1 -0
  322. package/dist/types.js +5 -0
  323. package/dist/types.js.map +1 -0
  324. package/dist/unknown-subcommand.d.ts +1 -1
  325. package/dist/unknown-subcommand.d.ts.map +1 -0
  326. package/dist/unknown-subcommand.js +37 -1
  327. package/dist/unknown-subcommand.js.map +1 -0
  328. package/dist/version.d.ts +1 -1
  329. package/dist/version.d.ts.map +1 -0
  330. package/dist/version.js +78 -2
  331. package/dist/version.js.map +1 -0
  332. package/dist/working-repo.d.ts.map +1 -0
  333. package/dist/working-repo.js +81 -1
  334. package/dist/working-repo.js.map +1 -0
  335. package/dist/worktree-lifecycle.d.ts.map +1 -0
  336. package/dist/worktree-lifecycle.js +205 -2
  337. package/dist/worktree-lifecycle.js.map +1 -0
  338. package/docs/EXTRACTION_PROVENANCE.md +40 -0
  339. package/docs/LOCAL_SERVER.md +103 -0
  340. package/docs/RELEASING.md +120 -0
  341. package/package.json +52 -34
  342. package/src/agent-runtime.ts +69 -0
  343. package/src/assimilate-cmd.ts +1864 -0
  344. package/src/assimilate-deps.ts +444 -0
  345. package/src/assimilate-guard.ts +84 -0
  346. package/src/assimilate-welcome.ts +39 -0
  347. package/src/auth-env.ts +21 -0
  348. package/src/backends/launch-all-pastelist.ts +18 -0
  349. package/src/backends/launch-all-tmux.ts +75 -0
  350. package/src/backends/launch-all-windows.ts +110 -0
  351. package/src/bare-launch-menu.ts +148 -0
  352. package/src/claude-launch-args.ts +35 -0
  353. package/src/claude.ts +561 -0
  354. package/src/cleanup-cmd.ts +581 -0
  355. package/src/clear-rewake-core.ts +34 -0
  356. package/src/clear-rewake.ts +18 -0
  357. package/src/cli-help.ts +116 -0
  358. package/src/cli-platform.ts +127 -0
  359. package/src/cli-tool-approval.ts +716 -0
  360. package/src/codex-app-server.ts +238 -0
  361. package/src/codex-app-wake.ts +512 -0
  362. package/src/codex-launch.ts +140 -0
  363. package/src/codex-remote.ts +500 -0
  364. package/src/codex-wake-resolve.ts +155 -0
  365. package/src/config-utils.ts +811 -0
  366. package/src/config.ts +595 -0
  367. package/src/console-prefix.ts +99 -0
  368. package/src/cube-name.ts +69 -0
  369. package/src/cubes.ts +583 -0
  370. package/src/debug.ts +73 -0
  371. package/src/direct-log.ts +9 -0
  372. package/src/docs-sections.ts +129 -0
  373. package/src/drone-lifecycle.ts +62 -0
  374. package/src/drone-management.ts +162 -0
  375. package/src/ensure-mcp-config.ts +54 -0
  376. package/src/evict-drone.ts +82 -0
  377. package/src/gc-orphan-inboxes.ts +229 -0
  378. package/src/inbox-monitor.ts +1005 -0
  379. package/src/index.ts +1201 -0
  380. package/src/launch-all-cmd.ts +450 -0
  381. package/src/launch-all-command.ts +30 -0
  382. package/src/launch-all-deps.ts +188 -0
  383. package/src/launch-all-discovery.ts +118 -0
  384. package/src/launch-all-locks.ts +74 -0
  385. package/src/launch-gate.ts +80 -0
  386. package/src/lifecycle-log-guard.ts +144 -0
  387. package/src/list-roles-render.ts +52 -0
  388. package/src/local-log-routing.ts +106 -0
  389. package/src/local-manage-tool-result.ts +10 -0
  390. package/src/local-server-cursor.ts +188 -0
  391. package/src/log-audit.ts +207 -0
  392. package/src/log-stream.ts +1505 -0
  393. package/src/model-presets.ts +22 -0
  394. package/src/name-validator.ts +23 -0
  395. package/src/opencode-drone.ts +528 -0
  396. package/src/opencode-plugin.ts +38 -0
  397. package/src/parse-assimilate-args.ts +125 -0
  398. package/src/parse-launch-all-args.ts +100 -0
  399. package/src/postinstall-banner.ts +37 -0
  400. package/src/postinstall.ts +36 -0
  401. package/src/readiness-probe.ts +12 -0
  402. package/src/regen-format.ts +651 -0
  403. package/src/regen.ts +150 -0
  404. package/src/remote-client.ts +1379 -0
  405. package/src/reset-local-seat-cmd.ts +227 -0
  406. package/src/role-match.ts +29 -0
  407. package/src/role-resolver.ts +93 -0
  408. package/src/roster-render.ts +196 -0
  409. package/src/seat-probe.ts +115 -0
  410. package/src/seat-store.ts +333 -0
  411. package/src/seats.ts +741 -0
  412. package/src/self-path.ts +51 -0
  413. package/src/server-endpoint.ts +38 -0
  414. package/src/server-errors.ts +93 -0
  415. package/src/server-handshake.ts +783 -0
  416. package/src/server-response.ts +76 -0
  417. package/src/server-trust.ts +245 -0
  418. package/src/setup-confirm.ts +171 -0
  419. package/src/setup.ts +186 -0
  420. package/src/shell-escape.ts +22 -0
  421. package/src/spawn.ts +31 -0
  422. package/src/startup-services.ts +36 -0
  423. package/src/stream-owner.ts +686 -0
  424. package/src/stream-status.ts +337 -0
  425. package/src/sync-roles-render.ts +163 -0
  426. package/src/sync.ts +363 -0
  427. package/src/terminal-title.ts +76 -0
  428. package/src/token-store.ts +102 -0
  429. package/src/tool-manifest.ts +610 -0
  430. package/src/tool-scope.ts +110 -0
  431. package/src/types.ts +5 -0
  432. package/src/unknown-subcommand.ts +35 -0
  433. package/src/version.ts +82 -0
  434. package/src/working-repo.ts +99 -0
  435. package/src/worktree-lifecycle.ts +254 -0
  436. package/dist/auth-recovery.d.ts +0 -33
  437. package/dist/auth-recovery.js +0 -1
  438. package/dist/auth.d.ts +0 -103
  439. package/dist/auth.js +0 -39
  440. package/dist/device-auth.d.ts +0 -75
  441. package/dist/device-auth.js +0 -1
  442. package/dist/drone-address.d.ts +0 -26
  443. package/dist/drone-address.js +0 -1
  444. package/dist/get-started.d.ts +0 -20
  445. package/dist/get-started.js +0 -2
  446. package/dist/health-beat.d.ts +0 -134
  447. package/dist/health-beat.js +0 -1
  448. package/dist/role-section.d.ts +0 -110
  449. package/dist/role-section.js +0 -8
  450. package/dist/setup-action.d.ts +0 -20
  451. package/dist/setup-action.js +0 -1
  452. package/dist/stale-version-check.d.ts +0 -40
  453. package/dist/stale-version-check.js +0 -1
  454. package/dist/subscription-retry.d.ts +0 -40
  455. package/dist/subscription-retry.js +0 -1
  456. package/dist/templates.d.ts +0 -107
  457. package/dist/templates.js +0 -359
  458. package/dist/token-crypto.d.ts +0 -50
  459. package/dist/token-crypto.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,72 +1,109 @@
1
+ import type { ServerCapability } from 'borgmcp-shared/protocol';
1
2
  import { type TokenBackend } from './token-store.js';
3
+ export interface ServerCredentialRecord {
4
+ origin: string;
5
+ trustIdentity: string;
6
+ credential: string;
7
+ clientId?: string | null;
8
+ serverCapabilities?: ServerCapability[];
9
+ }
10
+ export interface ActiveServerCredentialRecord {
11
+ origin: string;
12
+ trustIdentity: string;
13
+ credential: string;
14
+ clientId: string | null;
15
+ serverCapabilities: ServerCapability[];
16
+ }
17
+ export interface PendingServerEnrollmentRecord {
18
+ origin: string;
19
+ trustIdentity: string;
20
+ invitation: string;
21
+ retryKey: string;
22
+ credential: string;
23
+ clientName?: string;
24
+ }
25
+ export interface PendingServerCubeCreationRecord {
26
+ origin: string;
27
+ trustIdentity: string;
28
+ clientId: string;
29
+ repositoryBinding: string;
30
+ retryKey: string;
31
+ name: string;
32
+ template: 'default';
33
+ }
2
34
  /**
3
- * gh#860: is THIS process's selected persistent backend the OS keychain? The
4
- * runtime-fallback (auth.ts) gates on this so a keychain WRITE failure migrates
5
- * to file ONLY from the keychain a write failure already on the file backend
6
- * is a real disk problem, not a locked keychain, and must NOT loop.
35
+ * S1 clean-slate local drone-session record. The client CSPRNG-generates the
36
+ * bearer and persists it PENDING (keyed by the stable per-seat attach identity
37
+ * origin+trustIdentity+cube+role no drone id yet on first attach) BEFORE the
38
+ * attach request. The bearer digest is the sole server correlator, so a lost
39
+ * response is recovered by re-sending the exact same bearer. After a verified
40
+ * `created`/`reused` response the SAME record is enriched in place with the
41
+ * server-assigned drone/session identity — no generation, no rotation.
7
42
  */
8
- export declare function isUsingKeychainBackend(): Promise<boolean>;
9
43
  /**
10
- * gh#860: runtime fallback re-point THIS process's persistent backend to the
11
- * encrypted-file backend after a keychain WRITE failure (the temporal #858 case:
12
- * keychain worked at setup, an aged background child later loses write access).
13
- * This is an in-memory, per-process switch NOT a persisted setting: keychain
14
- * stays the default for every other install and the next fresh process re-probes.
15
- * The durable opt-in (BORG_TOKEN_STORE=file) is the persistent counterpart.
16
- *
17
- * ATOMIC (gh#860 SR HIGH 3bed8571): build the file backend, write ALL token
18
- * accounts to it, and commit the process backend switch (backendPromise) ONLY
19
- * after every write succeeds. On any write failure: best-effort roll back the
20
- * partial file write and DO NOT commit — the process stays on its current
21
- * (keychain) backend, so a failed migration can never SILENTLY leave the process
22
- * file-backed (obfuscation-grade) without the caller's at-rest warning, nor leave
23
- * a partial credential behind. Returns true iff the tokens are durably saved to
24
- * file (caller then warns about the at-rest tradeoff); false leaves the process
25
- * exactly as it was (caller falls back to #858's transient surface).
26
- *
27
- * The file backend is obfuscation-grade (token-crypto.ts) — weaker at-rest than
28
- * the keychain. On a true return the caller MUST surface that tradeoff.
29
- */
30
- export declare function migrateToFileBackendWithTokens(tokens: {
31
- idToken: string;
32
- expiresAt: number;
33
- refreshToken?: string;
34
- }, deps?: {
35
- fileBackend?: TokenBackend;
36
- }): Promise<boolean>;
37
- /** Test-only: force the memoized backend so migration atomicity is testable. */
38
- export declare function __setBackendForTest(backend: TokenBackend | null): void;
39
- /**
40
- * Store Google OAuth ID token securely in the selected backend.
41
- */
42
- export declare function storeIdToken(idToken: string, expiresAt: number): Promise<void>;
43
- /**
44
- * Store Google OAuth refresh token securely in the selected backend.
44
+ * The seat/sibling operation dimension for a pending session. Because the client
45
+ * bearer digest is the SOLE server correlator, distinct seats require distinct
46
+ * bearers; a deliberate sibling attach must therefore namespace its bearer apart
47
+ * from the durable in-place seat for the same (origin,trust,cube,role). Ported
48
+ * from the retired local-attach `operationBindingKey`. projectRoot is captured
49
+ * before a successful sibling attach changes cwd, so it is stable across the
50
+ * whole prepare→activate lifecycle.
45
51
  */
46
- export declare function storeRefreshToken(refreshToken: string): Promise<void>;
52
+ export interface ServerSessionOperation {
53
+ projectRoot: string;
54
+ kind: 'seat' | 'sibling';
55
+ operationKey: string;
56
+ }
57
+ /** Test-only credential-store backend injection. */
58
+ export declare function __setServerCredentialBackendForTest(backend: TokenBackend | null): void;
47
59
  /**
48
- * Retrieve the Google OAuth ID token.
60
+ * Persist one self-hosted server credential in the dedicated 0600 credential store.
49
61
  *
50
- * A caller-managed token (BORG_TOKEN / BORG_TOKEN_FILE) takes precedence and
51
- * is returned verbatim the caller owns its freshness, so the expiry buffer
52
- * does not apply. Otherwise reads the persistent backend and returns null if
53
- * not stored or within the 5-minute expiry buffer.
54
- */
55
- export declare function getIdToken(): Promise<string | null>;
56
- /**
57
- * Retrieve the Google OAuth refresh token. There is no refresh_token in
58
- * caller-managed mode (the externally-supplied id_token has no refresh
59
- * counterpart), so this returns null whenever a caller-managed token is set.
60
- */
61
- export declare function getRefreshToken(): Promise<string | null>;
62
- /**
63
- * Clear all stored tokens from the selected backend. Idempotent — clearing
64
- * an already-empty store is a no-op. Does not touch caller-managed env vars
65
- * (those are the caller's to manage).
62
+ * The account key binds both the canonical authority origin and the verified
63
+ * server/CA identity. A credential enrolled for one authority is therefore
64
+ * never considered for another endpoint or trust anchor. Enrollment owns the
65
+ * write; command-line arguments and environment variables are intentionally
66
+ * not credential sources. CR3b: the load→set→rename runs inside ONE hold of the
67
+ * single store lock so a concurrent writer cannot lose an unrelated account.
66
68
  */
67
- export declare function clearTokens(): Promise<void>;
69
+ export declare function storeServerCredential(record: ServerCredentialRecord): Promise<void>;
70
+ /** Read an authority-bound active client record, failing closed on corruption. */
71
+ export declare function getServerCredentialRecord(origin: string, trustIdentity: string): Promise<ActiveServerCredentialRecord | null>;
72
+ /** Read only the bearer for existing call sites that do not need capability metadata. */
73
+ export declare function getServerCredential(origin: string, trustIdentity: string): Promise<string | null>;
74
+ /** Load an exact durable PENDING tuple so a new process can resume it. */
75
+ export declare function getPendingServerEnrollment(origin: string, trustIdentity: string): Promise<PendingServerEnrollmentRecord | null>;
68
76
  /**
69
- * Check if user has valid authentication.
77
+ * Generate and persist an exact enrollment tuple before network I/O. A
78
+ * pre-existing PENDING tuple must match the invitation and presentation name;
79
+ * this makes response-loss retries exact without minting a second bearer.
70
80
  */
71
- export declare function isAuthenticated(): Promise<boolean>;
81
+ export declare function getOrCreatePendingServerEnrollment(input: {
82
+ origin: string;
83
+ trustIdentity: string;
84
+ invitation: string;
85
+ clientName?: string;
86
+ }): Promise<PendingServerEnrollmentRecord>;
87
+ /** Activate the exact pending tuple only after a verified server response. */
88
+ export declare function activatePendingServerEnrollment(input: {
89
+ origin: string;
90
+ trustIdentity: string;
91
+ retryKey: string;
92
+ credential: string;
93
+ clientId: string;
94
+ serverCapabilities: ServerCapability[];
95
+ }): Promise<void>;
96
+ /** Delete only the exact definitively rejected pending attempt. */
97
+ export declare function clearPendingServerEnrollment(origin: string, trustIdentity: string, retryKey: string): Promise<void>;
98
+ /** Persist one repository-scoped cube-create idempotency key in the 0600 credential store. */
99
+ export declare function getOrCreatePendingServerCubeCreation(input: {
100
+ origin: string;
101
+ trustIdentity: string;
102
+ clientId: string;
103
+ projectRoot: string;
104
+ name: string;
105
+ template: 'default';
106
+ }): Promise<PendingServerCubeCreationRecord>;
107
+ export declare function clearPendingServerCubeCreation(record: PendingServerCubeCreationRecord): Promise<void>;
108
+ export declare function clearServerCredential(origin: string, trustIdentity: string): Promise<void>;
72
109
  //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1 +1,426 @@
1
- import k from"os";import y from"path";import{promises as r}from"fs";import{isKeyringAvailable as T}from"./auth-env.js";import{deriveMachineKey as g}from"./token-crypto.js";import{makeKeychainBackend as E,makeEncryptedFileBackend as x,selectTokenBackend as p,readCallerManagedIdToken as F}from"./token-store.js";const u="google-id-token",f="google-refresh-token",d="token-expiry";function v(){return y.join(k.homedir(),".borg","credentials")}const b={readFile:e=>r.readFile(e,"utf8"),writeFile:async(e,t,n)=>{await r.writeFile(e,t,{mode:n}),await r.chmod(e,n)},mkdir:async(e,t)=>{await r.mkdir(e,{recursive:!0,mode:t})},rename:(e,t)=>r.rename(e,t),createExclusive:async(e,t)=>{try{return await r.writeFile(e,t,{flag:"wx",mode:384}),!0}catch(n){if(n?.code==="EEXIST")return!1;throw n}},removeFile:async e=>{try{await r.unlink(e)}catch(t){if(t?.code!=="ENOENT")throw t}},fileAgeMs:async e=>{try{const t=await r.stat(e);return Date.now()-t.mtimeMs}catch(t){if(t?.code==="ENOENT")return null;throw t}}};function N(e){const t=e?.trim().toLowerCase();if(t==="keychain")return"keychain";if(t==="file"||t==="encrypted-file")return"file"}function w(e){return{keyringAvailable:()=>T(),makeKeychain:()=>E(),makeFile:()=>x({filePath:v(),key:g({hostname:k.hostname(),username:k.userInfo().username,platform:process.platform}),fs:b}),forced:e}}let c=null;function o(){return c||(c=p(w(N(process.env.BORG_TOKEN_STORE)))),c}async function S(){return(await o()).name==="keychain"}async function R(e,t={}){const n=t.fileBackend??await p(w("file")),i=[];e.refreshToken!==void 0&&i.push([f,e.refreshToken]),i.push([u,e.idToken]),i.push([d,e.expiresAt.toString()]);const s=[];try{for(const[a,l]of i){const h=await n.get(a);await n.set(a,l),s.push({account:a,prior:h})}}catch{for(const{account:a,prior:l}of s.reverse())try{l===null?await n.delete(a):await n.set(a,l)}catch{}return!1}return c=Promise.resolve(n),!0}function M(e){c=e?Promise.resolve(e):null}function m(){return F({env:process.env,readFile:e=>r.readFile(e,"utf8")})}async function P(e,t){const n=await o();await n.set(u,e),await n.set(d,t.toString())}async function D(e){await(await o()).set(f,e)}async function O(){const e=await m();if(e)return e;const t=await o(),n=await t.get(u),i=await t.get(d);if(!n||!i)return null;const s=parseInt(i,10),a=Date.now();return s-a<300*1e3?null:n}async function U(){return await m()?null:(await o()).get(f)}async function W(){const e=await o();await e.delete(u),await e.delete(f),await e.delete(d)}async function X(){return await O()!==null}export{M as __setBackendForTest,W as clearTokens,O as getIdToken,U as getRefreshToken,X as isAuthenticated,S as isUsingKeychainBackend,R as migrateToFileBackendWithTokens,P as storeIdToken,D as storeRefreshToken};
1
+ /**
2
+ * Secure local-server credential storage.
3
+ *
4
+ * The self-hosted-server credential group (enrollment credentials, pending
5
+ * enrollment/cube-creation records, and the per-seat drone-session bearers)
6
+ * rests ONLY in the 0600 credential file store (Queen rescope) — parity with the
7
+ * server's own TLS private keys. The OS keychain is gone; the raw secret never
8
+ * leaves the 0600 file, and a single store flock serializes every read-compare-write.
9
+ */
10
+ import os from 'os';
11
+ import path from 'path';
12
+ import { createHash, randomBytes, randomUUID } from 'crypto';
13
+ import { withStoreLock } from './seat-store.js';
14
+ import { makeFileBackend, } from './token-store.js';
15
+ const SERVER_CREDENTIAL_RECORD_VERSION = 2;
16
+ const SERVER_PENDING_ENROLLMENT_RECORD_VERSION = 1;
17
+ const SERVER_CUBE_RETRY_RECORD_VERSION = 1;
18
+ // The 0600 credential store (Queen rescope: replaces the OS keychain). A single
19
+ // file holds every server credential/session/enrollment record; a single flock
20
+ // serializes every mutator + observer that must (SR-seven #4).
21
+ const CREDENTIALS_FILE = path.join(os.homedir(), '.config', 'borgmcp', 'credentials.json');
22
+ const CREDENTIALS_LOCK = `${CREDENTIALS_FILE}.lock`;
23
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
24
+ function validateServerCredentialBinding(origin, trustIdentity) {
25
+ let parsed;
26
+ try {
27
+ parsed = new URL(origin);
28
+ }
29
+ catch {
30
+ throw new Error('invalid Borg server credential origin');
31
+ }
32
+ if (parsed.origin !== origin || parsed.protocol !== 'https:') {
33
+ throw new Error('Borg server credentials require a canonical HTTPS origin');
34
+ }
35
+ if (trustIdentity.length < 1 ||
36
+ trustIdentity.length > 512 ||
37
+ /[\u0000-\u001f\u007f]/.test(trustIdentity)) {
38
+ throw new Error('invalid Borg server trust identity');
39
+ }
40
+ }
41
+ function serverCredentialAccount(origin, trustIdentity) {
42
+ validateServerCredentialBinding(origin, trustIdentity);
43
+ const binding = createHash('sha256')
44
+ .update(origin)
45
+ .update('\0')
46
+ .update(trustIdentity)
47
+ .digest('hex');
48
+ return `borg-server-credential:${binding}`;
49
+ }
50
+ // The whole 0600 credential store is serialized by the SINGLE store lock
51
+ // (seat-store.withStoreLock over CREDENTIALS_LOCK). Every mutator AND every
52
+ // observer that must serialize runs its entire read-compare-write inside one
53
+ // continuous hold, released on EVERY path incl throw (SR-seven #4). There is no
54
+ // per-account lock and no compat shim — call sites acquire the store lock directly.
55
+ function serverPendingEnrollmentAccount(origin, trustIdentity) {
56
+ validateServerCredentialBinding(origin, trustIdentity);
57
+ const binding = createHash('sha256')
58
+ .update(origin)
59
+ .update('\0')
60
+ .update(trustIdentity)
61
+ .digest('hex');
62
+ return `borg-server-enrollment-pending:${binding}`;
63
+ }
64
+ function validateUuid(value, label) {
65
+ if (!UUID_RE.test(value))
66
+ throw new Error(`invalid Borg server ${label}`);
67
+ }
68
+ function validateServerCapabilities(value) {
69
+ if (value.length > 1 || value.some((capability) => capability !== 'create_cube')) {
70
+ throw new Error('invalid Borg server capabilities');
71
+ }
72
+ return [...value];
73
+ }
74
+ function validateClientName(clientName) {
75
+ if (clientName !== undefined &&
76
+ (Buffer.byteLength(clientName, 'utf8') < 1 ||
77
+ Buffer.byteLength(clientName, 'utf8') > 120 ||
78
+ !/^[A-Za-z0-9][A-Za-z0-9 ._-]*$/.test(clientName))) {
79
+ throw new Error('invalid Borg server client name');
80
+ }
81
+ }
82
+ function validateInvitation(invitation) {
83
+ if (invitation.length < 43 ||
84
+ invitation.length > 1024 ||
85
+ !/^[A-Za-z0-9_-]+$/.test(invitation)) {
86
+ throw new Error('invalid Borg server invitation');
87
+ }
88
+ }
89
+ function validateEnrollmentCredential(credential) {
90
+ if (!/^[A-Za-z0-9_-]{43}$/.test(credential)) {
91
+ throw new Error('invalid Borg server credential');
92
+ }
93
+ }
94
+ function serverCubeRetryAccount(origin, trustIdentity, clientId, repositoryBinding) {
95
+ validateServerCredentialBinding(origin, trustIdentity);
96
+ validateUuid(clientId, 'client identity');
97
+ if (!/^[a-f0-9]{64}$/.test(repositoryBinding)) {
98
+ throw new Error('invalid Borg server repository binding');
99
+ }
100
+ const binding = createHash('sha256')
101
+ .update(origin)
102
+ .update('\0')
103
+ .update(trustIdentity)
104
+ .update('\0')
105
+ .update(clientId)
106
+ .update('\0')
107
+ .update(repositoryBinding)
108
+ .digest('hex');
109
+ return `borg-server-cube-pending:${binding}`;
110
+ }
111
+ // Local-server bearers rest ONLY in the 0600 credential store (Queen rescope —
112
+ // parity with the server's TLS keys; no OS keychain, no obfuscation-grade
113
+ // fallback). The single store lock (CREDENTIALS_LOCK) serializes the RCW.
114
+ let serverCredentialBackendPromise = null;
115
+ async function getServerCredentialBackend() {
116
+ if (!serverCredentialBackendPromise) {
117
+ serverCredentialBackendPromise = Promise.resolve(makeFileBackend(CREDENTIALS_FILE));
118
+ }
119
+ return serverCredentialBackendPromise;
120
+ }
121
+ /** Test-only credential-store backend injection. */
122
+ export function __setServerCredentialBackendForTest(backend) {
123
+ serverCredentialBackendPromise = backend ? Promise.resolve(backend) : null;
124
+ }
125
+ /**
126
+ * CR3b: the UNLOCKED credential write body. Validates then set()s the account.
127
+ * Callers that ALREADY hold the credential-store lock (activatePendingServerEnrollment)
128
+ * invoke this directly so they do not re-acquire (and self-deadlock on) the single
129
+ * store lock; the public storeServerCredential wraps it in one lock hold.
130
+ */
131
+ async function writeServerCredentialRecord(backend, record) {
132
+ validateServerCredentialBinding(record.origin, record.trustIdentity);
133
+ validateEnrollmentCredential(record.credential);
134
+ if (record.clientId !== undefined && record.clientId !== null) {
135
+ validateUuid(record.clientId, 'client identity');
136
+ }
137
+ const serverCapabilities = validateServerCapabilities(record.serverCapabilities ?? []);
138
+ await backend.set(serverCredentialAccount(record.origin, record.trustIdentity), JSON.stringify({
139
+ version: SERVER_CREDENTIAL_RECORD_VERSION,
140
+ origin: record.origin,
141
+ trustIdentity: record.trustIdentity,
142
+ credential: record.credential,
143
+ clientId: record.clientId ?? null,
144
+ serverCapabilities,
145
+ }));
146
+ }
147
+ /**
148
+ * Persist one self-hosted server credential in the dedicated 0600 credential store.
149
+ *
150
+ * The account key binds both the canonical authority origin and the verified
151
+ * server/CA identity. A credential enrolled for one authority is therefore
152
+ * never considered for another endpoint or trust anchor. Enrollment owns the
153
+ * write; command-line arguments and environment variables are intentionally
154
+ * not credential sources. CR3b: the load→set→rename runs inside ONE hold of the
155
+ * single store lock so a concurrent writer cannot lose an unrelated account.
156
+ */
157
+ export async function storeServerCredential(record) {
158
+ const backend = await getServerCredentialBackend();
159
+ await withStoreLock(CREDENTIALS_LOCK, () => writeServerCredentialRecord(backend, record));
160
+ }
161
+ /** Read an authority-bound active client record, failing closed on corruption. */
162
+ export async function getServerCredentialRecord(origin, trustIdentity) {
163
+ const backend = await getServerCredentialBackend();
164
+ const stored = await backend.get(serverCredentialAccount(origin, trustIdentity));
165
+ if (!stored)
166
+ return null;
167
+ try {
168
+ const record = JSON.parse(stored);
169
+ if (record.version !== SERVER_CREDENTIAL_RECORD_VERSION ||
170
+ record.origin !== origin ||
171
+ record.trustIdentity !== trustIdentity ||
172
+ typeof record.credential !== 'string' ||
173
+ !/^[A-Za-z0-9_-]{43}$/.test(record.credential) ||
174
+ (record.clientId !== null &&
175
+ (typeof record.clientId !== 'string' || !UUID_RE.test(record.clientId))) ||
176
+ !Array.isArray(record.serverCapabilities)) {
177
+ return null;
178
+ }
179
+ let serverCapabilities;
180
+ try {
181
+ serverCapabilities = validateServerCapabilities(record.serverCapabilities);
182
+ }
183
+ catch {
184
+ return null;
185
+ }
186
+ return {
187
+ origin,
188
+ trustIdentity,
189
+ credential: record.credential,
190
+ clientId: record.clientId,
191
+ serverCapabilities,
192
+ };
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ }
198
+ /** Read only the bearer for existing call sites that do not need capability metadata. */
199
+ export async function getServerCredential(origin, trustIdentity) {
200
+ return (await getServerCredentialRecord(origin, trustIdentity))?.credential ?? null;
201
+ }
202
+ function decodePendingServerEnrollment(stored, origin, trustIdentity) {
203
+ const record = JSON.parse(stored);
204
+ if (record.version !== SERVER_PENDING_ENROLLMENT_RECORD_VERSION ||
205
+ record.state !== 'pending' ||
206
+ record.origin !== origin ||
207
+ record.trustIdentity !== trustIdentity ||
208
+ typeof record.invitation !== 'string' ||
209
+ typeof record.retryKey !== 'string' || !UUID_RE.test(record.retryKey) ||
210
+ typeof record.credential !== 'string' || !/^[A-Za-z0-9_-]{43}$/.test(record.credential) ||
211
+ (record.clientName !== undefined && typeof record.clientName !== 'string')) {
212
+ throw new Error('invalid');
213
+ }
214
+ validateInvitation(record.invitation);
215
+ validateClientName(record.clientName);
216
+ return {
217
+ origin,
218
+ trustIdentity,
219
+ invitation: record.invitation,
220
+ retryKey: record.retryKey,
221
+ credential: record.credential,
222
+ ...(record.clientName === undefined ? {} : { clientName: record.clientName }),
223
+ };
224
+ }
225
+ /** Load an exact durable PENDING tuple so a new process can resume it. */
226
+ export async function getPendingServerEnrollment(origin, trustIdentity) {
227
+ validateServerCredentialBinding(origin, trustIdentity);
228
+ const backend = await getServerCredentialBackend();
229
+ const account = serverPendingEnrollmentAccount(origin, trustIdentity);
230
+ return withStoreLock(CREDENTIALS_LOCK, async () => {
231
+ const stored = await backend.get(account);
232
+ if (!stored)
233
+ return null;
234
+ try {
235
+ return decodePendingServerEnrollment(stored, origin, trustIdentity);
236
+ }
237
+ catch {
238
+ throw new Error('pending Borg server enrollment is corrupt');
239
+ }
240
+ });
241
+ }
242
+ /**
243
+ * Generate and persist an exact enrollment tuple before network I/O. A
244
+ * pre-existing PENDING tuple must match the invitation and presentation name;
245
+ * this makes response-loss retries exact without minting a second bearer.
246
+ */
247
+ export async function getOrCreatePendingServerEnrollment(input) {
248
+ validateServerCredentialBinding(input.origin, input.trustIdentity);
249
+ validateInvitation(input.invitation);
250
+ validateClientName(input.clientName);
251
+ const backend = await getServerCredentialBackend();
252
+ const account = serverPendingEnrollmentAccount(input.origin, input.trustIdentity);
253
+ return withStoreLock(CREDENTIALS_LOCK, async () => {
254
+ const stored = await backend.get(account);
255
+ if (stored) {
256
+ try {
257
+ const record = decodePendingServerEnrollment(stored, input.origin, input.trustIdentity);
258
+ if (record.invitation !== input.invitation ||
259
+ record.clientName !== input.clientName) {
260
+ throw new Error('mismatch');
261
+ }
262
+ return record;
263
+ }
264
+ catch {
265
+ throw new Error('pending Borg server enrollment does not match this request');
266
+ }
267
+ }
268
+ const record = {
269
+ origin: input.origin,
270
+ trustIdentity: input.trustIdentity,
271
+ invitation: input.invitation,
272
+ retryKey: randomUUID(),
273
+ credential: randomBytes(32).toString('base64url'),
274
+ ...(input.clientName === undefined ? {} : { clientName: input.clientName }),
275
+ };
276
+ validateEnrollmentCredential(record.credential);
277
+ await backend.set(account, JSON.stringify({
278
+ version: SERVER_PENDING_ENROLLMENT_RECORD_VERSION,
279
+ state: 'pending',
280
+ ...record,
281
+ }));
282
+ return record;
283
+ });
284
+ }
285
+ /** Activate the exact pending tuple only after a verified server response. */
286
+ export async function activatePendingServerEnrollment(input) {
287
+ validateServerCredentialBinding(input.origin, input.trustIdentity);
288
+ validateUuid(input.retryKey, 'enrollment retry key');
289
+ validateEnrollmentCredential(input.credential);
290
+ validateUuid(input.clientId, 'client identity');
291
+ const serverCapabilities = validateServerCapabilities(input.serverCapabilities);
292
+ const backend = await getServerCredentialBackend();
293
+ const pendingAccount = serverPendingEnrollmentAccount(input.origin, input.trustIdentity);
294
+ await withStoreLock(CREDENTIALS_LOCK, async () => {
295
+ const stored = await backend.get(pendingAccount);
296
+ if (!stored)
297
+ throw new Error('pending Borg server enrollment is missing');
298
+ try {
299
+ const pending = decodePendingServerEnrollment(stored, input.origin, input.trustIdentity);
300
+ if (pending.retryKey !== input.retryKey || pending.credential !== input.credential) {
301
+ throw new Error('mismatch');
302
+ }
303
+ }
304
+ catch {
305
+ throw new Error('pending Borg server enrollment does not match the verified response');
306
+ }
307
+ // Already inside the single store lock — use the UNLOCKED write body so we do
308
+ // not re-acquire (and self-deadlock on) CREDENTIALS_LOCK (CR3b).
309
+ await writeServerCredentialRecord(backend, {
310
+ origin: input.origin,
311
+ trustIdentity: input.trustIdentity,
312
+ credential: input.credential,
313
+ clientId: input.clientId,
314
+ serverCapabilities,
315
+ });
316
+ await backend.delete(pendingAccount);
317
+ });
318
+ }
319
+ /** Delete only the exact definitively rejected pending attempt. */
320
+ export async function clearPendingServerEnrollment(origin, trustIdentity, retryKey) {
321
+ validateUuid(retryKey, 'enrollment retry key');
322
+ const backend = await getServerCredentialBackend();
323
+ const account = serverPendingEnrollmentAccount(origin, trustIdentity);
324
+ await withStoreLock(CREDENTIALS_LOCK, async () => {
325
+ const stored = await backend.get(account);
326
+ if (!stored)
327
+ return;
328
+ try {
329
+ const pending = decodePendingServerEnrollment(stored, origin, trustIdentity);
330
+ if (pending.retryKey !== retryKey)
331
+ return;
332
+ }
333
+ catch {
334
+ return;
335
+ }
336
+ await backend.delete(account);
337
+ });
338
+ }
339
+ /** Persist one repository-scoped cube-create idempotency key in the 0600 credential store. */
340
+ export async function getOrCreatePendingServerCubeCreation(input) {
341
+ validateServerCredentialBinding(input.origin, input.trustIdentity);
342
+ validateUuid(input.clientId, 'client identity');
343
+ if (input.projectRoot.length < 1 || input.projectRoot.length > 4096 || /[\u0000-\u001f\u007f]/.test(input.projectRoot)) {
344
+ throw new Error('invalid Borg server repository binding');
345
+ }
346
+ if (Buffer.byteLength(input.name, 'utf8') < 1 || Buffer.byteLength(input.name, 'utf8') > 120 ||
347
+ !/^[A-Za-z0-9][A-Za-z0-9 ._-]*$/.test(input.name)) {
348
+ throw new Error('invalid Borg server cube name');
349
+ }
350
+ const repositoryBinding = createHash('sha256').update(input.projectRoot).digest('hex');
351
+ const backend = await getServerCredentialBackend();
352
+ const account = serverCubeRetryAccount(input.origin, input.trustIdentity, input.clientId, repositoryBinding);
353
+ return withStoreLock(CREDENTIALS_LOCK, async () => {
354
+ const stored = await backend.get(account);
355
+ if (stored) {
356
+ try {
357
+ const record = JSON.parse(stored);
358
+ if (record.version !== SERVER_CUBE_RETRY_RECORD_VERSION ||
359
+ record.state !== 'pending' ||
360
+ record.origin !== input.origin ||
361
+ record.trustIdentity !== input.trustIdentity ||
362
+ record.clientId !== input.clientId ||
363
+ record.repositoryBinding !== repositoryBinding ||
364
+ record.name !== input.name ||
365
+ record.template !== input.template ||
366
+ typeof record.retryKey !== 'string' || !UUID_RE.test(record.retryKey)) {
367
+ throw new Error('mismatch');
368
+ }
369
+ return {
370
+ origin: input.origin,
371
+ trustIdentity: input.trustIdentity,
372
+ clientId: input.clientId,
373
+ repositoryBinding,
374
+ retryKey: record.retryKey,
375
+ name: input.name,
376
+ template: input.template,
377
+ };
378
+ }
379
+ catch {
380
+ throw new Error('pending Borg server cube creation does not match this repository');
381
+ }
382
+ }
383
+ const record = {
384
+ origin: input.origin,
385
+ trustIdentity: input.trustIdentity,
386
+ clientId: input.clientId,
387
+ repositoryBinding,
388
+ retryKey: randomUUID(),
389
+ name: input.name,
390
+ template: input.template,
391
+ };
392
+ await backend.set(account, JSON.stringify({
393
+ version: SERVER_CUBE_RETRY_RECORD_VERSION,
394
+ state: 'pending',
395
+ ...record,
396
+ }));
397
+ return record;
398
+ });
399
+ }
400
+ export async function clearPendingServerCubeCreation(record) {
401
+ const backend = await getServerCredentialBackend();
402
+ const account = serverCubeRetryAccount(record.origin, record.trustIdentity, record.clientId, record.repositoryBinding);
403
+ await withStoreLock(CREDENTIALS_LOCK, async () => {
404
+ const stored = await backend.get(account);
405
+ if (!stored)
406
+ return;
407
+ try {
408
+ const pending = JSON.parse(stored);
409
+ if (pending.retryKey !== record.retryKey)
410
+ return;
411
+ }
412
+ catch {
413
+ return;
414
+ }
415
+ await backend.delete(account);
416
+ });
417
+ }
418
+ export async function clearServerCredential(origin, trustIdentity) {
419
+ const backend = await getServerCredentialBackend();
420
+ const pendingAccount = serverPendingEnrollmentAccount(origin, trustIdentity);
421
+ await withStoreLock(CREDENTIALS_LOCK, async () => {
422
+ await backend.delete(serverCredentialAccount(origin, trustIdentity));
423
+ await backend.delete(pendingAccount);
424
+ });
425
+ }
426
+ //# sourceMappingURL=config.js.map