@optave/codegraph 3.10.0 → 3.11.1
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.
- package/README.md +40 -33
- package/dist/ast-analysis/engine.d.ts.map +1 -1
- package/dist/ast-analysis/engine.js +91 -60
- package/dist/ast-analysis/engine.js.map +1 -1
- package/dist/ast-analysis/rules/index.d.ts.map +1 -1
- package/dist/ast-analysis/rules/index.js +77 -0
- package/dist/ast-analysis/rules/index.js.map +1 -1
- package/dist/ast-analysis/visitor-utils.d.ts +3 -0
- package/dist/ast-analysis/visitor-utils.d.ts.map +1 -1
- package/dist/ast-analysis/visitor-utils.js +83 -49
- package/dist/ast-analysis/visitor-utils.js.map +1 -1
- package/dist/ast-analysis/visitors/ast-store-visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitors/ast-store-visitor.js +78 -62
- package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
- package/dist/ast-analysis/visitors/dataflow-visitor.d.ts.map +1 -1
- package/dist/ast-analysis/visitors/dataflow-visitor.js +61 -42
- package/dist/ast-analysis/visitors/dataflow-visitor.js.map +1 -1
- package/dist/cli/commands/audit.js +1 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/check.js +1 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/children.js +1 -1
- package/dist/cli/commands/children.js.map +1 -1
- package/dist/cli/commands/diff-impact.js +1 -1
- package/dist/cli/commands/diff-impact.js.map +1 -1
- package/dist/cli/commands/embed.d.ts.map +1 -1
- package/dist/cli/commands/embed.js +49 -4
- package/dist/cli/commands/embed.js.map +1 -1
- package/dist/cli/commands/roles.js +1 -1
- package/dist/cli/commands/roles.js.map +1 -1
- package/dist/cli/commands/structure.js +1 -1
- package/dist/cli/commands/structure.js.map +1 -1
- package/dist/cli/shared/options.js +1 -1
- package/dist/cli/shared/options.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +8 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/domain/analysis/dependencies.d.ts.map +1 -1
- package/dist/domain/analysis/dependencies.js +106 -80
- package/dist/domain/analysis/dependencies.js.map +1 -1
- package/dist/domain/analysis/fn-impact.d.ts.map +1 -1
- package/dist/domain/analysis/fn-impact.js +77 -52
- package/dist/domain/analysis/fn-impact.js.map +1 -1
- package/dist/domain/analysis/module-map.d.ts.map +1 -1
- package/dist/domain/analysis/module-map.js +132 -121
- package/dist/domain/analysis/module-map.js.map +1 -1
- package/dist/domain/graph/builder/helpers.d.ts +4 -4
- package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
- package/dist/domain/graph/builder/helpers.js +47 -33
- package/dist/domain/graph/builder/helpers.js.map +1 -1
- package/dist/domain/graph/builder/incremental.d.ts +6 -6
- package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
- package/dist/domain/graph/builder/incremental.js +148 -99
- package/dist/domain/graph/builder/incremental.js.map +1 -1
- package/dist/domain/graph/builder/pipeline.d.ts +1 -0
- package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
- package/dist/domain/graph/builder/pipeline.js +23 -637
- package/dist/domain/graph/builder/pipeline.js.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.js +141 -98
- package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
- package/dist/domain/graph/builder/stages/build-structure.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/build-structure.js +82 -65
- package/dist/domain/graph/builder/stages/build-structure.js.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.js +84 -56
- package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
- package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/finalize.js +60 -51
- package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
- package/dist/domain/graph/builder/stages/insert-nodes.d.ts +8 -6
- package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/insert-nodes.js +107 -122
- package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
- package/dist/domain/graph/builder/stages/native-db-lifecycle.d.ts +14 -0
- package/dist/domain/graph/builder/stages/native-db-lifecycle.d.ts.map +1 -0
- package/dist/domain/graph/builder/stages/native-db-lifecycle.js +77 -0
- package/dist/domain/graph/builder/stages/native-db-lifecycle.js.map +1 -0
- package/dist/domain/graph/builder/stages/native-orchestrator.d.ts +62 -0
- package/dist/domain/graph/builder/stages/native-orchestrator.d.ts.map +1 -0
- package/dist/domain/graph/builder/stages/native-orchestrator.js +747 -0
- package/dist/domain/graph/builder/stages/native-orchestrator.js.map +1 -0
- package/dist/domain/graph/builder/stages/resolve-imports.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/resolve-imports.js +73 -22
- package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
- package/dist/domain/graph/cycles.d.ts +6 -4
- package/dist/domain/graph/cycles.d.ts.map +1 -1
- package/dist/domain/graph/cycles.js +50 -55
- package/dist/domain/graph/cycles.js.map +1 -1
- package/dist/domain/graph/journal.d.ts.map +1 -1
- package/dist/domain/graph/journal.js +89 -70
- package/dist/domain/graph/journal.js.map +1 -1
- package/dist/domain/graph/watcher.d.ts.map +1 -1
- package/dist/domain/graph/watcher.js +28 -20
- package/dist/domain/graph/watcher.js.map +1 -1
- package/dist/domain/parser.d.ts +12 -23
- package/dist/domain/parser.d.ts.map +1 -1
- package/dist/domain/parser.js +153 -80
- package/dist/domain/parser.js.map +1 -1
- package/dist/domain/search/generator.d.ts +3 -1
- package/dist/domain/search/generator.d.ts.map +1 -1
- package/dist/domain/search/generator.js +68 -45
- package/dist/domain/search/generator.js.map +1 -1
- package/dist/domain/search/models.d.ts +18 -0
- package/dist/domain/search/models.d.ts.map +1 -1
- package/dist/domain/search/models.js +72 -4
- package/dist/domain/search/models.js.map +1 -1
- package/dist/domain/search/search/hybrid.d.ts.map +1 -1
- package/dist/domain/search/search/hybrid.js +49 -40
- package/dist/domain/search/search/hybrid.js.map +1 -1
- package/dist/domain/search/search/semantic.d.ts.map +1 -1
- package/dist/domain/search/search/semantic.js +69 -49
- package/dist/domain/search/search/semantic.js.map +1 -1
- package/dist/domain/wasm-worker-entry.js +209 -137
- package/dist/domain/wasm-worker-entry.js.map +1 -1
- package/dist/extractors/c.js +25 -6
- package/dist/extractors/c.js.map +1 -1
- package/dist/extractors/cpp.js +47 -6
- package/dist/extractors/cpp.js.map +1 -1
- package/dist/extractors/cuda.js +90 -14
- package/dist/extractors/cuda.js.map +1 -1
- package/dist/extractors/elixir.js +108 -4
- package/dist/extractors/elixir.js.map +1 -1
- package/dist/extractors/erlang.js +56 -20
- package/dist/extractors/erlang.js.map +1 -1
- package/dist/extractors/fsharp.d.ts +7 -0
- package/dist/extractors/fsharp.d.ts.map +1 -1
- package/dist/extractors/fsharp.js +94 -0
- package/dist/extractors/fsharp.js.map +1 -1
- package/dist/extractors/gleam.d.ts.map +1 -1
- package/dist/extractors/gleam.js +29 -33
- package/dist/extractors/gleam.js.map +1 -1
- package/dist/extractors/groovy.js +41 -1
- package/dist/extractors/groovy.js.map +1 -1
- package/dist/extractors/haskell.js +48 -4
- package/dist/extractors/haskell.js.map +1 -1
- package/dist/extractors/helpers.d.ts +79 -1
- package/dist/extractors/helpers.d.ts.map +1 -1
- package/dist/extractors/helpers.js +137 -0
- package/dist/extractors/helpers.js.map +1 -1
- package/dist/extractors/java.d.ts.map +1 -1
- package/dist/extractors/java.js +37 -49
- package/dist/extractors/java.js.map +1 -1
- package/dist/extractors/javascript.d.ts.map +1 -1
- package/dist/extractors/javascript.js +44 -44
- package/dist/extractors/javascript.js.map +1 -1
- package/dist/extractors/julia.js +198 -74
- package/dist/extractors/julia.js.map +1 -1
- package/dist/extractors/kotlin.js +4 -0
- package/dist/extractors/kotlin.js.map +1 -1
- package/dist/extractors/objc.js +184 -47
- package/dist/extractors/objc.js.map +1 -1
- package/dist/extractors/python.js +7 -4
- package/dist/extractors/python.js.map +1 -1
- package/dist/extractors/r.d.ts.map +1 -1
- package/dist/extractors/r.js +103 -87
- package/dist/extractors/r.js.map +1 -1
- package/dist/extractors/scala.d.ts.map +1 -1
- package/dist/extractors/scala.js +18 -32
- package/dist/extractors/scala.js.map +1 -1
- package/dist/extractors/solidity.d.ts.map +1 -1
- package/dist/extractors/solidity.js +55 -69
- package/dist/extractors/solidity.js.map +1 -1
- package/dist/extractors/verilog.js +80 -15
- package/dist/extractors/verilog.js.map +1 -1
- package/dist/features/boundaries.d.ts.map +1 -1
- package/dist/features/boundaries.js +49 -39
- package/dist/features/boundaries.js.map +1 -1
- package/dist/features/cfg.d.ts.map +1 -1
- package/dist/features/cfg.js +90 -63
- package/dist/features/cfg.js.map +1 -1
- package/dist/features/check.d.ts.map +1 -1
- package/dist/features/check.js +43 -34
- package/dist/features/check.js.map +1 -1
- package/dist/features/cochange.d.ts.map +1 -1
- package/dist/features/cochange.js +68 -56
- package/dist/features/cochange.js.map +1 -1
- package/dist/features/complexity.d.ts.map +1 -1
- package/dist/features/complexity.js +105 -75
- package/dist/features/complexity.js.map +1 -1
- package/dist/features/dataflow.d.ts.map +1 -1
- package/dist/features/dataflow.js +37 -29
- package/dist/features/dataflow.js.map +1 -1
- package/dist/features/flow.d.ts.map +1 -1
- package/dist/features/flow.js +31 -22
- package/dist/features/flow.js.map +1 -1
- package/dist/features/graph-enrichment.d.ts.map +1 -1
- package/dist/features/graph-enrichment.js +77 -70
- package/dist/features/graph-enrichment.js.map +1 -1
- package/dist/features/owners.d.ts +17 -26
- package/dist/features/owners.d.ts.map +1 -1
- package/dist/features/owners.js +120 -109
- package/dist/features/owners.js.map +1 -1
- package/dist/features/sequence.d.ts.map +1 -1
- package/dist/features/sequence.js +59 -54
- package/dist/features/sequence.js.map +1 -1
- package/dist/features/structure-query.d.ts.map +1 -1
- package/dist/features/structure-query.js +60 -60
- package/dist/features/structure-query.js.map +1 -1
- package/dist/features/structure.js +28 -36
- package/dist/features/structure.js.map +1 -1
- package/dist/graph/algorithms/leiden/optimiser.d.ts.map +1 -1
- package/dist/graph/algorithms/leiden/optimiser.js +100 -69
- package/dist/graph/algorithms/leiden/optimiser.js.map +1 -1
- package/dist/graph/classifiers/roles.d.ts.map +1 -1
- package/dist/graph/classifiers/roles.js +63 -59
- package/dist/graph/classifiers/roles.js.map +1 -1
- package/dist/infrastructure/config.d.ts +1 -1
- package/dist/infrastructure/config.d.ts.map +1 -1
- package/dist/infrastructure/config.js +1 -1
- package/dist/infrastructure/config.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +4 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/semantic-search.d.ts +1 -0
- package/dist/mcp/tools/semantic-search.d.ts.map +1 -1
- package/dist/mcp/tools/semantic-search.js +1 -0
- package/dist/mcp/tools/semantic-search.js.map +1 -1
- package/dist/presentation/cfg.d.ts.map +1 -1
- package/dist/presentation/cfg.js +44 -29
- package/dist/presentation/cfg.js.map +1 -1
- package/dist/presentation/flow.d.ts.map +1 -1
- package/dist/presentation/flow.js +58 -38
- package/dist/presentation/flow.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/types.d.ts.map +1 -1
- package/grammars/tree-sitter-erlang.wasm +0 -0
- package/grammars/tree-sitter-fsharp.wasm +0 -0
- package/grammars/tree-sitter-fsharp_signature.wasm +0 -0
- package/grammars/tree-sitter-gleam.wasm +0 -0
- package/package.json +10 -10
- package/src/ast-analysis/engine.ts +145 -61
- package/src/ast-analysis/rules/index.ts +87 -0
- package/src/ast-analysis/visitor-utils.ts +86 -46
- package/src/ast-analysis/visitors/ast-store-visitor.ts +104 -69
- package/src/ast-analysis/visitors/dataflow-visitor.ts +86 -47
- package/src/cli/commands/audit.ts +1 -1
- package/src/cli/commands/build.ts +2 -0
- package/src/cli/commands/check.ts +1 -1
- package/src/cli/commands/children.ts +1 -1
- package/src/cli/commands/diff-impact.ts +1 -1
- package/src/cli/commands/embed.ts +54 -4
- package/src/cli/commands/roles.ts +1 -1
- package/src/cli/commands/structure.ts +1 -1
- package/src/cli/shared/options.ts +1 -1
- package/src/db/connection.ts +8 -0
- package/src/domain/analysis/dependencies.ts +166 -85
- package/src/domain/analysis/fn-impact.ts +120 -50
- package/src/domain/analysis/module-map.ts +175 -140
- package/src/domain/graph/builder/helpers.ts +85 -76
- package/src/domain/graph/builder/incremental.ts +223 -131
- package/src/domain/graph/builder/pipeline.ts +32 -785
- package/src/domain/graph/builder/stages/build-edges.ts +207 -142
- package/src/domain/graph/builder/stages/build-structure.ts +115 -82
- package/src/domain/graph/builder/stages/detect-changes.ts +107 -64
- package/src/domain/graph/builder/stages/finalize.ts +72 -70
- package/src/domain/graph/builder/stages/insert-nodes.ts +154 -120
- package/src/domain/graph/builder/stages/native-db-lifecycle.ts +74 -0
- package/src/domain/graph/builder/stages/native-orchestrator.ts +942 -0
- package/src/domain/graph/builder/stages/resolve-imports.ts +79 -25
- package/src/domain/graph/cycles.ts +51 -49
- package/src/domain/graph/journal.ts +84 -69
- package/src/domain/graph/watcher.ts +29 -25
- package/src/domain/parser.ts +170 -67
- package/src/domain/search/generator.ts +132 -74
- package/src/domain/search/models.ts +75 -4
- package/src/domain/search/search/hybrid.ts +53 -42
- package/src/domain/search/search/semantic.ts +105 -65
- package/src/domain/wasm-worker-entry.ts +243 -153
- package/src/extractors/c.ts +27 -8
- package/src/extractors/cpp.ts +50 -8
- package/src/extractors/cuda.ts +90 -16
- package/src/extractors/elixir.ts +103 -4
- package/src/extractors/erlang.ts +63 -20
- package/src/extractors/fsharp.ts +104 -0
- package/src/extractors/gleam.ts +40 -39
- package/src/extractors/groovy.ts +45 -1
- package/src/extractors/haskell.ts +45 -4
- package/src/extractors/helpers.ts +205 -1
- package/src/extractors/java.ts +42 -45
- package/src/extractors/javascript.ts +44 -43
- package/src/extractors/julia.ts +191 -77
- package/src/extractors/kotlin.ts +4 -0
- package/src/extractors/objc.ts +171 -47
- package/src/extractors/python.ts +5 -3
- package/src/extractors/r.ts +104 -82
- package/src/extractors/scala.ts +24 -36
- package/src/extractors/solidity.ts +59 -78
- package/src/extractors/verilog.ts +83 -15
- package/src/features/boundaries.ts +64 -46
- package/src/features/cfg.ts +145 -74
- package/src/features/check.ts +60 -43
- package/src/features/cochange.ts +95 -72
- package/src/features/complexity.ts +134 -79
- package/src/features/dataflow.ts +57 -34
- package/src/features/flow.ts +48 -24
- package/src/features/graph-enrichment.ts +105 -70
- package/src/features/owners.ts +186 -146
- package/src/features/sequence.ts +99 -69
- package/src/features/structure-query.ts +94 -79
- package/src/features/structure.ts +56 -56
- package/src/graph/algorithms/leiden/optimiser.ts +142 -87
- package/src/graph/classifiers/roles.ts +64 -54
- package/src/infrastructure/config.ts +1 -1
- package/src/mcp/tool-registry.ts +5 -0
- package/src/mcp/tools/semantic-search.ts +2 -0
- package/src/presentation/cfg.ts +48 -32
- package/src/presentation/flow.ts +100 -52
- package/src/types.ts +16 -1
|
@@ -39,47 +39,40 @@ async function collectRankedLists(queries, customDbPath, opts, topK) {
|
|
|
39
39
|
}
|
|
40
40
|
return rankedLists;
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
function
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
entry.
|
|
65
|
-
|
|
66
|
-
if (entry.bm25Rank === null || item.rank < entry.bm25Rank) {
|
|
67
|
-
entry.bm25Score = item.bm25Score ?? null;
|
|
68
|
-
entry.bm25Rank = item.rank;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
if (entry.semanticRank === null || item.rank < entry.semanticRank) {
|
|
73
|
-
entry.similarity = item.similarity ?? null;
|
|
74
|
-
entry.semanticRank = item.rank;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
42
|
+
/** Initialise a fusion entry seeded from the first ranked item we see for a key. */
|
|
43
|
+
function createFusionEntry(item) {
|
|
44
|
+
return {
|
|
45
|
+
name: item.name,
|
|
46
|
+
kind: item.kind,
|
|
47
|
+
file: item.file,
|
|
48
|
+
line: item.line,
|
|
49
|
+
endLine: item.endLine ?? null,
|
|
50
|
+
role: item.role ?? null,
|
|
51
|
+
fileHash: item.fileHash ?? null,
|
|
52
|
+
rrfScore: 0,
|
|
53
|
+
bm25Score: null,
|
|
54
|
+
bm25Rank: null,
|
|
55
|
+
similarity: null,
|
|
56
|
+
semanticRank: null,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Merge a single ranked item into its fusion entry: update RRF and best per-source rank. */
|
|
60
|
+
function mergeRankedItem(entry, item, k) {
|
|
61
|
+
entry.rrfScore += 1 / (k + item.rank);
|
|
62
|
+
if (item.source === 'bm25') {
|
|
63
|
+
if (entry.bm25Rank === null || item.rank < entry.bm25Rank) {
|
|
64
|
+
entry.bm25Score = item.bm25Score ?? null;
|
|
65
|
+
entry.bm25Rank = item.rank;
|
|
77
66
|
}
|
|
78
67
|
}
|
|
79
|
-
|
|
80
|
-
.
|
|
81
|
-
.
|
|
82
|
-
|
|
68
|
+
else if (entry.semanticRank === null || item.rank < entry.semanticRank) {
|
|
69
|
+
entry.similarity = item.similarity ?? null;
|
|
70
|
+
entry.semanticRank = item.rank;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Flatten a fusion entry into the public-facing hybrid result shape. */
|
|
74
|
+
function toHybridResult(e) {
|
|
75
|
+
return {
|
|
83
76
|
name: e.name,
|
|
84
77
|
kind: e.kind,
|
|
85
78
|
file: e.file,
|
|
@@ -92,7 +85,23 @@ function fuseResults(rankedLists, k, limit) {
|
|
|
92
85
|
bm25Rank: e.bm25Rank,
|
|
93
86
|
similarity: e.similarity,
|
|
94
87
|
semanticRank: e.semanticRank,
|
|
95
|
-
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Reciprocal Rank Fusion: merge ranked lists into a single scored result set. */
|
|
91
|
+
function fuseResults(rankedLists, k, limit) {
|
|
92
|
+
const fusionMap = new Map();
|
|
93
|
+
for (const list of rankedLists) {
|
|
94
|
+
for (const item of list) {
|
|
95
|
+
if (!fusionMap.has(item.key)) {
|
|
96
|
+
fusionMap.set(item.key, createFusionEntry(item));
|
|
97
|
+
}
|
|
98
|
+
mergeRankedItem(fusionMap.get(item.key), item, k);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return [...fusionMap.values()]
|
|
102
|
+
.sort((a, b) => b.rrfScore - a.rrfScore)
|
|
103
|
+
.slice(0, limit)
|
|
104
|
+
.map(toHybridResult);
|
|
96
105
|
}
|
|
97
106
|
export async function hybridSearchData(query, customDbPath, opts = {}) {
|
|
98
107
|
const config = opts.config || loadConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../../src/domain/search/search/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAmD3C,wEAAwE;AACxE,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,6DAA6D;AAC7D,KAAK,UAAU,kBAAkB,CAC/B,OAAiB,EACjB,YAAgC,EAChC,IAAwB,EACxB,IAAY;IAEZ,MAAM,WAAW,GAAmB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;YACtB,WAAW,CAAC,IAAI,CACd,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;gBACpC,IAAI,EAAE,GAAG,GAAG,CAAC;gBACb,MAAM,EAAE,MAAe;gBACvB,GAAG,CAAC;aACL,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE;YAChD,GAAG,IAAI;YACP,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;SAC/B,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CACd,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;gBACpC,IAAI,EAAE,GAAG,GAAG,CAAC;gBACb,MAAM,EAAE,UAAmB;gBAC3B,GAAG,CAAC;aACL,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../../src/domain/search/search/hybrid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../../src/domain/search/search/semantic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMhF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../../src/domain/search/search/semantic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMhF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAqBD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmClC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC,CAAC;CACJ;AA8ED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAyCnC"}
|
|
@@ -4,6 +4,19 @@ import { normalizeSymbol } from '../../queries.js';
|
|
|
4
4
|
import { embed } from '../models.js';
|
|
5
5
|
import { cosineSim } from '../stores/sqlite-blob.js';
|
|
6
6
|
import { prepareSearch } from './prepare.js';
|
|
7
|
+
/** Reconstitute a stored embedding row's vector blob into a Float32Array. */
|
|
8
|
+
function rowVector(row) {
|
|
9
|
+
return new Float32Array(new Uint8Array(row.vector).buffer);
|
|
10
|
+
}
|
|
11
|
+
/** Warn when stored embeddings and the query model use different dimensions. */
|
|
12
|
+
function checkDimensionMismatch(storedDim, dim) {
|
|
13
|
+
if (storedDim && dim !== storedDim) {
|
|
14
|
+
console.log(`Warning: query model dimension (${dim}) doesn't match stored embeddings (${storedDim}).`);
|
|
15
|
+
console.log(` Re-run \`codegraph embed\` with the same model, or use --model to match.`);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
7
20
|
export async function searchData(query, customDbPath, opts = {}) {
|
|
8
21
|
const config = opts.config || loadConfig();
|
|
9
22
|
const searchCfg = config.search || {};
|
|
@@ -15,16 +28,12 @@ export async function searchData(query, customDbPath, opts = {}) {
|
|
|
15
28
|
const { db, rows, modelKey, storedDim } = prepared;
|
|
16
29
|
try {
|
|
17
30
|
const { vectors: [queryVec], dim, } = await embed([query], modelKey ?? undefined);
|
|
18
|
-
if (storedDim
|
|
19
|
-
console.log(`Warning: query model dimension (${dim}) doesn't match stored embeddings (${storedDim}).`);
|
|
20
|
-
console.log(` Re-run \`codegraph embed\` with the same model, or use --model to match.`);
|
|
31
|
+
if (checkDimensionMismatch(storedDim, dim))
|
|
21
32
|
return null;
|
|
22
|
-
}
|
|
23
33
|
const hc = new Map();
|
|
24
34
|
const results = [];
|
|
25
35
|
for (const row of rows) {
|
|
26
|
-
const
|
|
27
|
-
const sim = cosineSim(queryVec, vec);
|
|
36
|
+
const sim = cosineSim(queryVec, rowVector(row));
|
|
28
37
|
if (sim >= minScore) {
|
|
29
38
|
results.push({
|
|
30
39
|
...normalizeSymbol(row, db, hc),
|
|
@@ -39,62 +48,73 @@ export async function searchData(query, customDbPath, opts = {}) {
|
|
|
39
48
|
db.close();
|
|
40
49
|
}
|
|
41
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Emit a warning for any query pair whose embeddings are nearly identical,
|
|
53
|
+
* since RRF would over-weight matches shared between them.
|
|
54
|
+
*/
|
|
55
|
+
function warnOnSimilarQueries(queries, queryVecs, threshold) {
|
|
56
|
+
for (let i = 0; i < queryVecs.length; i++) {
|
|
57
|
+
for (let j = i + 1; j < queryVecs.length; j++) {
|
|
58
|
+
const sim = cosineSim(queryVecs[i], queryVecs[j]);
|
|
59
|
+
if (sim >= threshold) {
|
|
60
|
+
warn(`Queries "${queries[i]}" and "${queries[j]}" are very similar ` +
|
|
61
|
+
`(${(sim * 100).toFixed(0)}% cosine similarity). ` +
|
|
62
|
+
`This may bias RRF results toward their shared matches. ` +
|
|
63
|
+
`Consider using more distinct queries.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Rank stored rows for a single query, keeping only those above minScore. */
|
|
69
|
+
function rankRowsForQuery(queryVec, rowVecs, minScore) {
|
|
70
|
+
const scored = [];
|
|
71
|
+
for (let ri = 0; ri < rowVecs.length; ri++) {
|
|
72
|
+
const sim = cosineSim(queryVec, rowVecs[ri]);
|
|
73
|
+
if (sim >= minScore) {
|
|
74
|
+
scored.push({ rowIndex: ri, similarity: sim });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
scored.sort((a, b) => b.similarity - a.similarity);
|
|
78
|
+
return scored.map((item, rank) => ({ ...item, rank: rank + 1 }));
|
|
79
|
+
}
|
|
80
|
+
/** Reciprocal Rank Fusion across each query's ranked hits. */
|
|
81
|
+
function fuseRankedHits(queries, perQueryRanked, k) {
|
|
82
|
+
const fusionMap = new Map();
|
|
83
|
+
for (let qi = 0; qi < queries.length; qi++) {
|
|
84
|
+
for (const item of perQueryRanked[qi]) {
|
|
85
|
+
if (!fusionMap.has(item.rowIndex)) {
|
|
86
|
+
fusionMap.set(item.rowIndex, { rrfScore: 0, queryScores: [] });
|
|
87
|
+
}
|
|
88
|
+
const entry = fusionMap.get(item.rowIndex);
|
|
89
|
+
entry.rrfScore += 1 / (k + item.rank);
|
|
90
|
+
entry.queryScores.push({
|
|
91
|
+
query: queries[qi],
|
|
92
|
+
similarity: item.similarity,
|
|
93
|
+
rank: item.rank,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return fusionMap;
|
|
98
|
+
}
|
|
42
99
|
export async function multiSearchData(queries, customDbPath, opts = {}) {
|
|
43
100
|
const config = opts.config || loadConfig();
|
|
44
101
|
const searchCfg = config.search || {};
|
|
45
102
|
const limit = opts.limit ?? searchCfg.topK ?? 15;
|
|
46
103
|
const minScore = opts.minScore ?? searchCfg.defaultMinScore ?? 0.2;
|
|
47
104
|
const k = opts.rrfK ?? searchCfg.rrfK ?? 60;
|
|
105
|
+
const similarityWarnThreshold = searchCfg.similarityWarnThreshold ?? 0.85;
|
|
48
106
|
const prepared = prepareSearch(customDbPath, opts);
|
|
49
107
|
if (!prepared)
|
|
50
108
|
return null;
|
|
51
109
|
const { db, rows, modelKey, storedDim } = prepared;
|
|
52
110
|
try {
|
|
53
111
|
const { vectors: queryVecs, dim } = await embed(queries, modelKey ?? undefined);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
for (let j = i + 1; j < queryVecs.length; j++) {
|
|
57
|
-
const sim = cosineSim(queryVecs[i], queryVecs[j]);
|
|
58
|
-
if (sim >= SIMILARITY_WARN_THRESHOLD) {
|
|
59
|
-
warn(`Queries "${queries[i]}" and "${queries[j]}" are very similar ` +
|
|
60
|
-
`(${(sim * 100).toFixed(0)}% cosine similarity). ` +
|
|
61
|
-
`This may bias RRF results toward their shared matches. ` +
|
|
62
|
-
`Consider using more distinct queries.`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (storedDim && dim !== storedDim) {
|
|
67
|
-
console.log(`Warning: query model dimension (${dim}) doesn't match stored embeddings (${storedDim}).`);
|
|
68
|
-
console.log(` Re-run \`codegraph embed\` with the same model, or use --model to match.`);
|
|
112
|
+
warnOnSimilarQueries(queries, queryVecs, similarityWarnThreshold);
|
|
113
|
+
if (checkDimensionMismatch(storedDim, dim))
|
|
69
114
|
return null;
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
const scored = [];
|
|
74
|
-
for (let ri = 0; ri < rows.length; ri++) {
|
|
75
|
-
const sim = cosineSim(queryVecs[qi], rowVecs[ri]);
|
|
76
|
-
if (sim >= minScore) {
|
|
77
|
-
scored.push({ rowIndex: ri, similarity: sim });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
scored.sort((a, b) => b.similarity - a.similarity);
|
|
81
|
-
return scored.map((item, rank) => ({ ...item, rank: rank + 1 }));
|
|
82
|
-
});
|
|
83
|
-
const fusionMap = new Map();
|
|
84
|
-
for (let qi = 0; qi < queries.length; qi++) {
|
|
85
|
-
for (const item of perQueryRanked[qi]) {
|
|
86
|
-
if (!fusionMap.has(item.rowIndex)) {
|
|
87
|
-
fusionMap.set(item.rowIndex, { rrfScore: 0, queryScores: [] });
|
|
88
|
-
}
|
|
89
|
-
const entry = fusionMap.get(item.rowIndex);
|
|
90
|
-
entry.rrfScore += 1 / (k + item.rank);
|
|
91
|
-
entry.queryScores.push({
|
|
92
|
-
query: queries[qi],
|
|
93
|
-
similarity: item.similarity,
|
|
94
|
-
rank: item.rank,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
115
|
+
const rowVecs = rows.map(rowVector);
|
|
116
|
+
const perQueryRanked = queries.map((_q, qi) => rankRowsForQuery(queryVecs[qi], rowVecs, minScore));
|
|
117
|
+
const fusionMap = fuseRankedHits(queries, perQueryRanked, k);
|
|
98
118
|
const hc = new Map();
|
|
99
119
|
const results = [];
|
|
100
120
|
for (const [rowIndex, entry] of fusionMap) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/domain/search/search/semantic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/domain/search/search/semantic.ts"],"names":[],"mappings":"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"}
|