@ttsc/graph 0.16.5 → 0.16.6
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/lib/TtscGraphApplication.js +36 -23
- package/lib/TtscGraphApplication.js.map +1 -1
- package/lib/model/loadGraph.js +17 -17
- package/lib/server/accessAliases.js +53 -0
- package/lib/server/accessAliases.js.map +1 -0
- package/lib/server/createServer.js +1133 -634
- package/lib/server/createServer.js.map +1 -1
- package/lib/server/instructions.js +69 -21
- package/lib/server/instructions.js.map +1 -1
- package/lib/server/runDetails.js +413 -0
- package/lib/server/runDetails.js.map +1 -0
- package/lib/server/{runIndex.js → runEntrypoints.js} +91 -26
- package/lib/server/runEntrypoints.js.map +1 -0
- package/lib/server/{runQuery.js → runLookup.js} +102 -15
- package/lib/server/runLookup.js.map +1 -0
- package/lib/server/runOverview.js +31 -21
- package/lib/server/runOverview.js.map +1 -1
- package/lib/server/runTrace.js +133 -38
- package/lib/server/runTrace.js.map +1 -1
- package/lib/structures/{ITtscGraphQuery.js → ITtscGraphDetails.js} +1 -1
- package/lib/structures/ITtscGraphDetails.js.map +1 -0
- package/lib/structures/ITtscGraphEntrypoints.js +3 -0
- package/lib/structures/ITtscGraphEntrypoints.js.map +1 -0
- package/lib/structures/{ITtscGraphExpand.js → ITtscGraphEscape.js} +1 -1
- package/lib/structures/ITtscGraphEscape.js.map +1 -0
- package/lib/structures/{ITtscGraphIndex.js → ITtscGraphLookup.js} +1 -1
- package/lib/structures/ITtscGraphLookup.js.map +1 -0
- package/lib/structures/index.js +4 -3
- package/lib/structures/index.js.map +1 -1
- package/package.json +2 -2
- package/src/TtscGraphApplication.ts +39 -32
- package/src/server/accessAliases.ts +55 -0
- package/src/server/createServer.ts +4 -7
- package/src/server/instructions.ts +69 -21
- package/src/server/runDetails.ts +469 -0
- package/src/server/{runIndex.ts → runEntrypoints.ts} +109 -34
- package/src/server/{runQuery.ts → runLookup.ts} +123 -16
- package/src/server/runOverview.ts +35 -23
- package/src/server/runTrace.ts +164 -38
- package/src/structures/ITtscGraphApplication.ts +100 -52
- package/src/structures/ITtscGraphDecorator.ts +12 -14
- package/src/structures/ITtscGraphDetails.ts +134 -0
- package/src/structures/{ITtscGraphIndex.ts → ITtscGraphEntrypoints.ts} +34 -16
- package/src/structures/ITtscGraphEscape.ts +39 -0
- package/src/structures/ITtscGraphEvidence.ts +5 -8
- package/src/structures/ITtscGraphLookup.ts +61 -0
- package/src/structures/ITtscGraphNode.ts +10 -4
- package/src/structures/ITtscGraphOverview.ts +24 -16
- package/src/structures/ITtscGraphTrace.ts +54 -11
- package/src/structures/TtscGraphNodeKind.ts +2 -2
- package/src/structures/index.ts +4 -3
- package/lib/server/runExpand.js +0 -177
- package/lib/server/runExpand.js.map +0 -1
- package/lib/server/runIndex.js.map +0 -1
- package/lib/server/runQuery.js.map +0 -1
- package/lib/structures/ITtscGraphExpand.js.map +0 -1
- package/lib/structures/ITtscGraphIndex.js.map +0 -1
- package/lib/structures/ITtscGraphQuery.js.map +0 -1
- package/src/server/runExpand.ts +0 -186
- package/src/structures/ITtscGraphExpand.ts +0 -85
- package/src/structures/ITtscGraphQuery.ts +0 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createServer.js","sourceRoot":"","sources":["../../src/server/createServer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oEAAoE;AACpE,iEAG4C;AAC5C,kDAA0B;AAE1B,kEAAgF;AAGhF,iDAA8C;AAE9C;;;;;;;;;;;;;GAaG;AACH,sBACE,KAAsB,EACtB,OAAe;IAEf,MAAM,UAAU;;gBACd,OAAO;mBACP,IAAI,2CAAoB,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"createServer.js","sourceRoot":"","sources":["../../src/server/createServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,26 +7,74 @@ exports.instructions = void 0;
|
|
|
7
7
|
* files. Keep it short; the per-tool descriptions carry the detail.
|
|
8
8
|
*/
|
|
9
9
|
exports.instructions = `
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
10
|
+
Before answering a TypeScript codebase question, call query. It is the
|
|
11
|
+
code-evidence path:
|
|
12
|
+
symbols, dependency paths, edge evidence ranges, and sourceSpan line anchors
|
|
13
|
+
from the resident project graph. Do not answer from assumptions, ls, rg, cat,
|
|
14
|
+
or Get-Content when graph evidence can answer the code question.
|
|
15
|
+
|
|
16
|
+
The graph is a resident TypeScript fact map, not an answer writer. Fill
|
|
17
|
+
arguments in order: question, graphNeed, draft, review, request. Write
|
|
18
|
+
draft.reason before draft.type, review it for overfetch and non-graph fallback,
|
|
19
|
+
then choose one final request.type:
|
|
20
|
+
entrypoints, lookup, trace, details, overview, or escape. If the review shows the
|
|
21
|
+
question is about scripts, config, generated output, prose docs, or evidence
|
|
22
|
+
already in hand, choose escape instead of spending a graph
|
|
23
|
+
operation. If more TypeScript evidence is needed, make another graph request
|
|
24
|
+
instead of switching to shell search.
|
|
25
|
+
|
|
26
|
+
Budget graph calls before the first request. Most answers need 1-3 calls, and
|
|
27
|
+
four calls is the hard stop for one answer. A fifth graph call means the tool is
|
|
28
|
+
being used as a source reader; answer from returned handles/ranges or choose
|
|
29
|
+
escape and report the missing span.
|
|
30
|
+
|
|
31
|
+
For behavior, lifecycle, request-flow, rendering-flow, or validation-flow
|
|
32
|
+
questions, start with one default entrypoints call, then one trace from the best
|
|
33
|
+
handle, then answer. Use overview only for broad architecture or public API
|
|
34
|
+
orientation.
|
|
35
|
+
|
|
36
|
+
The graph already knows resolved symbols, dependency edges, evidence spans,
|
|
37
|
+
decorators, stable handles, and sourceSpan line anchors. Use returned ranges and
|
|
38
|
+
handles as the evidence. If implementation text is required to decide a detail,
|
|
39
|
+
report the gap and the smallest sourceSpan instead of opening files during the
|
|
40
|
+
graph answer.
|
|
41
|
+
|
|
42
|
+
For caller or call-site questions, do not use rg. Use trace with direction:
|
|
43
|
+
"reverse" or details with neighbors: true; both return edge evidence and line
|
|
44
|
+
anchors for the call expression.
|
|
45
|
+
|
|
46
|
+
Request types:
|
|
47
|
+
|
|
48
|
+
- entrypoints: compact shortlist for behavior-specific code questions. It returns
|
|
49
|
+
ranked symbols, direct mentions, and small dependency orientation without
|
|
50
|
+
implementation text. Do not use it as the first broad public API map.
|
|
51
|
+
- lookup: targeted symbol search for a class, method, function, property, or
|
|
52
|
+
type when you do not already have its handle.
|
|
53
|
+
- trace: call/type/dependency flow for "how A reaches B", lifecycle,
|
|
54
|
+
request-flow, rendering-flow, validation-flow, and impact questions.
|
|
55
|
+
- details: signatures, members, direct calls, direct types, dependency
|
|
56
|
+
neighbors, and sourceSpan anchors for selected handles.
|
|
57
|
+
- overview: source-free architecture map for layers, hotspots, counts, and
|
|
58
|
+
public API. Use it to choose a central exported TypeScript API or entry point
|
|
59
|
+
without reading package scripts.
|
|
60
|
+
- escape: no-op route when the review decides this tool was the wrong evidence
|
|
61
|
+
source or the previous graph result is enough.
|
|
62
|
+
|
|
63
|
+
For a flow question, use entrypoints once, then trace before details. Keep
|
|
64
|
+
dependency maps compact: default limits first, one to three handles in details,
|
|
65
|
+
and no larger limits unless the previous result was truncated and the missing
|
|
66
|
+
piece is named. Do not spend graph calls only to find tests; mention tests only
|
|
67
|
+
when the returned graph slice already exposes them. Stop once file/symbol/range
|
|
68
|
+
evidence is enough to answer.
|
|
69
|
+
|
|
70
|
+
Copy exact names from returned nodes, references, aliases, evidence ranges,
|
|
71
|
+
sourceSpan anchors, and trace steps. Do not use shell to recover TypeScript line
|
|
72
|
+
numbers, call targets, or branch details not already returned by graph evidence;
|
|
73
|
+
name the missing detail and give the returned range.
|
|
74
|
+
|
|
75
|
+
Package scripts, config files, generated output, prose documentation, and exact
|
|
76
|
+
text searches are separate evidence sources. Use them only when the user asks
|
|
77
|
+
about those sources directly; do not use them to answer a TypeScript API or
|
|
78
|
+
call-path question.
|
|
31
79
|
`.trim();
|
|
32
80
|
//# sourceMappingURL=instructions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/server/instructions.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/server/instructions.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE3B,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runDetails = runDetails;
|
|
7
|
+
exports.decoratorsOf = decoratorsOf;
|
|
8
|
+
exports.edgeEvidenceOf = edgeEvidenceOf;
|
|
9
|
+
exports.edgeEvidenceTextOf = edgeEvidenceTextOf;
|
|
10
|
+
exports.signatureOf = signatureOf;
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const accessAliases_1 = require("./accessAliases");
|
|
14
|
+
const resolveHandle_1 = require("./resolveHandle");
|
|
15
|
+
// A signature is the declaration head up to the body brace: a handful of lines.
|
|
16
|
+
const MAX_SIGNATURE_LINES = 4;
|
|
17
|
+
// Neighbor lists are a map, not a dump; keep them scannable.
|
|
18
|
+
const DEFAULT_NEIGHBORS = 2;
|
|
19
|
+
const MAX_NEIGHBORS = 3;
|
|
20
|
+
// A container outline can be long; default to a scannable first page.
|
|
21
|
+
const DEFAULT_MEMBERS = 6;
|
|
22
|
+
const MAX_MEMBERS = 8;
|
|
23
|
+
// Direct dependency groups are orientation slices, not full fan-out dumps.
|
|
24
|
+
const DEFAULT_DEPENDENCIES = 1;
|
|
25
|
+
const MAX_DEPENDENCIES = 2;
|
|
26
|
+
// Object literal outlines are navigation aids, not source excerpts.
|
|
27
|
+
const MAX_OBJECT_MEMBER_LINES = 300;
|
|
28
|
+
// Structural relationships are navigation, not the dependency picture details is for.
|
|
29
|
+
const STRUCTURAL_KINDS = new Set(["contains", "exports", "imports"]);
|
|
30
|
+
// Kinds whose value is their member outline, not implementation text.
|
|
31
|
+
const CONTAINER_KINDS = new Set([
|
|
32
|
+
"class",
|
|
33
|
+
"interface",
|
|
34
|
+
"namespace",
|
|
35
|
+
"module",
|
|
36
|
+
"enum",
|
|
37
|
+
"file",
|
|
38
|
+
]);
|
|
39
|
+
/**
|
|
40
|
+
* Resolve each handle to its declared shape: sourceSpan anchors, signature,
|
|
41
|
+
* direct dependencies, and for containers, member outlines. It answers from the
|
|
42
|
+
* graph's resolved structure instead of inlining implementation bodies.
|
|
43
|
+
*/
|
|
44
|
+
function runDetails(graph, props) {
|
|
45
|
+
const neighborLimit = bound(props.neighborLimit, DEFAULT_NEIGHBORS, 1, MAX_NEIGHBORS);
|
|
46
|
+
const memberLimit = bound(props.memberLimit, DEFAULT_MEMBERS, 1, MAX_MEMBERS);
|
|
47
|
+
const dependencyLimit = bound(props.dependencyLimit, DEFAULT_DEPENDENCIES, 1, MAX_DEPENDENCIES);
|
|
48
|
+
const wantNeighbors = props.neighbors === true;
|
|
49
|
+
const nodes = [];
|
|
50
|
+
const unknown = [];
|
|
51
|
+
for (const handle of props.handles) {
|
|
52
|
+
const resolved = (0, resolveHandle_1.resolveGraphHandle)(graph, handle);
|
|
53
|
+
if (resolved.node === undefined) {
|
|
54
|
+
unknown.push(handle);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const node = resolved.node;
|
|
58
|
+
const detail = {
|
|
59
|
+
id: node.id,
|
|
60
|
+
name: node.qualifiedName ?? node.name,
|
|
61
|
+
kind: node.kind,
|
|
62
|
+
file: node.file,
|
|
63
|
+
};
|
|
64
|
+
if (node.evidence?.startLine)
|
|
65
|
+
detail.line = node.evidence.startLine;
|
|
66
|
+
const sig = signatureOf(graph.project, node);
|
|
67
|
+
if (sig !== undefined)
|
|
68
|
+
detail.signature = sig;
|
|
69
|
+
const signatureLiterals = literalSummaries(sig);
|
|
70
|
+
const decorators = decoratorsOf(node);
|
|
71
|
+
if (decorators !== undefined)
|
|
72
|
+
detail.decorators = decorators;
|
|
73
|
+
const implementation = evidenceCoordinatesOf(node.implementation);
|
|
74
|
+
if (implementation !== undefined)
|
|
75
|
+
detail.implementation = implementation;
|
|
76
|
+
const span = implementation ?? evidenceCoordinatesOf(node.evidence);
|
|
77
|
+
if (span !== undefined) {
|
|
78
|
+
detail.sourceSpan = {
|
|
79
|
+
file: span.file,
|
|
80
|
+
startLine: span.startLine,
|
|
81
|
+
endLine: span.endLine,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const calls = dependencyRefs(graph, node, executionKinds, dependencyLimit);
|
|
85
|
+
if (calls.length > 0)
|
|
86
|
+
detail.calls = calls;
|
|
87
|
+
const types = dependencyRefs(graph, node, typeKinds, dependencyLimit);
|
|
88
|
+
if (types.length > 0)
|
|
89
|
+
detail.types = types;
|
|
90
|
+
if (CONTAINER_KINDS.has(node.kind)) {
|
|
91
|
+
const list = members(graph, node, memberLimit);
|
|
92
|
+
if (list.length > 0)
|
|
93
|
+
detail.members = list;
|
|
94
|
+
}
|
|
95
|
+
if (node.kind === "variable" && detail.sourceSpan !== undefined) {
|
|
96
|
+
const list = objectLiteralMembers(graph.project, detail.sourceSpan, memberLimit);
|
|
97
|
+
if (list.length > 0)
|
|
98
|
+
detail.members = list;
|
|
99
|
+
}
|
|
100
|
+
if (signatureLiterals.length > 0)
|
|
101
|
+
detail.literals = signatureLiterals.slice(0, 6);
|
|
102
|
+
if (wantNeighbors) {
|
|
103
|
+
detail.dependsOn = refs(graph, graph.outgoing(node.id), "to", neighborLimit);
|
|
104
|
+
detail.dependedOnBy = refs(graph, graph.incoming(node.id), "from", neighborLimit);
|
|
105
|
+
}
|
|
106
|
+
nodes.push(detail);
|
|
107
|
+
}
|
|
108
|
+
return { type: "details", nodes, unknown };
|
|
109
|
+
}
|
|
110
|
+
/** The members a container owns (via `contains`), each with its own signature. */
|
|
111
|
+
function members(graph, node, limit) {
|
|
112
|
+
const out = [];
|
|
113
|
+
for (const edge of graph.outgoing(node.id)) {
|
|
114
|
+
if (edge.kind !== "contains")
|
|
115
|
+
continue;
|
|
116
|
+
const member = graph.node(edge.to);
|
|
117
|
+
if (member === undefined)
|
|
118
|
+
continue;
|
|
119
|
+
const m = {
|
|
120
|
+
name: member.qualifiedName ?? member.name,
|
|
121
|
+
kind: member.kind,
|
|
122
|
+
};
|
|
123
|
+
if (member.evidence?.startLine)
|
|
124
|
+
m.line = member.evidence.startLine;
|
|
125
|
+
const sig = signatureOf(graph.project, member);
|
|
126
|
+
if (sig !== undefined)
|
|
127
|
+
m.signature = sig;
|
|
128
|
+
const decorators = decoratorsOf(member);
|
|
129
|
+
if (decorators !== undefined)
|
|
130
|
+
m.decorators = decorators;
|
|
131
|
+
out.push(m);
|
|
132
|
+
if (out.length >= limit)
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
return out;
|
|
136
|
+
}
|
|
137
|
+
function objectLiteralMembers(project, span, limit) {
|
|
138
|
+
if (span.endLine === undefined)
|
|
139
|
+
return [];
|
|
140
|
+
if (span.endLine - span.startLine > MAX_OBJECT_MEMBER_LINES)
|
|
141
|
+
return [];
|
|
142
|
+
const lines = fileLines(project, span.file);
|
|
143
|
+
if (lines === undefined)
|
|
144
|
+
return [];
|
|
145
|
+
const start = Math.max(0, span.startLine - 1);
|
|
146
|
+
const end = Math.min(lines.length - 1, span.endLine - 1);
|
|
147
|
+
const members = [];
|
|
148
|
+
let depth = 0;
|
|
149
|
+
let entered = false;
|
|
150
|
+
for (let i = start; i <= end; i++) {
|
|
151
|
+
const raw = lines[i] ?? "";
|
|
152
|
+
const text = stripStrings(raw);
|
|
153
|
+
const before = depth;
|
|
154
|
+
if (entered && before === 1) {
|
|
155
|
+
const member = objectMemberOf(raw, i + 1);
|
|
156
|
+
if (member !== undefined) {
|
|
157
|
+
members.push(member);
|
|
158
|
+
if (members.length >= limit)
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
for (const char of text) {
|
|
163
|
+
if (char === "{") {
|
|
164
|
+
depth++;
|
|
165
|
+
entered = true;
|
|
166
|
+
}
|
|
167
|
+
else if (char === "}") {
|
|
168
|
+
depth = Math.max(0, depth - 1);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return members;
|
|
173
|
+
}
|
|
174
|
+
function objectMemberOf(line, lineNumber) {
|
|
175
|
+
const text = line.trim();
|
|
176
|
+
if (text === "" ||
|
|
177
|
+
text.startsWith("//") ||
|
|
178
|
+
text.startsWith("/*") ||
|
|
179
|
+
text.startsWith("*")) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
const property = /^(['"]?)([A-Za-z_$][\w$-]*)\1\s*\??\s*:/.exec(text);
|
|
183
|
+
if (property !== null) {
|
|
184
|
+
return {
|
|
185
|
+
name: property[2],
|
|
186
|
+
kind: "property",
|
|
187
|
+
line: lineNumber,
|
|
188
|
+
signature: signatureLine(text),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const method = /^(?:async\s+)?(?:get\s+|set\s+)?([A-Za-z_$][\w$-]*)\s*\(/.exec(text);
|
|
192
|
+
if (method !== null) {
|
|
193
|
+
return {
|
|
194
|
+
name: method[1],
|
|
195
|
+
kind: "method",
|
|
196
|
+
line: lineNumber,
|
|
197
|
+
signature: signatureLine(text),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
function signatureLine(text) {
|
|
203
|
+
return text.replace(/\s+/g, " ").replace(/,$/, "");
|
|
204
|
+
}
|
|
205
|
+
function stripStrings(line) {
|
|
206
|
+
return line.replace(/\/\/.*$/, "").replace(/(['"`])(?:\\.|(?!\1).)*\1/g, "");
|
|
207
|
+
}
|
|
208
|
+
/** Map dependency edges to references on their far endpoint, dropping structure. */
|
|
209
|
+
function refs(graph, edges, end, limit) {
|
|
210
|
+
const ranked = [];
|
|
211
|
+
for (const edge of edges) {
|
|
212
|
+
if (STRUCTURAL_KINDS.has(edge.kind))
|
|
213
|
+
continue;
|
|
214
|
+
const other = graph.node(end === "to" ? edge.to : edge.from);
|
|
215
|
+
if (other === undefined)
|
|
216
|
+
continue;
|
|
217
|
+
const ref = {
|
|
218
|
+
id: other.id,
|
|
219
|
+
name: other.qualifiedName ?? other.name,
|
|
220
|
+
kind: other.kind,
|
|
221
|
+
file: other.file,
|
|
222
|
+
relation: edge.kind,
|
|
223
|
+
};
|
|
224
|
+
if (other.evidence?.startLine)
|
|
225
|
+
ref.line = other.evidence.startLine;
|
|
226
|
+
const evidence = edgeEvidenceOf(edge);
|
|
227
|
+
if (evidence !== undefined)
|
|
228
|
+
ref.evidence = evidence;
|
|
229
|
+
const aliases = (0, accessAliases_1.accessAliasesFor)(other, edgeEvidenceTextOf(edge));
|
|
230
|
+
if (aliases !== undefined)
|
|
231
|
+
ref.aliases = aliases;
|
|
232
|
+
ranked.push({ ref, rank: refRank(ref, edge) });
|
|
233
|
+
}
|
|
234
|
+
ranked.sort((a, b) => a.rank - b.rank);
|
|
235
|
+
const out = [];
|
|
236
|
+
for (const item of ranked) {
|
|
237
|
+
out.push(item.ref);
|
|
238
|
+
if (out.length >= limit)
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
const executionKinds = new Set([
|
|
244
|
+
"calls",
|
|
245
|
+
"instantiates",
|
|
246
|
+
"accesses",
|
|
247
|
+
"renders",
|
|
248
|
+
]);
|
|
249
|
+
const typeKinds = new Set(["type_ref", "extends", "implements", "overrides"]);
|
|
250
|
+
function dependencyRefs(graph, node, kinds, limit) {
|
|
251
|
+
const ranked = [];
|
|
252
|
+
for (const edge of graph.outgoing(node.id)) {
|
|
253
|
+
if (!kinds.has(edge.kind))
|
|
254
|
+
continue;
|
|
255
|
+
const other = graph.node(edge.to);
|
|
256
|
+
if (other === undefined || other.kind === "file")
|
|
257
|
+
continue;
|
|
258
|
+
const name = other.qualifiedName ?? other.name;
|
|
259
|
+
const ref = {
|
|
260
|
+
id: other.id,
|
|
261
|
+
name,
|
|
262
|
+
kind: other.kind,
|
|
263
|
+
file: other.file,
|
|
264
|
+
relation: edge.kind,
|
|
265
|
+
};
|
|
266
|
+
if (other.evidence?.startLine)
|
|
267
|
+
ref.line = other.evidence.startLine;
|
|
268
|
+
const evidence = edgeEvidenceOf(edge);
|
|
269
|
+
if (evidence !== undefined)
|
|
270
|
+
ref.evidence = evidence;
|
|
271
|
+
const aliases = (0, accessAliases_1.accessAliasesFor)(other, edgeEvidenceTextOf(edge));
|
|
272
|
+
if (aliases !== undefined)
|
|
273
|
+
ref.aliases = aliases;
|
|
274
|
+
ranked.push({
|
|
275
|
+
ref,
|
|
276
|
+
rank: refRank(ref, edge),
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
ranked.sort((a, b) => a.rank - b.rank);
|
|
280
|
+
const out = [];
|
|
281
|
+
const seen = new Set();
|
|
282
|
+
for (const item of ranked) {
|
|
283
|
+
const key = `${item.ref.relation}:${item.ref.id}`;
|
|
284
|
+
if (seen.has(key))
|
|
285
|
+
continue;
|
|
286
|
+
seen.add(key);
|
|
287
|
+
out.push(item.ref);
|
|
288
|
+
if (out.length >= limit)
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
return out;
|
|
292
|
+
}
|
|
293
|
+
function literalSummaries(text) {
|
|
294
|
+
if (text === undefined)
|
|
295
|
+
return [];
|
|
296
|
+
const out = [];
|
|
297
|
+
for (const match of text.matchAll(/(["'`])((?:\\.|(?!\1).){1,80})\1/g)) {
|
|
298
|
+
const value = cleanLiteral(match[2]);
|
|
299
|
+
if (value !== undefined && !out.includes(value))
|
|
300
|
+
out.push(value);
|
|
301
|
+
if (out.length >= 20)
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
return out;
|
|
305
|
+
}
|
|
306
|
+
function cleanLiteral(value) {
|
|
307
|
+
const text = value?.replace(/\s+/g, " ").trim();
|
|
308
|
+
if (text === undefined ||
|
|
309
|
+
text === "" ||
|
|
310
|
+
text.length > 40 ||
|
|
311
|
+
/^[{}()[\],.:;]+$/.test(text)) {
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
return text;
|
|
315
|
+
}
|
|
316
|
+
function bound(value, fallback, min, max) {
|
|
317
|
+
const n = value === undefined || !Number.isFinite(value) ? fallback : value;
|
|
318
|
+
return Math.max(min, Math.min(max, Math.floor(n)));
|
|
319
|
+
}
|
|
320
|
+
function refRank(ref, edge) {
|
|
321
|
+
return (edgeKindRank(edge.kind) * 100000 +
|
|
322
|
+
evidenceRank(edge) +
|
|
323
|
+
(ref.file.startsWith("bundled://") ? 20000 : 0));
|
|
324
|
+
}
|
|
325
|
+
function evidenceRank(edge) {
|
|
326
|
+
const line = edge.evidence?.startLine ?? 9999;
|
|
327
|
+
const col = edge.evidence?.startCol ?? 999;
|
|
328
|
+
return line * 100 + col;
|
|
329
|
+
}
|
|
330
|
+
function edgeKindRank(kind) {
|
|
331
|
+
switch (kind) {
|
|
332
|
+
case "calls":
|
|
333
|
+
return 0;
|
|
334
|
+
case "instantiates":
|
|
335
|
+
return 1;
|
|
336
|
+
case "accesses":
|
|
337
|
+
case "renders":
|
|
338
|
+
return 2;
|
|
339
|
+
case "tests":
|
|
340
|
+
return 3;
|
|
341
|
+
case "overrides":
|
|
342
|
+
case "decorates":
|
|
343
|
+
return 4;
|
|
344
|
+
case "extends":
|
|
345
|
+
case "implements":
|
|
346
|
+
return 5;
|
|
347
|
+
case "type_ref":
|
|
348
|
+
return 6;
|
|
349
|
+
default:
|
|
350
|
+
return 10;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/** Decorator facts already captured on a node, omitted when absent. */
|
|
354
|
+
function decoratorsOf(node) {
|
|
355
|
+
return node.decorators !== undefined && node.decorators.length > 0
|
|
356
|
+
? node.decorators
|
|
357
|
+
: undefined;
|
|
358
|
+
}
|
|
359
|
+
/** Relationship evidence as public coordinates, omitted when absent. */
|
|
360
|
+
function edgeEvidenceOf(edge) {
|
|
361
|
+
return evidenceCoordinatesOf(edge.evidence);
|
|
362
|
+
}
|
|
363
|
+
function evidenceCoordinatesOf(evidence) {
|
|
364
|
+
if (evidence === undefined)
|
|
365
|
+
return undefined;
|
|
366
|
+
return {
|
|
367
|
+
file: evidence.file,
|
|
368
|
+
startLine: evidence.startLine,
|
|
369
|
+
...(evidence.startCol !== undefined ? { startCol: evidence.startCol } : {}),
|
|
370
|
+
...(evidence.endLine !== undefined ? { endLine: evidence.endLine } : {}),
|
|
371
|
+
...(evidence.endCol !== undefined ? { endCol: evidence.endCol } : {}),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/** Source text is an internal alias hint, not part of the MCP evidence object. */
|
|
375
|
+
function edgeEvidenceTextOf(edge) {
|
|
376
|
+
const text = edge.evidence?.text;
|
|
377
|
+
return typeof text === "string" && text.length > 0 ? text : undefined;
|
|
378
|
+
}
|
|
379
|
+
/** Read a file's lines once, or undefined when it cannot be read. */
|
|
380
|
+
function fileLines(project, file) {
|
|
381
|
+
if (file === "")
|
|
382
|
+
return undefined;
|
|
383
|
+
try {
|
|
384
|
+
return node_fs_1.default.readFileSync(node_path_1.default.join(project, file), "utf8").split(/\r?\n/);
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* The declaration signature: the head of the declaration up to and including
|
|
392
|
+
* the line that opens its body (`{`), or the single declaration line when there
|
|
393
|
+
* is no brace, capped so a wrapped signature cannot run away.
|
|
394
|
+
*/
|
|
395
|
+
function signatureOf(project, node) {
|
|
396
|
+
const evidence = node.evidence;
|
|
397
|
+
const lines = evidence === undefined ? undefined : fileLines(project, evidence.file);
|
|
398
|
+
if (lines === undefined || evidence === undefined)
|
|
399
|
+
return undefined;
|
|
400
|
+
const start = Math.max(0, evidence.startLine - 1);
|
|
401
|
+
const out = [];
|
|
402
|
+
for (let i = start; i < lines.length && out.length < MAX_SIGNATURE_LINES; i++) {
|
|
403
|
+
const line = lines[i];
|
|
404
|
+
if (line === undefined)
|
|
405
|
+
break;
|
|
406
|
+
out.push(line);
|
|
407
|
+
if (line.includes("{"))
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
const text = out.join("\n").trim();
|
|
411
|
+
return text === "" ? undefined : text;
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=runDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDetails.js","sourceRoot":"","sources":["../../src/server/runDetails.ts"],"names":[],"mappings":"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"}
|