@mesh-tech/mesh-cli 0.14.0 → 0.16.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.
Files changed (74) hide show
  1. package/dist/bin/mesh.js +11485 -10591
  2. package/dist/bin/mesh.js.map +4 -4
  3. package/dist/build-info.json +2 -2
  4. package/dist/src/commands/app-check.d.ts +97 -0
  5. package/dist/src/commands/app-check.d.ts.map +1 -0
  6. package/dist/src/commands/app-check.js +502 -0
  7. package/dist/src/commands/app-check.js.map +1 -0
  8. package/dist/src/commands/create-app.d.ts +28 -0
  9. package/dist/src/commands/create-app.d.ts.map +1 -1
  10. package/dist/src/commands/create-app.js +40 -7
  11. package/dist/src/commands/create-app.js.map +1 -1
  12. package/dist/src/commands/dev-doctor.d.ts +28 -12
  13. package/dist/src/commands/dev-doctor.d.ts.map +1 -1
  14. package/dist/src/commands/dev-doctor.js +9 -5
  15. package/dist/src/commands/dev-doctor.js.map +1 -1
  16. package/dist/src/commands/dev.d.ts +11 -0
  17. package/dist/src/commands/dev.d.ts.map +1 -1
  18. package/dist/src/commands/dev.js +70 -1
  19. package/dist/src/commands/dev.js.map +1 -1
  20. package/dist/src/commands/hub/index.d.ts.map +1 -1
  21. package/dist/src/commands/hub/index.js +65 -4
  22. package/dist/src/commands/hub/index.js.map +1 -1
  23. package/dist/src/commands/local/auth-provision.d.ts +34 -0
  24. package/dist/src/commands/local/auth-provision.d.ts.map +1 -1
  25. package/dist/src/commands/local/auth-provision.js +78 -1
  26. package/dist/src/commands/local/auth-provision.js.map +1 -1
  27. package/dist/src/commands/local/hub-local.d.ts +38 -0
  28. package/dist/src/commands/local/hub-local.d.ts.map +1 -1
  29. package/dist/src/commands/local/hub-local.js +137 -0
  30. package/dist/src/commands/local/hub-local.js.map +1 -1
  31. package/dist/src/commands/local/index.d.ts.map +1 -1
  32. package/dist/src/commands/local/index.js +31 -3
  33. package/dist/src/commands/local/index.js.map +1 -1
  34. package/dist/src/commands/local/seed-zitadel.d.ts +10 -3
  35. package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -1
  36. package/dist/src/commands/local/seed-zitadel.js +259 -78
  37. package/dist/src/commands/local/seed-zitadel.js.map +1 -1
  38. package/dist/src/commands/local/stack.d.ts +30 -0
  39. package/dist/src/commands/local/stack.d.ts.map +1 -1
  40. package/dist/src/commands/local/stack.js +48 -0
  41. package/dist/src/commands/local/stack.js.map +1 -1
  42. package/dist/src/program.d.ts.map +1 -1
  43. package/dist/src/program.js +2 -0
  44. package/dist/src/program.js.map +1 -1
  45. package/fragments/base/index.ts.hbs +9 -0
  46. package/fragments/base/package.json.hbs +1 -1
  47. package/fragments/service/api/package.json.hbs +5 -0
  48. package/fragments/service/api/src/index.ts.hbs +6 -4
  49. package/fragments/temporal/worker/package.json.hbs +2 -0
  50. package/fragments/temporal/worker/src/activities.ts.hbs +6 -1
  51. package/fragments/temporal/worker/src/worker.ts.hbs +7 -1
  52. package/fragments/temporal/worker/src/workflows.ts.hbs +4 -1
  53. package/package.json +2 -2
  54. package/skills/core/SKILL.md +3 -1
  55. package/stack/docker-compose.hub.yml +5 -0
  56. package/stack/docker-compose.yml +35 -0
  57. package/templates/api-auth/AGENTS.md.hbs +6 -0
  58. package/templates/api-auth/README.md.hbs +11 -8
  59. package/templates/api-auth/api/package.json.hbs +2 -1
  60. package/templates/api-auth/api/{src → scripts}/seed-authz.ts.hbs +3 -3
  61. package/templates/api-auth/api/src/index.ts.hbs +20 -9
  62. package/templates/api-auth/index.ts.hbs +78 -24
  63. package/templates/api-auth/package.json.hbs +1 -0
  64. package/templates/api-role-gating/api/package.json.hbs +1 -0
  65. package/templates/api-role-gating/api/src/main.ts.hbs +6 -1
  66. package/templates/external-service/api/package.json.hbs +1 -0
  67. package/templates/external-service/api/src/index.ts.hbs +7 -2
  68. package/templates/workflow/api/package.json.hbs +1 -0
  69. package/templates/workflow/api/src/index.ts.hbs +10 -5
  70. package/templates/workflow/worker/package.json.hbs +1 -0
  71. package/templates/workflow/worker/src/activities.ts.hbs +7 -3
  72. package/templates/workflow/worker/src/encryption-codec.ts +3 -2
  73. package/templates/workflow/worker/src/worker.ts.hbs +7 -1
  74. package/templates/workflow/worker/src/workflows.ts.hbs +3 -3
@@ -19,6 +19,36 @@ export declare function localLogsDir(): string;
19
19
  * stack's Prometheus. The local analog of the hosted Probe CRs.
20
20
  */
21
21
  export declare function localProbesDir(): string;
22
+ /**
23
+ * Register the app's OWN services as blackbox probe targets.
24
+ *
25
+ * Uptime in the Hub has three sources: blackbox probes, Kubernetes pod
26
+ * readiness, and external-service probes. Locally the middle one cannot exist —
27
+ * `mesh dev --local` runs services as host processes, not Deployments, so
28
+ * kube-state-metrics has nothing to report — and nothing used to register the
29
+ * host processes with blackbox either. The result was an app that is plainly
30
+ * running and shows no uptime at all, which reads as a broken panel rather than
31
+ * an unmonitored one.
32
+ *
33
+ * The labels match what `ExternalService` already emits (`tenant`/`env`/`app`),
34
+ * because that is what the Hub's scoped discovery query selects on. `target` is
35
+ * the service name, which is how the Hub names the row.
36
+ *
37
+ * Targets use `host.docker.internal` — Prometheus and blackbox run inside the
38
+ * stack's network and reach host processes only through that name.
39
+ *
40
+ * Returns the file written, for the session to remove on `--kill`; a stale probe
41
+ * would otherwise report a service down long after its session ended.
42
+ */
43
+ export declare function writeAppServiceProbes(args: {
44
+ tenant: string;
45
+ env: string;
46
+ app: string;
47
+ /** Service name → host port. Mock stand-ins are the caller's to exclude. */
48
+ services: Record<string, number>;
49
+ /** Health path every service exposes. */
50
+ healthPath?: string;
51
+ }): string | undefined;
22
52
  /** Endpoints the local stack exposes on the host. */
23
53
  export interface StackEndpoint {
24
54
  service: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../../src/commands/local/stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../../src/commands/local/stack.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,47 @@ export function localProbesDir() {
36
36
  fs.mkdirSync(dir, { recursive: true });
37
37
  return dir;
38
38
  }
39
+ /**
40
+ * Register the app's OWN services as blackbox probe targets.
41
+ *
42
+ * Uptime in the Hub has three sources: blackbox probes, Kubernetes pod
43
+ * readiness, and external-service probes. Locally the middle one cannot exist —
44
+ * `mesh dev --local` runs services as host processes, not Deployments, so
45
+ * kube-state-metrics has nothing to report — and nothing used to register the
46
+ * host processes with blackbox either. The result was an app that is plainly
47
+ * running and shows no uptime at all, which reads as a broken panel rather than
48
+ * an unmonitored one.
49
+ *
50
+ * The labels match what `ExternalService` already emits (`tenant`/`env`/`app`),
51
+ * because that is what the Hub's scoped discovery query selects on. `target` is
52
+ * the service name, which is how the Hub names the row.
53
+ *
54
+ * Targets use `host.docker.internal` — Prometheus and blackbox run inside the
55
+ * stack's network and reach host processes only through that name.
56
+ *
57
+ * Returns the file written, for the session to remove on `--kill`; a stale probe
58
+ * would otherwise report a service down long after its session ended.
59
+ */
60
+ export function writeAppServiceProbes(args) {
61
+ const entries = Object.entries(args.services);
62
+ if (entries.length === 0)
63
+ return undefined;
64
+ const healthPath = args.healthPath ?? "/health";
65
+ const targets = entries.map(([name, port]) => ({
66
+ targets: [`http://host.docker.internal:${port}${healthPath}`],
67
+ labels: {
68
+ type: "service",
69
+ tenant: args.tenant,
70
+ env: args.env,
71
+ app: args.app,
72
+ service: name,
73
+ target: name,
74
+ },
75
+ }));
76
+ const file = path.join(localProbesDir(), `${args.tenant}-${args.app}-services.json`);
77
+ fs.writeFileSync(file, `${JSON.stringify(targets, null, 2)}\n`);
78
+ return file;
79
+ }
39
80
  export const STACK_ENDPOINTS = [
40
81
  {
41
82
  service: "temporal",
@@ -57,6 +98,13 @@ export const STACK_ENDPOINTS = [
57
98
  probe: { kind: "http", url: "http://localhost:8080/debug/healthz" },
58
99
  hint: "admin@local.mesh / LocalDev1!",
59
100
  },
101
+ {
102
+ service: "mailpit",
103
+ label: "Mailbox (local mail)",
104
+ url: "http://localhost:8025",
105
+ probe: { kind: "http", url: "http://localhost:8025/readyz" },
106
+ hint: "every activation + password-reset mail Zitadel sends locally lands here",
107
+ },
60
108
  {
61
109
  service: "database",
62
110
  label: "Postgres",
@@ -1 +1 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/commands/local/stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../../src/commands/local/stack.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CA+BzE"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAgCzE"}
@@ -11,6 +11,7 @@
11
11
  * config, no Docker, and no TTY.
12
12
  */
13
13
  import { Command } from "commander";
14
+ import { registerAppCommands } from "./commands/app-check.js";
14
15
  import { registerArtifactsCommands } from "./commands/artifacts.js";
15
16
  import { registerClusterCommands } from "./commands/cluster.js";
16
17
  import { registerConversationsCommands } from "./commands/conversations.js";
@@ -54,6 +55,7 @@ export function createProgram(options = {}) {
54
55
  registerDeployCommand(program);
55
56
  registerDevCommand(program);
56
57
  registerCreateAppCommand(program);
58
+ registerAppCommands(program);
57
59
  registerDocsCommand(program);
58
60
  registerStackCommand(program);
59
61
  registerTunnelCommands(program);
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
@@ -105,3 +105,12 @@ const worker = new mesh.apps.TemporalWorker("worker", {
105
105
  export const app = env.register({
106
106
  description: "{{titleCase name}}",
107
107
  });
108
+
109
+ // Exported so the bindings above are used, and because a stack's URLs are the
110
+ // first thing anyone wants after a deploy. `pulumi stack output` prints them.
111
+ {{#if service}}
112
+ export const apiUrl = api.url;
113
+ {{/if}}
114
+ {{#if temporal}}
115
+ export const workerTaskQueue = worker.taskQueue;
116
+ {{/if}}
@@ -5,7 +5,7 @@
5
5
  "type": "module",
6
6
  "main": "index.ts",
7
7
  "scripts": {
8
- "typecheck": "tsc --noEmit"
8
+ "check-types": "tsc --noEmit"
9
9
  },
10
10
  "dependencies": {
11
11
  "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
@@ -4,6 +4,10 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
7
+ "check-types": "{{#if database}}prisma generate --schema ../prisma/schema.prisma && {{/if}}tsc --noEmit",
8
+ {{#if database}}
9
+ "db:generate": "prisma generate --schema ../prisma/schema.prisma",
10
+ {{/if}}
7
11
  "dev": "tsx watch src/index.ts",
8
12
  "start": "node dist/index.js",
9
13
  "build": "esm-bundle src/index.ts --outfile dist/index.js"
@@ -13,6 +17,7 @@
13
17
  "@aws-sdk/client-s3": "^3.700.0",
14
18
  {{/if}}
15
19
  "@hono/node-server": "^1.13.0",
20
+ "@mesh-tech/logger": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
16
21
  {{#if temporal}}
17
22
  "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
18
23
  {{/if}}
@@ -16,15 +16,17 @@
16
16
 
17
17
  import { Hono } from "hono";
18
18
  import { serve } from "@hono/node-server";
19
+ import { createLogger, requestLogger } from "@mesh-tech/logger";
19
20
  {{#if temporal}}
20
21
  import { createTemporalClient } from "@mesh-tech/app-kit/temporal-client";
21
22
  {{/if}}
22
- {{#if database}}
23
- import { getDb } from "./db.js";
24
- {{/if}}
25
23
 
26
24
  const PORT = parseInt(process.env.PORT ?? "3000", 10);
25
+ // Every service logs through @mesh-tech/logger (the Mesh app contract, gate
26
+ // 0.4): structured, masked, trace-correlated lines the Hub can search.
27
+ const log = createLogger({ service: "{{name}}-api" });
27
28
  const app = new Hono();
29
+ app.use("*", requestLogger(log));
28
30
 
29
31
  {{#if temporal}}
30
32
  const { withClient } = await createTemporalClient();
@@ -54,5 +56,5 @@ app.post("/workflow", async (c) => {
54
56
 
55
57
  // Start server
56
58
  serve({ fetch: app.fetch, port: PORT, hostname: "0.0.0.0" }, (info) => {
57
- console.log(`[API] {{titleCase name}} listening on port ${info.port}`);
59
+ log.info({ port: info.port }, "{{titleCase name}} API listening");
58
60
  });
@@ -4,12 +4,14 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
7
+ "check-types": "tsc --noEmit",
7
8
  "dev": "tsx watch src/worker.ts",
8
9
  "start": "node dist/worker.js",
9
10
  "build": "esm-bundle src/worker.ts --outfile dist/worker.js --workflows src/workflows.ts --external '@temporalio/*'"
10
11
  },
11
12
  "dependencies": {
12
13
  "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
14
+ "@mesh-tech/logger": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
13
15
  "@temporalio/activity": "^1.11.7",
14
16
  "@temporalio/client": "^1.11.7",
15
17
  "@temporalio/common": "^1.11.7",
@@ -3,12 +3,17 @@
3
3
  *
4
4
  * Activities handle non-deterministic operations:
5
5
  * API calls, database queries, external services, etc.
6
+ *
7
+ * Log with `log` from @temporalio/activity: it carries the activity context and
8
+ * reaches the platform logger the worker installs — never the console.
6
9
  */
7
10
 
11
+ import { log } from "@temporalio/activity";
12
+
8
13
  /**
9
14
  * Generate a greeting message
10
15
  */
11
16
  export async function greet(name: string): Promise<string> {
12
- console.log(`[Activity] Generating greeting for ${name}`);
17
+ log.info("Generating greeting", { name });
13
18
  return `Hello, ${name}!`;
14
19
  }
@@ -6,8 +6,14 @@
6
6
  */
7
7
 
8
8
  import { createTemporalWorker, resolveWorkflows } from "@mesh-tech/app-kit/temporal";
9
+ import { createLogger } from "@mesh-tech/logger";
9
10
  import * as activities from "./activities.js";
10
11
 
12
+ // The worker process logs through @mesh-tech/logger (the Mesh app contract,
13
+ // gate 0.4). Activities use `log` from @temporalio/activity and workflows `log`
14
+ // from @temporalio/workflow — both route to the Runtime logger app-kit installs.
15
+ const log = createLogger({ service: "{{name}}-worker" });
16
+
11
17
  async function run() {
12
18
  const { worker, cleanup } = await createTemporalWorker({
13
19
  activities,
@@ -22,6 +28,6 @@ async function run() {
22
28
  }
23
29
 
24
30
  run().catch((err) => {
25
- console.error("[Worker] Fatal error:", err);
31
+ log.error({ err }, "Fatal error");
26
32
  process.exit(1);
27
33
  });
@@ -8,7 +8,10 @@
8
8
  * - Use proxyActivities() to call activities
9
9
  */
10
10
 
11
- import { proxyActivities, sleep } from "@temporalio/workflow";
11
+ // `sleep` is the deterministic timer to import here when a workflow needs to wait
12
+ // (never `setTimeout`); it is left out until used, since an unused import is a
13
+ // lint warning in every repo that scaffolds this.
14
+ import { proxyActivities } from "@temporalio/workflow";
12
15
  import type * as activities from "./activities.js";
13
16
 
14
17
  const { greet } = proxyActivities<typeof activities>({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mesh-tech/mesh-cli",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "description": "CLI for Mesh platform development utilities",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -33,7 +33,7 @@
33
33
  "./package.json": "./package.json"
34
34
  },
35
35
  "devDependencies": {
36
- "@mesh-tech/tsconfig": "1.50.1",
36
+ "@mesh-tech/tsconfig": "1.53.1",
37
37
  "@mesh-tech/workflow-viz": "0.2.1",
38
38
  "@tanstack/intent": "^0.3.6",
39
39
  "@types/node": "^20.0.0",
@@ -93,9 +93,10 @@ Top-level commands (each `register*` is wired in `src/program.ts`, which `bin/me
93
93
  | `mesh db` | `connect`, `credentials`(alias `creds`), `env`, `psql`, `exec <command...>` | Access tenant DBs through an SSM bastion tunnel. `env` prints `export`s for `eval`; `exec` runs a command with `DATABASE_URL` injected. | `-t/--tenant`, `-e/--env`, `-a/--app`, `--app-tenant`, `--app-stage`; `exec` also: `--secret <arn>`, `--ssl <require\|no-verify\|disable>`, `--port <n>` |
94
94
  | `mesh deploy ...` | passthrough | Runs `pulumi` with the stack's `mesh:deployerRole` assumed. Unknown opts/args pass through; defaults to `up` if no subcommand. | `-s/--stack <name>` (stripped before pulumi `up`); everything else → pulumi (`preview`, `up --yes`, `destroy`, `stack output …`) |
95
95
  | `mesh dev` | `logs <service>`, `restart <service>`, `list`, `test-user [name]` | Two modes. **Tethered** (deployed stack): reads the Pulumi stack dev output, opens tunnels, injects Secrets Manager secrets; needs VPN/AWS creds. **Local** (`--local`, auto when the app has no `Pulumi.yaml`): synthesizes services from the app layout (subdirs with a `dev` script) and wires them to the `mesh start` platform (Temporal `local-dev`, app DB, Zitadel, ministack via `AWS_ENDPOINT_URL`) — zero AWS/VPN/Pulumi. `--externals` (local mode; `--mock` is an alias) also realizes the app's declared external services (package.json → `mesh.externals`; legacy `mesh.mocks` still read). Each declaration runs in one of three MODES — `mock` (the service is emulated: `openapi` → a Prism mock server from a spec, or `src` → a mock process), `local` (a local version of the real service: a `compose` file + published `port`, e.g. a vendor-shaped DB — up `--wait` before the app's services; a realization another checkout already started is **adopted** instead of failing — declared port already served **by a container this compose file defines** → adopt as-is (a publisher the file doesn't define — a native install or unrelated container — is a hard **conflict**, never adopted, since credentials would seed against the wrong service); a stopped foreign container holding the compose `container_name` → `docker start` + adopt — so startup order across checkouts doesn't matter; adopted externals stay out of session state and `--kill` tears down only externals this session created, volumes kept), `remote` (connect to the ACTUAL service: inline vendor `credentials`, or the credentials the app's tenant environment is configured with via `remote.env`). A declaration may carry SEVERAL realizations; `mode` picks the default and `--externals name=mode` overrides it per run (`--externals plaid-db=remote,plaid`). Remote externals get a blackbox uptime probe against their real endpoint. Failing to realize a remote external is fatal only when you named it; a bare `--externals` warns and keeps going, so the local loop still works with no AWS identity. Every realization seeds its ExternalService credential secret (`{{url}}`/`{{host}}`/`{{port}}` from the stand-in's endpoint, `{{env:VAR}}` from the shell) so `resolveCredentials()` runs the deployed code path against the stand-in. Runners: tmux (default) or `--runner docker` (CI/headless — services run as a docker compose project with host networking; parity `--status`/`--kill`/`logs`/`restart`). | root: `--local`, `--externals [name[=mode],…]` (alias `--mock`), `--runner <tmux\|docker>`, `--app <path>`, `--stage`, `--headless`, `--kill`, `--status`, `--json`, `--session <name>`, `--profile <sso>`; `logs`: `--tail <n>`; `test-user`: `--tenant/--env/--region` |
96
- | `mesh start` / `mesh stop` / `mesh status` | — | Full-local Mesh platform via docker compose (project `mesh-local`, assets ship in the CLI package): Postgres, Temporal (+UI), Zitadel, SpiceDB, ministack (local AWS fabric: SSM/Secrets/S3 registry), memcached, OpenSearch, **and the hosted observability backends** (OTel collector + Loki + Tempo + Prometheus — the Hub's logs/traces/metrics views run unchanged). Seeds tenant `local`/env `dev` on first boot and reconciles every Zitadel-provisioned app tenant into the registry. **No AWS creds, VPN, or Pulumi state needed — Docker only.** The **Hub is included by default** — three overlay services, `hub-api` + `hub-ui` + `hub-auth` (an oauth2-proxy; it is what binds the front-door port and proxies to `hub-ui`, so front-door 401s/redirect loops are in ITS logs, not `hub-api`'s) — the front door at http://localhost:9000 — `MESH_HUB_PORT=<port>` publishes it elsewhere when 9000 is taken; export it for `mesh status` too (images build once from the published @mesh-tech/hub tarball; needs `mesh registry login` the first time; `--no-hub` opts out). Auth contract (MESH-2479): `--with-hub` refreshes to the latest published hub after preflighting the CodeArtifact token — with an expired/missing token it falls back to the already-built local images (warn + fixing command), or fails fast naming `mesh registry login --profile mesh-dev` when none exist; the default (no-flag) path with an expired/missing token starts hub-less and names the same fix. Non-TTY runs (CI, agents, piped output) get an `[HH:MM:SS]` prefix on every step line plus a heartbeat during long fetches/builds — `MESH_LOG_TIMESTAMPS=1/0` forces the prefix on/off (default: on when stderr is not a TTY). | `start`: `--no-seed`, `--no-hub`, `--with-hub`; `stop`: `--destroy` (drops volumes/seeds); `status`: `--json` |
96
+ | `mesh start` / `mesh stop` / `mesh status` | — | Full-local Mesh platform via docker compose (project `mesh-local`, assets ship in the CLI package): Postgres, Temporal (+UI), Zitadel, SpiceDB, ministack (local AWS fabric: SSM/Secrets/S3 registry), memcached, OpenSearch, a **local mailbox** (Mailpit — SMTP :1025 wired into Zitadel, inbox at http://localhost:8025, so user-activation and password-reset mail is testable locally instead of vanishing), **and the hosted observability backends** (OTel collector + Loki + Tempo + Prometheus — the Hub's logs/traces/metrics views run unchanged). Seeds tenant `local`/env `dev` on first boot and reconciles every Zitadel-provisioned app tenant into the registry. **No AWS creds, VPN, or Pulumi state needed — Docker only.** The **Hub is included by default** — three overlay services, `hub-api` + `hub-ui` + `hub-auth` (an oauth2-proxy; it is what binds the front-door port and proxies to `hub-ui`, so front-door 401s/redirect loops are in ITS logs, not `hub-api`'s) — the front door at http://localhost:9000 — `MESH_HUB_PORT=<port>` publishes it elsewhere when 9000 is taken; export it for `mesh status` too (images build once from the published @mesh-tech/hub tarball; needs `mesh registry login` the first time; `--no-hub` opts out). Auth contract (MESH-2479): `--with-hub` refreshes to the latest published hub after preflighting the CodeArtifact token — with an expired/missing token it falls back to the already-built local images (warn + fixing command), or fails fast naming `mesh registry login --profile mesh-dev` when none exist; the default (no-flag) path with an expired/missing token starts hub-less and names the same fix. Non-TTY runs (CI, agents, piped output) get an `[HH:MM:SS]` prefix on every step line plus a heartbeat during long fetches/builds — `MESH_LOG_TIMESTAMPS=1/0` forces the prefix on/off (default: on when stderr is not a TTY). | `start`: `--no-seed`, `--no-hub`, `--with-hub`; `stop`: `--destroy` (drops volumes/seeds); `status`: `--json` |
97
97
  | `mesh hub` | `dev` | One-command local Hub over a running dev-local stack. Launches the CURRENT-CODE Hub (apps/hub api+ui from a mesh-platform checkout) pointed at an existing `mesh dev` session — auto-assembles `HUB_TENANT`/`HUB_SCOPE_ENV`/`HUB_SCOPE_TENANTS` (session platform context), `TEMPORAL_ADDRESS` (session tunnel), `AWS_*` (session scratch profile), `DEV_USER_*`+`DEV_USER_TOKEN_URL` (session dev identity; starts its own token-server if the session predates it, so tokens stay fresh past ~1h). Refuses to launch with an empty tenant scope (which the Hub renders as silently blank). Runs in tmux session `mesh-hub-dev`. | `dev`: `--session <name>`, `--tenants <csv>`, `--port` (or `MESH_HUB_DEV_PORT`, default 9000; the containerized `mesh start` Hub uses the separate `MESH_HUB_PORT`), `--api-port <3002>`, `--platform-dir <dir>` (or `MESH_PLATFORM_DIR`), `--print-env`, `--kill` |
98
98
  | `mesh create-app` | — | Scaffold a tenant app. Composable mode (primitives) or legacy template mode. Interactive when TTY + missing flags. Run at the root of an **empty** `{tenant}-mesh-apps` git clone (a `.git` with no `package.json`/`apps/`/`tenants/` and no enclosing pnpm workspace), it first generates the repo-level shape — `pnpm-workspace.yaml` over `apps/*`, private root `package.json`, scoped-registry `.npmrc`, base `tsconfig.json`, `.gitignore`, `README.md`, `apps/` — then scaffolds the app. Never overwrites an existing file. | `--tenant`, `--name`, `--primitives <csv>` (`service,database,temporal,bucket`), `--template <workflow\|api-auth\|api-role-gating\|external-service>`, `--test` (writes to `tests/tenants/`) |
99
+ | `mesh app` | `check [apps...]` | Checks tenant apps against the **Mesh app contract** (`@mesh-tech/app-kit#apps` → `references/app-contract.md`): a UI is its own Service (`UI_IN_API`, `NO_UI_SERVICE`), the app registers with the Hub (`NO_REGISTER`), sign-in goes through the platform proxy (`CUSTOM_SESSION_AUTH`), logs go through `@mesh-tech/logger` (`NON_PLATFORM_LOGGER`), and people/roles/keys are surfaced through the Hub (`NO_AUTHZ_POINTER`, `METADATA_UNPUBLISHED`, `IAC_GRANTS`, `PASSWORD_STORE`, `EMAIL_ALLOWLIST`, `USERS_TABLE`); a tenant-local auth lib is advisory (`LOCAL_AUTH_LIB`). One check per code on the `mesh dev doctor` engine; exit 1 on any BLOCK. The SAME gate `mesh create-app` runs after scaffolding, tenant CI runs beside `mesh skills sync --check`, and the platform reviewer runs on a PR. Default: every `apps/*` with a Pulumi program. | `[apps...]` (repo-relative dirs), `--root <dir>`, `--json`, `--verbose` |
99
100
  | `mesh init` | `app-tenant` | The repo doctor (A1–A3): read-only check pipeline — CLI auth, registry access, public npm not hijacked, platform reachable (Hub API), app-tenant registration, deployer role, repo shape, agent skills — each failure names the exact `mesh` fix. **Registry access** is a live probe of the CodeArtifact token, not a grep of `~/.npmrc`: an expired token `fail`s (it used to `pass`), an unreachable registry `warn`s (a network fault is not an auth fault). **Public npm not hijacked** fails when `~/.npmrc` carries an unscoped `registry=<codeartifact>` line, which makes CodeArtifact your default registry — one `mesh registry login` fixes both. Exit 0 iff all pass; re-run any time. `--fix` applies developer-scope fixes (registry token, skills sync); operator actions stay remediations — and `--profile <p>` is the SSO profile `--fix` logs into CodeArtifact with, echoed back in the `fix:` command each check prints so the advertised command is the one that runs. | `app-tenant`: `--tenant <name>`, `--context <ctx>` (default `local`), `--hub-url <url>`, `--fix`, `--profile <sso>`, `--json` |
100
101
  | `mesh skills` | `sync` | Agent-skill distribution (D1/D2): installs the base building-with-Mesh skills into the repo's `.claude/skills/mesh-*/` (managed-marker files) and wires TanStack-Intent discovery for the pattern skills shipping inside `@mesh-tech/*` packages (`.intent/hooks/` gate + `.claude/settings.json` SessionStart hook + AGENTS.md fence — the PR #2356 mechanism, vendored). Idempotent; runs automatically after `mesh create-app`. | `sync`: `--check` (CI/doctor: exit 1 when missing/stale), `--root <path>` |
101
102
  | `mesh docs` | `build`, `portal`, `cli-reference` | `build` builds/validates an **app's** OpenAPI specs from `docs/docs.config.json` (file copy or SymXchange generation). `start`/`stop`/`list` are the simple front door: `start` serves the docs on loopback — DETACHED in a tmux session named `mesh-docs` by default (prints the bare URL once live; `stop` kills the session; `--foreground` or any non-TTY runs in the foreground) — serving the working tree in a mesh-platform checkout, or the published `@mesh-tech/docs` artifact fetched from the role-gated CodeArtifact registry anywhere else (docs version == the @mesh-tech/* baseline it describes; `-v` pins, default latest; cached under `~/.cache/mesh/docs/`). `list` shows the published docs versions. `portal` assembles the **Mesh developer portal** (docs.meshtech.io) from every `docs.json`-opted-in doc root in the repo — a directory publishes its markdown iff it holds a `docs.json`; route/title/order/nav derive from the tree and each file, so adding a doc is adding one file — then hands the assembled tree to Zudoku (`apps/docs/`): default runs `zudoku build`, `--serve` runs `zudoku dev`, `--assemble-only`/`-o` stop after assembly. Links between published files are rewritten to routes; links to unpublished repo files become blob links. Reserved directory names (`plans/`, `designs/`, `incidents/`, … the frozen list in `src/docs/schema.ts`) are excluded at any depth. `cli-reference` regenerates `docs/portal/generated/cli-reference.md` from THIS command tree, so it can't document a flag the binary lacks. `portal --check` is the CI gate (`pnpm check:docs-portal`): docs.json schema validation, reserved-segment fail-close, broken links, and CLI-reference staleness; `--diff-base <ref>` prints the publish-set diff for PR job summaries. Hidden commands and `--version` are excluded from the reference. | `build`: `-c/--config <path>` (default `docs/docs.config.json`); `portal`: `-o/--out <dir>`, `--assemble-only`, `--serve`, `-p/--port <n>` (default `3000`), `--check`, `--print-manifest`, `--diff-base <ref>`, `--manifest-out <path>`; `cli-reference`: `-o/--out <path>`, `--check`; `start`: `-v/--version <v>` (default: latest), `-p/--port <n>` (default `4400`; `0` is foreground-only), `--dev` (foreground HMR), `--foreground`; `stop`: no flags; `list`: no flags |
@@ -163,6 +164,7 @@ land in `apps/<name>/`:
163
164
  mesh create-app --tenant acme --name billing --primitives service,database,temporal
164
165
  cd apps/billing && pnpm install
165
166
  mesh skills sync # picks up the platform skills now that deps are installed
167
+ mesh app check apps/billing # the Mesh app contract — create-app already ran it; re-run before every PR
166
168
  mesh stack init # personal dev-{github-user} stack (deploy:false)
167
169
  mesh deploy up --yes # pulumi up via mesh:deployerRole
168
170
  mesh dev # tunnels + secrets + tmux (needs VPN for VPC access)
@@ -48,6 +48,11 @@ services:
48
48
  # zitadel service — Zitadel routes by Host header, so the issuer host
49
49
  # must be `localhost` everywhere, exactly like the hosted public URL.
50
50
  ZITADEL_ISSUER: http://localhost:8080
51
+ # The Hub's ADMIN plane. Without this the Hub can verify a token but cannot
52
+ # write to Zitadel, so creating a user or minting an API key silently has
53
+ # nowhere to go — the console offers no affordance and nothing reaches the
54
+ # IdP. `mesh start` seeds the machine key this points at (seed-zitadel).
55
+ ZITADEL_OPSHUB_SECRET_NAME: mesh/local/dev/zitadel/ops-hub
51
56
  SPICEDB_ENDPOINT: spicedb:50051
52
57
  SPICEDB_HTTP_ENDPOINT: http://spicedb:8443
53
58
  SPICEDB_HTTP_SCHEME: http
@@ -197,6 +197,27 @@ services:
197
197
  # Zitadel Identity Server — v4 to match the cloud (approved tenant-auth
198
198
  # pattern spec item 7: v4's no-role-claims machine tokens make version
199
199
  # parity matter for auth testing).
200
+ # Local mailbox. Zitadel sends real mail for user activation and password
201
+ # resets, and without somewhere to send it those flows cannot be exercised at
202
+ # all locally — the Hub's "resend invitation" and "send password reset email"
203
+ # actions return 200 and the mail goes nowhere. Mailpit accepts everything on
204
+ # SMTP :1025 and shows it at :8025; nothing leaves the machine.
205
+ mailpit:
206
+ image: axllent/mailpit:v1.21
207
+ ports:
208
+ - '127.0.0.1:1025:1025' # SMTP, for Zitadel
209
+ - '127.0.0.1:8025:8025' # web UI, for a human
210
+ environment:
211
+ MP_SMTP_AUTH_ACCEPT_ANY: 'true'
212
+ MP_SMTP_AUTH_ALLOW_INSECURE: 'true'
213
+ healthcheck:
214
+ test: ['CMD', '/mailpit', 'readyz']
215
+ interval: 5s
216
+ timeout: 3s
217
+ retries: 20
218
+ networks:
219
+ - mesh_network
220
+
200
221
  zitadel:
201
222
  image: ghcr.io/zitadel/zitadel:v4.15.3
202
223
  depends_on:
@@ -204,6 +225,8 @@ services:
204
225
  condition: 'service_healthy'
205
226
  zitadel-machinekey-init:
206
227
  condition: 'service_completed_successfully'
228
+ mailpit:
229
+ condition: 'service_healthy'
207
230
  ports:
208
231
  - '127.0.0.1:8080:8080'
209
232
  environment:
@@ -248,6 +271,18 @@ services:
248
271
  ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_NAME: Local Seeder
249
272
  ZITADEL_FIRSTINSTANCE_ORG_MACHINE_PAT_EXPIRATIONDATE: '2099-01-01T00:00:00Z'
250
273
  ZITADEL_FIRSTINSTANCE_PATPATH: /machinekey/pat.txt
274
+ # SMTP for the default instance, pointed at the local mailbox above.
275
+ # DEFAULTINSTANCE settings apply at FIRST INIT only, same as the
276
+ # FIRSTINSTANCE block — a pre-existing zitadel volume keeps whatever it
277
+ # was initialised with, so `mesh start` also reconciles this over the
278
+ # admin API on every run (see seed-zitadel.ts). The env is here so a
279
+ # fresh `mesh start` has working mail before the seeder even runs.
280
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_SMTP_HOST: 'mailpit:1025'
281
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_SMTP_USER: ''
282
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_SMTP_PASSWORD: ''
283
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_TLS: false
284
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_FROM: 'no-reply@local.mesh'
285
+ ZITADEL_DEFAULTINSTANCE_SMTPCONFIGURATION_FROMNAME: 'Mesh (local)'
251
286
  command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled --init-projections=true'
252
287
  volumes:
253
288
  - zitadel_machinekey:/machinekey
@@ -14,3 +14,9 @@
14
14
  provider when @mesh-tech/authz ships it.
15
15
  - Pattern skills for authn/authz ship inside those packages (TanStack
16
16
  Intent discovers them after `pnpm install`).
17
+ - The app meets the Mesh app contract (`@mesh-tech/app-kit#apps` →
18
+ `references/app-contract.md`): access is surfaced through the Hub by the
19
+ `SpiceDBSchema` + `AppAuthzPointer` wiring in `index.ts`, and every service
20
+ logs through `@mesh-tech/logger`. `mesh app check` verifies it — run it
21
+ before opening a PR; never add a users table, an email allowlist, or a
22
+ manual Zitadel step instead.
@@ -47,21 +47,24 @@ is per-subject, in SpiceDB, exactly like the deployed platform.
47
47
 
48
48
  ## Deploy to a tenant environment
49
49
 
50
- The deployed Service runs behind the platform's oauth2-proxy sidecar
51
- (`auth: { provider: "mesh", … }` in `index.ts`), which needs its own OIDC
52
- client in the platform Zitadel:
53
-
54
50
  ```bash
55
51
  mesh login {{tenant}}.dev
56
- pulumi config set {{name}}:authClientId <clientId>
57
- pulumi config set --secret {{name}}:authClientSecret <clientSecret>
58
52
  mesh deploy up --yes
59
53
  ```
60
54
 
55
+ `index.ts` owns the whole access surface, so there is nothing to create by
56
+ hand: `ZitadelAppIdentity` makes the app's Zitadel project + roles,
57
+ `SpiceDBSchema` compiles `api/src/schema.ts` into the app's own SpiceDB and
58
+ publishes the ops-hub metadata, and `AppAuthzPointer` tells the Hub where to
59
+ look. People, roles, API keys and sign-in activity are then administered from
60
+ the Hub's **App → Access** tab — never by a runbook step. The contract behind
61
+ that: `@mesh-tech/app-kit#apps` → `references/app-contract.md`; `mesh app
62
+ check` verifies it.
63
+
61
64
  ## Layout
62
65
 
63
- - `index.ts` — Pulumi program (`Service` with platform auth + `/health` open)
66
+ - `index.ts` — Pulumi program: Zitadel identity SpiceDB + schema → `Service` → `AppAuthzPointer`
64
67
  - `api/src/index.ts` — Hono app: authn middleware + authz `require()`
65
68
  - `api/src/schema.ts` — the authorization schema (single source of truth)
66
69
  - `api/src/spicedb-http-provider.ts` — starter `AuthzProvider` (HTTP API)
67
- - `api/src/seed-authz.ts` — local schema write + grant
70
+ - `api/scripts/seed-authz.ts` — local schema write + grant
@@ -8,11 +8,12 @@
8
8
  "start": "node dist/index.js",
9
9
  "build": "esm-bundle src/index.ts --outfile dist/index.js",
10
10
  "check-types": "tsc --noEmit",
11
- "seed:authz": "tsx src/seed-authz.ts"
11
+ "seed:authz": "tsx scripts/seed-authz.ts"
12
12
  },
13
13
  "dependencies": {
14
14
  "@mesh-tech/authn": "latest",
15
15
  "@mesh-tech/authz": "latest",
16
+ "@mesh-tech/logger": "latest",
16
17
  "@opentelemetry/auto-instrumentations-node": "^0.78.0",
17
18
  "@mesh-tech/sinks": "latest",
18
19
  "hono": "^4.0.0",
@@ -8,11 +8,11 @@
8
8
  */
9
9
 
10
10
  import { compileSpiceDBSchema } from "@mesh-tech/authz/compilers";
11
- import { schema } from "./schema.js";
12
- import { spiceDbHttpProvider } from "./spicedb-http-provider.js";
11
+ import { schema } from "../src/schema.js";
12
+ import { spiceDbHttpProvider } from "../src/spicedb-http-provider.js";
13
13
 
14
14
  const ENDPOINT = process.env.SPICEDB_HTTP_ENDPOINT ?? "http://localhost:8443";
15
- const KEY = process.env.SPICEDB_PRESHARED_KEY ?? "local-dev-key";
15
+ const KEY = process.env.SPICEDB_TOKEN ?? process.env.SPICEDB_PRESHARED_KEY ?? "local-dev-key";
16
16
 
17
17
  // The Zitadel subject (`sub` claim) of the user to grant. Find it after
18
18
  // `mesh login local`: the CLI caches it in ~/.config/mesh/credentials.json,