@descryy/mcp 0.5.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 +62 -178
- package/dist/browser/driver.d.ts.map +1 -1
- package/dist/browser/driver.js +14 -46
- package/dist/browser/driver.js.map +1 -1
- package/dist/browser/evidence.d.ts +11 -35
- package/dist/browser/evidence.d.ts.map +1 -1
- package/dist/browser/evidence.js +25 -51
- package/dist/browser/evidence.js.map +1 -1
- package/dist/browser/fake-driver.d.ts +12 -16
- package/dist/browser/fake-driver.d.ts.map +1 -1
- package/dist/browser/fake-driver.js +24 -17
- 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 +17 -67
- package/dist/browser/playwright-driver.d.ts.map +1 -1
- package/dist/browser/playwright-driver.js +169 -166
- 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 +33 -91
- 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 +22 -66
- 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 +17 -0
- package/dist/capped.d.ts.map +1 -0
- package/dist/capped.js +15 -0
- package/dist/capped.js.map +1 -0
- 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 +79 -11
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +126 -14
- package/dist/render.js.map +1 -1
- package/dist/runtime-registry.d.ts +8 -49
- package/dist/runtime-registry.d.ts.map +1 -1
- package/dist/runtime-registry.js +72 -63
- 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 +55 -13
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +69 -239
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +76 -231
- package/dist/session.js.map +1 -1
- package/dist/tools/analyze.d.ts +27 -101
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +58 -148
- 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 +102 -55
- 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 +38 -51
- 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 +17 -63
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +91 -47
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/cross-pr.d.ts +56 -15
- package/dist/tools/cross-pr.d.ts.map +1 -1
- package/dist/tools/cross-pr.js +141 -38
- 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 +143 -23
- 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 +258 -436
- package/dist/tools/observe-runtime.js.map +1 -1
- package/dist/tools/observe-tests.d.ts +9 -88
- package/dist/tools/observe-tests.d.ts.map +1 -1
- package/dist/tools/observe-tests.js +34 -108
- 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 +94 -9
- package/dist/tools/pre-push.d.ts.map +1 -1
- package/dist/tools/pre-push.js +139 -34
- 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 +17 -20
- 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 +31 -47
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +133 -61
- 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 +33 -16
|
@@ -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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"}
|
|
@@ -1,51 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* ## Why this exists
|
|
8
|
-
*
|
|
9
|
-
* `similar_incidents` is built, tested and correct, and starved. Until now one
|
|
10
|
-
* thing in the whole system minted an `INCIDENT` — a commit body carrying
|
|
11
|
-
* `This reverts commit <sha>` — which produced **zero** incidents across three
|
|
12
|
-
* measured repositories and two in a real product repository. Widening the
|
|
13
|
-
* automatic detection helps (`incidents.ts` now reads manual reverts and
|
|
14
|
-
* `Fixes #123` too), but every automatic mechanism can only read what somebody
|
|
15
|
-
* already wrote down. Most bugs are fixed forward with a commit message that
|
|
16
|
-
* says what the code now does, not what it used to do wrong.
|
|
17
|
-
*
|
|
18
|
-
* The heuristic that would close that gap was built and measured and refused:
|
|
19
|
-
* `bench/incident-fix-forward.mjs` scored **25%** against a 90% threshold
|
|
20
|
-
* declared before it ran. So the remaining route is to ask, once, cheaply, at
|
|
21
|
-
* the moment the developer already knows the answer.
|
|
22
|
-
*
|
|
23
|
-
* ## Where the record lives, and why not in the graph
|
|
24
|
-
*
|
|
25
|
-
* `.descry/config.json`, beside `confirmedFacts` — DEC-223's storage decision
|
|
26
|
-
* for exactly this class of data. A store is derived data (DEC-017) and every
|
|
27
|
-
* derived table is dropped on a schema bump; a fact a person asserted, which
|
|
28
|
-
* exists nowhere else, must not be. The graph holds a *projection*
|
|
29
|
-
* (`createConfirmedIncidentSource`), re-derived by every `analyze`, and this
|
|
30
|
-
* tool writes both so the incident is visible in the same conversation that
|
|
31
|
-
* recorded it rather than after the next rebuild.
|
|
32
|
-
*
|
|
33
|
-
* ## Reliability
|
|
34
|
-
*
|
|
35
|
-
* DEC-223's rule, unchanged: an edge resting on testimony is capped at class B
|
|
36
|
-
* however much structure surrounds it. One unaudited assertion is one unaudited
|
|
37
|
-
* assertion. This tool asserts a defect existed; it asserts nothing about why,
|
|
38
|
-
* and nothing here may promote it.
|
|
39
|
-
*
|
|
40
|
-
* ## Class
|
|
41
|
-
*
|
|
42
|
-
* `action` — DEC-278's test is *"can this call's effect change a later finding
|
|
43
|
-
* without the developer having said so"*, and an `INCIDENT_CORRELATED` edge
|
|
44
|
-
* biases diff-scoping traversal toward the files it names on every later run.
|
|
45
|
-
* Gated by the same two-call `confirmToken` handshake `questions` uses.
|
|
46
|
-
*
|
|
47
|
-
* See `DEC-NEXT-incident-minting-beyond-explicit-reverts`.
|
|
48
|
-
*/
|
|
1
|
+
/** `mark_incident` — "that was a bug, I fixed it": the only incident-minting path with
|
|
2
|
+
* precision 1.0 (a person asserts it). Needed because automatic detection (reverts,
|
|
3
|
+
* `Fixes #123`) found zero incidents in 3 repos, and a fix-forward heuristic scored 25%
|
|
4
|
+
* against a 90% threshold and was refused. Stored in `.descry/config.json` (DEC-223,
|
|
5
|
+
* DEC-017 — derived tables don't survive rebuilds) and capped at class B; `action` class per DEC-278, gated by the `confirmToken` handshake. */
|
|
49
6
|
import type { ConfirmedIncident } from "@descryy/ir";
|
|
50
7
|
import { type ToolDefinition } from "./kit.ts";
|
|
51
8
|
export interface MarkIncidentData {
|
|
@@ -57,12 +14,8 @@ export interface MarkIncidentData {
|
|
|
57
14
|
readonly configPath: string;
|
|
58
15
|
/** How many confirmed incidents this repository now has on record. */
|
|
59
16
|
readonly totalConfirmed: number;
|
|
60
|
-
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* The incident is still recorded and still correlated — a developer naming a
|
|
64
|
-
* file Descry cannot read is a gap in Descry, not a mistake by the developer.
|
|
65
|
-
*/
|
|
17
|
+
/** Paths named that the graph has no node for. Still recorded and correlated — a
|
|
18
|
+
* developer naming a file Descry can't read is a gap in Descry, not a mistake. */
|
|
66
19
|
readonly filesNotInGraph: readonly string[];
|
|
67
20
|
}
|
|
68
21
|
export declare const markIncidentTool: ToolDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark-incident.d.ts","sourceRoot":"","sources":["../../src/tools/mark-incident.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mark-incident.d.ts","sourceRoot":"","sources":["../../src/tools/mark-incident.ts"],"names":[],"mappings":"AAAA;;;;iJAIiJ;AASjJ,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;uFACmF;IACnF,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAgKD,eAAO,MAAM,gBAAgB,EAAE,cAkB9B,CAAC"}
|
|
@@ -1,51 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* ## Why this exists
|
|
8
|
-
*
|
|
9
|
-
* `similar_incidents` is built, tested and correct, and starved. Until now one
|
|
10
|
-
* thing in the whole system minted an `INCIDENT` — a commit body carrying
|
|
11
|
-
* `This reverts commit <sha>` — which produced **zero** incidents across three
|
|
12
|
-
* measured repositories and two in a real product repository. Widening the
|
|
13
|
-
* automatic detection helps (`incidents.ts` now reads manual reverts and
|
|
14
|
-
* `Fixes #123` too), but every automatic mechanism can only read what somebody
|
|
15
|
-
* already wrote down. Most bugs are fixed forward with a commit message that
|
|
16
|
-
* says what the code now does, not what it used to do wrong.
|
|
17
|
-
*
|
|
18
|
-
* The heuristic that would close that gap was built and measured and refused:
|
|
19
|
-
* `bench/incident-fix-forward.mjs` scored **25%** against a 90% threshold
|
|
20
|
-
* declared before it ran. So the remaining route is to ask, once, cheaply, at
|
|
21
|
-
* the moment the developer already knows the answer.
|
|
22
|
-
*
|
|
23
|
-
* ## Where the record lives, and why not in the graph
|
|
24
|
-
*
|
|
25
|
-
* `.descry/config.json`, beside `confirmedFacts` — DEC-223's storage decision
|
|
26
|
-
* for exactly this class of data. A store is derived data (DEC-017) and every
|
|
27
|
-
* derived table is dropped on a schema bump; a fact a person asserted, which
|
|
28
|
-
* exists nowhere else, must not be. The graph holds a *projection*
|
|
29
|
-
* (`createConfirmedIncidentSource`), re-derived by every `analyze`, and this
|
|
30
|
-
* tool writes both so the incident is visible in the same conversation that
|
|
31
|
-
* recorded it rather than after the next rebuild.
|
|
32
|
-
*
|
|
33
|
-
* ## Reliability
|
|
34
|
-
*
|
|
35
|
-
* DEC-223's rule, unchanged: an edge resting on testimony is capped at class B
|
|
36
|
-
* however much structure surrounds it. One unaudited assertion is one unaudited
|
|
37
|
-
* assertion. This tool asserts a defect existed; it asserts nothing about why,
|
|
38
|
-
* and nothing here may promote it.
|
|
39
|
-
*
|
|
40
|
-
* ## Class
|
|
41
|
-
*
|
|
42
|
-
* `action` — DEC-278's test is *"can this call's effect change a later finding
|
|
43
|
-
* without the developer having said so"*, and an `INCIDENT_CORRELATED` edge
|
|
44
|
-
* biases diff-scoping traversal toward the files it names on every later run.
|
|
45
|
-
* Gated by the same two-call `confirmToken` handshake `questions` uses.
|
|
46
|
-
*
|
|
47
|
-
* See `DEC-NEXT-incident-minting-beyond-explicit-reverts`.
|
|
48
|
-
*/
|
|
1
|
+
/** `mark_incident` — "that was a bug, I fixed it": the only incident-minting path with
|
|
2
|
+
* precision 1.0 (a person asserts it). Needed because automatic detection (reverts,
|
|
3
|
+
* `Fixes #123`) found zero incidents in 3 repos, and a fix-forward heuristic scored 25%
|
|
4
|
+
* against a 90% threshold and was refused. Stored in `.descry/config.json` (DEC-223,
|
|
5
|
+
* DEC-017 — derived tables don't survive rebuilds) and capped at class B; `action` class per DEC-278, gated by the `confirmToken` handshake. */
|
|
49
6
|
import { buildGraph, confirmedIncidentId, createConfirmedIncidentSource, nodesInFiles, persistGraph, } from "@descryy/core";
|
|
50
7
|
import { writeConfirmedIncident } from "../session.js";
|
|
51
8
|
import { answer, optionalString, optionalStringArray, requiredString, ToolInputError, } from "./kit.js";
|
|
@@ -113,21 +70,17 @@ async function run(args, ctx) {
|
|
|
113
70
|
confirmedAt: new Date().toISOString(),
|
|
114
71
|
};
|
|
115
72
|
const driver = session.store().driver;
|
|
116
|
-
// Measured
|
|
117
|
-
//
|
|
118
|
-
// reverted commit's files — so asking afterwards would always answer "all of
|
|
119
|
-
// them are in the graph" and the disclosure would be a tautology.
|
|
73
|
+
// Measured before the projection runs — it mints a FILE node for every named path, so
|
|
74
|
+
// asking after would always say "all in the graph", a tautology.
|
|
120
75
|
const { missing: filesNotInGraph } = nodesInFiles(driver, recorded.files);
|
|
121
76
|
ctx.progress(`Recording an incident in ${session.config.repo}`);
|
|
122
77
|
const written = await writeConfirmedIncident(session.repoPath, recorded);
|
|
123
|
-
// Projected
|
|
124
|
-
//
|
|
125
|
-
// merges its just-written fact into the response it is about to return.
|
|
78
|
+
// Projected now, not at next `analyze`, so the incident is visible in the conversation
|
|
79
|
+
// that recorded it (same reason `questions` merges its just-written fact into its own response).
|
|
126
80
|
ctx.progress("Projecting it into the graph");
|
|
127
81
|
const batch = await createConfirmedIncidentSource({
|
|
128
82
|
repo: session.config.repo,
|
|
129
|
-
// Every record, not just this one
|
|
130
|
-
// a batch carrying only the newest would invalidate the rest of them.
|
|
83
|
+
// Every record, not just this one — projecting only the newest would invalidate the rest.
|
|
131
84
|
incidents: [...(session.config.confirmedIncidents ?? []), recorded],
|
|
132
85
|
}).emit({ root });
|
|
133
86
|
const built = buildGraph([batch], { nodeExists: (id) => session.provider().node(id) !== undefined });
|
|
@@ -154,13 +107,10 @@ async function run(args, ctx) {
|
|
|
154
107
|
return answer({
|
|
155
108
|
headline: `Recorded an incident in ${session.config.repo}, correlated to ${recorded.files.length} file(s). ` +
|
|
156
109
|
`${written.total} confirmed incident(s) now on record.`,
|
|
157
|
-
//
|
|
158
|
-
// no claim about program shape.
|
|
110
|
+
// Name-level fact: this defect existed and touched these paths — no claim about program shape.
|
|
159
111
|
nameLevel: true,
|
|
160
|
-
// R0,
|
|
161
|
-
//
|
|
162
|
-
// bottom of it, with the real ceiling expressed by `humanAsserted` where a
|
|
163
|
-
// finding is actually classified.
|
|
112
|
+
// R0, honestly — testimony isn't a point on the R0-R4 ladder (which measures tooling
|
|
113
|
+
// run); the real ceiling is `humanAsserted`, expressed where a finding is classified.
|
|
164
114
|
resolutionFloor: 0,
|
|
165
115
|
commitSha: stamp.commitSha,
|
|
166
116
|
graphBuiltAt: stamp.graphBuiltAt,
|
|
@@ -176,11 +126,8 @@ async function run(args, ctx) {
|
|
|
176
126
|
},
|
|
177
127
|
});
|
|
178
128
|
}
|
|
179
|
-
/**
|
|
180
|
-
*
|
|
181
|
-
* genuine read of the open-question queue, there is no argument to this tool
|
|
182
|
-
* that makes it not write.
|
|
183
|
-
*/
|
|
129
|
+
/** Always returns a sentence — unlike `questions`'s unconfirmed shape, no argument to this
|
|
130
|
+
* tool makes it not write. */
|
|
184
131
|
function describeAction(args) {
|
|
185
132
|
const summary = args["summary"];
|
|
186
133
|
const files = args["files"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark-incident.js","sourceRoot":"","sources":["../../src/tools/mark-incident.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mark-incident.js","sourceRoot":"","sources":["../../src/tools/mark-incident.ts"],"names":[],"mappings":"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"}
|