@mesh-tech/mesh-cli 0.1.1 → 0.12.0
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/assets/intent/agents-fence.md +10 -0
- package/assets/intent/intent-claude-gate.mjs +255 -0
- package/assets/log-shipper.mjs +94 -0
- package/bin/mesh.mjs +80 -0
- package/dist/bin/mesh.d.ts +7 -9
- package/dist/bin/mesh.d.ts.map +1 -1
- package/dist/bin/mesh.js +20826 -37
- package/dist/bin/mesh.js.map +7 -1
- package/dist/build-info.json +4 -0
- package/dist/src/commands/agent-api-client.d.ts +79 -0
- package/dist/src/commands/agent-api-client.d.ts.map +1 -0
- package/dist/src/commands/agent-api-client.js +170 -0
- package/dist/src/commands/agent-api-client.js.map +1 -0
- package/dist/src/commands/artifacts.d.ts +13 -0
- package/dist/src/commands/artifacts.d.ts.map +1 -0
- package/dist/src/commands/artifacts.js +140 -0
- package/dist/src/commands/artifacts.js.map +1 -0
- package/dist/src/commands/cluster.d.ts +45 -0
- package/dist/src/commands/cluster.d.ts.map +1 -0
- package/dist/src/commands/cluster.js +259 -0
- package/dist/src/commands/cluster.js.map +1 -0
- package/dist/src/commands/conversations.d.ts +61 -0
- package/dist/src/commands/conversations.d.ts.map +1 -0
- package/dist/src/commands/conversations.js +239 -0
- package/dist/src/commands/conversations.js.map +1 -0
- package/dist/src/commands/create-app.d.ts +26 -3
- package/dist/src/commands/create-app.d.ts.map +1 -1
- package/dist/src/commands/create-app.js +465 -107
- package/dist/src/commands/create-app.js.map +1 -1
- package/dist/src/commands/deploy.d.ts +19 -0
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +83 -142
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/dev-doctor.d.ts +137 -0
- package/dist/src/commands/dev-doctor.d.ts.map +1 -0
- package/dist/src/commands/dev-doctor.js +671 -0
- package/dist/src/commands/dev-doctor.js.map +1 -0
- package/dist/src/commands/dev-launch.d.ts +59 -0
- package/dist/src/commands/dev-launch.d.ts.map +1 -0
- package/dist/src/commands/dev-launch.js +118 -0
- package/dist/src/commands/dev-launch.js.map +1 -0
- package/dist/src/commands/dev-token-server.d.ts +32 -0
- package/dist/src/commands/dev-token-server.d.ts.map +1 -0
- package/dist/src/commands/dev-token-server.js +68 -0
- package/dist/src/commands/dev-token-server.js.map +1 -0
- package/dist/src/commands/dev.d.ts +289 -2
- package/dist/src/commands/dev.d.ts.map +1 -1
- package/dist/src/commands/dev.js +2501 -574
- package/dist/src/commands/dev.js.map +1 -1
- package/dist/src/commands/docs.d.ts +3 -0
- package/dist/src/commands/docs.d.ts.map +1 -0
- package/dist/src/commands/docs.js +262 -0
- package/dist/src/commands/docs.js.map +1 -0
- package/dist/src/commands/hub/index.d.ts +99 -0
- package/dist/src/commands/hub/index.d.ts.map +1 -0
- package/dist/src/commands/hub/index.js +452 -0
- package/dist/src/commands/hub/index.js.map +1 -0
- package/dist/src/commands/init.d.ts +65 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +370 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/install-shim.d.ts +21 -0
- package/dist/src/commands/install-shim.d.ts.map +1 -0
- package/dist/src/commands/install-shim.js +132 -0
- package/dist/src/commands/install-shim.js.map +1 -0
- package/dist/src/commands/local/auth-provision.d.ts +71 -0
- package/dist/src/commands/local/auth-provision.d.ts.map +1 -0
- package/dist/src/commands/local/auth-provision.js +286 -0
- package/dist/src/commands/local/auth-provision.js.map +1 -0
- package/dist/src/commands/local/dev-local.d.ts +97 -0
- package/dist/src/commands/local/dev-local.d.ts.map +1 -0
- package/dist/src/commands/local/dev-local.js +306 -0
- package/dist/src/commands/local/dev-local.js.map +1 -0
- package/dist/src/commands/local/docker-runner.d.ts +37 -0
- package/dist/src/commands/local/docker-runner.d.ts.map +1 -0
- package/dist/src/commands/local/docker-runner.js +104 -0
- package/dist/src/commands/local/docker-runner.js.map +1 -0
- package/dist/src/commands/local/helpers.d.ts +22 -0
- package/dist/src/commands/local/helpers.d.ts.map +1 -0
- package/dist/src/commands/local/helpers.js +46 -0
- package/dist/src/commands/local/helpers.js.map +1 -0
- package/dist/src/commands/local/hub-local.d.ts +51 -0
- package/dist/src/commands/local/hub-local.d.ts.map +1 -0
- package/dist/src/commands/local/hub-local.js +197 -0
- package/dist/src/commands/local/hub-local.js.map +1 -0
- package/dist/src/commands/local/index.d.ts +23 -0
- package/dist/src/commands/local/index.d.ts.map +1 -0
- package/dist/src/commands/local/index.js +386 -0
- package/dist/src/commands/local/index.js.map +1 -0
- package/dist/src/commands/local/mocks.d.ts +361 -0
- package/dist/src/commands/local/mocks.d.ts.map +1 -0
- package/dist/src/commands/local/mocks.js +756 -0
- package/dist/src/commands/local/mocks.js.map +1 -0
- package/dist/src/commands/local/seed-zitadel.d.ts +151 -0
- package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -0
- package/dist/src/commands/local/seed-zitadel.js +408 -0
- package/dist/src/commands/local/seed-zitadel.js.map +1 -0
- package/dist/src/commands/local/seed.d.ts +106 -0
- package/dist/src/commands/local/seed.d.ts.map +1 -0
- package/dist/src/commands/local/seed.js +252 -0
- package/dist/src/commands/local/seed.js.map +1 -0
- package/dist/src/commands/local/stack.d.ts +173 -0
- package/dist/src/commands/local/stack.d.ts.map +1 -0
- package/dist/src/commands/local/stack.js +499 -0
- package/dist/src/commands/local/stack.js.map +1 -0
- package/dist/src/commands/login.d.ts +256 -12
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +978 -50
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/peer-addressing.d.ts +51 -0
- package/dist/src/commands/peer-addressing.d.ts.map +1 -0
- package/dist/src/commands/peer-addressing.js +64 -0
- package/dist/src/commands/peer-addressing.js.map +1 -0
- package/dist/src/commands/port-ownership.d.ts +69 -0
- package/dist/src/commands/port-ownership.d.ts.map +1 -0
- package/dist/src/commands/port-ownership.js +161 -0
- package/dist/src/commands/port-ownership.js.map +1 -0
- package/dist/src/commands/registry-publish.d.ts +3 -0
- package/dist/src/commands/registry-publish.d.ts.map +1 -0
- package/dist/src/commands/registry-publish.js +161 -0
- package/dist/src/commands/registry-publish.js.map +1 -0
- package/dist/src/commands/registry.d.ts +146 -2
- package/dist/src/commands/registry.d.ts.map +1 -1
- package/dist/src/commands/registry.js +541 -85
- package/dist/src/commands/registry.js.map +1 -1
- package/dist/src/commands/secrets/index.d.ts.map +1 -1
- package/dist/src/commands/secrets/index.js +15 -1
- package/dist/src/commands/secrets/index.js.map +1 -1
- package/dist/src/commands/secrets/migrate-config.d.ts +24 -0
- package/dist/src/commands/secrets/migrate-config.d.ts.map +1 -0
- package/dist/src/commands/secrets/migrate-config.js +277 -0
- package/dist/src/commands/secrets/migrate-config.js.map +1 -0
- package/dist/src/commands/secrets/set.d.ts +1 -0
- package/dist/src/commands/secrets/set.d.ts.map +1 -1
- package/dist/src/commands/secrets/set.js +96 -2
- package/dist/src/commands/secrets/set.js.map +1 -1
- package/dist/src/commands/skills.d.ts +34 -0
- package/dist/src/commands/skills.d.ts.map +1 -0
- package/dist/src/commands/skills.js +207 -0
- package/dist/src/commands/skills.js.map +1 -0
- package/dist/src/commands/stack.d.ts.map +1 -1
- package/dist/src/commands/stack.js +361 -23
- package/dist/src/commands/stack.js.map +1 -1
- package/dist/src/commands/temporal.d.ts +15 -0
- package/dist/src/commands/temporal.d.ts.map +1 -0
- package/dist/src/commands/temporal.js +781 -0
- package/dist/src/commands/temporal.js.map +1 -0
- package/dist/src/commands/tenant.d.ts +56 -0
- package/dist/src/commands/tenant.d.ts.map +1 -0
- package/dist/src/commands/tenant.js +233 -0
- package/dist/src/commands/tenant.js.map +1 -0
- package/dist/src/commands/tunnel/index.d.ts +49 -3
- package/dist/src/commands/tunnel/index.d.ts.map +1 -1
- package/dist/src/commands/tunnel/index.js +331 -8
- package/dist/src/commands/tunnel/index.js.map +1 -1
- package/dist/src/commands/vcs/clone.d.ts +3 -0
- package/dist/src/commands/vcs/clone.d.ts.map +1 -0
- package/dist/src/commands/vcs/clone.js +20 -0
- package/dist/src/commands/vcs/clone.js.map +1 -0
- package/dist/src/commands/vcs/common.d.ts +21 -0
- package/dist/src/commands/vcs/common.d.ts.map +1 -0
- package/dist/src/commands/vcs/common.js +62 -0
- package/dist/src/commands/vcs/common.js.map +1 -0
- package/dist/src/commands/vcs/drafts.d.ts +13 -0
- package/dist/src/commands/vcs/drafts.d.ts.map +1 -0
- package/dist/src/commands/vcs/drafts.js +45 -0
- package/dist/src/commands/vcs/drafts.js.map +1 -0
- package/dist/src/commands/vcs/get.d.ts +8 -0
- package/dist/src/commands/vcs/get.d.ts.map +1 -0
- package/dist/src/commands/vcs/get.js +61 -0
- package/dist/src/commands/vcs/get.js.map +1 -0
- package/dist/src/commands/vcs/index.d.ts +3 -0
- package/dist/src/commands/vcs/index.d.ts.map +1 -0
- package/dist/src/commands/vcs/index.js +58 -0
- package/dist/src/commands/vcs/index.js.map +1 -0
- package/dist/src/commands/vcs/propose.d.ts +23 -0
- package/dist/src/commands/vcs/propose.d.ts.map +1 -0
- package/dist/src/commands/vcs/propose.js +94 -0
- package/dist/src/commands/vcs/propose.js.map +1 -0
- package/dist/src/commands/vcs/review.d.ts +15 -0
- package/dist/src/commands/vcs/review.d.ts.map +1 -0
- package/dist/src/commands/vcs/review.js +35 -0
- package/dist/src/commands/vcs/review.js.map +1 -0
- package/dist/src/commands/vcs-enrich.d.ts +15 -0
- package/dist/src/commands/vcs-enrich.d.ts.map +1 -0
- package/dist/src/commands/vcs-enrich.js +28 -0
- package/dist/src/commands/vcs-enrich.js.map +1 -0
- package/dist/src/commands/vpn/index.d.ts +24 -0
- package/dist/src/commands/vpn/index.d.ts.map +1 -0
- package/dist/src/commands/vpn/index.js +543 -0
- package/dist/src/commands/vpn/index.js.map +1 -0
- package/dist/src/commands/vpn/tunnel.d.ts +11 -0
- package/dist/src/commands/vpn/tunnel.d.ts.map +1 -0
- package/dist/src/commands/vpn/tunnel.js +188 -0
- package/dist/src/commands/vpn/tunnel.js.map +1 -0
- package/dist/src/commands/workflow.d.ts +24 -0
- package/dist/src/commands/workflow.d.ts.map +1 -0
- package/dist/src/commands/workflow.js +577 -0
- package/dist/src/commands/workflow.js.map +1 -0
- package/dist/src/docs/assemble.d.ts +217 -0
- package/dist/src/docs/assemble.d.ts.map +1 -0
- package/dist/src/docs/assemble.js +739 -0
- package/dist/src/docs/assemble.js.map +1 -0
- package/dist/src/docs/cli-reference.d.ts +93 -0
- package/dist/src/docs/cli-reference.d.ts.map +1 -0
- package/dist/src/docs/cli-reference.js +256 -0
- package/dist/src/docs/cli-reference.js.map +1 -0
- package/dist/src/docs/discover.d.ts +60 -0
- package/dist/src/docs/discover.d.ts.map +1 -0
- package/dist/src/docs/discover.js +233 -0
- package/dist/src/docs/discover.js.map +1 -0
- package/dist/src/docs/portal.d.ts +79 -0
- package/dist/src/docs/portal.d.ts.map +1 -0
- package/dist/src/docs/portal.js +242 -0
- package/dist/src/docs/portal.js.map +1 -0
- package/dist/src/docs/registry-docs.d.ts +43 -0
- package/dist/src/docs/registry-docs.d.ts.map +1 -0
- package/dist/src/docs/registry-docs.js +138 -0
- package/dist/src/docs/registry-docs.js.map +1 -0
- package/dist/src/docs/schema.d.ts +48 -0
- package/dist/src/docs/schema.d.ts.map +1 -0
- package/dist/src/docs/schema.js +96 -0
- package/dist/src/docs/schema.js.map +1 -0
- package/dist/src/docs/serve.d.ts +27 -0
- package/dist/src/docs/serve.d.ts.map +1 -0
- package/dist/src/docs/serve.js +102 -0
- package/dist/src/docs/serve.js.map +1 -0
- package/dist/src/docs/start.d.ts +80 -0
- package/dist/src/docs/start.d.ts.map +1 -0
- package/dist/src/docs/start.js +313 -0
- package/dist/src/docs/start.js.map +1 -0
- package/dist/src/eval/agent-eval.d.mts +14 -0
- package/dist/src/eval/agent-eval.d.mts.map +1 -0
- package/dist/src/eval/agent-eval.mjs +273 -0
- package/dist/src/eval/agent-eval.mjs.map +1 -0
- package/dist/src/index.js +624 -7
- package/dist/src/index.js.map +7 -1
- package/dist/src/program.d.ts +26 -0
- package/dist/src/program.d.ts.map +1 -0
- package/dist/src/program.js +76 -0
- package/dist/src/program.js.map +1 -0
- package/dist/src/utils/auth-preflight.d.ts +159 -0
- package/dist/src/utils/auth-preflight.d.ts.map +1 -0
- package/dist/src/utils/auth-preflight.js +298 -0
- package/dist/src/utils/auth-preflight.js.map +1 -0
- package/dist/src/utils/aws-auth.d.ts +181 -0
- package/dist/src/utils/aws-auth.d.ts.map +1 -0
- package/dist/src/utils/aws-auth.js +527 -0
- package/dist/src/utils/aws-auth.js.map +1 -0
- package/dist/src/utils/bastion.d.ts +1 -1
- package/dist/src/utils/bastion.d.ts.map +1 -1
- package/dist/src/utils/bastion.js +29 -8
- package/dist/src/utils/bastion.js.map +1 -1
- package/dist/src/utils/build-info.d.ts +33 -0
- package/dist/src/utils/build-info.d.ts.map +1 -0
- package/dist/src/utils/build-info.js +102 -0
- package/dist/src/utils/build-info.js.map +1 -0
- package/dist/src/utils/capture-history.d.ts +62 -0
- package/dist/src/utils/capture-history.d.ts.map +1 -0
- package/dist/src/utils/capture-history.js +94 -0
- package/dist/src/utils/capture-history.js.map +1 -0
- package/dist/src/utils/deploy-preflight.d.ts +52 -0
- package/dist/src/utils/deploy-preflight.d.ts.map +1 -0
- package/dist/src/utils/deploy-preflight.js +183 -0
- package/dist/src/utils/deploy-preflight.js.map +1 -0
- package/dist/src/utils/errors.d.ts +75 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +106 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/first-party-contexts.d.ts +40 -0
- package/dist/src/utils/first-party-contexts.d.ts.map +1 -0
- package/dist/src/utils/first-party-contexts.js +53 -0
- package/dist/src/utils/first-party-contexts.js.map +1 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/kubeconfig.d.ts +62 -0
- package/dist/src/utils/kubeconfig.d.ts.map +1 -0
- package/dist/src/utils/kubeconfig.js +118 -0
- package/dist/src/utils/kubeconfig.js.map +1 -0
- package/dist/src/utils/log.d.ts +27 -1
- package/dist/src/utils/log.d.ts.map +1 -1
- package/dist/src/utils/log.js +59 -5
- package/dist/src/utils/log.js.map +1 -1
- package/dist/src/utils/pid.d.ts +47 -0
- package/dist/src/utils/pid.d.ts.map +1 -0
- package/dist/src/utils/pid.js +83 -0
- package/dist/src/utils/pid.js.map +1 -0
- package/dist/src/utils/pulumi-run.d.ts +23 -0
- package/dist/src/utils/pulumi-run.d.ts.map +1 -0
- package/dist/src/utils/pulumi-run.js +112 -0
- package/dist/src/utils/pulumi-run.js.map +1 -0
- package/dist/src/utils/pulumi.d.ts +15 -0
- package/dist/src/utils/pulumi.d.ts.map +1 -1
- package/dist/src/utils/pulumi.js +35 -0
- package/dist/src/utils/pulumi.js.map +1 -1
- package/dist/src/utils/reachability.d.ts +29 -0
- package/dist/src/utils/reachability.d.ts.map +1 -0
- package/dist/src/utils/reachability.js +81 -0
- package/dist/src/utils/reachability.js.map +1 -0
- package/dist/src/utils/recover-conversation.d.ts +154 -0
- package/dist/src/utils/recover-conversation.d.ts.map +1 -0
- package/dist/src/utils/recover-conversation.js +314 -0
- package/dist/src/utils/recover-conversation.js.map +1 -0
- package/dist/src/utils/registry-broker.d.ts +148 -0
- package/dist/src/utils/registry-broker.d.ts.map +1 -0
- package/dist/src/utils/registry-broker.js +180 -0
- package/dist/src/utils/registry-broker.js.map +1 -0
- package/dist/src/utils/socks-forward.d.ts +40 -0
- package/dist/src/utils/socks-forward.d.ts.map +1 -0
- package/dist/src/utils/socks-forward.js +97 -0
- package/dist/src/utils/socks-forward.js.map +1 -0
- package/dist/src/utils/stack-flag.d.ts +23 -0
- package/dist/src/utils/stack-flag.d.ts.map +1 -0
- package/dist/src/utils/stack-flag.js +41 -0
- package/dist/src/utils/stack-flag.js.map +1 -0
- package/dist/src/utils/tailscale-targets.d.ts +52 -0
- package/dist/src/utils/tailscale-targets.d.ts.map +1 -0
- package/dist/src/utils/tailscale-targets.js +93 -0
- package/dist/src/utils/tailscale-targets.js.map +1 -0
- package/dist/src/utils/tailscale.d.ts +277 -0
- package/dist/src/utils/tailscale.d.ts.map +1 -0
- package/dist/src/utils/tailscale.js +1007 -0
- package/dist/src/utils/tailscale.js.map +1 -0
- package/dist/src/utils/temporal-auth.d.ts +43 -0
- package/dist/src/utils/temporal-auth.d.ts.map +1 -0
- package/dist/src/utils/temporal-auth.js +176 -0
- package/dist/src/utils/temporal-auth.js.map +1 -0
- package/dist/src/utils/temporal-codec.d.ts +101 -0
- package/dist/src/utils/temporal-codec.d.ts.map +1 -0
- package/dist/src/utils/temporal-codec.js +319 -0
- package/dist/src/utils/temporal-codec.js.map +1 -0
- package/dist/src/utils/tunnel-ownership.d.ts +130 -0
- package/dist/src/utils/tunnel-ownership.d.ts.map +1 -0
- package/dist/src/utils/tunnel-ownership.js +274 -0
- package/dist/src/utils/tunnel-ownership.js.map +1 -0
- package/dist/src/utils/vpn-join.d.ts +32 -0
- package/dist/src/utils/vpn-join.d.ts.map +1 -0
- package/dist/src/utils/vpn-join.js +62 -0
- package/dist/src/utils/vpn-join.js.map +1 -0
- package/dist/src/utils/vpn.d.ts +62 -0
- package/dist/src/utils/vpn.d.ts.map +1 -0
- package/dist/src/utils/vpn.js +183 -0
- package/dist/src/utils/vpn.js.map +1 -0
- package/dist/src/utils/workflow-fingerprint.d.ts +49 -0
- package/dist/src/utils/workflow-fingerprint.d.ts.map +1 -0
- package/dist/src/utils/workflow-fingerprint.js +135 -0
- package/dist/src/utils/workflow-fingerprint.js.map +1 -0
- package/dist/src/utils/worktree-identity.d.ts +86 -0
- package/dist/src/utils/worktree-identity.d.ts.map +1 -0
- package/dist/src/utils/worktree-identity.js +164 -0
- package/dist/src/utils/worktree-identity.js.map +1 -0
- package/fragments/agents/AGENTS.md.hbs +92 -0
- package/fragments/agents/CLAUDE.md.hbs +8 -0
- package/fragments/base/Pulumi.dev.yaml.hbs +10 -0
- package/fragments/base/Pulumi.yaml.hbs +9 -0
- package/fragments/base/index.ts.hbs +107 -0
- package/fragments/base/package.json.hbs +22 -0
- package/{templates/api-web-db/api → fragments/base}/tsconfig.json +3 -4
- package/fragments/bucket/api/src/storage.ts.hbs +81 -0
- package/fragments/database/api/src/db.ts.hbs +23 -0
- package/fragments/database/prisma/schema.prisma.hbs +18 -0
- package/{templates/api-web-db → fragments/service}/api/.dockerignore +2 -0
- package/fragments/service/api/package.json.hbs +40 -0
- package/fragments/service/api/src/index.ts.hbs +58 -0
- package/{templates/api-web-db → fragments/service/api}/tsconfig.json +5 -3
- package/fragments/temporal/worker/.dockerignore +4 -0
- package/fragments/temporal/worker/Dockerfile +15 -0
- package/{templates/temporal-api-worker → fragments/temporal}/worker/package.json.hbs +3 -2
- package/fragments/temporal/worker/src/activities.ts.hbs +14 -0
- package/fragments/temporal/worker/src/worker.ts.hbs +27 -0
- package/fragments/temporal/worker/src/workflows.ts.hbs +24 -0
- package/fragments/temporal/worker/tsconfig.json +13 -0
- package/package.json +36 -22
- package/skills/core/SKILL.md +365 -0
- package/skills/pull-remote-agent-context/SKILL.md +194 -0
- package/stack/docker-compose.hub.yml +134 -0
- package/stack/docker-compose.yml +447 -0
- package/stack/hub/Dockerfile.api +18 -0
- package/stack/hub/Dockerfile.auth +10 -0
- package/stack/hub/Dockerfile.ui +10 -0
- package/stack/init/01-databases.sql +12 -0
- package/stack/observability/blackbox.yml +20 -0
- package/stack/observability/otel-collector.yaml +73 -0
- package/stack/observability/prometheus.yml +36 -0
- package/stack/observability/tempo.yaml +25 -0
- package/stack/temporal/local.yaml +44 -0
- package/templates/api-auth/AGENTS.md.hbs +16 -0
- package/templates/api-auth/Pulumi.dev.yaml.hbs +8 -0
- package/templates/api-auth/Pulumi.yaml.hbs +8 -0
- package/templates/api-auth/README.md.hbs +67 -0
- package/templates/api-auth/api/package.json.hbs +28 -0
- package/templates/api-auth/api/src/index.ts.hbs +96 -0
- package/templates/api-auth/api/src/schema.ts.hbs +35 -0
- package/templates/api-auth/api/src/seed-authz.ts.hbs +48 -0
- package/templates/api-auth/api/src/spicedb-http-provider.ts.hbs +89 -0
- package/templates/api-auth/index.ts.hbs +65 -0
- package/templates/api-auth/package.json.hbs +20 -0
- package/templates/api-auth/skills/develop/SKILL.md.hbs +32 -0
- package/templates/api-role-gating/AGENTS.md.hbs +20 -0
- package/templates/api-role-gating/Pulumi.dev.yaml.hbs +8 -0
- package/templates/api-role-gating/Pulumi.yaml.hbs +8 -0
- package/templates/api-role-gating/README.md.hbs +64 -0
- package/templates/api-role-gating/api/Dockerfile +17 -0
- package/templates/api-role-gating/api/package.json.hbs +28 -0
- package/templates/api-role-gating/api/src/authn.ts.hbs +29 -0
- package/templates/api-role-gating/api/src/authz.ts.hbs +12 -0
- package/templates/api-role-gating/api/src/main.ts.hbs +58 -0
- package/templates/api-role-gating/api/src/schema.ts.hbs +22 -0
- package/templates/api-role-gating/api/tsconfig.json +13 -0
- package/templates/api-role-gating/index.ts.hbs +107 -0
- package/templates/api-role-gating/package.json.hbs +21 -0
- package/templates/api-role-gating/skills/develop/SKILL.md.hbs +60 -0
- package/templates/api-role-gating/tsconfig.json +10 -0
- package/templates/apps-repo/README.md.hbs +24 -0
- package/templates/apps-repo/gitignore +41 -0
- package/templates/apps-repo/npmrc.hbs +7 -0
- package/templates/apps-repo/package.json.hbs +15 -0
- package/templates/apps-repo/pnpm-workspace.yaml +3 -0
- package/templates/apps-repo/tsconfig.json +18 -0
- package/templates/external-service/AGENTS.md.hbs +20 -0
- package/templates/external-service/Pulumi.dev.yaml.hbs +8 -0
- package/templates/external-service/Pulumi.yaml.hbs +8 -0
- package/templates/external-service/README.md.hbs +56 -0
- package/templates/external-service/api/Dockerfile +15 -0
- package/templates/external-service/api/package.json.hbs +25 -0
- package/templates/external-service/api/src/index.ts.hbs +81 -0
- package/templates/external-service/index.ts.hbs +82 -0
- package/templates/external-service/mocks/vendorpay/package.json.hbs +9 -0
- package/templates/external-service/mocks/vendorpay/server.mjs.hbs +61 -0
- package/templates/external-service/package.json.hbs +34 -0
- package/templates/external-service/skills/develop/SKILL.md.hbs +55 -0
- package/templates/external-service/tsconfig.json +10 -0
- package/templates/platform-repo/AGENTS.md.hbs +18 -0
- package/templates/platform-repo/README.md.hbs +38 -0
- package/templates/platform-repo/core/Pulumi.yaml.hbs +12 -0
- package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +57 -0
- package/templates/platform-repo/core/index.ts +62 -0
- package/templates/platform-repo/core/package.json.hbs +22 -0
- package/templates/platform-repo/core/tsconfig.json +8 -0
- package/templates/platform-repo/package.json.hbs +15 -0
- package/templates/platform-repo/platform/Pulumi.yaml.hbs +12 -0
- package/templates/platform-repo/platform/Pulumi.{{tenant}}-{{env}}.yaml.hbs +59 -0
- package/templates/platform-repo/platform/index.ts +95 -0
- package/templates/platform-repo/platform/package.json.hbs +26 -0
- package/templates/platform-repo/platform/tsconfig.json +8 -0
- package/templates/platform-repo/pnpm-workspace.yaml +3 -0
- package/templates/workflow/AGENTS.md.hbs +15 -0
- package/templates/workflow/Pulumi.dev.yaml.hbs +8 -0
- package/templates/workflow/Pulumi.yaml.hbs +8 -0
- package/templates/workflow/README.md.hbs +45 -0
- package/templates/workflow/api/.dockerignore +4 -0
- package/templates/workflow/api/Dockerfile +15 -0
- package/templates/{temporal-api-worker → workflow}/api/package.json.hbs +8 -6
- package/templates/workflow/api/src/index.ts.hbs +130 -0
- package/templates/workflow/api/tsconfig.json +14 -0
- package/templates/workflow/index.ts.hbs +67 -0
- package/templates/workflow/package.json.hbs +20 -0
- package/templates/workflow/skills/develop/SKILL.md.hbs +32 -0
- package/templates/workflow/tsconfig.json +10 -0
- package/templates/workflow/worker/.dockerignore +4 -0
- package/templates/workflow/worker/Dockerfile +13 -0
- package/templates/workflow/worker/package.json.hbs +25 -0
- package/templates/workflow/worker/src/worker.ts.hbs +24 -0
- package/templates/workflow/worker/tsconfig.json +14 -0
- package/dist/src/commands/devbox.d.ts +0 -22
- package/dist/src/commands/devbox.d.ts.map +0 -1
- package/dist/src/commands/devbox.js +0 -463
- package/dist/src/commands/devbox.js.map +0 -1
- package/templates/api-web-db/api/Dockerfile +0 -16
- package/templates/api-web-db/api/package.json.hbs +0 -21
- package/templates/api-web-db/api/src/index.ts.hbs +0 -123
- package/templates/api-web-db/package.json.hbs +0 -27
- package/templates/api-web-db/sst.config.ts.hbs +0 -151
- package/templates/api-web-db/web/.dockerignore +0 -3
- package/templates/api-web-db/web/Dockerfile +0 -17
- package/templates/api-web-db/web/app/lib/db.server.ts +0 -36
- package/templates/api-web-db/web/app/root.tsx +0 -29
- package/templates/api-web-db/web/app/routes/home.tsx.hbs +0 -114
- package/templates/api-web-db/web/app/routes.ts +0 -3
- package/templates/api-web-db/web/package.json.hbs +0 -30
- package/templates/api-web-db/web/prisma/schema.prisma +0 -25
- package/templates/api-web-db/web/prisma.config.ts +0 -18
- package/templates/api-web-db/web/react-router.config.ts +0 -5
- package/templates/api-web-db/web/tsconfig.json +0 -19
- package/templates/api-web-db/web/vite.config.ts +0 -9
- package/templates/temporal-api-worker/README.md.hbs +0 -133
- package/templates/temporal-api-worker/api/src/index.ts.hbs +0 -145
- package/templates/temporal-api-worker/package.json.hbs +0 -29
- package/templates/temporal-api-worker/sst.config.ts.hbs +0 -161
- package/templates/temporal-api-worker/worker/Dockerfile +0 -11
- package/templates/temporal-api-worker/worker/src/bundle-workflows.ts +0 -38
- package/templates/temporal-api-worker/worker/src/worker.ts.hbs +0 -93
- /package/templates/{temporal-api-worker → api-auth}/api/.dockerignore +0 -0
- /package/templates/{temporal-api-worker → api-auth}/api/Dockerfile +0 -0
- /package/templates/{temporal-api-worker → api-auth}/api/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker → api-auth}/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker/worker → api-role-gating/api}/.dockerignore +0 -0
- /package/templates/{temporal-api-worker/worker → external-service/api}/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker → workflow}/api/src/encryption-codec.ts +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/activities.ts.hbs +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/encryption-codec.ts +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/workflows.ts.hbs +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
FROM node:20-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
|
|
5
|
+
COPY package*.json ./
|
|
6
|
+
# Full install (not --omit=dev): the build needs esm-bundle, a devDependency.
|
|
7
|
+
# npm install (not ci) — these scaffolds ship no lockfile.
|
|
8
|
+
RUN npm install
|
|
9
|
+
|
|
10
|
+
COPY . .
|
|
11
|
+
RUN npm run build
|
|
12
|
+
|
|
13
|
+
CMD ["node", "dist/worker.js"]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}-worker",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "tsx watch src/worker.ts",
|
|
8
|
+
"start": "node dist/worker.js",
|
|
9
|
+
"build": "esm-bundle src/worker.ts --outfile dist/worker.js --workflows src/workflows.ts --external '@temporalio/*'",
|
|
10
|
+
"check-types": "tsc --noEmit"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@mesh-tech/app-kit": "latest",
|
|
14
|
+
"@opentelemetry/auto-instrumentations-node": "^0.78.0",
|
|
15
|
+
"@temporalio/activity": "^1.11.7",
|
|
16
|
+
"@temporalio/worker": "^1.11.7",
|
|
17
|
+
"@temporalio/workflow": "^1.11.7"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@mesh-tech/esm-bundle": "latest",
|
|
21
|
+
"@types/node": "^20.0.0",
|
|
22
|
+
"tsx": "^4.0.0",
|
|
23
|
+
"typescript": "^5.0.0"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {{titleCase name}} Temporal Worker
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { createTemporalWorker, resolveWorkflows } from "@mesh-tech/app-kit/temporal";
|
|
6
|
+
import * as activities from "./activities.js";
|
|
7
|
+
|
|
8
|
+
async function run() {
|
|
9
|
+
const { worker, cleanup } = await createTemporalWorker({
|
|
10
|
+
activities,
|
|
11
|
+
...await resolveWorkflows(import.meta.url),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
try {
|
|
15
|
+
await worker.run();
|
|
16
|
+
} finally {
|
|
17
|
+
cleanup();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
run().catch((err) => {
|
|
22
|
+
console.error("Worker failed to start:", err);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"declaration": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*"]
|
|
14
|
+
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* mesh devbox — Remote development environment management
|
|
3
|
-
*
|
|
4
|
-
* Commands:
|
|
5
|
-
* mesh devbox status Show devbox instance state
|
|
6
|
-
* mesh devbox start Start the devbox EC2 instance
|
|
7
|
-
* mesh devbox stop Stop the devbox EC2 instance
|
|
8
|
-
* mesh devbox connect Connect to the devbox via SSM
|
|
9
|
-
* mesh devbox connect --host Connect to the EC2 host (not devcontainer)
|
|
10
|
-
*
|
|
11
|
-
* The devbox instance is discovered via SSM parameter at
|
|
12
|
-
* /mesh-platform/{tenant}/{env}/devbox, keyed by GitHub username.
|
|
13
|
-
*
|
|
14
|
-
* GitHub username is resolved from:
|
|
15
|
-
* 1. --user flag
|
|
16
|
-
* 2. GITHUB_USER env var
|
|
17
|
-
* 3. `gh api user` (GitHub CLI)
|
|
18
|
-
* 4. git config github.user
|
|
19
|
-
*/
|
|
20
|
-
import { Command } from "commander";
|
|
21
|
-
export declare function registerDevBoxCommands(program: Command): void;
|
|
22
|
-
//# sourceMappingURL=devbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devbox.d.ts","sourceRoot":"","sources":["../../../src/commands/devbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkfpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiD7D"}
|
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* mesh devbox — Remote development environment management
|
|
3
|
-
*
|
|
4
|
-
* Commands:
|
|
5
|
-
* mesh devbox status Show devbox instance state
|
|
6
|
-
* mesh devbox start Start the devbox EC2 instance
|
|
7
|
-
* mesh devbox stop Stop the devbox EC2 instance
|
|
8
|
-
* mesh devbox connect Connect to the devbox via SSM
|
|
9
|
-
* mesh devbox connect --host Connect to the EC2 host (not devcontainer)
|
|
10
|
-
*
|
|
11
|
-
* The devbox instance is discovered via SSM parameter at
|
|
12
|
-
* /mesh-platform/{tenant}/{env}/devbox, keyed by GitHub username.
|
|
13
|
-
*
|
|
14
|
-
* GitHub username is resolved from:
|
|
15
|
-
* 1. --user flag
|
|
16
|
-
* 2. GITHUB_USER env var
|
|
17
|
-
* 3. `gh api user` (GitHub CLI)
|
|
18
|
-
* 4. git config github.user
|
|
19
|
-
*/
|
|
20
|
-
import { execFileSync, execSync } from "child_process";
|
|
21
|
-
import { SSMClient, GetParameterCommand, SendCommandCommand, GetCommandInvocationCommand, } from "@aws-sdk/client-ssm";
|
|
22
|
-
import { EC2Client, DescribeInstancesCommand, StartInstancesCommand, StopInstancesCommand, } from "@aws-sdk/client-ec2";
|
|
23
|
-
import { logError, logInfo, logSuccess, logWarn } from "../utils/log.js";
|
|
24
|
-
// =============================================================================
|
|
25
|
-
// Discovery
|
|
26
|
-
// =============================================================================
|
|
27
|
-
/**
|
|
28
|
-
* Resolve GitHub username from various sources.
|
|
29
|
-
*/
|
|
30
|
-
function resolveGitHubUsername(explicit) {
|
|
31
|
-
// 1. Explicit flag
|
|
32
|
-
if (explicit)
|
|
33
|
-
return explicit;
|
|
34
|
-
// 2. Environment variable
|
|
35
|
-
if (process.env.GITHUB_USER)
|
|
36
|
-
return process.env.GITHUB_USER;
|
|
37
|
-
// 3. GitHub CLI
|
|
38
|
-
try {
|
|
39
|
-
const result = execSync("gh api user --jq .login", {
|
|
40
|
-
encoding: "utf-8",
|
|
41
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
42
|
-
}).trim();
|
|
43
|
-
if (result)
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// gh not installed or not authenticated
|
|
48
|
-
}
|
|
49
|
-
// 4. Git config
|
|
50
|
-
try {
|
|
51
|
-
const result = execSync("git config github.user", {
|
|
52
|
-
encoding: "utf-8",
|
|
53
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
54
|
-
}).trim();
|
|
55
|
-
if (result)
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
// Not configured
|
|
60
|
-
}
|
|
61
|
-
throw new Error("Could not determine GitHub username. Use one of:\n" +
|
|
62
|
-
" --user <username>\n" +
|
|
63
|
-
" GITHUB_USER env var\n" +
|
|
64
|
-
" gh auth login (GitHub CLI)\n" +
|
|
65
|
-
" git config --global github.user <username>");
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Look up devbox info from SSM parameter store.
|
|
69
|
-
*/
|
|
70
|
-
async function getDevBoxInfo(tenant, env) {
|
|
71
|
-
const ssm = new SSMClient({ region: "us-east-2" });
|
|
72
|
-
const paramPath = `/mesh-platform/${tenant}/${env}/devbox`;
|
|
73
|
-
try {
|
|
74
|
-
const response = await ssm.send(new GetParameterCommand({ Name: paramPath }));
|
|
75
|
-
if (!response.Parameter?.Value) {
|
|
76
|
-
throw new Error("Empty parameter value");
|
|
77
|
-
}
|
|
78
|
-
return JSON.parse(response.Parameter.Value);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
logError(`DevBox configuration not found at ${paramPath}`);
|
|
82
|
-
logInfo("Make sure devbox is enabled in your platform config:\n" +
|
|
83
|
-
" pulumi config set --path mesh:devbox.users.YOUR_USERNAME.home /Users/...\n" +
|
|
84
|
-
" pulumi config set --path mesh:devbox.users.YOUR_USERNAME.workspace /Users/.../mesh-platform\n" +
|
|
85
|
-
"Then deploy: mesh deploy up --yes (from tenants/mesh/platform/)");
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Get the EC2 instance state.
|
|
91
|
-
*/
|
|
92
|
-
async function getInstanceState(instanceId) {
|
|
93
|
-
const ec2 = new EC2Client({ region: "us-east-2" });
|
|
94
|
-
const response = await ec2.send(new DescribeInstancesCommand({
|
|
95
|
-
InstanceIds: [instanceId],
|
|
96
|
-
}));
|
|
97
|
-
const instance = response.Reservations?.[0]?.Instances?.[0];
|
|
98
|
-
if (!instance) {
|
|
99
|
-
throw new Error(`Instance ${instanceId} not found`);
|
|
100
|
-
}
|
|
101
|
-
return {
|
|
102
|
-
state: instance.State?.Name ?? "unknown",
|
|
103
|
-
publicIp: instance.PublicIpAddress,
|
|
104
|
-
launchTime: instance.LaunchTime,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
// =============================================================================
|
|
108
|
-
// Commands
|
|
109
|
-
// =============================================================================
|
|
110
|
-
async function statusCommand(opts) {
|
|
111
|
-
const username = resolveGitHubUsername(opts.user);
|
|
112
|
-
logInfo(`Looking up devbox for ${username}...`);
|
|
113
|
-
const info = await getDevBoxInfo(opts.tenant, opts.env);
|
|
114
|
-
const userInfo = info.users[username];
|
|
115
|
-
if (!userInfo) {
|
|
116
|
-
logError(`No devbox configured for user "${username}"`);
|
|
117
|
-
logInfo(`Available users: ${Object.keys(info.users).join(", ")}`);
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const { state, launchTime } = await getInstanceState(userInfo.instanceId);
|
|
121
|
-
console.log("");
|
|
122
|
-
console.log(" DevBox Status");
|
|
123
|
-
console.log(" ─────────────────────────────────");
|
|
124
|
-
console.log(` User: ${username}`);
|
|
125
|
-
console.log(` Instance: ${userInfo.instanceId}`);
|
|
126
|
-
console.log(` State: ${state}`);
|
|
127
|
-
if (launchTime) {
|
|
128
|
-
const uptime = Math.round((Date.now() - launchTime.getTime()) / 1000 / 60);
|
|
129
|
-
console.log(` Uptime: ${uptime} minutes`);
|
|
130
|
-
}
|
|
131
|
-
console.log(` Home: ${userInfo.home}`);
|
|
132
|
-
console.log(` Workspace: ${userInfo.workspace}`);
|
|
133
|
-
console.log(` Container: ${userInfo.containerName}`);
|
|
134
|
-
console.log("");
|
|
135
|
-
if (state === "running") {
|
|
136
|
-
logSuccess("DevBox is running. Connect with: mesh devbox connect");
|
|
137
|
-
}
|
|
138
|
-
else if (state === "stopped") {
|
|
139
|
-
logWarn("DevBox is stopped. Start with: mesh devbox start");
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
async function startCommand(opts) {
|
|
143
|
-
const username = resolveGitHubUsername(opts.user);
|
|
144
|
-
logInfo(`Starting devbox for ${username}...`);
|
|
145
|
-
const info = await getDevBoxInfo(opts.tenant, opts.env);
|
|
146
|
-
const userInfo = info.users[username];
|
|
147
|
-
if (!userInfo) {
|
|
148
|
-
logError(`No devbox configured for user "${username}"`);
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const { state } = await getInstanceState(userInfo.instanceId);
|
|
152
|
-
if (state === "running") {
|
|
153
|
-
logSuccess("DevBox is already running.");
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (state !== "stopped") {
|
|
157
|
-
logError(`Instance is in state "${state}". Can only start from "stopped".`);
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const ec2 = new EC2Client({ region: "us-east-2" });
|
|
161
|
-
await ec2.send(new StartInstancesCommand({
|
|
162
|
-
InstanceIds: [userInfo.instanceId],
|
|
163
|
-
}));
|
|
164
|
-
logInfo("Starting instance... waiting for SSM agent to register.");
|
|
165
|
-
// Wait for the instance to be running and SSM agent ready
|
|
166
|
-
let attempts = 0;
|
|
167
|
-
const maxAttempts = 60; // 5 minutes
|
|
168
|
-
while (attempts < maxAttempts) {
|
|
169
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
170
|
-
attempts++;
|
|
171
|
-
const { state: currentState } = await getInstanceState(userInfo.instanceId);
|
|
172
|
-
if (currentState !== "running") {
|
|
173
|
-
process.stdout.write(".");
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
// Check if SSM agent is registered
|
|
177
|
-
try {
|
|
178
|
-
execFileSync("aws", [
|
|
179
|
-
"ssm", "describe-instance-information",
|
|
180
|
-
"--filters", `Key=InstanceIds,Values=${userInfo.instanceId}`,
|
|
181
|
-
"--query", "InstanceInformationList[0].PingStatus",
|
|
182
|
-
"--output", "text",
|
|
183
|
-
], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
184
|
-
console.log("");
|
|
185
|
-
logSuccess("DevBox is running and SSM agent is ready.");
|
|
186
|
-
logInfo("Connect with: mesh devbox connect");
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
process.stdout.write(".");
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
console.log("");
|
|
194
|
-
logWarn("Instance is running but SSM agent may not be ready yet. Try connecting in a moment.");
|
|
195
|
-
}
|
|
196
|
-
async function stopCommand(opts) {
|
|
197
|
-
const username = resolveGitHubUsername(opts.user);
|
|
198
|
-
logInfo(`Stopping devbox for ${username}...`);
|
|
199
|
-
const info = await getDevBoxInfo(opts.tenant, opts.env);
|
|
200
|
-
const userInfo = info.users[username];
|
|
201
|
-
if (!userInfo) {
|
|
202
|
-
logError(`No devbox configured for user "${username}"`);
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
const { state } = await getInstanceState(userInfo.instanceId);
|
|
206
|
-
if (state === "stopped") {
|
|
207
|
-
logSuccess("DevBox is already stopped.");
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (state !== "running") {
|
|
211
|
-
logError(`Instance is in state "${state}". Can only stop from "running".`);
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const ec2 = new EC2Client({ region: "us-east-2" });
|
|
215
|
-
await ec2.send(new StopInstancesCommand({
|
|
216
|
-
InstanceIds: [userInfo.instanceId],
|
|
217
|
-
}));
|
|
218
|
-
logSuccess("DevBox is stopping. EBS volume is preserved.");
|
|
219
|
-
}
|
|
220
|
-
async function connectCommand(opts) {
|
|
221
|
-
const username = resolveGitHubUsername(opts.user);
|
|
222
|
-
const info = await getDevBoxInfo(opts.tenant, opts.env);
|
|
223
|
-
const userInfo = info.users[username];
|
|
224
|
-
if (!userInfo) {
|
|
225
|
-
logError(`No devbox configured for user "${username}"`);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
const { state } = await getInstanceState(userInfo.instanceId);
|
|
229
|
-
if (state !== "running") {
|
|
230
|
-
logError(`DevBox is ${state}. Start it first: mesh devbox start`);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
if (opts.mosh) {
|
|
234
|
-
// Connect via Mosh over Tailscale (resilient to flaky connections)
|
|
235
|
-
// Mosh uses SSH to bootstrap mosh-server, then switches to UDP.
|
|
236
|
-
// Tailscale SSH server on the devbox handles auth — regular ssh works,
|
|
237
|
-
// no keys needed. We just need the Tailscale hostname for DNS resolution.
|
|
238
|
-
const hostname = userInfo.tailscaleHostname ?? `devbox-${username}`;
|
|
239
|
-
const remoteCmd = opts.host
|
|
240
|
-
? `/bin/bash -l`
|
|
241
|
-
: `/usr/local/bin/devbox-shell`;
|
|
242
|
-
logInfo(`Connecting via mosh to ${hostname}...`);
|
|
243
|
-
try {
|
|
244
|
-
execFileSync("mosh", [
|
|
245
|
-
"--server=/usr/local/bin/mosh-server",
|
|
246
|
-
`ec2-user@${hostname}`,
|
|
247
|
-
"--", remoteCmd,
|
|
248
|
-
], { stdio: "inherit" });
|
|
249
|
-
}
|
|
250
|
-
catch (err) {
|
|
251
|
-
if (err.status !== 0)
|
|
252
|
-
process.exit(err.status ?? 1);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
else if (opts.host) {
|
|
256
|
-
// Connect to the EC2 host directly via SSM
|
|
257
|
-
logInfo(`Connecting to EC2 host ${userInfo.instanceId}...`);
|
|
258
|
-
try {
|
|
259
|
-
execFileSync("aws", [
|
|
260
|
-
"ssm", "start-session",
|
|
261
|
-
"--target", userInfo.instanceId,
|
|
262
|
-
"--region", "us-east-2",
|
|
263
|
-
], { stdio: "inherit" });
|
|
264
|
-
}
|
|
265
|
-
catch (err) {
|
|
266
|
-
if (err.status !== 0)
|
|
267
|
-
process.exit(err.status ?? 1);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
// Connect directly into the devcontainer via SSM
|
|
272
|
-
logInfo(`Connecting to devcontainer on ${userInfo.instanceId}...`);
|
|
273
|
-
try {
|
|
274
|
-
execFileSync("aws", [
|
|
275
|
-
"ssm", "start-session",
|
|
276
|
-
"--target", userInfo.instanceId,
|
|
277
|
-
"--region", "us-east-2",
|
|
278
|
-
"--document-name", "AWS-StartInteractiveCommand",
|
|
279
|
-
"--parameters", JSON.stringify({
|
|
280
|
-
command: [
|
|
281
|
-
`sudo -u ec2-user /usr/local/bin/devbox-shell`,
|
|
282
|
-
],
|
|
283
|
-
}),
|
|
284
|
-
], { stdio: "inherit" });
|
|
285
|
-
}
|
|
286
|
-
catch (err) {
|
|
287
|
-
if (err.status !== 0)
|
|
288
|
-
process.exit(err.status ?? 1);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Setup command — forward local GitHub auth and clone repo on the devbox.
|
|
294
|
-
*/
|
|
295
|
-
async function setupCommand(opts) {
|
|
296
|
-
const username = resolveGitHubUsername(opts.user);
|
|
297
|
-
const info = await getDevBoxInfo(opts.tenant, opts.env);
|
|
298
|
-
const userInfo = info.users[username];
|
|
299
|
-
if (!userInfo) {
|
|
300
|
-
logError(`No devbox configured for user "${username}"`);
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
const { state } = await getInstanceState(userInfo.instanceId);
|
|
304
|
-
if (state !== "running") {
|
|
305
|
-
logError(`DevBox is ${state}. Start it first: mesh devbox start`);
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
// Get local GitHub auth token
|
|
309
|
-
logInfo("Reading local GitHub auth token...");
|
|
310
|
-
let ghToken;
|
|
311
|
-
try {
|
|
312
|
-
ghToken = execSync("gh auth token", { encoding: "utf-8" }).trim();
|
|
313
|
-
}
|
|
314
|
-
catch {
|
|
315
|
-
logError("Could not get GitHub token. Run: gh auth login");
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (!ghToken) {
|
|
319
|
-
logError("Empty GitHub token. Run: gh auth login");
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
logInfo("Forwarding GitHub auth to devbox...");
|
|
323
|
-
const ssm = new SSMClient({ region: "us-east-2" });
|
|
324
|
-
// NOTE: The GH token is passed via SSM RunShellScript, which means it appears
|
|
325
|
-
// in the CloudTrail audit log for this API call. This is acceptable because:
|
|
326
|
-
// 1. The token is short-lived (GitHub PAT or `gh auth` session token)
|
|
327
|
-
// 2. CloudTrail access is restricted to platform admins
|
|
328
|
-
// 3. The alternative (SSH key forwarding) requires SSM port-forward + SSH setup
|
|
329
|
-
// If this becomes a concern, switch to writing the token to a Secrets Manager
|
|
330
|
-
// secret and reading it from the instance.
|
|
331
|
-
const script = [
|
|
332
|
-
`export HOME="${userInfo.home}"`,
|
|
333
|
-
// Auth with GitHub
|
|
334
|
-
`echo '${ghToken}' | sudo -u ec2-user -H env HOME="${userInfo.home}" gh auth login --with-token`,
|
|
335
|
-
`sudo -u ec2-user -H env HOME="${userInfo.home}" gh auth setup-git`,
|
|
336
|
-
`echo "GitHub auth configured."`,
|
|
337
|
-
// Clone repo if not already present
|
|
338
|
-
`if [ ! -d "${userInfo.workspace}/.git" ] && [ ! -f "${userInfo.workspace}/.git" ]; then`,
|
|
339
|
-
` echo "Cloning repository..."`,
|
|
340
|
-
` sudo -u ec2-user -H env HOME="${userInfo.home}" git clone https://github.com/mesh-tech/mesh-platform.git "${userInfo.workspace}"`,
|
|
341
|
-
` cd "${userInfo.workspace}"`,
|
|
342
|
-
` sudo -u ec2-user git fetch origin devcontainer feature/remote-devbox`,
|
|
343
|
-
` sudo -u ec2-user git checkout devcontainer`,
|
|
344
|
-
` sudo -u ec2-user git worktree add .worktrees/remote-devbox feature/remote-devbox`,
|
|
345
|
-
` echo "Repository cloned and worktrees set up."`,
|
|
346
|
-
`else`,
|
|
347
|
-
` echo "Repository already exists at ${userInfo.workspace}"`,
|
|
348
|
-
`fi`,
|
|
349
|
-
].join("\n");
|
|
350
|
-
try {
|
|
351
|
-
const sendResult = await ssm.send(new SendCommandCommand({
|
|
352
|
-
InstanceIds: [userInfo.instanceId],
|
|
353
|
-
DocumentName: "AWS-RunShellScript",
|
|
354
|
-
Parameters: { commands: [script] },
|
|
355
|
-
TimeoutSeconds: 300,
|
|
356
|
-
}));
|
|
357
|
-
const commandId = sendResult.Command?.CommandId;
|
|
358
|
-
if (!commandId) {
|
|
359
|
-
logError("Failed to send setup command");
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
logInfo("Running setup on devbox (this may take a minute for initial clone)...");
|
|
363
|
-
// Poll for completion
|
|
364
|
-
let status = "InProgress";
|
|
365
|
-
while (status === "InProgress" || status === "Pending") {
|
|
366
|
-
await new Promise((r) => setTimeout(r, 3000));
|
|
367
|
-
const result = await ssm.send(new GetCommandInvocationCommand({
|
|
368
|
-
CommandId: commandId,
|
|
369
|
-
InstanceId: userInfo.instanceId,
|
|
370
|
-
}));
|
|
371
|
-
status = result.Status ?? "Failed";
|
|
372
|
-
if (status === "Success") {
|
|
373
|
-
const output = result.StandardOutputContent?.trim();
|
|
374
|
-
if (output) {
|
|
375
|
-
for (const line of output.split("\n")) {
|
|
376
|
-
logInfo(line);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
logSuccess("Setup complete. Starting devcontainer...");
|
|
380
|
-
// Drop into interactive session: start devcontainer + shell
|
|
381
|
-
try {
|
|
382
|
-
execFileSync("aws", [
|
|
383
|
-
"ssm", "start-session",
|
|
384
|
-
"--target", userInfo.instanceId,
|
|
385
|
-
"--region", "us-east-2",
|
|
386
|
-
"--document-name", "AWS-StartInteractiveCommand",
|
|
387
|
-
"--parameters", JSON.stringify({
|
|
388
|
-
command: [
|
|
389
|
-
`sudo -u ec2-user bash -c 'export HOME="${userInfo.home}" && devbox-start && devbox-shell'`,
|
|
390
|
-
],
|
|
391
|
-
}),
|
|
392
|
-
], { stdio: "inherit" });
|
|
393
|
-
}
|
|
394
|
-
catch (err) {
|
|
395
|
-
if (err.status !== 0)
|
|
396
|
-
process.exit(err.status ?? 1);
|
|
397
|
-
}
|
|
398
|
-
return;
|
|
399
|
-
}
|
|
400
|
-
else if (status !== "InProgress" && status !== "Pending") {
|
|
401
|
-
logError(`Setup failed with status: ${status}`);
|
|
402
|
-
const errOutput = result.StandardErrorContent?.trim();
|
|
403
|
-
if (errOutput) {
|
|
404
|
-
for (const line of errOutput.split("\n")) {
|
|
405
|
-
logError(line);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
catch (error) {
|
|
412
|
-
logError(`Setup failed: ${error.message}`);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
// =============================================================================
|
|
416
|
-
// Registration
|
|
417
|
-
// =============================================================================
|
|
418
|
-
export function registerDevBoxCommands(program) {
|
|
419
|
-
const devbox = program
|
|
420
|
-
.command("devbox")
|
|
421
|
-
.description("Remote development environment (EC2 + devcontainer)")
|
|
422
|
-
.option("--tenant <tenant>", "Tenant name", "mesh")
|
|
423
|
-
.option("--env <env>", "Environment", "dev")
|
|
424
|
-
.option("--user <username>", "GitHub username (auto-detected if not set)");
|
|
425
|
-
devbox
|
|
426
|
-
.command("status")
|
|
427
|
-
.description("Show devbox instance state")
|
|
428
|
-
.action(async () => {
|
|
429
|
-
const opts = devbox.opts();
|
|
430
|
-
await statusCommand(opts);
|
|
431
|
-
});
|
|
432
|
-
devbox
|
|
433
|
-
.command("start")
|
|
434
|
-
.description("Start the devbox EC2 instance")
|
|
435
|
-
.action(async () => {
|
|
436
|
-
const opts = devbox.opts();
|
|
437
|
-
await startCommand(opts);
|
|
438
|
-
});
|
|
439
|
-
devbox
|
|
440
|
-
.command("stop")
|
|
441
|
-
.description("Stop the devbox EC2 instance (preserves EBS)")
|
|
442
|
-
.action(async () => {
|
|
443
|
-
const opts = devbox.opts();
|
|
444
|
-
await stopCommand(opts);
|
|
445
|
-
});
|
|
446
|
-
devbox
|
|
447
|
-
.command("connect")
|
|
448
|
-
.description("Connect to the devbox via SSM")
|
|
449
|
-
.option("--host", "Connect to the EC2 host instead of the devcontainer")
|
|
450
|
-
.option("--mosh", "Use mosh over Tailscale (resilient to flaky connections)")
|
|
451
|
-
.action(async (cmdOpts) => {
|
|
452
|
-
const opts = devbox.opts();
|
|
453
|
-
await connectCommand({ ...opts, ...cmdOpts });
|
|
454
|
-
});
|
|
455
|
-
devbox
|
|
456
|
-
.command("setup")
|
|
457
|
-
.description("Forward GitHub auth and clone repo on the devbox")
|
|
458
|
-
.action(async () => {
|
|
459
|
-
const opts = devbox.opts();
|
|
460
|
-
await setupCommand(opts);
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
|
-
//# sourceMappingURL=devbox.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devbox.js","sourceRoot":"","sources":["../../../src/commands/devbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
FROM node:22-alpine AS builder
|
|
2
|
-
WORKDIR /app
|
|
3
|
-
COPY package.json ./
|
|
4
|
-
RUN npm install
|
|
5
|
-
COPY tsconfig.json ./
|
|
6
|
-
COPY src ./src
|
|
7
|
-
RUN npm run build
|
|
8
|
-
|
|
9
|
-
FROM node:22-alpine
|
|
10
|
-
WORKDIR /app
|
|
11
|
-
COPY package.json ./
|
|
12
|
-
RUN npm install --omit=dev
|
|
13
|
-
COPY --from=builder /app/dist ./dist
|
|
14
|
-
ENV NODE_ENV=production PORT=3001
|
|
15
|
-
EXPOSE 3001
|
|
16
|
-
CMD ["node", "dist/index.js"]
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{name}}-api",
|
|
3
|
-
"type": "module",
|
|
4
|
-
"scripts": {
|
|
5
|
-
"dev": "tsx watch src/index.ts",
|
|
6
|
-
"build": "tsc",
|
|
7
|
-
"start": "node dist/index.js"
|
|
8
|
-
},
|
|
9
|
-
"dependencies": {
|
|
10
|
-
"@aws-sdk/client-secrets-manager": "^3.964.0",
|
|
11
|
-
"@hono/node-server": "^1.13.7",
|
|
12
|
-
"hono": "^4.6.14",
|
|
13
|
-
"pg": "^8.16.3"
|
|
14
|
-
},
|
|
15
|
-
"devDependencies": {
|
|
16
|
-
"@types/node": "^22.10.5",
|
|
17
|
-
"@types/pg": "^8.16.0",
|
|
18
|
-
"tsx": "^4.19.2",
|
|
19
|
-
"typescript": "^5.7.2"
|
|
20
|
-
}
|
|
21
|
-
}
|