@mozole/cli 1.4.3 → 2.0.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.
- package/LICENSE +16 -4
- package/README.md +85 -112
- package/dist/cli.d.ts +3 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +231 -181
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +5 -10
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +49 -849
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -7
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +69 -377
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/new.d.ts +8 -10
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +32 -197
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/phase.d.ts +11 -0
- package/dist/commands/phase.d.ts.map +1 -0
- package/dist/commands/phase.js +106 -0
- package/dist/commands/phase.js.map +1 -0
- package/dist/commands/prototype.d.ts +6 -0
- package/dist/commands/prototype.d.ts.map +1 -0
- package/dist/commands/prototype.js +28 -0
- package/dist/commands/prototype.js.map +1 -0
- package/dist/commands/repomap.d.ts +6 -0
- package/dist/commands/repomap.d.ts.map +1 -0
- package/dist/commands/repomap.js +71 -0
- package/dist/commands/repomap.js.map +1 -0
- package/dist/commands/test.d.ts +6 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +115 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/ui.d.ts +6 -41
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +132 -459
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/verify.d.ts +12 -7
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +180 -65
- package/dist/commands/verify.js.map +1 -1
- package/dist/qa/a11y.d.ts +24 -0
- package/dist/qa/a11y.d.ts.map +1 -0
- package/dist/qa/a11y.js +124 -0
- package/dist/qa/a11y.js.map +1 -0
- package/dist/qa/breakpoints.d.ts +16 -0
- package/dist/qa/breakpoints.d.ts.map +1 -0
- package/dist/qa/breakpoints.js +45 -0
- package/dist/qa/breakpoints.js.map +1 -0
- package/dist/qa/contract.d.ts +21 -0
- package/dist/qa/contract.d.ts.map +1 -0
- package/dist/qa/contract.js +116 -0
- package/dist/qa/contract.js.map +1 -0
- package/dist/qa/index.d.ts +6 -0
- package/dist/qa/index.d.ts.map +1 -0
- package/dist/qa/index.js +6 -0
- package/dist/qa/index.js.map +1 -0
- package/dist/qa/probe.d.ts +48 -0
- package/dist/qa/probe.d.ts.map +1 -0
- package/dist/qa/probe.js +206 -0
- package/dist/qa/probe.js.map +1 -0
- package/dist/qa/runner.d.ts +27 -33
- package/dist/qa/runner.d.ts.map +1 -1
- package/dist/qa/runner.js +286 -332
- package/dist/qa/runner.js.map +1 -1
- package/dist/scaffold/agents.d.ts +5 -0
- package/dist/scaffold/agents.d.ts.map +1 -0
- package/dist/scaffold/agents.js +84 -0
- package/dist/scaffold/agents.js.map +1 -0
- package/dist/scaffold/backend.d.ts +6 -8
- package/dist/scaffold/backend.d.ts.map +1 -1
- package/dist/scaffold/backend.js +318 -199
- package/dist/scaffold/backend.js.map +1 -1
- package/dist/scaffold/design.d.ts +4 -3
- package/dist/scaffold/design.d.ts.map +1 -1
- package/dist/scaffold/design.js +38 -47
- package/dist/scaffold/design.js.map +1 -1
- package/dist/scaffold/flagship.d.ts +8 -0
- package/dist/scaffold/flagship.d.ts.map +1 -0
- package/dist/scaffold/flagship.js +337 -0
- package/dist/scaffold/flagship.js.map +1 -0
- package/dist/scaffold/index.d.ts +9 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +48 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/phases.d.ts +10 -0
- package/dist/scaffold/phases.d.ts.map +1 -0
- package/dist/scaffold/phases.js +165 -0
- package/dist/scaffold/phases.js.map +1 -0
- package/dist/scaffold/repomap.d.ts +6 -0
- package/dist/scaffold/repomap.d.ts.map +1 -0
- package/dist/scaffold/repomap.js +89 -0
- package/dist/scaffold/repomap.js.map +1 -0
- package/dist/scaffold/standard.d.ts +13 -0
- package/dist/scaffold/standard.d.ts.map +1 -0
- package/dist/scaffold/standard.js +371 -0
- package/dist/scaffold/standard.js.map +1 -0
- package/dist/scaffold/tokens.d.ts +3 -0
- package/dist/scaffold/tokens.d.ts.map +1 -0
- package/dist/scaffold/tokens.js +126 -0
- package/dist/scaffold/tokens.js.map +1 -0
- package/dist/server/manager.d.ts +23 -0
- package/dist/server/manager.d.ts.map +1 -0
- package/dist/server/manager.js +96 -0
- package/dist/server/manager.js.map +1 -0
- package/dist/ui/CockpitApp.d.ts +13 -0
- package/dist/ui/CockpitApp.d.ts.map +1 -0
- package/dist/ui/CockpitApp.js +292 -0
- package/dist/ui/CockpitApp.js.map +1 -0
- package/dist/utils/ai-trace.d.ts +8 -0
- package/dist/utils/ai-trace.d.ts.map +1 -0
- package/dist/utils/ai-trace.js +69 -0
- package/dist/utils/ai-trace.js.map +1 -0
- package/dist/utils/browser.d.ts +10 -0
- package/dist/utils/browser.d.ts.map +1 -0
- package/dist/utils/browser.js +127 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/fs.d.ts +18 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +296 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +9 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +69 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/process.d.ts +21 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +120 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/version.d.ts +21 -36
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +21 -44
- package/dist/version.js.map +1 -1
- package/package.json +22 -38
- package/CHANGELOG.md +0 -38
- package/dist/commands/cce.d.ts +0 -7
- package/dist/commands/cce.d.ts.map +0 -1
- package/dist/commands/cce.js +0 -37
- package/dist/commands/cce.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -3
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -40
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/qa.d.ts +0 -12
- package/dist/commands/qa.d.ts.map +0 -1
- package/dist/commands/qa.js +0 -143
- package/dist/commands/qa.js.map +0 -1
- package/dist/commands/stats.d.ts +0 -37
- package/dist/commands/stats.d.ts.map +0 -1
- package/dist/commands/stats.js +0 -169
- package/dist/commands/stats.js.map +0 -1
- package/dist/commands/template.d.ts +0 -8
- package/dist/commands/template.d.ts.map +0 -1
- package/dist/commands/template.js +0 -392
- package/dist/commands/template.js.map +0 -1
- package/dist/config/project.d.ts +0 -54
- package/dist/config/project.d.ts.map +0 -1
- package/dist/config/project.js +0 -100
- package/dist/config/project.js.map +0 -1
- package/dist/context/cce.d.ts +0 -39
- package/dist/context/cce.d.ts.map +0 -1
- package/dist/context/cce.js +0 -455
- package/dist/context/cce.js.map +0 -1
- package/dist/governor/fingerprint.d.ts +0 -7
- package/dist/governor/fingerprint.d.ts.map +0 -1
- package/dist/governor/fingerprint.js +0 -120
- package/dist/governor/fingerprint.js.map +0 -1
- package/dist/governor/hook.d.ts +0 -13
- package/dist/governor/hook.d.ts.map +0 -1
- package/dist/governor/hook.js +0 -389
- package/dist/governor/hook.js.map +0 -1
- package/dist/governor/state.d.ts +0 -45
- package/dist/governor/state.d.ts.map +0 -1
- package/dist/governor/state.js +0 -60
- package/dist/governor/state.js.map +0 -1
- package/dist/integrations/antigravity.d.ts +0 -20
- package/dist/integrations/antigravity.d.ts.map +0 -1
- package/dist/integrations/antigravity.js +0 -153
- package/dist/integrations/antigravity.js.map +0 -1
- package/dist/output-safety.d.ts +0 -3
- package/dist/output-safety.d.ts.map +0 -1
- package/dist/output-safety.js +0 -44
- package/dist/output-safety.js.map +0 -1
- package/dist/output.d.ts +0 -5
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -2
- package/dist/output.js.map +0 -1
- package/dist/platform/executable.d.ts +0 -11
- package/dist/platform/executable.d.ts.map +0 -1
- package/dist/platform/executable.js +0 -69
- package/dist/platform/executable.js.map +0 -1
- package/dist/platform/process.d.ts +0 -27
- package/dist/platform/process.d.ts.map +0 -1
- package/dist/platform/process.js +0 -189
- package/dist/platform/process.js.map +0 -1
- package/dist/progress.d.ts +0 -44
- package/dist/progress.d.ts.map +0 -1
- package/dist/progress.js +0 -123
- package/dist/progress.js.map +0 -1
- package/dist/qa/artifacts.d.ts +0 -3
- package/dist/qa/artifacts.d.ts.map +0 -1
- package/dist/qa/artifacts.js +0 -15
- package/dist/qa/artifacts.js.map +0 -1
- package/dist/qa/diff.d.ts +0 -10
- package/dist/qa/diff.d.ts.map +0 -1
- package/dist/qa/diff.js +0 -90
- package/dist/qa/diff.js.map +0 -1
- package/dist/qa/server.d.ts +0 -10
- package/dist/qa/server.d.ts.map +0 -1
- package/dist/qa/server.js +0 -127
- package/dist/qa/server.js.map +0 -1
- package/dist/scaffold/adoption.d.ts +0 -17
- package/dist/scaffold/adoption.d.ts.map +0 -1
- package/dist/scaffold/adoption.js +0 -279
- package/dist/scaffold/adoption.js.map +0 -1
- package/dist/scaffold/legacy.d.ts +0 -4
- package/dist/scaffold/legacy.d.ts.map +0 -1
- package/dist/scaffold/legacy.js +0 -139
- package/dist/scaffold/legacy.js.map +0 -1
- package/dist/scaffold/routes.d.ts +0 -3
- package/dist/scaffold/routes.d.ts.map +0 -1
- package/dist/scaffold/routes.js +0 -37
- package/dist/scaffold/routes.js.map +0 -1
- package/dist/scaffold/standalone.d.ts +0 -7
- package/dist/scaffold/standalone.d.ts.map +0 -1
- package/dist/scaffold/standalone.js +0 -374
- package/dist/scaffold/standalone.js.map +0 -1
- package/dist/scaffold/templates.d.ts +0 -9
- package/dist/scaffold/templates.d.ts.map +0 -1
- package/dist/scaffold/templates.js +0 -317
- package/dist/scaffold/templates.js.map +0 -1
- package/dist/scaffold/write.d.ts +0 -2
- package/dist/scaffold/write.d.ts.map +0 -1
- package/dist/scaffold/write.js +0 -38
- package/dist/scaffold/write.js.map +0 -1
- package/dist/telemetry/store.d.ts +0 -33
- package/dist/telemetry/store.d.ts.map +0 -1
- package/dist/telemetry/store.js +0 -75
- package/dist/telemetry/store.js.map +0 -1
- package/dist/template/servers.d.ts +0 -21
- package/dist/template/servers.d.ts.map +0 -1
- package/dist/template/servers.js +0 -193
- package/dist/template/servers.js.map +0 -1
- package/dist/template/workspace.d.ts +0 -23
- package/dist/template/workspace.d.ts.map +0 -1
- package/dist/template/workspace.js +0 -152
- package/dist/template/workspace.js.map +0 -1
- package/dist/verify/runner.d.ts +0 -16
- package/dist/verify/runner.d.ts.map +0 -1
- package/dist/verify/runner.js +0 -112
- package/dist/verify/runner.js.map +0 -1
- package/docs/agent-audit.md +0 -24
package/dist/commands/qa.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { access, readdir } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { findProjectRoot, readConfig } from "../config/project.js";
|
|
4
|
-
import { fileFingerprint, projectFingerprint, } from "../governor/fingerprint.js";
|
|
5
|
-
import { qaStateKey, readGovernorState, writeGovernorState, } from "../governor/state.js";
|
|
6
|
-
import { TaskProgress } from "../progress.js";
|
|
7
|
-
import { runQa } from "../qa/runner.js";
|
|
8
|
-
import { updateTelemetry } from "../telemetry/store.js";
|
|
9
|
-
async function visualArtifactsCurrent(root, artifacts) {
|
|
10
|
-
if (!artifacts?.length)
|
|
11
|
-
return false;
|
|
12
|
-
try {
|
|
13
|
-
for (const artifact of artifacts) {
|
|
14
|
-
const absolute = path.resolve(root, artifact.path);
|
|
15
|
-
if (!absolute.startsWith(`${path.resolve(root)}${path.sep}`))
|
|
16
|
-
return false;
|
|
17
|
-
await access(absolute);
|
|
18
|
-
if ((await fileFingerprint(absolute)) !== artifact.sha256)
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async function captureArtifactState(root) {
|
|
28
|
-
const directory = path.join(root, ".mozole", "qa");
|
|
29
|
-
const names = (await readdir(directory)).filter((name) => name.endsWith(".png") && !name.endsWith(".diff.png"));
|
|
30
|
-
return Promise.all(names.sort().map(async (name) => ({
|
|
31
|
-
path: path.posix.join(".mozole", "qa", name),
|
|
32
|
-
sha256: await fileFingerprint(path.join(directory, name)),
|
|
33
|
-
})));
|
|
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
|
-
});
|
|
43
|
-
const controller = new AbortController();
|
|
44
|
-
const abort = () => controller.abort();
|
|
45
|
-
process.once("SIGINT", abort);
|
|
46
|
-
process.once("SIGTERM", abort);
|
|
47
|
-
try {
|
|
48
|
-
progress.step("Preparing browser QA");
|
|
49
|
-
const root = await findProjectRoot(cwd);
|
|
50
|
-
const config = await readConfig(root);
|
|
51
|
-
const key = qaStateKey(mode);
|
|
52
|
-
const profile = mode.visual ? "visual" : "qa";
|
|
53
|
-
const fingerprint = config.governor?.enabled
|
|
54
|
-
? await projectFingerprint(root, config, profile)
|
|
55
|
-
: "";
|
|
56
|
-
const normalFingerprint = config.governor?.enabled
|
|
57
|
-
? await projectFingerprint(root, config, "qa")
|
|
58
|
-
: "";
|
|
59
|
-
const state = config.governor?.enabled
|
|
60
|
-
? await readGovernorState(root)
|
|
61
|
-
: undefined;
|
|
62
|
-
const cached = state?.qa[key];
|
|
63
|
-
const artifactsCurrent = mode.visual
|
|
64
|
-
? await visualArtifactsCurrent(root, cached?.artifacts)
|
|
65
|
-
: true;
|
|
66
|
-
if (config.governor?.enabled &&
|
|
67
|
-
!mode.force &&
|
|
68
|
-
!mode.diff &&
|
|
69
|
-
cached?.fingerprint === fingerprint &&
|
|
70
|
-
artifactsCurrent) {
|
|
71
|
-
progress.done();
|
|
72
|
-
const reused = mode.visual ? (cached.artifacts?.length ?? 0) : 0;
|
|
73
|
-
const message = mode.visual
|
|
74
|
-
? `VISUAL QA CURRENT\n\nReused ${reused} screenshot artifacts.`
|
|
75
|
-
: "QA CURRENT\n\nNo relevant changes since the last successful QA run.";
|
|
76
|
-
output.log(message);
|
|
77
|
-
if (config.telemetry?.enabled)
|
|
78
|
-
await updateTelemetry(root, (telemetry) => {
|
|
79
|
-
telemetry.qa.avoidedRuns++;
|
|
80
|
-
telemetry.qa.browserLaunchesAvoided++;
|
|
81
|
-
telemetry.qa.reusedVisualArtifacts += reused;
|
|
82
|
-
telemetry.governor.modelFacingDiagnosticChars += message.length;
|
|
83
|
-
});
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
// Visual QA hard gate: block unmotivated visual QA if routine QA already passed
|
|
87
|
-
if (mode.visual && config.governor?.enabled && state) {
|
|
88
|
-
const normalPassed = state.qa.normal?.fingerprint === normalFingerprint;
|
|
89
|
-
const visualReason = mode.reason ??
|
|
90
|
-
(process.env.MOZOLE_VISUAL_REASON ||
|
|
91
|
-
(mode.force ? "force" : undefined));
|
|
92
|
-
if (normalPassed && !visualReason) {
|
|
93
|
-
progress.done();
|
|
94
|
-
const message = 'VISUAL QA BLOCKED\n\nRoutine QA passed. Visual QA requires an explicit user request or a confirmed deterministic QA failure.\nRun routine `mozole qa` or pass --reason="<why>".';
|
|
95
|
-
output.error(message);
|
|
96
|
-
if (config.telemetry?.enabled) {
|
|
97
|
-
await updateTelemetry(root, (telemetry) => {
|
|
98
|
-
telemetry.governor.visualQaBlocked++;
|
|
99
|
-
telemetry.governor.modelFacingDiagnosticChars += message.length;
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
return 2;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
progress.step(`Running ${mode.visual ? "visual" : "browser"} QA probes across routes and viewports`);
|
|
106
|
-
progress.logVerbose(`Routes: ${config.routes.join(", ")} | Viewports: ${config.qa.viewports.map((v) => `${v.width}x${v.height}`).join(", ")}`);
|
|
107
|
-
const result = await runQa(root, config, mode, controller.signal);
|
|
108
|
-
progress.done();
|
|
109
|
-
(result.passed ? output.log : output.error)(result.output);
|
|
110
|
-
if (state && result.passed) {
|
|
111
|
-
const visualReason = mode.reason ?? process.env.MOZOLE_VISUAL_REASON;
|
|
112
|
-
if (mode.visual && visualReason && config.telemetry?.enabled) {
|
|
113
|
-
await updateTelemetry(root, (telemetry) => {
|
|
114
|
-
telemetry.governor.justifiedEscalations++;
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
state.qa[key] = {
|
|
118
|
-
fingerprint: await projectFingerprint(root, config, profile),
|
|
119
|
-
passedAt: new Date().toISOString(),
|
|
120
|
-
routes: [...config.routes],
|
|
121
|
-
viewports: config.qa.viewports.map((viewport) => `${viewport.width}x${viewport.height}`),
|
|
122
|
-
...(mode.visual ? { artifacts: await captureArtifactState(root) } : {}),
|
|
123
|
-
...(visualReason ? { reason: visualReason } : {}),
|
|
124
|
-
};
|
|
125
|
-
await writeGovernorState(root, state);
|
|
126
|
-
}
|
|
127
|
-
else if (state && cached?.fingerprint === fingerprint) {
|
|
128
|
-
delete state.qa[key];
|
|
129
|
-
await writeGovernorState(root, state);
|
|
130
|
-
}
|
|
131
|
-
return result.passed ? 0 : 1;
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
progress.done();
|
|
135
|
-
output.error(`QA FAIL\n\n${error instanceof Error ? error.message : String(error)}\n\nIf Chromium is missing, run: npx playwright install chromium`);
|
|
136
|
-
return controller.signal.aborted ? 130 : 2;
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
process.removeListener("SIGINT", abort);
|
|
140
|
-
process.removeListener("SIGTERM", abort);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=qa.js.map
|
package/dist/commands/qa.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/stats.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Output } from "../output.js";
|
|
2
|
-
import { type ProgressState } from "../progress.js";
|
|
3
|
-
interface CceSavings {
|
|
4
|
-
queries: number;
|
|
5
|
-
served_tokens: number;
|
|
6
|
-
full_file_tokens: number;
|
|
7
|
-
tokens_saved: number;
|
|
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;
|
|
21
|
-
}
|
|
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[];
|
|
25
|
-
export declare function cceSavingsInvocation(cce: {
|
|
26
|
-
command: string;
|
|
27
|
-
prefix: string[];
|
|
28
|
-
}): {
|
|
29
|
-
command: string;
|
|
30
|
-
args: string[];
|
|
31
|
-
};
|
|
32
|
-
export declare function statsCommand(cwd: string, output?: Output, options?: {
|
|
33
|
-
verbose?: boolean | undefined;
|
|
34
|
-
onProgress?: ((state: ProgressState) => void) | undefined;
|
|
35
|
-
}): Promise<number>;
|
|
36
|
-
export {};
|
|
37
|
-
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,CAqGjB"}
|
package/dist/commands/stats.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { findProjectRoot, readConfig } from "../config/project.js";
|
|
2
|
-
import { cceCommand } from "../context/cce.js";
|
|
3
|
-
import { run } from "../platform/process.js";
|
|
4
|
-
import { TaskProgress } from "../progress.js";
|
|
5
|
-
import { readTelemetry } from "../telemetry/store.js";
|
|
6
|
-
function number(value) {
|
|
7
|
-
return new Intl.NumberFormat("en-US", {
|
|
8
|
-
notation: value >= 10_000 ? "compact" : "standard",
|
|
9
|
-
maximumFractionDigits: 1,
|
|
10
|
-
}).format(value);
|
|
11
|
-
}
|
|
12
|
-
export function parseCceSavings(output) {
|
|
13
|
-
const start = output.indexOf("{");
|
|
14
|
-
const end = output.lastIndexOf("}");
|
|
15
|
-
if (start < 0 || end < start)
|
|
16
|
-
return undefined;
|
|
17
|
-
try {
|
|
18
|
-
const value = JSON.parse(output.slice(start, end + 1));
|
|
19
|
-
const fields = [
|
|
20
|
-
value.queries,
|
|
21
|
-
value.served_tokens,
|
|
22
|
-
value.full_file_tokens,
|
|
23
|
-
value.tokens_saved,
|
|
24
|
-
value.savings_pct,
|
|
25
|
-
];
|
|
26
|
-
if (!Number.isInteger(value.queries) ||
|
|
27
|
-
!fields.every((item) => typeof item === "number" && Number.isFinite(item) && item >= 0))
|
|
28
|
-
return undefined;
|
|
29
|
-
return value;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
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
|
-
}
|
|
76
|
-
export function cceSavingsInvocation(cce) {
|
|
77
|
-
return { command: cce.command, args: [...cce.prefix, "savings", "--json"] };
|
|
78
|
-
}
|
|
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
|
-
});
|
|
87
|
-
try {
|
|
88
|
-
progress.step("Locating project root and reading telemetry store");
|
|
89
|
-
const root = await findProjectRoot(cwd);
|
|
90
|
-
if (!(await readConfig(root)).telemetry?.enabled) {
|
|
91
|
-
progress.done();
|
|
92
|
-
output.log("Statistics are not enabled for this project.");
|
|
93
|
-
return 0;
|
|
94
|
-
}
|
|
95
|
-
const telemetry = await readTelemetry(root);
|
|
96
|
-
progress.logVerbose(`Loaded telemetry: verification runs=${telemetry.verification.runs}, qa runs=${telemetry.qa.runs}`);
|
|
97
|
-
progress.step("Probing CCE context savings and measurements");
|
|
98
|
-
const cce = await cceCommand();
|
|
99
|
-
let cceLines = [];
|
|
100
|
-
if (cce) {
|
|
101
|
-
progress.logVerbose(`Querying CCE savings from ${cce.command}`);
|
|
102
|
-
const invocation = cceSavingsInvocation(cce);
|
|
103
|
-
const result = await run(invocation.command, invocation.args, {
|
|
104
|
-
cwd: root,
|
|
105
|
-
timeoutMs: 15_000,
|
|
106
|
-
});
|
|
107
|
-
const savings = result.exitCode === 0 ? parseCceSavings(result.stdout) : undefined;
|
|
108
|
-
if (savings) {
|
|
109
|
-
const retrieval = cceRetrievalMetrics(savings);
|
|
110
|
-
progress.logVerbose(`CCE retrieval: ${retrieval.queries} queries, reduction=${retrieval.reductionPct?.toFixed(1) ?? "N/A"}`);
|
|
111
|
-
cceLines = renderCceRetrieval(savings);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
progress.logVerbose("CCE not installed or available");
|
|
116
|
-
}
|
|
117
|
-
progress.step("Calculating agent efficiency metrics and reductions");
|
|
118
|
-
const suppressed = telemetry.verification.rawChars - telemetry.verification.deliveredChars;
|
|
119
|
-
const reduction = telemetry.verification.rawChars
|
|
120
|
-
? (suppressed / telemetry.verification.rawChars) * 100
|
|
121
|
-
: 0;
|
|
122
|
-
progress.done();
|
|
123
|
-
output.log([
|
|
124
|
-
"Mozole Agent Efficiency",
|
|
125
|
-
"",
|
|
126
|
-
"Context retrieval (CCE)",
|
|
127
|
-
...(cceLines.length
|
|
128
|
-
? cceLines
|
|
129
|
-
: [" unavailable — run CCE queries to collect measurements"]),
|
|
130
|
-
"",
|
|
131
|
-
"Verification (measured)",
|
|
132
|
-
` runs ${telemetry.verification.runs}`,
|
|
133
|
-
` raw output ${number(telemetry.verification.rawChars)} chars`,
|
|
134
|
-
` delivered output ${number(telemetry.verification.deliveredChars)} chars`,
|
|
135
|
-
` suppressed output ${number(Math.max(0, suppressed))} chars`,
|
|
136
|
-
` reruns avoided ${telemetry.verification.avoidedRuns}`,
|
|
137
|
-
` output reduction ${reduction.toFixed(1)}%`,
|
|
138
|
-
"",
|
|
139
|
-
"QA (measured)",
|
|
140
|
-
` runs ${telemetry.qa.runs}`,
|
|
141
|
-
` probes ${telemetry.qa.probes}`,
|
|
142
|
-
` screenshots ${telemetry.qa.screenshots}`,
|
|
143
|
-
` non-visual runs ${telemetry.qa.runs - telemetry.qa.visualRuns}`,
|
|
144
|
-
` reruns avoided ${telemetry.qa.avoidedRuns}`,
|
|
145
|
-
` browser launches saved ${telemetry.qa.browserLaunchesAvoided}`,
|
|
146
|
-
` visual artifacts reused ${telemetry.qa.reusedVisualArtifacts}`,
|
|
147
|
-
"",
|
|
148
|
-
"Governor (enforced)",
|
|
149
|
-
` full reads blocked after CCE ${telemetry.governor.fullReadsBlockedAfterCce}`,
|
|
150
|
-
` repeated reads blocked ${telemetry.governor.repeatedReadsBlocked}`,
|
|
151
|
-
` visual QA blocked ${telemetry.governor.visualQaBlocked}`,
|
|
152
|
-
` redundant verify blocked ${telemetry.governor.redundantVerifyBlocked}`,
|
|
153
|
-
` redundant QA blocked ${telemetry.governor.redundantQaBlocked}`,
|
|
154
|
-
` justified escalations ${telemetry.governor.justifiedEscalations}`,
|
|
155
|
-
` repeated-read warnings ${telemetry.governor.repeatedReadWarnings}`,
|
|
156
|
-
` repeated-work warnings ${telemetry.governor.repeatedWorkWarnings}`,
|
|
157
|
-
` diagnostic payload ${number(telemetry.governor.modelFacingDiagnosticChars)} chars`,
|
|
158
|
-
"",
|
|
159
|
-
"No billing or model-token savings are inferred from character counts.",
|
|
160
|
-
].join("\n"));
|
|
161
|
-
return 0;
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
progress.done();
|
|
165
|
-
output.error(`STATS FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
|
|
166
|
-
return 2;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=stats.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Output } from "../output.js";
|
|
2
|
-
export declare function templateInitCommand(target: string | undefined, cwd: string, output?: Output): Promise<number>;
|
|
3
|
-
export declare function templateListCommand(cwd: string, output?: Output): Promise<number>;
|
|
4
|
-
export declare function templateAdoptCommand(input: string | undefined, cwd: string, output?: Output, options?: {
|
|
5
|
-
cceInstall?: boolean | undefined;
|
|
6
|
-
verbose?: boolean | undefined;
|
|
7
|
-
}): Promise<number>;
|
|
8
|
-
//# sourceMappingURL=template.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CA+EjB;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAwOD,wBAAsB,oBAAoB,CACxC,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;CAC1B,GACL,OAAO,CAAC,MAAM,CAAC,CA0KjB"}
|