@apralabs/apra-fleet 0.2.2
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/LICENSE +182 -0
- package/README.md +324 -0
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +210 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/config.d.ts +30 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +157 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/install.d.ts +37 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +630 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/secret.d.ts +2 -0
- package/dist/cli/secret.d.ts.map +1 -0
- package/dist/cli/secret.js +366 -0
- package/dist/cli/secret.js.map +1 -0
- package/dist/cli/uninstall.d.ts +2 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +312 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/update.d.ts +2 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +105 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/delivery-mode.d.ts +19 -0
- package/dist/delivery-mode.d.ts.map +1 -0
- package/dist/delivery-mode.js +26 -0
- package/dist/delivery-mode.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +272 -0
- package/dist/index.js.map +1 -0
- package/dist/onboarding/text.d.ts +83 -0
- package/dist/onboarding/text.d.ts.map +1 -0
- package/dist/onboarding/text.js +126 -0
- package/dist/onboarding/text.js.map +1 -0
- package/dist/os/index.d.ts +9 -0
- package/dist/os/index.d.ts.map +1 -0
- package/dist/os/index.js +16 -0
- package/dist/os/index.js.map +1 -0
- package/dist/os/linux.d.ts +50 -0
- package/dist/os/linux.d.ts.map +1 -0
- package/dist/os/linux.js +244 -0
- package/dist/os/linux.js.map +1 -0
- package/dist/os/macos.d.ts +12 -0
- package/dist/os/macos.d.ts.map +1 -0
- package/dist/os/macos.js +41 -0
- package/dist/os/macos.js.map +1 -0
- package/dist/os/os-commands.d.ts +47 -0
- package/dist/os/os-commands.d.ts.map +1 -0
- package/dist/os/os-commands.js +3 -0
- package/dist/os/os-commands.js.map +1 -0
- package/dist/os/windows-wrapper.d.ts +6 -0
- package/dist/os/windows-wrapper.d.ts.map +1 -0
- package/dist/os/windows-wrapper.js +9 -0
- package/dist/os/windows-wrapper.js.map +1 -0
- package/dist/os/windows.d.ts +44 -0
- package/dist/os/windows.d.ts.map +1 -0
- package/dist/os/windows.js +269 -0
- package/dist/os/windows.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +4 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/agy.d.ts +41 -0
- package/dist/providers/agy.d.ts.map +1 -0
- package/dist/providers/agy.js +208 -0
- package/dist/providers/agy.js.map +1 -0
- package/dist/providers/claude.d.ts +40 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +178 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex.d.ts +44 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +173 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/copilot.d.ts +40 -0
- package/dist/providers/copilot.d.ts.map +1 -0
- package/dist/providers/copilot.js +172 -0
- package/dist/providers/copilot.js.map +1 -0
- package/dist/providers/gemini.d.ts +41 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +192 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +27 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/provider.d.ts +85 -0
- package/dist/providers/provider.d.ts.map +1 -0
- package/dist/providers/provider.js +21 -0
- package/dist/providers/provider.js.map +1 -0
- package/dist/services/auth-socket.d.ts +87 -0
- package/dist/services/auth-socket.d.ts.map +1 -0
- package/dist/services/auth-socket.js +684 -0
- package/dist/services/auth-socket.js.map +1 -0
- package/dist/services/auth-web.d.ts +31 -0
- package/dist/services/auth-web.d.ts.map +1 -0
- package/dist/services/auth-web.js +202 -0
- package/dist/services/auth-web.js.map +1 -0
- package/dist/services/cloud/activity.d.ts +16 -0
- package/dist/services/cloud/activity.d.ts.map +1 -0
- package/dist/services/cloud/activity.js +61 -0
- package/dist/services/cloud/activity.js.map +1 -0
- package/dist/services/cloud/aws.d.ts +24 -0
- package/dist/services/cloud/aws.d.ts.map +1 -0
- package/dist/services/cloud/aws.js +114 -0
- package/dist/services/cloud/aws.js.map +1 -0
- package/dist/services/cloud/cost.d.ts +46 -0
- package/dist/services/cloud/cost.d.ts.map +1 -0
- package/dist/services/cloud/cost.js +161 -0
- package/dist/services/cloud/cost.js.map +1 -0
- package/dist/services/cloud/idle-manager.d.ts +20 -0
- package/dist/services/cloud/idle-manager.d.ts.map +1 -0
- package/dist/services/cloud/idle-manager.js +103 -0
- package/dist/services/cloud/idle-manager.js.map +1 -0
- package/dist/services/cloud/lifecycle.d.ts +14 -0
- package/dist/services/cloud/lifecycle.d.ts.map +1 -0
- package/dist/services/cloud/lifecycle.js +128 -0
- package/dist/services/cloud/lifecycle.js.map +1 -0
- package/dist/services/cloud/task-wrapper.d.ts +30 -0
- package/dist/services/cloud/task-wrapper.d.ts.map +1 -0
- package/dist/services/cloud/task-wrapper.js +116 -0
- package/dist/services/cloud/task-wrapper.js.map +1 -0
- package/dist/services/cloud/types.d.ts +26 -0
- package/dist/services/cloud/types.d.ts.map +1 -0
- package/dist/services/cloud/types.js +2 -0
- package/dist/services/cloud/types.js.map +1 -0
- package/dist/services/credential-cleanup.d.ts +4 -0
- package/dist/services/credential-cleanup.d.ts.map +1 -0
- package/dist/services/credential-cleanup.js +61 -0
- package/dist/services/credential-cleanup.js.map +1 -0
- package/dist/services/credential-store.d.ts +56 -0
- package/dist/services/credential-store.d.ts.map +1 -0
- package/dist/services/credential-store.js +280 -0
- package/dist/services/credential-store.js.map +1 -0
- package/dist/services/file-transfer.d.ts +22 -0
- package/dist/services/file-transfer.d.ts.map +1 -0
- package/dist/services/file-transfer.js +14 -0
- package/dist/services/file-transfer.js.map +1 -0
- package/dist/services/git-config.d.ts +6 -0
- package/dist/services/git-config.d.ts.map +1 -0
- package/dist/services/git-config.js +31 -0
- package/dist/services/git-config.js.map +1 -0
- package/dist/services/github-app.d.ts +30 -0
- package/dist/services/github-app.d.ts.map +1 -0
- package/dist/services/github-app.js +96 -0
- package/dist/services/github-app.js.map +1 -0
- package/dist/services/icons.d.ts +16 -0
- package/dist/services/icons.d.ts.map +1 -0
- package/dist/services/icons.js +67 -0
- package/dist/services/icons.js.map +1 -0
- package/dist/services/known-hosts.d.ts +23 -0
- package/dist/services/known-hosts.d.ts.map +1 -0
- package/dist/services/known-hosts.js +86 -0
- package/dist/services/known-hosts.js.map +1 -0
- package/dist/services/onboarding.d.ts +68 -0
- package/dist/services/onboarding.d.ts.map +1 -0
- package/dist/services/onboarding.js +205 -0
- package/dist/services/onboarding.js.map +1 -0
- package/dist/services/registry.d.ts +16 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/services/registry.js +156 -0
- package/dist/services/registry.js.map +1 -0
- package/dist/services/sftp.d.ts +16 -0
- package/dist/services/sftp.d.ts.map +1 -0
- package/dist/services/sftp.js +104 -0
- package/dist/services/sftp.js.map +1 -0
- package/dist/services/ssh.d.ts +29 -0
- package/dist/services/ssh.d.ts.map +1 -0
- package/dist/services/ssh.js +297 -0
- package/dist/services/ssh.js.map +1 -0
- package/dist/services/stall/find-log-file.d.ts +2 -0
- package/dist/services/stall/find-log-file.d.ts.map +1 -0
- package/dist/services/stall/find-log-file.js +153 -0
- package/dist/services/stall/find-log-file.js.map +1 -0
- package/dist/services/stall/index.d.ts +4 -0
- package/dist/services/stall/index.d.ts.map +1 -0
- package/dist/services/stall/index.js +4 -0
- package/dist/services/stall/index.js.map +1 -0
- package/dist/services/stall/log-path-resolver.d.ts +4 -0
- package/dist/services/stall/log-path-resolver.d.ts.map +1 -0
- package/dist/services/stall/log-path-resolver.js +32 -0
- package/dist/services/stall/log-path-resolver.js.map +1 -0
- package/dist/services/stall/log-path-resolver.test.d.ts +2 -0
- package/dist/services/stall/log-path-resolver.test.d.ts.map +1 -0
- package/dist/services/stall/log-path-resolver.test.js +76 -0
- package/dist/services/stall/log-path-resolver.test.js.map +1 -0
- package/dist/services/stall/read-log-tail.d.ts +6 -0
- package/dist/services/stall/read-log-tail.d.ts.map +1 -0
- package/dist/services/stall/read-log-tail.js +44 -0
- package/dist/services/stall/read-log-tail.js.map +1 -0
- package/dist/services/stall/stall-detector.d.ts +25 -0
- package/dist/services/stall/stall-detector.d.ts.map +1 -0
- package/dist/services/stall/stall-detector.js +153 -0
- package/dist/services/stall/stall-detector.js.map +1 -0
- package/dist/services/stall/stall-poller.d.ts +6 -0
- package/dist/services/stall/stall-poller.d.ts.map +1 -0
- package/dist/services/stall/stall-poller.js +75 -0
- package/dist/services/stall/stall-poller.js.map +1 -0
- package/dist/services/stall/time-utils.d.ts +4 -0
- package/dist/services/stall/time-utils.d.ts.map +1 -0
- package/dist/services/stall/time-utils.js +22 -0
- package/dist/services/stall/time-utils.js.map +1 -0
- package/dist/services/statusline.d.ts +10 -0
- package/dist/services/statusline.d.ts.map +1 -0
- package/dist/services/statusline.js +84 -0
- package/dist/services/statusline.js.map +1 -0
- package/dist/services/strategy.d.ts +16 -0
- package/dist/services/strategy.d.ts.map +1 -0
- package/dist/services/strategy.js +241 -0
- package/dist/services/strategy.js.map +1 -0
- package/dist/services/task-cleanup.d.ts +3 -0
- package/dist/services/task-cleanup.d.ts.map +1 -0
- package/dist/services/task-cleanup.js +81 -0
- package/dist/services/task-cleanup.js.map +1 -0
- package/dist/services/update-check.d.ts +15 -0
- package/dist/services/update-check.d.ts.map +1 -0
- package/dist/services/update-check.js +67 -0
- package/dist/services/update-check.js.map +1 -0
- package/dist/services/user-config.d.ts +12 -0
- package/dist/services/user-config.d.ts.map +1 -0
- package/dist/services/user-config.js +73 -0
- package/dist/services/user-config.js.map +1 -0
- package/dist/services/vcs/azure-devops.d.ts +7 -0
- package/dist/services/vcs/azure-devops.d.ts.map +1 -0
- package/dist/services/vcs/azure-devops.js +38 -0
- package/dist/services/vcs/azure-devops.js.map +1 -0
- package/dist/services/vcs/bitbucket.d.ts +6 -0
- package/dist/services/vcs/bitbucket.d.ts.map +1 -0
- package/dist/services/vcs/bitbucket.js +31 -0
- package/dist/services/vcs/bitbucket.js.map +1 -0
- package/dist/services/vcs/constants.d.ts +2 -0
- package/dist/services/vcs/constants.d.ts.map +1 -0
- package/dist/services/vcs/constants.js +6 -0
- package/dist/services/vcs/constants.js.map +1 -0
- package/dist/services/vcs/github.d.ts +6 -0
- package/dist/services/vcs/github.d.ts.map +1 -0
- package/dist/services/vcs/github.js +81 -0
- package/dist/services/vcs/github.js.map +1 -0
- package/dist/services/vcs/types.d.ts +52 -0
- package/dist/services/vcs/types.d.ts.map +1 -0
- package/dist/services/vcs/types.js +8 -0
- package/dist/services/vcs/types.js.map +1 -0
- package/dist/smoke-test.d.ts +10 -0
- package/dist/smoke-test.d.ts.map +1 -0
- package/dist/smoke-test.js +102 -0
- package/dist/smoke-test.js.map +1 -0
- package/dist/tools/check-status.d.ts +11 -0
- package/dist/tools/check-status.d.ts.map +1 -0
- package/dist/tools/check-status.js +247 -0
- package/dist/tools/check-status.js.map +1 -0
- package/dist/tools/cloud-control.d.ts +17 -0
- package/dist/tools/cloud-control.d.ts.map +1 -0
- package/dist/tools/cloud-control.js +102 -0
- package/dist/tools/cloud-control.js.map +1 -0
- package/dist/tools/compose-permissions.d.ts +26 -0
- package/dist/tools/compose-permissions.d.ts.map +1 -0
- package/dist/tools/compose-permissions.js +217 -0
- package/dist/tools/compose-permissions.js.map +1 -0
- package/dist/tools/credential-store-delete.d.ts +11 -0
- package/dist/tools/credential-store-delete.d.ts.map +1 -0
- package/dist/tools/credential-store-delete.js +15 -0
- package/dist/tools/credential-store-delete.js.map +1 -0
- package/dist/tools/credential-store-list.d.ts +4 -0
- package/dist/tools/credential-store-list.d.ts.map +1 -0
- package/dist/tools/credential-store-list.js +30 -0
- package/dist/tools/credential-store-list.js.map +1 -0
- package/dist/tools/credential-store-set.d.ts +26 -0
- package/dist/tools/credential-store-set.d.ts.map +1 -0
- package/dist/tools/credential-store-set.js +28 -0
- package/dist/tools/credential-store-set.js.map +1 -0
- package/dist/tools/credential-store-update.d.ts +20 -0
- package/dist/tools/credential-store-update.d.ts.map +1 -0
- package/dist/tools/credential-store-update.js +38 -0
- package/dist/tools/credential-store-update.js.map +1 -0
- package/dist/tools/execute-command.d.ts +33 -0
- package/dist/tools/execute-command.d.ts.map +1 -0
- package/dist/tools/execute-command.js +231 -0
- package/dist/tools/execute-command.js.map +1 -0
- package/dist/tools/execute-prompt.d.ts +36 -0
- package/dist/tools/execute-prompt.d.ts.map +1 -0
- package/dist/tools/execute-prompt.js +310 -0
- package/dist/tools/execute-prompt.js.map +1 -0
- package/dist/tools/list-members.d.ts +11 -0
- package/dist/tools/list-members.d.ts.map +1 -0
- package/dist/tools/list-members.js +108 -0
- package/dist/tools/list-members.js.map +1 -0
- package/dist/tools/member-detail.d.ts +17 -0
- package/dist/tools/member-detail.d.ts.map +1 -0
- package/dist/tools/member-detail.js +263 -0
- package/dist/tools/member-detail.js.map +1 -0
- package/dist/tools/monitor-task.d.ts +20 -0
- package/dist/tools/monitor-task.d.ts.map +1 -0
- package/dist/tools/monitor-task.js +89 -0
- package/dist/tools/monitor-task.js.map +1 -0
- package/dist/tools/provision-auth.d.ts +17 -0
- package/dist/tools/provision-auth.d.ts.map +1 -0
- package/dist/tools/provision-auth.js +256 -0
- package/dist/tools/provision-auth.js.map +1 -0
- package/dist/tools/provision-vcs-auth.d.ts +50 -0
- package/dist/tools/provision-vcs-auth.d.ts.map +1 -0
- package/dist/tools/provision-vcs-auth.js +187 -0
- package/dist/tools/provision-vcs-auth.js.map +1 -0
- package/dist/tools/receive-files.d.ts +20 -0
- package/dist/tools/receive-files.d.ts.map +1 -0
- package/dist/tools/receive-files.js +82 -0
- package/dist/tools/receive-files.js.map +1 -0
- package/dist/tools/register-member.d.ts +74 -0
- package/dist/tools/register-member.d.ts.map +1 -0
- package/dist/tools/register-member.js +310 -0
- package/dist/tools/register-member.js.map +1 -0
- package/dist/tools/remove-member.d.ts +17 -0
- package/dist/tools/remove-member.d.ts.map +1 -0
- package/dist/tools/remove-member.js +126 -0
- package/dist/tools/remove-member.js.map +1 -0
- package/dist/tools/revoke-vcs-auth.d.ts +23 -0
- package/dist/tools/revoke-vcs-auth.d.ts.map +1 -0
- package/dist/tools/revoke-vcs-auth.js +55 -0
- package/dist/tools/revoke-vcs-auth.js.map +1 -0
- package/dist/tools/send-files.d.ts +20 -0
- package/dist/tools/send-files.d.ts.map +1 -0
- package/dist/tools/send-files.js +103 -0
- package/dist/tools/send-files.js.map +1 -0
- package/dist/tools/setup-git-app.d.ts +17 -0
- package/dist/tools/setup-git-app.d.ts.map +1 -0
- package/dist/tools/setup-git-app.js +89 -0
- package/dist/tools/setup-git-app.js.map +1 -0
- package/dist/tools/setup-ssh-key.d.ts +14 -0
- package/dist/tools/setup-ssh-key.d.ts.map +1 -0
- package/dist/tools/setup-ssh-key.js +119 -0
- package/dist/tools/setup-ssh-key.js.map +1 -0
- package/dist/tools/shutdown-server.d.ts +4 -0
- package/dist/tools/shutdown-server.d.ts.map +1 -0
- package/dist/tools/shutdown-server.js +9 -0
- package/dist/tools/shutdown-server.js.map +1 -0
- package/dist/tools/stop-prompt.d.ts +14 -0
- package/dist/tools/stop-prompt.d.ts.map +1 -0
- package/dist/tools/stop-prompt.js +44 -0
- package/dist/tools/stop-prompt.js.map +1 -0
- package/dist/tools/update-agent-cli.d.ts +17 -0
- package/dist/tools/update-agent-cli.d.ts.map +1 -0
- package/dist/tools/update-agent-cli.js +110 -0
- package/dist/tools/update-agent-cli.js.map +1 -0
- package/dist/tools/update-member.d.ts +77 -0
- package/dist/tools/update-member.d.ts.map +1 -0
- package/dist/tools/update-member.js +202 -0
- package/dist/tools/update-member.js.map +1 -0
- package/dist/tools/version.d.ts +4 -0
- package/dist/tools/version.d.ts.map +1 -0
- package/dist/tools/version.js +7 -0
- package/dist/tools/version.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/agent-helpers.d.ts +41 -0
- package/dist/utils/agent-helpers.d.ts.map +1 -0
- package/dist/utils/agent-helpers.js +84 -0
- package/dist/utils/agent-helpers.js.map +1 -0
- package/dist/utils/ansi.d.ts +6 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +20 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/auth-env.d.ts +8 -0
- package/dist/utils/auth-env.d.ts.map +1 -0
- package/dist/utils/auth-env.js +30 -0
- package/dist/utils/auth-env.js.map +1 -0
- package/dist/utils/collect-secret.d.ts +2 -0
- package/dist/utils/collect-secret.d.ts.map +1 -0
- package/dist/utils/collect-secret.js +80 -0
- package/dist/utils/collect-secret.js.map +1 -0
- package/dist/utils/credential-validation.d.ts +13 -0
- package/dist/utils/credential-validation.d.ts.map +1 -0
- package/dist/utils/credential-validation.js +35 -0
- package/dist/utils/credential-validation.js.map +1 -0
- package/dist/utils/crypto.d.ts +3 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +61 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/deep-merge.d.ts +3 -0
- package/dist/utils/deep-merge.d.ts.map +1 -0
- package/dist/utils/deep-merge.js +23 -0
- package/dist/utils/deep-merge.js.map +1 -0
- package/dist/utils/file-permissions.d.ts +8 -0
- package/dist/utils/file-permissions.d.ts.map +1 -0
- package/dist/utils/file-permissions.js +13 -0
- package/dist/utils/file-permissions.js.map +1 -0
- package/dist/utils/gpu-parser.d.ts +6 -0
- package/dist/utils/gpu-parser.d.ts.map +1 -0
- package/dist/utils/gpu-parser.js +15 -0
- package/dist/utils/gpu-parser.js.map +1 -0
- package/dist/utils/log-helpers.d.ts +29 -0
- package/dist/utils/log-helpers.d.ts.map +1 -0
- package/dist/utils/log-helpers.js +128 -0
- package/dist/utils/log-helpers.js.map +1 -0
- package/dist/utils/oob-timeout.d.ts +2 -0
- package/dist/utils/oob-timeout.d.ts.map +1 -0
- package/dist/utils/oob-timeout.js +2 -0
- package/dist/utils/oob-timeout.js.map +1 -0
- package/dist/utils/pid-helpers.d.ts +11 -0
- package/dist/utils/pid-helpers.d.ts.map +1 -0
- package/dist/utils/pid-helpers.js +21 -0
- package/dist/utils/pid-helpers.js.map +1 -0
- package/dist/utils/platform.d.ts +13 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +60 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/prompt-errors.d.ts +5 -0
- package/dist/utils/prompt-errors.d.ts.map +1 -0
- package/dist/utils/prompt-errors.js +15 -0
- package/dist/utils/prompt-errors.js.map +1 -0
- package/dist/utils/resolve-member.d.ts +18 -0
- package/dist/utils/resolve-member.d.ts.map +1 -0
- package/dist/utils/resolve-member.js +23 -0
- package/dist/utils/resolve-member.js.map +1 -0
- package/dist/utils/secure-input.d.ts +6 -0
- package/dist/utils/secure-input.d.ts.map +1 -0
- package/dist/utils/secure-input.js +60 -0
- package/dist/utils/secure-input.js.map +1 -0
- package/dist/utils/shell-escape.d.ts +43 -0
- package/dist/utils/shell-escape.d.ts.map +1 -0
- package/dist/utils/shell-escape.js +67 -0
- package/dist/utils/shell-escape.js.map +1 -0
- package/dist/utils/ssh-error-messages.d.ts +5 -0
- package/dist/utils/ssh-error-messages.d.ts.map +1 -0
- package/dist/utils/ssh-error-messages.js +20 -0
- package/dist/utils/ssh-error-messages.js.map +1 -0
- package/dist/version.d.ts +18 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +101 -0
- package/dist/version.js.map +1 -0
- package/hooks/hooks-config.json +15 -0
- package/hooks/post-register-member.sh +10 -0
- package/package.json +82 -0
- package/scripts/agy-settings-merge.js +27 -0
- package/scripts/agy-transcript-reader.js +62 -0
- package/scripts/fleet-statusline.sh +43 -0
- package/skills/fleet/SKILL.md +262 -0
- package/skills/fleet/auth-azdevops.md +72 -0
- package/skills/fleet/auth-bitbucket.md +65 -0
- package/skills/fleet/auth-github.md +86 -0
- package/skills/fleet/beads.md +90 -0
- package/skills/fleet/onboarding.md +92 -0
- package/skills/fleet/permissions.md +23 -0
- package/skills/fleet/profiles/base-dev.json +18 -0
- package/skills/fleet/profiles/base-reviewer.json +14 -0
- package/skills/fleet/profiles/cpp.json +4 -0
- package/skills/fleet/profiles/dotnet.json +4 -0
- package/skills/fleet/profiles/go.json +4 -0
- package/skills/fleet/profiles/jvm.json +4 -0
- package/skills/fleet/profiles/node.json +4 -0
- package/skills/fleet/profiles/python.json +4 -0
- package/skills/fleet/profiles/rust.json +4 -0
- package/skills/fleet/profiles/tpl-permissions.json +5 -0
- package/skills/fleet/skill-matrix.md +34 -0
- package/skills/fleet/troubleshooting.md +13 -0
- package/skills/pm/SKILL.md +110 -0
- package/skills/pm/backlog-item.md +65 -0
- package/skills/pm/beads.md +192 -0
- package/skills/pm/cleanup.md +15 -0
- package/skills/pm/context-file.md +40 -0
- package/skills/pm/doer-reviewer.md +123 -0
- package/skills/pm/init.md +25 -0
- package/skills/pm/multi-pair-sprint.md +64 -0
- package/skills/pm/plan-prompt.md +94 -0
- package/skills/pm/simple-sprint.md +42 -0
- package/skills/pm/single-pair-sprint.md +178 -0
- package/skills/pm/tpl-deploy.md +24 -0
- package/skills/pm/tpl-design.md +29 -0
- package/skills/pm/tpl-doer.md +43 -0
- package/skills/pm/tpl-plan.md +72 -0
- package/skills/pm/tpl-pm.md +2 -0
- package/skills/pm/tpl-progress.json +28 -0
- package/skills/pm/tpl-projects.md +4 -0
- package/skills/pm/tpl-requirements.md +21 -0
- package/skills/pm/tpl-reviewer-plan.md +53 -0
- package/skills/pm/tpl-reviewer.md +72 -0
- package/skills/pm/tpl-status.md +29 -0
- package/version.json +3 -0
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { execSync, execFileSync } from 'node:child_process';
|
|
5
|
+
import { serverVersion } from '../version.js';
|
|
6
|
+
import { BIN_DIR, HOOKS_DIR, SCRIPTS_DIR, getProviderInstallConfig, readConfig, writeConfig, writeInstallConfig, PROVIDER_STANDARD_MODELS } from './config.js';
|
|
7
|
+
// Detect SEA mode
|
|
8
|
+
let _seaOverride = null;
|
|
9
|
+
/** Override isSea() result -- for tests only. Pass null to restore default. */
|
|
10
|
+
export function _setSeaOverride(v) { _seaOverride = v; }
|
|
11
|
+
export function isSea() {
|
|
12
|
+
if (_seaOverride !== null)
|
|
13
|
+
return _seaOverride;
|
|
14
|
+
try {
|
|
15
|
+
const sea = require('node:sea');
|
|
16
|
+
return sea.isSea();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect npm global install mode: the script runs from a node_modules-managed
|
|
24
|
+
* location (npm bin) rather than the SEA binary or the project's own dev dist.
|
|
25
|
+
* Returns false under SEA. Distinguishes npm global installs from `npm test` /
|
|
26
|
+
* dev-mode runs (which execute the project's own dist/index.js).
|
|
27
|
+
*
|
|
28
|
+
* Key insight: when npm installs globally, findProjectRoot() resolves to the
|
|
29
|
+
* npm package's root (where version.json is), which has no .git/. Dev mode has
|
|
30
|
+
* a .git/ directory at or above the root. This allows us to distinguish them.
|
|
31
|
+
*/
|
|
32
|
+
export function isNpmGlobalInstall() {
|
|
33
|
+
if (isSea())
|
|
34
|
+
return false;
|
|
35
|
+
const scriptPath = process.argv[1];
|
|
36
|
+
if (!scriptPath || !scriptPath.includes('node_modules'))
|
|
37
|
+
return false;
|
|
38
|
+
// Check if the resolved project root is a git repo (has .git). If not, we
|
|
39
|
+
// assume npm global install mode. This is more reliable than comparing paths
|
|
40
|
+
// because npm package root and git repo root differ when npm is global.
|
|
41
|
+
try {
|
|
42
|
+
const projectRoot = findProjectRoot();
|
|
43
|
+
const hasGit = fs.existsSync(path.join(projectRoot, '.git'));
|
|
44
|
+
return !hasGit; // npm mode if no .git at project root
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// If we can't find a project root, assume npm (not in a known git repo)
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function getSeaAsset(key) {
|
|
52
|
+
const sea = require('node:sea');
|
|
53
|
+
const buf = sea.getAsset(key);
|
|
54
|
+
// getAsset returns ArrayBuffer — decode to string
|
|
55
|
+
return new TextDecoder().decode(buf);
|
|
56
|
+
}
|
|
57
|
+
function getSeaAssetBuffer(key) {
|
|
58
|
+
const sea = require('node:sea');
|
|
59
|
+
return Buffer.from(sea.getAsset(key));
|
|
60
|
+
}
|
|
61
|
+
import { fileURLToPath } from 'url';
|
|
62
|
+
import { dirname } from 'path';
|
|
63
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
64
|
+
const __dirname = dirname(__filename);
|
|
65
|
+
// Find project root — works for both tsc (dist/cli/install.js) and esbuild (dist/sea-bundle.cjs)
|
|
66
|
+
function findProjectRoot() {
|
|
67
|
+
let dir = __dirname;
|
|
68
|
+
for (let i = 0; i < 5; i++) {
|
|
69
|
+
if (fs.existsSync(path.join(dir, 'version.json')))
|
|
70
|
+
return dir;
|
|
71
|
+
dir = path.dirname(dir);
|
|
72
|
+
}
|
|
73
|
+
throw new Error('Cannot find project root (version.json not found)');
|
|
74
|
+
}
|
|
75
|
+
// Collect files recursively — used by dev-mode manifest generation
|
|
76
|
+
function collectFilesRec(dir, base, rootBase) {
|
|
77
|
+
const effectiveRootBase = rootBase ?? base;
|
|
78
|
+
const results = {};
|
|
79
|
+
if (!fs.existsSync(dir))
|
|
80
|
+
return results;
|
|
81
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
82
|
+
const fullPath = path.join(dir, entry.name);
|
|
83
|
+
const relPath = path.join(base, entry.name).replace(/\\/g, '/');
|
|
84
|
+
if (entry.isDirectory()) {
|
|
85
|
+
Object.assign(results, collectFilesRec(fullPath, relPath, effectiveRootBase));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
results[path.relative(effectiveRootBase, relPath).replace(/\\/g, '/')] = relPath;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return results;
|
|
92
|
+
}
|
|
93
|
+
function buildDevManifest(root) {
|
|
94
|
+
const hooks = {};
|
|
95
|
+
for (const entry of fs.readdirSync(path.join(root, 'hooks'))) {
|
|
96
|
+
hooks[entry] = `hooks/${entry}`;
|
|
97
|
+
}
|
|
98
|
+
const scripts = {};
|
|
99
|
+
for (const entry of fs.readdirSync(path.join(root, 'scripts'))) {
|
|
100
|
+
if (entry.endsWith('.mjs'))
|
|
101
|
+
continue; // skip build scripts
|
|
102
|
+
scripts[entry] = `scripts/${entry}`;
|
|
103
|
+
}
|
|
104
|
+
const skills = collectFilesRec(path.join(root, 'skills', 'pm'), 'skills/pm');
|
|
105
|
+
const fleetSkills = collectFilesRec(path.join(root, 'skills', 'fleet'), 'skills/fleet');
|
|
106
|
+
const vf = JSON.parse(fs.readFileSync(path.join(root, 'version.json'), 'utf-8'));
|
|
107
|
+
return { version: vf.version, hooks, scripts, skills, fleetSkills };
|
|
108
|
+
}
|
|
109
|
+
let _manifestOverride = null;
|
|
110
|
+
/** Inject a manifest for tests — avoids SEA asset extraction. Pass null to restore default. */
|
|
111
|
+
export function _setManifestOverride(m) { _manifestOverride = m; }
|
|
112
|
+
function loadManifest() {
|
|
113
|
+
if (_manifestOverride !== null)
|
|
114
|
+
return _manifestOverride;
|
|
115
|
+
if (isSea()) {
|
|
116
|
+
return JSON.parse(getSeaAsset('manifest.json'));
|
|
117
|
+
}
|
|
118
|
+
// Dev mode: generate manifest on-the-fly from project files
|
|
119
|
+
return buildDevManifest(findProjectRoot());
|
|
120
|
+
}
|
|
121
|
+
function extractAsset(key) {
|
|
122
|
+
if (isSea()) {
|
|
123
|
+
return getSeaAsset(key);
|
|
124
|
+
}
|
|
125
|
+
const root = findProjectRoot();
|
|
126
|
+
return fs.readFileSync(path.join(root, key), 'utf-8');
|
|
127
|
+
}
|
|
128
|
+
function extractAssetBuffer(key) {
|
|
129
|
+
if (isSea()) {
|
|
130
|
+
return getSeaAssetBuffer(key);
|
|
131
|
+
}
|
|
132
|
+
const root = findProjectRoot();
|
|
133
|
+
return fs.readFileSync(path.join(root, key));
|
|
134
|
+
}
|
|
135
|
+
function clearDirSync(dir) {
|
|
136
|
+
if (fs.existsSync(dir)) {
|
|
137
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function copyDirSync(src, dest) {
|
|
141
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
142
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
143
|
+
const s = path.join(src, entry.name);
|
|
144
|
+
const d = path.join(dest, entry.name);
|
|
145
|
+
if (entry.isDirectory()) {
|
|
146
|
+
copyDirSync(s, d);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
fs.copyFileSync(s, d);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function writeAssetFile(destPath, content) {
|
|
154
|
+
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
155
|
+
fs.writeFileSync(destPath, content);
|
|
156
|
+
}
|
|
157
|
+
// Gemini CLI uses different hook event names than Claude CLI.
|
|
158
|
+
const GEMINI_HOOK_NAME_MAP = {
|
|
159
|
+
PostToolUse: 'AfterTool',
|
|
160
|
+
PreToolUse: 'BeforeTool',
|
|
161
|
+
UserPromptSubmit: 'BeforeAgent',
|
|
162
|
+
Stop: 'SessionEnd',
|
|
163
|
+
PreCompact: 'PreCompress',
|
|
164
|
+
};
|
|
165
|
+
function mergeHooksConfig(paths, hooksConfig, provider) {
|
|
166
|
+
let settingsFile = paths.settingsFile;
|
|
167
|
+
const isAgy = provider === 'agy';
|
|
168
|
+
let settings = {};
|
|
169
|
+
if (isAgy) {
|
|
170
|
+
const configDir = path.join(os.homedir(), '.gemini', 'config');
|
|
171
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
172
|
+
settingsFile = path.join(configDir, 'hooks.json');
|
|
173
|
+
if (fs.existsSync(settingsFile)) {
|
|
174
|
+
try {
|
|
175
|
+
settings = JSON.parse(fs.readFileSync(settingsFile, 'utf-8'));
|
|
176
|
+
}
|
|
177
|
+
catch { }
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
settings = readConfig(paths);
|
|
182
|
+
}
|
|
183
|
+
settings.hooks = settings.hooks || {};
|
|
184
|
+
for (const [claudeName, hookEntries] of Object.entries(hooksConfig.hooks || {})) {
|
|
185
|
+
const eventName = provider === 'gemini'
|
|
186
|
+
? (GEMINI_HOOK_NAME_MAP[claudeName] ?? claudeName)
|
|
187
|
+
: claudeName;
|
|
188
|
+
// Remove stale Claude-style key if we're writing under a different Gemini name.
|
|
189
|
+
if (provider === 'gemini' && claudeName in GEMINI_HOOK_NAME_MAP && claudeName !== eventName) {
|
|
190
|
+
delete settings.hooks[claudeName];
|
|
191
|
+
}
|
|
192
|
+
settings.hooks[eventName] = settings.hooks[eventName] || [];
|
|
193
|
+
for (const newHook of hookEntries) {
|
|
194
|
+
const idx = settings.hooks[eventName].findIndex((h) => h.matcher === newHook.matcher);
|
|
195
|
+
if (idx >= 0) {
|
|
196
|
+
settings.hooks[eventName][idx] = newHook;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
settings.hooks[eventName].push(newHook);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (isAgy) {
|
|
204
|
+
fs.writeFileSync(settingsFile, JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 });
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
writeConfig(paths, settings);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function mergePermissions(paths) {
|
|
211
|
+
const settings = readConfig(paths);
|
|
212
|
+
const requiredPerms = [
|
|
213
|
+
'mcp__apra-fleet__*',
|
|
214
|
+
'activate_skill(*)',
|
|
215
|
+
'tracker_*',
|
|
216
|
+
'Agent(*)',
|
|
217
|
+
`Read(${paths.skillsDir.replace(/\\/g, '/')}/**)`,
|
|
218
|
+
`Read(${paths.fleetSkillsDir.replace(/\\/g, '/')}/**)`,
|
|
219
|
+
`Read(${path.join(paths.configDir, 'skills').replace(/\\/g, '/')}/**)`,
|
|
220
|
+
];
|
|
221
|
+
settings.permissions = settings.permissions || {};
|
|
222
|
+
settings.permissions.allow = settings.permissions.allow || [];
|
|
223
|
+
const existing = new Set(settings.permissions.allow);
|
|
224
|
+
for (const perm of requiredPerms) {
|
|
225
|
+
if (!existing.has(perm)) {
|
|
226
|
+
settings.permissions.allow.push(perm);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
writeConfig(paths, settings);
|
|
230
|
+
}
|
|
231
|
+
function configureStatusline(paths, scriptPath) {
|
|
232
|
+
const settings = readConfig(paths);
|
|
233
|
+
// Windows: Claude Code can't execute .sh directly — prefix with bash
|
|
234
|
+
const command = process.platform === 'win32' ? `bash "${scriptPath}"` : scriptPath;
|
|
235
|
+
settings.statusLine = {
|
|
236
|
+
type: 'command',
|
|
237
|
+
command,
|
|
238
|
+
};
|
|
239
|
+
writeConfig(paths, settings);
|
|
240
|
+
}
|
|
241
|
+
function mergeGeminiConfig(paths, mcpConfig) {
|
|
242
|
+
const settings = readConfig(paths);
|
|
243
|
+
settings.mcpServers = settings.mcpServers || {};
|
|
244
|
+
settings.mcpServers['apra-fleet'] = {
|
|
245
|
+
...mcpConfig,
|
|
246
|
+
trust: true,
|
|
247
|
+
};
|
|
248
|
+
writeConfig(paths, settings);
|
|
249
|
+
}
|
|
250
|
+
function mergeAgyConfig(paths, mcpConfig) {
|
|
251
|
+
const configDir = path.join(os.homedir(), '.gemini', 'config');
|
|
252
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
253
|
+
const mcpConfigFile = path.join(configDir, 'mcp_config.json');
|
|
254
|
+
let settings = {};
|
|
255
|
+
if (fs.existsSync(mcpConfigFile)) {
|
|
256
|
+
try {
|
|
257
|
+
settings = JSON.parse(fs.readFileSync(mcpConfigFile, 'utf-8'));
|
|
258
|
+
}
|
|
259
|
+
catch { }
|
|
260
|
+
}
|
|
261
|
+
settings.mcpServers = settings.mcpServers || {};
|
|
262
|
+
settings.mcpServers['apra-fleet'] = mcpConfig;
|
|
263
|
+
fs.writeFileSync(mcpConfigFile, JSON.stringify(settings, null, 2) + '\n');
|
|
264
|
+
}
|
|
265
|
+
function writeDefaultModel(paths, standardModel) {
|
|
266
|
+
const settings = readConfig(paths);
|
|
267
|
+
if (!settings.defaultModel) {
|
|
268
|
+
settings.defaultModel = standardModel;
|
|
269
|
+
writeConfig(paths, settings);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function mergeCopilotConfig(paths, mcpConfig) {
|
|
273
|
+
const settings = readConfig(paths);
|
|
274
|
+
settings.mcpServers = settings.mcpServers || {};
|
|
275
|
+
settings.mcpServers['apra-fleet'] = mcpConfig;
|
|
276
|
+
writeConfig(paths, settings);
|
|
277
|
+
}
|
|
278
|
+
function mergeCodexConfig(paths, mcpConfig) {
|
|
279
|
+
const settings = readConfig(paths);
|
|
280
|
+
settings.mcp_servers = settings.mcp_servers || {};
|
|
281
|
+
settings.mcp_servers['apra-fleet'] = {
|
|
282
|
+
command: mcpConfig.command.replace(/\\/g, '/'),
|
|
283
|
+
args: mcpConfig.args.map((a) => a.replace(/\\/g, '/')),
|
|
284
|
+
};
|
|
285
|
+
writeConfig(paths, settings);
|
|
286
|
+
}
|
|
287
|
+
function run(cmd, opts) {
|
|
288
|
+
// Windows needs a shell for .cmd executables (e.g. claude.cmd)
|
|
289
|
+
const shellOpt = process.platform === 'win32' ? { shell: 'cmd.exe' } : {};
|
|
290
|
+
execSync(cmd, { stdio: 'inherit', ...shellOpt, ...opts });
|
|
291
|
+
}
|
|
292
|
+
export function isApraFleetRunning() {
|
|
293
|
+
try {
|
|
294
|
+
if (process.platform === 'win32') {
|
|
295
|
+
const out = execSync('tasklist /FI "IMAGENAME eq apra-fleet.exe" /NH /FO CSV', { encoding: 'utf-8', stdio: 'pipe' });
|
|
296
|
+
const currentPid = process.pid.toString();
|
|
297
|
+
// Each CSV line: "apra-fleet.exe","<PID>","..." — exclude the current installer process
|
|
298
|
+
return out.split('\n').some(line => {
|
|
299
|
+
const match = line.match(/"apra-fleet\.exe","(\d+)"/);
|
|
300
|
+
return match !== null && match[1] !== currentPid;
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// -x = exact name match; installer is apra-fleet-installer-* so won't match;
|
|
305
|
+
// exclude current PID to handle self-update (installed apra-fleet binary running install)
|
|
306
|
+
const out = execSync('pgrep -x apra-fleet', { encoding: 'utf-8', stdio: 'pipe' });
|
|
307
|
+
const currentPid = process.pid.toString();
|
|
308
|
+
return out.split('\n').some(line => line.trim() !== '' && line.trim() !== currentPid);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
export function killApraFleet() {
|
|
316
|
+
if (process.platform === 'win32') {
|
|
317
|
+
execSync('taskkill /F /IM apra-fleet.exe', { stdio: 'ignore' });
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// -x = exact name match
|
|
321
|
+
execSync('pkill -x apra-fleet', { stdio: 'ignore' });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Write empty .ignore overlay files into a LOCAL agy member's workspace to block
|
|
326
|
+
* the global apra-fleet MCP server and PM/fleet skills from loading inside that
|
|
327
|
+
* workspace. Idempotent -- safe to call multiple times for the same folder.
|
|
328
|
+
*
|
|
329
|
+
* Only meaningful for LOCAL members (they share ~/.gemini/antigravity-cli/ with
|
|
330
|
+
* the PM). REMOTE members have their own home dir and no conflict.
|
|
331
|
+
*/
|
|
332
|
+
export function writeAgyWorkspaceOverlays(workFolder) {
|
|
333
|
+
const overlayPaths = [
|
|
334
|
+
path.join(workFolder, '.gemini', 'antigravity-cli', 'mcp', 'apra-fleet', '.ignore'),
|
|
335
|
+
path.join(workFolder, '.gemini', 'antigravity-cli', 'skills', 'fleet', '.ignore'),
|
|
336
|
+
path.join(workFolder, '.gemini', 'antigravity-cli', 'skills', 'pm', '.ignore'),
|
|
337
|
+
];
|
|
338
|
+
for (const filePath of overlayPaths) {
|
|
339
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
340
|
+
fs.writeFileSync(filePath, '', { mode: 0o644 });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
export async function runInstall(args) {
|
|
344
|
+
// --help / -h guard — must come first, before any side effects (#142)
|
|
345
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
346
|
+
console.log(`apra-fleet install
|
|
347
|
+
|
|
348
|
+
Install the apra-fleet binary, hooks, MCP server registration, and skills.
|
|
349
|
+
|
|
350
|
+
Usage:
|
|
351
|
+
apra-fleet install Install binary + hooks + statusline + MCP + fleet & PM skills (default)
|
|
352
|
+
apra-fleet install --skill all Same as bare install (all skills)
|
|
353
|
+
apra-fleet install --skill fleet Install fleet skill only
|
|
354
|
+
apra-fleet install --skill pm Install PM skill (also installs fleet — PM depends on fleet)
|
|
355
|
+
apra-fleet install --skill none Skip skill installation
|
|
356
|
+
apra-fleet install --no-skill Same as --skill none
|
|
357
|
+
apra-fleet install --force Stop a running server before installing
|
|
358
|
+
apra-fleet install --llm <provider> Target LLM provider: claude (default), gemini, codex, copilot, agy
|
|
359
|
+
apra-fleet install --help Show this help
|
|
360
|
+
|
|
361
|
+
Options:
|
|
362
|
+
--llm <provider> LLM provider to configure. Supported: claude, gemini, codex, copilot, agy.
|
|
363
|
+
Defaults to claude. Note: --llm gemini shows a warning about sequential
|
|
364
|
+
dispatch — Gemini does not support background agents, so fleet operations
|
|
365
|
+
run sequentially rather than in parallel.
|
|
366
|
+
--skill <mode> Which skills to install: all (default), fleet, pm, or none.
|
|
367
|
+
--no-skill Alias for --skill none.
|
|
368
|
+
--force Stop a running apra-fleet server before installing (SEA mode only).`);
|
|
369
|
+
process.exit(0);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// Parse --llm flag
|
|
373
|
+
let llm = 'claude';
|
|
374
|
+
const llmArg = args.find(a => a.startsWith('--llm='));
|
|
375
|
+
if (llmArg) {
|
|
376
|
+
llm = llmArg.split('=')[1];
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
const idx = args.indexOf('--llm');
|
|
380
|
+
if (idx >= 0 && idx < args.length - 1) {
|
|
381
|
+
llm = args[idx + 1];
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
const supported = ['claude', 'gemini', 'codex', 'copilot', 'agy'];
|
|
385
|
+
if (!supported.includes(llm)) {
|
|
386
|
+
console.error(`Error: Unsupported LLM provider "${llm}". Supported: ${supported.join(', ')}`);
|
|
387
|
+
process.exit(1);
|
|
388
|
+
}
|
|
389
|
+
const paths = getProviderInstallConfig(llm);
|
|
390
|
+
let skillMode = 'all';
|
|
391
|
+
const skillEqualArg = args.find(a => a.startsWith('--skill='));
|
|
392
|
+
if (skillEqualArg) {
|
|
393
|
+
const val = skillEqualArg.split('=')[1];
|
|
394
|
+
if (val === 'all' || val === 'fleet' || val === 'pm' || val === 'none') {
|
|
395
|
+
skillMode = val;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
console.error(`Error: --skill value must be one of: all, fleet, pm, none (got "${val}")`);
|
|
399
|
+
process.exit(1);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
const skillIdx = args.indexOf('--skill');
|
|
404
|
+
if (skillIdx >= 0) {
|
|
405
|
+
const nextArg = args[skillIdx + 1];
|
|
406
|
+
if (nextArg && !nextArg.startsWith('--') && (nextArg === 'all' || nextArg === 'fleet' || nextArg === 'pm' || nextArg === 'none')) {
|
|
407
|
+
skillMode = nextArg;
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
// --skill with no value → install both (backwards-compat)
|
|
411
|
+
skillMode = 'all';
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// --no-skill is a synonym for --skill none
|
|
416
|
+
if (args.includes('--no-skill')) {
|
|
417
|
+
skillMode = 'none';
|
|
418
|
+
}
|
|
419
|
+
// Parse --force flag
|
|
420
|
+
const force = args.includes('--force');
|
|
421
|
+
// Reject unknown flags to catch typos early
|
|
422
|
+
const knownFlagPrefixes = ['--llm=', '--skill='];
|
|
423
|
+
const knownFlagExact = new Set(['--llm', '--skill', '--no-skill', '--force', '--help', '-h']);
|
|
424
|
+
for (const a of args) {
|
|
425
|
+
if (knownFlagExact.has(a))
|
|
426
|
+
continue;
|
|
427
|
+
if (knownFlagPrefixes.some(p => a.startsWith(p)))
|
|
428
|
+
continue;
|
|
429
|
+
if (!a.startsWith('-'))
|
|
430
|
+
continue; // non-flag positional (e.g. value token for --skill)
|
|
431
|
+
console.error(`Error: Unknown option "${a}". Run apra-fleet install --help for usage.`);
|
|
432
|
+
process.exit(1);
|
|
433
|
+
}
|
|
434
|
+
const installFleet = skillMode === 'fleet' || skillMode === 'pm' || skillMode === 'all';
|
|
435
|
+
const installPm = skillMode === 'pm' || skillMode === 'all';
|
|
436
|
+
const totalSteps = (installFleet && installPm) ? 8 : installFleet ? 7 : installPm ? 8 : 6;
|
|
437
|
+
if (llm === 'gemini' && (installFleet || installPm)) {
|
|
438
|
+
console.warn(`\n⚠ Note: Gemini does not support background agents. If you plan to use Gemini as the\n PM/orchestrator, fleet operations will run sequentially (no parallel dispatch).\n For best orchestration performance, consider using Claude. See docs for details.\n`);
|
|
439
|
+
}
|
|
440
|
+
// --- Running-process guard (SEA + npm modes -- dev mode runs via node, not a managed binary) ---
|
|
441
|
+
if ((isSea() || isNpmGlobalInstall()) && isApraFleetRunning()) {
|
|
442
|
+
if (!force) {
|
|
443
|
+
const killHint = process.platform === 'win32'
|
|
444
|
+
? ' taskkill /F /IM apra-fleet.exe'
|
|
445
|
+
: ' pkill -x apra-fleet';
|
|
446
|
+
console.error(`
|
|
447
|
+
Error: apra-fleet is currently running. Stop the server before installing.
|
|
448
|
+
|
|
449
|
+
Run with --force to stop it automatically:
|
|
450
|
+
apra-fleet install --force
|
|
451
|
+
|
|
452
|
+
Or stop it manually:
|
|
453
|
+
${killHint}
|
|
454
|
+
`);
|
|
455
|
+
process.exit(1);
|
|
456
|
+
}
|
|
457
|
+
killApraFleet();
|
|
458
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
459
|
+
console.log(' Stopped running server.');
|
|
460
|
+
}
|
|
461
|
+
console.log(`\nInstalling Apra Fleet ${serverVersion} for ${paths.name}...\n`);
|
|
462
|
+
// --- Step 1: Copy binary ---
|
|
463
|
+
let binaryPath = '';
|
|
464
|
+
if (isSea()) {
|
|
465
|
+
console.log(` [1/${totalSteps}] Installing binary...`);
|
|
466
|
+
fs.mkdirSync(BIN_DIR, { recursive: true });
|
|
467
|
+
const binaryName = process.platform === 'win32' ? 'apra-fleet.exe' : 'apra-fleet';
|
|
468
|
+
binaryPath = path.join(BIN_DIR, binaryName);
|
|
469
|
+
fs.copyFileSync(process.execPath, binaryPath);
|
|
470
|
+
if (process.platform !== 'win32') {
|
|
471
|
+
fs.chmodSync(binaryPath, 0o755);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
else if (isNpmGlobalInstall()) {
|
|
475
|
+
console.log(` [1/${totalSteps}] npm global install detected -- skipping binary copy`);
|
|
476
|
+
binaryPath = process.argv[1];
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
console.log(` [1/${totalSteps}] Dev mode -- skipping binary copy`);
|
|
480
|
+
}
|
|
481
|
+
// --- Step 2: Extract hooks ---
|
|
482
|
+
console.log(` [2/${totalSteps}] Installing hooks...`);
|
|
483
|
+
const manifest = loadManifest();
|
|
484
|
+
for (const [name, assetKey] of Object.entries(manifest.hooks)) {
|
|
485
|
+
const content = extractAsset(assetKey);
|
|
486
|
+
const destPath = path.join(HOOKS_DIR, name);
|
|
487
|
+
writeAssetFile(destPath, content);
|
|
488
|
+
if (process.platform !== 'win32') {
|
|
489
|
+
fs.chmodSync(destPath, 0o755);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
// --- Step 3: Extract scripts ---
|
|
493
|
+
console.log(` [3/${totalSteps}] Installing scripts...`);
|
|
494
|
+
for (const [name, assetKey] of Object.entries(manifest.scripts)) {
|
|
495
|
+
const content = extractAsset(assetKey);
|
|
496
|
+
const destPath = path.join(SCRIPTS_DIR, name);
|
|
497
|
+
writeAssetFile(destPath, content);
|
|
498
|
+
if (process.platform !== 'win32') {
|
|
499
|
+
fs.chmodSync(destPath, 0o755);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
// --- Step 4: Configure hooks + statusline in settings.json ---
|
|
503
|
+
console.log(` [4/${totalSteps}] Configuring ${paths.name} settings...`);
|
|
504
|
+
const installedHooksConfig = JSON.parse(fs.readFileSync(path.join(HOOKS_DIR, 'hooks-config.json'), 'utf-8'));
|
|
505
|
+
mergeHooksConfig(paths, installedHooksConfig, llm);
|
|
506
|
+
const statuslineScript = path.join(SCRIPTS_DIR, 'fleet-statusline.sh');
|
|
507
|
+
configureStatusline(paths, statuslineScript);
|
|
508
|
+
// Write defaultModel to provider settings so native CLI invocations default to standard tier
|
|
509
|
+
const standardModel = PROVIDER_STANDARD_MODELS[llm] ?? PROVIDER_STANDARD_MODELS['claude'];
|
|
510
|
+
writeDefaultModel(paths, standardModel);
|
|
511
|
+
// --- Step 5: Register MCP server ---
|
|
512
|
+
console.log(` [5/${totalSteps}] Registering MCP server...`);
|
|
513
|
+
const mcpConfig = isSea()
|
|
514
|
+
? { command: binaryPath, args: [] }
|
|
515
|
+
: isNpmGlobalInstall()
|
|
516
|
+
? { command: process.execPath, args: [process.argv[1]] }
|
|
517
|
+
: { command: 'node', args: [path.join(findProjectRoot(), 'dist', 'index.js')] };
|
|
518
|
+
if (llm === 'claude') {
|
|
519
|
+
try {
|
|
520
|
+
run('claude mcp remove apra-fleet --scope user', { stdio: 'ignore' });
|
|
521
|
+
}
|
|
522
|
+
catch { /* not registered */ }
|
|
523
|
+
// Build the claude MCP command from the actual mcpConfig structure.
|
|
524
|
+
// SEA mode: { command: binaryPath, args: [] } -> register the binary alone.
|
|
525
|
+
// npm/dev mode: { command: <node>, args: [<script>] } -> register node + script path.
|
|
526
|
+
// Quote both segments so paths with spaces (e.g. Windows "Program Files") work.
|
|
527
|
+
const cmd = mcpConfig.args.length > 0
|
|
528
|
+
? `claude mcp add --scope user apra-fleet -- "${mcpConfig.command}" "${mcpConfig.args[0]}"`
|
|
529
|
+
: `claude mcp add --scope user apra-fleet -- "${mcpConfig.command}"`;
|
|
530
|
+
run(cmd);
|
|
531
|
+
}
|
|
532
|
+
else if (llm === 'gemini') {
|
|
533
|
+
mergeGeminiConfig(paths, mcpConfig);
|
|
534
|
+
}
|
|
535
|
+
else if (llm === 'codex') {
|
|
536
|
+
mergeCodexConfig(paths, mcpConfig);
|
|
537
|
+
}
|
|
538
|
+
else if (llm === 'copilot') {
|
|
539
|
+
mergeCopilotConfig(paths, mcpConfig);
|
|
540
|
+
}
|
|
541
|
+
else if (llm === 'agy') {
|
|
542
|
+
mergeAgyConfig(paths, mcpConfig);
|
|
543
|
+
}
|
|
544
|
+
// --- Step 6: Install fleet skill (optional) ---
|
|
545
|
+
if (skillMode === 'pm') {
|
|
546
|
+
console.warn(`\n⚠ Note: PM skill depends on fleet skill — installing fleet skill first.\n`);
|
|
547
|
+
}
|
|
548
|
+
if (installFleet) {
|
|
549
|
+
console.log(` [6/${totalSteps}] Installing fleet skill...`);
|
|
550
|
+
clearDirSync(paths.fleetSkillsDir);
|
|
551
|
+
if (isSea()) {
|
|
552
|
+
fs.mkdirSync(paths.fleetSkillsDir, { recursive: true });
|
|
553
|
+
for (const [name, assetKey] of Object.entries(manifest.fleetSkills)) {
|
|
554
|
+
const content = extractAsset(assetKey);
|
|
555
|
+
writeAssetFile(path.join(paths.fleetSkillsDir, name), content);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
// Dev mode: copy from project skills/fleet/
|
|
560
|
+
const fleetSrc = path.join(findProjectRoot(), 'skills', 'fleet');
|
|
561
|
+
copyDirSync(fleetSrc, paths.fleetSkillsDir);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
// --- Step 7: Install PM skill (optional) ---
|
|
565
|
+
if (installPm) {
|
|
566
|
+
console.log(` [7/${totalSteps}] Installing PM skill...`);
|
|
567
|
+
clearDirSync(paths.skillsDir);
|
|
568
|
+
if (isSea()) {
|
|
569
|
+
fs.mkdirSync(paths.skillsDir, { recursive: true });
|
|
570
|
+
for (const [name, assetKey] of Object.entries(manifest.skills)) {
|
|
571
|
+
const content = extractAsset(assetKey);
|
|
572
|
+
writeAssetFile(path.join(paths.skillsDir, name), content);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
else {
|
|
576
|
+
// Dev mode: copy from project skills/pm/
|
|
577
|
+
const pmSrc = path.join(findProjectRoot(), 'skills', 'pm');
|
|
578
|
+
copyDirSync(pmSrc, paths.skillsDir);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
if (!installFleet && !installPm) {
|
|
582
|
+
console.log(` Skipping skills (use --skill all to install, or omit --skill for default)`);
|
|
583
|
+
}
|
|
584
|
+
// --- Step 8: Install Beads task tracker ---
|
|
585
|
+
// shell:true required on Windows — npm global packages install as .cmd wrappers
|
|
586
|
+
// that cannot be directly spawned by Node without a shell
|
|
587
|
+
console.log(` [${totalSteps}/${totalSteps}] Installing Beads task tracker...`);
|
|
588
|
+
try {
|
|
589
|
+
// Check if already installed
|
|
590
|
+
try {
|
|
591
|
+
execFileSync('bd', ['--version'], { stdio: 'pipe', shell: true });
|
|
592
|
+
// already installed — skip
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
// not installed — install it
|
|
596
|
+
execFileSync('npm', ['install', '-g', '@beads/bd'], { stdio: 'inherit', shell: true });
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
catch (err) {
|
|
600
|
+
// non-fatal: warn but don't fail the install
|
|
601
|
+
console.warn(' ⚠ Beads install skipped — npm not available or install failed');
|
|
602
|
+
}
|
|
603
|
+
// Finalize permissions
|
|
604
|
+
mergePermissions(paths);
|
|
605
|
+
// Write install-config.json (merge provider entry)
|
|
606
|
+
writeInstallConfig(llm, skillMode);
|
|
607
|
+
// --- Done ---
|
|
608
|
+
let beadsVersion = 'installed';
|
|
609
|
+
try {
|
|
610
|
+
const versionOut = execFileSync('bd', ['--version'], { stdio: 'pipe', encoding: 'utf-8', shell: true });
|
|
611
|
+
beadsVersion = versionOut.trim() || 'installed';
|
|
612
|
+
}
|
|
613
|
+
catch {
|
|
614
|
+
beadsVersion = 'not available';
|
|
615
|
+
}
|
|
616
|
+
const clientName = llm === 'claude' ? 'Claude Code' : paths.name;
|
|
617
|
+
const instructions = llm === 'claude' ? 'Run /mcp in Claude Code to load the server.' : `Restart ${paths.name} to load the server.`;
|
|
618
|
+
const forceNote = force ? `\nRestart ${clientName} to reload the MCP server.` : '';
|
|
619
|
+
console.log(`
|
|
620
|
+
Apra Fleet ${serverVersion} installed successfully for ${paths.name}.
|
|
621
|
+
Binary: ${BIN_DIR}
|
|
622
|
+
Hooks: ${HOOKS_DIR}
|
|
623
|
+
Scripts: ${SCRIPTS_DIR}
|
|
624
|
+
Settings: ${paths.settingsFile}${installFleet ? `\n Fleet Skill: ${paths.fleetSkillsDir}` : ''}${installPm ? `\n PM Skill: ${paths.skillsDir}` : ''}
|
|
625
|
+
Beads: ${beadsVersion}
|
|
626
|
+
|
|
627
|
+
${instructions}${forceNote}
|
|
628
|
+
`);
|
|
629
|
+
}
|
|
630
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
|