@mduenas/codegraph 0.4.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.
- package/LICENSE +21 -0
- package/README.md +641 -0
- package/dist/bin/codegraph.d.ts +20 -0
- package/dist/bin/codegraph.d.ts.map +1 -0
- package/dist/bin/codegraph.js +704 -0
- package/dist/bin/codegraph.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +291 -0
- package/dist/config.js.map +1 -0
- package/dist/context/formatter.d.ts +30 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +244 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +86 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +402 -0
- package/dist/context/index.js.map +1 -0
- package/dist/db/index.d.ts +64 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +170 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +44 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +105 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +148 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +669 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/directory.d.ts +45 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +191 -0
- package/dist/directory.js.map +1 -0
- package/dist/errors.d.ts +136 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +219 -0
- package/dist/errors.js.map +1 -0
- package/dist/extraction/grammars.d.ts +36 -0
- package/dist/extraction/grammars.d.ts.map +1 -0
- package/dist/extraction/grammars.js +181 -0
- package/dist/extraction/grammars.js.map +1 -0
- package/dist/extraction/index.d.ts +91 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +493 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +176 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -0
- package/dist/extraction/tree-sitter.js +1798 -0
- package/dist/extraction/tree-sitter.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/queries.d.ts +106 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +355 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/traversal.d.ts +127 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +465 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/index.d.ts +496 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +818 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/banner.d.ts +40 -0
- package/dist/installer/banner.d.ts.map +1 -0
- package/dist/installer/banner.js +162 -0
- package/dist/installer/banner.js.map +1 -0
- package/dist/installer/claude-md-template.d.ts +10 -0
- package/dist/installer/claude-md-template.d.ts.map +1 -0
- package/dist/installer/claude-md-template.js +46 -0
- package/dist/installer/claude-md-template.js.map +1 -0
- package/dist/installer/config-writer.d.ts +36 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +282 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/index.d.ts +13 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +155 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/prompts.d.ts +18 -0
- package/dist/installer/prompts.d.ts.map +1 -0
- package/dist/installer/prompts.js +113 -0
- package/dist/installer/prompts.js.map +1 -0
- package/dist/mcp/index.d.ts +64 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +207 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +93 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +442 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +89 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +170 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts +8 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
- package/dist/resolution/frameworks/csharp.js +274 -0
- package/dist/resolution/frameworks/csharp.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts +8 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -0
- package/dist/resolution/frameworks/express.js +208 -0
- package/dist/resolution/frameworks/express.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts +8 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -0
- package/dist/resolution/frameworks/go.js +225 -0
- package/dist/resolution/frameworks/go.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +33 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -0
- package/dist/resolution/frameworks/index.js +113 -0
- package/dist/resolution/frameworks/index.js.map +1 -0
- package/dist/resolution/frameworks/java.d.ts +8 -0
- package/dist/resolution/frameworks/java.d.ts.map +1 -0
- package/dist/resolution/frameworks/java.js +239 -0
- package/dist/resolution/frameworks/java.js.map +1 -0
- package/dist/resolution/frameworks/laravel.d.ts +13 -0
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
- package/dist/resolution/frameworks/laravel.js +198 -0
- package/dist/resolution/frameworks/laravel.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts +10 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -0
- package/dist/resolution/frameworks/python.js +331 -0
- package/dist/resolution/frameworks/python.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts +8 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -0
- package/dist/resolution/frameworks/react.js +294 -0
- package/dist/resolution/frameworks/react.js.map +1 -0
- package/dist/resolution/frameworks/ruby.d.ts +8 -0
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
- package/dist/resolution/frameworks/ruby.js +262 -0
- package/dist/resolution/frameworks/ruby.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts +8 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -0
- package/dist/resolution/frameworks/rust.js +222 -0
- package/dist/resolution/frameworks/rust.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts +10 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift.js +486 -0
- package/dist/resolution/frameworks/swift.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +20 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -0
- package/dist/resolution/import-resolver.js +445 -0
- package/dist/resolution/import-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +72 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +301 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +27 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -0
- package/dist/resolution/name-matcher.js +210 -0
- package/dist/resolution/name-matcher.js.map +1 -0
- package/dist/resolution/types.d.ts +108 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +8 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/sync/git-hooks.d.ts +66 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +281 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +13 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +18 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/types.d.ts +410 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +165 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +116 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +295 -0
- package/dist/utils.js.map +1 -0
- package/dist/vectors/embedder.d.ts +140 -0
- package/dist/vectors/embedder.d.ts.map +1 -0
- package/dist/vectors/embedder.js +336 -0
- package/dist/vectors/embedder.js.map +1 -0
- package/dist/vectors/index.d.ts +9 -0
- package/dist/vectors/index.d.ts.map +1 -0
- package/dist/vectors/index.js +20 -0
- package/dist/vectors/index.js.map +1 -0
- package/dist/vectors/manager.d.ts +119 -0
- package/dist/vectors/manager.d.ts.map +1 -0
- package/dist/vectors/manager.js +274 -0
- package/dist/vectors/manager.js.map +1 -0
- package/dist/vectors/search.d.ts +134 -0
- package/dist/vectors/search.d.ts.map +1 -0
- package/dist/vectors/search.js +409 -0
- package/dist/vectors/search.js.map +1 -0
- package/package.json +67 -0
- package/scripts/postinstall.js +68 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Text Embedder
|
|
4
|
+
*
|
|
5
|
+
* Generates vector embeddings using the nomic-embed-text model via Transformers.js.
|
|
6
|
+
* Uses ONNX runtime under the hood for fast local inference.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.TextEmbedder = exports.EMBEDDING_DIMENSION = exports.DEFAULT_MODEL = void 0;
|
|
43
|
+
exports.createEmbedder = createEmbedder;
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const os_1 = require("os");
|
|
47
|
+
// Global model cache directory (shared across all projects)
|
|
48
|
+
const GLOBAL_MODELS_DIR = path.join((0, os_1.homedir)(), '.codegraph', 'models');
|
|
49
|
+
// Dynamic import for @xenova/transformers (ESM-only package)
|
|
50
|
+
// We use dynamic import to support CommonJS builds
|
|
51
|
+
let transformersModule = null;
|
|
52
|
+
async function getTransformers() {
|
|
53
|
+
if (!transformersModule) {
|
|
54
|
+
transformersModule = await Promise.resolve().then(() => __importStar(require('@xenova/transformers')));
|
|
55
|
+
}
|
|
56
|
+
return transformersModule;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Default model for embeddings
|
|
60
|
+
* nomic-embed-text-v1.5 produces 384-dimensional embeddings
|
|
61
|
+
*/
|
|
62
|
+
exports.DEFAULT_MODEL = 'nomic-ai/nomic-embed-text-v1.5';
|
|
63
|
+
exports.EMBEDDING_DIMENSION = 768; // nomic-embed-text-v1.5 uses 768 dimensions
|
|
64
|
+
/**
|
|
65
|
+
* Text Embedder using Transformers.js
|
|
66
|
+
*
|
|
67
|
+
* Uses the nomic-embed-text-v1.5 model to generate embeddings for code
|
|
68
|
+
* and natural language queries.
|
|
69
|
+
*/
|
|
70
|
+
class TextEmbedder {
|
|
71
|
+
modelId;
|
|
72
|
+
cacheDir;
|
|
73
|
+
pipeline = null;
|
|
74
|
+
initialized = false;
|
|
75
|
+
showProgress;
|
|
76
|
+
constructor(options = {}) {
|
|
77
|
+
this.modelId = options.modelId || exports.DEFAULT_MODEL;
|
|
78
|
+
this.cacheDir = options.cacheDir || GLOBAL_MODELS_DIR;
|
|
79
|
+
this.showProgress = options.showProgress ?? false;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Initialize the embedder by loading the model
|
|
83
|
+
*
|
|
84
|
+
* This will download the model on first use if not already cached.
|
|
85
|
+
*/
|
|
86
|
+
async initialize() {
|
|
87
|
+
if (this.initialized) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Load transformers.js dynamically (ESM-only package)
|
|
91
|
+
const { pipeline, env } = await getTransformers();
|
|
92
|
+
// Configure transformers.js to use local cache
|
|
93
|
+
env.cacheDir = this.cacheDir;
|
|
94
|
+
// Ensure cache directory exists
|
|
95
|
+
if (!fs.existsSync(this.cacheDir)) {
|
|
96
|
+
fs.mkdirSync(this.cacheDir, { recursive: true });
|
|
97
|
+
}
|
|
98
|
+
// Disable remote model checking if model is already cached
|
|
99
|
+
// This speeds up initialization significantly
|
|
100
|
+
const modelCacheExists = fs.existsSync(path.join(this.cacheDir, this.modelId.replace('/', '--')));
|
|
101
|
+
if (modelCacheExists) {
|
|
102
|
+
env.allowRemoteModels = false;
|
|
103
|
+
}
|
|
104
|
+
// Load the pipeline
|
|
105
|
+
this.pipeline = await pipeline('feature-extraction', this.modelId, {
|
|
106
|
+
progress_callback: this.showProgress
|
|
107
|
+
? (progress) => {
|
|
108
|
+
if (progress.status === 'progress' && progress.file && progress.progress) {
|
|
109
|
+
const pct = Math.round(progress.progress);
|
|
110
|
+
process.stdout.write(`\rDownloading ${progress.file}: ${pct}%`);
|
|
111
|
+
}
|
|
112
|
+
else if (progress.status === 'done') {
|
|
113
|
+
process.stdout.write('\n');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
: undefined,
|
|
117
|
+
});
|
|
118
|
+
this.initialized = true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if the embedder is initialized
|
|
122
|
+
*/
|
|
123
|
+
isInitialized() {
|
|
124
|
+
return this.initialized;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get the model ID being used
|
|
128
|
+
*/
|
|
129
|
+
getModelId() {
|
|
130
|
+
return this.modelId;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get the embedding dimension
|
|
134
|
+
*/
|
|
135
|
+
getDimension() {
|
|
136
|
+
return exports.EMBEDDING_DIMENSION;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Generate embedding for a single text
|
|
140
|
+
*
|
|
141
|
+
* @param text - Text to embed
|
|
142
|
+
* @returns Embedding result
|
|
143
|
+
*/
|
|
144
|
+
async embed(text) {
|
|
145
|
+
if (!this.initialized || !this.pipeline) {
|
|
146
|
+
throw new Error('Embedder not initialized. Call initialize() first.');
|
|
147
|
+
}
|
|
148
|
+
// Prepare text for nomic-embed-text (it expects specific prefixes)
|
|
149
|
+
const preparedText = this.prepareText(text, 'document');
|
|
150
|
+
// Generate embedding
|
|
151
|
+
const output = await this.pipeline(preparedText, {
|
|
152
|
+
pooling: 'mean',
|
|
153
|
+
normalize: true,
|
|
154
|
+
});
|
|
155
|
+
// Extract the embedding array - handle various data formats
|
|
156
|
+
const data = output.data;
|
|
157
|
+
const embedding = this.toFloat32Array(data);
|
|
158
|
+
return {
|
|
159
|
+
embedding,
|
|
160
|
+
dimension: embedding.length,
|
|
161
|
+
model: this.modelId,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Generate embedding for a query (uses different prefix)
|
|
166
|
+
*
|
|
167
|
+
* @param query - Query text to embed
|
|
168
|
+
* @returns Embedding result
|
|
169
|
+
*/
|
|
170
|
+
async embedQuery(query) {
|
|
171
|
+
if (!this.initialized || !this.pipeline) {
|
|
172
|
+
throw new Error('Embedder not initialized. Call initialize() first.');
|
|
173
|
+
}
|
|
174
|
+
// Prepare text for nomic-embed-text query
|
|
175
|
+
const preparedText = this.prepareText(query, 'search_query');
|
|
176
|
+
// Generate embedding
|
|
177
|
+
const output = await this.pipeline(preparedText, {
|
|
178
|
+
pooling: 'mean',
|
|
179
|
+
normalize: true,
|
|
180
|
+
});
|
|
181
|
+
// Extract the embedding array - handle various data formats
|
|
182
|
+
const data = output.data;
|
|
183
|
+
const embedding = this.toFloat32Array(data);
|
|
184
|
+
return {
|
|
185
|
+
embedding,
|
|
186
|
+
dimension: embedding.length,
|
|
187
|
+
model: this.modelId,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Generate embeddings for multiple texts in a batch
|
|
192
|
+
*
|
|
193
|
+
* @param texts - Array of texts to embed
|
|
194
|
+
* @param type - Type of text (document or search_query)
|
|
195
|
+
* @returns Batch embedding result
|
|
196
|
+
*/
|
|
197
|
+
async embedBatch(texts, type = 'document') {
|
|
198
|
+
if (!this.initialized || !this.pipeline) {
|
|
199
|
+
throw new Error('Embedder not initialized. Call initialize() first.');
|
|
200
|
+
}
|
|
201
|
+
if (texts.length === 0) {
|
|
202
|
+
return {
|
|
203
|
+
embeddings: [],
|
|
204
|
+
dimension: exports.EMBEDDING_DIMENSION,
|
|
205
|
+
model: this.modelId,
|
|
206
|
+
durationMs: 0,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
const startTime = Date.now();
|
|
210
|
+
// Prepare all texts
|
|
211
|
+
const preparedTexts = texts.map((t) => this.prepareText(t, type));
|
|
212
|
+
// Generate embeddings
|
|
213
|
+
const outputs = await this.pipeline(preparedTexts, {
|
|
214
|
+
pooling: 'mean',
|
|
215
|
+
normalize: true,
|
|
216
|
+
});
|
|
217
|
+
// Extract embeddings
|
|
218
|
+
const embeddings = [];
|
|
219
|
+
const dims = outputs.dims;
|
|
220
|
+
const dimension = dims[1] ?? exports.EMBEDDING_DIMENSION;
|
|
221
|
+
const data = outputs.data;
|
|
222
|
+
const flatData = this.toFloat32Array(data);
|
|
223
|
+
for (let i = 0; i < texts.length; i++) {
|
|
224
|
+
const start = i * dimension;
|
|
225
|
+
const end = start + dimension;
|
|
226
|
+
embeddings.push(flatData.slice(start, end));
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
embeddings,
|
|
230
|
+
dimension,
|
|
231
|
+
model: this.modelId,
|
|
232
|
+
durationMs: Date.now() - startTime,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Convert various array formats to Float32Array
|
|
237
|
+
*/
|
|
238
|
+
toFloat32Array(data) {
|
|
239
|
+
if (data instanceof Float32Array) {
|
|
240
|
+
return data;
|
|
241
|
+
}
|
|
242
|
+
if (Array.isArray(data)) {
|
|
243
|
+
return new Float32Array(data);
|
|
244
|
+
}
|
|
245
|
+
if (data && typeof data === 'object' && 'length' in data) {
|
|
246
|
+
// Handle TypedArray-like objects
|
|
247
|
+
const arr = data;
|
|
248
|
+
return new Float32Array(arr.length);
|
|
249
|
+
}
|
|
250
|
+
throw new Error('Unsupported data format for embedding');
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Prepare text for the nomic-embed-text model
|
|
254
|
+
*
|
|
255
|
+
* The model expects specific prefixes for different tasks:
|
|
256
|
+
* - "search_document: " for documents to be searched
|
|
257
|
+
* - "search_query: " for search queries
|
|
258
|
+
*/
|
|
259
|
+
prepareText(text, type) {
|
|
260
|
+
// Truncate very long texts (model has a max token limit)
|
|
261
|
+
const maxLength = 8192; // nomic-embed-text-v1.5 supports 8192 tokens
|
|
262
|
+
const truncatedText = text.length > maxLength ? text.slice(0, maxLength) : text;
|
|
263
|
+
// Add appropriate prefix
|
|
264
|
+
if (type === 'search_query') {
|
|
265
|
+
return `search_query: ${truncatedText}`;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
return `search_document: ${truncatedText}`;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Create text representation of a code node for embedding
|
|
273
|
+
*
|
|
274
|
+
* Combines name, signature, docstring, and code snippet into
|
|
275
|
+
* a searchable text representation.
|
|
276
|
+
*/
|
|
277
|
+
static createNodeText(node) {
|
|
278
|
+
const parts = [];
|
|
279
|
+
// Add kind and name
|
|
280
|
+
parts.push(`${node.kind}: ${node.name}`);
|
|
281
|
+
// Add qualified name if different from name
|
|
282
|
+
if (node.qualifiedName && node.qualifiedName !== node.name) {
|
|
283
|
+
parts.push(`path: ${node.qualifiedName}`);
|
|
284
|
+
}
|
|
285
|
+
// Add file path
|
|
286
|
+
parts.push(`file: ${node.filePath}`);
|
|
287
|
+
// Add signature if present
|
|
288
|
+
if (node.signature) {
|
|
289
|
+
parts.push(`signature: ${node.signature}`);
|
|
290
|
+
}
|
|
291
|
+
// Add docstring if present
|
|
292
|
+
if (node.docstring) {
|
|
293
|
+
parts.push(`documentation: ${node.docstring}`);
|
|
294
|
+
}
|
|
295
|
+
return parts.join('\n');
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Compute cosine similarity between two embeddings
|
|
299
|
+
*/
|
|
300
|
+
static cosineSimilarity(a, b) {
|
|
301
|
+
if (a.length !== b.length) {
|
|
302
|
+
throw new Error('Embeddings must have the same dimension');
|
|
303
|
+
}
|
|
304
|
+
let dotProduct = 0;
|
|
305
|
+
let normA = 0;
|
|
306
|
+
let normB = 0;
|
|
307
|
+
for (let i = 0; i < a.length; i++) {
|
|
308
|
+
const aVal = a[i];
|
|
309
|
+
const bVal = b[i];
|
|
310
|
+
dotProduct += aVal * bVal;
|
|
311
|
+
normA += aVal * aVal;
|
|
312
|
+
normB += bVal * bVal;
|
|
313
|
+
}
|
|
314
|
+
normA = Math.sqrt(normA);
|
|
315
|
+
normB = Math.sqrt(normB);
|
|
316
|
+
if (normA === 0 || normB === 0) {
|
|
317
|
+
return 0;
|
|
318
|
+
}
|
|
319
|
+
return dotProduct / (normA * normB);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Release resources
|
|
323
|
+
*/
|
|
324
|
+
dispose() {
|
|
325
|
+
this.pipeline = null;
|
|
326
|
+
this.initialized = false;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
exports.TextEmbedder = TextEmbedder;
|
|
330
|
+
/**
|
|
331
|
+
* Create a text embedder instance
|
|
332
|
+
*/
|
|
333
|
+
function createEmbedder(options) {
|
|
334
|
+
return new TextEmbedder(options);
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/vectors/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vectors Module
|
|
3
|
+
*
|
|
4
|
+
* Provides text embedding and vector similarity search for semantic code search.
|
|
5
|
+
*/
|
|
6
|
+
export { TextEmbedder, createEmbedder, DEFAULT_MODEL, EMBEDDING_DIMENSION, EmbedderOptions, EmbeddingResult, BatchEmbeddingResult, } from './embedder';
|
|
7
|
+
export { VectorSearchManager, createVectorSearch, VectorSearchOptions, } from './search';
|
|
8
|
+
export { VectorManager, createVectorManager, VectorManagerOptions, EmbeddingProgress, } from './manager';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vectors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vectors Module
|
|
4
|
+
*
|
|
5
|
+
* Provides text embedding and vector similarity search for semantic code search.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createVectorManager = exports.VectorManager = exports.createVectorSearch = exports.VectorSearchManager = exports.EMBEDDING_DIMENSION = exports.DEFAULT_MODEL = exports.createEmbedder = exports.TextEmbedder = void 0;
|
|
9
|
+
var embedder_1 = require("./embedder");
|
|
10
|
+
Object.defineProperty(exports, "TextEmbedder", { enumerable: true, get: function () { return embedder_1.TextEmbedder; } });
|
|
11
|
+
Object.defineProperty(exports, "createEmbedder", { enumerable: true, get: function () { return embedder_1.createEmbedder; } });
|
|
12
|
+
Object.defineProperty(exports, "DEFAULT_MODEL", { enumerable: true, get: function () { return embedder_1.DEFAULT_MODEL; } });
|
|
13
|
+
Object.defineProperty(exports, "EMBEDDING_DIMENSION", { enumerable: true, get: function () { return embedder_1.EMBEDDING_DIMENSION; } });
|
|
14
|
+
var search_1 = require("./search");
|
|
15
|
+
Object.defineProperty(exports, "VectorSearchManager", { enumerable: true, get: function () { return search_1.VectorSearchManager; } });
|
|
16
|
+
Object.defineProperty(exports, "createVectorSearch", { enumerable: true, get: function () { return search_1.createVectorSearch; } });
|
|
17
|
+
var manager_1 = require("./manager");
|
|
18
|
+
Object.defineProperty(exports, "VectorManager", { enumerable: true, get: function () { return manager_1.VectorManager; } });
|
|
19
|
+
Object.defineProperty(exports, "createVectorManager", { enumerable: true, get: function () { return manager_1.createVectorManager; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vectors/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAQoB;AAPlB,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,yGAAA,aAAa,OAAA;AACb,+GAAA,mBAAmB,OAAA;AAMrB,mCAIkB;AAHhB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAIpB,qCAKmB;AAJjB,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector Manager
|
|
3
|
+
*
|
|
4
|
+
* High-level manager that coordinates embedding generation and vector search.
|
|
5
|
+
*/
|
|
6
|
+
import Database from 'better-sqlite3';
|
|
7
|
+
import { Node, SearchResult, SearchOptions } from '../types';
|
|
8
|
+
import { EmbedderOptions } from './embedder';
|
|
9
|
+
import { QueryBuilder } from '../db/queries';
|
|
10
|
+
/**
|
|
11
|
+
* Progress callback for embedding generation
|
|
12
|
+
*/
|
|
13
|
+
export interface EmbeddingProgress {
|
|
14
|
+
/** Current node index */
|
|
15
|
+
current: number;
|
|
16
|
+
/** Total nodes to embed */
|
|
17
|
+
total: number;
|
|
18
|
+
/** Current node being embedded */
|
|
19
|
+
nodeName?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for the vector manager
|
|
23
|
+
*/
|
|
24
|
+
export interface VectorManagerOptions {
|
|
25
|
+
/** Embedder options */
|
|
26
|
+
embedder?: EmbedderOptions;
|
|
27
|
+
/** Node kinds to embed (default: functions, methods, classes, interfaces) */
|
|
28
|
+
nodeKinds?: Node['kind'][];
|
|
29
|
+
/** Batch size for embedding generation */
|
|
30
|
+
batchSize?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Vector Manager
|
|
34
|
+
*
|
|
35
|
+
* Provides high-level interface for semantic search:
|
|
36
|
+
* - Generates embeddings for code nodes
|
|
37
|
+
* - Stores embeddings in the database
|
|
38
|
+
* - Performs semantic similarity search
|
|
39
|
+
*/
|
|
40
|
+
export declare class VectorManager {
|
|
41
|
+
private embedder;
|
|
42
|
+
private searchManager;
|
|
43
|
+
private queries;
|
|
44
|
+
private nodeKinds;
|
|
45
|
+
private batchSize;
|
|
46
|
+
private initialized;
|
|
47
|
+
constructor(db: Database.Database, queries: QueryBuilder, options?: VectorManagerOptions);
|
|
48
|
+
/**
|
|
49
|
+
* Initialize the vector manager
|
|
50
|
+
*
|
|
51
|
+
* Loads the embedding model and initializes vector search.
|
|
52
|
+
*/
|
|
53
|
+
initialize(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if the vector manager is initialized
|
|
56
|
+
*/
|
|
57
|
+
isInitialized(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Generate embeddings for all eligible nodes
|
|
60
|
+
*
|
|
61
|
+
* @param onProgress - Optional progress callback
|
|
62
|
+
* @returns Number of nodes embedded
|
|
63
|
+
*/
|
|
64
|
+
embedAllNodes(onProgress?: (progress: EmbeddingProgress) => void): Promise<number>;
|
|
65
|
+
/**
|
|
66
|
+
* Generate embedding for a single node
|
|
67
|
+
*
|
|
68
|
+
* @param node - Node to embed
|
|
69
|
+
*/
|
|
70
|
+
embedNode(node: Node): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Semantic search for nodes matching a query
|
|
73
|
+
*
|
|
74
|
+
* @param query - Natural language query
|
|
75
|
+
* @param options - Search options
|
|
76
|
+
* @returns Array of search results with similarity scores
|
|
77
|
+
*/
|
|
78
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Find nodes similar to a given node
|
|
81
|
+
*
|
|
82
|
+
* @param nodeId - ID of the node to find similar nodes for
|
|
83
|
+
* @param options - Search options
|
|
84
|
+
* @returns Array of similar nodes with similarity scores
|
|
85
|
+
*/
|
|
86
|
+
findSimilar(nodeId: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Delete embedding for a node
|
|
89
|
+
*
|
|
90
|
+
* @param nodeId - ID of the node
|
|
91
|
+
*/
|
|
92
|
+
deleteNodeEmbedding(nodeId: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get statistics about vector storage
|
|
95
|
+
*/
|
|
96
|
+
getStats(): {
|
|
97
|
+
totalVectors: number;
|
|
98
|
+
vssEnabled: boolean;
|
|
99
|
+
modelId: string;
|
|
100
|
+
dimension: number;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Clear all vectors
|
|
104
|
+
*/
|
|
105
|
+
clear(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Rebuild the VSS index
|
|
108
|
+
*/
|
|
109
|
+
rebuildIndex(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Release resources
|
|
112
|
+
*/
|
|
113
|
+
dispose(): void;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a vector manager
|
|
117
|
+
*/
|
|
118
|
+
export declare function createVectorManager(db: Database.Database, queries: QueryBuilder, options?: VectorManagerOptions): VectorManager;
|
|
119
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/vectors/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAgC,eAAe,EAAuB,MAAM,YAAY,CAAC;AAEhG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAE3B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAG1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,oBAAyB;IASpC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;;OAKG;IACG,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IA2DxF;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0CjF;;;;;;OAMG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA8DvF;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB;IASD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa,CAEf"}
|