driftdetect-mcp 0.6.0 → 0.7.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bin/server.js +0 -0
  3. package/dist/enterprise-server.d.ts +1 -0
  4. package/dist/enterprise-server.d.ts.map +1 -1
  5. package/dist/enterprise-server.js +8 -1
  6. package/dist/enterprise-server.js.map +1 -1
  7. package/dist/tools/analysis/constants.d.ts +99 -0
  8. package/dist/tools/analysis/constants.d.ts.map +1 -0
  9. package/dist/tools/analysis/constants.js +421 -0
  10. package/dist/tools/analysis/constants.js.map +1 -0
  11. package/dist/tools/analysis/index.d.ts +1 -0
  12. package/dist/tools/analysis/index.d.ts.map +1 -1
  13. package/dist/tools/analysis/index.js +70 -0
  14. package/dist/tools/analysis/index.js.map +1 -1
  15. package/dist/tools/exploration/env.d.ts +53 -0
  16. package/dist/tools/exploration/env.d.ts.map +1 -0
  17. package/dist/tools/exploration/env.js +283 -0
  18. package/dist/tools/exploration/env.js.map +1 -0
  19. package/dist/tools/exploration/index.d.ts +2 -0
  20. package/dist/tools/exploration/index.d.ts.map +1 -1
  21. package/dist/tools/exploration/index.js +32 -0
  22. package/dist/tools/exploration/index.js.map +1 -1
  23. package/dist/tools/index.d.ts +6 -1
  24. package/dist/tools/index.d.ts.map +1 -1
  25. package/dist/tools/index.js +6 -1
  26. package/dist/tools/index.js.map +1 -1
  27. package/dist/tools/registry.d.ts +7 -5
  28. package/dist/tools/registry.d.ts.map +1 -1
  29. package/dist/tools/registry.js +10 -4
  30. package/dist/tools/registry.js.map +1 -1
  31. package/dist/tools/surgical/callers.d.ts +85 -0
  32. package/dist/tools/surgical/callers.d.ts.map +1 -0
  33. package/dist/tools/surgical/callers.js +239 -0
  34. package/dist/tools/surgical/callers.js.map +1 -0
  35. package/dist/tools/surgical/dependencies.d.ts +96 -0
  36. package/dist/tools/surgical/dependencies.d.ts.map +1 -0
  37. package/dist/tools/surgical/dependencies.js +433 -0
  38. package/dist/tools/surgical/dependencies.js.map +1 -0
  39. package/dist/tools/surgical/errors.d.ts +88 -0
  40. package/dist/tools/surgical/errors.d.ts.map +1 -0
  41. package/dist/tools/surgical/errors.js +275 -0
  42. package/dist/tools/surgical/errors.js.map +1 -0
  43. package/dist/tools/surgical/hooks.d.ts +69 -0
  44. package/dist/tools/surgical/hooks.d.ts.map +1 -0
  45. package/dist/tools/surgical/hooks.js +247 -0
  46. package/dist/tools/surgical/hooks.js.map +1 -0
  47. package/dist/tools/surgical/imports.d.ts +61 -0
  48. package/dist/tools/surgical/imports.d.ts.map +1 -0
  49. package/dist/tools/surgical/imports.js +211 -0
  50. package/dist/tools/surgical/imports.js.map +1 -0
  51. package/dist/tools/surgical/index.d.ts +42 -0
  52. package/dist/tools/surgical/index.d.ts.map +1 -0
  53. package/dist/tools/surgical/index.js +66 -0
  54. package/dist/tools/surgical/index.js.map +1 -0
  55. package/dist/tools/surgical/middleware.d.ts +69 -0
  56. package/dist/tools/surgical/middleware.d.ts.map +1 -0
  57. package/dist/tools/surgical/middleware.js +237 -0
  58. package/dist/tools/surgical/middleware.js.map +1 -0
  59. package/dist/tools/surgical/prevalidate.d.ts +76 -0
  60. package/dist/tools/surgical/prevalidate.d.ts.map +1 -0
  61. package/dist/tools/surgical/prevalidate.js +303 -0
  62. package/dist/tools/surgical/prevalidate.js.map +1 -0
  63. package/dist/tools/surgical/recent.d.ts +66 -0
  64. package/dist/tools/surgical/recent.d.ts.map +1 -0
  65. package/dist/tools/surgical/recent.js +238 -0
  66. package/dist/tools/surgical/recent.js.map +1 -0
  67. package/dist/tools/surgical/signature.d.ts +73 -0
  68. package/dist/tools/surgical/signature.d.ts.map +1 -0
  69. package/dist/tools/surgical/signature.js +190 -0
  70. package/dist/tools/surgical/signature.js.map +1 -0
  71. package/dist/tools/surgical/similar.d.ts +77 -0
  72. package/dist/tools/surgical/similar.d.ts.map +1 -0
  73. package/dist/tools/surgical/similar.js +285 -0
  74. package/dist/tools/surgical/similar.js.map +1 -0
  75. package/dist/tools/surgical/test-template.d.ts +70 -0
  76. package/dist/tools/surgical/test-template.d.ts.map +1 -0
  77. package/dist/tools/surgical/test-template.js +298 -0
  78. package/dist/tools/surgical/test-template.js.map +1 -0
  79. package/dist/tools/surgical/type.d.ts +69 -0
  80. package/dist/tools/surgical/type.d.ts.map +1 -0
  81. package/dist/tools/surgical/type.js +289 -0
  82. package/dist/tools/surgical/type.js.map +1 -0
  83. package/package.json +11 -11
@@ -0,0 +1,433 @@
1
+ /**
2
+ * drift_dependencies - Package Dependencies Lookup
3
+ *
4
+ * Layer: Surgical
5
+ * Token Budget: 300 target, 800 max
6
+ *
7
+ * Returns package dependencies and their versions across all supported languages.
8
+ * Solves: AI needs to know installed packages before suggesting imports.
9
+ *
10
+ * Supported:
11
+ * - JavaScript/TypeScript: package.json
12
+ * - Python: requirements.txt, pyproject.toml
13
+ * - Java: pom.xml, build.gradle
14
+ * - PHP: composer.json
15
+ * - C#: *.csproj
16
+ * - Go: go.mod
17
+ */
18
+ import * as fs from 'node:fs/promises';
19
+ import * as path from 'node:path';
20
+ import { createResponseBuilder, Errors, metrics } from '../../infrastructure/index.js';
21
+ // ============================================================================
22
+ // Package Categories (multi-language)
23
+ // ============================================================================
24
+ const PACKAGE_CATEGORIES = {
25
+ framework: [
26
+ // JS/TS
27
+ 'react', 'vue', 'angular', 'svelte', 'next', 'nuxt', 'gatsby', 'remix',
28
+ 'express', 'fastify', 'koa', 'hapi', 'nestjs', '@nestjs',
29
+ // Python
30
+ 'django', 'flask', 'fastapi', 'tornado', 'pyramid', 'starlette',
31
+ // Java
32
+ 'spring', 'spring-boot', 'quarkus', 'micronaut', 'jakarta',
33
+ // PHP
34
+ 'laravel', 'symfony', 'slim', 'lumen', 'codeigniter',
35
+ // Go
36
+ 'gin', 'echo', 'fiber', 'chi', 'gorilla',
37
+ // C#
38
+ 'aspnetcore', 'blazor',
39
+ ],
40
+ testing: [
41
+ // JS/TS
42
+ 'jest', 'vitest', 'mocha', 'chai', 'jasmine', 'ava', 'cypress', 'playwright',
43
+ '@testing-library', 'enzyme', 'supertest',
44
+ // Python
45
+ 'pytest', 'unittest', 'nose', 'hypothesis', 'tox', 'coverage',
46
+ // Java
47
+ 'junit', 'testng', 'mockito', 'assertj', 'hamcrest',
48
+ // PHP
49
+ 'phpunit', 'pest', 'mockery', 'codeception',
50
+ // Go
51
+ 'testify', 'gomock', 'ginkgo',
52
+ // C#
53
+ 'xunit', 'nunit', 'mstest', 'moq', 'fluentassertions',
54
+ ],
55
+ database: [
56
+ // JS/TS
57
+ 'prisma', 'typeorm', 'sequelize', 'mongoose', 'knex', 'drizzle',
58
+ 'pg', 'mysql', 'mysql2', 'sqlite3', 'mongodb', 'redis', 'ioredis',
59
+ // Python
60
+ 'sqlalchemy', 'django-orm', 'peewee', 'tortoise-orm', 'psycopg2', 'pymongo',
61
+ // Java
62
+ 'hibernate', 'mybatis', 'jpa', 'jdbc', 'r2dbc',
63
+ // PHP
64
+ 'eloquent', 'doctrine', 'propel',
65
+ // Go
66
+ 'gorm', 'sqlx', 'ent', 'pgx',
67
+ // C#
68
+ 'entityframework', 'dapper', 'npgsql',
69
+ ],
70
+ utility: [
71
+ 'lodash', 'underscore', 'ramda', 'date-fns', 'moment', 'dayjs',
72
+ 'axios', 'node-fetch', 'got', 'requests', 'httpx',
73
+ 'zod', 'yup', 'joi', 'pydantic', 'marshmallow',
74
+ ],
75
+ build: [
76
+ 'webpack', 'vite', 'esbuild', 'rollup', 'parcel', 'turbo',
77
+ 'typescript', 'babel', '@babel', 'eslint', 'prettier',
78
+ ],
79
+ };
80
+ // ============================================================================
81
+ // Handler
82
+ // ============================================================================
83
+ export async function handleDependencies(args, rootDir) {
84
+ const startTime = Date.now();
85
+ const builder = createResponseBuilder();
86
+ const searchPattern = args.search?.toLowerCase();
87
+ const typeFilter = args.type ?? 'all';
88
+ const categoryFilter = args.category ?? 'all';
89
+ const languageFilter = args.language ?? 'all';
90
+ const limit = args.limit ?? 50;
91
+ // Collect dependencies from all languages
92
+ const allDeps = [];
93
+ // JavaScript/TypeScript: package.json
94
+ const jsDeps = await parsePackageJson(rootDir);
95
+ allDeps.push(...jsDeps);
96
+ // Python: requirements.txt, pyproject.toml
97
+ const pyDeps = await parsePythonDeps(rootDir);
98
+ allDeps.push(...pyDeps);
99
+ // PHP: composer.json
100
+ const phpDeps = await parseComposerJson(rootDir);
101
+ allDeps.push(...phpDeps);
102
+ // Go: go.mod
103
+ const goDeps = await parseGoMod(rootDir);
104
+ allDeps.push(...goDeps);
105
+ // Java: pom.xml, build.gradle
106
+ const javaDeps = await parseJavaDeps(rootDir);
107
+ allDeps.push(...javaDeps);
108
+ // C#: *.csproj
109
+ const csharpDeps = await parseCsprojDeps(rootDir);
110
+ allDeps.push(...csharpDeps);
111
+ if (allDeps.length === 0) {
112
+ throw Errors.custom('NO_DEPENDENCIES', 'No dependency files found (package.json, requirements.txt, composer.json, go.mod, pom.xml, *.csproj)', ['drift_status']);
113
+ }
114
+ // Apply filters
115
+ let filtered = allDeps;
116
+ if (searchPattern) {
117
+ filtered = filtered.filter(d => d.name.toLowerCase().includes(searchPattern));
118
+ }
119
+ if (typeFilter !== 'all') {
120
+ filtered = filtered.filter(d => d.type === typeFilter);
121
+ }
122
+ if (categoryFilter !== 'all') {
123
+ filtered = filtered.filter(d => d.category === categoryFilter);
124
+ }
125
+ if (languageFilter !== 'all') {
126
+ filtered = filtered.filter(d => d.language === languageFilter);
127
+ }
128
+ // Sort and limit
129
+ filtered.sort((a, b) => a.name.localeCompare(b.name));
130
+ const limited = filtered.slice(0, limit);
131
+ // Calculate stats
132
+ const byCategory = {};
133
+ const byLanguage = {};
134
+ for (const dep of allDeps) {
135
+ byCategory[dep.category] = (byCategory[dep.category] ?? 0) + 1;
136
+ byLanguage[dep.language] = (byLanguage[dep.language] ?? 0) + 1;
137
+ }
138
+ const byType = {
139
+ prod: allDeps.filter(d => d.type === 'prod').length,
140
+ dev: allDeps.filter(d => d.type === 'dev').length,
141
+ peer: allDeps.filter(d => d.type === 'peer').length,
142
+ };
143
+ const languages = [...new Set(allDeps.map(d => d.language))];
144
+ const frameworks = allDeps.filter(d => d.category === 'framework').map(d => d.name);
145
+ const testingLibs = allDeps.filter(d => d.category === 'testing').map(d => d.name);
146
+ const data = {
147
+ dependencies: limited,
148
+ byCategory,
149
+ byLanguage,
150
+ byType,
151
+ stats: { total: allDeps.length, languages, frameworks, testingLibs },
152
+ };
153
+ // Build summary
154
+ const langSummary = languages.length > 1 ? ` across ${languages.join(', ')}` : '';
155
+ let summary = `Found ${allDeps.length} dependencies${langSummary}`;
156
+ if (frameworks.length > 0) {
157
+ summary += `. Frameworks: ${frameworks.slice(0, 3).join(', ')}`;
158
+ }
159
+ metrics.recordRequest('drift_dependencies', Date.now() - startTime, true, false);
160
+ return builder
161
+ .withSummary(summary)
162
+ .withData(data)
163
+ .withHints({
164
+ nextActions: ['Use drift_imports to get correct import statements'],
165
+ relatedTools: ['drift_imports', 'drift_signature'],
166
+ })
167
+ .buildContent();
168
+ }
169
+ // ============================================================================
170
+ // Language-Specific Parsers
171
+ // ============================================================================
172
+ async function parsePackageJson(rootDir) {
173
+ const deps = [];
174
+ const files = await findFiles(rootDir, ['package.json'], ['node_modules']);
175
+ for (const file of files) {
176
+ try {
177
+ const content = await fs.readFile(file, 'utf-8');
178
+ const pkg = JSON.parse(content);
179
+ const source = path.relative(rootDir, file);
180
+ for (const [name, version] of Object.entries(pkg.dependencies ?? {})) {
181
+ if (!deps.some(d => d.name === name)) {
182
+ deps.push({ name, version: String(version), type: 'prod', category: categorize(name), language: 'javascript', source });
183
+ }
184
+ }
185
+ for (const [name, version] of Object.entries(pkg.devDependencies ?? {})) {
186
+ if (!deps.some(d => d.name === name)) {
187
+ deps.push({ name, version: String(version), type: 'dev', category: categorize(name), language: 'javascript', source });
188
+ }
189
+ }
190
+ for (const [name, version] of Object.entries(pkg.peerDependencies ?? {})) {
191
+ if (!deps.some(d => d.name === name)) {
192
+ deps.push({ name, version: String(version), type: 'peer', category: categorize(name), language: 'javascript', source });
193
+ }
194
+ }
195
+ }
196
+ catch { /* skip invalid */ }
197
+ }
198
+ return deps;
199
+ }
200
+ async function parsePythonDeps(rootDir) {
201
+ const deps = [];
202
+ // requirements.txt
203
+ const reqFiles = await findFiles(rootDir, ['requirements.txt', 'requirements-dev.txt', 'requirements-test.txt']);
204
+ for (const file of reqFiles) {
205
+ try {
206
+ const content = await fs.readFile(file, 'utf-8');
207
+ const source = path.relative(rootDir, file);
208
+ const isDev = file.includes('dev') || file.includes('test');
209
+ for (const line of content.split('\n')) {
210
+ const trimmed = line.trim();
211
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('-'))
212
+ continue;
213
+ const match = trimmed.match(/^([a-zA-Z0-9_-]+)([<>=!~]+.*)?$/);
214
+ if (match && match[1]) {
215
+ const name = match[1];
216
+ const version = match[2] ?? '*';
217
+ if (!deps.some(d => d.name === name)) {
218
+ deps.push({ name, version, type: isDev ? 'dev' : 'prod', category: categorize(name), language: 'python', source });
219
+ }
220
+ }
221
+ }
222
+ }
223
+ catch { /* skip */ }
224
+ }
225
+ // pyproject.toml (basic parsing)
226
+ const pyprojectFiles = await findFiles(rootDir, ['pyproject.toml']);
227
+ for (const file of pyprojectFiles) {
228
+ try {
229
+ const content = await fs.readFile(file, 'utf-8');
230
+ const source = path.relative(rootDir, file);
231
+ // Simple regex for dependencies array
232
+ const depsMatch = content.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
233
+ if (depsMatch && depsMatch[1]) {
234
+ const depLines = depsMatch[1].match(/"([^"]+)"/g) ?? [];
235
+ for (const dep of depLines) {
236
+ const clean = dep.replace(/"/g, '');
237
+ const match = clean.match(/^([a-zA-Z0-9_-]+)/);
238
+ if (match && match[1] && !deps.some(d => d.name === match[1])) {
239
+ deps.push({ name: match[1], version: '*', type: 'prod', category: categorize(match[1]), language: 'python', source });
240
+ }
241
+ }
242
+ }
243
+ }
244
+ catch { /* skip */ }
245
+ }
246
+ return deps;
247
+ }
248
+ async function parseComposerJson(rootDir) {
249
+ const deps = [];
250
+ const files = await findFiles(rootDir, ['composer.json'], ['vendor']);
251
+ for (const file of files) {
252
+ try {
253
+ const content = await fs.readFile(file, 'utf-8');
254
+ const pkg = JSON.parse(content);
255
+ const source = path.relative(rootDir, file);
256
+ for (const [name, version] of Object.entries(pkg.require ?? {})) {
257
+ if (name !== 'php' && !name.startsWith('ext-') && !deps.some(d => d.name === name)) {
258
+ deps.push({ name, version: String(version), type: 'prod', category: categorize(name), language: 'php', source });
259
+ }
260
+ }
261
+ for (const [name, version] of Object.entries(pkg['require-dev'] ?? {})) {
262
+ if (!deps.some(d => d.name === name)) {
263
+ deps.push({ name, version: String(version), type: 'dev', category: categorize(name), language: 'php', source });
264
+ }
265
+ }
266
+ }
267
+ catch { /* skip */ }
268
+ }
269
+ return deps;
270
+ }
271
+ async function parseGoMod(rootDir) {
272
+ const deps = [];
273
+ const files = await findFiles(rootDir, ['go.mod']);
274
+ for (const file of files) {
275
+ try {
276
+ const content = await fs.readFile(file, 'utf-8');
277
+ const source = path.relative(rootDir, file);
278
+ // Parse require block
279
+ const requireMatch = content.match(/require\s*\(([\s\S]*?)\)/);
280
+ if (requireMatch && requireMatch[1]) {
281
+ for (const line of requireMatch[1].split('\n')) {
282
+ const match = line.trim().match(/^(\S+)\s+(\S+)/);
283
+ if (match && match[1] && match[2]) {
284
+ const name = match[1];
285
+ const version = match[2];
286
+ if (!deps.some(d => d.name === name)) {
287
+ deps.push({ name, version, type: 'prod', category: categorize(name), language: 'go', source });
288
+ }
289
+ }
290
+ }
291
+ }
292
+ // Single-line requires
293
+ const singleRequires = content.matchAll(/^require\s+(\S+)\s+(\S+)/gm);
294
+ for (const match of singleRequires) {
295
+ if (match[1] && match[2] && !deps.some(d => d.name === match[1])) {
296
+ deps.push({ name: match[1], version: match[2], type: 'prod', category: categorize(match[1]), language: 'go', source });
297
+ }
298
+ }
299
+ }
300
+ catch { /* skip */ }
301
+ }
302
+ return deps;
303
+ }
304
+ async function parseJavaDeps(rootDir) {
305
+ const deps = [];
306
+ // pom.xml
307
+ const pomFiles = await findFiles(rootDir, ['pom.xml']);
308
+ for (const file of pomFiles) {
309
+ try {
310
+ const content = await fs.readFile(file, 'utf-8');
311
+ const source = path.relative(rootDir, file);
312
+ // Simple regex for dependencies
313
+ const depMatches = content.matchAll(/<dependency>[\s\S]*?<groupId>([^<]+)<\/groupId>[\s\S]*?<artifactId>([^<]+)<\/artifactId>[\s\S]*?(?:<version>([^<]+)<\/version>)?[\s\S]*?(?:<scope>([^<]+)<\/scope>)?[\s\S]*?<\/dependency>/g);
314
+ for (const match of depMatches) {
315
+ const name = `${match[1]}:${match[2]}`;
316
+ const version = match[3] ?? '*';
317
+ const scope = match[4] ?? 'compile';
318
+ const type = scope === 'test' ? 'dev' : 'prod';
319
+ if (!deps.some(d => d.name === name)) {
320
+ deps.push({ name, version, type, category: categorize(match[2] ?? ''), language: 'java', source });
321
+ }
322
+ }
323
+ }
324
+ catch { /* skip */ }
325
+ }
326
+ // build.gradle (basic)
327
+ const gradleFiles = await findFiles(rootDir, ['build.gradle', 'build.gradle.kts']);
328
+ for (const file of gradleFiles) {
329
+ try {
330
+ const content = await fs.readFile(file, 'utf-8');
331
+ const source = path.relative(rootDir, file);
332
+ const depMatches = content.matchAll(/(?:implementation|api|testImplementation|compileOnly)\s*[("']([^"')]+)[)"']/g);
333
+ for (const match of depMatches) {
334
+ if (match[1]) {
335
+ const parts = match[1].split(':');
336
+ const name = parts.length >= 2 ? `${parts[0]}:${parts[1]}` : match[1];
337
+ const version = parts[2] ?? '*';
338
+ const type = match[0]?.includes('test') ? 'dev' : 'prod';
339
+ if (!deps.some(d => d.name === name)) {
340
+ deps.push({ name, version, type, category: categorize(parts[1] ?? ''), language: 'java', source });
341
+ }
342
+ }
343
+ }
344
+ }
345
+ catch { /* skip */ }
346
+ }
347
+ return deps;
348
+ }
349
+ async function parseCsprojDeps(rootDir) {
350
+ const deps = [];
351
+ const files = await findFiles(rootDir, ['*.csproj'], ['bin', 'obj']);
352
+ for (const file of files) {
353
+ try {
354
+ const content = await fs.readFile(file, 'utf-8');
355
+ const source = path.relative(rootDir, file);
356
+ const pkgRefs = content.matchAll(/<PackageReference\s+Include="([^"]+)"(?:\s+Version="([^"]+)")?/g);
357
+ for (const match of pkgRefs) {
358
+ if (match[1] && !deps.some(d => d.name === match[1])) {
359
+ deps.push({ name: match[1], version: match[2] ?? '*', type: 'prod', category: categorize(match[1]), language: 'csharp', source });
360
+ }
361
+ }
362
+ }
363
+ catch { /* skip */ }
364
+ }
365
+ return deps;
366
+ }
367
+ // ============================================================================
368
+ // Helpers
369
+ // ============================================================================
370
+ async function findFiles(rootDir, patterns, exclude = []) {
371
+ const results = [];
372
+ async function walk(dir) {
373
+ try {
374
+ const entries = await fs.readdir(dir, { withFileTypes: true });
375
+ for (const entry of entries) {
376
+ const fullPath = path.join(dir, entry.name);
377
+ if (entry.isDirectory()) {
378
+ if (!exclude.includes(entry.name) && !entry.name.startsWith('.')) {
379
+ await walk(fullPath);
380
+ }
381
+ }
382
+ else if (entry.isFile()) {
383
+ for (const pattern of patterns) {
384
+ if (pattern.includes('*')) {
385
+ const regex = new RegExp('^' + pattern.replace('*', '.*') + '$');
386
+ if (regex.test(entry.name))
387
+ results.push(fullPath);
388
+ }
389
+ else if (entry.name === pattern) {
390
+ results.push(fullPath);
391
+ }
392
+ }
393
+ }
394
+ }
395
+ }
396
+ catch { /* skip inaccessible */ }
397
+ }
398
+ await walk(rootDir);
399
+ return results;
400
+ }
401
+ function categorize(name) {
402
+ const lower = name.toLowerCase();
403
+ for (const [category, packages] of Object.entries(PACKAGE_CATEGORIES)) {
404
+ for (const pkg of packages) {
405
+ if (lower === pkg || lower.includes(pkg) || lower.startsWith(pkg)) {
406
+ return category;
407
+ }
408
+ }
409
+ }
410
+ if (lower.includes('test') || lower.includes('mock'))
411
+ return 'testing';
412
+ if (lower.includes('db') || lower.includes('sql'))
413
+ return 'database';
414
+ return 'other';
415
+ }
416
+ /**
417
+ * Tool definition for MCP registration
418
+ */
419
+ export const dependenciesToolDefinition = {
420
+ name: 'drift_dependencies',
421
+ description: 'Look up installed dependencies across all languages (JS/TS, Python, Java, PHP, C#, Go). Use before suggesting imports to verify packages are installed.',
422
+ inputSchema: {
423
+ type: 'object',
424
+ properties: {
425
+ search: { type: 'string', description: 'Search for specific package by name' },
426
+ type: { type: 'string', enum: ['prod', 'dev', 'peer', 'all'], description: 'Filter by dependency type (default: all)' },
427
+ category: { type: 'string', enum: ['framework', 'testing', 'utility', 'database', 'ui', 'all'], description: 'Filter by category (default: all)' },
428
+ language: { type: 'string', enum: ['javascript', 'python', 'java', 'php', 'csharp', 'go', 'all'], description: 'Filter by language (default: all)' },
429
+ limit: { type: 'number', description: 'Max results to return (default: 50)' },
430
+ },
431
+ },
432
+ };
433
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/tools/surgical/dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * drift_errors - Error Types Lookup
3
+ *
4
+ * Layer: Surgical
5
+ * Token Budget: 300 target, 800 max
6
+ *
7
+ * Returns custom error classes and error handling patterns.
8
+ * Solves: AI needs to know existing error types when adding error handling.
9
+ */
10
+ import type { CallGraphStore } from 'driftdetect-core';
11
+ export interface ErrorsArgs {
12
+ /** Action: types, gaps, boundaries */
13
+ action?: 'types' | 'gaps' | 'boundaries';
14
+ /** Filter by severity for gaps: critical, high, medium, low */
15
+ severity?: 'critical' | 'high' | 'medium' | 'low';
16
+ /** Max results */
17
+ limit?: number;
18
+ }
19
+ export interface ErrorTypeInfo {
20
+ name: string;
21
+ file: string;
22
+ line: number;
23
+ extends?: string | undefined;
24
+ properties: string[];
25
+ usages: number;
26
+ }
27
+ export interface ErrorGapInfo {
28
+ function: string;
29
+ file: string;
30
+ line: number;
31
+ gapType: string;
32
+ severity: string;
33
+ suggestion: string;
34
+ }
35
+ export interface ErrorBoundaryInfo {
36
+ function: string;
37
+ file: string;
38
+ line: number;
39
+ handledTypes: string[];
40
+ coverage: number;
41
+ isFramework: boolean;
42
+ }
43
+ export interface ErrorsData {
44
+ action: string;
45
+ errorTypes?: ErrorTypeInfo[] | undefined;
46
+ gaps?: ErrorGapInfo[] | undefined;
47
+ boundaries?: ErrorBoundaryInfo[] | undefined;
48
+ stats: {
49
+ totalTypes?: number | undefined;
50
+ totalGaps?: number | undefined;
51
+ totalBoundaries?: number | undefined;
52
+ criticalGaps?: number | undefined;
53
+ avgCoverage?: number | undefined;
54
+ };
55
+ }
56
+ export declare function handleErrors(store: CallGraphStore, args: ErrorsArgs, rootDir: string): Promise<{
57
+ content: Array<{
58
+ type: string;
59
+ text: string;
60
+ }>;
61
+ }>;
62
+ /**
63
+ * Tool definition for MCP registration
64
+ */
65
+ export declare const errorsToolDefinition: {
66
+ name: string;
67
+ description: string;
68
+ inputSchema: {
69
+ type: "object";
70
+ properties: {
71
+ action: {
72
+ type: string;
73
+ enum: string[];
74
+ description: string;
75
+ };
76
+ severity: {
77
+ type: string;
78
+ enum: string[];
79
+ description: string;
80
+ };
81
+ limit: {
82
+ type: string;
83
+ description: string;
84
+ };
85
+ };
86
+ };
87
+ };
88
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/tools/surgical/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,kBAAkB,CAAC;AAQxF,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IACzC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAClC,CAAC;CACH;AAMD,wBAAsB,YAAY,CAChC,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyE7D;AA8MD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;CAsBhC,CAAC"}