@mozole/cli 1.3.2 → 1.4.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 (57) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +52 -158
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +6 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/adopt.d.ts +1 -0
  7. package/dist/commands/adopt.d.ts.map +1 -1
  8. package/dist/commands/adopt.js +191 -22
  9. package/dist/commands/adopt.js.map +1 -1
  10. package/dist/commands/doctor.d.ts.map +1 -1
  11. package/dist/commands/doctor.js +39 -16
  12. package/dist/commands/doctor.js.map +1 -1
  13. package/dist/commands/new.d.ts.map +1 -1
  14. package/dist/commands/new.js +22 -11
  15. package/dist/commands/new.js.map +1 -1
  16. package/dist/commands/qa.d.ts.map +1 -1
  17. package/dist/commands/qa.js +18 -12
  18. package/dist/commands/qa.js.map +1 -1
  19. package/dist/commands/stats.d.ts.map +1 -1
  20. package/dist/commands/stats.js +6 -1
  21. package/dist/commands/stats.js.map +1 -1
  22. package/dist/commands/verify.d.ts.map +1 -1
  23. package/dist/commands/verify.js +12 -8
  24. package/dist/commands/verify.js.map +1 -1
  25. package/dist/config/project.d.ts +3 -3
  26. package/dist/config/project.d.ts.map +1 -1
  27. package/dist/config/project.js +11 -12
  28. package/dist/config/project.js.map +1 -1
  29. package/dist/governor/fingerprint.d.ts.map +1 -1
  30. package/dist/governor/fingerprint.js +2 -0
  31. package/dist/governor/fingerprint.js.map +1 -1
  32. package/dist/governor/hook.d.ts +1 -0
  33. package/dist/governor/hook.d.ts.map +1 -1
  34. package/dist/governor/hook.js +18 -9
  35. package/dist/governor/hook.js.map +1 -1
  36. package/dist/qa/runner.js +1 -1
  37. package/dist/qa/runner.js.map +1 -1
  38. package/dist/scaffold/backend.d.ts.map +1 -1
  39. package/dist/scaffold/backend.js +57 -11
  40. package/dist/scaffold/backend.js.map +1 -1
  41. package/dist/scaffold/standalone.d.ts +6 -0
  42. package/dist/scaffold/standalone.d.ts.map +1 -0
  43. package/dist/scaffold/standalone.js +270 -0
  44. package/dist/scaffold/standalone.js.map +1 -0
  45. package/dist/scaffold/templates.d.ts.map +1 -1
  46. package/dist/scaffold/templates.js +75 -24
  47. package/dist/scaffold/templates.js.map +1 -1
  48. package/dist/scaffold/write.d.ts.map +1 -1
  49. package/dist/scaffold/write.js +19 -5
  50. package/dist/scaffold/write.js.map +1 -1
  51. package/dist/verify/runner.d.ts.map +1 -1
  52. package/dist/verify/runner.js +2 -4
  53. package/dist/verify/runner.js.map +1 -1
  54. package/dist/version.d.ts +2 -2
  55. package/dist/version.js +1 -1
  56. package/docs/agent-audit.md +24 -0
  57. package/package.json +4 -2
@@ -0,0 +1,270 @@
1
+ /** Standalone project tooling: no dependency on the generator at runtime. */
2
+ export const backendCheckScript = `import { spawnSync } from "node:child_process";
3
+ import { readdir } from "node:fs/promises";
4
+ import path from "node:path";
5
+
6
+ function php(args) {
7
+ const result = spawnSync("php", args, {
8
+ encoding: "utf8",
9
+ shell: false,
10
+ timeout: 10000,
11
+ });
12
+ if (result.error || result.status !== 0)
13
+ throw new Error(result.error?.message || result.stderr || result.stdout);
14
+ return result.stdout.trim();
15
+ }
16
+ async function lint(directory) {
17
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
18
+ const file = path.join(directory, entry.name);
19
+ if (entry.isDirectory()) await lint(file);
20
+ else if (entry.isFile() && entry.name.endsWith(".php")) php(["-l", file]);
21
+ }
22
+ }
23
+ try {
24
+ const version = Number(php(["-r", "echo PHP_VERSION_ID;"]));
25
+ if (!Number.isInteger(version) || version < 80000)
26
+ throw new Error("PHP 8.0 or newer is required.");
27
+ await lint("api");
28
+ console.log("PHP PASS");
29
+ } catch (error) {
30
+ console.error(\`PHP FAIL\\n\${error.message}\`);
31
+ process.exitCode = 1;
32
+ }
33
+ `;
34
+ export const deployScript = `import { cp, lstat, mkdir, rename, rm } from "node:fs/promises";
35
+ import path from "node:path";
36
+
37
+ const target = path.resolve("deploy");
38
+ const staging = \`\${target}.\${process.pid}.tmp\`;
39
+ const backup = \`\${target}.\${process.pid}.backup\`;
40
+ let backedUp = false;
41
+ try {
42
+ await mkdir(staging);
43
+ await cp("build/client", staging, { recursive: true, errorOnExist: true });
44
+ await cp("api", path.join(staging, "api"), { recursive: true });
45
+ await cp(".htaccess", path.join(staging, ".htaccess"));
46
+ try {
47
+ await lstat(target);
48
+ await rename(target, backup);
49
+ backedUp = true;
50
+ } catch (error) {
51
+ if (error.code !== "ENOENT") throw error;
52
+ }
53
+ try {
54
+ await rename(staging, target);
55
+ } catch (error) {
56
+ if (backedUp) await rename(backup, target);
57
+ throw error;
58
+ }
59
+ if (backedUp) await rm(backup, { recursive: true });
60
+ console.log("DEPLOY READY: deploy/");
61
+ } finally {
62
+ await rm(staging, { recursive: true, force: true });
63
+ }
64
+ `;
65
+ export const qaScript = `import { spawn, spawnSync } from "node:child_process";
66
+ import { mkdir, readFile } from "node:fs/promises";
67
+ import net from "node:net";
68
+ import path from "node:path";
69
+ import { chromium } from "playwright";
70
+
71
+ const flags = process.argv.slice(2);
72
+ if (
73
+ flags.some((flag) => !["--visual", "--interactive", "--force"].includes(flag))
74
+ )
75
+ throw new Error("Unknown QA option");
76
+ const config = JSON.parse(await readFile(".mozole/project.json", "utf8"));
77
+ const socket = net.createServer();
78
+ await new Promise((resolve, reject) => {
79
+ socket.once("error", reject);
80
+ socket.listen(0, "127.0.0.1", resolve);
81
+ });
82
+ const port = socket.address().port;
83
+ await new Promise((resolve) => socket.close(resolve));
84
+ const pkg = JSON.parse(await readFile("package.json", "utf8"));
85
+ const framework = pkg.devDependencies?.["@react-router/dev"]
86
+ ? "@react-router/dev"
87
+ : "vite";
88
+ const frameworkRoot = path.resolve("node_modules", framework);
89
+ const metadata = JSON.parse(
90
+ await readFile(path.join(frameworkRoot, "package.json"), "utf8"),
91
+ );
92
+ const bin =
93
+ typeof metadata.bin === "string"
94
+ ? metadata.bin
95
+ : Object.values(metadata.bin)[0];
96
+ const args = [
97
+ path.join(frameworkRoot, bin),
98
+ ...(framework === "vite" ? [] : ["dev"]),
99
+ "--host",
100
+ "127.0.0.1",
101
+ "--port",
102
+ String(port),
103
+ "--strictPort",
104
+ ];
105
+ const child = spawn(process.execPath, args, {
106
+ shell: false,
107
+ detached: process.platform !== "win32",
108
+ stdio: ["ignore", "pipe", "pipe"],
109
+ });
110
+ let serverLog = "";
111
+ for (const stream of [child.stdout, child.stderr])
112
+ stream.on("data", (data) => {
113
+ serverLog = (serverLog + data).slice(-4000);
114
+ });
115
+ let serverError;
116
+ child.on("error", (error) => {
117
+ serverError = error;
118
+ });
119
+ let browser;
120
+ let stopping = false;
121
+ async function cleanup() {
122
+ if (stopping) return;
123
+ stopping = true;
124
+ await browser?.close().catch(() => {});
125
+ if (child.pid) {
126
+ if (process.platform === "win32")
127
+ spawnSync("taskkill", ["/pid", String(child.pid), "/T", "/F"], {
128
+ shell: false,
129
+ stdio: "ignore",
130
+ });
131
+ else {
132
+ try {
133
+ process.kill(-child.pid, "SIGTERM");
134
+ } catch {}
135
+ }
136
+ }
137
+ }
138
+ const interrupted = () => {
139
+ void cleanup().finally(() => process.exit(130));
140
+ };
141
+ process.once("SIGINT", interrupted);
142
+ process.once("SIGTERM", interrupted);
143
+ const deadline = setTimeout(() => {
144
+ console.error("QA timed out");
145
+ void cleanup().finally(() => process.exit(1));
146
+ }, 120000);
147
+ const base = \`http://127.0.0.1:\${port}\`;
148
+ try {
149
+ let ready = false;
150
+ for (let attempt = 0; attempt < 300; attempt++) {
151
+ if (serverError || child.exitCode !== null)
152
+ throw new Error(serverError?.message || serverLog);
153
+ try {
154
+ ready = (
155
+ await fetch(base + config.qa.server.readinessPath, {
156
+ signal: AbortSignal.timeout(1000),
157
+ })
158
+ ).ok;
159
+ } catch {}
160
+ if (ready) break;
161
+ await new Promise((resolve) => setTimeout(resolve, 100));
162
+ }
163
+ if (!ready)
164
+ throw new Error(\`Development server did not become ready.\\n\${serverLog}\`);
165
+ browser = await chromium.launch();
166
+ const failures = [];
167
+ for (const viewport of config.qa.viewports) {
168
+ const page = await browser.newPage({ viewport });
169
+ page.on("pageerror", (error) => failures.push(error.message));
170
+ page.on("console", (message) => {
171
+ if (message.type() === "error") failures.push(message.text());
172
+ });
173
+ page.on("requestfailed", (request) => {
174
+ if (request.failure()?.errorText !== "net::ERR_ABORTED")
175
+ failures.push(request.url());
176
+ });
177
+ page.on("response", (response) => {
178
+ if (response.status() >= 400)
179
+ failures.push(\`\${response.status()} \${response.url()}\`);
180
+ });
181
+ for (const route of config.routes) {
182
+ const response = await page.goto(base + route, {
183
+ waitUntil: "networkidle",
184
+ });
185
+ if (!response?.ok()) failures.push(\`\${route}: HTTP failure\`);
186
+ const issues = await page.evaluate(() => {
187
+ const found = [];
188
+ if (!document.documentElement.lang) found.push("missing lang");
189
+ if (!document.title.trim()) found.push("missing title");
190
+ if (!document.querySelector("h1")) found.push("missing h1");
191
+ if (document.documentElement.scrollWidth > innerWidth + 1)
192
+ found.push("horizontal overflow");
193
+ for (const element of document.querySelectorAll(
194
+ "a, button, input:not([type=hidden]), select, textarea",
195
+ )) {
196
+ if (!element.getClientRects().length) continue;
197
+ const labelled = (element.getAttribute("aria-labelledby") || "")
198
+ .split(/\\s+/)
199
+ .some((id) => document.getElementById(id)?.textContent?.trim());
200
+ if (
201
+ !element.textContent?.trim() &&
202
+ !element.getAttribute("aria-label") &&
203
+ !labelled &&
204
+ !element.labels?.length &&
205
+ !element.getAttribute("title") &&
206
+ !element.getAttribute("alt") &&
207
+ !element.querySelector("img[alt]")
208
+ )
209
+ found.push("unnamed control");
210
+ }
211
+ return found;
212
+ });
213
+ failures.push(...issues.map((issue) => \`\${route}: \${issue}\`));
214
+ const links = await page
215
+ .locator("a[href]")
216
+ .evaluateAll((anchors) => anchors.map((anchor) => anchor.href));
217
+ for (const href of new Set(links)) {
218
+ if (
219
+ new URL(href).origin === base &&
220
+ !(await page.request.get(href)).ok()
221
+ )
222
+ failures.push(\`broken link: \${href}\`);
223
+ }
224
+ if (flags.includes("--interactive")) {
225
+ await page.keyboard.press("Tab");
226
+ if (
227
+ !(await page.evaluate(() => document.activeElement !== document.body))
228
+ )
229
+ failures.push(\`\${route}: keyboard focus missing\`);
230
+ }
231
+ if (flags.includes("--visual")) {
232
+ await mkdir(".mozole/qa", { recursive: true });
233
+ const name = route.replace(/[^a-z0-9_-]/gi, "-") || "index";
234
+ await page.screenshot({
235
+ path:
236
+ ".mozole/qa/" +
237
+ viewport.width +
238
+ "x" +
239
+ viewport.height +
240
+ "-" +
241
+ name +
242
+ ".png",
243
+ fullPage: true,
244
+ });
245
+ }
246
+ }
247
+ await page.close();
248
+ }
249
+ if (failures.length) throw new Error([...new Set(failures)].join("\\n"));
250
+ console.log(
251
+ "QA PASS: " +
252
+ config.routes.length +
253
+ " routes, " +
254
+ config.qa.viewports.length +
255
+ " viewports",
256
+ );
257
+ } catch (error) {
258
+ console.error(\`QA FAIL\\n\${error.message}\`);
259
+ process.exitCode = 1;
260
+ } finally {
261
+ clearTimeout(deadline);
262
+ process.removeListener("SIGINT", interrupted);
263
+ process.removeListener("SIGTERM", interrupted);
264
+ await cleanup();
265
+ }
266
+ `;
267
+ export function basicAgentGuide(backend) {
268
+ return `# Project guide\n\n## Commands\n\n- \`npm run dev\` — frontend development server\n- \`npm run verify\` — lint, typecheck, tests, production build\n- \`npm run qa\` — browser checks without screenshots\n- \`npm run qa:interactive\` — keyboard checks\n- \`npm run qa:visual\` — explicitly requested screenshots\n${backend ? "- `npm run dev:api` — PHP API in a separate terminal (PHP 8.0+)\n- `npm run check:php` — PHP version and syntax checks\n- `npm run build:deploy` — assemble deploy/ for Apache or LiteSpeed\n" : ""}\n## Architecture\n\nReact Router and Vite source is in \`app/\`; routes are declared in \`app/routes.ts\`. Production HTML and assets are in \`build/client/\`.${backend ? " PHP endpoints are in `api/`; the frontend uses relative `/api/` URLs through Vite's proxy. See `docs/backend-php.md`." : ""}\n\n## Working rules\n\nPreserve user changes. Inspect relevant code before editing. Run verification and relevant browser checks before handoff. Routine QA never captures screenshots; use visual QA only when requested. Report failed checks and remaining limitations.\n`;
269
+ }
270
+ //# sourceMappingURL=standalone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/scaffold/standalone.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BjC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B3B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyMvB,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO,0TAA0T,OAAO,CAAC,CAAC,CAAC,+LAA+L,CAAC,CAAC,CAAC,EAAE,mKAAmK,OAAO,CAAC,CAAC,CAAC,wHAAwH,CAAC,CAAC,CAAC,EAAE,+QAA+Q,CAAC;AAC3kC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,YAAY,CA+Cd;AAID,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2NxB"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,YAAY,CAiDd;AAID,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyRxB"}
@@ -1,8 +1,9 @@
1
1
  import { cceMcpServer } from "../integrations/antigravity.js";
2
2
  import { TOOLCHAIN } from "../version.js";
3
3
  import { backendTemplates } from "./backend.js";
4
+ import { backendCheckScript, basicAgentGuide, deployScript, qaScript, } from "./standalone.js";
4
5
  export function projectConfig(name, options = {}) {
5
- const isScaffold = Boolean(options.scaffold);
6
+ const isScaffold = options.scaffold !== false;
6
7
  const config = {
7
8
  schemaVersion: 1,
8
9
  name,
@@ -23,19 +24,21 @@ export function projectConfig(name, options = {}) {
23
24
  preferredPort: 4173,
24
25
  },
25
26
  },
26
- cce: {
27
- enabled: !isScaffold,
28
- initialized: false,
29
- command: isScaffold ? "" : "cce init --agent all",
30
- },
31
- governor: {
32
- enabled: !isScaffold,
33
- mode: isScaffold ? "warn" : "enforce",
34
- hooks: { codex: !isScaffold, claude: !isScaffold },
35
- },
36
- telemetry: { enabled: !isScaffold },
37
27
  verifiers: [],
38
28
  };
29
+ if (!isScaffold) {
30
+ config.cce = {
31
+ enabled: true,
32
+ initialized: false,
33
+ command: "cce init --agent all",
34
+ };
35
+ config.governor = {
36
+ enabled: true,
37
+ mode: "enforce",
38
+ hooks: { codex: true, claude: true },
39
+ };
40
+ config.telemetry = { enabled: true };
41
+ }
39
42
  if (options.backend) {
40
43
  config.backend = {
41
44
  enabled: true,
@@ -48,7 +51,7 @@ export function projectConfig(name, options = {}) {
48
51
  }
49
52
  const json = (value) => `${JSON.stringify(value, null, 2)}\n`;
50
53
  export function projectTemplates(name, options = {}) {
51
- const isScaffold = Boolean(options.scaffold);
54
+ const isScaffold = options.scaffold !== false;
52
55
  const cliSpec = process.env.MOZOLE_CLI_SPEC ?? TOOLCHAIN.mozoleCli;
53
56
  const scripts = {
54
57
  build: "react-router build",
@@ -66,9 +69,13 @@ export function projectTemplates(name, options = {}) {
66
69
  "qa:visual": "mozole qa --visual",
67
70
  };
68
71
  if (options.backend) {
69
- scripts["dev:api"] = "php -S 127.0.0.1:8000 -t api";
72
+ scripts["dev:api"] = "php -S 127.0.0.1:8000 -t api api/index.php";
73
+ scripts["check:php"] = "node scripts/check-php.mjs";
74
+ scripts["build:deploy"] =
75
+ "npm run check:php && npm run build && node scripts/deploy.mjs";
70
76
  }
71
77
  const packageJson = {
78
+ engines: { node: TOOLCHAIN.node },
72
79
  name,
73
80
  private: true,
74
81
  type: "module",
@@ -96,6 +103,16 @@ export function projectTemplates(name, options = {}) {
96
103
  vitest: TOOLCHAIN.vitest,
97
104
  },
98
105
  };
106
+ if (isScaffold) {
107
+ delete packageJson.devDependencies["@mozole/cli"];
108
+ packageJson.devDependencies.playwright = TOOLCHAIN.playwright;
109
+ scripts.verify = `${options.backend ? "npm run check:php && " : ""}npm run lint && npm run typecheck && npm run test:run && npm run build`;
110
+ scripts["verify:force"] = scripts.verify;
111
+ scripts.qa = "node scripts/qa.mjs";
112
+ scripts["qa:force"] = "node scripts/qa.mjs --force";
113
+ scripts["qa:interactive"] = "node scripts/qa.mjs --interactive";
114
+ scripts["qa:visual"] = "node scripts/qa.mjs --visual";
115
+ }
99
116
  const viteConfig = options.backend
100
117
  ? 'import { reactRouter } from "@react-router/dev/vite";\nimport { defineConfig } from "vite";\n\nexport default defineConfig({\n plugins: [reactRouter()],\n server: {\n proxy: {\n "/api": {\n target: "http://127.0.0.1:8000",\n changeOrigin: true,\n },\n },\n },\n});\n'
101
118
  : 'import { reactRouter } from "@react-router/dev/vite";\nimport { defineConfig } from "vite";\n\nexport default defineConfig({ plugins: [reactRouter()] });\n';
@@ -103,7 +120,7 @@ export function projectTemplates(name, options = {}) {
103
120
  "package.json": json(packageJson),
104
121
  ".mozole/project.json": json(projectConfig(name, options)),
105
122
  ".mozole/toolchain.json": json(TOOLCHAIN),
106
- ".gitignore": "node_modules/\nbuild/\ndist/\n.react-router/\ncoverage/\n.mozole/logs/\n.mozole/qa/\n.mozole/state/\n.mozole/telemetry.json\n.cce/\n.DS_Store\n*.log\n",
123
+ ".gitignore": "node_modules/\nbuild/\ndist/\ndeploy/\ndeploy.*.tmp/\ndeploy.*.backup/\n.react-router/\ncoverage/\n.mozole/logs/\n.mozole/qa/\n.mozole/state/\n.mozole/telemetry.json\n.cce/\n.DS_Store\n*.log\n",
107
124
  ".context-engine.yaml": "retrieval:\n top_k: 20\n confidence_threshold: 0.5\ncompression:\n level: standard\n output: standard\n",
108
125
  ".agents/mcp_config.json": json({
109
126
  mcpServers: { "mozole-cce": cceMcpServer() },
@@ -112,7 +129,7 @@ export function projectTemplates(name, options = {}) {
112
129
  ".agents/workflows/mozole-verify.md": "Run `mozole verify`. If it passes or is current, report the concise result and stop. If it fails, use the actionable summary; retrieve a raw log with `mozole logs <name>` only when the summary is insufficient. Rerun only after a relevant change, unless fresh evidence was explicitly requested with `--force`.\n",
113
130
  ".agents/workflows/mozole-qa.md": "Run `mozole qa`. Use its deterministic evidence and do not capture or request screenshots. If QA passes or is current, report concisely and stop. If it fails and fixing is in scope, address confirmed evidence and rerun only after a relevant change.\n",
114
131
  ".agents/workflows/mozole-qa-interactive.md": "Run `mozole qa --interactive`. Use deterministic interaction evidence without screenshots. Fix confirmed in-scope failures, then rerun only after a relevant change. Stop when QA passes or is current.\n",
115
- ".agents/workflows/mozole-qa-visual.md": "Run `mozole qa --visual`. This workflow explicitly permits the generated visual artifacts under `.mozole/qa/`. Reuse current artifacts unless the user intentionally requests fresh capture with `--force`; inspect only the routes and viewports relevant to the task.\n",
132
+ ".agents/workflows/mozole-qa-visual.md": "Run `mozole qa --visual --reason=explicit-workflow`. This workflow explicitly permits the generated visual artifacts under `.mozole/qa/`. Reuse current artifacts unless the user intentionally requests fresh capture with `--force`; inspect only the routes and viewports relevant to the task.\n",
116
133
  ".codex/hooks.json": json({
117
134
  description: "Enforced Mozole CCE-first and token-governor hooks.",
118
135
  hooks: {
@@ -177,6 +194,7 @@ export function projectTemplates(name, options = {}) {
177
194
  includes: [
178
195
  "**",
179
196
  "!build",
197
+ "!deploy",
180
198
  "!dist",
181
199
  "!.react-router",
182
200
  "!node_modules",
@@ -208,8 +226,35 @@ export function projectTemplates(name, options = {}) {
208
226
  "docs/architecture.md": "# Architecture\n\nThe app uses React Router Framework Mode with Vite. `ssr: false` and `prerender: true` emit real HTML for every statically declared route. Static files in `build/client/` can be served beside a future PHP backend without a production Node process. Mozole fingerprints relevant inputs under `.mozole/state/`; unchanged successful verification and QA are reused, while `--force` requests fresh evidence. Codex and Claude Code use the shared root instructions; Antigravity workspace MCP, rules, and workflows live under `.agents/` and share the same CCE index.\n",
209
227
  "README.md": `# ${name}\n\nStatic-first React Router Framework Mode project generated by Mozole for Codex, Claude Code, and Google Antigravity.\n\n## Start\n\n\`\`\`sh\nnpm run dev\n\`\`\`\n\nDependencies and test tools are pre-installed by \`mozole new\`. Run \`npm run verify\` before handoff and \`npm run qa\` for screenshot-free browser checks. Unchanged successful checks are reused; use \`--force\` for intentionally fresh evidence. Visual QA is explicit only. Antigravity workspace integration is under \`.agents/\`. Production files are emitted to \`build/client/\`.\n`,
210
228
  };
229
+ if (!isScaffold) {
230
+ for (const [file, agent] of [
231
+ [".codex/hooks.json", "codex"],
232
+ [".claude/settings.json", "claude"],
233
+ ]) {
234
+ const hooks = JSON.parse(files[file] ?? "{}");
235
+ hooks.hooks.PreToolUse[0].matcher = "Bash|exec_command|.*[Rr]ead.*";
236
+ hooks.hooks.PostToolUse = [
237
+ {
238
+ matcher: "Bash|exec_command|.*cce.*|.*context_search.*|.*expand_chunk.*|.*related_context.*",
239
+ hooks: [
240
+ {
241
+ type: "command",
242
+ command: `npx --no-install mozole governor hook ${agent}`,
243
+ timeout: 10,
244
+ },
245
+ ],
246
+ },
247
+ ];
248
+ files[file] = json(hooks);
249
+ }
250
+ }
211
251
  if (options.backend) {
212
252
  Object.assign(files, backendTemplates(name));
253
+ files["scripts/check-php.mjs"] = backendCheckScript;
254
+ files["scripts/deploy.mjs"] = deployScript;
255
+ if (!isScaffold)
256
+ files["AGENTS.md"] +=
257
+ "\n## Backend\n\nPHP 8.0+ is required. Run `npm run dev:api` in a separate terminal, `npm run check:php` for syntax, and `npm run build:deploy` to assemble `deploy/`. See `docs/backend-php.md`.\n";
213
258
  }
214
259
  if (isScaffold) {
215
260
  for (const file of [
@@ -222,18 +267,24 @@ export function projectTemplates(name, options = {}) {
222
267
  ".agents/workflows/mozole-qa-visual.md",
223
268
  ".codex/hooks.json",
224
269
  ".claude/settings.json",
225
- "AGENTS.md",
226
- "CLAUDE.md",
227
270
  "docs/design-tokens.md",
228
271
  ]) {
229
272
  delete files[file];
230
273
  }
231
- files["docs/architecture.md"] = options.backend
232
- ? "# Architecture\n\nThis project is in scaffold mode: it omits Mozole CCE, governor, telemetry, and agent-integration tooling. React Router Framework Mode with `ssr: false` and `prerender: true` emits static HTML into `build/client/`. The PHP backend in `api/` serves dynamic endpoints through Vite's local dev proxy and Apache/LiteSpeed `.htaccess` rewrite rules in production.\n"
233
- : "# Architecture\n\nThis project is in scaffold mode: it omits Mozole CCE, governor, telemetry, and agent-integration tooling. React Router Framework Mode with `ssr: false` and `prerender: true` emits HTML for every declared route. Serve static files from `build/client/` on any static host.\n";
234
- files["README.md"] = options.backend
235
- ? `# ${name}\n\nStatic-first React Router Framework Mode project with native PHP backend generated by Mozole in scaffold mode.\n\n## Start\n\n\`\`\`sh\nnpm run dev\n\`\`\`\n\nIn a separate terminal, start the PHP API server:\n\n\`\`\`sh\nnpm run dev:api\n\`\`\`\n\nRun \`npm run verify\` before handoff. Production client files are emitted to \`build/client/\` and backend endpoints live in \`api/\`.\n`
236
- : `# ${name}\n\nStatic-first React Router Framework Mode project generated by Mozole in scaffold mode. CCE, governor, telemetry, and agent-integration tooling are intentionally not installed.\n\n## Start\n\n\`\`\`sh\nnpm run dev\n\`\`\`\n\nRun \`npm run verify\` before handoff. Production files are emitted to \`build/client/\`.\n`;
274
+ files["AGENTS.md"] = basicAgentGuide(Boolean(options.backend));
275
+ files["CLAUDE.md"] = "@AGENTS.md\n";
276
+ files["scripts/qa.mjs"] = qaScript;
277
+ const { cce: _cce, antigravity: _antigravity, ...plainToolchain } = TOOLCHAIN;
278
+ files[".mozole/toolchain.json"] = json(plainToolchain);
279
+ files[".gitignore"] =
280
+ "node_modules/\nbuild/\ndist/\ndeploy/\ndeploy.*.tmp/\ndeploy.*.backup/\n.react-router/\ncoverage/\n.mozole/qa/\n.DS_Store\n*.log\n";
281
+ const biome = JSON.parse(files["biome.json"] ?? "{}");
282
+ biome.files.includes = biome.files.includes.filter((entry) => entry !== "!.cce");
283
+ files["biome.json"] = json(biome);
284
+ files["docs/architecture.md"] =
285
+ "# Architecture\n\nReact Router Framework Mode with Vite emits static HTML into `build/client/`. Source routes are in `app/routes.ts`.\n";
286
+ files["README.md"] =
287
+ `# ${name}\n\nReact + Vite project with static prerendering. Requires Node.js 22+.\n\n## Development\n\nRun \`npm run dev\`, \`npm run verify\`, and \`npm run qa\`. Browser QA uses Playwright Chromium, installed during creation; reinstall with \`npx playwright install chromium\` if needed.\n${options.backend ? "\nRequires PHP 8.0+. Start `npm run dev:api` in a separate terminal. Use `npm run build:deploy` and upload the contents of `deploy/`, including `.htaccess`. See [backend setup](docs/backend-php.md).\n" : "\nDeploy the contents of `build/client/` to your static host.\n"}`;
237
288
  }
238
289
  return files;
239
290
  }
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,UAAQ,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,SAAS,UAAQ,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BnB"}
@@ -1,4 +1,4 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
1
+ import { lstat, mkdir, rename, rm, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  export async function writeFiles(root, files, overwrite = false) {
4
4
  const written = [];
@@ -8,10 +8,24 @@ export async function writeFiles(root, files, overwrite = false) {
8
8
  const target = path.join(root, ...relative.split("/"));
9
9
  await mkdir(path.dirname(target), { recursive: true });
10
10
  try {
11
- await writeFile(target, contents, {
12
- encoding: "utf8",
13
- flag: overwrite ? "w" : "wx",
14
- });
11
+ if (!overwrite) {
12
+ try {
13
+ await lstat(target);
14
+ continue;
15
+ }
16
+ catch (error) {
17
+ if (error.code !== "ENOENT")
18
+ throw error;
19
+ }
20
+ }
21
+ const temporary = `${target}.${process.pid}.tmp`;
22
+ try {
23
+ await writeFile(temporary, contents, { encoding: "utf8", flag: "wx" });
24
+ await rename(temporary, target);
25
+ }
26
+ finally {
27
+ await rm(temporary, { force: true });
28
+ }
15
29
  written.push(relative);
16
30
  }
17
31
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,KAA6B,EAC7B,SAAS,GAAG,KAAK;IAEjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE;gBAChC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;aAC7B,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS;gBACjE,MAAM,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,KAA6B,EAC7B,SAAS,GAAG,KAAK;IAEjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;oBACpB,SAAS;gBACX,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC;gBACtE,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvE,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS;gBACjE,MAAM,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAAiC,CAAC;AAE5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAoBpE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjE,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA+FtE"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAAiC,CAAC;AAE5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAoBpE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjE,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA4FtE"}
@@ -99,10 +99,8 @@ export async function runVerification(root, config, signal, onStep) {
99
99
  const resultBody = passed
100
100
  ? `VERIFY PASS\n\n${results.map((result) => `${result.name.padEnd(10)} ✓`).join("\n")}`
101
101
  : `VERIFY FAIL\n\n${results.map((result) => `${result.name.padEnd(10)} ${result.passed ? "✓" : "✗"}`).join("\n")}\n\n${results.find((result) => !result.passed)?.detail ?? "Unknown failure"}`;
102
- const body = config.mode === "scaffold"
103
- ? `${resultBody}\n\nSCAFFOLD MODE\nCCE, governor, telemetry, and agent instructions are intentionally absent.`
104
- : resultBody;
105
- if (config.telemetry.enabled)
102
+ const body = resultBody;
103
+ if (config.telemetry?.enabled)
106
104
  await updateTelemetry(root, (telemetry) => {
107
105
  telemetry.verification.runs++;
108
106
  telemetry.verification.rawChars += results.reduce((sum, result) => sum + result.rawChars, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export declare const CLI_VERSION = "1.3.2";
1
+ export declare const CLI_VERSION = "1.4.0";
2
2
  export declare const TOOLCHAIN: Readonly<{
3
3
  schemaVersion: 1;
4
- mozoleCli: "1.3.2";
4
+ mozoleCli: "1.4.0";
5
5
  node: ">=22";
6
6
  react: "19.2.8";
7
7
  reactDom: "19.2.8";
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
- export const CLI_VERSION = "1.3.2";
1
+ export const CLI_VERSION = "1.4.0";
2
2
  export const TOOLCHAIN = Object.freeze({
3
3
  schemaVersion: 1,
4
4
  mozoleCli: CLI_VERSION,