@ttsc/graph 0.16.4 → 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/LICENSE +21 -21
- package/README.md +24 -53
- package/lib/TtscGraphApplication.js +59 -0
- package/lib/TtscGraphApplication.js.map +1 -0
- package/lib/index.js +31 -108
- package/lib/index.js.map +1 -1
- package/lib/model/TtscGraphMemory.js +185 -0
- package/lib/model/TtscGraphMemory.js.map +1 -0
- package/lib/model/loadGraph.js +418 -0
- package/lib/model/loadGraph.js.map +1 -0
- package/lib/reduce.js +101 -0
- package/lib/reduce.js.map +1 -0
- package/lib/resolveGraphBinary.js +42 -0
- package/lib/resolveGraphBinary.js.map +1 -0
- package/lib/server/accessAliases.js +53 -0
- package/lib/server/accessAliases.js.map +1 -0
- package/lib/server/createServer.js +1726 -0
- package/lib/server/createServer.js.map +1 -0
- package/lib/server/instructions.js +80 -0
- package/lib/server/instructions.js.map +1 -0
- package/lib/server/resolveHandle.js +25 -0
- package/lib/server/resolveHandle.js.map +1 -0
- package/lib/server/runDetails.js +413 -0
- package/lib/server/runDetails.js.map +1 -0
- package/lib/server/runEntrypoints.js +211 -0
- package/lib/server/runEntrypoints.js.map +1 -0
- package/lib/server/runLookup.js +234 -0
- package/lib/server/runLookup.js.map +1 -0
- package/lib/server/runOverview.js +160 -0
- package/lib/server/runOverview.js.map +1 -0
- package/lib/server/runTrace.js +314 -0
- package/lib/server/runTrace.js.map +1 -0
- package/lib/server/startServer.js +21 -0
- package/lib/server/startServer.js.map +1 -0
- package/lib/structures/ITtscGraphApplication.js +3 -0
- package/lib/structures/ITtscGraphApplication.js.map +1 -0
- package/lib/structures/ITtscGraphDecorator.js +3 -0
- package/lib/structures/ITtscGraphDecorator.js.map +1 -0
- package/lib/structures/ITtscGraphDetails.js +3 -0
- package/lib/structures/ITtscGraphDetails.js.map +1 -0
- package/lib/structures/ITtscGraphDiagnostic.js +3 -0
- package/lib/structures/ITtscGraphDiagnostic.js.map +1 -0
- package/lib/structures/ITtscGraphDump.js +3 -0
- package/lib/structures/ITtscGraphDump.js.map +1 -0
- package/lib/structures/ITtscGraphEdge.js +3 -0
- package/lib/structures/ITtscGraphEdge.js.map +1 -0
- package/lib/structures/ITtscGraphEntrypoints.js +3 -0
- package/lib/structures/ITtscGraphEntrypoints.js.map +1 -0
- package/lib/structures/ITtscGraphEscape.js +3 -0
- package/lib/structures/ITtscGraphEscape.js.map +1 -0
- package/lib/structures/ITtscGraphEvidence.js +3 -0
- package/lib/structures/ITtscGraphEvidence.js.map +1 -0
- package/lib/structures/ITtscGraphLookup.js +3 -0
- package/lib/structures/ITtscGraphLookup.js.map +1 -0
- package/lib/structures/ITtscGraphNode.js +3 -0
- package/lib/structures/ITtscGraphNode.js.map +1 -0
- package/lib/structures/ITtscGraphOverview.js +3 -0
- package/lib/structures/ITtscGraphOverview.js.map +1 -0
- package/lib/structures/ITtscGraphTrace.js +3 -0
- package/lib/structures/ITtscGraphTrace.js.map +1 -0
- package/lib/structures/TtscGraphEdgeKind.js +3 -0
- package/lib/structures/TtscGraphEdgeKind.js.map +1 -0
- package/lib/structures/TtscGraphNodeKind.js +3 -0
- package/lib/structures/TtscGraphNodeKind.js.map +1 -0
- package/lib/structures/TtscGraphNodeModifier.js +3 -0
- package/lib/structures/TtscGraphNodeModifier.js.map +1 -0
- package/lib/structures/index.js +38 -0
- package/lib/structures/index.js.map +1 -0
- package/lib/view.js +140 -0
- package/lib/view.js.map +1 -0
- package/lib/viewer/index.html +123 -0
- package/lib/viewer/viewer.js +4610 -0
- package/package.json +17 -4
- package/src/TtscGraphApplication.ts +64 -0
- package/src/index.ts +40 -126
- package/src/model/TtscGraphMemory.ts +204 -0
- package/src/model/loadGraph.ts +85 -0
- package/src/reduce.ts +165 -0
- package/src/resolveGraphBinary.ts +40 -0
- package/src/server/accessAliases.ts +55 -0
- package/src/server/createServer.ts +101 -0
- package/src/server/instructions.ts +76 -0
- package/src/server/resolveHandle.ts +34 -0
- package/src/server/runDetails.ts +469 -0
- package/src/server/runEntrypoints.ts +256 -0
- package/src/server/runLookup.ts +257 -0
- package/src/server/runOverview.ts +166 -0
- package/src/server/runTrace.ts +359 -0
- package/src/server/startServer.ts +25 -0
- package/src/structures/ITtscGraphApplication.ts +116 -0
- package/src/structures/ITtscGraphDecorator.ts +31 -0
- package/src/structures/ITtscGraphDetails.ts +134 -0
- package/src/structures/ITtscGraphDiagnostic.ts +34 -0
- package/src/structures/ITtscGraphDump.ts +35 -0
- package/src/structures/ITtscGraphEdge.ts +24 -0
- package/src/structures/ITtscGraphEntrypoints.ts +118 -0
- package/src/structures/ITtscGraphEscape.ts +39 -0
- package/src/structures/ITtscGraphEvidence.ts +26 -0
- package/src/structures/ITtscGraphLookup.ts +61 -0
- package/src/structures/ITtscGraphNode.ts +70 -0
- package/src/structures/ITtscGraphOverview.ts +87 -0
- package/src/structures/ITtscGraphTrace.ts +140 -0
- package/src/structures/TtscGraphEdgeKind.ts +23 -0
- package/src/structures/TtscGraphNodeKind.ts +26 -0
- package/src/structures/TtscGraphNodeModifier.ts +19 -0
- package/src/structures/index.ts +22 -0
- package/src/view.ts +155 -0
- package/src/viewer/index.html +123 -0
- package/src/viewer/main.ts +209 -0
- package/lib/bin.d.ts +0 -2
- package/lib/diagnostics.d.ts +0 -23
- package/lib/diagnostics.js +0 -84
- package/lib/diagnostics.js.map +0 -1
- package/lib/index.d.ts +0 -29
- package/src/diagnostics.ts +0 -93
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runTrace = runTrace;
|
|
4
|
+
const accessAliases_1 = require("./accessAliases");
|
|
5
|
+
const resolveHandle_1 = require("./resolveHandle");
|
|
6
|
+
const runDetails_1 = require("./runDetails");
|
|
7
|
+
const DEFAULT_DEPTH = 2;
|
|
8
|
+
const DEFAULT_MAX_NODES = 6;
|
|
9
|
+
const MAX_OPEN_DEPTH = 2;
|
|
10
|
+
const MAX_OPEN_NODES = 8;
|
|
11
|
+
const MAX_HOPS_PER_NODE = 1;
|
|
12
|
+
const MAX_STEPS = 6;
|
|
13
|
+
const MAX_NEXT_HANDLES = 2;
|
|
14
|
+
/**
|
|
15
|
+
* Breadth-first trace along the dependency graph. Structural
|
|
16
|
+
* (contains/exports/imports) edges are excluded so the path is real call/type
|
|
17
|
+
* flow; forward walks callees, reverse and impact walk callers. Impact
|
|
18
|
+
* additionally tags each reached node's role so the blast radius on the public
|
|
19
|
+
* surface is legible.
|
|
20
|
+
*/
|
|
21
|
+
function runTrace(graph, props) {
|
|
22
|
+
const direction = props.direction ?? "forward";
|
|
23
|
+
const focus = props.focus ?? "all";
|
|
24
|
+
const maxDepth = bound(props.maxDepth, DEFAULT_DEPTH, 1, MAX_OPEN_DEPTH);
|
|
25
|
+
const maxNodes = bound(props.maxNodes, DEFAULT_MAX_NODES, 1, MAX_OPEN_NODES);
|
|
26
|
+
const maxHops = maxNodes * MAX_HOPS_PER_NODE;
|
|
27
|
+
const reverse = direction === "reverse" || direction === "impact";
|
|
28
|
+
// Only an impact trace tags reached nodes with their public-surface role; for
|
|
29
|
+
// forward/reverse the role is noise.
|
|
30
|
+
const withRoles = direction === "impact";
|
|
31
|
+
const start = (0, resolveHandle_1.resolveGraphHandle)(graph, props.from);
|
|
32
|
+
if (start.candidates) {
|
|
33
|
+
return {
|
|
34
|
+
type: "trace",
|
|
35
|
+
direction,
|
|
36
|
+
hops: [],
|
|
37
|
+
reached: [],
|
|
38
|
+
truncated: false,
|
|
39
|
+
candidates: start.candidates.map((n) => summary(graph, n)),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (start.node === undefined) {
|
|
43
|
+
return {
|
|
44
|
+
type: "trace",
|
|
45
|
+
direction,
|
|
46
|
+
hops: [],
|
|
47
|
+
reached: [],
|
|
48
|
+
truncated: false,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Path mode: with `to`, return the dependency path from `from` to `to`, the
|
|
52
|
+
// one-call answer for "how does A reach B", instead of an open-ended trace.
|
|
53
|
+
if (props.to !== undefined && props.to !== "") {
|
|
54
|
+
const base = {
|
|
55
|
+
type: "trace",
|
|
56
|
+
direction: "path",
|
|
57
|
+
hops: [],
|
|
58
|
+
reached: [],
|
|
59
|
+
truncated: false,
|
|
60
|
+
};
|
|
61
|
+
const target = (0, resolveHandle_1.resolveGraphHandle)(graph, props.to);
|
|
62
|
+
if (target.candidates) {
|
|
63
|
+
return {
|
|
64
|
+
...base,
|
|
65
|
+
start: summary(graph, start.node),
|
|
66
|
+
candidates: target.candidates.map((n) => summary(graph, n)),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (target.node === undefined) {
|
|
70
|
+
return { ...base, start: summary(graph, start.node) };
|
|
71
|
+
}
|
|
72
|
+
const found = findPath(graph, start.node.id, target.node.id, bound(props.maxDepth, 12, 1, 12), focus);
|
|
73
|
+
const path = found?.path ?? [];
|
|
74
|
+
const hops = found?.hops ?? [];
|
|
75
|
+
return {
|
|
76
|
+
...base,
|
|
77
|
+
start: summary(graph, start.node),
|
|
78
|
+
target: summary(graph, target.node),
|
|
79
|
+
hops,
|
|
80
|
+
path: path.map((node, i) => summary(graph, node, i, false, true)),
|
|
81
|
+
steps: traceSteps(graph, hops),
|
|
82
|
+
next: nextFromPath(path),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const hops = [];
|
|
86
|
+
const reached = new Map();
|
|
87
|
+
const visited = new Set([start.node.id]);
|
|
88
|
+
let queue = [
|
|
89
|
+
{ id: start.node.id, depth: 0 },
|
|
90
|
+
];
|
|
91
|
+
let truncated = false;
|
|
92
|
+
while (queue.length > 0) {
|
|
93
|
+
const next = [];
|
|
94
|
+
for (const { id, depth } of queue) {
|
|
95
|
+
if (depth >= maxDepth) {
|
|
96
|
+
truncated = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const edges = reverse ? graph.incoming(id) : graph.outgoing(id);
|
|
100
|
+
for (const edge of edges) {
|
|
101
|
+
if (!traversable(edge.kind, focus))
|
|
102
|
+
continue;
|
|
103
|
+
const otherId = reverse ? edge.from : edge.to;
|
|
104
|
+
const other = graph.node(otherId);
|
|
105
|
+
if (other === undefined || other.kind === "file")
|
|
106
|
+
continue;
|
|
107
|
+
const hop = {
|
|
108
|
+
from: edge.from,
|
|
109
|
+
to: edge.to,
|
|
110
|
+
kind: edge.kind,
|
|
111
|
+
depth: depth + 1,
|
|
112
|
+
};
|
|
113
|
+
const evidence = (0, runDetails_1.edgeEvidenceOf)(edge);
|
|
114
|
+
if (evidence !== undefined)
|
|
115
|
+
hop.evidence = evidence;
|
|
116
|
+
const aliases = (0, accessAliases_1.accessAliasesFor)(graph.node(edge.to), (0, runDetails_1.edgeEvidenceTextOf)(edge));
|
|
117
|
+
if (aliases !== undefined)
|
|
118
|
+
hop.aliases = aliases;
|
|
119
|
+
// A back-edge to the start or an already-reached node: record the hop;
|
|
120
|
+
// its endpoints are already represented.
|
|
121
|
+
if (visited.has(otherId)) {
|
|
122
|
+
if (hops.length >= maxHops)
|
|
123
|
+
truncated = true;
|
|
124
|
+
else
|
|
125
|
+
hops.push(hop);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// A new node past the cap is left unrepresented, so drop its hop too:
|
|
129
|
+
// every hop's endpoints stay resolvable in `reached`/`start`.
|
|
130
|
+
if (reached.size >= maxNodes) {
|
|
131
|
+
truncated = true;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (hops.length >= maxHops) {
|
|
135
|
+
truncated = true;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
visited.add(otherId);
|
|
139
|
+
reached.set(otherId, summary(graph, other, depth + 1, withRoles));
|
|
140
|
+
next.push({ id: otherId, depth: depth + 1 });
|
|
141
|
+
hops.push(hop);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
queue = next;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
type: "trace",
|
|
148
|
+
start: summary(graph, start.node),
|
|
149
|
+
direction,
|
|
150
|
+
hops,
|
|
151
|
+
reached: [...reached.values()],
|
|
152
|
+
steps: traceSteps(graph, hops),
|
|
153
|
+
next: {
|
|
154
|
+
details: [start.node.id, ...reached.keys()].slice(0, MAX_NEXT_HANDLES),
|
|
155
|
+
traceFrom: [...reached.keys()].slice(0, MAX_NEXT_HANDLES),
|
|
156
|
+
},
|
|
157
|
+
truncated,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function nextFromPath(path) {
|
|
161
|
+
return {
|
|
162
|
+
details: path.map((node) => node.id),
|
|
163
|
+
traceFrom: path.length > 0 ? [path[path.length - 1].id] : [],
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function traceSteps(graph, hops) {
|
|
167
|
+
return hops.slice(0, MAX_STEPS).map((hop) => {
|
|
168
|
+
const from = graph.node(hop.from);
|
|
169
|
+
const to = graph.node(hop.to);
|
|
170
|
+
const lhs = from?.qualifiedName ?? from?.name ?? hop.from;
|
|
171
|
+
const rhs = to?.qualifiedName ?? to?.name ?? hop.to;
|
|
172
|
+
const evidence = hop.evidence === undefined
|
|
173
|
+
? ""
|
|
174
|
+
: ` at ${hop.evidence.file}:${hop.evidence.startLine}`;
|
|
175
|
+
const aliases = hop.aliases === undefined ? "" : ` aliases ${hop.aliases.join(", ")}`;
|
|
176
|
+
return `${lhs} -[${hop.kind}${evidence}${aliases}]-> ${rhs}`;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The shortest dependency path from `startId` to `targetId` over real (non-
|
|
181
|
+
* structural) forward edges, breadth-first, or null when `targetId` is not
|
|
182
|
+
* reachable within maxDepth. Returns the nodes in order and the hops between.
|
|
183
|
+
*/
|
|
184
|
+
function findPath(graph, startId, targetId, maxDepth, focus) {
|
|
185
|
+
const startNode = graph.node(startId);
|
|
186
|
+
if (startNode === undefined)
|
|
187
|
+
return null;
|
|
188
|
+
if (startId === targetId)
|
|
189
|
+
return { path: [startNode], hops: [] };
|
|
190
|
+
const parent = new Map();
|
|
191
|
+
const visited = new Set([startId]);
|
|
192
|
+
let queue = [{ id: startId, depth: 0 }];
|
|
193
|
+
while (queue.length > 0) {
|
|
194
|
+
const next = [];
|
|
195
|
+
for (const { id, depth } of queue) {
|
|
196
|
+
if (depth >= maxDepth)
|
|
197
|
+
continue;
|
|
198
|
+
for (const edge of graph.outgoing(id)) {
|
|
199
|
+
if (!traversable(edge.kind, focus))
|
|
200
|
+
continue;
|
|
201
|
+
const otherId = edge.to;
|
|
202
|
+
if (visited.has(otherId))
|
|
203
|
+
continue;
|
|
204
|
+
const other = graph.node(otherId);
|
|
205
|
+
if (other === undefined || other.kind === "file")
|
|
206
|
+
continue;
|
|
207
|
+
visited.add(otherId);
|
|
208
|
+
const evidence = (0, runDetails_1.edgeEvidenceOf)(edge);
|
|
209
|
+
parent.set(otherId, {
|
|
210
|
+
via: id,
|
|
211
|
+
kind: edge.kind,
|
|
212
|
+
evidence,
|
|
213
|
+
evidenceText: (0, runDetails_1.edgeEvidenceTextOf)(edge),
|
|
214
|
+
});
|
|
215
|
+
if (otherId === targetId) {
|
|
216
|
+
const ids = [otherId];
|
|
217
|
+
let cur = otherId;
|
|
218
|
+
while (cur !== startId) {
|
|
219
|
+
const p = parent.get(cur);
|
|
220
|
+
if (p === undefined)
|
|
221
|
+
break;
|
|
222
|
+
ids.unshift(p.via);
|
|
223
|
+
cur = p.via;
|
|
224
|
+
}
|
|
225
|
+
const path = [];
|
|
226
|
+
for (const nid of ids) {
|
|
227
|
+
const n = graph.node(nid);
|
|
228
|
+
if (n !== undefined)
|
|
229
|
+
path.push(n);
|
|
230
|
+
}
|
|
231
|
+
const hops = [];
|
|
232
|
+
for (let i = 1; i < path.length; i++) {
|
|
233
|
+
const node = path[i];
|
|
234
|
+
const parentEdge = parent.get(node.id);
|
|
235
|
+
const hop = {
|
|
236
|
+
from: path[i - 1].id,
|
|
237
|
+
to: node.id,
|
|
238
|
+
kind: parentEdge?.kind ?? "calls",
|
|
239
|
+
depth: i,
|
|
240
|
+
};
|
|
241
|
+
if (parentEdge?.evidence !== undefined)
|
|
242
|
+
hop.evidence = parentEdge.evidence;
|
|
243
|
+
const aliases = (0, accessAliases_1.accessAliasesFor)(node, parentEdge?.evidenceText);
|
|
244
|
+
if (aliases !== undefined)
|
|
245
|
+
hop.aliases = aliases;
|
|
246
|
+
hops.push(hop);
|
|
247
|
+
}
|
|
248
|
+
return { path, hops };
|
|
249
|
+
}
|
|
250
|
+
next.push({ id: otherId, depth: depth + 1 });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
queue = next;
|
|
254
|
+
}
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Summarize a node for a trace result. With `withRoles`, tag the public-surface
|
|
259
|
+
* roles (exported / test) an impact trace reports; other directions omit them.
|
|
260
|
+
*/
|
|
261
|
+
function summary(graph, node, depth, withRoles = false, withSignature = false) {
|
|
262
|
+
const out = {
|
|
263
|
+
id: node.id,
|
|
264
|
+
name: node.qualifiedName ?? node.name,
|
|
265
|
+
kind: node.kind,
|
|
266
|
+
file: node.file,
|
|
267
|
+
};
|
|
268
|
+
if (depth !== undefined)
|
|
269
|
+
out.depth = depth;
|
|
270
|
+
if (withSignature) {
|
|
271
|
+
const sig = (0, runDetails_1.signatureOf)(graph.project, node);
|
|
272
|
+
if (sig !== undefined)
|
|
273
|
+
out.signature = sig;
|
|
274
|
+
}
|
|
275
|
+
if (withRoles) {
|
|
276
|
+
const roles = [];
|
|
277
|
+
if (node.exported)
|
|
278
|
+
roles.push("exported");
|
|
279
|
+
if (isTestFile(node.file))
|
|
280
|
+
roles.push("test");
|
|
281
|
+
if (roles.length > 0)
|
|
282
|
+
out.roles = roles;
|
|
283
|
+
}
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
/** An edge the trace should follow: a real dependency, not a structural edge. */
|
|
287
|
+
function traversable(kind, focus) {
|
|
288
|
+
if (kind === "contains" || kind === "exports" || kind === "imports") {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
if (focus === "execution") {
|
|
292
|
+
return (kind === "calls" ||
|
|
293
|
+
kind === "instantiates" ||
|
|
294
|
+
kind === "accesses" ||
|
|
295
|
+
kind === "renders");
|
|
296
|
+
}
|
|
297
|
+
if (focus === "types") {
|
|
298
|
+
return (kind === "type_ref" ||
|
|
299
|
+
kind === "extends" ||
|
|
300
|
+
kind === "implements" ||
|
|
301
|
+
kind === "overrides" ||
|
|
302
|
+
kind === "decorates");
|
|
303
|
+
}
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
function isTestFile(file) {
|
|
307
|
+
return (/(^|\/)(test|tests|__tests__|spec)\//.test(file) ||
|
|
308
|
+
/\.(test|spec)\.[cm]?tsx?$/.test(file));
|
|
309
|
+
}
|
|
310
|
+
function bound(value, fallback, min, max) {
|
|
311
|
+
const n = value === undefined || !Number.isFinite(value) ? fallback : value;
|
|
312
|
+
return Math.max(min, Math.min(max, Math.floor(n)));
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=runTrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runTrace.js","sourceRoot":"","sources":["../../src/server/runTrace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startServer = startServer;
|
|
4
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
5
|
+
const loadGraph_1 = require("../model/loadGraph");
|
|
6
|
+
const createServer_1 = require("./createServer");
|
|
7
|
+
/**
|
|
8
|
+
* Serve the graph tools over MCP on stdio. The server answers the MCP handshake
|
|
9
|
+
* immediately and builds the resident graph on the first tool call, so a large
|
|
10
|
+
* project cannot make the client give up before tools are advertised.
|
|
11
|
+
*/
|
|
12
|
+
async function startServer(options) {
|
|
13
|
+
let graph;
|
|
14
|
+
const server = (0, createServer_1.createServer)(() => {
|
|
15
|
+
graph ??= (0, loadGraph_1.loadGraph)({ cwd: options.cwd, tsconfig: options.tsconfig });
|
|
16
|
+
return graph;
|
|
17
|
+
}, options.version);
|
|
18
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
19
|
+
await server.connect(transport);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=startServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startServer.js","sourceRoot":"","sources":["../../src/server/startServer.ts"],"names":[],"mappings":";;;AAAA,wEAAiF;AAGjF,kDAA+C;AAC/C,iDAA8C;AAE9C;;;;GAIG;AACI,KAAK,sBAAsB,OAKjC;IACC,IAAI,KAAkC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAA,2BAAY,EAAC,GAAG,EAAE;QAC/B,KAAK,KAAK,IAAA,qBAAS,EAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphApplication.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphApplication.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphDecorator.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDecorator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphDetails.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDetails.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphDiagnostic.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDiagnostic.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphDump.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDump.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphEdge.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEdge.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphEntrypoints.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEntrypoints.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphEscape.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEscape.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphEvidence.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEvidence.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphLookup.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphLookup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphNode.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphNode.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphOverview.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphOverview.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscGraphTrace.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphTrace.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TtscGraphEdgeKind.js","sourceRoot":"","sources":["../../src/structures/TtscGraphEdgeKind.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TtscGraphNodeKind.js","sourceRoot":"","sources":["../../src/structures/TtscGraphNodeKind.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TtscGraphNodeModifier.js","sourceRoot":"","sources":["../../src/structures/TtscGraphNodeModifier.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The canonical graph data model and tool I/O types: the wire contract
|
|
3
|
+
// `ttscgraph dump` emits and the MCP server loads, plus the schemas typia
|
|
4
|
+
// derives the tool surface from. Pure types so typia can build validators and
|
|
5
|
+
// tool schemas at build time, and so the Go `dump.go` writer has one TypeScript
|
|
6
|
+
// source of truth to mirror.
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
__exportStar(require("./ITtscGraphApplication"), exports);
|
|
23
|
+
__exportStar(require("./ITtscGraphDecorator"), exports);
|
|
24
|
+
__exportStar(require("./ITtscGraphDiagnostic"), exports);
|
|
25
|
+
__exportStar(require("./ITtscGraphDump"), exports);
|
|
26
|
+
__exportStar(require("./ITtscGraphEdge"), exports);
|
|
27
|
+
__exportStar(require("./ITtscGraphEvidence"), exports);
|
|
28
|
+
__exportStar(require("./ITtscGraphEscape"), exports);
|
|
29
|
+
__exportStar(require("./ITtscGraphDetails"), exports);
|
|
30
|
+
__exportStar(require("./ITtscGraphEntrypoints"), exports);
|
|
31
|
+
__exportStar(require("./ITtscGraphNode"), exports);
|
|
32
|
+
__exportStar(require("./ITtscGraphOverview"), exports);
|
|
33
|
+
__exportStar(require("./ITtscGraphLookup"), exports);
|
|
34
|
+
__exportStar(require("./ITtscGraphTrace"), exports);
|
|
35
|
+
__exportStar(require("./TtscGraphEdgeKind"), exports);
|
|
36
|
+
__exportStar(require("./TtscGraphNodeKind"), exports);
|
|
37
|
+
__exportStar(require("./TtscGraphNodeModifier"), exports);
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/structures/index.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,0EAA0E;AAC1E,8EAA8E;AAC9E,gFAAgF;AAChF,6BAA6B;;;;;;;;;;;;;;;;AAE7B,0DAAwC;AACxC,wDAAsC;AACtC,yDAAuC;AACvC,mDAAiC;AACjC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,sDAAoC;AACpC,0DAAwC;AACxC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC;AAClC,sDAAoC;AACpC,sDAAoC;AACpC,0DAAwC"}
|