@optave/codegraph 3.6.0 → 3.8.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 (186) hide show
  1. package/README.md +32 -16
  2. package/dist/ast-analysis/engine.d.ts.map +1 -1
  3. package/dist/ast-analysis/engine.js +158 -1
  4. package/dist/ast-analysis/engine.js.map +1 -1
  5. package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
  6. package/dist/ast-analysis/rules/javascript.js +0 -1
  7. package/dist/ast-analysis/rules/javascript.js.map +1 -1
  8. package/dist/ast-analysis/visitors/ast-store-visitor.d.ts.map +1 -1
  9. package/dist/ast-analysis/visitors/ast-store-visitor.js +2 -75
  10. package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
  11. package/dist/cli/commands/ast.js +2 -2
  12. package/dist/cli/commands/ast.js.map +1 -1
  13. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  14. package/dist/domain/graph/builder/pipeline.js +128 -6
  15. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  16. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  17. package/dist/domain/graph/builder/stages/build-edges.js +101 -1
  18. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  19. package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
  20. package/dist/domain/graph/builder/stages/collect-files.js +17 -5
  21. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  22. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  23. package/dist/domain/graph/builder/stages/detect-changes.js +98 -50
  24. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  25. package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
  26. package/dist/domain/graph/builder/stages/finalize.js +32 -5
  27. package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
  28. package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
  29. package/dist/domain/graph/builder/stages/insert-nodes.js +20 -7
  30. package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
  31. package/dist/domain/parser.d.ts +1 -1
  32. package/dist/domain/parser.d.ts.map +1 -1
  33. package/dist/domain/parser.js +129 -3
  34. package/dist/domain/parser.js.map +1 -1
  35. package/dist/extractors/clojure.d.ts +12 -0
  36. package/dist/extractors/clojure.d.ts.map +1 -0
  37. package/dist/extractors/clojure.js +245 -0
  38. package/dist/extractors/clojure.js.map +1 -0
  39. package/dist/extractors/cuda.d.ts +11 -0
  40. package/dist/extractors/cuda.d.ts.map +1 -0
  41. package/dist/extractors/cuda.js +302 -0
  42. package/dist/extractors/cuda.js.map +1 -0
  43. package/dist/extractors/dart.d.ts +6 -0
  44. package/dist/extractors/dart.d.ts.map +1 -0
  45. package/dist/extractors/dart.js +277 -0
  46. package/dist/extractors/dart.js.map +1 -0
  47. package/dist/extractors/elixir.d.ts +9 -0
  48. package/dist/extractors/elixir.d.ts.map +1 -0
  49. package/dist/extractors/elixir.js +223 -0
  50. package/dist/extractors/elixir.js.map +1 -0
  51. package/dist/extractors/erlang.d.ts +14 -0
  52. package/dist/extractors/erlang.d.ts.map +1 -0
  53. package/dist/extractors/erlang.js +239 -0
  54. package/dist/extractors/erlang.js.map +1 -0
  55. package/dist/extractors/fsharp.d.ts +13 -0
  56. package/dist/extractors/fsharp.d.ts.map +1 -0
  57. package/dist/extractors/fsharp.js +218 -0
  58. package/dist/extractors/fsharp.js.map +1 -0
  59. package/dist/extractors/gleam.d.ts +14 -0
  60. package/dist/extractors/gleam.d.ts.map +1 -0
  61. package/dist/extractors/gleam.js +229 -0
  62. package/dist/extractors/gleam.js.map +1 -0
  63. package/dist/extractors/groovy.d.ts +10 -0
  64. package/dist/extractors/groovy.d.ts.map +1 -0
  65. package/dist/extractors/groovy.js +304 -0
  66. package/dist/extractors/groovy.js.map +1 -0
  67. package/dist/extractors/haskell.d.ts +8 -0
  68. package/dist/extractors/haskell.d.ts.map +1 -0
  69. package/dist/extractors/haskell.js +217 -0
  70. package/dist/extractors/haskell.js.map +1 -0
  71. package/dist/extractors/index.d.ts +17 -0
  72. package/dist/extractors/index.d.ts.map +1 -1
  73. package/dist/extractors/index.js +17 -0
  74. package/dist/extractors/index.js.map +1 -1
  75. package/dist/extractors/julia.d.ts +16 -0
  76. package/dist/extractors/julia.d.ts.map +1 -0
  77. package/dist/extractors/julia.js +287 -0
  78. package/dist/extractors/julia.js.map +1 -0
  79. package/dist/extractors/lua.d.ts +6 -0
  80. package/dist/extractors/lua.d.ts.map +1 -0
  81. package/dist/extractors/lua.js +162 -0
  82. package/dist/extractors/lua.js.map +1 -0
  83. package/dist/extractors/objc.d.ts +9 -0
  84. package/dist/extractors/objc.d.ts.map +1 -0
  85. package/dist/extractors/objc.js +406 -0
  86. package/dist/extractors/objc.js.map +1 -0
  87. package/dist/extractors/ocaml.d.ts +6 -0
  88. package/dist/extractors/ocaml.d.ts.map +1 -0
  89. package/dist/extractors/ocaml.js +310 -0
  90. package/dist/extractors/ocaml.js.map +1 -0
  91. package/dist/extractors/r.d.ts +13 -0
  92. package/dist/extractors/r.d.ts.map +1 -0
  93. package/dist/extractors/r.js +251 -0
  94. package/dist/extractors/r.js.map +1 -0
  95. package/dist/extractors/solidity.d.ts +9 -0
  96. package/dist/extractors/solidity.d.ts.map +1 -0
  97. package/dist/extractors/solidity.js +374 -0
  98. package/dist/extractors/solidity.js.map +1 -0
  99. package/dist/extractors/verilog.d.ts +9 -0
  100. package/dist/extractors/verilog.d.ts.map +1 -0
  101. package/dist/extractors/verilog.js +286 -0
  102. package/dist/extractors/verilog.js.map +1 -0
  103. package/dist/extractors/zig.d.ts +9 -0
  104. package/dist/extractors/zig.d.ts.map +1 -0
  105. package/dist/extractors/zig.js +276 -0
  106. package/dist/extractors/zig.js.map +1 -0
  107. package/dist/features/ast.d.ts.map +1 -1
  108. package/dist/features/ast.js +1 -2
  109. package/dist/features/ast.js.map +1 -1
  110. package/dist/features/cfg.d.ts +1 -1
  111. package/dist/features/cfg.d.ts.map +1 -1
  112. package/dist/features/cfg.js +6 -51
  113. package/dist/features/cfg.js.map +1 -1
  114. package/dist/graph/algorithms/bfs.d.ts +2 -0
  115. package/dist/graph/algorithms/bfs.d.ts.map +1 -1
  116. package/dist/graph/algorithms/bfs.js +27 -0
  117. package/dist/graph/algorithms/bfs.js.map +1 -1
  118. package/dist/graph/algorithms/centrality.d.ts +2 -0
  119. package/dist/graph/algorithms/centrality.d.ts.map +1 -1
  120. package/dist/graph/algorithms/centrality.js +28 -0
  121. package/dist/graph/algorithms/centrality.js.map +1 -1
  122. package/dist/graph/algorithms/louvain.d.ts +3 -4
  123. package/dist/graph/algorithms/louvain.d.ts.map +1 -1
  124. package/dist/graph/algorithms/louvain.js +29 -0
  125. package/dist/graph/algorithms/louvain.js.map +1 -1
  126. package/dist/graph/algorithms/shortest-path.d.ts +2 -0
  127. package/dist/graph/algorithms/shortest-path.d.ts.map +1 -1
  128. package/dist/graph/algorithms/shortest-path.js +18 -1
  129. package/dist/graph/algorithms/shortest-path.js.map +1 -1
  130. package/dist/types.d.ts +122 -2
  131. package/dist/types.d.ts.map +1 -1
  132. package/grammars/tree-sitter-clojure.wasm +0 -0
  133. package/grammars/tree-sitter-cuda.wasm +0 -0
  134. package/grammars/tree-sitter-dart.wasm +0 -0
  135. package/grammars/tree-sitter-elixir.wasm +0 -0
  136. package/grammars/tree-sitter-erlang.wasm +0 -0
  137. package/grammars/tree-sitter-fsharp.wasm +0 -0
  138. package/grammars/tree-sitter-gleam.wasm +0 -0
  139. package/grammars/tree-sitter-groovy.wasm +0 -0
  140. package/grammars/tree-sitter-haskell.wasm +0 -0
  141. package/grammars/tree-sitter-julia.wasm +0 -0
  142. package/grammars/tree-sitter-lua.wasm +0 -0
  143. package/grammars/tree-sitter-objc.wasm +0 -0
  144. package/grammars/tree-sitter-ocaml.wasm +0 -0
  145. package/grammars/tree-sitter-ocaml_interface.wasm +0 -0
  146. package/grammars/tree-sitter-r.wasm +0 -0
  147. package/grammars/tree-sitter-solidity.wasm +0 -0
  148. package/grammars/tree-sitter-verilog.wasm +0 -0
  149. package/grammars/tree-sitter-zig.wasm +0 -0
  150. package/package.json +24 -7
  151. package/src/ast-analysis/engine.ts +183 -1
  152. package/src/ast-analysis/rules/javascript.ts +0 -1
  153. package/src/ast-analysis/visitors/ast-store-visitor.ts +2 -75
  154. package/src/cli/commands/ast.ts +2 -2
  155. package/src/domain/graph/builder/pipeline.ts +142 -6
  156. package/src/domain/graph/builder/stages/build-edges.ts +158 -1
  157. package/src/domain/graph/builder/stages/collect-files.ts +18 -7
  158. package/src/domain/graph/builder/stages/detect-changes.ts +109 -55
  159. package/src/domain/graph/builder/stages/finalize.ts +39 -9
  160. package/src/domain/graph/builder/stages/insert-nodes.ts +18 -7
  161. package/src/domain/parser.ts +161 -1
  162. package/src/extractors/clojure.ts +273 -0
  163. package/src/extractors/cuda.ts +316 -0
  164. package/src/extractors/dart.ts +304 -0
  165. package/src/extractors/elixir.ts +251 -0
  166. package/src/extractors/erlang.ts +252 -0
  167. package/src/extractors/fsharp.ts +253 -0
  168. package/src/extractors/gleam.ts +246 -0
  169. package/src/extractors/groovy.ts +332 -0
  170. package/src/extractors/haskell.ts +235 -0
  171. package/src/extractors/index.ts +17 -0
  172. package/src/extractors/julia.ts +318 -0
  173. package/src/extractors/lua.ts +169 -0
  174. package/src/extractors/objc.ts +431 -0
  175. package/src/extractors/ocaml.ts +337 -0
  176. package/src/extractors/r.ts +253 -0
  177. package/src/extractors/solidity.ts +398 -0
  178. package/src/extractors/verilog.ts +315 -0
  179. package/src/extractors/zig.ts +294 -0
  180. package/src/features/ast.ts +1 -2
  181. package/src/features/cfg.ts +6 -51
  182. package/src/graph/algorithms/bfs.ts +34 -0
  183. package/src/graph/algorithms/centrality.ts +30 -0
  184. package/src/graph/algorithms/louvain.ts +31 -4
  185. package/src/graph/algorithms/shortest-path.ts +20 -1
  186. package/src/types.ts +123 -2
package/src/types.ts CHANGED
@@ -61,7 +61,7 @@ export type EdgeKind = CoreEdgeKind | StructuralEdgeKind;
61
61
  export type AnyEdgeKind = EdgeKind | DataflowEdgeKind;
62
62
 
63
63
  /** AST node kinds extracted during analysis. */
64
- export type ASTNodeKind = 'call' | 'new' | 'string' | 'regex' | 'throw' | 'await';
64
+ export type ASTNodeKind = 'new' | 'string' | 'regex' | 'throw' | 'await';
65
65
 
66
66
  /** Coarse role classifications for symbols based on connectivity. */
67
67
  export type CoreRole = 'entry' | 'core' | 'utility' | 'adapter' | 'dead' | 'test-only' | 'leaf';
@@ -90,7 +90,25 @@ export type LanguageId =
90
90
  | 'kotlin'
91
91
  | 'swift'
92
92
  | 'scala'
93
- | 'bash';
93
+ | 'bash'
94
+ | 'elixir'
95
+ | 'lua'
96
+ | 'dart'
97
+ | 'zig'
98
+ | 'haskell'
99
+ | 'ocaml'
100
+ | 'ocaml-interface'
101
+ | 'fsharp'
102
+ | 'gleam'
103
+ | 'clojure'
104
+ | 'julia'
105
+ | 'r'
106
+ | 'erlang'
107
+ | 'solidity'
108
+ | 'objc'
109
+ | 'cuda'
110
+ | 'groovy'
111
+ | 'verilog';
94
112
 
95
113
  /** Engine mode selector. */
96
114
  export type EngineMode = 'native' | 'wasm' | 'auto';
@@ -377,6 +395,7 @@ export interface SubDeclaration {
377
395
  line: number;
378
396
  endLine?: number;
379
397
  visibility?: 'public' | 'private' | 'protected';
398
+ decorators?: string[];
380
399
  }
381
400
 
382
401
  /** Complexity metrics attached to a definition post-analysis. */
@@ -1822,8 +1841,42 @@ export interface NativeAddon {
1822
1841
  ): Array<{ fromFile: string; importSource: string; resolvedPath: string }>;
1823
1842
  computeConfidence(callerFile: string, targetFile: string, importedFrom: string | null): number;
1824
1843
  detectCycles(edges: Array<{ source: string; target: string }>): string[][];
1844
+ bfsTraversal(
1845
+ edges: Array<{ source: string; target: string }>,
1846
+ startIds: string[],
1847
+ maxDepth?: number | null,
1848
+ direction?: string | null,
1849
+ ): Array<{ node: string; depth: number }>;
1850
+ shortestPath(
1851
+ edges: Array<{ source: string; target: string }>,
1852
+ fromId: string,
1853
+ toId: string,
1854
+ ): string[];
1855
+ fanInOut(
1856
+ edges: Array<{ source: string; target: string }>,
1857
+ ): Array<{ node: string; fanIn: number; fanOut: number }>;
1858
+ louvainCommunities(
1859
+ edges: Array<{ source: string; target: string }>,
1860
+ nodeIds: string[],
1861
+ resolution?: number | null,
1862
+ randomSeed?: number | null,
1863
+ ): {
1864
+ assignments: Array<{ node: string; community: number }>;
1865
+ modularity: number;
1866
+ };
1825
1867
  buildCallEdges(files: unknown[], nodes: unknown[], builtinReceivers: string[]): unknown[];
1868
+ buildImportEdges?(
1869
+ files: unknown[],
1870
+ resolvedImports: unknown[],
1871
+ fileReexports: unknown[],
1872
+ fileNodeIds: unknown[],
1873
+ barrelFiles: string[],
1874
+ rootDir: string,
1875
+ ): unknown[];
1826
1876
  engineVersion(): string;
1877
+ analyzeComplexity(source: string, filePath: string): NativeFunctionComplexityResult[];
1878
+ buildCfgAnalysis(source: string, filePath: string): NativeFunctionCfgResult[];
1879
+ extractDataflowAnalysis(source: string, filePath: string): DataflowResult | null;
1827
1880
  ParseTreeCache: new () => NativeParseTreeCache;
1828
1881
  NativeDatabase: {
1829
1882
  openReadWrite(dbPath: string): NativeDatabase;
@@ -1831,6 +1884,40 @@ export interface NativeAddon {
1831
1884
  };
1832
1885
  }
1833
1886
 
1887
+ /** Per-function complexity result from native standalone analysis (napi output shape). */
1888
+ export interface NativeFunctionComplexityResult {
1889
+ name: string;
1890
+ line: number;
1891
+ endLine: number | null;
1892
+ complexity: {
1893
+ cognitive: number;
1894
+ cyclomatic: number;
1895
+ maxNesting: number;
1896
+ halstead?: {
1897
+ n1: number;
1898
+ n2: number;
1899
+ bigN1: number;
1900
+ bigN2: number;
1901
+ vocabulary: number;
1902
+ length: number;
1903
+ volume: number;
1904
+ difficulty: number;
1905
+ effort: number;
1906
+ bugs: number;
1907
+ };
1908
+ loc?: { loc: number; sloc: number; commentLines: number };
1909
+ maintainabilityIndex?: number | null;
1910
+ };
1911
+ }
1912
+
1913
+ /** Per-function CFG result from native standalone analysis. */
1914
+ export interface NativeFunctionCfgResult {
1915
+ name: string;
1916
+ line: number;
1917
+ endLine: number | null;
1918
+ cfg: { blocks: CfgBlock[]; edges: CfgEdge[] };
1919
+ }
1920
+
1834
1921
  /** Native parse-tree cache instance. */
1835
1922
  export interface NativeParseTreeCache {
1836
1923
  get(filePath: string): unknown;
@@ -2260,6 +2347,32 @@ export interface NativeDatabase {
2260
2347
  fanOut: number;
2261
2348
  }>;
2262
2349
 
2350
+ // ── Batched build-glue queries (6.18) ────────────────────────────────
2351
+ /** All file_hashes rows + table existence + max mtime in one call. */
2352
+ getFileHashData?(): {
2353
+ exists: boolean;
2354
+ rows: Array<{ file: string; hash: string; mtime: number; size: number }>;
2355
+ maxMtime: number;
2356
+ };
2357
+ /** CFG and dataflow table counts (-1 = table missing). */
2358
+ checkPendingAnalysis?(): { cfgCount: number; dataflowCount: number };
2359
+ /** Batch upsert file_hashes for metadata healing. */
2360
+ healFileMetadata?(
2361
+ entries: Array<{ file: string; hash: string; mtime: number; size: number }>,
2362
+ ): number;
2363
+ /** Find files with edges pointing to changed files. */
2364
+ findReverseDependencies?(changedFiles: string[]): string[];
2365
+ /** Node + edge counts in one call. */
2366
+ getFinalizeCounts?(): { nodeCount: number; edgeCount: number };
2367
+ /** Orphaned embeddings, stale embeddings, unused exports in one call. */
2368
+ runAdvisoryChecks?(hasEmbeddings: boolean): {
2369
+ orphanedEmbeddings: number;
2370
+ embedBuiltAt: string | null;
2371
+ unusedExports: number;
2372
+ };
2373
+ /** File_hashes count + all file paths in one call. */
2374
+ getCollectFilesData?(): { count: number; files: string[] };
2375
+
2263
2376
  // ── Generic query execution & version validation (6.16) ─────────────
2264
2377
  /** Execute a parameterized SELECT and return all rows as objects. */
2265
2378
  queryAll(sql: string, params: Array<string | number | null>): Record<string, unknown>[];
@@ -2267,6 +2380,14 @@ export interface NativeDatabase {
2267
2380
  queryGet(sql: string, params: Array<string | number | null>): Record<string, unknown> | null;
2268
2381
  /** Validate DB codegraph_version matches expected. Warns on mismatch. */
2269
2382
  validateSchemaVersion(expectedVersion: string): boolean;
2383
+
2384
+ // ── Full Rust build orchestration (#695) ─────────────────────────────
2385
+ /**
2386
+ * Run the entire build pipeline in Rust with zero napi boundary crossings.
2387
+ * Returns a JSON string with timing and build result data.
2388
+ * When unavailable, the JS pipeline (runPipelineStages) is used as fallback.
2389
+ */
2390
+ buildGraph?(rootDir: string, configJson: string, aliasesJson: string, optsJson: string): string;
2270
2391
  }
2271
2392
 
2272
2393
  // ════════════════════════════════════════════════════════════════════════