@descryy/mcp 0.4.0 → 0.6.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/bin/descry-mcp.js +16 -2
- package/dist/bin/descry-mcp.js.map +1 -1
- package/dist/browser/driver.d.ts +105 -6
- package/dist/browser/driver.d.ts.map +1 -1
- package/dist/browser/driver.js +17 -3
- package/dist/browser/driver.js.map +1 -1
- package/dist/browser/evidence.d.ts +11 -0
- package/dist/browser/evidence.d.ts.map +1 -1
- package/dist/browser/evidence.js +64 -8
- package/dist/browser/evidence.js.map +1 -1
- package/dist/browser/fake-driver.d.ts +8 -0
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +26 -3
- package/dist/browser/fake-driver.js.map +1 -1
- package/dist/browser/playwright-driver.d.ts +68 -14
- package/dist/browser/playwright-driver.d.ts.map +1 -1
- package/dist/browser/playwright-driver.js +318 -38
- package/dist/browser/playwright-driver.js.map +1 -1
- package/dist/browser/provider.d.ts +10 -4
- package/dist/browser/provider.d.ts.map +1 -1
- package/dist/browser/provider.js +10 -4
- package/dist/browser/provider.js.map +1 -1
- package/dist/browser/scenario-runner.d.ts +9 -0
- package/dist/browser/scenario-runner.d.ts.map +1 -1
- package/dist/browser/scenario-runner.js +32 -2
- package/dist/browser/scenario-runner.js.map +1 -1
- package/dist/browser/tool-support.js +1 -1
- package/dist/browser/tool-support.js.map +1 -1
- package/dist/cancellation.d.ts +55 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +76 -0
- package/dist/cancellation.js.map +1 -0
- package/dist/capped.d.ts +41 -0
- package/dist/capped.d.ts.map +1 -0
- package/dist/capped.js +35 -0
- package/dist/capped.js.map +1 -0
- package/dist/registry.d.ts +20 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +71 -4
- package/dist/registry.js.map +1 -1
- package/dist/render.d.ts +92 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +250 -5
- package/dist/render.js.map +1 -1
- package/dist/runtime-registry.d.ts +19 -1
- package/dist/runtime-registry.d.ts.map +1 -1
- package/dist/runtime-registry.js +88 -4
- package/dist/runtime-registry.js.map +1 -1
- package/dist/server.d.ts +19 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +135 -11
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +22 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +27 -1
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +23 -3
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +35 -3
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/browser-click.d.ts.map +1 -1
- package/dist/tools/browser-click.js +14 -0
- package/dist/tools/browser-click.js.map +1 -1
- package/dist/tools/browser-fill.d.ts.map +1 -1
- package/dist/tools/browser-fill.js +14 -0
- package/dist/tools/browser-fill.js.map +1 -1
- package/dist/tools/browser-navigate.d.ts.map +1 -1
- package/dist/tools/browser-navigate.js +14 -0
- package/dist/tools/browser-navigate.js.map +1 -1
- package/dist/tools/browser-run-scenario.d.ts.map +1 -1
- package/dist/tools/browser-run-scenario.js +12 -3
- package/dist/tools/browser-run-scenario.js.map +1 -1
- package/dist/tools/browser-save-scenario.d.ts.map +1 -1
- package/dist/tools/browser-save-scenario.js +109 -3
- package/dist/tools/browser-save-scenario.js.map +1 -1
- package/dist/tools/browser-start-session.d.ts.map +1 -1
- package/dist/tools/browser-start-session.js +43 -0
- package/dist/tools/browser-start-session.js.map +1 -1
- package/dist/tools/browser-type.d.ts.map +1 -1
- package/dist/tools/browser-type.js +14 -0
- package/dist/tools/browser-type.js.map +1 -1
- package/dist/tools/contracts.d.ts +41 -10
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +117 -17
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/cross-pr.d.ts +39 -10
- package/dist/tools/cross-pr.d.ts.map +1 -1
- package/dist/tools/cross-pr.js +113 -29
- package/dist/tools/cross-pr.js.map +1 -1
- package/dist/tools/git-diff.d.ts.map +1 -1
- package/dist/tools/git-diff.js +30 -2
- package/dist/tools/git-diff.js.map +1 -1
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +50 -2
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/observe-runtime.d.ts.map +1 -1
- package/dist/tools/observe-runtime.js +84 -4
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/observe-tests.d.ts +12 -0
- package/dist/tools/observe-tests.d.ts.map +1 -1
- package/dist/tools/observe-tests.js +92 -8
- package/dist/tools/observe-tests.js.map +1 -1
- package/dist/tools/pre-push.d.ts +40 -7
- package/dist/tools/pre-push.d.ts.map +1 -1
- package/dist/tools/pre-push.js +65 -23
- package/dist/tools/pre-push.js.map +1 -1
- package/dist/tools/scope.d.ts.map +1 -1
- package/dist/tools/scope.js +20 -4
- package/dist/tools/scope.js.map +1 -1
- package/dist/tools/validate.d.ts +40 -1
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +150 -27
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/verification-status.d.ts.map +1 -1
- package/dist/tools/verification-status.js +3 -3
- package/dist/tools/verification-status.js.map +1 -1
- package/dist/transport.d.ts +12 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +30 -16
- package/dist/transport.js.map +1 -1
- package/package.json +22 -13
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
* provenance pair. The steps are the caller's: this server has no exploration
|
|
29
29
|
* planner and does not pretend to have recorded intent it never saw.
|
|
30
30
|
*/
|
|
31
|
+
import { unlink } from "node:fs/promises";
|
|
31
32
|
import { gitHead } from "@descryy/core";
|
|
33
|
+
import { resolveTarget } from "../browser/scenario-resolve.js";
|
|
32
34
|
import { browserAnswer, useSession, withinConsent } from "../browser/tool-support.js";
|
|
33
35
|
import { SCENARIO_SCHEMA_VERSION, scenarioPath, writeScenario } from "../scenarios/index.js";
|
|
34
36
|
import { optionalString, requiredString, ToolInputError } from "./kit.js";
|
|
@@ -43,7 +45,13 @@ const TARGET_SCHEMA = {
|
|
|
43
45
|
properties: {
|
|
44
46
|
role: { type: "string", description: "The element's ARIA role, as browser_snapshot reported it." },
|
|
45
47
|
name: { type: "string", description: "The element's accessible name, as browser_snapshot reported it." },
|
|
46
|
-
selector: {
|
|
48
|
+
selector: {
|
|
49
|
+
type: ["string", "null"],
|
|
50
|
+
description: "The selector browser_snapshot reported for it, or null when the element carries no id, test " +
|
|
51
|
+
"attribute or name and its position was the only thing distinguishing it. A null selector cannot be " +
|
|
52
|
+
"saved — a step naming one is refused, by name, rather than stored to fail at replay. Add a " +
|
|
53
|
+
"data-testid to the element and re-explore.",
|
|
54
|
+
},
|
|
47
55
|
},
|
|
48
56
|
required: ["role", "name", "selector"],
|
|
49
57
|
additionalProperties: false,
|
|
@@ -126,6 +134,59 @@ const SCHEMA = {
|
|
|
126
134
|
required: ["sessionId", "name", "steps", "assertions"],
|
|
127
135
|
additionalProperties: false,
|
|
128
136
|
};
|
|
137
|
+
function findNullSelectorTarget(args) {
|
|
138
|
+
function scan(key, label) {
|
|
139
|
+
const raw = args[key];
|
|
140
|
+
if (!Array.isArray(raw))
|
|
141
|
+
return null;
|
|
142
|
+
for (const [index, item] of raw.entries()) {
|
|
143
|
+
if (typeof item !== "object" || item === null)
|
|
144
|
+
continue;
|
|
145
|
+
const target = item["target"];
|
|
146
|
+
if (typeof target !== "object" || target === null)
|
|
147
|
+
continue;
|
|
148
|
+
const fields = target;
|
|
149
|
+
if (fields["selector"] === null) {
|
|
150
|
+
return {
|
|
151
|
+
where: `${label} ${index}`,
|
|
152
|
+
role: typeof fields["role"] === "string" ? fields["role"] : "",
|
|
153
|
+
name: typeof fields["name"] === "string" ? fields["name"] : "",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return scan("steps", "step") ?? scan("assertions", "assertion");
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Every stored step's and assertion's target, resolved against a fresh
|
|
163
|
+
* snapshot of the page this scenario was just recorded on.
|
|
164
|
+
*
|
|
165
|
+
* This is what makes `browser_save_scenario`'s own claim — "validated before
|
|
166
|
+
* it is written, so a scenario that could not be read back is refused now" —
|
|
167
|
+
* actually true for *replay*, not only for *serialisation*. `writeScenario`
|
|
168
|
+
* proves the file parses back into the same shape; it has no way to prove
|
|
169
|
+
* the descriptors inside it still describe anything on the page, because it
|
|
170
|
+
* never sees a page. This costs one extra snapshot.
|
|
171
|
+
*/
|
|
172
|
+
function collectUnresolvedTargets(scenario, freshSnapshot) {
|
|
173
|
+
const failures = [];
|
|
174
|
+
scenario.steps.forEach((step, index) => {
|
|
175
|
+
if (step.target === null)
|
|
176
|
+
return;
|
|
177
|
+
const result = resolveTarget(`step ${index}`, step.target, freshSnapshot);
|
|
178
|
+
if (!result.resolved)
|
|
179
|
+
failures.push(result.failure.message);
|
|
180
|
+
});
|
|
181
|
+
scenario.assertions.forEach((assertion, index) => {
|
|
182
|
+
if (assertion.target === null)
|
|
183
|
+
return;
|
|
184
|
+
const result = resolveTarget(`assertion ${index}`, assertion.target, freshSnapshot);
|
|
185
|
+
if (!result.resolved)
|
|
186
|
+
failures.push(result.failure.message);
|
|
187
|
+
});
|
|
188
|
+
return failures;
|
|
189
|
+
}
|
|
129
190
|
function readObjectArray(args, key) {
|
|
130
191
|
const raw = args[key];
|
|
131
192
|
if (raw === undefined || raw === null) {
|
|
@@ -219,6 +280,25 @@ async function run(args, ctx) {
|
|
|
219
280
|
data: blank(sessionId, name),
|
|
220
281
|
});
|
|
221
282
|
}
|
|
283
|
+
// B1: an element with no id, test attribute or name comes back from
|
|
284
|
+
// browser_snapshot with `selector: null` rather than a fabricated value
|
|
285
|
+
// (rule 2 — precision over recall). Refused here, by name, before a
|
|
286
|
+
// caller's honest copy of that reply ever reaches the format module's own
|
|
287
|
+
// generic "selector is missing" message.
|
|
288
|
+
const nullSelector = findNullSelectorTarget(args);
|
|
289
|
+
if (nullSelector !== null) {
|
|
290
|
+
return browserAnswer({
|
|
291
|
+
ctx,
|
|
292
|
+
state: "refused",
|
|
293
|
+
headline: `${nullSelector.where}'s target has no stable selector.`,
|
|
294
|
+
notes: [
|
|
295
|
+
`The element with role "${nullSelector.role}" and name "${nullSelector.name}" has no stable selector ` +
|
|
296
|
+
"— it carries no id, test attribute or name, and its position is the only thing distinguishing it. " +
|
|
297
|
+
"Add a data-testid to make it addressable. Nothing was written.",
|
|
298
|
+
],
|
|
299
|
+
data: blank(sessionId, name),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
222
302
|
const scenario = shape(args, name, targetUrl, await commitOf(ctx.session.repoPath));
|
|
223
303
|
try {
|
|
224
304
|
// The one write path. `writeScenario` validates on the way out, so an
|
|
@@ -239,6 +319,29 @@ async function run(args, ctx) {
|
|
|
239
319
|
data: blank(sessionId, name),
|
|
240
320
|
});
|
|
241
321
|
}
|
|
322
|
+
// The check the tool's own description claims: a fresh snapshot of the
|
|
323
|
+
// very page this scenario was recorded on, every stored descriptor run
|
|
324
|
+
// through `resolveTarget` against it. `writeScenario` only proves the file
|
|
325
|
+
// parses back into the same shape — it never sees a page, so it cannot
|
|
326
|
+
// prove any of this actually replays. This is what would have caught B1
|
|
327
|
+
// on the day it shipped, and it costs one snapshot.
|
|
328
|
+
const freshSnapshot = await entry.page.snapshot();
|
|
329
|
+
const unresolved = collectUnresolvedTargets(scenario, freshSnapshot);
|
|
330
|
+
if (unresolved.length > 0) {
|
|
331
|
+
await unlink(scenarioPath(ctx.session.repoPath, name)).catch(() => { });
|
|
332
|
+
return browserAnswer({
|
|
333
|
+
ctx,
|
|
334
|
+
state: "refused",
|
|
335
|
+
headline: `Scenario "${name}" was not saved — ${unresolved.length} of its step(s)/assertion(s) do not resolve against the page it was just recorded on.`,
|
|
336
|
+
notes: [
|
|
337
|
+
...unresolved,
|
|
338
|
+
"Nothing was written. A scenario whose file parses correctly but whose steps do not resolve against " +
|
|
339
|
+
"the page it claims to describe is worse than one that was never saved — it looks replayable and " +
|
|
340
|
+
"is not.",
|
|
341
|
+
],
|
|
342
|
+
data: blank(sessionId, name),
|
|
343
|
+
});
|
|
344
|
+
}
|
|
242
345
|
const path = scenarioPath(ctx.session.repoPath, name);
|
|
243
346
|
return browserAnswer({
|
|
244
347
|
ctx,
|
|
@@ -282,8 +385,11 @@ export const browserSaveScenarioTool = {
|
|
|
282
385
|
"descry/scenarios/ that browser_run_scenario replays and a pre-push check can run with no agent in the " +
|
|
283
386
|
"loop. Steps name their elements by role, name and selector together, never by a snapshot ref, because a " +
|
|
284
387
|
"ref means nothing in a later session. Assertions are required and may be empty; an empty one is stored " +
|
|
285
|
-
"honestly and replays as unverified rather than passed.
|
|
286
|
-
"
|
|
388
|
+
"honestly and replays as unverified rather than passed. Before this call reports success, every step and " +
|
|
389
|
+
"assertion is re-resolved against a fresh snapshot of the page it was just recorded on — a scenario whose " +
|
|
390
|
+
"steps do not actually resolve is refused and deleted now, rather than discovered during a check " +
|
|
391
|
+
"somebody is waiting on. A step naming an element with no id, test attribute or name is refused too: such " +
|
|
392
|
+
"an element has no selector that would survive to a later session.",
|
|
287
393
|
class: "action",
|
|
288
394
|
tier: "evidence",
|
|
289
395
|
version: "1.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-save-scenario.js","sourceRoot":"","sources":["../../src/tools/browser-save-scenario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAyC,MAAM,UAAU,CAAC;AAejH,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,WAAW,EACT,yGAAyG;QACzG,yGAAyG;QACzG,yGAAyG;QACzG,0GAA0G;QAC1G,yGAAyG;QACzG,iFAAiF;IACnF,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;QAClG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;QACxG,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"browser-save-scenario.js","sourceRoot":"","sources":["../../src/tools/browser-save-scenario.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-start-session.d.ts","sourceRoot":"","sources":["../../src/tools/browser-start-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"browser-start-session.d.ts","sourceRoot":"","sources":["../../src/tools/browser-start-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAOnF,OAAO,EAAmG,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAGhJ,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,GAAG,yBAAyB,GAAG,IAAI,CAAC;IAC9E,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AA8RD,eAAO,MAAM,uBAAuB,EAAE,cAiCrC,CAAC"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* consents for redeem nothing, because the session they run in has already
|
|
23
23
|
* been confirmed.
|
|
24
24
|
*/
|
|
25
|
+
import { CANCELLED_STATE, cancellationHeadline, cancellationNotes } from "../cancellation.js";
|
|
25
26
|
import { browserAnswer, emptyEvidence, observeAndCorrelate } from "../browser/tool-support.js";
|
|
26
27
|
import { NO_GRAPH_WRITE } from "../browser/graph-write.js";
|
|
27
28
|
import { isAbsolute, join } from "node:path";
|
|
@@ -140,6 +141,25 @@ function parseTarget(args) {
|
|
|
140
141
|
"opened, and cannot be turned into the origin this session's consent is bound to.");
|
|
141
142
|
}
|
|
142
143
|
}
|
|
144
|
+
function cancelledBeforeLaunch(ctx, target, safetyLevel) {
|
|
145
|
+
return browserAnswer({
|
|
146
|
+
ctx,
|
|
147
|
+
state: CANCELLED_STATE,
|
|
148
|
+
headline: cancellationHeadline("no browser session is open"),
|
|
149
|
+
notes: cancellationNotes("No browser was left running.", "If a browser had already opened when the cancellation arrived, it has been closed and whatever it " +
|
|
150
|
+
"had observed was flushed with it."),
|
|
151
|
+
data: {
|
|
152
|
+
sessionId: "",
|
|
153
|
+
url: target.href,
|
|
154
|
+
title: "",
|
|
155
|
+
consentedOrigin: target.origin,
|
|
156
|
+
safetyLevel,
|
|
157
|
+
totalElements: 0,
|
|
158
|
+
evidence: emptyEvidence(),
|
|
159
|
+
graph: NO_GRAPH_WRITE,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
143
163
|
async function run(args, ctx) {
|
|
144
164
|
const target = parseTarget(args);
|
|
145
165
|
const headless = optionalBoolean(args, "headless") ?? true;
|
|
@@ -147,6 +167,12 @@ async function run(args, ctx) {
|
|
|
147
167
|
const parserSpec = readStackParserSpec(args);
|
|
148
168
|
const documentRoot = optionalString(args, "documentRoot");
|
|
149
169
|
const backend = ctx.session.browserBackend();
|
|
170
|
+
// Before anything launches. A browser opened for a caller who has already
|
|
171
|
+
// gone is one nothing will ever close: the session id goes back in a reply
|
|
172
|
+
// the server suppresses, so no `browser_close_session` can name it and the
|
|
173
|
+
// five-minute idle reaper is the only thing left that would.
|
|
174
|
+
if (ctx.signal.aborted)
|
|
175
|
+
return cancelledBeforeLaunch(ctx, target, null);
|
|
150
176
|
if (!backend.available) {
|
|
151
177
|
return browserAnswer({
|
|
152
178
|
ctx,
|
|
@@ -208,6 +234,14 @@ async function run(args, ctx) {
|
|
|
208
234
|
data: { sessionId: "", url: target.href, title: "", consentedOrigin: target.origin, safetyLevel: profile?.safetyLevel ?? null, totalElements: 0, evidence: emptyEvidence(), graph: NO_GRAPH_WRITE },
|
|
209
235
|
});
|
|
210
236
|
}
|
|
237
|
+
// The race that is actually lost in practice: the caller cancelled while
|
|
238
|
+
// Chromium was starting, so the launch succeeded on behalf of nobody. This
|
|
239
|
+
// closes the session it just opened — the one resource this call started,
|
|
240
|
+
// and the only one it may tear down.
|
|
241
|
+
if (ctx.signal.aborted) {
|
|
242
|
+
await ctx.session.browserSessions().close(opened.entry.sessionId);
|
|
243
|
+
return cancelledBeforeLaunch(ctx, target, profile?.safetyLevel ?? null);
|
|
244
|
+
}
|
|
211
245
|
const { entry } = opened;
|
|
212
246
|
const snapshot = await entry.page.snapshot();
|
|
213
247
|
const observed = await observeAndCorrelate(ctx, entry);
|
|
@@ -264,6 +298,15 @@ export const browserStartSessionTool = {
|
|
|
264
298
|
run,
|
|
265
299
|
describeAction(args) {
|
|
266
300
|
const target = parseTarget(args);
|
|
301
|
+
// `readProfile` is the same parse the run path uses to enforce the gate
|
|
302
|
+
// (`mutationRefusal`, in `tool-support.ts`) — read here rather than
|
|
303
|
+
// re-derived, so the sentence a developer confirms and the restriction
|
|
304
|
+
// that is actually enforced cannot say two different things.
|
|
305
|
+
const safetyLevel = readProfile(args)?.safetyLevel;
|
|
306
|
+
if (safetyLevel === "readOnly") {
|
|
307
|
+
return (`Descry may navigate and snapshot anywhere on ${target.origin}. Clicking, typing and filling will be ` +
|
|
308
|
+
`refused. It may not leave that origin.`);
|
|
309
|
+
}
|
|
267
310
|
return (`Launch a browser and open ${target.href}. For as long as the session lives, Descry may navigate, ` +
|
|
268
311
|
`click, type and fill anywhere on ${target.origin} without asking again — including actions that ` +
|
|
269
312
|
"change data in that application. It may not leave that origin.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-start-session.js","sourceRoot":"","sources":["../../src/tools/browser-start-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"browser-start-session.js","sourceRoot":"","sources":["../../src/tools/browser-start-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAK7C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAwB,MAAM,4BAA4B,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAyC,MAAM,UAAU,CAAC;AAkBhJ,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,6FAA6F;gBAC7F,6FAA6F;gBAC7F,6FAA6F;SAChG;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gFAAgF;SAC9F;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,mGAAmG;gBACnG,qGAAqG;gBACrG,sGAAsG;gBACtG,oGAAoG;gBACpG,UAAU;YACZ,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0GAA0G,EAAE;gBACnJ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qIAAqI,EAAE;aAC/K;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,oGAAoG;gBACpG,mGAAmG;gBACnG,uGAAuG;gBACvG,sGAAsG;gBACtG,sGAAsG;gBACtG,kCAAkC;SACrC;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,8FAA8F;gBAC9F,mGAAmG;gBACnG,oGAAoG;gBACpG,+FAA+F;gBAC/F,qGAAqG;gBACrG,uGAAuG;YACzG,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4EAA4E,EAAE;gBACnH,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,yBAAyB,CAAC;oBACtD,WAAW,EACT,+FAA+F;wBAC/F,oFAAoF;iBACvF;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;YACjC,oBAAoB,EAAE,IAAI;SAC3B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,+FAA+F;gBAC/F,+FAA+F;gBAC/F,iGAAiG;gBACjG,6BAA6B;SAChC;KACF;IACD,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAEX,MAAM,aAAa,GAAkC,CAAC,UAAU,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAEtG;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,IAA6B;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;IAE/G,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,cAAc,CACtB,kGAAkG;YAChG,4GAA4G,CAC/G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA6B;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,IAA6B;IAChD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CACtB,+DAA+D,GAAG,mCAAmC;YACnG,kFAAkF,CACrF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAAgB,EAChB,MAAW,EACX,WAAmD;IAEnD,OAAO,aAAa,CAA0B;QAC5C,GAAG;QACH,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,oBAAoB,CAAC,4BAA4B,CAAC;QAC5D,KAAK,EAAE,iBAAiB,CACtB,8BAA8B,EAC9B,oGAAoG;YAClG,mCAAmC,CACtC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,EAAE;YACb,GAAG,EAAE,MAAM,CAAC,IAAI;YAChB,KAAK,EAAE,EAAE;YACT,eAAe,EAAE,MAAM,CAAC,MAAM;YAC9B,WAAW;YACX,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,aAAa,EAAE;YACzB,KAAK,EAAE,cAAc;SACtB;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAA6B,EAAE,GAAgB;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC;IAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAE7C,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,6DAA6D;IAC7D,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAExE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAA0B;YAC5C,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,mCAAmC;YAC7C,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;SAC5K,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,uEAAuE;IACvE,gEAAgE;IAChE,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,oBAAoB,CAAC;YAAE,MAAM,KAAK,CAAC;QAC1D,OAAO,aAAa,CAA0B;YAC5C,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,0CAA0C,KAAK,CAAC,SAAS,IAAI;YACvE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;SAC5K,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,wEAAwE;IACxE,uCAAuC;IACvC,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS;QAC3C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ;QACtB,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;YACxB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAqB,EAAE,CAC9D,MAAM,KAAK,MAAM,CAAC,MAAM;QACtB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QAC1F,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,MAAM,oDAAoD,EAAE,CAAC;IAE3H,GAAG,CAAC,QAAQ,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACxC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACxD,iBAAiB;QACjB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;KACjC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/G,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,GACT,MAAM,CAAC,IAAI,KAAK,YAAY;YAC1B,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,sEAAsE;gBACtE,yDAAyD;gBACzD,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,EAAE,EAAE,2BAA2B,MAAM,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAEhH,OAAO,aAAa,CAA0B;YAC5C,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,0BAA0B;YACnH,KAAK;YACL,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;SACpM,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,qCAAqC;IACrC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEnC,OAAO,aAAa,CAA0B;QAC5C,GAAG;QACH,QAAQ,EAAE,mBAAmB,KAAK,CAAC,SAAS,YAAY,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,aAAa,aAAa;QAC5G,KAAK,EAAE;YACL,kBAAkB,KAAK,CAAC,eAAe,+DAA+D;gBACpG,qGAAqG;gBACrG,0FAA0F;YAC5F,GAAG,CAAC,UAAU,KAAK,IAAI;gBACrB,CAAC,CAAC;oBACE,8FAA8F;wBAC5F,6FAA6F;wBAC7F,qEAAqE;iBACxE;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI;gBACxB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,sCAAsC,KAAK,CAAC,OAAO,CAAC,IAAI,iBAAiB;wBACvE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK;wBAClC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,UAAU;4BACvC,CAAC,CAAC,wFAAwF;4BAC1F,CAAC,CAAC,EAAE,CAAC;iBACV,CAAC;YACN,GAAG,QAAQ,CAAC,KAAK;SAClB;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI;YAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,QAAQ;YACR,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,IAAI,EAAE,uBAAuB;IAC7B,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EACT,qGAAqG;QACrG,wGAAwG;QACxG,mGAAmG;QACnG,uGAAuG;QACvG,0BAA0B;IAC5B,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,MAAM;IACnB,GAAG;IACH,cAAc,CAAC,IAA6B;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,wEAAwE;QACxE,oEAAoE;QACpE,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;QACnD,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,CACL,gDAAgD,MAAM,CAAC,MAAM,yCAAyC;gBACtG,wCAAwC,CACzC,CAAC;QACJ,CAAC;QACD,OAAO,CACL,6BAA6B,MAAM,CAAC,IAAI,2DAA2D;YACnG,oCAAoC,MAAM,CAAC,MAAM,iDAAiD;YAClG,gEAAgE,CACjE,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-type.d.ts","sourceRoot":"","sources":["../../src/tools/browser-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-type.d.ts","sourceRoot":"","sources":["../../src/tools/browser-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAGjF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAuGD,eAAO,MAAM,eAAe,EAAE,cAiB7B,CAAC"}
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
import { browserAnswer, emptyEvidence, mutationRefusal, observeAndCorrelate, useSession } from "../browser/tool-support.js";
|
|
37
37
|
import { NO_GRAPH_WRITE } from "../browser/graph-write.js";
|
|
38
38
|
import { UnknownElementRefError } from "../browser/driver.js";
|
|
39
|
+
import { CANCELLED_STATE, cancellationHeadline, cancellationNotes } from "../cancellation.js";
|
|
39
40
|
import { requiredString } from "./kit.js";
|
|
40
41
|
const SCHEMA = {
|
|
41
42
|
type: "object",
|
|
@@ -69,6 +70,19 @@ async function run(args, ctx) {
|
|
|
69
70
|
const sessionId = requiredString(args, "sessionId");
|
|
70
71
|
const ref = requiredString(args, "ref");
|
|
71
72
|
const text = requiredString(args, "text");
|
|
73
|
+
// Checked before the session is touched, because the point is that nothing
|
|
74
|
+
// happens: this verb changes a running application, and the caller has said
|
|
75
|
+
// stop. The session itself is left open — it belongs to
|
|
76
|
+
// `browser_start_session` and its consent, not to this call.
|
|
77
|
+
if (ctx.signal.aborted) {
|
|
78
|
+
return browserAnswer({
|
|
79
|
+
ctx,
|
|
80
|
+
state: CANCELLED_STATE,
|
|
81
|
+
headline: cancellationHeadline("nothing was typed"),
|
|
82
|
+
notes: cancellationNotes("No keystroke reached the page.", "The browser session is still open and can still be used."),
|
|
83
|
+
data: { sessionId, ref, url: "", evidence: emptyEvidence(), graph: NO_GRAPH_WRITE },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
72
86
|
const found = await useSession(ctx.session.browserSessions(), sessionId);
|
|
73
87
|
if (!found.ok) {
|
|
74
88
|
return browserAnswer({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-type.js","sourceRoot":"","sources":["../../src/tools/browser-type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-type.js","sourceRoot":"","sources":["../../src/tools/browser-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,24 +20,48 @@
|
|
|
20
20
|
*
|
|
21
21
|
* The one case that *is* `refused` outright: no endpoints in the graph.
|
|
22
22
|
* Then neither half looked at anything.
|
|
23
|
+
*
|
|
24
|
+
* ## A filter matching nothing is not a clean bill of health
|
|
25
|
+
*
|
|
26
|
+
* UAT round 3, Suggestion 5. `paths: ["/reviews"]` on a repository whose
|
|
27
|
+
* `/reviews` route was never parsed as an `API_ROUTE` at all returned
|
|
28
|
+
* `state: "ok"`, `"Clean at path level."`, `findings: []` — indistinguishable
|
|
29
|
+
* from "checked `/reviews` and it is fine." Zero endpoints matched the filter,
|
|
30
|
+
* not zero problems with the endpoint it named. So a `paths` filter that
|
|
31
|
+
* matches no `API_ENDPOINT` in the graph now reports `state: "empty"` with an
|
|
32
|
+
* explicit count, before the "clean" verdict can be reached at all.
|
|
33
|
+
*
|
|
34
|
+
* ## Claim: defect versus lead
|
|
35
|
+
*
|
|
36
|
+
* UAT round 3, Suggestion 6, following `EnvFinding.claim`'s precedent
|
|
37
|
+
* (`validate`). `CALL_NOT_SERVED` and every shape mismatch are `defect` —
|
|
38
|
+
* provable from this graph (and, for a mismatch, a type checker) alone.
|
|
39
|
+
* `ROUTE_NOT_CALLED` is `lead` — a mobile client, another service, or an
|
|
40
|
+
* external consumer would not appear in this graph, so "nothing calls it" is
|
|
41
|
+
* never provable, only worth a look. This is orthogonal to `prominence`,
|
|
42
|
+
* which still orders by evidence strength alone.
|
|
23
43
|
*/
|
|
24
|
-
import type { ContractCheck, ContractFindingKind, EndpointKey, NearMissKind, ShapeDifference, ShapeDirection } from "@descryy/core";
|
|
44
|
+
import type { ContractCheck, ContractClaim, ContractFindingKind, EndpointKey, NearMissKind, ShapeDifference, ShapeDirection } from "@descryy/core";
|
|
25
45
|
import type { ResolutionLevel } from "@descryy/ir";
|
|
26
46
|
import { type BriefNode, type ToolDefinition } from "./kit.ts";
|
|
27
47
|
/** A call that reaches no route, or a route nothing calls. */
|
|
28
48
|
export interface ContractPathFinding {
|
|
29
49
|
readonly kind: ContractFindingKind;
|
|
50
|
+
/**
|
|
51
|
+
* `defect` (provable from this graph alone) or `lead` (needs knowledge
|
|
52
|
+
* outside it) — see the module header. Orthogonal to `prominence` below.
|
|
53
|
+
*/
|
|
54
|
+
readonly claim: ContractClaim;
|
|
30
55
|
/** 1-based position in this answer. See {@link ContractPathFinding.prominence} for what orders it. */
|
|
31
56
|
readonly rank: number;
|
|
32
57
|
/**
|
|
33
58
|
* `top` / `notable` / `rest`, ordered by **evidence strength** — the
|
|
34
|
-
* finding's own `resolution`, strongest first — and not by
|
|
59
|
+
* finding's own `resolution`, strongest first — and not by `claim`.
|
|
35
60
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* a
|
|
39
|
-
*
|
|
40
|
-
* how well-resolved each finding is, and a reader triaging a list is better
|
|
61
|
+
* A call reaching no route and a route nothing calls can each rest on
|
|
62
|
+
* strong or weak evidence, and inventing a ranking from `claim` alone would
|
|
63
|
+
* be a judgement dressed as a measurement. What the graph does know is how
|
|
64
|
+
* well-resolved each finding is, and a reader triaging a list is better
|
|
41
65
|
* served by "this one rests on the strongest evidence" than by an invented
|
|
42
66
|
* ranking. The tool's own notes say this rather than leaving it inferred.
|
|
43
67
|
*/
|
|
@@ -73,6 +97,8 @@ export interface ContractShapeMismatchReport {
|
|
|
73
97
|
readonly writer: BriefNode;
|
|
74
98
|
readonly differences: readonly ShapeDifference[];
|
|
75
99
|
readonly resolution: ResolutionLevel;
|
|
100
|
+
/** Always `"defect"` — see the module header. Carried rather than assumed by a caller. */
|
|
101
|
+
readonly claim: ContractClaim;
|
|
76
102
|
}
|
|
77
103
|
/**
|
|
78
104
|
* The shape half's own status, carried in the payload rather than in the
|
|
@@ -99,9 +125,10 @@ export interface ContractShapeStatus {
|
|
|
99
125
|
/**
|
|
100
126
|
* One shape, always.
|
|
101
127
|
*
|
|
102
|
-
* The counts in `checked` describe the **whole graph** even when `paths`
|
|
103
|
-
* given: a denominator that shrank with the filter would make a
|
|
104
|
-
* look like a healthy repository. The two lists describe the
|
|
128
|
+
* The counts in `checked` describe the **whole graph** even when `paths` or
|
|
129
|
+
* `files` was given: a denominator that shrank with the filter would make a
|
|
130
|
+
* narrow query look like a healthy repository. The two lists describe the
|
|
131
|
+
* filter.
|
|
105
132
|
*/
|
|
106
133
|
export interface ContractsData {
|
|
107
134
|
readonly findings: readonly ContractPathFinding[];
|
|
@@ -115,6 +142,10 @@ export interface ContractsData {
|
|
|
115
142
|
* about at all.
|
|
116
143
|
*/
|
|
117
144
|
readonly unmatchedWithoutNearMiss: number;
|
|
145
|
+
/** `findings` plus `shapeMismatches` with `claim === "defect"`. What a git hook should branch on. */
|
|
146
|
+
readonly defects: number;
|
|
147
|
+
/** `findings` with `claim === "lead"` — worth a look, never counted as blocking. */
|
|
148
|
+
readonly leads: number;
|
|
118
149
|
}
|
|
119
150
|
export declare const contractsTool: ToolDefinition;
|
|
120
151
|
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAU,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAGlB,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IACnF,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,wEAAwE;AACxE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,qGAAqG;IACrG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAmOD,eAAO,MAAM,aAAa,EAAE,cAe3B,CAAC"}
|