dep-context-mcp 1.0.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/README.md +380 -0
- package/dist/analysis/relationships.d.ts +25 -0
- package/dist/analysis/relationships.d.ts.map +1 -0
- package/dist/analysis/relationships.js +26 -0
- package/dist/analysis/relationships.js.map +1 -0
- package/dist/build-info.d.ts +15 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +24 -0
- package/dist/build-info.js.map +1 -0
- package/dist/cache/manager.d.ts +19 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +131 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cache/registry.d.ts +44 -0
- package/dist/cache/registry.d.ts.map +1 -0
- package/dist/cache/registry.js +92 -0
- package/dist/cache/registry.js.map +1 -0
- package/dist/config/loader.d.ts +62 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +193 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/extraction/examples.d.ts +22 -0
- package/dist/extraction/examples.d.ts.map +1 -0
- package/dist/extraction/examples.js +109 -0
- package/dist/extraction/examples.js.map +1 -0
- package/dist/extraction/external-resolver.d.ts +26 -0
- package/dist/extraction/external-resolver.d.ts.map +1 -0
- package/dist/extraction/external-resolver.js +79 -0
- package/dist/extraction/external-resolver.js.map +1 -0
- package/dist/extraction/import-tracker.d.ts +58 -0
- package/dist/extraction/import-tracker.d.ts.map +1 -0
- package/dist/extraction/import-tracker.js +113 -0
- package/dist/extraction/import-tracker.js.map +1 -0
- package/dist/extraction/readme.d.ts +19 -0
- package/dist/extraction/readme.d.ts.map +1 -0
- package/dist/extraction/readme.js +79 -0
- package/dist/extraction/readme.js.map +1 -0
- package/dist/extraction/snapshot.d.ts +32 -0
- package/dist/extraction/snapshot.d.ts.map +1 -0
- package/dist/extraction/snapshot.js +258 -0
- package/dist/extraction/snapshot.js.map +1 -0
- package/dist/extraction/typescript.d.ts +104 -0
- package/dist/extraction/typescript.d.ts.map +1 -0
- package/dist/extraction/typescript.js +647 -0
- package/dist/extraction/typescript.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +329 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver/package.d.ts +62 -0
- package/dist/resolver/package.d.ts.map +1 -0
- package/dist/resolver/package.js +334 -0
- package/dist/resolver/package.js.map +1 -0
- package/dist/tools/get-dependency.d.ts +55 -0
- package/dist/tools/get-dependency.d.ts.map +1 -0
- package/dist/tools/get-dependency.js +105 -0
- package/dist/tools/get-dependency.js.map +1 -0
- package/dist/tools/index-dependencies.d.ts +51 -0
- package/dist/tools/index-dependencies.d.ts.map +1 -0
- package/dist/tools/index-dependencies.js +90 -0
- package/dist/tools/index-dependencies.js.map +1 -0
- package/dist/tools/index-status.d.ts +36 -0
- package/dist/tools/index-status.d.ts.map +1 -0
- package/dist/tools/index-status.js +45 -0
- package/dist/tools/index-status.js.map +1 -0
- package/dist/tools/list.d.ts +48 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/list.js +55 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/refresh.d.ts +59 -0
- package/dist/tools/refresh.d.ts.map +1 -0
- package/dist/tools/refresh.js +109 -0
- package/dist/tools/refresh.js.map +1 -0
- package/dist/tools/relationships.d.ts +41 -0
- package/dist/tools/relationships.d.ts.map +1 -0
- package/dist/tools/relationships.js +36 -0
- package/dist/tools/relationships.js.map +1 -0
- package/dist/tools/search-codebase.d.ts +64 -0
- package/dist/tools/search-codebase.d.ts.map +1 -0
- package/dist/tools/search-codebase.js +117 -0
- package/dist/tools/search-codebase.js.map +1 -0
- package/dist/tools/search.d.ts +37 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +77 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/vector/chroma.d.ts +38 -0
- package/dist/vector/chroma.d.ts.map +1 -0
- package/dist/vector/chroma.js +69 -0
- package/dist/vector/chroma.js.map +1 -0
- package/dist/vector/chunker.d.ts +29 -0
- package/dist/vector/chunker.d.ts.map +1 -0
- package/dist/vector/chunker.js +205 -0
- package/dist/vector/chunker.js.map +1 -0
- package/dist/vector/embeddings.d.ts +36 -0
- package/dist/vector/embeddings.d.ts.map +1 -0
- package/dist/vector/embeddings.js +106 -0
- package/dist/vector/embeddings.js.map +1 -0
- package/dist/vector/file-store.d.ts +10 -0
- package/dist/vector/file-store.d.ts.map +1 -0
- package/dist/vector/file-store.js +80 -0
- package/dist/vector/file-store.js.map +1 -0
- package/dist/vector/index-manager.d.ts +39 -0
- package/dist/vector/index-manager.d.ts.map +1 -0
- package/dist/vector/index-manager.js +105 -0
- package/dist/vector/index-manager.js.map +1 -0
- package/dist/vector/provider-factory.d.ts +23 -0
- package/dist/vector/provider-factory.d.ts.map +1 -0
- package/dist/vector/provider-factory.js +50 -0
- package/dist/vector/provider-factory.js.map +1 -0
- package/dist/vector/storage-factory.d.ts +17 -0
- package/dist/vector/storage-factory.d.ts.map +1 -0
- package/dist/vector/storage-factory.js +55 -0
- package/dist/vector/storage-factory.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic chunker - breaks extracted API info into embeddable chunks
|
|
3
|
+
*/
|
|
4
|
+
// Rough token estimate: ~4 chars per token
|
|
5
|
+
function estimateTokens(text) {
|
|
6
|
+
return Math.ceil(text.length / 4);
|
|
7
|
+
}
|
|
8
|
+
// Track used IDs to handle overloads
|
|
9
|
+
const usedIds = new Map();
|
|
10
|
+
function createChunkId(packageName, contentType, name) {
|
|
11
|
+
const baseId = `${packageName}:${contentType}:${name}`;
|
|
12
|
+
const count = usedIds.get(baseId) || 0;
|
|
13
|
+
usedIds.set(baseId, count + 1);
|
|
14
|
+
return count === 0 ? baseId : `${baseId}:${count}`;
|
|
15
|
+
}
|
|
16
|
+
function resetIdTracking() {
|
|
17
|
+
usedIds.clear();
|
|
18
|
+
}
|
|
19
|
+
function findExampleForExport(name, examples) {
|
|
20
|
+
return examples.find(e => e.associatedExports.includes(name));
|
|
21
|
+
}
|
|
22
|
+
function formatFunctionChunk(fn, example) {
|
|
23
|
+
const lines = [
|
|
24
|
+
`Function: ${fn.name}`,
|
|
25
|
+
'',
|
|
26
|
+
`Signature: ${fn.signature}`,
|
|
27
|
+
];
|
|
28
|
+
if (fn.jsDoc) {
|
|
29
|
+
lines.push('', fn.jsDoc);
|
|
30
|
+
}
|
|
31
|
+
if (fn.parameters.length > 0) {
|
|
32
|
+
lines.push('', 'Parameters:');
|
|
33
|
+
for (const p of fn.parameters) {
|
|
34
|
+
const opt = p.optional ? ' (optional)' : '';
|
|
35
|
+
lines.push(` - ${p.name}: ${p.type}${opt}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
lines.push('', `Returns: ${fn.returnType}`);
|
|
39
|
+
if (example) {
|
|
40
|
+
lines.push('', 'Example:', '```', example.code, '```');
|
|
41
|
+
}
|
|
42
|
+
return lines.join('\n');
|
|
43
|
+
}
|
|
44
|
+
function formatClassChunk(cls) {
|
|
45
|
+
const lines = [
|
|
46
|
+
`Class: ${cls.name}`,
|
|
47
|
+
];
|
|
48
|
+
if (cls.jsDoc) {
|
|
49
|
+
lines.push('', cls.jsDoc);
|
|
50
|
+
}
|
|
51
|
+
if (cls.constructorSignature) {
|
|
52
|
+
lines.push('', `Constructor: ${cls.constructorSignature}`);
|
|
53
|
+
}
|
|
54
|
+
if (cls.properties.length > 0) {
|
|
55
|
+
lines.push('', 'Properties:');
|
|
56
|
+
for (const p of cls.properties) {
|
|
57
|
+
const ro = p.readonly ? 'readonly ' : '';
|
|
58
|
+
const opt = p.optional ? '?' : '';
|
|
59
|
+
lines.push(` - ${ro}${p.name}${opt}: ${p.type}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (cls.methods.length > 0) {
|
|
63
|
+
lines.push('', `Methods: ${cls.methods.map(m => m.name).join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
function formatMethodChunk(cls, method) {
|
|
68
|
+
const staticPrefix = method.isStatic ? 'static ' : '';
|
|
69
|
+
const asyncPrefix = method.isAsync ? 'async ' : '';
|
|
70
|
+
return [
|
|
71
|
+
`Method: ${cls.name}.${method.name}`,
|
|
72
|
+
'',
|
|
73
|
+
`Signature: ${staticPrefix}${asyncPrefix}${method.signature}`,
|
|
74
|
+
method.jsDoc ? `\n${method.jsDoc}` : ''
|
|
75
|
+
].filter(Boolean).join('\n');
|
|
76
|
+
}
|
|
77
|
+
function formatInterfaceChunk(iface) {
|
|
78
|
+
const lines = [
|
|
79
|
+
`Interface: ${iface.name}`,
|
|
80
|
+
];
|
|
81
|
+
if (iface.jsDoc) {
|
|
82
|
+
lines.push('', iface.jsDoc);
|
|
83
|
+
}
|
|
84
|
+
if (iface.properties.length > 0) {
|
|
85
|
+
lines.push('', 'Properties:');
|
|
86
|
+
for (const p of iface.properties) {
|
|
87
|
+
const ro = p.readonly ? 'readonly ' : '';
|
|
88
|
+
const opt = p.optional ? '?' : '';
|
|
89
|
+
lines.push(` - ${ro}${p.name}${opt}: ${p.type}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (iface.methods.length > 0) {
|
|
93
|
+
lines.push('', 'Methods:');
|
|
94
|
+
for (const m of iface.methods) {
|
|
95
|
+
lines.push(` - ${m.signature}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n');
|
|
99
|
+
}
|
|
100
|
+
function formatTypeChunk(type) {
|
|
101
|
+
const lines = [
|
|
102
|
+
`Type: ${type.name}`,
|
|
103
|
+
'',
|
|
104
|
+
`Definition: ${type.definition}`,
|
|
105
|
+
];
|
|
106
|
+
if (type.jsDoc) {
|
|
107
|
+
lines.push('', type.jsDoc);
|
|
108
|
+
}
|
|
109
|
+
return lines.join('\n');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Chunks extraction results into embeddable pieces
|
|
113
|
+
*/
|
|
114
|
+
export function chunkExtraction(extraction, options) {
|
|
115
|
+
const { packageName, version, maxTokens = 500, examples = [] } = options;
|
|
116
|
+
const chunks = [];
|
|
117
|
+
// Reset ID tracking for this extraction
|
|
118
|
+
resetIdTracking();
|
|
119
|
+
// Chunk functions
|
|
120
|
+
for (const fn of extraction.functions) {
|
|
121
|
+
const example = findExampleForExport(fn.name, examples);
|
|
122
|
+
const content = formatFunctionChunk(fn, example);
|
|
123
|
+
chunks.push({
|
|
124
|
+
id: createChunkId(packageName, 'function', fn.name),
|
|
125
|
+
content,
|
|
126
|
+
metadata: {
|
|
127
|
+
packageName,
|
|
128
|
+
version,
|
|
129
|
+
contentType: 'function',
|
|
130
|
+
name: fn.name,
|
|
131
|
+
signature: fn.signature
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Chunk classes
|
|
136
|
+
for (const cls of extraction.classes) {
|
|
137
|
+
// Class overview chunk
|
|
138
|
+
const classContent = formatClassChunk(cls);
|
|
139
|
+
chunks.push({
|
|
140
|
+
id: createChunkId(packageName, 'class', cls.name),
|
|
141
|
+
content: classContent,
|
|
142
|
+
metadata: {
|
|
143
|
+
packageName,
|
|
144
|
+
version,
|
|
145
|
+
contentType: 'class',
|
|
146
|
+
name: cls.name,
|
|
147
|
+
signature: cls.constructorSignature
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// Individual method chunks for large methods
|
|
151
|
+
for (const method of cls.methods) {
|
|
152
|
+
const methodContent = formatMethodChunk(cls, method);
|
|
153
|
+
if (estimateTokens(methodContent) > 100) { // Only chunk substantial methods
|
|
154
|
+
chunks.push({
|
|
155
|
+
id: createChunkId(packageName, 'method', `${cls.name}.${method.name}`),
|
|
156
|
+
content: methodContent,
|
|
157
|
+
metadata: {
|
|
158
|
+
packageName,
|
|
159
|
+
version,
|
|
160
|
+
contentType: 'method',
|
|
161
|
+
name: `${cls.name}.${method.name}`,
|
|
162
|
+
signature: method.signature
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Chunk interfaces
|
|
169
|
+
for (const iface of extraction.interfaces) {
|
|
170
|
+
const content = formatInterfaceChunk(iface);
|
|
171
|
+
// Skip very large interfaces (likely internal)
|
|
172
|
+
if (estimateTokens(content) > maxTokens * 2)
|
|
173
|
+
continue;
|
|
174
|
+
chunks.push({
|
|
175
|
+
id: createChunkId(packageName, 'interface', iface.name),
|
|
176
|
+
content,
|
|
177
|
+
metadata: {
|
|
178
|
+
packageName,
|
|
179
|
+
version,
|
|
180
|
+
contentType: 'interface',
|
|
181
|
+
name: iface.name
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// Chunk types
|
|
186
|
+
for (const type of extraction.types) {
|
|
187
|
+
const content = formatTypeChunk(type);
|
|
188
|
+
// Skip very large type definitions
|
|
189
|
+
if (estimateTokens(content) > maxTokens * 2)
|
|
190
|
+
continue;
|
|
191
|
+
chunks.push({
|
|
192
|
+
id: createChunkId(packageName, 'type', type.name),
|
|
193
|
+
content,
|
|
194
|
+
metadata: {
|
|
195
|
+
packageName,
|
|
196
|
+
version,
|
|
197
|
+
contentType: 'type',
|
|
198
|
+
name: type.name,
|
|
199
|
+
signature: type.definition
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return chunks;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/vector/chunker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding providers - abstractions for generating text embeddings
|
|
3
|
+
*/
|
|
4
|
+
export interface EmbeddingProvider {
|
|
5
|
+
embed(text: string): Promise<number[]>;
|
|
6
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
7
|
+
readonly dimensions: number;
|
|
8
|
+
}
|
|
9
|
+
export interface OpenAIConfig {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
model?: 'text-embedding-3-small' | 'text-embedding-3-large';
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface OllamaConfig {
|
|
15
|
+
model?: string;
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* OpenAI embedding provider
|
|
20
|
+
*/
|
|
21
|
+
export declare function createOpenAIProvider(config: OpenAIConfig): EmbeddingProvider;
|
|
22
|
+
/**
|
|
23
|
+
* Ollama embedding provider
|
|
24
|
+
*/
|
|
25
|
+
export declare function createOllamaProvider(config?: OllamaConfig): EmbeddingProvider;
|
|
26
|
+
export type ProviderType = 'openai' | 'ollama';
|
|
27
|
+
export interface CreateProviderOptions {
|
|
28
|
+
type: ProviderType;
|
|
29
|
+
openai?: OpenAIConfig;
|
|
30
|
+
ollama?: OllamaConfig;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Factory function to create embedding provider
|
|
34
|
+
*/
|
|
35
|
+
export declare function createEmbeddingProvider(options: CreateProviderOptions): EmbeddingProvider;
|
|
36
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/vector/embeddings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,wBAAwB,GAAG,wBAAwB,CAAA;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAkD5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,YAAiB,GAAG,iBAAiB,CAyCjF;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE9C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAazF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding providers - abstractions for generating text embeddings
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* OpenAI embedding provider
|
|
6
|
+
*/
|
|
7
|
+
export function createOpenAIProvider(config) {
|
|
8
|
+
const model = config.model ?? 'text-embedding-3-small';
|
|
9
|
+
const baseUrl = config.baseUrl ?? 'https://api.openai.com/v1';
|
|
10
|
+
const dimensions = model === 'text-embedding-3-large' ? 3072 : 1536;
|
|
11
|
+
async function embed(text) {
|
|
12
|
+
const result = await embedBatch([text]);
|
|
13
|
+
return result[0];
|
|
14
|
+
}
|
|
15
|
+
async function embedBatch(texts) {
|
|
16
|
+
let response;
|
|
17
|
+
try {
|
|
18
|
+
response = await fetch(`${baseUrl}/embeddings`, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
'Authorization': `Bearer ${config.apiKey}`
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
model,
|
|
26
|
+
input: texts
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
throw new Error(`OpenAI API not reachable. Check your network connection.`);
|
|
32
|
+
}
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
const error = await response.text();
|
|
35
|
+
if (response.status === 401) {
|
|
36
|
+
throw new Error(`OpenAI API key invalid or expired. Check your OPENAI_API_KEY.`);
|
|
37
|
+
}
|
|
38
|
+
if (response.status === 429) {
|
|
39
|
+
throw new Error(`OpenAI rate limit exceeded. Wait and retry.`);
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`OpenAI error: ${response.status} ${error}`);
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
// Sort by index to maintain order
|
|
45
|
+
return data.data
|
|
46
|
+
.sort((a, b) => a.index - b.index)
|
|
47
|
+
.map(d => d.embedding);
|
|
48
|
+
}
|
|
49
|
+
return { embed, embedBatch, dimensions };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Ollama embedding provider
|
|
53
|
+
*/
|
|
54
|
+
export function createOllamaProvider(config = {}) {
|
|
55
|
+
const model = config.model ?? 'nomic-embed-text';
|
|
56
|
+
const baseUrl = config.baseUrl ?? 'http://localhost:11434';
|
|
57
|
+
// nomic-embed-text produces 768-dim vectors
|
|
58
|
+
const dimensions = model === 'nomic-embed-text' ? 768 : 768;
|
|
59
|
+
async function embed(text) {
|
|
60
|
+
let response;
|
|
61
|
+
try {
|
|
62
|
+
response = await fetch(`${baseUrl}/api/embeddings`, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: { 'Content-Type': 'application/json' },
|
|
65
|
+
body: JSON.stringify({ model, prompt: text })
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
throw new Error(`Ollama not responding at ${baseUrl}. Is Ollama running? Try: ollama serve`);
|
|
70
|
+
}
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const error = await response.text();
|
|
73
|
+
if (response.status === 404) {
|
|
74
|
+
throw new Error(`Ollama model '${model}' not found. Try: ollama pull ${model}`);
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`Ollama error: ${response.status} ${error}`);
|
|
77
|
+
}
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
return data.embedding;
|
|
80
|
+
}
|
|
81
|
+
async function embedBatch(texts) {
|
|
82
|
+
// Ollama doesn't support batch, so we do sequential calls
|
|
83
|
+
const results = [];
|
|
84
|
+
for (const text of texts) {
|
|
85
|
+
results.push(await embed(text));
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
return { embed, embedBatch, dimensions };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Factory function to create embedding provider
|
|
93
|
+
*/
|
|
94
|
+
export function createEmbeddingProvider(options) {
|
|
95
|
+
if (options.type === 'openai') {
|
|
96
|
+
if (!options.openai?.apiKey) {
|
|
97
|
+
throw new Error('OpenAI API key required');
|
|
98
|
+
}
|
|
99
|
+
return createOpenAIProvider(options.openai);
|
|
100
|
+
}
|
|
101
|
+
if (options.type === 'ollama') {
|
|
102
|
+
return createOllamaProvider(options.ollama);
|
|
103
|
+
}
|
|
104
|
+
throw new Error(`Unknown provider type: ${options.type}`);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/vector/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based vector storage - no external dependencies
|
|
3
|
+
* Uses brute-force cosine similarity (fine for <10k vectors)
|
|
4
|
+
*/
|
|
5
|
+
import type { VectorStore } from './chroma.js';
|
|
6
|
+
export interface FileStoreConfig {
|
|
7
|
+
path: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createFileStore(config: FileStoreConfig): Promise<VectorStore>;
|
|
10
|
+
//# sourceMappingURL=file-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/vector/file-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAA8C,MAAM,aAAa,CAAA;AAuB1F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAsEnF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based vector storage - no external dependencies
|
|
3
|
+
* Uses brute-force cosine similarity (fine for <10k vectors)
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { dirname } from 'node:path';
|
|
8
|
+
function cosineSimilarity(a, b) {
|
|
9
|
+
let dot = 0, normA = 0, normB = 0;
|
|
10
|
+
for (let i = 0; i < a.length; i++) {
|
|
11
|
+
dot += a[i] * b[i];
|
|
12
|
+
normA += a[i] * a[i];
|
|
13
|
+
normB += b[i] * b[i];
|
|
14
|
+
}
|
|
15
|
+
return dot / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
16
|
+
}
|
|
17
|
+
export async function createFileStore(config) {
|
|
18
|
+
const filePath = config.path;
|
|
19
|
+
let data = { documents: [] };
|
|
20
|
+
// Load existing data
|
|
21
|
+
if (existsSync(filePath)) {
|
|
22
|
+
try {
|
|
23
|
+
const content = await readFile(filePath, 'utf-8');
|
|
24
|
+
data = JSON.parse(content);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
data = { documents: [] };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function save() {
|
|
31
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
32
|
+
await writeFile(filePath, JSON.stringify(data));
|
|
33
|
+
}
|
|
34
|
+
async function add(docs) {
|
|
35
|
+
if (docs.length === 0)
|
|
36
|
+
return;
|
|
37
|
+
for (const doc of docs) {
|
|
38
|
+
const existing = data.documents.findIndex(d => d.id === doc.id);
|
|
39
|
+
if (existing >= 0) {
|
|
40
|
+
data.documents[existing] = doc;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
data.documents.push(doc);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
await save();
|
|
47
|
+
}
|
|
48
|
+
async function search(embedding, options = {}) {
|
|
49
|
+
let docs = data.documents;
|
|
50
|
+
// Apply filters
|
|
51
|
+
if (options.packageName) {
|
|
52
|
+
docs = docs.filter(d => d.metadata.packageName === options.packageName);
|
|
53
|
+
}
|
|
54
|
+
if (options.contentType) {
|
|
55
|
+
docs = docs.filter(d => d.metadata.contentType === options.contentType);
|
|
56
|
+
}
|
|
57
|
+
// Calculate similarities and sort
|
|
58
|
+
const scored = docs.map(d => ({
|
|
59
|
+
...d,
|
|
60
|
+
score: 1 - cosineSimilarity(embedding, d.embedding) // Lower = better (like ChromaDB distance)
|
|
61
|
+
}));
|
|
62
|
+
scored.sort((a, b) => a.score - b.score);
|
|
63
|
+
return scored.slice(0, options.limit ?? 10).map(d => ({
|
|
64
|
+
id: d.id,
|
|
65
|
+
content: d.content,
|
|
66
|
+
score: d.score,
|
|
67
|
+
metadata: d.metadata
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
async function removeByPackage(packageName) {
|
|
71
|
+
data.documents = data.documents.filter(d => d.metadata.packageName !== packageName);
|
|
72
|
+
await save();
|
|
73
|
+
}
|
|
74
|
+
async function clear() {
|
|
75
|
+
data.documents = [];
|
|
76
|
+
await save();
|
|
77
|
+
}
|
|
78
|
+
return { add, search, removeByPackage, clear };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=file-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/vector/file-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector index manager - orchestrates chunking, embedding, and storage
|
|
3
|
+
*/
|
|
4
|
+
import { EmbeddingProvider } from './embeddings.js';
|
|
5
|
+
import { VectorStore } from './chroma.js';
|
|
6
|
+
import { ExtractionResult } from '../extraction/typescript.js';
|
|
7
|
+
export interface IndexedPackage {
|
|
8
|
+
packageName: string;
|
|
9
|
+
version: string;
|
|
10
|
+
chunkCount: number;
|
|
11
|
+
indexedAt: Date;
|
|
12
|
+
}
|
|
13
|
+
export interface SearchResult {
|
|
14
|
+
packageName: string;
|
|
15
|
+
name: string;
|
|
16
|
+
contentType: string;
|
|
17
|
+
signature?: string;
|
|
18
|
+
content: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}
|
|
21
|
+
export interface IndexStatus {
|
|
22
|
+
packages: IndexedPackage[];
|
|
23
|
+
totalChunks: number;
|
|
24
|
+
}
|
|
25
|
+
export interface VectorIndexManager {
|
|
26
|
+
indexPackage(packageName: string, version: string, extraction: ExtractionResult): Promise<number>;
|
|
27
|
+
search(query: string, options?: {
|
|
28
|
+
limit?: number;
|
|
29
|
+
packageName?: string;
|
|
30
|
+
}): Promise<SearchResult[]>;
|
|
31
|
+
removePackage(packageName: string): Promise<void>;
|
|
32
|
+
getStatus(): IndexStatus;
|
|
33
|
+
isPackageIndexed(packageName: string, version: string): boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface IndexManagerOptions {
|
|
36
|
+
fallbackPath?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function createVectorIndexManager(embeddings: EmbeddingProvider, initialStore: VectorStore, options?: IndexManagerOptions): VectorIndexManager;
|
|
39
|
+
//# sourceMappingURL=index-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-manager.d.ts","sourceRoot":"","sources":["../../src/vector/index-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAI9D,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAClG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,SAAS,IAAI,WAAW,CAAA;IACxB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,WAAW,EACzB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAmHpB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector index manager - orchestrates chunking, embedding, and storage
|
|
3
|
+
*/
|
|
4
|
+
import { chunkExtraction } from './chunker.js';
|
|
5
|
+
import { createFileStore } from './file-store.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
export function createVectorIndexManager(embeddings, initialStore, options = {}) {
|
|
8
|
+
const indexed = new Map();
|
|
9
|
+
let store = initialStore;
|
|
10
|
+
let usingFallback = false;
|
|
11
|
+
async function switchToFallback() {
|
|
12
|
+
if (usingFallback)
|
|
13
|
+
return;
|
|
14
|
+
const fallbackPath = options.fallbackPath ?? '.cache/dep-context/vectors/index.json';
|
|
15
|
+
logger.warn('Primary storage failed, switching to file-based fallback', { path: fallbackPath });
|
|
16
|
+
store = await createFileStore({ path: fallbackPath });
|
|
17
|
+
usingFallback = true;
|
|
18
|
+
indexed.clear(); // Clear in-memory state, will rebuild via auto-index
|
|
19
|
+
}
|
|
20
|
+
async function indexPackage(packageName, version, extraction) {
|
|
21
|
+
const chunks = chunkExtraction(extraction, { packageName, version });
|
|
22
|
+
if (chunks.length === 0)
|
|
23
|
+
return 0;
|
|
24
|
+
// Generate embeddings in batches
|
|
25
|
+
const batchSize = 50;
|
|
26
|
+
const docs = [];
|
|
27
|
+
for (let i = 0; i < chunks.length; i += batchSize) {
|
|
28
|
+
const batch = chunks.slice(i, i + batchSize);
|
|
29
|
+
const embeddings_batch = await embeddings.embedBatch(batch.map(c => c.content));
|
|
30
|
+
batch.forEach((chunk, j) => {
|
|
31
|
+
docs.push({
|
|
32
|
+
id: chunk.id,
|
|
33
|
+
content: chunk.content,
|
|
34
|
+
embedding: embeddings_batch[j],
|
|
35
|
+
metadata: chunk.metadata
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Remove old chunks for this package first, then add new
|
|
40
|
+
try {
|
|
41
|
+
await store.removeByPackage(packageName);
|
|
42
|
+
await store.add(docs);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
await switchToFallback();
|
|
46
|
+
await store.removeByPackage(packageName);
|
|
47
|
+
await store.add(docs);
|
|
48
|
+
}
|
|
49
|
+
indexed.set(packageName, {
|
|
50
|
+
packageName,
|
|
51
|
+
version,
|
|
52
|
+
chunkCount: chunks.length,
|
|
53
|
+
indexedAt: new Date()
|
|
54
|
+
});
|
|
55
|
+
return chunks.length;
|
|
56
|
+
}
|
|
57
|
+
async function search(query, options = {}) {
|
|
58
|
+
const queryEmbedding = await embeddings.embed(query);
|
|
59
|
+
let results;
|
|
60
|
+
try {
|
|
61
|
+
results = await store.search(queryEmbedding, {
|
|
62
|
+
limit: options.limit ?? 10,
|
|
63
|
+
packageName: options.packageName
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
await switchToFallback();
|
|
68
|
+
results = await store.search(queryEmbedding, {
|
|
69
|
+
limit: options.limit ?? 10,
|
|
70
|
+
packageName: options.packageName
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return results.map(r => ({
|
|
74
|
+
packageName: r.metadata.packageName,
|
|
75
|
+
name: r.metadata.name,
|
|
76
|
+
contentType: r.metadata.contentType,
|
|
77
|
+
signature: r.metadata.signature,
|
|
78
|
+
content: r.content,
|
|
79
|
+
score: r.score
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
async function removePackage(packageName) {
|
|
83
|
+
try {
|
|
84
|
+
await store.removeByPackage(packageName);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
await switchToFallback();
|
|
88
|
+
await store.removeByPackage(packageName);
|
|
89
|
+
}
|
|
90
|
+
indexed.delete(packageName);
|
|
91
|
+
}
|
|
92
|
+
function getStatus() {
|
|
93
|
+
const packages = Array.from(indexed.values());
|
|
94
|
+
return {
|
|
95
|
+
packages,
|
|
96
|
+
totalChunks: packages.reduce((sum, p) => sum + p.chunkCount, 0)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function isPackageIndexed(packageName, version) {
|
|
100
|
+
const pkg = indexed.get(packageName);
|
|
101
|
+
return pkg?.version === version;
|
|
102
|
+
}
|
|
103
|
+
return { indexPackage, search, removePackage, getStatus, isPackageIndexed };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=index-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../src/vector/index-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding provider factory - auto-detects available providers
|
|
3
|
+
*/
|
|
4
|
+
import type { EmbeddingProvider } from './embeddings.js';
|
|
5
|
+
export interface EmbeddingConfig {
|
|
6
|
+
provider: 'openai' | 'ollama';
|
|
7
|
+
ollama?: {
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
};
|
|
11
|
+
openai?: {
|
|
12
|
+
apiKey?: string;
|
|
13
|
+
model?: 'text-embedding-3-small' | 'text-embedding-3-large';
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ProviderResult {
|
|
18
|
+
provider: EmbeddingProvider | null;
|
|
19
|
+
name: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function createEmbeddingProviderAuto(config: EmbeddingConfig): Promise<ProviderResult>;
|
|
23
|
+
//# sourceMappingURL=provider-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../src/vector/provider-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGxD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC7B,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,wBAAwB,GAAG,wBAAwB,CAAA;QAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAaD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAoClG"}
|