@jevitate/cli 0.15.1 → 0.16.1
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/bin.js +3046 -1793
- package/dist/build-info.generated.js +3 -3
- package/dist/campaign-api.js +2 -2
- package/dist/campaign-api.js.map +1 -1
- package/dist/check-execute.js +36 -6
- package/dist/check-execute.js.map +1 -1
- package/dist/check-plan.d.ts +1 -1
- package/dist/check-plan.js +2 -1
- package/dist/check-plan.js.map +1 -1
- package/dist/check-suite.d.ts +17 -1
- package/dist/check-suite.js +26 -3
- package/dist/check-suite.js.map +1 -1
- package/dist/environments.d.ts +29 -2
- package/dist/environments.js +100 -7
- package/dist/environments.js.map +1 -1
- package/dist/exit-codes.js +1 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/fixture-cli.d.ts +2 -0
- package/dist/fixture-cli.js +1 -1
- package/dist/fixture-cli.js.map +1 -1
- package/dist/http-probe.js +3 -1
- package/dist/http-probe.js.map +1 -1
- package/dist/journey-annotate-cli.js +5 -2
- package/dist/journey-annotate-cli.js.map +1 -1
- package/dist/journey-api.d.ts +9 -2
- package/dist/journey-api.js +32 -17
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli/run.js +5 -2
- package/dist/journey-cli/run.js.map +1 -1
- package/dist/journey-cli/verify.js +5 -2
- package/dist/journey-cli/verify.js.map +1 -1
- package/dist/journey-demo-cli.js +5 -2
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-network-checks.d.ts +5 -1
- package/dist/journey-network-checks.js +22 -2
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.js +2 -2
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-review.js +10 -3
- package/dist/journey-review.js.map +1 -1
- package/dist/journey-verify.d.ts +4 -2
- package/dist/journey-verify.js +8 -6
- package/dist/journey-verify.js.map +1 -1
- package/dist/load-api.js +6 -4
- package/dist/load-api.js.map +1 -1
- package/dist/mcp-cli-tools.js +16 -1
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mission-fixtures.d.ts +15 -2
- package/dist/mission-fixtures.js +120 -43
- package/dist/mission-fixtures.js.map +1 -1
- package/dist/record-api.d.ts +3 -1
- package/dist/record-api.js +17 -2
- package/dist/record-api.js.map +1 -1
- package/dist/record-cli.js +4 -3
- package/dist/record-cli.js.map +1 -1
- package/dist/recording-cli.d.ts +15 -1
- package/dist/recording-cli.js +202 -11
- package/dist/recording-cli.js.map +1 -1
- package/dist/source-run-api.d.ts +1 -1
- package/dist/source-run-api.js +7 -5
- package/dist/source-run-api.js.map +1 -1
- package/package.json +6 -6
- package/skills/jevitate-ci-check/SKILL.md +3 -0
- package/skills/jevitate-explore/SKILL.md +2 -1
- package/skills/jevitate-promotion-ready/SKILL.md +5 -0
- package/skills/jevitate-record/SKILL.md +40 -18
package/dist/recording-cli.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { type BindingProposal } from "@jevitate/explore";
|
|
2
3
|
import { type CliDeps } from "./cli-shared.js";
|
|
3
|
-
/** Registers `jevitate recording`: `promote|diff|fit|postdoc`. */
|
|
4
|
+
/** Registers `jevitate recording`: `promote|diff|fit|postdoc|propose`. */
|
|
4
5
|
export declare function registerRecordingCommands(program: Command, deps: CliDeps): void;
|
|
6
|
+
/** What `recording propose` reports about the draft it wrote (never its content — that is in the file). */
|
|
7
|
+
export interface ProposalDraftSummary {
|
|
8
|
+
id: string;
|
|
9
|
+
/** Where the draft was written: the journeys store, or `--out`. */
|
|
10
|
+
path: string;
|
|
11
|
+
savedTo: "journeys-store" | "file";
|
|
12
|
+
promoted: false;
|
|
13
|
+
steps: number;
|
|
14
|
+
}
|
|
15
|
+
export type ProposalResult = Omit<BindingProposal, "draft"> & {
|
|
16
|
+
draft?: ProposalDraftSummary;
|
|
17
|
+
nextSteps: string[];
|
|
18
|
+
};
|
package/dist/recording-cli.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { resolve as resolvePath } from "node:path";
|
|
2
3
|
import * as clack from "@clack/prompts";
|
|
3
4
|
import { RecordingSchema, AuthoringTakeSchema, PostdocDecisionsSchema, promoteToVariable, diffTakes, applyPostdoc, flattenBaseFillSteps, fitInteractionPolicy, } from "@jevitate/recording";
|
|
5
|
+
import { BindingProposalError, proposeBindings, valueHint } from "@jevitate/explore";
|
|
6
|
+
import { FsJourneyStore } from "@jevitate/journey";
|
|
4
7
|
import { ok, fail } from "./envelope.js";
|
|
5
8
|
import { nonNegativeIntArg } from "./cli-args.js";
|
|
6
|
-
import { emitJson } from "./cli-shared.js";
|
|
7
|
-
|
|
9
|
+
import { emitJson, resolveJourneysDir } from "./cli-shared.js";
|
|
10
|
+
import { inMcpInvocation } from "./approval-provenance.js";
|
|
11
|
+
/** Registers `jevitate recording`: `promote|diff|fit|postdoc|propose`. */
|
|
8
12
|
export function registerRecordingCommands(program, deps) {
|
|
9
13
|
/**
|
|
10
14
|
* Reads one "take file" for `recording diff`/`recording postdoc` (#124): a JSON object written
|
|
@@ -15,7 +19,7 @@ export function registerRecordingCommands(program, deps) {
|
|
|
15
19
|
* site, intent, pages` zod dump. Detected BEFORE the schema parse so the caller gets a message
|
|
16
20
|
* that names the actual problem and how to fix it, not a zod dump.
|
|
17
21
|
*/
|
|
18
|
-
async function
|
|
22
|
+
async function readTakeJson(file) {
|
|
19
23
|
const raw = await readFile(file, "utf8");
|
|
20
24
|
let json;
|
|
21
25
|
try {
|
|
@@ -26,14 +30,32 @@ export function registerRecordingCommands(program, deps) {
|
|
|
26
30
|
}
|
|
27
31
|
if (json !== null && typeof json === "object" && !Array.isArray(json) && "pages" in json && !("recording" in json)) {
|
|
28
32
|
throw new Error(`'${file}' looks like a Recording (it has a top-level "pages"), not a take file. ` +
|
|
29
|
-
`'recording diff'/'recording postdoc' need a take file written by 'jevitate record' — shape ` +
|
|
33
|
+
`'recording diff'/'recording postdoc'/'recording propose' need a take file written by 'jevitate record' — shape ` +
|
|
30
34
|
`{ recording, values } — not a raw Recording from 'explore', 'explore-author-journey', or a ` +
|
|
31
35
|
`usability run. Wrap it as { "recording": <the Recording>, "values": {} } if you want to ` +
|
|
32
36
|
`diff/postdoc it anyway.`);
|
|
33
37
|
}
|
|
34
|
-
|
|
38
|
+
return json;
|
|
39
|
+
}
|
|
40
|
+
async function readAuthoringTake(file) {
|
|
41
|
+
const parsed = AuthoringTakeSchema.parse(await readTakeJson(file));
|
|
35
42
|
return { recording: parsed.recording, values: new Map(Object.entries(parsed.values)) };
|
|
36
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Reads one Recording for `recording promote`/`recording fit` (#564): accepts EITHER a raw
|
|
46
|
+
* `Recording` (as before) OR the `{recording, values}` take file `jevitate record` writes —
|
|
47
|
+
* unwrapping `.recording` in the latter case, so a take recorded for `diff`/`postdoc` can also be
|
|
48
|
+
* promoted/fitted without hand-editing. The `values` side-channel is deliberately discarded: these
|
|
49
|
+
* two commands operate on the persisted artifact only.
|
|
50
|
+
*/
|
|
51
|
+
async function readRecordingOrTake(file) {
|
|
52
|
+
const raw = await readFile(file, "utf8");
|
|
53
|
+
const json = JSON.parse(raw);
|
|
54
|
+
if (json !== null && typeof json === "object" && !Array.isArray(json) && "recording" in json) {
|
|
55
|
+
return AuthoringTakeSchema.parse(json).recording;
|
|
56
|
+
}
|
|
57
|
+
return RecordingSchema.parse(json);
|
|
58
|
+
}
|
|
37
59
|
const recording = program.command("recording").description("inspect and edit recorded takes (promote, edit steps, diff, postdoc)");
|
|
38
60
|
recording
|
|
39
61
|
.command("promote <file>")
|
|
@@ -43,8 +65,7 @@ export function registerRecordingCommands(program, deps) {
|
|
|
43
65
|
.action(async function (file) {
|
|
44
66
|
const { page, step, var: varName } = this.opts();
|
|
45
67
|
try {
|
|
46
|
-
const
|
|
47
|
-
const rec = RecordingSchema.parse(JSON.parse(raw));
|
|
68
|
+
const rec = await readRecordingOrTake(file);
|
|
48
69
|
const result = promoteToVariable(rec, { page: Number(page), step: Number(step) }, varName);
|
|
49
70
|
program.configureOutput().writeOut?.(`${JSON.stringify(result, null, 2)}\n`);
|
|
50
71
|
process.exitCode = 0;
|
|
@@ -62,7 +83,8 @@ export function registerRecordingCommands(program, deps) {
|
|
|
62
83
|
const files = [takeA, takeB, ...more];
|
|
63
84
|
const takes = await Promise.all(files.map(readAuthoringTake));
|
|
64
85
|
const diffResult = diffTakes(takes);
|
|
65
|
-
|
|
86
|
+
// A take's values are what a person typed: over MCP they never reach the model (only hints).
|
|
87
|
+
const envelope = ok(inMcpInvocation() ? redactDiffForModel(diffResult) : diffResult);
|
|
66
88
|
if (json) {
|
|
67
89
|
emitJson(program, envelope);
|
|
68
90
|
}
|
|
@@ -85,8 +107,7 @@ export function registerRecordingCommands(program, deps) {
|
|
|
85
107
|
.action(async function (file) {
|
|
86
108
|
const { json } = this.opts();
|
|
87
109
|
try {
|
|
88
|
-
const
|
|
89
|
-
const rec = RecordingSchema.parse(JSON.parse(raw));
|
|
110
|
+
const rec = await readRecordingOrTake(file);
|
|
90
111
|
const interaction = fitInteractionPolicy(rec);
|
|
91
112
|
const policy = { version: "1.0.0", interaction };
|
|
92
113
|
if (json) {
|
|
@@ -124,7 +145,7 @@ export function registerRecordingCommands(program, deps) {
|
|
|
124
145
|
await writeFile(out, `${JSON.stringify(result, null, 2)}\n`, "utf8");
|
|
125
146
|
}
|
|
126
147
|
if (json) {
|
|
127
|
-
emitJson(program, ok(result));
|
|
148
|
+
emitJson(program, ok(inMcpInvocation() ? redactRecordingForModel(result) : result));
|
|
128
149
|
}
|
|
129
150
|
else if (out === undefined) {
|
|
130
151
|
program.configureOutput().writeOut?.(`${JSON.stringify(result, null, 2)}\n`);
|
|
@@ -143,6 +164,176 @@ export function registerRecordingCommands(program, deps) {
|
|
|
143
164
|
}
|
|
144
165
|
}
|
|
145
166
|
});
|
|
167
|
+
recording
|
|
168
|
+
.command("propose <take> [more...]")
|
|
169
|
+
.description("propose parameters, outputs, {var} checks, credential handbacks and where to stop from two or more takes of the same flow (#566); saves an UNPROMOTED draft Journey for review — ambiguities stay for a person to decide")
|
|
170
|
+
.option("--out <file>", "write the draft Journey JSON to this file instead of saving it in the journeys store")
|
|
171
|
+
.option("--no-draft", "propose only: build and save no draft Journey")
|
|
172
|
+
.option("--id <id>", "the draft Journey's id (default: proposed-draft)")
|
|
173
|
+
.option("--name <name>", "the draft Journey's name (default: the first take's intent)")
|
|
174
|
+
.option("--journeys-dir <dir>", "journeys store directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
175
|
+
.option("--json", "emit a JSON envelope")
|
|
176
|
+
.action(async function (take, more) {
|
|
177
|
+
const o = this.opts();
|
|
178
|
+
let takes;
|
|
179
|
+
try {
|
|
180
|
+
takes = (await Promise.all([take, ...more].map(readTakeJson)));
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
emitJson(program, fail("E_INVALID_TAKE", err instanceof Error ? err.message : String(err)));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
let proposal;
|
|
187
|
+
try {
|
|
188
|
+
proposal = proposeBindings(takes, {
|
|
189
|
+
...(o.id === undefined ? {} : { id: o.id }),
|
|
190
|
+
...(o.name === undefined ? {} : { name: o.name }),
|
|
191
|
+
draft: o.draft,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
if (err instanceof BindingProposalError) {
|
|
196
|
+
emitJson(program, fail(err.code, err.message));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
emitJson(program, fail("E_INVALID_TAKE", err instanceof Error ? err.message : String(err)));
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const { draft, ...rest } = proposal;
|
|
203
|
+
let saved;
|
|
204
|
+
if (draft !== undefined) {
|
|
205
|
+
try {
|
|
206
|
+
saved = await saveDraft(draft, o.out, resolveJourneysDir(deps, o.journeysDir));
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
if (err instanceof DraftSaveError) {
|
|
210
|
+
emitJson(program, fail(err.code, err.message));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
throw err;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const data = { ...rest, ...(saved === undefined ? {} : { draft: saved }), nextSteps: nextSteps(proposal, saved) };
|
|
217
|
+
if (o.json) {
|
|
218
|
+
emitJson(program, ok(data));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
program.configureOutput().writeOut?.(renderProposal(data));
|
|
222
|
+
process.exitCode = 0;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
class DraftSaveError extends Error {
|
|
226
|
+
code;
|
|
227
|
+
constructor(code, message) {
|
|
228
|
+
super(message);
|
|
229
|
+
this.code = code;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Writes the draft: to `--out`, or into the journeys store as an UNPROMOTED Journey (the same
|
|
234
|
+
* `FsJourneyStore.put` every authoring path uses). Never overwrites an existing Journey — a draft must
|
|
235
|
+
* never replace (or demote) a reviewed one — and never promotes or approves anything.
|
|
236
|
+
*/
|
|
237
|
+
async function saveDraft(draft, out, journeysDir) {
|
|
238
|
+
const steps = draft.recording.pages.reduce((n, p) => n + p.steps.length, 0);
|
|
239
|
+
if (out !== undefined) {
|
|
240
|
+
await writeFile(out, `${JSON.stringify(draft, null, 2)}\n`, "utf8");
|
|
241
|
+
return { id: draft.metadata.id, path: resolvePath(out), savedTo: "file", promoted: false, steps };
|
|
242
|
+
}
|
|
243
|
+
const store = new FsJourneyStore(journeysDir);
|
|
244
|
+
let existing;
|
|
245
|
+
try {
|
|
246
|
+
existing = await store.get(draft.metadata.id);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
throw new DraftSaveError("E_PROPOSAL_INVALID_ID", err instanceof Error ? err.message : String(err));
|
|
250
|
+
}
|
|
251
|
+
if (existing !== null) {
|
|
252
|
+
throw new DraftSaveError("E_PROPOSAL_DRAFT_EXISTS", `a Journey '${draft.metadata.id}' already exists — a proposed draft never replaces one; pass --id <new-id>, or --out <file>`);
|
|
253
|
+
}
|
|
254
|
+
await store.put(draft);
|
|
255
|
+
const path = draft.metadata.id.includes("/")
|
|
256
|
+
? resolvePath(journeysDir, ...draft.metadata.id.split("/").slice(0, -1), `${draft.metadata.id.split("/").at(-1)}.json`)
|
|
257
|
+
: resolvePath(journeysDir, `${draft.metadata.id}.json`);
|
|
258
|
+
return { id: draft.metadata.id, path, savedTo: "journeys-store", promoted: false, steps };
|
|
259
|
+
}
|
|
260
|
+
function nextSteps(proposal, saved) {
|
|
261
|
+
if (saved === undefined)
|
|
262
|
+
return ["re-run without --no-draft to save the draft Journey"];
|
|
263
|
+
const id = saved.id;
|
|
264
|
+
const params = proposal.params.map((p) => `--param ${p.name}=<${p.name}>`).join(" ");
|
|
265
|
+
const steps = [];
|
|
266
|
+
if (saved.savedTo === "file")
|
|
267
|
+
steps.push(`copy ${saved.path} into the journeys directory (.jevitate/journeys/${id}.json) to review and verify it`);
|
|
268
|
+
if (proposal.ambiguities.length > 0)
|
|
269
|
+
steps.push(`decide each ambiguity (${proposal.ambiguities.length}) by editing the draft — none was resolved for you`);
|
|
270
|
+
steps.push(`jevitate journey review ${id} --strict`);
|
|
271
|
+
steps.push(`jevitate journey verify ${id} --mutate${params === "" ? "" : ` ${params}`}`);
|
|
272
|
+
steps.push(`a person promotes it only when both are clean: jevitate journey promote ${id}`);
|
|
273
|
+
return steps;
|
|
274
|
+
}
|
|
275
|
+
/** The human rendering of `recording propose` (stdout). Evidence is the proposal's redacted hints. */
|
|
276
|
+
function renderProposal(r) {
|
|
277
|
+
const lines = [];
|
|
278
|
+
lines.push(`Binding proposal from ${r.takes} takes (a draft for review — nothing is promoted or approved)`);
|
|
279
|
+
lines.push("");
|
|
280
|
+
if (r.ambiguities.length > 0) {
|
|
281
|
+
lines.push(`!! AMBIGUITIES (${r.ambiguities.length}) — a person decides each; none was resolved for you:`);
|
|
282
|
+
for (const a of r.ambiguities)
|
|
283
|
+
lines.push(` ! [${a.kind}] steps: ${a.stepIds.length === 0 ? "(none)" : a.stepIds.join(", ")} — ${a.message}`);
|
|
284
|
+
lines.push("");
|
|
285
|
+
}
|
|
286
|
+
if (r.stopBefore === undefined) {
|
|
287
|
+
lines.push("WARNING: no stop step (send/submit/post/publish) was found — the draft replays EVERY step, including any final submit. Mark where it must stop before running it.");
|
|
288
|
+
lines.push("");
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
lines.push(`stop before: ${r.stopBefore} (the draft ends before this step${r.firstWriteStepId === undefined ? "" : `; first write: ${r.firstWriteStepId}`})`);
|
|
292
|
+
}
|
|
293
|
+
lines.push(`params (${r.params.length}):`);
|
|
294
|
+
for (const p of r.params)
|
|
295
|
+
lines.push(` - ${p.name} (${p.kind}) ← ${p.stepIds.join(", ")}`);
|
|
296
|
+
lines.push(`outputs (${r.outputs.length}):`);
|
|
297
|
+
for (const out of r.outputs)
|
|
298
|
+
lines.push(` - ${out.key}${out.attr === undefined ? "" : ` [${out.attr}]`} from ${out.fromStepId}, tied to ${out.tiedTo}`);
|
|
299
|
+
lines.push(`checks (${r.checks.length}):`);
|
|
300
|
+
for (const c of r.checks)
|
|
301
|
+
lines.push(` - ${c.phase} ${c.reason} at ${c.stepId}: ${c.param}`);
|
|
302
|
+
lines.push(`handbacks (${r.handbacks.length}):${r.handbacks.map((h) => ` ${h.stepId} (${h.reason})`).join(",")}`);
|
|
303
|
+
lines.push(`constants: ${r.constants.length}`);
|
|
304
|
+
lines.push("");
|
|
305
|
+
if (r.draft !== undefined) {
|
|
306
|
+
lines.push(r.draft.savedTo === "file"
|
|
307
|
+
? `draft Journey '${r.draft.id}' written to ${r.draft.path} (${r.draft.steps} steps, NOT promoted)`
|
|
308
|
+
: `draft Journey '${r.draft.id}' saved to ${r.draft.path} (${r.draft.steps} steps, NOT promoted, no approval)`);
|
|
309
|
+
}
|
|
310
|
+
lines.push("next:");
|
|
311
|
+
for (const n of r.nextSteps)
|
|
312
|
+
lines.push(` ${n}`);
|
|
313
|
+
return `${lines.join("\n")}\n`;
|
|
314
|
+
}
|
|
315
|
+
/** #566: a diff for the model — every captured value becomes a redacted hint (never the text). */
|
|
316
|
+
function redactDiffForModel(diff) {
|
|
317
|
+
return {
|
|
318
|
+
...diff,
|
|
319
|
+
columns: diff.columns.map((c) => ({ ...c, values: c.values.map((v) => (v === null ? null : valueHint(v))) })),
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/** #566: a post-documented Recording for the model — a constant's literal value becomes `{redacted, length}`. */
|
|
323
|
+
function redactRecordingForModel(rec) {
|
|
324
|
+
return {
|
|
325
|
+
...rec,
|
|
326
|
+
pages: rec.pages.map((p) => ({
|
|
327
|
+
...p,
|
|
328
|
+
steps: p.steps.map((r) => {
|
|
329
|
+
const st = r.step;
|
|
330
|
+
if ((st.kind === "fill" || st.kind === "select") && "redacted" in st.value && st.value.redacted === false) {
|
|
331
|
+
return { ...r, step: { ...st, value: { redacted: true, length: st.value.value.length } } };
|
|
332
|
+
}
|
|
333
|
+
return r;
|
|
334
|
+
}),
|
|
335
|
+
})),
|
|
336
|
+
};
|
|
146
337
|
}
|
|
147
338
|
/**
|
|
148
339
|
* Distinguishes a malformed `--decisions <file>` (E_INVALID_DECISIONS) from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-cli.js","sourceRoot":"","sources":["../src/recording-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recording-cli.js","sourceRoot":"","sources":["../src/recording-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/source-run-api.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ siteGate?: SiteGateDeps) => Promise<JourneyRunResult>;
|
|
|
27
27
|
/**
|
|
28
28
|
* The real, Playwright-backed runner for a gated source Journey. Mirrors
|
|
29
29
|
* `journey-api.ts`'s `runJourneyProgrammatically` exactly:
|
|
30
|
-
* - validates params UP FRONT (`
|
|
30
|
+
* - validates params UP FRONT (`journeyParamSchema`/`validateParams`) before
|
|
31
31
|
* any browser launch, so bad params never pay the cost/risk of a browser;
|
|
32
32
|
* - opens a real `PlaywrightBrowserPort` scoped to the Journey's authorized
|
|
33
33
|
* origins (the gate has already proven `declaredOrigins ⊆ manifest`);
|
package/dist/source-run-api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { journeyParamSchema, secretParamNames, secretParamValues, validateParams } from "@jevitate/journey";
|
|
2
2
|
import { createHttpProbe, httpCheckRefs } from "./http-probe.js";
|
|
3
3
|
import { gateJourney } from "./site-gate-cli.js";
|
|
4
4
|
import { safeRunPolicy } from "@jevitate/domain";
|
|
@@ -13,7 +13,7 @@ import { JourneyRequiresAuthError, journeyFixtureBaseDir, redactErrorSecrets, re
|
|
|
13
13
|
/**
|
|
14
14
|
* The real, Playwright-backed runner for a gated source Journey. Mirrors
|
|
15
15
|
* `journey-api.ts`'s `runJourneyProgrammatically` exactly:
|
|
16
|
-
* - validates params UP FRONT (`
|
|
16
|
+
* - validates params UP FRONT (`journeyParamSchema`/`validateParams`) before
|
|
17
17
|
* any browser launch, so bad params never pay the cost/risk of a browser;
|
|
18
18
|
* - opens a real `PlaywrightBrowserPort` scoped to the Journey's authorized
|
|
19
19
|
* origins (the gate has already proven `declaredOrigins ⊆ manifest`);
|
|
@@ -28,7 +28,7 @@ export const realResolvedJourneyRunner = async (file, params, policy, storageSta
|
|
|
28
28
|
if (file.metadata.requiresAuth === true && storageState === undefined) {
|
|
29
29
|
throw new JourneyRequiresAuthError(`journey '${file.metadata.id}' requires auth (metadata.requiresAuth) — run with --storage-state <file>`);
|
|
30
30
|
}
|
|
31
|
-
validateParams(
|
|
31
|
+
validateParams(journeyParamSchema(file), params);
|
|
32
32
|
// The browser allowlist is the Journey's authorized origin set — the base
|
|
33
33
|
// site plus every gate-approved declared origin.
|
|
34
34
|
const allowedOrigins = [...new Set([file.recording.site, ...file.declaredOrigins])];
|
|
@@ -46,12 +46,14 @@ export const realResolvedJourneyRunner = async (file, params, policy, storageSta
|
|
|
46
46
|
const actor = CastActor.named("source-runner").whoCan(new BrowseTheWeb(session, allowedOrigins), ...gate.abilities);
|
|
47
47
|
// #322/#400: a trusted remote Journey's end state and step request checks hold for its replay too.
|
|
48
48
|
// #543: its http end-state checks request only origins in this same allowlist.
|
|
49
|
+
const refs = httpCheckRefs({ params, secretParams: secretParamNames(file, params) });
|
|
49
50
|
const outcomeChecks = new JourneyOutcomeChecks(session.page, file, {
|
|
50
51
|
httpProbe: createHttpProbe({ allowlist: allowedOrigins }),
|
|
51
|
-
resolveRef:
|
|
52
|
+
resolveRef: refs,
|
|
52
53
|
});
|
|
53
54
|
const observer = outcomeChecks.observer();
|
|
54
|
-
|
|
55
|
+
// #565: a step expectation's references resolve from the same names (a secret one refused).
|
|
56
|
+
const runner = new JourneyRunner(actor, new RecordingInterpreter({ ...(observer === undefined ? {} : { observer }), fixtureBaseDir: journeyFixtureBaseDir(), refLookup: refs }));
|
|
55
57
|
try {
|
|
56
58
|
return await outcomeChecks.run(actor, () => runner.run({ journey: file, params, policy }));
|
|
57
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-run-api.js","sourceRoot":"","sources":["../src/source-run-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"source-run-api.js","sourceRoot":"","sources":["../src/source-run-api.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jevitate/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Autonomous browser testing that turns discovered bugs into deterministic regression tests: explore a web app in a real browser, confirm findings with evidence, and replay them as regressions in CI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -63,26 +63,26 @@
|
|
|
63
63
|
"esbuild": "^0.28.2",
|
|
64
64
|
"@jevitate/ai-core": "0.1.0",
|
|
65
65
|
"@jevitate/daemon": "0.1.0",
|
|
66
|
+
"@jevitate/domain": "0.1.0",
|
|
66
67
|
"@jevitate/example-site": "0.1.0",
|
|
67
68
|
"@jevitate/explore": "0.1.0",
|
|
68
69
|
"@jevitate/findings": "0.1.0",
|
|
69
|
-
"@jevitate/domain": "0.1.0",
|
|
70
70
|
"@jevitate/inbox": "0.1.0",
|
|
71
71
|
"@jevitate/interpreter": "0.1.0",
|
|
72
|
-
"@jevitate/journey": "0.1.0",
|
|
73
72
|
"@jevitate/load": "0.1.0",
|
|
73
|
+
"@jevitate/journey": "0.1.0",
|
|
74
74
|
"@jevitate/missions": "0.1.0",
|
|
75
75
|
"@jevitate/mcp-facade": "0.1.0",
|
|
76
76
|
"@jevitate/playwright": "0.1.0",
|
|
77
77
|
"@jevitate/recorder": "0.1.0",
|
|
78
78
|
"@jevitate/recording": "0.1.0",
|
|
79
|
+
"@jevitate/regression": "0.1.0",
|
|
79
80
|
"@jevitate/runtime": "0.1.0",
|
|
80
81
|
"@jevitate/screenplay": "0.1.0",
|
|
81
|
-
"@jevitate/regression": "0.1.0",
|
|
82
|
-
"@jevitate/skills": "0.1.0",
|
|
83
82
|
"@jevitate/sources": "0.1.0",
|
|
84
83
|
"@jevitate/storage-sqlite": "0.1.0",
|
|
85
|
-
"@jevitate/ux": "0.1.0"
|
|
84
|
+
"@jevitate/ux": "0.1.0",
|
|
85
|
+
"@jevitate/skills": "0.1.0"
|
|
86
86
|
},
|
|
87
87
|
"scripts": {
|
|
88
88
|
"build": "node scripts/generate-build-info.mjs && tsc --build",
|
|
@@ -34,6 +34,9 @@ Relative paths resolve against the suite file.
|
|
|
34
34
|
- `journeys` must be promoted, and their origin must be on the target's allowlist. Journeys,
|
|
35
35
|
`feature` missions and `verifyFix` are model-free. Goals and `coverage`/`exploratory`/
|
|
36
36
|
`adversarial`/`usability` missions need `"ai": "real"` (or `--real`) and keys.
|
|
37
|
+
- A Journey param may be `{ "unique": "inv-{run}@example.test" }` (the template must contain
|
|
38
|
+
`{run}`): each run and each entry gets a fresh token, the result record stores the value used,
|
|
39
|
+
and the suite keeps the template. Use it for data the app refuses to repeat.
|
|
37
40
|
- `"ai": "fake"` (`--fake-ai`) is a pipeline smoke. It never gates a goal on the fake judge's
|
|
38
41
|
verdict (such an item is an error, exit 2), but hard signals still gate.
|
|
39
42
|
- `storageState` holds live cookies. Keep it outside the repo (under `~/.jevitate/`, or generate
|
|
@@ -86,7 +86,8 @@ mission and reading the result honestly.
|
|
|
86
86
|
needed (`--secret-field`/`--totp`, `cmd:` sources with `--allow-secret-cmd`, `--type-fixture`,
|
|
87
87
|
`--fixture`, `--success-when`, `--allow-vacuous-checks`, `--dialogs`, `--reply-wait-ms`,
|
|
88
88
|
`--viewport`/`--device`/`--geolocation`, …). A bound secret field becomes a secret Journey param
|
|
89
|
-
(`secret1`)
|
|
89
|
+
(`secret1`); a non-secret value stays a literal until `jevitate recording promote
|
|
90
|
+
<take> --page N --step M --var <name>` binds it as a variable. A `not-reached` result carries `discovery` (stop reason, checks, `resultPath`,
|
|
90
91
|
`transcriptPath`, `recordingPaths`, `screenshotsDir`): read the transcript before retrying. Every
|
|
91
92
|
`--success` check (any kind, `reloadThen:` included) becomes the Journey's end state
|
|
92
93
|
(`metadata.endState`), and each step's `expect` comes from what it changed (a write step gets
|
|
@@ -31,6 +31,11 @@ without `--readiness`. ○ items (such as a skipped Jev review) never fail it.
|
|
|
31
31
|
4. **Run it on a non-production environment:** `jevitate journey run <id> --env <name>`.
|
|
32
32
|
Never prove or annotate against production.
|
|
33
33
|
5. **`jevitate journey verify <id> --mutate --env <name>` LAST** (MCP `verify_journey`).
|
|
34
|
+
Pass `--param name=value` for each parameter. Each supplied non-secret parameter that an action
|
|
35
|
+
reads and an assertion names gets `swap-param`/`truncate-param` mutations, and a `{var}` fill gets
|
|
36
|
+
a `stale-value` that types an altered value. Secrets are never mutated. A parameter that only
|
|
37
|
+
assertions read gets no parameter mutation. A `recording propose` draft depends on this proof
|
|
38
|
+
for its `{var}` checks.
|
|
34
39
|
The proof is keyed on executable content only (steps, targets, assertions, end state), so
|
|
35
40
|
rewording goal, success criteria, objectives or expected results (what `annotate --approve`
|
|
36
41
|
writes) does not stale it. Exception: annotating drops a success criterion's code `check`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-record
|
|
3
|
-
description: Record a flow the human clicks through (`jevitate record --url`, CLI only, headed), then post-process the takes:
|
|
3
|
+
description: Record a flow the human clicks through (`jevitate record --url`, CLI only, headed), then post-process the takes: propose an unpromoted draft Journey from 2+ takes, diff them, classify values (postdoc), fit a timing policy, promote a value to a variable (`jevitate recording ...`, MCP `recordings`). Use when the user wants to demonstrate a flow themselves. If they want jevitate to find and save the flow for them, use `explore-author-journey` (jevitate-explore).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You drive Jevitate's human-driven authoring mode (RxD): capturing a take from a
|
|
@@ -13,7 +13,7 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
13
13
|
- `jevitate record --url <authorized-url> [--intent "<framing>"] [--retro
|
|
14
14
|
"<note>"] [--allow <origin>] [--out <dir>] --json` opens a headed browser at
|
|
15
15
|
an authorized origin and records the human's demonstrated flow into a
|
|
16
|
-
`Recording
|
|
16
|
+
take file `{ "recording": <Recording>, "values": {...} }` (default `.jevitate/logs/<date>/` in the repo, else
|
|
17
17
|
`~/.jevitate/logs/<date>/`). The session is
|
|
18
18
|
headed by design — a record session IS a live human demonstration; add
|
|
19
19
|
`--headless` only when a caller explicitly asks. The target must be
|
|
@@ -26,13 +26,37 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
26
26
|
disk). This matters most for `--headless`, where there is no visible
|
|
27
27
|
window to interact with: Ctrl-C is the way to end a headless take, and it
|
|
28
28
|
saves the take rather than killing the process and losing it.
|
|
29
|
-
- The emitted `recordingPath` is the take
|
|
30
|
-
|
|
29
|
+
- The emitted `recordingPath` is the take file: feed it straight to `recording
|
|
30
|
+
diff`/`postdoc`/`promote`/`fit`. `values` holds non-secret captured text/select
|
|
31
|
+
values only (a secret, credential or OTP field never gets one) and stays local,
|
|
32
|
+
so treat the logs dir accordingly: do not commit or share it. Capture two or more takes of the same flow (varying the data each
|
|
31
33
|
time) when you want `diff` to classify which values are variables.
|
|
32
34
|
|
|
33
35
|
- `record` is never an MCP tool (a person does the clicking). As an agent, give the human the
|
|
34
|
-
command to run, and wait for the `recordingPath` it prints. `diff`/`fit`/`postdoc`/`promote`
|
|
35
|
-
are available over MCP as the `recordings` tool (`action`).
|
|
36
|
+
command to run, and wait for the `recordingPath` it prints. `propose`/`diff`/`fit`/`postdoc`/`promote`
|
|
37
|
+
are available over MCP as the `recordings` tool (`action`). Over MCP, captured values never come
|
|
38
|
+
back: `diff` returns hints (length, shape, words), and `postdoc` returns constants redacted.
|
|
39
|
+
|
|
40
|
+
## Propose bindings (after two or more takes) — the usual next step
|
|
41
|
+
|
|
42
|
+
- `jevitate recording propose <takeA.json> <takeB.json> [more...] --id <draft-id> --json` (MCP
|
|
43
|
+
`recordings` `{action: "propose", take, more, id}`) proposes params (varying typed/selected
|
|
44
|
+
values and URL segments), constants, credential handbacks, outputs (identifiers shown before the
|
|
45
|
+
first write), `{var}` checks (`pre-write` identity, `post-write` exact value), and `stopBefore`
|
|
46
|
+
(the Send/Submit step the draft ends before). It saves an UNPROMOTED draft Journey in the journeys
|
|
47
|
+
store (`--out <file>` writes it elsewhere, `--no-draft` saves none). It never overwrites an
|
|
48
|
+
existing Journey (`E_PROPOSAL_DRAFT_EXISTS`), and never promotes or approves anything.
|
|
49
|
+
- **Ambiguities are the human's.** Show every `ambiguities[]` entry (its `kind` and `stepIds`) to
|
|
50
|
+
the human and let them decide. Do not resolve them yourself. When `stopBefore` is absent
|
|
51
|
+
(`no-submit-step`), the draft replays EVERY step, including the final submit. Have the human mark
|
|
52
|
+
the stop before anything runs it.
|
|
53
|
+
- Then follow `jevitate-promotion-ready`: `jevitate journey review <id> --strict` and `jevitate
|
|
54
|
+
journey verify <id> --mutate --param <name>=<value> ...` (on a non-production environment). The
|
|
55
|
+
mutation proof swaps and truncates each proposed parameter to prove the `{var}` checks catch a
|
|
56
|
+
wrong thread or truncated text. Promotion stays the human's.
|
|
57
|
+
- Fewer than two takes (`E_PROPOSAL_TOO_FEW_TAKES`) and takes that did not record the same steps
|
|
58
|
+
(`E_PROPOSAL_MISALIGNED`) are usage errors (exit 64). Re-record the takes so they follow the same
|
|
59
|
+
steps.
|
|
36
60
|
|
|
37
61
|
## Diff multiple takes
|
|
38
62
|
|
|
@@ -41,13 +65,10 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
41
65
|
(constant vs. likely-variable) with a confidence score. Read the confidences;
|
|
42
66
|
do not treat a low-confidence classification as settled — surface it to the
|
|
43
67
|
human via `postdoc` instead of deciding for them.
|
|
44
|
-
- **Input shape**: `diff`/`postdoc`
|
|
45
|
-
take file
|
|
46
|
-
`
|
|
47
|
-
|
|
48
|
-
wrapper) is refused with a clear `E_INVALID_TAKE` message naming the
|
|
49
|
-
mismatch, not a zod dump. Wrap a raw Recording as `{ "recording": <it>,
|
|
50
|
-
"values": {} }` first if you need to diff/postdoc one.
|
|
68
|
+
- **Input shape**: `diff`/`postdoc`/`promote`/`fit` take the `{ "recording",
|
|
69
|
+
"values" }` take file `jevitate record` writes. A raw `Recording` (what
|
|
70
|
+
`explore` or `explore-author-journey` write) has no `values` and is refused with
|
|
71
|
+
`E_INVALID_TAKE`; diff takes made by `jevitate record`.
|
|
51
72
|
|
|
52
73
|
## Review and classify (postdoc)
|
|
53
74
|
|
|
@@ -74,7 +95,10 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
74
95
|
|
|
75
96
|
- `jevitate recording promote <file.json> --page <n> --step <n> --var <name>` —
|
|
76
97
|
for the simple case of a single take with one known value to parameterize,
|
|
77
|
-
skipping the full diff/postdoc review flow.
|
|
98
|
+
skipping the full diff/postdoc review flow. This is how a NON-secret value
|
|
99
|
+
(an email, a SKU) becomes a Journey parameter: it sets the step's `variableName`
|
|
100
|
+
(the `{var}` binding). `explore-author-journey` only auto-parameterizes secret
|
|
101
|
+
fields.
|
|
78
102
|
|
|
79
103
|
## Publishing the result
|
|
80
104
|
|
|
@@ -91,9 +115,7 @@ Before handing a Journey made from a Recording to its owner, follow
|
|
|
91
115
|
|
|
92
116
|
## Known gaps
|
|
93
117
|
|
|
94
|
-
-
|
|
95
|
-
`Recording
|
|
96
|
-
above (`explore-author-journey`) or the `JourneyRegistry` API, and promotion
|
|
97
|
-
stays a deliberate human gate. `jevitate explore-author-journey` is a
|
|
118
|
+
- `recording propose` turns takes into an UNPROMOTED draft Journey. A `postdoc`/`promote`
|
|
119
|
+
result is still only a `Recording`, and promotion stays a deliberate human gate. `jevitate explore-author-journey` is a
|
|
98
120
|
separate, Jev-driving authoring path (not human capture) that may be what a
|
|
99
121
|
user who wants a Journey "recorded for them" actually needs.
|