@ttsc/graph 0.18.3 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +231 -36
  2. package/lib/TtscGraphApplication.d.ts +4 -3
  3. package/lib/TtscGraphApplication.js +54 -19
  4. package/lib/TtscGraphApplication.js.map +1 -1
  5. package/lib/index.d.ts +9 -4
  6. package/lib/index.js +24 -5
  7. package/lib/index.js.map +1 -1
  8. package/lib/model/TtscGraphMemory.js +80 -22
  9. package/lib/model/TtscGraphMemory.js.map +1 -1
  10. package/lib/model/TtscGraphSession.d.ts +36 -0
  11. package/lib/model/TtscGraphSession.js +457 -0
  12. package/lib/model/TtscGraphSession.js.map +1 -0
  13. package/lib/model/loadGraph.d.ts +3 -3
  14. package/lib/model/loadGraph.js +94 -141
  15. package/lib/model/loadGraph.js.map +1 -1
  16. package/lib/resolveGraphBinary.d.ts +4 -2
  17. package/lib/resolveGraphBinary.js +7 -3
  18. package/lib/resolveGraphBinary.js.map +1 -1
  19. package/lib/server/createServer.d.ts +16 -9
  20. package/lib/server/createServer.js +286 -190
  21. package/lib/server/createServer.js.map +1 -1
  22. package/lib/server/exportSurface.d.ts +26 -0
  23. package/lib/server/exportSurface.js +44 -0
  24. package/lib/server/exportSurface.js.map +1 -0
  25. package/lib/server/resolveHandle.d.ts +26 -1
  26. package/lib/server/resolveHandle.js +124 -4
  27. package/lib/server/resolveHandle.js.map +1 -1
  28. package/lib/server/resultAudit.d.ts +74 -0
  29. package/lib/server/resultAudit.js +110 -0
  30. package/lib/server/resultAudit.js.map +1 -0
  31. package/lib/server/resultNext.d.ts +9 -0
  32. package/lib/server/resultNext.js +11 -0
  33. package/lib/server/resultNext.js.map +1 -0
  34. package/lib/server/runDetails.d.ts +15 -3
  35. package/lib/server/runDetails.js +105 -23
  36. package/lib/server/runDetails.js.map +1 -1
  37. package/lib/server/runEntrypoints.d.ts +2 -1
  38. package/lib/server/runEntrypoints.js +17 -10
  39. package/lib/server/runEntrypoints.js.map +1 -1
  40. package/lib/server/runLookup.d.ts +2 -1
  41. package/lib/server/runLookup.js +21 -9
  42. package/lib/server/runLookup.js.map +1 -1
  43. package/lib/server/runOverview.d.ts +2 -1
  44. package/lib/server/runOverview.js +5 -4
  45. package/lib/server/runOverview.js.map +1 -1
  46. package/lib/server/runTour.d.ts +2 -1
  47. package/lib/server/runTour.js +707 -331
  48. package/lib/server/runTour.js.map +1 -1
  49. package/lib/server/runTrace.d.ts +2 -1
  50. package/lib/server/runTrace.js +234 -54
  51. package/lib/server/runTrace.js.map +1 -1
  52. package/lib/server/startServer.d.ts +3 -2
  53. package/lib/server/startServer.js +13 -7
  54. package/lib/server/startServer.js.map +1 -1
  55. package/lib/structures/ITtscGraphApplication.d.ts +122 -114
  56. package/lib/structures/ITtscGraphDecorator.d.ts +4 -7
  57. package/lib/structures/ITtscGraphDetails.d.ts +51 -43
  58. package/lib/structures/ITtscGraphDump.d.ts +36 -11
  59. package/lib/structures/ITtscGraphEdge.d.ts +4 -6
  60. package/lib/structures/ITtscGraphEntrypoints.d.ts +10 -27
  61. package/lib/structures/ITtscGraphEscape.d.ts +6 -16
  62. package/lib/structures/ITtscGraphEvidence.d.ts +5 -8
  63. package/lib/structures/ITtscGraphLookup.d.ts +9 -20
  64. package/lib/structures/ITtscGraphNext.d.ts +10 -7
  65. package/lib/structures/ITtscGraphNode.d.ts +17 -8
  66. package/lib/structures/ITtscGraphOverview.d.ts +10 -14
  67. package/lib/structures/ITtscGraphSpan.d.ts +29 -0
  68. package/lib/structures/{ITtscGraphDiagnostic.js → ITtscGraphSpan.js} +1 -1
  69. package/lib/structures/ITtscGraphSpan.js.map +1 -0
  70. package/lib/structures/ITtscGraphTour.d.ts +65 -23
  71. package/lib/structures/ITtscGraphTrace.d.ts +72 -49
  72. package/lib/structures/TtscGraphEdgeKind.d.ts +7 -1
  73. package/lib/structures/index.d.ts +1 -1
  74. package/lib/structures/index.js +1 -1
  75. package/lib/structures/index.js.map +1 -1
  76. package/lib/view.js +3 -1
  77. package/lib/view.js.map +1 -1
  78. package/package.json +4 -4
  79. package/src/TtscGraphApplication.ts +66 -31
  80. package/src/index.ts +23 -5
  81. package/src/model/TtscGraphMemory.ts +86 -22
  82. package/src/model/TtscGraphSession.ts +204 -0
  83. package/src/model/loadGraph.ts +6 -4
  84. package/src/resolveGraphBinary.ts +7 -3
  85. package/src/server/createServer.ts +24 -17
  86. package/src/server/exportSurface.ts +40 -0
  87. package/src/server/resolveHandle.ts +141 -4
  88. package/src/server/resultAudit.ts +109 -0
  89. package/src/server/resultNext.ts +22 -0
  90. package/src/server/runDetails.ts +112 -28
  91. package/src/server/runEntrypoints.ts +26 -17
  92. package/src/server/runLookup.ts +29 -18
  93. package/src/server/runOverview.ts +9 -10
  94. package/src/server/runTour.ts +764 -363
  95. package/src/server/runTrace.ts +265 -71
  96. package/src/server/startServer.ts +13 -8
  97. package/src/structures/ITtscGraphApplication.ts +124 -114
  98. package/src/structures/ITtscGraphDecorator.ts +4 -7
  99. package/src/structures/ITtscGraphDetails.ts +60 -46
  100. package/src/structures/ITtscGraphDump.ts +41 -11
  101. package/src/structures/ITtscGraphEdge.ts +4 -6
  102. package/src/structures/ITtscGraphEntrypoints.ts +10 -30
  103. package/src/structures/ITtscGraphEscape.ts +6 -19
  104. package/src/structures/ITtscGraphEvidence.ts +5 -8
  105. package/src/structures/ITtscGraphLookup.ts +9 -22
  106. package/src/structures/ITtscGraphNext.ts +10 -7
  107. package/src/structures/ITtscGraphNode.ts +18 -8
  108. package/src/structures/ITtscGraphOverview.ts +10 -17
  109. package/src/structures/ITtscGraphSpan.ts +33 -0
  110. package/src/structures/ITtscGraphTour.ts +70 -28
  111. package/src/structures/ITtscGraphTrace.ts +82 -51
  112. package/src/structures/TtscGraphEdgeKind.ts +7 -0
  113. package/src/structures/index.ts +1 -1
  114. package/src/view.ts +3 -1
  115. package/lib/server/accessAliases.d.ts +0 -8
  116. package/lib/server/accessAliases.js +0 -53
  117. package/lib/server/accessAliases.js.map +0 -1
  118. package/lib/server/resultGuide.d.ts +0 -3
  119. package/lib/server/resultGuide.js +0 -16
  120. package/lib/server/resultGuide.js.map +0 -1
  121. package/lib/structures/ITtscGraphDiagnostic.d.ts +0 -27
  122. package/lib/structures/ITtscGraphDiagnostic.js.map +0 -1
  123. package/src/server/accessAliases.ts +0 -55
  124. package/src/server/resultGuide.ts +0 -20
  125. package/src/structures/ITtscGraphDiagnostic.ts +0 -34
@@ -1,5 +1,4 @@
1
1
  import { ITtscGraphEvidence } from "./ITtscGraphEvidence";
2
- import { ITtscGraphNext } from "./ITtscGraphNext";
3
2
  /** The compact dependency or caller flow returned from a selected start symbol. */
4
3
  export interface ITtscGraphTrace {
5
4
  /** Discriminator for dependency tracing. */
@@ -12,86 +11,119 @@ export interface ITtscGraphTrace {
12
11
  hops: ITtscGraphTrace.IHop[];
13
12
  /** Unique nodes reached (excluding the start), each with its depth and roles. */
14
13
  reached: ITtscGraphTrace.INode[];
15
- /** True when the trace hit maxNodes or maxDepth and more flow exists. */
14
+ /** True when the trace hit its node or depth cap; the returned flow stands. */
16
15
  truncated: boolean;
17
16
  /** The resolved `to` target, when a path was requested. */
18
17
  target?: ITtscGraphTrace.INode;
19
18
  /**
20
- * When `to` was given: the ordered dependency path from `from` to `to`
21
- * (`from` first, `to` last), or empty when `to` is not reachable from
22
- * `from`.
19
+ * Ordered dependency path from `from` to `to` when `to` was given (`from`
20
+ * first, `to` last), empty when `to` is unreachable.
23
21
  */
24
22
  path?: ITtscGraphTrace.INode[];
25
23
  /** Compact hop summaries preserving node names and edge evidence, capped. */
26
24
  steps?: string[];
27
- /** How to use this source-free result next. */
28
- next: ITtscGraphNext;
29
- /** Human-readable compatibility note mirroring `next`. */
30
- guide: string;
25
+ /**
26
+ * Symbols both ends touch, when no call path runs between them.
27
+ *
28
+ * Nothing calls across the gap because in an event-driven codebase nothing
29
+ * does: a handler registers a listener on an emitter, the emitter's `emit()`
30
+ * runs whatever a registration put in an array, and no call edge crosses that
31
+ * array. But both ends touch the emitter, and that is an edge, not a guess —
32
+ * Excalidraw's pointer handler and its store's emit both reference
33
+ * `Store.onDurableIncrementEmitter`, which is exactly the seam the call graph
34
+ * cannot walk.
35
+ *
36
+ * A junction is not a path. It is the symbol to look at next, and the edges
37
+ * that say why.
38
+ */
39
+ junctions?: ITtscGraphTrace.IJunction[];
31
40
  /** When `from` was an ambiguous name, the matches to disambiguate with. */
32
41
  candidates?: ITtscGraphTrace.INode[];
33
42
  }
34
43
  export declare namespace ITtscGraphTrace {
44
+ /** A symbol both ends of an unreachable path touch, and how each touches it. */
45
+ interface IJunction {
46
+ /** Stable node id: trace or inspect this symbol to cross the seam. */
47
+ id: string;
48
+ /** Qualified symbol name when available, otherwise the simple name. */
49
+ name: string;
50
+ /** Declaration kind (`variable`, `method`, `class`, ...). */
51
+ kind: string;
52
+ /** Project-relative path of the file that declares it. */
53
+ file: string;
54
+ /** 1-based declaration line, when known. */
55
+ line?: number;
56
+ /** How the start reaches it: the edge kind, and where that edge sits. */
57
+ fromStart: IJunctionEdge;
58
+ /** How the target reaches it, or is reached from it. */
59
+ fromTarget: IJunctionEdge;
60
+ }
61
+ /** One edge between an end of the requested path and the junction. */
62
+ interface IJunctionEdge {
63
+ /** `calls`, `accesses`, `instantiates`, `type_ref`, ... */
64
+ kind: string;
65
+ /** True when the end is the edge's source, false when it is the target. */
66
+ outgoing: boolean;
67
+ /** Where the reference sits in source. */
68
+ evidence?: ITtscGraphEvidence;
69
+ }
35
70
  /** Where and how far to trace dependency flow. */
36
71
  interface IRequest {
37
72
  /** Discriminator for dependency tracing. */
38
73
  type: "trace";
39
74
  /**
40
- * Where to start: a node id from another tool, a simple symbol name, or a
41
- * dotted member name such as `OrderService.create`. An ambiguous name
42
- * returns its candidates instead of a trace.
75
+ * Where to start: a node id, a simple symbol name, or a dotted member
76
+ * (`OrderService.create`). An ambiguous name returns its candidates instead
77
+ * of a trace.
43
78
  */
44
79
  from: string;
45
80
  /**
46
- * A target symbol: node id, simple symbol name, or dotted member name. When
47
- * given, the tool returns the dependency path from `from` to this target,
48
- * the one-call answer for "how does A reach B", instead of an open-ended
49
- * trace. Prefer this path mode whenever both ends are known.
81
+ * Target symbol (node id, simple name, or dotted member). When given, the
82
+ * tool returns the dependency path from `from` to it, the one-call answer
83
+ * for "how does A reach B". Prefer this path mode whenever both ends are
84
+ * known.
50
85
  */
51
86
  to?: string;
52
87
  /**
53
- * `forward` follows what the start uses (callees, instantiations, renders);
54
- * `reverse` follows what uses the start (callers); `impact` is a reverse
55
- * trace that prioritizes public API and test nodes a change would reach.
56
- * Its test nodes are semantic usage edges, not a text-search inventory.
57
- * Caller questions usually fit `reverse`.
88
+ * Trace direction:
89
+ *
90
+ * - `forward`: what the start uses (callees, instantiations, renders)
91
+ * - `reverse`: what uses the start (callers); the usual fit for caller
92
+ * questions
93
+ * - `impact`: reverse trace prioritizing public API and test nodes a change
94
+ * reaches; its test nodes are semantic usage edges, not a text search
58
95
  *
59
96
  * @default "forward"
60
97
  */
61
98
  direction?: "forward" | "reverse" | "impact";
62
99
  /**
63
- * Which non-structural edge family to follow: `execution` follows runtime
64
- * calls, instantiations, property access, and JSX renders; `types` follows
65
- * type references and inheritance; `all` preserves the full graph. Flow
66
- * questions should usually choose `execution` rather than `all`.
100
+ * Non-structural edge family to follow:
101
+ *
102
+ * - `execution`: runtime calls, instantiations, property access, JSX renders
103
+ * - `types`: type references and inheritance
104
+ * - `all`: the full graph
105
+ *
106
+ * Flow questions usually want `execution`, not `all`.
67
107
  *
68
108
  * @default "all"
69
109
  */
70
110
  focus?: "all" | "execution" | "types";
71
111
  /**
72
- * How many hops deep to follow. Open forward/reverse traces are capped at
73
- * 2; impact traces at 4; path mode at 12.
74
- *
75
- * Prefer the default for open traces. Raise only for path mode or when the
76
- * previous trace named the missing next hop.
112
+ * Hops deep to follow (open forward/reverse cap at 8, impact at 4, path
113
+ * mode at 12). Raise it to follow a runtime chain to its end in one call.
77
114
  *
78
- * @default 2
115
+ * @default 3
79
116
  */
80
117
  maxDepth?: number;
81
118
  /**
82
- * Cap on reached nodes; the trace stops and marks itself truncated past it.
83
- * Open forward/reverse traces are capped at 8 nodes, impact at 16 nodes.
119
+ * Cap on reached nodes (open forward/reverse cap at 32, impact at 16).
84
120
  *
85
- * Prefer the default; use larger open traces only when a named missing edge
86
- * requires it.
87
- *
88
- * @default 6
121
+ * @default 12
89
122
  */
90
123
  maxNodes?: number;
91
124
  /**
92
125
  * Include dependency-boundary nodes from node_modules or bundled `.d.ts`
93
- * libraries. Leave false for source-flow tours; enable only when the user
94
- * asks about external type/API boundaries.
126
+ * libraries. Enable only for questions about external type/API boundaries.
95
127
  *
96
128
  * @default false
97
129
  */
@@ -107,17 +139,8 @@ export declare namespace ITtscGraphTrace {
107
139
  kind: string;
108
140
  /** Hops from the start (1 = direct). */
109
141
  depth: number;
110
- /**
111
- * Source span for the expression that produced this hop. It is repository
112
- * evidence for the hop and can be cited without opening the file.
113
- */
142
+ /** Source span that produced the hop: citable without opening the file. */
114
143
  evidence?: ITtscGraphEvidence;
115
- /**
116
- * Stable access-path aliases derived from edge evidence. These preserve a
117
- * resolved member's owner and the concrete property path used at the call
118
- * site.
119
- */
120
- aliases?: string[];
121
144
  }
122
145
  /** A node on the trace: the start, a reached node, or a candidate. */
123
146
  interface INode {
@@ -6,5 +6,11 @@
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
- export type TtscGraphEdgeKind = "contains" | "exports" | "imports" | "calls" | "accesses" | "instantiates" | "type_ref" | "extends" | "implements" | "overrides" | "decorates" | "renders" | "tests";
16
+ export type TtscGraphEdgeKind = "contains" | "exports" | "imports" | "calls" | "accesses" | "instantiates" | "type_ref" | "extends" | "implements" | "overrides" | "dispatches" | "decorates" | "renders" | "tests";
@@ -1,6 +1,5 @@
1
1
  export * from "./ITtscGraphApplication";
2
2
  export * from "./ITtscGraphDecorator";
3
- export * from "./ITtscGraphDiagnostic";
4
3
  export * from "./ITtscGraphDump";
5
4
  export * from "./ITtscGraphEdge";
6
5
  export * from "./ITtscGraphEvidence";
@@ -12,6 +11,7 @@ export * from "./ITtscGraphOverview";
12
11
  export * from "./ITtscGraphLookup";
13
12
  export * from "./ITtscGraphNext";
14
13
  export * from "./ITtscGraphTrace";
14
+ export * from "./ITtscGraphSpan";
15
15
  export * from "./ITtscGraphTour";
16
16
  export * from "./TtscGraphEdgeKind";
17
17
  export * from "./TtscGraphNodeKind";
@@ -21,7 +21,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  __exportStar(require("./ITtscGraphApplication"), exports);
23
23
  __exportStar(require("./ITtscGraphDecorator"), exports);
24
- __exportStar(require("./ITtscGraphDiagnostic"), exports);
25
24
  __exportStar(require("./ITtscGraphDump"), exports);
26
25
  __exportStar(require("./ITtscGraphEdge"), exports);
27
26
  __exportStar(require("./ITtscGraphEvidence"), exports);
@@ -33,6 +32,7 @@ __exportStar(require("./ITtscGraphOverview"), exports);
33
32
  __exportStar(require("./ITtscGraphLookup"), exports);
34
33
  __exportStar(require("./ITtscGraphNext"), exports);
35
34
  __exportStar(require("./ITtscGraphTrace"), exports);
35
+ __exportStar(require("./ITtscGraphSpan"), exports);
36
36
  __exportStar(require("./ITtscGraphTour"), exports);
37
37
  __exportStar(require("./TtscGraphEdgeKind"), exports);
38
38
  __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,sDAAoC;AACpC,0DAAwC;AACxC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,mDAAiC;AACjC,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,mDAAiC;AACjC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,sDAAoC;AACpC,0DAAwC;AACxC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,mDAAiC;AACjC,mDAAiC;AACjC,sDAAoC;AACpC,sDAAoC;AACpC,0DAAwC"}
package/lib/view.js CHANGED
@@ -50,7 +50,9 @@ function parseViewArgs(argv) {
50
50
  */
51
51
  function runView(argv) {
52
52
  const opts = parseViewArgs(argv);
53
- const binary = (0, resolveGraphBinary_1.resolveGraphBinary)();
53
+ // Anchor binary resolution at the project selected by `--cwd`, so `view` from
54
+ // an unrelated directory still finds the `ttsc` installed under the target.
55
+ const binary = (0, resolveGraphBinary_1.resolveGraphBinary)(process.env, opts.cwd);
54
56
  if (binary === null) {
55
57
  process.stderr.write("@ttsc/graph: could not resolve the ttscgraph binary. " +
56
58
  "Install `ttsc` so its platform package is present, " +
package/lib/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttsc/graph",
3
- "version": "0.18.3",
3
+ "version": "0.19.0",
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",
@@ -16,8 +16,8 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "@modelcontextprotocol/sdk": "^1.26.0",
19
- "@typia/mcp": "^13.0.0",
20
- "typia": "^13.0.0"
19
+ "@typia/mcp": "13.1.0",
20
+ "typia": "13.1.0"
21
21
  },
22
22
  "keywords": [
23
23
  "ttsc",
@@ -39,7 +39,7 @@
39
39
  "three": "^0.184.0",
40
40
  "three-forcegraph": "^1.43.4",
41
41
  "typescript": "^7.0.2",
42
- "ttsc": "0.18.3"
42
+ "ttsc": "0.19.0"
43
43
  },
44
44
  "repository": {
45
45
  "type": "git",
@@ -1,5 +1,10 @@
1
1
  import { TtscGraphMemory } from "./model/TtscGraphMemory";
2
- import { resultGuide, resultNext } from "./server/resultGuide";
2
+ import {
3
+ RESULT_AUDIT,
4
+ RESULT_AUDIT_ESCAPE,
5
+ RESULT_AUDIT_SELECTION,
6
+ } from "./server/resultAudit";
7
+ import { resultNext } from "./server/resultNext";
3
8
  import { runDetails } from "./server/runDetails";
4
9
  import { runEntrypoints } from "./server/runEntrypoints";
5
10
  import { runLookup } from "./server/runLookup";
@@ -9,7 +14,9 @@ import { runTrace } from "./server/runTrace";
9
14
  import { ITtscGraphApplication } from "./structures/ITtscGraphApplication";
10
15
  import { ITtscGraphEscape } from "./structures/ITtscGraphEscape";
11
16
 
12
- export type TtscGraphSource = TtscGraphMemory | (() => TtscGraphMemory);
17
+ export type TtscGraphSource =
18
+ | TtscGraphMemory
19
+ | (() => TtscGraphMemory | Promise<TtscGraphMemory>);
13
20
 
14
21
  /**
15
22
  * The MCP tool surface as a plain class over the resident
@@ -22,77 +29,105 @@ export type TtscGraphSource = TtscGraphMemory | (() => TtscGraphMemory);
22
29
  * The method delegates to the pure graph functions in `./server`, which are
23
30
  * unit-testable without a transport; this class only binds them to the graph.
24
31
  *
25
- * Every method answers from the resident graph; none recompiles. Output is kept
32
+ * Every method answers from the current resident graph. The source may refresh
33
+ * that graph before the operation when project files changed. Output is kept
26
34
  * compact and bounded so a model can read structure without a file read, which
27
35
  * is the token win the redesign exists for.
28
36
  */
29
37
  export class TtscGraphApplication implements ITtscGraphApplication {
30
- private readonly graph: () => TtscGraphMemory;
38
+ private readonly graph: () => TtscGraphMemory | Promise<TtscGraphMemory>;
31
39
 
32
40
  public constructor(source: TtscGraphSource) {
33
41
  this.graph = typeof source === "function" ? source : () => source;
34
42
  }
35
43
 
36
- public inspect_typescript_graph(
44
+ public async inspect_typescript_graph(
37
45
  props: ITtscGraphApplication.IProps,
38
- ): ITtscGraphApplication.IResult {
46
+ ): Promise<ITtscGraphApplication.IOutput> {
39
47
  if (props.request.type === "escape") {
40
48
  const result = this.escape(props.request.reason);
41
49
  if (props.request.nextStep !== undefined) {
42
50
  result.nextStep = props.request.nextStep;
43
51
  }
44
52
  return {
53
+ audit: RESULT_AUDIT_ESCAPE,
54
+ next: resultNext(
55
+ "outside",
56
+ "The caller chose to leave the graph, so this call carries no graph facts.",
57
+ ),
45
58
  result,
46
59
  };
47
60
  }
61
+ const graph = await this.graph();
48
62
  switch (props.request.type) {
49
- case "entrypoints":
63
+ case "entrypoints": {
64
+ // A ranked shortlist matched against the question: its facts are
65
+ // compiler-verified, but its selection is heuristic, so it carries the
66
+ // selection audit rather than the exact-structure one.
67
+ const r = runEntrypoints(graph, props.request);
50
68
  return {
51
- result: runEntrypoints(this.graph(), props.request),
69
+ audit: RESULT_AUDIT_SELECTION,
70
+ next: r.next,
71
+ result: r.result,
52
72
  };
53
- case "lookup":
73
+ }
74
+ case "lookup": {
75
+ // Natural-query ranker (see `runLookup`): scored, ranked, per-file
76
+ // capped, and limited, so the selection is heuristic.
77
+ const r = runLookup(graph, props.request);
54
78
  return {
55
- result: runLookup(this.graph(), props.request),
79
+ audit: RESULT_AUDIT_SELECTION,
80
+ next: r.next,
81
+ result: r.result,
56
82
  };
57
- case "trace":
83
+ }
84
+ case "trace": {
85
+ const r = runTrace(graph, props.request);
58
86
  return {
59
- result: runTrace(this.graph(), props.request),
87
+ audit: RESULT_AUDIT,
88
+ next: r.next,
89
+ result: r.result,
60
90
  };
61
- case "details":
91
+ }
92
+ case "details": {
93
+ const r = runDetails(graph, props.request);
62
94
  return {
63
- result: runDetails(this.graph(), props.request),
95
+ audit: RESULT_AUDIT,
96
+ next: r.next,
97
+ result: r.result,
64
98
  };
65
- case "overview":
99
+ }
100
+ case "overview": {
101
+ const r = runOverview(graph, props.request);
66
102
  return {
67
- result: runOverview(this.graph(), props.request),
103
+ audit: RESULT_AUDIT,
104
+ next: r.next,
105
+ result: r.result,
68
106
  };
69
- case "tour":
107
+ }
108
+ case "tour": {
109
+ // The tour ranks against the question, and the question is `props`
110
+ // — the caller wrote it once, at the top, in the user's words. It
111
+ // ranks seeds, walks bounded flows, and slices to a limit, so its
112
+ // selection is heuristic.
113
+ const r = runTour(graph, props.request, props.question);
70
114
  return {
71
- result: runTour(this.graph(), props.request),
115
+ audit: RESULT_AUDIT_SELECTION,
116
+ next: r.next,
117
+ result: r.result,
72
118
  };
119
+ }
73
120
  default:
74
121
  props.request satisfies never;
75
122
  throw new Error("Unknown graph request type");
76
123
  }
77
124
  }
78
125
 
79
- private escape(
80
- reason: string,
81
- nextStep?: string,
82
- action: "answer" | "outside" | "clarify" = "outside",
83
- ): ITtscGraphEscape {
126
+ private escape(reason: string, nextStep?: string): ITtscGraphEscape {
84
127
  return {
85
128
  type: "escape",
86
129
  skipped: true,
87
130
  reason,
88
- next: resultNext(
89
- action,
90
- nextStep ??
91
- "Graph evidence is exhausted or not the next evidence source.",
92
- ),
93
- guide: resultGuide(
94
- "Finish from existing graph evidence, state the graph gap, or ask for clarification.",
95
- ),
96
131
  ...(nextStep !== undefined ? { nextStep } : {}),
97
132
  };
98
133
  }
package/src/index.ts CHANGED
@@ -6,6 +6,21 @@ import { resolveGraphBinary } from "./resolveGraphBinary";
6
6
  import { startServer } from "./server/startServer";
7
7
  import { runView } from "./view";
8
8
 
9
+ /** What a graph result says about where its facts came from. */
10
+ export {
11
+ RESULT_AUDIT,
12
+ RESULT_AUDIT_ESCAPE,
13
+ RESULT_AUDIT_SELECTION,
14
+ } from "./server/resultAudit";
15
+
16
+ // Programmatic entry points. Each resolves its native binary from the project
17
+ // `cwd` it is given (see `resolveGraphBinary`), so a caller that graphs a
18
+ // project other than its own process directory names it once and the binary is
19
+ // found under that project's installed `ttsc`.
20
+ export { resolveGraphBinary } from "./resolveGraphBinary";
21
+ export { loadGraph } from "./model/loadGraph";
22
+ export { TtscGraphSession } from "./model/TtscGraphSession";
23
+
9
24
  // The server version reported in the MCP handshake; read from this package.
10
25
  const VERSION: string = (require("../package.json") as { version: string })
11
26
  .version;
@@ -38,10 +53,10 @@ function parseProjectArgs(argv: readonly string[]): {
38
53
  * - `view`: JS-orchestrated 3D viewer (dump -> reduce -> serve -> open).
39
54
  * - `dump`: pass through to the native `ttscgraph dump`, which prints the whole
40
55
  * graph as JSON for piping or the viewer.
41
- * - Default: serve the MCP graph over stdio. The TypeScript server runs
42
- * `ttscgraph dump` once to build the resident graph, then answers tool calls
43
- * from memory; the agent's MCP client speaks JSON-RPC over this process's
44
- * stdin/stdout. The process stays alive on the stdio transport.
56
+ * - Default: serve the MCP graph over stdio. The TypeScript server keeps a native
57
+ * incremental compiler session resident, checks the disk snapshot before each
58
+ * graph operation, and reuses the in-memory graph when unchanged; the agent's
59
+ * MCP client speaks JSON-RPC over this process's stdin/stdout.
45
60
  */
46
61
  export function runGraph(
47
62
  argv: readonly string[] = process.argv.slice(2),
@@ -65,7 +80,10 @@ export function runGraph(
65
80
  * on this process's stdout. Returns the child's exit code.
66
81
  */
67
82
  function runDump(argv: readonly string[]): number {
68
- const binary = resolveGraphBinary();
83
+ // Resolve the native binary from the target project the caller named with
84
+ // `--cwd`, not from wherever the launcher process happened to start.
85
+ const { cwd } = parseProjectArgs(argv);
86
+ const binary = resolveGraphBinary(process.env, cwd);
69
87
  if (binary === null) {
70
88
  process.stderr.write(
71
89
  "@ttsc/graph: could not resolve the ttscgraph binary. " +