driftdetect-mcp 0.4.6 → 0.5.1

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 (85) hide show
  1. package/dist/enterprise-server.d.ts +7 -0
  2. package/dist/enterprise-server.d.ts.map +1 -1
  3. package/dist/enterprise-server.js +79 -9
  4. package/dist/enterprise-server.js.map +1 -1
  5. package/dist/tools/analysis/coupling.d.ts +56 -0
  6. package/dist/tools/analysis/coupling.d.ts.map +1 -0
  7. package/dist/tools/analysis/coupling.js +248 -0
  8. package/dist/tools/analysis/coupling.js.map +1 -0
  9. package/dist/tools/analysis/error-handling.d.ts +45 -0
  10. package/dist/tools/analysis/error-handling.d.ts.map +1 -0
  11. package/dist/tools/analysis/error-handling.js +220 -0
  12. package/dist/tools/analysis/error-handling.js.map +1 -0
  13. package/dist/tools/analysis/index.d.ts +11 -0
  14. package/dist/tools/analysis/index.d.ts.map +1 -0
  15. package/dist/tools/analysis/index.js +111 -0
  16. package/dist/tools/analysis/index.js.map +1 -0
  17. package/dist/tools/analysis/test-topology.d.ts +43 -0
  18. package/dist/tools/analysis/test-topology.d.ts.map +1 -0
  19. package/dist/tools/analysis/test-topology.js +294 -0
  20. package/dist/tools/analysis/test-topology.js.map +1 -0
  21. package/dist/tools/detail/code-examples.d.ts +20 -3
  22. package/dist/tools/detail/code-examples.d.ts.map +1 -1
  23. package/dist/tools/detail/code-examples.js +104 -0
  24. package/dist/tools/detail/code-examples.js.map +1 -1
  25. package/dist/tools/detail/file-patterns.d.ts +3 -2
  26. package/dist/tools/detail/file-patterns.d.ts.map +1 -1
  27. package/dist/tools/detail/file-patterns.js +20 -12
  28. package/dist/tools/detail/file-patterns.js.map +1 -1
  29. package/dist/tools/detail/files-list.d.ts +3 -3
  30. package/dist/tools/detail/files-list.d.ts.map +1 -1
  31. package/dist/tools/detail/files-list.js +33 -16
  32. package/dist/tools/detail/files-list.js.map +1 -1
  33. package/dist/tools/detail/index.d.ts +6 -4
  34. package/dist/tools/detail/index.d.ts.map +1 -1
  35. package/dist/tools/detail/index.js +44 -2
  36. package/dist/tools/detail/index.js.map +1 -1
  37. package/dist/tools/detail/pattern-get.d.ts +20 -3
  38. package/dist/tools/detail/pattern-get.d.ts.map +1 -1
  39. package/dist/tools/detail/pattern-get.js +87 -0
  40. package/dist/tools/detail/pattern-get.js.map +1 -1
  41. package/dist/tools/detail/wrappers.d.ts +97 -0
  42. package/dist/tools/detail/wrappers.d.ts.map +1 -0
  43. package/dist/tools/detail/wrappers.js +124 -0
  44. package/dist/tools/detail/wrappers.js.map +1 -0
  45. package/dist/tools/discovery/index.d.ts +3 -1
  46. package/dist/tools/discovery/index.d.ts.map +1 -1
  47. package/dist/tools/discovery/index.js +36 -1
  48. package/dist/tools/discovery/index.js.map +1 -1
  49. package/dist/tools/discovery/status.d.ts +16 -3
  50. package/dist/tools/discovery/status.d.ts.map +1 -1
  51. package/dist/tools/discovery/status.js +83 -1
  52. package/dist/tools/discovery/status.js.map +1 -1
  53. package/dist/tools/exploration/index.d.ts +2 -2
  54. package/dist/tools/exploration/index.d.ts.map +1 -1
  55. package/dist/tools/exploration/index.js +1 -1
  56. package/dist/tools/exploration/index.js.map +1 -1
  57. package/dist/tools/exploration/patterns-list.d.ts +21 -4
  58. package/dist/tools/exploration/patterns-list.d.ts.map +1 -1
  59. package/dist/tools/exploration/patterns-list.js +70 -0
  60. package/dist/tools/exploration/patterns-list.js.map +1 -1
  61. package/dist/tools/generation/__tests__/generation-tools.test.d.ts +6 -0
  62. package/dist/tools/generation/__tests__/generation-tools.test.d.ts.map +1 -0
  63. package/dist/tools/generation/__tests__/generation-tools.test.js +119 -0
  64. package/dist/tools/generation/__tests__/generation-tools.test.js.map +1 -0
  65. package/dist/tools/generation/explain.d.ts +75 -0
  66. package/dist/tools/generation/explain.d.ts.map +1 -0
  67. package/dist/tools/generation/explain.js +238 -0
  68. package/dist/tools/generation/explain.js.map +1 -0
  69. package/dist/tools/generation/index.d.ts +12 -0
  70. package/dist/tools/generation/index.d.ts.map +1 -0
  71. package/dist/tools/generation/index.js +90 -0
  72. package/dist/tools/generation/index.js.map +1 -0
  73. package/dist/tools/generation/suggest-changes.d.ts +64 -0
  74. package/dist/tools/generation/suggest-changes.d.ts.map +1 -0
  75. package/dist/tools/generation/suggest-changes.js +342 -0
  76. package/dist/tools/generation/suggest-changes.js.map +1 -0
  77. package/dist/tools/generation/validate-change.d.ts +76 -0
  78. package/dist/tools/generation/validate-change.d.ts.map +1 -0
  79. package/dist/tools/generation/validate-change.js +415 -0
  80. package/dist/tools/generation/validate-change.js.map +1 -0
  81. package/dist/tools/registry.d.ts +5 -1
  82. package/dist/tools/registry.d.ts.map +1 -1
  83. package/dist/tools/registry.js +12 -0
  84. package/dist/tools/registry.js.map +1 -1
  85. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"files-list.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/files-list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2F7D"}
1
+ {"version":3,"file":"files-list.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/files-list.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2G7D"}
@@ -3,26 +3,43 @@
3
3
  *
4
4
  * Detail tool that lists files matching a glob pattern with their pattern counts.
5
5
  * Supports pagination for large codebases.
6
+ *
7
+ * Uses IndexStore (by-file.json) for file-to-pattern mapping.
6
8
  */
9
+ import { IndexStore, PatternStore } from 'driftdetect-core';
7
10
  import { createResponseBuilder, createCursor, parseCursor } from '../../infrastructure/index.js';
8
11
  const DEFAULT_LIMIT = 20;
9
- export async function handleFilesList(store, args) {
12
+ export async function handleFilesList(projectRoot, args) {
10
13
  const builder = createResponseBuilder();
11
- await store.load();
12
- const manifest = await store.get();
14
+ // Use IndexStore for file-to-pattern mapping
15
+ const indexStore = new IndexStore({ rootDir: projectRoot });
16
+ await indexStore.initialize();
17
+ const fileIndex = await indexStore.getFileIndex();
18
+ if (!fileIndex || Object.keys(fileIndex.patterns).length === 0) {
19
+ return builder
20
+ .withSummary('0 files with 0 pattern instances.')
21
+ .withData({ files: [], totalFiles: 0, totalPatterns: 0 })
22
+ .withHints({
23
+ nextActions: ['Run drift scan to discover patterns'],
24
+ relatedTools: ['drift_file_patterns', 'drift_patterns_list'],
25
+ })
26
+ .buildContent();
27
+ }
13
28
  const limit = args.limit ?? DEFAULT_LIMIT;
14
29
  const offset = args.cursor ? parseCursor(args.cursor).offset : 0;
15
30
  const pathPattern = args.path ?? '**/*';
16
- // Get all files from manifest
17
- const allFiles = Object.entries(manifest.files);
31
+ // Get all files from index
32
+ const allFiles = Object.entries(fileIndex.patterns);
18
33
  // Filter by path pattern (simple glob matching)
19
34
  let filteredFiles = allFiles.filter(([filePath]) => matchGlob(filePath, pathPattern));
35
+ // Load pattern store to get categories
36
+ const patternStore = new PatternStore({ rootDir: projectRoot });
37
+ await patternStore.initialize();
20
38
  // Build file entries with pattern info
21
- let fileEntries = filteredFiles.map(([filePath, fileData]) => {
22
- const patternIds = fileData.patterns;
39
+ let fileEntries = filteredFiles.map(([filePath, patternIds]) => {
23
40
  const categories = new Set();
24
41
  for (const patternId of patternIds) {
25
- const pattern = manifest.patterns[patternId];
42
+ const pattern = patternStore.get(patternId);
26
43
  if (pattern) {
27
44
  categories.add(pattern.category);
28
45
  }
@@ -31,7 +48,6 @@ export async function handleFilesList(store, args) {
31
48
  file: filePath,
32
49
  patternCount: patternIds.length,
33
50
  categories: Array.from(categories).sort(),
34
- lastScanned: fileData.lastScanned,
35
51
  };
36
52
  });
37
53
  // Filter by category if specified
@@ -51,12 +67,12 @@ export async function handleFilesList(store, args) {
51
67
  totalPatterns,
52
68
  };
53
69
  // Build summary
54
- let summary = `${totalFiles} files with ${totalPatterns} pattern instances.`;
70
+ let summary = totalFiles + ' files with ' + totalPatterns + ' pattern instances.';
55
71
  if (args.path && args.path !== '**/*') {
56
- summary = `Matching "${args.path}": ${summary}`;
72
+ summary = 'Matching "' + args.path + '": ' + summary;
57
73
  }
58
74
  if (args.category) {
59
- summary += ` Filtered to ${args.category} category.`;
75
+ summary += ' Filtered to ' + args.category + ' category.';
60
76
  }
61
77
  // Add pagination
62
78
  if (hasMore) {
@@ -74,7 +90,7 @@ export async function handleFilesList(store, args) {
74
90
  nextActions: paginatedFiles.length > 0
75
91
  ? [
76
92
  'Use drift_file_patterns with a specific file to see its patterns',
77
- hasMore ? `Use cursor="${createCursor(offset + limit, limit)}" to see more files` : '',
93
+ hasMore ? 'Use cursor="' + createCursor(offset + limit, limit) + '" to see more files' : '',
78
94
  ].filter(Boolean)
79
95
  : ['Run drift scan to discover patterns'],
80
96
  relatedTools: ['drift_file_patterns', 'drift_patterns_list'],
@@ -87,13 +103,14 @@ export async function handleFilesList(store, args) {
87
103
  function matchGlob(filePath, pattern) {
88
104
  if (pattern === '**/*' || pattern === '*')
89
105
  return true;
106
+ // Escape special regex chars first, then handle glob patterns
90
107
  const regexPattern = pattern
108
+ .replace(/\./g, '\\.')
91
109
  .replace(/\*\*/g, '{{GLOBSTAR}}')
92
110
  .replace(/\*/g, '[^/]*')
93
111
  .replace(/{{GLOBSTAR}}/g, '.*')
94
- .replace(/\?/g, '.')
95
- .replace(/\./g, '\\.');
96
- const regex = new RegExp(`^${regexPattern}$`);
112
+ .replace(/\?/g, '.');
113
+ const regex = new RegExp('^' + regexPattern + '$');
97
114
  return regex.test(filePath);
98
115
  }
99
116
  //# sourceMappingURL=files-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-list.js","sourceRoot":"","sources":["../../../src/tools/detail/files-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files-list.js","sourceRoot":"","sources":["../../../src/tools/detail/files-list.ts"],"names":[],"mappings":"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"}
@@ -6,18 +6,20 @@
6
6
  */
7
7
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
8
8
  export declare const DETAIL_TOOLS: Tool[];
9
- export { handlePatternGet } from './pattern-get.js';
10
- export { handleCodeExamples } from './code-examples.js';
9
+ export { handlePatternGet, handlePatternGetWithService } from './pattern-get.js';
10
+ export { handleCodeExamples, handleCodeExamplesWithService } from './code-examples.js';
11
11
  export { handleFilesList } from './files-list.js';
12
12
  export { handleFilePatterns } from './file-patterns.js';
13
13
  export { handleImpactAnalysis } from './impact-analysis.js';
14
14
  export { handleReachability } from './reachability.js';
15
15
  export { handleDNAProfile } from './dna-profile.js';
16
- export type { PatternGetData, PatternLocation, PatternOutlier } from './pattern-get.js';
17
- export type { CodeExamplesData, CodeExample } from './code-examples.js';
16
+ export { handleWrappers, handleWrappersWithConfig } from './wrappers.js';
17
+ export type { PatternGetData, PatternLocation, PatternOutlier, PatternGetArgs } from './pattern-get.js';
18
+ export type { CodeExamplesData, CodeExample, CodeExamplesArgs } from './code-examples.js';
18
19
  export type { FilesListData, FileEntry } from './files-list.js';
19
20
  export type { FilePatternData, FilePattern, FilePatternLocation } from './file-patterns.js';
20
21
  export type { ImpactData, AffectedCaller, SensitivePath } from './impact-analysis.js';
21
22
  export type { ReachabilityData, ForwardReachabilityData, InverseReachabilityData, ReachableData, SensitiveField, AccessPath } from './reachability.js';
22
23
  export type { DNAProfileData, GeneProfile } from './dna-profile.js';
24
+ export type { WrappersData, WrappersArgs, ClusterSummary, WrapperSummary } from './wrappers.js';
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAc/D,eAAO,MAAM,YAAY,EAAE,IAAI,EA6K9B,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvJ,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAqB/D,eAAO,MAAM,YAAY,EAAE,IAAI,EAiN9B,CAAC;AAGF,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAGzE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACxG,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvJ,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -14,6 +14,12 @@ const GENE_IDS = [
14
14
  'variant-handling', 'responsive-approach', 'state-styling',
15
15
  'theming', 'spacing-philosophy', 'animation-approach',
16
16
  ];
17
+ const WRAPPER_CATEGORIES = [
18
+ 'state-management', 'data-fetching', 'side-effects', 'authentication',
19
+ 'authorization', 'validation', 'dependency-injection', 'middleware',
20
+ 'testing', 'logging', 'caching', 'error-handling', 'async-utilities',
21
+ 'form-handling', 'routing', 'factory', 'decorator', 'utility', 'other',
22
+ ];
17
23
  export const DETAIL_TOOLS = [
18
24
  // Pattern Tools
19
25
  {
@@ -184,13 +190,49 @@ export const DETAIL_TOOLS = [
184
190
  },
185
191
  },
186
192
  },
193
+ // Wrapper Detection Tools
194
+ {
195
+ name: 'drift_wrappers',
196
+ description: 'Detect framework wrapper patterns. Identifies custom abstractions built on top of framework primitives (React hooks, Express middleware, etc.). Shows clusters of similar wrappers with confidence scores.',
197
+ inputSchema: {
198
+ type: 'object',
199
+ properties: {
200
+ category: {
201
+ type: 'string',
202
+ enum: WRAPPER_CATEGORIES,
203
+ description: 'Filter by wrapper category',
204
+ },
205
+ minConfidence: {
206
+ type: 'number',
207
+ description: 'Minimum cluster confidence 0-1 (default: 0.5)',
208
+ },
209
+ minClusterSize: {
210
+ type: 'number',
211
+ description: 'Minimum wrappers per cluster (default: 2)',
212
+ },
213
+ maxDepth: {
214
+ type: 'number',
215
+ description: 'Maximum wrapper depth to traverse (default: 10)',
216
+ },
217
+ includeTests: {
218
+ type: 'boolean',
219
+ description: 'Include test files in analysis (default: false)',
220
+ },
221
+ limit: {
222
+ type: 'number',
223
+ description: 'Maximum clusters to return (default: 20)',
224
+ },
225
+ },
226
+ },
227
+ },
187
228
  ];
188
229
  // Handler exports
189
- export { handlePatternGet } from './pattern-get.js';
190
- export { handleCodeExamples } from './code-examples.js';
230
+ export { handlePatternGet, handlePatternGetWithService } from './pattern-get.js';
231
+ export { handleCodeExamples, handleCodeExamplesWithService } from './code-examples.js';
191
232
  export { handleFilesList } from './files-list.js';
192
233
  export { handleFilePatterns } from './file-patterns.js';
193
234
  export { handleImpactAnalysis } from './impact-analysis.js';
194
235
  export { handleReachability } from './reachability.js';
195
236
  export { handleDNAProfile } from './dna-profile.js';
237
+ export { handleWrappers, handleWrappersWithConfig } from './wrappers.js';
196
238
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/detail/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/detail/index.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,11 @@
3
3
  *
4
4
  * Detail tool that returns complete information for a specific pattern.
5
5
  * Use pattern ID from drift_patterns_list.
6
+ *
7
+ * MIGRATION: Now supports both legacy PatternStore and new IPatternService.
8
+ * The service-based approach is preferred for new code.
6
9
  */
7
- import type { PatternStore } from 'driftdetect-core';
10
+ import type { PatternStore, IPatternService } from 'driftdetect-core';
8
11
  export interface PatternLocation {
9
12
  file: string;
10
13
  line: number;
@@ -31,12 +34,26 @@ export interface PatternGetData {
31
34
  locationCount: number;
32
35
  outlierCount: number;
33
36
  }
34
- export declare function handlePatternGet(store: PatternStore, args: {
37
+ export interface PatternGetArgs {
35
38
  id: string;
36
39
  includeLocations?: boolean;
37
40
  includeOutliers?: boolean;
38
41
  maxLocations?: number;
39
- }): Promise<{
42
+ }
43
+ /**
44
+ * Handle pattern get using IPatternService (preferred)
45
+ */
46
+ export declare function handlePatternGetWithService(service: IPatternService, args: PatternGetArgs): Promise<{
47
+ content: Array<{
48
+ type: string;
49
+ text: string;
50
+ }>;
51
+ }>;
52
+ /**
53
+ * Handle pattern get using legacy PatternStore (backward compatibility)
54
+ * @deprecated Use handlePatternGetWithService instead
55
+ */
56
+ export declare function handlePatternGet(store: PatternStore, args: PatternGetArgs): Promise<{
40
57
  content: Array<{
41
58
  type: string;
42
59
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-get.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/pattern-get.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwF7D"}
1
+ {"version":3,"file":"pattern-get.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/pattern-get.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGtE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAsF7D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwF7D"}
@@ -3,9 +3,96 @@
3
3
  *
4
4
  * Detail tool that returns complete information for a specific pattern.
5
5
  * Use pattern ID from drift_patterns_list.
6
+ *
7
+ * MIGRATION: Now supports both legacy PatternStore and new IPatternService.
8
+ * The service-based approach is preferred for new code.
6
9
  */
7
10
  import { createResponseBuilder, Errors } from '../../infrastructure/index.js';
8
11
  const DEFAULT_MAX_LOCATIONS = 20;
12
+ /**
13
+ * Handle pattern get using IPatternService (preferred)
14
+ */
15
+ export async function handlePatternGetWithService(service, args) {
16
+ const builder = createResponseBuilder();
17
+ if (!args.id) {
18
+ throw Errors.missingParameter('id');
19
+ }
20
+ const pattern = await service.getPattern(args.id);
21
+ if (!pattern) {
22
+ throw Errors.notFound('pattern', args.id);
23
+ }
24
+ const includeLocations = args.includeLocations !== false;
25
+ const includeOutliers = args.includeOutliers !== false;
26
+ const maxLocations = args.maxLocations ?? DEFAULT_MAX_LOCATIONS;
27
+ // Map locations
28
+ let locations = [];
29
+ if (includeLocations) {
30
+ locations = pattern.locations
31
+ .slice(0, maxLocations)
32
+ .map(loc => ({
33
+ file: loc.file,
34
+ line: loc.line,
35
+ column: loc.column,
36
+ }));
37
+ }
38
+ // Map outliers
39
+ let outliers = [];
40
+ if (includeOutliers) {
41
+ outliers = pattern.outliers.map(out => ({
42
+ file: out.file,
43
+ line: out.line,
44
+ reason: out.reason ?? 'Unknown reason',
45
+ }));
46
+ }
47
+ const data = {
48
+ id: pattern.id,
49
+ name: pattern.name,
50
+ description: pattern.description,
51
+ category: pattern.category,
52
+ subcategory: pattern.subcategory,
53
+ status: pattern.status,
54
+ confidence: {
55
+ score: Math.round(pattern.confidence * 100) / 100,
56
+ level: pattern.confidenceLevel,
57
+ },
58
+ locations,
59
+ outliers,
60
+ locationCount: pattern.locations.length,
61
+ outlierCount: pattern.outliers.length,
62
+ };
63
+ // Build summary
64
+ let summary = `${pattern.name} (${pattern.category}/${pattern.subcategory}). `;
65
+ summary += `Confidence: ${Math.round(pattern.confidence * 100)}% (${pattern.confidenceLevel}). `;
66
+ summary += `${pattern.locations.length} locations`;
67
+ if (pattern.outliers.length > 0) {
68
+ summary += `, ${pattern.outliers.length} outliers`;
69
+ }
70
+ summary += '.';
71
+ const hints = {
72
+ nextActions: [
73
+ 'Use drift_code_examples to see implementations',
74
+ pattern.outliers.length > 0
75
+ ? 'Review outliers to understand deviations'
76
+ : 'Use drift_patterns_list to explore more patterns',
77
+ ],
78
+ relatedTools: ['drift_code_examples', 'drift_patterns_list'],
79
+ };
80
+ if (pattern.outliers.length > 5) {
81
+ hints.warnings = [`High outlier count (${pattern.outliers.length}) may indicate pattern drift`];
82
+ }
83
+ else if (pattern.confidence < 0.7) {
84
+ hints.warnings = ['Low confidence - pattern may need review'];
85
+ }
86
+ return builder
87
+ .withSummary(summary)
88
+ .withData(data)
89
+ .withHints(hints)
90
+ .buildContent();
91
+ }
92
+ /**
93
+ * Handle pattern get using legacy PatternStore (backward compatibility)
94
+ * @deprecated Use handlePatternGetWithService instead
95
+ */
9
96
  export async function handlePatternGet(store, args) {
10
97
  const builder = createResponseBuilder();
11
98
  if (!args.id) {
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-get.js","sourceRoot":"","sources":["../../../src/tools/detail/pattern-get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern-get.js","sourceRoot":"","sources":["../../../src/tools/detail/pattern-get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Wrappers Tool
3
+ *
4
+ * MCP tool for detecting framework wrapper patterns.
5
+ * Identifies custom abstractions built on top of framework primitives.
6
+ */
7
+ import { type WrapperCategory } from 'driftdetect-core/wrappers';
8
+ export interface WrappersArgs {
9
+ /** Filter by category */
10
+ category?: WrapperCategory;
11
+ /** Minimum cluster confidence (0-1) */
12
+ minConfidence?: number;
13
+ /** Minimum cluster size */
14
+ minClusterSize?: number;
15
+ /** Maximum wrapper depth */
16
+ maxDepth?: number;
17
+ /** Include test files */
18
+ includeTests?: boolean;
19
+ /** Maximum clusters to return */
20
+ limit?: number;
21
+ }
22
+ export interface WrappersData {
23
+ /** Summary statistics */
24
+ summary: {
25
+ totalWrappers: number;
26
+ totalClusters: number;
27
+ avgDepth: number;
28
+ maxDepth: number;
29
+ mostWrappedPrimitive: string;
30
+ mostUsedWrapper: string;
31
+ };
32
+ /** Detected frameworks */
33
+ frameworks: Array<{
34
+ name: string;
35
+ primitiveCount: number;
36
+ }>;
37
+ /** Wrapper clusters */
38
+ clusters: ClusterSummary[];
39
+ /** Top wrappers by usage */
40
+ topWrappers: WrapperSummary[];
41
+ /** Category breakdown */
42
+ byCategory: Record<string, number>;
43
+ /** Scan duration */
44
+ duration: number;
45
+ }
46
+ export interface ClusterSummary {
47
+ id: string;
48
+ name: string;
49
+ description: string;
50
+ category: WrapperCategory;
51
+ confidence: number;
52
+ wrapperCount: number;
53
+ avgDepth: number;
54
+ totalUsages: number;
55
+ primitives: string[];
56
+ suggestedNames: string[];
57
+ /** Sample wrappers (first 3) */
58
+ sampleWrappers: Array<{
59
+ name: string;
60
+ file: string;
61
+ line: number;
62
+ depth: number;
63
+ usages: number;
64
+ }>;
65
+ }
66
+ export interface WrapperSummary {
67
+ name: string;
68
+ qualifiedName: string;
69
+ file: string;
70
+ line: number;
71
+ depth: number;
72
+ usages: number;
73
+ primitives: string[];
74
+ category?: WrapperCategory | undefined;
75
+ isFactory: boolean;
76
+ isHigherOrder: boolean;
77
+ isDecorator: boolean;
78
+ }
79
+ /**
80
+ * Handle wrappers tool request
81
+ */
82
+ export declare function handleWrappers(args: WrappersArgs, rootDir: string): Promise<{
83
+ content: Array<{
84
+ type: string;
85
+ text: string;
86
+ }>;
87
+ }>;
88
+ /**
89
+ * Handle wrappers tool with project config lookup
90
+ */
91
+ export declare function handleWrappersWithConfig(args: WrappersArgs, rootDir: string): Promise<{
92
+ content: Array<{
93
+ type: string;
94
+ text: string;
95
+ }>;
96
+ }>;
97
+ //# sourceMappingURL=wrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../../src/tools/detail/wrappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Wrappers Tool
3
+ *
4
+ * MCP tool for detecting framework wrapper patterns.
5
+ * Identifies custom abstractions built on top of framework primitives.
6
+ */
7
+ import { createWrapperScanner, } from 'driftdetect-core/wrappers';
8
+ import { createResponseBuilder } from '../../infrastructure/index.js';
9
+ // =============================================================================
10
+ // Handler
11
+ // =============================================================================
12
+ /**
13
+ * Handle wrappers tool request
14
+ */
15
+ export async function handleWrappers(args, rootDir) {
16
+ const builder = createResponseBuilder();
17
+ const { category, minConfidence = 0.5, minClusterSize = 2, maxDepth = 10, includeTests = false, limit = 20, } = args;
18
+ // Create scanner
19
+ const scanner = createWrapperScanner({
20
+ rootDir,
21
+ includeTestFiles: includeTests,
22
+ verbose: false,
23
+ });
24
+ // Run scan
25
+ const result = await scanner.scan({
26
+ minConfidence,
27
+ minClusterSize,
28
+ maxDepth,
29
+ includeTestFiles: includeTests,
30
+ });
31
+ // Filter by category if specified
32
+ let clusters = result.analysis.clusters;
33
+ if (category) {
34
+ clusters = clusters.filter((c) => c.category === category);
35
+ }
36
+ // Sort by confidence and limit
37
+ clusters = clusters
38
+ .sort((a, b) => b.confidence - a.confidence)
39
+ .slice(0, limit);
40
+ // Build cluster summaries
41
+ const clusterSummaries = clusters.map((c) => ({
42
+ id: c.id,
43
+ name: c.name,
44
+ description: c.description,
45
+ category: c.category,
46
+ confidence: c.confidence,
47
+ wrapperCount: c.wrappers.length,
48
+ avgDepth: c.avgDepth,
49
+ totalUsages: c.totalUsages,
50
+ primitives: c.primitiveSignature.slice(0, 5),
51
+ suggestedNames: c.suggestedNames,
52
+ sampleWrappers: c.wrappers.slice(0, 3).map((w) => ({
53
+ name: w.name,
54
+ file: w.file,
55
+ line: w.line,
56
+ depth: w.depth,
57
+ usages: w.calledBy.length,
58
+ })),
59
+ }));
60
+ // Get top wrappers by usage
61
+ const topWrappers = [...result.analysis.wrappers]
62
+ .sort((a, b) => b.calledBy.length - a.calledBy.length)
63
+ .slice(0, 10)
64
+ .map((w) => {
65
+ // Find which cluster this wrapper belongs to
66
+ const cluster = result.analysis.clusters.find((c) => c.wrappers.some((cw) => cw.qualifiedName === w.qualifiedName));
67
+ return {
68
+ name: w.name,
69
+ qualifiedName: w.qualifiedName,
70
+ file: w.file,
71
+ line: w.line,
72
+ depth: w.depth,
73
+ usages: w.calledBy.length,
74
+ primitives: w.primitiveSignature.slice(0, 3),
75
+ category: cluster?.category,
76
+ isFactory: w.isFactory,
77
+ isHigherOrder: w.isHigherOrder,
78
+ isDecorator: w.isDecorator,
79
+ };
80
+ });
81
+ // Build category breakdown
82
+ const byCategory = {};
83
+ for (const [cat, count] of Object.entries(result.analysis.summary.wrappersByCategory)) {
84
+ if (count > 0) {
85
+ byCategory[cat] = count;
86
+ }
87
+ }
88
+ const data = {
89
+ summary: {
90
+ totalWrappers: result.analysis.summary.totalWrappers,
91
+ totalClusters: result.analysis.summary.totalClusters,
92
+ avgDepth: result.analysis.summary.avgDepth,
93
+ maxDepth: result.analysis.summary.maxDepth,
94
+ mostWrappedPrimitive: result.analysis.summary.mostWrappedPrimitive,
95
+ mostUsedWrapper: result.analysis.summary.mostUsedWrapper,
96
+ },
97
+ frameworks: result.analysis.frameworks.map((f) => ({
98
+ name: f.name,
99
+ primitiveCount: f.primitiveCount,
100
+ })),
101
+ clusters: clusterSummaries,
102
+ topWrappers,
103
+ byCategory,
104
+ duration: result.duration,
105
+ };
106
+ const summary = `Found ${data.summary.totalWrappers} wrappers in ${data.summary.totalClusters} clusters. Avg depth: ${data.summary.avgDepth.toFixed(1)}`;
107
+ return builder
108
+ .withSummary(summary)
109
+ .withData(data)
110
+ .withHints({
111
+ nextActions: data.summary.totalWrappers > 0
112
+ ? ['Review wrapper clusters for potential consolidation']
113
+ : ['No wrappers detected'],
114
+ relatedTools: ['drift_patterns_list', 'drift_code_examples'],
115
+ })
116
+ .buildContent();
117
+ }
118
+ /**
119
+ * Handle wrappers tool with project config lookup
120
+ */
121
+ export async function handleWrappersWithConfig(args, rootDir) {
122
+ return handleWrappers(args, rootDir);
123
+ }
124
+ //# sourceMappingURL=wrappers.js.map