borgmcp 1.1.15 → 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 +85 -36
  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
package/dist/setup.js CHANGED
@@ -1,47 +1,170 @@
1
1
  #!/usr/bin/env node
2
- import w from"prompts";import e from"chalk";import x from"open";import p from"which";import{authenticateWithGoogle as H}from"./auth.js";import{checkSubscriptionStatus as i,createSubscription as M,probeSession as R}from"./remote-client.js";import{setupActionForSession as U}from"./setup-action.js";import{confirmConfigMutation as O,configMutationTargets as D,formatConfigMutationDisclosure as T,parseYesFlag as I,setupMutationPending as L}from"./setup-confirm.js";import{retrySubscriptionCheck as S}from"./subscription-retry.js";import{addUserPromptSubmitHook as q,addCodexSessionStartHook as Y,addCodexUserPromptSubmitHook as N,isMcpServerConfigured as W,isCodexMcpServerConfigured as j,isOpenCodeMcpServerConfigured as B,isSessionStartHookRegistered as E,isUserPromptSubmitHookRegistered as G,isCodexSessionStartHookRegistered as z,isCodexUserPromptSubmitHookRegistered as Q,removeSessionStartHook as V}from"./config-utils.js";import{ensureCliMcpConfigured as h}from"./ensure-mcp-config.js";import{handleVersionFlag as J}from"./version.js";import{initDebugFromArgv as K}from"./debug.js";async function X(){K(process.argv),J(),console.log(e.blue.bold(`
3
- \u25FC Borg MCP Setup Wizard \u25FC`));const a=process.argv.includes("--no-browser")||process.argv.includes("--device");let t=null,n=null,s=null;try{t=p.sync("claude")}catch{}try{n=p.sync("codex")}catch{}try{s=p.sync("opencode")}catch{}t&&console.log(e.gray(`Found Claude CLI: ${t}`)),n&&console.log(e.gray(`Found Codex CLI: ${n}`)),s&&console.log(e.gray(`Found OpenCode CLI: ${s}`)),(t||n||s)&&console.log(""),!t&&!n&&!s&&(console.error(e.red(`\u25FC No supported agent CLI found
4
- `)),console.error(e.yellow("Please install Claude Code, Codex, or OpenCode first:")),console.error(e.gray(" Claude Code: https://claude.ai/download")),console.error(e.gray(" Codex: https://developers.openai.com/codex")),console.error(e.gray(` OpenCode: https://opencode.ai
5
- `)),process.exit(1)),console.log(e.blue("\u25FC Agent CLI Integration"));const v=I(process.argv),l=t!==null,g=n!==null,m=s!==null,P=W(),$=j(),A=B(),b=l&&E(),f=l&&!G(),y=g&&!z(),C=g&&!Q();if(L({claude:l,codex:g,opencode:m,claudeMcpConfigured:P,codexMcpConfigured:$,opencodeMcpConfigured:A,claudeHookPending:b||f,codexHookPending:y||C})&&(console.log(T(D({claude:l,codex:g,opencode:m}))),await O({isTTY:process.stdin.isTTY===!0,yes:v,confirm:async()=>{const{proceed:o}=await w({type:"confirm",name:"proceed",message:"Continue with these changes?",initial:!0});return o===!0}})==="abort"&&(console.log(e.yellow(`
6
- \u25FC Setup cancelled \u2014 no changes made.
7
- `)),process.exit(0))),console.log(""),t)try{h("claude"),b&&V(),f&&q(),console.log(e.green("\u25FC borg configured for Claude Code"))}catch(r){console.error(e.red(`
8
- \u25FC Failed to configure Claude Code: ${r.message}
9
- `)),process.exit(1)}if(n)try{h("codex"),y&&Y(),C&&N(),console.log(e.green("\u25FC borg configured for Codex"))}catch(r){console.error(e.red(`
10
- \u25FC Failed to configure Codex: ${r.message}
11
- `)),process.exit(1)}if(s)try{h("opencode"),console.log(e.green("\u25FC borg configured for OpenCode"))}catch(r){console.error(e.red(`
12
- \u25FC Failed to configure OpenCode: ${r.message}
13
- `)),process.exit(1)}console.log(""),console.log(e.blue("\u25FC Google Authentication"));const k=U(await R());if(k==="skip")console.log(e.green(`\u25FC Already signed in
14
- `));else if(k==="retry")console.error(e.yellow(`
15
- \u25FC Could not reach Google to verify your session (network issue).`)),console.error(e.yellow("Re-run `borg setup` when your connection is back.\n")),process.exit(1);else try{await H(a?{noBrowser:!0}:void 0)}catch(r){console.error(e.red(`
16
- \u25FC Authentication failed: ${r.message}
17
- `)),console.error(e.yellow("Re-run `borg setup` to try again.\n")),process.exit(1)}console.log(e.blue("\u25FC Subscription Check"));let c;try{c=await i()}catch(r){console.error(e.yellow(`
18
- \u25FC Subscription check failed: ${r.message}`)),console.error(e.gray(`\u25FC Retrying before falling back to the Free tier...
19
- `)),c={hasAccess:!1}}if(c=await S(c,{check:i,sleep:r=>new Promise(o=>setTimeout(o,r)),onRetry:(r,o)=>console.log(e.gray(`\u25FC Checking subscription... (attempt ${r}/${o})`))}),c.hasAccess)if(console.log(e.green("\u25FC Active subscription found")),c.expiresAt){const r=new Date(c.expiresAt);console.log(e.gray(` Expires: ${r.toLocaleDateString()}
20
- `))}else console.log("");else{console.log(e.green("\u25FC You're on the Free tier \u2014 permanent, no card needed: 1 cube + 3 agent sessions + 100 req/hr.")),console.log(e.gray(`\u25FC Start using borgmcp right now. Upgrade any time: $1/month per cube, each cube adds 8 pooled agent sessions + 1000 req/hr.
21
- `));const{subscribeMethod:r}=await w({type:"select",name:"subscribeMethod",message:"You're ready on the Free tier. Want to do more?",choices:[{title:"\u25FC Continue on the Free tier (recommended)",value:"skip",description:"Start now \u2014 1 cube, 3 agent sessions, 100 req/hr. No payment required."},{title:"\u25FC Upgrade to Cube tier \u2014 $1/month per cube",value:"web",description:"Each cube adds 8 pooled agent sessions + 1000 req/hr. Opens the subscribe page in your browser."},{title:"\u25FC Quick Stripe checkout",value:"stripe",description:"Fast upgrade checkout in the browser"},{title:"\u25FC I already subscribed \u2014 re-check",value:"recheck",description:"Re-check now \u2014 a just-completed subscription can take a moment to activate"}]});switch(r===void 0&&console.log(e.yellow(`
22
- \u25FC No subscription option selected \u2014 continuing on the Free tier.
23
- `)),r){case"web":console.log(e.blue(`
24
- \u25FC Opening: https://borgmcp.ai/subscribe`));try{await x("https://borgmcp.ai/subscribe"),console.log(e.gray(`\u25FC Waiting for subscription (checking every 5s for 2 min)...
25
- `)),await F()}catch(o){console.error(e.yellow(`
26
- \u25FC ${o.message}`)),console.log(e.green(`\u25FC Continuing on the Free tier. Upgrade any time from https://borgmcp.ai/subscribe.
27
- `))}break;case"stripe":try{const o=await M();console.log(e.blue(`
28
- \u25FC Opening Stripe: ${o}`)),await x(o),console.log(e.gray(`\u25FC Waiting for subscription...
29
- `)),await F()}catch(o){console.error(e.red(`
30
- \u25FC Failed to create checkout: ${o.message}
31
- `)),console.log(e.green(`\u25FC Continuing on the Free tier. Upgrade any time from https://borgmcp.ai/subscribe.
32
- `))}break;case"recheck":try{let o;try{o=await i()}catch{o={hasAccess:!1}}o=await S(o,{check:i,sleep:d=>new Promise(u=>setTimeout(u,d)),onRetry:(d,u)=>console.log(e.gray(`\u25FC Re-checking subscription... (attempt ${d}/${u})`))}),o.hasAccess?console.log(e.green(`
33
- \u25FC Subscription found!
34
- `)):console.log(e.yellow(`
35
- \u25FC No subscription found \u2014 continuing on the Free tier.
36
- `))}catch(o){console.error(e.red(`
37
- \u25FC Failed to recheck: ${o.message}
38
- `)),console.log(e.green(`\u25FC Continuing on the Free tier.
39
- `))}break;case"skip":console.log(e.green(`
40
- \u25FC You're all set on the Free tier: 1 cube, 3 agent sessions, 100 req/hr.
41
- `));break}}console.log(e.green.bold(`Setup complete!
42
- `)),console.log(e.yellow(`\u{1F504} Restart Claude Code / Codex / OpenCode (or open a new session) for the changes to take effect.
43
- `)),console.log(e.gray("\u25FC Next steps:")),console.log(e.gray('1. cd into your project, then run "borg assimilate" to join a cube')),console.log(e.gray(" (this creates/joins the cube and launches your agent)")),console.log(e.gray(`2. Manage cubes and subscription at https://borgmcp.ai/dashboard
44
- `))}async function F(){for(let t=0;t<24;t++){await new Promise(n=>setTimeout(n,5e3));try{if((await i()).hasAccess){console.log(e.green(`\u25FC Subscription activated!
45
- `));return}}catch{}}throw new Error("Timeout - Run setup again after subscribing")}X().catch(a=>{console.error(e.red(`
46
- \u25FC Setup failed: ${a.message}
47
- `)),process.exit(1)});
2
+ /**
3
+ * Borg MCP Setup Wizard
4
+ *
5
+ * Interactive setup flow:
6
+ * 1. Configure agent CLI MCP settings + orientation hooks
7
+ * 2. Print how to connect to a local self-hosted Borg server
8
+ *
9
+ * There is no cloud authority: setup offers/executes NO cloud auth, Google
10
+ * auth, subscription, or checkout.
11
+ */
12
+ import prompts from 'prompts';
13
+ import chalk from 'chalk';
14
+ import which from 'which';
15
+ import { confirmConfigMutation, configMutationTargets, formatConfigMutationDisclosure, parseYesFlag, setupMutationPending, } from './setup-confirm.js';
16
+ import { addUserPromptSubmitHook, addCodexSessionStartHook, addCodexUserPromptSubmitHook, isMcpServerConfigured, isCodexMcpServerConfigured, isOpenCodeMcpServerConfigured, isSessionStartHookRegistered, isUserPromptSubmitHookRegistered, isCodexSessionStartHookRegistered, isCodexUserPromptSubmitHookRegistered, removeSessionStartHook, } from './config-utils.js';
17
+ import { ensureCliMcpConfigured } from './ensure-mcp-config.js';
18
+ import { handleVersionFlag } from './version.js';
19
+ import { initDebugFromArgv } from './debug.js';
20
+ import { defaultApprovalIo, setupApprovalWarnings } from './cli-tool-approval.js';
21
+ /**
22
+ * Main setup wizard
23
+ */
24
+ async function main() {
25
+ initDebugFromArgv(process.argv);
26
+ handleVersionFlag();
27
+ console.log(chalk.blue.bold('\n◼ Borg MCP Setup Wizard ◼'));
28
+ let claudeCliPath = null;
29
+ let codexCliPath = null;
30
+ let opencodeCliPath = null;
31
+ try {
32
+ claudeCliPath = which.sync('claude');
33
+ }
34
+ catch { /* optional */ }
35
+ try {
36
+ codexCliPath = which.sync('codex');
37
+ }
38
+ catch { /* optional */ }
39
+ try {
40
+ opencodeCliPath = which.sync('opencode');
41
+ }
42
+ catch { /* optional */ }
43
+ if (claudeCliPath)
44
+ console.log(chalk.gray(`Found Claude CLI: ${claudeCliPath}`));
45
+ if (codexCliPath)
46
+ console.log(chalk.gray(`Found Codex CLI: ${codexCliPath}`));
47
+ if (opencodeCliPath)
48
+ console.log(chalk.gray(`Found OpenCode CLI: ${opencodeCliPath}`));
49
+ if (claudeCliPath || codexCliPath || opencodeCliPath)
50
+ console.log('');
51
+ if (!claudeCliPath && !codexCliPath && !opencodeCliPath) {
52
+ console.error(chalk.red('◼ No supported agent CLI found\n'));
53
+ console.error(chalk.yellow('Please install Claude Code, Codex, or OpenCode first:'));
54
+ console.error(chalk.gray(' Claude Code: https://claude.ai/download'));
55
+ console.error(chalk.gray(' Codex: https://developers.openai.com/codex'));
56
+ console.error(chalk.gray(' OpenCode: https://opencode.ai\n'));
57
+ process.exit(1);
58
+ }
59
+ // Step 1: Configure every detected agent CLI
60
+ console.log(chalk.blue('◼ Agent CLI Integration'));
61
+ const yes = parseYesFlag(process.argv);
62
+ const claudeDetected = claudeCliPath !== null;
63
+ const codexDetected = codexCliPath !== null;
64
+ const opencodeDetected = opencodeCliPath !== null;
65
+ const claudeMcpConfigured = isMcpServerConfigured();
66
+ const codexMcpConfigured = isCodexMcpServerConfigured();
67
+ const opencodeMcpConfigured = isOpenCodeMcpServerConfigured();
68
+ const claudeLegacyHookPending = claudeDetected && isSessionStartHookRegistered();
69
+ const claudeUpsHookPending = claudeDetected && !isUserPromptSubmitHookRegistered();
70
+ const codexSessionHookPending = codexDetected && !isCodexSessionStartHookRegistered();
71
+ const codexUpsHookPending = codexDetected && !isCodexUserPromptSubmitHookRegistered();
72
+ const claudeHookPending = claudeLegacyHookPending || claudeUpsHookPending;
73
+ const codexHookPending = codexSessionHookPending || codexUpsHookPending;
74
+ if (setupMutationPending({
75
+ claude: claudeDetected,
76
+ codex: codexDetected,
77
+ opencode: opencodeDetected,
78
+ claudeMcpConfigured,
79
+ codexMcpConfigured,
80
+ opencodeMcpConfigured,
81
+ claudeHookPending,
82
+ codexHookPending,
83
+ })) {
84
+ console.log(formatConfigMutationDisclosure(configMutationTargets({ claude: claudeDetected, codex: codexDetected, opencode: opencodeDetected })));
85
+ const mutationDecision = await confirmConfigMutation({
86
+ isTTY: process.stdin.isTTY === true,
87
+ yes,
88
+ confirm: async () => {
89
+ const { proceed } = await prompts({
90
+ type: 'confirm',
91
+ name: 'proceed',
92
+ message: 'Continue with these changes?',
93
+ initial: true,
94
+ });
95
+ return proceed === true;
96
+ },
97
+ });
98
+ if (mutationDecision === 'abort') {
99
+ console.log(chalk.yellow('\n◼ Setup cancelled — no changes made.\n'));
100
+ process.exit(0);
101
+ }
102
+ }
103
+ console.log('');
104
+ if (claudeCliPath) {
105
+ try {
106
+ ensureCliMcpConfigured('claude');
107
+ if (claudeLegacyHookPending)
108
+ removeSessionStartHook();
109
+ if (claudeUpsHookPending)
110
+ addUserPromptSubmitHook();
111
+ console.log(chalk.green('◼ borg configured for Claude Code'));
112
+ }
113
+ catch (error) {
114
+ console.error(chalk.red(`\n◼ Failed to configure Claude Code: ${error.message}\n`));
115
+ process.exit(1);
116
+ }
117
+ }
118
+ if (codexCliPath) {
119
+ try {
120
+ ensureCliMcpConfigured('codex');
121
+ if (codexSessionHookPending)
122
+ addCodexSessionStartHook();
123
+ if (codexUpsHookPending)
124
+ addCodexUserPromptSubmitHook();
125
+ console.log(chalk.green('◼ borg configured for Codex'));
126
+ }
127
+ catch (error) {
128
+ console.error(chalk.red(`\n◼ Failed to configure Codex: ${error.message}\n`));
129
+ process.exit(1);
130
+ }
131
+ }
132
+ if (opencodeCliPath) {
133
+ try {
134
+ ensureCliMcpConfigured('opencode');
135
+ console.log(chalk.green('◼ borg configured for OpenCode'));
136
+ }
137
+ catch (error) {
138
+ console.error(chalk.red(`\n◼ Failed to configure OpenCode: ${error.message}\n`));
139
+ process.exit(1);
140
+ }
141
+ }
142
+ const approvalIo = defaultApprovalIo(async () => '', () => false, {
143
+ cwd: process.cwd(),
144
+ env: process.env,
145
+ codexArgs: [],
146
+ });
147
+ for (const warning of await setupApprovalWarnings(approvalIo, {
148
+ codex: codexDetected,
149
+ opencode: opencodeDetected,
150
+ })) {
151
+ console.log(chalk.yellow(`warning: ${warning}`));
152
+ }
153
+ console.log('');
154
+ // Step 2: Server connection — local self-hosted only.
155
+ console.log(chalk.blue('◼ Server Connection'));
156
+ console.log(chalk.gray('Local self-hosted server mode — no account or subscription needed.'));
157
+ // Success message
158
+ console.log(chalk.green.bold('\nSetup complete!\n'));
159
+ console.log(chalk.yellow('🔄 Restart Claude Code / Codex / OpenCode (or open a new session) for the changes to take effect.\n'));
160
+ console.log(chalk.gray('◼ Next steps:'));
161
+ console.log(chalk.gray('1. cd into your project, then run "borg assimilate --host <host>" to join a cube'));
162
+ console.log(chalk.gray(' (this connects to your local server and launches your agent)'));
163
+ console.log(chalk.gray('2. Use `borg assimilate --host <host> --enroll` from the operator terminal to enroll a new client\n'));
164
+ }
165
+ // Run wizard
166
+ main().catch((error) => {
167
+ console.error(chalk.red(`\n◼ Setup failed: ${error.message}\n`));
168
+ process.exit(1);
169
+ });
170
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-escape.d.ts","sourceRoot":"","sources":["../src/shell-escape.ts"],"names":[],"mappings":"AAmBA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -1 +1,22 @@
1
- function r(e){return`'${e.replace(/'/g,"'\\''")}'`}export{r as shellEscape};
1
+ // POSIX-safe shell-escaping for paste-intended emission.
2
+ //
3
+ // Sprint 18 (gh-tracked via dispatch 10:41:47Z): when the CLI emits a
4
+ // `cd <path>` line for the user to copy-paste into their shell, the path is
5
+ // a filesystem-controlled string with no character constraints (unlike
6
+ // DB-CHECK-constrained role/cube names). Paths can legally contain spaces,
7
+ // `$VAR`, backticks, `$(cmd)`, embedded single-quotes, and other shell
8
+ // metacharacters that would execute on paste under naive emission.
9
+ //
10
+ // drone-11 SR-LANE (cube entry 2026-05-19T10:44:35Z) escalation: double-
11
+ // quoting handles spaces but `$VAR` / backtick / `$(cmd)` still expand
12
+ // inside double-quotes. Single-quotes with internal-quote escape (`'\''`
13
+ // = close-quote / escaped-quote / re-open-quote) defang every shell
14
+ // metachar including embedded `'`. POSIX-defined, copy-paste-runnable
15
+ // across bash / zsh / dash / sh.
16
+ //
17
+ // Behavior: returns the input wrapped in single-quotes with any internal
18
+ // `'` rewritten as `'\''`. Empty string returns `''`.
19
+ export function shellEscape(s) {
20
+ return `'${s.replace(/'/g, `'\\''`)}'`;
21
+ }
22
+ //# sourceMappingURL=shell-escape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-escape.js","sourceRoot":"","sources":["../src/shell-escape.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,sEAAsE;AACtE,4EAA4E;AAC5E,uEAAuE;AACvE,2EAA2E;AAC3E,uEAAuE;AACvE,mEAAmE;AACnE,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,oEAAoE;AACpE,sEAAsE;AACtE,iCAAiC;AACjC,EAAE;AACF,yEAAyE;AACzE,sDAAsD;AAEtD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC"}
package/dist/spawn.d.ts CHANGED
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Replaced by `borg assimilate [role] --worktree <name>` (see
5
5
  * `assimilate-cmd.ts`). The new command folds worktree creation,
6
- * OAuth bootstrap, cube creation, template application, and drone
7
- * assimilation into one shell call. This file remains so existing
6
+ * cube creation, template application, and drone assimilation into one
7
+ * shell call. This file remains so existing
8
8
  * scripts and tab-completion entries fail loudly with an actionable
9
9
  * migration message rather than silently mis-routing.
10
10
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAahD"}
package/dist/spawn.js CHANGED
@@ -1,10 +1,29 @@
1
- import{validateName as s}from"./name-validator.js";async function r(){return process.stderr.write(`borg spawn is removed. Use:
2
- borg assimilate [role] --worktree <name>
3
-
4
- Example: if you previously ran \`borg spawn drone-2\`, the equivalent is
5
- borg assimilate --worktree drone-2
6
- (role is optional; defaults per first-drone rules)
7
-
8
- If you want a specific role:
9
- borg assimilate builder --worktree drone-2
10
- `),2}export{r as runSpawn,s as validateName};
1
+ /**
2
+ * `borg spawn` deprecation stub.
3
+ *
4
+ * Replaced by `borg assimilate [role] --worktree <name>` (see
5
+ * `assimilate-cmd.ts`). The new command folds worktree creation,
6
+ * cube creation, template application, and drone assimilation into one
7
+ * shell call. This file remains so existing
8
+ * scripts and tab-completion entries fail loudly with an actionable
9
+ * migration message rather than silently mis-routing.
10
+ *
11
+ * `validateName` continues to be re-exported from here for callers
12
+ * that still depend on the symbol (it lives in `name-validator.ts`
13
+ * now — single source of truth).
14
+ */
15
+ export { validateName } from './name-validator.js';
16
+ export async function runSpawn() {
17
+ const msg = 'borg spawn is removed. Use:\n' +
18
+ ' borg assimilate [role] --worktree <name>\n' +
19
+ '\n' +
20
+ 'Example: if you previously ran `borg spawn drone-2`, the equivalent is\n' +
21
+ ' borg assimilate --worktree drone-2\n' +
22
+ '(role is optional; defaults per first-drone rules)\n' +
23
+ '\n' +
24
+ 'If you want a specific role:\n' +
25
+ ' borg assimilate builder --worktree drone-2\n';
26
+ process.stderr.write(msg);
27
+ return 2;
28
+ }
29
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,GAAG,GACP,+BAA+B;QAC/B,8CAA8C;QAC9C,IAAI;QACJ,0EAA0E;QAC1E,wCAAwC;QACxC,sDAAsD;QACtD,IAAI;QACJ,gCAAgC;QAChC,gDAAgD,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -5,7 +5,6 @@ export interface McpStartupServices {
5
5
  auditHook: McpStartupTask;
6
6
  sseStream: McpStartupTask;
7
7
  openCode: McpStartupTask;
8
- healthBeat: McpStartupTask;
9
8
  }
10
9
  /**
11
10
  * Run normal long-lived MCP child startup work. The assimilation readiness
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-services.d.ts","sourceRoot":"","sources":["../src/startup-services.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,cAAc,CAAC;IACjC,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -1 +1,26 @@
1
- async function r(o,t){if(o)return;const a=[t.sessionStartHook,t.auditHook,t.sseStream,t.openCode,t.healthBeat];for(const n of a)try{await n()}catch{}}export{r as runMcpStartupServices};
1
+ /**
2
+ * Run normal long-lived MCP child startup work. The assimilation readiness
3
+ * child must reach the initialize response without acquiring leases, fetching
4
+ * SSE, mutating hooks, or starting timers because it is intentionally killed
5
+ * immediately after that response.
6
+ */
7
+ export async function runMcpStartupServices(readinessProbe, services) {
8
+ if (readinessProbe)
9
+ return;
10
+ const tasks = [
11
+ services.sessionStartHook,
12
+ services.auditHook,
13
+ services.sseStream,
14
+ services.openCode,
15
+ ];
16
+ for (const task of tasks) {
17
+ try {
18
+ await task();
19
+ }
20
+ catch {
21
+ // Every background service is best-effort and independent. A failure in
22
+ // one must neither break MCP initialize nor suppress later services.
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=startup-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-services.js","sourceRoot":"","sources":["../src/startup-services.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,cAAuB,EACvB,QAA4B;IAE5B,IAAI,cAAc;QAAE,OAAO;IAC3B,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,gBAAgB;QACzB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,QAAQ;KAClB,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,qEAAqE;QACvE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export declare const STREAM_OWNER_STALE_MS = 70000;
2
2
  /** Grace window for mkdir→owner.json initialization before an empty lock is reclaimable. */
3
3
  export declare const STREAM_OWNER_INIT_STALE_MS = 5000;
4
+ export declare const STREAM_OWNER_TAKEOVER_STALE_MS = 5000;
4
5
  export interface StreamOwnerRecord {
5
6
  schemaVersion: number;
6
7
  pid: number;
@@ -18,8 +19,9 @@ export interface StreamOwnershipSnapshot {
18
19
  heartbeatAt?: string;
19
20
  ageMs?: number;
20
21
  lockPath?: string;
21
- /** Directory mtime used to compare-before-reap an orphaned initialization. */
22
- lockMtimeMs?: number;
22
+ /** Opened-directory identity used to bind inspection to later takeover. */
23
+ lockDev?: number;
24
+ lockIno?: number;
23
25
  }
24
26
  export interface StreamLease {
25
27
  lockPath: string;
@@ -36,6 +38,8 @@ export interface StreamOwnerDeps {
36
38
  processStartedAt?: string;
37
39
  isPidAlive?: (pid: number) => boolean;
38
40
  beforeTakeoverVerify?: (takeoverPath: string) => Promise<void>;
41
+ beforeLeaseRefreshMutation?: (lockPath: string) => Promise<void>;
42
+ beforeLeaseReleaseMutation?: (lockPath: string) => Promise<void>;
39
43
  /** Initialization/refresh writer seam for failure-path regression tests. */
40
44
  writeRecord?: (lockPath: string, record: StreamOwnerRecord) => Promise<void>;
41
45
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-owner.d.ts","sourceRoot":"","sources":["../src/stream-owner.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,4FAA4F;AAC5F,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAKpD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,GAAG,wBAAwB,GAAG,cAAc,GAAG,yBAAyB,GAAG,SAAS,CAAC;IACnG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,4EAA4E;IAC5E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,SAAmB,GAC1B,MAAM,CAIR;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,SAAwB,EAC/B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAoC7B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CA+DlC"}