@optave/codegraph 3.4.1 → 3.5.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 (112) hide show
  1. package/README.md +22 -21
  2. package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
  3. package/dist/ast-analysis/rules/javascript.js +1 -0
  4. package/dist/ast-analysis/rules/javascript.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 +103 -35
  7. package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
  8. package/dist/db/better-sqlite3.d.ts +3 -0
  9. package/dist/db/better-sqlite3.d.ts.map +1 -0
  10. package/dist/db/better-sqlite3.js +19 -0
  11. package/dist/db/better-sqlite3.js.map +1 -0
  12. package/dist/db/connection.d.ts +13 -2
  13. package/dist/db/connection.d.ts.map +1 -1
  14. package/dist/db/connection.js +76 -2
  15. package/dist/db/connection.js.map +1 -1
  16. package/dist/db/index.d.ts +2 -2
  17. package/dist/db/index.d.ts.map +1 -1
  18. package/dist/db/index.js +1 -1
  19. package/dist/db/index.js.map +1 -1
  20. package/dist/db/migrations.d.ts.map +1 -1
  21. package/dist/db/migrations.js +2 -0
  22. package/dist/db/migrations.js.map +1 -1
  23. package/dist/db/query-builder.d.ts +5 -5
  24. package/dist/db/query-builder.d.ts.map +1 -1
  25. package/dist/db/query-builder.js +20 -4
  26. package/dist/db/query-builder.js.map +1 -1
  27. package/dist/db/repository/index.d.ts +1 -0
  28. package/dist/db/repository/index.d.ts.map +1 -1
  29. package/dist/db/repository/index.js +1 -0
  30. package/dist/db/repository/index.js.map +1 -1
  31. package/dist/db/repository/native-repository.d.ts +58 -0
  32. package/dist/db/repository/native-repository.d.ts.map +1 -0
  33. package/dist/db/repository/native-repository.js +261 -0
  34. package/dist/db/repository/native-repository.js.map +1 -0
  35. package/dist/db/repository/nodes.d.ts +4 -4
  36. package/dist/db/repository/nodes.d.ts.map +1 -1
  37. package/dist/db/repository/nodes.js +6 -6
  38. package/dist/db/repository/nodes.js.map +1 -1
  39. package/dist/domain/graph/builder/context.d.ts +2 -1
  40. package/dist/domain/graph/builder/context.d.ts.map +1 -1
  41. package/dist/domain/graph/builder/context.js +1 -0
  42. package/dist/domain/graph/builder/context.js.map +1 -1
  43. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  44. package/dist/domain/graph/builder/pipeline.js +29 -7
  45. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  46. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  47. package/dist/domain/graph/builder/stages/build-edges.js +103 -15
  48. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  49. package/dist/domain/graph/builder/stages/build-structure.d.ts.map +1 -1
  50. package/dist/domain/graph/builder/stages/build-structure.js +33 -5
  51. package/dist/domain/graph/builder/stages/build-structure.js.map +1 -1
  52. package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
  53. package/dist/domain/graph/builder/stages/collect-files.js +71 -7
  54. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  55. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  56. package/dist/domain/graph/builder/stages/detect-changes.js +36 -14
  57. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  58. package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
  59. package/dist/domain/graph/builder/stages/finalize.js +43 -20
  60. package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
  61. package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
  62. package/dist/domain/graph/builder/stages/insert-nodes.js +104 -9
  63. package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
  64. package/dist/domain/parser.d.ts.map +1 -1
  65. package/dist/domain/parser.js +1 -0
  66. package/dist/domain/parser.js.map +1 -1
  67. package/dist/extractors/javascript.js +53 -38
  68. package/dist/extractors/javascript.js.map +1 -1
  69. package/dist/extractors/rust.js +2 -1
  70. package/dist/extractors/rust.js.map +1 -1
  71. package/dist/features/ast.d.ts +14 -1
  72. package/dist/features/ast.d.ts.map +1 -1
  73. package/dist/features/ast.js +38 -1
  74. package/dist/features/ast.js.map +1 -1
  75. package/dist/features/branch-compare.d.ts.map +1 -1
  76. package/dist/features/branch-compare.js +3 -1
  77. package/dist/features/branch-compare.js.map +1 -1
  78. package/dist/features/snapshot.d.ts.map +1 -1
  79. package/dist/features/snapshot.js +2 -1
  80. package/dist/features/snapshot.js.map +1 -1
  81. package/dist/mcp/server.d.ts.map +1 -1
  82. package/dist/mcp/server.js +2 -9
  83. package/dist/mcp/server.js.map +1 -1
  84. package/dist/types.d.ts +228 -0
  85. package/dist/types.d.ts.map +1 -1
  86. package/package.json +61 -11
  87. package/src/ast-analysis/rules/javascript.ts +1 -0
  88. package/src/ast-analysis/visitors/ast-store-visitor.ts +102 -33
  89. package/src/db/better-sqlite3.ts +20 -0
  90. package/src/db/connection.ts +94 -3
  91. package/src/db/index.ts +3 -1
  92. package/src/db/migrations.ts +2 -0
  93. package/src/db/query-builder.ts +30 -5
  94. package/src/db/repository/index.ts +1 -0
  95. package/src/db/repository/native-repository.ts +361 -0
  96. package/src/db/repository/nodes.ts +7 -3
  97. package/src/domain/graph/builder/context.ts +2 -0
  98. package/src/domain/graph/builder/pipeline.ts +30 -6
  99. package/src/domain/graph/builder/stages/build-edges.ts +117 -19
  100. package/src/domain/graph/builder/stages/build-structure.ts +47 -11
  101. package/src/domain/graph/builder/stages/collect-files.ts +84 -7
  102. package/src/domain/graph/builder/stages/detect-changes.ts +39 -21
  103. package/src/domain/graph/builder/stages/finalize.ts +49 -20
  104. package/src/domain/graph/builder/stages/insert-nodes.ts +129 -10
  105. package/src/domain/parser.ts +1 -0
  106. package/src/extractors/javascript.ts +54 -36
  107. package/src/extractors/rust.ts +2 -1
  108. package/src/features/ast.ts +66 -1
  109. package/src/features/branch-compare.ts +3 -1
  110. package/src/features/snapshot.ts +2 -1
  111. package/src/mcp/server.ts +2 -10
  112. package/src/types.ts +273 -0
package/src/types.ts CHANGED
@@ -881,6 +881,8 @@ export interface EngineOpts {
881
881
  engine: EngineMode;
882
882
  dataflow: boolean;
883
883
  ast: boolean;
884
+ /** Persistent NativeDatabase connection for build writes (Phase 6.15). */
885
+ nativeDb?: NativeDatabase;
884
886
  }
885
887
 
886
888
  /** A file change detected during incremental builds. */
@@ -1804,6 +1806,10 @@ export interface NativeAddon {
1804
1806
  buildCallEdges(files: unknown[], nodes: unknown[], builtinReceivers: string[]): unknown[];
1805
1807
  engineVersion(): string;
1806
1808
  ParseTreeCache: new () => NativeParseTreeCache;
1809
+ NativeDatabase: {
1810
+ openReadWrite(dbPath: string): NativeDatabase;
1811
+ openReadonly(dbPath: string): NativeDatabase;
1812
+ };
1807
1813
  }
1808
1814
 
1809
1815
  /** Native parse-tree cache instance. */
@@ -1814,6 +1820,273 @@ export interface NativeParseTreeCache {
1814
1820
  clear(): void;
1815
1821
  }
1816
1822
 
1823
+ /** Row types returned by NativeDatabase query methods (auto-generated by napi-rs). */
1824
+ export interface NativeNodeRow {
1825
+ id: number;
1826
+ name: string;
1827
+ kind: string;
1828
+ file: string;
1829
+ line: number | null;
1830
+ endLine: number | null;
1831
+ parentId: number | null;
1832
+ exported: number | null;
1833
+ qualifiedName: string | null;
1834
+ scope: string | null;
1835
+ visibility: string | null;
1836
+ role: string | null;
1837
+ }
1838
+
1839
+ export interface NativeNodeRowWithFanIn extends NativeNodeRow {
1840
+ fanIn: number;
1841
+ }
1842
+
1843
+ export interface NativeTriageNodeRow extends NativeNodeRow {
1844
+ fanIn: number;
1845
+ cognitive: number;
1846
+ mi: number;
1847
+ cyclomatic: number;
1848
+ maxNesting: number;
1849
+ churn: number;
1850
+ }
1851
+
1852
+ export interface NativeNodeIdRow {
1853
+ id: number;
1854
+ name: string;
1855
+ kind: string;
1856
+ line: number | null;
1857
+ }
1858
+
1859
+ export interface NativeChildNodeRow {
1860
+ name: string;
1861
+ kind: string;
1862
+ line: number | null;
1863
+ endLine: number | null;
1864
+ qualifiedName: string | null;
1865
+ scope: string | null;
1866
+ visibility: string | null;
1867
+ }
1868
+
1869
+ export interface NativeRelatedNodeRow {
1870
+ id: number;
1871
+ name: string;
1872
+ kind: string;
1873
+ file: string;
1874
+ line: number | null;
1875
+ endLine: number | null;
1876
+ }
1877
+
1878
+ export interface NativeAdjacentEdgeRow {
1879
+ name: string;
1880
+ kind: string;
1881
+ file: string;
1882
+ line: number | null;
1883
+ edgeKind: string;
1884
+ }
1885
+
1886
+ export interface NativeImportEdgeRow {
1887
+ file: string;
1888
+ edgeKind: string;
1889
+ }
1890
+
1891
+ export interface NativeIntraFileCallEdge {
1892
+ callerName: string;
1893
+ calleeName: string;
1894
+ }
1895
+
1896
+ export interface NativeCallableNodeRow {
1897
+ id: number;
1898
+ name: string;
1899
+ kind: string;
1900
+ file: string;
1901
+ }
1902
+
1903
+ export interface NativeCallEdgeRow {
1904
+ sourceId: number;
1905
+ targetId: number;
1906
+ confidence: number | null;
1907
+ }
1908
+
1909
+ export interface NativeFileNodeRow {
1910
+ id: number;
1911
+ name: string;
1912
+ file: string;
1913
+ }
1914
+
1915
+ export interface NativeImportGraphEdgeRow {
1916
+ sourceId: number;
1917
+ targetId: number;
1918
+ }
1919
+
1920
+ export interface NativeComplexityMetrics {
1921
+ cognitive: number;
1922
+ cyclomatic: number;
1923
+ maxNesting: number;
1924
+ maintainabilityIndex: number | null;
1925
+ halsteadVolume: number | null;
1926
+ }
1927
+
1928
+ /** Native rusqlite database wrapper instance (Phase 6.13 + 6.14 + 6.15). */
1929
+ export interface NativeDatabase {
1930
+ // ── Lifecycle (6.13) ────────────────────────────────────────────────
1931
+ initSchema(): void;
1932
+ getBuildMeta(key: string): string | null;
1933
+ setBuildMeta(entries: Array<{ key: string; value: string }>): void;
1934
+ exec(sql: string): void;
1935
+ pragma(sql: string): string | null;
1936
+ close(): void;
1937
+ readonly dbPath: string;
1938
+ readonly isOpen: boolean;
1939
+
1940
+ // ── Node lookups (6.14) ──────────────────────────────────────────────
1941
+ countNodes(): number;
1942
+ countEdges(): number;
1943
+ countFiles(): number;
1944
+ findNodeById(id: number): NativeNodeRow | null;
1945
+ getNodeId(name: string, kind: string, file: string, line: number): number | null;
1946
+ getFunctionNodeId(name: string, file: string, line: number): number | null;
1947
+ bulkNodeIdsByFile(file: string): NativeNodeIdRow[];
1948
+ findNodeChildren(parentId: number): NativeChildNodeRow[];
1949
+ findNodesByFile(file: string): NativeNodeRow[];
1950
+ findFileNodes(fileLike: string): NativeNodeRow[];
1951
+ findNodesByScope(
1952
+ scopeName: string,
1953
+ kind: string | null | undefined,
1954
+ file: string | null | undefined,
1955
+ ): NativeNodeRow[];
1956
+ findNodeByQualifiedName(qualifiedName: string, file: string | null | undefined): NativeNodeRow[];
1957
+ findNodesWithFanIn(
1958
+ namePattern: string,
1959
+ kinds: string[] | null | undefined,
1960
+ file: string | null | undefined,
1961
+ ): NativeNodeRowWithFanIn[];
1962
+ findNodesForTriage(
1963
+ kind: string | null | undefined,
1964
+ role: string | null | undefined,
1965
+ file: string | null | undefined,
1966
+ noTests: boolean | null | undefined,
1967
+ ): NativeTriageNodeRow[];
1968
+ listFunctionNodes(
1969
+ file: string | null | undefined,
1970
+ pattern: string | null | undefined,
1971
+ noTests: boolean | null | undefined,
1972
+ ): NativeNodeRow[];
1973
+ iterateFunctionNodes(
1974
+ file: string | null | undefined,
1975
+ pattern: string | null | undefined,
1976
+ noTests: boolean | null | undefined,
1977
+ ): NativeNodeRow[];
1978
+
1979
+ // ── Edge queries (6.14) ──────────────────────────────────────────────
1980
+ findCallees(nodeId: number): NativeRelatedNodeRow[];
1981
+ findCallers(nodeId: number): NativeRelatedNodeRow[];
1982
+ findDistinctCallers(nodeId: number): NativeRelatedNodeRow[];
1983
+ findAllOutgoingEdges(nodeId: number): NativeAdjacentEdgeRow[];
1984
+ findAllIncomingEdges(nodeId: number): NativeAdjacentEdgeRow[];
1985
+ findCalleeNames(nodeId: number): string[];
1986
+ findCallerNames(nodeId: number): string[];
1987
+ findImportTargets(nodeId: number): NativeImportEdgeRow[];
1988
+ findImportSources(nodeId: number): NativeImportEdgeRow[];
1989
+ findImportDependents(nodeId: number): NativeNodeRow[];
1990
+ findCrossFileCallTargets(file: string): number[];
1991
+ countCrossFileCallers(nodeId: number, file: string): number;
1992
+ getClassHierarchy(classNodeId: number): number[];
1993
+ findImplementors(nodeId: number): NativeRelatedNodeRow[];
1994
+ findInterfaces(nodeId: number): NativeRelatedNodeRow[];
1995
+ findIntraFileCallEdges(file: string): NativeIntraFileCallEdge[];
1996
+
1997
+ // ── Graph-read queries (6.14) ────────────────────────────────────────
1998
+ getCallableNodes(): NativeCallableNodeRow[];
1999
+ getCallEdges(): NativeCallEdgeRow[];
2000
+ getFileNodesAll(): NativeFileNodeRow[];
2001
+ getImportEdges(): NativeImportGraphEdgeRow[];
2002
+
2003
+ // ── Table checks (6.14) ──────────────────────────────────────────────
2004
+ hasCfgTables(): boolean;
2005
+ hasEmbeddings(): boolean;
2006
+ hasDataflowTable(): boolean;
2007
+ getComplexityForNode(nodeId: number): NativeComplexityMetrics | null;
2008
+
2009
+ // ── Build pipeline writes (6.15) ───────────────────────────────────
2010
+ bulkInsertNodes(
2011
+ batches: Array<{
2012
+ file: string;
2013
+ definitions: Array<{
2014
+ name: string;
2015
+ kind: string;
2016
+ line: number;
2017
+ endLine?: number | null;
2018
+ visibility?: string | null;
2019
+ children: Array<{
2020
+ name: string;
2021
+ kind: string;
2022
+ line: number;
2023
+ endLine?: number | null;
2024
+ visibility?: string | null;
2025
+ }>;
2026
+ }>;
2027
+ exports: Array<{ name: string; kind: string; line: number }>;
2028
+ }>,
2029
+ fileHashes: Array<{ file: string; hash: string; mtime: number; size: number }>,
2030
+ removedFiles: string[],
2031
+ ): boolean;
2032
+ bulkInsertEdges(
2033
+ edges: Array<{
2034
+ sourceId: number;
2035
+ targetId: number;
2036
+ kind: string;
2037
+ confidence: number;
2038
+ dynamic: number;
2039
+ }>,
2040
+ ): boolean;
2041
+ bulkInsertAstNodes(
2042
+ batches: Array<{
2043
+ file: string;
2044
+ nodes: Array<{
2045
+ line: number;
2046
+ kind: string;
2047
+ name: string;
2048
+ text?: string | null;
2049
+ receiver?: string | null;
2050
+ }>;
2051
+ }>,
2052
+ ): number;
2053
+ classifyRolesFull(): {
2054
+ entry: number;
2055
+ core: number;
2056
+ utility: number;
2057
+ adapter: number;
2058
+ dead: number;
2059
+ deadLeaf: number;
2060
+ deadEntry: number;
2061
+ deadFfi: number;
2062
+ deadUnresolved: number;
2063
+ testOnly: number;
2064
+ leaf: number;
2065
+ } | null;
2066
+ classifyRolesIncremental(changedFiles: string[]): {
2067
+ entry: number;
2068
+ core: number;
2069
+ utility: number;
2070
+ adapter: number;
2071
+ dead: number;
2072
+ deadLeaf: number;
2073
+ deadEntry: number;
2074
+ deadFfi: number;
2075
+ deadUnresolved: number;
2076
+ testOnly: number;
2077
+ leaf: number;
2078
+ } | null;
2079
+ purgeFilesData(files: string[], purgeHashes?: boolean, reverseDepFiles?: string[]): void;
2080
+
2081
+ // ── Generic query execution & version validation (6.16) ─────────────
2082
+ /** Execute a parameterized SELECT and return all rows as objects. */
2083
+ queryAll(sql: string, params: Array<string | number | null>): Record<string, unknown>[];
2084
+ /** Execute a parameterized SELECT and return the first row, or null. */
2085
+ queryGet(sql: string, params: Array<string | number | null>): Record<string, unknown> | null;
2086
+ /** Validate DB codegraph_version matches expected. Warns on mismatch. */
2087
+ validateSchemaVersion(expectedVersion: string): boolean;
2088
+ }
2089
+
1817
2090
  // ════════════════════════════════════════════════════════════════════════
1818
2091
  // §14 CLI Command Framework
1819
2092
  // ════════════════════════════════════════════════════════════════════════