ts-knowledge-graph 0.1.1 → 0.1.4

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 (212) hide show
  1. package/README.md +104 -43
  2. package/contribs/web_visualisation/README.md +83 -0
  3. package/contribs/web_visualisation/web/css/style.css +219 -0
  4. package/contribs/web_visualisation/web/data/.gitignore +3 -0
  5. package/contribs/web_visualisation/web/data/kind_descriptions.js +38 -0
  6. package/contribs/web_visualisation/web/index.html +74 -0
  7. package/contribs/web_visualisation/web/js/app.js +910 -0
  8. package/contribs/web_visualisation/web/tsconfig.json +18 -0
  9. package/contribs/web_visualisation/web/types/app_globals.d.ts +146 -0
  10. package/dist/benchmark/benchmark_stats.d.ts +41 -0
  11. package/dist/benchmark/benchmark_stats.d.ts.map +1 -0
  12. package/dist/benchmark/benchmark_stats.js +61 -0
  13. package/dist/benchmark/benchmark_stats.js.map +1 -0
  14. package/dist/benchmark/node_benchmark.d.ts +78 -0
  15. package/dist/benchmark/node_benchmark.d.ts.map +1 -0
  16. package/dist/benchmark/node_benchmark.js +112 -0
  17. package/dist/benchmark/node_benchmark.js.map +1 -0
  18. package/dist/cli.d.ts +0 -9
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +32 -208
  21. package/dist/cli.js.map +1 -1
  22. package/dist/commands/benchmark_command.d.ts +11 -0
  23. package/dist/commands/benchmark_command.d.ts.map +1 -0
  24. package/dist/commands/benchmark_command.js +91 -0
  25. package/dist/commands/benchmark_command.js.map +1 -0
  26. package/dist/commands/blast_radius_command.d.ts +5 -0
  27. package/dist/commands/blast_radius_command.d.ts.map +1 -0
  28. package/dist/commands/blast_radius_command.js +18 -0
  29. package/dist/commands/blast_radius_command.js.map +1 -0
  30. package/dist/commands/calls_command.d.ts +5 -0
  31. package/dist/commands/calls_command.d.ts.map +1 -0
  32. package/dist/commands/calls_command.js +7 -0
  33. package/dist/commands/calls_command.js.map +1 -0
  34. package/dist/commands/command_helpers.d.ts +15 -0
  35. package/dist/commands/command_helpers.d.ts.map +1 -0
  36. package/dist/commands/command_helpers.js +61 -0
  37. package/dist/commands/command_helpers.js.map +1 -0
  38. package/dist/commands/cost_command.d.ts +13 -0
  39. package/dist/commands/cost_command.d.ts.map +1 -0
  40. package/dist/commands/cost_command.js +122 -0
  41. package/dist/commands/cost_command.js.map +1 -0
  42. package/dist/commands/dead_exports_command.d.ts +5 -0
  43. package/dist/commands/dead_exports_command.d.ts.map +1 -0
  44. package/dist/commands/dead_exports_command.js +7 -0
  45. package/dist/commands/dead_exports_command.js.map +1 -0
  46. package/dist/commands/enrich_command.d.ts +7 -0
  47. package/dist/commands/enrich_command.d.ts.map +1 -0
  48. package/dist/commands/enrich_command.js +62 -0
  49. package/dist/commands/enrich_command.js.map +1 -0
  50. package/dist/commands/extract_command.d.ts +8 -0
  51. package/dist/commands/extract_command.d.ts.map +1 -0
  52. package/dist/commands/extract_command.js +49 -0
  53. package/dist/commands/extract_command.js.map +1 -0
  54. package/dist/commands/find_command.d.ts +5 -0
  55. package/dist/commands/find_command.d.ts.map +1 -0
  56. package/dist/commands/find_command.js +7 -0
  57. package/dist/commands/find_command.js.map +1 -0
  58. package/dist/commands/hotspots_command.d.ts +7 -0
  59. package/dist/commands/hotspots_command.d.ts.map +1 -0
  60. package/dist/commands/hotspots_command.js +67 -0
  61. package/dist/commands/hotspots_command.js.map +1 -0
  62. package/dist/commands/install_command.d.ts +15 -0
  63. package/dist/commands/install_command.d.ts.map +1 -0
  64. package/dist/commands/install_command.js +41 -0
  65. package/dist/commands/install_command.js.map +1 -0
  66. package/dist/commands/load_command.d.ts +6 -0
  67. package/dist/commands/load_command.d.ts.map +1 -0
  68. package/dist/commands/load_command.js +30 -0
  69. package/dist/commands/load_command.js.map +1 -0
  70. package/dist/commands/neighbors_command.d.ts +5 -0
  71. package/dist/commands/neighbors_command.d.ts.map +1 -0
  72. package/dist/commands/neighbors_command.js +17 -0
  73. package/dist/commands/neighbors_command.js.map +1 -0
  74. package/dist/commands/references_command.d.ts +5 -0
  75. package/dist/commands/references_command.d.ts.map +1 -0
  76. package/dist/commands/references_command.js +17 -0
  77. package/dist/commands/references_command.js.map +1 -0
  78. package/dist/commands/verify_command.d.ts +8 -0
  79. package/dist/commands/verify_command.d.ts.map +1 -0
  80. package/dist/commands/verify_command.js +57 -0
  81. package/dist/commands/verify_command.js.map +1 -0
  82. package/dist/commands/web_command.d.ts +46 -0
  83. package/dist/commands/web_command.d.ts.map +1 -0
  84. package/dist/commands/web_command.js +226 -0
  85. package/dist/commands/web_command.js.map +1 -0
  86. package/dist/commands/who_calls_command.d.ts +5 -0
  87. package/dist/commands/who_calls_command.d.ts.map +1 -0
  88. package/dist/commands/who_calls_command.js +7 -0
  89. package/dist/commands/who_calls_command.js.map +1 -0
  90. package/dist/enrich/cpu_profile.d.ts +127 -0
  91. package/dist/enrich/cpu_profile.d.ts.map +1 -0
  92. package/dist/enrich/cpu_profile.js +97 -0
  93. package/dist/enrich/cpu_profile.js.map +1 -0
  94. package/dist/enrich/runtime_enricher.d.ts +56 -0
  95. package/dist/enrich/runtime_enricher.d.ts.map +1 -0
  96. package/dist/enrich/runtime_enricher.js +80 -0
  97. package/dist/enrich/runtime_enricher.js.map +1 -0
  98. package/dist/enrich/runtime_join.d.ts +100 -0
  99. package/dist/enrich/runtime_join.d.ts.map +1 -0
  100. package/dist/enrich/runtime_join.js +227 -0
  101. package/dist/enrich/runtime_join.js.map +1 -0
  102. package/dist/extract/api_extractor.d.ts +24 -0
  103. package/dist/extract/api_extractor.d.ts.map +1 -0
  104. package/dist/extract/api_extractor.js +71 -0
  105. package/dist/extract/api_extractor.js.map +1 -0
  106. package/dist/extract/config_extractor.d.ts +22 -0
  107. package/dist/extract/config_extractor.d.ts.map +1 -0
  108. package/dist/extract/config_extractor.js +61 -0
  109. package/dist/extract/config_extractor.js.map +1 -0
  110. package/dist/extract/endpoint_extractor.d.ts +36 -0
  111. package/dist/extract/endpoint_extractor.d.ts.map +1 -0
  112. package/dist/extract/endpoint_extractor.js +117 -0
  113. package/dist/extract/endpoint_extractor.js.map +1 -0
  114. package/dist/extract/{graph-builder.d.ts → graph_builder.d.ts} +9 -1
  115. package/dist/extract/graph_builder.d.ts.map +1 -0
  116. package/dist/extract/graph_builder.js +61 -0
  117. package/dist/extract/graph_builder.js.map +1 -0
  118. package/dist/extract/node_id.d.ts +24 -0
  119. package/dist/extract/node_id.d.ts.map +1 -0
  120. package/dist/extract/node_id.js +44 -0
  121. package/dist/extract/node_id.js.map +1 -0
  122. package/dist/extract/{project-loader.d.ts → project_loader.d.ts} +1 -1
  123. package/dist/extract/project_loader.d.ts.map +1 -0
  124. package/dist/extract/{project-loader.js → project_loader.js} +1 -1
  125. package/dist/extract/{project-loader.js.map → project_loader.js.map} +1 -1
  126. package/dist/extract/scope_resolver.d.ts +22 -0
  127. package/dist/extract/scope_resolver.d.ts.map +1 -0
  128. package/dist/extract/scope_resolver.js +53 -0
  129. package/dist/extract/scope_resolver.js.map +1 -0
  130. package/dist/extract/semantic_extractor.d.ts +47 -0
  131. package/dist/extract/semantic_extractor.d.ts.map +1 -0
  132. package/dist/extract/{semantic-extractor.js → semantic_extractor.js} +98 -4
  133. package/dist/extract/semantic_extractor.js.map +1 -0
  134. package/dist/extract/{structural-extractor.d.ts → structural_extractor.d.ts} +7 -1
  135. package/dist/extract/{structural-extractor.d.ts.map → structural_extractor.d.ts.map} +1 -1
  136. package/dist/extract/{structural-extractor.js → structural_extractor.js} +24 -14
  137. package/dist/extract/structural_extractor.js.map +1 -0
  138. package/dist/project_root.d.ts +7 -0
  139. package/dist/project_root.d.ts.map +1 -0
  140. package/dist/project_root.js +9 -0
  141. package/dist/project_root.js.map +1 -0
  142. package/dist/query/graph_query.d.ts +262 -0
  143. package/dist/query/graph_query.d.ts.map +1 -0
  144. package/dist/query/graph_query.js +604 -0
  145. package/dist/query/graph_query.js.map +1 -0
  146. package/dist/schema/edge.d.ts +40 -5
  147. package/dist/schema/edge.d.ts.map +1 -1
  148. package/dist/schema/edge.js +70 -0
  149. package/dist/schema/edge.js.map +1 -1
  150. package/dist/schema/node.d.ts +20 -5
  151. package/dist/schema/node.d.ts.map +1 -1
  152. package/dist/schema/node.js +36 -0
  153. package/dist/schema/node.js.map +1 -1
  154. package/dist/schema/runtime_manifest.d.ts +36 -0
  155. package/dist/schema/runtime_manifest.d.ts.map +1 -0
  156. package/dist/schema/runtime_manifest.js +23 -0
  157. package/dist/schema/runtime_manifest.js.map +1 -0
  158. package/dist/store/{jsonl-reader.d.ts → jsonl_reader.d.ts} +1 -1
  159. package/dist/store/{jsonl-reader.d.ts.map → jsonl_reader.d.ts.map} +1 -1
  160. package/dist/store/{jsonl-reader.js → jsonl_reader.js} +1 -1
  161. package/dist/store/{jsonl-reader.js.map → jsonl_reader.js.map} +1 -1
  162. package/dist/store/{jsonl-store.d.ts → jsonl_store.d.ts} +1 -1
  163. package/dist/store/{jsonl-store.d.ts.map → jsonl_store.d.ts.map} +1 -1
  164. package/dist/store/{jsonl-store.js → jsonl_store.js} +1 -1
  165. package/dist/store/{jsonl-store.js.map → jsonl_store.js.map} +1 -1
  166. package/dist/store/kuzu_store.d.ts +66 -0
  167. package/dist/store/kuzu_store.d.ts.map +1 -0
  168. package/dist/store/kuzu_store.js +156 -0
  169. package/dist/store/kuzu_store.js.map +1 -0
  170. package/dist/verify/project_verifier.d.ts +85 -0
  171. package/dist/verify/project_verifier.d.ts.map +1 -0
  172. package/dist/verify/project_verifier.js +138 -0
  173. package/dist/verify/project_verifier.js.map +1 -0
  174. package/dotclaude_folder/skills/code-graph-query/SKILL.md +91 -0
  175. package/package.json +88 -5
  176. package/.env-sample +0 -34
  177. package/dist/agent/agent-tools.d.ts +0 -13
  178. package/dist/agent/agent-tools.d.ts.map +0 -1
  179. package/dist/agent/agent-tools.js +0 -153
  180. package/dist/agent/agent-tools.js.map +0 -1
  181. package/dist/agent/code-editor.d.ts +0 -18
  182. package/dist/agent/code-editor.d.ts.map +0 -1
  183. package/dist/agent/code-editor.js +0 -43
  184. package/dist/agent/code-editor.js.map +0 -1
  185. package/dist/agent/optimizer-agent.d.ts +0 -30
  186. package/dist/agent/optimizer-agent.d.ts.map +0 -1
  187. package/dist/agent/optimizer-agent.js +0 -97
  188. package/dist/agent/optimizer-agent.js.map +0 -1
  189. package/dist/agent/verifier.d.ts +0 -9
  190. package/dist/agent/verifier.d.ts.map +0 -1
  191. package/dist/agent/verifier.js +0 -19
  192. package/dist/agent/verifier.js.map +0 -1
  193. package/dist/extract/graph-builder.d.ts.map +0 -1
  194. package/dist/extract/graph-builder.js +0 -39
  195. package/dist/extract/graph-builder.js.map +0 -1
  196. package/dist/extract/node-id.d.ts +0 -8
  197. package/dist/extract/node-id.d.ts.map +0 -1
  198. package/dist/extract/node-id.js +0 -22
  199. package/dist/extract/node-id.js.map +0 -1
  200. package/dist/extract/project-loader.d.ts.map +0 -1
  201. package/dist/extract/semantic-extractor.d.ts +0 -22
  202. package/dist/extract/semantic-extractor.d.ts.map +0 -1
  203. package/dist/extract/semantic-extractor.js.map +0 -1
  204. package/dist/extract/structural-extractor.js.map +0 -1
  205. package/dist/query/graph-query.d.ts +0 -28
  206. package/dist/query/graph-query.d.ts.map +0 -1
  207. package/dist/query/graph-query.js +0 -93
  208. package/dist/query/graph-query.js.map +0 -1
  209. package/dist/store/kuzu-store.d.ts +0 -14
  210. package/dist/store/kuzu-store.d.ts.map +0 -1
  211. package/dist/store/kuzu-store.js +0 -52
  212. package/dist/store/kuzu-store.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { Node, SyntaxKind, } from 'ts-morph';
2
- import { NodeId } from './node-id.js';
2
+ import { NodeId } from './node_id.js';
3
3
  const CALLABLE_TARGET_KINDS = new Set([
4
4
  SyntaxKind.FunctionDeclaration,
5
5
  SyntaxKind.MethodDeclaration,
@@ -29,6 +29,25 @@ const SCOPE_KINDS = new Set([
29
29
  SyntaxKind.ClassDeclaration,
30
30
  SyntaxKind.InterfaceDeclaration,
31
31
  ]);
32
+ /** Binary-expression operators that assign to their left-hand side: `=` plus every compound form (`+=`, `&&=`, …). */
33
+ const ASSIGNMENT_OPERATORS = new Set([
34
+ SyntaxKind.EqualsToken,
35
+ SyntaxKind.PlusEqualsToken,
36
+ SyntaxKind.MinusEqualsToken,
37
+ SyntaxKind.AsteriskEqualsToken,
38
+ SyntaxKind.AsteriskAsteriskEqualsToken,
39
+ SyntaxKind.SlashEqualsToken,
40
+ SyntaxKind.PercentEqualsToken,
41
+ SyntaxKind.LessThanLessThanEqualsToken,
42
+ SyntaxKind.GreaterThanGreaterThanEqualsToken,
43
+ SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
44
+ SyntaxKind.AmpersandEqualsToken,
45
+ SyntaxKind.BarEqualsToken,
46
+ SyntaxKind.CaretEqualsToken,
47
+ SyntaxKind.AmpersandAmpersandEqualsToken,
48
+ SyntaxKind.BarBarEqualsToken,
49
+ SyntaxKind.QuestionQuestionEqualsToken,
50
+ ]);
32
51
  export class SemanticExtractor {
33
52
  static extract(sourceFile, rootPath) {
34
53
  const edges = [];
@@ -50,6 +69,7 @@ export class SemanticExtractor {
50
69
  SemanticExtractor.extractCalls(sourceFile, rootPath, edges);
51
70
  SemanticExtractor.extractInstantiations(sourceFile, rootPath, edges);
52
71
  SemanticExtractor.extractReads(sourceFile, rootPath, edges);
72
+ SemanticExtractor.extractWrites(sourceFile, rootPath, edges);
53
73
  return { nodes: [], edges };
54
74
  }
55
75
  static extractClass(cls, rootPath, edges) {
@@ -66,11 +86,45 @@ export class SemanticExtractor {
66
86
  }
67
87
  for (const method of cls.getMethods()) {
68
88
  SemanticExtractor.extractSignature(method, rootPath, edges);
89
+ SemanticExtractor.extractOverrides(cls, method, rootPath, edges);
69
90
  }
70
91
  for (const property of cls.getProperties()) {
71
92
  SemanticExtractor.addTypeEdges(NodeId.forDeclaration(property, rootPath), property.getTypeNode(), 'USES_TYPE', rootPath, edges);
72
93
  }
73
94
  }
95
+ /**
96
+ * Emit an `OVERRIDES` edge from a class method to the member it overrides:
97
+ * the nearest base-class method of the same name, and any implemented
98
+ * interface method of the same name. The target id is computed with
99
+ * {@link NodeId.forDeclaration} on the resolved declaration, so it matches
100
+ * the node the structural extractor already emitted for that member.
101
+ */
102
+ static extractOverrides(cls, method, rootPath, edges) {
103
+ const name = method.getName();
104
+ const fromId = NodeId.forDeclaration(method, rootPath);
105
+ let base = cls.getBaseClass();
106
+ while (base !== undefined) {
107
+ const overridden = base.getMethod(name);
108
+ if (overridden !== undefined) {
109
+ if (SemanticExtractor.inProject(overridden) === true) {
110
+ edges.push(SemanticExtractor.edge('OVERRIDES', fromId, NodeId.forDeclaration(overridden, rootPath)));
111
+ }
112
+ break;
113
+ }
114
+ base = base.getBaseClass();
115
+ }
116
+ for (const impl of cls.getImplements()) {
117
+ const decl = SemanticExtractor.resolve(impl.getExpression());
118
+ const iface = decl?.asKind(SyntaxKind.InterfaceDeclaration);
119
+ if (iface === undefined || SemanticExtractor.inProject(iface) === false) {
120
+ continue;
121
+ }
122
+ const signature = iface.getMethod(name);
123
+ if (signature !== undefined) {
124
+ edges.push(SemanticExtractor.edge('OVERRIDES', fromId, NodeId.forDeclaration(signature, rootPath)));
125
+ }
126
+ }
127
+ }
74
128
  static extractInterface(iface, rootPath, edges) {
75
129
  const ifaceId = NodeId.forDeclaration(iface, rootPath);
76
130
  for (const base of iface.getBaseDeclarations()) {
@@ -153,8 +207,22 @@ export class SemanticExtractor {
153
207
  }
154
208
  }
155
209
  static extractReads(sourceFile, rootPath, edges) {
210
+ SemanticExtractor.extractValueAccess(sourceFile, rootPath, edges, 'READS', (identifier) => SemanticExtractor.isValueRead(identifier));
211
+ }
212
+ static extractWrites(sourceFile, rootPath, edges) {
213
+ SemanticExtractor.extractValueAccess(sourceFile, rootPath, edges, 'WRITES', (identifier) => SemanticExtractor.isValueWrite(identifier));
214
+ }
215
+ /**
216
+ * Emits a value-access edge from the enclosing scope to each in-project,
217
+ * module-level value declaration an identifier touches. `accesses` selects the
218
+ * identifiers (a read or a write) and `kind` is the edge emitted; the rest — the
219
+ * target must be an emitted top-level value declaration, a declaration's own name
220
+ * is skipped, self-edges are dropped — is shared by both. Repeated accesses
221
+ * collapse into one counted edge in {@link GraphBuilder}.
222
+ */
223
+ static extractValueAccess(sourceFile, rootPath, edges, kind, accesses) {
156
224
  for (const identifier of sourceFile.getDescendantsOfKind(SyntaxKind.Identifier)) {
157
- if (SemanticExtractor.isValueRead(identifier) === false) {
225
+ if (accesses(identifier) === false) {
158
226
  continue;
159
227
  }
160
228
  const target = SemanticExtractor.resolve(identifier);
@@ -174,7 +242,7 @@ export class SemanticExtractor {
174
242
  const fromId = NodeId.forDeclaration(scope, rootPath);
175
243
  const toId = NodeId.forDeclaration(target, rootPath);
176
244
  if (fromId !== toId) {
177
- edges.push(SemanticExtractor.edge('READS', fromId, toId));
245
+ edges.push(SemanticExtractor.edge(kind, fromId, toId));
178
246
  }
179
247
  }
180
248
  }
@@ -201,11 +269,37 @@ export class SemanticExtractor {
201
269
  if (Node.isPropertyAssignment(parent)) {
202
270
  return parent.getNameNode() !== identifier;
203
271
  }
272
+ if (Node.isBinaryExpression(parent)) {
273
+ return parent.getLeft() !== identifier
274
+ || parent.getOperatorToken().getKind() !== SyntaxKind.EqualsToken;
275
+ }
204
276
  if (Node.isTypeReference(parent) || Node.isPropertySignature(parent) || Node.isPropertyDeclaration(parent) || Node.isBindingElement(parent)) {
205
277
  return false;
206
278
  }
207
279
  return true;
208
280
  }
281
+ /**
282
+ * Whether an identifier is written: the left-hand side of an assignment
283
+ * (`x = …`, `x += …`) or the operand of a `++`/`--`. A compound assignment and an
284
+ * increment also read the old value, so {@link isValueRead} reports those
285
+ * identifiers too; a plain `x = …` is a write only.
286
+ */
287
+ static isValueWrite(identifier) {
288
+ const parent = identifier.getParent();
289
+ if (parent === undefined) {
290
+ return false;
291
+ }
292
+ if (Node.isBinaryExpression(parent)) {
293
+ return parent.getLeft() === identifier
294
+ && ASSIGNMENT_OPERATORS.has(parent.getOperatorToken().getKind());
295
+ }
296
+ if (Node.isPrefixUnaryExpression(parent) || Node.isPostfixUnaryExpression(parent)) {
297
+ const operator = parent.getOperatorToken();
298
+ return parent.getOperand() === identifier
299
+ && (operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken);
300
+ }
301
+ return false;
302
+ }
209
303
  static isDeclarationName(identifier, declaration) {
210
304
  const named = declaration;
211
305
  return typeof named.getNameNode === 'function' && named.getNameNode() === identifier;
@@ -251,4 +345,4 @@ export class SemanticExtractor {
251
345
  return { id: `${kind}:${from}->${to}`, kind, from, to };
252
346
  }
253
347
  }
254
- //# sourceMappingURL=semantic-extractor.js.map
348
+ //# sourceMappingURL=semantic_extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic_extractor.js","sourceRoot":"","sources":["../../src/extract/semantic_extractor.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,15 @@ export declare class StructuralExtractor {
10
10
  private static extractImports;
11
11
  private static extractClass;
12
12
  private static extractInterface;
13
+ /**
14
+ * Pushes a declaration node, its `CONTAINS` edge from `parentId`, and — when the
15
+ * declaration is exported — an `EXPORTS` edge from `moduleId`. Only top-level
16
+ * declarations are ever exported, so `EXPORTS` always originates at the module;
17
+ * nested members (methods, properties) carry `exported === false` and get none.
18
+ */
13
19
  private static push;
14
20
  private static isInternal;
15
21
  private static isExported;
16
22
  private static edge;
17
23
  }
18
- //# sourceMappingURL=structural-extractor.d.ts.map
24
+ //# sourceMappingURL=structural_extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"structural-extractor.d.ts","sourceRoot":"","sources":["../../src/extract/structural-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,UAAU,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAY,MAAM,mBAAmB,CAAC;AAGxD,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAgCpE,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B,OAAO,CAAC,MAAM,CAAC,IAAI;IA0BnB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,IAAI;CAYnB"}
1
+ {"version":3,"file":"structural_extractor.d.ts","sourceRoot":"","sources":["../../src/extract/structural_extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,UAAU,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAY,MAAM,mBAAmB,CAAC;AAGxD,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAgCpE,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,IAAI;IA+BnB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,IAAI;CAYnB"}
@@ -1,5 +1,5 @@
1
1
  import { relative } from 'node:path';
2
- import { NodeId } from './node-id.js';
2
+ import { NodeId } from './node_id.js';
3
3
  export class StructuralExtractor {
4
4
  static extract(sourceFile, rootPath) {
5
5
  const nodes = [];
@@ -15,16 +15,16 @@ export class StructuralExtractor {
15
15
  StructuralExtractor.extractInterface(iface, moduleId, rootPath, nodes, edges);
16
16
  }
17
17
  for (const alias of sourceFile.getTypeAliases()) {
18
- StructuralExtractor.push(alias, 'TypeAlias', moduleId, rootPath, nodes, edges);
18
+ StructuralExtractor.push(alias, 'TypeAlias', moduleId, moduleId, rootPath, nodes, edges);
19
19
  }
20
20
  for (const en of sourceFile.getEnums()) {
21
- StructuralExtractor.push(en, 'Enum', moduleId, rootPath, nodes, edges);
21
+ StructuralExtractor.push(en, 'Enum', moduleId, moduleId, rootPath, nodes, edges);
22
22
  }
23
23
  for (const fn of sourceFile.getFunctions()) {
24
- StructuralExtractor.push(fn, 'Function', moduleId, rootPath, nodes, edges);
24
+ StructuralExtractor.push(fn, 'Function', moduleId, moduleId, rootPath, nodes, edges);
25
25
  }
26
26
  for (const variable of sourceFile.getVariableDeclarations()) {
27
- StructuralExtractor.push(variable, 'Variable', moduleId, rootPath, nodes, edges);
27
+ StructuralExtractor.push(variable, 'Variable', moduleId, moduleId, rootPath, nodes, edges);
28
28
  }
29
29
  return { nodes, edges };
30
30
  }
@@ -43,25 +43,32 @@ export class StructuralExtractor {
43
43
  }
44
44
  }
45
45
  static extractClass(cls, moduleId, rootPath, nodes, edges) {
46
- const classId = StructuralExtractor.push(cls, 'Class', moduleId, rootPath, nodes, edges);
46
+ const classId = StructuralExtractor.push(cls, 'Class', moduleId, moduleId, rootPath, nodes, edges);
47
47
  for (const method of cls.getMethods()) {
48
- StructuralExtractor.push(method, 'Method', classId, rootPath, nodes, edges);
48
+ StructuralExtractor.push(method, 'Method', classId, moduleId, rootPath, nodes, edges);
49
49
  }
50
50
  for (const property of cls.getProperties()) {
51
- StructuralExtractor.push(property, 'Property', classId, rootPath, nodes, edges);
51
+ StructuralExtractor.push(property, 'Property', classId, moduleId, rootPath, nodes, edges);
52
52
  }
53
53
  }
54
54
  static extractInterface(iface, moduleId, rootPath, nodes, edges) {
55
- const ifaceId = StructuralExtractor.push(iface, 'Interface', moduleId, rootPath, nodes, edges);
55
+ const ifaceId = StructuralExtractor.push(iface, 'Interface', moduleId, moduleId, rootPath, nodes, edges);
56
56
  for (const method of iface.getMethods()) {
57
- StructuralExtractor.push(method, 'Method', ifaceId, rootPath, nodes, edges);
57
+ StructuralExtractor.push(method, 'Method', ifaceId, moduleId, rootPath, nodes, edges);
58
58
  }
59
59
  for (const property of iface.getProperties()) {
60
- StructuralExtractor.push(property, 'Property', ifaceId, rootPath, nodes, edges);
60
+ StructuralExtractor.push(property, 'Property', ifaceId, moduleId, rootPath, nodes, edges);
61
61
  }
62
62
  }
63
- static push(node, kind, parentId, rootPath, nodes, edges) {
63
+ /**
64
+ * Pushes a declaration node, its `CONTAINS` edge from `parentId`, and — when the
65
+ * declaration is exported — an `EXPORTS` edge from `moduleId`. Only top-level
66
+ * declarations are ever exported, so `EXPORTS` always originates at the module;
67
+ * nested members (methods, properties) carry `exported === false` and get none.
68
+ */
69
+ static push(node, kind, parentId, moduleId, rootPath, nodes, edges) {
64
70
  const id = NodeId.forDeclaration(node, rootPath);
71
+ const exported = StructuralExtractor.isExported(node);
65
72
  nodes.push({
66
73
  id,
67
74
  kind,
@@ -73,9 +80,12 @@ export class StructuralExtractor {
73
80
  endLine: node.getEndLineNumber(),
74
81
  endColumn: 0,
75
82
  },
76
- exported: StructuralExtractor.isExported(node),
83
+ exported,
77
84
  });
78
85
  edges.push(StructuralExtractor.edge('CONTAINS', parentId, id));
86
+ if (exported === true) {
87
+ edges.push(StructuralExtractor.edge('EXPORTS', moduleId, id));
88
+ }
79
89
  return id;
80
90
  }
81
91
  static isInternal(sourceFile) {
@@ -94,4 +104,4 @@ export class StructuralExtractor {
94
104
  return edge;
95
105
  }
96
106
  }
97
- //# sourceMappingURL=structural-extractor.js.map
107
+ //# sourceMappingURL=structural_extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural_extractor.js","sourceRoot":"","sources":["../../src/extract/structural_extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Absolute path to the package root. This module sits at the top of `src`
3
+ * (and of the built `dist`), so a single `..` hop reaches the package root
4
+ * whether running via tsx from `src` or from the compiled `dist` output.
5
+ */
6
+ export declare const PROJECT_ROOT: string;
7
+ //# sourceMappingURL=project_root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_root.d.ts","sourceRoot":"","sources":["../src/project_root.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAyD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ /**
4
+ * Absolute path to the package root. This module sits at the top of `src`
5
+ * (and of the built `dist`), so a single `..` hop reaches the package root
6
+ * whether running via tsx from `src` or from the compiled `dist` output.
7
+ */
8
+ export const PROJECT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
9
+ //# sourceMappingURL=project_root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_root.js","sourceRoot":"","sources":["../src/project_root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC"}
@@ -0,0 +1,262 @@
1
+ import { KuzuStore } from '../store/kuzu_store.js';
2
+ export type SymbolRef = {
3
+ id: string;
4
+ kind: string;
5
+ name: string;
6
+ filePath: string;
7
+ startLine: number;
8
+ metadata: Record<string, unknown>;
9
+ };
10
+ export type NeighborRef = SymbolRef & {
11
+ edgeKind: string;
12
+ edgeMetadata: Record<string, unknown>;
13
+ direction: 'in' | 'out';
14
+ };
15
+ /**
16
+ * The metric a {@link GraphQuery.hotspots} ranking is computed against.
17
+ *
18
+ * - `self-time` / `samples` — measured runtime from `metadata.runtime`, present
19
+ * only after `enrich`.
20
+ * - `callers` — inbound `CALLS` edge count (static fan-in / centrality).
21
+ * - `call-count` — sum of inbound `CALLS` edge `metadata.count` (how often a
22
+ * symbol is actually invoked across all call sites in source).
23
+ * - `blast-radius` — transitive inbound `CALLS` size (change-risk / centrality).
24
+ */
25
+ export type HotspotMetric = 'self-time' | 'samples' | 'callers' | 'call-count' | 'blast-radius';
26
+ /** A ranked node, carrying the score it earned and the metric it was scored by. */
27
+ export type HotspotRef = SymbolRef & {
28
+ score: number;
29
+ metric: HotspotMetric;
30
+ };
31
+ export type HotspotOptions = {
32
+ /** Metric to rank by. Defaults to `self-time` when the graph is enriched, `callers` otherwise. */
33
+ by?: HotspotMetric;
34
+ /** Maximum number of hotspots to return. Defaults to 20, clamped to [1, 1000]. */
35
+ limit?: number;
36
+ /** Restrict ranking to nodes that carry `metadata.runtime`. */
37
+ measuredOnly?: boolean;
38
+ };
39
+ /**
40
+ * The result of a hotspot ranking: the top-N nodes plus the context needed to
41
+ * interpret them — the metric actually used, what was requested, and whether a
42
+ * runtime metric fell back to a static one because the graph is un-enriched.
43
+ */
44
+ export type HotspotReport = {
45
+ /** The metric actually used to rank (differs from `requested` only after a fallback). */
46
+ metric: HotspotMetric;
47
+ /** The metric the caller asked for, or the resolved default when none was given. */
48
+ requested: HotspotMetric;
49
+ /** Whether any node in the graph carries `metadata.runtime`. */
50
+ enriched: boolean;
51
+ /** True when a runtime metric was requested on an un-enriched graph, so `metric` fell back to `callers`. */
52
+ fellBack: boolean;
53
+ /** Whether ranking was restricted to measured nodes. */
54
+ measuredOnly: boolean;
55
+ /** Top-N nodes by `metric`, descending, each carrying its `score`. */
56
+ hotspots: HotspotRef[];
57
+ };
58
+ /**
59
+ * The measured weight {@link GraphQuery.costRanking} and
60
+ * {@link GraphQuery.costAttribution} propagate along `CALLS` edges. Both read
61
+ * `metadata.runtime`, present only after `enrich`:
62
+ * - `self-time` — `metadata.runtime.selfMs`.
63
+ * - `samples` — `metadata.runtime.samples`.
64
+ */
65
+ export type CostMetric = 'self-time' | 'samples';
66
+ /**
67
+ * A node carrying its propagated cost. `selfCost` is the measured *exclusive*
68
+ * cost (time in the node itself); `inclusiveCost` adds the cost attributed from
69
+ * everything it transitively calls; `shareOfTotal` is `inclusiveCost` as a
70
+ * fraction of the graph's total self cost — the "responsible for X% of total"
71
+ * number. `cyclic`/`cycleSize` flag membership in a call cycle, whose members
72
+ * share the cycle's total inclusive cost.
73
+ */
74
+ export type CostRef = SymbolRef & {
75
+ selfCost: number;
76
+ inclusiveCost: number;
77
+ shareOfTotal: number;
78
+ cyclic: boolean;
79
+ cycleSize: number;
80
+ };
81
+ export type CostOptions = {
82
+ /** Metric to propagate. Defaults to `self-time`. */
83
+ by?: CostMetric;
84
+ /** Maximum number of ranked nodes to return. Defaults to 20, clamped to [1, 1000]. */
85
+ limit?: number;
86
+ };
87
+ /**
88
+ * A ranking of nodes by inclusive cost, with the context needed to read it: the
89
+ * metric propagated, whether the graph is enriched at all, and the total self
90
+ * cost that `shareOfTotal` is a fraction of.
91
+ */
92
+ export type CostReport = {
93
+ /** The metric propagated. */
94
+ metric: CostMetric;
95
+ /** Whether any node in the graph carries `metadata.runtime`. */
96
+ enriched: boolean;
97
+ /** Σ self cost over every node — the denominator behind `shareOfTotal`. */
98
+ totalSelf: number;
99
+ /** Count of nodes that carry runtime metrics. */
100
+ measuredNodes: number;
101
+ /**
102
+ * Fraction of the profiled cost (in `metric`) that the join attributed to graph
103
+ * nodes, from the `enrich` manifest — the share of total measured cost this
104
+ * attribution actually accounts for. `null` when the graph carries no manifest
105
+ * (never enriched, or enriched before manifests were recorded).
106
+ */
107
+ coverage: number | null;
108
+ /** Nodes by `inclusiveCost`, descending, top-N, zero-cost nodes omitted. */
109
+ nodes: CostRef[];
110
+ };
111
+ /**
112
+ * One edge of a {@link CostAttribution}: a caller or callee of the focal node,
113
+ * carrying the cost attributed across that edge and its share of the focal
114
+ * node's inclusive cost.
115
+ */
116
+ export type CostFlow = SymbolRef & {
117
+ /** Cost attributed along this edge, in the report's metric. */
118
+ amount: number;
119
+ /** `amount` as a fraction of the focal node's inclusive cost, in [0, 1]. */
120
+ share: number;
121
+ /** The `CALLS` edge's call-site count — the propagation weight. */
122
+ callCount: number;
123
+ };
124
+ /**
125
+ * A per-node causal breakdown. `callees` is where the focal node's inclusive
126
+ * cost goes (the cost each callee's subtree contributes); `callers` is who is
127
+ * responsible for the focal node's cost (how it is attributed upward). `node` is
128
+ * null when the id resolves to no graph node.
129
+ */
130
+ export type CostAttribution = {
131
+ metric: CostMetric;
132
+ enriched: boolean;
133
+ totalSelf: number;
134
+ /** Fraction of profiled cost attributed to graph nodes, or `null` without a manifest (see {@link CostReport.coverage}). */
135
+ coverage: number | null;
136
+ node: CostRef | null;
137
+ callees: CostFlow[];
138
+ callers: CostFlow[];
139
+ };
140
+ export declare class GraphQuery {
141
+ private readonly store;
142
+ constructor(store: KuzuStore);
143
+ whoCalls(id: string): Promise<SymbolRef[]>;
144
+ calls(id: string): Promise<SymbolRef[]>;
145
+ blastRadius(id: string, depth: number): Promise<SymbolRef[]>;
146
+ deadExports(): Promise<SymbolRef[]>;
147
+ references(id: string): Promise<NeighborRef[]>;
148
+ neighborhood(id: string): Promise<NeighborRef[]>;
149
+ /**
150
+ * Resolves a search pattern to nodes, matching either a substring of the node
151
+ * name or an exact (case-insensitive) node kind. The kind match makes the
152
+ * system-level kinds discoverable as a set — `find Endpoint`, `find ConfigFlag`,
153
+ * `find ExternalAPI` — since their names are values (a route path, a host) rather
154
+ * than the kind itself. `Module` nodes are always excluded.
155
+ */
156
+ find(pattern: string): Promise<SymbolRef[]>;
157
+ /**
158
+ * Ranks nodes by optimization leverage, returning the top-N for a chosen
159
+ * metric alongside the context needed to read the result.
160
+ *
161
+ * Runtime metrics (`self-time`, `samples`) read `metadata.runtime`; static
162
+ * metrics (`callers`, `call-count`, `blast-radius`) are derived from the
163
+ * inbound `CALLS` graph. The whole graph is read once (nodes, and the call
164
+ * edges when a static metric is used) and ranked in memory rather than per
165
+ * node, so `blast-radius` does not fan out into one traversal per node.
166
+ *
167
+ * The default metric is `self-time` on an enriched graph and `callers`
168
+ * otherwise. Asking for a runtime metric on an un-enriched graph does not
169
+ * return empty: it falls back to `callers` and flags `fellBack` so the caller
170
+ * can say so. Nodes that score zero on the chosen metric are omitted — a
171
+ * symbol nothing calls is not a fan-in hotspot.
172
+ */
173
+ hotspots(options?: HotspotOptions): Promise<HotspotReport>;
174
+ /**
175
+ * Ranks nodes by **inclusive cost** — self cost plus the cost attributed from
176
+ * everything a node transitively calls — and reports each node's share of the
177
+ * graph's total self cost. This is the causal counterpart to {@link hotspots}'
178
+ * `self-time` ranking: where hotspots asks "where is time spent?", this asks
179
+ * "who is *responsible* for the time spent?".
180
+ *
181
+ * Cost propagates along `CALLS` edges, each callee's inclusive cost partitioned
182
+ * among its callers in proportion to call-site `count`, so cost is conserved (a
183
+ * diamond is not double-counted) and `shareOfTotal` is a true fraction. Call
184
+ * cycles are collapsed and their members share the cycle's total. The whole
185
+ * graph is read once and propagated in memory.
186
+ *
187
+ * Cost is inherently a runtime quantity: on an un-enriched graph there is no
188
+ * self cost to propagate, so `nodes` is empty and `enriched` is false — there is
189
+ * no static fallback (unlike {@link hotspots}).
190
+ */
191
+ costRanking(options?: CostOptions): Promise<CostReport>;
192
+ /**
193
+ * Breaks one node's cost down causally: where its inclusive cost goes
194
+ * (`callees`, each carrying the cost its subtree contributes) and who is
195
+ * responsible for it (`callers`, how the node's cost is attributed upward by
196
+ * call-count share). Both are derived from the same propagation
197
+ * {@link costRanking} uses. Returns `node: null` when the id resolves to no node.
198
+ */
199
+ costAttribution(id: string, options?: CostOptions): Promise<CostAttribution>;
200
+ /**
201
+ * Reads the runtime ingest manifest `enrich` records at the graph level, or
202
+ * null when the graph carries none (never enriched, or enriched before manifests
203
+ * were recorded). A stored value that fails validation is treated as absent.
204
+ */
205
+ private readRuntimeManifest;
206
+ /** Builds a node-id → score map for the chosen metric, reading call edges only when a static metric needs them. */
207
+ private scoreNodes;
208
+ /** Reads every `CALLS` edge with its call-site `count` decoded from edge metadata. */
209
+ private readCallEdges;
210
+ /** Sums a per-edge weight onto each edge's target, yielding inbound fan-in (`weight = 1`) or call-count (`weight = count`). */
211
+ private static sumInbound;
212
+ /** Computes, for every node, the number of distinct nodes that transitively reach it through inbound `CALLS`. */
213
+ private static blastRadiusSizes;
214
+ /** Counts the distinct ancestors of `start` over the reverse-call adjacency, cycle-safe and excluding `start` itself. */
215
+ private static reachableCount;
216
+ /**
217
+ * Propagates self cost into inclusive cost over the whole graph in one pass.
218
+ *
219
+ * Self-edges and edges touching unknown nodes are dropped. Strongly-connected
220
+ * components (call cycles) are collapsed with Tarjan's algorithm, which numbers
221
+ * them in reverse-topological order (a callee's component before its caller's);
222
+ * processing components in that order lets each caller read its callees'
223
+ * already-computed inclusive cost. A callee's inclusive cost is partitioned
224
+ * among its callers by call-site `count` over the inbound weight from *outside*
225
+ * its component, so cost is conserved on the acyclic part and a cycle's members
226
+ * share the cycle's total.
227
+ */
228
+ private static computeCostModel;
229
+ /**
230
+ * Tarjan's strongly-connected components over the index-based successor lists,
231
+ * iterative so a deep call chain cannot overflow the stack. Components are
232
+ * numbered in the order they are finalized, which is reverse-topological: every
233
+ * cross-component edge runs from a higher-numbered component to a lower one.
234
+ */
235
+ private static stronglyConnectedComponents;
236
+ private static toCostRef;
237
+ private static symbolOf;
238
+ /**
239
+ * The fraction of profiled cost (in `metric`) the join attributed to graph
240
+ * nodes, from the manifest: matched ÷ total. Null when there is no manifest or
241
+ * the profile measured nothing in that metric.
242
+ */
243
+ private static coverageFor;
244
+ private static toHotspot;
245
+ private static isRuntimeMetric;
246
+ /** Reads a numeric metric out of `metadata.runtime`, defaulting to 0 when absent or non-numeric. */
247
+ private static runtimeValue;
248
+ private static hasRuntime;
249
+ /** Decodes an edge's call-site `count`, defaulting to 1 (the minimum the builder records). */
250
+ private static callCount;
251
+ private static clampLimit;
252
+ private static toRefs;
253
+ private static toRef;
254
+ private static toNeighbor;
255
+ /**
256
+ * Decodes the JSON `metadata` column back into a record. A missing, empty, or
257
+ * malformed value decodes to an empty object so callers always receive a record.
258
+ */
259
+ private static parseMetadata;
260
+ private static clampDepth;
261
+ }
262
+ //# sourceMappingURL=graph_query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph_query.d.ts","sourceRoot":"","sources":["../../src/query/graph_query.ts"],"names":[],"mappings":"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"}