@ttsc/graph 0.18.4 → 0.19.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/README.md +231 -37
- package/lib/TtscGraphApplication.d.ts +1 -1
- package/lib/TtscGraphApplication.js +50 -17
- package/lib/TtscGraphApplication.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.js +20 -1
- package/lib/index.js.map +1 -1
- package/lib/model/TtscGraphMemory.js +80 -22
- package/lib/model/TtscGraphMemory.js.map +1 -1
- package/lib/model/TtscGraphSession.js +92 -138
- package/lib/model/TtscGraphSession.js.map +1 -1
- package/lib/model/loadGraph.js +91 -138
- package/lib/model/loadGraph.js.map +1 -1
- package/lib/resolveGraphBinary.d.ts +4 -2
- package/lib/resolveGraphBinary.js +7 -3
- package/lib/resolveGraphBinary.js.map +1 -1
- package/lib/server/createServer.d.ts +16 -9
- package/lib/server/createServer.js +286 -190
- package/lib/server/createServer.js.map +1 -1
- package/lib/server/exportSurface.d.ts +26 -0
- package/lib/server/exportSurface.js +44 -0
- package/lib/server/exportSurface.js.map +1 -0
- package/lib/server/resolveHandle.d.ts +26 -1
- package/lib/server/resolveHandle.js +124 -4
- package/lib/server/resolveHandle.js.map +1 -1
- package/lib/server/resultAudit.d.ts +74 -0
- package/lib/server/resultAudit.js +110 -0
- package/lib/server/resultAudit.js.map +1 -0
- package/lib/server/resultNext.d.ts +9 -0
- package/lib/server/resultNext.js +11 -0
- package/lib/server/resultNext.js.map +1 -0
- package/lib/server/runDetails.d.ts +15 -3
- package/lib/server/runDetails.js +105 -23
- package/lib/server/runDetails.js.map +1 -1
- package/lib/server/runEntrypoints.d.ts +2 -1
- package/lib/server/runEntrypoints.js +17 -10
- package/lib/server/runEntrypoints.js.map +1 -1
- package/lib/server/runLookup.d.ts +2 -1
- package/lib/server/runLookup.js +21 -9
- package/lib/server/runLookup.js.map +1 -1
- package/lib/server/runOverview.d.ts +2 -1
- package/lib/server/runOverview.js +5 -4
- package/lib/server/runOverview.js.map +1 -1
- package/lib/server/runTour.d.ts +2 -1
- package/lib/server/runTour.js +707 -331
- package/lib/server/runTour.js.map +1 -1
- package/lib/server/runTrace.d.ts +2 -1
- package/lib/server/runTrace.js +234 -54
- package/lib/server/runTrace.js.map +1 -1
- package/lib/structures/ITtscGraphApplication.d.ts +122 -118
- package/lib/structures/ITtscGraphDecorator.d.ts +4 -7
- package/lib/structures/ITtscGraphDetails.d.ts +51 -43
- package/lib/structures/ITtscGraphDump.d.ts +32 -8
- package/lib/structures/ITtscGraphEdge.d.ts +4 -6
- package/lib/structures/ITtscGraphEntrypoints.d.ts +10 -27
- package/lib/structures/ITtscGraphEscape.d.ts +6 -16
- package/lib/structures/ITtscGraphEvidence.d.ts +5 -8
- package/lib/structures/ITtscGraphLookup.d.ts +9 -20
- package/lib/structures/ITtscGraphNext.d.ts +10 -7
- package/lib/structures/ITtscGraphNode.d.ts +17 -8
- package/lib/structures/ITtscGraphOverview.d.ts +10 -14
- package/lib/structures/ITtscGraphSpan.d.ts +29 -0
- package/lib/structures/{ITtscGraphDiagnostic.js → ITtscGraphSpan.js} +1 -1
- package/lib/structures/ITtscGraphSpan.js.map +1 -0
- package/lib/structures/ITtscGraphTour.d.ts +65 -23
- package/lib/structures/ITtscGraphTrace.d.ts +72 -49
- package/lib/structures/TtscGraphEdgeKind.d.ts +7 -1
- package/lib/structures/index.d.ts +1 -1
- package/lib/structures/index.js +1 -1
- package/lib/structures/index.js.map +1 -1
- package/lib/view.js +3 -1
- package/lib/view.js.map +1 -1
- package/package.json +4 -4
- package/src/TtscGraphApplication.ts +58 -27
- package/src/index.ts +19 -1
- package/src/model/TtscGraphMemory.ts +86 -22
- package/src/model/TtscGraphSession.ts +5 -1
- package/src/model/loadGraph.ts +3 -1
- package/src/resolveGraphBinary.ts +7 -3
- package/src/server/createServer.ts +24 -17
- package/src/server/exportSurface.ts +40 -0
- package/src/server/resolveHandle.ts +141 -4
- package/src/server/resultAudit.ts +109 -0
- package/src/server/resultNext.ts +22 -0
- package/src/server/runDetails.ts +112 -28
- package/src/server/runEntrypoints.ts +26 -17
- package/src/server/runLookup.ts +29 -18
- package/src/server/runOverview.ts +9 -10
- package/src/server/runTour.ts +764 -363
- package/src/server/runTrace.ts +265 -71
- package/src/structures/ITtscGraphApplication.ts +124 -118
- package/src/structures/ITtscGraphDecorator.ts +4 -7
- package/src/structures/ITtscGraphDetails.ts +60 -46
- package/src/structures/ITtscGraphDump.ts +37 -8
- package/src/structures/ITtscGraphEdge.ts +4 -6
- package/src/structures/ITtscGraphEntrypoints.ts +10 -30
- package/src/structures/ITtscGraphEscape.ts +6 -19
- package/src/structures/ITtscGraphEvidence.ts +5 -8
- package/src/structures/ITtscGraphLookup.ts +9 -22
- package/src/structures/ITtscGraphNext.ts +10 -7
- package/src/structures/ITtscGraphNode.ts +18 -8
- package/src/structures/ITtscGraphOverview.ts +10 -17
- package/src/structures/ITtscGraphSpan.ts +33 -0
- package/src/structures/ITtscGraphTour.ts +70 -28
- package/src/structures/ITtscGraphTrace.ts +82 -51
- package/src/structures/TtscGraphEdgeKind.ts +7 -0
- package/src/structures/index.ts +1 -1
- package/src/view.ts +3 -1
- package/lib/server/accessAliases.d.ts +0 -8
- package/lib/server/accessAliases.js +0 -53
- package/lib/server/accessAliases.js.map +0 -1
- package/lib/server/resultGuide.d.ts +0 -3
- package/lib/server/resultGuide.js +0 -16
- package/lib/server/resultGuide.js.map +0 -1
- package/lib/structures/ITtscGraphDiagnostic.d.ts +0 -27
- package/lib/structures/ITtscGraphDiagnostic.js.map +0 -1
- package/src/server/accessAliases.ts +0 -55
- package/src/server/resultGuide.ts +0 -20
- package/src/structures/ITtscGraphDiagnostic.ts +0 -34
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ITtscGraphEvidence } from "./ITtscGraphEvidence";
|
|
2
|
-
import { ITtscGraphNext } from "./ITtscGraphNext";
|
|
3
2
|
|
|
4
3
|
/** The compact dependency or caller flow returned from a selected start symbol. */
|
|
5
4
|
export interface ITtscGraphTrace {
|
|
@@ -18,99 +17,141 @@ export interface ITtscGraphTrace {
|
|
|
18
17
|
/** Unique nodes reached (excluding the start), each with its depth and roles. */
|
|
19
18
|
reached: ITtscGraphTrace.INode[];
|
|
20
19
|
|
|
21
|
-
/** True when the trace hit
|
|
20
|
+
/** True when the trace hit its node or depth cap; the returned flow stands. */
|
|
22
21
|
truncated: boolean;
|
|
23
22
|
|
|
24
23
|
/** The resolved `to` target, when a path was requested. */
|
|
25
24
|
target?: ITtscGraphTrace.INode;
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* `from`.
|
|
27
|
+
* Ordered dependency path from `from` to `to` when `to` was given (`from`
|
|
28
|
+
* first, `to` last), empty when `to` is unreachable.
|
|
31
29
|
*/
|
|
32
30
|
path?: ITtscGraphTrace.INode[];
|
|
33
31
|
|
|
34
32
|
/** Compact hop summaries preserving node names and edge evidence, capped. */
|
|
35
33
|
steps?: string[];
|
|
36
34
|
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Symbols both ends touch, when no call path runs between them.
|
|
37
|
+
*
|
|
38
|
+
* Nothing calls across the gap because in an event-driven codebase nothing
|
|
39
|
+
* does: a handler registers a listener on an emitter, the emitter's `emit()`
|
|
40
|
+
* runs whatever a registration put in an array, and no call edge crosses that
|
|
41
|
+
* array. But both ends touch the emitter, and that is an edge, not a guess —
|
|
42
|
+
* Excalidraw's pointer handler and its store's emit both reference
|
|
43
|
+
* `Store.onDurableIncrementEmitter`, which is exactly the seam the call graph
|
|
44
|
+
* cannot walk.
|
|
45
|
+
*
|
|
46
|
+
* A junction is not a path. It is the symbol to look at next, and the edges
|
|
47
|
+
* that say why.
|
|
48
|
+
*/
|
|
49
|
+
junctions?: ITtscGraphTrace.IJunction[];
|
|
42
50
|
|
|
43
51
|
/** When `from` was an ambiguous name, the matches to disambiguate with. */
|
|
44
52
|
candidates?: ITtscGraphTrace.INode[];
|
|
45
53
|
}
|
|
46
54
|
export namespace ITtscGraphTrace {
|
|
55
|
+
/** A symbol both ends of an unreachable path touch, and how each touches it. */
|
|
56
|
+
export interface IJunction {
|
|
57
|
+
/** Stable node id: trace or inspect this symbol to cross the seam. */
|
|
58
|
+
id: string;
|
|
59
|
+
|
|
60
|
+
/** Qualified symbol name when available, otherwise the simple name. */
|
|
61
|
+
name: string;
|
|
62
|
+
|
|
63
|
+
/** Declaration kind (`variable`, `method`, `class`, ...). */
|
|
64
|
+
kind: string;
|
|
65
|
+
|
|
66
|
+
/** Project-relative path of the file that declares it. */
|
|
67
|
+
file: string;
|
|
68
|
+
|
|
69
|
+
/** 1-based declaration line, when known. */
|
|
70
|
+
line?: number;
|
|
71
|
+
|
|
72
|
+
/** How the start reaches it: the edge kind, and where that edge sits. */
|
|
73
|
+
fromStart: IJunctionEdge;
|
|
74
|
+
|
|
75
|
+
/** How the target reaches it, or is reached from it. */
|
|
76
|
+
fromTarget: IJunctionEdge;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** One edge between an end of the requested path and the junction. */
|
|
80
|
+
export interface IJunctionEdge {
|
|
81
|
+
/** `calls`, `accesses`, `instantiates`, `type_ref`, ... */
|
|
82
|
+
kind: string;
|
|
83
|
+
|
|
84
|
+
/** True when the end is the edge's source, false when it is the target. */
|
|
85
|
+
outgoing: boolean;
|
|
86
|
+
|
|
87
|
+
/** Where the reference sits in source. */
|
|
88
|
+
evidence?: ITtscGraphEvidence;
|
|
89
|
+
}
|
|
90
|
+
|
|
47
91
|
/** Where and how far to trace dependency flow. */
|
|
48
92
|
export interface IRequest {
|
|
49
93
|
/** Discriminator for dependency tracing. */
|
|
50
94
|
type: "trace";
|
|
51
95
|
|
|
52
96
|
/**
|
|
53
|
-
* Where to start: a node id
|
|
54
|
-
*
|
|
55
|
-
*
|
|
97
|
+
* Where to start: a node id, a simple symbol name, or a dotted member
|
|
98
|
+
* (`OrderService.create`). An ambiguous name returns its candidates instead
|
|
99
|
+
* of a trace.
|
|
56
100
|
*/
|
|
57
101
|
from: string;
|
|
58
102
|
|
|
59
103
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
104
|
+
* Target symbol (node id, simple name, or dotted member). When given, the
|
|
105
|
+
* tool returns the dependency path from `from` to it, the one-call answer
|
|
106
|
+
* for "how does A reach B". Prefer this path mode whenever both ends are
|
|
107
|
+
* known.
|
|
64
108
|
*/
|
|
65
109
|
to?: string;
|
|
66
110
|
|
|
67
111
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
112
|
+
* Trace direction:
|
|
113
|
+
*
|
|
114
|
+
* - `forward`: what the start uses (callees, instantiations, renders)
|
|
115
|
+
* - `reverse`: what uses the start (callers); the usual fit for caller
|
|
116
|
+
* questions
|
|
117
|
+
* - `impact`: reverse trace prioritizing public API and test nodes a change
|
|
118
|
+
* reaches; its test nodes are semantic usage edges, not a text search
|
|
73
119
|
*
|
|
74
120
|
* @default "forward"
|
|
75
121
|
*/
|
|
76
122
|
direction?: "forward" | "reverse" | "impact";
|
|
77
123
|
|
|
78
124
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
125
|
+
* Non-structural edge family to follow:
|
|
126
|
+
*
|
|
127
|
+
* - `execution`: runtime calls, instantiations, property access, JSX renders
|
|
128
|
+
* - `types`: type references and inheritance
|
|
129
|
+
* - `all`: the full graph
|
|
130
|
+
*
|
|
131
|
+
* Flow questions usually want `execution`, not `all`.
|
|
83
132
|
*
|
|
84
133
|
* @default "all"
|
|
85
134
|
*/
|
|
86
135
|
focus?: "all" | "execution" | "types";
|
|
87
136
|
|
|
88
137
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* Prefer the default for open traces. Raise only for path mode or when the
|
|
93
|
-
* previous trace named the missing next hop.
|
|
138
|
+
* Hops deep to follow (open forward/reverse cap at 8, impact at 4, path
|
|
139
|
+
* mode at 12). Raise it to follow a runtime chain to its end in one call.
|
|
94
140
|
*
|
|
95
|
-
* @default
|
|
141
|
+
* @default 3
|
|
96
142
|
*/
|
|
97
143
|
maxDepth?: number;
|
|
98
144
|
|
|
99
145
|
/**
|
|
100
|
-
* Cap on reached nodes
|
|
101
|
-
* Open forward/reverse traces are capped at 8 nodes, impact at 16 nodes.
|
|
146
|
+
* Cap on reached nodes (open forward/reverse cap at 32, impact at 16).
|
|
102
147
|
*
|
|
103
|
-
*
|
|
104
|
-
* requires it.
|
|
105
|
-
*
|
|
106
|
-
* @default 6
|
|
148
|
+
* @default 12
|
|
107
149
|
*/
|
|
108
150
|
maxNodes?: number;
|
|
109
151
|
|
|
110
152
|
/**
|
|
111
153
|
* Include dependency-boundary nodes from node_modules or bundled `.d.ts`
|
|
112
|
-
* libraries.
|
|
113
|
-
* asks about external type/API boundaries.
|
|
154
|
+
* libraries. Enable only for questions about external type/API boundaries.
|
|
114
155
|
*
|
|
115
156
|
* @default false
|
|
116
157
|
*/
|
|
@@ -131,18 +172,8 @@ export namespace ITtscGraphTrace {
|
|
|
131
172
|
/** Hops from the start (1 = direct). */
|
|
132
173
|
depth: number;
|
|
133
174
|
|
|
134
|
-
/**
|
|
135
|
-
* Source span for the expression that produced this hop. It is repository
|
|
136
|
-
* evidence for the hop and can be cited without opening the file.
|
|
137
|
-
*/
|
|
175
|
+
/** Source span that produced the hop: citable without opening the file. */
|
|
138
176
|
evidence?: ITtscGraphEvidence;
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Stable access-path aliases derived from edge evidence. These preserve a
|
|
142
|
-
* resolved member's owner and the concrete property path used at the call
|
|
143
|
-
* site.
|
|
144
|
-
*/
|
|
145
|
-
aliases?: string[];
|
|
146
177
|
}
|
|
147
178
|
|
|
148
179
|
/** A node on the trace: the start, a reached node, or a candidate. */
|
|
@@ -6,6 +6,12 @@
|
|
|
6
6
|
* `extends`, `implements`, `overrides`, `renders`) are resolved by the checker
|
|
7
7
|
* — `renders` is a JSX component use. `decorates` carries a decorator fact and
|
|
8
8
|
* `tests` a test-to-subject relationship.
|
|
9
|
+
*
|
|
10
|
+
* `dispatches` is the runtime counterpart of `overrides`/`implements`: the
|
|
11
|
+
* checker resolves a call to the declaration it names, and where that
|
|
12
|
+
* declaration is abstract or an interface member, the code that runs is its
|
|
13
|
+
* implementation. It carries the implementation's declaration span, and a
|
|
14
|
+
* traversal that follows what executes emits it in place of the dead end.
|
|
9
15
|
*/
|
|
10
16
|
export type TtscGraphEdgeKind =
|
|
11
17
|
| "contains"
|
|
@@ -18,6 +24,7 @@ export type TtscGraphEdgeKind =
|
|
|
18
24
|
| "extends"
|
|
19
25
|
| "implements"
|
|
20
26
|
| "overrides"
|
|
27
|
+
| "dispatches"
|
|
21
28
|
| "decorates"
|
|
22
29
|
| "renders"
|
|
23
30
|
| "tests";
|
package/src/structures/index.ts
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
export * from "./ITtscGraphApplication";
|
|
8
8
|
export * from "./ITtscGraphDecorator";
|
|
9
|
-
export * from "./ITtscGraphDiagnostic";
|
|
10
9
|
export * from "./ITtscGraphDump";
|
|
11
10
|
export * from "./ITtscGraphEdge";
|
|
12
11
|
export * from "./ITtscGraphEvidence";
|
|
@@ -18,6 +17,7 @@ export * from "./ITtscGraphOverview";
|
|
|
18
17
|
export * from "./ITtscGraphLookup";
|
|
19
18
|
export * from "./ITtscGraphNext";
|
|
20
19
|
export * from "./ITtscGraphTrace";
|
|
20
|
+
export * from "./ITtscGraphSpan";
|
|
21
21
|
export * from "./ITtscGraphTour";
|
|
22
22
|
export * from "./TtscGraphEdgeKind";
|
|
23
23
|
export * from "./TtscGraphNodeKind";
|
package/src/view.ts
CHANGED
|
@@ -51,7 +51,9 @@ function parseViewArgs(argv: readonly string[]): ViewOptions {
|
|
|
51
51
|
export function runView(argv: readonly string[]): number | void {
|
|
52
52
|
const opts = parseViewArgs(argv);
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
// Anchor binary resolution at the project selected by `--cwd`, so `view` from
|
|
55
|
+
// an unrelated directory still finds the `ttsc` installed under the target.
|
|
56
|
+
const binary = resolveGraphBinary(process.env, opts.cwd);
|
|
55
57
|
if (binary === null) {
|
|
56
58
|
process.stderr.write(
|
|
57
59
|
"@ttsc/graph: could not resolve the ttscgraph binary. " +
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ITtscGraphNode } from "../structures/ITtscGraphNode";
|
|
2
|
-
/**
|
|
3
|
-
* Derive stable access-path aliases for a member edge from its source
|
|
4
|
-
* expression. If a hop reaches `Owner.member` through `obj.path.member`, the
|
|
5
|
-
* alias `Owner.path.member` keeps both the resolved owner and the concrete
|
|
6
|
-
* access path visible without reopening source.
|
|
7
|
-
*/
|
|
8
|
-
export declare function accessAliasesFor(node: ITtscGraphNode | undefined, evidenceText: string | undefined): string[] | undefined;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.accessAliasesFor = accessAliasesFor;
|
|
4
|
-
/**
|
|
5
|
-
* Derive stable access-path aliases for a member edge from its source
|
|
6
|
-
* expression. If a hop reaches `Owner.member` through `obj.path.member`, the
|
|
7
|
-
* alias `Owner.path.member` keeps both the resolved owner and the concrete
|
|
8
|
-
* access path visible without reopening source.
|
|
9
|
-
*/
|
|
10
|
-
function accessAliasesFor(node, evidenceText) {
|
|
11
|
-
if (node === undefined ||
|
|
12
|
-
node.qualifiedName === undefined ||
|
|
13
|
-
evidenceText === undefined) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
const segments = dottedSegments(evidenceText);
|
|
17
|
-
if (segments.length < 2 || segments[segments.length - 1] !== node.name) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
const dot = node.qualifiedName.lastIndexOf(".");
|
|
21
|
-
if (dot < 0)
|
|
22
|
-
return undefined;
|
|
23
|
-
const owner = node.qualifiedName.slice(0, dot);
|
|
24
|
-
const suffix = segments.slice(1).join(".");
|
|
25
|
-
const aliases = new Set();
|
|
26
|
-
for (const candidate of [...ownerDisplayAliases(owner), owner]) {
|
|
27
|
-
const alias = `${candidate}.${suffix}`;
|
|
28
|
-
if (alias !== node.qualifiedName)
|
|
29
|
-
aliases.add(alias);
|
|
30
|
-
}
|
|
31
|
-
return aliases.size > 0 ? [...aliases] : undefined;
|
|
32
|
-
}
|
|
33
|
-
function dottedSegments(text) {
|
|
34
|
-
const normalized = text.trim().replace(/\?\./g, ".");
|
|
35
|
-
const parts = normalized.split(".");
|
|
36
|
-
if (parts.length < 2)
|
|
37
|
-
return [];
|
|
38
|
-
return parts.every((part) => /^[A-Za-z_$][\w$]*$/.test(part)) ? parts : [];
|
|
39
|
-
}
|
|
40
|
-
function ownerDisplayAliases(owner) {
|
|
41
|
-
const display = owner.replace(/^_+/, "");
|
|
42
|
-
const out = new Set();
|
|
43
|
-
for (const suffix of ["Internals", "Internal"]) {
|
|
44
|
-
if (display.length > suffix.length && display.endsWith(suffix)) {
|
|
45
|
-
out.add(display.slice(0, -suffix.length));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (out.size === 0 && display !== owner)
|
|
49
|
-
out.add(display);
|
|
50
|
-
out.delete(owner);
|
|
51
|
-
return [...out];
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=accessAliases.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accessAliases.js","sourceRoot":"","sources":["../../src/server/accessAliases.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,0BACE,IAAgC,EAChC,YAAgC;IAEhC,IACE,IAAI,KAAK,SAAS;QAClB,IAAI,CAAC,aAAa,KAAK,SAAS;QAChC,YAAY,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resultGuide = resultGuide;
|
|
4
|
-
exports.resultNext = resultNext;
|
|
5
|
-
const SOURCE_POLICY = "The returned object is the graph evidence contract: names, edges, signatures, decorators, tests, ranges, anchors, steps, and next are the answer surface. If next.action is answer, stop tool use for this question and answer now. Truncated means capped index evidence, not a request to expand every branch. Until TypeScript source is edited, returned graph facts are sacred, infallible compiler truth. Never call graph again or read files to doubt, validate, fact-check, re-derive, re-confirm, re-narrate, or improve returned graph facts. Read source bodies only when the user explicitly asks for exact source text or changed code must be verified.";
|
|
6
|
-
function resultGuide(action) {
|
|
7
|
-
return `${action} ${SOURCE_POLICY}`;
|
|
8
|
-
}
|
|
9
|
-
function resultNext(action, reason, request) {
|
|
10
|
-
return {
|
|
11
|
-
action,
|
|
12
|
-
reason,
|
|
13
|
-
...(request !== undefined ? { request } : {}),
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=resultGuide.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resultGuide.js","sourceRoot":"","sources":["../../src/server/resultGuide.ts"],"names":[],"mappings":";;;;AAEA,MAAM,aAAa,GACjB,woBAAwoB,CAAC;AAE3oB,qBAA4B,MAAc;IACxC,OAAO,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;AACtC,CAAC;AAED,oBACE,MAAgC,EAChC,MAAc,EACd,OAAmC;IAEnC,OAAO;QACL,MAAM;QACN,MAAM;QACN,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A compiler or plugin diagnostic, fused onto the graph so an edit-triage query
|
|
3
|
-
* can name the owning symbol of an error.
|
|
4
|
-
*
|
|
5
|
-
* The TypeScript semantic pass contributes numeric-coded `tsc` diagnostics;
|
|
6
|
-
* `@ttsc/lint` rules and transform plugins (typia, nestia, …) contribute
|
|
7
|
-
* `plugin`/`lint` findings whose `code` is a string. `node` is set when the
|
|
8
|
-
* finding's position was attributed to a graph node.
|
|
9
|
-
*/
|
|
10
|
-
export interface ITtscGraphDiagnostic {
|
|
11
|
-
/** Project-relative path of the file the diagnostic is reported in. */
|
|
12
|
-
file: string;
|
|
13
|
-
/** 1-based line of the diagnostic. */
|
|
14
|
-
line: number;
|
|
15
|
-
/** 1-based column of the diagnostic, when known. */
|
|
16
|
-
column?: number;
|
|
17
|
-
/** Numeric `tsc` code, or string rule id for a lint/plugin finding. */
|
|
18
|
-
code: number | string;
|
|
19
|
-
/** The human-readable diagnostic message. */
|
|
20
|
-
message: string;
|
|
21
|
-
/** Severity, when the producer distinguishes it. */
|
|
22
|
-
severity?: "error" | "warning" | "info" | "hint";
|
|
23
|
-
/** Which lane produced the diagnostic. */
|
|
24
|
-
origin?: "tsc" | "plugin" | "lint";
|
|
25
|
-
/** Node id the diagnostic was fused onto, when resolved. */
|
|
26
|
-
node?: string;
|
|
27
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ITtscGraphDiagnostic.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDiagnostic.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { ITtscGraphNode } from "../structures/ITtscGraphNode";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Derive stable access-path aliases for a member edge from its source
|
|
5
|
-
* expression. If a hop reaches `Owner.member` through `obj.path.member`, the
|
|
6
|
-
* alias `Owner.path.member` keeps both the resolved owner and the concrete
|
|
7
|
-
* access path visible without reopening source.
|
|
8
|
-
*/
|
|
9
|
-
export function accessAliasesFor(
|
|
10
|
-
node: ITtscGraphNode | undefined,
|
|
11
|
-
evidenceText: string | undefined,
|
|
12
|
-
): string[] | undefined {
|
|
13
|
-
if (
|
|
14
|
-
node === undefined ||
|
|
15
|
-
node.qualifiedName === undefined ||
|
|
16
|
-
evidenceText === undefined
|
|
17
|
-
) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
const segments = dottedSegments(evidenceText);
|
|
21
|
-
if (segments.length < 2 || segments[segments.length - 1] !== node.name) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
const dot = node.qualifiedName.lastIndexOf(".");
|
|
25
|
-
if (dot < 0) return undefined;
|
|
26
|
-
|
|
27
|
-
const owner = node.qualifiedName.slice(0, dot);
|
|
28
|
-
const suffix = segments.slice(1).join(".");
|
|
29
|
-
const aliases = new Set<string>();
|
|
30
|
-
for (const candidate of [...ownerDisplayAliases(owner), owner]) {
|
|
31
|
-
const alias = `${candidate}.${suffix}`;
|
|
32
|
-
if (alias !== node.qualifiedName) aliases.add(alias);
|
|
33
|
-
}
|
|
34
|
-
return aliases.size > 0 ? [...aliases] : undefined;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function dottedSegments(text: string): string[] {
|
|
38
|
-
const normalized = text.trim().replace(/\?\./g, ".");
|
|
39
|
-
const parts = normalized.split(".");
|
|
40
|
-
if (parts.length < 2) return [];
|
|
41
|
-
return parts.every((part) => /^[A-Za-z_$][\w$]*$/.test(part)) ? parts : [];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function ownerDisplayAliases(owner: string): string[] {
|
|
45
|
-
const display = owner.replace(/^_+/, "");
|
|
46
|
-
const out = new Set<string>();
|
|
47
|
-
for (const suffix of ["Internals", "Internal"]) {
|
|
48
|
-
if (display.length > suffix.length && display.endsWith(suffix)) {
|
|
49
|
-
out.add(display.slice(0, -suffix.length));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (out.size === 0 && display !== owner) out.add(display);
|
|
53
|
-
out.delete(owner);
|
|
54
|
-
return [...out];
|
|
55
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ITtscGraphNext } from "../structures/ITtscGraphNext";
|
|
2
|
-
|
|
3
|
-
const SOURCE_POLICY =
|
|
4
|
-
"The returned object is the graph evidence contract: names, edges, signatures, decorators, tests, ranges, anchors, steps, and next are the answer surface. If next.action is answer, stop tool use for this question and answer now. Truncated means capped index evidence, not a request to expand every branch. Until TypeScript source is edited, returned graph facts are sacred, infallible compiler truth. Never call graph again or read files to doubt, validate, fact-check, re-derive, re-confirm, re-narrate, or improve returned graph facts. Read source bodies only when the user explicitly asks for exact source text or changed code must be verified.";
|
|
5
|
-
|
|
6
|
-
export function resultGuide(action: string): string {
|
|
7
|
-
return `${action} ${SOURCE_POLICY}`;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function resultNext(
|
|
11
|
-
action: ITtscGraphNext["action"],
|
|
12
|
-
reason: string,
|
|
13
|
-
request?: ITtscGraphNext["request"],
|
|
14
|
-
): ITtscGraphNext {
|
|
15
|
-
return {
|
|
16
|
-
action,
|
|
17
|
-
reason,
|
|
18
|
-
...(request !== undefined ? { request } : {}),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A compiler or plugin diagnostic, fused onto the graph so an edit-triage query
|
|
3
|
-
* can name the owning symbol of an error.
|
|
4
|
-
*
|
|
5
|
-
* The TypeScript semantic pass contributes numeric-coded `tsc` diagnostics;
|
|
6
|
-
* `@ttsc/lint` rules and transform plugins (typia, nestia, …) contribute
|
|
7
|
-
* `plugin`/`lint` findings whose `code` is a string. `node` is set when the
|
|
8
|
-
* finding's position was attributed to a graph node.
|
|
9
|
-
*/
|
|
10
|
-
export interface ITtscGraphDiagnostic {
|
|
11
|
-
/** Project-relative path of the file the diagnostic is reported in. */
|
|
12
|
-
file: string;
|
|
13
|
-
|
|
14
|
-
/** 1-based line of the diagnostic. */
|
|
15
|
-
line: number;
|
|
16
|
-
|
|
17
|
-
/** 1-based column of the diagnostic, when known. */
|
|
18
|
-
column?: number;
|
|
19
|
-
|
|
20
|
-
/** Numeric `tsc` code, or string rule id for a lint/plugin finding. */
|
|
21
|
-
code: number | string;
|
|
22
|
-
|
|
23
|
-
/** The human-readable diagnostic message. */
|
|
24
|
-
message: string;
|
|
25
|
-
|
|
26
|
-
/** Severity, when the producer distinguishes it. */
|
|
27
|
-
severity?: "error" | "warning" | "info" | "hint";
|
|
28
|
-
|
|
29
|
-
/** Which lane produced the diagnostic. */
|
|
30
|
-
origin?: "tsc" | "plugin" | "lint";
|
|
31
|
-
|
|
32
|
-
/** Node id the diagnostic was fused onto, when resolved. */
|
|
33
|
-
node?: string;
|
|
34
|
-
}
|