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.
Files changed (118) hide show
  1. package/README.md +380 -0
  2. package/dist/analysis/relationships.d.ts +25 -0
  3. package/dist/analysis/relationships.d.ts.map +1 -0
  4. package/dist/analysis/relationships.js +26 -0
  5. package/dist/analysis/relationships.js.map +1 -0
  6. package/dist/build-info.d.ts +15 -0
  7. package/dist/build-info.d.ts.map +1 -0
  8. package/dist/build-info.js +24 -0
  9. package/dist/build-info.js.map +1 -0
  10. package/dist/cache/manager.d.ts +19 -0
  11. package/dist/cache/manager.d.ts.map +1 -0
  12. package/dist/cache/manager.js +131 -0
  13. package/dist/cache/manager.js.map +1 -0
  14. package/dist/cache/registry.d.ts +44 -0
  15. package/dist/cache/registry.d.ts.map +1 -0
  16. package/dist/cache/registry.js +92 -0
  17. package/dist/cache/registry.js.map +1 -0
  18. package/dist/config/loader.d.ts +62 -0
  19. package/dist/config/loader.d.ts.map +1 -0
  20. package/dist/config/loader.js +193 -0
  21. package/dist/config/loader.js.map +1 -0
  22. package/dist/extraction/examples.d.ts +22 -0
  23. package/dist/extraction/examples.d.ts.map +1 -0
  24. package/dist/extraction/examples.js +109 -0
  25. package/dist/extraction/examples.js.map +1 -0
  26. package/dist/extraction/external-resolver.d.ts +26 -0
  27. package/dist/extraction/external-resolver.d.ts.map +1 -0
  28. package/dist/extraction/external-resolver.js +79 -0
  29. package/dist/extraction/external-resolver.js.map +1 -0
  30. package/dist/extraction/import-tracker.d.ts +58 -0
  31. package/dist/extraction/import-tracker.d.ts.map +1 -0
  32. package/dist/extraction/import-tracker.js +113 -0
  33. package/dist/extraction/import-tracker.js.map +1 -0
  34. package/dist/extraction/readme.d.ts +19 -0
  35. package/dist/extraction/readme.d.ts.map +1 -0
  36. package/dist/extraction/readme.js +79 -0
  37. package/dist/extraction/readme.js.map +1 -0
  38. package/dist/extraction/snapshot.d.ts +32 -0
  39. package/dist/extraction/snapshot.d.ts.map +1 -0
  40. package/dist/extraction/snapshot.js +258 -0
  41. package/dist/extraction/snapshot.js.map +1 -0
  42. package/dist/extraction/typescript.d.ts +104 -0
  43. package/dist/extraction/typescript.d.ts.map +1 -0
  44. package/dist/extraction/typescript.js +647 -0
  45. package/dist/extraction/typescript.js.map +1 -0
  46. package/dist/index.d.ts +9 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +329 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/resolver/package.d.ts +62 -0
  51. package/dist/resolver/package.d.ts.map +1 -0
  52. package/dist/resolver/package.js +334 -0
  53. package/dist/resolver/package.js.map +1 -0
  54. package/dist/tools/get-dependency.d.ts +55 -0
  55. package/dist/tools/get-dependency.d.ts.map +1 -0
  56. package/dist/tools/get-dependency.js +105 -0
  57. package/dist/tools/get-dependency.js.map +1 -0
  58. package/dist/tools/index-dependencies.d.ts +51 -0
  59. package/dist/tools/index-dependencies.d.ts.map +1 -0
  60. package/dist/tools/index-dependencies.js +90 -0
  61. package/dist/tools/index-dependencies.js.map +1 -0
  62. package/dist/tools/index-status.d.ts +36 -0
  63. package/dist/tools/index-status.d.ts.map +1 -0
  64. package/dist/tools/index-status.js +45 -0
  65. package/dist/tools/index-status.js.map +1 -0
  66. package/dist/tools/list.d.ts +48 -0
  67. package/dist/tools/list.d.ts.map +1 -0
  68. package/dist/tools/list.js +55 -0
  69. package/dist/tools/list.js.map +1 -0
  70. package/dist/tools/refresh.d.ts +59 -0
  71. package/dist/tools/refresh.d.ts.map +1 -0
  72. package/dist/tools/refresh.js +109 -0
  73. package/dist/tools/refresh.js.map +1 -0
  74. package/dist/tools/relationships.d.ts +41 -0
  75. package/dist/tools/relationships.d.ts.map +1 -0
  76. package/dist/tools/relationships.js +36 -0
  77. package/dist/tools/relationships.js.map +1 -0
  78. package/dist/tools/search-codebase.d.ts +64 -0
  79. package/dist/tools/search-codebase.d.ts.map +1 -0
  80. package/dist/tools/search-codebase.js +117 -0
  81. package/dist/tools/search-codebase.js.map +1 -0
  82. package/dist/tools/search.d.ts +37 -0
  83. package/dist/tools/search.d.ts.map +1 -0
  84. package/dist/tools/search.js +77 -0
  85. package/dist/tools/search.js.map +1 -0
  86. package/dist/utils/logger.d.ts +19 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +71 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/vector/chroma.d.ts +38 -0
  91. package/dist/vector/chroma.d.ts.map +1 -0
  92. package/dist/vector/chroma.js +69 -0
  93. package/dist/vector/chroma.js.map +1 -0
  94. package/dist/vector/chunker.d.ts +29 -0
  95. package/dist/vector/chunker.d.ts.map +1 -0
  96. package/dist/vector/chunker.js +205 -0
  97. package/dist/vector/chunker.js.map +1 -0
  98. package/dist/vector/embeddings.d.ts +36 -0
  99. package/dist/vector/embeddings.d.ts.map +1 -0
  100. package/dist/vector/embeddings.js +106 -0
  101. package/dist/vector/embeddings.js.map +1 -0
  102. package/dist/vector/file-store.d.ts +10 -0
  103. package/dist/vector/file-store.d.ts.map +1 -0
  104. package/dist/vector/file-store.js +80 -0
  105. package/dist/vector/file-store.js.map +1 -0
  106. package/dist/vector/index-manager.d.ts +39 -0
  107. package/dist/vector/index-manager.d.ts.map +1 -0
  108. package/dist/vector/index-manager.js +105 -0
  109. package/dist/vector/index-manager.js.map +1 -0
  110. package/dist/vector/provider-factory.d.ts +23 -0
  111. package/dist/vector/provider-factory.d.ts.map +1 -0
  112. package/dist/vector/provider-factory.js +50 -0
  113. package/dist/vector/provider-factory.js.map +1 -0
  114. package/dist/vector/storage-factory.d.ts +17 -0
  115. package/dist/vector/storage-factory.d.ts.map +1 -0
  116. package/dist/vector/storage-factory.js +55 -0
  117. package/dist/vector/storage-factory.js.map +1 -0
  118. 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"}