@mozole/cli 1.2.0 → 1.2.2

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 (62) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +74 -17
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/adopt.d.ts +5 -1
  5. package/dist/commands/adopt.d.ts.map +1 -1
  6. package/dist/commands/adopt.js +166 -5
  7. package/dist/commands/adopt.js.map +1 -1
  8. package/dist/commands/cce.d.ts +5 -1
  9. package/dist/commands/cce.d.ts.map +1 -1
  10. package/dist/commands/cce.js +16 -1
  11. package/dist/commands/cce.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +5 -1
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +53 -40
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/new.d.ts +5 -1
  17. package/dist/commands/new.d.ts.map +1 -1
  18. package/dist/commands/new.js +31 -1
  19. package/dist/commands/new.js.map +1 -1
  20. package/dist/commands/qa.d.ts +4 -1
  21. package/dist/commands/qa.d.ts.map +1 -1
  22. package/dist/commands/qa.js +14 -0
  23. package/dist/commands/qa.js.map +1 -1
  24. package/dist/commands/stats.d.ts +19 -1
  25. package/dist/commands/stats.d.ts.map +1 -1
  26. package/dist/commands/stats.js +70 -12
  27. package/dist/commands/stats.js.map +1 -1
  28. package/dist/commands/ui.d.ts +9 -2
  29. package/dist/commands/ui.d.ts.map +1 -1
  30. package/dist/commands/ui.js +30 -6
  31. package/dist/commands/ui.js.map +1 -1
  32. package/dist/commands/verify.d.ts +4 -1
  33. package/dist/commands/verify.d.ts.map +1 -1
  34. package/dist/commands/verify.js +16 -1
  35. package/dist/commands/verify.js.map +1 -1
  36. package/dist/context/cce.d.ts +17 -1
  37. package/dist/context/cce.d.ts.map +1 -1
  38. package/dist/context/cce.js +158 -26
  39. package/dist/context/cce.js.map +1 -1
  40. package/dist/governor/fingerprint.d.ts.map +1 -1
  41. package/dist/governor/fingerprint.js +3 -4
  42. package/dist/governor/fingerprint.js.map +1 -1
  43. package/dist/platform/process.d.ts.map +1 -1
  44. package/dist/platform/process.js +15 -13
  45. package/dist/platform/process.js.map +1 -1
  46. package/dist/progress.d.ts +44 -0
  47. package/dist/progress.d.ts.map +1 -0
  48. package/dist/progress.js +123 -0
  49. package/dist/progress.js.map +1 -0
  50. package/dist/qa/server.d.ts.map +1 -1
  51. package/dist/qa/server.js +0 -9
  52. package/dist/qa/server.js.map +1 -1
  53. package/dist/scaffold/templates.d.ts.map +1 -1
  54. package/dist/scaffold/templates.js +7 -2
  55. package/dist/scaffold/templates.js.map +1 -1
  56. package/dist/verify/runner.d.ts +1 -1
  57. package/dist/verify/runner.d.ts.map +1 -1
  58. package/dist/verify/runner.js +6 -2
  59. package/dist/verify/runner.js.map +1 -1
  60. package/dist/version.d.ts +2 -2
  61. package/dist/version.js +1 -1
  62. package/package.json +1 -1
@@ -3,10 +3,11 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { chromium } from "playwright";
5
5
  import { findProjectRoot, readConfig } from "../config/project.js";
6
- import { cceCommand, probeCceRetrieval } from "../context/cce.js";
6
+ import { inspectCceRuntime, isBrokenUvTrampoline, probeCceRetrieval, } from "../context/cce.js";
7
7
  import { inspectAntigravityWorkspace } from "../integrations/antigravity.js";
8
8
  import { resolveExecutable } from "../platform/executable.js";
9
9
  import { run } from "../platform/process.js";
10
+ import { TaskProgress } from "../progress.js";
10
11
  async function executable(name, args = ["--version"], required = false) {
11
12
  const resolved = await resolveExecutable(name);
12
13
  if (!resolved)
@@ -39,10 +40,24 @@ function packageVersion(value, name) {
39
40
  export async function detectAntigravityRuntime(resolve = resolveExecutable) {
40
41
  return resolve("agy");
41
42
  }
42
- export async function doctorCommand(cwd, output = console) {
43
+ export async function doctorCommand(cwd, output = console, options = {}) {
44
+ const progress = new TaskProgress({
45
+ total: 6,
46
+ title: "Doctor",
47
+ verbose: options.verbose,
48
+ output,
49
+ onUpdate: options.onProgress,
50
+ });
51
+ progress.step("Probing platform & runtime executables", "Node, npm, Git");
43
52
  const node = await executable("node", ["--version"], true);
44
53
  const nodeMajor = Number(node.value?.match(/\d+/)?.[0] ?? 0);
45
54
  node.healthy = node.healthy && nodeMajor >= 22;
55
+ const npm = await executable("npm", ["--version"], true);
56
+ const git = await executable("git");
57
+ progress.logVerbose(`Node: ${node.value}, npm: ${npm.value}, git: ${git.value}`);
58
+ progress.step("Probing AI agent toolchains", "Codex, Claude Code, Antigravity");
59
+ const codex = await executable("codex");
60
+ const claude = await executable("claude");
46
61
  const antigravityPath = await detectAntigravityRuntime();
47
62
  let antigravity = {
48
63
  group: "Agents",
@@ -64,22 +79,18 @@ export async function doctorCommand(cwd, output = console) {
64
79
  required: false,
65
80
  };
66
81
  }
67
- const cceRuntime = await cceCommand();
82
+ progress.logVerbose(`Agents: Codex=${codex.healthy}, Claude=${claude.healthy}, Antigravity=${antigravity.healthy}`);
83
+ progress.step("Verifying headless browser environment", "Chromium");
84
+ progress.logVerbose("Checking Playwright Chromium executable");
85
+ const cceInspection = await inspectCceRuntime(resolveExecutable, cwd);
86
+ const cceRuntime = cceInspection.runtime;
68
87
  const cceDiagnostic = {
69
88
  group: "Context",
70
89
  name: "CCE runtime",
71
- healthy: false,
90
+ healthy: cceInspection.healthy,
91
+ value: cceInspection.value,
72
92
  required: false,
73
- ...(cceRuntime ? {} : { value: "not installed" }),
74
93
  };
75
- if (cceRuntime) {
76
- const result = await run(cceRuntime.command, [...cceRuntime.prefix, "--version"], { cwd, timeoutMs: 5_000 });
77
- cceDiagnostic.healthy = result.exitCode === 0;
78
- cceDiagnostic.value = (result.stdout || result.stderr)
79
- .trim()
80
- .split(/\r?\n/)[0]
81
- ?.slice(0, 50);
82
- }
83
94
  const diagnostics = [
84
95
  {
85
96
  group: "Platform",
@@ -96,24 +107,10 @@ export async function doctorCommand(cwd, output = console) {
96
107
  required: true,
97
108
  },
98
109
  { ...node, group: "Runtime", name: "Node" },
99
- {
100
- ...(await executable("npm", ["--version"], true)),
101
- group: "Runtime",
102
- name: "npm",
103
- },
104
- { ...(await executable("git")), group: "Runtime", name: "Git" },
105
- {
106
- ...(await executable("codex")),
107
- group: "Agents",
108
- name: "Codex",
109
- required: false,
110
- },
111
- {
112
- ...(await executable("claude")),
113
- group: "Agents",
114
- name: "Claude Code",
115
- required: false,
116
- },
110
+ { ...npm, group: "Runtime", name: "npm" },
111
+ { ...git, group: "Runtime", name: "Git" },
112
+ { ...codex, group: "Agents", name: "Codex", required: false },
113
+ { ...claude, group: "Agents", name: "Claude Code", required: false },
117
114
  antigravity,
118
115
  ];
119
116
  try {
@@ -134,14 +131,18 @@ export async function doctorCommand(cwd, output = console) {
134
131
  });
135
132
  }
136
133
  try {
134
+ progress.step("Inspecting project structure & dependencies", "package.json, configs");
137
135
  const root = await findProjectRoot(cwd);
138
136
  const mozoleConfig = await readConfig(root);
139
137
  const antigravityWorkspace = await inspectAntigravityWorkspace(root);
138
+ progress.logVerbose(`Found project root: ${root}`);
139
+ progress.step("Testing context retrieval & workspace integration", "CCE index, MCP & retrieval probe");
140
140
  const cceRequired = mozoleConfig.cce.enabled;
141
141
  let indexHealthy = !mozoleConfig.cce.enabled;
142
142
  let indexValue;
143
143
  if (mozoleConfig.cce.enabled) {
144
144
  if (cceDiagnostic.healthy && cceRuntime) {
145
+ progress.logVerbose("Checking CCE status");
145
146
  const status = await run(cceRuntime.command, [...cceRuntime.prefix, "status"], { cwd: root, timeoutMs: 5_000 });
146
147
  if (status.signal === "SIGTERM" || status.signal === "SIGKILL") {
147
148
  indexHealthy = false;
@@ -149,19 +150,27 @@ export async function doctorCommand(cwd, output = console) {
149
150
  }
150
151
  else {
151
152
  const statusText = `${status.stdout}\n${status.stderr}`;
152
- indexHealthy =
153
- status.exitCode === 0 &&
154
- !statusText.includes("Project not indexed yet") &&
155
- !statusText.includes("Not indexed yet") &&
156
- mozoleConfig.cce.initialized;
157
- if (!indexHealthy) {
158
- indexValue = "not indexed";
153
+ if (isBrokenUvTrampoline(statusText)) {
154
+ indexHealthy = false;
155
+ indexValue = "uv trampoline broken";
156
+ }
157
+ else {
158
+ indexHealthy =
159
+ status.exitCode === 0 &&
160
+ !statusText.includes("Project not indexed yet") &&
161
+ !statusText.includes("Not indexed yet") &&
162
+ mozoleConfig.cce.initialized;
163
+ if (!indexHealthy) {
164
+ indexValue = "not indexed";
165
+ }
159
166
  }
160
167
  }
161
168
  }
162
169
  else {
163
170
  indexHealthy = false;
164
- indexValue = "cce unavailable";
171
+ indexValue = cceInspection.brokenTrampoline
172
+ ? "uv trampoline broken"
173
+ : "cce unavailable";
165
174
  }
166
175
  }
167
176
  let mcpHealthy = !mozoleConfig.cce.enabled;
@@ -176,13 +185,16 @@ export async function doctorCommand(cwd, output = console) {
176
185
  if (mozoleConfig.cce.enabled) {
177
186
  if (!cceDiagnostic.healthy || !cceRuntime) {
178
187
  retrievalHealthy = false;
179
- retrievalValue = "cce unavailable";
188
+ retrievalValue = cceInspection.brokenTrampoline
189
+ ? "uv trampoline broken"
190
+ : "cce unavailable";
180
191
  }
181
192
  else if (!indexHealthy) {
182
193
  retrievalHealthy = false;
183
194
  retrievalValue = indexValue ?? "not indexed";
184
195
  }
185
196
  else {
197
+ progress.logVerbose("Probing CCE retrieval");
186
198
  const probe = await probeCceRetrieval(root, cceRuntime, 5_000);
187
199
  retrievalHealthy = probe.healthy;
188
200
  retrievalValue = probe.value;
@@ -321,6 +333,7 @@ export async function doctorCommand(cwd, output = console) {
321
333
  .filter((item) => item.required)
322
334
  .every((item) => item.healthy);
323
335
  lines.push("", `Status: ${healthy ? "HEALTHY" : "NEEDS ATTENTION"}`);
336
+ progress.done();
324
337
  output.log(lines.join("\n"));
325
338
  return healthy ? 0 : 1;
326
339
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
1
  import type { Output } from "../output.js";
2
- export declare function newCommand(name: string | undefined, cwd: string, output?: Output): Promise<number>;
2
+ import { type ProgressState } from "../progress.js";
3
+ export declare function newCommand(name: string | undefined, cwd: string, output?: Output, options?: {
4
+ verbose?: boolean | undefined;
5
+ onProgress?: ((state: ProgressState) => void) | undefined;
6
+ }): Promise<number>;
3
7
  //# sourceMappingURL=new.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CA8FjB"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAIlE,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,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,CAgIjB"}
@@ -5,9 +5,10 @@ import { cceCommand, initializeCce } from "../context/cce.js";
5
5
  import { configureAntigravityMcp } from "../integrations/antigravity.js";
6
6
  import { npmExecutable } from "../platform/executable.js";
7
7
  import { run } from "../platform/process.js";
8
+ import { TaskProgress } from "../progress.js";
8
9
  import { projectTemplates } from "../scaffold/templates.js";
9
10
  import { writeFiles } from "../scaffold/write.js";
10
- export async function newCommand(name, cwd, output = console) {
11
+ export async function newCommand(name, cwd, output = console, options = {}) {
11
12
  if (!name ||
12
13
  name === "." ||
13
14
  path.isAbsolute(name) ||
@@ -24,6 +25,13 @@ export async function newCommand(name, cwd, output = console) {
24
25
  return 2;
25
26
  }
26
27
  catch { }
28
+ const progress = new TaskProgress({
29
+ total: 6,
30
+ title: "New Project",
31
+ verbose: options.verbose,
32
+ output,
33
+ onUpdate: options.onProgress,
34
+ });
27
35
  const staging = await mkdtemp(path.join(cwd, `.mozole-${name}-`));
28
36
  const controller = new AbortController();
29
37
  const abort = () => controller.abort();
@@ -31,8 +39,12 @@ export async function newCommand(name, cwd, output = console) {
31
39
  process.once("SIGTERM", abort);
32
40
  let moved = false;
33
41
  try {
42
+ progress.step("Scaffolding project template files and configs");
43
+ progress.logVerbose(`Writing template files to staging: ${staging}`);
34
44
  await writeFiles(staging, projectTemplates(name));
35
45
  if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
46
+ progress.step("Installing package dependencies (npm install)");
47
+ progress.logVerbose("Running npm install");
36
48
  const installed = await run(npmExecutable(), ["install", "--no-fund", "--no-audit"], {
37
49
  cwd: staging,
38
50
  timeoutMs: 600_000,
@@ -42,6 +54,8 @@ export async function newCommand(name, cwd, output = console) {
42
54
  if (installed.exitCode !== 0)
43
55
  throw new Error(`npm install failed. See .mozole/logs/npm-install.log`);
44
56
  if (process.env.MOZOLE_SKIP_BROWSER !== "1") {
57
+ progress.step("Provisioning Playwright Chromium browser");
58
+ progress.logVerbose("Running playwright install chromium");
45
59
  const browser = await run(npmExecutable(), ["exec", "--", "playwright", "install", "chromium"], {
46
60
  cwd: staging,
47
61
  timeoutMs: 600_000,
@@ -51,12 +65,22 @@ export async function newCommand(name, cwd, output = console) {
51
65
  if (browser.exitCode !== 0)
52
66
  throw new Error("Chromium installation failed. See .mozole/logs/playwright-install.log");
53
67
  }
68
+ else {
69
+ progress.step("Skipping browser provisioning (MOZOLE_SKIP_BROWSER)");
70
+ }
71
+ }
72
+ else {
73
+ progress.step("Skipping dependency installation (MOZOLE_SKIP_INSTALL)");
74
+ progress.step("Skipping browser provisioning (MOZOLE_SKIP_INSTALL)");
54
75
  }
76
+ progress.step("Moving staging workspace to target directory");
55
77
  await rename(staging, target);
56
78
  moved = true;
57
79
  let cceMessage = "CCE not initialized (run `mozole cce install`, then rerun `mozole adopt`).";
58
80
  const cceRuntime = await cceCommand();
59
81
  if (process.env.MOZOLE_SKIP_CCE !== "1") {
82
+ progress.step("Initializing CCE vector index & embedding model");
83
+ progress.logVerbose("Running CCE init");
60
84
  const cce = await initializeCce(target, controller.signal, cceRuntime);
61
85
  if (controller.signal.aborted)
62
86
  throw new Error("Creation cancelled.");
@@ -66,14 +90,20 @@ export async function newCommand(name, cwd, output = console) {
66
90
  cceMessage =
67
91
  "CCE setup needs attention; see .mozole/logs/cce-init.log.";
68
92
  }
93
+ else {
94
+ progress.step("Skipping CCE initialization (MOZOLE_SKIP_CCE)");
95
+ }
96
+ progress.step("Configuring Antigravity MCP and final workspace");
69
97
  const cceLauncher = cceRuntime?.prefix.length
70
98
  ? "uvx"
71
99
  : "cce";
72
100
  await configureAntigravityMcp(target, cceLauncher, cceRuntime?.command);
101
+ progress.done(`Created ${name}`);
73
102
  output.log(`\nCreated ${name}\n${cceMessage}\n\nNext: cd ${name} && npm run verify`);
74
103
  return 0;
75
104
  }
76
105
  catch (error) {
106
+ progress.done();
77
107
  if (!moved)
78
108
  await rm(staging, { recursive: true, force: true });
79
109
  output.error(`CREATE FAIL\n\n${error instanceof Error ? error.message : String(error)}\nCleanup: ${moved ? `project remains at ${target}` : "incomplete staging directory removed"}`);
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import type { Output } from "../output.js";
2
+ import { type ProgressState } from "../progress.js";
2
3
  export declare function qaCommand(cwd: string, mode: {
3
4
  interactive: boolean;
4
5
  visual: boolean;
5
- force?: boolean;
6
+ force?: boolean | undefined;
7
+ verbose?: boolean | undefined;
8
+ onProgress?: ((state: ProgressState) => void) | undefined;
6
9
  }, output?: Output): Promise<number>;
7
10
  //# sourceMappingURL=qa.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAoC3C,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAChE,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CA+DjB"}
1
+ {"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAoClE,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3D,EACD,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAmFjB"}
@@ -3,6 +3,7 @@ import path from "node:path";
3
3
  import { findProjectRoot, readConfig } from "../config/project.js";
4
4
  import { fileFingerprint, projectFingerprint, } from "../governor/fingerprint.js";
5
5
  import { qaStateKey, readGovernorState, writeGovernorState, } from "../governor/state.js";
6
+ import { TaskProgress } from "../progress.js";
6
7
  import { runQa } from "../qa/runner.js";
7
8
  import { updateTelemetry } from "../telemetry/store.js";
8
9
  async function visualArtifactsCurrent(root, artifacts) {
@@ -32,11 +33,19 @@ async function captureArtifactState(root) {
32
33
  })));
33
34
  }
34
35
  export async function qaCommand(cwd, mode, output = console) {
36
+ const progress = new TaskProgress({
37
+ total: 3,
38
+ title: mode.visual ? "Visual QA" : "QA",
39
+ verbose: mode.verbose,
40
+ output,
41
+ onUpdate: mode.onProgress,
42
+ });
35
43
  const controller = new AbortController();
36
44
  const abort = () => controller.abort();
37
45
  process.once("SIGINT", abort);
38
46
  process.once("SIGTERM", abort);
39
47
  try {
48
+ progress.step("Checking QA cache and governor fingerprint");
40
49
  const root = await findProjectRoot(cwd);
41
50
  const config = await readConfig(root);
42
51
  const key = qaStateKey(mode);
@@ -51,6 +60,7 @@ export async function qaCommand(cwd, mode, output = console) {
51
60
  !mode.force &&
52
61
  cached?.fingerprint === fingerprint &&
53
62
  artifactsCurrent) {
63
+ progress.done();
54
64
  const reused = mode.visual ? (cached.artifacts?.length ?? 0) : 0;
55
65
  const message = mode.visual
56
66
  ? `VISUAL QA CURRENT\n\nReused ${reused} screenshot artifacts.`
@@ -65,7 +75,10 @@ export async function qaCommand(cwd, mode, output = console) {
65
75
  });
66
76
  return 0;
67
77
  }
78
+ progress.step(`Running ${mode.visual ? "visual" : "browser"} QA probes across routes and viewports`);
79
+ progress.logVerbose(`Routes: ${config.routes.join(", ")} | Viewports: ${config.qa.viewports.map((v) => `${v.width}x${v.height}`).join(", ")}`);
68
80
  const result = await runQa(root, config, mode, controller.signal);
81
+ progress.done();
69
82
  (result.passed ? output.log : output.error)(result.output);
70
83
  if (result.passed) {
71
84
  state.qa[key] = {
@@ -84,6 +97,7 @@ export async function qaCommand(cwd, mode, output = console) {
84
97
  return result.passed ? 0 : 1;
85
98
  }
86
99
  catch (error) {
100
+ progress.done();
87
101
  output.error(`QA FAIL\n\n${error instanceof Error ? error.message : String(error)}\n\nIf Chromium is missing, run: npx playwright install chromium`);
88
102
  return controller.signal.aborted ? 130 : 2;
89
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,27 @@
1
1
  import type { Output } from "../output.js";
2
+ import { type ProgressState } from "../progress.js";
2
3
  interface CceSavings {
3
4
  queries: number;
4
5
  served_tokens: number;
5
6
  full_file_tokens: number;
6
7
  tokens_saved: number;
7
8
  savings_pct: number;
9
+ buckets?: Record<string, {
10
+ baseline?: number;
11
+ served?: number;
12
+ calls?: number;
13
+ }>;
14
+ }
15
+ export interface CceRetrievalMetrics {
16
+ queries: number;
17
+ deliveredTokens: number;
18
+ baselineTokens?: number;
19
+ avoidedTokens?: number;
20
+ reductionPct?: number;
8
21
  }
9
22
  export declare function parseCceSavings(output: string): CceSavings | undefined;
23
+ export declare function cceRetrievalMetrics(savings: CceSavings): CceRetrievalMetrics;
24
+ export declare function renderCceRetrieval(savings: CceSavings): string[];
10
25
  export declare function cceSavingsInvocation(cce: {
11
26
  command: string;
12
27
  prefix: string[];
@@ -14,6 +29,9 @@ export declare function cceSavingsInvocation(cce: {
14
29
  command: string;
15
30
  args: string[];
16
31
  };
17
- export declare function statsCommand(cwd: string, output?: Output): Promise<number>;
32
+ export declare function statsCommand(cwd: string, output?: Output, options?: {
33
+ verbose?: boolean | undefined;
34
+ onProgress?: ((state: ProgressState) => void) | undefined;
35
+ }): Promise<number>;
18
36
  export {};
19
37
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAsBtE;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEtC;AACD,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAqEjB"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAUlE,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CACvD,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA2BtE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,mBAAmB,CAgC5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAShE;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEtC;AACD,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,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,CA0FjB"}
@@ -1,6 +1,7 @@
1
1
  import { findProjectRoot } from "../config/project.js";
2
2
  import { cceCommand } from "../context/cce.js";
3
3
  import { run } from "../platform/process.js";
4
+ import { TaskProgress } from "../progress.js";
4
5
  import { readTelemetry } from "../telemetry/store.js";
5
6
  function number(value) {
6
7
  return new Intl.NumberFormat("en-US", {
@@ -15,13 +16,15 @@ export function parseCceSavings(output) {
15
16
  return undefined;
16
17
  try {
17
18
  const value = JSON.parse(output.slice(start, end + 1));
18
- if (![
19
+ const fields = [
19
20
  value.queries,
20
21
  value.served_tokens,
21
22
  value.full_file_tokens,
22
23
  value.tokens_saved,
23
24
  value.savings_pct,
24
- ].every((item) => typeof item === "number" && Number.isFinite(item)))
25
+ ];
26
+ if (!Number.isInteger(value.queries) ||
27
+ !fields.every((item) => typeof item === "number" && Number.isFinite(item) && item >= 0))
25
28
  return undefined;
26
29
  return value;
27
30
  }
@@ -29,39 +32,93 @@ export function parseCceSavings(output) {
29
32
  return undefined;
30
33
  }
31
34
  }
35
+ export function cceRetrievalMetrics(savings) {
36
+ const queries = Math.max(0, Math.trunc(savings.queries));
37
+ if (queries === 0)
38
+ return { queries: 0, deliveredTokens: 0, avoidedTokens: 0 };
39
+ const deliveredTokens = Math.max(0, savings.served_tokens);
40
+ const retrieval = savings.buckets?.retrieval;
41
+ const baseline = retrieval?.baseline;
42
+ const retrievalServed = retrieval?.served;
43
+ const calls = retrieval?.calls;
44
+ const validBaseline = typeof baseline === "number" &&
45
+ Number.isFinite(baseline) &&
46
+ baseline > 0 &&
47
+ typeof retrievalServed === "number" &&
48
+ Number.isFinite(retrievalServed) &&
49
+ retrievalServed >= deliveredTokens &&
50
+ retrievalServed <= baseline &&
51
+ typeof calls === "number" &&
52
+ Number.isInteger(calls) &&
53
+ calls === queries &&
54
+ deliveredTokens <= baseline;
55
+ if (!validBaseline)
56
+ return { queries, deliveredTokens };
57
+ const avoidedTokens = baseline - deliveredTokens;
58
+ return {
59
+ queries,
60
+ deliveredTokens,
61
+ baselineTokens: baseline,
62
+ avoidedTokens,
63
+ reductionPct: (avoidedTokens / baseline) * 100,
64
+ };
65
+ }
66
+ export function renderCceRetrieval(savings) {
67
+ const metrics = cceRetrievalMetrics(savings);
68
+ return [
69
+ ` queries ${number(metrics.queries)}`,
70
+ ` delivered context ${number(metrics.deliveredTokens)} tokens`,
71
+ ` retrieval baseline ${metrics.baselineTokens === undefined ? "N/A" : `${number(metrics.baselineTokens)} tokens`}`,
72
+ ` avoided context ${metrics.avoidedTokens === undefined ? "N/A" : `${number(metrics.avoidedTokens)} tokens`}`,
73
+ ` measured reduction ${metrics.reductionPct === undefined ? "N/A" : `${metrics.reductionPct.toFixed(1)}%`}`,
74
+ ];
75
+ }
32
76
  export function cceSavingsInvocation(cce) {
33
77
  return { command: cce.command, args: [...cce.prefix, "savings", "--json"] };
34
78
  }
35
- export async function statsCommand(cwd, output = console) {
79
+ export async function statsCommand(cwd, output = console, options = {}) {
80
+ const progress = new TaskProgress({
81
+ total: 3,
82
+ title: "Stats",
83
+ verbose: options.verbose,
84
+ output,
85
+ onUpdate: options.onProgress,
86
+ });
36
87
  try {
88
+ progress.step("Locating project root and reading telemetry store");
37
89
  const root = await findProjectRoot(cwd);
38
90
  const telemetry = await readTelemetry(root);
91
+ progress.logVerbose(`Loaded telemetry: verification runs=${telemetry.verification.runs}, qa runs=${telemetry.qa.runs}`);
92
+ progress.step("Probing CCE context savings and measurements");
39
93
  const cce = await cceCommand();
40
94
  let cceLines = [];
41
95
  if (cce) {
96
+ progress.logVerbose(`Querying CCE savings from ${cce.command}`);
42
97
  const invocation = cceSavingsInvocation(cce);
43
98
  const result = await run(invocation.command, invocation.args, {
44
99
  cwd: root,
45
100
  timeoutMs: 15_000,
46
101
  });
47
102
  const savings = result.exitCode === 0 ? parseCceSavings(result.stdout) : undefined;
48
- if (savings)
49
- cceLines = [
50
- ` potential full-file context ${number(savings.full_file_tokens)} tokens`,
51
- ` delivered context ${number(savings.served_tokens)} tokens`,
52
- ` avoided context ${number(savings.tokens_saved)} tokens`,
53
- ` queries ${number(savings.queries)}`,
54
- ` measured reduction ${savings.savings_pct.toFixed(1)}%`,
55
- ];
103
+ if (savings) {
104
+ const retrieval = cceRetrievalMetrics(savings);
105
+ progress.logVerbose(`CCE retrieval: ${retrieval.queries} queries, reduction=${retrieval.reductionPct?.toFixed(1) ?? "N/A"}`);
106
+ cceLines = renderCceRetrieval(savings);
107
+ }
108
+ }
109
+ else {
110
+ progress.logVerbose("CCE not installed or available");
56
111
  }
112
+ progress.step("Calculating agent efficiency metrics and reductions");
57
113
  const suppressed = telemetry.verification.rawChars - telemetry.verification.deliveredChars;
58
114
  const reduction = telemetry.verification.rawChars
59
115
  ? (suppressed / telemetry.verification.rawChars) * 100
60
116
  : 0;
117
+ progress.done();
61
118
  output.log([
62
119
  "Mozole Agent Efficiency",
63
120
  "",
64
- "Context (CCE measured)",
121
+ "Context retrieval (CCE)",
65
122
  ...(cceLines.length
66
123
  ? cceLines
67
124
  : [" unavailable — run CCE queries to collect measurements"]),
@@ -93,6 +150,7 @@ export async function statsCommand(cwd, output = console) {
93
150
  return 0;
94
151
  }
95
152
  catch (error) {
153
+ progress.done();
96
154
  output.error(`STATS FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
97
155
  return 2;
98
156
  }