@jevitate/cli 0.2.0 → 0.3.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/dist/ai-cli.d.ts +31 -11
- package/dist/ai-cli.js +100 -67
- package/dist/ai-cli.js.map +1 -1
- package/dist/author-journey-cli.js +3 -1
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +48218 -39969
- package/dist/browser-run-options.d.ts +32 -1
- package/dist/browser-run-options.js +69 -0
- package/dist/browser-run-options.js.map +1 -1
- package/dist/build-info.generated.js +2 -2
- package/dist/campaign-api.d.ts +151 -0
- package/dist/campaign-api.js +446 -0
- package/dist/campaign-api.js.map +1 -0
- package/dist/campaign-cli.d.ts +6 -0
- package/dist/campaign-cli.js +66 -0
- package/dist/campaign-cli.js.map +1 -0
- package/dist/check-api.js +3 -2
- package/dist/check-api.js.map +1 -1
- package/dist/check-budget.js +2 -1
- package/dist/check-budget.js.map +1 -1
- package/dist/check-execute.d.ts +4 -0
- package/dist/check-execute.js +41 -6
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.d.ts +5 -0
- package/dist/check-plan.js +72 -4
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.d.ts +14 -1
- package/dist/check-suite.js +26 -1
- package/dist/check-suite.js.map +1 -1
- package/dist/cli-output.d.ts +4 -0
- package/dist/cli-output.js +52 -5
- package/dist/cli-output.js.map +1 -1
- package/dist/cli-shared.d.ts +13 -3
- package/dist/cli-shared.js +52 -7
- package/dist/cli-shared.js.map +1 -1
- package/dist/defect-evidence.js +6 -3
- package/dist/defect-evidence.js.map +1 -1
- package/dist/demo-aspect-api.js +2 -1
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/demo-aspect-cli.js +3 -1
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/demo-capture.d.ts +37 -3
- package/dist/demo-capture.js +119 -20
- package/dist/demo-capture.js.map +1 -1
- package/dist/explore-adversarial.d.ts +11 -4
- package/dist/explore-adversarial.js +21 -12
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-cli.js +262 -26
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-coverage.d.ts +17 -2
- package/dist/explore-coverage.js +19 -13
- package/dist/explore-coverage.js.map +1 -1
- package/dist/explore-feature.d.ts +0 -2
- package/dist/explore-feature.js +6 -8
- package/dist/explore-feature.js.map +1 -1
- package/dist/explore-goal.d.ts +25 -7
- package/dist/explore-goal.js +61 -18
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-shared.d.ts +27 -2
- package/dist/explore-shared.js +21 -1
- package/dist/explore-shared.js.map +1 -1
- package/dist/fixture-auth.d.ts +13 -2
- package/dist/fixture-auth.js +19 -6
- package/dist/fixture-auth.js.map +1 -1
- package/dist/fixture-cli.d.ts +29 -0
- package/dist/fixture-cli.js +121 -7
- package/dist/fixture-cli.js.map +1 -1
- package/dist/github-issue-filer.js +2 -1
- package/dist/github-issue-filer.js.map +1 -1
- package/dist/host-health-run.d.ts +2 -1
- package/dist/host-health-run.js +8 -2
- package/dist/host-health-run.js.map +1 -1
- package/dist/init-cli.js +34 -5
- package/dist/init-cli.js.map +1 -1
- package/dist/init-keys.d.ts +11 -0
- package/dist/init-keys.js +5 -2
- package/dist/init-keys.js.map +1 -1
- package/dist/journey-annotate-api.js +17 -4
- package/dist/journey-annotate-api.js.map +1 -1
- package/dist/journey-annotate-cli.js +3 -1
- package/dist/journey-annotate-cli.js.map +1 -1
- package/dist/journey-api.d.ts +26 -1
- package/dist/journey-api.js +51 -25
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +1 -1
- package/dist/journey-cli.js +44 -3
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-api.d.ts +2 -0
- package/dist/journey-demo-api.js +23 -10
- package/dist/journey-demo-api.js.map +1 -1
- package/dist/journey-demo-cli.js +5 -2
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-prefix.d.ts +194 -0
- package/dist/journey-prefix.js +279 -0
- package/dist/journey-prefix.js.map +1 -0
- package/dist/key-report.d.ts +49 -0
- package/dist/key-report.js +101 -0
- package/dist/key-report.js.map +1 -0
- package/dist/kill-signal.js +0 -1
- package/dist/kill-signal.js.map +1 -1
- package/dist/ledger-api.js +3 -1
- package/dist/ledger-api.js.map +1 -1
- package/dist/log-correlation.d.ts +54 -1
- package/dist/log-correlation.js +83 -14
- package/dist/log-correlation.js.map +1 -1
- package/dist/log-sources.js +6 -5
- package/dist/log-sources.js.map +1 -1
- package/dist/log-trace.d.ts +80 -0
- package/dist/log-trace.js +210 -0
- package/dist/log-trace.js.map +1 -0
- package/dist/logs-retention.js +2 -1
- package/dist/logs-retention.js.map +1 -1
- package/dist/masked-input.d.ts +22 -0
- package/dist/masked-input.js +99 -0
- package/dist/masked-input.js.map +1 -0
- package/dist/mcp-api.d.ts +3 -1
- package/dist/mcp-api.js +49 -7
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-args.d.ts +12 -0
- package/dist/mcp-args.js +33 -0
- package/dist/mcp-args.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +5 -1
- package/dist/mcp-cli-tools.js +73 -16
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mission-api.js +2 -1
- package/dist/mission-api.js.map +1 -1
- package/dist/mission-cli.js +2 -1
- package/dist/mission-cli.js.map +1 -1
- package/dist/mission-fixtures.d.ts +10 -1
- package/dist/mission-fixtures.js +49 -15
- package/dist/mission-fixtures.js.map +1 -1
- package/dist/mission-queue-runner.js +11 -2
- package/dist/mission-queue-runner.js.map +1 -1
- package/dist/multi-run-cli.js +7 -1
- package/dist/multi-run-cli.js.map +1 -1
- package/dist/openrouter-call.js +3 -2
- package/dist/openrouter-call.js.map +1 -1
- package/dist/program.js +4 -0
- package/dist/program.js.map +1 -1
- package/dist/project-dir.js +3 -2
- package/dist/project-dir.js.map +1 -1
- package/dist/record-api.d.ts +3 -1
- package/dist/record-api.js +5 -2
- package/dist/record-api.js.map +1 -1
- package/dist/record-cli.js +14 -2
- package/dist/record-cli.js.map +1 -1
- package/dist/regression-api.d.ts +6 -0
- package/dist/regression-api.js +4 -2
- package/dist/regression-api.js.map +1 -1
- package/dist/regression-cli.js +56 -4
- package/dist/regression-cli.js.map +1 -1
- package/dist/report-api.js +2 -1
- package/dist/report-api.js.map +1 -1
- package/dist/resource-preflight.d.ts +87 -0
- package/dist/resource-preflight.js +160 -0
- package/dist/resource-preflight.js.map +1 -0
- package/dist/result-schema.d.ts +1 -1
- package/dist/result-schema.js +1 -1
- package/dist/run-key-preflight.d.ts +42 -0
- package/dist/run-key-preflight.js +82 -0
- package/dist/run-key-preflight.js.map +1 -0
- package/dist/run-screenshots.js +11 -5
- package/dist/run-screenshots.js.map +1 -1
- package/dist/runtime-env.js +3 -2
- package/dist/runtime-env.js.map +1 -1
- package/dist/server-log-verify.d.ts +2 -0
- package/dist/server-log-verify.js +8 -3
- package/dist/server-log-verify.js.map +1 -1
- package/dist/site-gate-cli.js +2 -1
- package/dist/site-gate-cli.js.map +1 -1
- package/dist/source-api.js +2 -1
- package/dist/source-api.js.map +1 -1
- package/dist/suite-explore-options.d.ts +32 -0
- package/dist/suite-explore-options.js +22 -0
- package/dist/suite-explore-options.js.map +1 -1
- package/dist/target-config.d.ts +6 -0
- package/dist/target-config.js +9 -0
- package/dist/target-config.js.map +1 -1
- package/dist/type-fixture-file.d.ts +9 -0
- package/dist/type-fixture-file.js +48 -0
- package/dist/type-fixture-file.js.map +1 -0
- package/dist/ui-api.js +4 -3
- package/dist/ui-api.js.map +1 -1
- package/dist/usability-capture.js +4 -3
- package/dist/usability-capture.js.map +1 -1
- package/dist/usage-config.d.ts +1 -1
- package/dist/usage-config.js +1 -1
- package/dist/ux-claim-probe.d.ts +45 -0
- package/dist/ux-claim-probe.js +386 -0
- package/dist/ux-claim-probe.js.map +1 -0
- package/dist/ux-cli.js +8 -1
- package/dist/ux-cli.js.map +1 -1
- package/dist/ux-product.d.ts +14 -0
- package/dist/ux-product.js +39 -0
- package/dist/ux-product.js.map +1 -0
- package/dist/ux-review.d.ts +4 -0
- package/dist/ux-review.js +27 -7
- package/dist/ux-review.js.map +1 -1
- package/dist/ux-usability.d.ts +34 -9
- package/dist/ux-usability.js +100 -14
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-api.d.ts +21 -0
- package/dist/verify-fix-api.js +85 -33
- package/dist/verify-fix-api.js.map +1 -1
- package/dist/verify-fix-cli.js +7 -2
- package/dist/verify-fix-cli.js.map +1 -1
- package/package.json +9 -9
- package/skills/jevitate-explore/SKILL.md +8 -0
- package/skills/jevitate-getting-started/SKILL.md +2 -1
- package/skills/jevitate-test-campaign/SKILL.md +203 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { hostname } from "node:os";
|
|
2
|
+
import { cleanupOrphanBrowsers, jevitateBrowsers, sharedResourceGovernor, } from "@jevitate/playwright";
|
|
3
|
+
import { fail, ok } from "./envelope.js";
|
|
4
|
+
import { emitJsonOrRefusal } from "./cli-refusal.js";
|
|
5
|
+
/** The run's `ResourceLimits` from its flags, or undefined when none was given. */
|
|
6
|
+
export function resourceLimitsFromFlags(o) {
|
|
7
|
+
const limits = {
|
|
8
|
+
...(o.maxBrowsers === undefined ? {} : { maxBrowsers: o.maxBrowsers }),
|
|
9
|
+
...(o.maxBrowserMemory === undefined ? {} : { memoryCeilingBytes: o.maxBrowserMemory * 1024 ** 2 }),
|
|
10
|
+
};
|
|
11
|
+
return Object.keys(limits).length > 0 ? limits : undefined;
|
|
12
|
+
}
|
|
13
|
+
let swept = false;
|
|
14
|
+
/** Test seam: forget that this process already swept (the sweep runs once per process). */
|
|
15
|
+
export function resetPreflightSweep() {
|
|
16
|
+
swept = false;
|
|
17
|
+
}
|
|
18
|
+
/** The startup sweep: closes orphaned jevitate browsers and clears stale machine slots (once per process). */
|
|
19
|
+
export async function sweepOnce(deps = {}) {
|
|
20
|
+
if (swept)
|
|
21
|
+
return;
|
|
22
|
+
swept = true;
|
|
23
|
+
const governor = deps.governor ?? sharedResourceGovernor();
|
|
24
|
+
const warn = deps.warn ?? ((line) => process.stderr.write(line));
|
|
25
|
+
try {
|
|
26
|
+
const cleanup = await cleanupOrphanBrowsers({ ...(deps.processTable === undefined ? {} : { table: deps.processTable }) });
|
|
27
|
+
const closed = cleanup.orphans.filter((o) => o.result === "terminated" || o.result === "killed");
|
|
28
|
+
if (closed.length > 0)
|
|
29
|
+
warn(`jevitate: closed ${closed.length} orphaned browser process(es) left by a jevitate that exited: pid ${closed.map((o) => o.pid).join(", ")}\n`);
|
|
30
|
+
governor.slots.clearStale();
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
// Housekeeping, not the run's business: reported, and the run goes on.
|
|
34
|
+
warn(`warning: orphan cleanup skipped: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The pre-run checks; returns the refusal envelope when the run must not start (`E_HOST_STARVED`),
|
|
39
|
+
* else null.
|
|
40
|
+
*/
|
|
41
|
+
export async function resourcePreflight(o, deps = {}) {
|
|
42
|
+
const governor = deps.governor ?? sharedResourceGovernor();
|
|
43
|
+
if (!governor.config.enabled)
|
|
44
|
+
return null;
|
|
45
|
+
await sweepOnce({ ...deps, governor });
|
|
46
|
+
const decision = await governor.decide();
|
|
47
|
+
if (decision.level !== "starved" || o.ignoreHostLoad === true)
|
|
48
|
+
return null;
|
|
49
|
+
return fail("E_HOST_STARVED", `the host is starved (${decision.reasons.join("; ")}): a browser run now would only time out and read as the app hanging, so it did not start. ` +
|
|
50
|
+
"Wait for the load to drop (see `jevitate doctor`), or pass --ignore-host-load to run anyway (throttled; the result records it)");
|
|
51
|
+
}
|
|
52
|
+
function rootOf(cmd) {
|
|
53
|
+
let c = cmd;
|
|
54
|
+
while (c.parent !== null)
|
|
55
|
+
c = c.parent;
|
|
56
|
+
return c;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Installs the pre-run checks on a browser-driving command: its action (registered AFTER this, by
|
|
60
|
+
* the command's own `.action(...)`) runs only when `resourcePreflight` lets it; a refusal is emitted
|
|
61
|
+
* through the shared refusal path and the action never runs.
|
|
62
|
+
*/
|
|
63
|
+
export function withResourcePreflight(cmd, deps = {}) {
|
|
64
|
+
const register = cmd.action.bind(cmd);
|
|
65
|
+
cmd.action = (fn) => register(async function (...args) {
|
|
66
|
+
const refusal = await resourcePreflight(this.opts(), deps);
|
|
67
|
+
if (refusal !== null) {
|
|
68
|
+
emitJsonOrRefusal(rootOf(this), refusal);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
await fn.apply(this, args);
|
|
72
|
+
});
|
|
73
|
+
return cmd;
|
|
74
|
+
}
|
|
75
|
+
const slotRow = (s) => ({
|
|
76
|
+
index: s.index,
|
|
77
|
+
pid: s.holder?.pid ?? null,
|
|
78
|
+
host: s.holder?.host ?? null,
|
|
79
|
+
acquiredAt: s.holder?.acquiredAt ?? null,
|
|
80
|
+
stale: s.stale,
|
|
81
|
+
});
|
|
82
|
+
/** `jevitate doctor`'s report; with `cleanup`, orphaned browsers are closed and stale slots cleared first. */
|
|
83
|
+
export async function doctorReport(opts = {}) {
|
|
84
|
+
const governor = opts.governor ?? sharedResourceGovernor();
|
|
85
|
+
const table = opts.processTable;
|
|
86
|
+
let cleanup;
|
|
87
|
+
if (opts.cleanup === true) {
|
|
88
|
+
const orphans = await cleanupOrphanBrowsers({ ...(table === undefined ? {} : { table }) });
|
|
89
|
+
const cleared = governor.slots.clearStale();
|
|
90
|
+
cleanup = { orphans: orphans.orphans, staleSlotsCleared: cleared.length };
|
|
91
|
+
}
|
|
92
|
+
const decision = await governor.decide();
|
|
93
|
+
const browsers = jevitateBrowsers(...(table === undefined ? [] : [table]));
|
|
94
|
+
return {
|
|
95
|
+
host: hostname(),
|
|
96
|
+
governance: { enabled: governor.config.enabled, maxBrowsers: governor.config.maxBrowsers, memoryCeilingBytes: governor.config.memoryCeilingBytes },
|
|
97
|
+
load: {
|
|
98
|
+
level: decision.level,
|
|
99
|
+
reasons: decision.reasons,
|
|
100
|
+
loadPerCore: decision.sample.loadPerCore ?? null,
|
|
101
|
+
memAvailableBytes: decision.sample.memAvailableBytes ?? null,
|
|
102
|
+
},
|
|
103
|
+
slots: governor.slots.list().map(slotRow),
|
|
104
|
+
browsers: browsers === undefined ? null : browsers.map((b) => ({ pid: b.pid, ownerPid: b.owner.pid, orphan: b.orphan })),
|
|
105
|
+
...(cleanup === undefined ? {} : { cleanup }),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const mib = (n) => `${Math.round(n / 1024 ** 2)} MiB`;
|
|
109
|
+
/** The human `jevitate doctor` text. */
|
|
110
|
+
export function formatDoctor(r) {
|
|
111
|
+
const lines = [];
|
|
112
|
+
const g = r.governance;
|
|
113
|
+
lines.push(`resource governance: ${g.enabled ? "on" : "off (JEVITATE_RESOURCE_GOVERNANCE=off)"} · max browsers ${g.maxBrowsers} · memory ceiling ${g.memoryCeilingBytes === null ? "off" : mib(g.memoryCeilingBytes)}`);
|
|
114
|
+
const load = [
|
|
115
|
+
r.load.loadPerCore === null ? null : `load ${r.load.loadPerCore.toFixed(2)}/core`,
|
|
116
|
+
r.load.memAvailableBytes === null ? null : `${mib(r.load.memAvailableBytes)} available`,
|
|
117
|
+
].filter((x) => x !== null);
|
|
118
|
+
lines.push(`host: ${r.load.level}${load.length === 0 ? "" : ` (${load.join(", ")})`}${r.load.reasons.length === 0 ? "" : ` — ${r.load.reasons.join("; ")}`}`);
|
|
119
|
+
lines.push(`machine browser slots held: ${r.slots.length}`);
|
|
120
|
+
for (const s of r.slots)
|
|
121
|
+
lines.push(` slot ${s.index}: ${s.pid === null ? "unreadable" : `pid ${s.pid} on ${s.host}`}${s.stale === null ? "" : ` — stale: ${s.stale}`}`);
|
|
122
|
+
if (r.browsers === null)
|
|
123
|
+
lines.push("jevitate browsers: not listed (no process reader on this platform)");
|
|
124
|
+
else {
|
|
125
|
+
const orphans = r.browsers.filter((b) => b.orphan !== null);
|
|
126
|
+
lines.push(`jevitate browsers: ${r.browsers.length} running, ${orphans.length} orphaned`);
|
|
127
|
+
for (const b of orphans)
|
|
128
|
+
lines.push(` pid ${b.pid}: ${b.orphan}`);
|
|
129
|
+
}
|
|
130
|
+
if (r.cleanup !== undefined) {
|
|
131
|
+
const closed = r.cleanup.orphans.filter((o) => o.result === "terminated" || o.result === "killed").length;
|
|
132
|
+
lines.push(`cleanup: closed ${closed} orphaned browser(s), cleared ${r.cleanup.staleSlotsCleared} stale slot(s)`);
|
|
133
|
+
}
|
|
134
|
+
else if (r.browsers?.some((b) => b.orphan !== null) === true || r.slots.some((s) => s.stale !== null)) {
|
|
135
|
+
lines.push("next: jevitate doctor --cleanup");
|
|
136
|
+
}
|
|
137
|
+
return `${lines.join("\n")}\n`;
|
|
138
|
+
}
|
|
139
|
+
/** Registers `jevitate doctor [--cleanup] [--json]`. */
|
|
140
|
+
export function registerDoctorCommand(program, deps = {}) {
|
|
141
|
+
program
|
|
142
|
+
.command("doctor")
|
|
143
|
+
.description("resource governance on this machine (#205): host load, machine-wide browser slots, jevitate browsers and orphans left by a killed run")
|
|
144
|
+
.option("--cleanup", "close orphaned jevitate browsers (only processes jevitate launched, whose jevitate exited) and clear stale browser slots")
|
|
145
|
+
.option("--json", "emit a JSON envelope")
|
|
146
|
+
.action(async function () {
|
|
147
|
+
const o = this.opts();
|
|
148
|
+
try {
|
|
149
|
+
const report = await doctorReport({ ...deps, ...(o.cleanup === true ? { cleanup: true } : {}) });
|
|
150
|
+
if (o.json === true)
|
|
151
|
+
emitJsonOrRefusal(program, ok(report));
|
|
152
|
+
else
|
|
153
|
+
program.configureOutput().writeOut?.(formatDoctor(report));
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
emitJsonOrRefusal(program, fail("E_DOCTOR", err instanceof Error ? err.message : String(err)));
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=resource-preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-preflight.js","sourceRoot":"","sources":["../src/resource-preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/result-schema.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type AdvisoryServerLogDefect = ServerLogDefect & {
|
|
|
13
13
|
/**
|
|
14
14
|
* All of a run's defects in ONE list (#195): the strategy's own (hard-signal / declared-invariant)
|
|
15
15
|
* defects first, then its `server-log` defects — each fingerprint once. What `defects` holds on every
|
|
16
|
-
* strategy's result
|
|
16
|
+
* strategy's result (the 0.2.0 `serverLogDefects` alias of the server-log subset was removed in 0.3.0).
|
|
17
17
|
*/
|
|
18
18
|
export declare function unifiedDefects<D extends {
|
|
19
19
|
readonly fingerprint: string;
|
package/dist/result-schema.js
CHANGED
|
@@ -8,7 +8,7 @@ export { MISSION_RESULT_SCHEMA_VERSION, MissionResultSchema, PersistedMissionRes
|
|
|
8
8
|
/**
|
|
9
9
|
* All of a run's defects in ONE list (#195): the strategy's own (hard-signal / declared-invariant)
|
|
10
10
|
* defects first, then its `server-log` defects — each fingerprint once. What `defects` holds on every
|
|
11
|
-
* strategy's result
|
|
11
|
+
* strategy's result (the 0.2.0 `serverLogDefects` alias of the server-log subset was removed in 0.3.0).
|
|
12
12
|
*/
|
|
13
13
|
export function unifiedDefects(own, serverLog) {
|
|
14
14
|
const seen = new Set();
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { MissingCredentialError, type CredentialKey, type CredentialStore, type Feature, type VerifyFetch } from "@jevitate/ai-core";
|
|
2
|
+
/**
|
|
3
|
+
* #291 (runs): a run that needs live AI keys (`explore --real`, `check`, `journey run/annotate/demo
|
|
4
|
+
* --real`, `demo`, `ux`, …) verifies them ONCE at startup with the same live, non-billable auth call
|
|
5
|
+
* `ai status` / `ai setup` use, and fails fast with a typed setup refusal (`E_AI_SETUP_REQUIRED`,
|
|
6
|
+
* exit 64) when a provider rejects a key — instead of spending the run and ending `inconclusive`
|
|
7
|
+
* with "model decision unavailable".
|
|
8
|
+
*
|
|
9
|
+
* - Cheap: one GET per key, cached per process (by key name + a hash of the value — the value itself
|
|
10
|
+
* is never kept here) — a multi-run, a retry or a self-heal re-build never re-checks it.
|
|
11
|
+
* - Only an `invalid` verdict (401/403) refuses. An `unreachable` provider (offline, 429, 5xx) does
|
|
12
|
+
* not block: the run's own calls retry and fail typed, as before; that verdict is not cached.
|
|
13
|
+
* - `JEVITATE_NO_KEY_VERIFY=1` skips the check (offline CI). `--fake-ai` and injected gateways never
|
|
14
|
+
* reach this code (no network).
|
|
15
|
+
* - Names, providers and statuses only: no message here carries a key value.
|
|
16
|
+
*/
|
|
17
|
+
/** The env opt-out (offline CI): `1` / `true` / `yes` skips the startup key check. */
|
|
18
|
+
export declare const NO_KEY_VERIFY_ENV = "JEVITATE_NO_KEY_VERIFY";
|
|
19
|
+
/** A key the provider rejected — a `MissingCredentialError`, so every run surface refuses it as `E_AI_SETUP_REQUIRED`. */
|
|
20
|
+
export declare class InvalidCredentialError extends MissingCredentialError {
|
|
21
|
+
readonly invalid: Array<{
|
|
22
|
+
readonly key: CredentialKey;
|
|
23
|
+
readonly httpStatus: number;
|
|
24
|
+
readonly looksLike: CredentialKey | null;
|
|
25
|
+
}>;
|
|
26
|
+
constructor(feature: Feature, invalid: Array<{
|
|
27
|
+
readonly key: CredentialKey;
|
|
28
|
+
readonly httpStatus: number;
|
|
29
|
+
readonly looksLike: CredentialKey | null;
|
|
30
|
+
}>);
|
|
31
|
+
}
|
|
32
|
+
/** Test seam: forget the per-process verdicts. */
|
|
33
|
+
export declare function resetKeyPreflightCache(): void;
|
|
34
|
+
export declare function keyPreflightDisabled(env: Record<string, string | undefined>): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Verifies every key `features` need (present keys only: a missing one was already refused by
|
|
37
|
+
* `requireKeys`). Throws `InvalidCredentialError` for the first feature with a rejected key.
|
|
38
|
+
*/
|
|
39
|
+
export declare function preflightRunKeys(features: readonly Feature[], store: CredentialStore, opts: {
|
|
40
|
+
readonly env: Record<string, string | undefined>;
|
|
41
|
+
readonly fetchFn: VerifyFetch;
|
|
42
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { FEATURE_KEYS, KEY_PROVIDERS, KEY_VERIFY_URLS, MissingCredentialError, looksLikeOtherKey, verifyKey, } from "@jevitate/ai-core";
|
|
3
|
+
/**
|
|
4
|
+
* #291 (runs): a run that needs live AI keys (`explore --real`, `check`, `journey run/annotate/demo
|
|
5
|
+
* --real`, `demo`, `ux`, …) verifies them ONCE at startup with the same live, non-billable auth call
|
|
6
|
+
* `ai status` / `ai setup` use, and fails fast with a typed setup refusal (`E_AI_SETUP_REQUIRED`,
|
|
7
|
+
* exit 64) when a provider rejects a key — instead of spending the run and ending `inconclusive`
|
|
8
|
+
* with "model decision unavailable".
|
|
9
|
+
*
|
|
10
|
+
* - Cheap: one GET per key, cached per process (by key name + a hash of the value — the value itself
|
|
11
|
+
* is never kept here) — a multi-run, a retry or a self-heal re-build never re-checks it.
|
|
12
|
+
* - Only an `invalid` verdict (401/403) refuses. An `unreachable` provider (offline, 429, 5xx) does
|
|
13
|
+
* not block: the run's own calls retry and fail typed, as before; that verdict is not cached.
|
|
14
|
+
* - `JEVITATE_NO_KEY_VERIFY=1` skips the check (offline CI). `--fake-ai` and injected gateways never
|
|
15
|
+
* reach this code (no network).
|
|
16
|
+
* - Names, providers and statuses only: no message here carries a key value.
|
|
17
|
+
*/
|
|
18
|
+
/** The env opt-out (offline CI): `1` / `true` / `yes` skips the startup key check. */
|
|
19
|
+
export const NO_KEY_VERIFY_ENV = "JEVITATE_NO_KEY_VERIFY";
|
|
20
|
+
/** A key the provider rejected — a `MissingCredentialError`, so every run surface refuses it as `E_AI_SETUP_REQUIRED`. */
|
|
21
|
+
export class InvalidCredentialError extends MissingCredentialError {
|
|
22
|
+
invalid;
|
|
23
|
+
constructor(feature, invalid) {
|
|
24
|
+
super(feature, invalid.map((i) => i.key));
|
|
25
|
+
this.invalid = invalid;
|
|
26
|
+
this.name = "InvalidCredentialError";
|
|
27
|
+
const what = invalid
|
|
28
|
+
.map((i) => `${i.key} (${KEY_PROVIDERS[i.key]}) was rejected by the provider (HTTP ${i.httpStatus})${i.looksLike === null ? "" : ` — it looks like ${/^[aeiou]/i.test(KEY_PROVIDERS[i.looksLike]) ? "an" : "a"} ${KEY_PROVIDERS[i.looksLike]} key (${i.looksLike})`}`)
|
|
29
|
+
.join("; ");
|
|
30
|
+
this.message =
|
|
31
|
+
`feature '${feature}': ${what} — replace it: \`jevitate ai setup ${feature} --replace\` ` +
|
|
32
|
+
`(or set ${NO_KEY_VERIFY_ENV}=1 to skip this startup check offline)`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const cache = new Map();
|
|
36
|
+
function cacheKey(key, value) {
|
|
37
|
+
return `${key}:${createHash("sha256").update(value).digest("hex")}`;
|
|
38
|
+
}
|
|
39
|
+
/** Test seam: forget the per-process verdicts. */
|
|
40
|
+
export function resetKeyPreflightCache() {
|
|
41
|
+
cache.clear();
|
|
42
|
+
}
|
|
43
|
+
export function keyPreflightDisabled(env) {
|
|
44
|
+
return /^(?:1|true|yes)$/i.test((env[NO_KEY_VERIFY_ENV] ?? "").trim());
|
|
45
|
+
}
|
|
46
|
+
async function verdictFor(key, value, fetchFn) {
|
|
47
|
+
const id = cacheKey(key, value);
|
|
48
|
+
const hit = cache.get(id);
|
|
49
|
+
if (hit !== undefined)
|
|
50
|
+
return hit;
|
|
51
|
+
const pending = verifyKey(key, value, fetchFn);
|
|
52
|
+
cache.set(id, pending);
|
|
53
|
+
const verdict = await pending;
|
|
54
|
+
// An unreachable provider proves nothing: a later build may check again.
|
|
55
|
+
if (verdict.status === "unreachable")
|
|
56
|
+
cache.delete(id);
|
|
57
|
+
return verdict;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Verifies every key `features` need (present keys only: a missing one was already refused by
|
|
61
|
+
* `requireKeys`). Throws `InvalidCredentialError` for the first feature with a rejected key.
|
|
62
|
+
*/
|
|
63
|
+
export async function preflightRunKeys(features, store, opts) {
|
|
64
|
+
if (keyPreflightDisabled(opts.env))
|
|
65
|
+
return;
|
|
66
|
+
for (const feature of features) {
|
|
67
|
+
const invalid = [];
|
|
68
|
+
for (const key of FEATURE_KEYS[feature]) {
|
|
69
|
+
if (KEY_VERIFY_URLS[key] === undefined)
|
|
70
|
+
continue;
|
|
71
|
+
const value = store.read(key);
|
|
72
|
+
if (value === undefined || value.trim() === "")
|
|
73
|
+
continue;
|
|
74
|
+
const verdict = await verdictFor(key, value.trim(), opts.fetchFn);
|
|
75
|
+
if (verdict.status === "invalid")
|
|
76
|
+
invalid.push({ key, httpStatus: verdict.httpStatus, looksLike: looksLikeOtherKey(key, value.trim()) });
|
|
77
|
+
}
|
|
78
|
+
if (invalid.length > 0)
|
|
79
|
+
throw new InvalidCredentialError(feature, invalid);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=run-key-preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-key-preflight.js","sourceRoot":"","sources":["../src/run-key-preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/run-screenshots.js
CHANGED
|
@@ -3,6 +3,7 @@ import { basename, dirname, join, resolve as resolvePath } from "node:path";
|
|
|
3
3
|
import { assertNoSecretInPayload, redactText, redactUrl } from "@jevitate/ai-core";
|
|
4
4
|
import { coverageStateFingerprint, snapshot } from "@jevitate/explore";
|
|
5
5
|
import { captureStepScreenshot, maskingPort, SecretPixelMask } from "./demo-capture.js";
|
|
6
|
+
import { clock } from "@jevitate/domain";
|
|
6
7
|
/** An unusable `--screenshots` value: refused before anything runs (exit 64). */
|
|
7
8
|
export class ScreenshotsArgError extends Error {
|
|
8
9
|
code = "E_SCREENSHOTS_ARGS";
|
|
@@ -76,8 +77,12 @@ export class RunScreenshots {
|
|
|
76
77
|
get mode() {
|
|
77
78
|
return this.#opts.spec.mode;
|
|
78
79
|
}
|
|
80
|
+
/** Registered secrets plus those the app revealed during the run (#298) — what the index must not hold. */
|
|
81
|
+
#known() {
|
|
82
|
+
return [...this.#opts.secrets, ...this.mask.revealed()];
|
|
83
|
+
}
|
|
79
84
|
#redact(s) {
|
|
80
|
-
return redactText(s, this.#
|
|
85
|
+
return redactText(s, this.#known());
|
|
81
86
|
}
|
|
82
87
|
/** Creates the folder once and clears a previous run's images (never another file). */
|
|
83
88
|
#prepare() {
|
|
@@ -100,7 +105,7 @@ export class RunScreenshots {
|
|
|
100
105
|
if (this.#opts.spec.mode === "screens") {
|
|
101
106
|
const fp = await Promise.race([
|
|
102
107
|
snapshot(page).then((s) => coverageStateFingerprint(s)),
|
|
103
|
-
new Promise((r) => setTimeout(() => r(null), FINGERPRINT_MS)),
|
|
108
|
+
new Promise((r) => clock.setTimeout(() => r(null), FINGERPRINT_MS)),
|
|
104
109
|
]).catch(() => null);
|
|
105
110
|
// An unreadable state cannot be proven a repeat: it is captured (never silently dropped).
|
|
106
111
|
if (fp !== null && this.#seen.has(fp))
|
|
@@ -143,7 +148,7 @@ export class RunScreenshots {
|
|
|
143
148
|
await this.#prepare();
|
|
144
149
|
const index = join(this.#opts.dir, "index.md");
|
|
145
150
|
const md = this.contactSheet();
|
|
146
|
-
assertNoSecretInPayload(md, this.#
|
|
151
|
+
assertNoSecretInPayload(md, this.#known(), "screenshot index"); // the last line: never at rest
|
|
147
152
|
await writeFile(index, md, "utf8");
|
|
148
153
|
return {
|
|
149
154
|
screenshotPaths: this.#entries.map((e) => e.path),
|
|
@@ -157,7 +162,7 @@ export class RunScreenshots {
|
|
|
157
162
|
const lines = [
|
|
158
163
|
`# Screenshots: ${oneLine(this.#redact(this.#opts.title))}`,
|
|
159
164
|
"",
|
|
160
|
-
`Mode: ${mode} · ${this.#entries.length} screenshot(s) over ${this.#maxStep} step(s). The demo overlay is hidden
|
|
165
|
+
`Mode: ${mode} · ${this.#entries.length} screenshot(s) over ${this.#maxStep} step(s). The demo overlay is hidden; registered secrets, elements the app marks as secret and credential-shaped values are masked in every image.`,
|
|
161
166
|
"",
|
|
162
167
|
];
|
|
163
168
|
for (const e of this.#entries) {
|
|
@@ -167,7 +172,8 @@ export class RunScreenshots {
|
|
|
167
172
|
if (this.#skipped.length > 0) {
|
|
168
173
|
lines.push("## Not captured", "", ...this.#skipped.map((s) => `- step ${s.step}: ${s.reason}`), "");
|
|
169
174
|
}
|
|
170
|
-
|
|
175
|
+
// Re-redacted as a whole: a secret the app revealed after an entry was written is scrubbed too (#298).
|
|
176
|
+
return `${this.#redact(lines.join("\n")).trimEnd()}\n`;
|
|
171
177
|
}
|
|
172
178
|
}
|
|
173
179
|
/** A per-step observer for an interpreter-driven replay (journey run/annotate/demo, verify-fix). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-screenshots.js","sourceRoot":"","sources":["../src/run-screenshots.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-screenshots.js","sourceRoot":"","sources":["../src/run-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAwB,MAAM,mBAAmB,CAAC;AAG7F,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AA2BzC,iFAAiF;AACjF,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,oBAA6B,CAAC;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAA+B,EAAE,KAAK,GAAG,eAAe;IAC1F,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,mFAAmF,CAAC,CAAC;IACzI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,KAAK,EAAE;YAAE,MAAM,IAAI,mBAAmB,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACrG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAmB,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,iBAAiB,CAAC,IAAqB,EAAE,YAAoB;IAC3E,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;AAC5D,CAAC;AAsCD,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,uBAAuB,CAAC,CAAkB;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9F,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,OAAO,cAAc;IAChB,IAAI,CAAkB;IACtB,KAAK,CAAwB;IAC7B,QAAQ,GAAsB,EAAE,CAAC;IACjC,QAAQ,GAAqB,EAAE,CAAC;IAChC,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1C,SAAS,CAA4B;IACrC,QAAQ,GAAG,CAAC,CAAC;IAEb,YAAY,IAA2B;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,2GAA2G;IAC3G,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,CAAS;QACf,OAAO,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,uFAAuF;IACvF,QAAQ;QACN,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvI,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,qFAAqF;IACrF,OAAO,CAAC,IAAU,EAAE,EAA2E;QAC7F,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;wBAC5B,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;wBACvD,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;qBAC1E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACrB,0FAA0F;oBAC1F,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,OAAO;oBAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC5B,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrF,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACvI,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAU,EAAE,EAA2E;QAClG,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChH,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAClD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,qGAAqG;IACrG,SAAS,CAAC,IAAU,EAAE,KAAsB;QAC1C,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,MAAM,CAAC;QAClB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,+BAA+B;QAC/F,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,eAAe,EAAE,KAAK;YACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;SAClF,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7F,MAAM,KAAK,GAAG;YACZ,kBAAkB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YAC3D,EAAE;YACF,SAAS,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,uBAAuB,IAAI,CAAC,QAAQ,oJAAoJ;YAC/N,EAAE;SACH,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrM,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,uGAAuG;QACvG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;IACzD,CAAC;CACF;AAED,oGAAoG;AACpG,MAAM,UAAU,kBAAkB,CAAC,KAAqB,EAAE,MAAuF,EAAE,MAAiC;IAClL,OAAO;QACL,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC;YAC1H,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,GAAG,SAAkD;IACpF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,KAAK,EAAE,EAAkD,EAAiB,EAAE;QACvF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,wEAAwE;YAC1E,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CAAC,CAA+I;IACnL,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC3C,OAAO,CACL,gBAAgB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,eAAe,EAAE;QAC/E,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACxI,CAAC;AACJ,CAAC;AAaD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAM7B;IACC,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC;IAChE,IAAI,KAAiC,CAAC;IACtC,MAAM,OAAO,GAAG,GAA+B,EAAE;QAC/C,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAClD,KAAK,KAAK,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzJ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7D,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE;KACtD,CAAC;AACJ,CAAC"}
|
package/dist/runtime-env.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clickTimeoutMs } from "@jevitate/explore";
|
|
2
|
-
import { pageUnresponsiveMsFromEnv } from "@jevitate/playwright";
|
|
2
|
+
import { governanceFromEnv, pageUnresponsiveMsFromEnv } from "@jevitate/playwright";
|
|
3
3
|
/**
|
|
4
4
|
* Numeric `JEVITATE_*` tuning variables are validated ONCE, when the CLI starts, so a typo is a
|
|
5
5
|
* usage error (exit 64) before any browser opens — never a crash mid-run on the first click, and
|
|
@@ -9,7 +9,8 @@ import { pageUnresponsiveMsFromEnv } from "@jevitate/playwright";
|
|
|
9
9
|
*/
|
|
10
10
|
export function runtimeEnvProblems(env = process.env) {
|
|
11
11
|
const problems = [];
|
|
12
|
-
|
|
12
|
+
// #205: JEVITATE_RESOURCE_GOVERNANCE / JEVITATE_MAX_BROWSERS / JEVITATE_MAX_BROWSER_MEMORY_MB.
|
|
13
|
+
for (const check of [pageUnresponsiveMsFromEnv, clickTimeoutMs, governanceFromEnv]) {
|
|
13
14
|
try {
|
|
14
15
|
check(env);
|
|
15
16
|
}
|
package/dist/runtime-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../src/runtime-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../src/runtime-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEpF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,+FAA+F;IAC/F,KAAK,MAAM,KAAK,IAAI,CAAC,yBAAyB,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACnF,IAAI,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -23,6 +23,8 @@ export interface VerifyServerLogParams {
|
|
|
23
23
|
readonly matcher: string;
|
|
24
24
|
readonly normalizedMessage: string;
|
|
25
25
|
readonly drainMs: number;
|
|
26
|
+
/** #282: the run's `--log-scope` (raw specs): only lines in scope count, as in the original run. */
|
|
27
|
+
readonly scope?: readonly string[];
|
|
26
28
|
readonly allowLogCmd: boolean;
|
|
27
29
|
/** Opens a FRESH browser session (never the one the defect was found in). */
|
|
28
30
|
readonly openSession: () => Promise<VerifySession>;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { RecordingInterpreter } from "@jevitate/interpreter";
|
|
2
2
|
import { perceive, verifyReplayVerdict } from "@jevitate/explore";
|
|
3
3
|
import { closeLogSources, openLogSources, parseLogSourceSpecs } from "./log-sources.js";
|
|
4
|
-
import { matchesLogDefect, normalizeLogMessage, parseLogDefectSpec, parseLogLine } from "./log-lines.js";
|
|
4
|
+
import { matchesLogDefect, matchesLogIgnore, normalizeLogMessage, parseLogDefectSpec, parseLogIgnoreSpec, parseLogLine } from "./log-lines.js";
|
|
5
|
+
import { clock } from "@jevitate/domain";
|
|
5
6
|
const DEFAULT_REPLAYS = 3;
|
|
6
7
|
function firstLine(e) {
|
|
7
8
|
return e instanceof Error ? e.message.split("\n")[0] ?? e.message : String(e);
|
|
8
9
|
}
|
|
9
10
|
function sleep(ms) {
|
|
10
11
|
return new Promise((resolve) => {
|
|
11
|
-
const t = setTimeout(resolve, ms);
|
|
12
|
+
const t = clock.setTimeout(resolve, ms);
|
|
12
13
|
t.unref?.();
|
|
13
14
|
});
|
|
14
15
|
}
|
|
@@ -45,7 +46,9 @@ async function runOneServerLogReplay(params, sourceSpecs) {
|
|
|
45
46
|
await sleep(params.drainMs);
|
|
46
47
|
await closeLogSources(handles);
|
|
47
48
|
const matcher = parseLogDefectSpec(params.matcher);
|
|
48
|
-
const
|
|
49
|
+
const scope = (params.scope ?? []).map(parseLogIgnoreSpec);
|
|
50
|
+
const inScope = (l) => scope.length === 0 || scope.some((m) => matchesLogIgnore(l, m));
|
|
51
|
+
const fired = lines.some((l) => inScope(l) && matchesLogDefect(l, matcher) && normalizeLogMessage(l.message) === params.normalizedMessage);
|
|
49
52
|
if (outcome.outcome !== "completed") {
|
|
50
53
|
const replay = outcome.outcome === "failed"
|
|
51
54
|
? { outcome: "failed", at: outcome.at, error: outcome.error.split("\n")[0] ?? outcome.error, ...(outcome.reason === undefined ? {} : { reason: outcome.reason }) }
|
|
@@ -83,6 +86,8 @@ export async function verifyServerLogDefect(params) {
|
|
|
83
86
|
try {
|
|
84
87
|
sourceSpecs = parseLogSourceSpecs(params.sources, params.allowLogCmd);
|
|
85
88
|
parseLogDefectSpec(params.matcher); // validated once up front, fail closed
|
|
89
|
+
for (const s of params.scope ?? [])
|
|
90
|
+
parseLogIgnoreSpec(s);
|
|
86
91
|
}
|
|
87
92
|
catch (e) {
|
|
88
93
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-log-verify.js","sourceRoot":"","sources":["../src/server-log-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAmE,MAAM,mBAAmB,CAAC;AACnI,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"server-log-verify.js","sourceRoot":"","sources":["../src/server-log-verify.ts"],"names":[],"mappings":"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"}
|
package/dist/site-gate-cli.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import { openDatabase, migrateToLatest, SqliteActivityRepository, SqliteBudgetRepository, SqliteSitePolicyRepository } from "@jevitate/storage-sqlite";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { SiteGateRefusedError, enterSiteGate, throttleClassOf } from "@jevitate/runtime";
|
|
5
|
+
import { clock as sysClock } from "@jevitate/domain";
|
|
5
6
|
/**
|
|
6
7
|
* The site-policy gate's repositories (`jevitate site policy set`), opened from the policy database
|
|
7
8
|
* for the duration of `fn`. No database file means no policy was ever set: `fn` gets `undefined`,
|
|
@@ -13,7 +14,7 @@ export async function withSiteGate(dbPath, fn) {
|
|
|
13
14
|
const db = openDatabase(dbPath);
|
|
14
15
|
try {
|
|
15
16
|
await migrateToLatest(db);
|
|
16
|
-
const clock = { nowIso: () =>
|
|
17
|
+
const clock = { nowIso: () => sysClock.nowIso(), monotonicMs: () => sysClock.now() };
|
|
17
18
|
return await fn({
|
|
18
19
|
policies: new SqliteSitePolicyRepository(db, clock),
|
|
19
20
|
budgets: new SqliteBudgetRepository(db),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-gate-cli.js","sourceRoot":"","sources":["../src/site-gate-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"site-gate-cli.js","sourceRoot":"","sources":["../src/site-gate-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAC;AAC5G,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,MAA0B,EAAE,EAAkD;IAClH,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QACrF,OAAO,MAAM,EAAE,CAAC;YACd,QAAQ,EAAE,IAAI,0BAA0B,CAAC,EAAE,EAAE,KAAK,CAAC;YACnD,OAAO,EAAE,IAAI,sBAAsB,CAAC,EAAE,CAAC;YACvC,QAAQ,EAAE,IAAI,wBAAwB,CAAC,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,qIAAqI;AACrI,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAUD,MAAM,OAAO,GAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAkC,EAClC,SAAoB,EACpB,IAA6F;IAE7F,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE;QACzC,IAAI;QACJ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;QAClC,aAAa,EAAE,eAAe,CAAC,SAAS,CAAC;QACzC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjF,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC"}
|
package/dist/source-api.js
CHANGED
|
@@ -4,6 +4,7 @@ import { promisify } from "node:util";
|
|
|
4
4
|
import { FsJourneyStore, JourneyRegistry } from "@jevitate/journey";
|
|
5
5
|
import { GitSourceManager, RemoteSource, UnknownSourceError, collectNavigateOrigins, loadManifest, publishJourney, readLock, surfaceForAck, writeLock, } from "@jevitate/sources";
|
|
6
6
|
import { UnknownJourneyError } from "./journey-api.js";
|
|
7
|
+
import { clock } from "@jevitate/domain";
|
|
7
8
|
const execFileAsync = promisify(execFile);
|
|
8
9
|
/**
|
|
9
10
|
* A publish was requested for a Journey that exists locally but has not been
|
|
@@ -43,7 +44,7 @@ function mgrOf(deps) {
|
|
|
43
44
|
return new GitSourceManager(deps.sourcesDir, deps.git);
|
|
44
45
|
}
|
|
45
46
|
function nowIso(deps) {
|
|
46
|
-
return (deps.now ?? (() =>
|
|
47
|
+
return (deps.now ?? (() => clock.nowIso()))();
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Resolves a source `name` to its recorded `SourceEntry`, or throws
|