@jevitate/cli 0.10.0 → 0.12.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/approval-provenance.d.ts +6 -0
- package/dist/approval-provenance.js +9 -1
- package/dist/approval-provenance.js.map +1 -1
- package/dist/approved-demo.d.ts +86 -0
- package/dist/approved-demo.js +184 -0
- package/dist/approved-demo.js.map +1 -0
- package/dist/author-journey-cli.js +2 -1
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +16525 -13523
- package/dist/build-info.generated.js +2 -2
- package/dist/campaign-api.d.ts +15 -0
- package/dist/campaign-api.js +67 -6
- package/dist/campaign-api.js.map +1 -1
- package/dist/campaign-cli.js +7 -2
- package/dist/campaign-cli.js.map +1 -1
- package/dist/campaign-preflight.d.ts +76 -0
- package/dist/campaign-preflight.js +117 -0
- package/dist/campaign-preflight.js.map +1 -0
- package/dist/catalog-bundle-api.d.ts +15 -5
- package/dist/catalog-bundle-api.js +117 -14
- package/dist/catalog-bundle-api.js.map +1 -1
- package/dist/catalog-bundle-findings.d.ts +10 -0
- package/dist/catalog-bundle-findings.js +75 -1
- package/dist/catalog-bundle-findings.js.map +1 -1
- package/dist/catalog-bundle.d.ts +111 -7
- package/dist/catalog-bundle.js +208 -9
- package/dist/catalog-bundle.js.map +1 -1
- package/dist/catalog-cli.js +3 -2
- package/dist/catalog-cli.js.map +1 -1
- package/dist/check-api.js +20 -2
- package/dist/check-api.js.map +1 -1
- package/dist/check-cli.d.ts +2 -0
- package/dist/check-cli.js +25 -0
- package/dist/check-cli.js.map +1 -1
- package/dist/check-execute.d.ts +6 -0
- package/dist/check-execute.js +1 -0
- package/dist/check-execute.js.map +1 -1
- package/dist/check-types.d.ts +7 -0
- package/dist/check-types.js.map +1 -1
- package/dist/cli-output.js +15 -1
- package/dist/cli-output.js.map +1 -1
- package/dist/cold-start-report.d.ts +32 -0
- package/dist/cold-start-report.js +31 -0
- package/dist/cold-start-report.js.map +1 -0
- package/dist/defect-evidence.js +10 -5
- package/dist/defect-evidence.js.map +1 -1
- package/dist/demo-aspect-api.d.ts +11 -0
- package/dist/demo-aspect-api.js +27 -2
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/demo-aspect-cli.js +7 -1
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/demo-capture.d.ts +79 -2
- package/dist/demo-capture.js +504 -12
- package/dist/demo-capture.js.map +1 -1
- package/dist/environments.d.ts +8 -1
- package/dist/environments.js +14 -3
- package/dist/environments.js.map +1 -1
- package/dist/exit-codes.js +1 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/explore-adversarial.js +2 -2
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-cli.js +3 -2
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-goal.js +4 -3
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-shared.d.ts +11 -0
- package/dist/explore-shared.js +9 -0
- package/dist/explore-shared.js.map +1 -1
- package/dist/findings-filing.js +7 -3
- package/dist/findings-filing.js.map +1 -1
- package/dist/github-issue-filer.js +15 -9
- package/dist/github-issue-filer.js.map +1 -1
- package/dist/journeeze-api.d.ts +8 -2
- package/dist/journeeze-api.js +105 -19
- package/dist/journeeze-api.js.map +1 -1
- package/dist/journey-anchor-api.d.ts +37 -0
- package/dist/journey-anchor-api.js +58 -0
- package/dist/journey-anchor-api.js.map +1 -0
- package/dist/journey-anchor-cli.d.ts +17 -0
- package/dist/journey-anchor-cli.js +104 -0
- package/dist/journey-anchor-cli.js.map +1 -0
- package/dist/journey-api.d.ts +38 -1
- package/dist/journey-api.js +107 -10
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +0 -1
- package/dist/journey-cli.js +124 -22
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-api.d.ts +29 -0
- package/dist/journey-demo-api.js +29 -7
- package/dist/journey-demo-api.js.map +1 -1
- package/dist/journey-labels-migrate-api.d.ts +100 -0
- package/dist/journey-labels-migrate-api.js +194 -0
- package/dist/journey-labels-migrate-api.js.map +1 -0
- package/dist/journey-lint-sarif.js +6 -0
- package/dist/journey-lint-sarif.js.map +1 -1
- package/dist/journey-network-checks.d.ts +11 -0
- package/dist/journey-network-checks.js +36 -13
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-review.d.ts +12 -2
- package/dist/journey-review.js +522 -108
- package/dist/journey-review.js.map +1 -1
- package/dist/load-api.js +4 -2
- package/dist/load-api.js.map +1 -1
- package/dist/mcp-api.d.ts +3 -1
- package/dist/mcp-api.js +21 -2
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +1 -0
- package/dist/mcp-cli-tools.js +32 -9
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/openrouter-call.d.ts +23 -10
- package/dist/openrouter-call.js +14 -11
- package/dist/openrouter-call.js.map +1 -1
- package/dist/png-pixels.d.ts +12 -0
- package/dist/png-pixels.js +96 -0
- package/dist/png-pixels.js.map +1 -0
- package/dist/regression-api.js +8 -5
- package/dist/regression-api.js.map +1 -1
- package/dist/review-render-options.d.ts +17 -0
- package/dist/review-render-options.js +17 -0
- package/dist/review-render-options.js.map +1 -0
- package/dist/server-log-verify.js +2 -1
- package/dist/server-log-verify.js.map +1 -1
- package/dist/signal-triage.js +7 -3
- package/dist/signal-triage.js.map +1 -1
- package/dist/source-run-api.js +2 -2
- package/dist/source-run-api.js.map +1 -1
- package/dist/ux-usability.js +5 -2
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-api.d.ts +29 -0
- package/dist/verify-fix-api.js +45 -2
- package/dist/verify-fix-api.js.map +1 -1
- package/dist/verify-fix-cli.js +4 -0
- package/dist/verify-fix-cli.js.map +1 -1
- package/dist/zip-store.d.ts +15 -0
- package/dist/zip-store.js +93 -0
- package/dist/zip-store.js.map +1 -0
- package/package.json +14 -14
- package/skills/jevitate-demo/SKILL.md +4 -1
- package/skills/jevitate-run-journey/SKILL.md +4 -0
- package/skills/jevitate-test-campaign/SKILL.md +13 -0
- package/skills/jevitate-verify-fix/SKILL.md +5 -0
|
@@ -2,7 +2,9 @@ import { journeyEndState } from "@jevitate/journey";
|
|
|
2
2
|
import { installFlashRecorder } from "@jevitate/interpreter";
|
|
3
3
|
import { describeStep } from "@jevitate/journey";
|
|
4
4
|
import { clock } from "@jevitate/domain";
|
|
5
|
-
import {
|
|
5
|
+
import { DEFAULT_STEP_RESPONSE_TIMEOUT_MS, evaluateNetworkCheckAwaiting, evaluateOutcomeChecks, monitorFor } from "@jevitate/explore";
|
|
6
|
+
/** #486/L2: the largest `--step-response-timeout` / `stepResponseTimeoutMs` accepted (5 minutes): a step never waits longer. */
|
|
7
|
+
export const MAX_STEP_RESPONSE_TIMEOUT_MS = 300_000;
|
|
6
8
|
/** How long the network may take to go idle after the last step before the checks read it. */
|
|
7
9
|
const SETTLE_CEILING_MS = 5_000;
|
|
8
10
|
export class JourneyOutcomeChecks {
|
|
@@ -10,10 +12,13 @@ export class JourneyOutcomeChecks {
|
|
|
10
12
|
#end;
|
|
11
13
|
#steps;
|
|
12
14
|
#secrets;
|
|
15
|
+
#responseTimeoutMs;
|
|
13
16
|
#lastFailures = [];
|
|
17
|
+
#slowSteps = [];
|
|
14
18
|
/** `journey` undefined (an anchored prefix run): nothing is judged. */
|
|
15
19
|
constructor(page, journey, opts = {}) {
|
|
16
20
|
this.#page = page;
|
|
21
|
+
this.#responseTimeoutMs = opts.stepResponseTimeoutMs ?? DEFAULT_STEP_RESPONSE_TIMEOUT_MS;
|
|
17
22
|
this.#secrets = opts.secrets ?? [];
|
|
18
23
|
this.#end = journey === undefined ? [] : journeyEndState(journey);
|
|
19
24
|
this.#steps = [];
|
|
@@ -21,7 +26,7 @@ export class JourneyOutcomeChecks {
|
|
|
21
26
|
for (const p of journey?.recording.pages ?? []) {
|
|
22
27
|
for (const r of p.steps) {
|
|
23
28
|
if ((r.expectRequests ?? []).length > 0)
|
|
24
|
-
this.#steps.push({ index: i, label: describeStep(r.step), checks: r.expectRequests ?? [] });
|
|
29
|
+
this.#steps.push({ index: i, label: describeStep(r.step), checks: r.expectRequests ?? [], ...(r.responseTimeoutMs === undefined ? {} : { responseTimeoutMs: r.responseTimeoutMs }) });
|
|
25
30
|
i += 1;
|
|
26
31
|
}
|
|
27
32
|
}
|
|
@@ -29,6 +34,10 @@ export class JourneyOutcomeChecks {
|
|
|
29
34
|
get active() {
|
|
30
35
|
return this.#end.length > 0 || this.#steps.length > 0;
|
|
31
36
|
}
|
|
37
|
+
/** #486: advisory `slow-step` findings of the last `run` (empty when every response came promptly). */
|
|
38
|
+
get slowSteps() {
|
|
39
|
+
return this.#slowSteps;
|
|
40
|
+
}
|
|
32
41
|
/** #402: the failed assertion sites of the last `run` (empty when every check held, or none ran). */
|
|
33
42
|
get lastFailures() {
|
|
34
43
|
return this.#lastFailures;
|
|
@@ -54,12 +63,19 @@ export class JourneyOutcomeChecks {
|
|
|
54
63
|
},
|
|
55
64
|
};
|
|
56
65
|
}
|
|
66
|
+
#stopCaptures(monitor, capture) {
|
|
67
|
+
monitor.stopCapture(capture);
|
|
68
|
+
for (const s of this.#steps)
|
|
69
|
+
if (s.capture !== undefined)
|
|
70
|
+
monitor.stopCapture(s.capture);
|
|
71
|
+
}
|
|
57
72
|
/**
|
|
58
73
|
* Runs `replay` with the page's requests captured, then judges the checks. A replay that already
|
|
59
74
|
* failed keeps its own reason. Without checks it just runs `replay`.
|
|
60
75
|
*/
|
|
61
76
|
async run(actor, replay) {
|
|
62
77
|
this.#lastFailures = [];
|
|
78
|
+
this.#slowSteps = [];
|
|
63
79
|
if (!this.active)
|
|
64
80
|
return replay();
|
|
65
81
|
const monitor = monitorFor(this.#page);
|
|
@@ -71,17 +87,17 @@ export class JourneyOutcomeChecks {
|
|
|
71
87
|
let result;
|
|
72
88
|
try {
|
|
73
89
|
result = await replay();
|
|
74
|
-
if (result.outcome === "quarantined" || result.outcome === "heal-exhausted")
|
|
90
|
+
if (result.outcome === "quarantined" || result.outcome === "heal-exhausted") {
|
|
91
|
+
this.#stopCaptures(monitor, capture);
|
|
75
92
|
return result;
|
|
93
|
+
}
|
|
76
94
|
// A step's postcondition can hold before the write it triggered finished: wait for the network
|
|
77
95
|
// to go idle (bounded) before reading what was sent.
|
|
78
96
|
await monitor.waitSettled({ ceilingMs: SETTLE_CEILING_MS }).catch(() => undefined);
|
|
79
97
|
}
|
|
80
|
-
|
|
81
|
-
monitor
|
|
82
|
-
|
|
83
|
-
if (s.capture !== undefined)
|
|
84
|
-
monitor.stopCapture(s.capture);
|
|
98
|
+
catch (e) {
|
|
99
|
+
this.#stopCaptures(monitor, capture);
|
|
100
|
+
throw e;
|
|
85
101
|
}
|
|
86
102
|
// Step windows first (the end state's reload must not count as a step's request).
|
|
87
103
|
const stepFailureSites = [];
|
|
@@ -92,15 +108,22 @@ export class JourneyOutcomeChecks {
|
|
|
92
108
|
// A request still in flight when the step began (the previous step's write) finishes inside
|
|
93
109
|
// this window: only requests SENT from the step's start count.
|
|
94
110
|
const since = s.startedAt;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const r =
|
|
111
|
+
for (const [checkIndex, c] of s.checks.entries()) {
|
|
112
|
+
// #486: a request still awaiting its response (a cold start) is waited for, up to the bound.
|
|
113
|
+
const { result: r, slowStep } = await evaluateNetworkCheckAwaiting(c, () => ({
|
|
114
|
+
requests: window.sent().filter((q) => since === undefined || (q.startedAt !== undefined && q.startedAt >= since)),
|
|
115
|
+
truncated: window.truncated,
|
|
116
|
+
}), s.responseTimeoutMs ?? this.#responseTimeoutMs);
|
|
117
|
+
if (slowStep !== undefined)
|
|
118
|
+
this.#slowSteps.push({ ...slowStep, step: s.index + 1 });
|
|
98
119
|
if (r.passed)
|
|
99
|
-
|
|
120
|
+
continue;
|
|
100
121
|
stepFailureSites.push({ where: "step-request", step: s.index + 1, checkIndex, detail: `${r.check} — ${r.detail}` });
|
|
101
122
|
stepFailureReasons.push(`step ${s.index + 1} (${s.label}): ${r.check} — ${r.detail}`);
|
|
102
|
-
}
|
|
123
|
+
}
|
|
103
124
|
}
|
|
125
|
+
// The captures stay live through the waits above (#486): a pending request's response lands in them.
|
|
126
|
+
this.#stopCaptures(monitor, capture);
|
|
104
127
|
let end = [];
|
|
105
128
|
if (this.#end.length > 0) {
|
|
106
129
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAIlE,OAAO,EAAE,oBAAoB,EAAqB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"journey-network-checks.js","sourceRoot":"","sources":["../src/journey-network-checks.ts"],"names":[],"mappings":"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"}
|
package/dist/journey-review.d.ts
CHANGED
|
@@ -48,10 +48,20 @@ export interface JourneyReviewContext {
|
|
|
48
48
|
}
|
|
49
49
|
/** #432: the review sheet of one Journey — pure. */
|
|
50
50
|
export declare function buildJourneyReview(journey: Journey, ctx?: JourneyReviewContext): JourneyReview;
|
|
51
|
+
/** Step numbers as ranges: 1, 2, 3, 5 becomes `1–3, 5`. */
|
|
52
|
+
export declare function stepRanges(numbers: readonly number[]): string;
|
|
53
|
+
/** How the sheet is drawn. `width` wraps the text sheet (default 100); `color` adds ANSI; `full` adds the detail sections. */
|
|
54
|
+
export interface RenderOptions {
|
|
55
|
+
readonly width?: number;
|
|
56
|
+
readonly color?: boolean;
|
|
57
|
+
readonly full?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** `2026-10-11T08:33:26.979Z` as `11 Oct 2026 08:33 UTC` — parsed, not locale-formatted, so it is deterministic. */
|
|
60
|
+
export declare function humanTime(iso: string): string;
|
|
51
61
|
/** #432: the review sheet as Markdown (`journey review --markdown`). */
|
|
52
|
-
export declare function renderReviewMarkdown(review: JourneyReview): string;
|
|
62
|
+
export declare function renderReviewMarkdown(review: JourneyReview, opts?: RenderOptions): string;
|
|
53
63
|
/** #432: the review sheet as plain text (`journey review`, and `journey promote` in human mode). */
|
|
54
|
-
export declare function renderReviewText(review: JourneyReview): string;
|
|
64
|
+
export declare function renderReviewText(review: JourneyReview, opts?: RenderOptions): string;
|
|
55
65
|
/** #432: a review sheet file's content hash refused (none, or two different ones). */
|
|
56
66
|
export declare class ReviewSheetError extends Error {
|
|
57
67
|
readonly code = "E_JOURNEY_REVIEW_ARGS";
|