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.
- package/CONTRIBUTING.md +15 -0
- package/LICENSE +201 -33
- package/NOTICE +2 -0
- package/README.md +85 -36
- package/SECURITY.md +7 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +63 -1
- package/dist/agent-runtime.js.map +1 -0
- package/dist/assimilate-cmd.d.ts +96 -17
- package/dist/assimilate-cmd.d.ts.map +1 -0
- package/dist/assimilate-cmd.js +1396 -48
- package/dist/assimilate-cmd.js.map +1 -0
- package/dist/assimilate-deps.d.ts.map +1 -0
- package/dist/assimilate-deps.js +384 -3
- package/dist/assimilate-deps.js.map +1 -0
- package/dist/assimilate-guard.d.ts +5 -7
- package/dist/assimilate-guard.d.ts.map +1 -0
- package/dist/assimilate-guard.js +60 -2
- package/dist/assimilate-guard.js.map +1 -0
- package/dist/assimilate-welcome.d.ts +1 -1
- package/dist/assimilate-welcome.d.ts.map +1 -0
- package/dist/assimilate-welcome.js +32 -2
- package/dist/assimilate-welcome.js.map +1 -0
- package/dist/auth-env.d.ts +7 -50
- package/dist/auth-env.d.ts.map +1 -0
- package/dist/auth-env.js +22 -1
- package/dist/auth-env.js.map +1 -0
- package/dist/backends/launch-all-pastelist.d.ts.map +1 -0
- package/dist/backends/launch-all-pastelist.js +11 -4
- package/dist/backends/launch-all-pastelist.js.map +1 -0
- package/dist/backends/launch-all-tmux.d.ts.map +1 -0
- package/dist/backends/launch-all-tmux.js +49 -1
- package/dist/backends/launch-all-tmux.js.map +1 -0
- package/dist/backends/launch-all-windows.d.ts.map +1 -0
- package/dist/backends/launch-all-windows.js +86 -12
- package/dist/backends/launch-all-windows.js.map +1 -0
- package/dist/bare-launch-menu.d.ts.map +1 -0
- package/dist/bare-launch-menu.js +83 -6
- package/dist/bare-launch-menu.js.map +1 -0
- package/dist/claude-launch-args.d.ts.map +1 -0
- package/dist/claude-launch-args.js +34 -1
- package/dist/claude-launch-args.js.map +1 -0
- package/dist/claude.d.ts.map +1 -0
- package/dist/claude.js +486 -14
- package/dist/claude.js.map +1 -0
- package/dist/cleanup-cmd.d.ts +5 -5
- package/dist/cleanup-cmd.d.ts.map +1 -0
- package/dist/cleanup-cmd.js +453 -14
- package/dist/cleanup-cmd.js.map +1 -0
- package/dist/clear-rewake-core.d.ts.map +1 -0
- package/dist/clear-rewake-core.js +23 -2
- package/dist/clear-rewake-core.js.map +1 -0
- package/dist/clear-rewake.d.ts.map +1 -0
- package/dist/clear-rewake.js +19 -1
- package/dist/clear-rewake.js.map +1 -0
- package/dist/cli-help.d.ts +5 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +104 -56
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-platform.d.ts.map +1 -0
- package/dist/cli-platform.js +106 -4
- package/dist/cli-platform.js.map +1 -0
- package/dist/cli-tool-approval.d.ts +84 -0
- package/dist/cli-tool-approval.d.ts.map +1 -0
- package/dist/cli-tool-approval.js +583 -0
- package/dist/cli-tool-approval.js.map +1 -0
- package/dist/codex-app-server.d.ts.map +1 -0
- package/dist/codex-app-server.js +228 -4
- package/dist/codex-app-server.js.map +1 -0
- package/dist/codex-app-wake.d.ts.map +1 -0
- package/dist/codex-app-wake.js +432 -2
- package/dist/codex-app-wake.js.map +1 -0
- package/dist/codex-launch.d.ts.map +1 -0
- package/dist/codex-launch.js +102 -2
- package/dist/codex-launch.js.map +1 -0
- package/dist/codex-remote.d.ts +6 -1
- package/dist/codex-remote.d.ts.map +1 -0
- package/dist/codex-remote.js +394 -1
- package/dist/codex-remote.js.map +1 -0
- package/dist/codex-wake-resolve.d.ts.map +1 -0
- package/dist/codex-wake-resolve.js +127 -1
- package/dist/codex-wake-resolve.js.map +1 -0
- package/dist/config-utils.d.ts +2 -2
- package/dist/config-utils.d.ts.map +1 -0
- package/dist/config-utils.js +766 -3
- package/dist/config-utils.js.map +1 -0
- package/dist/config.d.ts +98 -61
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +426 -1
- package/dist/config.js.map +1 -0
- package/dist/console-prefix.d.ts.map +1 -0
- package/dist/console-prefix.js +96 -1
- package/dist/console-prefix.js.map +1 -0
- package/dist/cube-name.d.ts.map +1 -0
- package/dist/cube-name.js +67 -1
- package/dist/cube-name.js.map +1 -0
- package/dist/cubes.d.ts +126 -18
- package/dist/cubes.d.ts.map +1 -0
- package/dist/cubes.js +412 -4
- package/dist/cubes.js.map +1 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +71 -1
- package/dist/debug.js.map +1 -0
- package/dist/direct-log.d.ts.map +1 -0
- package/dist/direct-log.js +11 -1
- package/dist/direct-log.js.map +1 -0
- package/dist/docs-sections.d.ts +11 -10
- package/dist/docs-sections.d.ts.map +1 -0
- package/dist/docs-sections.js +113 -3
- package/dist/docs-sections.js.map +1 -0
- package/dist/drone-lifecycle.d.ts +5 -21
- package/dist/drone-lifecycle.d.ts.map +1 -0
- package/dist/drone-lifecycle.js +57 -8
- package/dist/drone-lifecycle.js.map +1 -0
- package/dist/drone-management.d.ts +29 -0
- package/dist/drone-management.d.ts.map +1 -0
- package/dist/drone-management.js +109 -0
- package/dist/drone-management.js.map +1 -0
- package/dist/ensure-mcp-config.d.ts.map +1 -0
- package/dist/ensure-mcp-config.js +36 -1
- package/dist/ensure-mcp-config.js.map +1 -0
- package/dist/evict-drone.d.ts +10 -2
- package/dist/evict-drone.d.ts.map +1 -0
- package/dist/evict-drone.js +60 -1
- package/dist/evict-drone.js.map +1 -0
- package/dist/gc-orphan-inboxes.d.ts.map +1 -0
- package/dist/gc-orphan-inboxes.js +177 -1
- package/dist/gc-orphan-inboxes.js.map +1 -0
- package/dist/inbox-monitor.d.ts +1 -1
- package/dist/inbox-monitor.d.ts.map +1 -0
- package/dist/inbox-monitor.js +856 -3
- package/dist/inbox-monitor.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1034 -37
- package/dist/index.js.map +1 -0
- package/dist/launch-all-cmd.d.ts.map +1 -0
- package/dist/launch-all-cmd.js +377 -37
- package/dist/launch-all-cmd.js.map +1 -0
- package/dist/launch-all-command.d.ts.map +1 -0
- package/dist/launch-all-command.js +24 -1
- package/dist/launch-all-command.js.map +1 -0
- package/dist/launch-all-deps.d.ts +3 -8
- package/dist/launch-all-deps.d.ts.map +1 -0
- package/dist/launch-all-deps.js +99 -1
- package/dist/launch-all-deps.js.map +1 -0
- package/dist/launch-all-discovery.d.ts +1 -0
- package/dist/launch-all-discovery.d.ts.map +1 -0
- package/dist/launch-all-discovery.js +90 -4
- package/dist/launch-all-discovery.js.map +1 -0
- package/dist/launch-all-locks.d.ts.map +1 -0
- package/dist/launch-all-locks.js +54 -1
- package/dist/launch-all-locks.js.map +1 -0
- package/dist/launch-gate.d.ts +2 -2
- package/dist/launch-gate.d.ts.map +1 -0
- package/dist/launch-gate.js +73 -1
- package/dist/launch-gate.js.map +1 -0
- package/dist/lifecycle-log-guard.d.ts.map +1 -0
- package/dist/lifecycle-log-guard.js +93 -2
- package/dist/lifecycle-log-guard.js.map +1 -0
- package/dist/list-roles-render.d.ts.map +1 -0
- package/dist/list-roles-render.js +40 -6
- package/dist/list-roles-render.js.map +1 -0
- package/dist/local-log-routing.d.ts +19 -0
- package/dist/local-log-routing.d.ts.map +1 -0
- package/dist/local-log-routing.js +67 -0
- package/dist/local-log-routing.js.map +1 -0
- package/dist/local-manage-tool-result.d.ts +8 -0
- package/dist/local-manage-tool-result.d.ts.map +1 -0
- package/dist/local-manage-tool-result.js +10 -0
- package/dist/local-manage-tool-result.js.map +1 -0
- package/dist/local-server-cursor.d.ts +34 -0
- package/dist/local-server-cursor.d.ts.map +1 -0
- package/dist/local-server-cursor.js +151 -0
- package/dist/local-server-cursor.js.map +1 -0
- package/dist/log-audit.d.ts.map +1 -0
- package/dist/log-audit.js +194 -3
- package/dist/log-audit.js.map +1 -0
- package/dist/log-stream.d.ts +31 -18
- package/dist/log-stream.d.ts.map +1 -0
- package/dist/log-stream.js +1214 -12
- package/dist/log-stream.js.map +1 -0
- package/dist/model-presets.d.ts.map +1 -0
- package/dist/model-presets.js +19 -1
- package/dist/model-presets.js.map +1 -0
- package/dist/name-validator.d.ts.map +1 -0
- package/dist/name-validator.js +22 -1
- package/dist/name-validator.js.map +1 -0
- package/dist/opencode-drone.d.ts.map +1 -0
- package/dist/opencode-drone.js +438 -4
- package/dist/opencode-drone.js.map +1 -0
- package/dist/opencode-plugin.d.ts +1 -1
- package/dist/opencode-plugin.d.ts.map +1 -0
- package/dist/opencode-plugin.js +29 -4
- package/dist/opencode-plugin.js.map +1 -0
- package/dist/parse-assimilate-args.d.ts +1 -1
- package/dist/parse-assimilate-args.d.ts.map +1 -0
- package/dist/parse-assimilate-args.js +125 -1
- package/dist/parse-assimilate-args.js.map +1 -0
- package/dist/parse-launch-all-args.d.ts.map +1 -0
- package/dist/parse-launch-all-args.js +70 -1
- package/dist/parse-launch-all-args.js.map +1 -0
- package/dist/postinstall-banner.d.ts.map +1 -0
- package/dist/postinstall-banner.js +27 -2
- package/dist/postinstall-banner.js.map +1 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +32 -5
- package/dist/postinstall.js.map +1 -0
- package/dist/readiness-probe.d.ts.map +1 -0
- package/dist/readiness-probe.js +9 -1
- package/dist/readiness-probe.js.map +1 -0
- package/dist/regen-format.d.ts.map +1 -0
- package/dist/regen-format.js +545 -13
- package/dist/regen-format.js.map +1 -0
- package/dist/regen.d.ts.map +1 -0
- package/dist/regen.js +141 -5
- package/dist/regen.js.map +1 -0
- package/dist/remote-client.d.ts +65 -175
- package/dist/remote-client.d.ts.map +1 -0
- package/dist/remote-client.js +942 -1
- package/dist/remote-client.js.map +1 -0
- package/dist/reset-local-seat-cmd.d.ts +50 -0
- package/dist/reset-local-seat-cmd.d.ts.map +1 -0
- package/dist/reset-local-seat-cmd.js +169 -0
- package/dist/reset-local-seat-cmd.js.map +1 -0
- package/dist/role-match.d.ts.map +1 -0
- package/dist/role-match.js +23 -1
- package/dist/role-match.js.map +1 -0
- package/dist/role-resolver.d.ts.map +1 -0
- package/dist/role-resolver.js +60 -1
- package/dist/role-resolver.js.map +1 -0
- package/dist/roster-render.d.ts.map +1 -0
- package/dist/roster-render.js +121 -3
- package/dist/roster-render.js.map +1 -0
- package/dist/seat-probe.d.ts +32 -13
- package/dist/seat-probe.d.ts.map +1 -0
- package/dist/seat-probe.js +78 -1
- package/dist/seat-probe.js.map +1 -0
- package/dist/seat-store.d.ts +76 -0
- package/dist/seat-store.d.ts.map +1 -0
- package/dist/seat-store.js +309 -0
- package/dist/seat-store.js.map +1 -0
- package/dist/seats.d.ts +303 -0
- package/dist/seats.d.ts.map +1 -0
- package/dist/seats.js +551 -0
- package/dist/seats.js.map +1 -0
- package/dist/self-path.d.ts +27 -0
- package/dist/self-path.d.ts.map +1 -0
- package/dist/self-path.js +43 -0
- package/dist/self-path.js.map +1 -0
- package/dist/server-endpoint.d.ts +9 -0
- package/dist/server-endpoint.d.ts.map +1 -0
- package/dist/server-endpoint.js +38 -0
- package/dist/server-endpoint.js.map +1 -0
- package/dist/server-errors.d.ts +50 -0
- package/dist/server-errors.d.ts.map +1 -0
- package/dist/server-errors.js +79 -0
- package/dist/server-errors.js.map +1 -0
- package/dist/server-handshake.d.ts +197 -0
- package/dist/server-handshake.d.ts.map +1 -0
- package/dist/server-handshake.js +505 -0
- package/dist/server-handshake.js.map +1 -0
- package/dist/server-response.d.ts +3 -0
- package/dist/server-response.d.ts.map +1 -0
- package/dist/server-response.js +67 -0
- package/dist/server-response.js.map +1 -0
- package/dist/server-trust.d.ts +14 -0
- package/dist/server-trust.d.ts.map +1 -0
- package/dist/server-trust.js +225 -0
- package/dist/server-trust.js.map +1 -0
- package/dist/setup-confirm.d.ts +3 -3
- package/dist/setup-confirm.d.ts.map +1 -0
- package/dist/setup-confirm.js +126 -2
- package/dist/setup-confirm.js.map +1 -0
- package/dist/setup.d.ts +5 -3
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +169 -46
- package/dist/setup.js.map +1 -0
- package/dist/shell-escape.d.ts.map +1 -0
- package/dist/shell-escape.js +22 -1
- package/dist/shell-escape.js.map +1 -0
- package/dist/spawn.d.ts +2 -2
- package/dist/spawn.d.ts.map +1 -0
- package/dist/spawn.js +29 -10
- package/dist/spawn.js.map +1 -0
- package/dist/startup-services.d.ts +0 -1
- package/dist/startup-services.d.ts.map +1 -0
- package/dist/startup-services.js +26 -1
- package/dist/startup-services.js.map +1 -0
- package/dist/stream-owner.d.ts +6 -2
- package/dist/stream-owner.d.ts.map +1 -0
- package/dist/stream-owner.js +547 -2
- package/dist/stream-owner.js.map +1 -0
- package/dist/stream-status.d.ts +1 -1
- package/dist/stream-status.d.ts.map +1 -0
- package/dist/stream-status.js +268 -3
- package/dist/stream-status.js.map +1 -0
- package/dist/sync-roles-render.d.ts.map +1 -0
- package/dist/sync-roles-render.js +118 -3
- package/dist/sync-roles-render.js.map +1 -0
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +286 -22
- package/dist/sync.js.map +1 -0
- package/dist/terminal-title.d.ts.map +1 -0
- package/dist/terminal-title.js +68 -1
- package/dist/terminal-title.js.map +1 -0
- package/dist/token-store.d.ts +17 -111
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +81 -1
- package/dist/token-store.js.map +1 -0
- package/dist/tool-manifest.d.ts +4 -8
- package/dist/tool-manifest.d.ts.map +1 -0
- package/dist/tool-manifest.js +554 -1
- package/dist/tool-manifest.js.map +1 -0
- package/dist/tool-scope.d.ts +8 -12
- package/dist/tool-scope.d.ts.map +1 -0
- package/dist/tool-scope.js +97 -1
- package/dist/tool-scope.js.map +1 -0
- package/dist/types.d.ts +1 -5
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/unknown-subcommand.d.ts +1 -1
- package/dist/unknown-subcommand.d.ts.map +1 -0
- package/dist/unknown-subcommand.js +37 -1
- package/dist/unknown-subcommand.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +78 -2
- package/dist/version.js.map +1 -0
- package/dist/working-repo.d.ts.map +1 -0
- package/dist/working-repo.js +81 -1
- package/dist/working-repo.js.map +1 -0
- package/dist/worktree-lifecycle.d.ts.map +1 -0
- package/dist/worktree-lifecycle.js +205 -2
- package/dist/worktree-lifecycle.js.map +1 -0
- package/docs/EXTRACTION_PROVENANCE.md +40 -0
- package/docs/LOCAL_SERVER.md +103 -0
- package/docs/RELEASING.md +120 -0
- package/package.json +52 -34
- package/src/agent-runtime.ts +69 -0
- package/src/assimilate-cmd.ts +1864 -0
- package/src/assimilate-deps.ts +444 -0
- package/src/assimilate-guard.ts +84 -0
- package/src/assimilate-welcome.ts +39 -0
- package/src/auth-env.ts +21 -0
- package/src/backends/launch-all-pastelist.ts +18 -0
- package/src/backends/launch-all-tmux.ts +75 -0
- package/src/backends/launch-all-windows.ts +110 -0
- package/src/bare-launch-menu.ts +148 -0
- package/src/claude-launch-args.ts +35 -0
- package/src/claude.ts +561 -0
- package/src/cleanup-cmd.ts +581 -0
- package/src/clear-rewake-core.ts +34 -0
- package/src/clear-rewake.ts +18 -0
- package/src/cli-help.ts +116 -0
- package/src/cli-platform.ts +127 -0
- package/src/cli-tool-approval.ts +716 -0
- package/src/codex-app-server.ts +238 -0
- package/src/codex-app-wake.ts +512 -0
- package/src/codex-launch.ts +140 -0
- package/src/codex-remote.ts +500 -0
- package/src/codex-wake-resolve.ts +155 -0
- package/src/config-utils.ts +811 -0
- package/src/config.ts +595 -0
- package/src/console-prefix.ts +99 -0
- package/src/cube-name.ts +69 -0
- package/src/cubes.ts +583 -0
- package/src/debug.ts +73 -0
- package/src/direct-log.ts +9 -0
- package/src/docs-sections.ts +129 -0
- package/src/drone-lifecycle.ts +62 -0
- package/src/drone-management.ts +162 -0
- package/src/ensure-mcp-config.ts +54 -0
- package/src/evict-drone.ts +82 -0
- package/src/gc-orphan-inboxes.ts +229 -0
- package/src/inbox-monitor.ts +1005 -0
- package/src/index.ts +1201 -0
- package/src/launch-all-cmd.ts +450 -0
- package/src/launch-all-command.ts +30 -0
- package/src/launch-all-deps.ts +188 -0
- package/src/launch-all-discovery.ts +118 -0
- package/src/launch-all-locks.ts +74 -0
- package/src/launch-gate.ts +80 -0
- package/src/lifecycle-log-guard.ts +144 -0
- package/src/list-roles-render.ts +52 -0
- package/src/local-log-routing.ts +106 -0
- package/src/local-manage-tool-result.ts +10 -0
- package/src/local-server-cursor.ts +188 -0
- package/src/log-audit.ts +207 -0
- package/src/log-stream.ts +1505 -0
- package/src/model-presets.ts +22 -0
- package/src/name-validator.ts +23 -0
- package/src/opencode-drone.ts +528 -0
- package/src/opencode-plugin.ts +38 -0
- package/src/parse-assimilate-args.ts +125 -0
- package/src/parse-launch-all-args.ts +100 -0
- package/src/postinstall-banner.ts +37 -0
- package/src/postinstall.ts +36 -0
- package/src/readiness-probe.ts +12 -0
- package/src/regen-format.ts +651 -0
- package/src/regen.ts +150 -0
- package/src/remote-client.ts +1379 -0
- package/src/reset-local-seat-cmd.ts +227 -0
- package/src/role-match.ts +29 -0
- package/src/role-resolver.ts +93 -0
- package/src/roster-render.ts +196 -0
- package/src/seat-probe.ts +115 -0
- package/src/seat-store.ts +333 -0
- package/src/seats.ts +741 -0
- package/src/self-path.ts +51 -0
- package/src/server-endpoint.ts +38 -0
- package/src/server-errors.ts +93 -0
- package/src/server-handshake.ts +783 -0
- package/src/server-response.ts +76 -0
- package/src/server-trust.ts +245 -0
- package/src/setup-confirm.ts +171 -0
- package/src/setup.ts +186 -0
- package/src/shell-escape.ts +22 -0
- package/src/spawn.ts +31 -0
- package/src/startup-services.ts +36 -0
- package/src/stream-owner.ts +686 -0
- package/src/stream-status.ts +337 -0
- package/src/sync-roles-render.ts +163 -0
- package/src/sync.ts +363 -0
- package/src/terminal-title.ts +76 -0
- package/src/token-store.ts +102 -0
- package/src/tool-manifest.ts +610 -0
- package/src/tool-scope.ts +110 -0
- package/src/types.ts +5 -0
- package/src/unknown-subcommand.ts +35 -0
- package/src/version.ts +82 -0
- package/src/working-repo.ts +99 -0
- package/src/worktree-lifecycle.ts +254 -0
- package/dist/auth-recovery.d.ts +0 -33
- package/dist/auth-recovery.js +0 -1
- package/dist/auth.d.ts +0 -103
- package/dist/auth.js +0 -39
- package/dist/device-auth.d.ts +0 -75
- package/dist/device-auth.js +0 -1
- package/dist/drone-address.d.ts +0 -26
- package/dist/drone-address.js +0 -1
- package/dist/get-started.d.ts +0 -20
- package/dist/get-started.js +0 -2
- package/dist/health-beat.d.ts +0 -134
- package/dist/health-beat.js +0 -1
- package/dist/role-section.d.ts +0 -110
- package/dist/role-section.js +0 -8
- package/dist/setup-action.d.ts +0 -20
- package/dist/setup-action.js +0 -1
- package/dist/stale-version-check.d.ts +0 -40
- package/dist/stale-version-check.js +0 -1
- package/dist/subscription-retry.d.ts +0 -40
- package/dist/subscription-retry.js +0 -1
- package/dist/templates.d.ts +0 -107
- package/dist/templates.js +0 -359
- package/dist/token-crypto.d.ts +0 -50
- package/dist/token-crypto.js +0 -1
package/dist/claude.js
CHANGED
|
@@ -1,15 +1,487 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Borg CLI launcher
|
|
4
|
+
*
|
|
5
|
+
* Spawns Claude Code with a minimal kickoff prompt so the SessionStart
|
|
6
|
+
* hook's injected drone playbook actually fires on the first turn.
|
|
7
|
+
* Without this, Claude sits waiting for user input and the autonomous
|
|
8
|
+
* "look at the log and act" directive never executes.
|
|
9
|
+
*
|
|
10
|
+
* Commands:
|
|
11
|
+
* borg → Launch Claude with kickoff prompt
|
|
12
|
+
* borg setup → Re-route to the setup wizard
|
|
13
|
+
* borg spawn <name> → Create a sibling git worktree + launch a
|
|
14
|
+
* fresh drone inside it (see spawn.ts)
|
|
15
|
+
* borg sync → Advance the current worktree across the 5
|
|
16
|
+
* lifecycle states (see sync.ts, gh#33)
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from 'child_process';
|
|
19
|
+
import { randomUUID } from 'node:crypto';
|
|
20
|
+
import { basename } from 'node:path';
|
|
21
|
+
import { createInterface } from 'node:readline/promises';
|
|
22
|
+
import chalk from 'chalk';
|
|
23
|
+
import { findProjectRoot, getActiveCube, inboxPathForDrone, setCodexWakeTarget, pruneDeadCodexWakeTargets } from './cubes.js';
|
|
24
|
+
import { monitorStateRootForWorktree } from './inbox-monitor.js';
|
|
25
|
+
import { handleVersionFlag, getPackageVersion } from './version.js';
|
|
26
|
+
import { isHelpFlag, setupHelpText, topLevelHelpText, assimilateHelpText, resetLocalSeatHelpText } from './cli-help.js';
|
|
27
|
+
import { runSpawn } from './spawn.js';
|
|
28
|
+
import { buildClaudeLaunchArgs } from './claude-launch-args.js';
|
|
29
|
+
import { parseSyncArgs, runSync } from './sync.js';
|
|
30
|
+
import { parseCleanupArgs, runCleanup } from './cleanup-cmd.js';
|
|
31
|
+
import { parseAssimilateArgs } from './parse-assimilate-args.js';
|
|
32
|
+
import { runAssimilate } from './assimilate-cmd.js';
|
|
33
|
+
import { buildDefaultAssimilateDeps } from './assimilate-deps.js';
|
|
34
|
+
import { parseResetLocalSeatArgs, runResetLocalSeat, buildDefaultResetLocalSeatDeps, } from './reset-local-seat-cmd.js';
|
|
35
|
+
import { parseLaunchAllArgs } from './parse-launch-all-args.js';
|
|
36
|
+
import { unknownSubcommand } from './unknown-subcommand.js';
|
|
37
|
+
import { runLaunchAll } from './launch-all-cmd.js';
|
|
38
|
+
import { buildDefaultLaunchAllDeps } from './launch-all-deps.js';
|
|
39
|
+
import { discoverDroneCandidates } from './launch-all-discovery.js';
|
|
40
|
+
import { explicitCliLaunchHint, runBareLaunchMenu, shouldResolveExplicitCliLaunchHintTargets, shouldShowLaunchMenu, } from './bare-launch-menu.js';
|
|
41
|
+
import { setTerminalTitle } from './terminal-title.js';
|
|
42
|
+
import { initConsolePrefix, consolePrefix } from './console-prefix.js';
|
|
43
|
+
import { initDebugFromArgv } from './debug.js';
|
|
44
|
+
import { defaultCliChoiceDeps, detectCliAvailability, installedCliNames, parseCliFlag, resolveCliChoice } from './cli-platform.js';
|
|
45
|
+
import { prepareCodexRemoteLaunch, resolveCodexLaunchCwd, withCodexCwdArg, defaultCodexRemoteDeps, checkCodexBridgeHealthy } from './codex-remote.js';
|
|
46
|
+
import { BORG_CODEX_REMOTE_WAKE_ENV, codexAgentKindConfigArgs, codexRemoteWakeConfigArgs, withAgentRuntimeEnv, } from './agent-runtime.js';
|
|
47
|
+
import { findLoadedCodexThread } from './codex-app-server.js';
|
|
48
|
+
import { buildAgentKickoffPrompt, buildKickoffWakePathClause, recordCodexWakeTarget, socketPathFromRemoteArgs, } from './codex-launch.js';
|
|
49
|
+
import { codexBorgSessionConfigArgs } from './launch-gate.js';
|
|
50
|
+
import { addCodexSessionStartHook, addCodexUserPromptSubmitHook, addProjectSessionStartHook, addUserPromptSubmitHook, removeSessionStartHook, } from './config-utils.js';
|
|
51
|
+
import { ensureCliMcpConfigured } from './ensure-mcp-config.js';
|
|
52
|
+
import { installBorgPlugin } from './opencode-plugin.js';
|
|
53
|
+
import { connectOpenCodeDrone, computeOpenCodePort, createOpenCodeLaunchKickoff, injectInitialKickoff } from './opencode-drone.js';
|
|
54
|
+
import { buildOpenCodeLaunchArgs, defaultApprovalIo, resolveLaunchBorgApprovals } from './cli-tool-approval.js';
|
|
55
|
+
async function main() {
|
|
56
|
+
// `--debug` / BORG_DEBUG: enable HTTP request/response logging to stderr
|
|
57
|
+
// (observability for failures like the cross-account assimilate 404).
|
|
58
|
+
// Done first so debug covers everything below; strips `--debug` from argv
|
|
59
|
+
// so subcommand parsers (which reject unknown flags) never see it. Covers
|
|
60
|
+
// the top-level dispatcher + `borg setup` + `borg assimilate` — all route
|
|
61
|
+
// through this main.
|
|
62
|
+
initDebugFromArgv(process.argv);
|
|
63
|
+
// Honor `--version` / `-v` before any other work.
|
|
64
|
+
handleVersionFlag();
|
|
65
|
+
// Resolve drone self-identification prefix (gh#25) before any error
|
|
66
|
+
// emission so messages carry `[drone-X · cube]` from launch onward.
|
|
67
|
+
await initConsolePrefix();
|
|
68
|
+
// Local-only client: bare `borg` performs NO automatic external network I/O
|
|
69
|
+
// (no npm-registry stale-version check) before authority selection. Only the
|
|
70
|
+
// explicitly selected local server may be contacted. A version comparison is
|
|
71
|
+
// available as an explicit operator action via `borg --version`.
|
|
72
|
+
// Intercept --help / -h before handing off to Claude.
|
|
73
|
+
if (process.argv[2] === '--help' || process.argv[2] === '-h') {
|
|
74
|
+
process.stdout.write(topLevelHelpText(getPackageVersion()));
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
// Re-route subcommands.
|
|
78
|
+
if (process.argv[2] === 'setup') {
|
|
79
|
+
// gh#520: `borg setup --help` must show help, not run the wizard.
|
|
80
|
+
if (isHelpFlag(process.argv[3])) {
|
|
81
|
+
process.stdout.write(setupHelpText(getPackageVersion()));
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
await import('./setup.js');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (process.argv[2] === 'assimilate') {
|
|
88
|
+
// `borg assimilate --help` (or `... <role> --help`) must show help, not be
|
|
89
|
+
// rejected by the parser as an unknown flag.
|
|
90
|
+
if (process.argv.slice(3).some(isHelpFlag)) {
|
|
91
|
+
process.stdout.write(assimilateHelpText(getPackageVersion()));
|
|
92
|
+
process.exit(0);
|
|
93
|
+
}
|
|
94
|
+
const parsed = parseAssimilateArgs(process.argv.slice(3));
|
|
95
|
+
if (!parsed.ok) {
|
|
96
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg assimilate: ${parsed.error}\n`));
|
|
97
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const deps = buildDefaultAssimilateDeps();
|
|
101
|
+
const code = await runAssimilate({ role: parsed.role, flags: parsed.flags }, deps);
|
|
102
|
+
process.exit(code);
|
|
103
|
+
}
|
|
104
|
+
if (process.argv[2] === 'reset-local-seat') {
|
|
105
|
+
if (process.argv.slice(3).some(isHelpFlag)) {
|
|
106
|
+
process.stdout.write(resetLocalSeatHelpText(getPackageVersion()));
|
|
107
|
+
process.exit(0);
|
|
108
|
+
}
|
|
109
|
+
const parsed = parseResetLocalSeatArgs(process.argv.slice(3));
|
|
110
|
+
if (!parsed.ok) {
|
|
111
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg reset-local-seat: ${parsed.error}\n`));
|
|
112
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const code = await runResetLocalSeat(parsed.flags, buildDefaultResetLocalSeatDeps());
|
|
116
|
+
process.exit(code);
|
|
117
|
+
}
|
|
118
|
+
if (process.argv[2] === 'spawn') {
|
|
119
|
+
// Deprecated; the stub prints a redirect message and exits 2.
|
|
120
|
+
const code = await runSpawn();
|
|
121
|
+
process.exit(code);
|
|
122
|
+
}
|
|
123
|
+
if (process.argv[2] === 'sync') {
|
|
124
|
+
const parsed = parseSyncArgs(process.argv.slice(3));
|
|
125
|
+
if (!parsed.ok) {
|
|
126
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg sync: ${parsed.error}\n`));
|
|
127
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
const code = await runSync({}, parsed.options);
|
|
131
|
+
process.exit(code);
|
|
132
|
+
}
|
|
133
|
+
if (process.argv[2] === 'cleanup') {
|
|
134
|
+
const parsed = parseCleanupArgs(process.argv.slice(3));
|
|
135
|
+
if (!parsed.ok) {
|
|
136
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg cleanup: ${parsed.error}\n`));
|
|
137
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
const code = await runCleanup({}, parsed.options);
|
|
141
|
+
process.exit(code);
|
|
142
|
+
}
|
|
143
|
+
if (process.argv[2] === 'launch-all') {
|
|
144
|
+
const parsed = parseLaunchAllArgs(process.argv.slice(3));
|
|
145
|
+
if (!parsed.ok) {
|
|
146
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ borg launch-all: ${parsed.error}\n`));
|
|
147
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
const deps = buildDefaultLaunchAllDeps();
|
|
151
|
+
const code = await runLaunchAll(parsed.args, deps);
|
|
152
|
+
process.exit(code);
|
|
153
|
+
}
|
|
154
|
+
// gh#911: an unknown NON-FLAG argv[2] that isn't a known subcommand must
|
|
155
|
+
// ERROR, not silently fall through and launch an agent with the typo'd word
|
|
156
|
+
// as its prompt (the `borg evict-drone X` footgun). Bare `borg` and
|
|
157
|
+
// recognized flags still fall through to launch below.
|
|
158
|
+
const unknownCmd = unknownSubcommand(process.argv[2]);
|
|
159
|
+
if (unknownCmd !== null) {
|
|
160
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ unknown command: ${unknownCmd}\n`));
|
|
161
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
const parsedCli = parseCliFlag(process.argv.slice(2));
|
|
165
|
+
if (parsedCli.error) {
|
|
166
|
+
process.stderr.write(chalk.red(`${consolePrefix()}◼ ${parsedCli.error}\n`));
|
|
167
|
+
process.stderr.write(`Run \`borg --help\` for usage.\n`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const prompt = async (message) => {
|
|
171
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
172
|
+
try {
|
|
173
|
+
return await rl.question(message);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
rl.close();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
let cli = await resolveCliChoice(parsedCli.cli, defaultCliChoiceDeps(prompt, () => process.stdin.isTTY === true));
|
|
180
|
+
ensureDetectedCliConfigured();
|
|
181
|
+
// Active cube for this directory — needed for the launch menu's option-3
|
|
182
|
+
// availability, the terminal title, and the inbox-Monitor clause below.
|
|
183
|
+
const active = await getActiveCube();
|
|
184
|
+
let launchAllTargetsAvailable;
|
|
185
|
+
const hasLaunchAllTargets = async () => {
|
|
186
|
+
if (!active)
|
|
187
|
+
return false;
|
|
188
|
+
if (launchAllTargetsAvailable === undefined) {
|
|
189
|
+
const candidates = await discoverDroneCandidates({ targetCubeId: active.cubeId }, buildDefaultLaunchAllDeps());
|
|
190
|
+
launchAllTargetsAvailable = candidates.length > 0;
|
|
191
|
+
}
|
|
192
|
+
return launchAllTargetsAvailable;
|
|
193
|
+
};
|
|
194
|
+
const stdinIsTTY = process.stdin.isTTY === true;
|
|
195
|
+
const stdoutIsTTY = process.stdout.isTTY === true;
|
|
196
|
+
const explicitCliHint = explicitCliLaunchHint({
|
|
197
|
+
explicitCli: parsedCli.cli,
|
|
198
|
+
stdinIsTTY,
|
|
199
|
+
stdoutIsTTY,
|
|
200
|
+
hasActiveCube: active !== null,
|
|
201
|
+
hasLaunchAllTargets: shouldResolveExplicitCliLaunchHintTargets({
|
|
202
|
+
explicitCli: parsedCli.cli,
|
|
203
|
+
stdinIsTTY,
|
|
204
|
+
stdoutIsTTY,
|
|
205
|
+
hasActiveCube: active !== null,
|
|
206
|
+
}) ? await hasLaunchAllTargets() : false,
|
|
207
|
+
});
|
|
208
|
+
if (explicitCliHint)
|
|
209
|
+
process.stderr.write(explicitCliHint);
|
|
210
|
+
// gh#853: bare `borg` (no args) interactive launch menu. TTY-only + bare-args-
|
|
211
|
+
// only (shouldShowLaunchMenu) so every scripted/programmatic `borg` and every
|
|
212
|
+
// explicit subcommand/flag is untouched; the get-started breadcrumb already
|
|
213
|
+
// exited above, so it keeps precedence over the menu. The option-set and
|
|
214
|
+
// selection→action mapping are pure (bare-launch-menu.ts) — this is the glue
|
|
215
|
+
// that computes inputs and dispatches the chosen action.
|
|
216
|
+
if (shouldShowLaunchMenu({
|
|
217
|
+
extraArgs: process.argv.slice(2),
|
|
218
|
+
stdinIsTTY,
|
|
219
|
+
stdoutIsTTY,
|
|
220
|
+
})) {
|
|
221
|
+
const otherInstalledClis = installedCliNames(detectCliAvailability()).filter((c) => c !== cli);
|
|
222
|
+
const action = await runBareLaunchMenu({ defaultCli: cli, otherInstalledClis, hasLaunchAllTargets: await hasLaunchAllTargets() }, prompt);
|
|
223
|
+
if (action.kind === 'launch-all') {
|
|
224
|
+
const parsed = parseLaunchAllArgs([]); // empty args → active cube, auto backend
|
|
225
|
+
const code = parsed.ok ? await runLaunchAll(parsed.args, buildDefaultLaunchAllDeps()) : 1;
|
|
226
|
+
process.exit(code);
|
|
227
|
+
}
|
|
228
|
+
// option 1 → configured default; option 2 → the other agent, ONE-SHOT
|
|
229
|
+
// (we deliberately do NOT call setProjectCliPreference — the saved
|
|
230
|
+
// preference is changed only via `borg --cli <agent>`).
|
|
231
|
+
cli = action.cli;
|
|
232
|
+
}
|
|
233
|
+
// client#20: inspect only the SELECTED harness after the one-shot launch
|
|
234
|
+
// menu choice. Explicit consent enables a narrow per-process override;
|
|
235
|
+
// Borg never rewrites the user's approval policy here.
|
|
236
|
+
const approvalCwd = cli === 'codex'
|
|
237
|
+
? resolveCodexLaunchCwd(parsedCli.rest, process.cwd())
|
|
238
|
+
: process.cwd();
|
|
239
|
+
const launchApproval = await resolveLaunchBorgApprovals(cli, defaultApprovalIo(prompt, () => process.stdin.isTTY === true, {
|
|
240
|
+
cwd: approvalCwd,
|
|
241
|
+
env: process.env,
|
|
242
|
+
codexArgs: parsedCli.rest,
|
|
243
|
+
}));
|
|
244
|
+
if (launchApproval.warning) {
|
|
245
|
+
console.error(`${consolePrefix()}${chalk.yellow(`warning: ${launchApproval.warning}`)}`);
|
|
246
|
+
}
|
|
247
|
+
// Forward any user-supplied flags (e.g. --resume <id>, --cwd, etc.) to
|
|
248
|
+
// the selected agent CLI unchanged.
|
|
249
|
+
//
|
|
250
|
+
// The kickoff prompt goes at the end as the positional user-message
|
|
251
|
+
// argument so the SessionStart hook + drone playbook get a turn to
|
|
252
|
+
// execute on session start. Works for fresh sessions and resumed ones.
|
|
253
|
+
//
|
|
254
|
+
// The /loop wrapper (dynamic mode — no fixed interval) lets Claude
|
|
255
|
+
// self-pace iterations. We instruct it to arm a persistent Monitor on
|
|
256
|
+
// the inbox file so it wakes the moment another drone posts to the
|
|
257
|
+
// cube (the MCP client appends a line to that file in real time via
|
|
258
|
+
// the long-poll poller). One adaptive ScheduleWakeup recovery deadline
|
|
259
|
+
// backs it up: 3h ±30m while Monitor status is healthy or indeterminate,
|
|
260
|
+
// 15m ±3m only while explicitly broken; a real Monitor wake replaces it.
|
|
261
|
+
const passthroughArgs = parsedCli.rest;
|
|
262
|
+
// `active` (resolved above for the launch menu) also gates the inbox-Monitor
|
|
263
|
+
// instruction: only arm it when this project is assimilated to a cube —
|
|
264
|
+
// otherwise we don't know which inbox file to watch and a Monitor on a
|
|
265
|
+
// not-yet-relevant path produces no signal. The user can assimilate and
|
|
266
|
+
// relaunch to engage real-time wake; the /loop heartbeat covers the meantime.
|
|
267
|
+
// Set the terminal title so sibling drone sessions are
|
|
268
|
+
// distinguishable in Cmd-Tab / tab bars / Mission Control. No-op
|
|
269
|
+
// when stdout isn't a TTY (piped invocation, CI). Claude Code does
|
|
270
|
+
// not set its own title, so this persists for the session.
|
|
271
|
+
setTerminalTitle(active ? { label: active.droneLabel, cubeName: active.name } : null, basename(process.cwd()));
|
|
272
|
+
// gh#929: the claude wake-path/Monitor-arming clause is the SHARED
|
|
273
|
+
// wakePathArming (same core the SessionStart hook + /clear orientation use)
|
|
274
|
+
// + the NEVER-TaskStop reminder. Codex / opencode / no-active-cube → empty.
|
|
275
|
+
const monitorClause = buildKickoffWakePathClause(cli, active && cli === 'claude' ? inboxPathForDrone(active.cubeId, active.droneId) : null, active && cli === 'claude'
|
|
276
|
+
? monitorStateRootForWorktree(findProjectRoot(process.cwd()))
|
|
277
|
+
: null);
|
|
278
|
+
const codexWakeNonce = cli === 'codex' ? `borg-wake-${randomUUID()}` : null;
|
|
279
|
+
let codexWakePathClause;
|
|
280
|
+
let remoteArgs = [];
|
|
281
|
+
// gh#673 P1: mark the agent session as borg-launched. Claude Code's MCP
|
|
282
|
+
// child + hook commands inherit this env, gating the borg activation
|
|
283
|
+
// surface (launch-gate.ts). ACTIVATION-only — never a security gate.
|
|
284
|
+
// OpenCode MCP children get BORG_SESSION from the pinned env in the
|
|
285
|
+
// opencode.json config (same mechanism as codex's pinned env).
|
|
286
|
+
// Pin CLI identity independently of a model selection and the optional
|
|
287
|
+
// Codex remote-wake transport. In particular, clear a stale Codex marker
|
|
288
|
+
// before a Codex -> Claude relaunch can reach its MCP child.
|
|
289
|
+
let launchEnv = { ...withAgentRuntimeEnv(process.env, cli), BORG_SESSION: '1' };
|
|
290
|
+
if (cli === 'opencode' && launchApproval.openCodePermission) {
|
|
291
|
+
launchEnv.OPENCODE_PERMISSION = launchApproval.openCodePermission;
|
|
292
|
+
}
|
|
293
|
+
let codexSocketPath = null;
|
|
294
|
+
let codexServerCleanup = null;
|
|
295
|
+
if (cli === 'codex' && !passthroughArgs.includes('--remote')) {
|
|
296
|
+
console.error(`${consolePrefix()}${chalk.gray('◼ Starting Codex remote-wake app-server…')}`);
|
|
297
|
+
const remote = await prepareCodexRemoteLaunch(defaultCodexRemoteDeps());
|
|
298
|
+
if (remote.warning) {
|
|
299
|
+
console.error(`${consolePrefix()}${chalk.yellow(`warning: ${remote.warning}`)}`);
|
|
300
|
+
codexWakePathClause =
|
|
301
|
+
`⚠ Codex wake-path capability check failed: remote-control is unavailable for this session. Run borg_regen manually whenever you return, and expect only fallback wakeups until relaunch.`;
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
codexWakePathClause =
|
|
305
|
+
`Codex wake-path capability check passed: remote-control socket established for this session.`;
|
|
306
|
+
}
|
|
307
|
+
remoteArgs = remote.args;
|
|
308
|
+
launchEnv = {
|
|
309
|
+
...withAgentRuntimeEnv(process.env, cli),
|
|
310
|
+
...remote.env,
|
|
311
|
+
BORG_SESSION: '1',
|
|
312
|
+
};
|
|
313
|
+
codexSocketPath = socketPathFromRemoteArgs(remote.args);
|
|
314
|
+
codexServerCleanup = remote.server?.cleanup ?? null;
|
|
315
|
+
}
|
|
316
|
+
else if (cli === 'codex' && passthroughArgs.includes('--remote')) {
|
|
317
|
+
codexWakePathClause =
|
|
318
|
+
`Codex wake-path capability check: using caller-provided --remote socket; if no wake arrives, run borg_regen manually when returning to the session.`;
|
|
319
|
+
codexSocketPath = socketPathFromRemoteArgs(passthroughArgs);
|
|
320
|
+
if (codexSocketPath) {
|
|
321
|
+
launchEnv = {
|
|
322
|
+
...withAgentRuntimeEnv(process.env, cli),
|
|
323
|
+
[BORG_CODEX_REMOTE_WAKE_ENV]: '1',
|
|
324
|
+
BORG_SESSION: '1',
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const kickoff = buildAgentKickoffPrompt({
|
|
329
|
+
cli,
|
|
330
|
+
codexWakeNonce,
|
|
331
|
+
monitorClause,
|
|
332
|
+
codexWakePathClause,
|
|
333
|
+
});
|
|
334
|
+
// This stays separate from the shared kickoff so Claude and Codex preserve
|
|
335
|
+
// their existing launch prompts. OpenCode records this nonce-bearing copy
|
|
336
|
+
// and later uses the nonce to bind its separately spawned MCP child.
|
|
337
|
+
let openCodeKickoff = null;
|
|
338
|
+
let launchArgs;
|
|
339
|
+
if (cli === 'codex') {
|
|
340
|
+
// gh#673 P1-codex: codex MCP children only see the pinned
|
|
341
|
+
// [mcp_servers.borg.env], never inherited env (V2 probe) — deliver
|
|
342
|
+
// the borg-launch marker and selected CLI identity via per-invocation
|
|
343
|
+
// -c overrides instead (V2b-proven). Remote wake remains a separate
|
|
344
|
+
// transport capability, explicitly disabled when this launch has no
|
|
345
|
+
// socket so legacy static config cannot spuriously arm a bridge.
|
|
346
|
+
// client#20: the exact approval overrides above are launch-scoped and
|
|
347
|
+
// consented. They remain separate from activation/identity/wake config.
|
|
348
|
+
launchArgs = [
|
|
349
|
+
...launchApproval.codexArgs,
|
|
350
|
+
...codexBorgSessionConfigArgs(),
|
|
351
|
+
...codexAgentKindConfigArgs(),
|
|
352
|
+
...codexRemoteWakeConfigArgs(codexSocketPath !== null),
|
|
353
|
+
...remoteArgs,
|
|
354
|
+
...withCodexCwdArg([...passthroughArgs, kickoff], process.cwd()),
|
|
355
|
+
];
|
|
356
|
+
}
|
|
357
|
+
else if (cli === 'opencode') {
|
|
358
|
+
// OpenCode launch: start TUI with the kickoff passed via --prompt
|
|
359
|
+
// (auto-submits it as the first message). BORG_SESSION is pinned in
|
|
360
|
+
// opencode.json. A unique port is assigned so the MCP child can connect
|
|
361
|
+
// via the HTTP API for context-streaming (injectOpenCodeEntry).
|
|
362
|
+
const dronePort = active
|
|
363
|
+
? computeOpenCodePort(active.droneId)
|
|
364
|
+
: 14096;
|
|
365
|
+
installBorgPlugin();
|
|
366
|
+
openCodeKickoff = createOpenCodeLaunchKickoff(kickoff);
|
|
367
|
+
launchArgs = buildOpenCodeLaunchArgs(process.cwd(), dronePort, openCodeKickoff.prompt, passthroughArgs);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
// gh#702: borg-launched claude drones auto-allow ONLY mcp__borg__* so they
|
|
371
|
+
// never prompt on borg coordination calls; Bash/file/web still prompt.
|
|
372
|
+
launchArgs = buildClaudeLaunchArgs(passthroughArgs, kickoff);
|
|
373
|
+
}
|
|
374
|
+
const cliDisplayName = cli === 'claude' ? 'Claude Code' : cli === 'codex' ? 'Codex' : 'OpenCode';
|
|
375
|
+
console.error(`${consolePrefix()}${chalk.blue(`◼ Launching ${cliDisplayName}…`)}`);
|
|
376
|
+
const agentProcess = spawn(cli, launchArgs, {
|
|
377
|
+
stdio: 'inherit',
|
|
378
|
+
shell: false,
|
|
379
|
+
env: launchEnv,
|
|
380
|
+
});
|
|
381
|
+
// gh#opencode: find the opened session after launch. The kickoff was already
|
|
382
|
+
// submitted via --prompt, so we just discover the session ID for inbox
|
|
383
|
+
// entry injection. Fire-and-forget; never delay the launch.
|
|
384
|
+
if (cli === 'opencode' && openCodeKickoff) {
|
|
385
|
+
const launchKickoff = openCodeKickoff;
|
|
386
|
+
const dronePort = active
|
|
387
|
+
? computeOpenCodePort(active.droneId)
|
|
388
|
+
: 14096;
|
|
389
|
+
const serverUrl = `http://127.0.0.1:${dronePort}`;
|
|
390
|
+
// Fire-and-forget; never delay the launch or crash on failure.
|
|
391
|
+
connectOpenCodeDrone({ serverUrl, directory: process.cwd(), droneLabel: active?.droneLabel ?? 'opencode', cubeName: active?.name ?? 'borg' })
|
|
392
|
+
.then(() => injectInitialKickoff(launchKickoff))
|
|
393
|
+
.catch(() => { });
|
|
394
|
+
}
|
|
395
|
+
// gh#857 WI-2: wake-target recording is codex-only (app-server bridge).
|
|
396
|
+
// OpenCode has no remote-wake mechanisms yet; claude uses the inbox Monitor.
|
|
397
|
+
if (cli === 'codex' && active && codexSocketPath) {
|
|
398
|
+
void recordCodexWakeTarget({
|
|
399
|
+
deps: { setCodexWakeTarget, findLoadedCodexThread },
|
|
400
|
+
cubeId: active.cubeId,
|
|
401
|
+
droneId: active.droneId,
|
|
402
|
+
socketPath: codexSocketPath,
|
|
403
|
+
passthroughArgs,
|
|
404
|
+
previewNeedle: codexWakeNonce ?? kickoff.slice(0, 120),
|
|
405
|
+
cwd: process.cwd(),
|
|
406
|
+
launchedAtSeconds: Math.floor(Date.now() / 1000),
|
|
407
|
+
});
|
|
408
|
+
// gh#855: self-heal the wake-target file — drop entries whose app-server
|
|
409
|
+
// socket is positively dead (crashed prior launches), mirroring the
|
|
410
|
+
// socket-dir pruneStaleSockets. Best-effort; never blocks the launch.
|
|
411
|
+
void pruneDeadCodexWakeTargets((sock) => checkCodexBridgeHealthy(sock));
|
|
412
|
+
}
|
|
413
|
+
agentProcess.on('error', (err) => {
|
|
414
|
+
if (codexServerCleanup) {
|
|
415
|
+
try {
|
|
416
|
+
codexServerCleanup();
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// best-effort
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (err.code === 'ENOENT') {
|
|
423
|
+
console.error(`${consolePrefix()}${chalk.red(`\n◼ Failed to launch ${cli}`)}`);
|
|
424
|
+
const cliName = cli === 'opencode' ? 'opencode' : cli;
|
|
425
|
+
console.error(`${consolePrefix()}${chalk.gray(`Make sure ${cliName} is installed.\n`)}`);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
console.error(`${consolePrefix()}${chalk.red(`\n◼ Failed to launch ${cli}: ${err.message}\n`)}`);
|
|
429
|
+
}
|
|
430
|
+
process.exit(1);
|
|
431
|
+
});
|
|
432
|
+
agentProcess.on('exit', (code) => {
|
|
433
|
+
if (codexServerCleanup) {
|
|
434
|
+
try {
|
|
435
|
+
codexServerCleanup();
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
// best-effort
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
process.exit(code ?? 0);
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
function ensureDetectedCliConfigured() {
|
|
445
|
+
const found = detectCliAvailability();
|
|
446
|
+
if (found.claude) {
|
|
447
|
+
try {
|
|
448
|
+
ensureCliMcpConfigured('claude');
|
|
449
|
+
// gh#673 P2 (WI-1): the orientation hook lives PROJECT-LOCAL in
|
|
450
|
+
// <root>/.claude/settings.local.json — ensured on every bare
|
|
451
|
+
// `borg` launch so pre-P2 worktrees self-heal. The legacy GLOBAL
|
|
452
|
+
// hook is then removed: safe because this ensure precedes every
|
|
453
|
+
// borg-launched agent spawn (other projects get their local hook
|
|
454
|
+
// at their own next launch/assimilate), and P1's BORG_SESSION
|
|
455
|
+
// gate already no-ops the global hook in non-borg sessions.
|
|
456
|
+
addProjectSessionStartHook(findProjectRoot(process.cwd()));
|
|
457
|
+
removeSessionStartHook();
|
|
458
|
+
addUserPromptSubmitHook();
|
|
459
|
+
}
|
|
460
|
+
catch (err) {
|
|
461
|
+
console.error(`${consolePrefix()}${chalk.yellow(`warning: Claude Code integration check failed: ${err?.message ?? err}`)}`);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (found.codex) {
|
|
465
|
+
try {
|
|
466
|
+
ensureCliMcpConfigured('codex');
|
|
467
|
+
addCodexSessionStartHook();
|
|
468
|
+
addCodexUserPromptSubmitHook();
|
|
469
|
+
}
|
|
470
|
+
catch (err) {
|
|
471
|
+
console.error(`${consolePrefix()}${chalk.yellow(`warning: Codex integration check failed: ${err?.message ?? err}`)}`);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if (found.opencode) {
|
|
475
|
+
try {
|
|
476
|
+
ensureCliMcpConfigured('opencode');
|
|
477
|
+
}
|
|
478
|
+
catch (err) {
|
|
479
|
+
console.error(`${consolePrefix()}${chalk.yellow(`warning: OpenCode integration check failed: ${err?.message ?? err}`)}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
main().catch((error) => {
|
|
484
|
+
console.error(`${consolePrefix()}${chalk.red(`\n◼ Error: ${error.message}\n`)}`);
|
|
485
|
+
process.exit(1);
|
|
486
|
+
});
|
|
487
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/cleanup-cmd.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `autoEvictPresumedDead`, or gh#877 graceful self-shutdown) leaves its
|
|
6
6
|
* worktree dir (`~/.borg/worktrees/<repo>/<name>`) + its `wt-<suffix>`
|
|
7
7
|
* branch on disk. Nothing reclaims them. This command finds and SAFELY
|
|
8
|
-
* removes worktrees orphaned by eviction — never destroying live,
|
|
8
|
+
* removes worktrees orphaned by eviction — never destroying live,
|
|
9
9
|
* dirty, unmerged, or precious-local-state work.
|
|
10
10
|
*
|
|
11
11
|
* Pure composition over `worktree-lifecycle.ts` + the gh#877 per-seat
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* SEC gate (gh#882, S1–S5 — design entries 98e45fbf / acd76794):
|
|
17
17
|
* S1 Destructive prune authority = server 410 DRONE_EVICTED on the
|
|
18
18
|
* worktree's OWN saved-seat token, ONLY.
|
|
19
|
-
* S2 KEEP classes (any one → never prune, surface):
|
|
20
|
-
*
|
|
19
|
+
* S2 KEEP classes (any one → never prune, surface): dirty; unmerged;
|
|
20
|
+
* non-regenerable gitignored-local.
|
|
21
21
|
* S3 Report-only until gh#877 is DEPLOYED. The destructive path keys on
|
|
22
22
|
* the 410 CODE — pre-deploy the server returns 401 → probe resolves
|
|
23
23
|
* 'indeterminate' → report-only → safe. No flag / deploy coupling;
|
|
@@ -37,7 +37,7 @@ import { type ActiveCube } from './cubes.js';
|
|
|
37
37
|
import { type SeatStatus } from './seat-probe.js';
|
|
38
38
|
export type { SeatStatus };
|
|
39
39
|
/** Per-worktree classification outcome. PRUNABLE is the ONLY delete class. */
|
|
40
|
-
export type CleanupReason = 'PRUNABLE' | 'SURVIVES-dirty' | 'SURVIVES-clobber' | 'SURVIVES-unmerged' | 'SURVIVES-detached' | 'SURVIVES-
|
|
40
|
+
export type CleanupReason = 'PRUNABLE' | 'SURVIVES-dirty' | 'SURVIVES-clobber' | 'SURVIVES-unmerged' | 'SURVIVES-detached' | 'SURVIVES-rejected' | 'SURVIVES-live' | 'SURVIVES-self' | 'UNKNOWN-indeterminate' | 'UNKNOWN-no-seat' | 'LEGACY-manual-review';
|
|
41
41
|
export interface CleanupRow {
|
|
42
42
|
worktreePath: string;
|
|
43
43
|
wtBranch: string | null;
|
|
@@ -60,7 +60,7 @@ export interface CleanupDeps {
|
|
|
60
60
|
cube: ActiveCube;
|
|
61
61
|
}>>;
|
|
62
62
|
/** Probe ONE seat's eviction status using ITS OWN token (gh#877). */
|
|
63
|
-
probeSeat?: (sessionToken: string, apiUrl: string) => Promise<SeatStatus>;
|
|
63
|
+
probeSeat?: (sessionToken: string, apiUrl: string, serverTrustIdentity?: string) => Promise<SeatStatus>;
|
|
64
64
|
/** realpath resolver — injected so tests can model symlink escape. */
|
|
65
65
|
realpath?: (p: string) => string;
|
|
66
66
|
stdout?: (line: string) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup-cmd.d.ts","sourceRoot":"","sources":["../src/cleanup-cmd.ts"],"names":[],"mappings":"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"}
|