@mesh-tech/mesh-cli 0.1.1 → 0.12.1
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 +20878 -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 +28 -0
- package/dist/src/commands/install-shim.d.ts.map +1 -0
- package/dist/src/commands/install-shim.js +191 -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,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mesh docs start` / `mesh docs list` / `mesh docs stop` — the docs as a
|
|
3
|
+
* local, role-gated server (MESH-1803 follow-up).
|
|
4
|
+
*
|
|
5
|
+
* Two content modes, chosen automatically:
|
|
6
|
+
*
|
|
7
|
+
* - **Repo mode** — inside a checkout that has doc roots (mesh-platform):
|
|
8
|
+
* assemble the working tree, build, and serve the static output. This is
|
|
9
|
+
* the contributor path; the docs are exactly what is on disk.
|
|
10
|
+
* - **Registry mode** — anywhere else (a tenant repo, a global install):
|
|
11
|
+
* fetch the published `@mesh-tech/docs` artifact — versioned with the
|
|
12
|
+
* @mesh-tech/* baseline — from the role-gated registry and serve it.
|
|
13
|
+
* `-v <version>` pins; default is the registry's `latest` dist-tag.
|
|
14
|
+
*
|
|
15
|
+
* Two run modes: by default the server runs DETACHED in a tmux session with
|
|
16
|
+
* the constant name `mesh-docs` — the handle that keeps a backgrounded server
|
|
17
|
+
* from getting lost — and the command prints the URL once it answers.
|
|
18
|
+
* `--foreground` (or a non-TTY, i.e. an agent/CI) serves in the foreground.
|
|
19
|
+
* `--dev` (repo mode) runs the Zudoku dev server and is foreground-only: it
|
|
20
|
+
* is an authoring tool — you are supposed to watch it.
|
|
21
|
+
*
|
|
22
|
+
* The registry mode is the distribution point: the people who can read the
|
|
23
|
+
* docs are exactly the people who can install the packages, and no public
|
|
24
|
+
* hosting is required.
|
|
25
|
+
*/
|
|
26
|
+
import { execFileSync } from "node:child_process";
|
|
27
|
+
import { appendFileSync, existsSync, writeFileSync } from "node:fs";
|
|
28
|
+
import path from "node:path";
|
|
29
|
+
import { logError, logInfo, logSuccess } from "../utils/log.js";
|
|
30
|
+
import { resolveCliRuntime } from "../utils/build-info.js";
|
|
31
|
+
import { discoverDocRoots } from "./discover.js";
|
|
32
|
+
import { runAssemble, reportAssembly, DOCS_APP_DIR } from "./portal.js";
|
|
33
|
+
import { serveDocsSite } from "./serve.js";
|
|
34
|
+
import { DOCS_PACKAGE, fetchDocsArtifact, listDocsVersions, readDocsRegistryAuth, } from "./registry-docs.js";
|
|
35
|
+
/** The one tmux session name — the constant handle for the detached server. */
|
|
36
|
+
export const DOCS_TMUX_SESSION = "mesh-docs";
|
|
37
|
+
function registryAuthOrThrow() {
|
|
38
|
+
const auth = readDocsRegistryAuth();
|
|
39
|
+
if (!auth) {
|
|
40
|
+
throw new Error("no CodeArtifact token in ~/.npmrc — run `mesh registry login` first " +
|
|
41
|
+
"(the docs artifact is role-gated the same way the packages are).");
|
|
42
|
+
}
|
|
43
|
+
return auth;
|
|
44
|
+
}
|
|
45
|
+
/** `mesh docs list` — published docs versions, newest first. */
|
|
46
|
+
export async function runDocsList() {
|
|
47
|
+
const auth = registryAuthOrThrow();
|
|
48
|
+
const { versions, latest } = await listDocsVersions(auth);
|
|
49
|
+
if (versions.length === 0) {
|
|
50
|
+
logInfo(`No ${DOCS_PACKAGE} versions published yet.`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
logInfo(`Published docs versions (docs version == @mesh-tech/* baseline):`);
|
|
54
|
+
for (const version of [...versions].reverse()) {
|
|
55
|
+
const marker = version === latest ? " ← latest" : "";
|
|
56
|
+
process.stdout.write(` ${version}${marker}\n`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Detached (tmux) machinery
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
/** The install command to show when tmux is missing, per platform. */
|
|
63
|
+
export function tmuxInstallHint(platform = process.platform) {
|
|
64
|
+
if (platform === "darwin")
|
|
65
|
+
return "brew install tmux";
|
|
66
|
+
if (platform === "linux")
|
|
67
|
+
return "sudo apt-get install tmux # or your distro's package manager";
|
|
68
|
+
return "install tmux via your package manager";
|
|
69
|
+
}
|
|
70
|
+
/** True when tmux is runnable. */
|
|
71
|
+
export function tmuxAvailable() {
|
|
72
|
+
try {
|
|
73
|
+
execFileSync("tmux", ["-V"], { stdio: ["pipe", "pipe", "pipe"] });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** The detached/foreground decision, as one pure predicate. */
|
|
81
|
+
export function shouldDetach(args) {
|
|
82
|
+
return !args.foreground && !args.dev && args.isTTY;
|
|
83
|
+
}
|
|
84
|
+
/** True when the detached session currently exists. */
|
|
85
|
+
export function docsSessionExists() {
|
|
86
|
+
try {
|
|
87
|
+
execFileSync("tmux", ["has-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The argv the tmux session runs: a hidden foreground serve of the prepared
|
|
96
|
+
* directory. Source checkouts re-enter through `pnpm exec mesh` at the repo
|
|
97
|
+
* root (the shim-free canonical form); a published install re-enters through
|
|
98
|
+
* the `mesh` bin on PATH.
|
|
99
|
+
*/
|
|
100
|
+
export function tmuxServeArgs(args) {
|
|
101
|
+
const serveArgs = ["docs", "serve-static", "--root", args.serveRoot, "--port", String(args.port)];
|
|
102
|
+
if (args.mode === "dist") {
|
|
103
|
+
return { command: ["mesh", ...serveArgs], cwd: args.repoRoot };
|
|
104
|
+
}
|
|
105
|
+
return { command: ["pnpm", "exec", "mesh", ...serveArgs], cwd: args.repoRoot };
|
|
106
|
+
}
|
|
107
|
+
/** (Re)start the detached docs session and wait for it to answer. */
|
|
108
|
+
export async function startDetached(args) {
|
|
109
|
+
if (!tmuxAvailable()) {
|
|
110
|
+
throw new Error(`tmux is not installed — the detached docs server runs in a tmux session named "${DOCS_TMUX_SESSION}".\n` +
|
|
111
|
+
`Install it with: ${tmuxInstallHint()}\n` +
|
|
112
|
+
`Or run in the foreground instead: mesh docs start --foreground`);
|
|
113
|
+
}
|
|
114
|
+
// Restart semantics: the session name is the constant handle, so a second
|
|
115
|
+
// `docs start` replaces the first rather than orphaning it. Say so when it
|
|
116
|
+
// happens — a developer serving `-v 1.11.3` who starts the working tree
|
|
117
|
+
// should not lose the first server silently.
|
|
118
|
+
if (docsSessionExists()) {
|
|
119
|
+
logInfo(`Replacing the docs server already running in tmux session "${DOCS_TMUX_SESSION}".`);
|
|
120
|
+
try {
|
|
121
|
+
execFileSync("tmux", ["kill-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// raced with its own shutdown — harmless
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const { command, cwd } = tmuxServeArgs(args);
|
|
128
|
+
// Pass the argv ARRAY: tmux execs a multi-argument command directly, with no
|
|
129
|
+
// shell. A single joined string would go through `sh -c`, and a `$()` or
|
|
130
|
+
// backtick in a path (which mesh-ops worktree names can legitimately carry)
|
|
131
|
+
// would be evaluated. Verified empirically on tmux 3.6a.
|
|
132
|
+
execFileSync("tmux", ["new-session", "-d", "-s", DOCS_TMUX_SESSION, "-c", cwd, "--", ...command], { stdio: ["pipe", "pipe", "pipe"] });
|
|
133
|
+
// Wait for the server to answer before printing the URL — "one click" only
|
|
134
|
+
// works if the link is live when it appears.
|
|
135
|
+
const deadline = Date.now() + 60_000;
|
|
136
|
+
const url = `http://127.0.0.1:${args.port}`;
|
|
137
|
+
let lastError = "";
|
|
138
|
+
while (Date.now() < deadline) {
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(`${url}/healthz`);
|
|
141
|
+
if (response.ok) {
|
|
142
|
+
printReady(url, args.label);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
lastError = `HTTP ${response.status}`;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
149
|
+
}
|
|
150
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`the docs server did not answer at ${url} within 60s (${lastError || "no response"}).\n` +
|
|
153
|
+
`Read its log with: tmux attach -t ${DOCS_TMUX_SESSION} (detach: Ctrl-B then D)`);
|
|
154
|
+
}
|
|
155
|
+
function printReady(url, label) {
|
|
156
|
+
logSuccess(`Mesh docs (${label}) are live:`);
|
|
157
|
+
// Bare on its own line — one click from any terminal.
|
|
158
|
+
process.stdout.write(`\n ${url}\n\n`);
|
|
159
|
+
logInfo(`Running detached in the tmux session "${DOCS_TMUX_SESSION}".`);
|
|
160
|
+
logInfo(` attach: tmux attach -t ${DOCS_TMUX_SESSION}`);
|
|
161
|
+
logInfo(` stop: mesh docs stop`);
|
|
162
|
+
}
|
|
163
|
+
/** `mesh docs stop` — kill the detached session if it exists. */
|
|
164
|
+
export function runDocsStop() {
|
|
165
|
+
try {
|
|
166
|
+
execFileSync("tmux", ["kill-session", "-t", DOCS_TMUX_SESSION], { stdio: ["pipe", "pipe", "pipe"] });
|
|
167
|
+
logSuccess(`Stopped the docs server (tmux session "${DOCS_TMUX_SESSION}").`);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
logInfo(`No docs server is running (no tmux session named "${DOCS_TMUX_SESSION}").`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** The hidden `mesh docs serve-static` the tmux session re-enters through. */
|
|
174
|
+
export async function runDocsServeStatic(args) {
|
|
175
|
+
const requestedPort = Number.parseInt(args.port, 10);
|
|
176
|
+
if (!Number.isInteger(requestedPort) || requestedPort < 0 || requestedPort > 65535) {
|
|
177
|
+
throw new Error(`Invalid --port: ${args.port}`);
|
|
178
|
+
}
|
|
179
|
+
if (!args.root || !existsSync(path.join(args.root, "index.html"))) {
|
|
180
|
+
throw new Error(`--root ${args.root || "(empty)"} does not hold a built site (no index.html). ` +
|
|
181
|
+
`This command exists so the detached tmux session can re-enter; you probably want \`mesh docs start\`.`);
|
|
182
|
+
}
|
|
183
|
+
const server = await serveDocsSite({ root: args.root, port: requestedPort });
|
|
184
|
+
logSuccess(`Mesh docs serving at ${server.url} (from ${args.root})`);
|
|
185
|
+
await new Promise((resolve) => {
|
|
186
|
+
const stop = () => void server.close().finally(() => resolve());
|
|
187
|
+
process.once("SIGINT", stop);
|
|
188
|
+
process.once("SIGTERM", stop);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// mesh docs start
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
/** `mesh docs start` — serve the docs locally, detached by default. */
|
|
195
|
+
export async function runDocsStart(args) {
|
|
196
|
+
const requestedPort = Number.parseInt(args.port, 10);
|
|
197
|
+
if (!Number.isInteger(requestedPort) || requestedPort < 0 || requestedPort > 65535) {
|
|
198
|
+
throw new Error(`Invalid --port: ${args.port}`);
|
|
199
|
+
}
|
|
200
|
+
// Compute the run mode BEFORE any prepare work (assemble+build is the
|
|
201
|
+
// expensive part; refuse bad combinations up front).
|
|
202
|
+
const detached = shouldDetach({
|
|
203
|
+
foreground: args.foreground,
|
|
204
|
+
dev: args.dev,
|
|
205
|
+
isTTY: process.stdout.isTTY === true,
|
|
206
|
+
});
|
|
207
|
+
if (detached && requestedPort === 0) {
|
|
208
|
+
// A detached server that picks its own port cannot report the choice back:
|
|
209
|
+
// the parent would poll 127.0.0.1:0 for a minute and "fail" while a
|
|
210
|
+
// perfectly good server runs on a port nobody knows.
|
|
211
|
+
throw new Error("--port 0 (pick a free port) needs a foreground server, because the detached session " +
|
|
212
|
+
"cannot report the port it chose back to this process. Use `mesh docs start --foreground --port 0`, " +
|
|
213
|
+
"or pass an explicit port to run detached.");
|
|
214
|
+
}
|
|
215
|
+
const localRoots = discoverDocRoots(args.repoRoot);
|
|
216
|
+
const repoHasDocs = localRoots.roots.length > 0;
|
|
217
|
+
const registryMode = args.version !== undefined || !repoHasDocs;
|
|
218
|
+
let serveRoot;
|
|
219
|
+
let label;
|
|
220
|
+
if (registryMode) {
|
|
221
|
+
const auth = registryAuthOrThrow();
|
|
222
|
+
const version = args.version === undefined || args.version === "latest"
|
|
223
|
+
? (await listDocsVersions(auth)).latest
|
|
224
|
+
: args.version;
|
|
225
|
+
if (!version) {
|
|
226
|
+
throw new Error(`the registry has no ${DOCS_PACKAGE} versions tagged latest`);
|
|
227
|
+
}
|
|
228
|
+
logInfo(`Fetching ${DOCS_PACKAGE}@${version} from the registry…`);
|
|
229
|
+
const artifactDir = await fetchDocsArtifact(auth, version);
|
|
230
|
+
serveRoot = path.join(artifactDir, "dist");
|
|
231
|
+
label = `@mesh-tech/* ${version} (published artifact)`;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
if (localRoots.errors.length > 0) {
|
|
235
|
+
for (const error of localRoots.errors)
|
|
236
|
+
logError(error);
|
|
237
|
+
throw new Error(`docs discovery failed with ${localRoots.errors.length} problem(s)`);
|
|
238
|
+
}
|
|
239
|
+
const appDir = path.join(args.repoRoot, DOCS_APP_DIR);
|
|
240
|
+
if (args.dev) {
|
|
241
|
+
// HMR mode for docs authoring: assemble, then hand the tree to the
|
|
242
|
+
// Zudoku dev server. Foreground-only by design — an authoring tool is
|
|
243
|
+
// watched, not detached.
|
|
244
|
+
const result = runAssemble({
|
|
245
|
+
repoRoot: args.repoRoot,
|
|
246
|
+
outDir: path.join(appDir, "content"),
|
|
247
|
+
configOut: path.join(appDir, "zudoku.config.ts"),
|
|
248
|
+
});
|
|
249
|
+
reportAssembly(result);
|
|
250
|
+
const { spawn } = await import("node:child_process");
|
|
251
|
+
const child = spawn("pnpm", ["exec", "zudoku", "dev", "--port", String(requestedPort)], {
|
|
252
|
+
cwd: appDir,
|
|
253
|
+
stdio: "inherit",
|
|
254
|
+
env: process.env,
|
|
255
|
+
});
|
|
256
|
+
await new Promise((resolve) => {
|
|
257
|
+
child.on("close", () => resolve());
|
|
258
|
+
process.once("SIGINT", () => child.kill("SIGINT"));
|
|
259
|
+
process.once("SIGTERM", () => child.kill("SIGTERM"));
|
|
260
|
+
});
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Detached mode keeps the waiting display to two lines; the build's noise
|
|
264
|
+
// lands in a log file instead of the terminal.
|
|
265
|
+
const buildLog = path.join(args.repoRoot, DOCS_APP_DIR, "build.log");
|
|
266
|
+
logInfo(`Preparing the docs from this checkout (assemble + build — log: ${path.relative(args.repoRoot, buildLog)})…`);
|
|
267
|
+
const result = runAssemble({
|
|
268
|
+
repoRoot: args.repoRoot,
|
|
269
|
+
outDir: path.join(appDir, "content"),
|
|
270
|
+
configOut: path.join(appDir, "zudoku.config.ts"),
|
|
271
|
+
});
|
|
272
|
+
reportAssembly(result);
|
|
273
|
+
const { spawn } = await import("node:child_process");
|
|
274
|
+
writeFileSync(buildLog, "");
|
|
275
|
+
const code = await new Promise((resolve) => {
|
|
276
|
+
const child = spawn("pnpm", ["exec", "zudoku", "build"], {
|
|
277
|
+
cwd: appDir,
|
|
278
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
279
|
+
env: process.env,
|
|
280
|
+
});
|
|
281
|
+
child.stdout?.on("data", (chunk) => appendFileSync(buildLog, chunk));
|
|
282
|
+
child.stderr?.on("data", (chunk) => appendFileSync(buildLog, chunk));
|
|
283
|
+
child.on("error", () => resolve(1));
|
|
284
|
+
child.on("close", (exitCode) => resolve(exitCode ?? 1));
|
|
285
|
+
});
|
|
286
|
+
if (code !== 0)
|
|
287
|
+
throw new Error(`zudoku build exited with code ${code} — see ${buildLog}`);
|
|
288
|
+
serveRoot = path.join(appDir, "dist");
|
|
289
|
+
label = "this checkout";
|
|
290
|
+
}
|
|
291
|
+
if (detached) {
|
|
292
|
+
const runtime = resolveCliRuntime({ vcs: false });
|
|
293
|
+
await startDetached({
|
|
294
|
+
mode: runtime.mode,
|
|
295
|
+
repoRoot: args.repoRoot,
|
|
296
|
+
serveRoot,
|
|
297
|
+
port: requestedPort,
|
|
298
|
+
label,
|
|
299
|
+
});
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const server = await serveDocsSite({ root: serveRoot, port: requestedPort });
|
|
303
|
+
logSuccess(`Mesh docs (${label}) serving at ${server.url}`);
|
|
304
|
+
logInfo("Press Ctrl-C to stop");
|
|
305
|
+
await new Promise((resolve) => {
|
|
306
|
+
const stop = () => {
|
|
307
|
+
void server.close().finally(() => resolve());
|
|
308
|
+
};
|
|
309
|
+
process.once("SIGINT", stop);
|
|
310
|
+
process.once("SIGTERM", stop);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/docs/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Agent eval runner — sends prompts to a mesh.ai.Agent API and captures
|
|
4
|
+
* structured traces of tool calls, results, errors, and artifacts.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx tsx agent-eval.mts --prompt "Build a contract onboarding workflow..."
|
|
8
|
+
* npx tsx agent-eval.mts --prompt-file prompts/contract-onboarding.md
|
|
9
|
+
* npx tsx agent-eval.mts --prompt "..." --api http://localhost:8787 --conversation conv-123
|
|
10
|
+
*
|
|
11
|
+
* Output: JSON trace to stdout (pipe to jq or a file), human summary to stderr.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=agent-eval.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-eval.d.mts","sourceRoot":"","sources":["../../../src/eval/agent-eval.mts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* Agent eval runner — sends prompts to a mesh.ai.Agent API and captures
|
|
4
|
+
* structured traces of tool calls, results, errors, and artifacts.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx tsx agent-eval.mts --prompt "Build a contract onboarding workflow..."
|
|
8
|
+
* npx tsx agent-eval.mts --prompt-file prompts/contract-onboarding.md
|
|
9
|
+
* npx tsx agent-eval.mts --prompt "..." --api http://localhost:8787 --conversation conv-123
|
|
10
|
+
*
|
|
11
|
+
* Output: JSON trace to stdout (pipe to jq or a file), human summary to stderr.
|
|
12
|
+
*/
|
|
13
|
+
import { parseArgs } from "node:util";
|
|
14
|
+
// ── CLI args ─────────────────────────────────────────────────────────────────
|
|
15
|
+
const { values: args } = parseArgs({
|
|
16
|
+
options: {
|
|
17
|
+
prompt: { type: "string", short: "p" },
|
|
18
|
+
"prompt-file": { type: "string", short: "f" },
|
|
19
|
+
api: { type: "string", default: "http://localhost:8787" },
|
|
20
|
+
conversation: { type: "string", short: "c" },
|
|
21
|
+
timeout: { type: "string", default: "300" },
|
|
22
|
+
verbose: { type: "boolean", short: "v", default: false },
|
|
23
|
+
},
|
|
24
|
+
strict: true,
|
|
25
|
+
});
|
|
26
|
+
const apiUrl = (args.api ?? "http://localhost:8787").replace(/\/+$/, "");
|
|
27
|
+
const timeoutMs = parseInt(args.timeout ?? "300", 10) * 1000;
|
|
28
|
+
let prompt;
|
|
29
|
+
if (args.prompt) {
|
|
30
|
+
prompt = args.prompt;
|
|
31
|
+
}
|
|
32
|
+
else if (args["prompt-file"]) {
|
|
33
|
+
const fs = await import("node:fs");
|
|
34
|
+
prompt = fs.readFileSync(args["prompt-file"], "utf-8").trim();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.error("Usage: agent-eval.mts --prompt '...' or --prompt-file <path>");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// ── SSE stream reader ────────────────────────────────────────────────────────
|
|
41
|
+
async function* readSSE(response) {
|
|
42
|
+
const reader = response.body.getReader();
|
|
43
|
+
const decoder = new TextDecoder();
|
|
44
|
+
let buffer = "";
|
|
45
|
+
while (true) {
|
|
46
|
+
const { done, value } = await reader.read();
|
|
47
|
+
if (done)
|
|
48
|
+
break;
|
|
49
|
+
buffer += decoder.decode(value, { stream: true });
|
|
50
|
+
const lines = buffer.split("\n");
|
|
51
|
+
buffer = lines.pop() ?? "";
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
const trimmed = line.trim();
|
|
54
|
+
if (!trimmed || !trimmed.startsWith("data: "))
|
|
55
|
+
continue;
|
|
56
|
+
const data = trimmed.slice(6);
|
|
57
|
+
if (data === "[DONE]")
|
|
58
|
+
return;
|
|
59
|
+
try {
|
|
60
|
+
yield JSON.parse(data);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Skip malformed events
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ── Main ─────────────────────────────────────────────────────────────────────
|
|
69
|
+
const log = (msg) => process.stderr.write(msg + "\n");
|
|
70
|
+
const vlog = (msg) => { if (args.verbose)
|
|
71
|
+
log(` ${msg}`); };
|
|
72
|
+
log(`\n--- Agent Eval ---`);
|
|
73
|
+
log(`API: ${apiUrl}`);
|
|
74
|
+
log(`Prompt: ${prompt.slice(0, 100)}${prompt.length > 100 ? "..." : ""}`);
|
|
75
|
+
log("");
|
|
76
|
+
const startTime = Date.now();
|
|
77
|
+
const controller = new AbortController();
|
|
78
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
79
|
+
const trace = {
|
|
80
|
+
conversationId: args.conversation ?? null,
|
|
81
|
+
prompt,
|
|
82
|
+
apiUrl,
|
|
83
|
+
startedAt: new Date().toISOString(),
|
|
84
|
+
durationMs: 0,
|
|
85
|
+
toolCalls: [],
|
|
86
|
+
textSegments: [],
|
|
87
|
+
artifacts: [],
|
|
88
|
+
title: null,
|
|
89
|
+
finishReason: null,
|
|
90
|
+
usage: null,
|
|
91
|
+
errors: [],
|
|
92
|
+
warnings: [],
|
|
93
|
+
};
|
|
94
|
+
const pendingTools = new Map();
|
|
95
|
+
let currentText = "";
|
|
96
|
+
try {
|
|
97
|
+
const response = await fetch(`${apiUrl}/v1/conversations/messages`, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
headers: {
|
|
100
|
+
"Content-Type": "application/json",
|
|
101
|
+
"X-Forwarded-User": "eval-runner",
|
|
102
|
+
"X-Forwarded-Email": "eval@localhost",
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify({
|
|
105
|
+
conversationId: trace.conversationId,
|
|
106
|
+
messages: [{ role: "user", content: prompt }],
|
|
107
|
+
stream: true,
|
|
108
|
+
}),
|
|
109
|
+
signal: controller.signal,
|
|
110
|
+
});
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
const body = await response.text();
|
|
113
|
+
log(`ERROR: API returned ${response.status}: ${body}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
for await (const event of readSSE(response)) {
|
|
117
|
+
const type = event.type;
|
|
118
|
+
switch (type) {
|
|
119
|
+
case "conversation-started":
|
|
120
|
+
trace.conversationId = event.conversationId;
|
|
121
|
+
log(`Conversation: ${trace.conversationId}`);
|
|
122
|
+
break;
|
|
123
|
+
case "title-updated":
|
|
124
|
+
trace.title = event.title;
|
|
125
|
+
vlog(`Title: ${trace.title}`);
|
|
126
|
+
break;
|
|
127
|
+
case "text-start":
|
|
128
|
+
currentText = "";
|
|
129
|
+
break;
|
|
130
|
+
case "text-delta":
|
|
131
|
+
currentText += event.delta;
|
|
132
|
+
break;
|
|
133
|
+
case "text-end":
|
|
134
|
+
if (currentText) {
|
|
135
|
+
trace.textSegments.push(currentText);
|
|
136
|
+
vlog(`Text: ${currentText.slice(0, 80)}${currentText.length > 80 ? "..." : ""}`);
|
|
137
|
+
}
|
|
138
|
+
currentText = "";
|
|
139
|
+
break;
|
|
140
|
+
case "tool-call-start": {
|
|
141
|
+
const tc = {
|
|
142
|
+
toolId: event.toolId,
|
|
143
|
+
toolName: event.toolName,
|
|
144
|
+
args: event.args,
|
|
145
|
+
startedAt: Date.now(),
|
|
146
|
+
};
|
|
147
|
+
pendingTools.set(tc.toolId, tc);
|
|
148
|
+
trace.toolCalls.push(tc);
|
|
149
|
+
log(` -> ${tc.toolName}${args.verbose ? ` (${JSON.stringify(tc.args).slice(0, 120)})` : ""}`);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case "tool-call-result": {
|
|
153
|
+
const tc = pendingTools.get(event.toolId);
|
|
154
|
+
if (tc) {
|
|
155
|
+
tc.result = event.result;
|
|
156
|
+
tc.durationMs = Date.now() - tc.startedAt;
|
|
157
|
+
pendingTools.delete(tc.toolId);
|
|
158
|
+
// Check for success: false in result
|
|
159
|
+
const r = event.result;
|
|
160
|
+
if (r && r.success === false) {
|
|
161
|
+
const errMsg = r.error ?? "success: false";
|
|
162
|
+
trace.errors.push(`${tc.toolName}: ${errMsg}`);
|
|
163
|
+
log(` <- ${tc.toolName} FAILED: ${errMsg.slice(0, 100)}`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
vlog(` <- ${tc.toolName} OK (${tc.durationMs}ms)`);
|
|
167
|
+
}
|
|
168
|
+
// Check for warnings
|
|
169
|
+
if (r && Array.isArray(r.warnings)) {
|
|
170
|
+
for (const w of r.warnings) {
|
|
171
|
+
trace.warnings.push(`${tc.toolName}: ${w}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (r && r.action_required) {
|
|
175
|
+
trace.warnings.push(`${tc.toolName} ACTION REQUIRED: ${r.action_required}`);
|
|
176
|
+
}
|
|
177
|
+
if (r && Array.isArray(r.missing_specs)) {
|
|
178
|
+
for (const w of r.missing_specs) {
|
|
179
|
+
trace.warnings.push(`${tc.toolName} MISSING SPEC: ${w}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case "tool-call-error": {
|
|
186
|
+
const tc = pendingTools.get(event.toolId);
|
|
187
|
+
if (tc) {
|
|
188
|
+
tc.error = event.error;
|
|
189
|
+
tc.durationMs = Date.now() - tc.startedAt;
|
|
190
|
+
pendingTools.delete(tc.toolId);
|
|
191
|
+
trace.errors.push(`${tc.toolName}: ${tc.error}`);
|
|
192
|
+
log(` <- ${tc.toolName} ERROR: ${tc.error.slice(0, 100)}`);
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "artifact-update": {
|
|
197
|
+
const a = event.artifact;
|
|
198
|
+
const entry = { id: a.id, type: a.type, title: a.title };
|
|
199
|
+
// Update or add
|
|
200
|
+
const idx = trace.artifacts.findIndex((x) => x.id === entry.id);
|
|
201
|
+
if (idx >= 0)
|
|
202
|
+
trace.artifacts[idx] = entry;
|
|
203
|
+
else
|
|
204
|
+
trace.artifacts.push(entry);
|
|
205
|
+
vlog(`Artifact: ${entry.id} (${entry.type}): ${entry.title}`);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case "error":
|
|
209
|
+
trace.errors.push(event.error);
|
|
210
|
+
log(` ERROR: ${event.error}`);
|
|
211
|
+
break;
|
|
212
|
+
case "finish":
|
|
213
|
+
trace.finishReason = event.finishReason;
|
|
214
|
+
trace.usage = event.usage ?? null;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
if (err.name === "AbortError") {
|
|
221
|
+
trace.errors.push(`Timeout after ${timeoutMs / 1000}s`);
|
|
222
|
+
log(`\nTIMEOUT after ${timeoutMs / 1000}s`);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
trace.errors.push(err.message);
|
|
226
|
+
log(`\nERROR: ${err.message}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
clearTimeout(timer);
|
|
231
|
+
}
|
|
232
|
+
trace.durationMs = Date.now() - startTime;
|
|
233
|
+
// ── Summary ──────────────────────────────────────────────────────────────────
|
|
234
|
+
log("\n--- Summary ---");
|
|
235
|
+
log(`Duration: ${(trace.durationMs / 1000).toFixed(1)}s`);
|
|
236
|
+
log(`Tool calls: ${trace.toolCalls.length}`);
|
|
237
|
+
log(`Text segments: ${trace.textSegments.length}`);
|
|
238
|
+
log(`Artifacts: ${trace.artifacts.length}`);
|
|
239
|
+
log(`Errors: ${trace.errors.length}`);
|
|
240
|
+
log(`Warnings: ${trace.warnings.length}`);
|
|
241
|
+
log(`Finish: ${trace.finishReason ?? "unknown"}`);
|
|
242
|
+
if (trace.usage) {
|
|
243
|
+
log(`Tokens: ${trace.usage.inputTokens} in / ${trace.usage.outputTokens} out`);
|
|
244
|
+
}
|
|
245
|
+
if (trace.errors.length > 0) {
|
|
246
|
+
log("\nErrors:");
|
|
247
|
+
for (const e of trace.errors)
|
|
248
|
+
log(` - ${e}`);
|
|
249
|
+
}
|
|
250
|
+
if (trace.warnings.length > 0) {
|
|
251
|
+
log("\nWarnings:");
|
|
252
|
+
for (const w of trace.warnings)
|
|
253
|
+
log(` - ${w}`);
|
|
254
|
+
}
|
|
255
|
+
// Tool call breakdown
|
|
256
|
+
const toolCounts = new Map();
|
|
257
|
+
for (const tc of trace.toolCalls) {
|
|
258
|
+
const entry = toolCounts.get(tc.toolName) ?? { count: 0, failed: 0 };
|
|
259
|
+
entry.count++;
|
|
260
|
+
if (tc.error || tc.result?.success === false)
|
|
261
|
+
entry.failed++;
|
|
262
|
+
toolCounts.set(tc.toolName, entry);
|
|
263
|
+
}
|
|
264
|
+
if (toolCounts.size > 0) {
|
|
265
|
+
log("\nTool breakdown:");
|
|
266
|
+
for (const [name, { count, failed }] of toolCounts) {
|
|
267
|
+
log(` ${name}: ${count} call${count > 1 ? "s" : ""}${failed > 0 ? ` (${failed} failed)` : ""}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
log("");
|
|
271
|
+
// ── JSON trace to stdout ─────────────────────────────────────────────────────
|
|
272
|
+
console.log(JSON.stringify(trace, null, 2));
|
|
273
|
+
//# sourceMappingURL=agent-eval.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-eval.mjs","sourceRoot":"","sources":["../../../src/eval/agent-eval.mts"],"names":[],"mappings":"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"}
|