@optave/codegraph 3.5.0 → 3.6.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 (310) hide show
  1. package/README.md +35 -14
  2. package/dist/ast-analysis/engine.d.ts.map +1 -1
  3. package/dist/ast-analysis/engine.js +119 -127
  4. package/dist/ast-analysis/engine.js.map +1 -1
  5. package/dist/ast-analysis/visitors/ast-store-visitor.d.ts.map +1 -1
  6. package/dist/ast-analysis/visitors/ast-store-visitor.js +14 -1
  7. package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
  8. package/dist/ast-analysis/visitors/complexity-visitor.d.ts.map +1 -1
  9. package/dist/ast-analysis/visitors/complexity-visitor.js +11 -13
  10. package/dist/ast-analysis/visitors/complexity-visitor.js.map +1 -1
  11. package/dist/db/connection.d.ts +12 -2
  12. package/dist/db/connection.d.ts.map +1 -1
  13. package/dist/db/connection.js +81 -53
  14. package/dist/db/connection.js.map +1 -1
  15. package/dist/db/index.d.ts +1 -1
  16. package/dist/db/index.d.ts.map +1 -1
  17. package/dist/db/index.js +1 -1
  18. package/dist/db/index.js.map +1 -1
  19. package/dist/db/migrations.d.ts.map +1 -1
  20. package/dist/db/migrations.js +38 -32
  21. package/dist/db/migrations.js.map +1 -1
  22. package/dist/domain/analysis/context.d.ts.map +1 -1
  23. package/dist/domain/analysis/context.js +51 -66
  24. package/dist/domain/analysis/context.js.map +1 -1
  25. package/dist/domain/analysis/dependencies.d.ts.map +1 -1
  26. package/dist/domain/analysis/dependencies.js +62 -70
  27. package/dist/domain/analysis/dependencies.js.map +1 -1
  28. package/dist/domain/analysis/diff-impact.d.ts +9 -7
  29. package/dist/domain/analysis/diff-impact.d.ts.map +1 -1
  30. package/dist/domain/analysis/exports.d.ts.map +1 -1
  31. package/dist/domain/analysis/exports.js +29 -33
  32. package/dist/domain/analysis/exports.js.map +1 -1
  33. package/dist/domain/analysis/fn-impact.d.ts +15 -17
  34. package/dist/domain/analysis/fn-impact.d.ts.map +1 -1
  35. package/dist/domain/analysis/fn-impact.js +35 -65
  36. package/dist/domain/analysis/fn-impact.js.map +1 -1
  37. package/dist/domain/analysis/module-map.d.ts.map +1 -1
  38. package/dist/domain/analysis/module-map.js +91 -6
  39. package/dist/domain/analysis/module-map.js.map +1 -1
  40. package/dist/domain/analysis/query-helpers.d.ts +20 -0
  41. package/dist/domain/analysis/query-helpers.d.ts.map +1 -0
  42. package/dist/domain/analysis/query-helpers.js +27 -0
  43. package/dist/domain/analysis/query-helpers.js.map +1 -0
  44. package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
  45. package/dist/domain/graph/builder/helpers.js +15 -9
  46. package/dist/domain/graph/builder/helpers.js.map +1 -1
  47. package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
  48. package/dist/domain/graph/builder/incremental.js +3 -2
  49. package/dist/domain/graph/builder/incremental.js.map +1 -1
  50. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  51. package/dist/domain/graph/builder/pipeline.js +69 -3
  52. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  53. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  54. package/dist/domain/graph/builder/stages/build-edges.js +7 -51
  55. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  56. package/dist/domain/graph/builder/stages/build-structure.d.ts.map +1 -1
  57. package/dist/domain/graph/builder/stages/build-structure.js +7 -5
  58. package/dist/domain/graph/builder/stages/build-structure.js.map +1 -1
  59. package/dist/domain/graph/builder/stages/collect-files.js +2 -2
  60. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  61. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  62. package/dist/domain/graph/builder/stages/detect-changes.js +2 -2
  63. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  64. package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
  65. package/dist/domain/graph/builder/stages/finalize.js +124 -105
  66. package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
  67. package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
  68. package/dist/domain/graph/builder/stages/insert-nodes.js +28 -15
  69. package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
  70. package/dist/domain/graph/builder/stages/resolve-imports.d.ts.map +1 -1
  71. package/dist/domain/graph/builder/stages/resolve-imports.js +3 -2
  72. package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
  73. package/dist/domain/graph/resolve.d.ts +0 -4
  74. package/dist/domain/graph/resolve.d.ts.map +1 -1
  75. package/dist/domain/graph/resolve.js +32 -48
  76. package/dist/domain/graph/resolve.js.map +1 -1
  77. package/dist/domain/graph/watcher.d.ts.map +1 -1
  78. package/dist/domain/graph/watcher.js +12 -12
  79. package/dist/domain/graph/watcher.js.map +1 -1
  80. package/dist/domain/parser.d.ts +1 -1
  81. package/dist/domain/parser.d.ts.map +1 -1
  82. package/dist/domain/parser.js +164 -101
  83. package/dist/domain/parser.js.map +1 -1
  84. package/dist/domain/search/search/cli-formatter.d.ts.map +1 -1
  85. package/dist/domain/search/search/cli-formatter.js +88 -83
  86. package/dist/domain/search/search/cli-formatter.js.map +1 -1
  87. package/dist/extractors/bash.d.ts +6 -0
  88. package/dist/extractors/bash.d.ts.map +1 -0
  89. package/dist/extractors/bash.js +91 -0
  90. package/dist/extractors/bash.js.map +1 -0
  91. package/dist/extractors/c.d.ts +6 -0
  92. package/dist/extractors/c.d.ts.map +1 -0
  93. package/dist/extractors/c.js +204 -0
  94. package/dist/extractors/c.js.map +1 -0
  95. package/dist/extractors/cpp.d.ts +6 -0
  96. package/dist/extractors/cpp.d.ts.map +1 -0
  97. package/dist/extractors/cpp.js +283 -0
  98. package/dist/extractors/cpp.js.map +1 -0
  99. package/dist/extractors/csharp.d.ts.map +1 -1
  100. package/dist/extractors/csharp.js +42 -54
  101. package/dist/extractors/csharp.js.map +1 -1
  102. package/dist/extractors/go.d.ts.map +1 -1
  103. package/dist/extractors/go.js +126 -130
  104. package/dist/extractors/go.js.map +1 -1
  105. package/dist/extractors/hcl.js +6 -6
  106. package/dist/extractors/hcl.js.map +1 -1
  107. package/dist/extractors/helpers.d.ts +32 -1
  108. package/dist/extractors/helpers.d.ts.map +1 -1
  109. package/dist/extractors/helpers.js +74 -0
  110. package/dist/extractors/helpers.js.map +1 -1
  111. package/dist/extractors/index.d.ts +6 -0
  112. package/dist/extractors/index.d.ts.map +1 -1
  113. package/dist/extractors/index.js +6 -0
  114. package/dist/extractors/index.js.map +1 -1
  115. package/dist/extractors/java.d.ts.map +1 -1
  116. package/dist/extractors/java.js +32 -47
  117. package/dist/extractors/java.js.map +1 -1
  118. package/dist/extractors/javascript.d.ts.map +1 -1
  119. package/dist/extractors/javascript.js +306 -292
  120. package/dist/extractors/javascript.js.map +1 -1
  121. package/dist/extractors/kotlin.d.ts +6 -0
  122. package/dist/extractors/kotlin.d.ts.map +1 -0
  123. package/dist/extractors/kotlin.js +275 -0
  124. package/dist/extractors/kotlin.js.map +1 -0
  125. package/dist/extractors/php.d.ts.map +1 -1
  126. package/dist/extractors/php.js +39 -44
  127. package/dist/extractors/php.js.map +1 -1
  128. package/dist/extractors/python.d.ts.map +1 -1
  129. package/dist/extractors/python.js +75 -93
  130. package/dist/extractors/python.js.map +1 -1
  131. package/dist/extractors/ruby.js +6 -13
  132. package/dist/extractors/ruby.js.map +1 -1
  133. package/dist/extractors/rust.d.ts.map +1 -1
  134. package/dist/extractors/rust.js +58 -83
  135. package/dist/extractors/rust.js.map +1 -1
  136. package/dist/extractors/scala.d.ts +6 -0
  137. package/dist/extractors/scala.d.ts.map +1 -0
  138. package/dist/extractors/scala.js +269 -0
  139. package/dist/extractors/scala.js.map +1 -0
  140. package/dist/extractors/swift.d.ts +6 -0
  141. package/dist/extractors/swift.d.ts.map +1 -0
  142. package/dist/extractors/swift.js +275 -0
  143. package/dist/extractors/swift.js.map +1 -0
  144. package/dist/features/ast.d.ts +2 -0
  145. package/dist/features/ast.d.ts.map +1 -1
  146. package/dist/features/ast.js +9 -24
  147. package/dist/features/ast.js.map +1 -1
  148. package/dist/features/audit.d.ts.map +1 -1
  149. package/dist/features/audit.js +17 -21
  150. package/dist/features/audit.js.map +1 -1
  151. package/dist/features/branch-compare.d.ts.map +1 -1
  152. package/dist/features/branch-compare.js +47 -3
  153. package/dist/features/branch-compare.js.map +1 -1
  154. package/dist/features/cfg.d.ts +7 -1
  155. package/dist/features/cfg.d.ts.map +1 -1
  156. package/dist/features/cfg.js +118 -62
  157. package/dist/features/cfg.js.map +1 -1
  158. package/dist/features/check.d.ts.map +1 -1
  159. package/dist/features/check.js +79 -62
  160. package/dist/features/check.js.map +1 -1
  161. package/dist/features/complexity-query.d.ts.map +1 -1
  162. package/dist/features/complexity-query.js +142 -137
  163. package/dist/features/complexity-query.js.map +1 -1
  164. package/dist/features/complexity.d.ts +7 -1
  165. package/dist/features/complexity.d.ts.map +1 -1
  166. package/dist/features/complexity.js +62 -1
  167. package/dist/features/complexity.js.map +1 -1
  168. package/dist/features/dataflow.d.ts +7 -1
  169. package/dist/features/dataflow.d.ts.map +1 -1
  170. package/dist/features/dataflow.js +356 -188
  171. package/dist/features/dataflow.js.map +1 -1
  172. package/dist/features/graph-enrichment.d.ts.map +1 -1
  173. package/dist/features/graph-enrichment.js +117 -104
  174. package/dist/features/graph-enrichment.js.map +1 -1
  175. package/dist/features/sequence.d.ts.map +1 -1
  176. package/dist/features/sequence.js +25 -4
  177. package/dist/features/sequence.js.map +1 -1
  178. package/dist/features/structure-query.d.ts.map +1 -1
  179. package/dist/features/structure-query.js +29 -4
  180. package/dist/features/structure-query.js.map +1 -1
  181. package/dist/features/structure.d.ts.map +1 -1
  182. package/dist/features/structure.js +35 -15
  183. package/dist/features/structure.js.map +1 -1
  184. package/dist/graph/algorithms/leiden/adapter.d.ts.map +1 -1
  185. package/dist/graph/algorithms/leiden/adapter.js +88 -73
  186. package/dist/graph/algorithms/leiden/adapter.js.map +1 -1
  187. package/dist/graph/algorithms/leiden/index.js +43 -28
  188. package/dist/graph/algorithms/leiden/index.js.map +1 -1
  189. package/dist/graph/algorithms/leiden/optimiser.d.ts.map +1 -1
  190. package/dist/graph/algorithms/leiden/optimiser.js +90 -104
  191. package/dist/graph/algorithms/leiden/optimiser.js.map +1 -1
  192. package/dist/graph/algorithms/leiden/partition.d.ts.map +1 -1
  193. package/dist/graph/algorithms/leiden/partition.js +89 -106
  194. package/dist/graph/algorithms/leiden/partition.js.map +1 -1
  195. package/dist/graph/model.d.ts +2 -0
  196. package/dist/graph/model.d.ts.map +1 -1
  197. package/dist/graph/model.js +20 -8
  198. package/dist/graph/model.js.map +1 -1
  199. package/dist/infrastructure/config.d.ts +0 -8
  200. package/dist/infrastructure/config.d.ts.map +1 -1
  201. package/dist/infrastructure/config.js +73 -62
  202. package/dist/infrastructure/config.js.map +1 -1
  203. package/dist/infrastructure/registry.d.ts +0 -8
  204. package/dist/infrastructure/registry.d.ts.map +1 -1
  205. package/dist/infrastructure/registry.js +12 -14
  206. package/dist/infrastructure/registry.js.map +1 -1
  207. package/dist/mcp/server.d.ts.map +1 -1
  208. package/dist/mcp/server.js +45 -36
  209. package/dist/mcp/server.js.map +1 -1
  210. package/dist/presentation/audit.d.ts.map +1 -1
  211. package/dist/presentation/audit.js +61 -57
  212. package/dist/presentation/audit.js.map +1 -1
  213. package/dist/presentation/branch-compare.d.ts.map +1 -1
  214. package/dist/presentation/branch-compare.js +56 -38
  215. package/dist/presentation/branch-compare.js.map +1 -1
  216. package/dist/presentation/check.d.ts.map +1 -1
  217. package/dist/presentation/check.js +30 -32
  218. package/dist/presentation/check.js.map +1 -1
  219. package/dist/presentation/colors.d.ts.map +1 -1
  220. package/dist/presentation/colors.js +2 -0
  221. package/dist/presentation/colors.js.map +1 -1
  222. package/dist/presentation/complexity.d.ts.map +1 -1
  223. package/dist/presentation/complexity.js +25 -19
  224. package/dist/presentation/complexity.js.map +1 -1
  225. package/dist/presentation/queries-cli/exports.d.ts.map +1 -1
  226. package/dist/presentation/queries-cli/exports.js +15 -15
  227. package/dist/presentation/queries-cli/exports.js.map +1 -1
  228. package/dist/presentation/queries-cli/impact.d.ts.map +1 -1
  229. package/dist/presentation/queries-cli/impact.js +29 -19
  230. package/dist/presentation/queries-cli/impact.js.map +1 -1
  231. package/dist/types.d.ts +182 -7
  232. package/dist/types.d.ts.map +1 -1
  233. package/grammars/tree-sitter-bash.wasm +0 -0
  234. package/grammars/tree-sitter-c.wasm +0 -0
  235. package/grammars/tree-sitter-cpp.wasm +0 -0
  236. package/grammars/tree-sitter-kotlin.wasm +0 -0
  237. package/grammars/tree-sitter-scala.wasm +0 -0
  238. package/grammars/tree-sitter-swift.wasm +0 -0
  239. package/package.json +13 -7
  240. package/src/ast-analysis/engine.ts +147 -138
  241. package/src/ast-analysis/visitors/ast-store-visitor.ts +15 -2
  242. package/src/ast-analysis/visitors/complexity-visitor.ts +11 -11
  243. package/src/db/connection.ts +90 -59
  244. package/src/db/index.ts +1 -0
  245. package/src/db/migrations.ts +36 -32
  246. package/src/domain/analysis/context.ts +73 -75
  247. package/src/domain/analysis/dependencies.ts +78 -68
  248. package/src/domain/analysis/exports.ts +45 -34
  249. package/src/domain/analysis/fn-impact.ts +67 -64
  250. package/src/domain/analysis/module-map.ts +103 -8
  251. package/src/domain/analysis/query-helpers.ts +35 -0
  252. package/src/domain/graph/builder/helpers.ts +12 -6
  253. package/src/domain/graph/builder/incremental.ts +3 -2
  254. package/src/domain/graph/builder/pipeline.ts +71 -3
  255. package/src/domain/graph/builder/stages/build-edges.ts +10 -75
  256. package/src/domain/graph/builder/stages/build-structure.ts +9 -7
  257. package/src/domain/graph/builder/stages/collect-files.ts +2 -2
  258. package/src/domain/graph/builder/stages/detect-changes.ts +7 -2
  259. package/src/domain/graph/builder/stages/finalize.ts +159 -125
  260. package/src/domain/graph/builder/stages/insert-nodes.ts +32 -21
  261. package/src/domain/graph/builder/stages/resolve-imports.ts +3 -2
  262. package/src/domain/graph/resolve.ts +34 -46
  263. package/src/domain/graph/watcher.ts +12 -14
  264. package/src/domain/parser.ts +168 -97
  265. package/src/domain/search/search/cli-formatter.ts +121 -94
  266. package/src/extractors/bash.ts +97 -0
  267. package/src/extractors/c.ts +212 -0
  268. package/src/extractors/cpp.ts +298 -0
  269. package/src/extractors/csharp.ts +53 -56
  270. package/src/extractors/go.ts +152 -134
  271. package/src/extractors/hcl.ts +6 -6
  272. package/src/extractors/helpers.ts +93 -1
  273. package/src/extractors/index.ts +6 -0
  274. package/src/extractors/java.ts +43 -48
  275. package/src/extractors/javascript.ts +328 -281
  276. package/src/extractors/kotlin.ts +293 -0
  277. package/src/extractors/php.ts +46 -40
  278. package/src/extractors/python.ts +81 -104
  279. package/src/extractors/ruby.ts +6 -13
  280. package/src/extractors/rust.ts +65 -85
  281. package/src/extractors/scala.ts +285 -0
  282. package/src/extractors/swift.ts +293 -0
  283. package/src/features/ast.ts +10 -25
  284. package/src/features/audit.ts +24 -20
  285. package/src/features/branch-compare.ts +51 -4
  286. package/src/features/cfg.ts +158 -65
  287. package/src/features/check.ts +90 -74
  288. package/src/features/complexity-query.ts +181 -163
  289. package/src/features/complexity.ts +64 -1
  290. package/src/features/dataflow.ts +462 -217
  291. package/src/features/graph-enrichment.ts +161 -117
  292. package/src/features/sequence.ts +27 -4
  293. package/src/features/structure-query.ts +43 -4
  294. package/src/features/structure.ts +50 -22
  295. package/src/graph/algorithms/leiden/adapter.ts +126 -71
  296. package/src/graph/algorithms/leiden/index.ts +67 -28
  297. package/src/graph/algorithms/leiden/optimiser.ts +114 -105
  298. package/src/graph/algorithms/leiden/partition.ts +131 -98
  299. package/src/graph/model.ts +19 -7
  300. package/src/infrastructure/config.ts +60 -58
  301. package/src/infrastructure/registry.ts +17 -14
  302. package/src/mcp/server.ts +46 -37
  303. package/src/presentation/audit.ts +72 -67
  304. package/src/presentation/branch-compare.ts +54 -50
  305. package/src/presentation/check.ts +34 -34
  306. package/src/presentation/colors.ts +2 -0
  307. package/src/presentation/complexity.ts +39 -33
  308. package/src/presentation/queries-cli/exports.ts +17 -17
  309. package/src/presentation/queries-cli/impact.ts +30 -22
  310. package/src/types.ts +189 -7
package/src/types.ts CHANGED
@@ -22,10 +22,11 @@ export type CoreSymbolKind =
22
22
  | 'enum'
23
23
  | 'trait'
24
24
  | 'record'
25
- | 'module';
25
+ | 'module'
26
+ | 'namespace';
26
27
 
27
28
  /** Sub-declaration kinds (Phase 1). Includes 'method' for class child nodes. */
28
- export type ExtendedSymbolKind = 'parameter' | 'property' | 'constant' | 'method';
29
+ export type ExtendedSymbolKind = 'parameter' | 'property' | 'constant' | 'variable' | 'method';
29
30
 
30
31
  /** All queryable symbol kinds. */
31
32
  export type SymbolKind = CoreSymbolKind | ExtendedSymbolKind;
@@ -83,7 +84,13 @@ export type LanguageId =
83
84
  | 'csharp'
84
85
  | 'ruby'
85
86
  | 'php'
86
- | 'hcl';
87
+ | 'hcl'
88
+ | 'c'
89
+ | 'cpp'
90
+ | 'kotlin'
91
+ | 'swift'
92
+ | 'scala'
93
+ | 'bash';
87
94
 
88
95
  /** Engine mode selector. */
89
96
  export type EngineMode = 'native' | 'wasm' | 'auto';
@@ -433,6 +440,11 @@ export interface Import {
433
440
  csharpUsing?: boolean;
434
441
  rubyRequire?: boolean;
435
442
  phpUse?: boolean;
443
+ cInclude?: boolean;
444
+ kotlinImport?: boolean;
445
+ swiftImport?: boolean;
446
+ scalaImport?: boolean;
447
+ bashSource?: boolean;
436
448
  }
437
449
 
438
450
  /** A class/struct/trait relationship (extends or implements). */
@@ -883,6 +895,13 @@ export interface EngineOpts {
883
895
  ast: boolean;
884
896
  /** Persistent NativeDatabase connection for build writes (Phase 6.15). */
885
897
  nativeDb?: NativeDatabase;
898
+ /**
899
+ * Suspend the JS (better-sqlite3) connection before a native write to avoid
900
+ * dual-connection WAL corruption. Call `resumeJsDb()` after the write completes.
901
+ * Only set during pipeline builds where both connections coexist.
902
+ */
903
+ suspendJsDb?: () => void;
904
+ resumeJsDb?: () => void;
886
905
  }
887
906
 
888
907
  /** A file change detected during incremental builds. */
@@ -2014,14 +2033,14 @@ export interface NativeDatabase {
2014
2033
  name: string;
2015
2034
  kind: string;
2016
2035
  line: number;
2017
- endLine?: number | null;
2018
- visibility?: string | null;
2036
+ endLine?: number;
2037
+ visibility?: string;
2019
2038
  children: Array<{
2020
2039
  name: string;
2021
2040
  kind: string;
2022
2041
  line: number;
2023
- endLine?: number | null;
2024
- visibility?: string | null;
2042
+ endLine?: number;
2043
+ visibility?: string;
2025
2044
  }>;
2026
2045
  }>;
2027
2046
  exports: Array<{ name: string; kind: string; line: number }>;
@@ -2050,6 +2069,56 @@ export interface NativeDatabase {
2050
2069
  }>;
2051
2070
  }>,
2052
2071
  ): number;
2072
+ bulkInsertComplexity?(
2073
+ rows: Array<{
2074
+ nodeId: number;
2075
+ cognitive: number;
2076
+ cyclomatic: number;
2077
+ maxNesting: number;
2078
+ loc: number;
2079
+ sloc: number;
2080
+ commentLines: number;
2081
+ halsteadN1: number;
2082
+ halsteadN2: number;
2083
+ halsteadBigN1: number;
2084
+ halsteadBigN2: number;
2085
+ halsteadVocabulary: number;
2086
+ halsteadLength: number;
2087
+ halsteadVolume: number;
2088
+ halsteadDifficulty: number;
2089
+ halsteadEffort: number;
2090
+ halsteadBugs: number;
2091
+ maintainabilityIndex: number;
2092
+ }>,
2093
+ ): number;
2094
+ bulkInsertCfg?(
2095
+ entries: Array<{
2096
+ nodeId: number;
2097
+ blocks: Array<{
2098
+ index: number;
2099
+ blockType: string;
2100
+ startLine?: number | null;
2101
+ endLine?: number | null;
2102
+ label?: string | null;
2103
+ }>;
2104
+ edges: Array<{
2105
+ sourceIndex: number;
2106
+ targetIndex: number;
2107
+ kind: string;
2108
+ }>;
2109
+ }>,
2110
+ ): number;
2111
+ bulkInsertDataflow?(
2112
+ edges: Array<{
2113
+ sourceId: number;
2114
+ targetId: number;
2115
+ kind: string;
2116
+ paramIndex?: number | null;
2117
+ expression?: string | null;
2118
+ line?: number | null;
2119
+ confidence: number;
2120
+ }>,
2121
+ ): number;
2053
2122
  classifyRolesFull(): {
2054
2123
  entry: number;
2055
2124
  core: number;
@@ -2078,6 +2147,119 @@ export interface NativeDatabase {
2078
2147
  } | null;
2079
2148
  purgeFilesData(files: string[], purgeHashes?: boolean, reverseDepFiles?: string[]): void;
2080
2149
 
2150
+ // ── Batched query methods ────────────────────────────────────────────
2151
+ /** All graph statistics in a single napi call (replaces ~11 queries in module-map). */
2152
+ getGraphStats?(noTests: boolean): {
2153
+ totalNodes: number;
2154
+ totalEdges: number;
2155
+ nodesByKind: Array<{ kind: string; count: number }>;
2156
+ edgesByKind: Array<{ kind: string; count: number }>;
2157
+ roleCounts: Array<{ role: string; count: number }>;
2158
+ quality: {
2159
+ callableTotal: number;
2160
+ callableWithCallers: number;
2161
+ callEdges: number;
2162
+ highConfCallEdges: number;
2163
+ };
2164
+ hotspots: Array<{ file: string; fanIn: number; fanOut: number }>;
2165
+ complexity: {
2166
+ analyzed: number;
2167
+ avgCognitive: number;
2168
+ avgCyclomatic: number;
2169
+ maxCognitive: number;
2170
+ maxCyclomatic: number;
2171
+ avgMi: number;
2172
+ minMi: number;
2173
+ } | null;
2174
+ embeddings: {
2175
+ count: number;
2176
+ model: string | null;
2177
+ dim: number | null;
2178
+ builtAt: string | null;
2179
+ } | null;
2180
+ };
2181
+ /** All 6 directional dataflow edge sets for a node in one call. */
2182
+ getDataflowEdges?(nodeId: number): {
2183
+ flowsToOut: Array<{
2184
+ name: string;
2185
+ kind: string;
2186
+ file: string;
2187
+ line: number | null;
2188
+ paramIndex: number | null;
2189
+ expression: string | null;
2190
+ confidence: number | null;
2191
+ }>;
2192
+ flowsToIn: Array<{
2193
+ name: string;
2194
+ kind: string;
2195
+ file: string;
2196
+ line: number | null;
2197
+ paramIndex: number | null;
2198
+ expression: string | null;
2199
+ confidence: number | null;
2200
+ }>;
2201
+ returnsOut: Array<{
2202
+ name: string;
2203
+ kind: string;
2204
+ file: string;
2205
+ line: number | null;
2206
+ paramIndex: number | null;
2207
+ expression: string | null;
2208
+ confidence: number | null;
2209
+ }>;
2210
+ returnsIn: Array<{
2211
+ name: string;
2212
+ kind: string;
2213
+ file: string;
2214
+ line: number | null;
2215
+ paramIndex: number | null;
2216
+ expression: string | null;
2217
+ confidence: number | null;
2218
+ }>;
2219
+ mutatesOut: Array<{
2220
+ name: string;
2221
+ kind: string;
2222
+ file: string;
2223
+ line: number | null;
2224
+ paramIndex: number | null;
2225
+ expression: string | null;
2226
+ confidence: number | null;
2227
+ }>;
2228
+ mutatesIn: Array<{
2229
+ name: string;
2230
+ kind: string;
2231
+ file: string;
2232
+ line: number | null;
2233
+ paramIndex: number | null;
2234
+ expression: string | null;
2235
+ confidence: number | null;
2236
+ }>;
2237
+ };
2238
+ /** Hotspot rows for a metric/kind/limit in one call. */
2239
+ getHotspots?(
2240
+ kind: string,
2241
+ metric: string,
2242
+ noTests: boolean,
2243
+ limit: number,
2244
+ ): Array<{
2245
+ name: string;
2246
+ kind: string;
2247
+ lineCount: number | null;
2248
+ symbolCount: number | null;
2249
+ importCount: number | null;
2250
+ exportCount: number | null;
2251
+ fanIn: number | null;
2252
+ fanOut: number | null;
2253
+ cohesion: number | null;
2254
+ fileCount: number | null;
2255
+ }>;
2256
+ /** Batch fan-in/fan-out for multiple node IDs in one call. */
2257
+ batchFanMetrics?(nodeIds: number[]): Array<{
2258
+ nodeId: number;
2259
+ fanIn: number;
2260
+ fanOut: number;
2261
+ }>;
2262
+
2081
2263
  // ── Generic query execution & version validation (6.16) ─────────────
2082
2264
  /** Execute a parameterized SELECT and return all rows as objects. */
2083
2265
  queryAll(sql: string, params: Array<string | number | null>): Record<string, unknown>[];