driftdetect-mcp 0.5.1 → 0.6.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 (36) hide show
  1. package/dist/bin/server.js +0 -0
  2. package/dist/enterprise-server.d.ts.map +1 -1
  3. package/dist/enterprise-server.js +15 -0
  4. package/dist/enterprise-server.js.map +1 -1
  5. package/dist/tools/analysis/constraints.d.ts +40 -0
  6. package/dist/tools/analysis/constraints.d.ts.map +1 -0
  7. package/dist/tools/analysis/constraints.js +236 -0
  8. package/dist/tools/analysis/constraints.js.map +1 -0
  9. package/dist/tools/analysis/decisions.d.ts +54 -0
  10. package/dist/tools/analysis/decisions.d.ts.map +1 -0
  11. package/dist/tools/analysis/decisions.js +307 -0
  12. package/dist/tools/analysis/decisions.js.map +1 -0
  13. package/dist/tools/analysis/go.d.ts +22 -0
  14. package/dist/tools/analysis/go.d.ts.map +1 -0
  15. package/dist/tools/analysis/go.js +214 -0
  16. package/dist/tools/analysis/go.js.map +1 -0
  17. package/dist/tools/analysis/index.d.ts +5 -0
  18. package/dist/tools/analysis/index.d.ts.map +1 -1
  19. package/dist/tools/analysis/index.js +209 -0
  20. package/dist/tools/analysis/index.js.map +1 -1
  21. package/dist/tools/analysis/simulate.d.ts +27 -0
  22. package/dist/tools/analysis/simulate.d.ts.map +1 -0
  23. package/dist/tools/analysis/simulate.js +89 -0
  24. package/dist/tools/analysis/simulate.js.map +1 -0
  25. package/dist/tools/analysis/wpf.d.ts +23 -0
  26. package/dist/tools/analysis/wpf.d.ts.map +1 -0
  27. package/dist/tools/analysis/wpf.js +240 -0
  28. package/dist/tools/analysis/wpf.js.map +1 -0
  29. package/dist/tools/detail/files-list.js +5 -5
  30. package/dist/tools/detail/files-list.js.map +1 -1
  31. package/dist/tools/orchestration/context.d.ts +15 -1
  32. package/dist/tools/orchestration/context.d.ts.map +1 -1
  33. package/dist/tools/orchestration/context.js +248 -4
  34. package/dist/tools/orchestration/context.js.map +1 -1
  35. package/package.json +31 -16
  36. package/LICENSE +0 -21
@@ -6,7 +6,58 @@
6
6
  const TEST_TOPOLOGY_ACTIONS = ['status', 'coverage', 'uncovered', 'mocks', 'affected', 'quality'];
7
7
  const COUPLING_ACTIONS = ['status', 'cycles', 'hotspots', 'analyze', 'refactor-impact', 'unused-exports'];
8
8
  const ERROR_HANDLING_ACTIONS = ['status', 'gaps', 'boundaries', 'unhandled', 'analyze'];
9
+ const DECISIONS_ACTIONS = ['status', 'list', 'get', 'for-file', 'timeline', 'search', 'mine'];
10
+ const CONSTRAINTS_ACTIONS = ['list', 'show', 'extract', 'approve', 'ignore', 'verify'];
11
+ const WPF_ACTIONS = ['status', 'bindings', 'mvvm', 'datacontext', 'commands'];
12
+ const GO_ACTIONS = ['status', 'routes', 'errors', 'interfaces', 'data-access', 'goroutines'];
13
+ const DECISION_CATEGORIES = [
14
+ 'technology-adoption', 'technology-removal', 'pattern-introduction',
15
+ 'pattern-migration', 'architecture-change', 'api-change',
16
+ 'security-enhancement', 'performance-optimization', 'refactoring',
17
+ 'testing-strategy', 'infrastructure', 'other'
18
+ ];
19
+ const TASK_CATEGORIES = [
20
+ 'rate-limiting', 'authentication', 'authorization', 'api-endpoint',
21
+ 'data-access', 'error-handling', 'caching', 'logging', 'testing',
22
+ 'validation', 'middleware', 'refactoring', 'generic'
23
+ ];
9
24
  export const ANALYSIS_TOOLS = [
25
+ {
26
+ name: 'drift_simulate',
27
+ description: 'Speculative Execution Engine: Simulates multiple implementation approaches BEFORE code generation, scoring them by friction, impact, and pattern alignment. Returns ranked approaches with trade-off analysis.',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ task: {
32
+ type: 'string',
33
+ description: 'Task description (e.g., "add rate limiting to API", "implement user authentication")',
34
+ },
35
+ category: {
36
+ type: 'string',
37
+ enum: TASK_CATEGORIES,
38
+ description: 'Task category (auto-detected if not provided)',
39
+ },
40
+ target: {
41
+ type: 'string',
42
+ description: 'Target file or function to focus on',
43
+ },
44
+ constraints: {
45
+ type: 'array',
46
+ items: { type: 'string' },
47
+ description: 'Constraints (e.g., "must work with existing auth", "minimal file changes")',
48
+ },
49
+ maxApproaches: {
50
+ type: 'number',
51
+ description: 'Maximum approaches to simulate (default: 5)',
52
+ },
53
+ includeSecurityAnalysis: {
54
+ type: 'boolean',
55
+ description: 'Include security analysis (default: true)',
56
+ },
57
+ },
58
+ required: ['task'],
59
+ },
60
+ },
10
61
  {
11
62
  name: 'drift_test_topology',
12
63
  description: 'Analyze test-to-code mappings, mock patterns, and test quality. Actions: status (overview), coverage (file coverage), uncovered (find gaps), mocks (mock analysis), affected (minimum test set), quality (test quality metrics).',
@@ -104,8 +155,166 @@ export const ANALYSIS_TOOLS = [
104
155
  required: ['action'],
105
156
  },
106
157
  },
158
+ {
159
+ name: 'drift_decisions',
160
+ description: 'Mine architectural decisions from git history. Analyzes commits to discover and synthesize ADRs (Architecture Decision Records). Actions: status (overview), list (all decisions), get (decision details), for-file (decisions affecting file), timeline (chronological view), search (find decisions), mine (run mining).',
161
+ inputSchema: {
162
+ type: 'object',
163
+ properties: {
164
+ action: {
165
+ type: 'string',
166
+ enum: DECISIONS_ACTIONS,
167
+ description: 'Action to perform: status, list, get, for-file, timeline, search, mine',
168
+ },
169
+ id: {
170
+ type: 'string',
171
+ description: 'Decision ID for get action',
172
+ },
173
+ file: {
174
+ type: 'string',
175
+ description: 'File path for for-file action',
176
+ },
177
+ query: {
178
+ type: 'string',
179
+ description: 'Search query for search action',
180
+ },
181
+ category: {
182
+ type: 'string',
183
+ enum: DECISION_CATEGORIES,
184
+ description: 'Filter by category for list action',
185
+ },
186
+ limit: {
187
+ type: 'number',
188
+ description: 'Max results (default: 20)',
189
+ },
190
+ since: {
191
+ type: 'string',
192
+ description: 'Start date (ISO format) for mine action',
193
+ },
194
+ until: {
195
+ type: 'string',
196
+ description: 'End date (ISO format) for mine action',
197
+ },
198
+ minConfidence: {
199
+ type: 'number',
200
+ description: 'Minimum confidence (0-1) for mine action (default: 0.5)',
201
+ },
202
+ },
203
+ required: ['action'],
204
+ },
205
+ },
206
+ {
207
+ name: 'drift_constraints',
208
+ description: 'Manage architectural constraints learned from the codebase. Constraints are invariants that MUST be satisfied. Actions: list (all constraints), show (constraint details), extract (discover from codebase), approve (activate constraint), ignore (disable constraint), verify (check file against constraints).',
209
+ inputSchema: {
210
+ type: 'object',
211
+ properties: {
212
+ action: {
213
+ type: 'string',
214
+ enum: CONSTRAINTS_ACTIONS,
215
+ description: 'Action to perform: list, show, extract, approve, ignore, verify',
216
+ },
217
+ id: {
218
+ type: 'string',
219
+ description: 'Constraint ID for show/approve/ignore actions',
220
+ },
221
+ file: {
222
+ type: 'string',
223
+ description: 'File path for verify action',
224
+ },
225
+ category: {
226
+ type: 'string',
227
+ enum: ['api', 'auth', 'data', 'error', 'test', 'security', 'structural', 'performance', 'logging', 'validation'],
228
+ description: 'Filter by category',
229
+ },
230
+ status: {
231
+ type: 'string',
232
+ enum: ['discovered', 'approved', 'ignored', 'custom'],
233
+ description: 'Filter by status',
234
+ },
235
+ limit: {
236
+ type: 'number',
237
+ description: 'Max results (default: 20)',
238
+ },
239
+ minConfidence: {
240
+ type: 'number',
241
+ description: 'Minimum confidence (0-1)',
242
+ },
243
+ reason: {
244
+ type: 'string',
245
+ description: 'Reason for ignore action',
246
+ },
247
+ },
248
+ required: ['action'],
249
+ },
250
+ },
251
+ {
252
+ name: 'drift_wpf',
253
+ description: 'Analyze WPF applications: bindings, MVVM compliance, data flow. Actions: status (project overview), bindings (list all bindings), mvvm (compliance check), datacontext (resolution), commands (list commands).',
254
+ inputSchema: {
255
+ type: 'object',
256
+ properties: {
257
+ action: {
258
+ type: 'string',
259
+ enum: WPF_ACTIONS,
260
+ description: 'Action to perform: status, bindings, mvvm, datacontext, commands',
261
+ },
262
+ path: {
263
+ type: 'string',
264
+ description: 'File or directory path (defaults to project root)',
265
+ },
266
+ options: {
267
+ type: 'object',
268
+ properties: {
269
+ unresolvedOnly: {
270
+ type: 'boolean',
271
+ description: 'Show only unresolved bindings',
272
+ },
273
+ limit: {
274
+ type: 'number',
275
+ description: 'Limit number of results',
276
+ },
277
+ },
278
+ description: 'Additional options',
279
+ },
280
+ },
281
+ required: ['action'],
282
+ },
283
+ },
284
+ {
285
+ name: 'drift_go',
286
+ description: 'Analyze Go projects: routes, error handling, interfaces, data access, goroutines. Actions: status (project overview), routes (HTTP routes), errors (error handling patterns), interfaces (interface analysis), data-access (database patterns), goroutines (concurrency analysis).',
287
+ inputSchema: {
288
+ type: 'object',
289
+ properties: {
290
+ action: {
291
+ type: 'string',
292
+ enum: GO_ACTIONS,
293
+ description: 'Action to perform: status, routes, errors, interfaces, data-access, goroutines',
294
+ },
295
+ path: {
296
+ type: 'string',
297
+ description: 'File or directory path (defaults to project root)',
298
+ },
299
+ framework: {
300
+ type: 'string',
301
+ description: 'Filter by framework (for routes action): gin, echo, chi, fiber, net/http',
302
+ },
303
+ limit: {
304
+ type: 'number',
305
+ description: 'Limit number of results (default: 50)',
306
+ },
307
+ },
308
+ required: ['action'],
309
+ },
310
+ },
107
311
  ];
108
312
  export { handleTestTopology } from './test-topology.js';
109
313
  export { handleCoupling } from './coupling.js';
110
314
  export { handleErrorHandling } from './error-handling.js';
315
+ export { handleDecisions } from './decisions.js';
316
+ export { handleSimulate } from './simulate.js';
317
+ export { handleConstraints } from './constraints.js';
318
+ export { executeWpfTool } from './wpf.js';
319
+ export { executeGoTool } from './go.js';
111
320
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/analysis/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/analysis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * drift_simulate - Speculative Execution Engine
3
+ *
4
+ * Simulates multiple implementation approaches BEFORE code generation,
5
+ * scoring them by friction, impact, and pattern alignment.
6
+ *
7
+ * This is a novel capability - no other AI coding assistant does pre-flight simulation.
8
+ */
9
+ import { type SimulationResult, type TaskCategory } from 'driftdetect-core';
10
+ export interface SimulateArgs {
11
+ task: string;
12
+ category?: TaskCategory;
13
+ target?: string;
14
+ constraints?: string[];
15
+ maxApproaches?: number;
16
+ includeSecurityAnalysis?: boolean;
17
+ }
18
+ export interface SimulateData {
19
+ result: SimulationResult;
20
+ }
21
+ export declare function handleSimulate(projectRoot: string, args: SimulateArgs): Promise<{
22
+ content: Array<{
23
+ type: string;
24
+ text: string;
25
+ }>;
26
+ }>;
27
+ //# sourceMappingURL=simulate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate.d.ts","sourceRoot":"","sources":["../../../src/tools/analysis/simulate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAO1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAMD,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkF7D"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * drift_simulate - Speculative Execution Engine
3
+ *
4
+ * Simulates multiple implementation approaches BEFORE code generation,
5
+ * scoring them by friction, impact, and pattern alignment.
6
+ *
7
+ * This is a novel capability - no other AI coding assistant does pre-flight simulation.
8
+ */
9
+ import { createSimulationEngine, createCallGraphAnalyzer, createPatternService, createPatternRepository, } from 'driftdetect-core';
10
+ import { createResponseBuilder, Errors } from '../../infrastructure/index.js';
11
+ // ============================================================================
12
+ // Handler
13
+ // ============================================================================
14
+ export async function handleSimulate(projectRoot, args) {
15
+ const builder = createResponseBuilder();
16
+ if (!args.task) {
17
+ throw Errors.missingParameter('task');
18
+ }
19
+ // Load call graph (optional but recommended)
20
+ let callGraph;
21
+ try {
22
+ const callGraphAnalyzer = createCallGraphAnalyzer({ rootDir: projectRoot });
23
+ await callGraphAnalyzer.initialize();
24
+ callGraph = callGraphAnalyzer.getGraph();
25
+ }
26
+ catch {
27
+ // Call graph not available
28
+ }
29
+ // Load pattern service (optional but recommended)
30
+ let patternService;
31
+ try {
32
+ const repository = await createPatternRepository({ rootDir: projectRoot });
33
+ patternService = createPatternService(repository, projectRoot);
34
+ }
35
+ catch {
36
+ // Patterns not available
37
+ }
38
+ // Create simulation engine
39
+ const engine = createSimulationEngine({
40
+ projectRoot,
41
+ callGraph: callGraph ?? undefined,
42
+ patternService: patternService ?? undefined,
43
+ options: {
44
+ maxApproaches: args.maxApproaches ?? 5,
45
+ includeSecurityAnalysis: args.includeSecurityAnalysis ?? true,
46
+ },
47
+ });
48
+ // Build task
49
+ const task = {
50
+ description: args.task,
51
+ category: args.category,
52
+ target: args.target,
53
+ constraints: args.constraints?.map(c => ({
54
+ type: 'custom',
55
+ value: c,
56
+ description: c,
57
+ })),
58
+ };
59
+ // Run simulation
60
+ const result = await engine.simulate(task);
61
+ // Build summary
62
+ let summaryText = `🔮 Simulated ${result.approaches.length} approaches for: "${args.task}". `;
63
+ summaryText += `Recommended: "${result.recommended.approach.name}" `;
64
+ summaryText += `(score: ${Math.round(result.recommended.score)}/100). `;
65
+ summaryText += `Confidence: ${result.confidence.score}%.`;
66
+ // Build hints
67
+ const warnings = [];
68
+ if (result.confidence.limitations.length > 0) {
69
+ warnings.push(...result.confidence.limitations);
70
+ }
71
+ if (result.recommended.warnings.length > 0) {
72
+ warnings.push(...result.recommended.warnings.slice(0, 3));
73
+ }
74
+ const hints = {
75
+ nextActions: result.recommended.nextSteps.slice(0, 3),
76
+ warnings: warnings.length > 0 ? warnings : undefined,
77
+ relatedTools: [
78
+ 'drift_impact_analysis',
79
+ 'drift_patterns_list',
80
+ 'drift_code_examples',
81
+ ],
82
+ };
83
+ return builder
84
+ .withSummary(summaryText)
85
+ .withData({ result })
86
+ .withHints(hints)
87
+ .buildContent();
88
+ }
89
+ //# sourceMappingURL=simulate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/tools/analysis/simulate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WPF Analysis MCP Tool
3
+ *
4
+ * Analyze WPF applications: bindings, MVVM compliance, data flow.
5
+ */
6
+ export type WpfAction = 'status' | 'bindings' | 'mvvm' | 'datacontext' | 'commands' | 'flow' | 'converters';
7
+ export interface WpfArgs {
8
+ action: WpfAction;
9
+ path?: string;
10
+ unresolvedOnly?: boolean;
11
+ limit?: number;
12
+ element?: string;
13
+ }
14
+ export interface ToolContext {
15
+ projectRoot: string;
16
+ }
17
+ export declare function executeWpfTool(args: WpfArgs, context: ToolContext): Promise<{
18
+ content: Array<{
19
+ type: string;
20
+ text: string;
21
+ }>;
22
+ }>;
23
+ //# sourceMappingURL=wpf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wpf.d.ts","sourceRoot":"","sources":["../../../src/tools/analysis/wpf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,aAAa,GACb,UAAU,GACV,MAAM,GACN,YAAY,CAAC;AAEjB,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAqG7D"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * WPF Analysis MCP Tool
3
+ *
4
+ * Analyze WPF applications: bindings, MVVM compliance, data flow.
5
+ */
6
+ import { createWpfAnalyzer, createWpfDataFlowTracer, createValueConverterExtractor, } from 'driftdetect-core';
7
+ // ============================================================================
8
+ // Tool Implementation
9
+ // ============================================================================
10
+ export async function executeWpfTool(args, context) {
11
+ const projectPath = args.path ?? context.projectRoot;
12
+ const limit = args.limit ?? 50;
13
+ const analyzer = createWpfAnalyzer({
14
+ rootDir: projectPath,
15
+ verbose: false,
16
+ });
17
+ let result;
18
+ switch (args.action) {
19
+ case 'status': {
20
+ const analysisResult = await analyzer.analyze();
21
+ result = formatStatusResult(analysisResult, limit);
22
+ break;
23
+ }
24
+ case 'bindings': {
25
+ const analysisResult = await analyzer.analyze();
26
+ result = formatBindingsResult(analysisResult, args.unresolvedOnly, limit);
27
+ break;
28
+ }
29
+ case 'mvvm': {
30
+ const complianceResult = await analyzer.checkMvvmCompliance();
31
+ result = formatMvvmResult(complianceResult, limit);
32
+ break;
33
+ }
34
+ case 'datacontext': {
35
+ const analysisResult = await analyzer.analyze();
36
+ result = formatDataContextResult(analysisResult, limit);
37
+ break;
38
+ }
39
+ case 'commands': {
40
+ const analysisResult = await analyzer.analyze();
41
+ result = formatCommandsResult(analysisResult, limit);
42
+ break;
43
+ }
44
+ case 'flow': {
45
+ if (!args.element) {
46
+ throw new Error('Element name required for flow tracing');
47
+ }
48
+ const analysisResult = await analyzer.analyze();
49
+ const tracer = createWpfDataFlowTracer();
50
+ tracer.initialize(analysisResult.xamlFiles, analysisResult.viewModels, analysisResult.links);
51
+ const flow = tracer.trace(args.element);
52
+ result = {
53
+ element: flow.element,
54
+ steps: flow.steps.map(s => ({
55
+ type: s.type,
56
+ location: s.location,
57
+ file: s.file,
58
+ line: s.line,
59
+ details: s.details,
60
+ })),
61
+ reachesDatabase: flow.reachesDatabase,
62
+ sensitiveDataAccessed: flow.sensitiveDataAccessed,
63
+ depth: flow.depth,
64
+ confidence: flow.confidence,
65
+ summary: `Data flow trace for '${args.element}': ${flow.steps.length} steps, ${flow.reachesDatabase ? 'reaches database' : 'no database access'}`,
66
+ };
67
+ break;
68
+ }
69
+ case 'converters': {
70
+ const extractor = createValueConverterExtractor();
71
+ const converterResult = await extractor.analyzeProject(projectPath);
72
+ result = {
73
+ total: converterResult.converters.length,
74
+ totalUsages: converterResult.totalUsages,
75
+ converters: converterResult.converters.slice(0, limit).map(c => ({
76
+ className: c.className,
77
+ qualifiedName: c.qualifiedName,
78
+ type: c.converterType,
79
+ resourceKeys: c.resourceKeys,
80
+ hasConvert: c.convertMethod?.hasImplementation ?? false,
81
+ hasConvertBack: c.convertBackMethod?.hasImplementation ?? false,
82
+ usageCount: c.usages.length,
83
+ file: c.filePath,
84
+ line: c.location.line,
85
+ })),
86
+ truncated: converterResult.converters.length > limit,
87
+ summary: `${converterResult.converters.length} value converters with ${converterResult.totalUsages} total usages`,
88
+ };
89
+ break;
90
+ }
91
+ default:
92
+ throw new Error(`Unknown action: ${args.action}`);
93
+ }
94
+ return {
95
+ content: [{
96
+ type: 'text',
97
+ text: JSON.stringify(result, null, 2),
98
+ }],
99
+ };
100
+ }
101
+ // ============================================================================
102
+ // Result Formatters
103
+ // ============================================================================
104
+ function formatStatusResult(result, limit) {
105
+ return {
106
+ project: result.project ? {
107
+ projectFile: result.project.projectFile,
108
+ targetFramework: result.project.targetFramework,
109
+ xamlFileCount: result.project.xamlFiles.length,
110
+ viewModelCount: result.project.viewModels.length,
111
+ converterCount: result.project.converters.length,
112
+ } : null,
113
+ stats: {
114
+ xamlFilesAnalyzed: result.stats.xamlFileCount,
115
+ viewModelsFound: result.stats.viewModelCount,
116
+ totalBindings: result.stats.totalBindings,
117
+ resolvedBindings: result.stats.resolvedBindings,
118
+ unresolvedBindings: result.stats.unresolvedBindings,
119
+ totalCommands: result.stats.totalCommands,
120
+ analysisTimeMs: Math.round(result.stats.analysisTimeMs),
121
+ },
122
+ viewModels: Array.from(result.viewModels.values())
123
+ .slice(0, limit)
124
+ .map(vm => ({
125
+ name: vm.className,
126
+ qualifiedName: vm.qualifiedName,
127
+ properties: vm.properties.length,
128
+ commands: vm.commands.length,
129
+ implementsINPC: vm.implementsINPC,
130
+ file: vm.filePath,
131
+ })),
132
+ summary: `WPF project with ${result.stats.xamlFileCount} XAML files, ${result.stats.viewModelCount} ViewModels, ${result.stats.totalBindings} bindings (${result.stats.resolvedBindings} resolved, ${result.stats.unresolvedBindings} unresolved)`,
133
+ };
134
+ }
135
+ function formatBindingsResult(result, unresolvedOnly, limit) {
136
+ const resolved = result.links.map(link => ({
137
+ xamlFile: link.xamlFile,
138
+ element: link.xamlElement,
139
+ bindingPath: link.bindingPath,
140
+ viewModel: link.viewModelClass,
141
+ property: link.viewModelProperty,
142
+ propertyType: link.propertyType,
143
+ notifiesChange: link.notifiesChange,
144
+ confidence: link.confidence,
145
+ resolved: true,
146
+ }));
147
+ const unresolved = result.bindingErrors.map(error => ({
148
+ xamlFile: error.xamlFile,
149
+ bindingPath: error.bindingPath,
150
+ line: error.line,
151
+ error: error.message,
152
+ suggestion: error.suggestion,
153
+ resolved: false,
154
+ }));
155
+ const bindings = unresolvedOnly
156
+ ? unresolved
157
+ : [...resolved, ...unresolved];
158
+ return {
159
+ total: result.stats.totalBindings,
160
+ resolved: result.stats.resolvedBindings,
161
+ unresolved: result.stats.unresolvedBindings,
162
+ resolutionRate: result.stats.totalBindings > 0
163
+ ? Math.round((result.stats.resolvedBindings / result.stats.totalBindings) * 100)
164
+ : 100,
165
+ bindings: bindings.slice(0, limit),
166
+ truncated: bindings.length > limit,
167
+ };
168
+ }
169
+ function formatMvvmResult(result, limit) {
170
+ return {
171
+ score: result.score,
172
+ status: result.score >= 80 ? 'good' : result.score >= 60 ? 'needs-improvement' : 'poor',
173
+ violationCount: result.violations.length,
174
+ violations: result.violations.slice(0, limit).map(v => ({
175
+ type: v.type,
176
+ severity: v.severity,
177
+ file: v.file,
178
+ line: v.line,
179
+ message: v.message,
180
+ suggestion: v.suggestion,
181
+ })),
182
+ recommendations: result.recommendations,
183
+ summary: `MVVM compliance score: ${result.score}/100 with ${result.violations.length} violation(s)`,
184
+ };
185
+ }
186
+ function formatDataContextResult(result, limit) {
187
+ const resolutions = result.dataContexts.map(dc => ({
188
+ xamlFile: dc.xamlFile,
189
+ resolvedType: dc.resolvedType,
190
+ confidence: dc.confidence,
191
+ resolutionPath: dc.resolutionPath.map(step => ({
192
+ source: step.source,
193
+ type: step.type,
194
+ })),
195
+ }));
196
+ const resolved = resolutions.filter(r => r.resolvedType !== null);
197
+ const unresolved = resolutions.filter(r => r.resolvedType === null);
198
+ return {
199
+ total: resolutions.length,
200
+ resolved: resolved.length,
201
+ unresolved: unresolved.length,
202
+ views: resolutions.slice(0, limit),
203
+ truncated: resolutions.length > limit,
204
+ summary: `${resolved.length}/${resolutions.length} views have resolved DataContext`,
205
+ };
206
+ }
207
+ function formatCommandsResult(result, limit) {
208
+ const commands = [];
209
+ for (const vm of result.viewModels.values()) {
210
+ for (const cmd of vm.commands) {
211
+ commands.push({
212
+ name: cmd.name,
213
+ viewModel: vm.className,
214
+ executeMethod: cmd.executeMethod,
215
+ canExecuteMethod: cmd.canExecuteMethod,
216
+ isAsync: cmd.isAsync,
217
+ commandType: cmd.commandType,
218
+ file: vm.filePath,
219
+ line: cmd.location.line,
220
+ });
221
+ }
222
+ }
223
+ // Group by ViewModel
224
+ const byViewModel = new Map();
225
+ for (const cmd of commands) {
226
+ const existing = byViewModel.get(cmd.viewModel) ?? [];
227
+ existing.push(cmd);
228
+ byViewModel.set(cmd.viewModel, existing);
229
+ }
230
+ return {
231
+ total: commands.length,
232
+ byViewModel: Object.fromEntries(Array.from(byViewModel.entries())
233
+ .slice(0, limit)
234
+ .map(([vm, cmds]) => [vm, cmds])),
235
+ commands: commands.slice(0, limit),
236
+ truncated: commands.length > limit,
237
+ summary: `${commands.length} commands across ${byViewModel.size} ViewModels`,
238
+ };
239
+ }
240
+ //# sourceMappingURL=wpf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wpf.js","sourceRoot":"","sources":["../../../src/tools/analysis/wpf.ts"],"names":[],"mappings":"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"}