driftdetect-mcp 0.3.0 → 0.4.2

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 (140) hide show
  1. package/dist/bin/server.d.ts +12 -2
  2. package/dist/bin/server.d.ts.map +1 -1
  3. package/dist/bin/server.js +25 -5
  4. package/dist/bin/server.js.map +1 -1
  5. package/dist/enterprise-server.d.ts +78 -0
  6. package/dist/enterprise-server.d.ts.map +1 -0
  7. package/dist/enterprise-server.js +201 -0
  8. package/dist/enterprise-server.js.map +1 -0
  9. package/dist/index.d.ts +15 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +17 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/infrastructure/cache.d.ts +86 -0
  14. package/dist/infrastructure/cache.d.ts.map +1 -0
  15. package/dist/infrastructure/cache.js +271 -0
  16. package/dist/infrastructure/cache.js.map +1 -0
  17. package/dist/infrastructure/cursor-manager.d.ts +86 -0
  18. package/dist/infrastructure/cursor-manager.d.ts.map +1 -0
  19. package/dist/infrastructure/cursor-manager.js +175 -0
  20. package/dist/infrastructure/cursor-manager.js.map +1 -0
  21. package/dist/infrastructure/error-handler.d.ts +82 -0
  22. package/dist/infrastructure/error-handler.d.ts.map +1 -0
  23. package/dist/infrastructure/error-handler.js +226 -0
  24. package/dist/infrastructure/error-handler.js.map +1 -0
  25. package/dist/infrastructure/index.d.ts +19 -0
  26. package/dist/infrastructure/index.d.ts.map +1 -0
  27. package/dist/infrastructure/index.js +26 -0
  28. package/dist/infrastructure/index.js.map +1 -0
  29. package/dist/infrastructure/metrics.d.ts +104 -0
  30. package/dist/infrastructure/metrics.d.ts.map +1 -0
  31. package/dist/infrastructure/metrics.js +291 -0
  32. package/dist/infrastructure/metrics.js.map +1 -0
  33. package/dist/infrastructure/rate-limiter.d.ts +59 -0
  34. package/dist/infrastructure/rate-limiter.d.ts.map +1 -0
  35. package/dist/infrastructure/rate-limiter.js +132 -0
  36. package/dist/infrastructure/rate-limiter.js.map +1 -0
  37. package/dist/infrastructure/response-builder.d.ts +104 -0
  38. package/dist/infrastructure/response-builder.d.ts.map +1 -0
  39. package/dist/infrastructure/response-builder.js +207 -0
  40. package/dist/infrastructure/response-builder.js.map +1 -0
  41. package/dist/infrastructure/token-estimator.d.ts +48 -0
  42. package/dist/infrastructure/token-estimator.d.ts.map +1 -0
  43. package/dist/infrastructure/token-estimator.js +131 -0
  44. package/dist/infrastructure/token-estimator.js.map +1 -0
  45. package/dist/server.d.ts.map +1 -1
  46. package/dist/server.js +1136 -18
  47. package/dist/server.js.map +1 -1
  48. package/dist/tools/detail/code-examples.d.ts +33 -0
  49. package/dist/tools/detail/code-examples.d.ts.map +1 -0
  50. package/dist/tools/detail/code-examples.js +126 -0
  51. package/dist/tools/detail/code-examples.js.map +1 -0
  52. package/dist/tools/detail/dna-check.d.ts +32 -0
  53. package/dist/tools/detail/dna-check.d.ts.map +1 -0
  54. package/dist/tools/detail/dna-check.js +231 -0
  55. package/dist/tools/detail/dna-check.js.map +1 -0
  56. package/dist/tools/detail/dna-profile.d.ts +37 -0
  57. package/dist/tools/detail/dna-profile.d.ts.map +1 -0
  58. package/dist/tools/detail/dna-profile.js +101 -0
  59. package/dist/tools/detail/dna-profile.js.map +1 -0
  60. package/dist/tools/detail/file-patterns.d.ts +39 -0
  61. package/dist/tools/detail/file-patterns.d.ts.map +1 -0
  62. package/dist/tools/detail/file-patterns.js +103 -0
  63. package/dist/tools/detail/file-patterns.js.map +1 -0
  64. package/dist/tools/detail/files-list.d.ts +30 -0
  65. package/dist/tools/detail/files-list.d.ts.map +1 -0
  66. package/dist/tools/detail/files-list.js +99 -0
  67. package/dist/tools/detail/files-list.js.map +1 -0
  68. package/dist/tools/detail/impact-analysis.d.ts +53 -0
  69. package/dist/tools/detail/impact-analysis.d.ts.map +1 -0
  70. package/dist/tools/detail/impact-analysis.js +130 -0
  71. package/dist/tools/detail/impact-analysis.js.map +1 -0
  72. package/dist/tools/detail/index.d.ts +23 -0
  73. package/dist/tools/detail/index.d.ts.map +1 -0
  74. package/dist/tools/detail/index.js +200 -0
  75. package/dist/tools/detail/index.js.map +1 -0
  76. package/dist/tools/detail/pattern-get.d.ts +45 -0
  77. package/dist/tools/detail/pattern-get.d.ts.map +1 -0
  78. package/dist/tools/detail/pattern-get.js +87 -0
  79. package/dist/tools/detail/pattern-get.js.map +1 -0
  80. package/dist/tools/detail/reachability.d.ts +60 -0
  81. package/dist/tools/detail/reachability.d.ts.map +1 -0
  82. package/dist/tools/detail/reachability.js +168 -0
  83. package/dist/tools/detail/reachability.js.map +1 -0
  84. package/dist/tools/discovery/capabilities.d.ts +28 -0
  85. package/dist/tools/discovery/capabilities.d.ts.map +1 -0
  86. package/dist/tools/discovery/capabilities.js +112 -0
  87. package/dist/tools/discovery/capabilities.js.map +1 -0
  88. package/dist/tools/discovery/index.d.ts +13 -0
  89. package/dist/tools/discovery/index.d.ts.map +1 -0
  90. package/dist/tools/discovery/index.js +30 -0
  91. package/dist/tools/discovery/index.js.map +1 -0
  92. package/dist/tools/discovery/projects.d.ts +26 -0
  93. package/dist/tools/discovery/projects.d.ts.map +1 -0
  94. package/dist/tools/discovery/projects.js +210 -0
  95. package/dist/tools/discovery/projects.js.map +1 -0
  96. package/dist/tools/discovery/status.d.ts +42 -0
  97. package/dist/tools/discovery/status.d.ts.map +1 -0
  98. package/dist/tools/discovery/status.js +157 -0
  99. package/dist/tools/discovery/status.js.map +1 -0
  100. package/dist/tools/exploration/contracts-list.d.ts +35 -0
  101. package/dist/tools/exploration/contracts-list.d.ts.map +1 -0
  102. package/dist/tools/exploration/contracts-list.js +106 -0
  103. package/dist/tools/exploration/contracts-list.js.map +1 -0
  104. package/dist/tools/exploration/files-list.d.ts +29 -0
  105. package/dist/tools/exploration/files-list.d.ts.map +1 -0
  106. package/dist/tools/exploration/files-list.js +94 -0
  107. package/dist/tools/exploration/files-list.js.map +1 -0
  108. package/dist/tools/exploration/index.d.ts +17 -0
  109. package/dist/tools/exploration/index.d.ts.map +1 -0
  110. package/dist/tools/exploration/index.js +126 -0
  111. package/dist/tools/exploration/index.js.map +1 -0
  112. package/dist/tools/exploration/patterns-list.d.ts +40 -0
  113. package/dist/tools/exploration/patterns-list.d.ts.map +1 -0
  114. package/dist/tools/exploration/patterns-list.js +172 -0
  115. package/dist/tools/exploration/patterns-list.js.map +1 -0
  116. package/dist/tools/exploration/security-summary.d.ts +49 -0
  117. package/dist/tools/exploration/security-summary.d.ts.map +1 -0
  118. package/dist/tools/exploration/security-summary.js +111 -0
  119. package/dist/tools/exploration/security-summary.js.map +1 -0
  120. package/dist/tools/exploration/trends.d.ts +49 -0
  121. package/dist/tools/exploration/trends.d.ts.map +1 -0
  122. package/dist/tools/exploration/trends.js +147 -0
  123. package/dist/tools/exploration/trends.js.map +1 -0
  124. package/dist/tools/index.d.ts +13 -0
  125. package/dist/tools/index.d.ts.map +1 -0
  126. package/dist/tools/index.js +13 -0
  127. package/dist/tools/index.js.map +1 -0
  128. package/dist/tools/orchestration/context.d.ts +72 -0
  129. package/dist/tools/orchestration/context.d.ts.map +1 -0
  130. package/dist/tools/orchestration/context.js +499 -0
  131. package/dist/tools/orchestration/context.js.map +1 -0
  132. package/dist/tools/orchestration/index.d.ts +11 -0
  133. package/dist/tools/orchestration/index.d.ts.map +1 -0
  134. package/dist/tools/orchestration/index.js +56 -0
  135. package/dist/tools/orchestration/index.js.map +1 -0
  136. package/dist/tools/registry.d.ts +41 -0
  137. package/dist/tools/registry.d.ts.map +1 -0
  138. package/dist/tools/registry.js +64 -0
  139. package/dist/tools/registry.js.map +1 -0
  140. package/package.json +3 -3
@@ -0,0 +1,499 @@
1
+ /**
2
+ * drift_context - Intent-Aware Context Orchestration
3
+ *
4
+ * The "final boss" tool. Instead of making the AI figure out which tools to call
5
+ * and how to synthesize the results, this tool understands the AI's intent and
6
+ * returns a curated context package with everything needed for the task.
7
+ *
8
+ * This is the recommended starting point for any code generation task.
9
+ */
10
+ import { PatternStore, ManifestStore, BoundaryStore, CallGraphStore, DNAStore, } from 'driftdetect-core';
11
+ import { createResponseBuilder } from '../../infrastructure/index.js';
12
+ import * as fs from 'fs/promises';
13
+ import * as path from 'path';
14
+ const INTENT_STRATEGIES = {
15
+ add_feature: {
16
+ categories: ['api', 'components', 'structural', 'errors', 'logging', 'types'],
17
+ prioritizePatterns: (patterns, focus) => {
18
+ const focusLower = focus.toLowerCase();
19
+ return patterns
20
+ .filter(p => p.name.toLowerCase().includes(focusLower) ||
21
+ p.description.toLowerCase().includes(focusLower) ||
22
+ p.locations.some(l => l.file.toLowerCase().includes(focusLower)))
23
+ .sort((a, b) => b.confidence.score - a.confidence.score);
24
+ },
25
+ generateGuidance: (patterns) => ({
26
+ keyInsights: [
27
+ patterns.some(p => p.category === 'api')
28
+ ? 'This codebase has established API patterns - follow them for consistency'
29
+ : 'No strong API patterns detected - you have flexibility in approach',
30
+ patterns.some(p => p.category === 'errors')
31
+ ? 'Error handling patterns exist - use the established error types'
32
+ : 'Consider adding error handling following common practices',
33
+ ],
34
+ commonMistakes: [
35
+ 'Don\'t create new patterns when existing ones apply',
36
+ 'Remember to add appropriate logging',
37
+ 'Include error handling from the start',
38
+ ],
39
+ decisionPoints: [
40
+ 'Decide if this feature needs its own module or fits in existing structure',
41
+ 'Consider if new types/interfaces are needed',
42
+ ],
43
+ }),
44
+ getWarningTypes: () => ['breaking_change', 'complexity'],
45
+ },
46
+ fix_bug: {
47
+ categories: ['errors', 'logging', 'data-access', 'api', 'testing'],
48
+ prioritizePatterns: (patterns, focus) => {
49
+ const focusLower = focus.toLowerCase();
50
+ // For bugs, prioritize error handling and the specific area
51
+ return patterns
52
+ .filter(p => p.category === 'errors' ||
53
+ p.name.toLowerCase().includes(focusLower) ||
54
+ p.locations.some(l => l.file.toLowerCase().includes(focusLower)))
55
+ .sort((a, b) => {
56
+ if (a.category === 'errors' && b.category !== 'errors')
57
+ return -1;
58
+ if (b.category === 'errors' && a.category !== 'errors')
59
+ return 1;
60
+ return b.confidence.score - a.confidence.score;
61
+ });
62
+ },
63
+ generateGuidance: (patterns) => ({
64
+ keyInsights: [
65
+ 'Understand the error handling flow before making changes',
66
+ 'Check if similar bugs exist elsewhere (pattern outliers)',
67
+ patterns.some(p => p.category === 'logging')
68
+ ? 'Add logging to help debug if the fix doesn\'t work'
69
+ : 'Consider adding logging for future debugging',
70
+ ],
71
+ commonMistakes: [
72
+ 'Don\'t just fix the symptom - understand the root cause',
73
+ 'Avoid changing unrelated code in the same commit',
74
+ 'Don\'t remove error handling to "fix" the bug',
75
+ ],
76
+ decisionPoints: [
77
+ `Is this a one-off bug or a pattern that might exist elsewhere?`,
78
+ 'Should this fix include a regression test?',
79
+ ],
80
+ }),
81
+ getWarningTypes: () => ['breaking_change', 'data_access'],
82
+ },
83
+ refactor: {
84
+ categories: ['structural', 'components', 'types', 'api', 'styling'],
85
+ prioritizePatterns: (patterns, focus) => {
86
+ const focusLower = focus.toLowerCase();
87
+ return patterns
88
+ .filter(p => p.locations.some(l => l.file.toLowerCase().includes(focusLower)) ||
89
+ p.name.toLowerCase().includes(focusLower))
90
+ .sort((a, b) => b.locations.length - a.locations.length); // Most used patterns first
91
+ },
92
+ generateGuidance: (patterns) => ({
93
+ keyInsights: [
94
+ 'Identify the dominant patterns before changing anything',
95
+ 'Refactoring should move toward patterns, not away from them',
96
+ patterns.filter(p => p.outliers.length > 0).length > 0
97
+ ? 'There are outliers that might be good refactoring targets'
98
+ : 'Patterns are consistent - be careful not to introduce outliers',
99
+ ],
100
+ commonMistakes: [
101
+ 'Don\'t refactor and add features in the same change',
102
+ 'Avoid changing public APIs without updating all callers',
103
+ 'Don\'t "improve" working code without clear benefit',
104
+ ],
105
+ decisionPoints: [
106
+ 'Is this refactor worth the risk of introducing bugs?',
107
+ 'Should you refactor incrementally or all at once?',
108
+ 'Are there tests covering the code you\'re changing?',
109
+ ],
110
+ }),
111
+ getWarningTypes: () => ['breaking_change', 'complexity'],
112
+ },
113
+ security_audit: {
114
+ categories: ['security', 'auth', 'data-access', 'api'],
115
+ prioritizePatterns: (patterns, _focus) => {
116
+ // Security audit prioritizes security-related patterns
117
+ return patterns
118
+ .filter(p => ['security', 'auth', 'data-access'].includes(p.category) ||
119
+ p.name.toLowerCase().includes('auth') ||
120
+ p.name.toLowerCase().includes('permission') ||
121
+ p.name.toLowerCase().includes('access'))
122
+ .sort((a, b) => {
123
+ const securityOrder = ['security', 'auth', 'data-access', 'api'];
124
+ return securityOrder.indexOf(a.category) - securityOrder.indexOf(b.category);
125
+ });
126
+ },
127
+ generateGuidance: () => ({
128
+ keyInsights: [
129
+ 'Focus on data access patterns - who can access what?',
130
+ 'Check authentication flows for consistency',
131
+ 'Look for authorization checks at entry points',
132
+ ],
133
+ commonMistakes: [
134
+ 'Don\'t assume authentication implies authorization',
135
+ 'Don\'t trust client-side validation alone',
136
+ 'Don\'t log sensitive data',
137
+ ],
138
+ decisionPoints: [
139
+ 'Are there data access paths that bypass authorization?',
140
+ 'Is sensitive data properly encrypted at rest and in transit?',
141
+ 'Are there any hardcoded credentials or secrets?',
142
+ ],
143
+ }),
144
+ getWarningTypes: () => ['security', 'data_access'],
145
+ },
146
+ understand_code: {
147
+ categories: ['structural', 'api', 'components', 'data-access', 'types'],
148
+ prioritizePatterns: (patterns, focus) => {
149
+ const focusLower = focus.toLowerCase();
150
+ return patterns
151
+ .filter(p => p.locations.some(l => l.file.toLowerCase().includes(focusLower)) ||
152
+ p.name.toLowerCase().includes(focusLower) ||
153
+ p.description.toLowerCase().includes(focusLower))
154
+ .sort((a, b) => b.locations.length - a.locations.length);
155
+ },
156
+ generateGuidance: (patterns) => ({
157
+ keyInsights: [
158
+ `This area uses ${patterns.length} distinct patterns`,
159
+ patterns.length > 0
160
+ ? `The dominant pattern is "${patterns[0]?.name}" with ${patterns[0]?.locations.length} occurrences`
161
+ : 'No strong patterns detected in this area',
162
+ ],
163
+ commonMistakes: [
164
+ 'Don\'t assume you understand the code from names alone',
165
+ 'Check for edge cases in pattern outliers',
166
+ ],
167
+ decisionPoints: [
168
+ 'Do you need to understand the full call graph?',
169
+ 'Are there related patterns in other categories?',
170
+ ],
171
+ }),
172
+ getWarningTypes: () => ['complexity'],
173
+ },
174
+ add_test: {
175
+ categories: ['testing', 'errors', 'api', 'data-access'],
176
+ prioritizePatterns: (patterns, focus) => {
177
+ const focusLower = focus.toLowerCase();
178
+ // Prioritize testing patterns, then the area being tested
179
+ return patterns
180
+ .filter(p => p.category === 'testing' ||
181
+ p.locations.some(l => l.file.toLowerCase().includes(focusLower)))
182
+ .sort((a, b) => {
183
+ if (a.category === 'testing' && b.category !== 'testing')
184
+ return -1;
185
+ if (b.category === 'testing' && a.category !== 'testing')
186
+ return 1;
187
+ return b.confidence.score - a.confidence.score;
188
+ });
189
+ },
190
+ generateGuidance: (patterns) => ({
191
+ keyInsights: [
192
+ patterns.some(p => p.category === 'testing')
193
+ ? 'Follow the existing test patterns for consistency'
194
+ : 'No strong testing patterns - establish good practices',
195
+ 'Focus on behavior, not implementation details',
196
+ ],
197
+ commonMistakes: [
198
+ 'Don\'t test implementation details that might change',
199
+ 'Don\'t forget edge cases and error paths',
200
+ 'Don\'t mock everything - some integration is good',
201
+ ],
202
+ decisionPoints: [
203
+ 'Unit test, integration test, or both?',
204
+ 'What edge cases need coverage?',
205
+ 'Should you test the happy path or error paths first?',
206
+ ],
207
+ }),
208
+ getWarningTypes: () => ['complexity'],
209
+ },
210
+ };
211
+ // =============================================================================
212
+ // Main Handler
213
+ // =============================================================================
214
+ export async function handleContext(stores, projectRoot, args) {
215
+ const builder = createResponseBuilder();
216
+ const { intent, focus, question } = args;
217
+ const strategy = INTENT_STRATEGIES[intent];
218
+ // Initialize stores
219
+ await stores.pattern.initialize();
220
+ await stores.manifest.load();
221
+ // Get all patterns
222
+ const allPatterns = stores.pattern.getAll();
223
+ // Filter to relevant categories and prioritize
224
+ const categoryPatterns = allPatterns.filter(p => strategy.categories.includes(p.category));
225
+ const prioritizedPatterns = strategy.prioritizePatterns(categoryPatterns, focus);
226
+ // Get top patterns with examples
227
+ const relevantPatterns = await getRelevantPatterns(prioritizedPatterns.slice(0, 5), projectRoot, focus);
228
+ // Find suggested files
229
+ const suggestedFiles = await getSuggestedFiles(stores.manifest, stores.boundary, prioritizedPatterns, focus, intent);
230
+ // Generate guidance
231
+ const guidance = strategy.generateGuidance(prioritizedPatterns, focus);
232
+ // Add question-specific insight if provided
233
+ if (question) {
234
+ guidance.keyInsights.unshift(`Regarding "${question}": Check the patterns below for established approaches.`);
235
+ }
236
+ // Generate warnings
237
+ const warnings = await generateWarnings(stores.boundary, projectRoot, suggestedFiles, strategy.getWarningTypes());
238
+ // Calculate confidence
239
+ const confidence = calculateConfidence(stores.pattern, prioritizedPatterns, focus);
240
+ // Generate deeper dive suggestions
241
+ const deeperDive = generateDeeperDive(intent, focus, relevantPatterns, suggestedFiles);
242
+ // Build summary
243
+ const summary = buildSummary(intent, focus, relevantPatterns, suggestedFiles, warnings);
244
+ const contextPackage = {
245
+ summary,
246
+ relevantPatterns,
247
+ suggestedFiles,
248
+ guidance,
249
+ warnings,
250
+ confidence,
251
+ deeperDive,
252
+ };
253
+ return builder
254
+ .withSummary(summary)
255
+ .withData(contextPackage)
256
+ .withHints({
257
+ nextActions: deeperDive.slice(0, 2).map(d => `${d.tool}: ${d.reason}`),
258
+ relatedTools: ['drift_code_examples', 'drift_impact_analysis', 'drift_reachability'],
259
+ })
260
+ .buildContent();
261
+ }
262
+ // =============================================================================
263
+ // Helper Functions
264
+ // =============================================================================
265
+ async function getRelevantPatterns(patterns, projectRoot, focus) {
266
+ const results = [];
267
+ for (const pattern of patterns) {
268
+ // Find best example location (prefer files matching focus)
269
+ const focusLower = focus.toLowerCase();
270
+ const sortedLocations = [...pattern.locations].sort((a, b) => {
271
+ const aMatches = a.file.toLowerCase().includes(focusLower) ? 1 : 0;
272
+ const bMatches = b.file.toLowerCase().includes(focusLower) ? 1 : 0;
273
+ return bMatches - aMatches;
274
+ });
275
+ const bestLocation = sortedLocations[0];
276
+ let example = '';
277
+ if (bestLocation) {
278
+ try {
279
+ const filePath = path.join(projectRoot, bestLocation.file);
280
+ const content = await fs.readFile(filePath, 'utf-8');
281
+ const lines = content.split('\n');
282
+ const start = Math.max(0, bestLocation.line - 3);
283
+ const end = Math.min(lines.length, bestLocation.line + 7);
284
+ example = lines.slice(start, end).join('\n');
285
+ }
286
+ catch {
287
+ example = `// See ${bestLocation.file}:${bestLocation.line}`;
288
+ }
289
+ }
290
+ results.push({
291
+ id: pattern.id,
292
+ name: pattern.name,
293
+ category: pattern.category,
294
+ why: generatePatternWhy(pattern, focus),
295
+ example,
296
+ confidence: Math.round(pattern.confidence.score * 100) / 100,
297
+ locationCount: pattern.locations.length,
298
+ });
299
+ }
300
+ return results;
301
+ }
302
+ function generatePatternWhy(pattern, focus) {
303
+ const focusLower = focus.toLowerCase();
304
+ if (pattern.name.toLowerCase().includes(focusLower)) {
305
+ return `Directly related to "${focus}" - this is the established pattern`;
306
+ }
307
+ if (pattern.locations.some(l => l.file.toLowerCase().includes(focusLower))) {
308
+ return `Used in files matching "${focus}" - follow this for consistency`;
309
+ }
310
+ if (pattern.category === 'errors') {
311
+ return 'Error handling pattern - use this for consistent error management';
312
+ }
313
+ if (pattern.category === 'auth') {
314
+ return 'Authentication pattern - critical for security consistency';
315
+ }
316
+ return `${pattern.category} pattern with ${pattern.locations.length} occurrences - established convention`;
317
+ }
318
+ async function getSuggestedFiles(_manifestStore, _boundaryStore, patterns, focus, intent) {
319
+ const focusLower = focus.toLowerCase();
320
+ const fileScores = new Map();
321
+ // Score files based on pattern matches
322
+ for (const pattern of patterns) {
323
+ for (const location of pattern.locations) {
324
+ const file = location.file;
325
+ const existing = fileScores.get(file) || { score: 0, patterns: [], reasons: [] };
326
+ // Higher score for focus matches
327
+ const focusMatch = file.toLowerCase().includes(focusLower);
328
+ existing.score += focusMatch ? 10 : 1;
329
+ if (!existing.patterns.includes(pattern.name)) {
330
+ existing.patterns.push(pattern.name);
331
+ }
332
+ if (focusMatch && !existing.reasons.includes('Matches focus area')) {
333
+ existing.reasons.push('Matches focus area');
334
+ }
335
+ fileScores.set(file, existing);
336
+ }
337
+ }
338
+ // Sort by score and take top files
339
+ const sortedFiles = Array.from(fileScores.entries())
340
+ .sort((a, b) => b[1].score - a[1].score)
341
+ .slice(0, 5);
342
+ // Determine risk based on intent and patterns
343
+ const results = sortedFiles.map(([file, data]) => {
344
+ let risk = 'low';
345
+ // Higher risk for security-related intents
346
+ if (intent === 'security_audit' && data.patterns.some(p => p.toLowerCase().includes('auth') || p.toLowerCase().includes('security'))) {
347
+ risk = 'high';
348
+ }
349
+ // Higher risk for files with many patterns (more complex)
350
+ if (data.patterns.length > 3) {
351
+ risk = risk === 'low' ? 'medium' : 'high';
352
+ }
353
+ return {
354
+ file,
355
+ reason: data.reasons[0] || `Contains ${data.patterns.length} relevant pattern(s)`,
356
+ patterns: data.patterns.slice(0, 3),
357
+ risk,
358
+ };
359
+ });
360
+ return results;
361
+ }
362
+ async function generateWarnings(boundaryStore, _projectRoot, suggestedFiles, warningTypes) {
363
+ const warnings = [];
364
+ // Check for security warnings
365
+ if (warningTypes.includes('security') || warningTypes.includes('data_access')) {
366
+ try {
367
+ await boundaryStore.initialize();
368
+ const accessMap = boundaryStore.getAccessMap();
369
+ if (accessMap) {
370
+ // Check if suggested files access sensitive data
371
+ for (const file of suggestedFiles) {
372
+ const fileAccess = accessMap.accessPoints[file.file];
373
+ if (fileAccess) {
374
+ const sensitiveFields = accessMap.sensitiveFields.filter(sf => sf.file === file.file);
375
+ if (sensitiveFields.length > 0) {
376
+ warnings.push({
377
+ type: 'data_access',
378
+ message: `${file.file} accesses sensitive data: ${sensitiveFields.map(sf => `${sf.table}.${sf.field}`).join(', ')}`,
379
+ severity: 'warning',
380
+ });
381
+ }
382
+ }
383
+ }
384
+ }
385
+ }
386
+ catch {
387
+ // Boundary store not available
388
+ }
389
+ }
390
+ // Check for complexity warnings
391
+ if (warningTypes.includes('complexity')) {
392
+ const complexFiles = suggestedFiles.filter(f => f.patterns.length > 3);
393
+ if (complexFiles.length > 0) {
394
+ warnings.push({
395
+ type: 'complexity',
396
+ message: `${complexFiles.length} file(s) have high pattern density - changes may have wide impact`,
397
+ severity: 'info',
398
+ });
399
+ }
400
+ }
401
+ // Check for breaking change potential
402
+ if (warningTypes.includes('breaking_change')) {
403
+ const highRiskFiles = suggestedFiles.filter(f => f.risk === 'high');
404
+ if (highRiskFiles.length > 0) {
405
+ warnings.push({
406
+ type: 'breaking_change',
407
+ message: `${highRiskFiles.length} file(s) are high-risk - consider impact analysis before changes`,
408
+ severity: 'warning',
409
+ });
410
+ }
411
+ }
412
+ return warnings;
413
+ }
414
+ function calculateConfidence(patternStore, relevantPatterns, focus) {
415
+ const stats = patternStore.getStats();
416
+ const focusLower = focus.toLowerCase();
417
+ // Calculate how well we understand this area
418
+ const focusPatterns = relevantPatterns.filter(p => p.name.toLowerCase().includes(focusLower) ||
419
+ p.locations.some(l => l.file.toLowerCase().includes(focusLower)));
420
+ const patternCoverage = focusPatterns.length > 0
421
+ ? Math.min(100, focusPatterns.length * 20) // 5 patterns = 100%
422
+ : relevantPatterns.length > 0 ? 50 : 10;
423
+ const limitations = [];
424
+ if (focusPatterns.length === 0) {
425
+ limitations.push(`No patterns directly match "${focus}" - results are inferred from related patterns`);
426
+ }
427
+ if (stats.totalPatterns < 10) {
428
+ limitations.push('Limited pattern data - consider running a full scan');
429
+ }
430
+ return {
431
+ patternCoverage,
432
+ dataFreshness: 'Current session', // Would be better with actual timestamps
433
+ limitations,
434
+ };
435
+ }
436
+ function generateDeeperDive(intent, _focus, patterns, files) {
437
+ const suggestions = [];
438
+ // Always suggest code examples if we have patterns
439
+ if (patterns.length > 0) {
440
+ suggestions.push({
441
+ tool: 'drift_code_examples',
442
+ args: { pattern: patterns[0]?.id, maxExamples: 3 },
443
+ reason: `See more examples of "${patterns[0]?.name}" pattern`,
444
+ });
445
+ }
446
+ // Suggest impact analysis for risky changes
447
+ if (files.some(f => f.risk === 'high')) {
448
+ const highRiskFile = files.find(f => f.risk === 'high');
449
+ suggestions.push({
450
+ tool: 'drift_impact_analysis',
451
+ args: { target: highRiskFile?.file },
452
+ reason: `Understand blast radius before changing ${highRiskFile?.file}`,
453
+ });
454
+ }
455
+ // Suggest reachability for security audits
456
+ if (intent === 'security_audit' && files.length > 0) {
457
+ suggestions.push({
458
+ tool: 'drift_reachability',
459
+ args: { direction: 'forward', location: files[0]?.file },
460
+ reason: 'Trace what data this code can access',
461
+ });
462
+ }
463
+ // Suggest file patterns for understanding
464
+ if (intent === 'understand_code' && files.length > 0) {
465
+ suggestions.push({
466
+ tool: 'drift_file_patterns',
467
+ args: { file: files[0]?.file },
468
+ reason: `Deep dive into patterns in ${files[0]?.file}`,
469
+ });
470
+ }
471
+ return suggestions;
472
+ }
473
+ function buildSummary(intent, focus, patterns, files, warnings) {
474
+ const intentLabels = {
475
+ add_feature: 'Adding feature',
476
+ fix_bug: 'Fixing bug',
477
+ refactor: 'Refactoring',
478
+ security_audit: 'Security audit',
479
+ understand_code: 'Understanding code',
480
+ add_test: 'Adding tests',
481
+ };
482
+ let summary = `${intentLabels[intent]} in "${focus}". `;
483
+ summary += `Found ${patterns.length} relevant pattern(s) and ${files.length} suggested file(s). `;
484
+ if (warnings.length > 0) {
485
+ const criticalCount = warnings.filter(w => w.severity === 'critical').length;
486
+ const warningCount = warnings.filter(w => w.severity === 'warning').length;
487
+ if (criticalCount > 0) {
488
+ summary += `⚠️ ${criticalCount} critical warning(s). `;
489
+ }
490
+ else if (warningCount > 0) {
491
+ summary += `${warningCount} warning(s) to review. `;
492
+ }
493
+ }
494
+ if (patterns.length > 0 && patterns[0]) {
495
+ summary += `Primary pattern: "${patterns[0].name}" (${Math.round(patterns[0].confidence * 100)}% confidence).`;
496
+ }
497
+ return summary;
498
+ }
499
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/tools/orchestration/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Orchestration Tools
3
+ *
4
+ * Meta-layer tools that understand intent and synthesize context from multiple sources.
5
+ * These are the "smart" tools that reduce cognitive load on the AI.
6
+ */
7
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
8
+ export declare const ORCHESTRATION_TOOLS: Tool[];
9
+ export { handleContext } from './context.js';
10
+ export type { TaskIntent, ContextPackage, RelevantPattern, SuggestedFile, Guidance, Warning, Confidence, DeeperDive, } from './context.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/orchestration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,mBAAmB,EAAE,IAAI,EA8CrC,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,YAAY,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Orchestration Tools
3
+ *
4
+ * Meta-layer tools that understand intent and synthesize context from multiple sources.
5
+ * These are the "smart" tools that reduce cognitive load on the AI.
6
+ */
7
+ export const ORCHESTRATION_TOOLS = [
8
+ {
9
+ name: 'drift_context',
10
+ description: `Get curated context for a specific task. This is the RECOMMENDED STARTING POINT for any code generation task.
11
+
12
+ Instead of calling multiple tools and synthesizing results yourself, tell drift_context what you're trying to do and it will return everything you need:
13
+ - Relevant patterns with examples
14
+ - Files you'll likely need to modify
15
+ - Guidance on how to approach the task
16
+ - Warnings about potential issues
17
+ - Confidence signals so you know when to verify
18
+
19
+ WHEN TO USE:
20
+ - Starting any code generation task
21
+ - Before making changes to unfamiliar code
22
+ - When you need to understand how something is done in this codebase
23
+
24
+ EXAMPLE:
25
+ intent: "add_feature", focus: "user authentication"
26
+ → Returns auth patterns, example code, files to modify, security warnings`,
27
+ inputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ intent: {
31
+ type: 'string',
32
+ enum: ['add_feature', 'fix_bug', 'refactor', 'security_audit', 'understand_code', 'add_test'],
33
+ description: `What are you trying to accomplish?
34
+ - add_feature: Adding new functionality
35
+ - fix_bug: Fixing a bug or issue
36
+ - refactor: Improving code structure without changing behavior
37
+ - security_audit: Reviewing code for security issues
38
+ - understand_code: Learning how something works
39
+ - add_test: Adding test coverage`,
40
+ },
41
+ focus: {
42
+ type: 'string',
43
+ description: 'The specific area, feature, or file you\'re working with. Examples: "user authentication", "payment processing", "src/api/users.ts"',
44
+ },
45
+ question: {
46
+ type: 'string',
47
+ description: 'Optional: A specific question you need answered. This helps tailor the guidance.',
48
+ },
49
+ },
50
+ required: ['intent', 'focus'],
51
+ },
52
+ },
53
+ ];
54
+ // Handler export
55
+ export { handleContext } from './context.js';
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/orchestration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAW;IACzC;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE;;;;;;;;;;;;;;;;4EAgB2D;QACxE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,CAAC;oBAC7F,WAAW,EAAE;;;;;;iCAMU;iBACxB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qIAAqI;iBACnJ;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kFAAkF;iBAChG;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC9B;KACF;CACF,CAAC;AAEF,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Tool Registry
3
+ *
4
+ * Central registry for all MCP tools with:
5
+ * - Tool definitions (schemas)
6
+ * - Handler routing
7
+ * - Middleware support
8
+ */
9
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
10
+ /**
11
+ * All registered tools
12
+ *
13
+ * Order matters for AI discovery:
14
+ * 1. Orchestration (recommended starting point)
15
+ * 2. Discovery (quick health checks)
16
+ * 3. Exploration (browsing/listing)
17
+ * 4. Detail (deep inspection)
18
+ */
19
+ export declare const ALL_TOOLS: Tool[];
20
+ /**
21
+ * Tool categories for documentation
22
+ */
23
+ export declare const TOOL_CATEGORIES: {
24
+ orchestration: string[];
25
+ discovery: string[];
26
+ exploration: string[];
27
+ detail: string[];
28
+ };
29
+ /**
30
+ * Get tool by name
31
+ */
32
+ export declare function getTool(name: string): Tool | undefined;
33
+ /**
34
+ * Check if tool exists
35
+ */
36
+ export declare function hasTool(name: string): boolean;
37
+ /**
38
+ * Get tools by category
39
+ */
40
+ export declare function getToolsByCategory(category: 'orchestration' | 'discovery' | 'exploration' | 'detail'): Tool[];
41
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAM/D;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,IAAI,EAK3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEtD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,IAAI,EAAE,CAW7G"}