@descryy/mcp 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-handshake.d.ts +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 +59 -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 +4 -16
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +6 -20
- 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 +40 -194
- 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-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 +10 -58
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +38 -90
- package/dist/registry.js.map +1 -1
- package/dist/render.d.ts +42 -11
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +74 -10
- 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 +37 -17
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +67 -259
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +69 -250
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +24 -118
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +44 -166
- 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 +15 -74
- 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 +33 -55
- 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 +257 -435
- 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 +24 -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 +68 -16
- package/dist/tools/pre-push.d.ts.map +1 -1
- package/dist/tools/pre-push.js +98 -35
- 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 +14 -57
- 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 +14 -69
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +23 -74
- 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 +30 -21
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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"}
|
package/dist/tools/kit.js
CHANGED
|
@@ -1,28 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* An argument the caller can fix.
|
|
11
|
-
*
|
|
12
|
-
* Distinct from a thrown `Error`, which is a bug here. This becomes an `isError`
|
|
13
|
-
* tool result the agent can read and retry from; a bug becomes a JSON-RPC
|
|
14
|
-
* internal error, which it cannot.
|
|
15
|
-
*/
|
|
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. */
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
import { CONFIG_RELATIVE_PATH } from "../session.js";
|
|
6
|
+
/** An argument the caller can fix — distinct from a thrown `Error` (a bug here). This becomes an
|
|
7
|
+
* `isError` result the agent can read and retry from; a bug becomes an unreadable JSON-RPC error. */
|
|
16
8
|
export class ToolInputError extends Error {
|
|
17
9
|
constructor(message) {
|
|
18
10
|
super(message);
|
|
19
11
|
this.name = "ToolInputError";
|
|
20
12
|
}
|
|
21
13
|
}
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// about a dozen arguments between them; a validator would be a dependency and a
|
|
25
|
-
// second source of truth for the schemas already declared to the client.
|
|
14
|
+
// Hand-written, not schema-validated: a validator would be a second source of truth for the
|
|
15
|
+
// schemas already declared to the client.
|
|
26
16
|
export function optionalString(args, key) {
|
|
27
17
|
const value = args[key];
|
|
28
18
|
if (value === undefined || value === null)
|
|
@@ -72,15 +62,8 @@ export function optionalBoolean(args, key) {
|
|
|
72
62
|
throw new ToolInputError(`"${key}" must be a boolean`);
|
|
73
63
|
return value;
|
|
74
64
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* Wrap data that did not come from the query layer in the same envelope.
|
|
78
|
-
*
|
|
79
|
-
* `analyze` is the case: it writes rather than reads, so it has no
|
|
80
|
-
* `QueryResult`, and it would be the natural place for the disclosure discipline
|
|
81
|
-
* to leak. It uses this instead, so its reply carries the same stamp and the
|
|
82
|
-
* same rules as every query's.
|
|
83
|
-
*/
|
|
65
|
+
/** Wraps data that did not come from the query layer in the same envelope — e.g. `analyze`, which
|
|
66
|
+
* writes rather than reads and has no `QueryResult`, so its reply still carries the same stamp. */
|
|
84
67
|
export function answer(options) {
|
|
85
68
|
const result = {
|
|
86
69
|
data: options.data,
|
|
@@ -117,4 +100,53 @@ export function briefNode(node) {
|
|
|
117
100
|
resolution: node.resolution,
|
|
118
101
|
};
|
|
119
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Descry's own state inside this repository, which is not the developer's
|
|
105
|
+
* uncommitted change.
|
|
106
|
+
*
|
|
107
|
+
* ## Two paths, not one, and the second is the one that bit
|
|
108
|
+
*
|
|
109
|
+
* The first version derived this from the configured graph path alone. That is
|
|
110
|
+
* right for a single repository, where the graph sits in this repo's own
|
|
111
|
+
* `.descry/` — and wrong the moment two repositories share one graph, which is
|
|
112
|
+
* exactly what `link_workspace` produces:
|
|
113
|
+
*
|
|
114
|
+
* ```json
|
|
115
|
+
* // sherpa-backend/.descry/config.json
|
|
116
|
+
* "graph": "/home/…/sherpa-frontend/.descry/graph.db"
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* The derived exclusion then pointed into the *other* repository, and this
|
|
120
|
+
* repository's own `.descry/config.json` was excluded by nothing. Measured on a
|
|
121
|
+
* real workspace: it was reported as the developer's uncommitted work. Not an
|
|
122
|
+
* edge case — every shared-graph workspace has it.
|
|
123
|
+
*
|
|
124
|
+
* `.descry/evidence.db` escaped only because that repository's `.gitignore`
|
|
125
|
+
* happened to carry `*.db`. **The exclusion must not depend on the user having
|
|
126
|
+
* gitignored anything**, which is what that near-miss shows: a tool's own state
|
|
127
|
+
* is excluded because it is the tool's, not because someone tidied up.
|
|
128
|
+
*
|
|
129
|
+
* ## Why the graph path is still consulted
|
|
130
|
+
*
|
|
131
|
+
* It is configurable, so it can be moved out of `.descry/` and stay inside the
|
|
132
|
+
* repository. A path outside the repository costs nothing to list — it is not
|
|
133
|
+
* in this working tree — and is kept rather than special-cased, because the
|
|
134
|
+
* test for "is this path inside this repo" is the kind that is subtly wrong on
|
|
135
|
+
* symlinks and relative paths.
|
|
136
|
+
*
|
|
137
|
+
* Returned as directory prefixes matched at a segment boundary by the git
|
|
138
|
+
* helpers, so `.descry` excludes `.descry/config.json` and leaves
|
|
139
|
+
* `src/.descryfile.py` alone.
|
|
140
|
+
*/
|
|
141
|
+
export function descryOwnState(graphPath) {
|
|
142
|
+
// This repository's own state directory, always — whatever the graph does.
|
|
143
|
+
const out = new Set([dirname(CONFIG_RELATIVE_PATH)]);
|
|
144
|
+
if (graphPath !== ":memory:" && graphPath !== "") {
|
|
145
|
+
const normalised = graphPath.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
146
|
+
const slash = normalised.lastIndexOf("/");
|
|
147
|
+
// The directory, not the file: SQLite writes `-wal` and `-shm` beside it.
|
|
148
|
+
out.add(slash === -1 ? normalised : normalised.slice(0, slash));
|
|
149
|
+
}
|
|
150
|
+
return [...out];
|
|
151
|
+
}
|
|
120
152
|
//# sourceMappingURL=kit.js.map
|
package/dist/tools/kit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* ## Why this exists as a tool and not a smarter `analyze`
|
|
7
|
-
*
|
|
8
|
-
* `analyze` already discloses "no workspace is configured" (DEC-054) and,
|
|
9
|
-
* until now, that disclosure was a dead end — true, and nowhere to go. This
|
|
10
|
-
* tool is where it goes: an agent that reads the disclosure can act on it in
|
|
11
|
-
* the same conversation, in plain English, rather than sending the developer
|
|
12
|
-
* to a terminal.
|
|
13
|
-
*
|
|
14
|
-
* ## The constraint that makes this legal
|
|
15
|
-
*
|
|
16
|
-
* `workspace.ts`'s header is explicit that a pairing between two directories
|
|
17
|
-
* is a name inference and this project does not make that inference. An
|
|
18
|
-
* agent that can see `sherpa-frontend` sitting next to `sherpa-backend` may
|
|
19
|
-
* **propose** it — that is a suggestion grounded in something real, a
|
|
20
|
-
* directory listing — but it must never **decide** the two belong together
|
|
21
|
-
* and call this tool unprompted. `repos` is not filled in by this tool from
|
|
22
|
-
* anything it can see; it is supplied by the caller, and the caller's own
|
|
23
|
-
* description is instructed to obtain that list from the user's explicit
|
|
24
|
-
* confirmation, not from its own inference. The tool has no way to verify
|
|
25
|
-
* that happened — the same trust boundary every write tool in this server
|
|
26
|
-
* already crosses when a client approves the call — so the discipline is
|
|
27
|
-
* enforced by what this tool refuses to do (guess) rather than by what it
|
|
28
|
-
* can check.
|
|
29
|
-
*
|
|
30
|
-
* ## The one tool in this server that writes outside its own session root
|
|
31
|
-
*
|
|
32
|
-
* Every other tool operates on `session.repoPath` alone. `repos` here names
|
|
33
|
-
* arbitrary paths on disk, because the whole point is writing into siblings
|
|
34
|
-
* the current session does not own. Each path is required to exist and be a
|
|
35
|
-
* directory before anything is written, and a path that fails that check is
|
|
36
|
-
* reported rather than silently skipped — a typo'd path here is exactly the
|
|
37
|
-
* kind of silent failure DEC-054 exists to prevent, one level up.
|
|
38
|
-
*/
|
|
1
|
+
/** `link_workspace` — the agent-mediated door onto what `descry init` writes from the CLI
|
|
2
|
+
* (shared `writeConfig`). Closes `analyze`'s "no workspace configured" disclosure (DEC-054),
|
|
3
|
+
* previously a dead end. Never infers pairing — `repos` must come from the user's explicit
|
|
4
|
+
* confirmation, not the caller's guess (workspace.ts's rule: never infer, always declare).
|
|
5
|
+
* The only tool writing outside its session root; a path that fails to exist is disclosed, never silently skipped. */
|
|
39
6
|
import { type ToolDefinition } from "./kit.ts";
|
|
40
7
|
/** A repository the workspace id was actually written into. */
|
|
41
8
|
export interface LinkedRepo {
|
|
@@ -47,13 +14,8 @@ export interface LinkedRepo {
|
|
|
47
14
|
}
|
|
48
15
|
export interface LinkWorkspaceData {
|
|
49
16
|
readonly workspace: string;
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* A path that did not exist is **absent from this list and disclosed** — the
|
|
54
|
-
* workspace id is byte-identical only where it was written, and a partial
|
|
55
|
-
* link that looks complete is the failure this list exists to make visible.
|
|
56
|
-
*/
|
|
17
|
+
/** Only the repositories actually written. A path that didn't exist is absent from this
|
|
18
|
+
* list and disclosed — a partial link that looks complete is the failure this exists to catch. */
|
|
57
19
|
readonly written: readonly LinkedRepo[];
|
|
58
20
|
/** How many were asked for. Compare against `written.length`. */
|
|
59
21
|
readonly requested: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-workspace.d.ts","sourceRoot":"","sources":["../../src/tools/link-workspace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"link-workspace.d.ts","sourceRoot":"","sources":["../../src/tools/link-workspace.ts"],"names":[],"mappings":"AAAA;;;;uHAIuH;AAMvH,OAAO,EAA4D,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAGzG,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;uGACmG;IACnG,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAqID,eAAO,MAAM,iBAAiB,EAAE,cAe/B,CAAC"}
|
|
@@ -1,41 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* ## Why this exists as a tool and not a smarter `analyze`
|
|
7
|
-
*
|
|
8
|
-
* `analyze` already discloses "no workspace is configured" (DEC-054) and,
|
|
9
|
-
* until now, that disclosure was a dead end — true, and nowhere to go. This
|
|
10
|
-
* tool is where it goes: an agent that reads the disclosure can act on it in
|
|
11
|
-
* the same conversation, in plain English, rather than sending the developer
|
|
12
|
-
* to a terminal.
|
|
13
|
-
*
|
|
14
|
-
* ## The constraint that makes this legal
|
|
15
|
-
*
|
|
16
|
-
* `workspace.ts`'s header is explicit that a pairing between two directories
|
|
17
|
-
* is a name inference and this project does not make that inference. An
|
|
18
|
-
* agent that can see `sherpa-frontend` sitting next to `sherpa-backend` may
|
|
19
|
-
* **propose** it — that is a suggestion grounded in something real, a
|
|
20
|
-
* directory listing — but it must never **decide** the two belong together
|
|
21
|
-
* and call this tool unprompted. `repos` is not filled in by this tool from
|
|
22
|
-
* anything it can see; it is supplied by the caller, and the caller's own
|
|
23
|
-
* description is instructed to obtain that list from the user's explicit
|
|
24
|
-
* confirmation, not from its own inference. The tool has no way to verify
|
|
25
|
-
* that happened — the same trust boundary every write tool in this server
|
|
26
|
-
* already crosses when a client approves the call — so the discipline is
|
|
27
|
-
* enforced by what this tool refuses to do (guess) rather than by what it
|
|
28
|
-
* can check.
|
|
29
|
-
*
|
|
30
|
-
* ## The one tool in this server that writes outside its own session root
|
|
31
|
-
*
|
|
32
|
-
* Every other tool operates on `session.repoPath` alone. `repos` here names
|
|
33
|
-
* arbitrary paths on disk, because the whole point is writing into siblings
|
|
34
|
-
* the current session does not own. Each path is required to exist and be a
|
|
35
|
-
* directory before anything is written, and a path that fails that check is
|
|
36
|
-
* reported rather than silently skipped — a typo'd path here is exactly the
|
|
37
|
-
* kind of silent failure DEC-054 exists to prevent, one level up.
|
|
38
|
-
*/
|
|
1
|
+
/** `link_workspace` — the agent-mediated door onto what `descry init` writes from the CLI
|
|
2
|
+
* (shared `writeConfig`). Closes `analyze`'s "no workspace configured" disclosure (DEC-054),
|
|
3
|
+
* previously a dead end. Never infers pairing — `repos` must come from the user's explicit
|
|
4
|
+
* confirmation, not the caller's guess (workspace.ts's rule: never infer, always declare).
|
|
5
|
+
* The only tool writing outside its session root; a path that fails to exist is disclosed, never silently skipped. */
|
|
39
6
|
import { existsSync, statSync } from "node:fs";
|
|
40
7
|
import { resolve } from "node:path";
|
|
41
8
|
import { writeConfig, writeWorkspaceRepos } from "../session.js";
|
|
@@ -113,13 +80,9 @@ async function run(args, ctx) {
|
|
|
113
80
|
notes.push(`${entry.repo}: replaced previous workspace "${result.previousWorkspace}" with "${workspace}".`);
|
|
114
81
|
}
|
|
115
82
|
}
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
// alone tells a session nothing about where its siblings live on disk, and a
|
|
120
|
-
// workspace-scoped confirmed fact lives in whichever repository recorded it
|
|
121
|
-
// (DEC-NEXT-workspace-scoped-confirmed-facts). Still nothing inferred: this
|
|
122
|
-
// is the caller's own list, resolved to absolute paths and written back.
|
|
83
|
+
// Membership list, written after the loop so it names repos the link actually reached, not
|
|
84
|
+
// what it was asked about. A workspace name alone doesn't say where siblings live on disk
|
|
85
|
+
// (DEC-NEXT-workspace-scoped-confirmed-facts). Still the caller's own list — nothing inferred.
|
|
123
86
|
const members = written.map((w) => ({ path: w.path, repo: w.repo }));
|
|
124
87
|
for (const member of members) {
|
|
125
88
|
await writeWorkspaceRepos(member.path, members);
|
|
@@ -138,9 +101,8 @@ async function run(args, ctx) {
|
|
|
138
101
|
`to workspace "${workspace}".`,
|
|
139
102
|
state: written.length === 0 ? "refused" : "ok",
|
|
140
103
|
nameLevel: true,
|
|
141
|
-
// Writing a config file is not evidence about code,
|
|
142
|
-
//
|
|
143
|
-
// choice `analyze` makes when no code-reading source ran.
|
|
104
|
+
// Writing a config file is not evidence about code — R0, the same choice `analyze`
|
|
105
|
+
// makes when no code-reading source ran.
|
|
144
106
|
resolutionFloor: 0,
|
|
145
107
|
commitSha: null,
|
|
146
108
|
graphBuiltAt: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-workspace.js","sourceRoot":"","sources":["../../src/tools/link-workspace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"link-workspace.js","sourceRoot":"","sources":["../../src/tools/link-workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/lookup.d.ts
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* functions in one repository can legitimately be called `charge`, and the
|
|
6
|
-
* tempting move — take the first row, or the one with the most edges — is how a
|
|
7
|
-
* tool ends up answering confidently about the wrong symbol. There is no signal
|
|
8
|
-
* available here that distinguishes them; picking would be inventing one.
|
|
9
|
-
*
|
|
10
|
-
* So ambiguity is returned, with the candidates, and the caller is told how to
|
|
11
|
-
* narrow it. That is the same discipline the graph builder applies to an
|
|
12
|
-
* unresolvable edge (never stub a node) and the adapters apply to an unreadable
|
|
13
|
-
* receiver (ledger row, never a guess), arriving at the interaction layer.
|
|
14
|
-
*/
|
|
1
|
+
/** Turns what a developer typed into exactly one node, or refuses to. With no signal to pick
|
|
2
|
+
* between two nodes plausibly named `charge`, picking would be inventing evidence — so ambiguity
|
|
3
|
+
* returns with candidates and how to narrow, the same discipline the graph builder applies to an
|
|
4
|
+
* unresolvable edge (never stub a node) and adapters apply to an unreadable receiver. */
|
|
15
5
|
import type { IRNode } from "@descryy/ir";
|
|
16
6
|
import type { Session } from "../session.ts";
|
|
17
7
|
export interface Lookup {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../src/tools/lookup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../src/tools/lookup.ts"],"names":[],"mappings":"AAAA;;;0FAG0F;AAG1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,MAAM;IACrB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE;IACR,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,GACA,MAAM,CA+DR"}
|
package/dist/tools/lookup.js
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* functions in one repository can legitimately be called `charge`, and the
|
|
6
|
-
* tempting move — take the first row, or the one with the most edges — is how a
|
|
7
|
-
* tool ends up answering confidently about the wrong symbol. There is no signal
|
|
8
|
-
* available here that distinguishes them; picking would be inventing one.
|
|
9
|
-
*
|
|
10
|
-
* So ambiguity is returned, with the candidates, and the caller is told how to
|
|
11
|
-
* narrow it. That is the same discipline the graph builder applies to an
|
|
12
|
-
* unresolvable edge (never stub a node) and the adapters apply to an unreadable
|
|
13
|
-
* receiver (ledger row, never a guess), arriving at the interaction layer.
|
|
14
|
-
*/
|
|
1
|
+
/** Turns what a developer typed into exactly one node, or refuses to. With no signal to pick
|
|
2
|
+
* between two nodes plausibly named `charge`, picking would be inventing evidence — so ambiguity
|
|
3
|
+
* returns with candidates and how to narrow, the same discipline the graph builder applies to an
|
|
4
|
+
* unresolvable edge (never stub a node) and adapters apply to an unreadable receiver. */
|
|
15
5
|
import { findNodes, getNode } from "@descryy/core";
|
|
16
6
|
export function resolveOneNode(session, criteria) {
|
|
17
7
|
const driver = session.store().driver;
|
package/dist/tools/lookup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/tools/lookup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/tools/lookup.ts"],"names":[],"mappings":"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"}
|