@jevitate/cli 0.4.0 → 0.6.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 +106 -11
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +2988 -776
- package/dist/build-info.generated.js +2 -2
- package/dist/check-execute.js +1 -0
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.js +2 -1
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.d.ts +6 -6
- package/dist/check-suite.js +18 -12
- package/dist/check-suite.js.map +1 -1
- package/dist/cli-shared.d.ts +5 -2
- package/dist/cli-shared.js +10 -3
- package/dist/cli-shared.js.map +1 -1
- package/dist/conversation-options.d.ts +3 -0
- package/dist/conversation-options.js +1 -0
- package/dist/conversation-options.js.map +1 -1
- package/dist/demo-aspect-api.js +2 -0
- package/dist/demo-aspect-api.js.map +1 -1
- package/dist/demo-capture.d.ts +16 -4
- package/dist/demo-capture.js +82 -15
- package/dist/demo-capture.js.map +1 -1
- package/dist/exit-codes.d.ts +1 -1
- package/dist/exit-codes.js +1 -1
- package/dist/explore-author.d.ts +28 -6
- package/dist/explore-author.js +66 -32
- package/dist/explore-author.js.map +1 -1
- package/dist/explore-cli.js +68 -79
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-goal.d.ts +5 -1
- package/dist/explore-goal.js +19 -1
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-specs.js +12 -2
- package/dist/explore-specs.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.js +4 -1
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-network-checks.d.ts +15 -0
- package/dist/journey-network-checks.js +36 -0
- package/dist/journey-network-checks.js.map +1 -0
- package/dist/kill-signal.d.ts +30 -3
- package/dist/kill-signal.js +51 -6
- package/dist/kill-signal.js.map +1 -1
- package/dist/mcp-api.js +8 -4
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-tools.js +43 -5
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mission-queue-cli.js +3 -1
- package/dist/mission-queue-cli.js.map +1 -1
- package/dist/secret-command.d.ts +7 -0
- package/dist/secret-command.js +52 -0
- package/dist/secret-command.js.map +1 -0
- package/dist/signal-triage.js +5 -1
- package/dist/signal-triage.js.map +1 -1
- package/dist/source-run-api.js +3 -1
- package/dist/source-run-api.js.map +1 -1
- package/dist/suite-explore-options.d.ts +9 -0
- package/dist/suite-explore-options.js +5 -0
- package/dist/suite-explore-options.js.map +1 -1
- package/dist/target-config.d.ts +3 -1
- package/dist/target-config.js +6 -0
- package/dist/target-config.js.map +1 -1
- package/dist/usability-capture.js +21 -3
- package/dist/usability-capture.js.map +1 -1
- package/dist/ux-usability.d.ts +5 -1
- package/dist/ux-usability.js +19 -2
- package/dist/ux-usability.js.map +1 -1
- package/package.json +7 -7
- package/skills/jevitate-explore/SKILL.md +7 -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,62 @@
|
|
|
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
|
-
import { runAuthorJourney,
|
|
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
|
+
/** `reloadThen:<check>` → the inner `<check>` (what the Journey CAN assert). */
|
|
21
|
+
const innerOfReloadThen = (spec) => spec.replace(/^\s*reloadThen:/, "");
|
|
22
|
+
/** #369: one take's diagnostics as human lines (the paths a person opens next). */
|
|
23
|
+
function takeLines(label, d) {
|
|
24
|
+
const lines = [` ${label}: ${d.outcome}${d.stop === undefined ? "" : ` (stop: ${d.stop})`}${d.actions === undefined ? "" : ` · ${d.actions} action(s), ${d.decisions ?? 0} decision(s)`}`];
|
|
25
|
+
if (d.reason !== undefined)
|
|
26
|
+
lines.push(` reason: ${d.reason}`);
|
|
27
|
+
for (const c of d.checks ?? [])
|
|
28
|
+
lines.push(` check ${c.passed ? "held" : "FAILED"}: ${c.check}${c.passed ? "" : ` — ${c.detail}`}`);
|
|
29
|
+
if (d.resultPath !== undefined)
|
|
30
|
+
lines.push(` result: ${d.resultPath}`);
|
|
31
|
+
if (d.transcriptPath !== undefined)
|
|
32
|
+
lines.push(` transcript: ${d.transcriptPath}`);
|
|
33
|
+
for (const r of d.recordingPaths ?? [])
|
|
34
|
+
lines.push(` recording: ${r}`);
|
|
35
|
+
if (d.screenshotsDir !== undefined)
|
|
36
|
+
lines.push(` screenshots: ${d.screenshotsDir}`);
|
|
37
|
+
return lines;
|
|
38
|
+
}
|
|
39
|
+
/** #369: the human summary of `explore-author-journey` (the JSON is the same data with `--json`). */
|
|
40
|
+
export function formatAuthorJourneyHuman(data) {
|
|
41
|
+
const r = data;
|
|
42
|
+
const lines = [];
|
|
43
|
+
if (r.outcome === "authored") {
|
|
44
|
+
const m = r.journey.metadata;
|
|
45
|
+
lines.push(`AUTHORED: journey ${m.id} (unpromoted; \`jevitate journey promote ${m.id}\` makes it runnable)`);
|
|
46
|
+
if (m.params.length > 0)
|
|
47
|
+
lines.push(` params: ${m.params.join(", ")}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
lines.push(`NOT REACHED: ${r.reason}`);
|
|
51
|
+
}
|
|
52
|
+
if (r.takes !== undefined)
|
|
53
|
+
lines.push(` takes: ${r.takes.succeeded}/${r.takes.run} reached the goal (${r.takes.requested} requested)`);
|
|
54
|
+
if (r.discovery !== undefined)
|
|
55
|
+
lines.push(...takeLines("discovery", r.discovery));
|
|
56
|
+
if (r.outcome === "authored")
|
|
57
|
+
(r.corroboratingTakes ?? []).forEach((d, i) => lines.push(...takeLines(`take ${i + 2}`, d)));
|
|
58
|
+
return `${lines.join("\n")}\n`;
|
|
59
|
+
}
|
|
9
60
|
/** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
|
|
10
61
|
export function registerAuthorJourneyCommands(program, deps) {
|
|
11
62
|
// Additive: `explore author-journey` — Jev-driving authors a promotable
|
|
@@ -13,12 +64,13 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
13
64
|
// through RxD's diff/postdoc pipeline, and writes an UNPROMOTED,
|
|
14
65
|
// parameterized Journey to the journeys store. The record-by-demonstration
|
|
15
66
|
// authoring path is untouched.
|
|
16
|
-
withBrowserLaunchFlags(program
|
|
67
|
+
const cmd = withBrowserLaunchFlags(program
|
|
17
68
|
.command("explore-author-journey")
|
|
18
69
|
.description("Jev-driving authors a promotable Journey (authoring plane); never auto-promoted"))
|
|
19
70
|
.option("--url <url>", "target URL (must be an authorized origin)")
|
|
20
71
|
.option("--goal <text>", "natural-language goal")
|
|
21
|
-
.option("--success <spec>", "independent success
|
|
72
|
+
.option("--success <spec>", "independent success check (repeatable; all must hold), any explore --success kind but reloadThen, e.g. urlIncludes:/confirmed or " +
|
|
73
|
+
"'requestMade:POST /api/save': a page check becomes the Journey's last assert step, a requestMade/responseStatus check is re-checked over every replay's requests", (v, prev) => [...prev, v], [])
|
|
22
74
|
.option("--id <id>", "journey id (used for the <id>.json filename in the store)")
|
|
23
75
|
.option("--name <name>", "human-readable journey name")
|
|
24
76
|
.option("--takes <n>", "corroborating takes incl. discovery (default 1)", positiveIntArg, 1)
|
|
@@ -27,27 +79,64 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
27
79
|
.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], [])
|
|
28
80
|
.option("--max-actions <n>", "hard cap on executed actions", positiveIntArg)
|
|
29
81
|
.option("--max-decisions <n>", "hard cap on model decisions", positiveIntArg)
|
|
82
|
+
.option("--out <dir>", "directory each take's result, transcript and Recording are written to (default: .jevitate/logs/<date>)")
|
|
30
83
|
.option("--real", "use live Jev + OpenRouter gateways (requires keys)", false)
|
|
31
84
|
.option("--fake-ai", "use deterministic fake gateways (pipeline smoke only)", false)
|
|
32
|
-
.option("--json", "emit a JSON envelope")
|
|
85
|
+
.option("--json", "emit a JSON envelope");
|
|
86
|
+
// #369: every take is `explore`'s goal run, so author takes its run-shaping flags too.
|
|
87
|
+
for (const name of AUTHOR_GOAL_RUN_FLAGS)
|
|
88
|
+
cmd.addOption(GOAL_RUN_OPTIONS[name]());
|
|
89
|
+
withScreenshotsFlag(withEmulationFlags(cmd))
|
|
90
|
+
.addHelpText("after", [
|
|
91
|
+
"",
|
|
92
|
+
"Each take is a full goal run (the same runner and run-shaping flags as `jevitate explore --strategy goal`),",
|
|
93
|
+
"writing its own result, transcript and Recording (under --out). A take that does not reach the goal",
|
|
94
|
+
"is reported with its stop reason, its checks' verdicts and those paths. A field code types itself",
|
|
95
|
+
"(--secret-field/--totp) becomes a secret Journey parameter (secret1, …), passed with --param at replay.",
|
|
96
|
+
"A reloadThen: check is refused before any browser opens: author with its inner check instead.",
|
|
97
|
+
].join("\n"))
|
|
33
98
|
.action(async function () {
|
|
34
99
|
const o = this.opts();
|
|
35
100
|
if (o.storageState !== undefined && !existsSync(o.storageState)) {
|
|
36
101
|
emitJson(program, fail("E_EXPLORE_ARGS", `storage state not found: ${o.storageState}`));
|
|
37
102
|
return;
|
|
38
103
|
}
|
|
39
|
-
if (!o.url || !o.goal ||
|
|
104
|
+
if (!o.url || !o.goal || o.success.length === 0 || !o.id || !o.name) {
|
|
40
105
|
emitJson(program, fail("E_AUTHOR_ARGS", "--url, --goal, --success, --id and --name are all required"));
|
|
41
106
|
return;
|
|
42
107
|
}
|
|
43
|
-
|
|
108
|
+
// #322: every kind `explore --success` takes — page and network checks — but reloadThen.
|
|
109
|
+
const successChecks = [];
|
|
44
110
|
try {
|
|
45
|
-
|
|
111
|
+
for (const spec of o.success) {
|
|
112
|
+
const check = parseSuccessSpec(spec);
|
|
113
|
+
if (check.kind === "reloadThen") {
|
|
114
|
+
// #369: refused here, before any gateway or browser — a Journey has no reload step to re-check after.
|
|
115
|
+
throw new Error(`--success ${JSON.stringify(spec)}: a reloadThen check can't be authored into a Journey (a Journey has no reload step); nothing was run. ` +
|
|
116
|
+
`Author with its inner check (--success ${JSON.stringify(innerOfReloadThen(spec))}) and prove persistence with \`jevitate explore --success ${JSON.stringify(spec)}\`, ` +
|
|
117
|
+
"or use a requestMade/responseStatus check");
|
|
118
|
+
}
|
|
119
|
+
successChecks.push(check);
|
|
120
|
+
}
|
|
46
121
|
}
|
|
47
122
|
catch (err) {
|
|
48
123
|
emitJson(program, fail("E_EXPLORE_ASSERTION", String(err instanceof Error ? err.message : err)));
|
|
49
124
|
return;
|
|
50
125
|
}
|
|
126
|
+
// #369: the goal run's flags, validated (and secrets resolved) before any gateway or browser.
|
|
127
|
+
let goalRun;
|
|
128
|
+
try {
|
|
129
|
+
goalRun = resolveGoalRunFlags(o, o.url, {
|
|
130
|
+
targetsConfigPath: deps.explore?.targetsConfigPath,
|
|
131
|
+
warn: (text) => program.configureOutput().writeErr?.(text),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (!(err instanceof GoalRunFlagError))
|
|
136
|
+
throw err;
|
|
137
|
+
emitJson(program, fail(err.code, err.message));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
51
140
|
// #256: loaded extensions' chrome-extension://<id> origins are allowed too (only those ids).
|
|
52
141
|
const allowlist = allowWithExtensions(o.url, resolveExploreAllowlist(o.url, o.allow), browserLaunchFromFlags(o));
|
|
53
142
|
const bounds = {};
|
|
@@ -74,7 +163,7 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
74
163
|
const result = await runAuthorJourney({
|
|
75
164
|
url: o.url,
|
|
76
165
|
goal: o.goal,
|
|
77
|
-
|
|
166
|
+
successChecks,
|
|
78
167
|
allowlist,
|
|
79
168
|
journeysDir: resolveJourneysDir(deps, o.journeysDir),
|
|
80
169
|
journeyId: o.id,
|
|
@@ -86,6 +175,9 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
86
175
|
browserPortFactory: deps.explore?.browserPortFactory,
|
|
87
176
|
browser: browserLaunchFromFlags(o),
|
|
88
177
|
...(o.storageState !== undefined ? { storageState: o.storageState } : {}),
|
|
178
|
+
goalRun,
|
|
179
|
+
...(o.out === undefined ? {} : { outDir: o.out }),
|
|
180
|
+
usage: authorUsage,
|
|
89
181
|
}).then((r) => ({ ...r, usage: authorUsage.snapshot() }));
|
|
90
182
|
const envelope = ok(result);
|
|
91
183
|
if (o.json) {
|
|
@@ -94,7 +186,7 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
94
186
|
process.exitCode = 1;
|
|
95
187
|
}
|
|
96
188
|
else {
|
|
97
|
-
|
|
189
|
+
writeHumanResult(program, result, formatAuthorJourneyHuman);
|
|
98
190
|
process.exitCode = result.outcome === "authored" ? 0 : 1;
|
|
99
191
|
}
|
|
100
192
|
}
|
|
@@ -102,6 +194,9 @@ export function registerAuthorJourneyCommands(program, deps) {
|
|
|
102
194
|
if (err instanceof UnauthorizedExploreTargetError) {
|
|
103
195
|
emitJson(program, fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
|
|
104
196
|
}
|
|
197
|
+
else if (err instanceof FixtureNotFoundError) {
|
|
198
|
+
emitJson(program, fail("E_EXPLORE_FIXTURE", err.message));
|
|
199
|
+
}
|
|
105
200
|
else {
|
|
106
201
|
emitJson(program, fail("E_AUTHOR_JOURNEY", String(err instanceof Error ? err.message : err)));
|
|
107
202
|
}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"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"}
|