@jevitate/cli 0.11.0 → 0.13.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/approval-provenance.d.ts +6 -0
- package/dist/approval-provenance.js +9 -1
- package/dist/approval-provenance.js.map +1 -1
- package/dist/author-journey-cli.js +2 -1
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +25396 -23850
- package/dist/build-info.generated.js +2 -2
- package/dist/demo-aspect-cli.js +2 -1
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/explore-cli/adversarial-strategy.d.ts +3 -0
- package/dist/explore-cli/adversarial-strategy.js +99 -0
- package/dist/explore-cli/adversarial-strategy.js.map +1 -0
- package/dist/explore-cli/coverage-strategy.d.ts +3 -0
- package/dist/explore-cli/coverage-strategy.js +95 -0
- package/dist/explore-cli/coverage-strategy.js.map +1 -0
- package/dist/explore-cli/feature-strategy.d.ts +3 -0
- package/dist/explore-cli/feature-strategy.js +59 -0
- package/dist/explore-cli/feature-strategy.js.map +1 -0
- package/dist/explore-cli/goal-strategy.d.ts +3 -0
- package/dist/explore-cli/goal-strategy.js +184 -0
- package/dist/explore-cli/goal-strategy.js.map +1 -0
- package/dist/explore-cli/options.d.ts +3 -0
- package/dist/explore-cli/options.js +155 -0
- package/dist/explore-cli/options.js.map +1 -0
- package/dist/explore-cli/run.d.ts +7 -0
- package/dist/explore-cli/run.js +682 -0
- package/dist/explore-cli/run.js.map +1 -0
- package/dist/explore-cli/shared.d.ts +158 -0
- package/dist/explore-cli/shared.js +20 -0
- package/dist/explore-cli/shared.js.map +1 -0
- package/dist/explore-cli/usability-strategy.d.ts +3 -0
- package/dist/explore-cli/usability-strategy.js +136 -0
- package/dist/explore-cli/usability-strategy.js.map +1 -0
- package/dist/explore-cli.d.ts +2 -2
- package/dist/explore-cli.js +2 -1346
- package/dist/explore-cli.js.map +1 -1
- package/dist/explore-goal.js +4 -3
- package/dist/explore-goal.js.map +1 -1
- package/dist/journey-anchor-api.d.ts +10 -9
- package/dist/journey-anchor-api.js +12 -22
- package/dist/journey-anchor-api.js.map +1 -1
- package/dist/journey-anchor-cli.d.ts +1 -1
- package/dist/journey-anchor-cli.js +10 -6
- package/dist/journey-anchor-cli.js.map +1 -1
- package/dist/journey-api.d.ts +12 -3
- package/dist/journey-api.js +34 -12
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli/anchors.d.ts +4 -0
- package/dist/journey-cli/anchors.js +48 -0
- package/dist/journey-cli/anchors.js.map +1 -0
- package/dist/journey-cli/find.d.ts +4 -0
- package/dist/journey-cli/find.js +44 -0
- package/dist/journey-cli/find.js.map +1 -0
- package/dist/journey-cli/lint.d.ts +4 -0
- package/dist/journey-cli/lint.js +76 -0
- package/dist/journey-cli/lint.js.map +1 -0
- package/dist/journey-cli/list.d.ts +4 -0
- package/dist/journey-cli/list.js +48 -0
- package/dist/journey-cli/list.js.map +1 -0
- package/dist/journey-cli/migrate.d.ts +4 -0
- package/dist/journey-cli/migrate.js +101 -0
- package/dist/journey-cli/migrate.js.map +1 -0
- package/dist/journey-cli/promote.d.ts +4 -0
- package/dist/journey-cli/promote.js +181 -0
- package/dist/journey-cli/promote.js.map +1 -0
- package/dist/journey-cli/publish.d.ts +4 -0
- package/dist/journey-cli/publish.js +70 -0
- package/dist/journey-cli/publish.js.map +1 -0
- package/dist/journey-cli/review.d.ts +4 -0
- package/dist/journey-cli/review.js +103 -0
- package/dist/journey-cli/review.js.map +1 -0
- package/dist/journey-cli/run.d.ts +4 -0
- package/dist/journey-cli/run.js +244 -0
- package/dist/journey-cli/run.js.map +1 -0
- package/dist/journey-cli/shared.d.ts +9 -0
- package/dist/journey-cli/shared.js +12 -0
- package/dist/journey-cli/shared.js.map +1 -0
- package/dist/journey-cli/verify.d.ts +4 -0
- package/dist/journey-cli/verify.js +125 -0
- package/dist/journey-cli/verify.js.map +1 -0
- package/dist/journey-cli.d.ts +2 -2
- package/dist/journey-cli.js +21 -878
- package/dist/journey-cli.js.map +1 -1
- package/dist/journey-labels-migrate-api.d.ts +100 -0
- package/dist/journey-labels-migrate-api.js +194 -0
- package/dist/journey-labels-migrate-api.js.map +1 -0
- package/dist/journey-lint-sarif.js +4 -0
- package/dist/journey-lint-sarif.js.map +1 -1
- package/dist/journey-review/render.d.ts +43 -0
- package/dist/journey-review/render.js +461 -0
- package/dist/journey-review/render.js.map +1 -0
- package/dist/journey-review.d.ts +9 -2
- package/dist/journey-review.js +183 -144
- package/dist/journey-review.js.map +1 -1
- package/dist/log-sources.js +17 -1
- package/dist/log-sources.js.map +1 -1
- package/dist/mcp-api.js +16 -821
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-tools.js +14 -5
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mcp-tools/cli.d.ts +3 -0
- package/dist/mcp-tools/cli.js +20 -0
- package/dist/mcp-tools/cli.js.map +1 -0
- package/dist/mcp-tools/explore.d.ts +3 -0
- package/dist/mcp-tools/explore.js +141 -0
- package/dist/mcp-tools/explore.js.map +1 -0
- package/dist/mcp-tools/findings.d.ts +3 -0
- package/dist/mcp-tools/findings.js +277 -0
- package/dist/mcp-tools/findings.js.map +1 -0
- package/dist/mcp-tools/inbox.d.ts +3 -0
- package/dist/mcp-tools/inbox.js +106 -0
- package/dist/mcp-tools/inbox.js.map +1 -0
- package/dist/mcp-tools/journey.d.ts +3 -0
- package/dist/mcp-tools/journey.js +260 -0
- package/dist/mcp-tools/journey.js.map +1 -0
- package/dist/mcp-tools/shared.d.ts +39 -0
- package/dist/mcp-tools/shared.js +69 -0
- package/dist/mcp-tools/shared.js.map +1 -0
- package/dist/regression-api.js +6 -4
- package/dist/regression-api.js.map +1 -1
- package/dist/review-render-options.d.ts +17 -0
- package/dist/review-render-options.js +17 -0
- package/dist/review-render-options.js.map +1 -0
- package/dist/sweep-api.d.ts +9 -0
- package/dist/sweep-api.js +70 -2
- package/dist/sweep-api.js.map +1 -1
- package/dist/sweep-cli.d.ts +2 -0
- package/dist/sweep-cli.js +22 -5
- package/dist/sweep-cli.js.map +1 -1
- package/dist/ux-usability/analysis.d.ts +14 -0
- package/dist/ux-usability/analysis.js +106 -0
- package/dist/ux-usability/analysis.js.map +1 -0
- package/dist/ux-usability/done-adjudication.d.ts +15 -0
- package/dist/ux-usability/done-adjudication.js +56 -0
- package/dist/ux-usability/done-adjudication.js.map +1 -0
- package/dist/ux-usability/hang.d.ts +5 -0
- package/dist/ux-usability/hang.js +41 -0
- package/dist/ux-usability/hang.js.map +1 -0
- package/dist/ux-usability/loop.d.ts +15 -0
- package/dist/ux-usability/loop.js +104 -0
- package/dist/ux-usability/loop.js.map +1 -0
- package/dist/ux-usability/observe.d.ts +7 -0
- package/dist/ux-usability/observe.js +89 -0
- package/dist/ux-usability/observe.js.map +1 -0
- package/dist/ux-usability/result.d.ts +11 -0
- package/dist/ux-usability/result.js +113 -0
- package/dist/ux-usability/result.js.map +1 -0
- package/dist/ux-usability/setup.d.ts +75 -0
- package/dist/ux-usability/setup.js +203 -0
- package/dist/ux-usability/setup.js.map +1 -0
- package/dist/ux-usability/teardown.d.ts +3 -0
- package/dist/ux-usability/teardown.js +13 -0
- package/dist/ux-usability/teardown.js.map +1 -0
- package/dist/ux-usability.d.ts +14 -17
- package/dist/ux-usability.js +15 -586
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-api.js +2 -0
- package/dist/verify-fix-api.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/journey-cli/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, jevProviderArg, resolveJourneysDir, emitJson, GatewaySelectionError } from "../cli-shared.js";
|
|
2
|
+
import { REAL_JEV_FLAG_HELP, jevSetupFor } from "../catalog-cli.js";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
5
|
+
import { ok, fail } from "../envelope.js";
|
|
6
|
+
import { promoteJourney, WeakJourneyError, UnknownJourneyError, StaleReviewError, JourneyProposalArgsError } from "../journey-api.js";
|
|
7
|
+
import { reviewRenderOptions } from "../review-render-options.js";
|
|
8
|
+
import { ReviewSheetError, renderReviewText, reviewSheetHash } from "../journey-review.js";
|
|
9
|
+
import { reviewJourneyById } from "../journey-review-api.js";
|
|
10
|
+
import { ReviewSidecarError } from "../journey-review-store.js";
|
|
11
|
+
import { JourneyProposalInvalidError, JourneyProposalNotFoundError, JourneyProposalProofError, JourneyProposalStaleError, isProposalId } from "../journey-proposal-store.js";
|
|
12
|
+
import { rejectionProvenance, approvalRefusal, checkNonInteractiveReason, describeProvenance, makeApprovalConfirm } from "../approval-provenance.js";
|
|
13
|
+
import { UnvettedLinksError, resolveCatalogDir } from "../catalog-api.js";
|
|
14
|
+
import { CatalogInputError } from "../catalog.js";
|
|
15
|
+
import { ApprovalFindingsError } from "../pre-approval.js";
|
|
16
|
+
import { TargetConfigError } from "../target-config.js";
|
|
17
|
+
import { FULL_FLAG_HELP, lintFindingLine, targetsOpts } from "./shared.js";
|
|
18
|
+
/** Registers `jevitate journey promote`. */
|
|
19
|
+
export function registerJourneyPromote(journey, program, deps) {
|
|
20
|
+
// #124 — promote a local Journey so it becomes discoverable/runnable (journey
|
|
21
|
+
// find / MCP find_capabilities / run_journey), mirroring `mission target
|
|
22
|
+
// promote`'s human-approval-gate semantics: promoting is a deliberate,
|
|
23
|
+
// explicit act, never automatic (an authored Journey's `metadata.promoted`
|
|
24
|
+
// always starts `false` — see `explore-author-journey`/`jevitate record`).
|
|
25
|
+
journey
|
|
26
|
+
.command("promote <id>")
|
|
27
|
+
.description("promote a local Journey (human-approval gate) so it becomes discoverable/runnable; shows its review sheet first and records the approval")
|
|
28
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
29
|
+
.option("--accept-weak <reason>", "#401: promote a Journey whose assertions cannot prove its outcome, recording the reason")
|
|
30
|
+
.option("--full", FULL_FLAG_HELP)
|
|
31
|
+
.option("--reviewed-hash <hash>", "#432: the content hash of the review sheet you read; refused (E_JOURNEY_REVIEW_STALE) if the Journey changed since")
|
|
32
|
+
.option("--review-sheet <file>", "#432: the review sheet file you read (journey review --out); its content hash binds the approval like --reviewed-hash")
|
|
33
|
+
.option("--accept-unvetted <reason>", "#433: promote although its linked job/persona is not approved (unknown, draft or stale), recording the reason in approval.waivers")
|
|
34
|
+
.option("--accept-findings <reason>", "#433: promote although pre-approval findings need an acknowledgment, recording the reason in approval.acceptedFindings")
|
|
35
|
+
.option("--real", `${REAL_JEV_FLAG_HELP}; a conflicting/duplicate pair classification at or above the documented threshold then needs --accept-findings`)
|
|
36
|
+
.option("--jev-provider <provider>", JEV_PROVIDER_FLAG_HELP, jevProviderArg)
|
|
37
|
+
.option("--non-interactive-approval <reason>", "#437: approve without a terminal confirmation (a scripted setup), recorded as channel non-interactive (ci under a CI marker) with the reason — never as a person's; check --require-approvals fails it. A coding agent never uses this: it hands the approval to a person")
|
|
38
|
+
.option("--proposal <pid>", "#453: accept this pending self-heal proposal (journey review shows it): the Journey is replaced by the proposed revision through every gate, bound to its proposedHash")
|
|
39
|
+
.option("--reject-proposal <pid>", "#453: reject this pending self-heal proposal (needs --reason); the stored Journey is untouched")
|
|
40
|
+
.option("--reason <text>", "#453: why the proposal is rejected (recorded with the rejection)")
|
|
41
|
+
.option("--json", "emit a JSON envelope")
|
|
42
|
+
.action(async function (id) {
|
|
43
|
+
const { dir, json, full, acceptWeak, reviewedHash: hashFlag, reviewSheet, acceptUnvetted, acceptFindings, real, jevProvider, nonInteractiveApproval, proposal, rejectProposal, reason } = this.opts();
|
|
44
|
+
try {
|
|
45
|
+
checkNonInteractiveReason(nonInteractiveApproval);
|
|
46
|
+
const journeysDir = resolveJourneysDir(deps, dir);
|
|
47
|
+
// #453: the proposal flags, validated before anything is read (an id is 12 hex characters — never a path).
|
|
48
|
+
for (const [flag, value] of [["--proposal", proposal], ["--reject-proposal", rejectProposal]]) {
|
|
49
|
+
if (value !== undefined && !isProposalId(value)) {
|
|
50
|
+
emitJson(program, fail("E_JOURNEY_PROPOSAL_ARGS", `${flag} needs a proposal id (12 hex characters, shown by \`journey review\`), not '${value}'`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (proposal !== undefined && rejectProposal !== undefined) {
|
|
55
|
+
emitJson(program, fail("E_JOURNEY_PROPOSAL_ARGS", "--proposal and --reject-proposal are exclusive: accept or reject, not both"));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (rejectProposal !== undefined && (reason ?? "").trim() === "") {
|
|
59
|
+
emitJson(program, fail("E_JOURNEY_PROPOSAL_ARGS", "--reject-proposal needs --reason <text> (it is recorded with the rejection)"));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (reason !== undefined && rejectProposal === undefined) {
|
|
63
|
+
emitJson(program, fail("E_JOURNEY_PROPOSAL_ARGS", "--reason belongs to --reject-proposal"));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (proposal !== undefined && reviewSheet !== undefined) {
|
|
67
|
+
emitJson(program, fail("E_JOURNEY_PROPOSAL_ARGS", "--review-sheet binds the stored Journey's hash; with --proposal bind with --reviewed-hash <proposedHash>"));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (rejectProposal !== undefined) {
|
|
71
|
+
const rejected = await promoteJourney(journeysDir, id, {
|
|
72
|
+
rejectProposal,
|
|
73
|
+
reason: reason ?? "",
|
|
74
|
+
rejectProvenance: rejectionProvenance(deps.approval, reason ?? ""),
|
|
75
|
+
});
|
|
76
|
+
if (json)
|
|
77
|
+
emitJson(program, ok({ ...rejected.metadata, rejectedProposal: rejectProposal }));
|
|
78
|
+
else {
|
|
79
|
+
program.configureOutput().writeOut?.(`rejected proposal ${rejectProposal} for journey '${rejected.metadata.id}'; the stored Journey is unchanged\n`);
|
|
80
|
+
process.exitCode = 0;
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// #432: what the reviewer read — a hash, a sheet file, or (human mode) the sheet shown below.
|
|
85
|
+
let reviewedHash = hashFlag?.trim().toLowerCase();
|
|
86
|
+
if (reviewedHash !== undefined && !/^[0-9a-f]{64}$/.test(reviewedHash)) {
|
|
87
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--reviewed-hash needs the 64-hex content hash a review sheet shows"));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (reviewSheet !== undefined) {
|
|
91
|
+
let text;
|
|
92
|
+
try {
|
|
93
|
+
text = await readFile(reviewSheet, "utf8");
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", `cannot read --review-sheet ${reviewSheet}: ${e instanceof Error ? e.message : String(e)}`));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const fromSheet = reviewSheetHash(text);
|
|
100
|
+
if (reviewedHash !== undefined && reviewedHash !== fromSheet) {
|
|
101
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--reviewed-hash and --review-sheet name different content hashes"));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
reviewedHash = fromSheet;
|
|
105
|
+
}
|
|
106
|
+
// #434/#435: the readiness checks and the catalog analysis run before every approval; Jev only with --real.
|
|
107
|
+
const jev = await jevSetupFor(deps, resolveCatalogDir(deps.catalogDir), { real, jevProvider });
|
|
108
|
+
let attention;
|
|
109
|
+
if (!json) {
|
|
110
|
+
// Human mode: the sheet is shown before promoting, and the approval binds to what was shown.
|
|
111
|
+
const { review } = await reviewJourneyById(journeysDir, id, { ...targetsOpts(deps), catalogDir: resolveCatalogDir(deps.catalogDir), readiness: true, jev, action: "journey promote" });
|
|
112
|
+
program.configureOutput().writeOut?.(`${renderReviewText(review, reviewRenderOptions({ full: full === true }))}\n`);
|
|
113
|
+
attention = review.attention;
|
|
114
|
+
reviewedHash ??= proposal === undefined ? review.contentHash : review.proposal?.proposedHash;
|
|
115
|
+
}
|
|
116
|
+
const journeyResult = await promoteJourney(journeysDir, id, {
|
|
117
|
+
jev,
|
|
118
|
+
...(proposal === undefined ? {} : { proposal }),
|
|
119
|
+
...(acceptWeak === undefined ? {} : { acceptWeak }),
|
|
120
|
+
...(reviewedHash === undefined ? {} : { reviewedHash }),
|
|
121
|
+
...(acceptUnvetted === undefined ? {} : { acceptUnvetted }),
|
|
122
|
+
...(acceptFindings === undefined ? {} : { acceptFindings }),
|
|
123
|
+
catalogDir: resolveCatalogDir(deps.catalogDir),
|
|
124
|
+
// #437: a typed confirmation on a TTY (or the escape hatch, or the MCP channel), recorded as provenance.
|
|
125
|
+
confirm: ((confirm) => (request) => confirm(attention === undefined ? request : { ...request, attention }))(makeApprovalConfirm(deps.approval, nonInteractiveApproval === undefined ? {} : { nonInteractiveReason: nonInteractiveApproval })),
|
|
126
|
+
});
|
|
127
|
+
const envelope = ok(journeyResult.metadata);
|
|
128
|
+
if (json) {
|
|
129
|
+
emitJson(program, envelope);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
program.configureOutput().writeOut?.(`promoted journey '${journeyResult.metadata.id}' (approved content hash ${journeyResult.metadata.approval?.contentHash ?? ""}; ${describeProvenance(journeyResult.metadata.approval?.provenance)})\n`);
|
|
133
|
+
process.exitCode = 0;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
const refusal = approvalRefusal(err);
|
|
138
|
+
if (refusal !== null) {
|
|
139
|
+
emitJson(program, fail(refusal.code, refusal.message));
|
|
140
|
+
}
|
|
141
|
+
else if (err instanceof UnknownJourneyError) {
|
|
142
|
+
emitJson(program, fail("E_UNKNOWN_JOURNEY", String(err.message)));
|
|
143
|
+
}
|
|
144
|
+
else if (err instanceof JourneyProposalArgsError ||
|
|
145
|
+
err instanceof JourneyProposalNotFoundError ||
|
|
146
|
+
err instanceof JourneyProposalStaleError ||
|
|
147
|
+
err instanceof JourneyProposalProofError ||
|
|
148
|
+
err instanceof JourneyProposalInvalidError) {
|
|
149
|
+
emitJson(program, fail(err.code, err.message));
|
|
150
|
+
}
|
|
151
|
+
else if (err instanceof StaleReviewError || err instanceof ReviewSheetError || err instanceof ReviewSidecarError || err instanceof TargetConfigError) {
|
|
152
|
+
emitJson(program, fail(err instanceof TargetConfigError ? "E_TARGET_CONFIG" : err.code, err.message));
|
|
153
|
+
}
|
|
154
|
+
else if (err instanceof WeakJourneyError) {
|
|
155
|
+
// #401: the findings printed before the refusal (human mode); the reason the gate is here.
|
|
156
|
+
if (!json) {
|
|
157
|
+
const out = program.configureOutput().writeOut;
|
|
158
|
+
for (const finding of err.findings)
|
|
159
|
+
out?.(`${lintFindingLine(finding)}\n`);
|
|
160
|
+
}
|
|
161
|
+
emitJson(program, fail("E_JOURNEY_WEAK", String(err.message)));
|
|
162
|
+
process.exitCode = 1;
|
|
163
|
+
}
|
|
164
|
+
else if (err instanceof UnvettedLinksError || err instanceof ApprovalFindingsError) {
|
|
165
|
+
// #433: a gate on the catalog — exit 1 (a gating finding), like E_JOURNEY_WEAK.
|
|
166
|
+
emitJson(program, fail(err.code, err.message));
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
}
|
|
169
|
+
else if (err instanceof CatalogInputError) {
|
|
170
|
+
emitJson(program, fail(err.code, err.message));
|
|
171
|
+
}
|
|
172
|
+
else if (err instanceof GatewaySelectionError || err instanceof MissingCredentialError) {
|
|
173
|
+
emitJson(program, fail("E_AI_SETUP_REQUIRED", err.message));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
emitJson(program, fail("E_JOURNEY_PROMOTE", String(err instanceof Error ? err.message : err)));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=promote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/journey-cli/promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ok, fail } from "../envelope.js";
|
|
2
|
+
import { UnknownJourneyError } from "../journey-api.js";
|
|
3
|
+
import { publishJourneyToSource, realGhPort, NotPromotedError, NoDeclaredOriginsError } from "../source-api.js";
|
|
4
|
+
import { UnknownSourceError, EmbeddedSecretError, UndeclaredOriginError } from "@jevitate/sources";
|
|
5
|
+
import { resolveJourneysDir, resolveSourceApiDeps, emitJson } from "../cli-shared.js";
|
|
6
|
+
/** Registers `jevitate journey publish`. */
|
|
7
|
+
export function registerJourneyPublish(journey, program, deps) {
|
|
8
|
+
// #19 — publish a promoted local Journey to a registered distributed source.
|
|
9
|
+
// Preserves every publish-side guard in `@jevitate/sources` (promoted-only,
|
|
10
|
+
// secret-references-only, declared-origin coverage); writes onto a NEW
|
|
11
|
+
// `publish/<id>` branch and degrades gracefully when `gh` is absent.
|
|
12
|
+
journey
|
|
13
|
+
.command("publish <id>")
|
|
14
|
+
.requiredOption("--to <source>", "registered source name to publish into")
|
|
15
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
16
|
+
.option("--declare-origin <origin>", "origin this Journey is authorized for (repeatable; default: derived from navigate steps)", (v, prev) => [...prev, v], [])
|
|
17
|
+
.option("--as <id>", "publish under a different id than the local one")
|
|
18
|
+
.option("--json", "emit a JSON envelope")
|
|
19
|
+
.action(async function (id) {
|
|
20
|
+
const { to, dir, declareOrigin, as: asId, json } = this.opts();
|
|
21
|
+
try {
|
|
22
|
+
const apiDeps = resolveSourceApiDeps(deps);
|
|
23
|
+
const gh = deps.sources?.gh ?? realGhPort;
|
|
24
|
+
const result = await publishJourneyToSource({ ...apiDeps, gh }, {
|
|
25
|
+
journeysDir: resolveJourneysDir(deps, dir),
|
|
26
|
+
id,
|
|
27
|
+
toSource: to,
|
|
28
|
+
declareOrigins: declareOrigin,
|
|
29
|
+
asId,
|
|
30
|
+
});
|
|
31
|
+
const envelope = ok(result);
|
|
32
|
+
if (json) {
|
|
33
|
+
emitJson(program, envelope);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const out = program.configureOutput().writeOut;
|
|
37
|
+
out?.(`published '${id}' to '${to}' on branch ${result.branch}\n`);
|
|
38
|
+
if (result.prUrl)
|
|
39
|
+
out?.(`PR: ${result.prUrl}\n`);
|
|
40
|
+
else if (result.instructions)
|
|
41
|
+
out?.(`${result.instructions}\n`);
|
|
42
|
+
process.exitCode = 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (err instanceof UnknownSourceError) {
|
|
47
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_UNKNOWN_SOURCE", err.message));
|
|
48
|
+
}
|
|
49
|
+
else if (err instanceof UnknownJourneyError) {
|
|
50
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_UNKNOWN_JOURNEY", err.message));
|
|
51
|
+
}
|
|
52
|
+
else if (err instanceof NotPromotedError) {
|
|
53
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_NOT_PROMOTED", err.message));
|
|
54
|
+
}
|
|
55
|
+
else if (err instanceof NoDeclaredOriginsError) {
|
|
56
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_NO_ORIGINS", err.message));
|
|
57
|
+
}
|
|
58
|
+
else if (err instanceof EmbeddedSecretError) {
|
|
59
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_SECRET", err.message));
|
|
60
|
+
}
|
|
61
|
+
else if (err instanceof UndeclaredOriginError) {
|
|
62
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH_ORIGIN", err.message));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
emitJson(program, fail("E_JOURNEY_PUBLISH", String(err instanceof Error ? err.message : err)));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/journey-cli/publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAgB,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpG,4CAA4C;AAC5C,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,OAAgB,EAAE,IAAa;IACtF,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,qEAAqE;IACrE,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,cAAc,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACzE,MAAM,CAAC,cAAc,EAAE,kGAAkG,CAAC;SAC1H,MAAM,CAAC,2BAA2B,EAAE,0FAA0F,EAAE,CAAC,CAAS,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,EAAc,CAAC;SAC5L,MAAM,CAAC,WAAW,EAAE,iDAAiD,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK,WAA0B,EAAU;QAC/C,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAMxD,CAAC;QACL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,UAAU,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAClB;gBACE,WAAW,EAAE,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC1C,EAAE;gBACF,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,aAAa;gBAC7B,IAAI;aACL,CACF,CAAC;YACF,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;gBAC/C,GAAG,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,eAAe,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,KAAK;oBAAE,GAAG,EAAE,CAAC,OAAO,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;qBAC5C,IAAI,MAAM,CAAC,YAAY;oBAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;gBAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBAC9C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,CAAC;iBAAM,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBAC3C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,gCAAgC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;gBACjD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBAC9C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBAChD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { JEV_PROVIDER_FLAG_HELP, emitUsageLine, jevProviderArg, resolveJourneysDir, emitJson, GatewaySelectionError } from "../cli-shared.js";
|
|
2
|
+
import { READINESS_FLAG_HELP, REAL_JEV_FLAG_HELP, jevSetupFor } from "../catalog-cli.js";
|
|
3
|
+
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { MissingCredentialError } from "@jevitate/ai-core";
|
|
5
|
+
import { ok, fail } from "../envelope.js";
|
|
6
|
+
import { UnknownJourneyError } from "../journey-api.js";
|
|
7
|
+
import { reviewRenderOptions } from "../review-render-options.js";
|
|
8
|
+
import { renderReviewMarkdown, renderReviewText } from "../journey-review.js";
|
|
9
|
+
import { reviewJourneyById } from "../journey-review-api.js";
|
|
10
|
+
import { listStaleJourneys, renderStaleJourneys } from "../journey-stale-api.js";
|
|
11
|
+
import { ReviewSidecarError } from "../journey-review-store.js";
|
|
12
|
+
import { resolveCatalogDir } from "../catalog-api.js";
|
|
13
|
+
import { CatalogInputError } from "../catalog.js";
|
|
14
|
+
import { TargetConfigError } from "../target-config.js";
|
|
15
|
+
import { FULL_FLAG_HELP, targetsOpts } from "./shared.js";
|
|
16
|
+
/** Registers `jevitate journey review`. */
|
|
17
|
+
export function registerJourneyReview(journey, program, deps) {
|
|
18
|
+
// #432 — the review sheet a reviewer reads before `journey promote`: what the Journey does, what it
|
|
19
|
+
// changes, what it proves, what changed since its last approval, and the content hash to bind to.
|
|
20
|
+
journey
|
|
21
|
+
.command("review [id]")
|
|
22
|
+
.description("a human-readable review sheet for promotion sign-off: summary, steps, side effects, inputs (names only), proof, change since last approval, content hash. #467: --stale (no id) lists every promoted Journey whose approval is stale, labelling step-id-only changes")
|
|
23
|
+
.option("--dir <path>", "journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
|
|
24
|
+
.option("--markdown", "render the sheet as Markdown")
|
|
25
|
+
.option("--full", FULL_FLAG_HELP)
|
|
26
|
+
.option("--out <file>", "write the sheet (JSON with --json, Markdown with --markdown, else text) to this file")
|
|
27
|
+
.option("--readiness", READINESS_FLAG_HELP)
|
|
28
|
+
.option("--real", REAL_JEV_FLAG_HELP)
|
|
29
|
+
.option("--jev-provider <provider>", JEV_PROVIDER_FLAG_HELP, jevProviderArg)
|
|
30
|
+
.option("--stale", "#467: instead of one sheet, list every promoted Journey whose approval is stale (needs re-approval), labelling the ones whose only change is minted step ids")
|
|
31
|
+
.option("--json", "emit a JSON envelope (the schema-checked sheet)")
|
|
32
|
+
.action(async function (id) {
|
|
33
|
+
const { dir, json, markdown, full, out: outFile, readiness, real, jevProvider, stale } = this.opts();
|
|
34
|
+
if (json === true && markdown === true) {
|
|
35
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--json and --markdown are exclusive: pick one rendering"));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (stale === true) {
|
|
39
|
+
// #467: the stale list — read-only; one sheet's flags do not apply to it.
|
|
40
|
+
if (id !== undefined || markdown === true || full === true || outFile !== undefined || readiness === true || real === true || jevProvider !== undefined) {
|
|
41
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "--stale lists every stale Journey: it takes no <id> and none of --markdown/--full/--out/--readiness/--real/--jev-provider"));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const result = await listStaleJourneys({ journeysDir: resolveJourneysDir(deps, dir), catalogDir: resolveCatalogDir(deps.catalogDir) });
|
|
46
|
+
if (json)
|
|
47
|
+
emitJson(program, ok(result));
|
|
48
|
+
else
|
|
49
|
+
program.configureOutput().writeOut?.(renderStaleJourneys(result));
|
|
50
|
+
process.exitCode = 0;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
emitJson(program, fail("E_JOURNEY_REVIEW", String(err instanceof Error ? err.message : err)));
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (id === undefined) {
|
|
58
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", "journey review needs a Journey <id> (or --stale for the list of Journeys needing re-approval)"));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const jev = await jevSetupFor(deps, resolveCatalogDir(deps.catalogDir), { real, jevProvider });
|
|
63
|
+
const { review } = await reviewJourneyById(resolveJourneysDir(deps, dir), id, { ...targetsOpts(deps), catalogDir: resolveCatalogDir(deps.catalogDir), readiness: readiness === true, jev });
|
|
64
|
+
const renderOpts = reviewRenderOptions({ full: full === true, toFile: outFile !== undefined });
|
|
65
|
+
const rendered = json ? `${JSON.stringify(review, null, 2)}\n` : markdown ? renderReviewMarkdown(review, renderOpts) : renderReviewText(review, renderOpts);
|
|
66
|
+
if (outFile !== undefined)
|
|
67
|
+
await writeFile(outFile, rendered, { mode: 0o600 });
|
|
68
|
+
if (json) {
|
|
69
|
+
emitJson(program, ok(review));
|
|
70
|
+
}
|
|
71
|
+
else if (outFile !== undefined) {
|
|
72
|
+
program.configureOutput().writeOut?.(`review sheet for journey '${review.id}' written to ${outFile} (content hash ${review.contentHash})\n`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
program.configureOutput().writeOut?.(rendered);
|
|
76
|
+
}
|
|
77
|
+
emitUsageLine(program, review.jev);
|
|
78
|
+
// #434: a review never fails on its findings (readiness and Jev answers are advice).
|
|
79
|
+
process.exitCode = 0;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err instanceof UnknownJourneyError) {
|
|
83
|
+
emitJson(program, fail("E_UNKNOWN_JOURNEY", String(err.message)));
|
|
84
|
+
}
|
|
85
|
+
else if (err instanceof ReviewSidecarError || err instanceof CatalogInputError) {
|
|
86
|
+
emitJson(program, fail(err.code, err.message));
|
|
87
|
+
}
|
|
88
|
+
else if (err instanceof TargetConfigError) {
|
|
89
|
+
emitJson(program, fail("E_TARGET_CONFIG", err.message));
|
|
90
|
+
}
|
|
91
|
+
else if (err instanceof GatewaySelectionError || err instanceof MissingCredentialError) {
|
|
92
|
+
emitJson(program, fail("E_AI_SETUP_REQUIRED", err.message));
|
|
93
|
+
}
|
|
94
|
+
else if (err instanceof Error && err.message.startsWith("Invalid journey id")) {
|
|
95
|
+
emitJson(program, fail("E_JOURNEY_REVIEW_ARGS", err.message));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
emitJson(program, fail("E_JOURNEY_REVIEW", String(err instanceof Error ? err.message : err)));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/journey-cli/review.ts"],"names":[],"mappings":"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"}
|