@descryy/mcp 0.11.7 → 0.12.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/action-handshake.d.ts.map +1 -1
- package/dist/action-handshake.js +5 -1
- package/dist/action-handshake.js.map +1 -1
- package/dist/browser/driver.d.ts +74 -0
- package/dist/browser/driver.d.ts.map +1 -1
- package/dist/browser/driver.js +48 -0
- package/dist/browser/driver.js.map +1 -1
- package/dist/browser/fake-driver.d.ts +39 -0
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +123 -5
- package/dist/browser/fake-driver.js.map +1 -1
- package/dist/browser/fault-attribution.d.ts +75 -39
- package/dist/browser/fault-attribution.d.ts.map +1 -1
- package/dist/browser/fault-attribution.js +100 -89
- package/dist/browser/fault-attribution.js.map +1 -1
- package/dist/browser/graph-write.d.ts +22 -2
- package/dist/browser/graph-write.d.ts.map +1 -1
- package/dist/browser/graph-write.js +60 -2
- package/dist/browser/graph-write.js.map +1 -1
- package/dist/browser/identity-graph-write.d.ts +26 -2
- package/dist/browser/identity-graph-write.d.ts.map +1 -1
- package/dist/browser/identity-graph-write.js +44 -2
- package/dist/browser/identity-graph-write.js.map +1 -1
- package/dist/browser/playwright-driver.d.ts +1 -0
- package/dist/browser/playwright-driver.d.ts.map +1 -1
- package/dist/browser/playwright-driver.js +66 -8
- package/dist/browser/playwright-driver.js.map +1 -1
- package/dist/browser/provider.d.ts +5 -0
- package/dist/browser/provider.d.ts.map +1 -1
- package/dist/browser/provider.js.map +1 -1
- package/dist/browser/reach-recording-session.d.ts.map +1 -1
- package/dist/browser/reach-recording-session.js +10 -0
- package/dist/browser/reach-recording-session.js.map +1 -1
- package/dist/browser/scenario-runner.d.ts.map +1 -1
- package/dist/browser/scenario-runner.js +2 -0
- package/dist/browser/scenario-runner.js.map +1 -1
- package/dist/browser/tool-support.d.ts.map +1 -1
- package/dist/browser/tool-support.js +6 -1
- package/dist/browser/tool-support.js.map +1 -1
- package/dist/findings/index.d.ts +2 -0
- package/dist/findings/index.d.ts.map +1 -0
- package/dist/findings/index.js +2 -0
- package/dist/findings/index.js.map +1 -0
- package/dist/findings/store.d.ts +81 -0
- package/dist/findings/store.d.ts.map +1 -0
- package/dist/findings/store.js +148 -0
- package/dist/findings/store.js.map +1 -0
- package/dist/fs-gateway.d.ts +57 -0
- package/dist/fs-gateway.d.ts.map +1 -0
- package/dist/fs-gateway.js +86 -0
- package/dist/fs-gateway.js.map +1 -0
- package/dist/ready-checks.d.ts +1 -1
- package/dist/ready-checks.d.ts.map +1 -1
- package/dist/ready-checks.js +3 -3
- package/dist/ready-checks.js.map +1 -1
- package/dist/scenarios/storage.d.ts.map +1 -1
- package/dist/scenarios/storage.js +3 -3
- package/dist/scenarios/storage.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -3
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +6 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +26 -16
- package/dist/session.js.map +1 -1
- package/dist/tools/aliases.d.ts.map +1 -1
- package/dist/tools/aliases.js +2 -0
- package/dist/tools/aliases.js.map +1 -1
- package/dist/tools/browser-read.d.ts +19 -12
- package/dist/tools/browser-read.d.ts.map +1 -1
- package/dist/tools/browser-read.js +34 -18
- package/dist/tools/browser-read.js.map +1 -1
- package/dist/tools/browser-record-start.d.ts +20 -0
- package/dist/tools/browser-record-start.d.ts.map +1 -0
- package/dist/tools/browser-record-start.js +97 -0
- package/dist/tools/browser-record-start.js.map +1 -0
- package/dist/tools/browser-record-stop.d.ts +25 -0
- package/dist/tools/browser-record-stop.d.ts.map +1 -0
- package/dist/tools/browser-record-stop.js +102 -0
- package/dist/tools/browser-record-stop.js.map +1 -0
- package/dist/tools/browser-start-session.d.ts.map +1 -1
- package/dist/tools/browser-start-session.js +12 -0
- package/dist/tools/browser-start-session.js.map +1 -1
- package/dist/tools/browser.d.ts.map +1 -1
- package/dist/tools/browser.js +6 -0
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/chain.d.ts +5 -0
- package/dist/tools/chain.d.ts.map +1 -1
- package/dist/tools/chain.js +5 -2
- package/dist/tools/chain.js.map +1 -1
- package/dist/tools/change-scope.d.ts +2 -1
- package/dist/tools/change-scope.d.ts.map +1 -1
- package/dist/tools/change-scope.js +19 -10
- package/dist/tools/change-scope.js.map +1 -1
- package/dist/tools/check.d.ts +7 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/check.js +55 -0
- package/dist/tools/check.js.map +1 -0
- package/dist/tools/code-context.d.ts +3 -2
- package/dist/tools/code-context.d.ts.map +1 -1
- package/dist/tools/code-context.js +11 -5
- package/dist/tools/code-context.js.map +1 -1
- package/dist/tools/disclosure.d.ts +3 -2
- package/dist/tools/disclosure.d.ts.map +1 -1
- package/dist/tools/disclosure.js +15 -4
- package/dist/tools/disclosure.js.map +1 -1
- package/dist/tools/draw-conclusion.d.ts +18 -2
- package/dist/tools/draw-conclusion.d.ts.map +1 -1
- package/dist/tools/draw-conclusion.js +69 -11
- package/dist/tools/draw-conclusion.js.map +1 -1
- package/dist/tools/finding-lookup.d.ts +58 -0
- package/dist/tools/finding-lookup.d.ts.map +1 -0
- package/dist/tools/finding-lookup.js +261 -0
- package/dist/tools/finding-lookup.js.map +1 -0
- package/dist/tools/index.d.ts +2 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -28
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kit.d.ts +1 -1
- package/dist/tools/link-workspace.d.ts +7 -0
- package/dist/tools/link-workspace.d.ts.map +1 -1
- package/dist/tools/link-workspace.js +20 -0
- package/dist/tools/link-workspace.js.map +1 -1
- package/dist/tools/merged-context.d.ts.map +1 -1
- package/dist/tools/merged-context.js +2 -0
- package/dist/tools/merged-context.js.map +1 -1
- package/dist/tools/merged-review.d.ts +5 -0
- package/dist/tools/merged-review.d.ts.map +1 -0
- package/dist/tools/merged-review.js +12 -0
- package/dist/tools/merged-review.js.map +1 -0
- package/dist/tools/merged-workspace.d.ts.map +1 -1
- package/dist/tools/merged-workspace.js +1 -0
- package/dist/tools/merged-workspace.js.map +1 -1
- package/dist/tools/observe-runtime.d.ts +3 -1
- package/dist/tools/observe-runtime.d.ts.map +1 -1
- package/dist/tools/observe-runtime.js +46 -7
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/propagation.d.ts +14 -8
- package/dist/tools/propagation.d.ts.map +1 -1
- package/dist/tools/propagation.js +23 -15
- package/dist/tools/propagation.js.map +1 -1
- package/dist/tools/prove-reach.d.ts +8 -0
- package/dist/tools/prove-reach.d.ts.map +1 -1
- package/dist/tools/prove-reach.js +80 -2
- package/dist/tools/prove-reach.js.map +1 -1
- package/dist/tools/reach.d.ts +6 -0
- package/dist/tools/reach.d.ts.map +1 -0
- package/dist/tools/reach.js +50 -0
- package/dist/tools/reach.js.map +1 -0
- package/dist/tools/runtime-journey-drive.d.ts.map +1 -1
- package/dist/tools/runtime-journey-drive.js +12 -1
- package/dist/tools/runtime-journey-drive.js.map +1 -1
- package/dist/tools/verb.d.ts +3 -0
- package/dist/tools/verb.d.ts.map +1 -1
- package/dist/tools/verb.js +7 -0
- package/dist/tools/verb.js.map +1 -1
- package/dist/tools/workspace.d.ts.map +1 -1
- package/dist/tools/workspace.js +10 -2
- package/dist/tools/workspace.js.map +1 -1
- package/package.json +22 -22
|
@@ -3,9 +3,35 @@
|
|
|
3
3
|
* R1 string-match `impact`/`propagation` already do. Precision over recall:
|
|
4
4
|
* anything unresolvable (no stack, no endpoint, ambiguous) drops the observation entirely rather than writing a weak edge. Never mints a denial.
|
|
5
5
|
*/
|
|
6
|
+
import { applyObservedInteractions } from "@descryy/core";
|
|
6
7
|
import { confirmObservedFrontendCaller, resolveEndpointNode } from "@descryy/runtime-graph-correlator";
|
|
7
8
|
import { isFailedRequest } from "./driver.js";
|
|
8
|
-
|
|
9
|
+
import { resolveActionIdentityGraphNode } from "./identity-graph-write.js";
|
|
10
|
+
export const NO_GRAPH_WRITE = {
|
|
11
|
+
reached: [],
|
|
12
|
+
promoted: [],
|
|
13
|
+
created: [],
|
|
14
|
+
refused: [],
|
|
15
|
+
contradictions: [],
|
|
16
|
+
interactions: [],
|
|
17
|
+
};
|
|
18
|
+
/** `ObservedAction`'s five element-targeting kinds, mapped to `observed_interactions`'s own
|
|
19
|
+
* two-way vocabulary — `chain`'s witnessed-click reader does not need the DOM-level
|
|
20
|
+
* distinction between typing, filling, selecting or submitting. `navigate` is excluded: it
|
|
21
|
+
* acts on the page, not an element, and carries no identity to resolve. */
|
|
22
|
+
function interactionActionOf(action) {
|
|
23
|
+
switch (action) {
|
|
24
|
+
case "click":
|
|
25
|
+
case "submit":
|
|
26
|
+
return "click";
|
|
27
|
+
case "type":
|
|
28
|
+
case "fill":
|
|
29
|
+
case "select":
|
|
30
|
+
return "input";
|
|
31
|
+
case "navigate":
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
9
35
|
/** Correlates what the page did against the graph, recording only what was genuinely witnessed. Runs over every request, not just failures — a successful call is what proves the arrow. */
|
|
10
36
|
export function writeBrowserObservations(input) {
|
|
11
37
|
const reached = [];
|
|
@@ -59,7 +85,34 @@ export function writeBrowserObservations(input) {
|
|
|
59
85
|
refused.push(...outcome.confirmation.refused.map((r) => r.reason));
|
|
60
86
|
contradictions.push(...outcome.confirmation.contradictions.map((c) => c.detail));
|
|
61
87
|
}
|
|
62
|
-
|
|
88
|
+
const interactions = [];
|
|
89
|
+
for (const action of input.actions ?? []) {
|
|
90
|
+
if (action.identity === null)
|
|
91
|
+
continue;
|
|
92
|
+
const kind = interactionActionOf(action.action);
|
|
93
|
+
if (kind === null)
|
|
94
|
+
continue;
|
|
95
|
+
const resolution = resolveActionIdentityGraphNode(input.driver, action.identity, input.repo, { repoRoot: input.repoRoot });
|
|
96
|
+
if (resolution.outcome !== "resolved") {
|
|
97
|
+
// `withheld` (no authored file/symbol, e.g. a refused or component-only identity) is
|
|
98
|
+
// the ordinary case for most clicks and not worth reporting per action — same reasoning
|
|
99
|
+
// as the endpoint-miss `continue` above. `not-found`/`ambiguous`/`line-mismatch` are a
|
|
100
|
+
// real graph-join gap and are disclosed.
|
|
101
|
+
if (resolution.outcome !== "withheld") {
|
|
102
|
+
refused.push(`${action.action} on ${action.ref ?? "an element"} named component "${action.identity.component ?? "?"}", ` +
|
|
103
|
+
`but the graph join ${resolution.outcome}: ${resolution.reason}`);
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
interactions.push({ nodeId: resolution.node.nodeId, name: resolution.node.name, type: resolution.node.type, via: { action: kind, ref: action.ref } });
|
|
108
|
+
const written = applyObservedInteractions(input.driver, {
|
|
109
|
+
runId: input.runId,
|
|
110
|
+
commitSha: input.commitSha,
|
|
111
|
+
observations: [{ nodeId: resolution.node.nodeId, action: kind }],
|
|
112
|
+
});
|
|
113
|
+
refused.push(...written.refused.map((r) => r.reason));
|
|
114
|
+
}
|
|
115
|
+
return { reached, promoted, created, refused, contradictions, interactions };
|
|
63
116
|
}
|
|
64
117
|
/** What a reply says about a write. Empty when nothing was reached — silence about nothing is not a disclosure gap. */
|
|
65
118
|
export function graphWriteNotes(write, requests) {
|
|
@@ -75,6 +128,11 @@ export function graphWriteNotes(write, requests) {
|
|
|
75
128
|
notes.push(`${write.reached.length} endpoint(s) in the graph were reached by this page, but no caller edge was ` +
|
|
76
129
|
"written — see data.graph.refused for why. The endpoints are named so the gap is visible rather than absent.");
|
|
77
130
|
}
|
|
131
|
+
if (write.interactions.length > 0) {
|
|
132
|
+
notes.push(`${write.interactions.length} click/input action(s) resolved to a real graph node (B1 identity ` +
|
|
133
|
+
`grounding) and were recorded as witnessed — ${write.interactions.map((i) => i.name).join(", ")}. chain's ` +
|
|
134
|
+
'"click" stage reads this for these exact nodes.');
|
|
135
|
+
}
|
|
78
136
|
// Always stated, not only when non-empty (F7, UAT Phase 5): `contradictions`
|
|
79
137
|
// covers one narrow thing — an observation disagreeing with an existing R4
|
|
80
138
|
// edge — and an empty array reads as "nothing disagreed" unless the scope is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-write.js","sourceRoot":"","sources":["../../src/browser/graph-write.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"graph-write.js","sourceRoot":"","sources":["../../src/browser/graph-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,14 @@
|
|
|
7
7
|
* `resolveSymbolNode`'s ambiguity refusal, line-mismatch reporting or path translation — it
|
|
8
8
|
* calls it and restates the outcome in this package's own node shape.
|
|
9
9
|
*
|
|
10
|
-
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS` node an
|
|
11
|
-
* already produced
|
|
10
|
+
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS`/`COMPONENT` node an
|
|
11
|
+
* adapter already produced (`@descryy/runtime-graph-correlator`'s `resolveSymbolNode` accepts
|
|
12
|
+
* `COMPONENT` alongside `FUNCTION`/`CLASS` as of this session). `descry-core`'s frozen 15/15
|
|
13
|
+
* vocabulary is untouched.
|
|
12
14
|
*/
|
|
13
15
|
import type { SqlDriver } from "@descryy/core";
|
|
14
16
|
import { type ElementIdentity } from "@descryy/runtime-identity-grounding";
|
|
17
|
+
import type { ElementComponentIdentity } from "./driver.ts";
|
|
15
18
|
/** The graph node an identity resolved to — only what a caller needs to name it, never the
|
|
16
19
|
* full `IRNode` (this package does not depend on `@descryy/ir`'s node shape beyond id/name/type). */
|
|
17
20
|
export interface IdentityGraphNode {
|
|
@@ -52,4 +55,25 @@ export declare function resolveIdentityGraphNode(driver: SqlDriver, identity: El
|
|
|
52
55
|
readonly repoRoot?: string;
|
|
53
56
|
readonly cwd?: string;
|
|
54
57
|
}): IdentityGraphOutcome;
|
|
58
|
+
/**
|
|
59
|
+
* The same join, for a `click`/`type`/`fill`/`select`/`submit` action's own `ElementComponentIdentity`
|
|
60
|
+
* (`driver.ts`) rather than the raw `ElementIdentity` a snapshot's grounder call returns.
|
|
61
|
+
*
|
|
62
|
+
* A deliberately separate entry point, not a second resolver: the two identity shapes really
|
|
63
|
+
* are different objects at this point in the pipeline. `ElementIdentity` only ever exists
|
|
64
|
+
* inside `playwright-driver.ts`, which restates it *structurally* rather than importing
|
|
65
|
+
* `@descryy/runtime-identity-grounding` (that file's own header explains why — it must stay
|
|
66
|
+
* buildable with no identity-grounding build present). By the time an action's evidence
|
|
67
|
+
* reaches this package's tool layer, all it carries is the already-flattened
|
|
68
|
+
* `ElementComponentIdentity` the port exposes — the same reduction `SnapshotElement.identity`
|
|
69
|
+
* carries. `symbolLocationForGraph`'s own three checks (grounded, authored, file present) are
|
|
70
|
+
* restated here against that narrower shape rather than reused, because there is no
|
|
71
|
+
* `ElementIdentity` value in hand to hand it — `resolveSymbolNode` underneath is the one thing
|
|
72
|
+
* actually reused, which is where the real graph-join logic (ambiguity, line check, path
|
|
73
|
+
* translation) lives. See DEC-NEXT-witnessed-click-is-a-node-ledger-not-an-edge.md.
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolveActionIdentityGraphNode(driver: SqlDriver, identity: ElementComponentIdentity, repo: string, options?: {
|
|
76
|
+
readonly repoRoot?: string;
|
|
77
|
+
readonly cwd?: string;
|
|
78
|
+
}): IdentityGraphOutcome;
|
|
55
79
|
//# sourceMappingURL=identity-graph-write.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph-write.d.ts","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"identity-graph-write.d.ts","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEnG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D;sGACsG;AACtG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC5D;;;;8EAI8E;GAC5E;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,oBAAoB,CAsBtB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,oBAAoB,CA0BtB"}
|
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
* `resolveSymbolNode`'s ambiguity refusal, line-mismatch reporting or path translation — it
|
|
8
8
|
* calls it and restates the outcome in this package's own node shape.
|
|
9
9
|
*
|
|
10
|
-
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS` node an
|
|
11
|
-
* already produced
|
|
10
|
+
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS`/`COMPONENT` node an
|
|
11
|
+
* adapter already produced (`@descryy/runtime-graph-correlator`'s `resolveSymbolNode` accepts
|
|
12
|
+
* `COMPONENT` alongside `FUNCTION`/`CLASS` as of this session). `descry-core`'s frozen 15/15
|
|
13
|
+
* vocabulary is untouched.
|
|
12
14
|
*/
|
|
13
15
|
import { resolveSymbolNode } from "@descryy/runtime-graph-correlator";
|
|
14
16
|
import { symbolLocationForGraph } from "@descryy/runtime-identity-grounding";
|
|
@@ -42,4 +44,44 @@ export function resolveIdentityGraphNode(driver, identity, repo, options = {}) {
|
|
|
42
44
|
function toGraphNode(node) {
|
|
43
45
|
return { nodeId: node.id, name: node.name, type: node.type };
|
|
44
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The same join, for a `click`/`type`/`fill`/`select`/`submit` action's own `ElementComponentIdentity`
|
|
49
|
+
* (`driver.ts`) rather than the raw `ElementIdentity` a snapshot's grounder call returns.
|
|
50
|
+
*
|
|
51
|
+
* A deliberately separate entry point, not a second resolver: the two identity shapes really
|
|
52
|
+
* are different objects at this point in the pipeline. `ElementIdentity` only ever exists
|
|
53
|
+
* inside `playwright-driver.ts`, which restates it *structurally* rather than importing
|
|
54
|
+
* `@descryy/runtime-identity-grounding` (that file's own header explains why — it must stay
|
|
55
|
+
* buildable with no identity-grounding build present). By the time an action's evidence
|
|
56
|
+
* reaches this package's tool layer, all it carries is the already-flattened
|
|
57
|
+
* `ElementComponentIdentity` the port exposes — the same reduction `SnapshotElement.identity`
|
|
58
|
+
* carries. `symbolLocationForGraph`'s own three checks (grounded, authored, file present) are
|
|
59
|
+
* restated here against that narrower shape rather than reused, because there is no
|
|
60
|
+
* `ElementIdentity` value in hand to hand it — `resolveSymbolNode` underneath is the one thing
|
|
61
|
+
* actually reused, which is where the real graph-join logic (ambiguity, line check, path
|
|
62
|
+
* translation) lives. See DEC-NEXT-witnessed-click-is-a-node-ledger-not-an-edge.md.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveActionIdentityGraphNode(driver, identity, repo, options = {}) {
|
|
65
|
+
if (identity.outcome !== "grounded" || !identity.authoredSource || identity.file === null || identity.component === null) {
|
|
66
|
+
return {
|
|
67
|
+
outcome: "withheld",
|
|
68
|
+
reason: "identity grounding did not produce an authored file, component and symbol for this action's target " +
|
|
69
|
+
"element — see the element's own identity outcome (grounded/component-only/refused) for why.",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const location = identity.line === null
|
|
73
|
+
? { file: identity.file, symbolName: identity.component }
|
|
74
|
+
: { file: identity.file, symbolName: identity.component, line: identity.line };
|
|
75
|
+
const resolution = resolveSymbolNode(driver, location, repo, options);
|
|
76
|
+
switch (resolution.outcome) {
|
|
77
|
+
case "resolved":
|
|
78
|
+
return { outcome: "resolved", node: toGraphNode(resolution.node) };
|
|
79
|
+
case "line-mismatch":
|
|
80
|
+
return { outcome: "line-mismatch", node: toGraphNode(resolution.node), reason: resolution.reason };
|
|
81
|
+
case "not-found":
|
|
82
|
+
return { outcome: "not-found", reason: resolution.reason };
|
|
83
|
+
case "ambiguous":
|
|
84
|
+
return { outcome: "ambiguous", reason: resolution.reason };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
45
87
|
//# sourceMappingURL=identity-graph-write.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph-write.js","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"identity-graph-write.js","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,6 +107,7 @@ export interface EmittedEvidence {
|
|
|
107
107
|
readonly requestId: string | null;
|
|
108
108
|
readonly timestamp: string;
|
|
109
109
|
}
|
|
110
|
+
export declare function sharedBrowserManagerForModule(runtime: object): unknown;
|
|
110
111
|
export declare function disposeSharedPlaywrightBrowsers(): Promise<void>;
|
|
111
112
|
export declare function createPlaywrightBrowserDriver(options?: PlaywrightDriverOptions): Promise<BrowserDriver>;
|
|
112
113
|
/** Turns collector evidence into the port's vocabulary. Joins request/response on `requestId`, keeping `status: null` (not guessed) when unanswered. Exported for `browser-request-outcome-mapping.test.ts`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-driver.d.ts","sourceRoot":"","sources":["../../src/browser/playwright-driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAO7E,oOAAoO;AACpO,UAAU,aAAa;IACrB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;CAC1G;AAED,UAAU,WAAY,SAAQ,aAAa;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC;;uGAEmG;IACnG,WAAW,CAAC,IAAI,QAAQ,CAAC;IACzB;yFACqF;IACrF,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxG,gGAAgG;IAChG,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;mEAI+D;IAC/D,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;IACtE,yFAAyF;IACzF,cAAc,CAAC,IAAI;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,qGAAqG;AACrG,UAAU,QAAS,SAAQ,aAAa;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED;;4FAE4F;AAC5F,UAAU,eAAe;IACvB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AA2BD,OAAO,KAAK,EACV,aAAa,EASb,kBAAkB,EAKlB,cAAc,
|
|
1
|
+
{"version":3,"file":"playwright-driver.d.ts","sourceRoot":"","sources":["../../src/browser/playwright-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
16
16
|
// backend is installed. Currently blocked on a runtime release: @descryy/mcp pins
|
|
17
17
|
// @descryy/runtime-controller at 0.3.5, which predates preflight.ts.
|
|
18
18
|
import { runPreflight, portAnswersCheck } from "@descryy/runtime-controller";
|
|
19
|
-
import { BrowserSessionCrashedError, NoSuchOptionError, NotOperableError, NotSelectableError, NotSubmittableError, UnknownElementRefError, } from "./driver.js";
|
|
19
|
+
import { BrowserSessionCrashedError, NoActiveRecordingError, NoSuchOptionError, NotOperableError, NotSelectableError, NotSubmittableError, RecordingAlreadyActiveError, UnknownElementRefError, recordedSecretCredentialName, recordedSecretPlaceholder, } from "./driver.js";
|
|
20
20
|
import { clampWaitTimeout, describeWaitTarget, isEmptyWaitTarget, matchesWaitTarget, WAIT_POLL_INTERVAL_MS, } from "./wait-target.js";
|
|
21
21
|
import { PROBE_CONSTANTS, probeInPage } from "./page-probe.js";
|
|
22
22
|
/** The module the driver composes. Named once, imported at call time. */
|
|
@@ -496,6 +496,9 @@ function sharedBrowserManagerFor(runtime) {
|
|
|
496
496
|
sharedBrowserManagers.set(runtime, created);
|
|
497
497
|
return created;
|
|
498
498
|
}
|
|
499
|
+
export function sharedBrowserManagerForModule(runtime) {
|
|
500
|
+
return sharedBrowserManagerFor(runtime);
|
|
501
|
+
}
|
|
499
502
|
export async function disposeSharedPlaywrightBrowsers() {
|
|
500
503
|
const managers = [...sharedBrowserManagers.values()];
|
|
501
504
|
sharedBrowserManagers.clear();
|
|
@@ -579,6 +582,32 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
579
582
|
* (§B1's `identity: null` distinction — see `driver.ts`). */
|
|
580
583
|
let grounder = null;
|
|
581
584
|
const sessionWarnings = [...launchNotes];
|
|
585
|
+
// Decided once, at open time, from whether the installed runtime exports the collector at
|
|
586
|
+
// all — never from anything about the page, the same discipline the fake driver's own
|
|
587
|
+
// `recordingDisabled` flag follows: a driver either can record or it cannot, and that must
|
|
588
|
+
// not flicker mid-session. `null` is this build's honest "cannot record" — `startRecording`/
|
|
589
|
+
// `stopRecording` are added to `api` below only when this is non-null, and are otherwise
|
|
590
|
+
// simply absent (rule 7).
|
|
591
|
+
const recordingCollector = typeof runtime.createBrowserRecordingCollector === "function" ? runtime.createBrowserRecordingCollector({ session }) : null;
|
|
592
|
+
let recordingActive = false;
|
|
593
|
+
// This session's own running count of secrets redacted so far — ordinal-suffixed even when
|
|
594
|
+
// an element's name would slug cleanly alone, so two distinct password fields recorded in one
|
|
595
|
+
// pass never collide onto the same credential name (`recordedSecretCredentialName`'s own doc).
|
|
596
|
+
let recordingSecretOrdinal = 0;
|
|
597
|
+
/** `RuntimeRecordedInteraction` -> `PerformedStep`, the one place the two vocabularies join —
|
|
598
|
+
* mirrors `mapIdentity` above in spirit. A secret interaction's `text` is never the literal
|
|
599
|
+
* value (the collector never sent one); it becomes this session's next credential placeholder. */
|
|
600
|
+
function mapRecordedInteraction(interaction) {
|
|
601
|
+
const target = interaction.target === null
|
|
602
|
+
? null
|
|
603
|
+
: { role: interaction.target.role, name: interaction.target.name, selector: interaction.target.selector };
|
|
604
|
+
let text = interaction.text;
|
|
605
|
+
if (interaction.secret) {
|
|
606
|
+
recordingSecretOrdinal += 1;
|
|
607
|
+
text = recordedSecretPlaceholder(recordedSecretCredentialName(interaction.target?.name ?? "", recordingSecretOrdinal));
|
|
608
|
+
}
|
|
609
|
+
return { action: interaction.action, target, url: interaction.url, text, at: interaction.at };
|
|
610
|
+
}
|
|
582
611
|
const context = {
|
|
583
612
|
executionId: `mcp-browser-${session.sessionId}`,
|
|
584
613
|
configuration: { environmentTier: "tier-2-container", fidelityLevel: 2, timeoutMs: 30_000, services: {} },
|
|
@@ -638,8 +667,8 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
638
667
|
throw new UnknownElementRefError(ref);
|
|
639
668
|
return found;
|
|
640
669
|
}
|
|
641
|
-
function recordAction(action, ref, mode) {
|
|
642
|
-
actions.push({ action, ref, mode, url: session.page.url(), at: new Date().toISOString() });
|
|
670
|
+
function recordAction(action, ref, mode, identity = null) {
|
|
671
|
+
actions.push({ action, ref, mode, url: session.page.url(), at: new Date().toISOString(), identity });
|
|
643
672
|
}
|
|
644
673
|
function recordPerformed(action, target, url, text) {
|
|
645
674
|
performed.push({ action, target, url, text, at: new Date().toISOString() });
|
|
@@ -1000,7 +1029,7 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1000
1029
|
assertUsable();
|
|
1001
1030
|
const { element, handle } = resolve(ref);
|
|
1002
1031
|
await handle.click();
|
|
1003
|
-
recordAction("click", ref, null);
|
|
1032
|
+
recordAction("click", ref, null, element.identity);
|
|
1004
1033
|
recordPerformed("click", { role: element.role, name: element.name, selector: element.selector }, null, null);
|
|
1005
1034
|
// requestfinished fires after the page's handler resolves; draining immediately would miss the very request being watched for.
|
|
1006
1035
|
await settleAfterAction("click", ref);
|
|
@@ -1014,7 +1043,7 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1014
1043
|
await handle.type(text);
|
|
1015
1044
|
else
|
|
1016
1045
|
throw new Error("this Playwright build exposes no keystroke-level typing method");
|
|
1017
|
-
recordAction("type", ref, "append");
|
|
1046
|
+
recordAction("type", ref, "append", element.identity);
|
|
1018
1047
|
recordPerformed("type", { role: element.role, name: element.name, selector: element.selector }, null, text);
|
|
1019
1048
|
await settleAfterAction("type", ref);
|
|
1020
1049
|
},
|
|
@@ -1022,7 +1051,7 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1022
1051
|
assertUsable();
|
|
1023
1052
|
const { element, handle } = resolve(ref);
|
|
1024
1053
|
await handle.fill(text);
|
|
1025
|
-
recordAction("fill", ref, "replace");
|
|
1054
|
+
recordAction("fill", ref, "replace", element.identity);
|
|
1026
1055
|
recordPerformed("fill", { role: element.role, name: element.name, selector: element.selector }, null, text);
|
|
1027
1056
|
await settleAfterAction("fill", ref);
|
|
1028
1057
|
},
|
|
@@ -1056,7 +1085,7 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1056
1085
|
if (handle.selectOption === undefined)
|
|
1057
1086
|
throw new Error("this Playwright build exposes no option-selecting method");
|
|
1058
1087
|
await handle.selectOption(matched.value);
|
|
1059
|
-
recordAction("select", ref, "replace");
|
|
1088
|
+
recordAction("select", ref, "replace", element.identity);
|
|
1060
1089
|
recordPerformed("select", { role: element.role, name: element.name, selector: element.selector }, null, matched.value);
|
|
1061
1090
|
await settleAfterAction("select", ref);
|
|
1062
1091
|
},
|
|
@@ -1080,7 +1109,7 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1080
1109
|
});
|
|
1081
1110
|
if (outcome !== "submitted")
|
|
1082
1111
|
throw new NotSubmittableError(ref, outcome);
|
|
1083
|
-
recordAction("submit", ref, null);
|
|
1112
|
+
recordAction("submit", ref, null, element.identity);
|
|
1084
1113
|
recordPerformed("submit", { role: element.role, name: element.name, selector: element.selector }, null, null);
|
|
1085
1114
|
await settleAfterAction("submit", ref);
|
|
1086
1115
|
},
|
|
@@ -1140,6 +1169,35 @@ async function openSession(runtime, session, launchOptions, options, launchNotes
|
|
|
1140
1169
|
return [...performed];
|
|
1141
1170
|
},
|
|
1142
1171
|
storageStateSaveFailure: () => storageStateSaveError,
|
|
1172
|
+
// `startRecording`/`stopRecording` (driver.ts) land here as real methods only when the
|
|
1173
|
+
// installed `@descryy/runtime-browser` exports the collector (`recordingCollector !== null`,
|
|
1174
|
+
// decided once above, at open time). Otherwise the two members are genuinely absent, never
|
|
1175
|
+
// present with a body that silently captures nothing (rule 7): `record_start` reads the
|
|
1176
|
+
// absence and refuses by name. See
|
|
1177
|
+
// `documents/decisions-inbox/DEC-NEXT-browser-recording-primitive.md` for the cross-repo
|
|
1178
|
+
// history and what `@descryy/runtime-browser` had to add for this to light up.
|
|
1179
|
+
...(recordingCollector === null
|
|
1180
|
+
? {}
|
|
1181
|
+
: {
|
|
1182
|
+
async startRecording() {
|
|
1183
|
+
assertUsable();
|
|
1184
|
+
if (recordingActive)
|
|
1185
|
+
throw new RecordingAlreadyActiveError(session.sessionId);
|
|
1186
|
+
await recordingCollector.start();
|
|
1187
|
+
recordingActive = true;
|
|
1188
|
+
},
|
|
1189
|
+
async stopRecording() {
|
|
1190
|
+
assertUsable();
|
|
1191
|
+
if (!recordingActive)
|
|
1192
|
+
throw new NoActiveRecordingError(session.sessionId);
|
|
1193
|
+
recordingActive = false;
|
|
1194
|
+
const interactions = await recordingCollector.stop();
|
|
1195
|
+
const steps = interactions.map(mapRecordedInteraction);
|
|
1196
|
+
for (const step of steps)
|
|
1197
|
+
performed.push(step);
|
|
1198
|
+
return steps;
|
|
1199
|
+
},
|
|
1200
|
+
}),
|
|
1143
1201
|
/**
|
|
1144
1202
|
* §4.2's probe. Reads the page and counts; decides nothing — `estimateReach`
|
|
1145
1203
|
* is the only thing that turns these counts into a claim, so a change of
|