@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
package/dist/index.js
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { serverVersion } from './version.js';
|
|
3
|
+
import { getDeliveryInfo } from './delivery-mode.js';
|
|
4
|
+
import { logLine, logError } from './utils/log-helpers.js';
|
|
5
|
+
// --- CLI dispatch (before MCP server imports to keep --version fast) ---
|
|
6
|
+
const arg = process.argv[2];
|
|
7
|
+
if (arg === '--version' || arg === '-v') {
|
|
8
|
+
const info = getDeliveryInfo();
|
|
9
|
+
console.log(`apra-fleet ${serverVersion}`);
|
|
10
|
+
console.log(` Mode: ${info.mode}${info.mode !== 'sea' ? ' (node ' + info.nodeVersion + ')' : ''}`);
|
|
11
|
+
console.log(` Binary: ${info.binary}`);
|
|
12
|
+
process.exit(0);
|
|
13
|
+
}
|
|
14
|
+
if (arg === '--help' || arg === '-h') {
|
|
15
|
+
console.log(`apra-fleet ${serverVersion}
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
apra-fleet Start MCP server (stdio)
|
|
19
|
+
apra-fleet update Check for and install latest update
|
|
20
|
+
apra-fleet update --check Check for update
|
|
21
|
+
apra-fleet install Install binary + hooks + statusline + MCP + fleet & PM skills (default)
|
|
22
|
+
apra-fleet install --skill all Same as bare install (all skills)
|
|
23
|
+
apra-fleet install --skill fleet Install fleet skill only
|
|
24
|
+
apra-fleet install --skill pm Install PM skill (also installs fleet — PM depends on fleet)
|
|
25
|
+
apra-fleet install --skill none Skip skill installation
|
|
26
|
+
apra-fleet install --no-skill Same as --skill none
|
|
27
|
+
apra-fleet uninstall Remove binary, hooks, and MCP registration
|
|
28
|
+
apra-fleet secret --set <name> Deliver a secret to a waiting request
|
|
29
|
+
apra-fleet secret --list List secrets
|
|
30
|
+
apra-fleet secret --delete <name> Delete a secret
|
|
31
|
+
apra-fleet secret --confirm <credential-name> Confirm network egress for that credential (interactive)
|
|
32
|
+
apra-fleet auth --oauth [--llm <provider>] <token> Write OAuth token to provider credential file
|
|
33
|
+
apra-fleet auth --oauth [--llm <provider>] secure.<name> Resolve token from persistent credential store
|
|
34
|
+
apra-fleet auth --api-key [--llm <provider>] <token> Set API key in shell profiles / system env
|
|
35
|
+
apra-fleet auth --api-key [--llm <provider>] secure.<name> Resolve API key from persistent credential store
|
|
36
|
+
apra-fleet --version Print version
|
|
37
|
+
apra-fleet --help Show this help`);
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
if (arg === 'install') {
|
|
41
|
+
// Dynamic import so MCP deps aren't loaded for install
|
|
42
|
+
import('./cli/install.js')
|
|
43
|
+
.then(m => m.runInstall(process.argv.slice(3)))
|
|
44
|
+
.catch(err => { logError('cli', `Install failed: ${err.message}`); process.exit(1); });
|
|
45
|
+
}
|
|
46
|
+
else if (arg === 'secret') {
|
|
47
|
+
import('./cli/secret.js')
|
|
48
|
+
.then(m => m.runSecret(process.argv.slice(3)))
|
|
49
|
+
.catch(err => { logError('cli', `Secret failed: ${err.message}`); process.exit(1); });
|
|
50
|
+
}
|
|
51
|
+
else if (arg === 'uninstall') {
|
|
52
|
+
import('./cli/uninstall.js')
|
|
53
|
+
.then(m => m.runUninstall(process.argv.slice(3)))
|
|
54
|
+
.catch(err => { logError('cli', `Uninstall failed: ${err.message}`); process.exit(1); });
|
|
55
|
+
}
|
|
56
|
+
else if (arg === 'auth') {
|
|
57
|
+
import('./cli/auth.js')
|
|
58
|
+
.then(m => m.runAuth(process.argv.slice(3)))
|
|
59
|
+
.catch(err => { logError('cli', `Auth failed: ${err.message}`); process.exit(1); });
|
|
60
|
+
}
|
|
61
|
+
else if (arg === 'update') {
|
|
62
|
+
const rest = process.argv.slice(3);
|
|
63
|
+
if (rest.includes('--help') || rest.includes('-h')) {
|
|
64
|
+
console.log(`apra-fleet update
|
|
65
|
+
|
|
66
|
+
Checks GitHub for the latest stable release and installs it.
|
|
67
|
+
|
|
68
|
+
Usage:
|
|
69
|
+
apra-fleet update Check for and install the latest release.
|
|
70
|
+
Stops and restarts the running server
|
|
71
|
+
(the installer is run with --force).
|
|
72
|
+
apra-fleet update --check Check for an update without installing.
|
|
73
|
+
apra-fleet update --help Show this help.`);
|
|
74
|
+
process.exit(0);
|
|
75
|
+
}
|
|
76
|
+
if (rest.includes('--check')) {
|
|
77
|
+
import('./services/update-check.js')
|
|
78
|
+
.then(async (m) => {
|
|
79
|
+
await m.checkForUpdate();
|
|
80
|
+
const notice = m.getUpdateNotice();
|
|
81
|
+
if (notice)
|
|
82
|
+
console.log(notice);
|
|
83
|
+
else
|
|
84
|
+
console.log('apra-fleet is up to date.');
|
|
85
|
+
})
|
|
86
|
+
.catch(err => { logError('cli', `Update check failed: ${err.message}`); process.exit(1); });
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
import('./cli/update.js')
|
|
90
|
+
.then(m => m.runUpdate())
|
|
91
|
+
.catch(err => { logError('cli', `Update failed: ${err.message}`); process.exit(1); });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (arg === undefined || arg === '--stdio') {
|
|
95
|
+
// Default: start MCP server
|
|
96
|
+
startServer();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error(`Error: unknown option '${arg}'`);
|
|
100
|
+
console.error(`\nRun 'apra-fleet --help' for usage.`);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
async function startServer() {
|
|
104
|
+
const { McpServer } = await import('@modelcontextprotocol/sdk/server/mcp.js');
|
|
105
|
+
const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
|
|
106
|
+
// Load onboarding state once at server startup (in-memory singleton)
|
|
107
|
+
const { loadOnboardingState, resetSessionFlags, getFirstRunPreamble, isJsonResponse, isActiveTool, getOnboardingNudge, getWelcomeBackPreamble } = await import('./services/onboarding.js');
|
|
108
|
+
const { VERBATIM_INSTRUCTIONS } = await import('./onboarding/text.js');
|
|
109
|
+
const { getAllAgents: getAgentsForStartup } = await import('./services/registry.js');
|
|
110
|
+
// Pass current member count so upgrade detection works: existing registry + no onboarding.json → skip banner
|
|
111
|
+
loadOnboardingState(getAgentsForStartup().length);
|
|
112
|
+
resetSessionFlags();
|
|
113
|
+
// Tool schemas and handlers
|
|
114
|
+
const { registerMemberSchema, registerMember } = await import('./tools/register-member.js');
|
|
115
|
+
const { listMembersSchema, listMembers } = await import('./tools/list-members.js');
|
|
116
|
+
const { removeMemberSchema, removeMember } = await import('./tools/remove-member.js');
|
|
117
|
+
const { updateMemberSchema, updateMember } = await import('./tools/update-member.js');
|
|
118
|
+
const { sendFilesSchema, sendFiles } = await import('./tools/send-files.js');
|
|
119
|
+
const { receiveFilesSchema, receiveFiles } = await import('./tools/receive-files.js');
|
|
120
|
+
const { executePromptSchema, executePrompt } = await import('./tools/execute-prompt.js');
|
|
121
|
+
const { executeCommandSchema, executeCommand } = await import('./tools/execute-command.js');
|
|
122
|
+
const { provisionAuthSchema, provisionAuth } = await import('./tools/provision-auth.js');
|
|
123
|
+
const { setupSSHKeySchema, setupSSHKey } = await import('./tools/setup-ssh-key.js');
|
|
124
|
+
const { setupGitAppSchema, setupGitApp } = await import('./tools/setup-git-app.js');
|
|
125
|
+
const { provisionVcsAuthSchema, provisionVcsAuth } = await import('./tools/provision-vcs-auth.js');
|
|
126
|
+
const { revokeVcsAuthSchema, revokeVcsAuth } = await import('./tools/revoke-vcs-auth.js');
|
|
127
|
+
const { fleetStatusSchema, fleetStatus } = await import('./tools/check-status.js');
|
|
128
|
+
const { memberDetailSchema, memberDetail } = await import('./tools/member-detail.js');
|
|
129
|
+
const { updateAgentCliSchema, updateAgentCli } = await import('./tools/update-agent-cli.js');
|
|
130
|
+
const { shutdownServerSchema, shutdownServer } = await import('./tools/shutdown-server.js');
|
|
131
|
+
const { composePermissionsSchema, composePermissions } = await import('./tools/compose-permissions.js');
|
|
132
|
+
const { cloudControlSchema, cloudControl } = await import('./tools/cloud-control.js');
|
|
133
|
+
const { monitorTaskSchema, monitorTask } = await import('./tools/monitor-task.js');
|
|
134
|
+
const { stopPromptSchema, stopPrompt } = await import('./tools/stop-prompt.js');
|
|
135
|
+
const { versionSchema, version } = await import('./tools/version.js');
|
|
136
|
+
const { credentialStoreSetSchema, credentialStoreSet } = await import('./tools/credential-store-set.js');
|
|
137
|
+
const { credentialStoreListSchema, credentialStoreList } = await import('./tools/credential-store-list.js');
|
|
138
|
+
const { credentialStoreDeleteSchema, credentialStoreDelete } = await import('./tools/credential-store-delete.js');
|
|
139
|
+
const { credentialStoreUpdateSchema, credentialStoreUpdate } = await import('./tools/credential-store-update.js');
|
|
140
|
+
const { closeAllConnections } = await import('./services/ssh.js');
|
|
141
|
+
const { idleManager } = await import('./services/cloud/idle-manager.js');
|
|
142
|
+
const { cleanupStaleTasks } = await import('./services/task-cleanup.js');
|
|
143
|
+
const { checkForUpdate } = await import('./services/update-check.js');
|
|
144
|
+
const { purgeExpiredCredentials } = await import('./services/credential-store.js');
|
|
145
|
+
const { getStallDetector } = await import('./services/stall/index.js');
|
|
146
|
+
// serverVersion is "v0.0.1_abc123" — strip 'v' prefix for semver-like version field
|
|
147
|
+
const versionNum = serverVersion.startsWith('v') ? serverVersion.slice(1) : serverVersion;
|
|
148
|
+
let capturedClientInfo = null;
|
|
149
|
+
const server = new McpServer({ name: `apra fleet server ${serverVersion}`, version: versionNum }, {
|
|
150
|
+
capabilities: { logging: {} },
|
|
151
|
+
instructions: VERBATIM_INSTRUCTIONS,
|
|
152
|
+
});
|
|
153
|
+
// Capture MCP clientInfo during initialize handshake for logging
|
|
154
|
+
const originalInitialize = server.initialize?.bind(server);
|
|
155
|
+
if (originalInitialize) {
|
|
156
|
+
server.initialize = async function (request) {
|
|
157
|
+
capturedClientInfo = request.clientInfo ?? null;
|
|
158
|
+
return originalInitialize(request);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// --- Onboarding helpers ---
|
|
162
|
+
// isActiveTool guards passive tools (version, shutdown_server) from consuming the banner.
|
|
163
|
+
// First-run banner bypasses the JSON check — passive guard is sufficient protection.
|
|
164
|
+
// Welcome-back and nudges still respect the JSON check.
|
|
165
|
+
async function sendOnboardingNotification(srv, text) {
|
|
166
|
+
try {
|
|
167
|
+
await srv.server.sendLoggingMessage({
|
|
168
|
+
level: 'info',
|
|
169
|
+
logger: 'apra-fleet-onboarding',
|
|
170
|
+
data: text,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
const msg = (e instanceof Error ? e.message : String(e));
|
|
175
|
+
if (!/logging|method not found|not supported/i.test(msg)) {
|
|
176
|
+
process.stderr.write(`[apra-fleet] onboarding notification failed: ${msg}\n`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function sanitizeToolResult(s) {
|
|
181
|
+
return s.replace(/<\/?apra-fleet-display[^>]*(?:>|$)/gi, '[tag-stripped]');
|
|
182
|
+
}
|
|
183
|
+
function getOnboardingPreamble(toolName, isJson) {
|
|
184
|
+
if (!isActiveTool(toolName))
|
|
185
|
+
return null;
|
|
186
|
+
// First-run banner always shows regardless of response format
|
|
187
|
+
const banner = getFirstRunPreamble();
|
|
188
|
+
if (banner)
|
|
189
|
+
return banner;
|
|
190
|
+
// Welcome-back still respects JSON check
|
|
191
|
+
if (isJson)
|
|
192
|
+
return null;
|
|
193
|
+
return getWelcomeBackPreamble();
|
|
194
|
+
}
|
|
195
|
+
function wrapTool(toolName, handler) {
|
|
196
|
+
return async (input, extra) => {
|
|
197
|
+
const result = await handler(input, extra);
|
|
198
|
+
const isJson = isJsonResponse(result);
|
|
199
|
+
const preamble = getOnboardingPreamble(toolName, isJson);
|
|
200
|
+
const suffix = isJson ? null : getOnboardingNudge(toolName, input, result);
|
|
201
|
+
// Channel 1: out-of-band notifications (best effort, never throws)
|
|
202
|
+
if (preamble)
|
|
203
|
+
void sendOnboardingNotification(server, preamble);
|
|
204
|
+
if (suffix)
|
|
205
|
+
void sendOnboardingNotification(server, suffix);
|
|
206
|
+
// Channel 2 + 3: content blocks with markers + audience annotation
|
|
207
|
+
const content = [];
|
|
208
|
+
if (preamble) {
|
|
209
|
+
content.push({ type: 'text', text: `<apra-fleet-display>\n${preamble}\n</apra-fleet-display>`, annotations: { audience: ['user'], priority: 1 } });
|
|
210
|
+
}
|
|
211
|
+
content.push({ type: 'text', text: sanitizeToolResult(result) });
|
|
212
|
+
if (suffix) {
|
|
213
|
+
content.push({ type: 'text', text: `<apra-fleet-display>\n${suffix}\n</apra-fleet-display>`, annotations: { audience: ['user'], priority: 0.8 } });
|
|
214
|
+
}
|
|
215
|
+
return { content };
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// --- Core Member Management ---
|
|
219
|
+
server.tool('register_member', 'Add a machine to the fleet. Use member_type "local" for this machine or "remote" for a machine reachable over SSH. Choose the AI provider the member will use for prompts.', registerMemberSchema.shape, wrapTool('register_member', (input) => registerMember(input)));
|
|
220
|
+
server.tool('list_members', 'List all fleet members and their current status. Use format="json" for structured data.', listMembersSchema.shape, wrapTool('list_members', (input) => listMembers(input)));
|
|
221
|
+
server.tool('remove_member', 'Remove a member from the fleet.', removeMemberSchema.shape, wrapTool('remove_member', (input) => removeMember(input)));
|
|
222
|
+
server.tool('update_member', "Change a member's name, connection details, working directory, AI provider, or other settings.", updateMemberSchema.shape, wrapTool('update_member', (input) => updateMember(input)));
|
|
223
|
+
// --- File Operations ---
|
|
224
|
+
server.tool('send_files', 'Transfer local files to a member. Always batch multiple files into a single call — never invoke repeatedly for individual files.', sendFilesSchema.shape, wrapTool('send_files', (input, extra) => sendFiles(input, extra)));
|
|
225
|
+
server.tool('receive_files', 'Download files from a member to a local directory. Always batch multiple files into a single call — never invoke repeatedly for individual files.', receiveFilesSchema.shape, wrapTool('receive_files', (input, extra) => receiveFiles(input, extra)));
|
|
226
|
+
// --- Prompt Execution ---
|
|
227
|
+
server.tool('execute_prompt', 'IMP: Never call this tool directly. Always wrap in a background subagent: Agent(run_in_background=true). Run an AI prompt on a member. Supports session resume for multi-turn conversations.', executePromptSchema.shape, wrapTool('execute_prompt', (input, extra) => executePrompt(input, extra)));
|
|
228
|
+
server.tool('execute_command', 'IMP: Never call this tool directly. Always wrap in a background subagent: Agent(run_in_background=true). Run a shell command on a member. Use for quick tasks like installing packages, checking versions, or running scripts.', executeCommandSchema.shape, wrapTool('execute_command', (input, extra) => executeCommand(input, extra)));
|
|
229
|
+
// --- Authentication & SSH ---
|
|
230
|
+
server.tool('provision_llm_auth', "Authenticate a fleet member so it can run prompts. Copies your current login session to the member, or deploys an API key if provided. Run this before execute_prompt if the member reports no authentication.", provisionAuthSchema.shape, wrapTool('provision_llm_auth', (input) => provisionAuth(input)));
|
|
231
|
+
server.tool('setup_ssh_key', 'Generate an SSH key pair and migrate a member from password to key-based authentication.', setupSSHKeySchema.shape, wrapTool('setup_ssh_key', (input) => setupSSHKey(input)));
|
|
232
|
+
server.tool('setup_git_app', "One-time setup: register a GitHub App for git token minting. Requires a GitHub App ID, private key (.pem) file path, and installation ID. The app must already be created at github.com/organizations/{org}/settings/apps.", setupGitAppSchema.shape, wrapTool('setup_git_app', (input) => setupGitApp(input)));
|
|
233
|
+
server.tool('provision_vcs_auth', 'Set up git access credentials on a member. Supports GitHub, Bitbucket, and Azure DevOps. Tests connectivity after setup.', provisionVcsAuthSchema.shape, wrapTool('provision_vcs_auth', (input) => provisionVcsAuth(input)));
|
|
234
|
+
server.tool('revoke_vcs_auth', 'Remove VCS credentials from a member. Specify the provider (github, bitbucket, or azure-devops) to revoke.', revokeVcsAuthSchema.shape, wrapTool('revoke_vcs_auth', (input) => revokeVcsAuth(input)));
|
|
235
|
+
// --- Status & Monitoring ---
|
|
236
|
+
server.tool('fleet_status', 'Get status of all fleet members. Use json format for structured data.', fleetStatusSchema.shape, wrapTool('fleet_status', (input) => fleetStatus(input)));
|
|
237
|
+
server.tool('member_detail', 'Get detailed status for one member: connectivity, AI version, authentication, active session, resources, and git branch.', memberDetailSchema.shape, wrapTool('member_detail', (input) => memberDetail(input)));
|
|
238
|
+
// --- Maintenance ---
|
|
239
|
+
server.tool('update_llm_cli', "Update or install the AI provider CLI on members. Omit member to update all online members at once. Use install_if_missing to install on members that don't have it yet.", updateAgentCliSchema.shape, wrapTool('update_llm_cli', (input) => updateAgentCli(input)));
|
|
240
|
+
server.tool('shutdown_server', 'Gracefully shut down the MCP server. Run /mcp afterwards to start a fresh instance with the latest code.', shutdownServerSchema.shape, wrapTool('shutdown_server', () => shutdownServer()));
|
|
241
|
+
server.tool('version', 'Returns the installed apra-fleet server version', versionSchema.shape, wrapTool('version', () => version()));
|
|
242
|
+
// --- Permissions ---
|
|
243
|
+
server.tool('compose_permissions', 'Set up and deliver the right permissions to a member for their role. Automatically tailors permissions to the project type. Use grant to add specific permissions mid-sprint without a full recompose.', composePermissionsSchema.shape, wrapTool('compose_permissions', (input) => composePermissions(input)));
|
|
244
|
+
// --- Cloud Control ---
|
|
245
|
+
server.tool('cloud_control', 'Manually start, stop, or check status of a cloud fleet member. Start waits until the member is ready; stop is immediate.', cloudControlSchema.shape, wrapTool('cloud_control', (input) => cloudControl(input)));
|
|
246
|
+
server.tool('monitor_task', 'Check status of a long-running background task on a cloud member. Optionally stop the cloud instance automatically when the task completes.', monitorTaskSchema.shape, wrapTool('monitor_task', (input) => monitorTask(input)));
|
|
247
|
+
// --- Agent Lifecycle ---
|
|
248
|
+
server.tool('stop_prompt', 'Kill the active LLM process on a member. Always call TaskStop on the dispatching background agent after calling this.', stopPromptSchema.shape, wrapTool('stop_prompt', (input) => stopPrompt(input)));
|
|
249
|
+
// --- Credential Store ---
|
|
250
|
+
server.tool('credential_store_set', 'Collect a secret from the user out-of-band and store it. Returns a handle (sec://NAME) and scope. Use {{secure.NAME}} tokens in execute_command to inject the value.', credentialStoreSetSchema.shape, wrapTool('credential_store_set', (input) => credentialStoreSet(input)));
|
|
251
|
+
server.tool('credential_store_list', 'List all stored credentials (names and metadata only — no values).', credentialStoreListSchema.shape, wrapTool('credential_store_list', () => credentialStoreList()));
|
|
252
|
+
server.tool('credential_store_delete', 'Delete a named credential from the store (both session and persistent tiers).', credentialStoreDeleteSchema.shape, wrapTool('credential_store_delete', (input) => credentialStoreDelete(input)));
|
|
253
|
+
server.tool('credential_store_update', 'Update metadata (members, TTL, network policy) on an existing credential without re-entering the secret.', credentialStoreUpdateSchema.shape, wrapTool('credential_store_update', (input) => credentialStoreUpdate(input)));
|
|
254
|
+
// --- Start Server ---
|
|
255
|
+
const transport = new StdioServerTransport();
|
|
256
|
+
await server.connect(transport);
|
|
257
|
+
const { FLEET_DIR } = await import('./paths.js');
|
|
258
|
+
const stallDetector = getStallDetector();
|
|
259
|
+
stallDetector.start();
|
|
260
|
+
const clientStr = capturedClientInfo?.name ? ` client=${capturedClientInfo.name}` : '';
|
|
261
|
+
const versionStr = capturedClientInfo?.version ? ` version=${capturedClientInfo.version}` : '';
|
|
262
|
+
const pidStr = ` pid=${process.pid} ppid=${process.ppid}`;
|
|
263
|
+
logLine('startup', `apra-fleet ${serverVersion} started${clientStr}${versionStr}${pidStr} FLEET_DIR=${FLEET_DIR}`);
|
|
264
|
+
idleManager.start();
|
|
265
|
+
void cleanupStaleTasks();
|
|
266
|
+
purgeExpiredCredentials();
|
|
267
|
+
void checkForUpdate();
|
|
268
|
+
const { cleanupAuthSocket } = await import('./services/auth-socket.js');
|
|
269
|
+
process.on('SIGINT', () => { cleanupAuthSocket().then(() => { closeAllConnections(); stallDetector.stop(); process.exit(0); }); });
|
|
270
|
+
process.on('SIGTERM', () => { cleanupAuthSocket().then(() => { closeAllConnections(); stallDetector.stop(); process.exit(0); }); });
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* All user-facing onboarding text constants.
|
|
3
|
+
* Logic never constructs display text directly — it always imports from here.
|
|
4
|
+
*
|
|
5
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
* TOKEN COST ANALYSIS — onboarding UX overhead (notification-hybrid delivery)
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* Methodology: ASCII text ~4 chars/token; box-drawing & unicode ~1-2 chars/token.
|
|
9
|
+
* Run `node count_tokens.mjs` to reproduce. All numbers below are LLM-context
|
|
10
|
+
* tokens (input + output) — NOT wire bytes.
|
|
11
|
+
*
|
|
12
|
+
* Delivery model:
|
|
13
|
+
* • Banner/welcome-back/nudges are returned as tool-result content blocks
|
|
14
|
+
* wrapped in <apra-fleet-display>…</apra-fleet-display> markers, plus a
|
|
15
|
+
* one-time server `instructions` field telling the LLM to reproduce them
|
|
16
|
+
* verbatim. The same text is also emitted via MCP `sendLoggingMessage`.
|
|
17
|
+
* • sendLoggingMessage payloads are OUT-OF-BAND: they cost wire bytes but
|
|
18
|
+
* NOT LLM-context tokens (they are not added to the conversation).
|
|
19
|
+
*
|
|
20
|
+
* PER-CONNECTION cost (paid once at `initialize`, into the system prompt):
|
|
21
|
+
* VERBATIM_INSTRUCTIONS 457 chars → ~115 tokens
|
|
22
|
+
* ─────────────────────────────────────
|
|
23
|
+
* Cost per MCP server start: ~115 tokens
|
|
24
|
+
*
|
|
25
|
+
* ONE-TIME banner cost (shown once ever, on first active tool call):
|
|
26
|
+
* BANNER 678 chars → ~380 tokens
|
|
27
|
+
* GETTING_STARTED_GUIDE 1134 chars → ~346 tokens
|
|
28
|
+
* Marker wrapper overhead → ~11 tokens
|
|
29
|
+
* ─────────────────────────────────────
|
|
30
|
+
* Banner+Guide wrapped: ~737 tokens (single response, never repeated)
|
|
31
|
+
*
|
|
32
|
+
* RECURRING welcome-back (once per server lifecycle after first run):
|
|
33
|
+
* WELCOME_BACK() 143–152 chars → ~75 tokens
|
|
34
|
+
* Marker wrapper overhead → ~10 tokens
|
|
35
|
+
* ─────────────────────────────────────
|
|
36
|
+
* WELCOME_BACK wrapped: ~85 tokens/server-start
|
|
37
|
+
*
|
|
38
|
+
* NUDGE costs (each shown at most once across the user's entire journey):
|
|
39
|
+
* NUDGE_AFTER_FIRST_REGISTER 252 chars → ~114–115 tokens +wrap → ~125 tokens
|
|
40
|
+
* NUDGE_AFTER_FIRST_PROMPT 252 chars → ~115 tokens +wrap → ~126 tokens
|
|
41
|
+
* NUDGE_AFTER_MULTI_MEMBER 315 chars → ~133 tokens +wrap → ~143 tokens
|
|
42
|
+
* ─────────────────────────────────────
|
|
43
|
+
* All nudges wrapped (sum): ~395 tokens (spread across sessions)
|
|
44
|
+
*
|
|
45
|
+
* Lifecycle totals:
|
|
46
|
+
* Fresh-install, first server start: ~852 tokens (115 init + 737 bannerWrapped)
|
|
47
|
+
* Fresh-install, full journey: ~1247 tokens (115 init + 737 banner + 395 nudges)
|
|
48
|
+
* Returning user per server start: ~200 tokens (115 init + 85 WB)
|
|
49
|
+
*
|
|
50
|
+
* Delta vs. pre-notification implementation:
|
|
51
|
+
* Per-connection: +115 tokens (new VERBATIM_INSTRUCTIONS — paid every server start)
|
|
52
|
+
* Per message: +10-11 tokens/section (marker wrapping)
|
|
53
|
+
* Full journey: ~+83 tokens over baseline ~1164
|
|
54
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
*/
|
|
56
|
+
export declare const BANNER = "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\n\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\n\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D\n\n \u26A1 One model is a tool. A fleet is a team. \u26A1\n\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500";
|
|
57
|
+
export declare const GETTING_STARTED_GUIDE = "\n\u250C\u2500 Getting Started \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 \u2502\n\u2502 1. Add your first member \u2502\n\u2502 'Add this machine to the fleet' (local) \u2502\n\u2502 'Register my-server as a remote member' (SSH) \u2502\n\u2502 Each member works in its own directory \u2014 parallel by design. \u2502\n\u2502 \u2502\n\u2502 2. Give it work \u2502\n\u2502 'Ask my-server to run the test suite' \u2502\n\u2502 'Send the src/ folder to my-server and run the build' \u2502\n\u2502 \u2502\n\u2502 3. See what's happening \u2502\n\u2502 'Show fleet status' \u2502\n\u2502 \u2502\n\u2502 Docs: https://github.com/Apra-Labs/apra-fleet \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518";
|
|
58
|
+
/**
|
|
59
|
+
* Welcome-back message shown once per server lifecycle (not on first run).
|
|
60
|
+
* @param memberCount Total number of registered members
|
|
61
|
+
* @param lastActive Relative time string, e.g. "2h ago" or "unknown"
|
|
62
|
+
*/
|
|
63
|
+
export declare function WELCOME_BACK(memberCount: number, lastActive: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Nudge shown after the user registers their first member.
|
|
66
|
+
* @param memberType "local" | "remote"
|
|
67
|
+
* @param memberName Registered name to show in the example (default: "my-server")
|
|
68
|
+
*/
|
|
69
|
+
export declare function NUDGE_AFTER_FIRST_REGISTER(memberType: string, memberName?: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Nudge shown after the user runs their first prompt.
|
|
72
|
+
*/
|
|
73
|
+
export declare function NUDGE_AFTER_FIRST_PROMPT(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Nudge shown after the user registers 2+ members (introduces PM skill).
|
|
76
|
+
*/
|
|
77
|
+
export declare function NUDGE_AFTER_MULTI_MEMBER(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Server-level instruction injected once at `initialize` time.
|
|
80
|
+
* Instructs the LLM to reproduce verbatim any text inside <apra-fleet-display> tags.
|
|
81
|
+
*/
|
|
82
|
+
export declare const VERBATIM_INSTRUCTIONS = "When a tool response contains text wrapped in `<apra-fleet-display>\u2026</apra-fleet-display>` tags, that content is user-facing onboarding material. Reproduce it VERBATIM in your reply to the user as the very first thing you output, preserving all formatting, line breaks, and emoji. Do not paraphrase, summarize, translate, or comment on it. Do not wrap it in code fences. Strip the `<apra-fleet-display>` tags themselves \u2014 they are for your recognition only.";
|
|
83
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/onboarding/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,eAAO,MAAM,MAAM,mpGAW8D,CAAC;AAElF,eAAO,MAAM,qBAAqB,s3DAgBqC,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,SAAc,GAAG,MAAM,CAM/F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wdAAkd,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* All user-facing onboarding text constants.
|
|
3
|
+
* Logic never constructs display text directly — it always imports from here.
|
|
4
|
+
*
|
|
5
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
* TOKEN COST ANALYSIS — onboarding UX overhead (notification-hybrid delivery)
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* Methodology: ASCII text ~4 chars/token; box-drawing & unicode ~1-2 chars/token.
|
|
9
|
+
* Run `node count_tokens.mjs` to reproduce. All numbers below are LLM-context
|
|
10
|
+
* tokens (input + output) — NOT wire bytes.
|
|
11
|
+
*
|
|
12
|
+
* Delivery model:
|
|
13
|
+
* • Banner/welcome-back/nudges are returned as tool-result content blocks
|
|
14
|
+
* wrapped in <apra-fleet-display>…</apra-fleet-display> markers, plus a
|
|
15
|
+
* one-time server `instructions` field telling the LLM to reproduce them
|
|
16
|
+
* verbatim. The same text is also emitted via MCP `sendLoggingMessage`.
|
|
17
|
+
* • sendLoggingMessage payloads are OUT-OF-BAND: they cost wire bytes but
|
|
18
|
+
* NOT LLM-context tokens (they are not added to the conversation).
|
|
19
|
+
*
|
|
20
|
+
* PER-CONNECTION cost (paid once at `initialize`, into the system prompt):
|
|
21
|
+
* VERBATIM_INSTRUCTIONS 457 chars → ~115 tokens
|
|
22
|
+
* ─────────────────────────────────────
|
|
23
|
+
* Cost per MCP server start: ~115 tokens
|
|
24
|
+
*
|
|
25
|
+
* ONE-TIME banner cost (shown once ever, on first active tool call):
|
|
26
|
+
* BANNER 678 chars → ~380 tokens
|
|
27
|
+
* GETTING_STARTED_GUIDE 1134 chars → ~346 tokens
|
|
28
|
+
* Marker wrapper overhead → ~11 tokens
|
|
29
|
+
* ─────────────────────────────────────
|
|
30
|
+
* Banner+Guide wrapped: ~737 tokens (single response, never repeated)
|
|
31
|
+
*
|
|
32
|
+
* RECURRING welcome-back (once per server lifecycle after first run):
|
|
33
|
+
* WELCOME_BACK() 143–152 chars → ~75 tokens
|
|
34
|
+
* Marker wrapper overhead → ~10 tokens
|
|
35
|
+
* ─────────────────────────────────────
|
|
36
|
+
* WELCOME_BACK wrapped: ~85 tokens/server-start
|
|
37
|
+
*
|
|
38
|
+
* NUDGE costs (each shown at most once across the user's entire journey):
|
|
39
|
+
* NUDGE_AFTER_FIRST_REGISTER 252 chars → ~114–115 tokens +wrap → ~125 tokens
|
|
40
|
+
* NUDGE_AFTER_FIRST_PROMPT 252 chars → ~115 tokens +wrap → ~126 tokens
|
|
41
|
+
* NUDGE_AFTER_MULTI_MEMBER 315 chars → ~133 tokens +wrap → ~143 tokens
|
|
42
|
+
* ─────────────────────────────────────
|
|
43
|
+
* All nudges wrapped (sum): ~395 tokens (spread across sessions)
|
|
44
|
+
*
|
|
45
|
+
* Lifecycle totals:
|
|
46
|
+
* Fresh-install, first server start: ~852 tokens (115 init + 737 bannerWrapped)
|
|
47
|
+
* Fresh-install, full journey: ~1247 tokens (115 init + 737 banner + 395 nudges)
|
|
48
|
+
* Returning user per server start: ~200 tokens (115 init + 85 WB)
|
|
49
|
+
*
|
|
50
|
+
* Delta vs. pre-notification implementation:
|
|
51
|
+
* Per-connection: +115 tokens (new VERBATIM_INSTRUCTIONS — paid every server start)
|
|
52
|
+
* Per message: +10-11 tokens/section (marker wrapping)
|
|
53
|
+
* Full journey: ~+83 tokens over baseline ~1164
|
|
54
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
*/
|
|
56
|
+
export const BANNER = `────────────────────────────────────────────────────────────────────────────────
|
|
57
|
+
|
|
58
|
+
█████╗ ██████╗ ██████╗ █████╗ ███████╗██╗ ███████╗███████╗████████╗
|
|
59
|
+
██╔══██╗██╔══██╗██╔══██╗██╔══██╗ ██╔════╝██║ ██╔════╝██╔════╝╚══██╔══╝
|
|
60
|
+
███████║██████╔╝██████╔╝███████║ █████╗ ██║ █████╗ █████╗ ██║
|
|
61
|
+
██╔══██║██╔═══╝ ██╔══██╗██╔══██║ ██╔══╝ ██║ ██╔══╝ ██╔══╝ ██║
|
|
62
|
+
██║ ██║██║ ██║ ██║██║ ██║ ██║ ███████╗███████╗███████╗ ██║
|
|
63
|
+
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝ ╚═╝
|
|
64
|
+
|
|
65
|
+
⚡ One model is a tool. A fleet is a team. ⚡
|
|
66
|
+
|
|
67
|
+
────────────────────────────────────────────────────────────────────────────────`;
|
|
68
|
+
export const GETTING_STARTED_GUIDE = `
|
|
69
|
+
┌─ Getting Started ─────────────────────────────────────────────────┐
|
|
70
|
+
│ │
|
|
71
|
+
│ 1. Add your first member │
|
|
72
|
+
│ 'Add this machine to the fleet' (local) │
|
|
73
|
+
│ 'Register my-server as a remote member' (SSH) │
|
|
74
|
+
│ Each member works in its own directory — parallel by design. │
|
|
75
|
+
│ │
|
|
76
|
+
│ 2. Give it work │
|
|
77
|
+
│ 'Ask my-server to run the test suite' │
|
|
78
|
+
│ 'Send the src/ folder to my-server and run the build' │
|
|
79
|
+
│ │
|
|
80
|
+
│ 3. See what's happening │
|
|
81
|
+
│ 'Show fleet status' │
|
|
82
|
+
│ │
|
|
83
|
+
│ Docs: https://github.com/Apra-Labs/apra-fleet │
|
|
84
|
+
└────────────────────────────────────────────────────────────────────┘`;
|
|
85
|
+
/**
|
|
86
|
+
* Welcome-back message shown once per server lifecycle (not on first run).
|
|
87
|
+
* @param memberCount Total number of registered members
|
|
88
|
+
* @param lastActive Relative time string, e.g. "2h ago" or "unknown"
|
|
89
|
+
*/
|
|
90
|
+
export function WELCOME_BACK(memberCount, lastActive) {
|
|
91
|
+
if (memberCount === 0) {
|
|
92
|
+
return '── Apra Fleet ──────────────────────────────────────\nFleet ready. Register a member to get started.\n────────────────────────────────────────────────────';
|
|
93
|
+
}
|
|
94
|
+
const plural = memberCount !== 1 ? 's' : '';
|
|
95
|
+
return `── Apra Fleet ──────────────────────────────────────\nFleet: ${memberCount} member${plural} · Last active: ${lastActive}\n────────────────────────────────────────────────────`;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Nudge shown after the user registers their first member.
|
|
99
|
+
* @param memberType "local" | "remote"
|
|
100
|
+
* @param memberName Registered name to show in the example (default: "my-server")
|
|
101
|
+
*/
|
|
102
|
+
export function NUDGE_AFTER_FIRST_REGISTER(memberType, memberName = 'my-server') {
|
|
103
|
+
const displayName = memberName.length > 20 ? memberName.slice(0, 20) + '…' : memberName;
|
|
104
|
+
if (memberType === 'remote') {
|
|
105
|
+
return `\n┌─ Tip ──────────────────────────────────────────────────────┐\n│ 🔑 Upgrade to key-based auth for this member: │\n│ 'Set up key-based auth for this member' — more secure. │\n└────────────────────────────────────────────────────────────┘`;
|
|
106
|
+
}
|
|
107
|
+
return `\n┌─ Tip ──────────────────────────────────────────────────────┐\n│ 🚀 Member registered! Give it work: │\n│ 'Ask ${displayName} to run the test suite'${' '.repeat(Math.max(1, 28 - displayName.length))}│\n└────────────────────────────────────────────────────────────┘`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Nudge shown after the user runs their first prompt.
|
|
111
|
+
*/
|
|
112
|
+
export function NUDGE_AFTER_FIRST_PROMPT() {
|
|
113
|
+
return `\n┌─ Tip ──────────────────────────────────────────────────────┐\n│ 📊 Monitor your fleet anytime: │\n│ 'Show fleet status' — online members, last activity. │\n└────────────────────────────────────────────────────────────┘`;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Nudge shown after the user registers 2+ members (introduces PM skill).
|
|
117
|
+
*/
|
|
118
|
+
export function NUDGE_AFTER_MULTI_MEMBER() {
|
|
119
|
+
return `\n┌─ Tip ──────────────────────────────────────────────────────┐\n│ 🤝 You have multiple members — try the PM skill: │\n│ /pm init → /pm pair → /pm plan │\n│ One member builds, another reviews — across machines. │\n└────────────────────────────────────────────────────────────┘`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Server-level instruction injected once at `initialize` time.
|
|
123
|
+
* Instructs the LLM to reproduce verbatim any text inside <apra-fleet-display> tags.
|
|
124
|
+
*/
|
|
125
|
+
export const VERBATIM_INSTRUCTIONS = `When a tool response contains text wrapped in \`<apra-fleet-display>…</apra-fleet-display>\` tags, that content is user-facing onboarding material. Reproduce it VERBATIM in your reply to the user as the very first thing you output, preserving all formatting, line breaks, and emoji. Do not paraphrase, summarize, translate, or comment on it. Do not wrap it in code fences. Strip the \`<apra-fleet-display>\` tags themselves — they are for your recognition only.`;
|
|
126
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/onboarding/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;iFAW2D,CAAC;AAElF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;uEAgBkC,CAAC;AAExE;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,UAAkB;IAClE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,4JAA4J,CAAC;IACtK,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,gEAAgE,WAAW,UAAU,MAAM,mBAAmB,UAAU,wDAAwD,CAAC;AAC1L,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAkB,EAAE,UAAU,GAAG,WAAW;IACrF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;IACxF,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,kQAAkQ,CAAC;IAC5Q,CAAC;IACD,OAAO,+IAA+I,WAAW,0BAA0B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,mEAAmE,CAAC;AACjT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,kQAAkQ,CAAC;AAC5Q,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,kUAAkU,CAAC;AAC5U,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,+cAA+c,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OsCommands } from './os-commands.js';
|
|
2
|
+
import type { RemoteOS } from '../utils/platform.js';
|
|
3
|
+
export type { OsCommands } from './os-commands.js';
|
|
4
|
+
export { LinuxCommands } from './linux.js';
|
|
5
|
+
export { MacOSCommands } from './macos.js';
|
|
6
|
+
export { WindowsCommands } from './windows.js';
|
|
7
|
+
/** Get the OsCommands implementation for a given OS. Instances are singletons. */
|
|
8
|
+
export declare function getOsCommands(os: RemoteOS): OsCommands;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/os/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKrD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ/C,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,UAAU,CAEtD"}
|
package/dist/os/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LinuxCommands } from './linux.js';
|
|
2
|
+
import { MacOSCommands } from './macos.js';
|
|
3
|
+
import { WindowsCommands } from './windows.js';
|
|
4
|
+
export { LinuxCommands } from './linux.js';
|
|
5
|
+
export { MacOSCommands } from './macos.js';
|
|
6
|
+
export { WindowsCommands } from './windows.js';
|
|
7
|
+
const instances = {
|
|
8
|
+
linux: new LinuxCommands(),
|
|
9
|
+
macos: new MacOSCommands(),
|
|
10
|
+
windows: new WindowsCommands(),
|
|
11
|
+
};
|
|
12
|
+
/** Get the OsCommands implementation for a given OS. Instances are singletons. */
|
|
13
|
+
export function getOsCommands(os) {
|
|
14
|
+
return instances[os];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/os/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,SAAS,GAAiC;IAC9C,KAAK,EAAE,IAAI,aAAa,EAAE;IAC1B,KAAK,EAAE,IAAI,aAAa,EAAE;IAC1B,OAAO,EAAE,IAAI,eAAe,EAAE;CAC/B,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,EAAY;IACxC,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC"}
|