@jevitate/cli 0.16.1 → 0.18.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/README.md +55 -5
- package/dist/author-journey-cli.js +11 -8
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +3126 -1078
- package/dist/build-info.generated.js +3 -3
- package/dist/catalog-api.d.ts +22 -0
- package/dist/catalog-api.js +49 -0
- package/dist/catalog-api.js.map +1 -1
- package/dist/catalog-cli.js +59 -37
- package/dist/catalog-cli.js.map +1 -1
- package/dist/cli-shared.d.ts +6 -1
- package/dist/cli-shared.js +11 -2
- package/dist/cli-shared.js.map +1 -1
- package/dist/exit-codes.js +9 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/journey-anchor-cli.js +16 -8
- package/dist/journey-anchor-cli.js.map +1 -1
- package/dist/journey-annotate-cli.js +10 -5
- package/dist/journey-annotate-cli.js.map +1 -1
- package/dist/journey-api.d.ts +10 -0
- package/dist/journey-api.js +23 -2
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-bundle.d.ts +83 -0
- package/dist/journey-bundle.js +252 -0
- package/dist/journey-bundle.js.map +1 -0
- package/dist/journey-chain.d.ts +105 -0
- package/dist/journey-chain.js +331 -0
- package/dist/journey-chain.js.map +1 -0
- package/dist/journey-cli/anchors.js +11 -6
- package/dist/journey-cli/anchors.js.map +1 -1
- package/dist/journey-cli/chain.d.ts +8 -0
- package/dist/journey-cli/chain.js +113 -0
- package/dist/journey-cli/chain.js.map +1 -0
- package/dist/journey-cli/find.js +10 -5
- package/dist/journey-cli/find.js.map +1 -1
- package/dist/journey-cli/lint.js +13 -9
- package/dist/journey-cli/lint.js.map +1 -1
- package/dist/journey-cli/list.js +10 -5
- package/dist/journey-cli/list.js.map +1 -1
- package/dist/journey-cli/migrate.js +13 -6
- package/dist/journey-cli/migrate.js.map +1 -1
- package/dist/journey-cli/promote.js +11 -6
- package/dist/journey-cli/promote.js.map +1 -1
- package/dist/journey-cli/publish.js +12 -6
- package/dist/journey-cli/publish.js.map +1 -1
- package/dist/journey-cli/review.js +14 -8
- package/dist/journey-cli/review.js.map +1 -1
- package/dist/journey-cli/run.js +25 -10
- package/dist/journey-cli/run.js.map +1 -1
- package/dist/journey-cli/shared.d.ts +19 -1
- package/dist/journey-cli/shared.js +28 -0
- package/dist/journey-cli/shared.js.map +1 -1
- package/dist/journey-cli/verify.js +13 -6
- package/dist/journey-cli/verify.js.map +1 -1
- package/dist/journey-cli-bundle.d.ts +4 -0
- package/dist/journey-cli-bundle.js +70 -0
- package/dist/journey-cli-bundle.js.map +1 -0
- package/dist/journey-cli-readiness.d.ts +4 -0
- package/dist/journey-cli-readiness.js +163 -0
- package/dist/journey-cli-readiness.js.map +1 -0
- package/dist/journey-cli.d.ts +1 -1
- package/dist/journey-cli.js +9 -1
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-cli.js +10 -5
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-handback.d.ts +62 -0
- package/dist/journey-handback.js +150 -0
- package/dist/journey-handback.js.map +1 -0
- package/dist/journey-link-api.js +1 -1
- package/dist/journey-link-api.js.map +1 -1
- package/dist/journey-link-cli.js +13 -8
- package/dist/journey-link-cli.js.map +1 -1
- package/dist/journey-readiness.d.ts +104 -0
- package/dist/journey-readiness.js +369 -0
- package/dist/journey-readiness.js.map +1 -0
- package/dist/journey-verify.d.ts +2 -0
- package/dist/journey-verify.js +14 -1
- package/dist/journey-verify.js.map +1 -1
- package/dist/mcp-cli-tools.js +79 -20
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/program.js +3 -0
- package/dist/program.js.map +1 -1
- package/dist/project-layout.d.ts +57 -0
- package/dist/project-layout.js +144 -0
- package/dist/project-layout.js.map +1 -0
- package/dist/project-where.d.ts +4 -0
- package/dist/project-where.js +48 -0
- package/dist/project-where.js.map +1 -0
- package/package.json +9 -9
package/dist/journey-cli/lint.js
CHANGED
|
@@ -6,28 +6,33 @@ import { anchorEditFailure } from "../journey-anchor-cli.js";
|
|
|
6
6
|
import { fixJourneyAnchors } from "../journey-anchor-api.js";
|
|
7
7
|
import { currentEngineInfo } from "../engine.js";
|
|
8
8
|
import { renderJourneyLintSarif } from "../journey-lint-sarif.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { emitJson } from "../cli-shared.js";
|
|
10
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
11
|
+
import { DEPRECATED_DIR_HELP, journeyLayout, lintFindingLine } from "./shared.js";
|
|
11
12
|
import { FsJourneyStore } from "@jevitate/journey";
|
|
12
13
|
import { journeyLinkWarnings } from "../journey-link-hints.js";
|
|
13
14
|
/** Registers `jevitate journey lint`. */
|
|
14
15
|
export function registerJourneyLint(journey, program, deps) {
|
|
15
16
|
// #401 — the assertion-strength lint: which assertions cannot prove the Journey's outcome. CI can
|
|
16
17
|
// gate on it (`--json`/`--sarif`, exit 1 when any error); `promote` runs the same lint first.
|
|
17
|
-
journey
|
|
18
|
+
withProjectFlags(journey
|
|
18
19
|
.command("lint <id>")
|
|
19
20
|
.description("report a Journey's weak assertions (writes without an asserted effect, visibility-only claims, nothing after the last write, …)")
|
|
20
|
-
.option("--dir <path>",
|
|
21
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP))
|
|
21
22
|
.option("--sarif <file>", "also write a SARIF 2.1.0 log here")
|
|
22
23
|
.option("--fix", "#487: stamp the step id of each anchor that references a step by number only, write the Journey (#507: on a promoted Journey its approval goes stale), and report what was fixed")
|
|
23
24
|
.option("--json", "emit a JSON envelope")
|
|
24
25
|
.action(async function (id) {
|
|
25
|
-
const { dir, json, sarif, fix } = this.opts();
|
|
26
|
+
const { dir, project, journeysDir, json, sarif, fix } = this.opts();
|
|
27
|
+
const layout = journeyLayout(program, deps, { dir, project, journeysDir });
|
|
28
|
+
if (layout === null)
|
|
29
|
+
return;
|
|
30
|
+
const resolvedJourneysDir = layout.journeysDir;
|
|
26
31
|
try {
|
|
27
32
|
let fixResult;
|
|
28
33
|
if (fix === true) {
|
|
29
34
|
try {
|
|
30
|
-
fixResult = await fixJourneyAnchors(
|
|
35
|
+
fixResult = await fixJourneyAnchors(resolvedJourneysDir, id);
|
|
31
36
|
}
|
|
32
37
|
catch (err) {
|
|
33
38
|
if (err instanceof UnknownJourneyError)
|
|
@@ -39,11 +44,10 @@ export function registerJourneyLint(journey, program, deps) {
|
|
|
39
44
|
const fixed = fixResult?.stamped ?? [];
|
|
40
45
|
// #507: stamping a promoted Journey makes its approval stale — say so, with the re-approval command.
|
|
41
46
|
const reapproval = fixResult?.needsReapproval === true ? { needsReapproval: true, reapproveCommand: fixResult.reapproveCommand } : {};
|
|
42
|
-
const journeysDir = resolveJourneysDir(deps, dir);
|
|
43
47
|
const catalogDir = resolveCatalogDir(deps.catalogDir);
|
|
44
|
-
const linted = await lintJourneyById(
|
|
48
|
+
const linted = await lintJourneyById(resolvedJourneysDir, id, { catalogDir });
|
|
45
49
|
// #523: catalog-aware, advisory: a missing job / persona link is a warning with its fix.
|
|
46
|
-
const stored = await new FsJourneyStore(
|
|
50
|
+
const stored = await new FsJourneyStore(resolvedJourneysDir).get(id);
|
|
47
51
|
const linkFindings = stored === null ? [] : await journeyLinkWarnings(catalogDir, stored);
|
|
48
52
|
const result = { ...linted, findings: [...linted.findings, ...linkFindings], warnings: linted.warnings + linkFindings.length };
|
|
49
53
|
if (sarif !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/journey-cli/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAgB,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/journey-cli/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/journey-cli/list.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { FsJourneyStore } from "@jevitate/journey";
|
|
2
2
|
import { ok, fail } from "../envelope.js";
|
|
3
3
|
import { describeProvenance } from "../approval-provenance.js";
|
|
4
|
-
import {
|
|
4
|
+
import { emitJson } from "../cli-shared.js";
|
|
5
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
6
|
+
import { DEPRECATED_DIR_HELP, journeyLayout } from "./shared.js";
|
|
5
7
|
/** Registers `jevitate journey list`. */
|
|
6
8
|
export function registerJourneyList(journey, program, deps) {
|
|
7
9
|
/**
|
|
@@ -12,14 +14,17 @@ export function registerJourneyList(journey, program, deps) {
|
|
|
12
14
|
* mcp-facade) see. Keeping these distinct means `list` is useful for
|
|
13
15
|
* authoring/debugging while `find` genuinely reflects what's discoverable.
|
|
14
16
|
*/
|
|
15
|
-
journey
|
|
17
|
+
withProjectFlags(journey
|
|
16
18
|
.command("list")
|
|
17
|
-
.option("--dir <path>",
|
|
19
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP))
|
|
18
20
|
.option("--json", "emit a JSON envelope")
|
|
19
21
|
.action(async function () {
|
|
20
|
-
const { dir, json } = this.opts();
|
|
22
|
+
const { dir, project, journeysDir, json } = this.opts();
|
|
23
|
+
const layout = journeyLayout(program, deps, { dir, project, journeysDir });
|
|
24
|
+
if (layout === null)
|
|
25
|
+
return;
|
|
21
26
|
try {
|
|
22
|
-
const store = new FsJourneyStore(
|
|
27
|
+
const store = new FsJourneyStore(layout.journeysDir);
|
|
23
28
|
const metas = await store.list();
|
|
24
29
|
const envelope = ok(metas);
|
|
25
30
|
if (json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/journey-cli/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAgB,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/journey-cli/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,yCAAyC;AACzC,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,OAAgB,EAAE,IAAa;IACnF;;;;;;;OAOG;IACH,gBAAgB,CAAC,OAAO;SACrB,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;SAC5C,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAA4E,CAAC;QAClI,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;gBAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,GAAG,EAAE,CAAC,oFAAoF,CAAC,CAAC;gBAC9F,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,iHAAiH;wBACjH,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC5G,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,IAAI,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -5,12 +5,14 @@ import { migrateLabels, renderMigrateLabels } from "../journey-labels-migrate-ap
|
|
|
5
5
|
import { resolveCatalogDir } from "../catalog-api.js";
|
|
6
6
|
import { withSiteGate } from "../site-gate-cli.js";
|
|
7
7
|
import { environmentFromFlags, isEnvironmentError, withEnvironmentFlags } from "../environments.js";
|
|
8
|
-
import { resolveDbPath,
|
|
8
|
+
import { resolveDbPath, withBrowserLaunchFlags, browserRunFromFlags, collectParam, emitJson, environmentSeams } from "../cli-shared.js";
|
|
9
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
10
|
+
import { DEPRECATED_DIR_HELP, journeyLayout } from "./shared.js";
|
|
9
11
|
/** Registers `jevitate journey migrate`. */
|
|
10
12
|
export function registerJourneyMigrate(journey, program, deps) {
|
|
11
13
|
// #467b — the one-time step-id backfill: CLI only (a repo rewrite the operator runs and commits; no MCP tool).
|
|
12
14
|
// #497 — `--labels`: the opt-in label backfill; a real replay of each Journey (the app must be running). CLI only.
|
|
13
|
-
withEnvironmentFlags(withBrowserLaunchFlags(journey.command("migrate")))
|
|
15
|
+
withEnvironmentFlags(withBrowserLaunchFlags(withProjectFlags(journey.command("migrate"))))
|
|
14
16
|
.description("one-time repo rewrite, CLI only. #467: --step-ids mints a stable step id on every recorded step that has none (every Journey and recording in the project) and points anchors at them. #497: --labels REPLAYS the Journeys (the app must be running; side effects happen) and stores each step's visible label for the review sheet. Both change every promoted Journey's hash: re-approve them (journey review --stale). Never approves")
|
|
15
17
|
.option("--step-ids", "mint missing step ids")
|
|
16
18
|
.option("--labels", "#497: replay the Journeys and store each step's visible label (exclusive with --step-ids; needs the app running)")
|
|
@@ -18,10 +20,15 @@ export function registerJourneyMigrate(journey, program, deps) {
|
|
|
18
20
|
.option("--param <kv>", "#497: with --labels, a replay param as key=value (repeatable; each Journey gets only the ones it declares)", collectParam, {})
|
|
19
21
|
.option("--storage-state <file>", "#497: with --labels, Playwright storageState JSON to start the replays authenticated; must exist")
|
|
20
22
|
.option("--dry-run", "report what would change, write nothing (with --labels the replay still runs)")
|
|
21
|
-
.option("--dir <path>",
|
|
23
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP)
|
|
22
24
|
.option("--json", "emit a JSON envelope")
|
|
23
25
|
.action(async function () {
|
|
24
|
-
const
|
|
26
|
+
const locationFlags = this.opts();
|
|
27
|
+
const layout = journeyLayout(program, deps, { dir: locationFlags.dir, project: locationFlags.project, journeysDir: locationFlags.journeysDir });
|
|
28
|
+
if (layout === null)
|
|
29
|
+
return;
|
|
30
|
+
const migrateJourneysDir = layout.journeysDir;
|
|
31
|
+
const { stepIds, labels, id: ids, param, storageState: storageStateFlag, dryRun, json } = this.opts();
|
|
25
32
|
if (labels === true && stepIds === true) {
|
|
26
33
|
emitJson(program, fail("E_JOURNEY_MIGRATE_ARGS", "--labels and --step-ids are exclusive: run one migration at a time"));
|
|
27
34
|
return;
|
|
@@ -37,7 +44,7 @@ export function registerJourneyMigrate(journey, program, deps) {
|
|
|
37
44
|
return;
|
|
38
45
|
}
|
|
39
46
|
try {
|
|
40
|
-
const result = await migrateStepIds({ journeysDir:
|
|
47
|
+
const result = await migrateStepIds({ journeysDir: migrateJourneysDir, projectDir: resolveCatalogDir(deps.catalogDir), dryRun: dryRun === true });
|
|
41
48
|
if (json)
|
|
42
49
|
emitJson(program, ok(result));
|
|
43
50
|
else
|
|
@@ -75,7 +82,7 @@ export function registerJourneyMigrate(journey, program, deps) {
|
|
|
75
82
|
}
|
|
76
83
|
try {
|
|
77
84
|
const result = await withSiteGate(resolveDbPath(deps), (siteGate) => migrateLabels({
|
|
78
|
-
journeysDir:
|
|
85
|
+
journeysDir: migrateJourneysDir,
|
|
79
86
|
...(ids === undefined ? {} : { ids }),
|
|
80
87
|
dryRun: dryRun === true,
|
|
81
88
|
params: param,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/journey-cli/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAA0D,MAAM,oBAAoB,CAAC;AAC5J,OAAO,EAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/journey-cli/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg,
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg, emitJson, GatewaySelectionError } from "../cli-shared.js";
|
|
2
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
2
3
|
import { REAL_JEV_FLAG_HELP, jevSetupFor } from "../catalog-cli.js";
|
|
3
4
|
import { readFile } from "node:fs/promises";
|
|
4
5
|
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
@@ -14,7 +15,7 @@ import { UnvettedLinksError, resolveCatalogDir } from "../catalog-api.js";
|
|
|
14
15
|
import { CatalogInputError } from "../catalog.js";
|
|
15
16
|
import { ApprovalFindingsError } from "../pre-approval.js";
|
|
16
17
|
import { TargetConfigError } from "../target-config.js";
|
|
17
|
-
import { FULL_FLAG_HELP, lintFindingLine, targetsOpts } from "./shared.js";
|
|
18
|
+
import { FULL_FLAG_HELP, DEPRECATED_DIR_HELP, journeyLayout, lintFindingLine, targetsOpts } from "./shared.js";
|
|
18
19
|
/** Registers `jevitate journey promote`. */
|
|
19
20
|
export function registerJourneyPromote(journey, program, deps) {
|
|
20
21
|
// #124 — promote a local Journey so it becomes discoverable/runnable (journey
|
|
@@ -22,10 +23,10 @@ export function registerJourneyPromote(journey, program, deps) {
|
|
|
22
23
|
// promote`'s human-approval-gate semantics: promoting is a deliberate,
|
|
23
24
|
// explicit act, never automatic (an authored Journey's `metadata.promoted`
|
|
24
25
|
// always starts `false` — see `explore-author-journey`/`jevitate record`).
|
|
25
|
-
journey
|
|
26
|
+
withProjectFlags(journey
|
|
26
27
|
.command("promote <id>")
|
|
27
28
|
.description("promote a local Journey (human-approval gate) so it becomes discoverable/runnable; shows its review sheet first and records the approval")
|
|
28
|
-
.option("--dir <path>",
|
|
29
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP))
|
|
29
30
|
.option("--accept-weak <reason>", "#401: promote a Journey whose assertions cannot prove its outcome, recording the reason")
|
|
30
31
|
.option("--full", FULL_FLAG_HELP)
|
|
31
32
|
.option("--reviewed-hash <hash>", "#432: the content hash of the review sheet you read; refused (E_JOURNEY_REVIEW_STALE) if the Journey changed since")
|
|
@@ -40,10 +41,14 @@ export function registerJourneyPromote(journey, program, deps) {
|
|
|
40
41
|
.option("--reason <text>", "#453: why the proposal is rejected (recorded with the rejection)")
|
|
41
42
|
.option("--json", "emit a JSON envelope")
|
|
42
43
|
.action(async function (id) {
|
|
43
|
-
const
|
|
44
|
+
const locationFlags = this.opts();
|
|
45
|
+
const layout = journeyLayout(program, deps, { dir: locationFlags.dir, project: locationFlags.project, journeysDir: locationFlags.journeysDir });
|
|
46
|
+
if (layout === null)
|
|
47
|
+
return;
|
|
48
|
+
const { json, full, acceptWeak, reviewedHash: hashFlag, reviewSheet, acceptUnvetted, acceptFindings, real, jevProvider, nonInteractiveApproval, proposal, rejectProposal, reason } = this.opts();
|
|
44
49
|
try {
|
|
45
50
|
checkNonInteractiveReason(nonInteractiveApproval);
|
|
46
|
-
const journeysDir =
|
|
51
|
+
const journeysDir = layout.journeysDir;
|
|
47
52
|
// #453: the proposal flags, validated before anything is read (an id is 12 hex characters — never a path).
|
|
48
53
|
for (const [flag, value] of [["--proposal", proposal], ["--reject-proposal", rejectProposal]]) {
|
|
49
54
|
if (value !== undefined && !isProposalId(value)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/journey-cli/promote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,sBAAsB,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/journey-cli/promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,27 +2,33 @@ import { ok, fail } from "../envelope.js";
|
|
|
2
2
|
import { UnknownJourneyError } from "../journey-api.js";
|
|
3
3
|
import { publishJourneyToSource, realGhPort, NotPromotedError, NoDeclaredOriginsError } from "../source-api.js";
|
|
4
4
|
import { UnknownSourceError, EmbeddedSecretError, UndeclaredOriginError } from "@jevitate/sources";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveSourceApiDeps, emitJson } from "../cli-shared.js";
|
|
6
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
7
|
+
import { DEPRECATED_DIR_HELP, journeyLayout } from "./shared.js";
|
|
6
8
|
/** Registers `jevitate journey publish`. */
|
|
7
9
|
export function registerJourneyPublish(journey, program, deps) {
|
|
8
10
|
// #19 — publish a promoted local Journey to a registered distributed source.
|
|
9
11
|
// Preserves every publish-side guard in `@jevitate/sources` (promoted-only,
|
|
10
12
|
// secret-references-only, declared-origin coverage); writes onto a NEW
|
|
11
13
|
// `publish/<id>` branch and degrades gracefully when `gh` is absent.
|
|
12
|
-
journey
|
|
13
|
-
.command("publish <id>")
|
|
14
|
+
withProjectFlags(journey
|
|
15
|
+
.command("publish <id>"))
|
|
14
16
|
.requiredOption("--to <source>", "registered source name to publish into")
|
|
15
|
-
.option("--dir <path>",
|
|
17
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP)
|
|
16
18
|
.option("--declare-origin <origin>", "origin this Journey is authorized for (repeatable; default: derived from navigate steps)", (v, prev) => [...prev, v], [])
|
|
17
19
|
.option("--as <id>", "publish under a different id than the local one")
|
|
18
20
|
.option("--json", "emit a JSON envelope")
|
|
19
21
|
.action(async function (id) {
|
|
20
|
-
const
|
|
22
|
+
const locationFlags = this.opts();
|
|
23
|
+
const layout = journeyLayout(program, deps, { dir: locationFlags.dir, project: locationFlags.project, journeysDir: locationFlags.journeysDir });
|
|
24
|
+
if (layout === null)
|
|
25
|
+
return;
|
|
26
|
+
const { to, declareOrigin, as: asId, json } = this.opts();
|
|
21
27
|
try {
|
|
22
28
|
const apiDeps = resolveSourceApiDeps(deps);
|
|
23
29
|
const gh = deps.sources?.gh ?? realGhPort;
|
|
24
30
|
const result = await publishJourneyToSource({ ...apiDeps, gh }, {
|
|
25
|
-
journeysDir:
|
|
31
|
+
journeysDir: layout.journeysDir,
|
|
26
32
|
id,
|
|
27
33
|
toSource: to,
|
|
28
34
|
declareOrigins: declareOrigin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/journey-cli/publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAgB,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/journey-cli/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { JEV_PROVIDER_FLAG_HELP, emitUsageLine, jevProviderArg,
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, emitUsageLine, jevProviderArg, emitJson, GatewaySelectionError } from "../cli-shared.js";
|
|
2
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
2
3
|
import { READINESS_FLAG_HELP, REAL_JEV_FLAG_HELP, jevSetupFor } from "../catalog-cli.js";
|
|
3
4
|
import { writeFile } from "node:fs/promises";
|
|
4
5
|
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
@@ -13,15 +14,15 @@ import { ReviewSidecarError } from "../journey-review-store.js";
|
|
|
13
14
|
import { resolveCatalogDir } from "../catalog-api.js";
|
|
14
15
|
import { CatalogInputError } from "../catalog.js";
|
|
15
16
|
import { TargetConfigError } from "../target-config.js";
|
|
16
|
-
import { FULL_FLAG_HELP, targetsOpts } from "./shared.js";
|
|
17
|
+
import { FULL_FLAG_HELP, DEPRECATED_DIR_HELP, journeyLayout, targetsOpts } from "./shared.js";
|
|
17
18
|
/** Registers `jevitate journey review`. */
|
|
18
19
|
export function registerJourneyReview(journey, program, deps) {
|
|
19
20
|
// #432 — the review sheet a reviewer reads before `journey promote`: what the Journey does, what it
|
|
20
21
|
// changes, what it proves, what changed since its last approval, and the content hash to bind to.
|
|
21
|
-
journey
|
|
22
|
-
.command("review [id]")
|
|
22
|
+
withProjectFlags(journey
|
|
23
|
+
.command("review [id]"))
|
|
23
24
|
.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>",
|
|
25
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP)
|
|
25
26
|
.option("--markdown", "render the sheet as Markdown")
|
|
26
27
|
.option("--full", FULL_FLAG_HELP)
|
|
27
28
|
.option("--out <file>", "write the sheet (JSON with --json, Markdown with --markdown, else text) to this file")
|
|
@@ -32,7 +33,12 @@ export function registerJourneyReview(journey, program, deps) {
|
|
|
32
33
|
.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
34
|
.option("--json", "emit a JSON envelope (the schema-checked sheet)")
|
|
34
35
|
.action(async function (id) {
|
|
35
|
-
const
|
|
36
|
+
const locationFlags = this.opts();
|
|
37
|
+
const layout = journeyLayout(program, deps, { dir: locationFlags.dir, project: locationFlags.project, journeysDir: locationFlags.journeysDir });
|
|
38
|
+
if (layout === null)
|
|
39
|
+
return;
|
|
40
|
+
const reviewJourneysDir = layout.journeysDir;
|
|
41
|
+
const { json, markdown, full, out: outFile, readiness, real, jevProvider, stale, strict } = this.opts();
|
|
36
42
|
if (json === true && markdown === true) {
|
|
37
43
|
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--json and --markdown are exclusive: pick one rendering"));
|
|
38
44
|
return;
|
|
@@ -44,7 +50,7 @@ export function registerJourneyReview(journey, program, deps) {
|
|
|
44
50
|
return;
|
|
45
51
|
}
|
|
46
52
|
try {
|
|
47
|
-
const result = await listStaleJourneys({ journeysDir:
|
|
53
|
+
const result = await listStaleJourneys({ journeysDir: reviewJourneysDir, catalogDir: resolveCatalogDir(deps.catalogDir) });
|
|
48
54
|
if (json)
|
|
49
55
|
emitJson(program, ok(result));
|
|
50
56
|
else
|
|
@@ -62,7 +68,7 @@ export function registerJourneyReview(journey, program, deps) {
|
|
|
62
68
|
}
|
|
63
69
|
try {
|
|
64
70
|
const jev = await jevSetupFor(deps, resolveCatalogDir(deps.catalogDir), { real, jevProvider });
|
|
65
|
-
const { review } = await reviewJourneyById(
|
|
71
|
+
const { review } = await reviewJourneyById(reviewJourneysDir, id, { ...targetsOpts(deps), catalogDir: resolveCatalogDir(deps.catalogDir), readiness: readiness === true, strict: strict === true, jev });
|
|
66
72
|
const warnings = (review.attention ?? []).filter((a) => a.severity === "warn").length;
|
|
67
73
|
const strictVerdict = { passed: warnings === 0, warnings };
|
|
68
74
|
const renderOpts = reviewRenderOptions({ full: full === true, toFile: outFile !== undefined });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/journey-cli/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,sBAAsB,EAAE,aAAa,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/journey-cli/review.ts"],"names":[],"mappings":"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"}
|
package/dist/journey-cli/run.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg, resolveDbPath,
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg, resolveDbPath, withBrowserLaunchFlags, browserRunFromFlags, withDemoFlags, withScreenshotsFlag, withEmulationFlags, emulationFromFlags, collectParam, emitJson, environmentSeams, writeRawResult, GatewaySelectionError, buildExploreGateways } from "../cli-shared.js";
|
|
2
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
3
|
+
import { DEPRECATED_DIR_HELP, journeyLayout } from "./shared.js";
|
|
2
4
|
import { HttpCheckOffAllowlistError } from "../http-probe.js";
|
|
3
5
|
import { TAG_FLAG, TAG_HELP, collectTag, taggedAction } from "../run-tags-cli.js";
|
|
4
6
|
import { existsSync } from "node:fs";
|
|
@@ -21,11 +23,12 @@ import { buildMissionFixtures, checkSetupRefs, withFixtureFlags } from "../fixtu
|
|
|
21
23
|
import { FixtureSetupError, FixtureSpecError, UnboundSetupRefError } from "../mission-fixtures.js";
|
|
22
24
|
import { withRecordedFixtures, fixtureDriftFor } from "../journey-fixtures.js";
|
|
23
25
|
import { withEngine } from "../engine.js";
|
|
26
|
+
import { BoundaryNoHealError, handbackExitCode, handbackLine } from "../journey-handback.js";
|
|
24
27
|
import { environmentFromFlags, fixtureRebaseUrl, isEnvironmentError, withEnvironmentFlags, withReplayAllowFlag, replayAllowFromFlags } from "../environments.js";
|
|
25
28
|
/** Registers `jevitate journey run`. */
|
|
26
29
|
export function registerJourneyRun(journey, program, deps) {
|
|
27
|
-
withScreenshotsFlag(withReplayAllowFlag(withEnvironmentFlags(withDemoFlags(withBrowserLaunchFlags(withEmulationFlags(withFixtureFlags(journey.command("run <id>")))), { recordVideo: true }))))
|
|
28
|
-
.option("--dir <path>",
|
|
30
|
+
withScreenshotsFlag(withReplayAllowFlag(withEnvironmentFlags(withDemoFlags(withBrowserLaunchFlags(withEmulationFlags(withFixtureFlags(withProjectFlags(journey.command("run <id>"))))), { recordVideo: true }))))
|
|
31
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP)
|
|
29
32
|
.option("--param <kv>", "param as key=value (repeatable)", collectParam, {})
|
|
30
33
|
.option("--storage-state <file>", "Playwright storageState JSON to start the session authenticated (#118: required when the journey declares metadata.requiresAuth); must exist")
|
|
31
34
|
// Ticket #7 (additive): opt a run into scoped self-healing. Default
|
|
@@ -50,6 +53,11 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
50
53
|
.option("--json", "emit a JSON envelope")
|
|
51
54
|
.option(TAG_FLAG, TAG_HELP, collectTag, [])
|
|
52
55
|
.action(taggedAction(program, "journey run", async function (id) {
|
|
56
|
+
const locationFlags = this.opts();
|
|
57
|
+
const layout = journeyLayout(program, deps, { dir: locationFlags.dir, project: locationFlags.project, journeysDir: locationFlags.journeysDir });
|
|
58
|
+
if (layout === null)
|
|
59
|
+
return;
|
|
60
|
+
const runJourneysDir = layout.journeysDir;
|
|
53
61
|
const { env: envName, baseUrl } = this.opts();
|
|
54
62
|
// #247: --env/--base-url choose where the Journey runs (unknown env / bad file → 64, nothing opened).
|
|
55
63
|
let environment;
|
|
@@ -71,7 +79,7 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
71
79
|
...(ownFixtureFlags.before === undefined && environment?.hooks?.before !== undefined ? { before: environment.hooks.before } : {}),
|
|
72
80
|
...(ownFixtureFlags.after === undefined && environment?.hooks?.after !== undefined ? { after: environment.hooks.after } : {}),
|
|
73
81
|
};
|
|
74
|
-
const {
|
|
82
|
+
const { param, storageState: storageStateFlag, selfHeal, real, fakeAi, jevProvider, json, screenshots: _screenshots, actionDeltas, stepResponseTimeout, changes, changeNote, healMaxAttempts, healMaxModelCalls, healMaxMs, healMaxRunAttempts, healMaxRunMs, ...emulationFlags } = this.opts();
|
|
75
83
|
// --storage-state wins; else the environment's own session (~/.jevitate/targets.json[<origin>]).
|
|
76
84
|
const storageState = storageStateFlag ?? environment?.storageState;
|
|
77
85
|
if (storageState !== undefined && !existsSync(storageState)) {
|
|
@@ -125,7 +133,7 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
125
133
|
try {
|
|
126
134
|
validateJourneyHeal(healRequest, CLI_HEAL_NAMES);
|
|
127
135
|
if (selfHealMode !== "fail-closed")
|
|
128
|
-
healScope = await readJourneyChangeScope(healRequest,
|
|
136
|
+
healScope = await readJourneyChangeScope(healRequest, runJourneysDir);
|
|
129
137
|
}
|
|
130
138
|
catch (err) {
|
|
131
139
|
if (err instanceof JourneyHealArgsError || err instanceof ChangesArgsError || err instanceof ChangesInputError) {
|
|
@@ -166,11 +174,11 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
166
174
|
// (fail-closed secret mode) — only `selfHeal.mode` is threaded from
|
|
167
175
|
// the flag; a `--secret-mode` override is a later slice's concern.
|
|
168
176
|
// #544: no --fixtures → the Journey's recorded fixtures (a missing file is refused before any browser).
|
|
169
|
-
const recorded = await withRecordedFixtures(fixtureFlags, { dir:
|
|
177
|
+
const recorded = await withRecordedFixtures(fixtureFlags, { dir: runJourneysDir, id });
|
|
170
178
|
let fixtureDrift;
|
|
171
179
|
const result = await withSiteGate(resolveDbPath(deps), (siteGate) => runJourneyProgrammatically({
|
|
172
180
|
...(siteGate === undefined ? {} : { siteGate }),
|
|
173
|
-
dir:
|
|
181
|
+
dir: runJourneysDir,
|
|
174
182
|
id,
|
|
175
183
|
params: param,
|
|
176
184
|
policy,
|
|
@@ -207,15 +215,17 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
207
215
|
if (fixtureDrift !== undefined && !json)
|
|
208
216
|
program.configureOutput().writeErr?.(`warning: ${fixtureDrift.message}\n`);
|
|
209
217
|
// #246 (informational, never failing): how many steps say why — `journey annotate` drafts the rest.
|
|
210
|
-
const intent = await journeyIntentCoverage(
|
|
218
|
+
const intent = await journeyIntentCoverage(runJourneysDir, id);
|
|
211
219
|
if (intent !== undefined && intent.withoutObjective > 0 && !json) {
|
|
212
220
|
program.configureOutput().writeErr?.(`note: ${intent.withoutObjective} of ${intent.steps} step(s) have no objective — draft them with \`jevitate journey annotate ${id}\`\n`);
|
|
213
221
|
}
|
|
214
222
|
const envelope = ok({ ...result, ...(intent === undefined ? {} : { intent }), ...(fixtureDrift === undefined ? {} : { fixtureDrift }) });
|
|
223
|
+
// #583: a declared prepare-only boundary decides the exit too — a run that sent a write is never
|
|
224
|
+
// a pass (`submitted`), and only `prepared` keeps the run's own code.
|
|
225
|
+
const code = handbackExitCode(journeyExitCode(result.outcome), result.handback);
|
|
215
226
|
if (json) {
|
|
216
227
|
emitJson(program, envelope);
|
|
217
228
|
// #453: ok → 0; healed-pending-review → 5 (a proposed revision, never a pass); else 1.
|
|
218
|
-
const code = journeyExitCode(result.outcome);
|
|
219
229
|
if (code !== 0)
|
|
220
230
|
process.exitCode = code;
|
|
221
231
|
}
|
|
@@ -224,7 +234,9 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
224
234
|
// #453: a self-heal run also says, in words, what happened and what a person does next.
|
|
225
235
|
if (selfHealMode !== "fail-closed")
|
|
226
236
|
program.configureOutput().writeErr?.(journeyRunSummary(id, result));
|
|
227
|
-
|
|
237
|
+
if (result.handback !== undefined)
|
|
238
|
+
program.configureOutput().writeOut?.(`${handbackLine(result.handback)}\n`);
|
|
239
|
+
process.exitCode = code;
|
|
228
240
|
}
|
|
229
241
|
}
|
|
230
242
|
catch (err) {
|
|
@@ -248,6 +260,9 @@ export function registerJourneyRun(journey, program, deps) {
|
|
|
248
260
|
else if (err instanceof FixtureSpecError || err instanceof UnboundSetupRefError) {
|
|
249
261
|
emitJson(program, fail(err.code, err.message));
|
|
250
262
|
}
|
|
263
|
+
else if (err instanceof BoundaryNoHealError) {
|
|
264
|
+
emitJson(program, fail(err.code, err.message));
|
|
265
|
+
}
|
|
251
266
|
else if (err instanceof ParamValidationError) {
|
|
252
267
|
emitJson(program, fail("E_INVALID_PARAMS", String(err.message)));
|
|
253
268
|
}
|