borgmcp 1.1.14 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +15 -0
- package/LICENSE +201 -33
- package/NOTICE +2 -0
- package/README.md +86 -37
- 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
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { AssimilateFlags } from './assimilate-cmd.js';
|
|
2
|
+
|
|
3
|
+
export interface ParseAssimilateResult {
|
|
4
|
+
ok: true;
|
|
5
|
+
role: string | undefined;
|
|
6
|
+
flags: AssimilateFlags;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type ParseResult =
|
|
10
|
+
| ParseAssimilateResult
|
|
11
|
+
| { ok: false; error: string };
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Parse argv for `borg assimilate [role] [--worktree <n>] [--template <n>]
|
|
15
|
+
* [--no-template] [--cube-name <n>] [--host <host>] [--enroll] [--here] [--yes]`. The `assimilate`
|
|
16
|
+
* subcommand token must already be stripped by the caller.
|
|
17
|
+
*/
|
|
18
|
+
export function parseAssimilateArgs(rawArgs: string[]): ParseResult {
|
|
19
|
+
let role: string | undefined;
|
|
20
|
+
const flags: AssimilateFlags = {};
|
|
21
|
+
|
|
22
|
+
for (let i = 0; i < rawArgs.length; i += 1) {
|
|
23
|
+
const arg = rawArgs[i];
|
|
24
|
+
if (arg === '--worktree') {
|
|
25
|
+
const next = rawArgs[i + 1];
|
|
26
|
+
if (typeof next !== 'string' || next.length === 0) {
|
|
27
|
+
return { ok: false, error: '--worktree requires a name argument (e.g. `--worktree drone-2`)' };
|
|
28
|
+
}
|
|
29
|
+
flags.worktree = next;
|
|
30
|
+
i += 1;
|
|
31
|
+
} else if (arg === '--template') {
|
|
32
|
+
const next = rawArgs[i + 1];
|
|
33
|
+
if (typeof next !== 'string' || next.length === 0) {
|
|
34
|
+
return { ok: false, error: '--template requires a name argument (e.g. `--template software-dev`)' };
|
|
35
|
+
}
|
|
36
|
+
flags.template = next;
|
|
37
|
+
i += 1;
|
|
38
|
+
} else if (arg === '--no-template') {
|
|
39
|
+
flags.noTemplate = true;
|
|
40
|
+
} else if (arg === '--cube-name') {
|
|
41
|
+
const next = rawArgs[i + 1];
|
|
42
|
+
if (typeof next !== 'string' || next.length === 0) {
|
|
43
|
+
return { ok: false, error: '--cube-name requires a name argument (e.g. `--cube-name my-cube`)' };
|
|
44
|
+
}
|
|
45
|
+
flags.cubeName = next;
|
|
46
|
+
i += 1;
|
|
47
|
+
} else if (arg === '--here') {
|
|
48
|
+
flags.here = true;
|
|
49
|
+
} else if (arg === '--host') {
|
|
50
|
+
const next = rawArgs[i + 1];
|
|
51
|
+
if (typeof next !== 'string' || next.length === 0 || next.startsWith('-')) {
|
|
52
|
+
return { ok: false, error: '--host requires a host or URL (e.g. `--host localhost:7091`)' };
|
|
53
|
+
}
|
|
54
|
+
flags.server = next;
|
|
55
|
+
i += 1;
|
|
56
|
+
} else if (arg.startsWith('--host=')) {
|
|
57
|
+
const value = arg.slice('--host='.length);
|
|
58
|
+
if (!value) {
|
|
59
|
+
return { ok: false, error: '--host requires a host or URL (e.g. `--host localhost:7091`)' };
|
|
60
|
+
}
|
|
61
|
+
flags.server = value;
|
|
62
|
+
} else if (arg === '--enroll') {
|
|
63
|
+
flags.enroll = true;
|
|
64
|
+
} else if (arg === '--yes' || arg === '-y') {
|
|
65
|
+
flags.yes = true;
|
|
66
|
+
} else if (arg === '--cli') {
|
|
67
|
+
const next = rawArgs[i + 1];
|
|
68
|
+
if (next !== 'claude' && next !== 'codex' && next !== 'opencode') {
|
|
69
|
+
return { ok: false, error: '--cli requires claude, codex, or opencode' };
|
|
70
|
+
}
|
|
71
|
+
flags.cli = next;
|
|
72
|
+
i += 1;
|
|
73
|
+
} else if (arg.startsWith('--cli=')) {
|
|
74
|
+
const value = arg.slice('--cli='.length);
|
|
75
|
+
if (value !== 'claude' && value !== 'codex' && value !== 'opencode') {
|
|
76
|
+
return { ok: false, error: '--cli requires claude, codex, or opencode' };
|
|
77
|
+
}
|
|
78
|
+
flags.cli = value;
|
|
79
|
+
} else if (arg === '--model' || arg === '--backend') {
|
|
80
|
+
// --backend is the deprecated alias for --model (kept so existing
|
|
81
|
+
// invocations don't break); both set flags.model.
|
|
82
|
+
const next = rawArgs[i + 1];
|
|
83
|
+
if (typeof next !== 'string' || next.length === 0) {
|
|
84
|
+
return { ok: false, error: '--model requires a descriptor (e.g. `--model claude:claude-opus-4-8`)' };
|
|
85
|
+
}
|
|
86
|
+
const match = next.match(/^claude:[A-Za-z0-9._:\/-]+$/);
|
|
87
|
+
if (!match) {
|
|
88
|
+
return { ok: false, error: `invalid model descriptor '${next}' — expected claude:<model>; configure local models in the agent CLI` };
|
|
89
|
+
}
|
|
90
|
+
flags.model = next;
|
|
91
|
+
i += 1;
|
|
92
|
+
} else if (arg.startsWith('--model=') || arg.startsWith('--backend=')) {
|
|
93
|
+
const value = arg.slice(arg.indexOf('=') + 1);
|
|
94
|
+
const match = value.match(/^claude:[A-Za-z0-9._:\/-]+$/);
|
|
95
|
+
if (!match) {
|
|
96
|
+
return { ok: false, error: `invalid model descriptor '${value}' — expected claude:<model>; configure local models in the agent CLI` };
|
|
97
|
+
}
|
|
98
|
+
flags.model = value;
|
|
99
|
+
} else if (arg.startsWith('--')) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
error: `unknown flag: ${arg}. Supported: --worktree, --template, --no-template, --cube-name, --host, --enroll, --here, --yes, --cli, --model`,
|
|
103
|
+
};
|
|
104
|
+
} else {
|
|
105
|
+
if (role !== undefined) {
|
|
106
|
+
return { ok: false, error: `unexpected extra argument: ${arg} (already have role "${role}")` };
|
|
107
|
+
}
|
|
108
|
+
role = arg;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// CR-PF-F1 (drone-2 Phase F review 2026-05-18T05:04Z): spec rev-2
|
|
113
|
+
// §Error paths mandates an argparse-level error when both --template
|
|
114
|
+
// and --no-template are passed. Catch at parse time rather than in
|
|
115
|
+
// the orchestrator so the failure happens before any auth / network /
|
|
116
|
+
// worktree-spawn work.
|
|
117
|
+
if (flags.template !== undefined && flags.noTemplate) {
|
|
118
|
+
return { ok: false, error: '--template and --no-template are mutually exclusive' };
|
|
119
|
+
}
|
|
120
|
+
if (flags.enroll && flags.server === undefined) {
|
|
121
|
+
return { ok: false, error: '--enroll requires --host <host>' };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return { ok: true, role, flags };
|
|
125
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// gh#556 Part 2 — argument parser for `borg launch-all [cube] [flags]` (spec §9.1).
|
|
2
|
+
// Pure: rawArgs → validated LaunchAllArgs | error. Mirror of parse-assimilate-args.
|
|
3
|
+
|
|
4
|
+
export interface LaunchAllFlags {
|
|
5
|
+
mode?: 'tmux' | 'windows' | 'pastelist';
|
|
6
|
+
only?: string;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
cli?: 'claude' | 'codex' | 'opencode';
|
|
9
|
+
noAttach?: boolean;
|
|
10
|
+
yes?: boolean;
|
|
11
|
+
force?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Milliseconds to wait BETWEEN each drone launch, to avoid the per-user/IP
|
|
14
|
+
* rate limiter when a fleet's worth of agents all bootstrap at once
|
|
15
|
+
* (assimilate + regen + roster). 0 disables. Default + env override: see
|
|
16
|
+
* launch-all-cmd (DEFAULT_LAUNCH_DELAY_MS / BORG_LAUNCH_DELAY_MS).
|
|
17
|
+
*/
|
|
18
|
+
launchDelayMs?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface LaunchAllArgs {
|
|
22
|
+
cubeName?: string;
|
|
23
|
+
flags: LaunchAllFlags;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type ParseLaunchAllResult =
|
|
27
|
+
| { ok: true; args: LaunchAllArgs }
|
|
28
|
+
| { ok: false; error: string };
|
|
29
|
+
|
|
30
|
+
const SUPPORTED =
|
|
31
|
+
'--mode <tmux|windows|pastelist>, --only <name>, --dry-run, --cli <claude|codex|opencode>, ' +
|
|
32
|
+
'--no-attach, --yes/-y, --force, --launch-delay <ms>';
|
|
33
|
+
|
|
34
|
+
export function parseLaunchAllArgs(rawArgs: string[]): ParseLaunchAllResult {
|
|
35
|
+
const flags: LaunchAllFlags = {};
|
|
36
|
+
let cubeName: string | undefined;
|
|
37
|
+
|
|
38
|
+
for (let i = 0; i < rawArgs.length; i++) {
|
|
39
|
+
const arg = rawArgs[i];
|
|
40
|
+
switch (arg) {
|
|
41
|
+
case '--mode': {
|
|
42
|
+
const v = rawArgs[++i];
|
|
43
|
+
if (v !== 'tmux' && v !== 'windows' && v !== 'pastelist') {
|
|
44
|
+
return { ok: false, error: `--mode must be one of tmux|windows|pastelist (got: ${v ?? '<missing>'})` };
|
|
45
|
+
}
|
|
46
|
+
flags.mode = v;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case '--only': {
|
|
50
|
+
const v = rawArgs[++i];
|
|
51
|
+
if (v === undefined || v.startsWith('--')) {
|
|
52
|
+
return { ok: false, error: `--only requires a value (role name or drone label)` };
|
|
53
|
+
}
|
|
54
|
+
flags.only = v;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case '--cli': {
|
|
58
|
+
const v = rawArgs[++i];
|
|
59
|
+
if (v !== 'claude' && v !== 'codex' && v !== 'opencode') {
|
|
60
|
+
return { ok: false, error: `--cli must be one of claude|codex|opencode (got: ${v ?? '<missing>'})` };
|
|
61
|
+
}
|
|
62
|
+
flags.cli = v;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case '--launch-delay': {
|
|
66
|
+
const v = rawArgs[++i];
|
|
67
|
+
const n = v === undefined ? NaN : Number(v);
|
|
68
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
69
|
+
return { ok: false, error: `--launch-delay requires a non-negative integer (milliseconds); got: ${v ?? '<missing>'}` };
|
|
70
|
+
}
|
|
71
|
+
flags.launchDelayMs = n;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case '--dry-run':
|
|
75
|
+
flags.dryRun = true;
|
|
76
|
+
break;
|
|
77
|
+
case '--no-attach':
|
|
78
|
+
flags.noAttach = true;
|
|
79
|
+
break;
|
|
80
|
+
case '--yes':
|
|
81
|
+
case '-y':
|
|
82
|
+
flags.yes = true;
|
|
83
|
+
break;
|
|
84
|
+
case '--force':
|
|
85
|
+
flags.force = true;
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
if (arg.startsWith('-')) {
|
|
89
|
+
return { ok: false, error: `unknown flag: ${arg}. Supported: ${SUPPORTED}` };
|
|
90
|
+
}
|
|
91
|
+
if (cubeName !== undefined) {
|
|
92
|
+
return { ok: false, error: `unexpected extra argument: ${arg}` };
|
|
93
|
+
}
|
|
94
|
+
cubeName = arg;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return { ok: true, args: { cubeName, flags } };
|
|
100
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Pure builder for the post-install banner text. Kept separate from
|
|
2
|
+
// postinstall.ts (which is a side-effectful entry script that runs detection
|
|
3
|
+
// + console output + process.exit on import) so the message content is unit-
|
|
4
|
+
// testable without triggering those side effects.
|
|
5
|
+
//
|
|
6
|
+
// gh#653 B1: a non-expert who installs borgmcp WITHOUT an agent CLI (Claude
|
|
7
|
+
// Code / Codex) present would otherwise be sent straight to "Next step: borg
|
|
8
|
+
// setup", which dead-ends at "No supported agent CLI found". When no agent CLI
|
|
9
|
+
// is detected, surface the install-an-agent-CLI step FIRST so the banner never
|
|
10
|
+
// points the user into a wall.
|
|
11
|
+
|
|
12
|
+
export function composeInstallBanner(hasAgentCli: boolean): string {
|
|
13
|
+
const lines = [
|
|
14
|
+
'',
|
|
15
|
+
'╔════════════════════════════════════╗',
|
|
16
|
+
'║ ◼ Borg MCP Installed ◼ ║',
|
|
17
|
+
'╚════════════════════════════════════╝',
|
|
18
|
+
'',
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
if (!hasAgentCli) {
|
|
22
|
+
lines.push(
|
|
23
|
+
'⚠ No agent CLI detected. Borg runs on top of Claude Code or Codex —',
|
|
24
|
+
' install one first:',
|
|
25
|
+
' Claude Code: https://claude.ai/download',
|
|
26
|
+
' Codex: https://developers.openai.com/codex',
|
|
27
|
+
'',
|
|
28
|
+
'Then run:',
|
|
29
|
+
' borg setup',
|
|
30
|
+
'',
|
|
31
|
+
);
|
|
32
|
+
} else {
|
|
33
|
+
lines.push('Next step:', ' borg setup', '');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Post-install script
|
|
4
|
+
*
|
|
5
|
+
* Detects local vs global installation and rejects local installs.
|
|
6
|
+
* gh#653 B1: also detects whether an agent CLI (Claude Code / Codex) is present
|
|
7
|
+
* and adjusts the "next step" banner so a user with no agent CLI is told to
|
|
8
|
+
* install one FIRST rather than being sent into `borg setup`'s dead-end.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { detectCliAvailability, installedCliNames } from './cli-platform.js';
|
|
12
|
+
import { composeInstallBanner } from './postinstall-banner.js';
|
|
13
|
+
|
|
14
|
+
// Check if this is a local install (npm_config_global is not set)
|
|
15
|
+
const isGlobal = process.env.npm_config_global === 'true';
|
|
16
|
+
|
|
17
|
+
if (!isGlobal) {
|
|
18
|
+
console.error('\n◼ Error: borg must be installed globally\n');
|
|
19
|
+
console.error('Please install with:');
|
|
20
|
+
console.error(' npm install -g borgmcp\n');
|
|
21
|
+
console.error('Local installation is not supported.\n');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Global install — show instructions. Detect agent-CLI presence so the banner
|
|
26
|
+
// never points a user with no Claude Code / Codex at `borg setup` (which would
|
|
27
|
+
// dead-end). On any detection error, default to assuming an agent CLI is
|
|
28
|
+
// present so we never emit a false "install an agent CLI" warning.
|
|
29
|
+
let hasAgentCli = true;
|
|
30
|
+
try {
|
|
31
|
+
hasAgentCli = installedCliNames(detectCliAvailability()).length > 0;
|
|
32
|
+
} catch {
|
|
33
|
+
hasAgentCli = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
console.log(composeInstallBanner(hasAgentCli));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Environment contract for the short-lived `borg assimilate` MCP readiness child. */
|
|
2
|
+
export const MCP_READINESS_PROBE_ENV = 'BORG_MCP_READINESS_PROBE';
|
|
3
|
+
|
|
4
|
+
export function isMcpReadinessProbe(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
5
|
+
return env[MCP_READINESS_PROBE_ENV] === '1';
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function readinessProbeEnv(
|
|
9
|
+
env: NodeJS.ProcessEnv = process.env
|
|
10
|
+
): NodeJS.ProcessEnv {
|
|
11
|
+
return { ...env, [MCP_READINESS_PROBE_ENV]: '1' };
|
|
12
|
+
}
|