@jevitate/cli 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/author-journey-cli.js +11 -8
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +2754 -1096
- package/dist/build-info.generated.js +3 -3
- package/dist/catalog-api.d.ts +22 -0
- package/dist/catalog-api.js +49 -0
- package/dist/catalog-api.js.map +1 -1
- package/dist/catalog-cli.js +59 -37
- package/dist/catalog-cli.js.map +1 -1
- package/dist/cli-shared.d.ts +6 -1
- package/dist/cli-shared.js +11 -2
- package/dist/cli-shared.js.map +1 -1
- package/dist/exit-codes.js +8 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/journey-anchor-cli.js +16 -8
- package/dist/journey-anchor-cli.js.map +1 -1
- package/dist/journey-annotate-cli.js +10 -5
- package/dist/journey-annotate-cli.js.map +1 -1
- package/dist/journey-api.d.ts +2 -0
- package/dist/journey-api.js +14 -0
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-bundle.d.ts +83 -0
- package/dist/journey-bundle.js +252 -0
- package/dist/journey-bundle.js.map +1 -0
- package/dist/journey-chain.d.ts +14 -1
- package/dist/journey-chain.js +139 -8
- package/dist/journey-chain.js.map +1 -1
- package/dist/journey-cli/anchors.js +11 -6
- package/dist/journey-cli/anchors.js.map +1 -1
- package/dist/journey-cli/chain.js +12 -5
- package/dist/journey-cli/chain.js.map +1 -1
- package/dist/journey-cli/find.js +10 -5
- package/dist/journey-cli/find.js.map +1 -1
- package/dist/journey-cli/lint.js +13 -9
- package/dist/journey-cli/lint.js.map +1 -1
- package/dist/journey-cli/list.js +10 -5
- package/dist/journey-cli/list.js.map +1 -1
- package/dist/journey-cli/migrate.js +13 -6
- package/dist/journey-cli/migrate.js.map +1 -1
- package/dist/journey-cli/promote.js +11 -6
- package/dist/journey-cli/promote.js.map +1 -1
- package/dist/journey-cli/publish.js +12 -6
- package/dist/journey-cli/publish.js.map +1 -1
- package/dist/journey-cli/review.js +14 -8
- package/dist/journey-cli/review.js.map +1 -1
- package/dist/journey-cli/run.js +25 -10
- package/dist/journey-cli/run.js.map +1 -1
- package/dist/journey-cli/shared.d.ts +19 -1
- package/dist/journey-cli/shared.js +28 -0
- package/dist/journey-cli/shared.js.map +1 -1
- package/dist/journey-cli/verify.js +13 -6
- package/dist/journey-cli/verify.js.map +1 -1
- package/dist/journey-cli-bundle.d.ts +4 -0
- package/dist/journey-cli-bundle.js +70 -0
- package/dist/journey-cli-bundle.js.map +1 -0
- package/dist/journey-cli-readiness.d.ts +4 -0
- package/dist/journey-cli-readiness.js +163 -0
- package/dist/journey-cli-readiness.js.map +1 -0
- package/dist/journey-cli.js +5 -0
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-demo-cli.js +10 -5
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-handback.d.ts +62 -0
- package/dist/journey-handback.js +150 -0
- package/dist/journey-handback.js.map +1 -0
- package/dist/journey-link-api.js +1 -1
- package/dist/journey-link-api.js.map +1 -1
- package/dist/journey-link-cli.js +13 -8
- package/dist/journey-link-cli.js.map +1 -1
- package/dist/journey-readiness.d.ts +104 -0
- package/dist/journey-readiness.js +369 -0
- package/dist/journey-readiness.js.map +1 -0
- package/dist/mcp-cli-tools.js +57 -21
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/program.js +3 -0
- package/dist/program.js.map +1 -1
- package/dist/project-layout.d.ts +57 -0
- package/dist/project-layout.js +144 -0
- package/dist/project-layout.js.map +1 -0
- package/dist/project-where.d.ts +4 -0
- package/dist/project-where.js +48 -0
- package/dist/project-where.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { clock } from "@jevitate/domain";
|
|
5
|
+
import { loadCatalog } from "./catalog-api.js";
|
|
6
|
+
import { annotationDraftPath, journeyContentHash } from "./journey-annotate-api.js";
|
|
7
|
+
import { reviewJourneyById } from "./journey-review-api.js";
|
|
8
|
+
import { runJourneyReadiness } from "./journey-readiness.js";
|
|
9
|
+
/** #584: a stale manifest — `--check` re-derived a different hash (exit 1). */
|
|
10
|
+
export class BundleStaleError extends Error {
|
|
11
|
+
changed;
|
|
12
|
+
code = "E_BUNDLE_STALE";
|
|
13
|
+
constructor(changed) {
|
|
14
|
+
super(`the bundle is stale: ${changed.join("; ")}`);
|
|
15
|
+
this.changed = changed;
|
|
16
|
+
this.name = "BundleStaleError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** The label every approval state carries (§4): technical readiness, draft, prior approval, stale approval, current authorization. */
|
|
20
|
+
function catalogApprovalLabel(status) {
|
|
21
|
+
switch (status) {
|
|
22
|
+
case "approved":
|
|
23
|
+
return "current authorization";
|
|
24
|
+
case "stale":
|
|
25
|
+
return "stale approval";
|
|
26
|
+
case "draft":
|
|
27
|
+
return "draft";
|
|
28
|
+
default:
|
|
29
|
+
return "unknown";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** How a Journey's own promotion reads: not promoted is `draft`, an approval that no longer binds is `stale approval`. */
|
|
33
|
+
function journeyApprovalLabel(entry) {
|
|
34
|
+
const approval = entry.journey.metadata.approval;
|
|
35
|
+
const change = entry.review.changeSinceApproval;
|
|
36
|
+
const stale = (change.kind === "diff" || change.kind === "snapshot-missing") && change.changed;
|
|
37
|
+
if (entry.journey.metadata.promoted && approval !== undefined && !stale)
|
|
38
|
+
return "current authorization";
|
|
39
|
+
if (stale)
|
|
40
|
+
return "stale approval";
|
|
41
|
+
if (approval !== undefined)
|
|
42
|
+
return "prior approval";
|
|
43
|
+
return "draft";
|
|
44
|
+
}
|
|
45
|
+
function handoffFieldLines(fields, indent) {
|
|
46
|
+
return Object.entries(fields).map(([name, decl]) => `${indent}${name}: ${decl.type}${decl.required === false ? " (optional)" : ""}`);
|
|
47
|
+
}
|
|
48
|
+
/** §4: the #582 contracts, by field name and type only (never a value). */
|
|
49
|
+
function contractLines(entry) {
|
|
50
|
+
const outputs = entry.journey.metadata.outputs;
|
|
51
|
+
const inputs = entry.journey.metadata.inputs;
|
|
52
|
+
if (outputs === undefined && inputs === undefined)
|
|
53
|
+
return ["contracts: none declared"];
|
|
54
|
+
const lines = ["contracts:"];
|
|
55
|
+
if (outputs !== undefined)
|
|
56
|
+
lines.push(...outputsLines(outputs));
|
|
57
|
+
if (inputs !== undefined)
|
|
58
|
+
lines.push(...inputsLines(inputs));
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
function outputsLines(outputs) {
|
|
62
|
+
const lines = [` outputs: ${outputs.contract}`];
|
|
63
|
+
lines.push(...handoffFieldLines(outputs.fields, " "));
|
|
64
|
+
if (outputs.collection !== undefined)
|
|
65
|
+
lines.push(` collection: ${outputs.collection}`);
|
|
66
|
+
return lines;
|
|
67
|
+
}
|
|
68
|
+
function inputsLines(inputs) {
|
|
69
|
+
const lines = [` inputs: accepts ${inputs.accepts}`, ...handoffFieldLines(inputs.request.fields, " request ")];
|
|
70
|
+
for (const [param, binding] of Object.entries(inputs.bindings)) {
|
|
71
|
+
const source = "record" in binding ? `record.${binding.record}` : "request" in binding ? `request.${binding.request}` : "const" in binding ? `const.${binding.const}` : `secret.${binding.secret}`;
|
|
72
|
+
lines.push(` binding ${param} <- ${source}`);
|
|
73
|
+
}
|
|
74
|
+
return lines;
|
|
75
|
+
}
|
|
76
|
+
/** §4: a person runs these, in order (persona approve, job approve, annotations approve, journey promote). */
|
|
77
|
+
function humanCommands(entry, catalog, draft, ready) {
|
|
78
|
+
const commands = [];
|
|
79
|
+
const personaId = entry.review.catalog?.persona?.id;
|
|
80
|
+
const jobId = entry.review.catalog?.job?.id;
|
|
81
|
+
if (personaId !== undefined) {
|
|
82
|
+
const hash = catalog.personas.find((p) => p.id === personaId)?.contentHash;
|
|
83
|
+
commands.push(`jevitate persona approve ${personaId}${hash === undefined ? "" : ` --reviewed-hash ${hash}`}`);
|
|
84
|
+
}
|
|
85
|
+
if (jobId !== undefined) {
|
|
86
|
+
const hash = catalog.jobs.find((j) => j.id === jobId)?.contentHash;
|
|
87
|
+
commands.push(`jevitate job approve ${jobId}${hash === undefined ? "" : ` --reviewed-hash ${hash}`}`);
|
|
88
|
+
}
|
|
89
|
+
if (draft)
|
|
90
|
+
commands.push(`jevitate journey annotate ${entry.id} --approve`);
|
|
91
|
+
// §4: while any technical blocker remains, promote moves under "After the blockers are fixed" without a hash.
|
|
92
|
+
if (ready)
|
|
93
|
+
commands.push(`jevitate journey promote ${entry.id} --reviewed-hash ${entry.review.contentHash}`);
|
|
94
|
+
return commands;
|
|
95
|
+
}
|
|
96
|
+
function journeySection(entry, receipt) {
|
|
97
|
+
const m = entry.journey.metadata;
|
|
98
|
+
const lines = [`## Journey: ${entry.id}`, ""];
|
|
99
|
+
lines.push(`goal: ${m.goal ?? "(none)"}`);
|
|
100
|
+
const links = entry.review.catalog;
|
|
101
|
+
if (links?.persona !== undefined)
|
|
102
|
+
lines.push(`persona: ${links.persona.id} (${catalogApprovalLabel(links.persona.status)})`);
|
|
103
|
+
if (links?.job !== undefined)
|
|
104
|
+
lines.push(`job: ${links.job.id} (${catalogApprovalLabel(links.job.status)})`);
|
|
105
|
+
lines.push(...contractLines(entry));
|
|
106
|
+
const boundary = m.boundary;
|
|
107
|
+
lines.push(boundary === undefined ? "boundary: none declared" : `boundary: ${boundary.kind}; stop before "${boundary.stopBefore.label}"; next step: ${boundary.nextStep}`);
|
|
108
|
+
lines.push("side effects:");
|
|
109
|
+
if (entry.review.sideEffects.writeRequests.length === 0)
|
|
110
|
+
lines.push(" none");
|
|
111
|
+
for (const w of entry.review.sideEffects.writeRequests)
|
|
112
|
+
lines.push(` ${w.method} ${w.endpoint} (${w.source}${w.step === undefined ? "" : `, step ${w.step}`})`);
|
|
113
|
+
lines.push(`content hash: ${journeyContentHash(entry.journey)}`);
|
|
114
|
+
lines.push(`review hash: ${entry.review.contentHash}`);
|
|
115
|
+
lines.push(`approval: ${journeyApprovalLabel(entry)}`);
|
|
116
|
+
lines.push("steps:");
|
|
117
|
+
for (const step of entry.review.steps)
|
|
118
|
+
lines.push(` ${step.number}. ${step.action} — objective: ${step.objective ?? "(pending)"}`);
|
|
119
|
+
if (entry.review.summary.missingIntent.length > 0) {
|
|
120
|
+
lines.push("pending annotations:");
|
|
121
|
+
for (const item of entry.review.summary.missingIntent)
|
|
122
|
+
lines.push(` - ${item}`);
|
|
123
|
+
}
|
|
124
|
+
lines.push("readiness:");
|
|
125
|
+
for (const check of receipt.checks.filter((c) => c.journey === entry.id))
|
|
126
|
+
lines.push(checkLine(check));
|
|
127
|
+
return lines;
|
|
128
|
+
}
|
|
129
|
+
function checkLine(check) {
|
|
130
|
+
return ` ${check.check}: ${check.state} — ${check.detail}${check.evidence === undefined ? "" : ` (evidence: ${check.evidence})`}`;
|
|
131
|
+
}
|
|
132
|
+
/** §4: the bundle's Markdown. The verdict, blockers and any inconclusive/stale proof come first. */
|
|
133
|
+
export function renderJourneyBundle(receipt, entries, catalog, drafts) {
|
|
134
|
+
const lines = [`# Journey readiness bundle`, "", `verdict: ${receipt.verdict}`, ""];
|
|
135
|
+
const blockers = receipt.blockers;
|
|
136
|
+
if (blockers.length > 0) {
|
|
137
|
+
lines.push("## Blockers", "");
|
|
138
|
+
for (const b of blockers)
|
|
139
|
+
lines.push(`- ${b.journey} ${b.check}: ${b.why} — next: ${b.next}`);
|
|
140
|
+
lines.push("");
|
|
141
|
+
}
|
|
142
|
+
const flagged = receipt.checks.filter((c) => c.state === "inconclusive" || c.state === "stale");
|
|
143
|
+
if (flagged.length > 0) {
|
|
144
|
+
lines.push("## Inconclusive or stale evidence", "");
|
|
145
|
+
for (const c of flagged)
|
|
146
|
+
lines.push(`- ${c.journey} ${c.check}: ${c.state} — ${c.detail}`);
|
|
147
|
+
lines.push("");
|
|
148
|
+
}
|
|
149
|
+
for (const entry of entries) {
|
|
150
|
+
lines.push(...journeySection(entry, receipt), "");
|
|
151
|
+
}
|
|
152
|
+
const ready = receipt.verdict === "technically-ready";
|
|
153
|
+
lines.push("## Human-only commands", "");
|
|
154
|
+
for (const entry of entries) {
|
|
155
|
+
for (const command of humanCommands(entry, catalog, drafts.has(entry.id), ready))
|
|
156
|
+
lines.push(`- ${command}`);
|
|
157
|
+
}
|
|
158
|
+
if (!ready) {
|
|
159
|
+
lines.push("");
|
|
160
|
+
lines.push("## After the blockers are fixed", "");
|
|
161
|
+
for (const entry of entries)
|
|
162
|
+
lines.push(`- jevitate journey promote ${entry.id}`);
|
|
163
|
+
}
|
|
164
|
+
lines.push("");
|
|
165
|
+
return `${lines.join("\n")}\n`;
|
|
166
|
+
}
|
|
167
|
+
function catalogEntries(entries, catalog) {
|
|
168
|
+
const wanted = new Map();
|
|
169
|
+
const add = (kind, id, hash) => {
|
|
170
|
+
if (id === undefined || hash === undefined)
|
|
171
|
+
return;
|
|
172
|
+
wanted.set(`${kind}\u0000${id}`, { kind, id, hash });
|
|
173
|
+
};
|
|
174
|
+
for (const entry of entries) {
|
|
175
|
+
const links = entry.review.catalog;
|
|
176
|
+
add("persona", links?.persona?.id, catalog.personas.find((p) => p.id === links?.persona?.id)?.contentHash);
|
|
177
|
+
add("job", links?.job?.id, catalog.jobs.find((j) => j.id === links?.job?.id)?.contentHash);
|
|
178
|
+
}
|
|
179
|
+
return [...wanted.values()].sort((a, b) => (a.kind === b.kind ? a.id.localeCompare(b.id) : a.kind.localeCompare(b.kind)));
|
|
180
|
+
}
|
|
181
|
+
function defaultAnnotationDraft(journeysDir, id) {
|
|
182
|
+
return existsSync(annotationDraftPath(journeysDir, id));
|
|
183
|
+
}
|
|
184
|
+
/** #584: build the local bundle from a `report`-mode readiness and the review sheet of each Journey. */
|
|
185
|
+
export async function buildJourneyBundle(opts, deps = {}) {
|
|
186
|
+
const readiness = deps.readiness ?? runJourneyReadiness;
|
|
187
|
+
const review = deps.review ?? reviewJourneyById;
|
|
188
|
+
const catalogOf = deps.loadCatalog ?? loadCatalog;
|
|
189
|
+
const draftExists = deps.annotationDraft ?? defaultAnnotationDraft;
|
|
190
|
+
const readinessOpts = {
|
|
191
|
+
id: opts.id,
|
|
192
|
+
...(opts.with === undefined ? {} : { with: opts.with }),
|
|
193
|
+
mode: "report",
|
|
194
|
+
journeysDir: opts.journeysDir,
|
|
195
|
+
...(opts.catalogDir === undefined ? {} : { catalogDir: opts.catalogDir }),
|
|
196
|
+
...(opts.targetsFile === undefined ? {} : { targetsFile: opts.targetsFile }),
|
|
197
|
+
...(opts.projectDir === undefined ? {} : { projectDir: opts.projectDir }),
|
|
198
|
+
};
|
|
199
|
+
const receiptDeps = deps.cwd === undefined ? {} : { cwd: deps.cwd };
|
|
200
|
+
const receipt = await readiness(readinessOpts, receiptDeps);
|
|
201
|
+
const ids = [opts.id, ...(opts.with === undefined ? [] : [opts.with])];
|
|
202
|
+
const reviewOpts = { strict: true, ...(opts.catalogDir === undefined ? {} : { catalogDir: opts.catalogDir }), ...(opts.targetsFile === undefined ? {} : { targetsFile: opts.targetsFile }) };
|
|
203
|
+
const entries = [];
|
|
204
|
+
for (const id of ids) {
|
|
205
|
+
const loaded = await review(opts.journeysDir, id, reviewOpts);
|
|
206
|
+
entries.push({ id, journey: loaded.journey, review: loaded.review });
|
|
207
|
+
}
|
|
208
|
+
const catalog = await catalogOf(opts.catalogDir === undefined ? null : opts.catalogDir, opts.journeysDir);
|
|
209
|
+
const drafts = new Set(ids.filter((id) => draftExists(opts.journeysDir, id)));
|
|
210
|
+
const out = resolve(opts.out);
|
|
211
|
+
const bundlePath = join(out, "bundle.md");
|
|
212
|
+
const manifestPath = join(out, "manifest.json");
|
|
213
|
+
const manifest = {
|
|
214
|
+
bundleVersion: 1,
|
|
215
|
+
journeys: entries.map((e) => ({ id: e.id, contentHash: journeyContentHash(e.journey), reviewHash: e.review.contentHash })),
|
|
216
|
+
catalog: catalogEntries(entries, catalog),
|
|
217
|
+
verdict: receipt.verdict,
|
|
218
|
+
generatedAt: clock.nowIso(),
|
|
219
|
+
};
|
|
220
|
+
await mkdir(out, { recursive: true });
|
|
221
|
+
await writeFile(bundlePath, renderJourneyBundle(receipt, entries, catalog, drafts), "utf8");
|
|
222
|
+
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
223
|
+
return { out, files: [bundlePath, manifestPath], verdict: receipt.verdict };
|
|
224
|
+
}
|
|
225
|
+
/** #584: re-derive every hash the bundle recorded; a moved hash throws `BundleStaleError` (exit 1). */
|
|
226
|
+
export async function checkJourneyBundle(dir, opts, deps = {}) {
|
|
227
|
+
const review = deps.review ?? reviewJourneyById;
|
|
228
|
+
const catalogOf = deps.loadCatalog ?? loadCatalog;
|
|
229
|
+
const manifestPath = join(resolve(dir), "manifest.json");
|
|
230
|
+
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
231
|
+
const reviewOpts = { strict: true, ...(opts.catalogDir === undefined ? {} : { catalogDir: opts.catalogDir }), ...(opts.targetsFile === undefined ? {} : { targetsFile: opts.targetsFile }) };
|
|
232
|
+
const changed = [];
|
|
233
|
+
for (const recorded of manifest.journeys) {
|
|
234
|
+
const loaded = await review(opts.journeysDir, recorded.id, reviewOpts);
|
|
235
|
+
if (journeyContentHash(loaded.journey) !== recorded.contentHash)
|
|
236
|
+
changed.push(`journey ${recorded.id} contentHash`);
|
|
237
|
+
if (loaded.review.contentHash !== recorded.reviewHash)
|
|
238
|
+
changed.push(`journey ${recorded.id} reviewHash`);
|
|
239
|
+
}
|
|
240
|
+
if (manifest.catalog.length > 0) {
|
|
241
|
+
const catalog = await catalogOf(opts.catalogDir === undefined ? null : opts.catalogDir, opts.journeysDir);
|
|
242
|
+
for (const recorded of manifest.catalog) {
|
|
243
|
+
const current = recorded.kind === "persona" ? catalog.personas.find((p) => p.id === recorded.id)?.contentHash : catalog.jobs.find((j) => j.id === recorded.id)?.contentHash;
|
|
244
|
+
if (current !== recorded.hash)
|
|
245
|
+
changed.push(`${recorded.kind} ${recorded.id} hash`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (changed.length > 0)
|
|
249
|
+
throw new BundleStaleError(changed);
|
|
250
|
+
return { stale: false };
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=journey-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey-bundle.js","sourceRoot":"","sources":["../src/journey-bundle.ts"],"names":[],"mappings":"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"}
|
package/dist/journey-chain.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type HandoffRejection } from "@jevitate/journey";
|
|
1
2
|
import type { JourneyRunResult, SiteGateDeps } from "@jevitate/runtime";
|
|
2
3
|
import type { BrowserPort, EmulationSpec } from "@jevitate/playwright";
|
|
3
4
|
import type { BrowserRunOptions } from "./browser-run-options.js";
|
|
@@ -10,6 +11,10 @@ import { type RunJourneyProgrammaticallyOptions } from "./journey-api.js";
|
|
|
10
11
|
*
|
|
11
12
|
* The result carries names and outcomes only — never a record field's value (e.g. `sourceText`) or a
|
|
12
13
|
* request's `replyText`.
|
|
14
|
+
*
|
|
15
|
+
* #582 (docs/contracts/journey-handoff.md §4-§5): when the reply Journey declares `metadata.inputs`,
|
|
16
|
+
* the discovered records and the requests are validated by the pure `@jevitate/journey` handoff
|
|
17
|
+
* validators and each request is matched on `inputs.request.key` and bound by `bindParams`.
|
|
13
18
|
*/
|
|
14
19
|
/** The runner `journey run` uses; a testing seam so the chain can be driven without a browser. */
|
|
15
20
|
export type JourneyChainRunner = (options: RunJourneyProgrammaticallyOptions) => Promise<JourneyRunResult>;
|
|
@@ -18,7 +23,7 @@ export interface JourneyChainDeps {
|
|
|
18
23
|
/** Testing seam — defaults to `runJourneyProgrammatically`. */
|
|
19
24
|
readonly runJourney?: JourneyChainRunner;
|
|
20
25
|
}
|
|
21
|
-
export type JourneyChainErrorCode = "E_CHAIN_FROM_FAILED" | "E_CHAIN_EMPTY" | "E_CHAIN_REQUEST" | "E_CHAIN_NOT_PROMOTED";
|
|
26
|
+
export type JourneyChainErrorCode = "E_CHAIN_FROM_FAILED" | "E_CHAIN_EMPTY" | "E_CHAIN_REQUEST" | "E_CHAIN_NOT_PROMOTED" | "E_HANDOFF_INCOMPATIBLE";
|
|
22
27
|
/** A chain-stopping failure (§5 steps 1, 2 and the §4 request contract). */
|
|
23
28
|
export declare class JourneyChainError extends Error {
|
|
24
29
|
readonly code: JourneyChainErrorCode;
|
|
@@ -38,6 +43,12 @@ export interface ChainRunResult {
|
|
|
38
43
|
readonly account: string;
|
|
39
44
|
readonly outcome: string;
|
|
40
45
|
readonly reason?: string;
|
|
46
|
+
/** §5 (handoff): the accepted contract (`name@major`). */
|
|
47
|
+
readonly contract?: string;
|
|
48
|
+
/** §5 (handoff): `sha256:` of the record's declared fields. */
|
|
49
|
+
readonly fingerprint?: string;
|
|
50
|
+
/** §5 (handoff): when the producing run finished (ISO 8601 UTC, from the injectable clock). */
|
|
51
|
+
readonly capturedAt?: string;
|
|
41
52
|
}
|
|
42
53
|
/** One request with no discovered record (§5 result `unmatched[]`). */
|
|
43
54
|
export interface ChainUnmatched {
|
|
@@ -53,6 +64,8 @@ export interface JourneyChainResult {
|
|
|
53
64
|
};
|
|
54
65
|
readonly runs: readonly ChainRunResult[];
|
|
55
66
|
readonly unmatched: readonly ChainUnmatched[];
|
|
67
|
+
/** §4/§5 (handoff): records, ambiguous keys and requests a chain refused to run; absent in 0.17.0 mode. */
|
|
68
|
+
readonly rejected?: readonly HandoffRejection[];
|
|
56
69
|
}
|
|
57
70
|
/**
|
|
58
71
|
* §4: parse the JSON Lines file of prepare-only requests. `commentId`, `account` and `replyText` are
|
package/dist/journey-chain.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { FsJourneyStore, JourneyRegistry, journeyParamSchema } from "@jevitate/journey";
|
|
1
|
+
import { FsJourneyStore, JourneyRegistry, bindParams, checkCompatibility, handoffKey, journeyParamSchema, outputKeyFields, readRecords as readHandoffRecords, recordFingerprint, validateRecords, validateRequests, } from "@jevitate/journey";
|
|
2
|
+
import { clock } from "@jevitate/domain";
|
|
2
3
|
import { runJourneyProgrammatically, UnknownJourneyError } from "./journey-api.js";
|
|
3
4
|
/** A chain-stopping failure (§5 steps 1, 2 and the §4 request contract). */
|
|
4
5
|
export class JourneyChainError extends Error {
|
|
@@ -104,9 +105,9 @@ function chainParams(record, request, declared) {
|
|
|
104
105
|
* so the text-bearing params (the reply and the source comment) are replaced by `<param name>`.
|
|
105
106
|
*/
|
|
106
107
|
const TEXT_PARAMS = ["replyText", "expected_sourcetext"];
|
|
107
|
-
function redactReason(reason, params) {
|
|
108
|
+
function redactReason(reason, params, names = TEXT_PARAMS) {
|
|
108
109
|
let out = reason;
|
|
109
|
-
for (const name of
|
|
110
|
+
for (const name of names) {
|
|
110
111
|
const value = params[name];
|
|
111
112
|
if (value === undefined || value === "")
|
|
112
113
|
continue;
|
|
@@ -131,6 +132,117 @@ function sharedRunOptions(opts) {
|
|
|
131
132
|
...(opts.siteGate === undefined ? {} : { siteGate: opts.siteGate }),
|
|
132
133
|
};
|
|
133
134
|
}
|
|
135
|
+
/** §4 step 5: parse the request file as JSON Lines objects; field validation is `validateRequests`. */
|
|
136
|
+
function parseRequestObjects(text) {
|
|
137
|
+
const requests = [];
|
|
138
|
+
const lines = text.split(/\r?\n/);
|
|
139
|
+
for (let n = 0; n < lines.length; n++) {
|
|
140
|
+
const line = lines[n]?.trim() ?? "";
|
|
141
|
+
if (line === "")
|
|
142
|
+
continue;
|
|
143
|
+
let parsed;
|
|
144
|
+
try {
|
|
145
|
+
parsed = JSON.parse(line);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
throw new JourneyChainError("E_CHAIN_REQUEST", `request line ${n + 1} is not valid JSON`);
|
|
149
|
+
}
|
|
150
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
151
|
+
throw new JourneyChainError("E_CHAIN_REQUEST", `request line ${n + 1} must be a JSON object`);
|
|
152
|
+
}
|
|
153
|
+
requests.push(parsed);
|
|
154
|
+
}
|
|
155
|
+
return requests;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* §1: the origins a `url` field may name — the run environment's allowlist, else the producer's
|
|
159
|
+
* recorded site, plus its declared `metadata.allowedOrigins` and the run's `--allow`.
|
|
160
|
+
*/
|
|
161
|
+
function handoffOrigins(opts, from) {
|
|
162
|
+
const origins = new Set();
|
|
163
|
+
if (opts.environment !== undefined)
|
|
164
|
+
for (const origin of opts.environment.allowedOrigins)
|
|
165
|
+
origins.add(origin);
|
|
166
|
+
else
|
|
167
|
+
origins.add(from.recording.site);
|
|
168
|
+
for (const origin of from.metadata.allowedOrigins ?? [])
|
|
169
|
+
origins.add(origin);
|
|
170
|
+
for (const origin of opts.allow ?? [])
|
|
171
|
+
origins.add(origin);
|
|
172
|
+
return [...origins];
|
|
173
|
+
}
|
|
174
|
+
/** §4/§5 no-echo rule: a param bound to a `text`/`url`/`path` field never appears in a reason. */
|
|
175
|
+
const REDACTED_FIELD_TYPES = ["text", "url", "path"];
|
|
176
|
+
function textBoundParams(inputs, outputs) {
|
|
177
|
+
const names = [];
|
|
178
|
+
for (const [param, binding] of Object.entries(inputs.bindings)) {
|
|
179
|
+
const type = "record" in binding ? outputs.fields[binding.record]?.type : "request" in binding ? inputs.request.fields[binding.request]?.type : undefined;
|
|
180
|
+
if (type !== undefined && REDACTED_FIELD_TYPES.includes(type))
|
|
181
|
+
names.push(param);
|
|
182
|
+
}
|
|
183
|
+
return names;
|
|
184
|
+
}
|
|
185
|
+
/** The `commentId`/`account` identity the §5 result names, read from a request when declared. */
|
|
186
|
+
function requestIdentity(bag) {
|
|
187
|
+
return {
|
|
188
|
+
commentId: typeof bag["commentId"] === "string" ? bag["commentId"] : "",
|
|
189
|
+
account: typeof bag["account"] === "string" ? bag["account"] : "",
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* §4/§5 handoff branch: validate the records and requests with the pure `@jevitate/journey`
|
|
194
|
+
* validators, match each valid request on `inputs.request.key` against the outputs key, and run `to`
|
|
195
|
+
* once per match with the params `bindParams` resolves. A request matching an invalid or ambiguous
|
|
196
|
+
* record is rejected (never unmatched, never run).
|
|
197
|
+
*/
|
|
198
|
+
async function runHandoffChain(inputs, outputs, fromJourney, fromOutput, requestText, capturedAt, opts, shared, runner) {
|
|
199
|
+
const ctx = { allowedOrigins: handoffOrigins(opts, fromJourney) };
|
|
200
|
+
const records = readHandoffRecords(outputs, fromOutput);
|
|
201
|
+
if (records.length === 0)
|
|
202
|
+
throw new JourneyChainError("E_CHAIN_EMPTY", `the producing Journey '${opts.from}' returned no records`);
|
|
203
|
+
const outputKeys = outputKeyFields(outputs);
|
|
204
|
+
const recordValidation = validateRecords(outputs, records, ctx);
|
|
205
|
+
const byKey = new Map();
|
|
206
|
+
const rejectedByKey = new Map();
|
|
207
|
+
for (const record of recordValidation.valid)
|
|
208
|
+
byKey.set(handoffKey(outputKeys, record), record);
|
|
209
|
+
for (const rejection of recordValidation.rejected)
|
|
210
|
+
if (!rejectedByKey.has(rejection.key))
|
|
211
|
+
rejectedByKey.set(rejection.key, rejection);
|
|
212
|
+
const requestValidation = validateRequests(inputs, parseRequestObjects(requestText), ctx);
|
|
213
|
+
const rejected = [...recordValidation.rejected, ...requestValidation.rejected];
|
|
214
|
+
const redactors = textBoundParams(inputs, outputs);
|
|
215
|
+
const runs = [];
|
|
216
|
+
const unmatched = [];
|
|
217
|
+
for (const request of requestValidation.valid) {
|
|
218
|
+
const key = handoffKey(inputs.request.key, request);
|
|
219
|
+
const identity = requestIdentity(request);
|
|
220
|
+
const record = byKey.get(key);
|
|
221
|
+
if (record === undefined) {
|
|
222
|
+
const rejection = rejectedByKey.get(key);
|
|
223
|
+
if (rejection !== undefined)
|
|
224
|
+
rejected.push({ key, reason: rejection.reason, errors: rejection.errors });
|
|
225
|
+
else
|
|
226
|
+
unmatched.push(identity);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
const params = bindParams(inputs, record, request);
|
|
230
|
+
const stamp = { contract: inputs.accepts, fingerprint: recordFingerprint(outputs, record), capturedAt };
|
|
231
|
+
try {
|
|
232
|
+
const result = await runner({ ...shared, id: opts.to, params });
|
|
233
|
+
runs.push({
|
|
234
|
+
...identity,
|
|
235
|
+
outcome: result.outcome,
|
|
236
|
+
...stamp,
|
|
237
|
+
...("reason" in result ? { reason: redactReason(result.reason, params, redactors) } : {}),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
runs.push({ ...identity, outcome: "error", ...stamp, reason: redactReason(err instanceof Error ? err.message : String(err), params, redactors) });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return { from: { journey: opts.from, outcome: "ok", records: records.length }, runs, unmatched, rejected };
|
|
245
|
+
}
|
|
134
246
|
/**
|
|
135
247
|
* §5: run `from` once, join each approved request to the record with the same `commentId` and
|
|
136
248
|
* `account`, and run `to` once per match with §3's params. Unmatched requests are listed and never
|
|
@@ -138,27 +250,46 @@ function sharedRunOptions(opts) {
|
|
|
138
250
|
* (`E_CHAIN_EMPTY`); a malformed request refuses the whole file (`E_CHAIN_REQUEST`).
|
|
139
251
|
*/
|
|
140
252
|
export async function runJourneyChain(opts, deps = {}) {
|
|
141
|
-
const requests = parseChainRequests(opts.requests);
|
|
142
253
|
const runner = deps.runJourney ?? runJourneyProgrammatically;
|
|
143
254
|
const shared = sharedRunOptions(opts);
|
|
144
255
|
const registry = new JourneyRegistry(new FsJourneyStore(opts.dir));
|
|
145
256
|
const toJourney = await registry.get(opts.to);
|
|
146
257
|
if (toJourney === null)
|
|
147
258
|
throw new UnknownJourneyError(`unknown journey '${opts.to}'`);
|
|
259
|
+
const inputs = toJourney.metadata.inputs;
|
|
260
|
+
// §4: the compatibility check always loads the producing Journey, even when drafts are allowed.
|
|
261
|
+
const needsFrom = inputs !== undefined || opts.requirePromoted === true;
|
|
262
|
+
const fromJourney = needsFrom ? await registry.get(opts.from) : null;
|
|
263
|
+
if (needsFrom && fromJourney === null)
|
|
264
|
+
throw new UnknownJourneyError(`unknown journey '${opts.from}'`);
|
|
148
265
|
if (opts.requirePromoted === true) {
|
|
149
|
-
const fromJourney = await registry.get(opts.from);
|
|
150
|
-
if (fromJourney === null)
|
|
151
|
-
throw new UnknownJourneyError(`unknown journey '${opts.from}'`);
|
|
152
266
|
for (const j of [fromJourney, toJourney]) {
|
|
153
267
|
if (!j.metadata.promoted)
|
|
154
268
|
throw new JourneyChainError("E_CHAIN_NOT_PROMOTED", `journey '${j.metadata.id}' is not promoted — a chain runs promoted Journeys (journey chain --allow-draft runs drafts on the CLI)`);
|
|
155
269
|
}
|
|
156
270
|
}
|
|
271
|
+
let handoff;
|
|
272
|
+
if (inputs !== undefined) {
|
|
273
|
+
const issues = checkCompatibility(fromJourney, toJourney);
|
|
274
|
+
if (issues.length > 0)
|
|
275
|
+
throw new JourneyChainError("E_HANDOFF_INCOMPATIBLE", issues.map((issue) => issue.message).join("; "));
|
|
276
|
+
const outputs = fromJourney.metadata.outputs;
|
|
277
|
+
if (outputs === undefined)
|
|
278
|
+
throw new JourneyChainError("E_HANDOFF_INCOMPATIBLE", `the producing Journey '${opts.from}' declares no outputs`);
|
|
279
|
+
handoff = { inputs, outputs };
|
|
280
|
+
}
|
|
281
|
+
// 0.17.0 parses the fixed-key request file before anything runs; the handoff branch validates the
|
|
282
|
+
// JSON Lines objects after the record set is known (§4 step 5).
|
|
283
|
+
const requests = handoff === undefined ? parseChainRequests(opts.requests) : undefined;
|
|
157
284
|
const fromResult = await runner({ ...shared, id: opts.from, params: {} });
|
|
158
285
|
if (fromResult.outcome !== "ok") {
|
|
159
286
|
const reason = "reason" in fromResult ? fromResult.reason : undefined;
|
|
160
287
|
throw new JourneyChainError("E_CHAIN_FROM_FAILED", `discover Journey '${opts.from}' did not run ok (${fromResult.outcome})${reason === undefined ? "" : `: ${reason}`}`);
|
|
161
288
|
}
|
|
289
|
+
if (handoff !== undefined) {
|
|
290
|
+
// §5: `capturedAt` is when the producing run finished, from the injectable clock.
|
|
291
|
+
return runHandoffChain(handoff.inputs, handoff.outputs, fromJourney, fromResult.output, opts.requests, clock.nowIso(), opts, shared, runner);
|
|
292
|
+
}
|
|
162
293
|
const { count, records } = readRecords(fromResult.output);
|
|
163
294
|
// §3: the reply Journey's declared params decide the one conditional mapping (`expected_parentid`).
|
|
164
295
|
const declared = new Set(journeyParamSchema(toJourney).required);
|
|
@@ -169,7 +300,7 @@ export async function runJourneyChain(opts, deps = {}) {
|
|
|
169
300
|
}
|
|
170
301
|
const runs = [];
|
|
171
302
|
const unmatched = [];
|
|
172
|
-
for (const request of requests) {
|
|
303
|
+
for (const request of requests ?? []) {
|
|
173
304
|
const record = byKey.get(recordKey(request.commentId, request.account));
|
|
174
305
|
if (record === undefined) {
|
|
175
306
|
unmatched.push({ commentId: request.commentId, account: request.account });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-chain.js","sourceRoot":"","sources":["../src/journey-chain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"journey-chain.js","sourceRoot":"","sources":["../src/journey-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { FsJourneyStore, JourneyRegistry, journeyStepCount, listJourneyAnchors } from "@jevitate/journey";
|
|
2
2
|
import { ok, fail } from "../envelope.js";
|
|
3
3
|
import { runAnchorSuggest } from "../journey-anchor-cli.js";
|
|
4
|
-
import {
|
|
4
|
+
import { emitJson } from "../cli-shared.js";
|
|
5
|
+
import { withProjectFlags } from "../project-layout.js";
|
|
6
|
+
import { DEPRECATED_DIR_HELP, journeyLayout } from "./shared.js";
|
|
5
7
|
/** Registers `jevitate journey anchors`. */
|
|
6
8
|
export function registerJourneyAnchors(journey, program, deps) {
|
|
7
9
|
// #293 — the named states worth exploring from (`explore --from-journey <id> --at-step <name>`).
|
|
8
|
-
journey
|
|
10
|
+
withProjectFlags(journey
|
|
9
11
|
.command("anchors <id>")
|
|
10
12
|
.description("list a Journey's anchors (#293): named steps to branch a mission off with `explore --from-journey <id> --at-step <name>`, and their suggested probes")
|
|
11
13
|
.option("--suggest", "propose anchors where the recorded flow changes state (a new page, a form that became valid, a completed write), each with the `journey anchor add` command to accept it; advisory, writes nothing (#487)")
|
|
12
|
-
.option("--dir <path>",
|
|
14
|
+
.option("--dir <path>", DEPRECATED_DIR_HELP))
|
|
13
15
|
.option("--json", "emit a JSON envelope")
|
|
14
16
|
.action(async function (id) {
|
|
15
|
-
const { dir, json, suggest } = this.opts();
|
|
17
|
+
const { dir, project, journeysDir, json, suggest } = this.opts();
|
|
18
|
+
const layout = journeyLayout(program, deps, { dir, project, journeysDir });
|
|
19
|
+
if (layout === null)
|
|
20
|
+
return;
|
|
16
21
|
if (suggest) {
|
|
17
|
-
await runAnchorSuggest(program, deps, id, { dir, json });
|
|
22
|
+
await runAnchorSuggest(program, deps, id, { dir: layout.journeysDir, json });
|
|
18
23
|
return;
|
|
19
24
|
}
|
|
20
25
|
try {
|
|
21
|
-
const found = await new JourneyRegistry(new FsJourneyStore(
|
|
26
|
+
const found = await new JourneyRegistry(new FsJourneyStore(layout.journeysDir)).get(id);
|
|
22
27
|
if (found === null) {
|
|
23
28
|
emitJson(program, fail("E_UNKNOWN_JOURNEY", `unknown journey '${id}'`));
|
|
24
29
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../src/journey-cli/anchors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAgB,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../src/journey-cli/anchors.ts"],"names":[],"mappings":"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"}
|