@descryy/mcp 0.2.0 → 0.3.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 +6 -1
- package/dist/bin/descry-mcp.js.map +1 -1
- package/dist/browser/driver.d.ts +236 -0
- package/dist/browser/driver.d.ts.map +1 -0
- package/dist/browser/driver.js +70 -0
- package/dist/browser/driver.js.map +1 -0
- package/dist/browser/evidence.d.ts +47 -0
- package/dist/browser/evidence.d.ts.map +1 -0
- package/dist/browser/evidence.js +55 -0
- package/dist/browser/evidence.js.map +1 -0
- package/dist/browser/fake-driver.d.ts +58 -0
- package/dist/browser/fake-driver.d.ts.map +1 -0
- package/dist/browser/fake-driver.js +161 -0
- package/dist/browser/fake-driver.js.map +1 -0
- package/dist/browser/graph-write.d.ts +86 -0
- package/dist/browser/graph-write.d.ts.map +1 -0
- package/dist/browser/graph-write.js +135 -0
- package/dist/browser/graph-write.js.map +1 -0
- package/dist/browser/playwright-driver.d.ts +65 -0
- package/dist/browser/playwright-driver.d.ts.map +1 -0
- package/dist/browser/playwright-driver.js +359 -0
- package/dist/browser/playwright-driver.js.map +1 -0
- package/dist/browser/provider.d.ts +49 -0
- package/dist/browser/provider.d.ts.map +1 -0
- package/dist/browser/provider.js +28 -0
- package/dist/browser/provider.js.map +1 -0
- package/dist/browser/registry.d.ts +182 -0
- package/dist/browser/registry.d.ts.map +1 -0
- package/dist/browser/registry.js +215 -0
- package/dist/browser/registry.js.map +1 -0
- package/dist/browser/scenario-resolve.d.ts +62 -0
- package/dist/browser/scenario-resolve.d.ts.map +1 -0
- package/dist/browser/scenario-resolve.js +127 -0
- package/dist/browser/scenario-resolve.js.map +1 -0
- package/dist/browser/scenario-runner.d.ts +113 -0
- package/dist/browser/scenario-runner.d.ts.map +1 -0
- package/dist/browser/scenario-runner.js +315 -0
- package/dist/browser/scenario-runner.js.map +1 -0
- package/dist/browser/stack-parser.d.ts +43 -0
- package/dist/browser/stack-parser.d.ts.map +1 -0
- package/dist/browser/stack-parser.js +112 -0
- package/dist/browser/stack-parser.js.map +1 -0
- package/dist/browser/tool-support.d.ts +113 -0
- package/dist/browser/tool-support.d.ts.map +1 -0
- package/dist/browser/tool-support.js +181 -0
- package/dist/browser/tool-support.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/render.d.ts +112 -10
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +79 -13
- package/dist/render.js.map +1 -1
- package/dist/scenarios/index.d.ts +4 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +4 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/parse.d.ts +32 -0
- package/dist/scenarios/parse.d.ts.map +1 -0
- package/dist/scenarios/parse.js +199 -0
- package/dist/scenarios/parse.js.map +1 -0
- package/dist/scenarios/scenario.d.ts +115 -0
- package/dist/scenarios/scenario.d.ts.map +1 -0
- package/dist/scenarios/scenario.js +41 -0
- package/dist/scenarios/scenario.js.map +1 -0
- package/dist/scenarios/storage.d.ts +51 -0
- package/dist/scenarios/storage.d.ts.map +1 -0
- package/dist/scenarios/storage.js +93 -0
- package/dist/scenarios/storage.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -3
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +68 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +89 -0
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +41 -1
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +81 -8
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/browser-click.d.ts +36 -0
- package/dist/tools/browser-click.d.ts.map +1 -0
- package/dist/tools/browser-click.js +117 -0
- package/dist/tools/browser-click.js.map +1 -0
- package/dist/tools/browser-close-session.d.ts +24 -0
- package/dist/tools/browser-close-session.d.ts.map +1 -0
- package/dist/tools/browser-close-session.js +63 -0
- package/dist/tools/browser-close-session.js.map +1 -0
- package/dist/tools/browser-fill.d.ts +49 -0
- package/dist/tools/browser-fill.d.ts.map +1 -0
- package/dist/tools/browser-fill.js +138 -0
- package/dist/tools/browser-fill.js.map +1 -0
- package/dist/tools/browser-navigate.d.ts +32 -0
- package/dist/tools/browser-navigate.d.ts.map +1 -0
- package/dist/tools/browser-navigate.js +103 -0
- package/dist/tools/browser-navigate.js.map +1 -0
- package/dist/tools/browser-run-scenario.d.ts +54 -0
- package/dist/tools/browser-run-scenario.d.ts.map +1 -0
- package/dist/tools/browser-run-scenario.js +228 -0
- package/dist/tools/browser-run-scenario.js.map +1 -0
- package/dist/tools/browser-save-scenario.d.ts +44 -0
- package/dist/tools/browser-save-scenario.d.ts.map +1 -0
- package/dist/tools/browser-save-scenario.js +298 -0
- package/dist/tools/browser-save-scenario.js.map +1 -0
- package/dist/tools/browser-snapshot.d.ts +60 -0
- package/dist/tools/browser-snapshot.d.ts.map +1 -0
- package/dist/tools/browser-snapshot.js +139 -0
- package/dist/tools/browser-snapshot.js.map +1 -0
- package/dist/tools/browser-start-session.d.ts +43 -0
- package/dist/tools/browser-start-session.d.ts.map +1 -0
- package/dist/tools/browser-start-session.js +272 -0
- package/dist/tools/browser-start-session.js.map +1 -0
- package/dist/tools/browser-type.d.ts +48 -0
- package/dist/tools/browser-type.d.ts.map +1 -0
- package/dist/tools/browser-type.js +136 -0
- package/dist/tools/browser-type.js.map +1 -0
- package/dist/tools/contracts.d.ts +15 -0
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +14 -3
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/git-diff.d.ts.map +1 -1
- package/dist/tools/git-diff.js +85 -6
- package/dist/tools/git-diff.js.map +1 -1
- package/dist/tools/impact.d.ts +9 -0
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +3 -3
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kit.d.ts +10 -1
- package/dist/tools/kit.d.ts.map +1 -1
- package/dist/tools/kit.js +2 -0
- package/dist/tools/kit.js.map +1 -1
- package/dist/tools/observe-runtime.d.ts +113 -19
- package/dist/tools/observe-runtime.d.ts.map +1 -1
- package/dist/tools/observe-runtime.js +293 -52
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/observe-tests.d.ts +125 -0
- package/dist/tools/observe-tests.d.ts.map +1 -0
- package/dist/tools/observe-tests.js +313 -0
- package/dist/tools/observe-tests.js.map +1 -0
- package/dist/tools/pr-analysis.d.ts +11 -0
- package/dist/tools/pr-analysis.d.ts.map +1 -1
- package/dist/tools/pr-analysis.js +3 -3
- package/dist/tools/pr-analysis.js.map +1 -1
- package/dist/tools/pre-push.d.ts +77 -0
- package/dist/tools/pre-push.d.ts.map +1 -0
- package/dist/tools/pre-push.js +250 -0
- package/dist/tools/pre-push.js.map +1 -0
- package/dist/tools/questions.d.ts.map +1 -1
- package/dist/tools/questions.js +41 -16
- package/dist/tools/questions.js.map +1 -1
- package/dist/tools/verification-status.d.ts +22 -0
- package/dist/tools/verification-status.d.ts.map +1 -1
- package/dist/tools/verification-status.js +51 -5
- package/dist/tools/verification-status.js.map +1 -1
- package/package.json +14 -13
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `browser_type` — type into a field with real keystrokes.
|
|
3
|
+
*
|
|
4
|
+
* ## Consent, and why this tool asks for none
|
|
5
|
+
*
|
|
6
|
+
* `DEC-380` grants consent once, at
|
|
7
|
+
* `browser_start_session`, bound to that call's origin. So this tool declares
|
|
8
|
+
* `class: "action"` — it does change a running application, and pretending
|
|
9
|
+
* otherwise would be the lie — while its `describeAction` returns `undefined`,
|
|
10
|
+
* the existing "this particular call has nothing to confirm" path that
|
|
11
|
+
* `questions` uses when asked to read rather than write.
|
|
12
|
+
*
|
|
13
|
+
* The property that makes that safe rather than merely cheap: **a verb cannot
|
|
14
|
+
* mint consent for itself.** Called against a session with no consent record,
|
|
15
|
+
* it refuses. There is deliberately no path from a click to a token.
|
|
16
|
+
*
|
|
17
|
+
* ## A ref, never a selector
|
|
18
|
+
*
|
|
19
|
+
* The element is named by a ref from a snapshot the calling agent actually
|
|
20
|
+
* saw. A raw selector would let an agent act on an element it never looked
|
|
21
|
+
* at, and a ref from a superseded snapshot refuses rather than resolving
|
|
22
|
+
* against whatever now matches — that is the same mistake, arriving later.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* ## Why this is not the same tool as `browser_fill`
|
|
26
|
+
*
|
|
27
|
+
* The visible difference is that this appends and `fill` replaces. The
|
|
28
|
+
* difference that decides which one is correct for a real page is that **this
|
|
29
|
+
* one fires key events and `fill` fires none.** A field that opens an
|
|
30
|
+
* autocomplete on keydown, validates per character, or debounces a search as
|
|
31
|
+
* you type sees nothing at all from a `fill`. An agent that reaches for
|
|
32
|
+
* `fill` on a search box gets a page that was never typed into — a wrong
|
|
33
|
+
* answer produced by entirely correct tool code, which is why the schema
|
|
34
|
+
* prose below says so rather than describing only the tidy half.
|
|
35
|
+
*/
|
|
36
|
+
import { browserAnswer, emptyEvidence, mutationRefusal, observeAndCorrelate, useSession } from "../browser/tool-support.js";
|
|
37
|
+
import { NO_GRAPH_WRITE } from "../browser/graph-write.js";
|
|
38
|
+
import { UnknownElementRefError } from "../browser/driver.js";
|
|
39
|
+
import { requiredString } from "./kit.js";
|
|
40
|
+
const SCHEMA = {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
sessionId: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "REQUIRED. The id returned by browser_start_session.",
|
|
46
|
+
},
|
|
47
|
+
ref: {
|
|
48
|
+
type: "string",
|
|
49
|
+
description: "REQUIRED. An element ref from a browser_snapshot reply. Refs are issued per snapshot and are " +
|
|
50
|
+
"invalidated by navigation — a stale ref is refused rather than resolved against whatever now " +
|
|
51
|
+
"matches it, so take a fresh snapshot after the page changes.",
|
|
52
|
+
},
|
|
53
|
+
text: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "REQUIRED. The text to type. It is entered as real keystrokes and APPENDS to whatever the field " +
|
|
56
|
+
"already contains — use browser_fill to replace the contents instead.",
|
|
57
|
+
},
|
|
58
|
+
confirmToken: {
|
|
59
|
+
type: "string",
|
|
60
|
+
description: "Not normally needed. Consent is granted once, for the whole session, by browser_start_session, " +
|
|
61
|
+
"so this call performs its action directly. The field is declared because the handshake reads it " +
|
|
62
|
+
"for every action-class tool.",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ["sessionId", "ref", "text"],
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
};
|
|
68
|
+
async function run(args, ctx) {
|
|
69
|
+
const sessionId = requiredString(args, "sessionId");
|
|
70
|
+
const ref = requiredString(args, "ref");
|
|
71
|
+
const text = requiredString(args, "text");
|
|
72
|
+
const found = await useSession(ctx.session.browserSessions(), sessionId);
|
|
73
|
+
if (!found.ok) {
|
|
74
|
+
return browserAnswer({
|
|
75
|
+
ctx,
|
|
76
|
+
state: found.dead.state,
|
|
77
|
+
headline: found.dead.headline,
|
|
78
|
+
notes: found.dead.notes,
|
|
79
|
+
data: { sessionId, ref, url: "", evidence: found.dead.evidence, graph: NO_GRAPH_WRITE },
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const { entry } = found;
|
|
83
|
+
// Consent and safetyLevel are independent and both must pass. Consent was
|
|
84
|
+
// granted at session start; this is the other half.
|
|
85
|
+
const refused = mutationRefusal(entry);
|
|
86
|
+
if (refused !== null) {
|
|
87
|
+
return browserAnswer({
|
|
88
|
+
ctx,
|
|
89
|
+
state: "refused",
|
|
90
|
+
headline: `${entry.profile?.name ?? "This environment"} is read-only.`,
|
|
91
|
+
notes: [refused],
|
|
92
|
+
data: { sessionId, ref, url: entry.page.currentUrl(), evidence: emptyEvidence(), graph: NO_GRAPH_WRITE },
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
ctx.progress(`Typing`);
|
|
97
|
+
await entry.page.type(ref, text);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (!(error instanceof UnknownElementRefError))
|
|
101
|
+
throw error;
|
|
102
|
+
return browserAnswer({
|
|
103
|
+
ctx,
|
|
104
|
+
state: "refused",
|
|
105
|
+
headline: `"${ref}" is not an element in this session's current snapshot.`,
|
|
106
|
+
notes: [error.message],
|
|
107
|
+
data: { sessionId, ref, url: entry.page.currentUrl(), evidence: emptyEvidence(), graph: NO_GRAPH_WRITE },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const observed = await observeAndCorrelate(ctx, entry);
|
|
111
|
+
return browserAnswer({
|
|
112
|
+
ctx,
|
|
113
|
+
headline: `Typing on ${entry.page.currentUrl()}.`,
|
|
114
|
+
notes: observed.notes,
|
|
115
|
+
data: { sessionId, ref, url: entry.page.currentUrl(), evidence: observed.evidence, graph: observed.graph },
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export const browserTypeTool = {
|
|
119
|
+
name: "browser_type",
|
|
120
|
+
title: "type into a field with real keystrokes",
|
|
121
|
+
description: "Type text into a field in an open browser session, as real keystrokes — every keydown, keypress and " +
|
|
122
|
+
"keyup the page would see from a person typing. Use this, not browser_fill, whenever the field reacts " +
|
|
123
|
+
"to typing: autocomplete, per-character validation, or a debounced search. Appends to what the field " +
|
|
124
|
+
"already holds. Refused when the session's environment profile declares safetyLevel \"readOnly\".",
|
|
125
|
+
class: "action",
|
|
126
|
+
tier: "evidence",
|
|
127
|
+
version: "1.0.0",
|
|
128
|
+
inputSchema: SCHEMA,
|
|
129
|
+
run,
|
|
130
|
+
// Undefined, always: the session this runs in was confirmed at
|
|
131
|
+
// browser_start_session, and a verb that could describe — and therefore
|
|
132
|
+
// mint — its own consent would be a gate that exists only for callers who
|
|
133
|
+
// were not going to abuse it.
|
|
134
|
+
describeAction: () => undefined,
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=browser-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-type.js","sourceRoot":"","sources":["../../src/tools/browser-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,21 @@ import { type BriefNode, type ToolDefinition } from "./kit.ts";
|
|
|
27
27
|
/** A call that reaches no route, or a route nothing calls. */
|
|
28
28
|
export interface ContractPathFinding {
|
|
29
29
|
readonly kind: ContractFindingKind;
|
|
30
|
+
/** 1-based position in this answer. See {@link ContractPathFinding.prominence} for what orders it. */
|
|
31
|
+
readonly rank: number;
|
|
32
|
+
/**
|
|
33
|
+
* `top` / `notable` / `rest`, ordered by **evidence strength** — the
|
|
34
|
+
* finding's own `resolution`, strongest first — and not by severity.
|
|
35
|
+
*
|
|
36
|
+
* Descry has no severity model for a contract finding and inventing one here
|
|
37
|
+
* would be a judgement dressed as a measurement: a call reaching no route and
|
|
38
|
+
* a route nothing calls are different problems, and which matters more is a
|
|
39
|
+
* fact about the codebase, not about the graph. What the graph does know is
|
|
40
|
+
* how well-resolved each finding is, and a reader triaging a list is better
|
|
41
|
+
* served by "this one rests on the strongest evidence" than by an invented
|
|
42
|
+
* ranking. The tool's own notes say this rather than leaving it inferred.
|
|
43
|
+
*/
|
|
44
|
+
readonly prominence: "top" | "notable" | "rest";
|
|
30
45
|
readonly method: string;
|
|
31
46
|
/** The normalised path template, not the raw literal. */
|
|
32
47
|
readonly path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,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,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;CACtC;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;;;;;;GAMG;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;CAC3C;
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,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,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;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;CACtC;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;;;;;;GAMG;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;CAC3C;AAwID,eAAO,MAAM,aAAa,EAAE,cAe3B,CAAC"}
|
package/dist/tools/contracts.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* The one case that *is* `refused` outright: no endpoints in the graph.
|
|
22
22
|
* Then neither half looked at anything.
|
|
23
23
|
*/
|
|
24
|
-
import { checkContracts } from "@descryy/core";
|
|
24
|
+
import { checkContracts, withProminence } from "@descryy/core";
|
|
25
25
|
import { briefNode, optionalInteger, optionalStringArray, } from "./kit.js";
|
|
26
26
|
const SCHEMA = {
|
|
27
27
|
type: "object",
|
|
@@ -68,6 +68,11 @@ async function run(args, ctx) {
|
|
|
68
68
|
"below describe the whole graph; the lists describe the filter.");
|
|
69
69
|
}
|
|
70
70
|
const total = findings.length + mismatches.length;
|
|
71
|
+
if (findings.length > 0) {
|
|
72
|
+
notes.push("findings are ranked by evidence strength — their own resolution, strongest first — not by " +
|
|
73
|
+
"severity. Descry has no severity model for a contract finding: which of a missing route " +
|
|
74
|
+
"and an uncalled route matters more is a fact about your codebase, not about the graph.");
|
|
75
|
+
}
|
|
71
76
|
const nothingToCheck = paths.checked.endpoints === 0;
|
|
72
77
|
// MK-7: the leading clause. Every path finding and shape mismatch here is a
|
|
73
78
|
// real defect — `contracts.ts`'s own header on `nearMiss` is what keeps a
|
|
@@ -78,7 +83,13 @@ async function run(args, ctx) {
|
|
|
78
83
|
result: {
|
|
79
84
|
...checked,
|
|
80
85
|
data: {
|
|
81
|
-
findings:
|
|
86
|
+
findings: withProminence(
|
|
87
|
+
// Sorted before ranking, because `withProminence` deliberately does
|
|
88
|
+
// not sort: rank must follow the order the reply actually reports.
|
|
89
|
+
// Ties keep the checker's own order, which is stable.
|
|
90
|
+
[...findings]
|
|
91
|
+
.sort((a, b) => b.resolution - a.resolution)
|
|
92
|
+
.map((f) => ({
|
|
82
93
|
kind: f.kind,
|
|
83
94
|
method: f.method,
|
|
84
95
|
path: f.pathTemplate,
|
|
@@ -89,7 +100,7 @@ async function run(args, ctx) {
|
|
|
89
100
|
: { nearMiss: { kind: f.nearMiss.kind, against: f.nearMiss.against } }),
|
|
90
101
|
callers: f.callers.slice(0, 5).map(briefNode),
|
|
91
102
|
routes: f.routes.slice(0, 5).map(briefNode),
|
|
92
|
-
})),
|
|
103
|
+
}))),
|
|
93
104
|
shapeMismatches: mismatches.map((m) => ({
|
|
94
105
|
endpoint: m.endpoint.name,
|
|
95
106
|
direction: m.direction,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW/
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW/D,OAAO,EACL,SAAS,EACT,eAAe,EACf,mBAAmB,GAIpB,MAAM,UAAU,CAAC;AAgGlB,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EACT,wFAAwF;gBACxF,+BAA+B;SAClC;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EACT,yFAAyF;gBACzF,iCAAiC;SACpC;QACD,WAAW,EAAE;YACX,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,gFAAgF;SAC9F;KACF;IACD,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAEX,KAAK,UAAU,GAAG,CAChB,IAA6B,EAC7B,GAAgB;IAEhB,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAE7C,GAAG,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAEjC,2EAA2E;IAC3E,+EAA+E;IAC/E,0EAA0E;IAC1E,+CAA+C;IAC/C,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC5C,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACrE,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CACR,kCAAkC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;YACtF,gEAAgE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CACR,4FAA4F;YAC1F,0FAA0F;YAC1F,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC;IAErD,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,WAAW;IACX,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,8BAA8B,CAAC;IAE7F,OAAO;QACL,MAAM,EAAE;YACN,GAAG,OAAO;YACV,IAAI,EAAE;gBACJ,QAAQ,EAAE,cAAc;gBACtB,oEAAoE;gBACpE,mEAAmE;gBACnE,sDAAsD;gBACtD,CAAC,GAAG,QAAQ,CAAC;qBACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;qBAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACX,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,CAAC,CAAC,YAAY;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI;wBACrB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBACzE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;oBAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;iBAC5C,CAAC,CAAC,CACN;gBACD,eAAe,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;oBACzB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC,CAAC;gBACH,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE;oBACN,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B;gBACD,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;aACzD;YACD,KAAK;SACN;QACD,2EAA2E;QAC3E,0EAA0E;QAC1E,0EAA0E;QAC1E,iCAAiC;QACjC,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,QAAQ,EAAE,cAAc;YACtB,CAAC,CAAC,sEAAsE;YACxE,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,yBAAyB;gBAC1F,uBAAuB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iDAAiD,GAAG;KAClG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,6FAA6F;QAC7F,+FAA+F;QAC/F,+FAA+F;QAC/F,6FAA6F;QAC7F,6FAA6F;QAC7F,qCAAqC;IACvC,WAAW,EAAE,MAA4C;IACzD,GAAG;CACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../../src/tools/git-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../../src/tools/git-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AA6FlB,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAkID,eAAO,MAAM,WAAW,EAAE,cAsBzB,CAAC"}
|
package/dist/tools/git-diff.js
CHANGED
|
@@ -9,9 +9,78 @@
|
|
|
9
9
|
* plus the unified-diff patch text when it is cheap enough to hand to a
|
|
10
10
|
* model (§4: the client's context window is not this tool's to spend).
|
|
11
11
|
*/
|
|
12
|
-
import { gitDiff, TOTAL_PATCH_BUDGET_REASON_PREFIX } from "@descryy/core";
|
|
12
|
+
import { applyReplySizeBudget, gitDiff, TOTAL_PATCH_BUDGET_REASON_PREFIX } from "@descryy/core";
|
|
13
13
|
import { answer, optionalInteger, optionalString, optionalStringArray, requiredString, } from "./kit.js";
|
|
14
14
|
const DEFAULT_LIMIT = 200;
|
|
15
|
+
/**
|
|
16
|
+
* The stable prefix of `patchOmittedReason` when the *reply's* size ceiling,
|
|
17
|
+
* rather than either patch budget, is what withheld a patch. A third reason a
|
|
18
|
+
* caller can tell apart from the other two — and it calls for the same action
|
|
19
|
+
* as the total patch budget (re-request narrowed), not for raising a limit,
|
|
20
|
+
* because this ceiling is not the caller's to raise.
|
|
21
|
+
*/
|
|
22
|
+
const REPLY_BUDGET_REASON_PREFIX = "the reply's overall size ceiling";
|
|
23
|
+
/** Bytes this file costs in the encoded `files` array — its JSON plus a separator. */
|
|
24
|
+
function fileBytes(file) {
|
|
25
|
+
return Buffer.byteLength(JSON.stringify(file), "utf8") + 1;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `fitToBudget` — the second half of the fix the aggregate patch budget was
|
|
29
|
+
* only the first half of.
|
|
30
|
+
*
|
|
31
|
+
* `maxTotalPatchBytes` bounds the patches and nothing else, so the same real
|
|
32
|
+
* 48-file diff that motivated it still failed after it shipped: 48 files of
|
|
33
|
+
* status/additions/deletions rows plus disclosures plus the capped patches
|
|
34
|
+
* summed past the host's ceiling and the reply was rejected whole. This bounds
|
|
35
|
+
* what the tool actually returns — patches withheld first, then files dropped
|
|
36
|
+
* from the list if the bare rows alone do not fit — and says which of the two
|
|
37
|
+
* happened, so the caller re-requests narrowed instead of reading a short list
|
|
38
|
+
* as the whole diff.
|
|
39
|
+
*/
|
|
40
|
+
function fitDiff(base, head, shown, filesTotal, budgetBytes) {
|
|
41
|
+
const scaffold = Buffer.byteLength(JSON.stringify({ base, head, files: [], filesTotal }), "utf8");
|
|
42
|
+
const fitted = applyReplySizeBudget(shown, {
|
|
43
|
+
maxTotalBytes: budgetBytes,
|
|
44
|
+
overheadBytes: scaffold,
|
|
45
|
+
sizeOf: fileBytes,
|
|
46
|
+
hasPayload: (f) => f.patch !== null,
|
|
47
|
+
// Deliberately terse, unlike the other two reasons. This one can land on
|
|
48
|
+
// every file in a 200-file reply, and a 200-character sentence repeated
|
|
49
|
+
// 200 times costs more than the patches it is apologising for — the same
|
|
50
|
+
// arithmetic that made the per-call disclosure boilerplate worth deduping.
|
|
51
|
+
// What to do about it is stated once, in the reply-level note below.
|
|
52
|
+
withhold: (f) => ({
|
|
53
|
+
...f,
|
|
54
|
+
patch: null,
|
|
55
|
+
patchOmittedReason: `${REPLY_BUDGET_REASON_PREFIX} left no room for it`,
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
const notes = [];
|
|
59
|
+
if (fitted.withheldCount > 0) {
|
|
60
|
+
notes.push(`${fitted.withheldCount} of the listed file(s) had their patch text withheld to keep this ` +
|
|
61
|
+
"reply inside its overall size ceiling, not by either patch budget — their stats above are " +
|
|
62
|
+
'complete. Re-request them with a narrowed "files" to read their patches.');
|
|
63
|
+
}
|
|
64
|
+
if (fitted.droppedCount > 0) {
|
|
65
|
+
notes.push(`${fitted.droppedCount} further changed file(s) are absent from this reply entirely — the ` +
|
|
66
|
+
"per-file rows for every changed file do not fit inside the reply's size ceiling on their " +
|
|
67
|
+
'own. This is a limit of one reply, not a finding about those files: re-request them with ' +
|
|
68
|
+
'"files" to see them.');
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
data: { base, head, files: fitted.items, filesTotal },
|
|
72
|
+
notes,
|
|
73
|
+
...(fitted.droppedCount > 0
|
|
74
|
+
? {
|
|
75
|
+
truncatedDetail: {
|
|
76
|
+
shown: fitted.items.length,
|
|
77
|
+
total: filesTotal,
|
|
78
|
+
more: null,
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
: {}),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
15
84
|
const SCHEMA = {
|
|
16
85
|
type: "object",
|
|
17
86
|
properties: {
|
|
@@ -35,10 +104,12 @@ const SCHEMA = {
|
|
|
35
104
|
maxTotalPatchBytes: {
|
|
36
105
|
type: "integer",
|
|
37
106
|
minimum: 1,
|
|
38
|
-
description: "The cap on the sum of every patch in the reply. Default
|
|
107
|
+
description: "The cap on the sum of every patch in the reply. Default 40,000. Files past it are still " +
|
|
39
108
|
"listed with their status and line counts; only their patch text is withheld, with the " +
|
|
40
|
-
"budget named as the reason. A per-file cap bounds no total
|
|
41
|
-
"
|
|
109
|
+
"budget named as the reason. A per-file cap bounds no total. Note this bounds the patches " +
|
|
110
|
+
"alone: the reply as a whole is separately held under a fixed size ceiling, which can " +
|
|
111
|
+
"withhold further patches, and on a very wide diff drop trailing files from the list — " +
|
|
112
|
+
"both are disclosed and named distinctly from this budget when they happen.",
|
|
42
113
|
},
|
|
43
114
|
limit: { type: "integer", minimum: 1, description: "Cap on files in the reply. Default 200." },
|
|
44
115
|
},
|
|
@@ -118,20 +189,28 @@ async function run(args, ctx) {
|
|
|
118
189
|
? { truncatedDetail: { shown: shown.length, total: all.length, more: null } }
|
|
119
190
|
: {}),
|
|
120
191
|
notes,
|
|
192
|
+
fitToBudget: (budgetBytes) => fitDiff(base, head, shown, all.length, budgetBytes),
|
|
121
193
|
});
|
|
122
194
|
}
|
|
123
195
|
export const gitDiffTool = {
|
|
124
196
|
name: "get_git_diff",
|
|
125
197
|
class: "read",
|
|
126
198
|
tier: "evidence",
|
|
127
|
-
|
|
199
|
+
// 2.0.0: the reply is now held under an overall size ceiling, which can
|
|
200
|
+
// withhold patches the two patch budgets would have allowed and, on a very
|
|
201
|
+
// wide diff, drop trailing files from the list. Both are disclosed, but a
|
|
202
|
+
// caller can receive strictly less than 1.0.0 returned for the same call —
|
|
203
|
+
// a behaviour change, so a version bump, not a patch release.
|
|
204
|
+
version: "2.0.0",
|
|
128
205
|
title: "Live textual diff between two refs",
|
|
129
206
|
description: "A live git diff between two refs — per-file status (added/modified/deleted/renamed), " +
|
|
130
207
|
"additions/deletions, and unified-diff patch text where it is small enough to include. Reads " +
|
|
131
208
|
"the working repository directly, not the stored graph — for the graph's stored co-change " +
|
|
132
209
|
"history use \"history\" instead. A file's patch is withheld above \"maxPatchBytes\", and any " +
|
|
133
210
|
"patch past the reply's \"maxTotalPatchBytes\" budget, each with a named reason; stats are " +
|
|
134
|
-
"still reported either way."
|
|
211
|
+
"still reported either way. The whole reply is additionally held under a fixed size ceiling: " +
|
|
212
|
+
"on a very wide diff that can withhold further patches and, in the extreme, leave trailing " +
|
|
213
|
+
"files out of the list entirely — always disclosed, never silently.",
|
|
135
214
|
inputSchema: SCHEMA,
|
|
136
215
|
run,
|
|
137
216
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/tools/git-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/tools/git-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/impact.d.ts
CHANGED
|
@@ -31,6 +31,15 @@ import { type BriefNode, type NodeCandidates, type ToolDefinition } from "./kit.
|
|
|
31
31
|
export interface ImpactedNode extends BriefNode {
|
|
32
32
|
readonly depth: number;
|
|
33
33
|
readonly score: number;
|
|
34
|
+
/** 1-based position in this answer, highest score first. */
|
|
35
|
+
readonly rank: number;
|
|
36
|
+
/**
|
|
37
|
+
* `top` / `notable` / `rest` by rank, never by an absolute score threshold.
|
|
38
|
+
* This score comes from `weightedBfs`'s confidence decay, not from
|
|
39
|
+
* `scoping/`'s designed weights, so §12.7's calibrated tiers do not apply to
|
|
40
|
+
* it — see `prominence.ts`'s header.
|
|
41
|
+
*/
|
|
42
|
+
readonly prominence: "top" | "notable" | "rest";
|
|
34
43
|
}
|
|
35
44
|
/** An INCIDENT or FIX_PATTERN linked to the start node, and by which edge. */
|
|
36
45
|
export interface RelatedNode extends BriefNode {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAIlB,2EAA2E;AAC3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAIlB,2EAA2E;AAC3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;CACjD;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC9C,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;AAwNvD,eAAO,MAAM,UAAU,EAAE,cAgBxB,CAAC"}
|
package/dist/tools/impact.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* calls this" should never have to remember that CALLS lives in a tool named
|
|
26
26
|
* for propagation.
|
|
27
27
|
*/
|
|
28
|
-
import { impactOf, rootCauseSearch, testsCovering, traceApi } from "@descryy/core";
|
|
28
|
+
import { impactOf, rootCauseSearch, testsCovering, traceApi, withProminence } from "@descryy/core";
|
|
29
29
|
import { briefNode, optionalBoolean, optionalEnum, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
30
30
|
import { resolveOneNode } from "./lookup.js";
|
|
31
31
|
/** Structural edges — what depends on what, never what data carries. */
|
|
@@ -170,11 +170,11 @@ async function run(args, ctx) {
|
|
|
170
170
|
result: {
|
|
171
171
|
data: {
|
|
172
172
|
from: briefNode(found.node),
|
|
173
|
-
affected: shownAffected.map((entry) => ({
|
|
173
|
+
affected: withProminence(shownAffected.map((entry) => ({
|
|
174
174
|
...briefNode(entry.node),
|
|
175
175
|
depth: entry.depth,
|
|
176
176
|
score: Number(entry.score.toFixed(4)),
|
|
177
|
-
})),
|
|
177
|
+
}))),
|
|
178
178
|
affectedTotal: affected.length,
|
|
179
179
|
coveringTests: tests.data.map(briefNode),
|
|
180
180
|
related: related.data.map((m) => ({ ...briefNode(m.incident), via: m.via })),
|
package/dist/tools/impact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -15,6 +15,15 @@ export { resolveOneNode } from "./lookup.ts";
|
|
|
15
15
|
export { TOOL_TIERS } from "../render.ts";
|
|
16
16
|
export type { ToolTier } from "../render.ts";
|
|
17
17
|
export type { AnalyzeData, SourceRun } from "./analyze.ts";
|
|
18
|
+
export type { BrowserClickData } from "./browser-click.ts";
|
|
19
|
+
export type { BrowserCloseSessionData } from "./browser-close-session.ts";
|
|
20
|
+
export type { BrowserFillData } from "./browser-fill.ts";
|
|
21
|
+
export type { BrowserTypeData } from "./browser-type.ts";
|
|
22
|
+
export type { BrowserNavigateData } from "./browser-navigate.ts";
|
|
23
|
+
export type { BrowserRunScenarioData } from "./browser-run-scenario.ts";
|
|
24
|
+
export type { BrowserSaveScenarioData } from "./browser-save-scenario.ts";
|
|
25
|
+
export type { BrowserPageData, BrowserSnapshotData } from "./browser-snapshot.ts";
|
|
26
|
+
export type { BrowserStartSessionData } from "./browser-start-session.ts";
|
|
18
27
|
export type { ContractPathFinding, ContractShapeMismatchReport, ContractShapeStatus, ContractsData, } from "./contracts.ts";
|
|
19
28
|
export type { BlockedCheck, CrossPrData, CrossPrEmptyDiff, CrossPrGitFailure, CrossPrReport, HiddenDependencyCheck, HiddenDependencyFinding, OverlapCheck, OverlapReportChecked, SupersededCheck, } from "./cross-pr.ts";
|
|
20
29
|
export type { GitDiffData, GitDiffEntry } from "./git-diff.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
* rather than omitted.
|
|
8
8
|
*/
|
|
9
9
|
import { analyzeTool } from "./analyze.js";
|
|
10
|
+
import { browserClickTool } from "./browser-click.js";
|
|
11
|
+
import { browserCloseSessionTool } from "./browser-close-session.js";
|
|
12
|
+
import { browserFillTool } from "./browser-fill.js";
|
|
13
|
+
import { browserNavigateTool } from "./browser-navigate.js";
|
|
14
|
+
import { browserRunScenarioTool } from "./browser-run-scenario.js";
|
|
15
|
+
import { browserSaveScenarioTool } from "./browser-save-scenario.js";
|
|
16
|
+
import { browserSnapshotTool } from "./browser-snapshot.js";
|
|
17
|
+
import { browserStartSessionTool } from "./browser-start-session.js";
|
|
18
|
+
import { browserTypeTool } from "./browser-type.js";
|
|
10
19
|
import { contractsTool } from "./contracts.js";
|
|
11
20
|
import { crossPrTool } from "./cross-pr.js";
|
|
12
21
|
import { gitDiffTool } from "./git-diff.js";
|
|
@@ -16,6 +25,8 @@ import { historyTool } from "./history.js";
|
|
|
16
25
|
import { impactTool } from "./impact.js";
|
|
17
26
|
import { linkWorkspaceTool } from "./link-workspace.js";
|
|
18
27
|
import { observeRuntimeTool } from "./observe-runtime.js";
|
|
28
|
+
import { observeTestsTool } from "./observe-tests.js";
|
|
29
|
+
import { prePushTool } from "./pre-push.js";
|
|
19
30
|
import { prAnalysisTool } from "./pr-analysis.js";
|
|
20
31
|
import { propagationTool } from "./propagation.js";
|
|
21
32
|
import { questionsTool } from "./questions.js";
|
|
@@ -44,7 +55,23 @@ export const TOOLS = [
|
|
|
44
55
|
gitHistoryTool,
|
|
45
56
|
verifyClaimTool,
|
|
46
57
|
observeRuntimeTool,
|
|
58
|
+
observeTestsTool,
|
|
59
|
+
prePushTool,
|
|
47
60
|
markIncidentTool,
|
|
61
|
+
// The browser tools last: a reader meeting this list meets the graph tools
|
|
62
|
+
// first, which is the order a developer meets them in.
|
|
63
|
+
browserStartSessionTool,
|
|
64
|
+
browserNavigateTool,
|
|
65
|
+
browserSnapshotTool,
|
|
66
|
+
browserClickTool,
|
|
67
|
+
browserTypeTool,
|
|
68
|
+
browserFillTool,
|
|
69
|
+
browserCloseSessionTool,
|
|
70
|
+
// The scenario pair after the primitives, because a scenario is made of
|
|
71
|
+
// them: save turns an exploration into a committed file, run replays it as
|
|
72
|
+
// one batch call with one evidence summary.
|
|
73
|
+
browserSaveScenarioTool,
|
|
74
|
+
browserRunScenarioTool,
|
|
48
75
|
];
|
|
49
76
|
export const TOOLS_BY_NAME = new Map(TOOLS.map((tool) => [tool.name, tool]));
|
|
50
77
|
export { ToolInputError } from "./kit.js";
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,CAAC,MAAM,KAAK,GAA8B;IAC9C,WAAW;IACX,iBAAiB;IACjB,SAAS;IACT,cAAc;IACd,WAAW;IACX,eAAe;IACf,UAAU;IACV,WAAW;IACX,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,gBAAgB;IAChB,sBAAsB;IACtB,WAAW;IACX,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,gBAAgB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/kit.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* way. A tool physically cannot ship a result with the caveats stripped off.
|
|
8
8
|
*/
|
|
9
9
|
import type { ResolutionLevel, ResultState, ToolClass } from "@descryy/ir";
|
|
10
|
-
import type { ToolAnswer, ToolTier, TruncationDetail } from "../render.ts";
|
|
10
|
+
import type { ReplyFit, ToolAnswer, ToolTier, TruncationDetail, WitnessedEvidence } from "../render.ts";
|
|
11
11
|
import type { Session } from "../session.ts";
|
|
12
12
|
/**
|
|
13
13
|
* Streaming narration — §22.2's primary UX, at the protocol level.
|
|
@@ -131,6 +131,15 @@ export declare function answer<T>(options: {
|
|
|
131
131
|
readonly exemplar: string;
|
|
132
132
|
readonly handle: string;
|
|
133
133
|
};
|
|
134
|
+
/** See `render.ts`'s `ToolAnswer.fitToBudget` — how this tool shrinks to the reply ceiling. */
|
|
135
|
+
readonly fitToBudget?: (budgetBytes: number) => ReplyFit<T>;
|
|
136
|
+
/**
|
|
137
|
+
* See `render.ts`'s `ToolAnswer.runtimeEvidence`. Supplied only by a tool
|
|
138
|
+
* that watched a real running application, on a path where it really did —
|
|
139
|
+
* omitted everywhere else, which is sixteen of the seventeen tools and every
|
|
140
|
+
* refusal.
|
|
141
|
+
*/
|
|
142
|
+
readonly runtimeEvidence?: WitnessedEvidence;
|
|
134
143
|
}): ToolAnswer<T>;
|
|
135
144
|
/**
|
|
136
145
|
* An IR node as it appears in a tool reply.
|