@jevitate/cli 0.15.0 → 0.15.1
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/bin.js +58 -21
- package/dist/build-info.generated.js +3 -3
- package/dist/journey-verify.d.ts +10 -0
- package/dist/journey-verify.js +18 -16
- package/dist/journey-verify.js.map +1 -1
- package/package.json +10 -10
package/dist/bin.js
CHANGED
|
@@ -53371,7 +53371,42 @@ function mutationReplay(journey, m, opts = {}) {
|
|
|
53371
53371
|
}
|
|
53372
53372
|
return { journey: copy };
|
|
53373
53373
|
}
|
|
53374
|
+
function relaxedMutationReplay(journey, m, opts = {}) {
|
|
53375
|
+
const index = m.step - 1;
|
|
53376
|
+
if (m.kind === "skip")
|
|
53377
|
+
return { journey, skipIndex: index };
|
|
53378
|
+
if (m.kind === "block-write") {
|
|
53379
|
+
const requests = journeyWriteSteps(journey, opts).find((w) => w.step === m.step)?.requests ?? [];
|
|
53380
|
+
const copy2 = structuredClone(journey);
|
|
53381
|
+
const target2 = flat(copy2)[index];
|
|
53382
|
+
const step = { ...target2.step };
|
|
53383
|
+
delete step.expect;
|
|
53384
|
+
delete step.waitFor;
|
|
53385
|
+
target2.step = step;
|
|
53386
|
+
return { journey: copy2, blockIndex: index, blockRequests: [...requests] };
|
|
53387
|
+
}
|
|
53388
|
+
const copy = structuredClone(journey);
|
|
53389
|
+
const target = flat(copy)[index];
|
|
53390
|
+
if (target.step.kind === "fill") {
|
|
53391
|
+
const step = { ...target.step, value: { redacted: false, value: "" } };
|
|
53392
|
+
delete step.expect;
|
|
53393
|
+
delete step.waitFor;
|
|
53394
|
+
target.step = step;
|
|
53395
|
+
}
|
|
53396
|
+
return { journey: copy };
|
|
53397
|
+
}
|
|
53398
|
+
function needsRelaxedReplay(plan2, m, result) {
|
|
53399
|
+
if (result.outcome !== "failed")
|
|
53400
|
+
return false;
|
|
53401
|
+
if (!result.failedSites.some((f2) => f2.where === "step" && f2.step === m.step && f2.postcondition))
|
|
53402
|
+
return false;
|
|
53403
|
+
const own2 = `step:${m.step}`;
|
|
53404
|
+
return plan2.pairs.some((p) => p.mutation === m.id && p.site !== own2);
|
|
53405
|
+
}
|
|
53374
53406
|
function classifyMutation(site, m, result) {
|
|
53407
|
+
if (result.relaxed !== void 0 && result.failedSites.some((f2) => f2.where === "step" && f2.step === m.step && f2.postcondition) && !(site.where === "step" && site.step === m.step)) {
|
|
53408
|
+
return classifyMutation(site, m, { outcome: result.relaxed.outcome, failedSites: result.relaxed.failedSites });
|
|
53409
|
+
}
|
|
53375
53410
|
if (result.outcome === "passed")
|
|
53376
53411
|
return "insensitive";
|
|
53377
53412
|
if (result.outcome === "not-applied")
|
|
@@ -60957,9 +60992,9 @@ function hostStarvedFailure(failure3, health) {
|
|
|
60957
60992
|
}
|
|
60958
60993
|
|
|
60959
60994
|
// src/build-info.generated.ts
|
|
60960
|
-
var GENERATED_COMMIT = "
|
|
60961
|
-
var GENERATED_TREE = "
|
|
60962
|
-
var GENERATED_BUILT_AT = "2026-10-
|
|
60995
|
+
var GENERATED_COMMIT = "4f9bd56";
|
|
60996
|
+
var GENERATED_TREE = "2194606";
|
|
60997
|
+
var GENERATED_BUILT_AT = "2026-10-16T04:50:43.329Z";
|
|
60963
60998
|
|
|
60964
60999
|
// src/version.ts
|
|
60965
61000
|
import { readFileSync as readFileSync5 } from "node:fs";
|
|
@@ -60981,13 +61016,13 @@ function readCliVersion() {
|
|
|
60981
61016
|
|
|
60982
61017
|
// src/engine.ts
|
|
60983
61018
|
function bundledCommit() {
|
|
60984
|
-
return true ? "
|
|
61019
|
+
return true ? "4f9bd56" : void 0;
|
|
60985
61020
|
}
|
|
60986
61021
|
function bundledBuiltAt() {
|
|
60987
|
-
return true ? "2026-10-
|
|
61022
|
+
return true ? "2026-10-16T04:50:43.329Z" : void 0;
|
|
60988
61023
|
}
|
|
60989
61024
|
function bundledTree() {
|
|
60990
|
-
return true ? "
|
|
61025
|
+
return true ? "2194606" : void 0;
|
|
60991
61026
|
}
|
|
60992
61027
|
function currentBuildTree() {
|
|
60993
61028
|
return bundledTree() ?? GENERATED_TREE;
|
|
@@ -107419,42 +107454,44 @@ async function verifyJourneyMutations(opts, run = runJourneyProgrammatically) {
|
|
|
107419
107454
|
const plan2 = planJourneyMutations(journey, { ...lintOpts, params: opts.params });
|
|
107420
107455
|
const mutations = [];
|
|
107421
107456
|
if (base.outcome === "ok") {
|
|
107422
|
-
|
|
107423
|
-
const how =
|
|
107424
|
-
const fields = { kind: m.kind, step: m.step, id: m.id };
|
|
107457
|
+
const replay = async (m, describe6) => {
|
|
107458
|
+
const how = describe6(journey, m, lintOpts);
|
|
107425
107459
|
try {
|
|
107426
107460
|
const r = await run(runOpts, {
|
|
107427
107461
|
structuredFailures: true,
|
|
107428
|
-
...how.journey === journey ? {} : { mutateJourney: (j) =>
|
|
107462
|
+
...how.journey === journey ? {} : { mutateJourney: (j) => describe6(j, m, lintOpts).journey },
|
|
107429
107463
|
...how.skipIndex === void 0 ? {} : { skipStep: (i) => i === how.skipIndex },
|
|
107430
107464
|
...how.blockIndex === void 0 ? {} : { blockWritesAtStep: how.blockIndex }
|
|
107431
107465
|
});
|
|
107432
107466
|
const blocked = r.blockedWrites ?? [];
|
|
107433
107467
|
const blockedFields = how.blockIndex === void 0 ? {} : { blockedWrites: blocked.map((b2) => `${b2.method} ${b2.path}`) };
|
|
107434
107468
|
if (how.blockIndex !== void 0 && !blockedOwnWrite(how.blockRequests ?? [], blocked)) {
|
|
107435
|
-
|
|
107436
|
-
...fields,
|
|
107469
|
+
return {
|
|
107437
107470
|
outcome: "not-applied",
|
|
107438
107471
|
failedSites: [],
|
|
107439
107472
|
...blockedFields,
|
|
107440
107473
|
reason: `step ${m.step}'s own write was not blocked${(how.blockRequests ?? []).length === 0 ? "" : ` (recorded: ${(how.blockRequests ?? []).join(", ")})`}`
|
|
107441
|
-
}
|
|
107442
|
-
continue;
|
|
107474
|
+
};
|
|
107443
107475
|
}
|
|
107444
|
-
|
|
107445
|
-
mutations.push({
|
|
107446
|
-
...fields,
|
|
107476
|
+
return {
|
|
107447
107477
|
outcome: r.outcome === "quarantined" ? "failed" : "passed",
|
|
107448
|
-
failedSites,
|
|
107478
|
+
failedSites: failedSitesOf(r, r.outcomeFailures ?? []),
|
|
107449
107479
|
...blockedFields,
|
|
107450
107480
|
...r.outcome === "quarantined" ? { reason: r.reason } : {}
|
|
107451
|
-
}
|
|
107481
|
+
};
|
|
107452
107482
|
} catch (err) {
|
|
107453
|
-
|
|
107483
|
+
return { outcome: "error", failedSites: [], reason: err instanceof Error ? err.message : String(err) };
|
|
107454
107484
|
}
|
|
107485
|
+
};
|
|
107486
|
+
for (const m of plan2.mutations) {
|
|
107487
|
+
const first = await replay(m, mutationReplay);
|
|
107488
|
+
const relaxed = needsRelaxedReplay(plan2, m, first) ? await replay(m, relaxedMutationReplay) : void 0;
|
|
107489
|
+
mutations.push({ kind: m.kind, step: m.step, id: m.id, ...first, ...relaxed === void 0 ? {} : { relaxed } });
|
|
107455
107490
|
}
|
|
107456
107491
|
}
|
|
107457
|
-
const results = new Map(
|
|
107492
|
+
const results = new Map(
|
|
107493
|
+
mutations.map((m) => [m.id, { outcome: m.outcome, failedSites: m.failedSites, ...m.relaxed === void 0 ? {} : { relaxed: m.relaxed } }])
|
|
107494
|
+
);
|
|
107458
107495
|
const judged = judgeAssertions(journey, plan2, results);
|
|
107459
107496
|
const assertions = judged.map((a) => ({ site: a.site, check: checkOf.get(a.site) ?? a.site, verdict: a.verdict, ...a.provedBy === void 0 ? {} : { provedBy: a.provedBy } }));
|
|
107460
107497
|
const { verdict, reason } = mutationProofVerdict({ basePassed: base.outcome === "ok", mutations, assertions: judged });
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// this plain `tsc --build` dist (no bundler substitution), so it needs real committed values
|
|
6
6
|
// here instead. See ./engine.ts, which prefers the esbuild-injected value when present and
|
|
7
7
|
// falls back to these.
|
|
8
|
-
export const GENERATED_COMMIT = "
|
|
9
|
-
export const GENERATED_TREE = "
|
|
10
|
-
export const GENERATED_BUILT_AT = "2026-10-
|
|
8
|
+
export const GENERATED_COMMIT = "4f9bd56";
|
|
9
|
+
export const GENERATED_TREE = "2194606";
|
|
10
|
+
export const GENERATED_BUILT_AT = "2026-10-16T04:50:33.266Z";
|
|
11
11
|
//# sourceMappingURL=build-info.generated.js.map
|
package/dist/journey-verify.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ export interface JourneyVerifyMutation {
|
|
|
26
26
|
readonly blockedWrites?: readonly string[];
|
|
27
27
|
/** Why the replay failed, was not applied, or errored. */
|
|
28
28
|
readonly reason?: string;
|
|
29
|
+
/**
|
|
30
|
+
* #554 — the same mutation replayed with the mutated step's own postcondition relaxed, present
|
|
31
|
+
* only when the first replay failed at that postcondition and a later site is paired with it.
|
|
32
|
+
*/
|
|
33
|
+
readonly relaxed?: {
|
|
34
|
+
readonly outcome: MutationRunResult["outcome"];
|
|
35
|
+
readonly failedSites: readonly MutationFailedSite[];
|
|
36
|
+
readonly blockedWrites?: readonly string[];
|
|
37
|
+
readonly reason?: string;
|
|
38
|
+
};
|
|
29
39
|
}
|
|
30
40
|
export interface JourneyVerifyAssertion {
|
|
31
41
|
readonly site: string;
|
package/dist/journey-verify.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* environment as `journey run`. Mutations never send, fabricate or answer a request: they leave a
|
|
10
10
|
* step's action out, ABORT the app's own writes in one step's window, or type `""`.
|
|
11
11
|
*/
|
|
12
|
-
import { FsJourneyStore, JourneyRegistry, assertionSiteKey, journeyAssertions, journeyProofHash, judgeAssertions, mutationProofVerdict, mutationReplay, planJourneyMutations, } from "@jevitate/journey";
|
|
12
|
+
import { FsJourneyStore, JourneyRegistry, assertionSiteKey, journeyAssertions, journeyProofHash, judgeAssertions, mutationProofVerdict, mutationReplay, needsRelaxedReplay, planJourneyMutations, relaxedMutationReplay, } from "@jevitate/journey";
|
|
13
13
|
import { describeCheck } from "@jevitate/explore";
|
|
14
14
|
import { clock } from "@jevitate/domain";
|
|
15
15
|
import { journeyContentHash } from "./journey-annotate-api.js";
|
|
@@ -65,43 +65,45 @@ export async function verifyJourneyMutations(opts, run = runJourneyProgrammatica
|
|
|
65
65
|
const plan = planJourneyMutations(journey, { ...lintOpts, params: opts.params });
|
|
66
66
|
const mutations = [];
|
|
67
67
|
if (base.outcome === "ok") {
|
|
68
|
-
|
|
69
|
-
const how =
|
|
70
|
-
const fields = { kind: m.kind, step: m.step, id: m.id };
|
|
68
|
+
const replay = async (m, describe) => {
|
|
69
|
+
const how = describe(journey, m, lintOpts);
|
|
71
70
|
try {
|
|
72
71
|
const r = await run(runOpts, {
|
|
73
72
|
structuredFailures: true,
|
|
74
|
-
...(how.journey === journey ? {} : { mutateJourney: (j) =>
|
|
73
|
+
...(how.journey === journey ? {} : { mutateJourney: (j) => describe(j, m, lintOpts).journey }),
|
|
75
74
|
...(how.skipIndex === undefined ? {} : { skipStep: (i) => i === how.skipIndex }),
|
|
76
75
|
...(how.blockIndex === undefined ? {} : { blockWritesAtStep: how.blockIndex }),
|
|
77
76
|
});
|
|
78
77
|
const blocked = r.blockedWrites ?? [];
|
|
79
78
|
const blockedFields = how.blockIndex === undefined ? {} : { blockedWrites: blocked.map((b) => `${b.method} ${b.path}`) };
|
|
80
79
|
if (how.blockIndex !== undefined && !blockedOwnWrite(how.blockRequests ?? [], blocked)) {
|
|
81
|
-
|
|
82
|
-
...fields,
|
|
80
|
+
return {
|
|
83
81
|
outcome: "not-applied",
|
|
84
82
|
failedSites: [],
|
|
85
83
|
...blockedFields,
|
|
86
84
|
reason: `step ${m.step}'s own write was not blocked${(how.blockRequests ?? []).length === 0 ? "" : ` (recorded: ${(how.blockRequests ?? []).join(", ")})`}`,
|
|
87
|
-
}
|
|
88
|
-
continue;
|
|
85
|
+
};
|
|
89
86
|
}
|
|
90
|
-
|
|
91
|
-
mutations.push({
|
|
92
|
-
...fields,
|
|
87
|
+
return {
|
|
93
88
|
outcome: r.outcome === "quarantined" ? "failed" : "passed",
|
|
94
|
-
failedSites,
|
|
89
|
+
failedSites: failedSitesOf(r, r.outcomeFailures ?? []),
|
|
95
90
|
...blockedFields,
|
|
96
91
|
...(r.outcome === "quarantined" ? { reason: r.reason } : {}),
|
|
97
|
-
}
|
|
92
|
+
};
|
|
98
93
|
}
|
|
99
94
|
catch (err) {
|
|
100
|
-
|
|
95
|
+
return { outcome: "error", failedSites: [], reason: err instanceof Error ? err.message : String(err) };
|
|
101
96
|
}
|
|
97
|
+
};
|
|
98
|
+
for (const m of plan.mutations) {
|
|
99
|
+
const first = await replay(m, mutationReplay);
|
|
100
|
+
// #554: a first failure at the mutated step's own postcondition hides the LATER paired sites
|
|
101
|
+
// behind it; one relaxed replay (same action, the step's own expect/waitFor left out) judges them.
|
|
102
|
+
const relaxed = needsRelaxedReplay(plan, m, first) ? await replay(m, relaxedMutationReplay) : undefined;
|
|
103
|
+
mutations.push({ kind: m.kind, step: m.step, id: m.id, ...first, ...(relaxed === undefined ? {} : { relaxed }) });
|
|
102
104
|
}
|
|
103
105
|
}
|
|
104
|
-
const results = new Map(mutations.map((m) => [m.id, { outcome: m.outcome, failedSites: m.failedSites }]));
|
|
106
|
+
const results = new Map(mutations.map((m) => [m.id, { outcome: m.outcome, failedSites: m.failedSites, ...(m.relaxed === undefined ? {} : { relaxed: m.relaxed }) }]));
|
|
105
107
|
// Base failed: nothing ran, so every paired assertion is an `error` (no proof either way).
|
|
106
108
|
const judged = judgeAssertions(journey, plan, results);
|
|
107
109
|
const assertions = judged.map((a) => ({ site: a.site, check: checkOf.get(a.site) ?? a.site, verdict: a.verdict, ...(a.provedBy === undefined ? {} : { provedBy: a.provedBy }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-verify.js","sourceRoot":"","sources":["../src/journey-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,oBAAoB,
|
|
1
|
+
{"version":3,"file":"journey-verify.js","sourceRoot":"","sources":["../src/journey-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAqB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,0BAA0B,EAA0C,MAAM,kBAAkB,CAAC;AAsD/I,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,OAA6B;IAC1D,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAID,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,+GAA+G;AAC/G,SAAS,eAAe,CAAC,QAA2B,EAAE,OAAgC;IACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAAyD,EAAE,QAAwC;IACxH,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IAChD,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9I,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAsB,EAAE,CAC5C,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAC7L,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAA0B,EAAE,MAAW,0BAA0B;IAC5G,MAAM,OAAO,GAAG,MAAM,IAAI,eAAe,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,mBAAmB,CAAC,oBAAoB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;IACpE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjH,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjF,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAG1B,MAAM,MAAM,GAAG,KAAK,EAAE,CAAkB,EAAE,QAA+B,EAAqB,EAAE;YAC9F,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE;oBAC3B,kBAAkB,EAAE,IAAI;oBACxB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;oBAC9F,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC;oBACxF,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;iBAC/E,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;gBACtC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACzH,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;oBACvF,OAAO;wBACL,OAAO,EAAE,aAAa;wBACtB,WAAW,EAAE,EAAE;wBACf,GAAG,aAAa;wBAChB,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,+BAA+B,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;qBAC5J,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBAC1D,WAAW,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;oBACtD,GAAG,aAAa;oBAChB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7D,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACzG,CAAC;QACH,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC9C,6FAA6F;YAC7F,mGAAmG;YACnG,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxG,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAC7I,CAAC;IACF,2FAA2F;IAC3F,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAA6B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5M,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACvH,MAAM,KAAK,GAAG,CAAC,CAAmB,EAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAChG,MAAM,MAAM,GAAwB;QAClC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC9B,WAAW;QACX,IAAI,EAAE,UAAU;QAChB,OAAO;QACP,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3C,SAAS;QACT,UAAU;QACV,OAAO,EAAE;YACP,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;YAC7B,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;YACjC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;YACzB,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;YAChC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;SAC5B;KACF,CAAC;IACF,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,gGAAgG;IAChG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC9B,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACvC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;QAChC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE;KACnB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CAAC,CAAyB;IAC3D,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jevitate/cli",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "Autonomous browser testing that turns discovered bugs into deterministic regression tests: explore a web app in a real browser, confirm findings with evidence, and replay them as regressions in CI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -63,26 +63,26 @@
|
|
|
63
63
|
"esbuild": "^0.28.2",
|
|
64
64
|
"@jevitate/ai-core": "0.1.0",
|
|
65
65
|
"@jevitate/daemon": "0.1.0",
|
|
66
|
-
"@jevitate/domain": "0.1.0",
|
|
67
66
|
"@jevitate/example-site": "0.1.0",
|
|
68
|
-
"@jevitate/findings": "0.1.0",
|
|
69
67
|
"@jevitate/explore": "0.1.0",
|
|
68
|
+
"@jevitate/findings": "0.1.0",
|
|
69
|
+
"@jevitate/domain": "0.1.0",
|
|
70
70
|
"@jevitate/inbox": "0.1.0",
|
|
71
|
-
"@jevitate/load": "0.1.0",
|
|
72
71
|
"@jevitate/interpreter": "0.1.0",
|
|
72
|
+
"@jevitate/journey": "0.1.0",
|
|
73
|
+
"@jevitate/load": "0.1.0",
|
|
73
74
|
"@jevitate/missions": "0.1.0",
|
|
74
75
|
"@jevitate/mcp-facade": "0.1.0",
|
|
75
|
-
"@jevitate/journey": "0.1.0",
|
|
76
76
|
"@jevitate/playwright": "0.1.0",
|
|
77
|
-
"@jevitate/recording": "0.1.0",
|
|
78
77
|
"@jevitate/recorder": "0.1.0",
|
|
79
|
-
"@jevitate/
|
|
80
|
-
"@jevitate/screenplay": "0.1.0",
|
|
78
|
+
"@jevitate/recording": "0.1.0",
|
|
81
79
|
"@jevitate/runtime": "0.1.0",
|
|
80
|
+
"@jevitate/screenplay": "0.1.0",
|
|
81
|
+
"@jevitate/regression": "0.1.0",
|
|
82
82
|
"@jevitate/skills": "0.1.0",
|
|
83
83
|
"@jevitate/sources": "0.1.0",
|
|
84
|
-
"@jevitate/
|
|
85
|
-
"@jevitate/
|
|
84
|
+
"@jevitate/storage-sqlite": "0.1.0",
|
|
85
|
+
"@jevitate/ux": "0.1.0"
|
|
86
86
|
},
|
|
87
87
|
"scripts": {
|
|
88
88
|
"build": "node scripts/generate-build-info.mjs && tsc --build",
|