@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.
Files changed (61) hide show
  1. package/lib/TtscGraphApplication.js +36 -23
  2. package/lib/TtscGraphApplication.js.map +1 -1
  3. package/lib/model/loadGraph.js +17 -17
  4. package/lib/server/accessAliases.js +53 -0
  5. package/lib/server/accessAliases.js.map +1 -0
  6. package/lib/server/createServer.js +1133 -634
  7. package/lib/server/createServer.js.map +1 -1
  8. package/lib/server/instructions.js +69 -21
  9. package/lib/server/instructions.js.map +1 -1
  10. package/lib/server/runDetails.js +413 -0
  11. package/lib/server/runDetails.js.map +1 -0
  12. package/lib/server/{runIndex.js → runEntrypoints.js} +91 -26
  13. package/lib/server/runEntrypoints.js.map +1 -0
  14. package/lib/server/{runQuery.js → runLookup.js} +102 -15
  15. package/lib/server/runLookup.js.map +1 -0
  16. package/lib/server/runOverview.js +31 -21
  17. package/lib/server/runOverview.js.map +1 -1
  18. package/lib/server/runTrace.js +133 -38
  19. package/lib/server/runTrace.js.map +1 -1
  20. package/lib/structures/{ITtscGraphQuery.js → ITtscGraphDetails.js} +1 -1
  21. package/lib/structures/ITtscGraphDetails.js.map +1 -0
  22. package/lib/structures/ITtscGraphEntrypoints.js +3 -0
  23. package/lib/structures/ITtscGraphEntrypoints.js.map +1 -0
  24. package/lib/structures/{ITtscGraphExpand.js → ITtscGraphEscape.js} +1 -1
  25. package/lib/structures/ITtscGraphEscape.js.map +1 -0
  26. package/lib/structures/{ITtscGraphIndex.js → ITtscGraphLookup.js} +1 -1
  27. package/lib/structures/ITtscGraphLookup.js.map +1 -0
  28. package/lib/structures/index.js +4 -3
  29. package/lib/structures/index.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/TtscGraphApplication.ts +39 -32
  32. package/src/server/accessAliases.ts +55 -0
  33. package/src/server/createServer.ts +4 -7
  34. package/src/server/instructions.ts +69 -21
  35. package/src/server/runDetails.ts +469 -0
  36. package/src/server/{runIndex.ts → runEntrypoints.ts} +109 -34
  37. package/src/server/{runQuery.ts → runLookup.ts} +123 -16
  38. package/src/server/runOverview.ts +35 -23
  39. package/src/server/runTrace.ts +164 -38
  40. package/src/structures/ITtscGraphApplication.ts +100 -52
  41. package/src/structures/ITtscGraphDecorator.ts +12 -14
  42. package/src/structures/ITtscGraphDetails.ts +134 -0
  43. package/src/structures/{ITtscGraphIndex.ts → ITtscGraphEntrypoints.ts} +34 -16
  44. package/src/structures/ITtscGraphEscape.ts +39 -0
  45. package/src/structures/ITtscGraphEvidence.ts +5 -8
  46. package/src/structures/ITtscGraphLookup.ts +61 -0
  47. package/src/structures/ITtscGraphNode.ts +10 -4
  48. package/src/structures/ITtscGraphOverview.ts +24 -16
  49. package/src/structures/ITtscGraphTrace.ts +54 -11
  50. package/src/structures/TtscGraphNodeKind.ts +2 -2
  51. package/src/structures/index.ts +4 -3
  52. package/lib/server/runExpand.js +0 -177
  53. package/lib/server/runExpand.js.map +0 -1
  54. package/lib/server/runIndex.js.map +0 -1
  55. package/lib/server/runQuery.js.map +0 -1
  56. package/lib/structures/ITtscGraphExpand.js.map +0 -1
  57. package/lib/structures/ITtscGraphIndex.js.map +0 -1
  58. package/lib/structures/ITtscGraphQuery.js.map +0 -1
  59. package/src/server/runExpand.ts +0 -186
  60. package/src/structures/ITtscGraphExpand.ts +0 -85
  61. package/src/structures/ITtscGraphQuery.ts +0 -49
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runTrace = runTrace;
4
+ const accessAliases_1 = require("./accessAliases");
4
5
  const resolveHandle_1 = require("./resolveHandle");
5
- const runExpand_1 = require("./runExpand");
6
- const DEFAULT_DEPTH = 6;
7
- const DEFAULT_MAX_NODES = 60;
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;
8
14
  /**
9
15
  * Breadth-first trace along the dependency graph. Structural
10
16
  * (contains/exports/imports) edges are excluded so the path is real call/type
@@ -14,8 +20,10 @@ const DEFAULT_MAX_NODES = 60;
14
20
  */
15
21
  function runTrace(graph, props) {
16
22
  const direction = props.direction ?? "forward";
17
- const maxDepth = Math.max(1, props.maxDepth ?? DEFAULT_DEPTH);
18
- const maxNodes = Math.max(1, props.maxNodes ?? DEFAULT_MAX_NODES);
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;
19
27
  const reverse = direction === "reverse" || direction === "impact";
20
28
  // Only an impact trace tags reached nodes with their public-surface role; for
21
29
  // forward/reverse the role is noise.
@@ -23,44 +31,55 @@ function runTrace(graph, props) {
23
31
  const start = (0, resolveHandle_1.resolveGraphHandle)(graph, props.from);
24
32
  if (start.candidates) {
25
33
  return {
34
+ type: "trace",
26
35
  direction,
27
36
  hops: [],
28
37
  reached: [],
29
38
  truncated: false,
30
- candidates: start.candidates.map((n) => summary(n)),
39
+ candidates: start.candidates.map((n) => summary(graph, n)),
31
40
  };
32
41
  }
33
42
  if (start.node === undefined) {
34
- return { direction, hops: [], reached: [], truncated: false };
43
+ return {
44
+ type: "trace",
45
+ direction,
46
+ hops: [],
47
+ reached: [],
48
+ truncated: false,
49
+ };
35
50
  }
36
- // Path mode: with `to`, return the dependency path from `from` to `to` the
37
- // one-call answer for "how does A reach B" instead of an open-ended trace.
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.
38
53
  if (props.to !== undefined && props.to !== "") {
39
- const base = { direction: "path", hops: [], reached: [], truncated: false };
54
+ const base = {
55
+ type: "trace",
56
+ direction: "path",
57
+ hops: [],
58
+ reached: [],
59
+ truncated: false,
60
+ };
40
61
  const target = (0, resolveHandle_1.resolveGraphHandle)(graph, props.to);
41
62
  if (target.candidates) {
42
63
  return {
43
64
  ...base,
44
- start: summary(start.node),
45
- candidates: target.candidates.map((n) => summary(n)),
65
+ start: summary(graph, start.node),
66
+ candidates: target.candidates.map((n) => summary(graph, n)),
46
67
  };
47
68
  }
48
69
  if (target.node === undefined) {
49
- return { ...base, start: summary(start.node) };
70
+ return { ...base, start: summary(graph, start.node) };
50
71
  }
51
- const found = findPath(graph, start.node.id, target.node.id, Math.max(1, props.maxDepth ?? 12));
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 ?? [];
52
75
  return {
53
76
  ...base,
54
- start: summary(start.node),
55
- target: summary(target.node),
56
- hops: found?.hops ?? [],
57
- path: (found?.path ?? []).map((node, i) => {
58
- const node_ = summary(node, i);
59
- const sig = (0, runExpand_1.signatureOf)(graph.project, node);
60
- if (sig !== undefined)
61
- node_.signature = sig;
62
- return node_;
63
- }),
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),
64
83
  };
65
84
  }
66
85
  const hops = [];
@@ -79,7 +98,7 @@ function runTrace(graph, props) {
79
98
  }
80
99
  const edges = reverse ? graph.incoming(id) : graph.outgoing(id);
81
100
  for (const edge of edges) {
82
- if (!traversable(edge.kind))
101
+ if (!traversable(edge.kind, focus))
83
102
  continue;
84
103
  const otherId = reverse ? edge.from : edge.to;
85
104
  const other = graph.node(otherId);
@@ -91,20 +110,33 @@ function runTrace(graph, props) {
91
110
  kind: edge.kind,
92
111
  depth: depth + 1,
93
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;
94
119
  // A back-edge to the start or an already-reached node: record the hop;
95
120
  // its endpoints are already represented.
96
121
  if (visited.has(otherId)) {
97
- hops.push(hop);
122
+ if (hops.length >= maxHops)
123
+ truncated = true;
124
+ else
125
+ hops.push(hop);
98
126
  continue;
99
127
  }
100
- // A new node past the cap is left unrepresented, so drop its hop too
128
+ // A new node past the cap is left unrepresented, so drop its hop too:
101
129
  // every hop's endpoints stay resolvable in `reached`/`start`.
102
130
  if (reached.size >= maxNodes) {
103
131
  truncated = true;
104
132
  continue;
105
133
  }
134
+ if (hops.length >= maxHops) {
135
+ truncated = true;
136
+ continue;
137
+ }
106
138
  visited.add(otherId);
107
- reached.set(otherId, summary(other, depth + 1, withRoles));
139
+ reached.set(otherId, summary(graph, other, depth + 1, withRoles));
108
140
  next.push({ id: otherId, depth: depth + 1 });
109
141
  hops.push(hop);
110
142
  }
@@ -112,19 +144,44 @@ function runTrace(graph, props) {
112
144
  queue = next;
113
145
  }
114
146
  return {
115
- start: summary(start.node),
147
+ type: "trace",
148
+ start: summary(graph, start.node),
116
149
  direction,
117
150
  hops,
118
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
+ },
119
157
  truncated,
120
158
  };
121
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
+ }
122
179
  /**
123
180
  * The shortest dependency path from `startId` to `targetId` over real (non-
124
181
  * structural) forward edges, breadth-first, or null when `targetId` is not
125
182
  * reachable within maxDepth. Returns the nodes in order and the hops between.
126
183
  */
127
- function findPath(graph, startId, targetId, maxDepth) {
184
+ function findPath(graph, startId, targetId, maxDepth, focus) {
128
185
  const startNode = graph.node(startId);
129
186
  if (startNode === undefined)
130
187
  return null;
@@ -139,7 +196,7 @@ function findPath(graph, startId, targetId, maxDepth) {
139
196
  if (depth >= maxDepth)
140
197
  continue;
141
198
  for (const edge of graph.outgoing(id)) {
142
- if (!traversable(edge.kind))
199
+ if (!traversable(edge.kind, focus))
143
200
  continue;
144
201
  const otherId = edge.to;
145
202
  if (visited.has(otherId))
@@ -148,7 +205,13 @@ function findPath(graph, startId, targetId, maxDepth) {
148
205
  if (other === undefined || other.kind === "file")
149
206
  continue;
150
207
  visited.add(otherId);
151
- parent.set(otherId, { via: id, kind: edge.kind });
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
+ });
152
215
  if (otherId === targetId) {
153
216
  const ids = [otherId];
154
217
  let cur = otherId;
@@ -168,12 +231,19 @@ function findPath(graph, startId, targetId, maxDepth) {
168
231
  const hops = [];
169
232
  for (let i = 1; i < path.length; i++) {
170
233
  const node = path[i];
171
- hops.push({
234
+ const parentEdge = parent.get(node.id);
235
+ const hop = {
172
236
  from: path[i - 1].id,
173
237
  to: node.id,
174
- kind: parent.get(node.id)?.kind ?? "calls",
238
+ kind: parentEdge?.kind ?? "calls",
175
239
  depth: i,
176
- });
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);
177
247
  }
178
248
  return { path, hops };
179
249
  }
@@ -188,7 +258,7 @@ function findPath(graph, startId, targetId, maxDepth) {
188
258
  * Summarize a node for a trace result. With `withRoles`, tag the public-surface
189
259
  * roles (exported / test) an impact trace reports; other directions omit them.
190
260
  */
191
- function summary(node, depth, withRoles = false) {
261
+ function summary(graph, node, depth, withRoles = false, withSignature = false) {
192
262
  const out = {
193
263
  id: node.id,
194
264
  name: node.qualifiedName ?? node.name,
@@ -197,6 +267,11 @@ function summary(node, depth, withRoles = false) {
197
267
  };
198
268
  if (depth !== undefined)
199
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
+ }
200
275
  if (withRoles) {
201
276
  const roles = [];
202
277
  if (node.exported)
@@ -209,11 +284,31 @@ function summary(node, depth, withRoles = false) {
209
284
  return out;
210
285
  }
211
286
  /** An edge the trace should follow: a real dependency, not a structural edge. */
212
- function traversable(kind) {
213
- return kind !== "contains" && kind !== "exports" && kind !== "imports";
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;
214
305
  }
215
306
  function isTestFile(file) {
216
307
  return (/(^|\/)(test|tests|__tests__|spec)\//.test(file) ||
217
308
  /\.(test|spec)\.[cm]?tsx?$/.test(file));
218
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
+ }
219
314
  //# sourceMappingURL=runTrace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runTrace.js","sourceRoot":"","sources":["../../src/server/runTrace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runTrace.js","sourceRoot":"","sources":["../../src/server/runTrace.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ITtscGraphQuery.js.map
3
+ //# sourceMappingURL=ITtscGraphDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITtscGraphDetails.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphDetails.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ITtscGraphEntrypoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITtscGraphEntrypoints.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEntrypoints.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ITtscGraphExpand.js.map
3
+ //# sourceMappingURL=ITtscGraphEscape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITtscGraphEscape.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphEscape.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ITtscGraphIndex.js.map
3
+ //# sourceMappingURL=ITtscGraphLookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITtscGraphLookup.js","sourceRoot":"","sources":["../../src/structures/ITtscGraphLookup.ts"],"names":[],"mappings":""}
@@ -25,11 +25,12 @@ __exportStar(require("./ITtscGraphDiagnostic"), exports);
25
25
  __exportStar(require("./ITtscGraphDump"), exports);
26
26
  __exportStar(require("./ITtscGraphEdge"), exports);
27
27
  __exportStar(require("./ITtscGraphEvidence"), exports);
28
- __exportStar(require("./ITtscGraphExpand"), exports);
29
- __exportStar(require("./ITtscGraphIndex"), exports);
28
+ __exportStar(require("./ITtscGraphEscape"), exports);
29
+ __exportStar(require("./ITtscGraphDetails"), exports);
30
+ __exportStar(require("./ITtscGraphEntrypoints"), exports);
30
31
  __exportStar(require("./ITtscGraphNode"), exports);
31
32
  __exportStar(require("./ITtscGraphOverview"), exports);
32
- __exportStar(require("./ITtscGraphQuery"), exports);
33
+ __exportStar(require("./ITtscGraphLookup"), exports);
33
34
  __exportStar(require("./ITtscGraphTrace"), exports);
34
35
  __exportStar(require("./TtscGraphEdgeKind"), exports);
35
36
  __exportStar(require("./TtscGraphNodeKind"), exports);
@@ -1 +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,oDAAkC;AAClC,mDAAiC;AACjC,uDAAqC;AACrC,oDAAkC;AAClC,oDAAkC;AAClC,sDAAoC;AACpC,sDAAoC;AACpC,0DAAwC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttsc/graph",
3
- "version": "0.16.5",
3
+ "version": "0.16.6",
4
4
  "description": "Checker-resolved architecture graph over MCP for coding agents, backed by ttsc's in-process TypeScript-Go compiler.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -43,7 +43,7 @@
43
43
  "three": "^0.184.0",
44
44
  "three-forcegraph": "^1.43.4",
45
45
  "typescript": "7.0.1-rc",
46
- "ttsc": "0.16.5"
46
+ "ttsc": "0.16.6"
47
47
  },
48
48
  "repository": {
49
49
  "type": "git",
@@ -1,15 +1,11 @@
1
1
  import { TtscGraphMemory } from "./model/TtscGraphMemory";
2
- import { runExpand } from "./server/runExpand";
3
- import { runIndex } from "./server/runIndex";
2
+ import { runDetails } from "./server/runDetails";
3
+ import { runEntrypoints } from "./server/runEntrypoints";
4
+ import { runLookup } from "./server/runLookup";
4
5
  import { runOverview } from "./server/runOverview";
5
- import { runQuery } from "./server/runQuery";
6
6
  import { runTrace } from "./server/runTrace";
7
7
  import { ITtscGraphApplication } from "./structures/ITtscGraphApplication";
8
- import { ITtscGraphExpand } from "./structures/ITtscGraphExpand";
9
- import { ITtscGraphIndex } from "./structures/ITtscGraphIndex";
10
- import { ITtscGraphOverview } from "./structures/ITtscGraphOverview";
11
- import { ITtscGraphQuery } from "./structures/ITtscGraphQuery";
12
- import { ITtscGraphTrace } from "./structures/ITtscGraphTrace";
8
+ import { ITtscGraphEscape } from "./structures/ITtscGraphEscape";
13
9
 
14
10
  export type TtscGraphSource = TtscGraphMemory | (() => TtscGraphMemory);
15
11
 
@@ -17,12 +13,11 @@ export type TtscGraphSource = TtscGraphMemory | (() => TtscGraphMemory);
17
13
  * The MCP tool surface as a plain class over the resident
18
14
  * {@link TtscGraphMemory}.
19
15
  *
20
- * Each public method is one MCP tool `typia.llm.controller` reflects
21
- * {@link ITtscGraphApplication} to generate every tool's JSON schema and
22
- * argument validator from these signatures and their JSDoc, with no
23
- * hand-written schema. The methods delegate to the pure tool functions in
24
- * `./server`, which are unit-testable without a transport; this class only
25
- * binds them to the graph.
16
+ * Its public method is the MCP tool: `typia.llm.controller` reflects
17
+ * {@link ITtscGraphApplication} to generate the tool's JSON schema and argument
18
+ * validator from the signature and JSDoc, with no hand-written schema. The
19
+ * method delegates to the pure graph functions in `./server`, which are
20
+ * unit-testable without a transport; this class only binds them to the graph.
26
21
  *
27
22
  * Every method answers from the resident graph; none recompiles. Output is kept
28
23
  * compact and bounded so a model can read structure without a file read, which
@@ -35,23 +30,35 @@ export class TtscGraphApplication implements ITtscGraphApplication {
35
30
  this.graph = typeof source === "function" ? source : () => source;
36
31
  }
37
32
 
38
- public graph_index(props: ITtscGraphIndex.IProps): ITtscGraphIndex {
39
- return runIndex(this.graph(), props);
40
- }
41
-
42
- public graph_overview(props: ITtscGraphOverview.IProps): ITtscGraphOverview {
43
- return runOverview(this.graph(), props);
44
- }
45
-
46
- public graph_expand(props: ITtscGraphExpand.IProps): ITtscGraphExpand {
47
- return runExpand(this.graph(), props);
48
- }
49
-
50
- public graph_query(props: ITtscGraphQuery.IProps): ITtscGraphQuery {
51
- return runQuery(this.graph(), props);
52
- }
53
-
54
- public graph_trace(props: ITtscGraphTrace.IProps): ITtscGraphTrace {
55
- return runTrace(this.graph(), props);
33
+ public query(
34
+ props: ITtscGraphApplication.IProps,
35
+ ): ITtscGraphApplication.IResult {
36
+ switch (props.request.type) {
37
+ case "entrypoints":
38
+ return { result: runEntrypoints(this.graph(), props.request) };
39
+ case "lookup":
40
+ return { result: runLookup(this.graph(), props.request) };
41
+ case "trace":
42
+ return { result: runTrace(this.graph(), props.request) };
43
+ case "details":
44
+ return { result: runDetails(this.graph(), props.request) };
45
+ case "overview":
46
+ return { result: runOverview(this.graph(), props.request) };
47
+ case "escape": {
48
+ const result: ITtscGraphEscape = {
49
+ type: "escape",
50
+ skipped: true,
51
+ reason: props.request.reason,
52
+ };
53
+ if (props.request.nextStep !== undefined) {
54
+ result.nextStep = props.request.nextStep;
55
+ }
56
+ return {
57
+ result,
58
+ };
59
+ }
60
+ default:
61
+ throw new Error("Unknown graph request type");
62
+ }
56
63
  }
57
64
  }
@@ -0,0 +1,55 @@
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
+ }
@@ -12,7 +12,7 @@ import { instructions } from "./instructions";
12
12
 
13
13
  /**
14
14
  * Build the MCP server for a graph. `typia.llm.controller` reflects
15
- * {@link ITtscGraphApplication} into a validated tool application every tool's
15
+ * {@link ITtscGraphApplication} into a validated tool application. Every tool's
16
16
  * JSON schema and argument validator is generated from the method's TypeScript
17
17
  * types and JSDoc, so there is no hand-written schema. The list/call handlers
18
18
  * below are the minimal standalone registration: list the generated functions,
@@ -64,8 +64,8 @@ export function createServer(
64
64
  if (func === undefined || method === undefined) {
65
65
  return error(`Unknown tool: ${request.params.name}`);
66
66
  }
67
- // A client may omit `arguments` for an all-optional tool (e.g. graph_overview);
68
- // validate an empty object so that call succeeds instead of failing on "expected object".
67
+ // Validate an empty object when a client omits `arguments`, so typia can
68
+ // return field-level errors instead of a generic "expected object".
69
69
  const validation = func.validate(request.params.arguments ?? {});
70
70
  if (!validation.success) {
71
71
  // Hand typia's validation errors back so the model can correct its call.
@@ -77,10 +77,7 @@ export function createServer(
77
77
  content: [
78
78
  {
79
79
  type: "text" as const,
80
- text:
81
- result === undefined
82
- ? "Success"
83
- : JSON.stringify(result, null, 2),
80
+ text: result === undefined ? "Success" : JSON.stringify(result),
84
81
  },
85
82
  ],
86
83
  };