@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,84 @@
|
|
|
1
|
+
import { getAgent, findAgentByName, updateAgent } from '../services/registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Look up an agent by ID or return a formatted error string.
|
|
4
|
+
* Eliminates the repeated pattern of getAgent() + "not found" check in every tool.
|
|
5
|
+
*/
|
|
6
|
+
export function getAgentOrFail(id) {
|
|
7
|
+
const agent = getAgent(id) ?? findAgentByName(id);
|
|
8
|
+
if (!agent) {
|
|
9
|
+
return `Member "${id}" not found.`;
|
|
10
|
+
}
|
|
11
|
+
return agent;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the OS for an agent, defaulting to 'linux'.
|
|
15
|
+
* Eliminates repeated `agent.os ?? 'linux'` casts.
|
|
16
|
+
*/
|
|
17
|
+
export function getAgentOS(agent) {
|
|
18
|
+
return (agent.os ?? 'linux');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format a host label for display.
|
|
22
|
+
* Local agents show "(local)", remote agents show "host:port".
|
|
23
|
+
*/
|
|
24
|
+
export function formatAgentHost(agent) {
|
|
25
|
+
return agent.agentType === 'local' ? '(local)' : `${agent.host}:${agent.port}`;
|
|
26
|
+
}
|
|
27
|
+
// T7: idle manager hook — registered by IdleManager.start() via setIdleTouchHook().
|
|
28
|
+
// Kept as a callback to avoid circular import:
|
|
29
|
+
// idle-manager → activity → strategy → agent-helpers
|
|
30
|
+
let idleTouchHook;
|
|
31
|
+
/**
|
|
32
|
+
* Register a callback invoked on every touchAgent call.
|
|
33
|
+
* Called by IdleManager.start() to wire timer resets into tool calls.
|
|
34
|
+
*/
|
|
35
|
+
export function setIdleTouchHook(fn) {
|
|
36
|
+
idleTouchHook = fn;
|
|
37
|
+
}
|
|
38
|
+
const EXPIRY_WARNING_MS = 10 * 60 * 1000; // 10 minutes
|
|
39
|
+
/**
|
|
40
|
+
* Check if an agent's VCS token is expired or expiring soon.
|
|
41
|
+
* Returns a warning string if action is needed, or null if OK / no expiry tracked.
|
|
42
|
+
*/
|
|
43
|
+
export function checkVcsTokenExpiry(agent, now = new Date()) {
|
|
44
|
+
if (!agent.vcsTokenExpiresAt)
|
|
45
|
+
return null;
|
|
46
|
+
const expiresAt = new Date(agent.vcsTokenExpiresAt);
|
|
47
|
+
const remaining = expiresAt.getTime() - now.getTime();
|
|
48
|
+
if (remaining <= 0) {
|
|
49
|
+
return `⚠️ VCS token expired at ${agent.vcsTokenExpiresAt} — re-run provision_vcs_auth to refresh.`;
|
|
50
|
+
}
|
|
51
|
+
if (remaining <= EXPIRY_WARNING_MS) {
|
|
52
|
+
const mins = Math.ceil(remaining / 60000);
|
|
53
|
+
return `⚠️ VCS token expires in ${mins} minute${mins === 1 ? '' : 's'} (${agent.vcsTokenExpiresAt}) — consider refreshing.`;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// In-memory PID store — transient, lives only for the server process lifetime.
|
|
58
|
+
// PIDs are OS-level resources; persisting them to disk would leave stale entries
|
|
59
|
+
// across restarts, so an in-memory map is the right storage layer here.
|
|
60
|
+
const _activePids = new Map();
|
|
61
|
+
/** Return the stored PID for an agent, or undefined if none is recorded. */
|
|
62
|
+
export function getStoredPid(agentId) {
|
|
63
|
+
return _activePids.get(agentId);
|
|
64
|
+
}
|
|
65
|
+
/** Record the active PID for an agent (called after the process is spawned). */
|
|
66
|
+
export function setStoredPid(agentId, pid) {
|
|
67
|
+
_activePids.set(agentId, pid);
|
|
68
|
+
}
|
|
69
|
+
/** Remove the stored PID for an agent (called after kill or successful completion). */
|
|
70
|
+
export function clearStoredPid(agentId) {
|
|
71
|
+
_activePids.delete(agentId);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Touch an agent's lastUsed timestamp and optionally update its sessionId.
|
|
75
|
+
*/
|
|
76
|
+
export function touchAgent(agentId, sessionId) {
|
|
77
|
+
const updates = { lastUsed: new Date().toISOString() };
|
|
78
|
+
if (sessionId !== undefined) {
|
|
79
|
+
updates.sessionId = sessionId;
|
|
80
|
+
}
|
|
81
|
+
updateAgent(agentId, updates);
|
|
82
|
+
idleTouchHook?.(agentId); // T7: notify idle manager to reset idle timer
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=agent-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../src/utils/agent-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip ANSI escape sequences and non-printable control characters from a string.
|
|
3
|
+
* Used to clean PTY-captured output from agy.exe which writes via Windows Console API.
|
|
4
|
+
*/
|
|
5
|
+
export declare function stripAnsi(raw: string): string;
|
|
6
|
+
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/utils/ansi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc7C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip ANSI escape sequences and non-printable control characters from a string.
|
|
3
|
+
* Used to clean PTY-captured output from agy.exe which writes via Windows Console API.
|
|
4
|
+
*/
|
|
5
|
+
export function stripAnsi(raw) {
|
|
6
|
+
return raw
|
|
7
|
+
// CSI sequences: ESC [ ... (colors, cursor movement, etc.)
|
|
8
|
+
.replace(/\x1B\[[\x30-\x3F]*[\x20-\x2F]*[\x40-\x7E]/g, '')
|
|
9
|
+
// OSC sequences: ESC ] ... ST or BEL
|
|
10
|
+
.replace(/\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)/g, '')
|
|
11
|
+
// DCS / PM / APC / SOS sequences: ESC [P X ^ _] ... ST
|
|
12
|
+
.replace(/\x1B[P X^_][^\x1B]*\x1B\\/g, '')
|
|
13
|
+
// Other two-char ESC sequences: ESC <char>
|
|
14
|
+
.replace(/\x1B[^\[]/g, '')
|
|
15
|
+
// Remaining lone ESC
|
|
16
|
+
.replace(/\x1B/g, '')
|
|
17
|
+
// Non-printable control chars (keep \n and \t)
|
|
18
|
+
.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F]/g, '');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/utils/ansi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG;QACR,2DAA2D;SAC1D,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC;QAC1D,qCAAqC;SACpC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;QAClD,uDAAuD;SACtD,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC;QAC1C,2CAA2C;SAC1C,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC1B,qBAAqB;SACpB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACrB,+CAA+C;SAC9C,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Agent } from '../types.js';
|
|
2
|
+
import type { RemoteOS } from './platform.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a platform-correct inline export prefix for all stored auth env vars.
|
|
5
|
+
* Returns empty string if the agent has no stored env vars.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildAuthEnvPrefix(agent: Agent, os: RemoteOS): string;
|
|
8
|
+
//# sourceMappingURL=auth-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-env.d.ts","sourceRoot":"","sources":["../../src/utils/auth-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAwBrE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { decryptPassword } from './crypto.js';
|
|
2
|
+
import { escapeDoubleQuoted } from './shell-escape.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a platform-correct inline export prefix for all stored auth env vars.
|
|
5
|
+
* Returns empty string if the agent has no stored env vars.
|
|
6
|
+
*/
|
|
7
|
+
export function buildAuthEnvPrefix(agent, os) {
|
|
8
|
+
const vars = agent.encryptedEnvVars;
|
|
9
|
+
if (!vars || Object.keys(vars).length === 0)
|
|
10
|
+
return '';
|
|
11
|
+
const parts = [];
|
|
12
|
+
for (const [name, encrypted] of Object.entries(vars)) {
|
|
13
|
+
const value = decryptPassword(encrypted);
|
|
14
|
+
if (os === 'windows') {
|
|
15
|
+
// PowerShell: single-quote escaping (matching windows.ts envPrefix pattern)
|
|
16
|
+
const escaped = value.replace(/'/g, "''");
|
|
17
|
+
parts.push(`$env:${name}='${escaped}'`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// Linux/macOS: double-quote escaping
|
|
21
|
+
const escaped = escapeDoubleQuoted(value);
|
|
22
|
+
parts.push(`export ${name}="${escaped}"`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (os === 'windows') {
|
|
26
|
+
return parts.join('; ') + '; ';
|
|
27
|
+
}
|
|
28
|
+
return parts.join(' && ') + ' && ';
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=auth-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-env.js","sourceRoot":"","sources":["../../src/utils/auth-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,EAAY;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,4EAA4E;YAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-secret.d.ts","sourceRoot":"","sources":["../../src/utils/collect-secret.ts"],"names":[],"mappings":"AAcA,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsEnE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { secureInput } from './secure-input.js';
|
|
2
|
+
import { OOB_TIMEOUT_MS } from './oob-timeout.js';
|
|
3
|
+
const readKey = () => new Promise((resolve) => {
|
|
4
|
+
process.stdin.setRawMode(true);
|
|
5
|
+
process.stdin.resume();
|
|
6
|
+
process.stdin.once('data', (buf) => {
|
|
7
|
+
process.stdin.setRawMode(false);
|
|
8
|
+
process.stdin.pause();
|
|
9
|
+
resolve(buf);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
export async function collectSecret(prompt) {
|
|
13
|
+
const timeout = setTimeout(() => {
|
|
14
|
+
process.stderr.write('\n ⏱ Timed out. Closing.\n');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}, OOB_TIMEOUT_MS);
|
|
17
|
+
let secretValue;
|
|
18
|
+
while (true) {
|
|
19
|
+
try {
|
|
20
|
+
secretValue = await secureInput({ prompt: `${prompt}: ` });
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
clearTimeout(timeout);
|
|
24
|
+
console.error('Cancelled.');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
return ''; // unreachable
|
|
27
|
+
}
|
|
28
|
+
if (!secretValue) {
|
|
29
|
+
clearTimeout(timeout);
|
|
30
|
+
console.error('✗ Empty value. Aborting.');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
return ''; // unreachable
|
|
33
|
+
}
|
|
34
|
+
const DIM = '\x1b[2m', RESET = '\x1b[0m';
|
|
35
|
+
process.stderr.write(`${DIM} [Enter] proceed [v] view [Esc] re-enter${RESET}\n`);
|
|
36
|
+
const key1 = (await readKey())[0];
|
|
37
|
+
// Cursor is at N+2 (blank line after hint's \n). Password line is N, hint is N+1.
|
|
38
|
+
if (key1 === 0x76 || key1 === 0x56) {
|
|
39
|
+
// v/V: reveal in place — clear blank N+2, hint N+1, password N, reprint as plaintext
|
|
40
|
+
process.stderr.write('\r\x1b[K'); // clear blank N+2
|
|
41
|
+
process.stderr.write('\x1b[1A\r\x1b[K'); // up to N+1, clear hint
|
|
42
|
+
process.stderr.write('\x1b[1A\r\x1b[K'); // up to N, clear password line
|
|
43
|
+
process.stderr.write(`√ ${prompt}: ${secretValue}\n`);
|
|
44
|
+
process.stderr.write(`${DIM} [Enter] confirm [Esc] re-enter${RESET}\n`);
|
|
45
|
+
// Cursor now at N+2 again (blank after confirm hint's \n)
|
|
46
|
+
const key2 = (await readKey())[0];
|
|
47
|
+
if (key2 === 0x1b) {
|
|
48
|
+
// Esc: clear blank N+2, confirm hint N+1, value line N — re-enter in place
|
|
49
|
+
process.stderr.write('\r\x1b[K');
|
|
50
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
51
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Enter: clear blank N+2, confirm hint N+1, value line N — reprint with stars
|
|
56
|
+
process.stderr.write('\r\x1b[K');
|
|
57
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
58
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
59
|
+
process.stderr.write(`√ ${prompt}: ${'*'.repeat(secretValue.length)}\n`);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (key1 === 0x1b) {
|
|
64
|
+
// Esc: clear blank N+2, hint N+1, password N — re-enter in place
|
|
65
|
+
process.stderr.write('\r\x1b[K');
|
|
66
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
67
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Enter or anything else: clear blank N+2, hint N+1 — password line stays
|
|
72
|
+
process.stderr.write('\r\x1b[K');
|
|
73
|
+
process.stderr.write('\x1b[1A\r\x1b[K');
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
clearTimeout(timeout);
|
|
78
|
+
return secretValue;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=collect-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-secret.js","sourceRoot":"","sources":["../../src/utils/collect-secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type CredentialStatus = {
|
|
2
|
+
status: 'valid';
|
|
3
|
+
} | {
|
|
4
|
+
status: 'near-expiry';
|
|
5
|
+
minutesLeft: number;
|
|
6
|
+
} | {
|
|
7
|
+
status: 'expired-refreshable';
|
|
8
|
+
} | {
|
|
9
|
+
status: 'expired-no-refresh';
|
|
10
|
+
};
|
|
11
|
+
export declare function validateCredentials(json: string): CredentialStatus | null;
|
|
12
|
+
export declare function credentialStatusNote(cs: CredentialStatus | null): string;
|
|
13
|
+
//# sourceMappingURL=credential-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-validation.d.ts","sourceRoot":"","sources":["../../src/utils/credential-validation.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,qBAAqB,CAAA;CAAE,GACjC;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAErC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAkBzE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CASxE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const NEAR_EXPIRY_THRESHOLD_MS = 60 * 60 * 1000; // 1 hour
|
|
2
|
+
export function validateCredentials(json) {
|
|
3
|
+
let parsed;
|
|
4
|
+
try {
|
|
5
|
+
parsed = JSON.parse(json);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const oauth = parsed?.claudeAiOauth;
|
|
11
|
+
if (!oauth?.expiresAt)
|
|
12
|
+
return null;
|
|
13
|
+
const msLeft = new Date(oauth.expiresAt).getTime() - Date.now();
|
|
14
|
+
if (msLeft <= 0) {
|
|
15
|
+
return oauth.refreshToken
|
|
16
|
+
? { status: 'expired-refreshable' }
|
|
17
|
+
: { status: 'expired-no-refresh' };
|
|
18
|
+
}
|
|
19
|
+
return msLeft < NEAR_EXPIRY_THRESHOLD_MS
|
|
20
|
+
? { status: 'near-expiry', minutesLeft: Math.ceil(msLeft / 60000) }
|
|
21
|
+
: { status: 'valid' };
|
|
22
|
+
}
|
|
23
|
+
export function credentialStatusNote(cs) {
|
|
24
|
+
if (!cs)
|
|
25
|
+
return '';
|
|
26
|
+
if (cs.status === 'valid')
|
|
27
|
+
return '';
|
|
28
|
+
if (cs.status === 'near-expiry') {
|
|
29
|
+
return `Note: Token expires in ~${cs.minutesLeft} minute${cs.minutesLeft === 1 ? '' : 's'}. Consider running /login to refresh.`;
|
|
30
|
+
}
|
|
31
|
+
return cs.status === 'expired-refreshable'
|
|
32
|
+
? 'Note: Token is expired but has a refresh token — the agent CLI will auto-refresh on first use.'
|
|
33
|
+
: 'Token is expired with no refresh token. Run /login to get a fresh token before provisioning.';
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=credential-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-validation.js","sourceRoot":"","sources":["../../src/utils/credential-validation.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAQ1D,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,MAAM,EAAE,aAAa,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,SAAS;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEhE,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC,YAAY;YACvB,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE;YACnC,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,GAAG,wBAAwB;QACtC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;QACnE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAA2B;IAC9D,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,EAAE,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,2BAA2B,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,uCAAuC,CAAC;IACnI,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,KAAK,qBAAqB;QACxC,CAAC,CAAC,gGAAgG;QAClG,CAAC,CAAC,8FAA8F,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAgDA,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAW1D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { FLEET_DIR } from '../paths.js';
|
|
5
|
+
import { logWarn } from './log-helpers.js';
|
|
6
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
7
|
+
const KEY_LENGTH = 32;
|
|
8
|
+
const IV_LENGTH = 16;
|
|
9
|
+
const SALT_PATH = path.join(FLEET_DIR, 'salt');
|
|
10
|
+
const CREDENTIALS_PATH = path.join(FLEET_DIR, 'credentials.json');
|
|
11
|
+
/**
|
|
12
|
+
* Get or create a per-installation random AES-256-GCM key.
|
|
13
|
+
* The key is stored in ~/.apra-fleet/data/salt (32 random bytes, hex-encoded, mode 0o600).
|
|
14
|
+
* On first run a fresh random key is generated; subsequent runs load from file.
|
|
15
|
+
*/
|
|
16
|
+
function getOrCreateKey() {
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(SALT_PATH)) {
|
|
19
|
+
return Buffer.from(fs.readFileSync(SALT_PATH, 'utf-8').trim(), 'hex');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Fall through to create new key
|
|
24
|
+
}
|
|
25
|
+
if (!fs.existsSync(FLEET_DIR)) {
|
|
26
|
+
fs.mkdirSync(FLEET_DIR, { recursive: true, mode: 0o700 });
|
|
27
|
+
}
|
|
28
|
+
const key = crypto.randomBytes(KEY_LENGTH);
|
|
29
|
+
fs.writeFileSync(SALT_PATH, key.toString('hex'), { mode: 0o600 });
|
|
30
|
+
// Migration: if credentials.json already exists, it was encrypted with the
|
|
31
|
+
// old deriveKey() scheme and cannot be decrypted with the new random key.
|
|
32
|
+
// Back it up so the user's data isn't silently lost.
|
|
33
|
+
if (fs.existsSync(CREDENTIALS_PATH)) {
|
|
34
|
+
fs.renameSync(CREDENTIALS_PATH, CREDENTIALS_PATH + '.bak');
|
|
35
|
+
logWarn('crypto', '[apra-fleet] Encryption key upgraded to random persistent key. ' +
|
|
36
|
+
'Existing stored credentials could not be migrated and have been backed up to credentials.json.bak. ' +
|
|
37
|
+
'Please re-enter any stored API keys via credential_store_set.');
|
|
38
|
+
}
|
|
39
|
+
return key;
|
|
40
|
+
}
|
|
41
|
+
export function encryptPassword(plaintext) {
|
|
42
|
+
const key = getOrCreateKey();
|
|
43
|
+
const iv = crypto.randomBytes(IV_LENGTH);
|
|
44
|
+
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
|
|
45
|
+
let encrypted = cipher.update(plaintext, 'utf8', 'hex');
|
|
46
|
+
encrypted += cipher.final('hex');
|
|
47
|
+
const authTag = cipher.getAuthTag();
|
|
48
|
+
return `${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}`;
|
|
49
|
+
}
|
|
50
|
+
export function decryptPassword(ciphertext) {
|
|
51
|
+
const [ivHex, authTagHex, encrypted] = ciphertext.split(':');
|
|
52
|
+
const iv = Buffer.from(ivHex, 'hex');
|
|
53
|
+
const authTag = Buffer.from(authTagHex, 'hex');
|
|
54
|
+
const key = getOrCreateKey();
|
|
55
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
|
|
56
|
+
decipher.setAuthTag(authTag);
|
|
57
|
+
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
58
|
+
decrypted += decipher.final('utf8');
|
|
59
|
+
return decrypted;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-merge.d.ts","sourceRoot":"","sources":["../../src/utils/deep-merge.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEvE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAkBzF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function isObject(item) {
|
|
2
|
+
return (item && typeof item === 'object' && !Array.isArray(item));
|
|
3
|
+
}
|
|
4
|
+
export function deepMerge(target, source) {
|
|
5
|
+
const output = { ...target };
|
|
6
|
+
if (isObject(target) && isObject(source)) {
|
|
7
|
+
Object.keys(source).forEach(key => {
|
|
8
|
+
if (isObject(source[key])) {
|
|
9
|
+
if (!(key in target)) {
|
|
10
|
+
Object.assign(output, { [key]: source[key] });
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
output[key] = deepMerge(target[key], source[key]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
Object.assign(output, { [key]: source[key] });
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return output;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=deep-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-merge.js","sourceRoot":"","sources":["../../src/utils/deep-merge.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAY,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,SAAS,CAAqC,MAAS,EAAE,MAAS;IAChF,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAW,CAAC;IAEtC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACL,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAc,CAA4B,EAAE,MAAM,CAAC,GAAG,CAA4B,CAAC,CAAC;gBAClJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enforce restrictive file permissions (owner-only read/write).
|
|
3
|
+
* On Linux/macOS: chmod 0o600. On Windows: no-op (NTFS ACLs handle this).
|
|
4
|
+
*
|
|
5
|
+
* Centralises the platform check — callers never branch on process.platform.
|
|
6
|
+
*/
|
|
7
|
+
export declare function enforceOwnerOnly(filePath: string): void;
|
|
8
|
+
//# sourceMappingURL=file-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-permissions.d.ts","sourceRoot":"","sources":["../../src/utils/file-permissions.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGvD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Enforce restrictive file permissions (owner-only read/write).
|
|
4
|
+
* On Linux/macOS: chmod 0o600. On Windows: no-op (NTFS ACLs handle this).
|
|
5
|
+
*
|
|
6
|
+
* Centralises the platform check — callers never branch on process.platform.
|
|
7
|
+
*/
|
|
8
|
+
export function enforceOwnerOnly(filePath) {
|
|
9
|
+
if (process.platform === 'win32')
|
|
10
|
+
return;
|
|
11
|
+
fs.chmodSync(filePath, 0o600);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=file-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-permissions.js","sourceRoot":"","sources":["../../src/utils/file-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IACzC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-parser.d.ts","sourceRoot":"","sources":["../../src/utils/gpu-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQtE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse GPU utilization percentage from nvidia-smi stdout.
|
|
3
|
+
* Returns the integer percentage (0-100) or undefined if non-numeric.
|
|
4
|
+
*/
|
|
5
|
+
export function parseGpuUtilization(stdout) {
|
|
6
|
+
const trimmed = stdout.trim();
|
|
7
|
+
if (!trimmed)
|
|
8
|
+
return undefined;
|
|
9
|
+
const parsed = parseInt(trimmed, 10);
|
|
10
|
+
if (isNaN(parsed) || parsed < 0 || parsed > 100) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
return parsed;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=gpu-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-parser.js","sourceRoot":"","sources":["../../src/utils/gpu-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Returns the resolved path of the active log file, or null if logging is unavailable. */
|
|
2
|
+
export declare function getActiveLogFile(): string | null;
|
|
3
|
+
type LogAgent = {
|
|
4
|
+
id: string;
|
|
5
|
+
friendlyName: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function logLine(tag: string, msg: string, agent?: LogAgent, inv?: string): void;
|
|
8
|
+
export declare function logWarn(tag: string, msg: string, agent?: LogAgent): void;
|
|
9
|
+
export declare function logError(tag: string, msg: string, agent?: LogAgent): void;
|
|
10
|
+
export declare class LogScope {
|
|
11
|
+
private readonly inv;
|
|
12
|
+
private readonly start;
|
|
13
|
+
private readonly tag;
|
|
14
|
+
private readonly agent?;
|
|
15
|
+
constructor(tag: string, entryMsg: string, agent?: LogAgent);
|
|
16
|
+
getInv(): string;
|
|
17
|
+
info(msg: string): void;
|
|
18
|
+
warn(msg: string): void;
|
|
19
|
+
error(msg: string): void;
|
|
20
|
+
ok(msg?: string): void;
|
|
21
|
+
fail(msg: string): void;
|
|
22
|
+
abort(msg: string): void;
|
|
23
|
+
private _emit;
|
|
24
|
+
private _exit;
|
|
25
|
+
}
|
|
26
|
+
export declare function maskSecrets(text: string): string;
|
|
27
|
+
export declare function truncateForLog(text: string, maxLen?: number): string;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=log-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/log-helpers.ts"],"names":[],"mappings":"AAOA,2FAA2F;AAC3F,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAGhD;AAgBD,KAAK,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AA4BrD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAItF;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAIxE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAIzE;AAQD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAW;gBAEtB,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ;IAQ3D,MAAM,IAAI,MAAM;IAEhB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAI,IAAI;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAI,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAExB,EAAE,CAAC,GAAG,SAAS,GAAK,IAAI;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAI,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAExB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,KAAK;CAGd;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAGhE"}
|