@massu/core 1.2.1 → 1.3.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.
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -384,13 +384,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
384
384
  name: parsed.project.name,
385
385
  root: projectRoot
386
386
  },
387
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
388
+ // `framework.python`) survive into the consumer-visible Config. Then override
389
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
390
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
391
+ // top-level passthrough language blocks.
387
392
  framework: {
388
- type: fw.type,
393
+ ...fw,
389
394
  router,
390
395
  orm,
391
- ui,
392
- primary: fw.primary,
393
- languages: fw.languages
396
+ ui
394
397
  },
395
398
  paths: parsed.paths,
396
399
  toolPrefix: parsed.toolPrefix,
@@ -383,13 +383,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
383
383
  name: parsed.project.name,
384
384
  root: projectRoot
385
385
  },
386
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
387
+ // `framework.python`) survive into the consumer-visible Config. Then override
388
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
389
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
390
+ // top-level passthrough language blocks.
386
391
  framework: {
387
- type: fw.type,
392
+ ...fw,
388
393
  router,
389
394
  orm,
390
- ui,
391
- primary: fw.primary,
392
- languages: fw.languages
395
+ ui
393
396
  },
394
397
  paths: parsed.paths,
395
398
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -384,13 +384,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
384
384
  name: parsed.project.name,
385
385
  root: projectRoot
386
386
  },
387
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
388
+ // `framework.python`) survive into the consumer-visible Config. Then override
389
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
390
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
391
+ // top-level passthrough language blocks.
387
392
  framework: {
388
- type: fw.type,
393
+ ...fw,
389
394
  router,
390
395
  orm,
391
- ui,
392
- primary: fw.primary,
393
- languages: fw.languages
396
+ ui
394
397
  },
395
398
  paths: parsed.paths,
396
399
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -383,13 +383,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
383
383
  name: parsed.project.name,
384
384
  root: projectRoot
385
385
  },
386
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
387
+ // `framework.python`) survive into the consumer-visible Config. Then override
388
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
389
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
390
+ // top-level passthrough language blocks.
386
391
  framework: {
387
- type: fw.type,
392
+ ...fw,
388
393
  router,
389
394
  orm,
390
- ui,
391
- primary: fw.primary,
392
- languages: fw.languages
395
+ ui
393
396
  },
394
397
  paths: parsed.paths,
395
398
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
@@ -6161,13 +6161,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
6161
6161
  name: parsed.project.name,
6162
6162
  root: projectRoot
6163
6163
  },
6164
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
6165
+ // `framework.python`) survive into the consumer-visible Config. Then override
6166
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
6167
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
6168
+ // top-level passthrough language blocks.
6164
6169
  framework: {
6165
- type: fw.type,
6170
+ ...fw,
6166
6171
  router,
6167
6172
  orm,
6168
- ui,
6169
- primary: fw.primary,
6170
- languages: fw.languages
6173
+ ui
6171
6174
  },
6172
6175
  paths: parsed.paths,
6173
6176
  toolPrefix: parsed.toolPrefix,
@@ -385,13 +385,16 @@ Hint: run \`massu config refresh\` to regenerate a valid config or fix the liste
385
385
  name: parsed.project.name,
386
386
  root: projectRoot
387
387
  },
388
+ // Spread `fw` first so zod-`.passthrough()` extras (e.g., `framework.swift`,
389
+ // `framework.python`) survive into the consumer-visible Config. Then override
390
+ // the v2-backcompat-mirrored router/orm/ui values. Without the spread, the
391
+ // variant-resolution `pickVariant` (install-commands.ts) cannot see the
392
+ // top-level passthrough language blocks.
388
393
  framework: {
389
- type: fw.type,
394
+ ...fw,
390
395
  router,
391
396
  orm,
392
- ui,
393
- primary: fw.primary,
394
- languages: fw.languages
397
+ ui
395
398
  },
396
399
  paths: parsed.paths,
397
400
  toolPrefix: parsed.toolPrefix,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massu/core",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "description": "AI Engineering Governance MCP Server - Session memory, knowledge system, feature registry, code intelligence, rule enforcement, tiered tooling (12 free / 72 total), 55+ workflow commands, 11 agents, 20+ patterns",
6
6
  "main": "src/server.ts",
package/src/cli.ts CHANGED
@@ -47,6 +47,11 @@ async function main(): Promise<void> {
47
47
  await runInstallCommands();
48
48
  break;
49
49
  }
50
+ case 'show-template': {
51
+ const { runShowTemplate } = await import('./commands/show-template.ts');
52
+ await runShowTemplate(args.slice(1));
53
+ break;
54
+ }
50
55
  case 'validate-config': {
51
56
  const { runValidateConfig } = await import('./commands/doctor.ts');
52
57
  await runValidateConfig();
@@ -136,6 +141,7 @@ Commands:
136
141
  doctor Check installation health
137
142
  install-hooks Install/update Claude Code hooks
138
143
  install-commands Install/update slash commands
144
+ show-template Print the resolved variant of a bundled template (e.g. for diffs)
139
145
  validate-config Validate massu.config.yaml (alias: config validate)
140
146
  config <sub> Config lifecycle: refresh | validate | upgrade | doctor | check-drift
141
147