@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.
Files changed (66) hide show
  1. package/dist/bin.js +3046 -1793
  2. package/dist/build-info.generated.js +3 -3
  3. package/dist/campaign-api.js +2 -2
  4. package/dist/campaign-api.js.map +1 -1
  5. package/dist/check-execute.js +36 -6
  6. package/dist/check-execute.js.map +1 -1
  7. package/dist/check-plan.d.ts +1 -1
  8. package/dist/check-plan.js +2 -1
  9. package/dist/check-plan.js.map +1 -1
  10. package/dist/check-suite.d.ts +17 -1
  11. package/dist/check-suite.js +26 -3
  12. package/dist/check-suite.js.map +1 -1
  13. package/dist/environments.d.ts +29 -2
  14. package/dist/environments.js +100 -7
  15. package/dist/environments.js.map +1 -1
  16. package/dist/exit-codes.js +1 -0
  17. package/dist/exit-codes.js.map +1 -1
  18. package/dist/fixture-cli.d.ts +2 -0
  19. package/dist/fixture-cli.js +1 -1
  20. package/dist/fixture-cli.js.map +1 -1
  21. package/dist/http-probe.js +3 -1
  22. package/dist/http-probe.js.map +1 -1
  23. package/dist/journey-annotate-cli.js +5 -2
  24. package/dist/journey-annotate-cli.js.map +1 -1
  25. package/dist/journey-api.d.ts +9 -2
  26. package/dist/journey-api.js +32 -17
  27. package/dist/journey-api.js.map +1 -1
  28. package/dist/journey-cli/run.js +5 -2
  29. package/dist/journey-cli/run.js.map +1 -1
  30. package/dist/journey-cli/verify.js +5 -2
  31. package/dist/journey-cli/verify.js.map +1 -1
  32. package/dist/journey-demo-cli.js +5 -2
  33. package/dist/journey-demo-cli.js.map +1 -1
  34. package/dist/journey-network-checks.d.ts +5 -1
  35. package/dist/journey-network-checks.js +22 -2
  36. package/dist/journey-network-checks.js.map +1 -1
  37. package/dist/journey-prefix.js +2 -2
  38. package/dist/journey-prefix.js.map +1 -1
  39. package/dist/journey-review.js +10 -3
  40. package/dist/journey-review.js.map +1 -1
  41. package/dist/journey-verify.d.ts +4 -2
  42. package/dist/journey-verify.js +8 -6
  43. package/dist/journey-verify.js.map +1 -1
  44. package/dist/load-api.js +6 -4
  45. package/dist/load-api.js.map +1 -1
  46. package/dist/mcp-cli-tools.js +16 -1
  47. package/dist/mcp-cli-tools.js.map +1 -1
  48. package/dist/mission-fixtures.d.ts +15 -2
  49. package/dist/mission-fixtures.js +120 -43
  50. package/dist/mission-fixtures.js.map +1 -1
  51. package/dist/record-api.d.ts +3 -1
  52. package/dist/record-api.js +17 -2
  53. package/dist/record-api.js.map +1 -1
  54. package/dist/record-cli.js +4 -3
  55. package/dist/record-cli.js.map +1 -1
  56. package/dist/recording-cli.d.ts +15 -1
  57. package/dist/recording-cli.js +202 -11
  58. package/dist/recording-cli.js.map +1 -1
  59. package/dist/source-run-api.d.ts +1 -1
  60. package/dist/source-run-api.js +7 -5
  61. package/dist/source-run-api.js.map +1 -1
  62. package/package.json +6 -6
  63. package/skills/jevitate-ci-check/SKILL.md +3 -0
  64. package/skills/jevitate-explore/SKILL.md +2 -1
  65. package/skills/jevitate-promotion-ready/SKILL.md +5 -0
  66. package/skills/jevitate-record/SKILL.md +40 -18
@@ -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
+ };
@@ -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
- /** Registers `jevitate recording`: `promote|diff|fit|postdoc`. */
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 readAuthoringTake(file) {
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
- const parsed = AuthoringTakeSchema.parse(json);
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 raw = await readFile(file, "utf8");
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
- const envelope = ok(diffResult);
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 raw = await readFile(file, "utf8");
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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"}
@@ -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 (`deriveParamSchema`/`validateParams`) before
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`);
@@ -1,4 +1,4 @@
1
- import { deriveParamSchema, secretParamNames, secretParamValues, validateParams } from "@jevitate/journey";
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 (`deriveParamSchema`/`validateParams`) before
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(deriveParamSchema(file.recording), params);
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: httpCheckRefs({ params, secretParams: secretParamNames(file, params) }),
52
+ resolveRef: refs,
52
53
  });
53
54
  const observer = outcomeChecks.observer();
54
- const runner = new JourneyRunner(actor, new RecordingInterpreter({ ...(observer === undefined ? {} : { observer }), fixtureBaseDir: journeyFixtureBaseDir() }));
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":"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"}
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.15.1",
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`). A `not-reached` result carries `discovery` (stop reason, checks, `resultPath`,
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: diff them, classify values as constants, variables or hand-backs (postdoc), fit a timing policy, and 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).
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` JSON file (default `.jevitate/logs/<date>/` in the repo, else
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 you then feed into the diff/postdoc
30
- flow below. Capture two or more takes of the same flow (varying the data each
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` accept ONLY a `jevitate record`-produced
45
- take file — `{ "recording": <Recording>, "values": {...} }`. A raw
46
- `Recording` (what `explore`, `explore-author-journey`, or a usability run
47
- write directly — `{version, site, pages, ...}` with no `recording`/`values`
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
- - There is no single-command "postdoc result -> promoted local Journey" verb: a
95
- `Recording` produced here still becomes a Journey through the authoring paths
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.