@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,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const registerMemberSchema: z.ZodObject<{
|
|
3
|
+
friendly_name: z.ZodString;
|
|
4
|
+
member_type: z.ZodDefault<z.ZodEnum<["local", "remote"]>>;
|
|
5
|
+
host: z.ZodOptional<z.ZodString>;
|
|
6
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
username: z.ZodOptional<z.ZodString>;
|
|
8
|
+
auth_type: z.ZodOptional<z.ZodEnum<["password", "key"]>>;
|
|
9
|
+
password: z.ZodOptional<z.ZodString>;
|
|
10
|
+
key_path: z.ZodOptional<z.ZodString>;
|
|
11
|
+
work_folder: z.ZodString;
|
|
12
|
+
git_access: z.ZodOptional<z.ZodEnum<["read", "push", "admin", "issues", "full"]>>;
|
|
13
|
+
git_repos: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
14
|
+
cloud_provider: z.ZodOptional<z.ZodEnum<["aws"]>>;
|
|
15
|
+
cloud_instance_id: z.ZodOptional<z.ZodString>;
|
|
16
|
+
cloud_region: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
17
|
+
cloud_profile: z.ZodOptional<z.ZodString>;
|
|
18
|
+
cloud_idle_timeout_min: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
19
|
+
cloud_activity_command: z.ZodOptional<z.ZodString>;
|
|
20
|
+
llm_provider: z.ZodDefault<z.ZodOptional<z.ZodEnum<["claude", "gemini", "codex", "copilot", "agy"]>>>;
|
|
21
|
+
model_cheap: z.ZodOptional<z.ZodEnum<["gpt-oss-120b", "gpt-120", "gemini-3.5-flash-lite", "gemini-3.1-flash-lite-preview", "claude-haiku-4-5", "gpt-5.4-mini"]>>;
|
|
22
|
+
model_standard: z.ZodOptional<z.ZodEnum<["gemini-3.5-flash", "gpt-oss-120b", "gpt-120", "claude-sonnet-4.6", "claude-sonnet-4-5", "gemini-3-flash-preview", "gpt-5.4"]>>;
|
|
23
|
+
model_premium: z.ZodOptional<z.ZodEnum<["claude-sonnet-4.6", "claude-opus-4.6", "claude-opus-4-6", "claude-opus-4-7", "gpt-oss-120b", "gemini-3.1-pro-preview"]>>;
|
|
24
|
+
unattended: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<false>, z.ZodLiteral<"auto">, z.ZodLiteral<"dangerous">]>>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
port: number;
|
|
27
|
+
friendly_name: string;
|
|
28
|
+
member_type: "local" | "remote";
|
|
29
|
+
work_folder: string;
|
|
30
|
+
cloud_region: string;
|
|
31
|
+
cloud_idle_timeout_min: number;
|
|
32
|
+
llm_provider: "claude" | "gemini" | "codex" | "copilot" | "agy";
|
|
33
|
+
password?: string | undefined;
|
|
34
|
+
host?: string | undefined;
|
|
35
|
+
username?: string | undefined;
|
|
36
|
+
unattended?: false | "auto" | "dangerous" | undefined;
|
|
37
|
+
auth_type?: "password" | "key" | undefined;
|
|
38
|
+
key_path?: string | undefined;
|
|
39
|
+
git_access?: "read" | "push" | "admin" | "issues" | "full" | undefined;
|
|
40
|
+
git_repos?: string[] | undefined;
|
|
41
|
+
cloud_provider?: "aws" | undefined;
|
|
42
|
+
cloud_instance_id?: string | undefined;
|
|
43
|
+
cloud_profile?: string | undefined;
|
|
44
|
+
cloud_activity_command?: string | undefined;
|
|
45
|
+
model_cheap?: "gpt-oss-120b" | "gpt-120" | "gemini-3.5-flash-lite" | "gemini-3.1-flash-lite-preview" | "claude-haiku-4-5" | "gpt-5.4-mini" | undefined;
|
|
46
|
+
model_standard?: "gpt-oss-120b" | "gpt-120" | "gemini-3.5-flash" | "claude-sonnet-4.6" | "claude-sonnet-4-5" | "gemini-3-flash-preview" | "gpt-5.4" | undefined;
|
|
47
|
+
model_premium?: "gpt-oss-120b" | "claude-sonnet-4.6" | "claude-opus-4.6" | "claude-opus-4-6" | "claude-opus-4-7" | "gemini-3.1-pro-preview" | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
friendly_name: string;
|
|
50
|
+
work_folder: string;
|
|
51
|
+
password?: string | undefined;
|
|
52
|
+
host?: string | undefined;
|
|
53
|
+
port?: number | undefined;
|
|
54
|
+
username?: string | undefined;
|
|
55
|
+
unattended?: false | "auto" | "dangerous" | undefined;
|
|
56
|
+
member_type?: "local" | "remote" | undefined;
|
|
57
|
+
auth_type?: "password" | "key" | undefined;
|
|
58
|
+
key_path?: string | undefined;
|
|
59
|
+
git_access?: "read" | "push" | "admin" | "issues" | "full" | undefined;
|
|
60
|
+
git_repos?: string[] | undefined;
|
|
61
|
+
cloud_provider?: "aws" | undefined;
|
|
62
|
+
cloud_instance_id?: string | undefined;
|
|
63
|
+
cloud_region?: string | undefined;
|
|
64
|
+
cloud_profile?: string | undefined;
|
|
65
|
+
cloud_idle_timeout_min?: number | undefined;
|
|
66
|
+
cloud_activity_command?: string | undefined;
|
|
67
|
+
llm_provider?: "claude" | "gemini" | "codex" | "copilot" | "agy" | undefined;
|
|
68
|
+
model_cheap?: "gpt-oss-120b" | "gpt-120" | "gemini-3.5-flash-lite" | "gemini-3.1-flash-lite-preview" | "claude-haiku-4-5" | "gpt-5.4-mini" | undefined;
|
|
69
|
+
model_standard?: "gpt-oss-120b" | "gpt-120" | "gemini-3.5-flash" | "claude-sonnet-4.6" | "claude-sonnet-4-5" | "gemini-3-flash-preview" | "gpt-5.4" | undefined;
|
|
70
|
+
model_premium?: "gpt-oss-120b" | "claude-sonnet-4.6" | "claude-opus-4.6" | "claude-opus-4-6" | "claude-opus-4-7" | "gemini-3.1-pro-preview" | undefined;
|
|
71
|
+
}>;
|
|
72
|
+
export type RegisterMemberInput = z.infer<typeof registerMemberSchema>;
|
|
73
|
+
export declare function registerMember(input: RegisterMemberInput): Promise<string>;
|
|
74
|
+
//# sourceMappingURL=register-member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-member.d.ts","sourceRoot":"","sources":["../../src/tools/register-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuQhF"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { v4 as uuid } from 'uuid';
|
|
3
|
+
import { encryptPassword, decryptPassword } from '../utils/crypto.js';
|
|
4
|
+
import { detectOS } from '../utils/platform.js';
|
|
5
|
+
import { getOsCommands } from '../os/index.js';
|
|
6
|
+
import { getProvider } from '../providers/index.js';
|
|
7
|
+
import { addAgent, getAllAgents, hasDuplicateFolder } from '../services/registry.js';
|
|
8
|
+
import { credentialResolve, credentialSet } from '../services/credential-store.js';
|
|
9
|
+
import { getStrategy } from '../services/strategy.js';
|
|
10
|
+
import { assignIcon } from '../services/icons.js';
|
|
11
|
+
import { writeStatusline } from '../services/statusline.js';
|
|
12
|
+
import { awsProvider } from '../services/cloud/aws.js';
|
|
13
|
+
import { collectOobPassword, collectOobApiKey } from '../services/auth-socket.js';
|
|
14
|
+
import { classifySshError } from '../utils/ssh-error-messages.js';
|
|
15
|
+
import { logLine } from '../utils/log-helpers.js';
|
|
16
|
+
import { CURATED_CHEAP_MODELS, CURATED_STANDARD_MODELS, CURATED_PREMIUM_MODELS } from '../cli/config.js';
|
|
17
|
+
import { writeAgyWorkspaceOverlays } from '../cli/install.js';
|
|
18
|
+
export const registerMemberSchema = z.object({
|
|
19
|
+
friendly_name: z.string()
|
|
20
|
+
.min(1).max(64)
|
|
21
|
+
.regex(/^[a-zA-Z0-9._-]+$/, 'Only letters, numbers, dots, dashes, and underscores')
|
|
22
|
+
.describe('Human-friendly name for this member (worker) (e.g. "web-server")'),
|
|
23
|
+
member_type: z.enum(['local', 'remote']).default('remote').describe('Member type: "local" for same machine, "remote" for SSH (default: "remote")'),
|
|
24
|
+
host: z.string().regex(/^[^<>\n\r]+$/, 'host must not contain angle brackets or newlines').optional().describe('IP address or hostname of the remote machine (required for non-cloud remote members; optional for cloud members — auto-resolved from AWS when running)'),
|
|
25
|
+
port: z.number().default(22).describe('SSH port (default: 22, remote members only)'),
|
|
26
|
+
username: z.string().optional().describe('SSH username (required for remote members). Spaces are allowed (e.g. "tester tester" on Windows) — passed directly to SSH, never shell-interpolated.'),
|
|
27
|
+
auth_type: z.enum(['password', 'key']).optional().describe('Authentication method (required for non-cloud remote members; cloud members default to "key")'),
|
|
28
|
+
password: z.string().optional().describe('SSH password. Omit for secure out-of-band entry — a password prompt will open in a separate terminal window. Supports {{secure.NAME}} token — value is resolved from the credential store before use.'),
|
|
29
|
+
key_path: z.string().optional().describe('Path to SSH private key. Used for both regular SSH connections and cloud instance lifecycle.'),
|
|
30
|
+
work_folder: z.string().regex(/^[^<>\n\r]+$/, 'work_folder must not contain angle brackets or newlines').describe('Working directory on the target machine'),
|
|
31
|
+
git_access: z.enum(['read', 'push', 'admin', 'issues', 'full']).optional().describe('Git access level for this member'),
|
|
32
|
+
git_repos: z.array(z.string()).optional().describe('Git repositories this member can access (e.g. ["Apra-Labs/ApraPipes"])'),
|
|
33
|
+
// Cloud fields
|
|
34
|
+
cloud_provider: z.enum(['aws'], {
|
|
35
|
+
errorMap: () => ({ message: "Only 'aws' is supported as a cloud provider. GCP and Azure support is planned." }),
|
|
36
|
+
}).optional().describe('Cloud provider (e.g. "aws"). When set, cloud_instance_id and key_path are required.'),
|
|
37
|
+
cloud_instance_id: z.string().regex(/^i-[0-9a-f]{8,17}$/, 'cloud_instance_id must match pattern i-[0-9a-f]{8,17} (e.g. "i-0abc123def456789a")').optional().describe('EC2 instance ID (e.g. "i-0abc123def456789a"). Required when cloud_provider is set.'),
|
|
38
|
+
cloud_region: z.string().regex(/^[a-z]{2}-[a-z]+-\d+$/, 'cloud_region must be a valid AWS region (e.g. "us-east-1")').optional().default('us-east-1').describe('AWS region (default: "us-east-1")'),
|
|
39
|
+
cloud_profile: z.string().optional().describe('AWS CLI profile name (e.g. "apra")'),
|
|
40
|
+
cloud_idle_timeout_min: z.number().min(1, 'cloud_idle_timeout_min must be at least 1 minute').max(1440, 'cloud_idle_timeout_min must be at most 1440 minutes (24 hours)').optional().default(30).describe('Minutes of inactivity before auto-stop (default: 30)'),
|
|
41
|
+
cloud_activity_command: z.string().min(1).optional().describe('Custom shell command for workload detection. Must output "busy" or "idle" on stdout. Checked after GPU, before process check. Useful for CPU-intensive tasks, downloads, or any non-GPU workload.'),
|
|
42
|
+
llm_provider: z.enum(['claude', 'gemini', 'codex', 'copilot', 'agy']).optional().default('claude').describe('LLM provider for this member (default: "claude"). Determines which CLI is used for execute_prompt, provision_llm_auth, and update_llm_cli.'),
|
|
43
|
+
model_cheap: z.enum(CURATED_CHEAP_MODELS).optional().describe('Custom cheap model choice from a curated list'),
|
|
44
|
+
model_standard: z.enum(CURATED_STANDARD_MODELS).optional().describe('Custom standard model choice from a curated list'),
|
|
45
|
+
model_premium: z.enum(CURATED_PREMIUM_MODELS).optional().describe('Custom premium model choice from a curated list'),
|
|
46
|
+
unattended: z.union([z.literal(false), z.literal('auto'), z.literal('dangerous')]).optional().describe('Permission mode for unattended execution. false (default) = interactive prompts; "auto" = auto-approve safe operations; "dangerous" = skip all permission checks.'),
|
|
47
|
+
});
|
|
48
|
+
export async function registerMember(input) {
|
|
49
|
+
const warnings = [];
|
|
50
|
+
const isLocal = input.member_type === 'local';
|
|
51
|
+
const isCloud = !!input.cloud_provider;
|
|
52
|
+
// --- Validate required fields ---
|
|
53
|
+
if (isCloud) {
|
|
54
|
+
if (!input.cloud_instance_id)
|
|
55
|
+
return '❌ "cloud_instance_id" is required when cloud_provider is set. Member was NOT registered.';
|
|
56
|
+
if (!input.key_path)
|
|
57
|
+
return '❌ "key_path" is required when cloud_provider is set. Member was NOT registered.';
|
|
58
|
+
if (!input.username)
|
|
59
|
+
return '❌ "username" is required for cloud members. Member was NOT registered.';
|
|
60
|
+
}
|
|
61
|
+
else if (!isLocal) {
|
|
62
|
+
if (!input.host)
|
|
63
|
+
return '❌ "host" is required for remote members. Member was NOT registered.';
|
|
64
|
+
if (!input.username)
|
|
65
|
+
return '❌ "username" is required for remote members. Member was NOT registered.';
|
|
66
|
+
if (!input.auth_type)
|
|
67
|
+
return '❌ "auth_type" is required for remote members. Member was NOT registered.';
|
|
68
|
+
}
|
|
69
|
+
// Resolve {{secure.NAME}} tokens in password field
|
|
70
|
+
let resolvedPassword = input.password;
|
|
71
|
+
if (resolvedPassword) {
|
|
72
|
+
const TOKEN_RE = /\{\{secure\.([a-zA-Z0-9_-]{1,64})\}\}/g;
|
|
73
|
+
let match;
|
|
74
|
+
let resolved = resolvedPassword;
|
|
75
|
+
const tokenNames = new Set();
|
|
76
|
+
while ((match = TOKEN_RE.exec(resolvedPassword)) !== null) {
|
|
77
|
+
tokenNames.add(match[1]);
|
|
78
|
+
}
|
|
79
|
+
for (const name of tokenNames) {
|
|
80
|
+
const entry = credentialResolve(name, input.friendly_name);
|
|
81
|
+
if (entry && 'denied' in entry)
|
|
82
|
+
return `❌ ${entry.denied} Member was NOT registered.`;
|
|
83
|
+
if (entry && 'expired' in entry)
|
|
84
|
+
return `❌ ${entry.expired} Member was NOT registered.`;
|
|
85
|
+
if (entry) {
|
|
86
|
+
resolved = resolved.replaceAll(`{{secure.${name}}}`, entry.plaintext);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Credential not found — auto-create via OOB
|
|
90
|
+
const oob = await collectOobApiKey(name, 'register_member', { askPersist: true });
|
|
91
|
+
if ('fallback' in oob)
|
|
92
|
+
return oob.fallback ?? 'Error: OOB operation cancelled.';
|
|
93
|
+
if (!oob.password)
|
|
94
|
+
return `❌ No credential received for "${name}". Member was NOT registered.`;
|
|
95
|
+
const plaintext = decryptPassword(oob.password);
|
|
96
|
+
credentialSet(name, plaintext, !!oob.persist, 'deny');
|
|
97
|
+
resolved = resolved.replaceAll(`{{secure.${name}}}`, plaintext);
|
|
98
|
+
}
|
|
99
|
+
resolvedPassword = resolved;
|
|
100
|
+
}
|
|
101
|
+
// Out-of-band password collection for remote password auth without inline password
|
|
102
|
+
let preEncryptedPassword;
|
|
103
|
+
if (!isLocal && input.auth_type === 'password' && !input.password) {
|
|
104
|
+
const oob = await collectOobPassword(input.friendly_name, 'register_member', {
|
|
105
|
+
prompt: ` Enter SSH password for ${input.username}@${input.host}: `,
|
|
106
|
+
});
|
|
107
|
+
if ('fallback' in oob)
|
|
108
|
+
return oob.fallback ?? 'Error: OOB operation cancelled.';
|
|
109
|
+
preEncryptedPassword = oob.password;
|
|
110
|
+
}
|
|
111
|
+
// --- Duplicate folder check ---
|
|
112
|
+
if (hasDuplicateFolder(input.member_type, input.work_folder, input.host, input.port)) {
|
|
113
|
+
const scope = isLocal ? 'this machine' : `host ${input.host}:${input.port}`;
|
|
114
|
+
return `❌ Another member already uses folder "${input.work_folder}" on ${scope}. Member was NOT registered.`;
|
|
115
|
+
}
|
|
116
|
+
// --- Cloud: get instance state and resolve host ---
|
|
117
|
+
let resolvedHost = input.host;
|
|
118
|
+
let skipSshOps = false;
|
|
119
|
+
if (isCloud) {
|
|
120
|
+
const cloudConfigForCheck = {
|
|
121
|
+
provider: 'aws',
|
|
122
|
+
instanceId: input.cloud_instance_id,
|
|
123
|
+
region: input.cloud_region ?? 'us-east-1',
|
|
124
|
+
profile: input.cloud_profile,
|
|
125
|
+
idleTimeoutMin: input.cloud_idle_timeout_min ?? 30,
|
|
126
|
+
};
|
|
127
|
+
try {
|
|
128
|
+
const instanceState = await awsProvider.getInstanceState(cloudConfigForCheck);
|
|
129
|
+
if (instanceState === 'terminated') {
|
|
130
|
+
return `❌ EC2 instance ${cloudConfigForCheck.instanceId} is terminated and cannot be used. Member was NOT registered.`;
|
|
131
|
+
}
|
|
132
|
+
if (instanceState === 'running') {
|
|
133
|
+
// Auto-resolve host from AWS if not provided
|
|
134
|
+
if (!resolvedHost) {
|
|
135
|
+
try {
|
|
136
|
+
resolvedHost = await awsProvider.getPublicIp(cloudConfigForCheck);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
warnings.push('Instance is running but could not get public IP — provide host manually via update_member after registration.');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// stopped / stopping / pending — skip SSH ops
|
|
145
|
+
skipSshOps = true;
|
|
146
|
+
warnings.push(`Instance is "${instanceState}" — skipping connectivity check. Run execute_command after the instance starts to verify SSH access.`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
const msg = e.message;
|
|
151
|
+
warnings.push(`Could not verify instance state: ${msg}. Proceeding with registration.`);
|
|
152
|
+
skipSshOps = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// --- Build cloud config ---
|
|
156
|
+
const cloudConfig = isCloud ? {
|
|
157
|
+
provider: 'aws',
|
|
158
|
+
instanceId: input.cloud_instance_id,
|
|
159
|
+
region: input.cloud_region ?? 'us-east-1',
|
|
160
|
+
profile: input.cloud_profile,
|
|
161
|
+
idleTimeoutMin: input.cloud_idle_timeout_min ?? 30,
|
|
162
|
+
...(input.cloud_activity_command ? { activityCommand: input.cloud_activity_command } : {}),
|
|
163
|
+
} : undefined;
|
|
164
|
+
// --- Build tempAgent ---
|
|
165
|
+
const tempAgent = {
|
|
166
|
+
id: uuid(),
|
|
167
|
+
friendlyName: input.friendly_name,
|
|
168
|
+
agentType: input.member_type,
|
|
169
|
+
host: isLocal ? undefined : (resolvedHost ?? ''),
|
|
170
|
+
port: isLocal ? undefined : input.port,
|
|
171
|
+
username: isLocal ? undefined : input.username,
|
|
172
|
+
authType: isLocal ? undefined : (input.auth_type ?? (isCloud ? 'key' : undefined)),
|
|
173
|
+
encryptedPassword: preEncryptedPassword ?? ((!isLocal && resolvedPassword) ? encryptPassword(resolvedPassword) : undefined),
|
|
174
|
+
keyPath: isLocal ? undefined : input.key_path,
|
|
175
|
+
workFolder: input.work_folder,
|
|
176
|
+
createdAt: new Date().toISOString(),
|
|
177
|
+
gitAccess: input.git_access,
|
|
178
|
+
gitRepos: input.git_repos,
|
|
179
|
+
cloud: cloudConfig,
|
|
180
|
+
llmProvider: input.llm_provider ?? 'claude',
|
|
181
|
+
modelCheap: input.model_cheap,
|
|
182
|
+
modelStandard: input.model_standard,
|
|
183
|
+
modelPremium: input.model_premium,
|
|
184
|
+
unattended: input.unattended ?? false,
|
|
185
|
+
};
|
|
186
|
+
// --- SSH-dependent steps (skipped for stopped cloud instances) ---
|
|
187
|
+
let detectedOS = isCloud ? 'linux' : undefined;
|
|
188
|
+
let claudeVersion;
|
|
189
|
+
let connResult = { ok: true };
|
|
190
|
+
if (!skipSshOps) {
|
|
191
|
+
const strategy = getStrategy(tempAgent);
|
|
192
|
+
// Step 1: Test connectivity
|
|
193
|
+
connResult = await strategy.testConnection();
|
|
194
|
+
if (!connResult.ok) {
|
|
195
|
+
const target = isLocal ? 'local machine' : `${resolvedHost}:${input.port}`;
|
|
196
|
+
if (isCloud) {
|
|
197
|
+
warnings.push(`SSH connectivity check failed: ${connResult.error}. Update host via update_member when the instance starts.`);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return `❌ Failed to connect to ${target} — ${classifySshError(connResult.error ?? '')}\nMember was NOT registered.`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Step 2: Detect OS
|
|
204
|
+
if (isLocal) {
|
|
205
|
+
const p = process.platform;
|
|
206
|
+
detectedOS = p === 'win32' ? 'windows' : p === 'darwin' ? 'macos' : 'linux';
|
|
207
|
+
}
|
|
208
|
+
else if (!isCloud) {
|
|
209
|
+
detectedOS = 'linux';
|
|
210
|
+
try {
|
|
211
|
+
const noop = { stdout: '', stderr: '', code: 1 };
|
|
212
|
+
const [unameResult, verResult, psResult] = await Promise.all([
|
|
213
|
+
strategy.execCommand('uname -s', 10000).catch(() => noop),
|
|
214
|
+
strategy.execCommand('ver', 10000).catch(() => noop),
|
|
215
|
+
strategy.execCommand('echo $env:OS', 10000).catch(() => noop),
|
|
216
|
+
]);
|
|
217
|
+
detectedOS = detectOS(unameResult.stdout, verResult.stdout + ' ' + psResult.stdout);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
warnings.push('Could not detect OS — defaulting to Linux');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// Cloud + running: assume linux (GPU instances are Linux)
|
|
225
|
+
detectedOS = 'linux';
|
|
226
|
+
}
|
|
227
|
+
tempAgent.os = detectedOS;
|
|
228
|
+
const cmds = getOsCommands(detectedOS);
|
|
229
|
+
const provider = getProvider(input.llm_provider ?? 'claude');
|
|
230
|
+
const providerName = provider.name;
|
|
231
|
+
const versionCheck = strategy.execCommand(cmds.agentVersion(provider), 15000)
|
|
232
|
+
.then(r => {
|
|
233
|
+
r.code === 0
|
|
234
|
+
? (claudeVersion = r.stdout.trim())
|
|
235
|
+
: warnings.push(`${providerName} CLI not found on ${isLocal ? 'this machine' : 'remote machine'} — install it before using execute_prompt`);
|
|
236
|
+
})
|
|
237
|
+
.catch(() => { warnings.push(`Could not verify ${providerName} CLI availability`); });
|
|
238
|
+
const authCheck = !isLocal
|
|
239
|
+
? strategy.execCommand(cmds.agentVersion(provider), 60000)
|
|
240
|
+
.then(r => { r.code !== 0 && warnings.push(`${providerName} CLI not available — you may need to run provision_llm_auth`); })
|
|
241
|
+
.catch(() => { warnings.push(`${providerName} CLI check timed out or failed — run provision_llm_auth to set up authentication`); })
|
|
242
|
+
: Promise.resolve();
|
|
243
|
+
const mkdirCheck = isLocal
|
|
244
|
+
? import('node:fs').then(({ mkdirSync }) => {
|
|
245
|
+
mkdirSync(input.work_folder, { recursive: true });
|
|
246
|
+
}).catch(() => { warnings.push(`Could not create folder "${input.work_folder}"`); })
|
|
247
|
+
: strategy.execCommand(cmds.mkdir(input.work_folder), 10000)
|
|
248
|
+
.catch(() => { warnings.push(`Could not create folder "${input.work_folder}"`); });
|
|
249
|
+
await Promise.all([versionCheck, authCheck, mkdirCheck]);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
tempAgent.os = detectedOS;
|
|
253
|
+
if (isCloud) {
|
|
254
|
+
warnings.push(`${input.llm_provider ?? 'claude'} CLI and auth not verified — run provision_llm_auth after the instance starts.`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// OS support warning for cloud members: cloud features are designed for Linux
|
|
258
|
+
if (isCloud && tempAgent.os !== 'linux') {
|
|
259
|
+
const osLabel = tempAgent.os ?? 'unknown';
|
|
260
|
+
warnings.push(`Cloud features (GPU detection, task wrapper, activity monitoring) are designed for Linux. Some features may not work on ${osLabel}.`);
|
|
261
|
+
}
|
|
262
|
+
// Auto-assign icon
|
|
263
|
+
tempAgent.icon = assignIcon(getAllAgents().map(a => a.icon).filter(Boolean));
|
|
264
|
+
// Persist
|
|
265
|
+
addAgent(tempAgent);
|
|
266
|
+
logLine('register_member', `id=${tempAgent.id} name=${tempAgent.friendlyName} type=${tempAgent.agentType}`, tempAgent);
|
|
267
|
+
writeStatusline();
|
|
268
|
+
// Block global apra-fleet MCP + skills inside local agy member workspaces
|
|
269
|
+
if (isLocal && (input.llm_provider ?? 'claude') === 'agy') {
|
|
270
|
+
writeAgyWorkspaceOverlays(input.work_folder);
|
|
271
|
+
}
|
|
272
|
+
let result = `✅ Member registered successfully!\n\n`;
|
|
273
|
+
result += ` Icon: ${tempAgent.icon}\n`;
|
|
274
|
+
result += ` ID: ${tempAgent.id}\n`;
|
|
275
|
+
result += ` Name: ${tempAgent.friendlyName}\n`;
|
|
276
|
+
result += ` Type: ${tempAgent.agentType}${isCloud ? ' (cloud)' : ''}\n`;
|
|
277
|
+
if (!isLocal) {
|
|
278
|
+
result += ` Host: ${tempAgent.host || '(pending — set when instance starts)'}:${tempAgent.port}\n`;
|
|
279
|
+
}
|
|
280
|
+
result += ` OS: ${detectedOS}\n`;
|
|
281
|
+
result += ` Folder: ${tempAgent.workFolder}\n`;
|
|
282
|
+
result += ` Provider: ${tempAgent.llmProvider ?? 'claude'}\n`;
|
|
283
|
+
if (tempAgent.modelCheap)
|
|
284
|
+
result += ` Model Cheap: ${tempAgent.modelCheap}\n`;
|
|
285
|
+
if (tempAgent.modelStandard)
|
|
286
|
+
result += ` Model Standard: ${tempAgent.modelStandard}\n`;
|
|
287
|
+
if (tempAgent.modelPremium)
|
|
288
|
+
result += ` Model Premium: ${tempAgent.modelPremium}\n`;
|
|
289
|
+
if (claudeVersion) {
|
|
290
|
+
result += ` CLI: ${claudeVersion}\n`;
|
|
291
|
+
}
|
|
292
|
+
if (!isLocal) {
|
|
293
|
+
result += ` Auth: ${tempAgent.authType}\n`;
|
|
294
|
+
if (connResult.latencyMs !== undefined) {
|
|
295
|
+
result += ` Latency: ${connResult.latencyMs}ms\n`;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (isCloud && cloudConfig) {
|
|
299
|
+
result += ` Cloud: ${cloudConfig.provider} / ${cloudConfig.instanceId} / ${cloudConfig.region}\n`;
|
|
300
|
+
result += ` Idle: ${cloudConfig.idleTimeoutMin}min\n`;
|
|
301
|
+
}
|
|
302
|
+
if (warnings.length > 0) {
|
|
303
|
+
result += `\n⚠️ Warnings:\n`;
|
|
304
|
+
for (const w of warnings) {
|
|
305
|
+
result += ` - ${w}\n`;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return result;
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=register-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-member.js","sourceRoot":"","sources":["../../src/tools/register-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;SACtB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;SACd,KAAK,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SAClF,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IAClJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,kDAAkD,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wJAAwJ,CAAC;IACxQ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACpF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sJAAsJ,CAAC;IAChM,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+FAA+F,CAAC;IAC3J,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uMAAuM,CAAC;IACjP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8FAA8F,CAAC;IACxI,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,yDAAyD,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC5J,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACvH,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IAC5H,eAAe;IACf,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;QAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,gFAAgF,EAAE,CAAC;KAChH,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qFAAqF,CAAC;IAC7G,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,oFAAoF,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IACzP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,4DAA4D,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACnM,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACnF,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kDAAkD,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,gEAAgE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACjQ,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mMAAmM,CAAC;IAClQ,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,4IAA4I,CAAC;IACzP,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC9G,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACvH,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACpH,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mKAAmK,CAAC;CAC5Q,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAEvC,mCAAmC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,iBAAiB;YAAE,OAAO,0FAA0F,CAAC;QAChI,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,iFAAiF,CAAC;QAC9G,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,wEAAwE,CAAC;IACvG,CAAC;SAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,qEAAqE,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,yEAAyE,CAAC;QACtG,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,0EAA0E,CAAC;IAC1G,CAAC;IAED,mDAAmD;IACnD,IAAI,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,wCAAwC,CAAC;QAC1D,IAAI,KAA6B,CAAC;QAClC,IAAI,QAAQ,GAAG,gBAAgB,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC3D,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK;gBAAE,OAAO,KAAK,KAAK,CAAC,MAAM,6BAA6B,CAAC;YACtF,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK;gBAAE,OAAO,KAAK,KAAK,CAAC,OAAO,6BAA6B,CAAC;YACxF,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtE,SAAS;YACX,CAAC;YACD,6CAA6C;YAC7C,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YAClF,IAAI,UAAU,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,QAAQ,IAAI,iCAAiC,CAAC;YAChF,IAAI,CAAC,GAAG,CAAC,QAAQ;gBAAE,OAAO,iCAAiC,IAAI,+BAA+B,CAAC;YAC/F,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtD,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;QACD,gBAAgB,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,mFAAmF;IACnF,IAAI,oBAAwC,CAAC;IAC7C,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,aAAa,EAAE,iBAAiB,EAAE;YAC3E,MAAM,EAAE,4BAA4B,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI;SACrE,CAAC,CAAC;QACH,IAAI,UAAU,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,QAAQ,IAAI,iCAAiC,CAAC;QAChF,oBAAoB,GAAG,GAAG,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,iCAAiC;IACjC,IAAI,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5E,OAAO,yCAAyC,KAAK,CAAC,WAAW,QAAQ,KAAK,8BAA8B,CAAC;IAC/G,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,mBAAmB,GAAgB;YACvC,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK,CAAC,iBAAkB;YACpC,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,WAAW;YACzC,OAAO,EAAE,KAAK,CAAC,aAAa;YAC5B,cAAc,EAAE,KAAK,CAAC,sBAAsB,IAAI,EAAE;SACnD,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YAC9E,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;gBACnC,OAAO,kBAAkB,mBAAmB,CAAC,UAAU,+DAA+D,CAAC;YACzH,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,6CAA6C;gBAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,YAAY,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;oBACpE,CAAC;oBAAC,MAAM,CAAC;wBACP,QAAQ,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC;oBACjI,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,8CAA8C;gBAC9C,UAAU,GAAG,IAAI,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,aAAa,sGAAsG,CAAC,CAAC;YACrJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAI,CAAW,CAAC,OAAO,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,oCAAoC,GAAG,iCAAiC,CAAC,CAAC;YACxF,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAA4B,OAAO,CAAC,CAAC,CAAC;QACrD,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK,CAAC,iBAAkB;QACpC,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,WAAW;QACzC,OAAO,EAAE,KAAK,CAAC,aAAa;QAC5B,cAAc,EAAE,KAAK,CAAC,sBAAsB,IAAI,EAAE;QAClD,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,0BAA0B;IAC1B,MAAM,SAAS,GAAU;QACvB,EAAE,EAAE,IAAI,EAAE;QACV,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,SAAS,EAAE,KAAK,CAAC,WAAW;QAC5B,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;QAChD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;QACtC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAC9C,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClF,iBAAiB,EAAE,oBAAoB,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3H,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAC7C,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,KAAK,CAAC,YAAY,IAAI,QAAQ;QAC3C,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,aAAa,EAAE,KAAK,CAAC,cAAc;QACnC,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK;KACtC,CAAC;IAEF,oEAAoE;IACpE,IAAI,UAAU,GAAgB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,IAAI,aAAiC,CAAC;IACtC,IAAI,UAAU,GAAwD,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEnF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAExC,4BAA4B;QAC5B,UAAU,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3E,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,kCAAkC,UAAU,CAAC,KAAK,2DAA2D,CAAC,CAAC;YAC/H,CAAC;iBAAM,CAAC;gBACN,OAAO,0BAA0B,MAAM,MAAM,gBAAgB,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,8BAA8B,CAAC;YACtH,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC3B,UAAU,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9E,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,UAAU,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC3D,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;oBACzD,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;oBACpD,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;iBAC9D,CAAC,CAAC;gBACH,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtF,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,SAAS,CAAC,EAAE,GAAG,UAAU,CAAC;QAE1B,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEnC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;aAC1E,IAAI,CAAC,CAAC,CAAC,EAAE;YACR,CAAC,CAAC,IAAI,KAAK,CAAC;gBACV,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,qBAAqB,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,2CAA2C,CAAC,CAAC;QAChJ,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,YAAY,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExF,MAAM,SAAS,GAAG,CAAC,OAAO;YACxB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;iBACrD,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,6DAA6D,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3H,KAAK,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,kFAAkF,CAAC,CAAC,CAAC,CAAC,CAAC;YACvI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEtB,MAAM,UAAU,GAAG,OAAO;YACxB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;gBACvC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;iBACvD,KAAK,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzF,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,EAAE,GAAG,UAAU,CAAC;QAC1B,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,QAAQ,gFAAgF,CAAC,CAAC;QACnI,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,OAAO,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,2HAA2H,OAAO,GAAG,CAAC,CAAC;IACvJ,CAAC;IAED,mBAAmB;IACnB,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC;IAEzF,UAAU;IACV,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpB,OAAO,CAAC,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,SAAS,SAAS,CAAC,YAAY,SAAS,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;IACvH,eAAe,EAAE,CAAC;IAElB,0EAA0E;IAC1E,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;QAC1D,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,GAAG,uCAAuC,CAAC;IACrD,MAAM,IAAI,cAAc,SAAS,CAAC,IAAI,IAAI,CAAC;IAC3C,MAAM,IAAI,cAAc,SAAS,CAAC,EAAE,IAAI,CAAC;IACzC,MAAM,IAAI,cAAc,SAAS,CAAC,YAAY,IAAI,CAAC;IACnD,MAAM,IAAI,cAAc,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,SAAS,CAAC,IAAI,IAAI,sCAAsC,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC;IACzG,CAAC;IACD,MAAM,IAAI,cAAc,UAAU,IAAI,CAAC;IACvC,MAAM,IAAI,cAAc,SAAS,CAAC,UAAU,IAAI,CAAC;IACjD,MAAM,IAAI,eAAe,SAAS,CAAC,WAAW,IAAI,QAAQ,IAAI,CAAC;IAC/D,IAAI,SAAS,CAAC,UAAU;QAAE,MAAM,IAAI,kBAAkB,SAAS,CAAC,UAAU,IAAI,CAAC;IAC/E,IAAI,SAAS,CAAC,aAAa;QAAE,MAAM,IAAI,qBAAqB,SAAS,CAAC,aAAa,IAAI,CAAC;IACxF,IAAI,SAAS,CAAC,YAAY;QAAE,MAAM,IAAI,oBAAoB,SAAS,CAAC,YAAY,IAAI,CAAC;IACrF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,cAAc,aAAa,IAAI,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,SAAS,CAAC,QAAQ,IAAI,CAAC;QAC/C,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,cAAc,UAAU,CAAC,SAAS,MAAM,CAAC;QACrD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,WAAW,CAAC,QAAQ,MAAM,WAAW,CAAC,UAAU,MAAM,WAAW,CAAC,MAAM,IAAI,CAAC;QACrG,MAAM,IAAI,cAAc,WAAW,CAAC,cAAc,OAAO,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const removeMemberSchema: z.ZodObject<{
|
|
3
|
+
force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
4
|
+
member_id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
member_name: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
force: boolean;
|
|
8
|
+
member_id?: string | undefined;
|
|
9
|
+
member_name?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
force?: boolean | undefined;
|
|
12
|
+
member_id?: string | undefined;
|
|
13
|
+
member_name?: string | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type RemoveMemberInput = z.infer<typeof removeMemberSchema>;
|
|
16
|
+
export declare function removeMember(input: RemoveMemberInput): Promise<string>;
|
|
17
|
+
//# sourceMappingURL=remove-member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-member.d.ts","sourceRoot":"","sources":["../../src/tools/remove-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAG7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyG5E"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { removeAgent as removeFromRegistry, getAllAgents } from '../services/registry.js';
|
|
4
|
+
import { getStrategy } from '../services/strategy.js';
|
|
5
|
+
import { getOsCommands } from '../os/index.js';
|
|
6
|
+
import { getProvider } from '../providers/index.js';
|
|
7
|
+
import { getAgentOS } from '../utils/agent-helpers.js';
|
|
8
|
+
import { memberIdentifier, resolveMember } from '../utils/resolve-member.js';
|
|
9
|
+
import { removeKnownHost } from '../services/known-hosts.js';
|
|
10
|
+
import { writeStatusline, readMemberStatus } from '../services/statusline.js';
|
|
11
|
+
import { cancelCredentialCleanup } from '../services/credential-cleanup.js';
|
|
12
|
+
import { getStallDetector } from '../services/stall/index.js';
|
|
13
|
+
import { githubProvider } from '../services/vcs/github.js';
|
|
14
|
+
import { bitbucketProvider } from '../services/vcs/bitbucket.js';
|
|
15
|
+
import { azureDevOpsProvider } from '../services/vcs/azure-devops.js';
|
|
16
|
+
import { logLine } from '../utils/log-helpers.js';
|
|
17
|
+
const vcsProviders = {
|
|
18
|
+
github: githubProvider,
|
|
19
|
+
bitbucket: bitbucketProvider,
|
|
20
|
+
'azure-devops': azureDevOpsProvider,
|
|
21
|
+
};
|
|
22
|
+
export const removeMemberSchema = z.object({
|
|
23
|
+
...memberIdentifier,
|
|
24
|
+
force: z.boolean().optional().default(false).describe('Remove even if the member is currently busy'),
|
|
25
|
+
});
|
|
26
|
+
export async function removeMember(input) {
|
|
27
|
+
const agentOrError = resolveMember(input.member_id, input.member_name);
|
|
28
|
+
if (typeof agentOrError === 'string')
|
|
29
|
+
return agentOrError;
|
|
30
|
+
const agent = agentOrError;
|
|
31
|
+
// Idle check: block if the member is currently running a task
|
|
32
|
+
const currentStatus = readMemberStatus(agent.id);
|
|
33
|
+
if (currentStatus === 'busy' && !input.force) {
|
|
34
|
+
return `⛔ Member "${agent.friendlyName}" is currently busy. Wait for the task to complete or set force=true to remove anyway.`;
|
|
35
|
+
}
|
|
36
|
+
const strategy = getStrategy(agent);
|
|
37
|
+
const warnings = [];
|
|
38
|
+
// Cancel any pending credential cleanup timer
|
|
39
|
+
cancelCredentialCleanup(agent.id);
|
|
40
|
+
// Best-effort: clear auth credentials from the member before removing
|
|
41
|
+
// Skip for local members — their credentials belong to the host machine
|
|
42
|
+
if (agent.agentType === 'remote') {
|
|
43
|
+
try {
|
|
44
|
+
const conn = await strategy.testConnection();
|
|
45
|
+
if (conn.ok) {
|
|
46
|
+
const cmds = getOsCommands(getAgentOS(agent));
|
|
47
|
+
const exec = async (cmd) => {
|
|
48
|
+
const r = await strategy.execCommand(cmd, 15000);
|
|
49
|
+
return r.stdout;
|
|
50
|
+
};
|
|
51
|
+
const provider = getProvider(agent.llmProvider);
|
|
52
|
+
// Remove credentials files for any provider that uses them
|
|
53
|
+
const credentialFiles = provider.oauthCredentialFiles() ?? [];
|
|
54
|
+
for (const file of credentialFiles) {
|
|
55
|
+
await strategy.execCommand(cmds.credentialFileRemove(file.remotePath), 10000).catch(() => { });
|
|
56
|
+
}
|
|
57
|
+
// Remove the provider's API key env var from shell profiles
|
|
58
|
+
for (const cmd of cmds.unsetEnv(provider.authEnvVar)) {
|
|
59
|
+
await strategy.execCommand(cmd, 10000).catch(() => { });
|
|
60
|
+
}
|
|
61
|
+
// VCS auth revoke: remove git credential helper if a VCS provider is configured
|
|
62
|
+
if (agent.vcsProvider) {
|
|
63
|
+
const vcsService = vcsProviders[agent.vcsProvider];
|
|
64
|
+
if (vcsService) {
|
|
65
|
+
await vcsService.revoke(agent, cmds, exec).catch(() => { });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// SSH key removal: remove fleet public key from remote authorized_keys
|
|
69
|
+
if (agent.keyPath) {
|
|
70
|
+
const pubKeyPath = `${agent.keyPath}.pub`;
|
|
71
|
+
try {
|
|
72
|
+
const pubKey = fs.readFileSync(pubKeyPath, 'utf-8').trim();
|
|
73
|
+
// Use the key type + base64 portion to match (ignore trailing comment)
|
|
74
|
+
const parts = pubKey.split(/\s+/);
|
|
75
|
+
const keyMatch = parts.slice(0, 2).join(' ');
|
|
76
|
+
// Escape forward slashes for sed delimiter
|
|
77
|
+
const escapedKey = keyMatch.replace(/\//g, '\\/');
|
|
78
|
+
await strategy.execCommand(`sed -i '/${escapedKey}/d' ~/.ssh/authorized_keys`, 10000).catch(() => { });
|
|
79
|
+
}
|
|
80
|
+
catch { /* pub key file not found — skip */ }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
warnings.push('Member was offline — could not clear auth credentials');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
warnings.push('Could not connect to member — auth credentials may still be present');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
strategy.close();
|
|
92
|
+
// Clean up local key files only if no other member shares this key
|
|
93
|
+
if (agent.keyPath) {
|
|
94
|
+
const sharedKey = getAllAgents().some(a => a.id !== agent.id && a.keyPath === agent.keyPath);
|
|
95
|
+
if (!sharedKey) {
|
|
96
|
+
try {
|
|
97
|
+
fs.unlinkSync(agent.keyPath);
|
|
98
|
+
}
|
|
99
|
+
catch { }
|
|
100
|
+
try {
|
|
101
|
+
fs.unlinkSync(`${agent.keyPath}.pub`);
|
|
102
|
+
}
|
|
103
|
+
catch { }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Clean up known_hosts entry
|
|
107
|
+
if (agent.host && agent.port) {
|
|
108
|
+
removeKnownHost(agent.host, agent.port);
|
|
109
|
+
}
|
|
110
|
+
const removed = removeFromRegistry(agent.id);
|
|
111
|
+
getStallDetector().remove(agent.id);
|
|
112
|
+
writeStatusline();
|
|
113
|
+
if (removed) {
|
|
114
|
+
logLine('remove_member', `id=${agent.id} name=${agent.friendlyName}`, agent);
|
|
115
|
+
let result = `✅ Member "${agent.friendlyName}" (${agent.id}) has been removed.\n\nTo refresh the member list in your UI, run /mcp and select Reconnect.`;
|
|
116
|
+
if (warnings.length > 0) {
|
|
117
|
+
result += `\n\n⚠️ Warnings:\n`;
|
|
118
|
+
for (const w of warnings) {
|
|
119
|
+
result += ` - ${w}\n`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
return `Failed to remove member "${agent.id}".`;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=remove-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-member.js","sourceRoot":"","sources":["../../src/tools/remove-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const revokeVcsAuthSchema: z.ZodObject<{
|
|
3
|
+
provider: z.ZodEnum<["github", "bitbucket", "azure-devops"]>;
|
|
4
|
+
label: z.ZodOptional<z.ZodString>;
|
|
5
|
+
scope_url: z.ZodOptional<z.ZodString>;
|
|
6
|
+
member_id: z.ZodOptional<z.ZodString>;
|
|
7
|
+
member_name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
provider: "github" | "bitbucket" | "azure-devops";
|
|
10
|
+
member_id?: string | undefined;
|
|
11
|
+
member_name?: string | undefined;
|
|
12
|
+
label?: string | undefined;
|
|
13
|
+
scope_url?: string | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
provider: "github" | "bitbucket" | "azure-devops";
|
|
16
|
+
member_id?: string | undefined;
|
|
17
|
+
member_name?: string | undefined;
|
|
18
|
+
label?: string | undefined;
|
|
19
|
+
scope_url?: string | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type RevokeVcsAuthInput = z.infer<typeof revokeVcsAuthSchema>;
|
|
22
|
+
export declare function revokeVcsAuth(input: RevokeVcsAuthInput): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=revoke-vcs-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-vcs-auth.d.ts","sourceRoot":"","sources":["../../src/tools/revoke-vcs-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC9E"}
|