@jevitate/cli 0.12.0 → 0.14.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/author-journey-cli.d.ts +9 -0
- package/dist/author-journey-cli.js +18 -1
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +25673 -24216
- package/dist/build-info.generated.js +2 -2
- package/dist/catalog-analysis.js +4 -2
- package/dist/catalog-analysis.js.map +1 -1
- package/dist/catalog-bundle-api.js +1 -3
- package/dist/catalog-bundle-api.js.map +1 -1
- package/dist/catalog-bundle-findings.js +1 -3
- package/dist/catalog-bundle-findings.js.map +1 -1
- package/dist/catalog-bundle.js +1 -4
- package/dist/catalog-bundle.js.map +1 -1
- package/dist/catalog-cli.js +48 -6
- package/dist/catalog-cli.js.map +1 -1
- package/dist/catalog-review.d.ts +8 -0
- package/dist/catalog-review.js +26 -0
- package/dist/catalog-review.js.map +1 -1
- package/dist/catalog.d.ts +42 -0
- package/dist/catalog.js +67 -4
- package/dist/catalog.js.map +1 -1
- package/dist/check-execute.js +9 -0
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.d.ts +5 -2
- package/dist/check-plan.js +9 -5
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.js +1 -3
- package/dist/check-suite.js.map +1 -1
- package/dist/cli-output.js +1 -3
- package/dist/cli-output.js.map +1 -1
- package/dist/cli-shared.d.ts +1 -1
- package/dist/cli-shared.js +2 -0
- package/dist/cli-shared.js.map +1 -1
- package/dist/defect-evidence.js +4 -8
- package/dist/defect-evidence.js.map +1 -1
- package/dist/environments.d.ts +1 -1
- package/dist/environments.js +1 -1
- package/dist/environments.js.map +1 -1
- package/dist/exit-codes.d.ts +0 -1
- package/dist/exit-codes.js +2 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/explore-adversarial.d.ts +10 -1
- package/dist/explore-adversarial.js +3 -0
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-cli/adversarial-strategy.d.ts +3 -0
- package/dist/explore-cli/adversarial-strategy.js +101 -0
- package/dist/explore-cli/adversarial-strategy.js.map +1 -0
- package/dist/explore-cli/coverage-strategy.d.ts +3 -0
- package/dist/explore-cli/coverage-strategy.js +97 -0
- package/dist/explore-cli/coverage-strategy.js.map +1 -0
- package/dist/explore-cli/feature-strategy.d.ts +3 -0
- package/dist/explore-cli/feature-strategy.js +60 -0
- package/dist/explore-cli/feature-strategy.js.map +1 -0
- package/dist/explore-cli/goal-strategy.d.ts +3 -0
- package/dist/explore-cli/goal-strategy.js +185 -0
- package/dist/explore-cli/goal-strategy.js.map +1 -0
- package/dist/explore-cli/options.d.ts +3 -0
- package/dist/explore-cli/options.js +157 -0
- package/dist/explore-cli/options.js.map +1 -0
- package/dist/explore-cli/run.d.ts +7 -0
- package/dist/explore-cli/run.js +702 -0
- package/dist/explore-cli/run.js.map +1 -0
- package/dist/explore-cli/scope-region.d.ts +17 -0
- package/dist/explore-cli/scope-region.js +24 -0
- package/dist/explore-cli/scope-region.js.map +1 -0
- package/dist/explore-cli/shared.d.ts +167 -0
- package/dist/explore-cli/shared.js +20 -0
- package/dist/explore-cli/shared.js.map +1 -0
- package/dist/explore-cli/usability-strategy.d.ts +3 -0
- package/dist/explore-cli/usability-strategy.js +137 -0
- package/dist/explore-cli/usability-strategy.js.map +1 -0
- package/dist/explore-cli.d.ts +2 -2
- package/dist/explore-cli.js +2 -1347
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-coverage.d.ts +10 -1
- package/dist/explore-coverage.js +3 -0
- package/dist/explore-coverage.js.map +1 -1
- package/dist/explore-feature.d.ts +6 -0
- package/dist/explore-feature.js +1 -0
- package/dist/explore-feature.js.map +1 -1
- package/dist/explore-goal.d.ts +6 -0
- package/dist/explore-goal.js +1 -0
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-specs.d.ts +3 -1
- package/dist/explore-specs.js +2 -1
- package/dist/explore-specs.js.map +1 -1
- package/dist/github-issue-filer.js +1 -4
- package/dist/github-issue-filer.js.map +1 -1
- package/dist/goal-run-flags.d.ts +0 -1
- package/dist/goal-run-flags.js.map +1 -1
- package/dist/inbox-cli.js +1 -3
- package/dist/inbox-cli.js.map +1 -1
- package/dist/init-skills.js +1 -4
- package/dist/init-skills.js.map +1 -1
- package/dist/journey-anchor-api.d.ts +10 -9
- package/dist/journey-anchor-api.js +12 -22
- package/dist/journey-anchor-api.js.map +1 -1
- package/dist/journey-anchor-cli.d.ts +1 -1
- package/dist/journey-anchor-cli.js +22 -8
- package/dist/journey-anchor-cli.js.map +1 -1
- package/dist/journey-cli/anchors.d.ts +4 -0
- package/dist/journey-cli/anchors.js +48 -0
- package/dist/journey-cli/anchors.js.map +1 -0
- package/dist/journey-cli/find.d.ts +4 -0
- package/dist/journey-cli/find.js +44 -0
- package/dist/journey-cli/find.js.map +1 -0
- package/dist/journey-cli/lint.d.ts +4 -0
- package/dist/journey-cli/lint.js +84 -0
- package/dist/journey-cli/lint.js.map +1 -0
- package/dist/journey-cli/list.d.ts +4 -0
- package/dist/journey-cli/list.js +48 -0
- package/dist/journey-cli/list.js.map +1 -0
- package/dist/journey-cli/migrate.d.ts +4 -0
- package/dist/journey-cli/migrate.js +101 -0
- package/dist/journey-cli/migrate.js.map +1 -0
- package/dist/journey-cli/promote.d.ts +4 -0
- package/dist/journey-cli/promote.js +181 -0
- package/dist/journey-cli/promote.js.map +1 -0
- package/dist/journey-cli/publish.d.ts +4 -0
- package/dist/journey-cli/publish.js +70 -0
- package/dist/journey-cli/publish.js.map +1 -0
- package/dist/journey-cli/review.d.ts +4 -0
- package/dist/journey-cli/review.js +108 -0
- package/dist/journey-cli/review.js.map +1 -0
- package/dist/journey-cli/run.d.ts +4 -0
- package/dist/journey-cli/run.js +244 -0
- package/dist/journey-cli/run.js.map +1 -0
- package/dist/journey-cli/shared.d.ts +9 -0
- package/dist/journey-cli/shared.js +12 -0
- package/dist/journey-cli/shared.js.map +1 -0
- package/dist/journey-cli/verify.d.ts +4 -0
- package/dist/journey-cli/verify.js +125 -0
- package/dist/journey-cli/verify.js.map +1 -0
- package/dist/journey-cli.d.ts +3 -2
- package/dist/journey-cli.js +25 -950
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-link-api.d.ts +40 -0
- package/dist/journey-link-api.js +90 -0
- package/dist/journey-link-api.js.map +1 -0
- package/dist/journey-link-cli.d.ts +7 -0
- package/dist/journey-link-cli.js +58 -0
- package/dist/journey-link-cli.js.map +1 -0
- package/dist/journey-link-hints.d.ts +8 -0
- package/dist/journey-link-hints.js +68 -0
- package/dist/journey-link-hints.js.map +1 -0
- package/dist/journey-lint-sarif.js +3 -0
- package/dist/journey-lint-sarif.js.map +1 -1
- package/dist/journey-network-checks.d.ts +9 -1
- package/dist/journey-network-checks.js +55 -12
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.d.ts +9 -1
- package/dist/journey-prefix.js +12 -0
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-review/render.d.ts +43 -0
- package/dist/journey-review/render.js +461 -0
- package/dist/journey-review/render.js.map +1 -0
- package/dist/journey-review-api.d.ts +1 -0
- package/dist/journey-review-api.js +7 -0
- package/dist/journey-review-api.js.map +1 -1
- package/dist/journey-review-store.js +1 -0
- package/dist/journey-review-store.js.map +1 -1
- package/dist/journey-review.d.ts +6 -4
- package/dist/journey-review.js +18 -393
- package/dist/journey-review.js.map +1 -1
- package/dist/journey-verify.js +2 -1
- package/dist/journey-verify.js.map +1 -1
- package/dist/ledger-api.js +1 -4
- package/dist/ledger-api.js.map +1 -1
- package/dist/locator-health-api.js +1 -3
- package/dist/locator-health-api.js.map +1 -1
- package/dist/locator-health.d.ts +0 -1
- package/dist/locator-health.js +0 -3
- package/dist/locator-health.js.map +1 -1
- package/dist/log-classes.js +1 -3
- package/dist/log-classes.js.map +1 -1
- package/dist/log-sources.js +17 -1
- package/dist/log-sources.js.map +1 -1
- package/dist/mcp-api.js +16 -821
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-tools.js +48 -7
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mcp-tools/cli.d.ts +3 -0
- package/dist/mcp-tools/cli.js +20 -0
- package/dist/mcp-tools/cli.js.map +1 -0
- package/dist/mcp-tools/explore.d.ts +3 -0
- package/dist/mcp-tools/explore.js +141 -0
- package/dist/mcp-tools/explore.js.map +1 -0
- package/dist/mcp-tools/findings.d.ts +3 -0
- package/dist/mcp-tools/findings.js +277 -0
- package/dist/mcp-tools/findings.js.map +1 -0
- package/dist/mcp-tools/inbox.d.ts +3 -0
- package/dist/mcp-tools/inbox.js +106 -0
- package/dist/mcp-tools/inbox.js.map +1 -0
- package/dist/mcp-tools/journey.d.ts +3 -0
- package/dist/mcp-tools/journey.js +260 -0
- package/dist/mcp-tools/journey.js.map +1 -0
- package/dist/mcp-tools/shared.d.ts +39 -0
- package/dist/mcp-tools/shared.js +69 -0
- package/dist/mcp-tools/shared.js.map +1 -0
- package/dist/mission-fixtures.js +1 -8
- package/dist/mission-fixtures.js.map +1 -1
- package/dist/mission-queue-cli.js +1 -3
- package/dist/mission-queue-cli.js.map +1 -1
- package/dist/multi-run.js +1 -3
- package/dist/multi-run.js.map +1 -1
- package/dist/pre-approval.js +4 -4
- package/dist/pre-approval.js.map +1 -1
- package/dist/readiness.js +2 -2
- package/dist/readiness.js.map +1 -1
- package/dist/report-api.js +1 -4
- package/dist/report-api.js.map +1 -1
- package/dist/resource-preflight.js.map +1 -1
- package/dist/run-metadata.js +1 -3
- package/dist/run-metadata.js.map +1 -1
- package/dist/run-tags-cli.d.ts +0 -2
- package/dist/run-tags-cli.js +0 -4
- package/dist/run-tags-cli.js.map +1 -1
- package/dist/session-check.js +1 -3
- package/dist/session-check.js.map +1 -1
- package/dist/signal-triage.js +6 -2
- package/dist/signal-triage.js.map +1 -1
- package/dist/suite-explore-options.d.ts +8 -0
- package/dist/suite-explore-options.js +4 -0
- package/dist/suite-explore-options.js.map +1 -1
- package/dist/sweep-api.d.ts +9 -0
- package/dist/sweep-api.js +70 -4
- package/dist/sweep-api.js.map +1 -1
- package/dist/sweep-cli.d.ts +2 -0
- package/dist/sweep-cli.js +22 -5
- package/dist/sweep-cli.js.map +1 -1
- package/dist/transcript-file.d.ts +0 -3
- package/dist/transcript-file.js +0 -9
- package/dist/transcript-file.js.map +1 -1
- package/dist/ui-api.js +1 -4
- package/dist/ui-api.js.map +1 -1
- package/dist/ux-usability/analysis.d.ts +14 -0
- package/dist/ux-usability/analysis.js +106 -0
- package/dist/ux-usability/analysis.js.map +1 -0
- package/dist/ux-usability/done-adjudication.d.ts +15 -0
- package/dist/ux-usability/done-adjudication.js +56 -0
- package/dist/ux-usability/done-adjudication.js.map +1 -0
- package/dist/ux-usability/hang.d.ts +5 -0
- package/dist/ux-usability/hang.js +41 -0
- package/dist/ux-usability/hang.js.map +1 -0
- package/dist/ux-usability/loop.d.ts +15 -0
- package/dist/ux-usability/loop.js +104 -0
- package/dist/ux-usability/loop.js.map +1 -0
- package/dist/ux-usability/observe.d.ts +7 -0
- package/dist/ux-usability/observe.js +89 -0
- package/dist/ux-usability/observe.js.map +1 -0
- package/dist/ux-usability/result.d.ts +11 -0
- package/dist/ux-usability/result.js +113 -0
- package/dist/ux-usability/result.js.map +1 -0
- package/dist/ux-usability/setup.d.ts +76 -0
- package/dist/ux-usability/setup.js +204 -0
- package/dist/ux-usability/setup.js.map +1 -0
- package/dist/ux-usability/teardown.d.ts +3 -0
- package/dist/ux-usability/teardown.js +13 -0
- package/dist/ux-usability/teardown.js.map +1 -0
- package/dist/ux-usability.d.ts +20 -17
- package/dist/ux-usability.js +15 -589
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-api.js +1 -4
- package/dist/verify-fix-api.js.map +1 -1
- package/package.json +5 -6
- package/skills/jevitate-explore/SKILL.md +9 -1
- package/skills/jevitate-getting-started/SKILL.md +1 -0
- package/skills/jevitate-promotion-ready/SKILL.md +76 -0
- package/skills/jevitate-record/SKILL.md +3 -0
- package/skills/jevitate-run-journey/SKILL.md +3 -0
- package/skills/jevitate-test-campaign/SKILL.md +5 -3
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, emitUsageLine, jevProviderArg, resolveJourneysDir, emitJson, GatewaySelectionError } from "../cli-shared.js";
|
|
2
|
+
import { READINESS_FLAG_HELP, REAL_JEV_FLAG_HELP, jevSetupFor } from "../catalog-cli.js";
|
|
3
|
+
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
5
|
+
import { EXIT_CODES } from "../exit-codes.js";
|
|
6
|
+
import { ok, fail } from "../envelope.js";
|
|
7
|
+
import { UnknownJourneyError } from "../journey-api.js";
|
|
8
|
+
import { reviewRenderOptions } from "../review-render-options.js";
|
|
9
|
+
import { renderReviewMarkdown, renderReviewText } from "../journey-review.js";
|
|
10
|
+
import { reviewJourneyById } from "../journey-review-api.js";
|
|
11
|
+
import { listStaleJourneys, renderStaleJourneys } from "../journey-stale-api.js";
|
|
12
|
+
import { ReviewSidecarError } from "../journey-review-store.js";
|
|
13
|
+
import { resolveCatalogDir } from "../catalog-api.js";
|
|
14
|
+
import { CatalogInputError } from "../catalog.js";
|
|
15
|
+
import { TargetConfigError } from "../target-config.js";
|
|
16
|
+
import { FULL_FLAG_HELP, targetsOpts } from "./shared.js";
|
|
17
|
+
/** Registers `jevitate journey review`. */
|
|
18
|
+
export function registerJourneyReview(journey, program, deps) {
|
|
19
|
+
// #432 — the review sheet a reviewer reads before `journey promote`: what the Journey does, what it
|
|
20
|
+
// changes, what it proves, what changed since its last approval, and the content hash to bind to.
|
|
21
|
+
journey
|
|
22
|
+
.command("review [id]")
|
|
23
|
+
.description("a human-readable review sheet for promotion sign-off: summary, steps, side effects, inputs (names only), proof, change since last approval, content hash. #467: --stale (no id) lists every promoted Journey whose approval is stale, labelling step-id-only changes")
|
|
24
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
25
|
+
.option("--markdown", "render the sheet as Markdown")
|
|
26
|
+
.option("--full", FULL_FLAG_HELP)
|
|
27
|
+
.option("--out <file>", "write the sheet (JSON with --json, Markdown with --markdown, else text) to this file")
|
|
28
|
+
.option("--readiness", READINESS_FLAG_HELP)
|
|
29
|
+
.option("--real", REAL_JEV_FLAG_HELP)
|
|
30
|
+
.option("--jev-provider <provider>", JEV_PROVIDER_FLAG_HELP, jevProviderArg)
|
|
31
|
+
.option("--strict", "#523: exit 1 (defects) when the sheet has any ⚠ attention item, and run the code-only readiness link checks (missing job / persona) even without --readiness; advisory ○ items and Jev never fail it. With --json the envelope also carries strict: { passed, warnings }")
|
|
32
|
+
.option("--stale", "#467: instead of one sheet, list every promoted Journey whose approval is stale (needs re-approval), labelling the ones whose only change is minted step ids")
|
|
33
|
+
.option("--json", "emit a JSON envelope (the schema-checked sheet)")
|
|
34
|
+
.action(async function (id) {
|
|
35
|
+
const { dir, json, markdown, full, out: outFile, readiness, real, jevProvider, stale, strict } = this.opts();
|
|
36
|
+
if (json === true && markdown === true) {
|
|
37
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--json and --markdown are exclusive: pick one rendering"));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (stale === true) {
|
|
41
|
+
// #467: the stale list — read-only; one sheet's flags do not apply to it.
|
|
42
|
+
if (id !== undefined || markdown === true || full === true || outFile !== undefined || readiness === true || real === true || jevProvider !== undefined || strict === true) {
|
|
43
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--stale lists every stale Journey: it takes no <id> and none of --markdown/--full/--out/--readiness/--real/--jev-provider/--strict"));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const result = await listStaleJourneys({ journeysDir: resolveJourneysDir(deps, dir), catalogDir: resolveCatalogDir(deps.catalogDir) });
|
|
48
|
+
if (json)
|
|
49
|
+
emitJson(program, ok(result));
|
|
50
|
+
else
|
|
51
|
+
program.configureOutput().writeOut?.(renderStaleJourneys(result));
|
|
52
|
+
process.exitCode = 0;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
emitJson(program, fail("E_JOURNEY_REVIEW", String(err instanceof Error ? err.message : err)));
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (id === undefined) {
|
|
60
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "journey review needs a Journey <id> (or --stale for the list of Journeys needing re-approval)"));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const jev = await jevSetupFor(deps, resolveCatalogDir(deps.catalogDir), { real, jevProvider });
|
|
65
|
+
const { review } = await reviewJourneyById(resolveJourneysDir(deps, dir), id, { ...targetsOpts(deps), catalogDir: resolveCatalogDir(deps.catalogDir), readiness: readiness === true, strict: strict === true, jev });
|
|
66
|
+
const warnings = (review.attention ?? []).filter((a) => a.severity === "warn").length;
|
|
67
|
+
const strictVerdict = { passed: warnings === 0, warnings };
|
|
68
|
+
const renderOpts = reviewRenderOptions({ full: full === true, toFile: outFile !== undefined });
|
|
69
|
+
const rendered = json ? `${JSON.stringify(review, null, 2)}\n` : markdown ? renderReviewMarkdown(review, renderOpts) : renderReviewText(review, renderOpts);
|
|
70
|
+
if (outFile !== undefined)
|
|
71
|
+
await writeFile(outFile, rendered, { mode: 0o600 });
|
|
72
|
+
if (json) {
|
|
73
|
+
emitJson(program, strict === true ? Object.assign(ok(review), { strict: strictVerdict }) : ok(review));
|
|
74
|
+
}
|
|
75
|
+
else if (outFile !== undefined) {
|
|
76
|
+
program.configureOutput().writeOut?.(`review sheet for journey '${review.id}' written to ${outFile} (content hash ${review.contentHash})\n`);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
program.configureOutput().writeOut?.(rendered);
|
|
80
|
+
}
|
|
81
|
+
emitUsageLine(program, review.jev);
|
|
82
|
+
// #434: a plain review never fails on its findings (readiness and Jev answers are advice).
|
|
83
|
+
// #523: --strict fails (defects) on any ⚠ attention item; ○ items never do.
|
|
84
|
+
process.exitCode = strict === true && !strictVerdict.passed ? EXIT_CODES.defects : 0;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
if (err instanceof UnknownJourneyError) {
|
|
88
|
+
emitJson(program, fail("E_UNKNOWN_JOURNEY", String(err.message)));
|
|
89
|
+
}
|
|
90
|
+
else if (err instanceof ReviewSidecarError || err instanceof CatalogInputError) {
|
|
91
|
+
emitJson(program, fail(err.code, err.message));
|
|
92
|
+
}
|
|
93
|
+
else if (err instanceof TargetConfigError) {
|
|
94
|
+
emitJson(program, fail("E_TARGET_CONFIG", err.message));
|
|
95
|
+
}
|
|
96
|
+
else if (err instanceof GatewaySelectionError || err instanceof MissingCredentialError) {
|
|
97
|
+
emitJson(program, fail("E_AI_SETUP_REQUIRED", err.message));
|
|
98
|
+
}
|
|
99
|
+
else if (err instanceof Error && err.message.startsWith("Invalid journey id")) {
|
|
100
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", err.message));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
emitJson(program, fail("E_JOURNEY_REVIEW", String(err instanceof Error ? err.message : err)));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/journey-cli/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg, resolveDbPath, resolveJourneysDir, withBrowserLaunchFlags, browserRunFromFlags, withDemoFlags, withScreenshotsFlag, withEmulationFlags, emulationFromFlags, collectParam, emitJson, environmentSeams, writeRawResult, GatewaySelectionError, buildExploreGateways } from "../cli-shared.js";
|
|
2
|
+
import { TAG_FLAG, TAG_HELP, collectTag, taggedAction } from "../run-tags-cli.js";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { ParamValidationError } from "@jevitate/journey";
|
|
5
|
+
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
6
|
+
import { journeyExitCode, safeRunPolicy } from "@jevitate/domain";
|
|
7
|
+
import { makeEvidenceSelfHealer } from "../self-heal-adapter.js";
|
|
8
|
+
import { CLI_HEAL_NAMES, JourneyHealArgsError, journeyHealBudget, journeyRunSummary, readJourneyChangeScope, validateJourneyHeal } from "../journey-heal.js";
|
|
9
|
+
import { ChangesArgsError, ChangesInputError } from "../change-context.js";
|
|
10
|
+
import { intArg, positiveIntArg } from "../cli-args.js";
|
|
11
|
+
import { MAX_STEP_RESPONSE_TIMEOUT_MS } from "../journey-network-checks.js";
|
|
12
|
+
import { SiteGateRefusedError } from "@jevitate/runtime";
|
|
13
|
+
import { ok, fail } from "../envelope.js";
|
|
14
|
+
import { runJourneyProgrammatically, UnknownJourneyError, JourneyRequiresAuthError } from "../journey-api.js";
|
|
15
|
+
import { ExtensionMismatchError } from "../browser-run-options.js";
|
|
16
|
+
import { parseScreenshotsArg } from "../run-screenshots.js";
|
|
17
|
+
import { withSiteGate } from "../site-gate-cli.js";
|
|
18
|
+
import { journeyIntentCoverage } from "../journey-annotate-api.js";
|
|
19
|
+
import { buildMissionFixtures, checkSetupRefs, withFixtureFlags } from "../fixture-cli.js";
|
|
20
|
+
import { FixtureSetupError, FixtureSpecError, UnboundSetupRefError } from "../mission-fixtures.js";
|
|
21
|
+
import { withEngine } from "../engine.js";
|
|
22
|
+
import { environmentFromFlags, isEnvironmentError, withEnvironmentFlags } from "../environments.js";
|
|
23
|
+
/** Registers `jevitate journey run`. */
|
|
24
|
+
export function registerJourneyRun(journey, program, deps) {
|
|
25
|
+
withScreenshotsFlag(withEnvironmentFlags(withDemoFlags(withBrowserLaunchFlags(withEmulationFlags(withFixtureFlags(journey.command("run <id>")))), { recordVideo: true })))
|
|
26
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
27
|
+
.option("--param <kv>", "param as key=value (repeatable)", collectParam, {})
|
|
28
|
+
.option("--storage-state <file>", "Playwright storageState JSON to start the session authenticated (#118: required when the journey declares metadata.requiresAuth); must exist")
|
|
29
|
+
// Ticket #7 (additive): opt a run into scoped self-healing. Default
|
|
30
|
+
// `fail-closed` preserves Slice 1 behavior exactly (no healer wired). A
|
|
31
|
+
// write/irreversible step NEVER auto-heals in any mode (enforced by the
|
|
32
|
+
// runtime's write floor). `hybrid`/`full` need an AI gateway, selected
|
|
33
|
+
// with --real/--fake-ai (mirrors `explore`); requesting a heal mode
|
|
34
|
+
// without one fails CLOSED, never a silent unhealed run.
|
|
35
|
+
.option("--self-heal <mode>", "self-heal policy mode: fail-closed | hybrid | full (#453: hybrid/full need --changes and/or --change-note; a heal is proposed for review, exit 5 — never a pass)", "fail-closed")
|
|
36
|
+
.option("--changes <range>", "#453: the git range that explains a break (e.g. HEAD~1..HEAD, main...HEAD; read-only, in the journeys dir's repo) — needs --self-heal hybrid|full")
|
|
37
|
+
.option("--change-note <text>", "#453: a change note that explains a break (e.g. 'renamed \"Create New\" to \"Create\"'; repeatable) — needs --self-heal hybrid|full", (v, prev) => [...prev, v], [])
|
|
38
|
+
.option("--heal-max-attempts <n>", "#453: candidates tried per broken step (default 2)", positiveIntArg)
|
|
39
|
+
.option("--heal-max-model-calls <n>", "#453: model calls per broken step (default 6)", positiveIntArg)
|
|
40
|
+
.option("--heal-max-ms <ms>", "#453: healing time per broken step in ms (default 60000)", positiveIntArg)
|
|
41
|
+
.option("--heal-max-run-attempts <n>", "#453: candidates tried in the whole run (default 4)", positiveIntArg)
|
|
42
|
+
.option("--heal-max-run-ms <ms>", "#453: healing time in the whole run in ms (default 180000)", positiveIntArg)
|
|
43
|
+
.option("--real", "use live Jev + OpenRouter gateways for self-heal (requires keys)", false)
|
|
44
|
+
.option("--fake-ai", "use deterministic fake gateways for self-heal (pipeline smoke only)", false)
|
|
45
|
+
.option("--jev-provider <provider>", JEV_PROVIDER_FLAG_HELP, jevProviderArg)
|
|
46
|
+
.option("--step-response-timeout <ms>", "#486: how long a step's responseStatus check waits for a matching request that was sent but has no response yet, e.g. a cold start after a deploy (default 15000). A late 2xx is an advisory slow-step finding (slowSteps), not a quarantine; a non-2xx, or no response within the bound, fails. A step's own responseTimeoutMs overrides it; at most 300000", intArg({ min: 1, max: MAX_STEP_RESPONSE_TIMEOUT_MS }))
|
|
47
|
+
.option("--action-deltas", "opt-in (#303): record what each replayed step changed on the page (redacted, a code verdict per step) and compare it with the delta its Recording stored — returned as actionDeltas")
|
|
48
|
+
.option("--json", "emit a JSON envelope")
|
|
49
|
+
.option(TAG_FLAG, TAG_HELP, collectTag, [])
|
|
50
|
+
.action(taggedAction(program, "journey run", async function (id) {
|
|
51
|
+
const { env: envName, baseUrl } = this.opts();
|
|
52
|
+
// #247: --env/--base-url choose where the Journey runs (unknown env / bad file → 64, nothing opened).
|
|
53
|
+
let environment;
|
|
54
|
+
try {
|
|
55
|
+
environment = environmentFromFlags({ ...(envName === undefined ? {} : { env: envName }), ...(baseUrl === undefined ? {} : { baseUrl }) }, environmentSeams(deps));
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (!isEnvironmentError(err))
|
|
59
|
+
throw err;
|
|
60
|
+
emitJson(program, fail(err.code, err.message));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const ownFixtureFlags = this.opts();
|
|
64
|
+
// The environment's fixtures/hooks apply when the flags name none (hooks still need --allow-shell-hooks).
|
|
65
|
+
const fixtureFlags = {
|
|
66
|
+
...ownFixtureFlags,
|
|
67
|
+
...(ownFixtureFlags.before === undefined && environment?.hooks?.before !== undefined ? { before: environment.hooks.before } : {}),
|
|
68
|
+
...(ownFixtureFlags.after === undefined && environment?.hooks?.after !== undefined ? { after: environment.hooks.after } : {}),
|
|
69
|
+
};
|
|
70
|
+
const { dir, param, storageState: storageStateFlag, selfHeal, real, fakeAi, jevProvider, json, screenshots: _screenshots, actionDeltas, stepResponseTimeout, changes, changeNote, healMaxAttempts, healMaxModelCalls, healMaxMs, healMaxRunAttempts, healMaxRunMs, ...emulationFlags } = this.opts();
|
|
71
|
+
// --storage-state wins; else the environment's own session (~/.jevitate/targets.json[<origin>]).
|
|
72
|
+
const storageState = storageStateFlag ?? environment?.storageState;
|
|
73
|
+
if (storageState !== undefined && !existsSync(storageState)) {
|
|
74
|
+
emitJson(program, fail("E_JOURNEY_RUN_ARGS", `storage state not found: ${storageState}`));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// #245: demo mode, resolved (a headed run without a display refused) before any browser opens.
|
|
78
|
+
let browser;
|
|
79
|
+
try {
|
|
80
|
+
browser = browserRunFromFlags(this.opts(), deps.explore?.env ?? process.env);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
emitJson(program, fail("E_JOURNEY_RUN_ARGS", err instanceof Error ? err.message : String(err)));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// #251: an unusable --screenshots value is a usage error (64), before any browser opens.
|
|
87
|
+
let screenshots;
|
|
88
|
+
try {
|
|
89
|
+
screenshots = parseScreenshotsArg(this.opts().screenshots);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
emitJson(program, fail("E_JOURNEY_RUN_ARGS", err instanceof Error ? err.message : String(err)));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let journeyRunEmulation;
|
|
96
|
+
try {
|
|
97
|
+
journeyRunEmulation = emulationFromFlags(emulationFlags);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
emitJson(program, fail("E_JOURNEY_RUN_ARGS", err instanceof Error ? err.message : String(err)));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (selfHeal !== "fail-closed" && selfHeal !== "hybrid" && selfHeal !== "full") {
|
|
104
|
+
emitJson(program, fail("E_SELF_HEAL_MODE", `--self-heal must be one of fail-closed | hybrid | full (got '${selfHeal}')`));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const selfHealMode = selfHeal;
|
|
108
|
+
// #453 Q1: a heal needs a change context, and the change/budget flags need a heal — refused
|
|
109
|
+
// (64) before any Journey lookup, git read, model gateway or browser.
|
|
110
|
+
const healRequest = {
|
|
111
|
+
selfHeal: selfHealMode,
|
|
112
|
+
...(changes === undefined ? {} : { changes }),
|
|
113
|
+
changeNotes: changeNote,
|
|
114
|
+
...(healMaxAttempts === undefined ? {} : { maxAttempts: healMaxAttempts }),
|
|
115
|
+
...(healMaxModelCalls === undefined ? {} : { maxModelCalls: healMaxModelCalls }),
|
|
116
|
+
...(healMaxMs === undefined ? {} : { maxMs: healMaxMs }),
|
|
117
|
+
...(healMaxRunAttempts === undefined ? {} : { maxRunAttempts: healMaxRunAttempts }),
|
|
118
|
+
...(healMaxRunMs === undefined ? {} : { maxRunMs: healMaxRunMs }),
|
|
119
|
+
};
|
|
120
|
+
let healScope;
|
|
121
|
+
try {
|
|
122
|
+
validateJourneyHeal(healRequest, CLI_HEAL_NAMES);
|
|
123
|
+
if (selfHealMode !== "fail-closed")
|
|
124
|
+
healScope = await readJourneyChangeScope(healRequest, resolveJourneysDir(deps, dir));
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
if (err instanceof JourneyHealArgsError || err instanceof ChangesArgsError || err instanceof ChangesInputError) {
|
|
128
|
+
emitJson(program, fail(err.code, err.message));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
// When a heal mode is requested, build the SelfHealer HERE (this action
|
|
134
|
+
// owns `deps` + the credential preflight); a missing/unselected gateway
|
|
135
|
+
// fails CLOSED before any browser launch, rather than silently running
|
|
136
|
+
// with no healer. fail-closed needs no gateway (identical to today).
|
|
137
|
+
let selfHealer;
|
|
138
|
+
let policy = safeRunPolicy();
|
|
139
|
+
// #163: a self-healing run makes model calls — their usage (and full cost) lands on its result.
|
|
140
|
+
let healUsage;
|
|
141
|
+
if (selfHealMode !== "fail-closed") {
|
|
142
|
+
// #453: the healer is evidence-only — its model is an advisory ranker; judgment never decides a heal.
|
|
143
|
+
let gen;
|
|
144
|
+
try {
|
|
145
|
+
({ gen, usage: healUsage } = await buildExploreGateways(deps, { real: real ?? false, fakeAi: fakeAi ?? false, jevProvider }));
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
if (err instanceof MissingCredentialError || err instanceof GatewaySelectionError) {
|
|
149
|
+
emitJson(program, fail("E_AI_SETUP_REQUIRED", err.message));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
emitJson(program, fail("E_JOURNEY_RUN", String(err instanceof Error ? err.message : err)));
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
selfHealer = makeEvidenceSelfHealer(gen, healUsage === undefined ? {} : { usage: healUsage });
|
|
157
|
+
policy = { ...policy, selfHeal: { mode: selfHealMode, budget: journeyHealBudget(healRequest) } };
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
// `runJourneyProgrammatically` validates params UP FRONT (before any
|
|
161
|
+
// browser launch). The default policy stays `safeRunPolicy()`
|
|
162
|
+
// (fail-closed secret mode) — only `selfHeal.mode` is threaded from
|
|
163
|
+
// the flag; a `--secret-mode` override is a later slice's concern.
|
|
164
|
+
const result = await withSiteGate(resolveDbPath(deps), (siteGate) => runJourneyProgrammatically({
|
|
165
|
+
...(siteGate === undefined ? {} : { siteGate }),
|
|
166
|
+
dir: resolveJourneysDir(deps, dir),
|
|
167
|
+
id,
|
|
168
|
+
params: param,
|
|
169
|
+
policy,
|
|
170
|
+
selfHealer,
|
|
171
|
+
...(healScope === undefined ? {} : { heal: { scope: healScope } }),
|
|
172
|
+
browserPortFactory: deps.explore?.browserPortFactory,
|
|
173
|
+
...(browser === undefined ? {} : { browser }),
|
|
174
|
+
...(journeyRunEmulation === undefined ? {} : { emulation: journeyRunEmulation }),
|
|
175
|
+
...(screenshots === undefined ? {} : { screenshots }),
|
|
176
|
+
...(storageState !== undefined ? { storageState } : {}),
|
|
177
|
+
...(actionDeltas === true ? { actionDeltas: true } : {}),
|
|
178
|
+
...(stepResponseTimeout === undefined ? {} : { stepResponseTimeoutMs: stepResponseTimeout }),
|
|
179
|
+
...(environment === undefined ? {} : { environment }),
|
|
180
|
+
// #140: fixture HTTP steps may only reach the journey's own site (authenticated from --storage-state);
|
|
181
|
+
// #247: under an environment, its allowed origins.
|
|
182
|
+
fixtures: (site) => {
|
|
183
|
+
const fx = buildMissionFixtures(fixtureFlags, {
|
|
184
|
+
allowlist: environment === undefined ? [site] : environment.allowedOrigins,
|
|
185
|
+
baseUrl: site,
|
|
186
|
+
...(storageState !== undefined ? { storageState } : {}),
|
|
187
|
+
...(environment?.fixtures === undefined ? {} : { targetFixtures: environment.fixtures }),
|
|
188
|
+
});
|
|
189
|
+
checkSetupRefs({ "--param": Object.values(param) }, fx);
|
|
190
|
+
return fx;
|
|
191
|
+
},
|
|
192
|
+
})).then((r) => withEngine(healUsage === undefined ? r : { ...r, usage: healUsage.snapshot() }));
|
|
193
|
+
// #246 (informational, never failing): how many steps say why — `journey annotate` drafts the rest.
|
|
194
|
+
const intent = await journeyIntentCoverage(resolveJourneysDir(deps, dir), id);
|
|
195
|
+
if (intent !== undefined && intent.withoutObjective > 0 && !json) {
|
|
196
|
+
program.configureOutput().writeErr?.(`note: ${intent.withoutObjective} of ${intent.steps} step(s) have no objective — draft them with \`jevitate journey annotate ${id}\`\n`);
|
|
197
|
+
}
|
|
198
|
+
const envelope = ok(intent === undefined ? result : { ...result, intent });
|
|
199
|
+
if (json) {
|
|
200
|
+
emitJson(program, envelope);
|
|
201
|
+
// #453: ok → 0; healed-pending-review → 5 (a proposed revision, never a pass); else 1.
|
|
202
|
+
const code = journeyExitCode(result.outcome);
|
|
203
|
+
if (code !== 0)
|
|
204
|
+
process.exitCode = code;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
writeRawResult(program, envelope.data);
|
|
208
|
+
// #453: a self-heal run also says, in words, what happened and what a person does next.
|
|
209
|
+
if (selfHealMode !== "fail-closed")
|
|
210
|
+
program.configureOutput().writeErr?.(journeyRunSummary(id, result));
|
|
211
|
+
process.exitCode = journeyExitCode(result.outcome);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
if (err instanceof SiteGateRefusedError || isEnvironmentError(err)) {
|
|
216
|
+
emitJson(program, fail(err.code, err.message));
|
|
217
|
+
}
|
|
218
|
+
else if (err instanceof UnknownJourneyError) {
|
|
219
|
+
emitJson(program, fail("E_UNKNOWN_JOURNEY", String(err.message)));
|
|
220
|
+
}
|
|
221
|
+
else if (err instanceof JourneyRequiresAuthError) {
|
|
222
|
+
emitJson(program, fail("E_JOURNEY_REQUIRES_AUTH", String(err.message)));
|
|
223
|
+
}
|
|
224
|
+
else if (err instanceof ExtensionMismatchError) {
|
|
225
|
+
emitJson(program, fail(err.code, err.message));
|
|
226
|
+
}
|
|
227
|
+
else if (err instanceof FixtureSetupError) {
|
|
228
|
+
// Never run on unknown state: inconclusive, a configuration error (exit 2).
|
|
229
|
+
emitJson(program, ok(withEngine({ outcome: "inconclusive", reason: err.message, failure: { kind: "configuration", message: err.message }, attribution: "configuration" })));
|
|
230
|
+
process.exitCode = 2;
|
|
231
|
+
}
|
|
232
|
+
else if (err instanceof FixtureSpecError || err instanceof UnboundSetupRefError) {
|
|
233
|
+
emitJson(program, fail(err.code, err.message));
|
|
234
|
+
}
|
|
235
|
+
else if (err instanceof ParamValidationError) {
|
|
236
|
+
emitJson(program, fail("E_INVALID_PARAMS", String(err.message)));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
emitJson(program, fail("E_JOURNEY_RUN", String(err)));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/journey-cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { JourneyLintFinding } from "@jevitate/journey";
|
|
2
|
+
import type { CliDeps } from "../cli-shared.js";
|
|
3
|
+
/** #401: one human line per lint finding — level, step (when it has one), rule, message. */
|
|
4
|
+
/** #432: the targets.json a review sheet reads its site's safety config from (the CLI's own seam). */
|
|
5
|
+
export declare function targetsOpts(deps: CliDeps): {
|
|
6
|
+
targetsFile?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function lintFindingLine(finding: JourneyLintFinding): string;
|
|
9
|
+
export declare const FULL_FLAG_HELP = "#496: show every detail section: catalog analysis, the full lint list, locator health, provenance, the full change diff";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** #401: one human line per lint finding — level, step (when it has one), rule, message. */
|
|
2
|
+
/** #432: the targets.json a review sheet reads its site's safety config from (the CLI's own seam). */
|
|
3
|
+
export function targetsOpts(deps) {
|
|
4
|
+
const file = deps.explore?.targetsConfigPath;
|
|
5
|
+
return file === undefined ? {} : { targetsFile: file };
|
|
6
|
+
}
|
|
7
|
+
export function lintFindingLine(finding) {
|
|
8
|
+
const message = finding.message.replace(/^step \d+: /, "");
|
|
9
|
+
return `${finding.level} ${finding.step === undefined ? "" : `step ${finding.step} `}${finding.rule} ${message}${finding.fix === undefined ? "" : ` — fix: ${finding.fix}`}`;
|
|
10
|
+
}
|
|
11
|
+
export const FULL_FLAG_HELP = "#496: show every detail section: catalog analysis, the full lint list, locator health, provenance, the full change diff";
|
|
12
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/journey-cli/shared.ts"],"names":[],"mappings":"AAGA,4FAA4F;AAC5F,sGAAsG;AACtG,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAC7C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAClL,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,yHAAyH,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { ParamValidationError } from "@jevitate/journey";
|
|
3
|
+
import { ok, fail } from "../envelope.js";
|
|
4
|
+
import { SiteGateRefusedError } from "@jevitate/runtime";
|
|
5
|
+
import { UnknownJourneyError, JourneyRequiresAuthError } from "../journey-api.js";
|
|
6
|
+
import { ExtensionMismatchError } from "../browser-run-options.js";
|
|
7
|
+
import { withSiteGate } from "../site-gate-cli.js";
|
|
8
|
+
import { buildMissionFixtures, checkSetupRefs, withFixtureFlags } from "../fixture-cli.js";
|
|
9
|
+
import { FixtureSetupError, FixtureSpecError, UnboundSetupRefError } from "../mission-fixtures.js";
|
|
10
|
+
import { withEngine } from "../engine.js";
|
|
11
|
+
import { verifyAssertionLine, verifyExitCode, verifyJourneyMutations } from "../journey-verify.js";
|
|
12
|
+
import { environmentFromFlags, isEnvironmentError, withEnvironmentFlags } from "../environments.js";
|
|
13
|
+
import { resolveDbPath, resolveJourneysDir, withBrowserLaunchFlags, browserRunFromFlags, collectParam, emitJson, environmentSeams } from "../cli-shared.js";
|
|
14
|
+
/** Registers `jevitate journey verify`. */
|
|
15
|
+
export function registerJourneyVerify(journey, program, deps) {
|
|
16
|
+
// #402 — the negative proof: replay the Journey once as recorded, then once per mutation (skip a
|
|
17
|
+
// write step, abort its writes, type an empty value into a checked fill); each assertion must fail
|
|
18
|
+
// under its paired mutation. `verify` is reserved for proofs: today only `--mutate` exists.
|
|
19
|
+
withEnvironmentFlags(withBrowserLaunchFlags(withFixtureFlags(journey.command("verify <id>"))))
|
|
20
|
+
.description("prove each assertion of a Journey can fail: --mutate replays it with each write step skipped or blocked, and each checked fill emptied")
|
|
21
|
+
.option("--mutate", "run the mutation proof (required)")
|
|
22
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
23
|
+
.option("--param <kv>", "param as key=value (repeatable)", collectParam, {})
|
|
24
|
+
.option("--storage-state <file>", "Playwright storageState JSON to start each replay authenticated (as journey run)")
|
|
25
|
+
.option("--json", "emit a JSON envelope")
|
|
26
|
+
.action(async function (id) {
|
|
27
|
+
const { mutate, dir, param, storageState: storageStateFlag, json, env: envName, baseUrl } = this.opts();
|
|
28
|
+
if (mutate !== true) {
|
|
29
|
+
emitJson(program, fail("E_JOURNEY_VERIFY_ARGS", "journey verify needs --mutate (the mutation proof is the only verification it runs today)"));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let environment;
|
|
33
|
+
try {
|
|
34
|
+
environment = environmentFromFlags({ ...(envName === undefined ? {} : { env: envName }), ...(baseUrl === undefined ? {} : { baseUrl }) }, environmentSeams(deps));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (!isEnvironmentError(err))
|
|
38
|
+
throw err;
|
|
39
|
+
emitJson(program, fail(err.code, err.message));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const ownFixtureFlags = this.opts();
|
|
43
|
+
const fixtureFlags = {
|
|
44
|
+
...ownFixtureFlags,
|
|
45
|
+
...(ownFixtureFlags.before === undefined && environment?.hooks?.before !== undefined ? { before: environment.hooks.before } : {}),
|
|
46
|
+
...(ownFixtureFlags.after === undefined && environment?.hooks?.after !== undefined ? { after: environment.hooks.after } : {}),
|
|
47
|
+
};
|
|
48
|
+
const storageState = storageStateFlag ?? environment?.storageState;
|
|
49
|
+
if (storageState !== undefined && !existsSync(storageState)) {
|
|
50
|
+
emitJson(program, fail("E_JOURNEY_VERIFY_ARGS", `storage state not found: ${storageState}`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let browser;
|
|
54
|
+
try {
|
|
55
|
+
browser = browserRunFromFlags(this.opts(), deps.explore?.env ?? process.env);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
emitJson(program, fail("E_JOURNEY_VERIFY_ARGS", err instanceof Error ? err.message : String(err)));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const report = await withSiteGate(resolveDbPath(deps), (siteGate) => verifyJourneyMutations({
|
|
63
|
+
...(siteGate === undefined ? {} : { siteGate }),
|
|
64
|
+
dir: resolveJourneysDir(deps, dir),
|
|
65
|
+
id,
|
|
66
|
+
params: param,
|
|
67
|
+
browserPortFactory: deps.explore?.browserPortFactory,
|
|
68
|
+
...(browser === undefined ? {} : { browser }),
|
|
69
|
+
...(storageState !== undefined ? { storageState } : {}),
|
|
70
|
+
...(environment === undefined ? {} : { environment }),
|
|
71
|
+
// Fixtures run around EVERY replay, so each mutation starts from the same state as the base.
|
|
72
|
+
fixtures: (site) => {
|
|
73
|
+
const fx = buildMissionFixtures(fixtureFlags, {
|
|
74
|
+
allowlist: environment === undefined ? [site] : environment.allowedOrigins,
|
|
75
|
+
baseUrl: site,
|
|
76
|
+
...(storageState !== undefined ? { storageState } : {}),
|
|
77
|
+
...(environment?.fixtures === undefined ? {} : { targetFixtures: environment.fixtures }),
|
|
78
|
+
});
|
|
79
|
+
checkSetupRefs({ "--param": Object.values(param) }, fx);
|
|
80
|
+
return fx;
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
const code = verifyExitCode(report.verdict);
|
|
84
|
+
if (json) {
|
|
85
|
+
emitJson(program, ok(withEngine(report)));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const out = program.configureOutput().writeOut;
|
|
89
|
+
for (const a of report.assertions)
|
|
90
|
+
out?.(`${verifyAssertionLine(a)}\n`);
|
|
91
|
+
const s = report.summary;
|
|
92
|
+
out?.(`${report.verdict} — journey '${report.journeyId}': ${s.sensitive} sensitive, ${s.insensitive} insensitive, ${s.cascade} cascade, ${s.notApplied} not applied, ${s.error} error, ${s.unpaired} unpaired` +
|
|
93
|
+
`${report.reason === undefined ? "" : ` (${report.reason})`}\n`);
|
|
94
|
+
}
|
|
95
|
+
process.exitCode = code;
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if (err instanceof SiteGateRefusedError || isEnvironmentError(err)) {
|
|
99
|
+
emitJson(program, fail(err.code, err.message));
|
|
100
|
+
}
|
|
101
|
+
else if (err instanceof UnknownJourneyError) {
|
|
102
|
+
emitJson(program, fail("E_UNKNOWN_JOURNEY", String(err.message)));
|
|
103
|
+
}
|
|
104
|
+
else if (err instanceof JourneyRequiresAuthError) {
|
|
105
|
+
emitJson(program, fail("E_JOURNEY_REQUIRES_AUTH", String(err.message)));
|
|
106
|
+
}
|
|
107
|
+
else if (err instanceof ExtensionMismatchError) {
|
|
108
|
+
emitJson(program, fail(err.code, err.message));
|
|
109
|
+
}
|
|
110
|
+
else if (err instanceof FixtureSpecError || err instanceof UnboundSetupRefError) {
|
|
111
|
+
emitJson(program, fail(err.code, err.message));
|
|
112
|
+
}
|
|
113
|
+
else if (err instanceof ParamValidationError) {
|
|
114
|
+
emitJson(program, fail("E_INVALID_PARAMS", String(err.message)));
|
|
115
|
+
}
|
|
116
|
+
else if (err instanceof FixtureSetupError) {
|
|
117
|
+
emitJson(program, fail("E_JOURNEY_VERIFY", `fixture setup failed — nothing verified: ${err.message}`));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
emitJson(program, fail("E_JOURNEY_VERIFY", String(err instanceof Error ? err.message : err)));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/journey-cli/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/journey-cli.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import {
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliDeps } from "./cli-shared.js";
|
|
3
|
+
/** Registers `jevitate journey`: `list|find|run|promote|lint|verify|anchors|anchor|link|annotate|demo|publish`. */
|
|
3
4
|
export declare function registerJourneyCommands(program: Command, deps: CliDeps): void;
|