couchloop-eq-mcp 1.1.4 → 1.2.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 (87) hide show
  1. package/README.md +40 -38
  2. package/dist/clients/shrinkChatClient.d.ts +10 -10
  3. package/dist/index.js +81 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/server/http-mcp.d.ts.map +1 -1
  6. package/dist/server/http-mcp.js +17 -3
  7. package/dist/server/http-mcp.js.map +1 -1
  8. package/dist/server/sse.js +1 -1
  9. package/dist/tools/check-versions.d.ts +4 -4
  10. package/dist/tools/checkpoint.d.ts +2 -19
  11. package/dist/tools/checkpoint.d.ts.map +1 -1
  12. package/dist/tools/checkpoint.js +68 -2
  13. package/dist/tools/checkpoint.js.map +1 -1
  14. package/dist/tools/comprehensive-code-review.d.ts +78 -0
  15. package/dist/tools/comprehensive-code-review.d.ts.map +1 -0
  16. package/dist/tools/comprehensive-code-review.js +177 -0
  17. package/dist/tools/comprehensive-code-review.js.map +1 -0
  18. package/dist/tools/comprehensive-package-audit.d.ts +75 -0
  19. package/dist/tools/comprehensive-package-audit.d.ts.map +1 -0
  20. package/dist/tools/comprehensive-package-audit.js +151 -0
  21. package/dist/tools/comprehensive-package-audit.js.map +1 -0
  22. package/dist/tools/detect-build-context.d.ts +59 -0
  23. package/dist/tools/detect-build-context.d.ts.map +1 -0
  24. package/dist/tools/detect-build-context.js +80 -0
  25. package/dist/tools/detect-build-context.js.map +1 -0
  26. package/dist/tools/generate-upgrade-report.d.ts +85 -0
  27. package/dist/tools/generate-upgrade-report.d.ts.map +1 -0
  28. package/dist/tools/generate-upgrade-report.js +102 -0
  29. package/dist/tools/generate-upgrade-report.js.map +1 -0
  30. package/dist/tools/index-full.d.ts +1355 -0
  31. package/dist/tools/index-full.d.ts.map +1 -0
  32. package/dist/tools/index-full.js +611 -0
  33. package/dist/tools/index-full.js.map +1 -0
  34. package/dist/tools/index.d.ts +27 -1018
  35. package/dist/tools/index.d.ts.map +1 -1
  36. package/dist/tools/index.js +29 -554
  37. package/dist/tools/index.js.map +1 -1
  38. package/dist/tools/insight.d.ts +31 -12
  39. package/dist/tools/insight.d.ts.map +1 -1
  40. package/dist/tools/insight.js +2 -1
  41. package/dist/tools/insight.js.map +1 -1
  42. package/dist/tools/intent-router.d.ts +142 -0
  43. package/dist/tools/intent-router.d.ts.map +1 -0
  44. package/dist/tools/intent-router.js +453 -0
  45. package/dist/tools/intent-router.js.map +1 -0
  46. package/dist/tools/prevent-ai-errors.d.ts +85 -0
  47. package/dist/tools/prevent-ai-errors.d.ts.map +1 -0
  48. package/dist/tools/prevent-ai-errors.js +97 -0
  49. package/dist/tools/prevent-ai-errors.js.map +1 -0
  50. package/dist/tools/primary-tools.d.ts +615 -0
  51. package/dist/tools/primary-tools.d.ts.map +1 -0
  52. package/dist/tools/primary-tools.js +355 -0
  53. package/dist/tools/primary-tools.js.map +1 -0
  54. package/dist/tools/protect-files.d.ts +1 -1
  55. package/dist/tools/sendMessage.d.ts.map +1 -1
  56. package/dist/tools/sendMessage.js +17 -152
  57. package/dist/tools/sendMessage.js.map +1 -1
  58. package/dist/tools/session.d.ts +1 -1
  59. package/dist/tools/smart-context.d.ts +66 -0
  60. package/dist/tools/smart-context.d.ts.map +1 -0
  61. package/dist/tools/smart-context.js +167 -0
  62. package/dist/tools/smart-context.js.map +1 -0
  63. package/dist/tools/status.d.ts +118 -0
  64. package/dist/tools/status.d.ts.map +1 -0
  65. package/dist/tools/status.js +366 -0
  66. package/dist/tools/status.js.map +1 -0
  67. package/dist/tools/verify.d.ts +126 -0
  68. package/dist/tools/verify.d.ts.map +1 -0
  69. package/dist/tools/verify.js +308 -0
  70. package/dist/tools/verify.js.map +1 -0
  71. package/dist/types/checkpoint.d.ts +26 -1
  72. package/dist/types/checkpoint.d.ts.map +1 -1
  73. package/dist/types/checkpoint.js +17 -0
  74. package/dist/types/checkpoint.js.map +1 -1
  75. package/dist/types/insight.d.ts +2 -2
  76. package/dist/types/journey.d.ts +18 -18
  77. package/dist/types/session.d.ts +2 -2
  78. package/dist/utils/sanitize.d.ts +24 -0
  79. package/dist/utils/sanitize.d.ts.map +1 -0
  80. package/dist/utils/sanitize.js +117 -0
  81. package/dist/utils/sanitize.js.map +1 -0
  82. package/dist/workflows/engine.d.ts +2 -1
  83. package/dist/workflows/engine.d.ts.map +1 -1
  84. package/dist/workflows/engine.js +7 -1
  85. package/dist/workflows/engine.js.map +1 -1
  86. package/dist/workflows/index.d.ts +3 -3
  87. package/package.json +1 -1
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Intent Router - CouchLoop Discoverability Layer
3
+ *
4
+ * This module provides a meta-tool that routes loose/ambiguous user commands
5
+ * to the appropriate CouchLoop tool. Ensures couchloop tools are invoked
6
+ * regardless of how the user phrases their request.
7
+ *
8
+ * Pattern-based classification (0 latency, deterministic).
9
+ * Falls back to conversation tool for unknown intents.
10
+ */
11
+ import { logger } from '../utils/logger.js';
12
+ const INTENT_MAPPINGS = [
13
+ // Session Management - HIGH PRIORITY (check first)
14
+ {
15
+ patterns: [
16
+ /\b(end|finish|done|wrap[\s-]?up|close|stop|quit|exit)\b.*\b(session|chat|conversation|talking)?\b/i,
17
+ /\b(session|chat|conversation)\b.*\b(end|finish|done|close|stop)\b/i,
18
+ /\bi'?m\s+(done|finished|leaving)\b/i,
19
+ /\b(goodbye|bye|see\s+you|talk\s+later|gtg|gotta\s+go)\b/i,
20
+ // Casual closers
21
+ /\b(that'?s\s+all|all\s+set|we'?re\s+done|all\s+done)\b/i,
22
+ /\b(thanks?,?\s*)?(done|finished|that'?s\s+it)\b/i,
23
+ /\b(signing\s+off|logging\s+off|heading\s+out)\b/i,
24
+ /\b(catch\s+you\s+later|until\s+next\s+time|take\s+care)\b/i,
25
+ ],
26
+ tool: 'conversation',
27
+ action: 'end',
28
+ },
29
+ {
30
+ patterns: [
31
+ /\b(start|begin|new)\b.*\b(session|chat|conversation)\b/i,
32
+ /\b(session|chat|conversation)\b.*\b(start|begin|new)\b/i,
33
+ /\blet'?s\s+(start|begin|chat|talk)\b/i,
34
+ ],
35
+ tool: 'conversation',
36
+ action: 'start',
37
+ },
38
+ {
39
+ patterns: [
40
+ /\b(resume|continue|pick\s+up)\b.*\b(session|chat|conversation|where)\b/i,
41
+ /\bwhere\s+(were\s+we|did\s+we\s+leave)\b/i,
42
+ ],
43
+ tool: 'conversation',
44
+ action: 'resume',
45
+ },
46
+ {
47
+ patterns: [
48
+ /\b(session|chat)\s*(status|info|details)\b/i,
49
+ /\bwhat'?s\s+(the\s+)?(session|status)\b/i,
50
+ ],
51
+ tool: 'conversation',
52
+ action: 'status',
53
+ },
54
+ // Memory/Context - save, remember, checkpoint
55
+ {
56
+ patterns: [
57
+ /\b(save|store|keep|preserve|record|log)\b.*\b(this|that|it|progress|context|work)?\b/i,
58
+ /\b(remember|don'?t\s+forget|note)\b.*\b(this|that|it)?\b/i,
59
+ /\b(checkpoint|snapshot|bookmark)\b/i,
60
+ /\bsave\s+(for\s+later|my\s+progress)\b/i,
61
+ /\bkeep\s+track\b/i,
62
+ ],
63
+ tool: 'remember',
64
+ action: 'save',
65
+ },
66
+ {
67
+ patterns: [
68
+ /\b(recall|retrieve|get|show|what)\b.*\b(saved|stored|remembered|checkpoints?|context)\b/i,
69
+ /\bwhat\s+(do\s+you|did\s+we)\s+(remember|know|save)\b/i,
70
+ /\bprevious\s+(context|session|work)\b/i,
71
+ ],
72
+ tool: 'remember',
73
+ action: 'recall',
74
+ },
75
+ {
76
+ patterns: [
77
+ /\blist\b.*\b(saved|checkpoints?|insights?|memories)\b/i,
78
+ /\bshow\s+(all\s+)?(saved|checkpoints?|insights?)\b/i,
79
+ ],
80
+ tool: 'remember',
81
+ action: 'list',
82
+ },
83
+ // Code Review
84
+ {
85
+ patterns: [
86
+ /\b(review|check|analyze|audit|inspect|look\s+at)\b.*\b(code|this|function|file|snippet)?\b/i,
87
+ /\b(code)\b.*\b(review|check|analysis)\b/i,
88
+ /\b(security|vulnerability)\b.*\b(check|scan|audit)\b/i,
89
+ /\b(lint|linting)\b/i,
90
+ /\b(find|detect)\b.*\b(bugs?|issues?|problems?|errors?)\b/i,
91
+ /\bis\s+(this|it)\s+(safe|secure|ok|good)\b/i,
92
+ /\bwhat'?s\s+wrong\s+with\b/i,
93
+ ],
94
+ tool: 'code_review',
95
+ },
96
+ // Package Audit
97
+ {
98
+ patterns: [
99
+ /\b(audit|check|validate)\b.*\b(packages?|dependencies|deps|npm|pypi)\b/i,
100
+ /\b(packages?|dependencies|deps)\b.*\b(audit|check|outdated|vulnerable)\b/i,
101
+ /\b(outdated|deprecated|vulnerable)\b.*\b(packages?|dependencies|deps)?\b/i,
102
+ /\bnpm\s+audit\b/i,
103
+ /\b(upgrade|update)\b.*\b(packages?|dependencies|deps)\b/i,
104
+ /\bsecurity\s+scan\b.*\b(packages?|deps)?\b/i,
105
+ ],
106
+ tool: 'package_audit',
107
+ },
108
+ // File Protection
109
+ {
110
+ patterns: [
111
+ /\b(backup|back\s+up)\b.*\b(file|code|this)?\b/i,
112
+ /\b(protect|guard|safe)\b.*\b(file|code|this)?\b/i,
113
+ /\b(freeze|lock)\b.*\b(code|file|changes?)?\b/i,
114
+ /\b(rollback|undo|restore|revert)\b/i,
115
+ /\bcode\s+freeze\b/i,
116
+ /\bsafe\s+mode\b/i,
117
+ ],
118
+ tool: 'protect',
119
+ },
120
+ // Help/Capabilities - show what couchloop can do
121
+ {
122
+ patterns: [
123
+ /\b(help|what\s+can\s+you\s+do|capabilities|features)\b/i,
124
+ /\b(list|show)\s+(tools|commands|options)\b/i,
125
+ /\bhow\s+do\s+i\b/i,
126
+ /\bwhat\s+(are|is)\s+(your|the)\s+(tools|capabilities|features)\b/i,
127
+ /\bguide|tutorial|getting\s+started\b/i,
128
+ ],
129
+ tool: 'help', // Special case - handled inline
130
+ },
131
+ // Brainstorm/Ideation - DEV THINKING PARTNER
132
+ {
133
+ patterns: [
134
+ /\b(brainstorm|ideate|think\s+through|map\s+out|explore)\b/i,
135
+ /\b(help\s+me\s+(think|figure|work)\s+(through|out))\b/i,
136
+ /\b(design|architect|plan)\b.*\b(feature|component|system|api|app|project)\b/i,
137
+ /\b(feature|component|system|api|app|project)\b.*\b(design|architect|plan)\b/i,
138
+ /\b(thinking\s+about|considering|mulling|pondering)\b.*\b(building|creating|implementing|adding)\b/i,
139
+ /\b(how\s+should\s+i|what'?s\s+the\s+best\s+way\s+to)\b.*\b(implement|build|design|structure)\b/i,
140
+ /\b(rubber\s+duck|think\s+out\s+loud|talk\s+through)\b/i,
141
+ /\bi\s+have\s+an?\s+idea\b/i,
142
+ /\b(let'?s\s+)?(flesh\s+out|scope\s+out|sketch\s+out)\b/i,
143
+ /\b(break\s+down|decompose)\b.*\b(problem|task|feature)\b/i,
144
+ /\b(spike|prototype|poc|proof\s+of\s+concept)\b/i,
145
+ /\b(trade[\s-]?offs?|pros\s+and\s+cons|options)\b/i,
146
+ ],
147
+ tool: 'conversation',
148
+ action: 'brainstorm',
149
+ },
150
+ // Status/Dashboard - NEW
151
+ {
152
+ patterns: [
153
+ /\b(how\s+am\s+i\s+doing|what'?s\s+my\s+(progress|status))\b/i,
154
+ /\b(show|check|get)\s+my\s+(status|progress|history)\b/i,
155
+ /\b(what\s+do\s+you\s+know\s+about\s+me)\b/i,
156
+ /\bmy\s+(settings|preferences)\b/i,
157
+ /\b(context\s+window|backup\s+status)\b/i,
158
+ /\bwhere\s+should\s+i\s+start\b/i,
159
+ /\b(dashboard|overview)\b/i,
160
+ /\bwhat'?s\s+(saved|stored|remembered)\b/i,
161
+ ],
162
+ tool: 'status',
163
+ action: 'all',
164
+ },
165
+ // Verify - PRE-DELIVERY VERIFICATION - NEW
166
+ {
167
+ patterns: [
168
+ /\b(verify|validate|check)\s+(this|my|the)\s+(response|code|answer|output)\b/i,
169
+ /\b(is\s+this|are\s+these)\s+(correct|right|accurate|true)\b/i,
170
+ /\bbefore\s+(i\s+)?(show|present|send)\b/i,
171
+ /\b(double[\s-]?check|fact[\s-]?check)\b/i,
172
+ /\b(verify|check)\s+before\s+(presenting|showing|sending)\b/i,
173
+ /\b(verify|validate)\s+(packages?|dependencies)\s+exist\b/i,
174
+ /\bdoes\s+(this|that)\s+package\s+exist\b/i,
175
+ /\b(check|verify)\s+for\s+(hallucination|errors|mistakes)\b/i,
176
+ ],
177
+ tool: 'verify',
178
+ defaultArgs: { type: 'all' },
179
+ },
180
+ // Wellness/Emotional Support - LOWEST PRIORITY (catch-all for emotional content)
181
+ {
182
+ patterns: [
183
+ /\b(stressed|anxious|worried|overwhelmed|sad|depressed|angry|frustrated|scared|lonely)\b/i,
184
+ /\b(feeling|i\s+feel|i'?m\s+feeling)\b/i,
185
+ /\b(help\s+me|need\s+help|struggling)\b/i,
186
+ /\bhow\s+are\s+you\b/i,
187
+ /\b(talk|chat|vent)\b.*\b(to\s+you|with\s+you)?\b/i,
188
+ /\b(support|encourage|listen)\b/i,
189
+ ],
190
+ tool: 'conversation',
191
+ action: 'send',
192
+ },
193
+ ];
194
+ function classifyIntent(input) {
195
+ const normalizedInput = input.toLowerCase().trim();
196
+ for (const mapping of INTENT_MAPPINGS) {
197
+ for (const pattern of mapping.patterns) {
198
+ if (pattern.test(normalizedInput)) {
199
+ return {
200
+ tool: mapping.tool,
201
+ action: mapping.action,
202
+ confidence: 0.9,
203
+ matchedPattern: pattern.source,
204
+ args: mapping.defaultArgs || {},
205
+ };
206
+ }
207
+ }
208
+ }
209
+ // Default fallback: conversation tool (send action)
210
+ return {
211
+ tool: 'conversation',
212
+ action: 'send',
213
+ confidence: 0.5,
214
+ args: {},
215
+ };
216
+ }
217
+ // ============================================================
218
+ // TOOL REGISTRY (populated by primary-tools.ts)
219
+ // ============================================================
220
+ const toolRegistry = new Map();
221
+ export function registerTools(tools) {
222
+ toolRegistry.clear();
223
+ for (const tool of tools) {
224
+ toolRegistry.set(tool.definition.name, { handler: tool.handler });
225
+ }
226
+ logger.info(`Intent router registered ${toolRegistry.size} tools`);
227
+ }
228
+ // ============================================================
229
+ // INTENT ROUTER TOOL DEFINITION
230
+ // ============================================================
231
+ export const intentRouterTool = {
232
+ definition: {
233
+ name: 'couchloop',
234
+ description: `Universal entry point for CouchLoop. Routes ANY command to the right tool. ALWAYS use for ambiguous/loose commands. Handles:
235
+ - Sessions: "end session", "start", "done", "wrap up", "goodbye", "resume", "where should I start", "hi", "hey"
236
+ - Status: "how am I doing", "what do you know about me", "show my progress", "my settings"
237
+ - Memory: "save", "remember", "checkpoint", "recall", "don't forget"
238
+ - Code: "review code", "check this", "find bugs", "is this safe"
239
+ - Packages: "audit dependencies", "outdated", "npm audit", "upgrade"
240
+ - Protection: "backup", "freeze code", "rollback", "undo", "restore"
241
+ - Wellness: "I'm stressed", "feeling anxious", "help me", "need to talk"
242
+ - Verification: "verify this", "check my response", "is this correct", "does this package exist"
243
+ - Brainstorm: "brainstorm", "think through", "map out feature", "help me design", "I have an idea", "flesh out", "trade-offs"
244
+
245
+ This tool should be invoked for ANY ambiguous or loose command related to sessions, memory, code quality, verification, brainstorming, or emotional support.`,
246
+ annotations: {
247
+ readOnlyHint: false,
248
+ destructiveHint: false,
249
+ openWorldHint: true,
250
+ },
251
+ inputSchema: {
252
+ type: 'object',
253
+ properties: {
254
+ intent: {
255
+ type: 'string',
256
+ description: 'What the user wants to do. Can be a loose phrase like "end session" or "review this code".',
257
+ },
258
+ context: {
259
+ type: 'string',
260
+ description: 'Additional context (code to review, message content, etc.)',
261
+ },
262
+ session_id: {
263
+ type: 'string',
264
+ description: 'Session ID if known',
265
+ },
266
+ },
267
+ required: ['intent'],
268
+ },
269
+ },
270
+ handler: async (args) => {
271
+ const intent = args.intent;
272
+ const context = args.context;
273
+ const sessionId = args.session_id;
274
+ if (!intent) {
275
+ return {
276
+ error: 'Missing required parameter: intent',
277
+ hint: 'Provide what the user wants to do, e.g., "end session" or "review code"',
278
+ };
279
+ }
280
+ // Classify the intent
281
+ const classification = classifyIntent(intent);
282
+ logger.info('Intent classification:', {
283
+ input: intent,
284
+ tool: classification.tool,
285
+ action: classification.action,
286
+ confidence: classification.confidence,
287
+ matchedPattern: classification.matchedPattern,
288
+ });
289
+ // Special case: help - return capabilities inline
290
+ if (classification.tool === 'help') {
291
+ return {
292
+ routed_to: 'help',
293
+ message: 'CouchLoop MCP Server - Available Tools',
294
+ tools: {
295
+ couchloop: 'Universal entry point - routes any command to the right tool',
296
+ verify: 'Pre-delivery verification - catches AI hallucinations, validates packages, checks code',
297
+ status: 'Dashboard - session progress, history, context, protection, preferences',
298
+ conversation: 'Therapeutic AI conversation with crisis detection and session memory. Actions: start, send, end, resume, status, brainstorm',
299
+ brainstorm: 'Dev thinking partner - reflective questions to help map out features, components, architecture decisions',
300
+ remember: 'Save and recall context, checkpoints, insights. Actions: save, recall, list, preferences',
301
+ code_review: 'Complete code analysis - security vulnerabilities, code smells, AI errors. Modes: full, security, quality, ai_errors, verify_before_presenting',
302
+ package_audit: 'Dependency audit - validates packages exist, checks versions, finds vulnerabilities. Modes: full, security, validate, validate_before_recommending',
303
+ protect: 'File protection - backup, freeze, rollback, restore',
304
+ },
305
+ examples: [
306
+ 'couchloop(intent: "end session") → ends current session',
307
+ 'couchloop(intent: "where should I start") → status with next steps',
308
+ 'couchloop(intent: "brainstorm a caching layer") → reflective dev thinking partner',
309
+ 'verify(type: "packages", content: "import lodash-utils") → validates package exists',
310
+ 'verify(type: "code", content: "function foo()...") → checks for AI errors',
311
+ 'status(check: "all") → full dashboard',
312
+ 'conversation(action: "brainstorm", message: "I want to add auth to my app") → asks clarifying questions',
313
+ 'conversation(action: "send", message: "I\'m feeling stressed") → wellness chat',
314
+ ],
315
+ hint: 'Use couchloop for loose commands, brainstorm to think through ideas, verify before presenting AI-generated content, or call specific tools directly.',
316
+ };
317
+ }
318
+ // Look up the target tool
319
+ const targetTool = toolRegistry.get(classification.tool);
320
+ if (!targetTool) {
321
+ return {
322
+ error: `Tool not found: ${classification.tool}`,
323
+ classification,
324
+ registeredTools: Array.from(toolRegistry.keys()),
325
+ };
326
+ }
327
+ // Build arguments for the target tool
328
+ const targetArgs = {
329
+ ...classification.args,
330
+ };
331
+ // Map common parameters
332
+ if (sessionId) {
333
+ targetArgs.session_id = sessionId;
334
+ }
335
+ // Tool-specific argument mapping
336
+ switch (classification.tool) {
337
+ case 'conversation':
338
+ targetArgs.action = classification.action || 'send';
339
+ targetArgs.message = context || intent;
340
+ break;
341
+ case 'remember':
342
+ targetArgs.action = classification.action || 'save';
343
+ targetArgs.content = context || intent;
344
+ break;
345
+ case 'code_review':
346
+ targetArgs.code = context || '';
347
+ if (!context) {
348
+ return {
349
+ routed_to: 'code_review',
350
+ message: 'Ready to review code. Please provide the code to analyze.',
351
+ hint: 'Invoke code_review directly with the code parameter, or call couchloop again with context containing the code.',
352
+ };
353
+ }
354
+ break;
355
+ case 'package_audit':
356
+ // Try to extract package names from context
357
+ if (context) {
358
+ const packages = context.split(/[,\s]+/).filter(p => p.length > 0);
359
+ targetArgs.packages = packages;
360
+ }
361
+ else {
362
+ return {
363
+ routed_to: 'package_audit',
364
+ message: 'Ready to audit packages. Please provide package names.',
365
+ hint: 'Invoke package_audit directly with the packages parameter.',
366
+ };
367
+ }
368
+ break;
369
+ case 'protect':
370
+ // Infer action from intent
371
+ if (/rollback|undo|restore|revert/i.test(intent)) {
372
+ targetArgs.action = 'rollback';
373
+ }
374
+ else if (/freeze|lock/i.test(intent)) {
375
+ targetArgs.action = 'freeze';
376
+ }
377
+ else if (/unfreeze|unlock/i.test(intent)) {
378
+ targetArgs.action = 'unfreeze';
379
+ }
380
+ else if (/backup/i.test(intent)) {
381
+ targetArgs.action = 'backup';
382
+ }
383
+ else {
384
+ targetArgs.action = 'status';
385
+ }
386
+ if (context) {
387
+ targetArgs.path = context;
388
+ }
389
+ break;
390
+ case 'status':
391
+ // Infer what to check from intent
392
+ if (/session|progress/i.test(intent)) {
393
+ targetArgs.check = 'session';
394
+ }
395
+ else if (/history|insight|pattern/i.test(intent)) {
396
+ targetArgs.check = 'history';
397
+ }
398
+ else if (/context|window|stored|decisions/i.test(intent)) {
399
+ targetArgs.check = 'context';
400
+ }
401
+ else if (/backup|protection|freeze/i.test(intent)) {
402
+ targetArgs.check = 'protection';
403
+ }
404
+ else if (/preference|setting|timezone/i.test(intent)) {
405
+ targetArgs.check = 'preferences';
406
+ }
407
+ else {
408
+ targetArgs.check = 'all';
409
+ }
410
+ break;
411
+ case 'verify':
412
+ // Infer verification type from intent/context
413
+ if (/package|dependenc|npm|pypi/i.test(intent) || /package|dependenc/i.test(context || '')) {
414
+ targetArgs.type = 'packages';
415
+ }
416
+ else if (/code|function|class|import/i.test(intent) || context?.includes('function') || context?.includes('import')) {
417
+ targetArgs.type = 'code';
418
+ }
419
+ else if (/fact|claim|statistic|true|correct/i.test(intent)) {
420
+ targetArgs.type = 'facts';
421
+ }
422
+ else if (/response|answer|output|tone/i.test(intent)) {
423
+ targetArgs.type = 'response';
424
+ }
425
+ else {
426
+ targetArgs.type = 'all';
427
+ }
428
+ targetArgs.content = context || intent;
429
+ break;
430
+ }
431
+ // Invoke the target tool
432
+ try {
433
+ const result = await targetTool.handler(targetArgs);
434
+ return {
435
+ routed_to: classification.tool,
436
+ action: classification.action,
437
+ confidence: classification.confidence,
438
+ result,
439
+ };
440
+ }
441
+ catch (error) {
442
+ const errorMessage = error instanceof Error ? error.message : 'Tool invocation failed';
443
+ logger.error('Intent router tool invocation failed:', error);
444
+ return {
445
+ routed_to: classification.tool,
446
+ error: errorMessage,
447
+ classification,
448
+ args_passed: targetArgs,
449
+ };
450
+ }
451
+ },
452
+ };
453
+ //# sourceMappingURL=intent-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-router.js","sourceRoot":"","sources":["../../src/tools/intent-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * MCP Tool: prevent_ai_errors
3
+ *
4
+ * Intercepts and prevents common AI coding errors before they cause problems.
5
+ * Catches hallucinated packages, build context issues, deprecated patterns, and more.
6
+ */
7
+ export declare const preventAIErrorsTool: {
8
+ name: string;
9
+ description: string;
10
+ annotations: {
11
+ readOnlyHint: boolean;
12
+ destructiveHint: boolean;
13
+ openWorldHint: boolean;
14
+ };
15
+ inputSchema: {
16
+ type: string;
17
+ properties: {
18
+ code: {
19
+ type: string;
20
+ description: string;
21
+ };
22
+ language: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ auto_fix: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ check_build_context: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ patterns: {
35
+ type: string;
36
+ items: {
37
+ type: string;
38
+ };
39
+ description: string;
40
+ };
41
+ };
42
+ required: string[];
43
+ };
44
+ };
45
+ export declare function handlePreventAIErrors(args: unknown): Promise<{
46
+ success: boolean;
47
+ errors_found: number;
48
+ errors: {
49
+ id: string;
50
+ name: string;
51
+ impact: "medium" | "low" | "high" | "critical";
52
+ category: "performance" | "build" | "syntax" | "logic" | "security" | "architecture";
53
+ description: string;
54
+ locations: {
55
+ line: number;
56
+ column: number;
57
+ snippet: string;
58
+ }[];
59
+ suggestion: string | undefined;
60
+ fixed: boolean;
61
+ }[];
62
+ warnings: string[];
63
+ prevented_errors: string[];
64
+ build_context: {
65
+ language: "unknown" | "javascript" | "typescript" | "python" | "java";
66
+ module_system: "commonjs" | "esm" | "umd" | "amd" | undefined;
67
+ package_manager: "npm" | "yarn" | "pnpm" | "pip" | "maven" | "gradle" | undefined;
68
+ requires_js_extensions: boolean;
69
+ ai_guidance: string[];
70
+ } | null;
71
+ fixed: boolean;
72
+ fixed_code: string | undefined;
73
+ error?: undefined;
74
+ } | {
75
+ success: boolean;
76
+ error: string;
77
+ errors_found?: undefined;
78
+ errors?: undefined;
79
+ warnings?: undefined;
80
+ prevented_errors?: undefined;
81
+ build_context?: undefined;
82
+ fixed?: undefined;
83
+ fixed_code?: undefined;
84
+ }>;
85
+ //# sourceMappingURL=prevent-ai-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prevent-ai-errors.d.ts","sourceRoot":"","sources":["../../src/tools/prevent-ai-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC/B,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CxD"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * MCP Tool: prevent_ai_errors
3
+ *
4
+ * Intercepts and prevents common AI coding errors before they cause problems.
5
+ * Catches hallucinated packages, build context issues, deprecated patterns, and more.
6
+ */
7
+ import { z } from 'zod';
8
+ import { AIErrorPreventer } from '../developer/evaluators/ai-error-preventer.js';
9
+ import { logger } from '../utils/logger.js';
10
+ const PreventAIErrorsInputSchema = z.object({
11
+ code: z.string().describe('Code to analyze for AI errors'),
12
+ language: z.string().default('typescript').describe('Programming language'),
13
+ auto_fix: z.boolean().default(false).describe('Attempt to auto-fix detected issues'),
14
+ check_build_context: z.boolean().default(true).describe('Detect and respect build context'),
15
+ patterns: z.array(z.string()).optional().describe('Specific error patterns to check (all if not specified)'),
16
+ });
17
+ export const preventAIErrorsTool = {
18
+ name: 'prevent_ai_errors',
19
+ description: 'Intercepts and prevents common AI coding errors: hallucinated packages, incorrect imports, deprecated APIs, build context blindness, and more. Run this on any AI-generated code before using it.',
20
+ annotations: {
21
+ readOnlyHint: true,
22
+ destructiveHint: false,
23
+ openWorldHint: false,
24
+ },
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: {
28
+ code: {
29
+ type: 'string',
30
+ description: 'Code to analyze for AI errors',
31
+ },
32
+ language: {
33
+ type: 'string',
34
+ description: 'Programming language (default: typescript)',
35
+ },
36
+ auto_fix: {
37
+ type: 'boolean',
38
+ description: 'Attempt to auto-fix detected issues (default: false)',
39
+ },
40
+ check_build_context: {
41
+ type: 'boolean',
42
+ description: 'Detect and respect build context (default: true)',
43
+ },
44
+ patterns: {
45
+ type: 'array',
46
+ items: { type: 'string' },
47
+ description: 'Specific error patterns to check (all if not specified)',
48
+ },
49
+ },
50
+ required: ['code'],
51
+ },
52
+ };
53
+ export async function handlePreventAIErrors(args) {
54
+ try {
55
+ const input = PreventAIErrorsInputSchema.parse(args);
56
+ logger.info('Running AI error prevention check');
57
+ const preventer = new AIErrorPreventer();
58
+ const result = await preventer.preventErrors(input.code, input.language, {
59
+ autoFix: input.auto_fix,
60
+ checkBuildContext: input.check_build_context,
61
+ patterns: input.patterns,
62
+ });
63
+ return {
64
+ success: true,
65
+ errors_found: result.errors.length,
66
+ errors: result.errors.map(e => ({
67
+ id: e.pattern.id,
68
+ name: e.pattern.name,
69
+ impact: e.pattern.impact,
70
+ category: e.pattern.category,
71
+ description: e.pattern.description,
72
+ locations: e.locations,
73
+ suggestion: e.suggestion,
74
+ fixed: e.fixed,
75
+ })),
76
+ warnings: result.warnings,
77
+ prevented_errors: result.preventedErrors,
78
+ build_context: result.buildContext ? {
79
+ language: result.buildContext.language,
80
+ module_system: result.buildContext.moduleSystem,
81
+ package_manager: result.buildContext.packageManager,
82
+ requires_js_extensions: result.buildContext.requiresJsExtensions,
83
+ ai_guidance: result.buildContext.aiGuidance,
84
+ } : null,
85
+ fixed: result.fixed,
86
+ fixed_code: result.fixedCode,
87
+ };
88
+ }
89
+ catch (error) {
90
+ logger.error('Error in prevent_ai_errors:', error);
91
+ return {
92
+ success: false,
93
+ error: error instanceof Error ? error.message : 'Unknown error',
94
+ };
95
+ }
96
+ }
97
+ //# sourceMappingURL=prevent-ai-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prevent-ai-errors.js","sourceRoot":"","sources":["../../src/tools/prevent-ai-errors.ts"],"names":[],"mappings":"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"}