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,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":"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"}
@@ -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":"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"}
@@ -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