@descryy/mcp 0.6.0 → 0.7.1
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 +8 -75
- package/dist/action-handshake.d.ts.map +1 -1
- package/dist/action-handshake.js +9 -79
- package/dist/action-handshake.js.map +1 -1
- package/dist/bin/descry-mcp.d.ts +4 -15
- package/dist/bin/descry-mcp.d.ts.map +1 -1
- package/dist/bin/descry-mcp.js +12 -42
- package/dist/bin/descry-mcp.js.map +1 -1
- package/dist/browser/driver.d.ts +121 -224
- package/dist/browser/driver.d.ts.map +1 -1
- package/dist/browser/driver.js +9 -55
- package/dist/browser/driver.js.map +1 -1
- package/dist/browser/evidence.d.ts +10 -43
- package/dist/browser/evidence.d.ts.map +1 -1
- package/dist/browser/evidence.js +20 -54
- package/dist/browser/evidence.js.map +1 -1
- package/dist/browser/fake-driver.d.ts +12 -19
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +31 -26
- package/dist/browser/fake-driver.js.map +1 -1
- package/dist/browser/graph-write.d.ts +4 -45
- package/dist/browser/graph-write.d.ts.map +1 -1
- package/dist/browser/graph-write.js +8 -53
- package/dist/browser/graph-write.js.map +1 -1
- package/dist/browser/playwright-driver.d.ts +7 -91
- package/dist/browser/playwright-driver.d.ts.map +1 -1
- package/dist/browser/playwright-driver.js +59 -197
- package/dist/browser/playwright-driver.js.map +1 -1
- package/dist/browser/provider.d.ts +5 -34
- package/dist/browser/provider.d.ts.map +1 -1
- package/dist/browser/provider.js +4 -24
- package/dist/browser/provider.js.map +1 -1
- package/dist/browser/registry.d.ts +26 -106
- package/dist/browser/registry.d.ts.map +1 -1
- package/dist/browser/registry.js +20 -77
- package/dist/browser/registry.js.map +1 -1
- package/dist/browser/scenario-provenance.d.ts +23 -0
- package/dist/browser/scenario-provenance.d.ts.map +1 -0
- package/dist/browser/scenario-provenance.js +59 -0
- package/dist/browser/scenario-provenance.js.map +1 -0
- package/dist/browser/scenario-resolve.d.ts +10 -44
- package/dist/browser/scenario-resolve.d.ts.map +1 -1
- package/dist/browser/scenario-resolve.js +10 -41
- package/dist/browser/scenario-resolve.js.map +1 -1
- package/dist/browser/scenario-runner.d.ts +12 -70
- package/dist/browser/scenario-runner.d.ts.map +1 -1
- package/dist/browser/scenario-runner.js +30 -90
- package/dist/browser/scenario-runner.js.map +1 -1
- package/dist/browser/stack-parser.d.ts +4 -28
- package/dist/browser/stack-parser.d.ts.map +1 -1
- package/dist/browser/stack-parser.js +12 -39
- package/dist/browser/stack-parser.js.map +1 -1
- package/dist/browser/tool-support.d.ts +20 -67
- package/dist/browser/tool-support.d.ts.map +1 -1
- package/dist/browser/tool-support.js +21 -65
- package/dist/browser/tool-support.js.map +1 -1
- package/dist/browser/url-scheme.d.ts +14 -0
- package/dist/browser/url-scheme.d.ts.map +1 -0
- package/dist/browser/url-scheme.js +38 -0
- package/dist/browser/url-scheme.js.map +1 -0
- package/dist/cancellation.d.ts +11 -46
- package/dist/cancellation.d.ts.map +1 -1
- package/dist/cancellation.js +11 -46
- package/dist/cancellation.js.map +1 -1
- package/dist/capped.d.ts +9 -33
- package/dist/capped.d.ts.map +1 -1
- package/dist/capped.js +7 -27
- package/dist/capped.js.map +1 -1
- package/dist/disclosure-ledger.d.ts +6 -30
- package/dist/disclosure-ledger.d.ts.map +1 -1
- package/dist/disclosure-ledger.js +4 -26
- package/dist/disclosure-ledger.js.map +1 -1
- package/dist/index.d.ts +10 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/dist/module-trust.d.ts +24 -0
- package/dist/module-trust.d.ts.map +1 -0
- package/dist/module-trust.js +60 -0
- package/dist/module-trust.js.map +1 -0
- package/dist/path-confinement.d.ts +31 -0
- package/dist/path-confinement.d.ts.map +1 -0
- package/dist/path-confinement.js +44 -0
- package/dist/path-confinement.js.map +1 -0
- package/dist/protocol.d.ts +10 -53
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +14 -60
- package/dist/protocol.js.map +1 -1
- package/dist/registry.d.ts +37 -58
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +88 -96
- package/dist/registry.js.map +1 -1
- package/dist/render.d.ts +89 -13
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +111 -16
- package/dist/render.js.map +1 -1
- package/dist/runtime-registry.d.ts +7 -66
- package/dist/runtime-registry.d.ts.map +1 -1
- package/dist/runtime-registry.js +39 -114
- package/dist/runtime-registry.js.map +1 -1
- package/dist/scenarios/index.d.ts +1 -1
- package/dist/scenarios/index.d.ts.map +1 -1
- package/dist/scenarios/index.js +1 -1
- package/dist/scenarios/index.js.map +1 -1
- package/dist/scenarios/parse.d.ts +4 -18
- package/dist/scenarios/parse.d.ts.map +1 -1
- package/dist/scenarios/parse.js +14 -34
- package/dist/scenarios/parse.js.map +1 -1
- package/dist/scenarios/scenario.d.ts +18 -74
- package/dist/scenarios/scenario.d.ts.map +1 -1
- package/dist/scenarios/scenario.js +7 -34
- package/dist/scenarios/scenario.js.map +1 -1
- package/dist/scenarios/storage.d.ts +11 -41
- package/dist/scenarios/storage.d.ts.map +1 -1
- package/dist/scenarios/storage.js +57 -47
- package/dist/scenarios/storage.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +69 -19
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +90 -259
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +136 -250
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +32 -118
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +65 -186
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/browser-click.d.ts +3 -21
- package/dist/tools/browser-click.d.ts.map +1 -1
- package/dist/tools/browser-click.js +10 -31
- package/dist/tools/browser-click.js.map +1 -1
- package/dist/tools/browser-close-session.d.ts +4 -13
- package/dist/tools/browser-close-session.d.ts.map +1 -1
- package/dist/tools/browser-close-session.js +4 -13
- package/dist/tools/browser-close-session.js.map +1 -1
- package/dist/tools/browser-fill.d.ts +5 -36
- package/dist/tools/browser-fill.d.ts.map +1 -1
- package/dist/tools/browser-fill.js +9 -44
- package/dist/tools/browser-fill.js.map +1 -1
- package/dist/tools/browser-navigate.d.ts +6 -27
- package/dist/tools/browser-navigate.d.ts.map +1 -1
- package/dist/tools/browser-navigate.js +6 -23
- package/dist/tools/browser-navigate.js.map +1 -1
- package/dist/tools/browser-run-scenario.d.ts +5 -31
- package/dist/tools/browser-run-scenario.d.ts.map +1 -1
- package/dist/tools/browser-run-scenario.js +10 -46
- package/dist/tools/browser-run-scenario.js.map +1 -1
- package/dist/tools/browser-save-scenario.d.ts +3 -28
- package/dist/tools/browser-save-scenario.d.ts.map +1 -1
- package/dist/tools/browser-save-scenario.js +47 -84
- package/dist/tools/browser-save-scenario.js.map +1 -1
- package/dist/tools/browser-snapshot.d.ts +6 -39
- package/dist/tools/browser-snapshot.d.ts.map +1 -1
- package/dist/tools/browser-snapshot.js +4 -31
- package/dist/tools/browser-snapshot.js.map +1 -1
- package/dist/tools/browser-start-session.d.ts +4 -23
- package/dist/tools/browser-start-session.d.ts.map +1 -1
- package/dist/tools/browser-start-session.js +145 -56
- package/dist/tools/browser-start-session.js.map +1 -1
- package/dist/tools/browser-type.d.ts +5 -35
- package/dist/tools/browser-type.d.ts.map +1 -1
- package/dist/tools/browser-type.js +10 -45
- package/dist/tools/browser-type.js.map +1 -1
- package/dist/tools/contracts.d.ts +9 -86
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +24 -80
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/cross-pr.d.ts +42 -30
- package/dist/tools/cross-pr.d.ts.map +1 -1
- package/dist/tools/cross-pr.js +81 -62
- package/dist/tools/cross-pr.js.map +1 -1
- package/dist/tools/git-diff.d.ts +18 -2
- package/dist/tools/git-diff.d.ts.map +1 -1
- package/dist/tools/git-diff.js +118 -26
- package/dist/tools/git-diff.js.map +1 -1
- package/dist/tools/git-history.d.ts +5 -16
- package/dist/tools/git-history.d.ts.map +1 -1
- package/dist/tools/git-history.js +3 -10
- package/dist/tools/git-history.js.map +1 -1
- package/dist/tools/history.d.ts +4 -33
- package/dist/tools/history.d.ts.map +1 -1
- package/dist/tools/history.js +6 -31
- package/dist/tools/history.js.map +1 -1
- package/dist/tools/impact.d.ts +7 -51
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +15 -67
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/index.d.ts +3 -8
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kit.d.ts +66 -113
- package/dist/tools/kit.d.ts.map +1 -1
- package/dist/tools/kit.js +60 -28
- package/dist/tools/kit.js.map +1 -1
- package/dist/tools/link-workspace.d.ts +7 -45
- package/dist/tools/link-workspace.d.ts.map +1 -1
- package/dist/tools/link-workspace.js +10 -48
- package/dist/tools/link-workspace.js.map +1 -1
- package/dist/tools/lookup.d.ts +4 -14
- package/dist/tools/lookup.d.ts.map +1 -1
- package/dist/tools/lookup.js +4 -14
- package/dist/tools/lookup.js.map +1 -1
- package/dist/tools/mark-incident.d.ts +7 -54
- package/dist/tools/mark-incident.d.ts.map +1 -1
- package/dist/tools/mark-incident.js +15 -68
- package/dist/tools/mark-incident.js.map +1 -1
- package/dist/tools/observe-runtime.d.ts +27 -210
- package/dist/tools/observe-runtime.d.ts.map +1 -1
- package/dist/tools/observe-runtime.js +273 -434
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/observe-tests.d.ts +9 -100
- package/dist/tools/observe-tests.d.ts.map +1 -1
- package/dist/tools/observe-tests.js +74 -152
- package/dist/tools/observe-tests.js.map +1 -1
- package/dist/tools/pr-analysis.d.ts +18 -2
- package/dist/tools/pr-analysis.d.ts.map +1 -1
- package/dist/tools/pr-analysis.js +73 -23
- package/dist/tools/pr-analysis.js.map +1 -1
- package/dist/tools/pre-push.d.ts +74 -16
- package/dist/tools/pre-push.d.ts.map +1 -1
- package/dist/tools/pre-push.js +152 -51
- package/dist/tools/pre-push.js.map +1 -1
- package/dist/tools/propagation.d.ts +11 -53
- package/dist/tools/propagation.d.ts.map +1 -1
- package/dist/tools/propagation.js +17 -58
- package/dist/tools/propagation.js.map +1 -1
- package/dist/tools/questions.d.ts +13 -63
- package/dist/tools/questions.d.ts.map +1 -1
- package/dist/tools/questions.js +33 -105
- package/dist/tools/questions.js.map +1 -1
- package/dist/tools/refusal-fetch.d.ts +4 -40
- package/dist/tools/refusal-fetch.d.ts.map +1 -1
- package/dist/tools/refusal-fetch.js +4 -40
- package/dist/tools/refusal-fetch.js.map +1 -1
- package/dist/tools/runtime-incident.d.ts +4 -63
- package/dist/tools/runtime-incident.d.ts.map +1 -1
- package/dist/tools/runtime-incident.js +10 -87
- package/dist/tools/runtime-incident.js.map +1 -1
- package/dist/tools/scope.d.ts +7 -25
- package/dist/tools/scope.d.ts.map +1 -1
- package/dist/tools/scope.js +10 -29
- package/dist/tools/scope.js.map +1 -1
- package/dist/tools/similar-incidents.d.ts +11 -86
- package/dist/tools/similar-incidents.d.ts.map +1 -1
- package/dist/tools/similar-incidents.js +7 -71
- package/dist/tools/similar-incidents.js.map +1 -1
- package/dist/tools/validate.d.ts +29 -70
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +141 -85
- package/dist/tools/validate.js.map +1 -1
- package/dist/tools/verification-status.d.ts +9 -64
- package/dist/tools/verification-status.d.ts.map +1 -1
- package/dist/tools/verification-status.js +9 -62
- package/dist/tools/verification-status.js.map +1 -1
- package/dist/tools/verify-claim.d.ts +5 -52
- package/dist/tools/verify-claim.d.ts.map +1 -1
- package/dist/tools/verify-claim.js +6 -56
- package/dist/tools/verify-claim.js.map +1 -1
- package/dist/transport.d.ts +15 -52
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +16 -60
- package/dist/transport.js.map +1 -1
- package/package.json +40 -22
package/dist/tools/impact.d.ts
CHANGED
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `impact`
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* implementation details") — but three of the functions it names were already
|
|
6
|
-
* built and correct in the query layer with no MCP tool ever calling them:
|
|
7
|
-
* `impactOf` (blast radius — find_dependents/find_callers/find_usages),
|
|
8
|
-
* `testsCovering` (find_tests) and `rootCauseSearch` (find_related_incidents,
|
|
9
|
-
* find_fix_patterns). This wires all three under one call, the same way
|
|
10
|
-
* `validate` bundles env, rollback and the config graph — a developer asking
|
|
11
|
-
* "what does changing this touch" wants the blast radius, what already tests
|
|
12
|
-
* it and what has broken near it before in one answer, not three round trips.
|
|
13
|
-
*
|
|
14
|
-
* A fourth, `traceApi` (find_dependencies read the other direction, or "how
|
|
15
|
-
* does this reach that"), runs only when a second node is given — it answers
|
|
16
|
-
* a different question (a path between two specific symbols) and forcing it
|
|
17
|
-
* into every call would mean walking the graph for a question nobody asked.
|
|
18
|
-
*
|
|
19
|
-
* ## Direction, and why the default is structural rather than data-carrying
|
|
20
|
-
*
|
|
21
|
-
* `propagation` already owns PROPAGATES_TO/READS/WRITES/RETURNS — what data
|
|
22
|
-
* carries. This tool defaults to CALLS, IMPORTS, IMPLEMENTS, INHERITS,
|
|
23
|
-
* USES_API and SERVES_API — what structure depends on what. The two tools
|
|
24
|
-
* answer different questions over the same primitives; a caller after "who
|
|
25
|
-
* calls this" should never have to remember that CALLS lives in a tool named
|
|
26
|
-
* for propagation.
|
|
2
|
+
* `impact` wires §18's `impactOf`/`testsCovering`/`rootCauseSearch` (blast
|
|
3
|
+
* radius, tests, incidents) into one call, plus `traceApi` when `to` is
|
|
4
|
+
* given. Defaults to structural edges (CALLS/IMPORTS/IMPLEMENTS/INHERITS/USES_API/SERVES_API) — data-flow is `propagation`'s job.
|
|
27
5
|
*/
|
|
28
6
|
import type { EdgeType } from "@descryy/ir";
|
|
29
7
|
import { type BriefNode, type NodeCandidates, type ToolDefinition } from "./kit.ts";
|
|
@@ -33,12 +11,7 @@ export interface ImpactedNode extends BriefNode {
|
|
|
33
11
|
readonly score: number;
|
|
34
12
|
/** 1-based position in this answer, highest score first. */
|
|
35
13
|
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
|
-
*/
|
|
14
|
+
/** `top`/`notable`/`rest` by rank, never an absolute score threshold — this score is `weightedBfs`'s confidence decay, not `scoping/`'s calibrated tiers. */
|
|
42
15
|
readonly prominence: "top" | "notable" | "rest";
|
|
43
16
|
}
|
|
44
17
|
/** An INCIDENT or FIX_PATTERN linked to the start node, and by which edge. */
|
|
@@ -57,34 +30,17 @@ export interface ImpactReport {
|
|
|
57
30
|
readonly affected: readonly ImpactedNode[];
|
|
58
31
|
readonly affectedTotal: number;
|
|
59
32
|
readonly coveringTests: readonly BriefNode[];
|
|
60
|
-
/**
|
|
61
|
-
* Incidents and fix patterns joined to this node by a graph edge.
|
|
62
|
-
*
|
|
63
|
-
* Structural only — `rootCauseSearch` walks edges and runs no similarity
|
|
64
|
-
* search, so an empty list is never evidence that no similar incident
|
|
65
|
-
* exists. For a failure with no node yet, `similar_incidents` is the tool.
|
|
66
|
-
*/
|
|
33
|
+
/** Incidents/fix patterns joined by a graph edge — structural only, no similarity search; an empty list is never evidence none exists (`similar_incidents` is that tool). */
|
|
67
34
|
readonly related: readonly RelatedNode[];
|
|
68
35
|
/** Null when no `to` was given, or when the one given did not resolve. */
|
|
69
36
|
readonly path: TracedPath | null;
|
|
70
|
-
/**
|
|
71
|
-
* False when no edge of any walked type touches the start node.
|
|
72
|
-
*
|
|
73
|
-
* **An empty `affected` with `analysed: false` means the walk did not run**,
|
|
74
|
-
* not that nothing depends on this symbol.
|
|
75
|
-
*/
|
|
37
|
+
/** False when no edge of any walked type touches the start node — an empty `affected` here means the walk didn't run, not that nothing depends on this symbol. */
|
|
76
38
|
readonly analysed: boolean;
|
|
77
39
|
readonly edgeTypesWalked: readonly EdgeType[];
|
|
78
40
|
/** The subset of `edgeTypesWalked` actually found on an edge touching this node. */
|
|
79
41
|
readonly edgeTypesPresent: readonly string[];
|
|
80
42
|
}
|
|
81
|
-
/**
|
|
82
|
-
* One call, two shapes.
|
|
83
|
-
*
|
|
84
|
-
* `NodeCandidates` arrives when the symbol did not resolve to exactly one
|
|
85
|
-
* node; narrow on `"from" in data`. Nothing was walked in that case, so none
|
|
86
|
-
* of `ImpactReport`'s counts exist rather than reading zero.
|
|
87
|
-
*/
|
|
43
|
+
/** One call, two shapes: `NodeCandidates` when the symbol didn't resolve to exactly one node (narrow on `"from" in data`) — nothing was walked, so `ImpactReport`'s counts don't exist rather than reading zero. */
|
|
88
44
|
export type ImpactData = ImpactReport | NodeCandidates;
|
|
89
45
|
export declare const impactTool: ToolDefinition;
|
|
90
46
|
//# sourceMappingURL=impact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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,6JAA6J;IAC7J,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,6KAA6K;IAC7K,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,kKAAkK;IAClK,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,oNAAoN;AACpN,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;AA0OvD,eAAO,MAAM,UAAU,EAAE,cAgBxB,CAAC"}
|
package/dist/tools/impact.js
CHANGED
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `impact`
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* implementation details") — but three of the functions it names were already
|
|
6
|
-
* built and correct in the query layer with no MCP tool ever calling them:
|
|
7
|
-
* `impactOf` (blast radius — find_dependents/find_callers/find_usages),
|
|
8
|
-
* `testsCovering` (find_tests) and `rootCauseSearch` (find_related_incidents,
|
|
9
|
-
* find_fix_patterns). This wires all three under one call, the same way
|
|
10
|
-
* `validate` bundles env, rollback and the config graph — a developer asking
|
|
11
|
-
* "what does changing this touch" wants the blast radius, what already tests
|
|
12
|
-
* it and what has broken near it before in one answer, not three round trips.
|
|
13
|
-
*
|
|
14
|
-
* A fourth, `traceApi` (find_dependencies read the other direction, or "how
|
|
15
|
-
* does this reach that"), runs only when a second node is given — it answers
|
|
16
|
-
* a different question (a path between two specific symbols) and forcing it
|
|
17
|
-
* into every call would mean walking the graph for a question nobody asked.
|
|
18
|
-
*
|
|
19
|
-
* ## Direction, and why the default is structural rather than data-carrying
|
|
20
|
-
*
|
|
21
|
-
* `propagation` already owns PROPAGATES_TO/READS/WRITES/RETURNS — what data
|
|
22
|
-
* carries. This tool defaults to CALLS, IMPORTS, IMPLEMENTS, INHERITS,
|
|
23
|
-
* USES_API and SERVES_API — what structure depends on what. The two tools
|
|
24
|
-
* answer different questions over the same primitives; a caller after "who
|
|
25
|
-
* calls this" should never have to remember that CALLS lives in a tool named
|
|
26
|
-
* for propagation.
|
|
2
|
+
* `impact` wires §18's `impactOf`/`testsCovering`/`rootCauseSearch` (blast
|
|
3
|
+
* radius, tests, incidents) into one call, plus `traceApi` when `to` is
|
|
4
|
+
* given. Defaults to structural edges (CALLS/IMPORTS/IMPLEMENTS/INHERITS/USES_API/SERVES_API) — data-flow is `propagation`'s job.
|
|
27
5
|
*/
|
|
28
6
|
import { impactOf, rootCauseSearch, testsCovering, traceApi, withProminence } from "@descryy/core";
|
|
29
7
|
import { briefNode, optionalBoolean, optionalEnum, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
@@ -133,16 +111,9 @@ async function run(args, ctx) {
|
|
|
133
111
|
let path = null;
|
|
134
112
|
const pathNotes = [];
|
|
135
113
|
if (to !== undefined) {
|
|
136
|
-
// `to` is documented as "
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
// as `nodeId` fails with "no node with id …" rather than looking it up by
|
|
140
|
-
// name. This resolved a symbol only, and a caller passing the id the
|
|
141
|
-
// schema explicitly invites got "did not resolve" — the same
|
|
142
|
-
// prose-disagrees-with-behaviour class as the `confirmToken` incident,
|
|
143
|
-
// and one the schema/prose gate cannot see, because the schema and the
|
|
144
|
-
// prose agreed with each other while the handler was narrower than both.
|
|
145
|
-
// (DEC-398.)
|
|
114
|
+
// `to` is documented as "node id, symbol or path"; each shape is tried in
|
|
115
|
+
// order since `resolveOneNode` is single-shot (a symbol passed as
|
|
116
|
+
// `nodeId` fails rather than falling through to a name lookup). (DEC-398.)
|
|
146
117
|
const target = firstResolved(ctx.session, [{ nodeId: to }, { symbol: to }, { file: to }]) ??
|
|
147
118
|
resolveOneNode(ctx.session, { symbol: to, file: undefined });
|
|
148
119
|
if (target.node === null) {
|
|
@@ -176,22 +147,9 @@ async function run(args, ctx) {
|
|
|
176
147
|
"That is not a finding that nothing depends on it — a producer for these edges may not run in " +
|
|
177
148
|
"this graph. This probe is local to one node and does not choose between the causes.");
|
|
178
149
|
}
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
// `tests` and `related` each stamp R0 when they examined nothing — correctly,
|
|
183
|
-
// since "no test covers this" and "no incident resembles this" are facts
|
|
184
|
-
// established by looking at no edges. Folding those R0s into a `Math.min`
|
|
185
|
-
// made every reply on a graph with no TESTS and no INCIDENT edges report
|
|
186
|
-
// `resolutionFloor: 0`, which caps the whole answer at reliability C no
|
|
187
|
-
// matter what the impact walk actually crossed.
|
|
188
|
-
//
|
|
189
|
-
// Measured, and it took a real browser to see it: the first-ever execution of
|
|
190
|
-
// `browser.conformance.test.ts` traced a genuine path over an edge witnessed
|
|
191
|
-
// at runtime — `resolution: 4`, with an `observedByRun` — and the reply still
|
|
192
|
-
// said R0, because the fixture graph is sparse enough that both other
|
|
193
|
-
// sub-queries legitimately found nothing. Every prior unit test used a graph
|
|
194
|
-
// rich enough to hide it. (`DEC-399`.)
|
|
150
|
+
// Floor is the weakest evidence *behind the answer* — a sub-query that
|
|
151
|
+
// found nothing (R0) isn't behind it, else a sparse graph always caps
|
|
152
|
+
// reliability C regardless of what the impact walk actually crossed. (DEC-399.)
|
|
195
153
|
const contributing = [
|
|
196
154
|
impact.stamp.resolutionFloor,
|
|
197
155
|
...(tests.data.length > 0 ? [tests.stamp.resolutionFloor] : []),
|
|
@@ -216,19 +174,16 @@ async function run(args, ctx) {
|
|
|
216
174
|
edgeTypesPresent: [...present].sort(),
|
|
217
175
|
},
|
|
218
176
|
stamp: { ...impact.stamp, resolutionFloor },
|
|
219
|
-
// `impact.truncated` is the query layer's own
|
|
220
|
-
//
|
|
221
|
-
// cap further still — the same gap history.ts had (P27).
|
|
177
|
+
// `impact.truncated` is the query layer's own cap; it says nothing
|
|
178
|
+
// about this tool's own `limit` slice of `affected` (same gap history.ts had, P27).
|
|
222
179
|
truncated: impact.truncated || tests.truncated || related.truncated || shownAffected.length < affected.length,
|
|
223
180
|
notes,
|
|
224
181
|
},
|
|
225
182
|
nameLevel: false,
|
|
226
183
|
...(analysed ? (affected.length === 0 ? { state: "empty" } : {}) : { state: "refused" }),
|
|
227
|
-
// `affected` is the primary collection this tool
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
// §4's TruncationDetail doc calls "the primary collection" and leaves the
|
|
231
|
-
// other two to the boolean above and their own prose notes.
|
|
184
|
+
// `affected` is the primary collection this tool reports — tests/related
|
|
185
|
+
// can also be capped, but one shown/total pair can't describe three
|
|
186
|
+
// lists, so this covers only the primary one (§4's TruncationDetail).
|
|
232
187
|
...(shownAffected.length < affected.length
|
|
233
188
|
? { truncatedDetail: { shown: shownAffected.length, total: affected.length, more: null } }
|
|
234
189
|
: {}),
|
|
@@ -242,14 +197,7 @@ async function run(args, ctx) {
|
|
|
242
197
|
`${related.data.length > 0 ? `; ${related.data.length} related incident(s)/fix(es)` : ""}.`,
|
|
243
198
|
};
|
|
244
199
|
}
|
|
245
|
-
/**
|
|
246
|
-
* The first criteria shape that resolves to a real node, or null if none does.
|
|
247
|
-
*
|
|
248
|
-
* Exists because `resolveOneNode` is single-shot by design — it answers for the
|
|
249
|
-
* one criterion it is given and returns a headline explaining that criterion's
|
|
250
|
-
* failure. A parameter documented as accepting several shapes needs each tried
|
|
251
|
-
* before the caller is told nothing matched.
|
|
252
|
-
*/
|
|
200
|
+
/** First criteria shape that resolves, or null. `resolveOneNode` is single-shot per criterion, so a parameter documented as accepting several shapes needs each tried before reporting no match. */
|
|
253
201
|
function firstResolved(session, attempts) {
|
|
254
202
|
for (const criteria of attempts) {
|
|
255
203
|
const found = resolveOneNode(session, criteria);
|
package/dist/tools/impact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/tools/impact.ts"],"names":[],"mappings":"AAAA
|
|
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
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* `analyze` first because nothing else works without it, then the three
|
|
5
|
-
* questions asked of an existing graph, then `contracts` — which is declared,
|
|
6
|
-
* described and honestly unavailable. See `contracts.ts` for why it is here
|
|
7
|
-
* rather than omitted.
|
|
8
|
-
*/
|
|
1
|
+
/** The commands of blueprint §1.11, in the order a developer meets them: `analyze` first
|
|
2
|
+
* (nothing else works without it), then the three questions asked of an existing graph,
|
|
3
|
+
* then `contracts` — declared, described, and honestly unavailable (see `contracts.ts`). */
|
|
9
4
|
import type { ToolDefinition } from "./kit.ts";
|
|
10
5
|
export declare const TOOLS: readonly ToolDefinition[];
|
|
11
6
|
export declare const TOOLS_BY_NAME: ReadonlyMap<string, ToolDefinition>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* `analyze` first because nothing else works without it, then the three
|
|
5
|
-
* questions asked of an existing graph, then `contracts` — which is declared,
|
|
6
|
-
* described and honestly unavailable. See `contracts.ts` for why it is here
|
|
7
|
-
* rather than omitted.
|
|
8
|
-
*/
|
|
1
|
+
/** The commands of blueprint §1.11, in the order a developer meets them: `analyze` first
|
|
2
|
+
* (nothing else works without it), then the three questions asked of an existing graph,
|
|
3
|
+
* then `contracts` — declared, described, and honestly unavailable (see `contracts.ts`). */
|
|
9
4
|
import { analyzeTool } from "./analyze.js";
|
|
10
5
|
import { browserClickTool } from "./browser-click.js";
|
|
11
6
|
import { browserCloseSessionTool } from "./browser-close-session.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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;6FAE6F;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,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,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,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;IAChB,WAAW;IACX,gBAAgB;IAChB,2EAA2E;IAC3E,uDAAuD;IACvD,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,uBAAuB;IACvB,wEAAwE;IACxE,2EAA2E;IAC3E,4CAA4C;IAC5C,uBAAuB;IACvB,sBAAsB;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAwC,IAAI,GAAG,CACvE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACvC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/tools/kit.d.ts
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The return type is `ToolAnswer`, never content. A tool produces an *answer*;
|
|
5
|
-
* `render.ts` is the only thing that turns an answer into a reply, and it
|
|
6
|
-
* attaches the staleness stamp, the reliability cap and the disclosures on the
|
|
7
|
-
* way. A tool physically cannot ship a result with the caveats stripped off.
|
|
8
|
-
*/
|
|
1
|
+
/** What every tool is handed and returns. A tool produces a `ToolAnswer`, never content —
|
|
2
|
+
* `render.ts` alone turns it into a reply, attaching the staleness stamp, reliability cap and
|
|
3
|
+
* disclosures. A tool cannot ship a result with the caveats stripped off. */
|
|
9
4
|
import type { ResolutionLevel, ResultState, ToolClass } from "@descryy/ir";
|
|
10
5
|
import type { ReplyFit, ToolAnswer, ToolTier, TruncationDetail, WitnessedEvidence } from "../render.ts";
|
|
11
6
|
import type { Session } from "../session.ts";
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* A no-op when the client did not send a progress token, which is the common
|
|
16
|
-
* case for a scripted call. Tools call it unconditionally; deciding whether
|
|
17
|
-
* anybody is listening is not their job.
|
|
18
|
-
*/
|
|
7
|
+
/** Streaming narration, §22.2. A no-op when the client sent no progress token; tools call it
|
|
8
|
+
* unconditionally and leave "is anyone listening" to the caller. */
|
|
19
9
|
export type Progress = (message: string, current?: number, total?: number) => void;
|
|
20
10
|
export interface ToolContext {
|
|
21
11
|
readonly session: Session;
|
|
@@ -26,74 +16,25 @@ export interface ToolDefinition {
|
|
|
26
16
|
readonly name: string;
|
|
27
17
|
readonly title: string;
|
|
28
18
|
readonly description: string;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* The line is deliberately **not** "does it write bytes". It is *can this
|
|
34
|
-
* call's effect change a later finding without the developer having said
|
|
35
|
-
* so.* `analyze` re-derives from code already on disk and `link_workspace`
|
|
36
|
-
* records where that code is, so neither can introduce a claim the
|
|
37
|
-
* repository does not already contain — both are `stateful-read`.
|
|
38
|
-
* `questions` writes a `ConfirmedFact`: human testimony that becomes a graph
|
|
39
|
-
* input, feeds `humanAsserted`, and is capped at reliability class B by
|
|
40
|
-
* DEC-223 precisely because it rests on one unaudited assertion. It is the
|
|
41
|
-
* only `action`, and the only class §4's two-call handshake gates.
|
|
42
|
-
*
|
|
43
|
-
* Required, and deliberately given no default — the same reasoning as
|
|
44
|
-
* `reliabilityCap`'s `nameLevel`. A tool author who has not thought about
|
|
45
|
-
* which class they are in is exactly the author who would inherit the wrong
|
|
46
|
-
* one, and the wrong one here is a mutating endpoint silently treated as
|
|
47
|
-
* pure.
|
|
48
|
-
*
|
|
49
|
-
* The type lives in `@descryy/ir` because the desktop lane and the AI layer
|
|
50
|
-
* read the same three names; restating the union here would be a second
|
|
51
|
-
* source of truth for one vocabulary.
|
|
52
|
-
*/
|
|
19
|
+
/** DEC-278's three classes (`ai-tool-contract.md` §8). Not "does it write bytes" but "can this
|
|
20
|
+
* change a later finding unannounced" — `questions` is the only `action`, gated by §4's
|
|
21
|
+
* handshake, capped at reliability B by DEC-223. No default: unset silently treats writes as pure. */
|
|
53
22
|
readonly class: ToolClass;
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
* or report a fact about the graph? Required and undefaulted, the same
|
|
57
|
-
* reasoning as `class` just above: three tools (`validate`, `contracts`,
|
|
58
|
-
* `cross_pr`) already refuse rather than over-claim and never return raw
|
|
59
|
-
* candidates — an author who has not thought about which one theirs is
|
|
60
|
-
* would be exactly the author to leave it defaulted to the safer-sounding
|
|
61
|
-
* one. See `ToolTier`'s own doc in `../render.ts` for why the type lives
|
|
62
|
-
* there and not here.
|
|
63
|
-
*/
|
|
23
|
+
/** MK-5 — does the output state a conclusion, or just a graph fact? Required, undefaulted, same
|
|
24
|
+
* reasoning as `class`. See `ToolTier` in `../render.ts` for why the type lives there. */
|
|
64
25
|
readonly tier: ToolTier;
|
|
65
|
-
/**
|
|
66
|
-
*
|
|
67
|
-
* behaviour change yet — and a future bump is what invalidates the golden
|
|
68
|
-
* investigations that depended on the old behaviour (`ai-layer-plan.md` §9
|
|
69
|
-
* layer 4).
|
|
70
|
-
*/
|
|
26
|
+
/** Contract §6 rule 8. Starts at `"1.0.0"`; a future bump invalidates golden investigations
|
|
27
|
+
* that depended on the old behaviour (`ai-layer-plan.md` §9 layer 4). */
|
|
71
28
|
readonly version: string;
|
|
72
29
|
readonly inputSchema: Record<string, unknown>;
|
|
73
30
|
run(args: Record<string, unknown>, ctx: ToolContext): Promise<ToolAnswer<unknown>>;
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* a caller mistake). Absent on `read`/`stateful-read` tools; TypeScript
|
|
78
|
-
* cannot express "required iff this other field equals X", so it stays
|
|
79
|
-
* optional here and the constraint is enforced at the one call site that
|
|
80
|
-
* needs it, `tool-classes.test.ts` for the static half.
|
|
81
|
-
*
|
|
82
|
-
* Returns the plain-English "willDo" description of what confirming this
|
|
83
|
-
* call would do, or `undefined` when *this particular call* has nothing to
|
|
84
|
-
* confirm — `questions` with no `answer` argument is a pure read of the
|
|
85
|
-
* open-question queue, and gating that behind a token would make the tool
|
|
86
|
-
* unable to answer the first question asked of it.
|
|
87
|
-
*/
|
|
31
|
+
/** Required iff `class === "action"` (enforced in `action-handshake.ts` and
|
|
32
|
+
* `tool-classes.test.ts`, not by the type). Returns the "willDo" text, or `undefined` when this
|
|
33
|
+
* call has nothing to confirm (e.g. `questions` with no `answer`). */
|
|
88
34
|
describeAction?(args: Record<string, unknown>, ctx: ToolContext): string | undefined | Promise<string | undefined>;
|
|
89
35
|
}
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* Distinct from a thrown `Error`, which is a bug here. This becomes an `isError`
|
|
94
|
-
* tool result the agent can read and retry from; a bug becomes a JSON-RPC
|
|
95
|
-
* internal error, which it cannot.
|
|
96
|
-
*/
|
|
36
|
+
/** An argument the caller can fix — distinct from a thrown `Error` (a bug here). This becomes an
|
|
37
|
+
* `isError` result the agent can read and retry from; a bug becomes an unreadable JSON-RPC error. */
|
|
97
38
|
export declare class ToolInputError extends Error {
|
|
98
39
|
constructor(message: string);
|
|
99
40
|
}
|
|
@@ -103,14 +44,8 @@ export declare function optionalStringArray(args: Record<string, unknown>, key:
|
|
|
103
44
|
export declare function optionalInteger(args: Record<string, unknown>, key: string, min: number): number | undefined;
|
|
104
45
|
export declare function optionalEnum<T extends string>(args: Record<string, unknown>, key: string, allowed: readonly T[]): T | undefined;
|
|
105
46
|
export declare function optionalBoolean(args: Record<string, unknown>, key: string): boolean | undefined;
|
|
106
|
-
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* `analyze` is the case: it writes rather than reads, so it has no
|
|
110
|
-
* `QueryResult`, and it would be the natural place for the disclosure discipline
|
|
111
|
-
* to leak. It uses this instead, so its reply carries the same stamp and the
|
|
112
|
-
* same rules as every query's.
|
|
113
|
-
*/
|
|
47
|
+
/** Wraps data that did not come from the query layer in the same envelope — e.g. `analyze`, which
|
|
48
|
+
* writes rather than reads and has no `QueryResult`, so its reply still carries the same stamp. */
|
|
114
49
|
export declare function answer<T>(options: {
|
|
115
50
|
readonly headline: string;
|
|
116
51
|
readonly data: T;
|
|
@@ -133,27 +68,13 @@ export declare function answer<T>(options: {
|
|
|
133
68
|
};
|
|
134
69
|
/** See `render.ts`'s `ToolAnswer.fitToBudget` — how this tool shrinks to the reply ceiling. */
|
|
135
70
|
readonly fitToBudget?: (budgetBytes: number) => ReplyFit<T>;
|
|
136
|
-
/**
|
|
137
|
-
*
|
|
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
|
-
*/
|
|
71
|
+
/** See `render.ts`'s `ToolAnswer.runtimeEvidence`. Set only by a tool that actually watched a
|
|
72
|
+
* running app; omitted everywhere else, including every refusal. */
|
|
142
73
|
readonly runtimeEvidence?: WitnessedEvidence;
|
|
143
74
|
}): ToolAnswer<T>;
|
|
144
|
-
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* The four optional fields are optional in the payload too, not `null` — a
|
|
148
|
-
* node with no file omits the key rather than carrying an empty one, which is
|
|
149
|
-
* what keeps a 1,000-node reply affordable. A caller must therefore test for
|
|
150
|
-
* presence, not for null.
|
|
151
|
-
*
|
|
152
|
-
* `language` is the IR node's own field passed through verbatim. Nothing here
|
|
153
|
-
* or above reads it, branches on it, or knows any value it can take (rule 1);
|
|
154
|
-
* it travels because a developer reading the reply is entitled to see which
|
|
155
|
-
* adapter's evidence a row rests on.
|
|
156
|
-
*/
|
|
75
|
+
/** An IR node as it appears in a reply. Optional fields are omitted, not `null`, keeping a
|
|
76
|
+
* 1,000-node reply affordable — callers test for presence. `language` passes through verbatim;
|
|
77
|
+
* nothing here reads or branches on it (rule 1 — no language name above the IR boundary). */
|
|
157
78
|
export interface BriefNode {
|
|
158
79
|
readonly id: string;
|
|
159
80
|
readonly type: string;
|
|
@@ -164,16 +85,9 @@ export interface BriefNode {
|
|
|
164
85
|
readonly language?: string;
|
|
165
86
|
readonly resolution: number;
|
|
166
87
|
}
|
|
167
|
-
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* Shared by `impact` and `propagation`, because both go through
|
|
172
|
-
* `resolveOneNode` and both refuse the same way: no answer is computed, and
|
|
173
|
-
* the candidates come back so the caller can narrow rather than guess. An
|
|
174
|
-
* empty `candidates` means nothing matched at all; two or more means the name
|
|
175
|
-
* was ambiguous. One is impossible — that is the case that resolves.
|
|
176
|
-
*/
|
|
88
|
+
/** Returned when a symbol/path/id resolved to nothing or to more than one thing (shared by
|
|
89
|
+
* `impact` and `propagation` via `resolveOneNode`): empty `candidates` means no match, two or
|
|
90
|
+
* more means ambiguous — one is impossible, that case resolves. */
|
|
177
91
|
export interface NodeCandidates {
|
|
178
92
|
readonly candidates: readonly BriefNode[];
|
|
179
93
|
}
|
|
@@ -190,4 +104,43 @@ export declare function briefNode(node: {
|
|
|
190
104
|
language: string | null;
|
|
191
105
|
resolution: number;
|
|
192
106
|
}): BriefNode;
|
|
107
|
+
/**
|
|
108
|
+
* Descry's own state inside this repository, which is not the developer's
|
|
109
|
+
* uncommitted change.
|
|
110
|
+
*
|
|
111
|
+
* ## Two paths, not one, and the second is the one that bit
|
|
112
|
+
*
|
|
113
|
+
* The first version derived this from the configured graph path alone. That is
|
|
114
|
+
* right for a single repository, where the graph sits in this repo's own
|
|
115
|
+
* `.descry/` — and wrong the moment two repositories share one graph, which is
|
|
116
|
+
* exactly what `link_workspace` produces:
|
|
117
|
+
*
|
|
118
|
+
* ```json
|
|
119
|
+
* // sherpa-backend/.descry/config.json
|
|
120
|
+
* "graph": "/home/…/sherpa-frontend/.descry/graph.db"
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* The derived exclusion then pointed into the *other* repository, and this
|
|
124
|
+
* repository's own `.descry/config.json` was excluded by nothing. Measured on a
|
|
125
|
+
* real workspace: it was reported as the developer's uncommitted work. Not an
|
|
126
|
+
* edge case — every shared-graph workspace has it.
|
|
127
|
+
*
|
|
128
|
+
* `.descry/evidence.db` escaped only because that repository's `.gitignore`
|
|
129
|
+
* happened to carry `*.db`. **The exclusion must not depend on the user having
|
|
130
|
+
* gitignored anything**, which is what that near-miss shows: a tool's own state
|
|
131
|
+
* is excluded because it is the tool's, not because someone tidied up.
|
|
132
|
+
*
|
|
133
|
+
* ## Why the graph path is still consulted
|
|
134
|
+
*
|
|
135
|
+
* It is configurable, so it can be moved out of `.descry/` and stay inside the
|
|
136
|
+
* repository. A path outside the repository costs nothing to list — it is not
|
|
137
|
+
* in this working tree — and is kept rather than special-cased, because the
|
|
138
|
+
* test for "is this path inside this repo" is the kind that is subtly wrong on
|
|
139
|
+
* symlinks and relative paths.
|
|
140
|
+
*
|
|
141
|
+
* Returned as directory prefixes matched at a segment boundary by the git
|
|
142
|
+
* helpers, so `.descry` excludes `.descry/config.json` and leaves
|
|
143
|
+
* `src/.descryfile.py` alone.
|
|
144
|
+
*/
|
|
145
|
+
export declare function descryOwnState(graphPath: string): readonly string[];
|
|
193
146
|
//# sourceMappingURL=kit.d.ts.map
|
package/dist/tools/kit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"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"}
|