@mozole/cli 1.4.1 → 1.4.3

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 (82) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +27 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +49 -22
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/adopt.d.ts +2 -0
  7. package/dist/commands/adopt.d.ts.map +1 -1
  8. package/dist/commands/adopt.js +53 -16
  9. package/dist/commands/adopt.js.map +1 -1
  10. package/dist/commands/logs.d.ts.map +1 -1
  11. package/dist/commands/logs.js +2 -1
  12. package/dist/commands/logs.js.map +1 -1
  13. package/dist/commands/new.d.ts.map +1 -1
  14. package/dist/commands/new.js +63 -15
  15. package/dist/commands/new.js.map +1 -1
  16. package/dist/commands/template.d.ts +8 -0
  17. package/dist/commands/template.d.ts.map +1 -0
  18. package/dist/commands/template.js +392 -0
  19. package/dist/commands/template.js.map +1 -0
  20. package/dist/commands/ui.d.ts +5 -0
  21. package/dist/commands/ui.d.ts.map +1 -1
  22. package/dist/commands/ui.js +159 -9
  23. package/dist/commands/ui.js.map +1 -1
  24. package/dist/config/project.d.ts +3 -0
  25. package/dist/config/project.d.ts.map +1 -1
  26. package/dist/config/project.js +21 -2
  27. package/dist/config/project.js.map +1 -1
  28. package/dist/governor/fingerprint.d.ts.map +1 -1
  29. package/dist/governor/fingerprint.js +19 -28
  30. package/dist/governor/fingerprint.js.map +1 -1
  31. package/dist/output-safety.d.ts +3 -0
  32. package/dist/output-safety.d.ts.map +1 -0
  33. package/dist/output-safety.js +44 -0
  34. package/dist/output-safety.js.map +1 -0
  35. package/dist/platform/process.d.ts +2 -0
  36. package/dist/platform/process.d.ts.map +1 -1
  37. package/dist/platform/process.js +16 -6
  38. package/dist/platform/process.js.map +1 -1
  39. package/dist/qa/artifacts.d.ts +3 -0
  40. package/dist/qa/artifacts.d.ts.map +1 -0
  41. package/dist/qa/artifacts.js +15 -0
  42. package/dist/qa/artifacts.js.map +1 -0
  43. package/dist/qa/diff.d.ts.map +1 -1
  44. package/dist/qa/diff.js +0 -1
  45. package/dist/qa/diff.js.map +1 -1
  46. package/dist/qa/runner.d.ts +3 -2
  47. package/dist/qa/runner.d.ts.map +1 -1
  48. package/dist/qa/runner.js +12 -16
  49. package/dist/qa/runner.js.map +1 -1
  50. package/dist/qa/server.d.ts.map +1 -1
  51. package/dist/qa/server.js +7 -7
  52. package/dist/qa/server.js.map +1 -1
  53. package/dist/scaffold/design.d.ts +1 -1
  54. package/dist/scaffold/design.d.ts.map +1 -1
  55. package/dist/scaffold/design.js +1 -0
  56. package/dist/scaffold/design.js.map +1 -1
  57. package/dist/scaffold/standalone.d.ts +1 -1
  58. package/dist/scaffold/standalone.d.ts.map +1 -1
  59. package/dist/scaffold/standalone.js +82 -2
  60. package/dist/scaffold/standalone.js.map +1 -1
  61. package/dist/scaffold/templates.d.ts +1 -0
  62. package/dist/scaffold/templates.d.ts.map +1 -1
  63. package/dist/scaffold/templates.js +23 -2
  64. package/dist/scaffold/templates.js.map +1 -1
  65. package/dist/template/servers.d.ts +21 -0
  66. package/dist/template/servers.d.ts.map +1 -0
  67. package/dist/template/servers.js +193 -0
  68. package/dist/template/servers.js.map +1 -0
  69. package/dist/template/workspace.d.ts +23 -0
  70. package/dist/template/workspace.d.ts.map +1 -0
  71. package/dist/template/workspace.js +152 -0
  72. package/dist/template/workspace.js.map +1 -0
  73. package/dist/verify/runner.d.ts +2 -1
  74. package/dist/verify/runner.d.ts.map +1 -1
  75. package/dist/verify/runner.js +2 -2
  76. package/dist/verify/runner.js.map +1 -1
  77. package/dist/version.d.ts +4 -2
  78. package/dist/version.d.ts.map +1 -1
  79. package/dist/version.js +3 -1
  80. package/dist/version.js.map +1 -1
  81. package/docs/agent-audit.md +1 -1
  82. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,7 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.4.3
4
+
5
+ - Make visual diff threshold violations fail QA without replacing the accepted baseline, and reject colliding route artifact names.
6
+ - Invalidate optimized verification evidence for every non-generated project file and across CLI upgrades.
7
+ - Sanitize untrusted terminal output and bound captured process and development-server logs.
8
+ - Reject empty, duplicate, or excessive QA route and viewport configurations in managed and standalone runners.
9
+ - Roll back newly initialized template workspaces when dependency or browser installation fails so creation can be retried.
10
+
11
+ ## 1.4.2
12
+
13
+ - Package the default Tailwind CSS 4.3.3 and `@tailwindcss/vite` integration for Vite, React Router and PHP scaffolds.
14
+ - Keep generated starter styles in the Tailwind base layer and verify that utility CSS is emitted in production builds.
15
+ - Extend design guidance with static utility classes, semantic theme tokens and styling-pipeline checks for adopted projects.
16
+
3
17
  ## 1.4.1
4
18
 
19
+ - Include Tailwind CSS 4.3.3 and its Vite plugin in every new project; keep starter styles in the base layer and verify generated utilities in production CSS.
20
+
5
21
  - Make `adopt` reconcile legacy and previously optimized projects with the current canonical project system without requiring an integration flag.
6
22
  - Archive Mozole-owned legacy state and managed files during migration, preserve unrelated user integrations and design exports, and restore managed changes if installation fails.
7
23
  - Refresh managed instruction blocks, standalone verification/QA scripts, PHP templates, tooling pins and configured project verifiers idempotently.
package/README.md CHANGED
@@ -25,10 +25,30 @@ npm run qa:interactive
25
25
  npm run qa:visual
26
26
  ```
27
27
 
28
- `verify` runs lint, strict TypeScript, tests, and production build every time. PHP projects also run PHP version and recursive syntax checks first. `qa` starts a loopback development server on an available port, checks the configured routes at three viewports, and closes its browser and server. Normal QA never captures screenshots. `qa:visual` explicitly captures screenshots under `.mozole/qa/`. Reinstall Chromium with `npx playwright install chromium` if necessary.
28
+ `verify` runs lint, strict TypeScript, tests, and production build every time. PHP projects also run PHP version and recursive syntax checks first. `qa` starts a loopback development server on an available port, checks the configured routes at three viewports, and closes its browser and server. Normal QA never captures screenshots. `qa:visual` explicitly captures screenshots under `.mozole/qa/`. Optional `--diff` comparisons preserve the accepted baseline and fail when the configured threshold is exceeded. Reinstall Chromium with `npx playwright install chromium` if necessary.
29
29
 
30
30
  React Router uses `ssr: false` and `prerender: true`. The starter builds real HTML for `/`, `/about`, and `/contact` into `build/client/`, plus `__spa-fallback.html`. Production requires no Node server. See [React Router prerendering](https://reactrouter.com/how-to/pre-rendering).
31
31
 
32
+ ## Shared template workspaces
33
+
34
+ Use a template workspace when multiple generated projects should share one pinned Node.js toolkit instead of installing a separate `node_modules` tree for every project:
35
+
36
+ ```sh
37
+ mozole template init MozoleProjects
38
+ cd MozoleProjects
39
+ mozole new marketing-site
40
+ mozole new admin-panel --backend
41
+ mozole template adopt ../existing-vite-app
42
+ mozole template list
43
+ mozole ui
44
+ ```
45
+
46
+ The template root is an npm workspace marked by `.mozole/template.json`. Its `package.json` owns React, React Router, Vite, Tailwind, TypeScript, Biome, Vitest, Playwright, and the Mozole CLI. Child manifests retain standardized dependency declarations for framework compatibility, while npm hoists their physical installation to the root; no project-local `node_modules` is created. `mozole new` searches parent directories for the marker, so it automatically registers projects created from the template root or nested category folders such as `Architecture/`. Creation from inside an existing managed project is rejected to prevent accidental project nesting. Projects outside a template workspace retain the normal standalone installation behavior.
47
+
48
+ `mozole template adopt <path>` imports an external React/Vite project as a copy, leaving its source directory untouched. Running it for an existing direct child standardizes that project in place. Runtime, optional, peer, and development packages are merged into the root toolkit; template versions win conflicts so every managed project resolves one standardized version. The child's previous lockfile is archived under `.mozole/backups/`, and its disposable local `node_modules` is removed after a successful shared install. `--cce-install` remains available for optimized adoption.
49
+
50
+ The TUI's **Servers** screen discovers nested Mozole projects and starts each configured npm development server on its preferred port or the next available port. Use Enter/`s` to toggle one server, `a` to start all, and `x` to stop all. Server output is retained under `.mozole/logs/servers/`. Managed servers are stopped when the TUI exits, so the UI remains the single lifecycle owner; disposable project-local Vite caches are cleaned on stop.
51
+
32
52
  ## Design references and assets
33
53
 
34
54
  Place exported `design.md`, images, icons, fonts and reference screens under `docs/design/`. Generated `AGENTS.md` treats these as design evidence, preserves their intent, and requires checks for spacing, loaded fonts, foreground/background contrast, responsive behavior and interaction states. It permits justified corrections instead of blindly copying tokens. `docs/design/README.md` explains the handoff; no provider-specific design is generated. Existing exports remain untouched during adoption. Routine QA stays screenshot-free; visual comparison remains opt-in.
@@ -71,10 +91,12 @@ Optimized `AGENTS.md` provides the shared CCE-first contract; `CLAUDE.md` import
71
91
 
72
92
  Read and command policies run on `PreToolUse`. CCE retrieval tracking runs on `PostToolUse`, including MCP tool names, and ignores explicit tool-error responses. The Antigravity visual workflow provides a reason accepted by the visual QA gate. Host-specific agent sessions are not automatically launched by the CLI test suite.
73
93
 
74
- Optimized verification/QA reuses matching successful evidence. Use `--force` for a fresh run. Routine QA is screenshot-free; visual QA uses explicit `--visual` and, after successful routine QA, `--reason` or `--force`. Enabled governors enforce read/command policies and can deny calls; they are not advisory-only. Local telemetry reports measured output compression and tool activity, not model billing savings.
94
+ Optimized verification/QA reuses matching successful evidence. Verification evidence covers all non-generated project files and is invalidated by CLI upgrades. Use `--force` for a fresh run. Routine QA is screenshot-free; visual QA uses explicit `--visual` and, after successful routine QA, `--reason` or `--force`. Enabled governors enforce read/command policies and can deny calls; they are not advisory-only. Local telemetry reports measured output compression and tool activity, not model billing savings.
75
95
 
76
96
  ## Adopt an existing project
77
97
 
98
+ New projects include pinned Tailwind CSS v4 and `@tailwindcss/vite` by default in all modes, including PHP projects. `app/styles/global.css` imports Tailwind and keeps starter styles in the base layer. Adoption preserves existing CSS and Vite configuration; it does not automatically migrate older styling pipelines or inject Preflight into an existing design.
99
+
78
100
  ```sh
79
101
  mozole adopt ../existing-app
80
102
  ```
@@ -85,6 +107,9 @@ Adoption reconciles a React/Vite or React Router project with the current projec
85
107
 
86
108
  ```text
87
109
  mozole new <name> [--backend] [--cce-install] [--verbose]
110
+ mozole template init [folder]
111
+ mozole template adopt <project-path> [--cce-install] [--verbose]
112
+ mozole template list
88
113
  mozole adopt <path> [--cce-install] [--verbose]
89
114
  mozole doctor
90
115
  mozole verify [--force]
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAeA,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAOT;AAqCD,wBAAsB,IAAI,CACxB,IAAI,WAAwB,EAC5B,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CAiJjB"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsBA,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAOT;AAuDD,wBAAsB,IAAI,CACxB,IAAI,WAAwB,EAC5B,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CA2KjB"}
package/dist/cli.js CHANGED
@@ -8,9 +8,11 @@ import { logsCommand } from "./commands/logs.js";
8
8
  import { newCommand } from "./commands/new.js";
9
9
  import { qaCommand } from "./commands/qa.js";
10
10
  import { statsCommand } from "./commands/stats.js";
11
+ import { templateAdoptCommand, templateInitCommand, templateListCommand, } from "./commands/template.js";
11
12
  import { uiCommand } from "./commands/ui.js";
12
13
  import { verifyCommand } from "./commands/verify.js";
13
14
  import { governorHookCommand } from "./governor/hook.js";
15
+ import { sanitizeTerminalText } from "./output-safety.js";
14
16
  import { CLI_VERSION } from "./version.js";
15
17
  export function isCliEntrypoint(entryUrl, invokedPath) {
16
18
  if (!invokedPath)
@@ -26,6 +28,9 @@ const help = `mozole ${CLI_VERSION}
26
28
 
27
29
  Usage:
28
30
  mozole new <name> [--backend] [--cce-install] [--verbose]
31
+ mozole template init [folder]
32
+ mozole template adopt <project-path> [--cce-install] [--verbose]
33
+ mozole template list
29
34
  mozole adopt <path> [--cce-install] [--verbose]
30
35
  mozole cce install [--verbose]
31
36
  mozole doctor [--verbose]
@@ -34,6 +39,10 @@ Usage:
34
39
  mozole stats [--verbose]
35
40
  mozole ui
36
41
  mozole logs [name] [--raw]`;
42
+ const terminalOutput = {
43
+ log: (message, ...optional) => console.log(...[message, ...optional].map((value) => sanitizeTerminalText(String(value ?? "")))),
44
+ error: (message, ...optional) => console.error(...[message, ...optional].map((value) => sanitizeTerminalText(String(value ?? "")))),
45
+ };
37
46
  function parseCliArgs(args, allowedFlags = [], isAllowedFlag) {
38
47
  const clean = args.filter((arg) => Boolean(arg));
39
48
  const positional = clean.filter((arg) => !arg.startsWith("-"));
@@ -49,36 +58,54 @@ export async function main(args = process.argv.slice(2), cwd = process.cwd()) {
49
58
  command === "help" ||
50
59
  command === "--help" ||
51
60
  command === "-h") {
52
- console.log(help);
61
+ terminalOutput.log(help);
53
62
  return 0;
54
63
  }
55
64
  if (command === "--version" || (command === "-v" && !value)) {
56
- console.log(CLI_VERSION);
65
+ terminalOutput.log(CLI_VERSION);
57
66
  return 0;
58
67
  }
59
68
  if (command === "new") {
60
69
  const { positional, flags, unknown, verbose } = parseCliArgs([value, ...rest], ["--backend", "--cce-install", "--install-cce", "--scaffold"]);
61
70
  if (unknown.length || positional.length > 1) {
62
- console.error(`Unknown option: ${unknown[0] ?? positional[1]}`);
71
+ terminalOutput.error(`Unknown option: ${unknown[0] ?? positional[1]}`);
63
72
  return 2;
64
73
  }
65
74
  const cceInstall = flags.includes("--cce-install") || flags.includes("--install-cce");
66
75
  const backend = flags.includes("--backend");
67
76
  const scaffold = flags.includes("--scaffold");
68
- return newCommand(positional[0], cwd, console, {
77
+ return newCommand(positional[0], cwd, terminalOutput, {
69
78
  verbose,
70
79
  cceInstall,
71
80
  backend,
72
81
  scaffold,
73
82
  });
74
83
  }
84
+ if (command === "template") {
85
+ const { positional, flags, unknown, verbose } = parseCliArgs([value, ...rest], ["--cce-install", "--install-cce"]);
86
+ if (unknown.length) {
87
+ terminalOutput.error(`Unknown template option: ${unknown[0]}`);
88
+ return 2;
89
+ }
90
+ if (positional[0] === "init" && positional.length <= 2)
91
+ return templateInitCommand(positional[1], cwd);
92
+ if (positional[0] === "adopt" && positional.length === 2)
93
+ return templateAdoptCommand(positional[1], cwd, terminalOutput, {
94
+ verbose,
95
+ cceInstall: flags.includes("--cce-install") || flags.includes("--install-cce"),
96
+ });
97
+ if (positional[0] === "list" && positional.length === 1)
98
+ return templateListCommand(cwd);
99
+ terminalOutput.error("Usage: mozole template init [folder]\n mozole template adopt <project-path> [--cce-install] [--verbose]\n mozole template list");
100
+ return 2;
101
+ }
75
102
  if (command === "adopt") {
76
103
  const { positional, unknown, verbose, flags } = parseCliArgs([value, ...rest], ["--cce-install", "--install-cce"]);
77
104
  if (unknown.length || positional.length > 1) {
78
- console.error(`Unknown option: ${unknown[0] ?? positional[1]}`);
105
+ terminalOutput.error(`Unknown option: ${unknown[0] ?? positional[1]}`);
79
106
  return 2;
80
107
  }
81
- return adoptCommand(positional[0], cwd, console, {
108
+ return adoptCommand(positional[0], cwd, terminalOutput, {
82
109
  verbose,
83
110
  cceInstall: flags.includes("--cce-install") || flags.includes("--install-cce"),
84
111
  });
@@ -88,26 +115,26 @@ export async function main(args = process.argv.slice(2), cwd = process.cwd()) {
88
115
  if (positional[0] !== "install" ||
89
116
  positional.length > 1 ||
90
117
  unknown.length) {
91
- console.error("Usage: mozole cce install [--verbose]");
118
+ terminalOutput.error("Usage: mozole cce install [--verbose]");
92
119
  return 2;
93
120
  }
94
- return cceInstallCommand(cwd, console, { verbose });
121
+ return cceInstallCommand(cwd, terminalOutput, { verbose });
95
122
  }
96
123
  if (command === "doctor") {
97
124
  const { unknown, verbose } = parseCliArgs([value, ...rest]);
98
125
  if (unknown.length) {
99
- console.error(`Unknown doctor option: ${unknown[0]}`);
126
+ terminalOutput.error(`Unknown doctor option: ${unknown[0]}`);
100
127
  return 2;
101
128
  }
102
- return doctorCommand(cwd, console, { verbose });
129
+ return doctorCommand(cwd, terminalOutput, { verbose });
103
130
  }
104
131
  if (command === "verify") {
105
132
  const { flags, unknown, verbose } = parseCliArgs([value, ...rest], ["--force"]);
106
133
  if (unknown.length) {
107
- console.error(`Unknown verify option: ${unknown[0]}`);
134
+ terminalOutput.error(`Unknown verify option: ${unknown[0]}`);
108
135
  return 2;
109
136
  }
110
- return verifyCommand(cwd, console, {
137
+ return verifyCommand(cwd, terminalOutput, {
111
138
  force: flags.includes("--force"),
112
139
  verbose,
113
140
  });
@@ -115,37 +142,37 @@ export async function main(args = process.argv.slice(2), cwd = process.cwd()) {
115
142
  if (command === "stats") {
116
143
  const { unknown, verbose } = parseCliArgs([value, ...rest]);
117
144
  if (unknown.length) {
118
- console.error(`Unknown stats option: ${unknown[0]}`);
145
+ terminalOutput.error(`Unknown stats option: ${unknown[0]}`);
119
146
  return 2;
120
147
  }
121
- return statsCommand(cwd, console, { verbose });
148
+ return statsCommand(cwd, terminalOutput, { verbose });
122
149
  }
123
150
  if (command === "ui") {
124
151
  if (value || rest.length) {
125
- console.error("Usage: mozole ui");
152
+ terminalOutput.error("Usage: mozole ui");
126
153
  return 2;
127
154
  }
128
- return uiCommand(cwd);
155
+ return uiCommand(cwd, terminalOutput);
129
156
  }
130
157
  if (command === "logs") {
131
158
  const { positional, flags, unknown } = parseCliArgs([value, ...rest], ["--raw"]);
132
159
  if (unknown.length || positional.length > 1) {
133
- console.error(`Unknown logs option: ${unknown[0] ?? positional[1]}`);
160
+ terminalOutput.error(`Unknown logs option: ${unknown[0] ?? positional[1]}`);
134
161
  return 2;
135
162
  }
136
163
  const name = positional[0];
137
- return logsCommand(cwd, name, flags.includes("--raw"));
164
+ return logsCommand(cwd, name, flags.includes("--raw"), terminalOutput);
138
165
  }
139
166
  if (command === "governor" && value === "hook")
140
167
  return governorHookCommand();
141
168
  if (command === "qa") {
142
169
  const { flags, unknown, verbose } = parseCliArgs([value, ...rest], ["--interactive", "--visual", "--diff", "--force"], (flag) => flag.startsWith("--reason="));
143
170
  if (unknown.length) {
144
- console.error(`Unknown QA option: ${unknown[0]}`);
171
+ terminalOutput.error(`Unknown QA option: ${unknown[0]}`);
145
172
  return 2;
146
173
  }
147
174
  if (flags.includes("--diff") && !flags.includes("--visual")) {
148
- console.error("QA --diff requires --visual.");
175
+ terminalOutput.error("QA --diff requires --visual.");
149
176
  return 2;
150
177
  }
151
178
  const reasonFlag = flags.find((flag) => flag.startsWith("--reason="));
@@ -159,9 +186,9 @@ export async function main(args = process.argv.slice(2), cwd = process.cwd()) {
159
186
  force: flags.includes("--force"),
160
187
  verbose,
161
188
  reason,
162
- }, console);
189
+ }, terminalOutput);
163
190
  }
164
- console.error(`Unknown command: ${command}\n\n${help}`);
191
+ terminalOutput.error(`Unknown command: ${command}\n\n${help}`);
165
192
  return 2;
166
193
  }
167
194
  if (isCliEntrypoint(import.meta.url, process.argv[1]))
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { type ProgressState } from "../progress.js";
3
3
  export { detectRoutes } from "../scaffold/routes.js";
4
4
  export declare function adoptCommand(input: string | undefined, cwd: string, output?: Output, options?: {
5
5
  cceInstall?: boolean | undefined;
6
+ sharedDependencies?: boolean | undefined;
7
+ workspaceRoot?: string | undefined;
6
8
  verbose?: boolean | undefined;
7
9
  onProgress?: ((state: ProgressState) => void) | undefined;
8
10
  }): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAgGlE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA+JrD,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACtD,GACL,OAAO,CAAC,MAAM,CAAC,CA0XjB"}
1
+ {"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAkGlE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA+JrD,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACtD,GACL,OAAO,CAAC,MAAM,CAAC,CA6ZjB"}
@@ -238,10 +238,18 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
238
238
  const original = await readFile(packagePath, "utf8");
239
239
  const packageJson = JSON.parse(original);
240
240
  await assertAntigravityMcpMergeable(root);
241
- const allDependencies = {
241
+ const workspacePackage = options.sharedDependencies && options.workspaceRoot
242
+ ? JSON.parse(await readFile(path.join(options.workspaceRoot, "package.json"), "utf8"))
243
+ : {};
244
+ const projectDependencies = {
242
245
  ...packageJson.dependencies,
243
246
  ...packageJson.devDependencies,
244
247
  };
248
+ const allDependencies = {
249
+ ...workspacePackage.dependencies,
250
+ ...workspacePackage.devDependencies,
251
+ ...projectDependencies,
252
+ };
245
253
  if (!allDependencies.react ||
246
254
  (!allDependencies.vite && !allDependencies["@react-router/dev"]))
247
255
  throw new Error("Expected a React project using Vite or React Router Framework Mode.");
@@ -261,7 +269,10 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
261
269
  throw new Error(`Existing .mozole/project.json is invalid: ${error instanceof Error ? error.message : String(error)}`);
262
270
  }
263
271
  })()
264
- : projectConfig(name, { scaffold: false });
272
+ : projectConfig(name, {
273
+ scaffold: false,
274
+ sharedDependencies: options.sharedDependencies,
275
+ });
265
276
  const wasManaged = await exists(configPath);
266
277
  if (!config.backend && (await exists(path.join(root, "api/index.php"))))
267
278
  config.backend = projectConfig(name, { backend: true }).backend;
@@ -269,7 +280,7 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
269
280
  scaffold: false,
270
281
  backend: Boolean(config.backend),
271
282
  });
272
- adaptFrameworkGuide(templates, Boolean(allDependencies["@react-router/dev"]));
283
+ adaptFrameworkGuide(templates, Boolean(projectDependencies["@react-router/dev"]));
273
284
  const migration = await canonicalPlan(root, templates, true, wasManaged, name, knownGuides(name));
274
285
  config.name = name;
275
286
  for (const key of Object.keys(config))
@@ -280,6 +291,7 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
280
291
  "framework",
281
292
  "routes",
282
293
  "backend",
294
+ "workspace",
283
295
  "qa",
284
296
  "cce",
285
297
  "governor",
@@ -297,6 +309,10 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
297
309
  };
298
310
  config.governor = optimized.governor;
299
311
  config.telemetry = optimized.telemetry;
312
+ if (options.sharedDependencies)
313
+ config.workspace = { sharedDependencies: true };
314
+ else
315
+ delete config.workspace;
300
316
  progress.step("Verifying CCE runtime availability");
301
317
  const cceRequired = process.env.MOZOLE_SKIP_CCE !== "1" && config.cce?.enabled;
302
318
  const cce = cceRequired
@@ -318,8 +334,8 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
318
334
  lint: "biome check .",
319
335
  format: "biome format --write .",
320
336
  typecheck: !packageJson.scripts?.typecheck ||
321
- packageJson.scripts.typecheck === "tsc --noEmit"
322
- ? allDependencies["@react-router/dev"]
337
+ ["tsc --noEmit", "react-router typegen && tsc --noEmit"].includes(packageJson.scripts.typecheck)
338
+ ? projectDependencies["@react-router/dev"]
323
339
  ? "react-router typegen && tsc --noEmit"
324
340
  : "tsc --noEmit"
325
341
  : packageJson.scripts.typecheck,
@@ -431,16 +447,19 @@ export async function adoptCommand(input, cwd, output = console, options = {}) {
431
447
  movedDirectories = await applyCanonicalPlan(root, migration, snapshots);
432
448
  progress.step("Installing missing dependencies & toolchain packages");
433
449
  if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
434
- progress.logVerbose("Running npm install for adopted project");
450
+ progress.logVerbose(options.sharedDependencies
451
+ ? "Synchronizing shared template dependencies"
452
+ : "Running npm install for adopted project");
435
453
  const installed = await run(npmExecutable(), ["install", "--no-fund", "--no-audit"], {
436
- cwd: root,
454
+ cwd: options.workspaceRoot ?? root,
437
455
  timeoutMs: 600_000,
438
456
  signal: controller.signal,
439
- logFile: path.join(root, ".mozole", "logs", "npm-install.log"),
457
+ logFile: path.join(options.workspaceRoot ?? root, ".mozole", "logs", "npm-install.log"),
440
458
  });
441
459
  if (installed.exitCode !== 0)
442
460
  throw new Error("npm install failed; package.json backup is in .mozole/backups/.");
443
- if (process.env.MOZOLE_SKIP_BROWSER !== "1") {
461
+ if (!options.sharedDependencies &&
462
+ process.env.MOZOLE_SKIP_BROWSER !== "1") {
444
463
  progress.logVerbose("Installing Playwright browser");
445
464
  const browser = await run(npmExecutable(), ["exec", "--", "playwright", "install", "chromium"], {
446
465
  cwd: root,
@@ -517,7 +536,18 @@ async function adoptPlain(root, output, options) {
517
536
  await validateManagedPaths(root);
518
537
  const packagePath = path.join(root, "package.json");
519
538
  const pkg = JSON.parse(await readFile(packagePath, "utf8"));
520
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
539
+ const projectDependencies = {
540
+ ...pkg.dependencies,
541
+ ...pkg.devDependencies,
542
+ };
543
+ const workspacePackage = options.sharedDependencies && options.workspaceRoot
544
+ ? JSON.parse(await readFile(path.join(options.workspaceRoot, "package.json"), "utf8"))
545
+ : {};
546
+ const deps = {
547
+ ...workspacePackage.dependencies,
548
+ ...workspacePackage.devDependencies,
549
+ ...projectDependencies,
550
+ };
521
551
  if (!deps.react || (!deps.vite && !deps["@react-router/dev"]))
522
552
  throw new Error("Expected a React project using Vite or React Router Framework Mode.");
523
553
  const name = pkg.name ?? path.basename(root);
@@ -541,6 +571,7 @@ async function adoptPlain(root, output, options) {
541
571
  "framework",
542
572
  "routes",
543
573
  "backend",
574
+ "workspace",
544
575
  "qa",
545
576
  "cce",
546
577
  "governor",
@@ -551,7 +582,11 @@ async function adoptPlain(root, output, options) {
551
582
  const templates = projectTemplates(name, {
552
583
  backend: Boolean(config.backend?.enabled),
553
584
  });
554
- adaptFrameworkGuide(templates, Boolean(deps["@react-router/dev"]));
585
+ if (options.sharedDependencies)
586
+ config.workspace = { sharedDependencies: true };
587
+ else
588
+ delete config.workspace;
589
+ adaptFrameworkGuide(templates, Boolean(projectDependencies["@react-router/dev"]));
555
590
  const migration = await canonicalPlan(root, templates, false, wasManaged, name, knownGuides(name));
556
591
  const generated = JSON.parse(templates["package.json"] ?? "{}");
557
592
  const routeFile = path.join(root, "app", "routes.ts");
@@ -590,8 +625,9 @@ async function adoptPlain(root, output, options) {
590
625
  "test:run": "vitest run",
591
626
  ...pkg.scripts,
592
627
  };
593
- if (!pkg.scripts?.typecheck || pkg.scripts.typecheck === "tsc --noEmit")
594
- next.scripts.typecheck = deps["@react-router/dev"]
628
+ if (!pkg.scripts?.typecheck ||
629
+ ["tsc --noEmit", "react-router typegen && tsc --noEmit"].includes(pkg.scripts.typecheck))
630
+ next.scripts.typecheck = projectDependencies["@react-router/dev"]
595
631
  ? "react-router typegen && tsc --noEmit"
596
632
  : "tsc --noEmit";
597
633
  for (const key of [
@@ -641,15 +677,16 @@ async function adoptPlain(root, output, options) {
641
677
  if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
642
678
  for (const args of [
643
679
  ["install", "--no-fund", "--no-audit"],
644
- ...(process.env.MOZOLE_SKIP_BROWSER === "1"
680
+ ...(process.env.MOZOLE_SKIP_BROWSER === "1" ||
681
+ options.sharedDependencies
645
682
  ? []
646
683
  : [["exec", "--", "playwright", "install", "chromium"]]),
647
684
  ]) {
648
685
  const result = await run(npmExecutable(), args, {
649
- cwd: root,
686
+ cwd: options.workspaceRoot ?? root,
650
687
  timeoutMs: 600_000,
651
688
  signal: controller.signal,
652
- logFile: path.join(root, ".mozole", "logs", "adopt-install.log"),
689
+ logFile: path.join(options.workspaceRoot ?? root, ".mozole", "logs", "adopt-install.log"),
653
690
  });
654
691
  if (result.exitCode !== 0)
655
692
  throw new Error("Dependency setup failed. See .mozole/logs/adopt-install.log");