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,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package resolver - locates packages within node_modules and extracts metadata
|
|
3
|
+
*/
|
|
4
|
+
import { readFile, access } from 'node:fs/promises';
|
|
5
|
+
import { join, dirname, resolve as pathResolve } from 'node:path';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
export class PackageResolverError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'PackageResolverError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Extracts repository URL from package.json repository field
|
|
15
|
+
*/
|
|
16
|
+
function extractRepositoryUrl(repository) {
|
|
17
|
+
if (!repository)
|
|
18
|
+
return undefined;
|
|
19
|
+
if (typeof repository === 'string') {
|
|
20
|
+
// Handle shorthand like "github:user/repo"
|
|
21
|
+
if (repository.startsWith('github:')) {
|
|
22
|
+
return `https://github.com/${repository.slice(7)}`;
|
|
23
|
+
}
|
|
24
|
+
if (repository.startsWith('gitlab:')) {
|
|
25
|
+
return `https://gitlab.com/${repository.slice(7)}`;
|
|
26
|
+
}
|
|
27
|
+
return repository;
|
|
28
|
+
}
|
|
29
|
+
if (typeof repository === 'object' && repository !== null) {
|
|
30
|
+
const repo = repository;
|
|
31
|
+
if (repo.url) {
|
|
32
|
+
// Clean up git URLs
|
|
33
|
+
let url = repo.url;
|
|
34
|
+
if (url.startsWith('git+')) {
|
|
35
|
+
url = url.slice(4);
|
|
36
|
+
}
|
|
37
|
+
if (url.endsWith('.git')) {
|
|
38
|
+
url = url.slice(0, -4);
|
|
39
|
+
}
|
|
40
|
+
// Convert git:// to https://
|
|
41
|
+
if (url.startsWith('git://')) {
|
|
42
|
+
url = 'https://' + url.slice(6);
|
|
43
|
+
}
|
|
44
|
+
return url;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parses package.json content and extracts metadata
|
|
51
|
+
*/
|
|
52
|
+
export function parsePackageJson(content, packagePath) {
|
|
53
|
+
let pkg;
|
|
54
|
+
try {
|
|
55
|
+
pkg = JSON.parse(content);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new PackageResolverError(`Invalid JSON in package.json at ${packagePath}`);
|
|
59
|
+
}
|
|
60
|
+
if (typeof pkg['name'] !== 'string') {
|
|
61
|
+
throw new PackageResolverError(`Missing or invalid "name" field in package.json at ${packagePath}`);
|
|
62
|
+
}
|
|
63
|
+
if (typeof pkg['version'] !== 'string') {
|
|
64
|
+
throw new PackageResolverError(`Missing or invalid "version" field in package.json at ${packagePath}`);
|
|
65
|
+
}
|
|
66
|
+
// Extract types path from various fields
|
|
67
|
+
let typesPath;
|
|
68
|
+
if (typeof pkg['types'] === 'string') {
|
|
69
|
+
typesPath = pkg['types'];
|
|
70
|
+
}
|
|
71
|
+
else if (typeof pkg['typings'] === 'string') {
|
|
72
|
+
typesPath = pkg['typings'];
|
|
73
|
+
}
|
|
74
|
+
// Extract export map
|
|
75
|
+
const exportMap = {};
|
|
76
|
+
if (pkg['exports'] && typeof pkg['exports'] === 'object') {
|
|
77
|
+
const exports = pkg['exports'];
|
|
78
|
+
for (const [key, value] of Object.entries(exports)) {
|
|
79
|
+
if (typeof value === 'string') {
|
|
80
|
+
exportMap[key] = value;
|
|
81
|
+
}
|
|
82
|
+
else if (typeof value === 'object' && value !== null) {
|
|
83
|
+
const exportEntry = value;
|
|
84
|
+
// Prefer types, then import, then require, then default
|
|
85
|
+
if (typeof exportEntry['types'] === 'string') {
|
|
86
|
+
exportMap[key] = exportEntry['types'];
|
|
87
|
+
}
|
|
88
|
+
else if (typeof exportEntry['import'] === 'string') {
|
|
89
|
+
exportMap[key] = exportEntry['import'];
|
|
90
|
+
}
|
|
91
|
+
else if (typeof exportEntry['require'] === 'string') {
|
|
92
|
+
exportMap[key] = exportEntry['require'];
|
|
93
|
+
}
|
|
94
|
+
else if (typeof exportEntry['default'] === 'string') {
|
|
95
|
+
exportMap[key] = exportEntry['default'];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
name: pkg['name'],
|
|
102
|
+
version: pkg['version'],
|
|
103
|
+
description: typeof pkg['description'] === 'string' ? pkg['description'] : undefined,
|
|
104
|
+
typesPath,
|
|
105
|
+
mainPath: typeof pkg['main'] === 'string' ? pkg['main'] : undefined,
|
|
106
|
+
exportMap,
|
|
107
|
+
dependencies: pkg['dependencies'] ?? {},
|
|
108
|
+
devDependencies: pkg['devDependencies'] ?? {},
|
|
109
|
+
repository: extractRepositoryUrl(pkg['repository'])
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolves a package name to its path in node_modules
|
|
114
|
+
* Handles scoped packages and hoisted/nested structures
|
|
115
|
+
*/
|
|
116
|
+
export async function resolvePackagePath(packageName, projectRoot) {
|
|
117
|
+
// Handle scoped packages: @scope/name -> @scope/name
|
|
118
|
+
const packageDir = packageName.startsWith('@')
|
|
119
|
+
? packageName
|
|
120
|
+
: packageName.split('/')[0];
|
|
121
|
+
// Start from project root and walk up looking for node_modules
|
|
122
|
+
let currentDir = pathResolve(projectRoot);
|
|
123
|
+
const root = dirname(currentDir);
|
|
124
|
+
while (currentDir !== root) {
|
|
125
|
+
const candidatePath = join(currentDir, 'node_modules', packageDir);
|
|
126
|
+
try {
|
|
127
|
+
await access(candidatePath);
|
|
128
|
+
const pkgJsonPath = join(candidatePath, 'package.json');
|
|
129
|
+
await access(pkgJsonPath);
|
|
130
|
+
return candidatePath;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Not found at this level, try parent
|
|
134
|
+
}
|
|
135
|
+
currentDir = dirname(currentDir);
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Finds the types entry point for a package
|
|
141
|
+
*/
|
|
142
|
+
export async function findTypesEntry(packagePath, metadata) {
|
|
143
|
+
// 1. Check types/typings field from package.json
|
|
144
|
+
if (metadata.typesPath) {
|
|
145
|
+
const typesFullPath = join(packagePath, metadata.typesPath);
|
|
146
|
+
if (existsSync(typesFullPath)) {
|
|
147
|
+
return typesFullPath;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// 2. Check exports["."].types
|
|
151
|
+
if (metadata.exportMap['.']) {
|
|
152
|
+
const exportTypes = metadata.exportMap['.'];
|
|
153
|
+
if (exportTypes.endsWith('.d.ts')) {
|
|
154
|
+
const exportTypesPath = join(packagePath, exportTypes);
|
|
155
|
+
if (existsSync(exportTypesPath)) {
|
|
156
|
+
return exportTypesPath;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// 3. Check for index.d.ts in package root
|
|
161
|
+
const rootIndexDts = join(packagePath, 'index.d.ts');
|
|
162
|
+
if (existsSync(rootIndexDts)) {
|
|
163
|
+
return rootIndexDts;
|
|
164
|
+
}
|
|
165
|
+
// 4. Check for dist/index.d.ts
|
|
166
|
+
const distIndexDts = join(packagePath, 'dist', 'index.d.ts');
|
|
167
|
+
if (existsSync(distIndexDts)) {
|
|
168
|
+
return distIndexDts;
|
|
169
|
+
}
|
|
170
|
+
// 5. Check for lib/index.d.ts
|
|
171
|
+
const libIndexDts = join(packagePath, 'lib', 'index.d.ts');
|
|
172
|
+
if (existsSync(libIndexDts)) {
|
|
173
|
+
return libIndexDts;
|
|
174
|
+
}
|
|
175
|
+
// 6. Check for types/index.d.ts
|
|
176
|
+
const typesIndexDts = join(packagePath, 'types', 'index.d.ts');
|
|
177
|
+
if (existsSync(typesIndexDts)) {
|
|
178
|
+
return typesIndexDts;
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Resolves types path for a specific subpath export
|
|
184
|
+
*/
|
|
185
|
+
async function resolveSubpathTypes(packagePath, _subpath, exportValue) {
|
|
186
|
+
// Handle string export
|
|
187
|
+
if (typeof exportValue === 'string') {
|
|
188
|
+
// Check if it's a .d.ts file
|
|
189
|
+
if (exportValue.endsWith('.d.ts')) {
|
|
190
|
+
const fullPath = join(packagePath, exportValue);
|
|
191
|
+
if (existsSync(fullPath))
|
|
192
|
+
return fullPath;
|
|
193
|
+
}
|
|
194
|
+
// Try replacing .js with .d.ts
|
|
195
|
+
const dtsPath = exportValue.replace(/\.js$/, '.d.ts');
|
|
196
|
+
const fullDtsPath = join(packagePath, dtsPath);
|
|
197
|
+
if (existsSync(fullDtsPath))
|
|
198
|
+
return fullDtsPath;
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
// Handle conditional export object
|
|
202
|
+
if (typeof exportValue === 'object' && exportValue !== null) {
|
|
203
|
+
const entry = exportValue;
|
|
204
|
+
// Prefer types condition
|
|
205
|
+
if (typeof entry['types'] === 'string') {
|
|
206
|
+
const fullPath = join(packagePath, entry['types']);
|
|
207
|
+
if (existsSync(fullPath))
|
|
208
|
+
return fullPath;
|
|
209
|
+
}
|
|
210
|
+
// Try import/require and convert to .d.ts
|
|
211
|
+
const jsPath = entry['import'] ?? entry['require'] ?? entry['default'];
|
|
212
|
+
if (typeof jsPath === 'string') {
|
|
213
|
+
const dtsPath = jsPath.replace(/\.js$/, '.d.ts');
|
|
214
|
+
const fullDtsPath = join(packagePath, dtsPath);
|
|
215
|
+
if (existsSync(fullDtsPath))
|
|
216
|
+
return fullDtsPath;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Lists all subpath exports with their types paths
|
|
223
|
+
*/
|
|
224
|
+
export async function listSubpathExports(packagePath, _metadata) {
|
|
225
|
+
const results = [];
|
|
226
|
+
// Read package.json to get raw exports
|
|
227
|
+
const pkgJsonPath = join(packagePath, 'package.json');
|
|
228
|
+
let pkg;
|
|
229
|
+
try {
|
|
230
|
+
const content = await readFile(pkgJsonPath, 'utf-8');
|
|
231
|
+
pkg = JSON.parse(content);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return results;
|
|
235
|
+
}
|
|
236
|
+
const exports = pkg['exports'];
|
|
237
|
+
if (!exports || typeof exports !== 'object') {
|
|
238
|
+
return results;
|
|
239
|
+
}
|
|
240
|
+
const exportsMap = exports;
|
|
241
|
+
for (const [subpath, value] of Object.entries(exportsMap)) {
|
|
242
|
+
// Skip main entry point and internal paths
|
|
243
|
+
if (subpath === '.' || subpath.startsWith('./package.json'))
|
|
244
|
+
continue;
|
|
245
|
+
// Skip wildcard patterns for now (complex to resolve)
|
|
246
|
+
if (subpath.includes('*'))
|
|
247
|
+
continue;
|
|
248
|
+
const typesPath = await resolveSubpathTypes(packagePath, subpath, value);
|
|
249
|
+
results.push({ subpath, typesPath });
|
|
250
|
+
}
|
|
251
|
+
return results;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Resolves a package and returns its metadata
|
|
255
|
+
*/
|
|
256
|
+
export async function resolve(packageName, projectRoot) {
|
|
257
|
+
const packagePath = await resolvePackagePath(packageName, projectRoot);
|
|
258
|
+
if (!packagePath) {
|
|
259
|
+
return {
|
|
260
|
+
success: false,
|
|
261
|
+
packagePath: undefined,
|
|
262
|
+
metadata: undefined,
|
|
263
|
+
error: `Package "${packageName}" not found in node_modules. Run npm install.`
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
try {
|
|
267
|
+
const pkgJsonPath = join(packagePath, 'package.json');
|
|
268
|
+
const content = await readFile(pkgJsonPath, 'utf-8');
|
|
269
|
+
const metadata = parsePackageJson(content, packagePath);
|
|
270
|
+
// Find types entry point
|
|
271
|
+
const typesEntry = await findTypesEntry(packagePath, metadata);
|
|
272
|
+
if (typesEntry) {
|
|
273
|
+
metadata.typesPath = typesEntry;
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
success: true,
|
|
277
|
+
packagePath,
|
|
278
|
+
metadata,
|
|
279
|
+
error: undefined
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
284
|
+
return {
|
|
285
|
+
success: false,
|
|
286
|
+
packagePath,
|
|
287
|
+
metadata: undefined,
|
|
288
|
+
error: message
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Lists all dependencies from the project's package.json
|
|
294
|
+
*/
|
|
295
|
+
export async function listAllDependencies(projectRoot, includeDev = false) {
|
|
296
|
+
const pkgJsonPath = join(projectRoot, 'package.json');
|
|
297
|
+
let content;
|
|
298
|
+
try {
|
|
299
|
+
content = await readFile(pkgJsonPath, 'utf-8');
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
throw new PackageResolverError(`Could not read package.json at ${pkgJsonPath}`);
|
|
303
|
+
}
|
|
304
|
+
let pkg;
|
|
305
|
+
try {
|
|
306
|
+
pkg = JSON.parse(content);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
throw new PackageResolverError(`Invalid JSON in package.json at ${pkgJsonPath}`);
|
|
310
|
+
}
|
|
311
|
+
const deps = pkg['dependencies'] ?? {};
|
|
312
|
+
const devDeps = includeDev ? (pkg['devDependencies'] ?? {}) : {};
|
|
313
|
+
const allDeps = { ...deps, ...devDeps };
|
|
314
|
+
const results = [];
|
|
315
|
+
for (const packageName of Object.keys(allDeps)) {
|
|
316
|
+
const result = await resolve(packageName, projectRoot);
|
|
317
|
+
if (result.success && result.metadata) {
|
|
318
|
+
results.push(result.metadata);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return results;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Creates a PackageResolver instance
|
|
325
|
+
*/
|
|
326
|
+
export function createPackageResolver(projectRoot) {
|
|
327
|
+
return {
|
|
328
|
+
resolve: (packageName) => resolve(packageName, projectRoot),
|
|
329
|
+
findTypesEntry: (packagePath, metadata) => findTypesEntry(packagePath, metadata),
|
|
330
|
+
listAllDependencies: (includeDev) => listAllDependencies(projectRoot, includeDev),
|
|
331
|
+
listSubpathExports: (packagePath, metadata) => listSubpathExports(packagePath, metadata)
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/resolver/package.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBpC,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,UAAmB;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAA;IAEjC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,2CAA2C;QAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,sBAAsB,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACpD,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,sBAAsB,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACpD,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,UAA6C,CAAA;QAC1D,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,oBAAoB;YACpB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YAClB,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACxB,CAAC;YACD,6BAA6B;YAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACjC,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,WAAmB;IACnE,IAAI,GAA4B,CAAA;IAEhC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,WAAW,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,oBAAoB,CAAC,yDAAyD,WAAW,EAAE,CAAC,CAAA;IACxG,CAAC;IAED,yCAAyC;IACzC,IAAI,SAA6B,CAAA;IACjC,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAA2B,EAAE,CAAA;IAC5C,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAA4B,CAAA;QACzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACxB,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,WAAW,GAAG,KAAgC,CAAA;gBACpD,wDAAwD;gBACxD,IAAI,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;gBACvC,CAAC;qBAAM,IAAI,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACrD,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACxC,CAAC;qBAAM,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACtD,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;gBACzC,CAAC;qBAAM,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACtD,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,MAAM,CAAW;QAC3B,OAAO,EAAE,GAAG,CAAC,SAAS,CAAW;QACjC,WAAW,EAAE,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;QACpF,SAAS;QACT,QAAQ,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,SAAS;QACT,YAAY,EAAG,GAAG,CAAC,cAAc,CAA4B,IAAI,EAAE;QACnE,eAAe,EAAG,GAAG,CAAC,iBAAiB,CAA4B,IAAI,EAAE;QACzE,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACpD,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,WAAmB;IAEnB,qDAAqD;IACrD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7B,+DAA+D;IAC/D,IAAI,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAEhC,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;QAElE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;YACvD,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;YACzB,OAAO,aAAa,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,QAAyB;IAEzB,iDAAiD;IACjD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC3D,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,OAAO,aAAa,CAAA;QACtB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YACtD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAChC,OAAO,eAAe,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACpD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAC5D,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;IAC1D,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,gCAAgC;IAChC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAC9D,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAOD;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,WAAmB,EACnB,QAAgB,EAChB,WAAoB;IAEpB,uBAAuB;IACvB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,6BAA6B;QAC7B,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAA;QAC3C,CAAC;QACD,+BAA+B;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC9C,IAAI,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAA;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,WAAsC,CAAA;QAEpD,yBAAyB;QACzB,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAA;QAC3C,CAAC;QAED,0CAA0C;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;QACtE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAChD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC9C,IAAI,UAAU,CAAC,WAAW,CAAC;gBAAE,OAAO,WAAW,CAAA;QACjD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,SAA0B;IAE1B,MAAM,OAAO,GAAoB,EAAE,CAAA;IAEnC,uCAAuC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IACrD,IAAI,GAA4B,CAAA;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,OAAkC,CAAA;IAErD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,2CAA2C;QAC3C,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAAE,SAAQ;QACrE,sDAAsD;QACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAQ;QAEnC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,WAAmB,EACnB,WAAmB;IAEnB,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAEtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,YAAY,WAAW,+CAA+C;SAC9E,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAEvD,yBAAyB;QACzB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAA;QACjC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW;YACX,QAAQ;YACR,KAAK,EAAE,SAAS;SACjB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,WAAW;YACX,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,OAAO;SACf,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,aAAsB,KAAK;IAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IAErD,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,IAAI,GAA4B,CAAA;IAChC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,IAAI,GAAI,GAAG,CAAC,cAAc,CAA4B,IAAI,EAAE,CAAA;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,iBAAiB,CAA4B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE5F,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAA;IACvC,MAAM,OAAO,GAAsB,EAAE,CAAA;IAErC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACtD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,OAAO;QACL,OAAO,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC;QACnE,cAAc,EAAE,CAAC,WAAmB,EAAE,QAAyB,EAAE,EAAE,CACjE,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvC,mBAAmB,EAAE,CAAC,UAAoB,EAAE,EAAE,CAC5C,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC;QAC9C,kBAAkB,EAAE,CAAC,WAAmB,EAAE,QAAyB,EAAE,EAAE,CACrE,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;KAC5C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: get_dependency_context
|
|
3
|
+
*
|
|
4
|
+
* Retrieves API context for an installed dependency.
|
|
5
|
+
* Checks cache first, generates snapshot on miss.
|
|
6
|
+
*/
|
|
7
|
+
import type { CacheManager } from '../cache/manager.js';
|
|
8
|
+
import type { Config } from '../config/loader.js';
|
|
9
|
+
export interface GetDependencyContextInput {
|
|
10
|
+
packageName: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GetDependencyContextOutput {
|
|
13
|
+
snapshot: string;
|
|
14
|
+
cached: boolean;
|
|
15
|
+
version: string;
|
|
16
|
+
}
|
|
17
|
+
export interface GetDependencyContextError {
|
|
18
|
+
error: string;
|
|
19
|
+
code: 'NOT_FOUND' | 'NO_TYPES' | 'EXTRACTION_FAILED';
|
|
20
|
+
}
|
|
21
|
+
export type GetDependencyContextResult = GetDependencyContextOutput | GetDependencyContextError;
|
|
22
|
+
declare function isError(result: GetDependencyContextResult): result is GetDependencyContextError;
|
|
23
|
+
export interface PackageResolverLike {
|
|
24
|
+
resolve(packageName: string): Promise<{
|
|
25
|
+
success: boolean;
|
|
26
|
+
packagePath: string | undefined;
|
|
27
|
+
metadata: {
|
|
28
|
+
name: string;
|
|
29
|
+
version: string;
|
|
30
|
+
description: string | undefined;
|
|
31
|
+
typesPath: string | undefined;
|
|
32
|
+
mainPath: string | undefined;
|
|
33
|
+
exportMap: Record<string, string>;
|
|
34
|
+
dependencies: Record<string, string>;
|
|
35
|
+
devDependencies: Record<string, string>;
|
|
36
|
+
repository: string | undefined;
|
|
37
|
+
} | undefined;
|
|
38
|
+
error: string | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
findTypesEntry(packagePath: string, metadata: {
|
|
41
|
+
typesPath: string | undefined;
|
|
42
|
+
exportMap: Record<string, string>;
|
|
43
|
+
}): Promise<string | undefined>;
|
|
44
|
+
}
|
|
45
|
+
export interface GetDependencyContextDeps {
|
|
46
|
+
cache: CacheManager;
|
|
47
|
+
resolver: PackageResolverLike;
|
|
48
|
+
config: Config;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates the get_dependency_context tool handler
|
|
52
|
+
*/
|
|
53
|
+
export declare function createGetDependencyContextHandler(deps: GetDependencyContextDeps): (input: GetDependencyContextInput) => Promise<GetDependencyContextResult>;
|
|
54
|
+
export { isError };
|
|
55
|
+
//# sourceMappingURL=get-dependency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-dependency.d.ts","sourceRoot":"","sources":["../../src/tools/get-dependency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAOjD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,mBAAmB,CAAA;CACrD;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,GAAG,yBAAyB,CAAA;AAE/F,iBAAS,OAAO,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,IAAI,yBAAyB,CAExF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QACpC,OAAO,EAAE,OAAO,CAAA;QAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;QAC/B,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAA;YACZ,OAAO,EAAE,MAAM,CAAA;YACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;YAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;YAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;YAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACvC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;SAC/B,GAAG,SAAS,CAAA;QACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAC,CAAA;IACF,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC5C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAClC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,wBAAwB,IAE5E,OAAO,yBAAyB,KAC/B,OAAO,CAAC,0BAA0B,CAAC,CAmGvC;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: get_dependency_context
|
|
3
|
+
*
|
|
4
|
+
* Retrieves API context for an installed dependency.
|
|
5
|
+
* Checks cache first, generates snapshot on miss.
|
|
6
|
+
*/
|
|
7
|
+
import { extract, followReExports } from '../extraction/typescript.js';
|
|
8
|
+
import { createExternalPackageResolver } from '../extraction/external-resolver.js';
|
|
9
|
+
import { generateSnapshot } from '../extraction/snapshot.js';
|
|
10
|
+
import { extractReadme } from '../extraction/readme.js';
|
|
11
|
+
import { extractExamples, associateExamples, filterRelevantExamples } from '../extraction/examples.js';
|
|
12
|
+
function isError(result) {
|
|
13
|
+
return 'error' in result;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates the get_dependency_context tool handler
|
|
17
|
+
*/
|
|
18
|
+
export function createGetDependencyContextHandler(deps) {
|
|
19
|
+
return async function getDependencyContext(input) {
|
|
20
|
+
const { packageName } = input;
|
|
21
|
+
const { cache, resolver, config } = deps;
|
|
22
|
+
// First, resolve the package to get version
|
|
23
|
+
const resolved = await resolver.resolve(packageName);
|
|
24
|
+
if (!resolved.success || !resolved.metadata) {
|
|
25
|
+
return {
|
|
26
|
+
error: `Package '${packageName}' not found in node_modules`,
|
|
27
|
+
code: 'NOT_FOUND'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const { metadata, packagePath } = resolved;
|
|
31
|
+
const version = metadata.version;
|
|
32
|
+
// Check cache
|
|
33
|
+
const cached = await cache.get(packageName, version);
|
|
34
|
+
if (cached) {
|
|
35
|
+
return {
|
|
36
|
+
snapshot: cached.content,
|
|
37
|
+
cached: true,
|
|
38
|
+
version
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Use types path from metadata (already resolved by resolver.resolve())
|
|
42
|
+
const typesPath = metadata.typesPath;
|
|
43
|
+
if (!typesPath) {
|
|
44
|
+
return {
|
|
45
|
+
error: `No TypeScript declarations found for '${packageName}'`,
|
|
46
|
+
code: 'NO_TYPES'
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Create external resolver for following external package re-exports
|
|
50
|
+
const externalResolver = createExternalPackageResolver(config.projectRoot);
|
|
51
|
+
// Extract types
|
|
52
|
+
let extraction = await extract(typesPath);
|
|
53
|
+
// Follow re-exports and import-then-export patterns
|
|
54
|
+
if (extraction.reExports.length > 0 || extraction.importedExports.length > 0) {
|
|
55
|
+
extraction = await followReExports(extraction, typesPath, new Set(), { externalResolver });
|
|
56
|
+
}
|
|
57
|
+
if (extraction.functions.length === 0 &&
|
|
58
|
+
extraction.classes.length === 0 &&
|
|
59
|
+
extraction.interfaces.length === 0 &&
|
|
60
|
+
extraction.types.length === 0) {
|
|
61
|
+
// Check if there were only errors
|
|
62
|
+
if (extraction.errors.length > 0) {
|
|
63
|
+
return {
|
|
64
|
+
error: `Failed to extract types from '${packageName}': ${extraction.errors.join(', ')}`,
|
|
65
|
+
code: 'EXTRACTION_FAILED'
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Extract README if configured
|
|
70
|
+
let readme = undefined;
|
|
71
|
+
if (config.extraction.includeReadme) {
|
|
72
|
+
readme = await extractReadme(packagePath, config.extraction.maxReadmeLength);
|
|
73
|
+
}
|
|
74
|
+
// Extract and associate examples from README
|
|
75
|
+
let examples = [];
|
|
76
|
+
if (config.extraction.includeExamples && readme) {
|
|
77
|
+
const allExportNames = [
|
|
78
|
+
...extraction.functions.map(f => f.name),
|
|
79
|
+
...extraction.classes.map(c => c.name),
|
|
80
|
+
...extraction.interfaces.map(i => i.name),
|
|
81
|
+
...extraction.types.map(t => t.name)
|
|
82
|
+
];
|
|
83
|
+
const rawExamples = extractExamples(readme.raw);
|
|
84
|
+
const associated = associateExamples(rawExamples, allExportNames);
|
|
85
|
+
examples = filterRelevantExamples(associated, config.extraction.maxExamples);
|
|
86
|
+
}
|
|
87
|
+
// Generate snapshot
|
|
88
|
+
const snapshot = generateSnapshot(metadata, extraction, readme, {
|
|
89
|
+
includeReadme: config.extraction.includeReadme,
|
|
90
|
+
includeJsDoc: config.extraction.includeJsDoc,
|
|
91
|
+
includeExamples: config.extraction.includeExamples,
|
|
92
|
+
maxReadmeLength: config.extraction.maxReadmeLength,
|
|
93
|
+
maxExamples: config.extraction.maxExamples
|
|
94
|
+
}, examples);
|
|
95
|
+
// Store in cache
|
|
96
|
+
await cache.set(snapshot);
|
|
97
|
+
return {
|
|
98
|
+
snapshot: snapshot.content,
|
|
99
|
+
cached: false,
|
|
100
|
+
version
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export { isError };
|
|
105
|
+
//# sourceMappingURL=get-dependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-dependency.js","sourceRoot":"","sources":["../../src/tools/get-dependency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAmBtG,SAAS,OAAO,CAAC,MAAkC;IACjD,OAAO,OAAO,IAAI,MAAM,CAAA;AAC1B,CAAC;AA+BD;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,IAA8B;IAC9E,OAAO,KAAK,UAAU,oBAAoB,CACxC,KAAgC;QAEhC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QAC7B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAExC,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAEpD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO;gBACL,KAAK,EAAE,YAAY,WAAW,6BAA6B;gBAC3D,IAAI,EAAE,WAAW;aAClB,CAAA;QACH,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAA;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;QAEhC,cAAc;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,MAAM,EAAE,IAAI;gBACZ,OAAO;aACR,CAAA;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;QAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,yCAAyC,WAAW,GAAG;gBAC9D,IAAI,EAAE,UAAU;aACjB,CAAA;QACH,CAAC;QAED,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAE1E,gBAAgB;QAChB,IAAI,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAA;QAEzC,oDAAoD;QACpD,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,UAAU,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAC5F,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC/B,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAClC,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,kCAAkC;YAClC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,KAAK,EAAE,iCAAiC,WAAW,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvF,IAAI,EAAE,mBAAmB;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,GAAG,SAAS,CAAA;QACtB,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,aAAa,CAAC,WAAY,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QAC/E,CAAC;QAED,6CAA6C;QAC7C,IAAI,QAAQ,GAA8C,EAAE,CAAA;QAC5D,IAAI,MAAM,CAAC,UAAU,CAAC,eAAe,IAAI,MAAM,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG;gBACrB,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxC,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACrC,CAAA;YACD,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;YACjE,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC9E,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE;YAC9D,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,aAAa;YAC9C,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY;YAC5C,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe;YAClD,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe;YAClD,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW;SAC3C,EAAE,QAAQ,CAAC,CAAA;QAEZ,iBAAiB;QACjB,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEzB,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,MAAM,EAAE,KAAK;YACb,OAAO;SACR,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: index_dependencies
|
|
3
|
+
*
|
|
4
|
+
* Builds or refreshes the vector search index for dependencies.
|
|
5
|
+
*/
|
|
6
|
+
import type { VectorIndexManager } from '../vector/index-manager.js';
|
|
7
|
+
import type { CacheManager } from '../cache/manager.js';
|
|
8
|
+
import type { PackageResolverLike } from './get-dependency.js';
|
|
9
|
+
import type { Config } from '../config/loader.js';
|
|
10
|
+
export interface IndexDependenciesInput {
|
|
11
|
+
packages?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface IndexDependenciesOutput {
|
|
14
|
+
indexed: number;
|
|
15
|
+
failed: string[];
|
|
16
|
+
duration: number;
|
|
17
|
+
message: string;
|
|
18
|
+
}
|
|
19
|
+
export interface IndexDependenciesDeps {
|
|
20
|
+
indexManager: VectorIndexManager | null;
|
|
21
|
+
cache: CacheManager;
|
|
22
|
+
resolver: PackageResolverLike;
|
|
23
|
+
config: Config;
|
|
24
|
+
listDependencies: () => Promise<{
|
|
25
|
+
name: string;
|
|
26
|
+
version: string;
|
|
27
|
+
}[]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates the index_dependencies tool handler
|
|
31
|
+
*/
|
|
32
|
+
export declare function createIndexDependenciesHandler(deps: IndexDependenciesDeps): (input: IndexDependenciesInput) => Promise<IndexDependenciesOutput>;
|
|
33
|
+
/** Tool definition for MCP */
|
|
34
|
+
export declare const indexDependenciesToolDef: {
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
inputSchema: {
|
|
38
|
+
type: "object";
|
|
39
|
+
properties: {
|
|
40
|
+
packages: {
|
|
41
|
+
type: string;
|
|
42
|
+
items: {
|
|
43
|
+
type: string;
|
|
44
|
+
};
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
required: never[];
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=index-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/index-dependencies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAIjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACvC,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CACrE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,qBAAqB,IAEtE,OAAO,sBAAsB,KAC5B,OAAO,CAAC,uBAAuB,CAAC,CAoEpC;AAED,8BAA8B;AAC9B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;CAcpC,CAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: index_dependencies
|
|
3
|
+
*
|
|
4
|
+
* Builds or refreshes the vector search index for dependencies.
|
|
5
|
+
*/
|
|
6
|
+
import { extract, followReExports } from '../extraction/typescript.js';
|
|
7
|
+
import { createExternalPackageResolver } from '../extraction/external-resolver.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the index_dependencies tool handler
|
|
10
|
+
*/
|
|
11
|
+
export function createIndexDependenciesHandler(deps) {
|
|
12
|
+
return async function indexDependencies(input) {
|
|
13
|
+
const { indexManager, resolver, config, listDependencies } = deps;
|
|
14
|
+
const start = Date.now();
|
|
15
|
+
if (!indexManager) {
|
|
16
|
+
return {
|
|
17
|
+
indexed: 0,
|
|
18
|
+
failed: [],
|
|
19
|
+
duration: 0,
|
|
20
|
+
message: 'Vector search is not enabled. Configure vectorSearch in config to enable indexing.'
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Get packages to index
|
|
24
|
+
let packages;
|
|
25
|
+
if (input.packages && input.packages.length > 0) {
|
|
26
|
+
packages = [];
|
|
27
|
+
for (const name of input.packages) {
|
|
28
|
+
const resolved = await resolver.resolve(name);
|
|
29
|
+
if (resolved.success && resolved.metadata) {
|
|
30
|
+
packages.push({ name, version: resolved.metadata.version });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
packages = await listDependencies();
|
|
36
|
+
}
|
|
37
|
+
const failed = [];
|
|
38
|
+
let indexed = 0;
|
|
39
|
+
for (const pkg of packages) {
|
|
40
|
+
try {
|
|
41
|
+
// Skip if already indexed with same version
|
|
42
|
+
if (indexManager.isPackageIndexed(pkg.name, pkg.version)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const resolved = await resolver.resolve(pkg.name);
|
|
46
|
+
if (!resolved.success || !resolved.metadata || !resolved.packagePath) {
|
|
47
|
+
failed.push(pkg.name);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const typesPath = resolved.metadata.typesPath;
|
|
51
|
+
if (!typesPath) {
|
|
52
|
+
continue; // Skip packages without types
|
|
53
|
+
}
|
|
54
|
+
const externalResolver = createExternalPackageResolver(config.nodeModulesPath);
|
|
55
|
+
const extraction = await extract(typesPath);
|
|
56
|
+
const withReExports = await followReExports(extraction, typesPath, new Set(), { externalResolver });
|
|
57
|
+
const count = await indexManager.indexPackage(pkg.name, pkg.version, withReExports);
|
|
58
|
+
if (count > 0)
|
|
59
|
+
indexed++;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
failed.push(pkg.name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const duration = Date.now() - start;
|
|
66
|
+
return {
|
|
67
|
+
indexed,
|
|
68
|
+
failed,
|
|
69
|
+
duration,
|
|
70
|
+
message: `Indexed ${indexed} package(s) in ${duration}ms${failed.length > 0 ? `. Failed: ${failed.join(', ')}` : ''}`
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Tool definition for MCP */
|
|
75
|
+
export const indexDependenciesToolDef = {
|
|
76
|
+
name: 'index_dependencies',
|
|
77
|
+
description: 'Build or refresh the vector search index for semantic code search. Indexes type information from dependencies.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
packages: {
|
|
82
|
+
type: 'array',
|
|
83
|
+
items: { type: 'string' },
|
|
84
|
+
description: 'Specific packages to index. If omitted, indexes all dependencies.'
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
required: []
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=index-dependencies.js.map
|