spec-gen-cli 1.2.2 → 1.2.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.
- package/README.md +272 -25
- package/dist/api/generate.d.ts.map +1 -1
- package/dist/api/generate.js +11 -7
- package/dist/api/generate.js.map +1 -1
- package/dist/api/run.d.ts.map +1 -1
- package/dist/api/run.js +5 -3
- package/dist/api/run.js.map +1 -1
- package/dist/api/types.d.ts +4 -4
- package/dist/api/types.d.ts.map +1 -1
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +101 -41
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +28 -23
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +353 -10
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +241 -48
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/view.d.ts.map +1 -1
- package/dist/cli/commands/view.js +33 -4
- package/dist/cli/commands/view.js.map +1 -1
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +11 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -1
- package/dist/core/analyzer/artifact-generator.js +11 -3
- package/dist/core/analyzer/artifact-generator.js.map +1 -1
- package/dist/core/analyzer/ast-chunker.d.ts +24 -0
- package/dist/core/analyzer/ast-chunker.d.ts.map +1 -0
- package/dist/core/analyzer/ast-chunker.js +198 -0
- package/dist/core/analyzer/ast-chunker.js.map +1 -0
- package/dist/core/analyzer/call-graph.d.ts +52 -5
- package/dist/core/analyzer/call-graph.d.ts.map +1 -1
- package/dist/core/analyzer/call-graph.js +769 -48
- package/dist/core/analyzer/call-graph.js.map +1 -1
- package/dist/core/analyzer/code-shaper.d.ts.map +1 -1
- package/dist/core/analyzer/code-shaper.js +5 -0
- package/dist/core/analyzer/code-shaper.js.map +1 -1
- package/dist/core/analyzer/codebase-digest.d.ts +40 -0
- package/dist/core/analyzer/codebase-digest.d.ts.map +1 -0
- package/dist/core/analyzer/codebase-digest.js +194 -0
- package/dist/core/analyzer/codebase-digest.js.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts +30 -0
- package/dist/core/analyzer/cpp-header-resolver.d.ts.map +1 -0
- package/dist/core/analyzer/cpp-header-resolver.js +71 -0
- package/dist/core/analyzer/cpp-header-resolver.js.map +1 -0
- package/dist/core/analyzer/dependency-graph.d.ts +19 -0
- package/dist/core/analyzer/dependency-graph.d.ts.map +1 -1
- package/dist/core/analyzer/dependency-graph.js +76 -0
- package/dist/core/analyzer/dependency-graph.js.map +1 -1
- package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -1
- package/dist/core/analyzer/duplicate-detector.js +7 -1
- package/dist/core/analyzer/duplicate-detector.js.map +1 -1
- package/dist/core/analyzer/function-registry-trie.d.ts +21 -0
- package/dist/core/analyzer/function-registry-trie.d.ts.map +1 -0
- package/dist/core/analyzer/function-registry-trie.js +39 -0
- package/dist/core/analyzer/function-registry-trie.js.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts +25 -0
- package/dist/core/analyzer/import-resolver-bridge.d.ts.map +1 -0
- package/dist/core/analyzer/import-resolver-bridge.js +99 -0
- package/dist/core/analyzer/import-resolver-bridge.js.map +1 -0
- package/dist/core/analyzer/signature-extractor.d.ts.map +1 -1
- package/dist/core/analyzer/signature-extractor.js +131 -3
- package/dist/core/analyzer/signature-extractor.js.map +1 -1
- package/dist/core/analyzer/subgraph-extractor.d.ts +10 -2
- package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -1
- package/dist/core/analyzer/subgraph-extractor.js +25 -7
- package/dist/core/analyzer/subgraph-extractor.js.map +1 -1
- package/dist/core/analyzer/type-inference-engine.d.ts +23 -0
- package/dist/core/analyzer/type-inference-engine.d.ts.map +1 -0
- package/dist/core/analyzer/type-inference-engine.js +130 -0
- package/dist/core/analyzer/type-inference-engine.js.map +1 -0
- package/dist/core/analyzer/vector-index.d.ts +35 -6
- package/dist/core/analyzer/vector-index.d.ts.map +1 -1
- package/dist/core/analyzer/vector-index.js +308 -54
- package/dist/core/analyzer/vector-index.js.map +1 -1
- package/dist/core/generator/spec-pipeline.d.ts +31 -11
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -1
- package/dist/core/generator/spec-pipeline.js +170 -39
- package/dist/core/generator/spec-pipeline.js.map +1 -1
- package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -1
- package/dist/core/generator/stages/stage2-entities.js +2 -1
- package/dist/core/generator/stages/stage2-entities.js.map +1 -1
- package/dist/core/generator/stages/stage3-services.d.ts.map +1 -1
- package/dist/core/generator/stages/stage3-services.js +2 -1
- package/dist/core/generator/stages/stage3-services.js.map +1 -1
- package/dist/core/generator/stages/stage4-api.d.ts.map +1 -1
- package/dist/core/generator/stages/stage4-api.js +2 -1
- package/dist/core/generator/stages/stage4-api.js.map +1 -1
- package/dist/core/generator/stages/stage5-architecture.d.ts +2 -1
- package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -1
- package/dist/core/generator/stages/stage5-architecture.js +15 -3
- package/dist/core/generator/stages/stage5-architecture.js.map +1 -1
- package/dist/core/services/chat-agent.d.ts +5 -0
- package/dist/core/services/chat-agent.d.ts.map +1 -1
- package/dist/core/services/chat-agent.js +14 -0
- package/dist/core/services/chat-agent.js.map +1 -1
- package/dist/core/services/chat-tools.d.ts.map +1 -1
- package/dist/core/services/chat-tools.js +172 -50
- package/dist/core/services/chat-tools.js.map +1 -1
- package/dist/core/services/llm-service.d.ts +23 -1
- package/dist/core/services/llm-service.d.ts.map +1 -1
- package/dist/core/services/llm-service.js +94 -2
- package/dist/core/services/llm-service.js.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.d.ts +12 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.js +138 -2
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -1
- package/dist/core/services/mcp-handlers/graph.d.ts +21 -1
- package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/graph.js +142 -2
- package/dist/core/services/mcp-handlers/graph.js.map +1 -1
- package/dist/core/services/mcp-handlers/orient.d.ts +17 -0
- package/dist/core/services/mcp-handlers/orient.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/orient.js +200 -0
- package/dist/core/services/mcp-handlers/orient.js.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts +18 -4
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/semantic.js +161 -17
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -1
- package/dist/core/services/mcp-handlers/utils.d.ts +43 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/utils.js +66 -1
- package/dist/core/services/mcp-handlers/utils.js.map +1 -1
- package/dist/core/services/mcp-watcher.d.ts +41 -0
- package/dist/core/services/mcp-watcher.d.ts.map +1 -0
- package/dist/core/services/mcp-watcher.js +177 -0
- package/dist/core/services/mcp-watcher.js.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/pipeline.d.ts +7 -0
- package/dist/types/pipeline.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/viewer/InteractiveGraphViewer.jsx +39 -10
- package/src/viewer/components/ChatPanel.jsx +8 -5
- package/src/viewer/components/ClassGraph.jsx +782 -0
- package/src/viewer/components/FlatGraph.jsx +3 -3
- package/src/viewer/utils/graph-helpers.js +9 -1
- package/src/viewer/utils/themes.js +36 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-index.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/vector-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"vector-index.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/vector-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACvC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAuKD,qBAAa,WAAW;IACtB;;;;;;;;;OASG;WACU,KAAK,CAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,EAAE,EACrB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,gBAAgB;IAC1B,iFAAiF;IACjF,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,WAAW,UAAQ,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAsIhD;;;;;;;;;OASG;WACU,MAAM,CACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC7C,IAAI,GAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,2FAA2F;QAC3F,MAAM,CAAC,EAAE,OAAO,CAAC;KACb,GACL,OAAO,CAAC,YAAY,EAAE,CAAC;IAuH1B;;;OAGG;mBACkB,SAAS;IAoD9B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAG1C"}
|
|
@@ -17,19 +17,84 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { existsSync } from 'node:fs';
|
|
19
19
|
import { join } from 'node:path';
|
|
20
|
+
import { getSkeletonContent, isSkeletonWorthIncluding } from './code-shaper.js';
|
|
20
21
|
// ============================================================================
|
|
21
22
|
// CONSTANTS
|
|
22
23
|
// ============================================================================
|
|
23
24
|
const DB_FOLDER = 'vector-index';
|
|
24
25
|
const TABLE_NAME = 'functions';
|
|
26
|
+
/** Convert a raw LanceDB row to a FunctionRecord (without the vector field). */
|
|
27
|
+
function rowToRecord(row) {
|
|
28
|
+
return {
|
|
29
|
+
id: row.id,
|
|
30
|
+
name: row.name,
|
|
31
|
+
filePath: row.filePath,
|
|
32
|
+
className: row.className,
|
|
33
|
+
language: row.language,
|
|
34
|
+
signature: row.signature,
|
|
35
|
+
docstring: row.docstring,
|
|
36
|
+
fanIn: row.fanIn,
|
|
37
|
+
fanOut: row.fanOut,
|
|
38
|
+
isHub: row.isHub,
|
|
39
|
+
isEntryPoint: row.isEntryPoint,
|
|
40
|
+
text: row.text,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function tokenize(text) {
|
|
44
|
+
// Split on non-alphanumeric, keep tokens longer than 1 char
|
|
45
|
+
return text.toLowerCase().split(/[^a-z0-9]+/).filter(t => t.length > 1);
|
|
46
|
+
}
|
|
47
|
+
function buildBm25Corpus(records) {
|
|
48
|
+
const docs = [];
|
|
49
|
+
const df = new Map();
|
|
50
|
+
let totalLen = 0;
|
|
51
|
+
for (const r of records) {
|
|
52
|
+
const tokens = tokenize(r.text);
|
|
53
|
+
const tfMap = new Map();
|
|
54
|
+
for (const t of tokens)
|
|
55
|
+
tfMap.set(t, (tfMap.get(t) ?? 0) + 1);
|
|
56
|
+
docs.push({ id: r.id, tfMap, length: tokens.length });
|
|
57
|
+
totalLen += tokens.length;
|
|
58
|
+
for (const t of tfMap.keys())
|
|
59
|
+
df.set(t, (df.get(t) ?? 0) + 1);
|
|
60
|
+
}
|
|
61
|
+
return { docs, df, avgLength: docs.length > 0 ? totalLen / docs.length : 1, N: docs.length };
|
|
62
|
+
}
|
|
63
|
+
const BM25_K1 = 1.2;
|
|
64
|
+
const BM25_B = 0.75;
|
|
65
|
+
function bm25Score(corpus, queryTokens, docIdx) {
|
|
66
|
+
const doc = corpus.docs[docIdx];
|
|
67
|
+
let score = 0;
|
|
68
|
+
for (const q of queryTokens) {
|
|
69
|
+
const df = corpus.df.get(q) ?? 0;
|
|
70
|
+
if (df === 0)
|
|
71
|
+
continue;
|
|
72
|
+
const idf = Math.log((corpus.N - df + 0.5) / (df + 0.5) + 1);
|
|
73
|
+
const tf = doc.tfMap.get(q) ?? 0;
|
|
74
|
+
const tfNorm = (tf * (BM25_K1 + 1)) /
|
|
75
|
+
(tf + BM25_K1 * (1 - BM25_B + BM25_B * (doc.length / corpus.avgLength)));
|
|
76
|
+
score += idf * tfNorm;
|
|
77
|
+
}
|
|
78
|
+
return score;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Reciprocal Rank Fusion: merges two ranked lists into a single relevance score.
|
|
82
|
+
* k=60 is the standard parameter (Cormack et al., 2009).
|
|
83
|
+
*/
|
|
84
|
+
function rrfScore(rankDense, rankSparse, k = 60) {
|
|
85
|
+
return 1 / (k + rankDense + 1) + 1 / (k + rankSparse + 1);
|
|
86
|
+
}
|
|
87
|
+
// Module-level BM25 corpus cache: avoids a full table scan on every search call
|
|
88
|
+
// when the index hasn't changed. Keyed by dbPath; invalidated when row count changes.
|
|
89
|
+
const _bm25Cache = new Map();
|
|
25
90
|
// ============================================================================
|
|
26
91
|
// HELPERS
|
|
27
92
|
// ============================================================================
|
|
28
93
|
/**
|
|
29
94
|
* Build the text to embed for a function.
|
|
30
|
-
* Combines language, path, qualified name, signature, and
|
|
95
|
+
* Combines language, path, qualified name, signature, docstring, and skeleton body.
|
|
31
96
|
*/
|
|
32
|
-
function buildText(node, signature, docstring) {
|
|
97
|
+
function buildText(node, signature, docstring, fileContents) {
|
|
33
98
|
const qualifiedName = node.className
|
|
34
99
|
? `${node.className}.${node.name}`
|
|
35
100
|
: node.name;
|
|
@@ -38,6 +103,22 @@ function buildText(node, signature, docstring) {
|
|
|
38
103
|
parts.push(signature);
|
|
39
104
|
if (docstring)
|
|
40
105
|
parts.push(docstring);
|
|
106
|
+
// Append skeleton body when file contents are available.
|
|
107
|
+
// The skeleton strips noise (logs, comments) while preserving business-logic signals
|
|
108
|
+
// (variable names, control flow, calls, return/throw). Only included when it provides
|
|
109
|
+
// meaningful reduction over the raw body (≥20% smaller).
|
|
110
|
+
if (fileContents && node.startIndex < node.endIndex) {
|
|
111
|
+
const src = fileContents.get(node.filePath);
|
|
112
|
+
if (src) {
|
|
113
|
+
const body = src.slice(node.startIndex, node.endIndex);
|
|
114
|
+
if (body.trim()) {
|
|
115
|
+
const skeleton = getSkeletonContent(body, node.language);
|
|
116
|
+
if (isSkeletonWorthIncluding(body, skeleton)) {
|
|
117
|
+
parts.push(skeleton);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
41
122
|
return parts.join('\n');
|
|
42
123
|
}
|
|
43
124
|
/**
|
|
@@ -69,18 +150,36 @@ function findSignatureEntry(node, sigIndex) {
|
|
|
69
150
|
export class VectorIndex {
|
|
70
151
|
/**
|
|
71
152
|
* Build (or rebuild) the vector index from call graph nodes + signatures.
|
|
72
|
-
*
|
|
153
|
+
*
|
|
154
|
+
* When `incremental` is true and an existing index is found, only functions
|
|
155
|
+
* whose text has changed since the last build are re-embedded. Unchanged
|
|
156
|
+
* functions reuse their cached vectors. Pass `incremental: false` (or omit
|
|
157
|
+
* when no index exists) to do a full rebuild.
|
|
158
|
+
*
|
|
159
|
+
* Returns a summary of how many functions were embedded vs reused.
|
|
73
160
|
*/
|
|
74
|
-
static async build(outputDir, nodes, signatures, hubIds, entryPointIds, embedSvc
|
|
161
|
+
static async build(outputDir, nodes, signatures, hubIds, entryPointIds, embedSvc,
|
|
162
|
+
/** Optional map of filePath → source content for skeleton-based body indexing */
|
|
163
|
+
fileContents,
|
|
164
|
+
/** When true, reuse cached vectors for unchanged functions */
|
|
165
|
+
incremental = false) {
|
|
75
166
|
const { connect } = await import('@lancedb/lancedb');
|
|
76
167
|
if (nodes.length === 0) {
|
|
77
168
|
throw new Error('No functions to index');
|
|
78
169
|
}
|
|
79
170
|
const sigIndex = buildSignatureIndex(signatures);
|
|
80
|
-
// Build records
|
|
171
|
+
// Build candidate records (without vectors)
|
|
81
172
|
const nodeIds = new Set(nodes.map(n => n.id));
|
|
82
|
-
const
|
|
83
|
-
const
|
|
173
|
+
const candidates = nodes.map(node => {
|
|
174
|
+
const cgDoc = node.docstring ?? '';
|
|
175
|
+
const cgSig = node.signature ?? '';
|
|
176
|
+
// Always check regex index as fallback — CG may miss docstrings when
|
|
177
|
+
// startIndex points inside an export_statement (past the `export` keyword),
|
|
178
|
+
// causing extractDocstringBefore to scan into the export keyword instead of
|
|
179
|
+
// reaching the JSDoc block above it.
|
|
180
|
+
const { signature: regexSig, docstring: regexDoc } = findSignatureEntry(node, sigIndex);
|
|
181
|
+
const signature = cgSig || regexSig;
|
|
182
|
+
const docstring = cgDoc || regexDoc;
|
|
84
183
|
return {
|
|
85
184
|
id: node.id,
|
|
86
185
|
name: node.name,
|
|
@@ -93,7 +192,7 @@ export class VectorIndex {
|
|
|
93
192
|
fanOut: node.fanOut,
|
|
94
193
|
isHub: hubIds.has(node.id),
|
|
95
194
|
isEntryPoint: entryPointIds.has(node.id),
|
|
96
|
-
text: buildText(node, signature, docstring),
|
|
195
|
+
text: buildText(node, signature, docstring, fileContents),
|
|
97
196
|
};
|
|
98
197
|
});
|
|
99
198
|
// Also index signature entries that have no call graph node (constants, type aliases, etc.)
|
|
@@ -107,7 +206,7 @@ export class VectorIndex {
|
|
|
107
206
|
continue;
|
|
108
207
|
const sig = entry.signature ?? '';
|
|
109
208
|
const doc = entry.docstring ?? '';
|
|
110
|
-
|
|
209
|
+
candidates.push({
|
|
111
210
|
id: syntheticId,
|
|
112
211
|
name: entry.name,
|
|
113
212
|
filePath: fsm.path,
|
|
@@ -123,69 +222,224 @@ export class VectorIndex {
|
|
|
123
222
|
});
|
|
124
223
|
}
|
|
125
224
|
}
|
|
126
|
-
//
|
|
127
|
-
const texts = records.map(r => r.text);
|
|
128
|
-
const vectors = await embedSvc.embed(texts);
|
|
129
|
-
if (vectors.length !== records.length) {
|
|
130
|
-
throw new Error(`Embedding count mismatch: expected ${records.length}, got ${vectors.length}`);
|
|
131
|
-
}
|
|
132
|
-
// Assemble final records with vectors
|
|
133
|
-
const fullRecords = records.map((r, i) => ({
|
|
134
|
-
...r,
|
|
135
|
-
vector: vectors[i],
|
|
136
|
-
}));
|
|
137
|
-
// Connect to LanceDB and write table
|
|
225
|
+
// ── Incremental cache lookup ─────────────────────────────────────────────
|
|
138
226
|
const dbPath = join(outputDir, DB_FOLDER);
|
|
227
|
+
let cachedVectors = new Map(); // id → vector
|
|
228
|
+
if (incremental && VectorIndex.exists(outputDir)) {
|
|
229
|
+
try {
|
|
230
|
+
const db = await connect(dbPath);
|
|
231
|
+
const table = await db.openTable(TABLE_NAME);
|
|
232
|
+
// Full table scan to load existing vectors
|
|
233
|
+
const existing = await table.query().toArray();
|
|
234
|
+
for (const row of existing) {
|
|
235
|
+
const id = row.id;
|
|
236
|
+
const text = row.text;
|
|
237
|
+
// Convert Arrow typed arrays (Float32Array etc.) to plain number[]
|
|
238
|
+
// so LanceDB can re-infer the schema when writing back
|
|
239
|
+
const vector = Array.from(row.vector);
|
|
240
|
+
// Cache the vector keyed by "id::text" so a text change invalidates it
|
|
241
|
+
cachedVectors.set(`${id}::${text}`, vector);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Existing index unreadable — fall back to full build
|
|
246
|
+
cachedVectors = new Map();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// ── Split into cached vs needs-embedding ────────────────────────────────
|
|
250
|
+
const toEmbed = [];
|
|
251
|
+
const toEmbedIdx = []; // index into `candidates`
|
|
252
|
+
const cachedIdx = [];
|
|
253
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
254
|
+
const r = candidates[i];
|
|
255
|
+
const cacheKey = `${r.id}::${r.text}`;
|
|
256
|
+
if (cachedVectors.has(cacheKey)) {
|
|
257
|
+
cachedIdx.push(i);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
toEmbed.push(r);
|
|
261
|
+
toEmbedIdx.push(i);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// ── Embed only changed / new functions ───────────────────────────────────
|
|
265
|
+
let newVectors = [];
|
|
266
|
+
if (toEmbed.length > 0) {
|
|
267
|
+
newVectors = await embedSvc.embed(toEmbed.map(r => r.text));
|
|
268
|
+
if (newVectors.length !== toEmbed.length) {
|
|
269
|
+
throw new Error(`Embedding count mismatch: expected ${toEmbed.length}, got ${newVectors.length}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// ── Assemble final records ───────────────────────────────────────────────
|
|
273
|
+
const fullRecords = new Array(candidates.length);
|
|
274
|
+
for (let i = 0; i < cachedIdx.length; i++) {
|
|
275
|
+
const idx = cachedIdx[i];
|
|
276
|
+
const r = candidates[idx];
|
|
277
|
+
fullRecords[idx] = { ...r, vector: cachedVectors.get(`${r.id}::${r.text}`) };
|
|
278
|
+
}
|
|
279
|
+
for (let i = 0; i < toEmbedIdx.length; i++) {
|
|
280
|
+
const idx = toEmbedIdx[i];
|
|
281
|
+
fullRecords[idx] = { ...candidates[idx], vector: newVectors[i] };
|
|
282
|
+
}
|
|
283
|
+
// ── Write table ──────────────────────────────────────────────────────────
|
|
139
284
|
const db = await connect(dbPath);
|
|
140
285
|
await db.createTable(TABLE_NAME, fullRecords, { mode: 'overwrite' });
|
|
286
|
+
return { embedded: toEmbed.length, reused: cachedIdx.length };
|
|
141
287
|
}
|
|
142
288
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
289
|
+
* Hybrid search over the index: dense (ANN) + sparse (BM25) merged via RRF.
|
|
290
|
+
*
|
|
291
|
+
* Dense recall fetches top `limit*5` candidates from the vector index.
|
|
292
|
+
* Sparse recall scores the full corpus with BM25 (cached per session).
|
|
293
|
+
* Reciprocal Rank Fusion (RRF) combines both rankings into a single list.
|
|
294
|
+
*
|
|
295
|
+
* Set `hybrid: false` to use dense-only search (original behaviour).
|
|
296
|
+
* Returns up to `limit` results sorted by relevance (highest first).
|
|
145
297
|
*/
|
|
146
298
|
static async search(outputDir, query, embedSvc, opts = {}) {
|
|
147
299
|
const { connect } = await import('@lancedb/lancedb');
|
|
148
|
-
const { limit = 10, language, minFanIn } = opts;
|
|
149
|
-
// Embed the query
|
|
150
|
-
const [queryVector] = await embedSvc.embed([query]);
|
|
151
|
-
if (!queryVector) {
|
|
152
|
-
throw new Error('Failed to embed query');
|
|
153
|
-
}
|
|
154
|
-
const dbPath = join(outputDir, DB_FOLDER);
|
|
300
|
+
const { limit = 10, language, minFanIn, hybrid = true } = opts;
|
|
155
301
|
if (!VectorIndex.exists(outputDir)) {
|
|
156
302
|
throw new Error('Vector index not found. Run "spec-gen analyze --embed" first.');
|
|
157
303
|
}
|
|
304
|
+
const dbPath = join(outputDir, DB_FOLDER);
|
|
158
305
|
const db = await connect(dbPath);
|
|
159
306
|
const table = await db.openTable(TABLE_NAME);
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
//
|
|
165
|
-
|
|
307
|
+
// ── BM25-only path (no embedding service available) ───────────────────────
|
|
308
|
+
if (!embedSvc) {
|
|
309
|
+
return VectorIndex._bm25Only(table, dbPath, query, limit, language, minFanIn);
|
|
310
|
+
}
|
|
311
|
+
// ── Dense recall ──────────────────────────────────────────────────────────
|
|
312
|
+
let queryVector;
|
|
313
|
+
try {
|
|
314
|
+
[queryVector] = await embedSvc.embed([query]);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// Embedding server unreachable — fall back to BM25
|
|
318
|
+
return VectorIndex._bm25Only(table, dbPath, query, limit, language, minFanIn);
|
|
319
|
+
}
|
|
320
|
+
if (!queryVector)
|
|
321
|
+
throw new Error('Failed to embed query');
|
|
322
|
+
const denseFetch = hybrid ? Math.min(limit * 5, 500) : Math.min(limit * 10, 1000);
|
|
323
|
+
const denseRows = await table.query().nearestTo(queryVector).limit(denseFetch).toArray();
|
|
324
|
+
const passesFilters = (row) => {
|
|
325
|
+
if (language && row.language !== language)
|
|
326
|
+
return false;
|
|
327
|
+
if (minFanIn !== undefined && minFanIn > 0 && row.fanIn < minFanIn)
|
|
328
|
+
return false;
|
|
329
|
+
return true;
|
|
330
|
+
};
|
|
331
|
+
// ── Dense-only path ───────────────────────────────────────────────────────
|
|
332
|
+
if (!hybrid) {
|
|
333
|
+
return denseRows
|
|
334
|
+
.filter(passesFilters)
|
|
335
|
+
.slice(0, limit)
|
|
336
|
+
.map(row => ({ record: rowToRecord(row), score: row._distance }));
|
|
337
|
+
}
|
|
338
|
+
// ── Sparse recall (BM25 over full corpus) ─────────────────────────────────
|
|
339
|
+
let cachedEntry = _bm25Cache.get(dbPath);
|
|
340
|
+
let allRows;
|
|
341
|
+
if (!cachedEntry) {
|
|
342
|
+
allRows = await table.query().toArray();
|
|
343
|
+
const corpus = buildBm25Corpus(allRows.map(r => ({ id: r.id, text: r.text })));
|
|
344
|
+
cachedEntry = { corpus, rowCount: allRows.length };
|
|
345
|
+
_bm25Cache.set(dbPath, cachedEntry);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
// Lightweight cache validation: re-scan only if row count has changed
|
|
349
|
+
allRows = await table.query().toArray();
|
|
350
|
+
if (allRows.length !== cachedEntry.rowCount) {
|
|
351
|
+
const corpus = buildBm25Corpus(allRows.map(r => ({ id: r.id, text: r.text })));
|
|
352
|
+
cachedEntry = { corpus, rowCount: allRows.length };
|
|
353
|
+
_bm25Cache.set(dbPath, cachedEntry);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const { corpus } = cachedEntry;
|
|
357
|
+
const queryTokens = tokenize(query);
|
|
358
|
+
// Score all corpus documents with BM25
|
|
359
|
+
const sparseScored = corpus.docs
|
|
360
|
+
.map((_, i) => ({ idx: i, score: bm25Score(corpus, queryTokens, i) }))
|
|
361
|
+
.sort((a, b) => b.score - a.score)
|
|
362
|
+
.slice(0, limit * 5);
|
|
363
|
+
// Build id→row map from allRows for sparse candidates
|
|
364
|
+
const rowById = new Map(allRows.map(r => [r.id, r]));
|
|
365
|
+
// ── RRF merge ────────────────────────────────────────────────────────────
|
|
366
|
+
const rrfMap = new Map();
|
|
367
|
+
denseRows.forEach((row, rank) => {
|
|
368
|
+
const id = row.id;
|
|
369
|
+
const entry = rrfMap.get(id) ?? { row, score: 0 };
|
|
370
|
+
entry.score += rrfScore(rank, Infinity); // sparse rank = Infinity if not in sparse list
|
|
371
|
+
rrfMap.set(id, entry);
|
|
372
|
+
});
|
|
373
|
+
sparseScored.forEach(({ idx, score: bm25 }, rank) => {
|
|
374
|
+
if (bm25 === 0)
|
|
375
|
+
return; // no BM25 signal — skip
|
|
376
|
+
const id = corpus.docs[idx].id;
|
|
377
|
+
const row = rowById.get(id);
|
|
378
|
+
if (!row)
|
|
379
|
+
return;
|
|
380
|
+
const entry = rrfMap.get(id) ?? { row, score: 0 };
|
|
381
|
+
entry.score += 1 / (60 + rank + 1);
|
|
382
|
+
rrfMap.set(id, entry);
|
|
383
|
+
});
|
|
384
|
+
// Fix dense ranks now that we know the full picture
|
|
385
|
+
// Re-compute proper RRF scores with both ranks available
|
|
386
|
+
const denseRankById = new Map(denseRows.map((r, i) => [r.id, i]));
|
|
387
|
+
const sparseRankById = new Map(sparseScored.map(({ idx }, i) => [corpus.docs[idx].id, i]));
|
|
388
|
+
const merged = [...rrfMap.values()].map(({ row }) => {
|
|
389
|
+
const id = row.id;
|
|
390
|
+
const dr = denseRankById.get(id) ?? Infinity;
|
|
391
|
+
const sr = sparseRankById.get(id) ?? Infinity;
|
|
392
|
+
return { row, score: rrfScore(dr, sr) };
|
|
393
|
+
});
|
|
394
|
+
return merged
|
|
395
|
+
.sort((a, b) => b.score - a.score)
|
|
396
|
+
.filter(({ row }) => passesFilters(row))
|
|
397
|
+
.slice(0, limit)
|
|
398
|
+
.map(({ row, score }) => ({ record: rowToRecord(row), score }));
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* BM25-only search: used when no embedding service is available.
|
|
402
|
+
* Scores the full corpus with BM25 and returns the top `limit` results.
|
|
403
|
+
*/
|
|
404
|
+
static async _bm25Only(table, dbPath, query, limit, language, minFanIn) {
|
|
405
|
+
let cachedEntry = _bm25Cache.get(dbPath);
|
|
406
|
+
let allRows;
|
|
407
|
+
if (!cachedEntry) {
|
|
408
|
+
allRows = await table.query().toArray();
|
|
409
|
+
const corpus = buildBm25Corpus(allRows.map(r => ({ id: r.id, text: r.text })));
|
|
410
|
+
cachedEntry = { corpus, rowCount: allRows.length };
|
|
411
|
+
_bm25Cache.set(dbPath, cachedEntry);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
allRows = await table.query().toArray();
|
|
415
|
+
if (allRows.length !== cachedEntry.rowCount) {
|
|
416
|
+
const corpus = buildBm25Corpus(allRows.map(r => ({ id: r.id, text: r.text })));
|
|
417
|
+
cachedEntry = { corpus, rowCount: allRows.length };
|
|
418
|
+
_bm25Cache.set(dbPath, cachedEntry);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
const { corpus } = cachedEntry;
|
|
422
|
+
const queryTokens = tokenize(query);
|
|
423
|
+
const rowById = new Map(allRows.map(r => [r.id, r]));
|
|
424
|
+
return corpus.docs
|
|
425
|
+
.map((_, i) => ({ idx: i, score: bm25Score(corpus, queryTokens, i) }))
|
|
426
|
+
.filter(({ score }) => score > 0)
|
|
427
|
+
.sort((a, b) => b.score - a.score)
|
|
428
|
+
.slice(0, limit * 3) // oversample before filtering
|
|
429
|
+
.map(({ idx, score }) => {
|
|
430
|
+
const row = rowById.get(corpus.docs[idx].id);
|
|
431
|
+
return row ? { row, score } : null;
|
|
432
|
+
})
|
|
433
|
+
.filter((x) => x !== null)
|
|
434
|
+
.filter(({ row }) => {
|
|
166
435
|
if (language && row.language !== language)
|
|
167
436
|
return false;
|
|
168
437
|
if (minFanIn !== undefined && minFanIn > 0 && row.fanIn < minFanIn)
|
|
169
438
|
return false;
|
|
170
439
|
return true;
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
record:
|
|
174
|
-
id: row.id,
|
|
175
|
-
name: row.name,
|
|
176
|
-
filePath: row.filePath,
|
|
177
|
-
className: row.className,
|
|
178
|
-
language: row.language,
|
|
179
|
-
signature: row.signature,
|
|
180
|
-
docstring: row.docstring,
|
|
181
|
-
fanIn: row.fanIn,
|
|
182
|
-
fanOut: row.fanOut,
|
|
183
|
-
isHub: row.isHub,
|
|
184
|
-
isEntryPoint: row.isEntryPoint,
|
|
185
|
-
text: row.text,
|
|
186
|
-
},
|
|
187
|
-
score: row._distance,
|
|
188
|
-
}));
|
|
440
|
+
})
|
|
441
|
+
.slice(0, limit)
|
|
442
|
+
.map(({ row, score }) => ({ record: rowToRecord(row), score }));
|
|
189
443
|
}
|
|
190
444
|
/**
|
|
191
445
|
* Returns true if a vector index has been built for this output directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-index.js","sourceRoot":"","sources":["../../../src/core/analyzer/vector-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiCjC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,SAAS,GAAG,cAAc,CAAC;AACjC,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,SAAS,CAChB,IAAkB,EAClB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS;QAClC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE;QAClC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAEd,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC,CAAC;IACvE,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,UAA8B;IAE9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuC,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAkB,EAClB,QAAkD;IAElD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACpD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,MAAM,OAAO,WAAW;IACtB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,SAAiB,EACjB,KAAqB,EACrB,UAA8B,EAC9B,MAAmB,EACnB,aAA0B,EAC1B,QAA0B;QAE1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAErD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEjD,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAqC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACjE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpE,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS;gBACT,SAAS;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;aAC5C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,4FAA4F;QAC5F,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;oBAAE,SAAS,CAAC,gCAAgC;gBACxE,8DAA8D;gBAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAChF,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,QAAQ,EAAE,GAAG,CAAC,IAAI;oBAClB,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;oBACd,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,KAAK;oBACZ,YAAY,EAAE,KAAK;oBACnB,IAAI,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;iBACpF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,EAAE,CAC9E,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC;YACJ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC,CAAC;QAEJ,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAmD,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,SAAiB,EACjB,KAAa,EACb,QAA0B,EAC1B,OAII,EAAE;QAEN,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAErD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEhD,kBAAkB;QAClB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE7C,uFAAuF;QACvF,6EAA6E;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAEpF,mFAAmF;QACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,QAAQ,IAAK,GAAG,CAAC,QAAmB,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACpE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,IAAK,GAAG,CAAC,KAAgB,GAAG,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnB,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,EAAE;gBACN,EAAE,EAAE,GAAG,CAAC,EAAY;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAc;gBACxB,QAAQ,EAAE,GAAG,CAAC,QAAkB;gBAChC,SAAS,EAAE,GAAG,CAAC,SAAmB;gBAClC,QAAQ,EAAE,GAAG,CAAC,QAAkB;gBAChC,SAAS,EAAE,GAAG,CAAC,SAAmB;gBAClC,SAAS,EAAE,GAAG,CAAC,SAAmB;gBAClC,KAAK,EAAE,GAAG,CAAC,KAAe;gBAC1B,MAAM,EAAE,GAAG,CAAC,MAAgB;gBAC5B,KAAK,EAAE,GAAG,CAAC,KAAgB;gBAC3B,YAAY,EAAE,GAAG,CAAC,YAAuB;gBACzC,IAAI,EAAE,GAAG,CAAC,IAAc;aACzB;YACD,KAAK,EAAE,GAAG,CAAC,SAAmB;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB;QAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"vector-index.js","sourceRoot":"","sources":["../../../src/core/analyzer/vector-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { LLMService } from '../services/llm-service.js';
|
|
8
8
|
import type { RepoStructure, LLMContext } from '../analyzer/artifact-generator.js';
|
|
9
9
|
import type { DependencyGraphResult } from '../analyzer/dependency-graph.js';
|
|
10
|
+
import type { RefactorReport } from '../analyzer/refactor-analyzer.js';
|
|
10
11
|
import type { PipelineResult, StageResult, PipelineOptions, PipelineContext, ServiceSubSpec } from '../../types/pipeline.js';
|
|
11
12
|
export type { ProjectCategory, ArchitecturePattern, ProjectSurveyResult, EntityProperty, EntityRelationship, Scenario, ExtractedEntity, ServiceOperation, ServiceSubSpec, ExtractedService, ExtractedEndpoint, ArchitectureLayer, ArchitectureSynthesis, EnrichedADR, PipelineResult, StageResult, PipelineOptions, PipelineContext, } from '../../types/pipeline.js';
|
|
12
13
|
/**
|
|
@@ -14,15 +15,16 @@ export type { ProjectCategory, ArchitecturePattern, ProjectSurveyResult, EntityP
|
|
|
14
15
|
*/
|
|
15
16
|
export declare class SpecGenerationPipeline implements PipelineContext {
|
|
16
17
|
llm: LLMService;
|
|
17
|
-
options: Required<Omit<PipelineOptions, 'progress'>>;
|
|
18
|
+
options: Required<Omit<PipelineOptions, 'progress' | 'semanticSearch'>>;
|
|
18
19
|
private progress?;
|
|
20
|
+
private semanticSearch?;
|
|
19
21
|
/** Set at the start of run() and used by stage methods for graph-based prompts */
|
|
20
22
|
private currentLLMContext?;
|
|
21
23
|
constructor(llm: LLMService, options: PipelineOptions);
|
|
22
24
|
/**
|
|
23
25
|
* Run the complete pipeline
|
|
24
26
|
*/
|
|
25
|
-
run(repoStructure: RepoStructure, llmContext: LLMContext, depGraph?: DependencyGraphResult): Promise<PipelineResult>;
|
|
27
|
+
run(repoStructure: RepoStructure, llmContext: LLMContext, depGraph?: DependencyGraphResult, refactorReport?: RefactorReport): Promise<PipelineResult>;
|
|
26
28
|
/**
|
|
27
29
|
* Check if a stage should run
|
|
28
30
|
*/
|
|
@@ -36,12 +38,15 @@ export declare class SpecGenerationPipeline implements PipelineContext {
|
|
|
36
38
|
chunkContent(content: string, maxChars: number, overlapLines?: number): string[];
|
|
37
39
|
/**
|
|
38
40
|
* For a large file, try to build a graph-based prompt section.
|
|
39
|
-
* Returns null when
|
|
40
|
-
* (caller should fall back to raw source chunking).
|
|
41
|
+
* Returns null when the file is small enough for raw chunking and has no graph data.
|
|
41
42
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
43
|
+
* Priority:
|
|
44
|
+
* 1. Graph section (god functions) + optional skeleton supplement — richest representation
|
|
45
|
+
* 2. Standalone skeleton for large files without god functions — avoids [PARTIAL SPEC]
|
|
46
|
+
* 3. null → caller falls back to raw AST chunking
|
|
47
|
+
*
|
|
48
|
+
* The skeleton fallback fires when content would be split (> STAGE_CHUNK_MAX_CHARS) and
|
|
49
|
+
* the skeleton achieves ≥ 20% size reduction AND fits within SKELETON_STANDALONE_MAX_CHARS.
|
|
45
50
|
*/
|
|
46
51
|
graphPromptFor(filePath: string, content?: string): string | null;
|
|
47
52
|
/**
|
|
@@ -51,15 +56,30 @@ export declare class SpecGenerationPipeline implements PipelineContext {
|
|
|
51
56
|
*/
|
|
52
57
|
generateSubSpecs(filePath: string, parentName: string, parentPurpose: string): Promise<ServiceSubSpec[]>;
|
|
53
58
|
/**
|
|
54
|
-
*
|
|
59
|
+
* Generation retrieval strategy: semantic-first → depth-N graph expansion.
|
|
60
|
+
*
|
|
61
|
+
* 1. Semantic search identifies seed files relevant to the query.
|
|
62
|
+
* 2. BFS graph expansion up to `depth` hops adds callee files so indirect
|
|
63
|
+
* implementations are not missed. Score decays by λ^hop (λ=0.6) — used
|
|
64
|
+
* only for logging; all resolved files are passed to the LLM stage.
|
|
65
|
+
*/
|
|
66
|
+
private semanticFiles;
|
|
67
|
+
/** Name-based heuristic fallback for schema/entity/type files. */
|
|
68
|
+
private heuristicSchemaFiles;
|
|
69
|
+
/** Name-based heuristic fallback for service/business-logic files. */
|
|
70
|
+
private heuristicServiceFiles;
|
|
71
|
+
/** Name-based heuristic fallback for API/route files. */
|
|
72
|
+
private heuristicApiFiles;
|
|
73
|
+
/**
|
|
74
|
+
* Get schema files — semantic-first, name-heuristic fallback.
|
|
55
75
|
*/
|
|
56
76
|
private getSchemaFiles;
|
|
57
77
|
/**
|
|
58
|
-
* Get service files
|
|
78
|
+
* Get service files — semantic-first, name-heuristic fallback.
|
|
59
79
|
*/
|
|
60
80
|
private getServiceFiles;
|
|
61
81
|
/**
|
|
62
|
-
* Get API files
|
|
82
|
+
* Get API files — semantic-first, name-heuristic fallback.
|
|
63
83
|
*/
|
|
64
84
|
private getApiFiles;
|
|
65
85
|
/**
|
|
@@ -90,5 +110,5 @@ export declare class SpecGenerationPipeline implements PipelineContext {
|
|
|
90
110
|
/**
|
|
91
111
|
* Run the spec generation pipeline
|
|
92
112
|
*/
|
|
93
|
-
export declare function runSpecGenerationPipeline(llm: LLMService, repoStructure: RepoStructure, llmContext: LLMContext, options: PipelineOptions, depGraph?: DependencyGraphResult): Promise<PipelineResult>;
|
|
113
|
+
export declare function runSpecGenerationPipeline(llm: LLMService, repoStructure: RepoStructure, llmContext: LLMContext, options: PipelineOptions, depGraph?: DependencyGraphResult, refactorReport?: RefactorReport): Promise<PipelineResult>;
|
|
94
114
|
//# sourceMappingURL=spec-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-pipeline.d.ts","sourceRoot":"","sources":["../../../src/core/generator/spec-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAGnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-pipeline.d.ts","sourceRoot":"","sources":["../../../src/core/generator/spec-pipeline.ts"],"names":[],"mappings":"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"}
|