@jevitate/cli 0.5.0 → 0.7.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 +2 -0
- package/dist/author-journey-cli.js +93 -15
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +4249 -1396
- package/dist/build-info.generated.js +2 -2
- package/dist/cli-output.js +4 -0
- package/dist/cli-output.js.map +1 -1
- package/dist/demo-aspect-api.d.ts +6 -5
- package/dist/demo-aspect-api.js +7 -1
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/environments.js +6 -1
- package/dist/environments.js.map +1 -1
- package/dist/explore-adversarial.js +1 -1
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-author.d.ts +21 -3
- package/dist/explore-author.js +64 -32
- package/dist/explore-author.js.map +1 -1
- package/dist/explore-cli.js +73 -92
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-coverage.js +1 -1
- package/dist/explore-coverage.js.map +1 -1
- package/dist/explore-goal.js +9 -4
- package/dist/explore-goal.js.map +1 -1
- package/dist/goal-run-flags.d.ts +120 -0
- package/dist/goal-run-flags.js +220 -0
- package/dist/goal-run-flags.js.map +1 -0
- package/dist/journey-api.d.ts +72 -5
- package/dist/journey-api.js +125 -14
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +1 -1
- package/dist/journey-cli.js +168 -5
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-api.d.ts +7 -1
- package/dist/journey-demo-api.js +8 -3
- package/dist/journey-demo-api.js.map +1 -1
- package/dist/journey-demo-cli.js +3 -0
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-lint-sarif.d.ts +19 -0
- package/dist/journey-lint-sarif.js +48 -0
- package/dist/journey-lint-sarif.js.map +1 -0
- package/dist/journey-network-checks.d.ts +45 -9
- package/dist/journey-network-checks.js +117 -30
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.d.ts +24 -15
- package/dist/journey-prefix.js +53 -7
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-verify.d.ts +61 -0
- package/dist/journey-verify.js +131 -0
- package/dist/journey-verify.js.map +1 -0
- package/dist/load-api.js +9 -3
- package/dist/load-api.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +1 -0
- package/dist/mcp-cli-tools.js +61 -3
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/promotions.d.ts +15 -0
- package/dist/promotions.js +52 -0
- package/dist/promotions.js.map +1 -0
- package/dist/self-heal-adapter.js +3 -1
- package/dist/self-heal-adapter.js.map +1 -1
- package/dist/signal-triage.js +5 -1
- package/dist/signal-triage.js.map +1 -1
- package/dist/source-run-api.js +17 -7
- package/dist/source-run-api.js.map +1 -1
- package/dist/usability-capture.js +11 -1
- package/dist/usability-capture.js.map +1 -1
- package/dist/ux-usability.js +1 -1
- package/dist/ux-usability.js.map +1 -1
- package/package.json +10 -10
- package/skills/jevitate-explore/SKILL.md +11 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { type CliDeps } from "./cli-shared.js";
|
|
3
|
+
/** #369: the human summary of `explore-author-journey` (the JSON is the same data with `--json`). */
|
|
4
|
+
export declare function formatAuthorJourneyHuman(data: unknown): string;
|
|
3
5
|
/** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
|
|
4
6
|
export declare function registerAuthorJourneyCommands(program: Command, deps: CliDeps): void;
|
|
@@ -1,11 +1,60 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
3
|
-
import { UnauthorizedExploreTargetError } from "@jevitate/explore";
|
|
3
|
+
import { FixtureNotFoundError, UnauthorizedExploreTargetError } from "@jevitate/explore";
|
|
4
4
|
import { ok, fail } from "./envelope.js";
|
|
5
5
|
import { positiveIntArg } from "./cli-args.js";
|
|
6
6
|
import { runAuthorJourney, parseSuccessSpec, resolveExploreAllowlist } from "./explore-api.js";
|
|
7
7
|
import { allowWithExtensions } from "./browser-run-options.js";
|
|
8
|
-
import { resolveJourneysDir, withBrowserLaunchFlags, browserLaunchFromFlags, emitJson,
|
|
8
|
+
import { resolveJourneysDir, withBrowserLaunchFlags, browserLaunchFromFlags, emitJson, writeHumanResult, GatewaySelectionError, buildExploreGateways, withEmulationFlags, withScreenshotsFlag, } from "./cli-shared.js";
|
|
9
|
+
import { GOAL_RUN_OPTIONS, GoalRunFlagError, resolveGoalRunFlags } from "./goal-run-flags.js";
|
|
10
|
+
/**
|
|
11
|
+
* #369: the goal-run flags `explore-author-journey` shares with `explore` — every take is that goal
|
|
12
|
+
* run, so it can reproduce whatever setup the goal run needed (in `explore`'s own order).
|
|
13
|
+
*/
|
|
14
|
+
const AUTHOR_GOAL_RUN_FLAGS = [
|
|
15
|
+
"successWhen", "allowVacuousChecks", "actionDeltas", "secret", "secretField", "totp", "typeFixture", "fixture",
|
|
16
|
+
"saveStorageState", "replyWaitMs", "replyQuietMs", "replyCeilingMs", "replyMaxChars", "jobWaitMs", "deny", "paid",
|
|
17
|
+
"allowDestructive", "dialogs", "readRpc", "hangReplays", "settleIgnore", "longPollMs", "apiPrefix", "ignoreNoProgress",
|
|
18
|
+
"allowSecretCmd", "secretCmdAttempts",
|
|
19
|
+
];
|
|
20
|
+
/** #369: one take's diagnostics as human lines (the paths a person opens next). */
|
|
21
|
+
function takeLines(label, d) {
|
|
22
|
+
const lines = [` ${label}: ${d.outcome}${d.stop === undefined ? "" : ` (stop: ${d.stop})`}${d.actions === undefined ? "" : ` · ${d.actions} action(s), ${d.decisions ?? 0} decision(s)`}`];
|
|
23
|
+
if (d.reason !== undefined)
|
|
24
|
+
lines.push(` reason: ${d.reason}`);
|
|
25
|
+
for (const c of d.checks ?? [])
|
|
26
|
+
lines.push(` check ${c.passed ? "held" : "FAILED"}: ${c.check}${c.passed ? "" : ` — ${c.detail}`}`);
|
|
27
|
+
if (d.resultPath !== undefined)
|
|
28
|
+
lines.push(` result: ${d.resultPath}`);
|
|
29
|
+
if (d.transcriptPath !== undefined)
|
|
30
|
+
lines.push(` transcript: ${d.transcriptPath}`);
|
|
31
|
+
for (const r of d.recordingPaths ?? [])
|
|
32
|
+
lines.push(` recording: ${r}`);
|
|
33
|
+
if (d.screenshotsDir !== undefined)
|
|
34
|
+
lines.push(` screenshots: ${d.screenshotsDir}`);
|
|
35
|
+
return lines;
|
|
36
|
+
}
|
|
37
|
+
/** #369: the human summary of `explore-author-journey` (the JSON is the same data with `--json`). */
|
|
38
|
+
export function formatAuthorJourneyHuman(data) {
|
|
39
|
+
const r = data;
|
|
40
|
+
const lines = [];
|
|
41
|
+
if (r.outcome === "authored") {
|
|
42
|
+
const m = r.journey.metadata;
|
|
43
|
+
lines.push(`AUTHORED: journey ${m.id} (unpromoted; \`jevitate journey promote ${m.id}\` makes it runnable)`);
|
|
44
|
+
if (m.params.length > 0)
|
|
45
|
+
lines.push(` params: ${m.params.join(", ")}`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
lines.push(`NOT REACHED: ${r.reason}`);
|
|
49
|
+
}
|
|
50
|
+
if (r.takes !== undefined)
|
|
51
|
+
lines.push(` takes: ${r.takes.succeeded}/${r.takes.run} reached the goal (${r.takes.requested} requested)`);
|
|
52
|
+
if (r.discovery !== undefined)
|
|
53
|
+
lines.push(...takeLines("discovery", r.discovery));
|
|
54
|
+
if (r.outcome === "authored")
|
|
55
|
+
(r.corroboratingTakes ?? []).forEach((d, i) => lines.push(...takeLines(`take ${i + 2}`, d)));
|
|
56
|
+
return `${lines.join("\n")}\n`;
|
|
57
|
+
}
|
|
9
58
|
/** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
|
|
10
59
|
export function registerAuthorJourneyCommands(program, deps) {
|
|
11
60
|
// Additive: `explore author-journey` — Jev-driving authors a promotable
|
|
@@ -13,13 +62,13 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
13
62
|
// through RxD's diff/postdoc pipeline, and writes an UNPROMOTED,
|
|
14
63
|
// parameterized Journey to the journeys store. The record-by-demonstration
|
|
15
64
|
// authoring path is untouched.
|
|
16
|
-
withBrowserLaunchFlags(program
|
|
65
|
+
const cmd = withBrowserLaunchFlags(program
|
|
17
66
|
.command("explore-author-journey")
|
|
18
67
|
.description("Jev-driving authors a promotable Journey (authoring plane); never auto-promoted"))
|
|
19
68
|
.option("--url <url>", "target URL (must be an authorized origin)")
|
|
20
69
|
.option("--goal <text>", "natural-language goal")
|
|
21
|
-
.option("--success <spec>", "independent success check (repeatable; all must hold), any explore --success kind
|
|
22
|
-
"'
|
|
70
|
+
.option("--success <spec>", "independent success check (repeatable; all must hold), any explore --success kind, e.g. urlIncludes:/confirmed, " +
|
|
71
|
+
"'reloadThen:textIncludes:css=main|Saved' or 'responseStatus:POST /api/save=2xx': every check is kept as the Journey's end state and re-checked after every replay's last step", (v, prev) => [...prev, v], [])
|
|
23
72
|
.option("--id <id>", "journey id (used for the <id>.json filename in the store)")
|
|
24
73
|
.option("--name <name>", "human-readable journey name")
|
|
25
74
|
.option("--takes <n>", "corroborating takes incl. discovery (default 1)", positiveIntArg, 1)
|
|
@@ -28,9 +77,23 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
28
77
|
.option("--allow <origin>", "authorized origin (repeatable); REPLACES the default allowlist when given (the URL's own origin is used only when --allow is omitted entirely) -- include the URL's own origin explicitly if you still need it", (v, prev) => [...prev, v], [])
|
|
29
78
|
.option("--max-actions <n>", "hard cap on executed actions", positiveIntArg)
|
|
30
79
|
.option("--max-decisions <n>", "hard cap on model decisions", positiveIntArg)
|
|
80
|
+
.option("--out <dir>", "directory each take's result, transcript and Recording are written to (default: .jevitate/logs/<date>)")
|
|
31
81
|
.option("--real", "use live Jev + OpenRouter gateways (requires keys)", false)
|
|
32
82
|
.option("--fake-ai", "use deterministic fake gateways (pipeline smoke only)", false)
|
|
33
|
-
.option("--json", "emit a JSON envelope")
|
|
83
|
+
.option("--json", "emit a JSON envelope");
|
|
84
|
+
// #369: every take is `explore`'s goal run, so author takes its run-shaping flags too.
|
|
85
|
+
for (const name of AUTHOR_GOAL_RUN_FLAGS)
|
|
86
|
+
cmd.addOption(GOAL_RUN_OPTIONS[name]());
|
|
87
|
+
withScreenshotsFlag(withEmulationFlags(cmd))
|
|
88
|
+
.addHelpText("after", [
|
|
89
|
+
"",
|
|
90
|
+
"Each take is a full goal run (the same runner and run-shaping flags as `jevitate explore --strategy goal`),",
|
|
91
|
+
"writing its own result, transcript and Recording (under --out). A take that does not reach the goal",
|
|
92
|
+
"is reported with its stop reason, its checks' verdicts and those paths. A field code types itself",
|
|
93
|
+
"(--secret-field/--totp) becomes a secret Journey parameter (secret1, …), passed with --param at replay.",
|
|
94
|
+
"Every --success check is kept as the Journey's end state (metadata.endState); each step's expect comes from what it",
|
|
95
|
+
"changed (a write's responseStatus, text it added — richer with --action-deltas), never from its own target.",
|
|
96
|
+
].join("\n"))
|
|
34
97
|
.action(async function () {
|
|
35
98
|
const o = this.opts();
|
|
36
99
|
if (o.storageState !== undefined && !existsSync(o.storageState)) {
|
|
@@ -41,21 +104,30 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
41
104
|
emitJson(program, fail("E_AUTHOR_ARGS", "--url, --goal, --success, --id and --name are all required"));
|
|
42
105
|
return;
|
|
43
106
|
}
|
|
44
|
-
// #322: every kind `explore --success` takes — page and network checks
|
|
107
|
+
// #322/#400: every kind `explore --success` takes — page, reloadThen and network checks.
|
|
45
108
|
const successChecks = [];
|
|
46
109
|
try {
|
|
47
|
-
for (const spec of o.success)
|
|
48
|
-
|
|
49
|
-
if (check.kind === "reloadThen") {
|
|
50
|
-
throw new Error(`${JSON.stringify(spec)}: reloadThen can't be authored into a Journey yet — use a page check or a requestMade/responseStatus check`);
|
|
51
|
-
}
|
|
52
|
-
successChecks.push(check);
|
|
53
|
-
}
|
|
110
|
+
for (const spec of o.success)
|
|
111
|
+
successChecks.push(parseSuccessSpec(spec));
|
|
54
112
|
}
|
|
55
113
|
catch (err) {
|
|
56
114
|
emitJson(program, fail("E_EXPLORE_ASSERTION", String(err instanceof Error ? err.message : err)));
|
|
57
115
|
return;
|
|
58
116
|
}
|
|
117
|
+
// #369: the goal run's flags, validated (and secrets resolved) before any gateway or browser.
|
|
118
|
+
let goalRun;
|
|
119
|
+
try {
|
|
120
|
+
goalRun = resolveGoalRunFlags(o, o.url, {
|
|
121
|
+
targetsConfigPath: deps.explore?.targetsConfigPath,
|
|
122
|
+
warn: (text) => program.configureOutput().writeErr?.(text),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
if (!(err instanceof GoalRunFlagError))
|
|
127
|
+
throw err;
|
|
128
|
+
emitJson(program, fail(err.code, err.message));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
59
131
|
// #256: loaded extensions' chrome-extension://<id> origins are allowed too (only those ids).
|
|
60
132
|
const allowlist = allowWithExtensions(o.url, resolveExploreAllowlist(o.url, o.allow), browserLaunchFromFlags(o));
|
|
61
133
|
const bounds = {};
|
|
@@ -94,6 +166,9 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
94
166
|
browserPortFactory: deps.explore?.browserPortFactory,
|
|
95
167
|
browser: browserLaunchFromFlags(o),
|
|
96
168
|
...(o.storageState !== undefined ? { storageState: o.storageState } : {}),
|
|
169
|
+
goalRun,
|
|
170
|
+
...(o.out === undefined ? {} : { outDir: o.out }),
|
|
171
|
+
usage: authorUsage,
|
|
97
172
|
}).then((r) => ({ ...r, usage: authorUsage.snapshot() }));
|
|
98
173
|
const envelope = ok(result);
|
|
99
174
|
if (o.json) {
|
|
@@ -102,7 +177,7 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
102
177
|
process.exitCode = 1;
|
|
103
178
|
}
|
|
104
179
|
else {
|
|
105
|
-
|
|
180
|
+
writeHumanResult(program, result, formatAuthorJourneyHuman);
|
|
106
181
|
process.exitCode = result.outcome === "authored" ? 0 : 1;
|
|
107
182
|
}
|
|
108
183
|
}
|
|
@@ -110,6 +185,9 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
110
185
|
if (err instanceof UnauthorizedExploreTargetError) {
|
|
111
186
|
emitJson(program, fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
|
|
112
187
|
}
|
|
188
|
+
else if (err instanceof FixtureNotFoundError) {
|
|
189
|
+
emitJson(program, fail("E_EXPLORE_FIXTURE", err.message));
|
|
190
|
+
}
|
|
113
191
|
else {
|
|
114
192
|
emitJson(program, fail("E_AUTHOR_JOURNEY", String(err instanceof Error ? err.message : err)));
|
|
115
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,sBAAsB,EAAwD,MAAM,mBAAmB,CAAC;AACjH,OAAO,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"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"}
|