@jevitate/cli 0.28.1 → 0.29.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/README.md +1 -1
- package/dist/approval-provenance.d.ts +9 -1
- package/dist/approval-provenance.js +12 -4
- package/dist/approval-provenance.js.map +1 -1
- package/dist/author-journey-cli.js +1 -1
- package/dist/author-journey-cli.js.map +1 -1
- package/dist/bin.js +12657 -8284
- package/dist/bin.js.map +1 -1
- package/dist/build-info.generated.js +3 -3
- package/dist/catalog-analysis.js +3 -2
- package/dist/catalog-analysis.js.map +1 -1
- package/dist/catalog-bundle.js +2 -2
- package/dist/catalog-bundle.js.map +1 -1
- package/dist/check-plan.js +12 -0
- package/dist/check-plan.js.map +1 -1
- package/dist/demo-aspect-cli.d.ts +10 -0
- package/dist/demo-aspect-cli.js +4 -1
- package/dist/demo-aspect-cli.js.map +1 -1
- package/dist/engine.d.ts +8 -1
- package/dist/engine.js +16 -2
- package/dist/engine.js.map +1 -1
- package/dist/explore-adversarial.js +4 -0
- package/dist/explore-adversarial.js.map +1 -1
- package/dist/explore-cli/feature-strategy.js +1 -0
- package/dist/explore-cli/feature-strategy.js.map +1 -1
- package/dist/explore-cli/run.js +7 -0
- package/dist/explore-cli/run.js.map +1 -1
- package/dist/explore-feature.d.ts +2 -0
- package/dist/explore-feature.js +15 -8
- package/dist/explore-feature.js.map +1 -1
- package/dist/explore-goal.js +12 -0
- package/dist/explore-goal.js.map +1 -1
- package/dist/explore-specs.js +2 -2
- package/dist/explore-specs.js.map +1 -1
- package/dist/heal-probe-guard.d.ts +7 -3
- package/dist/heal-probe-guard.js +8 -2
- package/dist/heal-probe-guard.js.map +1 -1
- package/dist/http-probe.js +2 -2
- package/dist/http-probe.js.map +1 -1
- package/dist/journey-annotate-api.d.ts +5 -0
- package/dist/journey-annotate-api.js +49 -24
- package/dist/journey-annotate-api.js.map +1 -1
- package/dist/journey-annotate-cli.js +4 -1
- package/dist/journey-annotate-cli.js.map +1 -1
- package/dist/journey-api.d.ts +46 -7
- package/dist/journey-api.js +111 -43
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-chain.d.ts +0 -6
- package/dist/journey-chain.js +36 -5
- package/dist/journey-chain.js.map +1 -1
- package/dist/journey-cli/chain.js +6 -0
- package/dist/journey-cli/chain.js.map +1 -1
- package/dist/journey-cli/lint.js +10 -3
- package/dist/journey-cli/lint.js.map +1 -1
- package/dist/journey-cli/run.js +39 -4
- package/dist/journey-cli/run.js.map +1 -1
- package/dist/journey-cli/verify.d.ts +8 -1
- package/dist/journey-cli/verify.js +111 -14
- package/dist/journey-cli/verify.js.map +1 -1
- package/dist/journey-cli-readiness.js +2 -0
- package/dist/journey-cli-readiness.js.map +1 -1
- package/dist/journey-demo-cli.js +2 -0
- package/dist/journey-demo-cli.js.map +1 -1
- package/dist/journey-network-checks.d.ts +4 -0
- package/dist/journey-network-checks.js +6 -2
- package/dist/journey-network-checks.js.map +1 -1
- package/dist/journey-prefix.d.ts +2 -0
- package/dist/journey-prefix.js +20 -1
- package/dist/journey-prefix.js.map +1 -1
- package/dist/journey-proof-context.d.ts +7 -1
- package/dist/journey-proof-context.js +19 -1
- package/dist/journey-proof-context.js.map +1 -1
- package/dist/journey-proof-waiver-cli.js +6 -3
- package/dist/journey-proof-waiver-cli.js.map +1 -1
- package/dist/journey-readiness.js +4 -0
- package/dist/journey-readiness.js.map +1 -1
- package/dist/journey-review-api.js +23 -0
- package/dist/journey-review-api.js.map +1 -1
- package/dist/journey-review.d.ts +30 -10
- package/dist/journey-review.js +33 -39
- package/dist/journey-review.js.map +1 -1
- package/dist/journey-run-record.d.ts +91 -0
- package/dist/journey-run-record.js +239 -0
- package/dist/journey-run-record.js.map +1 -0
- package/dist/journey-stale-api.d.ts +7 -0
- package/dist/journey-stale-api.js +50 -6
- package/dist/journey-stale-api.js.map +1 -1
- package/dist/journey-verify-checkpoint.d.ts +656 -0
- package/dist/journey-verify-checkpoint.js +923 -0
- package/dist/journey-verify-checkpoint.js.map +1 -0
- package/dist/journey-verify.d.ts +84 -3
- package/dist/journey-verify.js +1387 -110
- package/dist/journey-verify.js.map +1 -1
- package/dist/kill-signal.d.ts +24 -2
- package/dist/kill-signal.js +39 -11
- package/dist/kill-signal.js.map +1 -1
- package/dist/load-api.js +31 -2
- package/dist/load-api.js.map +1 -1
- package/dist/load-cli.js +6 -0
- package/dist/load-cli.js.map +1 -1
- package/dist/logs-retention.js +28 -3
- package/dist/logs-retention.js.map +1 -1
- package/dist/mask-values.d.ts +5 -0
- package/dist/mask-values.js +12 -0
- package/dist/mask-values.js.map +1 -0
- package/dist/mcp-api.d.ts +2 -0
- package/dist/mcp-api.js +19 -3
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-cli-runner.d.ts +7 -1
- package/dist/mcp-cli-runner.js +30 -3
- package/dist/mcp-cli-runner.js.map +1 -1
- package/dist/mcp-cli-tools.d.ts +9 -1
- package/dist/mcp-cli-tools.js +29 -4
- package/dist/mcp-cli-tools.js.map +1 -1
- package/dist/mcp-paths.js +11 -0
- package/dist/mcp-paths.js.map +1 -1
- package/dist/mcp-run-guard.d.ts +79 -0
- package/dist/mcp-run-guard.js +371 -0
- package/dist/mcp-run-guard.js.map +1 -0
- package/dist/mcp-tools/cli.js +1 -1
- package/dist/mcp-tools/cli.js.map +1 -1
- package/dist/mcp-tools/findings.js +12 -1
- package/dist/mcp-tools/findings.js.map +1 -1
- package/dist/mcp-tools/journey.js +25 -8
- package/dist/mcp-tools/journey.js.map +1 -1
- package/dist/mission-fixtures.d.ts +3 -1
- package/dist/mission-fixtures.js +23 -6
- package/dist/mission-fixtures.js.map +1 -1
- package/dist/mutation-proof-policy.d.ts +2 -0
- package/dist/mutation-proof-policy.js +2 -2
- package/dist/mutation-proof-policy.js.map +1 -1
- package/dist/program.d.ts +6 -0
- package/dist/program.js +6 -9
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +5 -1
- package/dist/project-dir.js +54 -5
- package/dist/project-dir.js.map +1 -1
- package/dist/readiness.js +3 -1
- package/dist/readiness.js.map +1 -1
- package/dist/regression-api.d.ts +5 -0
- package/dist/regression-api.js +17 -10
- package/dist/regression-api.js.map +1 -1
- package/dist/regression-cli.js +14 -1
- package/dist/regression-cli.js.map +1 -1
- package/dist/report-api.js +6 -0
- package/dist/report-api.js.map +1 -1
- package/dist/resource-preflight.d.ts +2 -1
- package/dist/resource-preflight.js +2 -1
- package/dist/resource-preflight.js.map +1 -1
- package/dist/secret-params.d.ts +82 -0
- package/dist/secret-params.js +234 -0
- package/dist/secret-params.js.map +1 -0
- package/dist/self-heal-adapter.d.ts +2 -2
- package/dist/self-heal-adapter.js +7 -9
- package/dist/self-heal-adapter.js.map +1 -1
- package/dist/source-cli.js +3 -1
- package/dist/source-cli.js.map +1 -1
- package/dist/source-run-api.d.ts +2 -0
- package/dist/source-run-api.js +21 -2
- package/dist/source-run-api.js.map +1 -1
- package/dist/target-config.d.ts +39 -0
- package/dist/target-config.js +76 -1
- package/dist/target-config.js.map +1 -1
- package/dist/terminal-result.d.ts +181 -0
- package/dist/terminal-result.js +609 -0
- package/dist/terminal-result.js.map +1 -0
- package/dist/usability-capture.js +2 -2
- package/dist/usability-capture.js.map +1 -1
- package/dist/ux-usability/hang.js +2 -0
- package/dist/ux-usability/hang.js.map +1 -1
- package/dist/ux-usability.js +6 -0
- package/dist/ux-usability.js.map +1 -1
- package/dist/verify-fix-api.d.ts +43 -0
- package/dist/verify-fix-api.js +138 -10
- package/dist/verify-fix-api.js.map +1 -1
- package/dist/verify-fix-cli.d.ts +6 -1
- package/dist/verify-fix-cli.js +65 -11
- package/dist/verify-fix-cli.js.map +1 -1
- package/package.json +11 -11
- package/skills/jevitate-run-journey/SKILL.md +23 -3
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { readControlIdentity, SafetyPolicy } from "@jevitate/explore";
|
|
2
|
+
import { ReplayRefusal } from "@jevitate/interpreter";
|
|
3
|
+
import { currentMcpInvocation, inMcpInvocation, noteMcpRefusal } from "./approval-provenance.js";
|
|
4
|
+
import { maskValues } from "./mask-values.js";
|
|
5
|
+
import { environmentsFilePath, loadEnvironmentsFile } from "./environments.js";
|
|
6
|
+
import { EXIT_CODES } from "./exit-codes.js";
|
|
7
|
+
import { canonicalOrigin, loadTargetsFile } from "./target-config.js";
|
|
8
|
+
/**
|
|
9
|
+
* #789 — the floor under an MCP-driven replay, until run modes exist (#792). By default such a run:
|
|
10
|
+
* - never clicks what a mission never clicks: `SafetyPolicy`, on the live element's name, as a mission
|
|
11
|
+
* reads it (session-ending, destructive and paid controls, the target's `safety.deny`/`safety.paid`);
|
|
12
|
+
* - never lets a write leave the browser for an origin outside the run's allowlist: the same test
|
|
13
|
+
* `journey run` reports them by (`offAllowlistWriteOrigin`), here enforced at the BrowserContext, so
|
|
14
|
+
* popups and form posts are covered, plus WebSocket frames;
|
|
15
|
+
* - never replays on an environment flagged `production: true`, and never lets a write reach an origin
|
|
16
|
+
* so flagged, whatever the allowlist says, unless that origin's own `mcpRun.allowProduction` lifts it.
|
|
17
|
+
*
|
|
18
|
+
* A refusal ends the run (`RunGuardRefusedError`): it is not a failed step, is never healed or retried,
|
|
19
|
+
* and names the setting that lifts it. The settings are `targets.json[<origin>].mcpRun`, a file only a
|
|
20
|
+
* person writes: no MCP tool has an argument for them, and `confineMcpPath` refuses that file to every
|
|
21
|
+
* path argument. Outside an MCP invocation nothing here applies (`journey run` is unchanged).
|
|
22
|
+
*
|
|
23
|
+
* A refusal never carries page text or a parameter value: it names the rule and the rule's matched
|
|
24
|
+
* words, never the control's name, and masks a parameter value in an origin.
|
|
25
|
+
*
|
|
26
|
+
* Known limit: Playwright's route sees only the first request of a redirect chain. A write an allowed
|
|
27
|
+
* origin redirects (307/308) off the allowlist has left the browser by then; it is still detected, and
|
|
28
|
+
* ends the run the same way.
|
|
29
|
+
*/
|
|
30
|
+
const READ_METHODS = new Set(["GET", "HEAD", "OPTIONS"]);
|
|
31
|
+
/** The origins of an allowlist, in `canonicalOrigin`'s form (entries that do not parse are dropped: they allow nothing). */
|
|
32
|
+
export function allowedOriginSet(allowedOrigins) {
|
|
33
|
+
return new Set(allowedOrigins.flatMap((o) => canonicalOrigin(o) ?? []));
|
|
34
|
+
}
|
|
35
|
+
/** #485: the origin of an http(s) write (any method but GET/HEAD/OPTIONS) outside `allowed`, else undefined. */
|
|
36
|
+
export function offAllowlistWriteOrigin(method, url, allowed) {
|
|
37
|
+
if (READ_METHODS.has(method.toUpperCase()))
|
|
38
|
+
return undefined;
|
|
39
|
+
try {
|
|
40
|
+
const u = new URL(url);
|
|
41
|
+
if (u.protocol !== "http:" && u.protocol !== "https:")
|
|
42
|
+
return undefined;
|
|
43
|
+
return allowed.has(canonicalOrigin(url) ?? u.origin) ? undefined : u.origin;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** #789: the typed end of a refused MCP run. Not a failed step and not a pass; running it again answers the same. */
|
|
50
|
+
export class RunGuardRefusedError extends ReplayRefusal {
|
|
51
|
+
code;
|
|
52
|
+
setting;
|
|
53
|
+
extra;
|
|
54
|
+
name = "RunGuardRefusedError";
|
|
55
|
+
retryable = false;
|
|
56
|
+
constructor(code, message,
|
|
57
|
+
/** The setting that lifts it (or, for a target's own `safety.deny`, the one that imposes it). */
|
|
58
|
+
setting, extra = {}) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.code = code;
|
|
61
|
+
this.setting = setting;
|
|
62
|
+
this.extra = extra;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** #789: the MCP error body of a refusal: `outcome: refused`, never a pass, never to be retried. */
|
|
66
|
+
export function runGuardRefusalBody(err) {
|
|
67
|
+
return { error: "refused", outcome: "refused", code: err.code, setting: err.setting, ...err.extra, message: err.message, retryable: false, exitCode: EXIT_CODES.inconclusive };
|
|
68
|
+
}
|
|
69
|
+
const DO_NOT_RETRY = "This is not a failed run to retry: it is refused the same way until a person changes that setting.";
|
|
70
|
+
/** One origin's entry of the targets file, by `canonicalOrigin` (the keys may be written with a trailing slash). */
|
|
71
|
+
function targetForOrigin(targets, origin) {
|
|
72
|
+
// A key that is no URL is no origin's entry.
|
|
73
|
+
return Object.entries(targets).find(([key]) => canonicalOrigin(key) === origin)?.[1];
|
|
74
|
+
}
|
|
75
|
+
/** Every origin of a declared environment flagged `production: true` (a `baseUrl` naming one counts as `env` naming it). */
|
|
76
|
+
function declaredProductionOrigins(environmentsFile) {
|
|
77
|
+
if (environmentsFile === null)
|
|
78
|
+
return new Set();
|
|
79
|
+
return allowedOriginSet(Object.values(loadEnvironmentsFile(environmentsFile)).flatMap((e) => (e.production === true ? [e.baseUrl, ...Object.values(e.origins ?? {})] : [])));
|
|
80
|
+
}
|
|
81
|
+
const productionRefusal = (origin, what) => {
|
|
82
|
+
const setting = `targets.json["${origin}"].mcpRun.allowProduction`;
|
|
83
|
+
return new RunGuardRefusedError("E_RUN_REFUSED_PRODUCTION", `${what} A person allows it with ${setting}: true. ${DO_NOT_RETRY}`, setting);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* The guard of one MCP-driven replay, decided before any fixture or browser: undefined outside an MCP
|
|
87
|
+
* invocation. Refuses here a production environment and a config it cannot read (fail closed).
|
|
88
|
+
*/
|
|
89
|
+
export function prepareMcpRunGuard(req) {
|
|
90
|
+
if (!inMcpInvocation())
|
|
91
|
+
return undefined;
|
|
92
|
+
const origin = canonicalOrigin(req.site) ?? req.site;
|
|
93
|
+
let target;
|
|
94
|
+
let production;
|
|
95
|
+
let heldBack;
|
|
96
|
+
try {
|
|
97
|
+
const targets = req.targetsFile === undefined ? loadTargetsFile() : loadTargetsFile(req.targetsFile);
|
|
98
|
+
target = targetForOrigin(targets, origin);
|
|
99
|
+
const flagged = declaredProductionOrigins(req.environmentsFile ?? environmentsFilePath());
|
|
100
|
+
production = req.environment?.production === true || flagged.has(origin);
|
|
101
|
+
heldBack = new Set([...flagged].filter((o) => targetForOrigin(targets, o)?.mcpRun?.allowProduction !== true));
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
throw refused(new RunGuardRefusedError("E_RUN_GUARD_CONFIG", `an MCP run could not read what allows it on ${origin}, so it does not run: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`, "targets.json / environments.json"));
|
|
105
|
+
}
|
|
106
|
+
const allowances = target?.mcpRun ?? {};
|
|
107
|
+
if (production && allowances.allowProduction !== true) {
|
|
108
|
+
throw refused(productionRefusal(origin, `${origin} is flagged production: true, and an MCP run does not replay there by default.`));
|
|
109
|
+
}
|
|
110
|
+
if (req.refuseProductionInAllowlist === true) {
|
|
111
|
+
for (const allowed of allowedOriginSet(req.allowedOrigins)) {
|
|
112
|
+
if (heldBack.has(allowed))
|
|
113
|
+
throw refused(productionRefusal(allowed, `${allowed} is in this replay's allowlist and flagged production: true, and an MCP run does not replay with it by default.`));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return new McpRunGuard(origin, req.allowedOrigins, allowances, target, heldBack, currentMcpInvocation());
|
|
117
|
+
}
|
|
118
|
+
function refused(err) {
|
|
119
|
+
noteMcpRefusal(err);
|
|
120
|
+
return err;
|
|
121
|
+
}
|
|
122
|
+
/** The nearest element a click on `locator` activates, when it is not the element itself. */
|
|
123
|
+
const INTERACTIVE_ANCESTOR = 'xpath=ancestor-or-self::*[self::button or self::a or self::summary or self::input or @role="button" or @role="link" or @role="menuitem" or @role="tab"][1]';
|
|
124
|
+
/**
|
|
125
|
+
* What one `keyboard.press` holds down, split as Playwright splits it: a `+` ends a key unless it would
|
|
126
|
+
* be the first character of one. Every key is pressed in turn, so one that activates need not be last
|
|
127
|
+
* (`Enter+a`). A recorded key is free-form text, so this reads what the browser will be told.
|
|
128
|
+
*/
|
|
129
|
+
export function pressedKeys(key) {
|
|
130
|
+
const keys = [];
|
|
131
|
+
let building = "";
|
|
132
|
+
for (const char of key) {
|
|
133
|
+
if (char === "+" && building !== "") {
|
|
134
|
+
keys.push(building);
|
|
135
|
+
building = "";
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
building += char;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return [...keys, building];
|
|
142
|
+
}
|
|
143
|
+
/** Enter as Playwright takes it, by name, on the keypad, or as the characters it aliases to it. Case is ignored: a wrong-cased name it refuses presses nothing. */
|
|
144
|
+
const ENTER_KEYS = new Set(["enter", "numpadenter", "\n", "\r"]);
|
|
145
|
+
const SPACE_KEYS = new Set(["space", " "]);
|
|
146
|
+
const pressesAny = (key, of) => pressedKeys(key).some((k) => of.has(k.toLowerCase()));
|
|
147
|
+
/** A key press in a text field types or submits; the field's name says nothing about what it does. */
|
|
148
|
+
const TEXT_ROLES = new Set(["textbox", "searchbox", "combobox"]);
|
|
149
|
+
/**
|
|
150
|
+
* BROWSER CODE. The button that Enter in this field clicks: its form's default button, the first submit
|
|
151
|
+
* button in tree order, a `form=` associated one included. Null where Enter clicks no such button: not a
|
|
152
|
+
* field that submits (a textarea, a button, which activates itself), no form, or a disabled default
|
|
153
|
+
* button, which HTML says submits nothing. A form with no submit button can still submit, with no
|
|
154
|
+
* control to judge; it is not refused here.
|
|
155
|
+
*/
|
|
156
|
+
function defaultButtonOf(field) {
|
|
157
|
+
const selfActivating = field instanceof HTMLInputElement && ["submit", "image", "button", "reset"].includes(field.type);
|
|
158
|
+
if ((!(field instanceof HTMLInputElement) && !(field instanceof HTMLSelectElement)) || selfActivating || field.form === null)
|
|
159
|
+
return null;
|
|
160
|
+
const { form } = field;
|
|
161
|
+
const button = [...document.querySelectorAll("button, input")].find((e) => (e instanceof HTMLButtonElement && e.form === form && e.type === "submit") || (e instanceof HTMLInputElement && e.form === form && (e.type === "submit" || e.type === "image")));
|
|
162
|
+
return button === undefined || button.matches(":disabled") ? null : button;
|
|
163
|
+
}
|
|
164
|
+
/** Frames within frames, as deep as anyone would nest a control a key reaches. */
|
|
165
|
+
const MAX_FRAME_DEPTH = 8;
|
|
166
|
+
/**
|
|
167
|
+
* The element holding focus, inside any frame: undefined if none does. A key goes there, and `:focus`
|
|
168
|
+
* in the page matches nothing while focus is in a frame. Past the depth, nothing is found, as an unnamed frame would be.
|
|
169
|
+
*/
|
|
170
|
+
async function focusedThroughFrames(focused) {
|
|
171
|
+
let frame = focused.page().mainFrame();
|
|
172
|
+
for (let depth = 0; depth < MAX_FRAME_DEPTH; depth += 1) {
|
|
173
|
+
// BROWSER CODE
|
|
174
|
+
const active = await frame.evaluateHandle(() => document.activeElement);
|
|
175
|
+
const inner = (await active.asElement()?.contentFrame()) ?? null;
|
|
176
|
+
await active.dispose();
|
|
177
|
+
if (inner === null)
|
|
178
|
+
break;
|
|
179
|
+
frame = inner;
|
|
180
|
+
}
|
|
181
|
+
const inFrame = frame.locator(":focus");
|
|
182
|
+
return (await inFrame.count()) === 0 ? undefined : inFrame;
|
|
183
|
+
}
|
|
184
|
+
export class McpRunGuard {
|
|
185
|
+
#origin;
|
|
186
|
+
#allowed;
|
|
187
|
+
#policy;
|
|
188
|
+
#values = [];
|
|
189
|
+
#refusal;
|
|
190
|
+
#step;
|
|
191
|
+
#onRefusedWrite;
|
|
192
|
+
#dispose;
|
|
193
|
+
#disposed = false;
|
|
194
|
+
/** Origins flagged `production: true` with no `allowProduction` of their own: no write reaches one, whatever the allowlist says. */
|
|
195
|
+
#heldBack;
|
|
196
|
+
/** The tool call this run is part of, from when it was prepared: a route's callback runs in the async context of whichever call launched a pooled browser. */
|
|
197
|
+
#invocation;
|
|
198
|
+
constructor(origin, allowedOrigins, allowances, target, heldBack = new Set(), invocation) {
|
|
199
|
+
this.#origin = origin;
|
|
200
|
+
this.#heldBack = heldBack;
|
|
201
|
+
this.#invocation = invocation;
|
|
202
|
+
this.#allowed = allowedOriginSet([...allowedOrigins, ...(allowances.allowOffAllowlistWrites ?? [])]);
|
|
203
|
+
// The target's own refusals hold; exploration's `safety.allowDestructive` is NOT this switch.
|
|
204
|
+
const { deny, paid, allowControl } = target?.safety ?? {};
|
|
205
|
+
this.#policy = new SafetyPolicy({
|
|
206
|
+
...(deny === undefined ? {} : { deny }),
|
|
207
|
+
...(paid === undefined ? {} : { paid }),
|
|
208
|
+
...(allowControl === undefined ? {} : { allowControl }),
|
|
209
|
+
...(allowances.allowDestructive === true ? { allowDestructive: true } : {}),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/** Arms the write guard on the session's context, before the run's first request. A test double's page, with no context, has nothing to arm. */
|
|
213
|
+
async arm(session, params, onRefusedWrite) {
|
|
214
|
+
this.#values = Object.values(params).filter((v) => v !== "");
|
|
215
|
+
this.#onRefusedWrite = onRefusedWrite;
|
|
216
|
+
const page = session.page;
|
|
217
|
+
if (typeof page.context !== "function")
|
|
218
|
+
return;
|
|
219
|
+
const context = page.context();
|
|
220
|
+
const onRoute = async (route, request) => {
|
|
221
|
+
if (!this.#judgeWrite(request.method(), request.url(), "")) {
|
|
222
|
+
await route.fallback().catch(() => undefined);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
this.#onRefusedWrite?.(request);
|
|
226
|
+
await route.abort("blockedbyclient").catch(() => undefined);
|
|
227
|
+
};
|
|
228
|
+
// A route sees only a redirect chain's first request; what it could not stop still ends the run.
|
|
229
|
+
const onRequest = (request) => {
|
|
230
|
+
if (request.redirectedFrom() === null)
|
|
231
|
+
return;
|
|
232
|
+
this.#judgeWrite(request.method(), request.url(), " It came as a redirect from an allowed origin, which a browser cannot be stopped from following, so it may have been sent.");
|
|
233
|
+
};
|
|
234
|
+
const onSocket = (ws) => {
|
|
235
|
+
if (!this.claimSocket(ws))
|
|
236
|
+
ws.connectToServer();
|
|
237
|
+
};
|
|
238
|
+
await context.route("**/*", onRoute);
|
|
239
|
+
await context.routeWebSocket(/.*/, onSocket);
|
|
240
|
+
context.on("request", onRequest);
|
|
241
|
+
this.#dispose = async () => {
|
|
242
|
+
context.off("request", onRequest);
|
|
243
|
+
await context.unroute("**/*", onRoute).catch(() => undefined);
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* True when the guard took this socket: off the allowlist, it is never connected, and a frame the page
|
|
248
|
+
* sends is the write. Playwright calls only the socket route added last, so another route of the same
|
|
249
|
+
* context (a self-heal run's) asks here first or its socket would pass these frames.
|
|
250
|
+
*/
|
|
251
|
+
claimSocket(ws) {
|
|
252
|
+
const url = ws.url().replace(/^ws/, "http");
|
|
253
|
+
// A socket route outlives `dispose` (it has no unroute): a session a mission goes on using gets its sockets back.
|
|
254
|
+
if (this.#disposed || !this.#writeIsRefused("WEBSOCKET", url))
|
|
255
|
+
return false;
|
|
256
|
+
ws.onMessage(() => void this.#judgeWrite("WEBSOCKET", url, ""));
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
/** A value the run extracted: a refusal that quotes it gives it to the model. */
|
|
260
|
+
noteExtracted(value) {
|
|
261
|
+
this.#values.push(value);
|
|
262
|
+
}
|
|
263
|
+
#mask(piece) {
|
|
264
|
+
return maskValues(piece, this.#values, "[param]");
|
|
265
|
+
}
|
|
266
|
+
#productionWriteOrigin(method, url) {
|
|
267
|
+
const origin = offAllowlistWriteOrigin(method, url, new Set());
|
|
268
|
+
const canonical = origin === undefined ? undefined : canonicalOrigin(url);
|
|
269
|
+
return canonical !== undefined && this.#heldBack.has(canonical) ? canonical : undefined;
|
|
270
|
+
}
|
|
271
|
+
#writeIsRefused(method, url) {
|
|
272
|
+
return this.#productionWriteOrigin(method, url) !== undefined || offAllowlistWriteOrigin(method, url, this.#allowed) !== undefined;
|
|
273
|
+
}
|
|
274
|
+
/** Ends the run if this write is one it refuses, and says whether it was. A production origin first: the allowlist has no say there. */
|
|
275
|
+
#judgeWrite(method, url, note) {
|
|
276
|
+
const production = this.#productionWriteOrigin(method, url);
|
|
277
|
+
if (production !== undefined) {
|
|
278
|
+
this.#refuseProductionWrite(production, note);
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
const off = offAllowlistWriteOrigin(method, url, this.#allowed);
|
|
282
|
+
if (off === undefined)
|
|
283
|
+
return false;
|
|
284
|
+
this.#refuseWrite(off, note);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
#stepPhrase() {
|
|
288
|
+
return this.#step === undefined ? "" : ` at step ${this.#step + 1}`;
|
|
289
|
+
}
|
|
290
|
+
#refuseProductionWrite(origin, note) {
|
|
291
|
+
if (this.#refusal !== undefined)
|
|
292
|
+
return;
|
|
293
|
+
const shown = this.#mask(origin);
|
|
294
|
+
const base = productionRefusal(shown, `the page sent a write to ${shown}${this.#stepPhrase()}, which is flagged production: true, and an MCP run refuses it whatever its allowlist says.${note}`);
|
|
295
|
+
this.#refusal = this.#owned(new RunGuardRefusedError(base.code, base.message, base.setting, this.#step === undefined ? {} : { at: this.#step + 1 }));
|
|
296
|
+
}
|
|
297
|
+
/** Recorded on this run's own tool call, never the one whose async context a browser callback happens to run in. */
|
|
298
|
+
#owned(err) {
|
|
299
|
+
noteMcpRefusal(err, this.#invocation);
|
|
300
|
+
return err;
|
|
301
|
+
}
|
|
302
|
+
#refuseWrite(off, note) {
|
|
303
|
+
if (this.#refusal !== undefined)
|
|
304
|
+
return;
|
|
305
|
+
const shown = this.#mask(off);
|
|
306
|
+
const setting = `targets.json["${this.#origin}"].mcpRun.allowOffAllowlistWrites`;
|
|
307
|
+
const at = this.#stepPhrase();
|
|
308
|
+
this.#refusal = this.#owned(new RunGuardRefusedError("E_RUN_REFUSED_OFF_ALLOWLIST_WRITE", `the page sent a write to ${shown}${at}, outside this run's allowed origins, and an MCP run refuses it by default.${note} A person allows that origin with ${setting}: ["${shown}"]. ${DO_NOT_RETRY}`, setting, this.#step === undefined ? {} : { at: this.#step + 1 }));
|
|
309
|
+
}
|
|
310
|
+
#refuseControl(verdict, index) {
|
|
311
|
+
const { ruleId, pattern } = verdict.refusal;
|
|
312
|
+
// A target's own `safety.deny` is what refuses it: nothing here lifts it. Its words are the operator's; the control's never appear.
|
|
313
|
+
const denied = ruleId.startsWith("deny:") || ruleId === "builtin:nameless-control";
|
|
314
|
+
const setting = denied ? `targets.json["${this.#origin}"].safety.deny` : `targets.json["${this.#origin}"].mcpRun.allowDestructive`;
|
|
315
|
+
const what = verdict.risk === "session-end" ? "ends the session" : verdict.risk === "destructive" ? "is destructive" : verdict.risk === "paid" ? "may cost money or reach real people" : "is denied by the target";
|
|
316
|
+
const lift = denied ? `The target's ${setting} refuses it; a person changes that.` : `A person allows it for this target with ${setting}: true.`;
|
|
317
|
+
this.#refusal = this.#owned(new RunGuardRefusedError("E_RUN_REFUSED_DESTRUCTIVE", `step ${index + 1} was not run: its control ${what} (rule ${denied ? ruleId : `${ruleId}, matched ${JSON.stringify(this.#mask(pattern))}`}), and an MCP run refuses it by default. ${lift} ${DO_NOT_RETRY}`, setting, { rule: ruleId, at: index + 1 }));
|
|
318
|
+
throw this.#refusal;
|
|
319
|
+
}
|
|
320
|
+
#judge(name, role, recorded) {
|
|
321
|
+
const step = recorded.step;
|
|
322
|
+
return this.#policy.refuses({ name, role, descriptor: "target" in step ? step.target : {} });
|
|
323
|
+
}
|
|
324
|
+
async beforeAction(ctx) {
|
|
325
|
+
this.afterStep();
|
|
326
|
+
this.#step = ctx.index;
|
|
327
|
+
if (ctx.key !== undefined && !pressesAny(ctx.key, ENTER_KEYS) && !pressesAny(ctx.key, SPACE_KEYS))
|
|
328
|
+
return;
|
|
329
|
+
if (typeof ctx.locator.evaluate !== "function")
|
|
330
|
+
return; // A test double's locator has no element to read.
|
|
331
|
+
const locator = ctx.key === undefined ? ctx.locator : await focusedThroughFrames(ctx.locator);
|
|
332
|
+
if (locator === undefined)
|
|
333
|
+
return; // No element holds focus: the key activates nothing.
|
|
334
|
+
if (ctx.key !== undefined && pressesAny(ctx.key, ENTER_KEYS)) {
|
|
335
|
+
// What Enter submits is named on the form's default button, whatever the field is called.
|
|
336
|
+
const handle = await locator.evaluateHandle(defaultButtonOf);
|
|
337
|
+
const button = handle.asElement();
|
|
338
|
+
const named = button === null ? null : await readControlIdentity(button);
|
|
339
|
+
await handle.dispose();
|
|
340
|
+
const verdict = named === null ? null : this.#judge(named.name, named.role, ctx.recorded);
|
|
341
|
+
if (verdict !== null)
|
|
342
|
+
this.#refuseControl(verdict, ctx.index);
|
|
343
|
+
}
|
|
344
|
+
const element = await readControlIdentity(locator);
|
|
345
|
+
if (ctx.key !== undefined && TEXT_ROLES.has(element.role))
|
|
346
|
+
return;
|
|
347
|
+
// What a click activates may be an ancestor of what resolved (`<button>Delete <span>…</span></button>`).
|
|
348
|
+
const ancestor = locator.locator(INTERACTIVE_ANCESTOR);
|
|
349
|
+
const named = (await ancestor.count()) === 0 ? [element] : [element, await readControlIdentity(ancestor.first())];
|
|
350
|
+
const label = ctx.recorded.step.label;
|
|
351
|
+
for (const c of [...named, ...(label === undefined ? [] : [{ name: label, role: "" }])]) {
|
|
352
|
+
const verdict = this.#judge(c.name, c.role, ctx.recorded);
|
|
353
|
+
if (verdict !== null)
|
|
354
|
+
this.#refuseControl(verdict, ctx.index);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
afterStep() {
|
|
358
|
+
if (this.#refusal !== undefined)
|
|
359
|
+
throw this.#refusal;
|
|
360
|
+
}
|
|
361
|
+
/** Throws what ended the run, if anything did since the last step (a write the end state's checks set off). */
|
|
362
|
+
check() {
|
|
363
|
+
this.afterStep();
|
|
364
|
+
}
|
|
365
|
+
async dispose() {
|
|
366
|
+
this.#disposed = true;
|
|
367
|
+
await this.#dispose?.();
|
|
368
|
+
this.#dispose = undefined;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=mcp-run-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-run-guard.js","sourceRoot":"","sources":["../src/mcp-run-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-tools/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ export function cliTools(ctx, wired) {
|
|
|
11
11
|
description: spec.description,
|
|
12
12
|
inputSchema: cliToolInputSchema(spec),
|
|
13
13
|
handler: async (args) => {
|
|
14
|
-
const { isError, body } = await runCliTool(spec, args, { runCli: deps.runCli, roots: pathRoots, redact: (text) => redactCredentials(text, credentialStore) });
|
|
14
|
+
const { isError, body } = await runCliTool(spec, args, { runCli: deps.runCli, roots: pathRoots, journeysDir: deps.journeysDir, redact: (text) => redactCredentials(text, credentialStore) });
|
|
15
15
|
return isError ? errorResult(body) : jsonResult(body);
|
|
16
16
|
},
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp-tools/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzE,iHAAiH;AACjH,MAAM,UAAU,QAAQ,CAAC,GAAe,EAAE,KAAmB;IAC3D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IACjD,gGAAgG;IAChG,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp-tools/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzE,iHAAiH;AACjH,MAAM,UAAU,QAAQ,CAAC,GAAe,EAAE,KAAmB;IAC3D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;IACjD,gGAAgG;IAChG,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC7L,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -3,6 +3,8 @@ import { FsMissionQueueStore } from "@jevitate/missions";
|
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { access, readFile } from "node:fs/promises";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
+
import { runAsMcpInvocation } from "../approval-provenance.js";
|
|
7
|
+
import { RunGuardRefusedError, runGuardRefusalBody } from "../mcp-run-guard.js";
|
|
6
8
|
import { stampRunMetadata, withRunMetadata } from "../run-metadata.js";
|
|
7
9
|
import { browserRunFromFlags, emulationFromFlags } from "../cli-shared.js";
|
|
8
10
|
import { parseScreenshotsArg } from "../run-screenshots.js";
|
|
@@ -215,9 +217,15 @@ export function findingTools(ctx) {
|
|
|
215
217
|
// Try the next candidate dir.
|
|
216
218
|
}
|
|
217
219
|
}
|
|
220
|
+
// #789: an MCP invocation, so the floor applies (the production refusal, and a branch-point finding's Journey prefix).
|
|
221
|
+
const invocation = {};
|
|
222
|
+
const guardRefusal = () => (invocation.refusal instanceof RunGuardRefusedError ? errorResult(runGuardRefusalBody(invocation.refusal)) : undefined);
|
|
218
223
|
try {
|
|
219
224
|
const fingerprint = args.fingerprint;
|
|
220
|
-
const report = await withRunMetadata({ tags: tagged.tags }, () => verifyFixImpl({ ...options, resultPath, fingerprint }));
|
|
225
|
+
const report = await runAsMcpInvocation(() => withRunMetadata({ tags: tagged.tags }, () => verifyFixImpl({ ...options, resultPath, fingerprint })), invocation);
|
|
226
|
+
const refused = guardRefusal();
|
|
227
|
+
if (refused !== undefined)
|
|
228
|
+
return refused;
|
|
221
229
|
const body = stampRunMetadata({
|
|
222
230
|
id: args.id,
|
|
223
231
|
...(ref.missionId === undefined ? {} : { missionId: ref.missionId, resultId: ref.resultId }),
|
|
@@ -229,6 +237,9 @@ export function findingTools(ctx) {
|
|
|
229
237
|
return report.verdict === "inconclusive" || report.verdict === "intermittent" ? errorResult(body) : jsonResult(body);
|
|
230
238
|
}
|
|
231
239
|
catch (err) {
|
|
240
|
+
const refused = guardRefusal();
|
|
241
|
+
if (refused !== undefined)
|
|
242
|
+
return refused;
|
|
232
243
|
return errorResult({ error: "verify_fix_refused", message: err instanceof Error ? err.message : String(err) });
|
|
233
244
|
}
|
|
234
245
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/mcp-tools/findings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/mcp-tools/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SiteGateRefusedError } from "@jevitate/runtime";
|
|
2
|
-
import { findCapabilities } from "@jevitate/mcp-facade";
|
|
2
|
+
import { findCapabilities, JourneyRunRefusedError } from "@jevitate/mcp-facade";
|
|
3
3
|
import { FsJourneyStore, JourneyRegistry } from "@jevitate/journey";
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
import { ParamValidationError } from "@jevitate/journey";
|
|
@@ -10,6 +10,7 @@ import { ExtensionMismatchError } from "../browser-run-options.js";
|
|
|
10
10
|
import { browserRunFromFlags, emulationFromFlags } from "../cli-shared.js";
|
|
11
11
|
import { environmentFromFlags, isEnvironmentError } from "../environments.js";
|
|
12
12
|
import { buildMissionFixtures, checkSetupRefs } from "../fixture-cli.js";
|
|
13
|
+
import { secretParamRefusalBody, secretParamsCarried } from "../secret-params.js";
|
|
13
14
|
import { FixtureSetupError, FixtureSpecError, UnboundSetupRefError } from "../mission-fixtures.js";
|
|
14
15
|
import { parseScreenshotsArg } from "../run-screenshots.js";
|
|
15
16
|
import { makeEvidenceSelfHealer } from "../self-heal-adapter.js";
|
|
@@ -18,6 +19,8 @@ import { ChangesArgsError, ChangesInputError } from "../change-context.js";
|
|
|
18
19
|
import { MAX_STEP_RESPONSE_TIMEOUT_MS } from "../journey-network-checks.js";
|
|
19
20
|
import { McpArgError, argErrorBody, optBool, optEnum, optInt, optNamedSessions, optPath, optExtensions, optRecordVideo, optScreenshots, optString, optStringArray, optStringMap, optViewport } from "../mcp-args.js";
|
|
20
21
|
import { resourcePreflight } from "../resource-preflight.js";
|
|
22
|
+
import { runRecordErrorOf } from "../journey-run-record.js";
|
|
23
|
+
import { RunGuardRefusedError, runGuardRefusalBody } from "../mcp-run-guard.js";
|
|
21
24
|
import { jsonResult, errorResult, governanceArgs, withJourneyExitCode, SetupRequired, redactCredentials, tagsArg } from "./shared.js";
|
|
22
25
|
/** `find_capabilities` and `run_journey`: the promoted-Journey tools. */
|
|
23
26
|
export function journeyTools(ctx) {
|
|
@@ -151,6 +154,9 @@ export function journeyTools(ctx) {
|
|
|
151
154
|
},
|
|
152
155
|
run_journey: {
|
|
153
156
|
description: "Run a PUBLISHED Journey by id with string params (fail-closed policy) — `jevitate journey run`. Never accepts inline steps. " +
|
|
157
|
+
"A Journey that needs a secret parameter is refused ({error: invalid_args, code: E_SECRET_PARAM_OVER_MCP, params}): never send a value. A person runs it on the CLI (`journey run --secret-field`), or the Journey uses a stored session ('storageState'). " +
|
|
158
|
+
"#788: an unpromoted Journey, or one changed since its approval, is refused before any browser ({error: refused, code: E_JOURNEY_NOT_PROMOTED | E_JOURNEY_APPROVAL_STALE | E_JOURNEY_APPROVAL_UNKNOWN, fix}): promote it with promote_journey, or try a draft on the CLI (`jevitate journey run`). " +
|
|
159
|
+
"#789: a click on a session-ending, destructive or paid control, a write to an origin outside the run's allowlist and a production environment are refused before anything is sent ({error: refused, outcome: refused, code: E_RUN_REFUSED_DESTRUCTIVE | E_RUN_REFUSED_OFF_ALLOWLIST_WRITE | E_RUN_REFUSED_PRODUCTION, setting, retryable: false}): do not retry; only a person lifts it, in the target's mcpRun section of ~/.jevitate/targets.json. " +
|
|
154
160
|
"Optional 'storageState': a PATH (on the machine running this MCP server; inside the project or ~/.jevitate, never a repo's .jevitate/) to a Playwright storageState " +
|
|
155
161
|
"JSON file, for a Journey authored behind a login (#118) — the file's contents are read only by the " +
|
|
156
162
|
"server's own browser, never returned or logged. A Journey that declares metadata.requiresAuth refuses " +
|
|
@@ -202,6 +208,10 @@ export function journeyTools(ctx) {
|
|
|
202
208
|
const tagged = tagsArg(args);
|
|
203
209
|
if ("error" in tagged)
|
|
204
210
|
return errorResult(tagged.error);
|
|
211
|
+
// Before the value reaches anything: a secret parameter's value never travels through a request.
|
|
212
|
+
const carried = await secretParamsCarried(deps.journeysDir, [args.id], args.params, { needed: true });
|
|
213
|
+
if (carried.length > 0)
|
|
214
|
+
return errorResult(secretParamRefusalBody(carried));
|
|
205
215
|
// Invariant #5: only id + params (+ a storageState PATH and the run options below) are
|
|
206
216
|
// threaded through — any inline `steps`/`recording` in the arguments is deliberately ignored.
|
|
207
217
|
let resolved;
|
|
@@ -232,24 +242,31 @@ export function journeyTools(ctx) {
|
|
|
232
242
|
return jsonResult(stampRunMetadata(withJourneyExitCode(withUsage), { tags: tagged.tags }));
|
|
233
243
|
}
|
|
234
244
|
catch (err) {
|
|
245
|
+
// #790: a record that could not be written is reported beside the answer, never instead of it.
|
|
246
|
+
const recordProblem = runRecordErrorOf(err);
|
|
247
|
+
const failed = (body) => errorResult(recordProblem === undefined ? body : { ...body, runRecordError: recordProblem });
|
|
235
248
|
// A site-policy refusal (throttle, budget, quiet hours) is an answer the agent acts on — when to retry.
|
|
236
249
|
if (err instanceof SiteGateRefusedError) {
|
|
237
|
-
return
|
|
250
|
+
return failed({ error: "throttled", reason: err.reason, retryAfter: err.retryAfter, message: err.message });
|
|
238
251
|
}
|
|
252
|
+
if (err instanceof RunGuardRefusedError)
|
|
253
|
+
return failed(runGuardRefusalBody(err));
|
|
254
|
+
if (err instanceof JourneyRunRefusedError)
|
|
255
|
+
return failed({ error: "refused", outcome: "refused", code: err.code, id: args.id, message: err.message, fix: err.fix, tryDraft: err.tryDraft, retryable: false });
|
|
239
256
|
if (err instanceof UnknownJourneyError)
|
|
240
|
-
return
|
|
257
|
+
return failed({ error: "not_found", id: args.id, message: err.message });
|
|
241
258
|
if (err instanceof JourneyRequiresAuthError)
|
|
242
|
-
return
|
|
259
|
+
return failed({ error: "invalid_args", code: "E_JOURNEY_REQUIRES_AUTH", message: err.message });
|
|
243
260
|
if (err instanceof ExtensionMismatchError)
|
|
244
|
-
return
|
|
261
|
+
return failed({ error: "invalid_args", code: err.code, message: err.message });
|
|
245
262
|
if (err instanceof ParamValidationError)
|
|
246
|
-
return
|
|
263
|
+
return failed({ error: "invalid_args", code: "E_INVALID_PARAMS", message: err.message });
|
|
247
264
|
if (isEnvironmentError(err) || err instanceof FixtureSpecError || err instanceof UnboundSetupRefError) {
|
|
248
|
-
return
|
|
265
|
+
return failed({ error: "invalid_args", code: err.code, message: err.message });
|
|
249
266
|
}
|
|
250
267
|
// Never run on unknown state: inconclusive (exit 2) — proves nothing, so an error result.
|
|
251
268
|
if (err instanceof FixtureSetupError) {
|
|
252
|
-
return
|
|
269
|
+
return failed({ outcome: "inconclusive", reason: err.message, failure: { kind: "configuration", message: err.message }, attribution: "configuration", exitCode: 2 });
|
|
253
270
|
}
|
|
254
271
|
throw err;
|
|
255
272
|
}
|