@mesh-tech/mesh-cli 0.12.6 → 0.13.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.
@@ -1,27 +1,40 @@
1
1
  /**
2
2
  * mesh skills sync — agent-skill distribution (design §7.2, AC D1/D2).
3
3
  *
4
- * Two layers, one command:
4
+ * Three layers, one command:
5
5
  *
6
- * 1. BASE skills (how to build with Mesh — the CLI's own skills/) are
6
+ * 1. BASE skills (how to drive the CLI — the CLI's own skills/) are
7
7
  * installed into the repo's `.claude/skills/mesh-<name>/SKILL.md`.
8
8
  * CLI-managed: files carry a managed marker and are only overwritten
9
9
  * when they carry it (hand-edited copies are left alone with a warning).
10
10
  *
11
- * 2. PACKAGE skills (patterns shipping inside @mesh-tech/* dependencies,
12
- * TanStack-Intent-discoverable) surface via the Intent gate: the exact
13
- * hook mechanism mesh-platform committed in PR #2356, vendored into the
14
- * CLI (deterministic, offline no interactive installer):
11
+ * 2. PLATFORM skills the build-an-app recipes that ship inside the
12
+ * `@mesh-tech/*` packages the repo already depends on
13
+ * (`node_modules/@mesh-tech/<pkg>/skills/<domain>/`). These are FETCHED
14
+ * from the installed package rather than vendored into the CLI, so the
15
+ * recipe stays owned by the platform package it documents and moves with
16
+ * it. `@mesh-tech/app-kit#apps` — the scaffold → wire → run → debug
17
+ * recipe — is the one every app repo needs.
18
+ * Requires `pnpm install` to have run; before that the layer is a no-op
19
+ * with a note.
20
+ *
21
+ * 3. INTENT discovery for those same package skills, for agents that read
22
+ * the catalog rather than `.claude/skills/`: the hook mechanism
23
+ * vendored into the CLI (deterministic, offline — no interactive
24
+ * installer):
15
25
  * - .intent/hooks/intent-claude-gate.mjs (SessionStart catalog +
16
26
  * edit gate; invokes the REPO-PINNED `pnpm exec intent`)
27
+ * - `@tanstack/intent` in the repo's devDependencies — the fence tells
28
+ * agents to run `pnpm exec intent list`, so the binary has to be
29
+ * pinned in the repo it runs in, tenant app repos included
17
30
  * - .claude/settings.json SessionStart hook (JSON-merged, idempotent)
18
31
  * - AGENTS.md fence (<!-- intent-skills:start/end -->) for
19
32
  * non-Claude agents
20
33
  *
21
34
  * `mesh skills sync --check` is the CI/doctor form: exits 1 listing what is
22
35
  * missing or stale, changes nothing. `mesh create-app` runs a best-effort
23
- * sync after scaffolding so a fresh Claude session in a fresh repo sees both
24
- * skill layers with zero manual setup (D1).
36
+ * sync after scaffolding so a fresh Claude session in a fresh repo sees every
37
+ * skill layer with zero manual setup (D1).
25
38
  */
26
39
  import * as fs from "fs";
27
40
  import * as path from "path";
@@ -32,6 +45,14 @@ import { findPackageRoot } from "./local/stack.js";
32
45
  const MANAGED_MARKER = "<!-- managed-by: mesh skills sync — edits are overwritten; copy content elsewhere to customize -->";
33
46
  const FENCE_START = "<!-- intent-skills:start -->";
34
47
  const HOOK_RELATIVE = path.join(".intent", "hooks", "intent-claude-gate.mjs");
48
+ /**
49
+ * The `@tanstack/intent` range pinned into a target repo, and the single
50
+ * source for every place that range appears: the standalone apps-repo
51
+ * template renders from it, and `test/skills-sync.test.ts` holds it equal to
52
+ * the CLI's own devDependency, so the binary agents invoke matches the
53
+ * catalog format the vendored gate hook expects.
54
+ */
55
+ export const INTENT_RANGE = "^0.3.6";
35
56
  /** The repo root skills sync targets: the enclosing git root, else cwd. */
36
57
  export function resolveTargetRoot(startDir = process.cwd()) {
37
58
  try {
@@ -66,6 +87,99 @@ function renderManagedSkill(source) {
66
87
  return `${MANAGED_MARKER}\n\n${raw}`;
67
88
  return `${frontmatter}\n${MANAGED_MARKER}\n${raw.slice(frontmatter.length)}`;
68
89
  }
90
+ /** The CLI's own skills are layer 1; fetching them again as a package skill would double-install them. */
91
+ const BASE_SKILL_PACKAGE = "mesh-cli";
92
+ /**
93
+ * Every `node_modules/@mesh-tech` directory in the repo. In a pnpm workspace a
94
+ * dependency is linked into the node_modules of the package that DECLARES it,
95
+ * so `@mesh-tech/app-kit` — declared by `apps/<name>/` — is not under the repo
96
+ * root's node_modules at all.
97
+ */
98
+ function meshTechScopeDirs(root, maxDepth = 6) {
99
+ const scopes = [];
100
+ const walk = (dir, depth) => {
101
+ if (depth > maxDepth)
102
+ return;
103
+ let entries;
104
+ try {
105
+ entries = fs.readdirSync(dir, { withFileTypes: true });
106
+ }
107
+ catch {
108
+ return;
109
+ }
110
+ for (const entry of entries) {
111
+ if (!entry.isDirectory())
112
+ continue;
113
+ if (entry.name === "node_modules") {
114
+ // Don't descend: the scope dir here already links everything this level
115
+ // can see, and `.pnpm/` would yield the same content many times over.
116
+ const scope = path.join(dir, entry.name, "@mesh-tech");
117
+ if (fs.existsSync(scope))
118
+ scopes.push(scope);
119
+ continue;
120
+ }
121
+ if (entry.name.startsWith("."))
122
+ continue;
123
+ walk(path.join(dir, entry.name), depth + 1);
124
+ }
125
+ };
126
+ walk(root, 0);
127
+ return scopes;
128
+ }
129
+ /**
130
+ * Platform skills reachable from the target repo: every
131
+ * `node_modules/@mesh-tech/<pkg>/skills/<domain>/SKILL.md`. Installed under
132
+ * `mesh-<pkg>-<domain>` so a package's `core` skill can never collide with the
133
+ * CLI's own `mesh-core`. One entry per `<pkg>/<domain>` — the same package
134
+ * linked from several workspace packages is still one skill.
135
+ */
136
+ export function listPackageSkills(root) {
137
+ const byName = new Map();
138
+ for (const scopeDir of meshTechScopeDirs(root)) {
139
+ for (const pkg of fs.readdirSync(scopeDir, { withFileTypes: true })) {
140
+ if (!pkg.isDirectory() && !pkg.isSymbolicLink())
141
+ continue;
142
+ if (pkg.name === BASE_SKILL_PACKAGE)
143
+ continue;
144
+ const skillsDir = path.join(scopeDir, pkg.name, "skills");
145
+ if (!fs.existsSync(skillsDir))
146
+ continue;
147
+ for (const domain of fs.readdirSync(skillsDir, { withFileTypes: true })) {
148
+ const source = path.join(skillsDir, domain.name, "SKILL.md");
149
+ if (!fs.existsSync(source))
150
+ continue;
151
+ const name = `mesh-${pkg.name}-${domain.name}`;
152
+ if (!byName.has(name))
153
+ byName.set(name, { name, dir: path.join(skillsDir, domain.name), source });
154
+ }
155
+ }
156
+ }
157
+ return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
158
+ }
159
+ /** Copy a skill's supporting files (references/, examples/, …) alongside SKILL.md. */
160
+ function copySkillExtras(sourceDir, targetDir) {
161
+ for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
162
+ if (entry.name === "SKILL.md")
163
+ continue;
164
+ fs.cpSync(path.join(sourceDir, entry.name), path.join(targetDir, entry.name), { recursive: true });
165
+ }
166
+ }
167
+ /**
168
+ * Seed the app's OWN skill — the stub a developer grows into the guidance only
169
+ * their app can carry. Written once and never touched again: it carries no
170
+ * managed marker, so `sync` leaves it alone forever.
171
+ * Returns the repo-relative path when it wrote one, else null.
172
+ */
173
+ export function seedAppSkill(root, appName, appRelPath) {
174
+ const target = path.join(root, ".claude", "skills", appName, "SKILL.md");
175
+ if (fs.existsSync(target))
176
+ return null;
177
+ const template = fs.readFileSync(cliAsset("assets", "app-skill", "SKILL.md"), "utf-8");
178
+ const body = template.replaceAll("__APP_NAME__", appName).replaceAll("__APP_PATH__", appRelPath || ".");
179
+ fs.mkdirSync(path.dirname(target), { recursive: true });
180
+ fs.writeFileSync(target, body);
181
+ return path.relative(root, target);
182
+ }
69
183
  function planSync(root) {
70
184
  const items = [];
71
185
  // 1. Base skills → .claude/skills/mesh-<name>/SKILL.md
@@ -96,7 +210,48 @@ function planSync(root) {
96
210
  }
97
211
  }
98
212
  }
99
- // 2. Intent gate hook (CLI-managed generated file — kept current)
213
+ // 2. Platform skills fetched from installed @mesh-tech/* packages
214
+ const packageSkills = listPackageSkills(root);
215
+ for (const skill of packageSkills) {
216
+ const targetDir = path.join(root, ".claude", "skills", skill.name);
217
+ const target = path.join(targetDir, "SKILL.md");
218
+ const desired = renderManagedSkill(skill.source);
219
+ const label = `.claude/skills/${skill.name}/SKILL.md (platform skill)`;
220
+ if (!fs.existsSync(target)) {
221
+ items.push({
222
+ label,
223
+ state: "write",
224
+ apply: () => {
225
+ fs.mkdirSync(targetDir, { recursive: true });
226
+ fs.writeFileSync(target, desired);
227
+ copySkillExtras(skill.dir, targetDir);
228
+ },
229
+ });
230
+ }
231
+ else {
232
+ const current = fs.readFileSync(target, "utf-8");
233
+ if (current === desired) {
234
+ items.push({ label, state: "ok" });
235
+ }
236
+ else if (current.includes(MANAGED_MARKER)) {
237
+ items.push({
238
+ label,
239
+ state: "write",
240
+ apply: () => {
241
+ fs.writeFileSync(target, desired);
242
+ copySkillExtras(skill.dir, targetDir);
243
+ },
244
+ });
245
+ }
246
+ else {
247
+ items.push({ label: `${label} — exists without the managed marker, leaving as-is`, state: "skip" });
248
+ }
249
+ }
250
+ }
251
+ if (packageSkills.length === 0 && meshTechScopeDirs(root).length === 0) {
252
+ logInfo("No @mesh-tech packages installed yet — run `pnpm install`, then `mesh skills sync` again for the platform skills.");
253
+ }
254
+ // 3. Intent gate hook (CLI-managed generated file — kept current)
100
255
  const hookSource = cliAsset("assets", "intent", "intent-claude-gate.mjs");
101
256
  const hookTarget = path.join(root, HOOK_RELATIVE);
102
257
  const hookDesired = fs.readFileSync(hookSource, "utf-8");
@@ -111,7 +266,42 @@ function planSync(root) {
111
266
  fs.writeFileSync(hookTarget, hookDesired, { mode: 0o755 });
112
267
  },
113
268
  });
114
- // 3. .claude/settings.json SessionStart hook (JSON merge, idempotent)
269
+ // 4. `@tanstack/intent` devDependency the fence tells agents to run
270
+ // `pnpm exec intent`, which only resolves when the repo pins it.
271
+ const rootPkgPath = path.join(root, "package.json");
272
+ if (fs.existsSync(rootPkgPath)) {
273
+ let rootPkg = null;
274
+ try {
275
+ rootPkg = JSON.parse(fs.readFileSync(rootPkgPath, "utf-8"));
276
+ }
277
+ catch {
278
+ rootPkg = null;
279
+ }
280
+ const label = "package.json (@tanstack/intent devDependency)";
281
+ if (!rootPkg) {
282
+ items.push({ label: `${label} — package.json is unparseable, leaving as-is`, state: "skip" });
283
+ }
284
+ else if (rootPkg.devDependencies?.["@tanstack/intent"] || rootPkg.dependencies?.["@tanstack/intent"]) {
285
+ items.push({ label, state: "ok" });
286
+ }
287
+ else {
288
+ items.push({
289
+ label,
290
+ // Writing the dependency does not install it. Bare `mesh skills sync`
291
+ // in an already-installed repo leaves `pnpm exec intent` unresolvable
292
+ // until the next install, so say so rather than reporting success.
293
+ remediation: "Added @tanstack/intent — run `pnpm install` so `pnpm exec intent` resolves.",
294
+ state: "write",
295
+ apply: () => {
296
+ rootPkg.devDependencies = rootPkg.devDependencies ?? {};
297
+ rootPkg.devDependencies["@tanstack/intent"] = INTENT_RANGE;
298
+ rootPkg.devDependencies = Object.fromEntries(Object.entries(rootPkg.devDependencies).sort(([a], [b]) => a.localeCompare(b)));
299
+ fs.writeFileSync(rootPkgPath, JSON.stringify(rootPkg, null, 2) + "\n");
300
+ },
301
+ });
302
+ }
303
+ }
304
+ // 5. .claude/settings.json SessionStart hook (JSON merge, idempotent)
115
305
  const settingsPath = path.join(root, ".claude", "settings.json");
116
306
  let settings = {};
117
307
  try {
@@ -146,7 +336,7 @@ function planSync(root) {
146
336
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 1) + "\n");
147
337
  },
148
338
  });
149
- // 4. AGENTS.md fence (non-Claude agents discover Intent skills too)
339
+ // 6. AGENTS.md fence (non-Claude agents discover Intent skills too)
150
340
  const agentsPath = path.join(root, "AGENTS.md");
151
341
  const fence = fs.readFileSync(cliAsset("assets", "intent", "agents-fence.md"), "utf-8");
152
342
  const agentsCurrent = fs.existsSync(agentsPath) ? fs.readFileSync(agentsPath, "utf-8") : null;
@@ -180,6 +370,8 @@ export function syncSkills(root, opts = {}) {
180
370
  else {
181
371
  item.apply?.();
182
372
  logSuccess(`synced: ${item.label}`);
373
+ if (item.remediation)
374
+ logInfo(item.remediation);
183
375
  }
184
376
  }
185
377
  if (!dirty) {
@@ -191,7 +383,7 @@ export function registerSkillsCommands(program) {
191
383
  const skills = program.command("skills").description("Agent-skill distribution (base skills + Intent discovery)");
192
384
  skills
193
385
  .command("sync")
194
- .description("Install the base building-with-Mesh skills into .claude/skills/ and wire TanStack-Intent discovery (hook + settings + AGENTS.md fence) for package skills")
386
+ .description("Install the base building-with-Mesh skills into .claude/skills/, fetch the platform skills shipped by the repo's installed @mesh-tech/* packages, and wire TanStack-Intent discovery (intent devDependency + hook + settings + AGENTS.md fence)")
195
387
  .option("--check", "verify only (CI/doctor): exit 1 when anything is missing or stale", false)
196
388
  .option("--root <path>", "target repo root (default: enclosing git root)")
197
389
  .action((opts) => {
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,cAAc,GAAG,oGAAoG,CAAC;AAC5H,MAAM,WAAW,GAAG,8BAA8B,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAE9E,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;IACxD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE;YAC3D,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,QAAkB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,uEAAuE;AACvE,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE;SACN,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;SAC/F,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,+EAA+E;AAC/E,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,WAAW;QAAE,OAAO,GAAG,cAAc,OAAO,GAAG,EAAE,CAAC;IACvD,OAAO,GAAG,WAAW,KAAK,cAAc,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/E,CAAC;AASD,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,uDAAuD;IACvD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,uBAAuB,KAAK,CAAC,IAAI,wBAAwB,CAAC;QACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,GAAG,EAAE;oBACV,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACxD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACpC,CAAC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,qDAAqD,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,KAAK,CAAC,IAAI,CACR,WAAW,KAAK,WAAW;QACzB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,aAAa,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE;QAC1D,CAAC,CAAC;YACE,KAAK,EAAE,GAAG,aAAa,gBAAgB;YACvC,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,GAAG,EAAE;gBACV,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;SACF,CACN,CAAC;IAEF,sEAAsE;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACjE,IAAI,QAAQ,GAAQ,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,MAAM,YAAY,GAAU,QAAQ,EAAE,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAC/C,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CACtH,CAAC;IACF,KAAK,CAAC,IAAI,CACR,OAAO;QACL,CAAC,CAAC,EAAE,KAAK,EAAE,kDAAkD,EAAE,KAAK,EAAE,IAAI,EAAE;QAC5E,CAAC,CAAC;YACE,KAAK,EAAE,kDAAkD;YACzD,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,GAAG,EAAE;gBACV,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;gBAChE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;oBAC/B,OAAO,EAAE,8BAA8B;oBACvC,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,CAAC,4DAA4D,CAAC;4BACpE,OAAO,EAAE,EAAE;4BACX,aAAa,EAAE,8BAA8B;yBAC9C;qBACF;iBACF,CAAC,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3E,CAAC;SACF,CACN,CAAC;IAEF,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,KAAK,CAAC,IAAI,CACR,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC;QAClC,CAAC,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3D,CAAC,CAAC;YACE,KAAK,EAAE,iCAAiC;YACxC,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,0BAA0B,CAAC;gBAC/F,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;SACF,CACN,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAA4B,EAAE;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,SAAS;QAClC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,GAAG,IAAI,CAAC;QACb,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACf,UAAU,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,KAAK,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAAC;IAElH,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,2JAA2J,CAC5J;SACA,MAAM,CAAC,SAAS,EAAE,mEAAmE,EAAE,KAAK,CAAC;SAC7F,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,CAAC,IAAuC,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC,oCAAoC,EAAE;gBAC3D,WAAW,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Dependency versions written into a scaffolded app.
3
+ *
4
+ * Why this exists
5
+ * ───────────────
6
+ * `mesh create-app --primitives` renders the fragment templates, and those
7
+ * package.json files have to install in TWO very different places:
8
+ *
9
+ * - inside this monorepo → `workspace:*` + `catalog:` (link local source)
10
+ * - inside a standalone tenant-apps repo → concrete, published ranges
11
+ *
12
+ * The standalone branch takes a caret range on the CURRENT published line,
13
+ * resolved from the registry at scaffold time. The baked value below is a
14
+ * floor, used only when that lookup can't run (offline, no registry auth
15
+ * yet, CI) — not the answer.
16
+ */
17
+ /**
18
+ * The `@mesh-tech/*` package whose published version defines the lockstep
19
+ * group's current line. The publishable packages move together, so one lookup
20
+ * answers for all of them. `@mesh-tech/esm-bundle` versions independently, so
21
+ * it gets its own entry.
22
+ */
23
+ export declare const SCAFFOLD_PACKAGE_LINES: {
24
+ readonly "@mesh-tech/app-kit": "^1.45.0";
25
+ readonly "@mesh-tech/esm-bundle": "^0.1.1";
26
+ };
27
+ export type ScaffoldPackage = keyof typeof SCAFFOLD_PACKAGE_LINES;
28
+ /**
29
+ * Toolchain devDependencies for the standalone branch. These mirror the
30
+ * workspace catalog in `pnpm-workspace.yaml` (which the published CLI cannot
31
+ * read); `test/scaffold-versions.test.ts` fails if the two drift apart.
32
+ */
33
+ export declare const SCAFFOLD_TOOLCHAIN: {
34
+ readonly "@types/node": "^24.2.1";
35
+ readonly tsx: "^4.20.4";
36
+ readonly typescript: "^5.9.2";
37
+ };
38
+ /** True for a caret range on a prerelease/build-metadata version (`^0.0.0-dev.1`). */
39
+ export declare function isPrerelease(range: string): boolean;
40
+ /** Pure: `1.45.1` → `^1.45.1`. Returns null for anything that isn't x.y.z. */
41
+ export declare function toCaretRange(version: string): string | null;
42
+ /**
43
+ * Ask the registry for a package's current published line, as a caret range.
44
+ * `cwd` matters: the target repo's `.npmrc` is what maps `@mesh-tech` to
45
+ * CodeArtifact. Any failure (offline, 401, npm missing) falls back silently —
46
+ * a scaffold must never hard-fail on a version lookup.
47
+ *
48
+ * A prerelease answer is refused here rather than in `toCaretRange`, which
49
+ * stays a pure format check. Most published `@mesh-tech/*` versions are
50
+ * `0.0.0-dev.<timestamp>.<sha>` snapshots; a `latest` that ever lands on one
51
+ * would otherwise pin every future scaffold to a single dev build.
52
+ */
53
+ export declare function resolvePublishedRange(pkg: ScaffoldPackage, cwd: string): {
54
+ range: string;
55
+ resolved: boolean;
56
+ };
57
+ //# sourceMappingURL=scaffold-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-versions.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CActC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Dependency versions written into a scaffolded app.
3
+ *
4
+ * Why this exists
5
+ * ───────────────
6
+ * `mesh create-app --primitives` renders the fragment templates, and those
7
+ * package.json files have to install in TWO very different places:
8
+ *
9
+ * - inside this monorepo → `workspace:*` + `catalog:` (link local source)
10
+ * - inside a standalone tenant-apps repo → concrete, published ranges
11
+ *
12
+ * The standalone branch takes a caret range on the CURRENT published line,
13
+ * resolved from the registry at scaffold time. The baked value below is a
14
+ * floor, used only when that lookup can't run (offline, no registry auth
15
+ * yet, CI) — not the answer.
16
+ */
17
+ import { execFileSync } from "child_process";
18
+ /**
19
+ * The `@mesh-tech/*` package whose published version defines the lockstep
20
+ * group's current line. The publishable packages move together, so one lookup
21
+ * answers for all of them. `@mesh-tech/esm-bundle` versions independently, so
22
+ * it gets its own entry.
23
+ */
24
+ export const SCAFFOLD_PACKAGE_LINES = {
25
+ "@mesh-tech/app-kit": "^1.45.0",
26
+ "@mesh-tech/esm-bundle": "^0.1.1",
27
+ };
28
+ /**
29
+ * Toolchain devDependencies for the standalone branch. These mirror the
30
+ * workspace catalog in `pnpm-workspace.yaml` (which the published CLI cannot
31
+ * read); `test/scaffold-versions.test.ts` fails if the two drift apart.
32
+ */
33
+ export const SCAFFOLD_TOOLCHAIN = {
34
+ "@types/node": "^24.2.1",
35
+ tsx: "^4.20.4",
36
+ typescript: "^5.9.2",
37
+ };
38
+ /** True for a caret range on a prerelease/build-metadata version (`^0.0.0-dev.1`). */
39
+ export function isPrerelease(range) {
40
+ return /[-+]/.test(range.replace(/^\^/, ""));
41
+ }
42
+ /** Pure: `1.45.1` → `^1.45.1`. Returns null for anything that isn't x.y.z. */
43
+ export function toCaretRange(version) {
44
+ const trimmed = version.trim();
45
+ return /^\d+\.\d+\.\d+(?:[-+].*)?$/.test(trimmed) ? `^${trimmed}` : null;
46
+ }
47
+ /**
48
+ * Ask the registry for a package's current published line, as a caret range.
49
+ * `cwd` matters: the target repo's `.npmrc` is what maps `@mesh-tech` to
50
+ * CodeArtifact. Any failure (offline, 401, npm missing) falls back silently —
51
+ * a scaffold must never hard-fail on a version lookup.
52
+ *
53
+ * A prerelease answer is refused here rather than in `toCaretRange`, which
54
+ * stays a pure format check. Most published `@mesh-tech/*` versions are
55
+ * `0.0.0-dev.<timestamp>.<sha>` snapshots; a `latest` that ever lands on one
56
+ * would otherwise pin every future scaffold to a single dev build.
57
+ */
58
+ export function resolvePublishedRange(pkg, cwd) {
59
+ try {
60
+ const out = execFileSync("npm", ["view", pkg, "version"], {
61
+ cwd,
62
+ encoding: "utf-8",
63
+ timeout: 15_000,
64
+ stdio: ["ignore", "pipe", "ignore"],
65
+ });
66
+ const range = toCaretRange(out);
67
+ if (range && !isPrerelease(range))
68
+ return { range, resolved: true };
69
+ }
70
+ catch {
71
+ // fall through to the baked floor
72
+ }
73
+ return { range: SCAFFOLD_PACKAGE_LINES[pkg], resolved: false };
74
+ }
75
+ //# sourceMappingURL=scaffold-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-versions.js","sourceRoot":"","sources":["../../../src/utils/scaffold-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,oBAAoB,EAAE,SAAS;IAC/B,uBAAuB,EAAE,QAAQ;CACzB,CAAC;AAIX;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa,EAAE,SAAS;IACxB,GAAG,EAAE,SAAS;IACd,UAAU,EAAE,QAAQ;CACZ,CAAC;AAEX,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAoB,EACpB,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;YACxD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC"}
@@ -75,10 +75,11 @@ for helper functions using the injected `UPLOADS_BUCKET` and `UPLOADS_REGION` en
75
75
 
76
76
  ## Documentation
77
77
 
78
- - `npx intent load @mesh-tech/app-kit#core` — the authoritative app-authoring API
78
+ - `pnpm exec intent load @mesh-tech/app-kit#core` — the authoritative app-authoring API
79
79
  (getConfig → AppEnvironment → primitives → link → register; arg tables + `link()` semantics)
80
- - The **mesh-apps** skill (`.claude/skills/mesh-apps/`) — the scaffold → wire → run → debug recipe
81
- - `libs/infra-components/docs/primitives/`per-component reference (in-repo)
80
+ - The **apps** skill (`.claude/skills/mesh-app-kit-apps/`, or
81
+ `pnpm exec intent load @mesh-tech/app-kit#apps`)the scaffold → wire → run → debug recipe
82
+ - `pnpm exec intent load @mesh-tech/infra-components#core` — per-component reference
82
83
 
83
84
  ## CLI
84
85
 
@@ -8,15 +8,14 @@
8
8
  "typecheck": "tsc --noEmit"
9
9
  },
10
10
  "dependencies": {
11
- "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}^0.1.0{{/if}}",
12
- "@mesh-tech/infra-components": "{{#if workspaceDeps}}workspace:*{{else}}^0.1.0{{/if}}",
11
+ "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
13
12
  "@pulumi/aws": "6.66.2",
14
13
  "@pulumi/kubernetes": "4.24.1",
15
14
  "@pulumi/pulumi": "3.214.1"
16
15
  },
17
16
  "devDependencies": {
18
- "@types/node": "catalog:",
19
- "tsx": "catalog:",
20
- "typescript": "catalog:"
17
+ "@types/node": "{{#if workspaceDeps}}catalog:{{else}}{{typesNodeRange}}{{/if}}",
18
+ "tsx": "{{#if workspaceDeps}}catalog:{{else}}{{tsxRange}}{{/if}}",
19
+ "typescript": "{{#if workspaceDeps}}catalog:{{else}}{{typescriptRange}}{{/if}}"
21
20
  }
22
21
  }
@@ -14,7 +14,7 @@
14
14
  {{/if}}
15
15
  "@hono/node-server": "^1.13.0",
16
16
  {{#if temporal}}
17
- "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}^0.1.0{{/if}}",
17
+ "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
18
18
  {{/if}}
19
19
  {{#if database}}
20
20
  "@prisma/adapter-pg": "^6.0.0",
@@ -28,13 +28,13 @@
28
28
  "pg": "^8.13.0"{{/if}}
29
29
  },
30
30
  "devDependencies": {
31
- "@mesh-tech/esm-bundle": "{{#if workspaceDeps}}workspace:*{{else}}latest{{/if}}",
31
+ "@mesh-tech/esm-bundle": "{{#if workspaceDeps}}workspace:*{{else}}{{esmBundleRange}}{{/if}}",
32
32
  {{#if database}}
33
33
  "@types/pg": "^8.11.0",
34
34
  "prisma": "^6.0.0",
35
35
  {{/if}}
36
- "@types/node": "^22.10.2",
37
- "tsx": "^4.0.0",
38
- "typescript": "^5.0.0"
36
+ "@types/node": "{{#if workspaceDeps}}catalog:{{else}}{{typesNodeRange}}{{/if}}",
37
+ "tsx": "{{#if workspaceDeps}}catalog:{{else}}{{tsxRange}}{{/if}}",
38
+ "typescript": "{{#if workspaceDeps}}catalog:{{else}}{{typescriptRange}}{{/if}}"
39
39
  }
40
40
  }
@@ -9,7 +9,7 @@
9
9
  "build": "esm-bundle src/worker.ts --outfile dist/worker.js --workflows src/workflows.ts --external '@temporalio/*'"
10
10
  },
11
11
  "dependencies": {
12
- "@mesh-tech/app-kit": "0.0.10",
12
+ "@mesh-tech/app-kit": "{{#if workspaceDeps}}workspace:*{{else}}{{meshRange}}{{/if}}",
13
13
  "@temporalio/activity": "^1.11.7",
14
14
  "@temporalio/client": "^1.11.7",
15
15
  "@temporalio/common": "^1.11.7",
@@ -18,9 +18,9 @@
18
18
  "@temporalio/workflow": "^1.11.7"
19
19
  },
20
20
  "devDependencies": {
21
- "@mesh-tech/esm-bundle": "{{#if workspaceDeps}}workspace:*{{else}}latest{{/if}}",
22
- "@types/node": "^20.0.0",
23
- "tsx": "^4.0.0",
24
- "typescript": "^5.0.0"
21
+ "@mesh-tech/esm-bundle": "{{#if workspaceDeps}}workspace:*{{else}}{{esmBundleRange}}{{/if}}",
22
+ "@types/node": "{{#if workspaceDeps}}catalog:{{else}}{{typesNodeRange}}{{/if}}",
23
+ "tsx": "{{#if workspaceDeps}}catalog:{{else}}{{tsxRange}}{{/if}}",
24
+ "typescript": "{{#if workspaceDeps}}catalog:{{else}}{{typescriptRange}}{{/if}}"
25
25
  }
26
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mesh-tech/mesh-cli",
3
- "version": "0.12.6",
3
+ "version": "0.13.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.45.0",
36
+ "@mesh-tech/tsconfig": "1.47.1",
37
37
  "@mesh-tech/workflow-viz": "0.2.1",
38
38
  "@tanstack/intent": "^0.3.6",
39
39
  "@types/node": "^20.0.0",
@@ -156,15 +156,25 @@ self-refreshing credential_process (the deployer role), so no separate `--export
156
156
 
157
157
  ### 2. Scaffold and run an app locally
158
158
 
159
+ Run this from the root of your tenant apps repo (`{tenant}-mesh-apps`) — apps
160
+ land in `apps/<name>/`:
161
+
159
162
  ```bash
160
163
  mesh create-app --tenant acme --name billing --primitives service,database,temporal
161
- cd tenants/acme/apps/billing && pnpm install
164
+ cd apps/billing && pnpm install
165
+ mesh skills sync # picks up the platform skills now that deps are installed
162
166
  mesh stack init # personal dev-{github-user} stack (deploy:false)
163
167
  mesh deploy up --yes # pulumi up via mesh:deployerRole
164
168
  mesh dev # tunnels + secrets + tmux (needs VPN for VPC access)
165
169
  mesh dev logs api # tail one service; mesh dev --kill to stop
166
170
  ```
167
171
 
172
+ > **Where the app lands.** `create-app` writes to the first of `tenants/<tenant>/apps/`,
173
+ > `../<tenant>/apps/`, `apps/` that exists — so a tenant apps repo gets `apps/<name>/`.
174
+ > The `tenants/<tenant>/apps/…` and `tests/tenants/…` paths you see elsewhere in this
175
+ > file are the **mesh-platform monorepo's own** layouts (the second is test-only, from
176
+ > `--test`); no tenant repo has them.
177
+
168
178
  ### 2b. Watch your dev-local stack in the Hub (`mesh hub dev`)
169
179
 
170
180
  ```bash
@@ -198,7 +208,7 @@ block per worktree handed both the same ports.
198
208
 
199
209
  ```bash
200
210
  # worktree A
201
- cd .worktrees/feature-a/tests/tenants/acme/apps/demo-agent
211
+ cd .worktrees/feature-a/tests/tenants/acme/apps/demo-agent # monorepo test tenant
202
212
  mesh dev --dry-run # preview: session name, port block, state/env paths, task queue
203
213
  mesh dev # launch (attaches tmux; --headless to skip)
204
214
 
@@ -10,6 +10,7 @@
10
10
  "typecheck": "pnpm -r typecheck"
11
11
  },
12
12
  "devDependencies": {
13
- "@mesh-tech/mesh-cli": "latest"
13
+ "@mesh-tech/mesh-cli": "latest",
14
+ "@tanstack/intent": "{{intentRange}}"
14
15
  }
15
16
  }
@@ -1,3 +1,11 @@
1
- # Workspace packages — each app is an independent Pulumi project
1
+ # Workspace packages — each app is an independent Pulumi project.
2
+ #
3
+ # `apps/*` alone is not enough: a composed app (`mesh create-app --primitives
4
+ # service,temporal`) puts its runnable packages one level deeper, in
5
+ # `apps/<name>/api/` and `apps/<name>/worker/`. Without the nested globs those
6
+ # package.json files are not workspace members, so `pnpm install` never
7
+ # installs their dependencies and `pnpm dev` dies on `Cannot find package
8
+ # 'hono'` — with the app itself looking installed.
2
9
  packages:
3
10
  - apps/*
11
+ - apps/*/*