@mozole/cli 1.4.2 → 2.0.0-b
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 -89
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +204 -157
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +5 -8
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +49 -812
- 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 -149
- 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 +1 -37
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +75 -317
- 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 +148 -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 -32
- package/dist/qa/runner.d.ts.map +1 -1
- package/dist/qa/runner.js +286 -336
- 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/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 +11 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +166 -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 +19 -38
- package/CHANGELOG.md +0 -30
- 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 -39
- 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/config/project.d.ts +0 -51
- package/dist/config/project.d.ts.map +0 -1
- package/dist/config/project.js +0 -81
- 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 -129
- 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.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 -25
- package/dist/platform/process.d.ts.map +0 -1
- package/dist/platform/process.js +0 -179
- 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/diff.d.ts +0 -10
- package/dist/qa/diff.d.ts.map +0 -1
- package/dist/qa/diff.js +0 -91
- 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 -294
- package/dist/scaffold/standalone.js.map +0 -1
- package/dist/scaffold/templates.d.ts +0 -8
- package/dist/scaffold/templates.d.ts.map +0 -1
- package/dist/scaffold/templates.js +0 -312
- 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/verify/runner.d.ts +0 -15
- 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/progress.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { stderr } from "node:process";
|
|
2
|
-
export function renderProgressBar(ratio, width = 20, fillChar = "█", emptyChar = "░") {
|
|
3
|
-
const clamped = Math.max(0, Math.min(1, ratio));
|
|
4
|
-
const filledCount = Math.round(clamped * width);
|
|
5
|
-
const emptyCount = Math.max(0, width - filledCount);
|
|
6
|
-
const bar = `${fillChar.repeat(filledCount)}${emptyChar.repeat(emptyCount)}`;
|
|
7
|
-
const percent = Math.round(clamped * 100)
|
|
8
|
-
.toString()
|
|
9
|
-
.padStart(3, " ");
|
|
10
|
-
return `[${bar}] ${percent}%`;
|
|
11
|
-
}
|
|
12
|
-
export class TaskProgress {
|
|
13
|
-
total;
|
|
14
|
-
current = 0;
|
|
15
|
-
title;
|
|
16
|
-
verbose;
|
|
17
|
-
interactive;
|
|
18
|
-
output;
|
|
19
|
-
stream;
|
|
20
|
-
onUpdate;
|
|
21
|
-
startTime;
|
|
22
|
-
lastMessage = "";
|
|
23
|
-
isCleared = false;
|
|
24
|
-
constructor(options) {
|
|
25
|
-
this.total = Math.max(1, options.total);
|
|
26
|
-
this.title = options.title;
|
|
27
|
-
this.verbose = Boolean(options.verbose);
|
|
28
|
-
this.stream = options.stream ?? stderr;
|
|
29
|
-
this.interactive =
|
|
30
|
-
options.interactive ??
|
|
31
|
-
Boolean(this.stream.isTTY &&
|
|
32
|
-
!process.env.CI &&
|
|
33
|
-
process.env.TERM !== "dumb" &&
|
|
34
|
-
!process.env.NO_COLOR);
|
|
35
|
-
this.output = options.output;
|
|
36
|
-
this.onUpdate = options.onUpdate;
|
|
37
|
-
this.startTime = Date.now();
|
|
38
|
-
}
|
|
39
|
-
step(message, detail) {
|
|
40
|
-
this.current = Math.min(this.total, this.current + 1);
|
|
41
|
-
this.updateState(message, detail);
|
|
42
|
-
}
|
|
43
|
-
update(current, message, detail) {
|
|
44
|
-
this.current = Math.max(0, Math.min(this.total, current));
|
|
45
|
-
this.updateState(message, detail);
|
|
46
|
-
}
|
|
47
|
-
logVerbose(message) {
|
|
48
|
-
if (!this.verbose)
|
|
49
|
-
return;
|
|
50
|
-
const elapsed = ((Date.now() - this.startTime) / 1000).toFixed(2);
|
|
51
|
-
if (this.interactive) {
|
|
52
|
-
this.clearLine();
|
|
53
|
-
this.stream.write(`\u001B[90m[verbose +${elapsed}s]\u001B[0m ${message}\n`);
|
|
54
|
-
this.render();
|
|
55
|
-
}
|
|
56
|
-
else if (this.output) {
|
|
57
|
-
this.output.log(`[verbose +${elapsed}s] ${message}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
updateState(message, detail) {
|
|
61
|
-
this.lastMessage = message;
|
|
62
|
-
const elapsedMs = Date.now() - this.startTime;
|
|
63
|
-
const percent = Math.round((this.current / this.total) * 100);
|
|
64
|
-
if (this.onUpdate) {
|
|
65
|
-
this.onUpdate({
|
|
66
|
-
current: this.current,
|
|
67
|
-
total: this.total,
|
|
68
|
-
percent,
|
|
69
|
-
message,
|
|
70
|
-
detail,
|
|
71
|
-
elapsedMs,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
if (this.verbose) {
|
|
75
|
-
const elapsed = (elapsedMs / 1000).toFixed(2);
|
|
76
|
-
const detailPart = detail ? ` (${detail})` : "";
|
|
77
|
-
if (this.interactive) {
|
|
78
|
-
this.clearLine();
|
|
79
|
-
this.stream.write(`\u001B[36m[${this.current}/${this.total}]\u001B[0m \u001B[1m${message}\u001B[0m${detailPart} \u001B[90m(+${elapsed}s)\u001B[0m\n`);
|
|
80
|
-
}
|
|
81
|
-
else if (this.output) {
|
|
82
|
-
this.output.log(`[${this.current}/${this.total}] ${message}${detailPart} (+${elapsed}s)`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (this.interactive) {
|
|
86
|
-
this.render();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
render() {
|
|
90
|
-
if (!this.interactive || this.isCleared)
|
|
91
|
-
return;
|
|
92
|
-
const ratio = this.current / this.total;
|
|
93
|
-
const bar = renderProgressBar(ratio, 16);
|
|
94
|
-
const stepLabel = `[${this.current}/${this.total}]`;
|
|
95
|
-
const titlePart = this.title ? `${this.title} ` : "";
|
|
96
|
-
const msg = `${titlePart}${stepLabel} ${this.lastMessage}`;
|
|
97
|
-
const cols = this.stream.columns ?? 80;
|
|
98
|
-
const maxLen = Math.max(10, cols - bar.length - 4);
|
|
99
|
-
const trimmedMsg = msg.length > maxLen ? `${msg.slice(0, maxLen - 1)}…` : msg;
|
|
100
|
-
this.stream.write(`\r\u001B[2K\u001B[36m${bar}\u001B[0m ${trimmedMsg}`);
|
|
101
|
-
}
|
|
102
|
-
clearLine() {
|
|
103
|
-
if (this.interactive) {
|
|
104
|
-
this.stream.write("\r\u001B[2K");
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
done(finalSummary) {
|
|
108
|
-
if (this.isCleared)
|
|
109
|
-
return;
|
|
110
|
-
this.isCleared = true;
|
|
111
|
-
if (this.interactive) {
|
|
112
|
-
this.clearLine();
|
|
113
|
-
if (finalSummary) {
|
|
114
|
-
this.stream.write(`\u001B[32m✓\u001B[0m ${finalSummary}\n`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else if (this.verbose && finalSummary && this.output) {
|
|
118
|
-
const elapsed = ((Date.now() - this.startTime) / 1000).toFixed(2);
|
|
119
|
-
this.output.log(`✓ ${finalSummary} (${elapsed}s)`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=progress.js.map
|
package/dist/progress.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"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"}
|
package/dist/qa/diff.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface ArtifactComparison {
|
|
2
|
-
baselineFound: boolean;
|
|
3
|
-
changedPixels: number;
|
|
4
|
-
totalPixels: number;
|
|
5
|
-
ratio: number;
|
|
6
|
-
exceeded: boolean;
|
|
7
|
-
diffPath?: string | undefined;
|
|
8
|
-
}
|
|
9
|
-
export declare function compareVisualArtifact(baselinePath: string, actualBuffer: Buffer, threshold: number): Promise<ArtifactComparison>;
|
|
10
|
-
//# sourceMappingURL=diff.d.ts.map
|
package/dist/qa/diff.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/qa/diff.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAqBD,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA0E7B"}
|
package/dist/qa/diff.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { readFile, unlink, writeFile } from "node:fs/promises";
|
|
2
|
-
import pixelmatch from "pixelmatch";
|
|
3
|
-
import { PNG } from "pngjs";
|
|
4
|
-
async function removeIfPresent(filePath) {
|
|
5
|
-
try {
|
|
6
|
-
await unlink(filePath);
|
|
7
|
-
}
|
|
8
|
-
catch (error) {
|
|
9
|
-
if (error.code !== "ENOENT")
|
|
10
|
-
throw error;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function diagnosticDiff(actual) {
|
|
14
|
-
const diff = new PNG({ width: actual.width, height: actual.height });
|
|
15
|
-
for (let offset = 0; offset < diff.data.length; offset += 4) {
|
|
16
|
-
diff.data[offset] = 255;
|
|
17
|
-
diff.data[offset + 1] = 0;
|
|
18
|
-
diff.data[offset + 2] = 255;
|
|
19
|
-
diff.data[offset + 3] = 255;
|
|
20
|
-
}
|
|
21
|
-
return diff;
|
|
22
|
-
}
|
|
23
|
-
export async function compareVisualArtifact(baselinePath, actualBuffer, threshold) {
|
|
24
|
-
const diffPath = baselinePath.replace(/\.png$/i, ".diff.png");
|
|
25
|
-
let actual;
|
|
26
|
-
try {
|
|
27
|
-
actual = PNG.sync.read(actualBuffer);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return {
|
|
31
|
-
baselineFound: false,
|
|
32
|
-
changedPixels: 1,
|
|
33
|
-
totalPixels: 1,
|
|
34
|
-
ratio: 1,
|
|
35
|
-
exceeded: true,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
let baselineBuffer;
|
|
39
|
-
try {
|
|
40
|
-
baselineBuffer = await readFile(baselinePath);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
if (error.code !== "ENOENT")
|
|
44
|
-
throw error;
|
|
45
|
-
await writeFile(baselinePath, actualBuffer);
|
|
46
|
-
await removeIfPresent(diffPath);
|
|
47
|
-
return {
|
|
48
|
-
baselineFound: false,
|
|
49
|
-
changedPixels: 0,
|
|
50
|
-
totalPixels: 0,
|
|
51
|
-
ratio: 0,
|
|
52
|
-
exceeded: false,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
let changedPixels;
|
|
56
|
-
let totalPixels;
|
|
57
|
-
let diff;
|
|
58
|
-
try {
|
|
59
|
-
const baseline = PNG.sync.read(baselineBuffer);
|
|
60
|
-
totalPixels = Math.max(baseline.width * baseline.height, actual.width * actual.height);
|
|
61
|
-
if (baseline.width !== actual.width || baseline.height !== actual.height) {
|
|
62
|
-
changedPixels = totalPixels;
|
|
63
|
-
diff = diagnosticDiff(actual);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
diff = new PNG({ width: actual.width, height: actual.height });
|
|
67
|
-
changedPixels = pixelmatch(baseline.data, actual.data, diff.data, actual.width, actual.height, { threshold: 0.1 });
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
totalPixels = actual.width * actual.height;
|
|
72
|
-
changedPixels = totalPixels;
|
|
73
|
-
diff = diagnosticDiff(actual);
|
|
74
|
-
}
|
|
75
|
-
const ratio = totalPixels === 0 ? 0 : changedPixels / totalPixels;
|
|
76
|
-
const exceeded = ratio > threshold;
|
|
77
|
-
await writeFile(baselinePath, actualBuffer);
|
|
78
|
-
if (exceeded)
|
|
79
|
-
await writeFile(diffPath, PNG.sync.write(diff));
|
|
80
|
-
else
|
|
81
|
-
await removeIfPresent(diffPath);
|
|
82
|
-
return {
|
|
83
|
-
baselineFound: true,
|
|
84
|
-
changedPixels,
|
|
85
|
-
totalPixels,
|
|
86
|
-
ratio,
|
|
87
|
-
exceeded,
|
|
88
|
-
...(exceeded ? { diffPath } : {}),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=diff.js.map
|
package/dist/qa/diff.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/qa/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/qa/server.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { MozoleConfig } from "../config/project.js";
|
|
2
|
-
export interface QaServer {
|
|
3
|
-
url: string;
|
|
4
|
-
owned: boolean;
|
|
5
|
-
stop(): Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
export declare function responds(url: string): Promise<boolean>;
|
|
8
|
-
export declare function availablePort(preferred: number): Promise<number>;
|
|
9
|
-
export declare function acquireServer(root: string, config: MozoleConfig, signal?: AbortSignal): Promise<QaServer>;
|
|
10
|
-
//# sourceMappingURL=server.d.ts.map
|
package/dist/qa/server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/qa/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AACD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5D;AACD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBtE;AAcD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC,CAqFnB"}
|
package/dist/qa/server.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
-
import { createServer } from "node:net";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { npmExecutable } from "../platform/executable.js";
|
|
6
|
-
import { prepareSpawn, terminateProcess } from "../platform/process.js";
|
|
7
|
-
export async function responds(url) {
|
|
8
|
-
try {
|
|
9
|
-
const response = await fetch(url, { signal: AbortSignal.timeout(1_000) });
|
|
10
|
-
const ok = response.status < 400;
|
|
11
|
-
try {
|
|
12
|
-
await response.body?.cancel();
|
|
13
|
-
}
|
|
14
|
-
catch { }
|
|
15
|
-
return ok;
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export async function availablePort(preferred) {
|
|
22
|
-
const probe = (portToTry) => new Promise((resolve, reject) => {
|
|
23
|
-
const server = createServer();
|
|
24
|
-
server.unref();
|
|
25
|
-
server.once("error", reject);
|
|
26
|
-
server.listen(portToTry, "127.0.0.1", () => {
|
|
27
|
-
const address = server.address();
|
|
28
|
-
const port = typeof address === "object" && address ? address.port : portToTry;
|
|
29
|
-
server.close(() => resolve(port));
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
try {
|
|
33
|
-
return await probe(preferred);
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return await probe(0);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function waitForExit(child, timeout = 4_000) {
|
|
40
|
-
if (child.exitCode !== null || child.signalCode !== null)
|
|
41
|
-
return Promise.resolve();
|
|
42
|
-
return new Promise((resolve) => {
|
|
43
|
-
const timer = setTimeout(resolve, timeout);
|
|
44
|
-
child.once("close", () => {
|
|
45
|
-
clearTimeout(timer);
|
|
46
|
-
resolve();
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
export async function acquireServer(root, config, signal) {
|
|
51
|
-
signal?.throwIfAborted();
|
|
52
|
-
const port = await availablePort(config.qa.server.preferredPort);
|
|
53
|
-
const command = config.qa.server.command === "npm"
|
|
54
|
-
? npmExecutable()
|
|
55
|
-
: config.qa.server.command;
|
|
56
|
-
const args = [
|
|
57
|
-
...config.qa.server.args,
|
|
58
|
-
"--port",
|
|
59
|
-
String(port),
|
|
60
|
-
"--strictPort",
|
|
61
|
-
];
|
|
62
|
-
const prepared = prepareSpawn(command, args);
|
|
63
|
-
const child = spawn(prepared.command, prepared.args, {
|
|
64
|
-
cwd: root,
|
|
65
|
-
shell: false,
|
|
66
|
-
windowsHide: true,
|
|
67
|
-
windowsVerbatimArguments: prepared.windowsVerbatimArguments,
|
|
68
|
-
detached: process.platform !== "win32",
|
|
69
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
70
|
-
});
|
|
71
|
-
let spawnError;
|
|
72
|
-
child.once("error", (error) => {
|
|
73
|
-
spawnError = error;
|
|
74
|
-
});
|
|
75
|
-
let logs = "";
|
|
76
|
-
child.stdout
|
|
77
|
-
?.setEncoding("utf8")
|
|
78
|
-
.on("data", (chunk) => (logs += chunk));
|
|
79
|
-
child.stderr
|
|
80
|
-
?.setEncoding("utf8")
|
|
81
|
-
.on("data", (chunk) => (logs += chunk));
|
|
82
|
-
let stopPromise;
|
|
83
|
-
const stop = () => {
|
|
84
|
-
stopPromise ??= (async () => {
|
|
85
|
-
terminateProcess(child.pid);
|
|
86
|
-
await waitForExit(child, 2_000);
|
|
87
|
-
if (child.exitCode === null && child.signalCode === null) {
|
|
88
|
-
terminateProcess(child.pid, true);
|
|
89
|
-
await waitForExit(child, 2_000);
|
|
90
|
-
}
|
|
91
|
-
await mkdir(path.join(root, ".mozole", "logs"), { recursive: true });
|
|
92
|
-
await writeFile(path.join(root, ".mozole", "logs", "qa-server.log"), logs, "utf8");
|
|
93
|
-
})();
|
|
94
|
-
return stopPromise;
|
|
95
|
-
};
|
|
96
|
-
signal?.addEventListener("abort", () => void stop(), { once: true });
|
|
97
|
-
if (signal?.aborted) {
|
|
98
|
-
await stop();
|
|
99
|
-
signal.throwIfAborted();
|
|
100
|
-
}
|
|
101
|
-
const url = `http://127.0.0.1:${port}`;
|
|
102
|
-
for (let attempt = 0; attempt < 120; attempt++) {
|
|
103
|
-
if (signal?.aborted) {
|
|
104
|
-
await stop();
|
|
105
|
-
signal.throwIfAborted();
|
|
106
|
-
}
|
|
107
|
-
if (spawnError) {
|
|
108
|
-
await stop();
|
|
109
|
-
throw new Error(`Development server could not start: ${spawnError.message}. See .mozole/logs/qa-server.log`);
|
|
110
|
-
}
|
|
111
|
-
if (child.exitCode !== null) {
|
|
112
|
-
await stop();
|
|
113
|
-
throw new Error(`Development server exited before readiness. See .mozole/logs/qa-server.log`);
|
|
114
|
-
}
|
|
115
|
-
if (await responds(`${url}${config.qa.server.readinessPath}`)) {
|
|
116
|
-
if (signal?.aborted) {
|
|
117
|
-
await stop();
|
|
118
|
-
signal.throwIfAborted();
|
|
119
|
-
}
|
|
120
|
-
return { url, owned: true, stop };
|
|
121
|
-
}
|
|
122
|
-
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
123
|
-
}
|
|
124
|
-
await stop();
|
|
125
|
-
throw new Error("Development server did not become ready within 30 seconds.");
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=server.js.map
|
package/dist/qa/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/qa/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface AdoptionPlan {
|
|
2
|
-
writes: Record<string, string>;
|
|
3
|
-
removes: string[];
|
|
4
|
-
directories: string[];
|
|
5
|
-
backup?: string;
|
|
6
|
-
notes: string[];
|
|
7
|
-
}
|
|
8
|
-
export declare const json: (value: unknown) => string;
|
|
9
|
-
/** Refuse symlink traversal in files that adoption manages. Never follow it outside the project. */
|
|
10
|
-
export declare function safeRead(root: string, relative: string): Promise<string | undefined>;
|
|
11
|
-
export declare function instructionBlock(contents: string): string;
|
|
12
|
-
/** Replace every owned block; exact historical sections are removed without deleting user additions. */
|
|
13
|
-
export declare function mergeInstructions(current: string | undefined, desired: string, known?: string[]): string;
|
|
14
|
-
/** Keep unrelated handlers and top-level settings, and remove stale handlers from every event. */
|
|
15
|
-
export declare function mergeHooks(raw: string | undefined, desired: string | undefined, file: string): string | undefined;
|
|
16
|
-
export declare function canonicalPlan(root: string, templates: Record<string, string>, optimized: boolean, wasManaged: boolean, name: string, knownGuides: Record<string, string[]>): Promise<AdoptionPlan>;
|
|
17
|
-
//# sourceMappingURL=adoption.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adoption.d.ts","sourceRoot":"","sources":["../../src/scaffold/adoption.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,eAAO,MAAM,IAAI,UAAW,OAAO,KAAG,MACC,CAAC;AAExC,oGAAoG;AACpG,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAM,EAAO,GACnB,MAAM,CAkCR;AAgBD,kGAAkG;AAClG,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CA6CpB;AAoBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACpC,OAAO,CAAC,YAAY,CAAC,CAoJvB"}
|