mcp-adr-analysis-server 1.1.0 → 2.0.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 (118) hide show
  1. package/README.md +367 -150
  2. package/dist/src/config/ai-config.d.ts +81 -0
  3. package/dist/src/config/ai-config.d.ts.map +1 -0
  4. package/dist/src/config/ai-config.js +134 -0
  5. package/dist/src/config/ai-config.js.map +1 -0
  6. package/dist/src/index.d.ts +97 -1
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +2430 -186
  9. package/dist/src/index.js.map +1 -1
  10. package/dist/src/prompts/adr-suggestion-prompts.d.ts +2 -2
  11. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  12. package/dist/src/prompts/adr-suggestion-prompts.js +25 -17
  13. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  14. package/dist/src/prompts/analysis-prompts.js +1 -1
  15. package/dist/src/prompts/analysis-prompts.js.map +1 -1
  16. package/dist/src/resources/index.d.ts +1 -1
  17. package/dist/src/resources/index.d.ts.map +1 -1
  18. package/dist/src/resources/index.js +52 -44
  19. package/dist/src/resources/index.js.map +1 -1
  20. package/dist/src/templates/domain-knowledge-templates.d.ts +36 -0
  21. package/dist/src/templates/domain-knowledge-templates.d.ts.map +1 -0
  22. package/dist/src/templates/domain-knowledge-templates.js +376 -0
  23. package/dist/src/templates/domain-knowledge-templates.js.map +1 -0
  24. package/dist/src/tools/adr-suggestion-tool.d.ts +8 -3
  25. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  26. package/dist/src/tools/adr-suggestion-tool.js +561 -172
  27. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  28. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  29. package/dist/src/tools/content-masking-tool.js +168 -22
  30. package/dist/src/tools/content-masking-tool.js.map +1 -1
  31. package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -1
  32. package/dist/src/tools/deployment-analysis-tool.js +64 -27
  33. package/dist/src/tools/deployment-analysis-tool.js.map +1 -1
  34. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  35. package/dist/src/tools/environment-analysis-tool.js +65 -29
  36. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  37. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  38. package/dist/src/tools/research-question-tool.js +150 -49
  39. package/dist/src/tools/research-question-tool.js.map +1 -1
  40. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  41. package/dist/src/tools/rule-generation-tool.js +328 -143
  42. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  43. package/dist/src/types/ape-framework.d.ts +566 -0
  44. package/dist/src/types/ape-framework.d.ts.map +1 -0
  45. package/dist/src/types/ape-framework.js +98 -0
  46. package/dist/src/types/ape-framework.js.map +1 -0
  47. package/dist/src/types/index.d.ts +96 -93
  48. package/dist/src/types/index.d.ts.map +1 -1
  49. package/dist/src/types/knowledge-generation.d.ts +671 -0
  50. package/dist/src/types/knowledge-generation.d.ts.map +1 -0
  51. package/dist/src/types/knowledge-generation.js +107 -0
  52. package/dist/src/types/knowledge-generation.js.map +1 -0
  53. package/dist/src/types/reflexion-framework.d.ts +652 -0
  54. package/dist/src/types/reflexion-framework.d.ts.map +1 -0
  55. package/dist/src/types/reflexion-framework.js +85 -0
  56. package/dist/src/types/reflexion-framework.js.map +1 -0
  57. package/dist/src/utils/adr-suggestions.d.ts +1 -1
  58. package/dist/src/utils/adr-suggestions.d.ts.map +1 -1
  59. package/dist/src/utils/adr-suggestions.js +8 -50
  60. package/dist/src/utils/adr-suggestions.js.map +1 -1
  61. package/dist/src/utils/ai-executor.d.ts +125 -0
  62. package/dist/src/utils/ai-executor.d.ts.map +1 -0
  63. package/dist/src/utils/ai-executor.js +292 -0
  64. package/dist/src/utils/ai-executor.js.map +1 -0
  65. package/dist/src/utils/automatic-prompt-engineering.d.ts +72 -0
  66. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -0
  67. package/dist/src/utils/automatic-prompt-engineering.js +820 -0
  68. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -0
  69. package/dist/src/utils/cache.d.ts +54 -22
  70. package/dist/src/utils/cache.d.ts.map +1 -1
  71. package/dist/src/utils/cache.js +1234 -143
  72. package/dist/src/utils/cache.js.map +1 -1
  73. package/dist/src/utils/config.d.ts +2 -2
  74. package/dist/src/utils/config.js +3 -3
  75. package/dist/src/utils/config.js.map +1 -1
  76. package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
  77. package/dist/src/utils/deployment-analysis.js +57 -38
  78. package/dist/src/utils/deployment-analysis.js.map +1 -1
  79. package/dist/src/utils/environment-analysis.d.ts.map +1 -1
  80. package/dist/src/utils/environment-analysis.js +113 -100
  81. package/dist/src/utils/environment-analysis.js.map +1 -1
  82. package/dist/src/utils/file-system.d.ts +42 -13
  83. package/dist/src/utils/file-system.d.ts.map +1 -1
  84. package/dist/src/utils/file-system.js +795 -89
  85. package/dist/src/utils/file-system.js.map +1 -1
  86. package/dist/src/utils/index.d.ts +9 -0
  87. package/dist/src/utils/index.d.ts.map +1 -0
  88. package/dist/src/utils/index.js +13 -0
  89. package/dist/src/utils/index.js.map +1 -0
  90. package/dist/src/utils/knowledge-generation.d.ts +79 -0
  91. package/dist/src/utils/knowledge-generation.d.ts.map +1 -0
  92. package/dist/src/utils/knowledge-generation.js +646 -0
  93. package/dist/src/utils/knowledge-generation.js.map +1 -0
  94. package/dist/src/utils/output-masking.d.ts.map +1 -1
  95. package/dist/src/utils/output-masking.js +2 -1
  96. package/dist/src/utils/output-masking.js.map +1 -1
  97. package/dist/src/utils/prompt-composition.d.ts +234 -0
  98. package/dist/src/utils/prompt-composition.d.ts.map +1 -0
  99. package/dist/src/utils/prompt-composition.js +379 -0
  100. package/dist/src/utils/prompt-composition.js.map +1 -0
  101. package/dist/src/utils/prompt-execution.d.ts +88 -0
  102. package/dist/src/utils/prompt-execution.d.ts.map +1 -0
  103. package/dist/src/utils/prompt-execution.js +227 -0
  104. package/dist/src/utils/prompt-execution.js.map +1 -0
  105. package/dist/src/utils/reflexion.d.ts +92 -0
  106. package/dist/src/utils/reflexion.d.ts.map +1 -0
  107. package/dist/src/utils/reflexion.js +1100 -0
  108. package/dist/src/utils/reflexion.js.map +1 -0
  109. package/dist/src/utils/research-integration.d.ts.map +1 -1
  110. package/dist/src/utils/research-integration.js +156 -100
  111. package/dist/src/utils/research-integration.js.map +1 -1
  112. package/dist/src/utils/research-questions.d.ts.map +1 -1
  113. package/dist/src/utils/research-questions.js +85 -24
  114. package/dist/src/utils/research-questions.js.map +1 -1
  115. package/dist/src/utils/rule-generation.d.ts.map +1 -1
  116. package/dist/src/utils/rule-generation.js +92 -108
  117. package/dist/src/utils/rule-generation.js.map +1 -1
  118. package/package.json +9 -3
@@ -0,0 +1,85 @@
1
+ /**
2
+ * TypeScript interfaces for Reflexion Framework
3
+ * Implements Actor-Evaluator-Self-Reflection pattern for continuous learning
4
+ */
5
+ import { z } from 'zod';
6
+ export const ReflexionConfigSchema = z.object({
7
+ memoryEnabled: z.boolean(),
8
+ maxMemoryEntries: z.number().min(1).max(1000),
9
+ reflectionDepth: z.enum(['basic', 'detailed', 'comprehensive']),
10
+ evaluationCriteria: z.array(z.enum([
11
+ 'task-success',
12
+ 'quality',
13
+ 'efficiency',
14
+ 'accuracy',
15
+ 'completeness',
16
+ 'relevance',
17
+ 'clarity',
18
+ 'innovation'
19
+ ])),
20
+ learningRate: z.number().min(0).max(1),
21
+ memoryRetention: z.number().min(1).max(365),
22
+ feedbackIntegration: z.boolean(),
23
+ autoCleanup: z.boolean(),
24
+ relevanceThreshold: z.number().min(0).max(1),
25
+ confidenceThreshold: z.number().min(0).max(1),
26
+ });
27
+ // ============================================================================
28
+ // Export Schemas for Runtime Validation
29
+ // ============================================================================
30
+ export const TaskAttemptSchema = z.object({
31
+ attemptId: z.string(),
32
+ taskType: z.string(),
33
+ context: z.any(),
34
+ action: z.string(),
35
+ outcome: z.object({
36
+ success: z.boolean(),
37
+ result: z.any(),
38
+ errors: z.array(z.string()),
39
+ warnings: z.array(z.string()),
40
+ executionTime: z.number(),
41
+ resourcesUsed: z.object({
42
+ memoryAccessed: z.number(),
43
+ memoryCreated: z.number(),
44
+ processingTime: z.number(),
45
+ promptTokens: z.number(),
46
+ cacheHits: z.number(),
47
+ cacheMisses: z.number()
48
+ }),
49
+ qualityMetrics: z.object({
50
+ accuracy: z.number().min(0).max(1),
51
+ completeness: z.number().min(0).max(1),
52
+ relevance: z.number().min(0).max(1),
53
+ clarity: z.number().min(0).max(1),
54
+ innovation: z.number().min(0).max(1),
55
+ efficiency: z.number().min(0).max(1)
56
+ })
57
+ }),
58
+ evaluation: z.object({
59
+ overallScore: z.number().min(0).max(1),
60
+ criteriaScores: z.record(z.number()),
61
+ feedback: z.array(z.any()),
62
+ strengths: z.array(z.string()),
63
+ weaknesses: z.array(z.string()),
64
+ improvementAreas: z.array(z.string()),
65
+ confidence: z.number().min(0).max(1),
66
+ evaluationTime: z.number(),
67
+ evaluatorVersion: z.string()
68
+ }),
69
+ reflection: z.object({
70
+ reflectionId: z.string(),
71
+ reflectionText: z.string(),
72
+ lessonsLearned: z.array(z.any()),
73
+ actionableInsights: z.array(z.any()),
74
+ futureStrategies: z.array(z.any()),
75
+ knowledgeGaps: z.array(z.any()),
76
+ confidenceLevel: z.number().min(0).max(1),
77
+ applicability: z.array(z.string()),
78
+ reflectionTime: z.number()
79
+ }),
80
+ timestamp: z.string(),
81
+ metadata: z.any(),
82
+ relatedMemories: z.array(z.string()),
83
+ generatedMemories: z.array(z.string())
84
+ });
85
+ //# sourceMappingURL=reflexion-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflexion-framework.js","sourceRoot":"","sources":["../../../src/types/reflexion-framework.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,7 @@ export interface GeneratedAdr {
66
66
  };
67
67
  }
68
68
  /**
69
- * Analyze project for implicit architectural decisions
69
+ * Generate prompt for AI to analyze project for implicit architectural decisions
70
70
  */
71
71
  export declare function analyzeImplicitDecisions(projectPath: string, existingAdrs?: string[]): Promise<{
72
72
  analysisPrompt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"adr-suggestions.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA+D3D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAuD3D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,EACD,cAAc,GAAE,QAAQ,GAAG,MAAM,GAAG,QAAmB,EACvD,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C7D;AAgDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAkBpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAe5E"}
1
+ {"version":3,"file":"adr-suggestions.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"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"}
@@ -4,19 +4,12 @@
4
4
  */
5
5
  import { McpAdrError } from '../types/index.js';
6
6
  /**
7
- * Analyze project for implicit architectural decisions
7
+ * Generate prompt for AI to analyze project for implicit architectural decisions
8
8
  */
9
9
  export async function analyzeImplicitDecisions(projectPath, existingAdrs) {
10
10
  try {
11
- const { analyzeProjectStructure } = await import('./file-system.js');
12
- const { generateAnalysisContext } = await import('../prompts/analysis-prompts.js');
13
11
  const { generateImplicitDecisionDetectionPrompt } = await import('../prompts/adr-suggestion-prompts.js');
14
- // Analyze project structure
15
- const projectStructure = await analyzeProjectStructure(projectPath);
16
- const analysisContext = generateAnalysisContext(projectStructure);
17
- // Extract code patterns from project structure
18
- const codePatterns = extractCodePatterns(projectStructure);
19
- const analysisPrompt = generateImplicitDecisionDetectionPrompt(analysisContext, codePatterns, existingAdrs);
12
+ const analysisPrompt = generateImplicitDecisionDetectionPrompt(projectPath, existingAdrs);
20
13
  const instructions = `
21
14
  # Implicit Decision Analysis Instructions
22
15
 
@@ -24,9 +17,7 @@ This analysis will identify architectural decisions that are implicit in the cod
24
17
 
25
18
  ## Analysis Scope
26
19
  - **Project Path**: ${projectPath}
27
- - **Files Analyzed**: ${projectStructure.totalFiles} files
28
- - **Directories**: ${projectStructure.totalDirectories} directories
29
- - **Existing ADRs**: ${existingAdrs?.length || 0} ADRs
20
+ - **Existing ADRs**: ${existingAdrs?.length || 0} ADRs provided
30
21
 
31
22
  ## Next Steps
32
23
  1. **Submit the analysis prompt** to an AI agent for decision detection
@@ -54,7 +45,7 @@ const result = await analyzeImplicitDecisions(projectPath, existingAdrs);
54
45
  };
55
46
  }
56
47
  catch (error) {
57
- throw new McpAdrError(`Failed to analyze implicit decisions: ${error instanceof Error ? error.message : String(error)}`, 'ANALYSIS_ERROR');
48
+ throw new McpAdrError(`Failed to generate analysis prompt: ${error instanceof Error ? error.message : String(error)}`, 'ANALYSIS_ERROR');
58
49
  }
59
50
  }
60
51
  /**
@@ -150,41 +141,6 @@ const result = await generateAdrFromDecision(decisionData, 'nygard', existingAdr
150
141
  throw new McpAdrError(`Failed to generate ADR: ${error instanceof Error ? error.message : String(error)}`, 'GENERATION_ERROR');
151
142
  }
152
143
  }
153
- /**
154
- * Extract code patterns from project structure for analysis
155
- */
156
- function extractCodePatterns(projectStructure) {
157
- const patterns = [];
158
- try {
159
- // Extract patterns from file structure
160
- if (projectStructure.filesByType) {
161
- Object.entries(projectStructure.filesByType).forEach(([type, files]) => {
162
- if (Array.isArray(files) && files.length > 0) {
163
- patterns.push(`${type} files: ${files
164
- .slice(0, 5)
165
- .map((f) => f.name || f)
166
- .join(', ')}${files.length > 5 ? ` and ${files.length - 5} more` : ''}`);
167
- }
168
- });
169
- }
170
- // Extract patterns from directory structure
171
- if (projectStructure.directories) {
172
- const dirNames = projectStructure.directories.slice(0, 10).join(', ');
173
- patterns.push(`Directory structure: ${dirNames}${projectStructure.directories.length > 10 ? ` and ${projectStructure.directories.length - 10} more` : ''}`);
174
- }
175
- // Extract patterns from detected technologies
176
- if (projectStructure.detectedTechnologies) {
177
- patterns.push(`Technologies: ${projectStructure.detectedTechnologies.join(', ')}`);
178
- }
179
- // Add basic project metrics
180
- patterns.push(`Project metrics: ${projectStructure.totalFiles} files, ${projectStructure.totalDirectories} directories`);
181
- return patterns;
182
- }
183
- catch (error) {
184
- console.warn('Failed to extract code patterns:', error);
185
- return ['Unable to extract code patterns from project structure'];
186
- }
187
- }
188
144
  /**
189
145
  * Generate next ADR number based on existing ADRs
190
146
  */
@@ -202,7 +158,8 @@ export function generateNextAdrNumber(existingAdrs) {
202
158
  return `ADR-${nextNumber.toString().padStart(4, '0')}`;
203
159
  }
204
160
  catch (error) {
205
- console.warn('Failed to generate ADR number:', error);
161
+ // Log to stderr to avoid corrupting MCP protocol
162
+ console.error('[WARN] Failed to generate ADR number:', error);
206
163
  return 'ADR-0001';
207
164
  }
208
165
  }
@@ -221,7 +178,8 @@ export function suggestAdrFilename(title, adrNumber) {
221
178
  return `${number.toLowerCase()}-${cleanTitle}.md`;
222
179
  }
223
180
  catch (error) {
224
- console.warn('Failed to suggest filename:', error);
181
+ // Log to stderr to avoid corrupting MCP protocol
182
+ console.error('[WARN] Failed to suggest filename:', error);
225
183
  return 'adr-new-decision.md';
226
184
  }
227
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adr-suggestions.js","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adr-suggestions.js","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * AI Executor Service for OpenRouter.ai Integration
3
+ *
4
+ * This service handles the execution of prompts using OpenRouter.ai,
5
+ * transforming the MCP server from returning prompts to returning actual results.
6
+ */
7
+ import { AIConfig } from '../config/ai-config.js';
8
+ export interface AIExecutionResult {
9
+ /** The AI-generated response content */
10
+ content: string;
11
+ /** Model used for generation */
12
+ model: string;
13
+ /** Token usage information */
14
+ usage?: {
15
+ promptTokens: number;
16
+ completionTokens: number;
17
+ totalTokens: number;
18
+ };
19
+ /** Execution metadata */
20
+ metadata: {
21
+ executionTime: number;
22
+ cached: boolean;
23
+ retryCount: number;
24
+ timestamp: string;
25
+ };
26
+ }
27
+ export interface AIExecutionError extends Error {
28
+ code: string;
29
+ retryable: boolean;
30
+ originalError?: unknown;
31
+ }
32
+ /**
33
+ * AI Executor Service Class
34
+ */
35
+ export declare class AIExecutor {
36
+ private client;
37
+ private config;
38
+ private cache;
39
+ constructor(config?: AIConfig);
40
+ /**
41
+ * Initialize OpenAI client for OpenRouter
42
+ */
43
+ private initializeClient;
44
+ /**
45
+ * Check if AI execution is available
46
+ */
47
+ isAvailable(): boolean;
48
+ /**
49
+ * Reload configuration if environment variables have changed
50
+ */
51
+ private reloadConfigIfNeeded;
52
+ /**
53
+ * Execute a prompt and return the AI response
54
+ */
55
+ executePrompt(prompt: string, options?: {
56
+ model?: string;
57
+ temperature?: number;
58
+ maxTokens?: number;
59
+ systemPrompt?: string;
60
+ }): Promise<AIExecutionResult>;
61
+ /**
62
+ * Execute a structured prompt that expects JSON response
63
+ */
64
+ executeStructuredPrompt<T = any>(prompt: string, schema?: any, options?: {
65
+ model?: string;
66
+ temperature?: number;
67
+ maxTokens?: number;
68
+ systemPrompt?: string;
69
+ }): Promise<{
70
+ data: T;
71
+ raw: AIExecutionResult;
72
+ }>;
73
+ /**
74
+ * Extract JSON content from AI response, handling markdown code blocks
75
+ */
76
+ private extractJsonFromResponse;
77
+ /**
78
+ * Generate cache key for a prompt execution
79
+ */
80
+ private generateCacheKey;
81
+ /**
82
+ * Get cached result if available and not expired
83
+ */
84
+ private getCachedResult;
85
+ /**
86
+ * Cache a result
87
+ */
88
+ private setCachedResult;
89
+ /**
90
+ * Clean up expired cache entries
91
+ */
92
+ private cleanupCache;
93
+ /**
94
+ * Create a standardized AI execution error
95
+ */
96
+ private createError;
97
+ /**
98
+ * Get current configuration
99
+ */
100
+ getConfig(): AIConfig;
101
+ /**
102
+ * Update configuration
103
+ */
104
+ updateConfig(newConfig: Partial<AIConfig>): void;
105
+ /**
106
+ * Clear cache
107
+ */
108
+ clearCache(): void;
109
+ /**
110
+ * Get cache statistics
111
+ */
112
+ getCacheStats(): {
113
+ size: number;
114
+ hitRate: number;
115
+ };
116
+ }
117
+ /**
118
+ * Get or create the global AI executor instance
119
+ */
120
+ export declare function getAIExecutor(): AIExecutor;
121
+ /**
122
+ * Reset the global AI executor (useful for testing)
123
+ */
124
+ export declare function resetAIExecutor(): void;
125
+ //# sourceMappingURL=ai-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-executor.d.ts","sourceRoot":"","sources":["../../../src/utils/ai-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAwD,MAAM,wBAAwB,CAAC;AAExG,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,yBAAyB;IACzB,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAyE;gBAE1E,MAAM,CAAC,EAAE,QAAQ;IAK7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACI,WAAW,IAAI,OAAO;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,GACL,OAAO,CAAC,iBAAiB,CAAC;IA2F7B;;OAEG;IACU,uBAAuB,CAAC,CAAC,GAAG,GAAG,EAC1C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,GACL,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAA;KAAE,CAAC;IA+B/C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACI,SAAS,IAAI,QAAQ;IAI5B;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKvD;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACI,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAO1D;AAOD;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * AI Executor Service for OpenRouter.ai Integration
3
+ *
4
+ * This service handles the execution of prompts using OpenRouter.ai,
5
+ * transforming the MCP server from returning prompts to returning actual results.
6
+ */
7
+ import OpenAI from 'openai';
8
+ import { loadAIConfig, validateAIConfig, isAIExecutionEnabled } from '../config/ai-config.js';
9
+ /**
10
+ * AI Executor Service Class
11
+ */
12
+ export class AIExecutor {
13
+ client = null;
14
+ config;
15
+ cache = new Map();
16
+ constructor(config) {
17
+ this.config = config || loadAIConfig();
18
+ this.initializeClient();
19
+ }
20
+ /**
21
+ * Initialize OpenAI client for OpenRouter
22
+ */
23
+ initializeClient() {
24
+ if (!isAIExecutionEnabled(this.config)) {
25
+ console.log('AI execution disabled - running in prompt-only mode');
26
+ return;
27
+ }
28
+ try {
29
+ validateAIConfig(this.config);
30
+ this.client = new OpenAI({
31
+ baseURL: this.config.baseURL,
32
+ apiKey: this.config.apiKey,
33
+ timeout: this.config.timeout,
34
+ maxRetries: this.config.maxRetries,
35
+ defaultHeaders: {
36
+ 'HTTP-Referer': this.config.siteUrl || '',
37
+ 'X-Title': this.config.siteName || '',
38
+ },
39
+ });
40
+ console.log(`AI Executor initialized with model: ${this.config.defaultModel}`);
41
+ }
42
+ catch (error) {
43
+ console.error('Failed to initialize AI Executor:', error);
44
+ this.client = null;
45
+ }
46
+ }
47
+ /**
48
+ * Check if AI execution is available
49
+ */
50
+ isAvailable() {
51
+ // Reload configuration to pick up environment variable changes
52
+ this.reloadConfigIfNeeded();
53
+ return this.client !== null && isAIExecutionEnabled(this.config);
54
+ }
55
+ /**
56
+ * Reload configuration if environment variables have changed
57
+ */
58
+ reloadConfigIfNeeded() {
59
+ const currentConfig = loadAIConfig();
60
+ // Check if key configuration has changed
61
+ const configChanged = this.config.apiKey !== currentConfig.apiKey ||
62
+ this.config.executionMode !== currentConfig.executionMode ||
63
+ this.config.defaultModel !== currentConfig.defaultModel;
64
+ if (configChanged) {
65
+ console.log('AI configuration changed, reinitializing...');
66
+ this.config = currentConfig;
67
+ this.initializeClient();
68
+ }
69
+ }
70
+ /**
71
+ * Execute a prompt and return the AI response
72
+ */
73
+ async executePrompt(prompt, options = {}) {
74
+ // Ensure configuration is up to date before execution
75
+ this.reloadConfigIfNeeded();
76
+ if (!this.isAvailable()) {
77
+ throw this.createError('AI execution not available - check configuration', 'AI_UNAVAILABLE', false);
78
+ }
79
+ const startTime = Date.now();
80
+ const model = options.model || this.config.defaultModel;
81
+ const cacheKey = this.generateCacheKey(prompt, model, options);
82
+ // Check cache first
83
+ if (this.config.cacheEnabled) {
84
+ const cached = this.getCachedResult(cacheKey);
85
+ if (cached) {
86
+ return cached;
87
+ }
88
+ }
89
+ let retryCount = 0;
90
+ const maxRetries = this.config.maxRetries;
91
+ while (retryCount <= maxRetries) {
92
+ try {
93
+ const messages = [];
94
+ if (options.systemPrompt) {
95
+ messages.push({ role: 'system', content: options.systemPrompt });
96
+ }
97
+ messages.push({ role: 'user', content: prompt });
98
+ const completion = await this.client.chat.completions.create({
99
+ model,
100
+ messages,
101
+ temperature: options.temperature ?? this.config.temperature,
102
+ max_tokens: options.maxTokens ?? this.config.maxTokens,
103
+ });
104
+ const result = {
105
+ content: completion.choices[0]?.message?.content || '',
106
+ model: completion.model,
107
+ metadata: {
108
+ executionTime: Date.now() - startTime,
109
+ cached: false,
110
+ retryCount,
111
+ timestamp: new Date().toISOString(),
112
+ },
113
+ };
114
+ if (completion.usage) {
115
+ result.usage = {
116
+ promptTokens: completion.usage.prompt_tokens,
117
+ completionTokens: completion.usage.completion_tokens,
118
+ totalTokens: completion.usage.total_tokens,
119
+ };
120
+ }
121
+ // Cache the result
122
+ if (this.config.cacheEnabled) {
123
+ this.setCachedResult(cacheKey, result);
124
+ }
125
+ return result;
126
+ }
127
+ catch (error) {
128
+ retryCount++;
129
+ if (retryCount > maxRetries) {
130
+ throw this.createError(`AI execution failed after ${maxRetries} retries: ${error}`, 'AI_EXECUTION_FAILED', false, error);
131
+ }
132
+ // Wait before retry (exponential backoff)
133
+ const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 10000);
134
+ await new Promise(resolve => setTimeout(resolve, delay));
135
+ }
136
+ }
137
+ throw this.createError('Unexpected error in AI execution', 'AI_UNEXPECTED_ERROR', false);
138
+ }
139
+ /**
140
+ * Execute a structured prompt that expects JSON response
141
+ */
142
+ async executeStructuredPrompt(prompt, schema, options = {}) {
143
+ const systemPrompt = options.systemPrompt ||
144
+ 'You are a helpful assistant that responds with valid JSON. Always return properly formatted JSON that matches the requested schema. Do not wrap the JSON in markdown code blocks.';
145
+ const result = await this.executePrompt(prompt, {
146
+ ...options,
147
+ systemPrompt,
148
+ temperature: options.temperature ?? 0.1, // Lower temperature for structured output
149
+ });
150
+ try {
151
+ // Extract JSON from response, handling markdown code blocks
152
+ const jsonContent = this.extractJsonFromResponse(result.content);
153
+ const data = JSON.parse(jsonContent);
154
+ // Basic schema validation if provided
155
+ if (schema && typeof schema.parse === 'function') {
156
+ schema.parse(data);
157
+ }
158
+ return { data, raw: result };
159
+ }
160
+ catch (error) {
161
+ throw this.createError(`Failed to parse JSON response: ${error}`, 'AI_JSON_PARSE_ERROR', false, error);
162
+ }
163
+ }
164
+ /**
165
+ * Extract JSON content from AI response, handling markdown code blocks
166
+ */
167
+ extractJsonFromResponse(content) {
168
+ // Remove leading/trailing whitespace
169
+ content = content.trim();
170
+ // Check if content is wrapped in markdown code blocks
171
+ const codeBlockMatch = content.match(/^```(?:json)?\s*\n?([\s\S]*?)\n?```$/);
172
+ if (codeBlockMatch && codeBlockMatch[1]) {
173
+ return codeBlockMatch[1].trim();
174
+ }
175
+ // Check for inline code blocks
176
+ const inlineCodeMatch = content.match(/^`([\s\S]*?)`$/);
177
+ if (inlineCodeMatch && inlineCodeMatch[1]) {
178
+ return inlineCodeMatch[1].trim();
179
+ }
180
+ // Try to find JSON object/array in the content
181
+ const jsonMatch = content.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);
182
+ if (jsonMatch && jsonMatch[1]) {
183
+ return jsonMatch[1].trim();
184
+ }
185
+ // Return as-is if no patterns match
186
+ return content;
187
+ }
188
+ /**
189
+ * Generate cache key for a prompt execution
190
+ */
191
+ generateCacheKey(prompt, model, options) {
192
+ const key = JSON.stringify({ prompt, model, options });
193
+ return Buffer.from(key).toString('base64').slice(0, 32);
194
+ }
195
+ /**
196
+ * Get cached result if available and not expired
197
+ */
198
+ getCachedResult(cacheKey) {
199
+ const cached = this.cache.get(cacheKey);
200
+ if (!cached)
201
+ return null;
202
+ if (Date.now() > cached.expiry) {
203
+ this.cache.delete(cacheKey);
204
+ return null;
205
+ }
206
+ // Mark as cached
207
+ const result = { ...cached.result };
208
+ result.metadata = { ...result.metadata, cached: true };
209
+ return result;
210
+ }
211
+ /**
212
+ * Cache a result
213
+ */
214
+ setCachedResult(cacheKey, result) {
215
+ const expiry = Date.now() + (this.config.cacheTTL * 1000);
216
+ this.cache.set(cacheKey, { result, expiry });
217
+ // Clean up expired entries periodically
218
+ if (this.cache.size > 100) {
219
+ this.cleanupCache();
220
+ }
221
+ }
222
+ /**
223
+ * Clean up expired cache entries
224
+ */
225
+ cleanupCache() {
226
+ const now = Date.now();
227
+ for (const [key, value] of this.cache.entries()) {
228
+ if (now > value.expiry) {
229
+ this.cache.delete(key);
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * Create a standardized AI execution error
235
+ */
236
+ createError(message, code, retryable, originalError) {
237
+ const error = new Error(message);
238
+ error.code = code;
239
+ error.retryable = retryable;
240
+ error.originalError = originalError;
241
+ return error;
242
+ }
243
+ /**
244
+ * Get current configuration
245
+ */
246
+ getConfig() {
247
+ return { ...this.config };
248
+ }
249
+ /**
250
+ * Update configuration
251
+ */
252
+ updateConfig(newConfig) {
253
+ this.config = { ...this.config, ...newConfig };
254
+ this.initializeClient();
255
+ }
256
+ /**
257
+ * Clear cache
258
+ */
259
+ clearCache() {
260
+ this.cache.clear();
261
+ }
262
+ /**
263
+ * Get cache statistics
264
+ */
265
+ getCacheStats() {
266
+ // This is a simplified implementation
267
+ return {
268
+ size: this.cache.size,
269
+ hitRate: 0 // Would need to track hits/misses for accurate calculation
270
+ };
271
+ }
272
+ }
273
+ /**
274
+ * Global AI executor instance
275
+ */
276
+ let globalExecutor = null;
277
+ /**
278
+ * Get or create the global AI executor instance
279
+ */
280
+ export function getAIExecutor() {
281
+ if (!globalExecutor) {
282
+ globalExecutor = new AIExecutor();
283
+ }
284
+ return globalExecutor;
285
+ }
286
+ /**
287
+ * Reset the global AI executor (useful for testing)
288
+ */
289
+ export function resetAIExecutor() {
290
+ globalExecutor = null;
291
+ }
292
+ //# sourceMappingURL=ai-executor.js.map