atlas-pipeline-mcp 1.0.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 (64) hide show
  1. package/.env.example +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +175 -0
  4. package/dist/mcp.d.ts +21 -0
  5. package/dist/mcp.d.ts.map +1 -0
  6. package/dist/mcp.js +404 -0
  7. package/dist/mcp.js.map +1 -0
  8. package/dist/pipeline.d.ts +39 -0
  9. package/dist/pipeline.d.ts.map +1 -0
  10. package/dist/pipeline.js +355 -0
  11. package/dist/pipeline.js.map +1 -0
  12. package/dist/providers/index.d.ts +14 -0
  13. package/dist/providers/index.d.ts.map +1 -0
  14. package/dist/providers/index.js +13 -0
  15. package/dist/providers/index.js.map +1 -0
  16. package/dist/providers/llm-provider.d.ts +71 -0
  17. package/dist/providers/llm-provider.d.ts.map +1 -0
  18. package/dist/providers/llm-provider.js +357 -0
  19. package/dist/providers/llm-provider.js.map +1 -0
  20. package/dist/server.d.ts +27 -0
  21. package/dist/server.d.ts.map +1 -0
  22. package/dist/server.js +312 -0
  23. package/dist/server.js.map +1 -0
  24. package/dist/tools/context.d.ts +23 -0
  25. package/dist/tools/context.d.ts.map +1 -0
  26. package/dist/tools/context.js +363 -0
  27. package/dist/tools/context.js.map +1 -0
  28. package/dist/tools/critique.d.ts +40 -0
  29. package/dist/tools/critique.d.ts.map +1 -0
  30. package/dist/tools/critique.js +315 -0
  31. package/dist/tools/critique.js.map +1 -0
  32. package/dist/tools/decompose.d.ts +34 -0
  33. package/dist/tools/decompose.d.ts.map +1 -0
  34. package/dist/tools/decompose.js +328 -0
  35. package/dist/tools/decompose.js.map +1 -0
  36. package/dist/tools/git.d.ts +66 -0
  37. package/dist/tools/git.d.ts.map +1 -0
  38. package/dist/tools/git.js +333 -0
  39. package/dist/tools/git.js.map +1 -0
  40. package/dist/tools/intent.d.ts +24 -0
  41. package/dist/tools/intent.d.ts.map +1 -0
  42. package/dist/tools/intent.js +245 -0
  43. package/dist/tools/intent.js.map +1 -0
  44. package/dist/tools/ollama.d.ts +104 -0
  45. package/dist/tools/ollama.d.ts.map +1 -0
  46. package/dist/tools/ollama.js +299 -0
  47. package/dist/tools/ollama.js.map +1 -0
  48. package/dist/tools/optimize.d.ts +64 -0
  49. package/dist/tools/optimize.d.ts.map +1 -0
  50. package/dist/tools/optimize.js +302 -0
  51. package/dist/tools/optimize.js.map +1 -0
  52. package/dist/tools/variants.d.ts +49 -0
  53. package/dist/tools/variants.d.ts.map +1 -0
  54. package/dist/tools/variants.js +252 -0
  55. package/dist/tools/variants.js.map +1 -0
  56. package/dist/types.d.ts +447 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +25 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/utils.d.ts +117 -0
  61. package/dist/utils.d.ts.map +1 -0
  62. package/dist/utils.js +279 -0
  63. package/dist/utils.js.map +1 -0
  64. package/package.json +77 -0
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Atlas Server - Optimization Tool
3
+ *
4
+ * Takes the best variant and critique, then produces an optimized final output:
5
+ * - Addresses identified issues
6
+ * - Applies performance improvements
7
+ * - Enhances readability and maintainability
8
+ * - Follows best practices
9
+ */
10
+ import { getOllamaClient, PromptTemplates } from './ollama.js';
11
+ import { logger } from '../utils.js';
12
+ // ============================================================================
13
+ // Optimization
14
+ // ============================================================================
15
+ /**
16
+ * Optimize the best variant based on critique feedback
17
+ */
18
+ export async function optimizeVariant(variant, critique) {
19
+ logger.debug({
20
+ variantId: variant.id,
21
+ qualityScore: critique.qualityScore,
22
+ issueCount: critique.issues.length
23
+ }, 'Starting optimization');
24
+ // If quality is already high and no critical issues, minimal optimization needed
25
+ if (critique.qualityScore >= 90 && !hasCriticalIssues(critique)) {
26
+ return createMinimalOptimization(variant, critique);
27
+ }
28
+ const client = getOllamaClient();
29
+ const prompt = buildOptimizationPrompt(variant, critique);
30
+ const response = await client.generateJson(prompt, {
31
+ systemPrompt: PromptTemplates.optimization,
32
+ temperature: 0.4,
33
+ maxTokens: 4096,
34
+ });
35
+ if (response.data) {
36
+ const optimizations = response.data.optimizations.map((opt) => ({
37
+ type: normalizeOptimizationType(opt.type),
38
+ description: opt.description,
39
+ impact: normalizeImpact(opt.impact),
40
+ }));
41
+ // Re-assess the optimized code
42
+ const finalMetrics = estimateFinalMetrics(critique.assessment, optimizations);
43
+ return {
44
+ content: response.data.optimizedContent,
45
+ optimizationsApplied: optimizations,
46
+ finalMetrics,
47
+ explanation: response.data.explanation,
48
+ };
49
+ }
50
+ // Fallback: return variant with minor adjustments
51
+ logger.warn('Optimization failed, using fallback');
52
+ return createMinimalOptimization(variant, critique);
53
+ }
54
+ /**
55
+ * Build the optimization prompt
56
+ */
57
+ function buildOptimizationPrompt(variant, critique) {
58
+ const criticalIssues = critique.issues.filter((i) => i.severity === 'critical');
59
+ const majorIssues = critique.issues.filter((i) => i.severity === 'major');
60
+ const minorIssues = critique.issues.filter((i) => i.severity === 'minor');
61
+ return `Optimize this code based on the critique feedback.
62
+
63
+ ## Original Code (Variant ${variant.label})
64
+ \`\`\`
65
+ ${variant.content}
66
+ \`\`\`
67
+
68
+ ## Approach
69
+ ${variant.approach}
70
+
71
+ ## Quality Assessment
72
+ - Correctness: ${critique.assessment.correctness}/100
73
+ - Performance: ${critique.assessment.performance}/100
74
+ - Maintainability: ${critique.assessment.maintainability}/100
75
+ - Security: ${critique.assessment.security}/100
76
+ - Best Practices: ${critique.assessment.bestPractices}/100
77
+
78
+ ## Issues to Address
79
+
80
+ ${criticalIssues.length > 0 ? `### Critical Issues (MUST FIX)
81
+ ${criticalIssues.map((i) => `- ${i.description}${i.suggestedFix ? ` → ${i.suggestedFix}` : ''}`).join('\n')}` : ''}
82
+
83
+ ${majorIssues.length > 0 ? `### Major Issues (Should Fix)
84
+ ${majorIssues.map((i) => `- ${i.description}${i.suggestedFix ? ` → ${i.suggestedFix}` : ''}`).join('\n')}` : ''}
85
+
86
+ ${minorIssues.length > 0 ? `### Minor Issues (Nice to Fix)
87
+ ${minorIssues.map((i) => `- ${i.description}`).join('\n')}` : ''}
88
+
89
+ ## Suggestions
90
+ ${critique.suggestions.map((s) => `- ${s}`).join('\n')}
91
+
92
+ ## Requirements
93
+ 1. Fix ALL critical issues
94
+ 2. Address major issues where possible
95
+ 3. Improve the lowest-scoring assessment areas
96
+ 4. Maintain the original functionality
97
+ 5. Keep the code clean and readable
98
+
99
+ ## Output Format
100
+ {
101
+ "optimizedContent": "The complete optimized code",
102
+ "optimizations": [
103
+ {
104
+ "type": "performance|readability|security|simplification|best_practice",
105
+ "description": "What was changed",
106
+ "impact": "low|medium|high"
107
+ }
108
+ ],
109
+ "explanation": "Summary of optimizations and why they improve the code"
110
+ }`;
111
+ }
112
+ // ============================================================================
113
+ // Helpers
114
+ // ============================================================================
115
+ /**
116
+ * Check if critique has critical issues
117
+ */
118
+ function hasCriticalIssues(critique) {
119
+ return critique.issues.some((i) => i.severity === 'critical');
120
+ }
121
+ /**
122
+ * Create minimal optimization for already-good code
123
+ */
124
+ function createMinimalOptimization(variant, critique) {
125
+ return {
126
+ content: variant.content,
127
+ optimizationsApplied: [{
128
+ type: 'best_practice',
129
+ description: 'Code quality verified, no significant changes needed',
130
+ impact: 'low',
131
+ }],
132
+ finalMetrics: critique.assessment,
133
+ explanation: `The solution (Variant ${variant.label}) scored ${critique.qualityScore}/100 and ` +
134
+ `requires no significant optimization. The approach "${variant.approach}" is solid.`,
135
+ };
136
+ }
137
+ /**
138
+ * Normalize optimization type
139
+ */
140
+ function normalizeOptimizationType(type) {
141
+ const normalized = type.toLowerCase();
142
+ if (normalized.includes('perform'))
143
+ return 'performance';
144
+ if (normalized.includes('read') || normalized.includes('maintain'))
145
+ return 'readability';
146
+ if (normalized.includes('secur'))
147
+ return 'security';
148
+ if (normalized.includes('simpl'))
149
+ return 'simplification';
150
+ return 'best_practice';
151
+ }
152
+ /**
153
+ * Normalize impact level
154
+ */
155
+ function normalizeImpact(impact) {
156
+ const normalized = impact.toLowerCase();
157
+ if (normalized === 'high')
158
+ return 'high';
159
+ if (normalized === 'medium')
160
+ return 'medium';
161
+ return 'low';
162
+ }
163
+ /**
164
+ * Estimate final metrics after optimizations
165
+ */
166
+ function estimateFinalMetrics(original, optimizations) {
167
+ const improved = { ...original };
168
+ for (const opt of optimizations) {
169
+ const boost = opt.impact === 'high' ? 10 : opt.impact === 'medium' ? 5 : 2;
170
+ switch (opt.type) {
171
+ case 'performance':
172
+ improved.performance = Math.min(100, improved.performance + boost);
173
+ break;
174
+ case 'readability':
175
+ improved.maintainability = Math.min(100, improved.maintainability + boost);
176
+ break;
177
+ case 'security':
178
+ improved.security = Math.min(100, improved.security + boost);
179
+ break;
180
+ case 'simplification':
181
+ improved.maintainability = Math.min(100, improved.maintainability + boost);
182
+ improved.bestPractices = Math.min(100, improved.bestPractices + boost / 2);
183
+ break;
184
+ case 'best_practice':
185
+ improved.bestPractices = Math.min(100, improved.bestPractices + boost);
186
+ break;
187
+ }
188
+ }
189
+ return improved;
190
+ }
191
+ // ============================================================================
192
+ // Advanced Optimization Strategies
193
+ // ============================================================================
194
+ /**
195
+ * Apply multiple optimization passes
196
+ */
197
+ export async function multiPassOptimization(variant, critique, maxPasses = 2) {
198
+ let currentContent = variant.content;
199
+ let currentCritique = critique;
200
+ const allOptimizations = [];
201
+ for (let pass = 0; pass < maxPasses; pass++) {
202
+ // Skip if already high quality
203
+ if (currentCritique.qualityScore >= 95) {
204
+ break;
205
+ }
206
+ const currentVariant = {
207
+ ...variant,
208
+ content: currentContent,
209
+ };
210
+ const result = await optimizeVariant(currentVariant, currentCritique);
211
+ currentContent = result.content;
212
+ allOptimizations.push(...result.optimizationsApplied);
213
+ // Update critique for next pass (simplified - in reality would re-critique)
214
+ currentCritique = {
215
+ ...currentCritique,
216
+ qualityScore: Math.min(100, currentCritique.qualityScore + 10),
217
+ assessment: result.finalMetrics,
218
+ issues: currentCritique.issues.filter((i) => i.severity === 'minor'),
219
+ };
220
+ logger.debug({ pass: pass + 1, qualityScore: currentCritique.qualityScore }, 'Optimization pass complete');
221
+ }
222
+ return {
223
+ content: currentContent,
224
+ optimizationsApplied: allOptimizations,
225
+ finalMetrics: currentCritique.assessment,
226
+ explanation: `Applied ${allOptimizations.length} optimizations across ${Math.min(maxPasses, allOptimizations.length > 0 ? maxPasses : 1)} passes.`,
227
+ };
228
+ }
229
+ /**
230
+ * Optimization presets for common scenarios
231
+ */
232
+ export const OptimizationPresets = {
233
+ /**
234
+ * Focus on performance optimizations
235
+ */
236
+ performance: {
237
+ focus: ['performance', 'simplification'],
238
+ minScoreThreshold: 70,
239
+ maxIterations: 2,
240
+ },
241
+ /**
242
+ * Focus on code quality and maintainability
243
+ */
244
+ quality: {
245
+ focus: ['readability', 'best_practice'],
246
+ minScoreThreshold: 80,
247
+ maxIterations: 2,
248
+ },
249
+ /**
250
+ * Focus on security hardening
251
+ */
252
+ security: {
253
+ focus: ['security'],
254
+ minScoreThreshold: 90,
255
+ maxIterations: 3,
256
+ },
257
+ /**
258
+ * Balanced optimization
259
+ */
260
+ balanced: {
261
+ focus: ['performance', 'readability', 'security', 'best_practice'],
262
+ minScoreThreshold: 75,
263
+ maxIterations: 2,
264
+ },
265
+ };
266
+ /**
267
+ * Get optimization recommendations based on critique
268
+ */
269
+ export function getOptimizationRecommendations(critique) {
270
+ const { assessment } = critique;
271
+ // Find weakest areas
272
+ const scores = Object.entries(assessment);
273
+ const weakest = scores.sort((a, b) => a[1] - b[1]).slice(0, 2);
274
+ // Determine best preset
275
+ if (critique.issues.some((i) => i.category === 'security' && i.severity === 'critical')) {
276
+ return {
277
+ preset: 'security',
278
+ reason: 'Critical security issues detected',
279
+ focusAreas: ['security'],
280
+ };
281
+ }
282
+ if (assessment.performance < 50) {
283
+ return {
284
+ preset: 'performance',
285
+ reason: 'Performance score is below threshold',
286
+ focusAreas: weakest.map(([area]) => area),
287
+ };
288
+ }
289
+ if (assessment.maintainability < 60 || assessment.bestPractices < 60) {
290
+ return {
291
+ preset: 'quality',
292
+ reason: 'Code quality needs improvement',
293
+ focusAreas: weakest.map(([area]) => area),
294
+ };
295
+ }
296
+ return {
297
+ preset: 'balanced',
298
+ reason: 'General optimization recommended',
299
+ focusAreas: weakest.map(([area]) => area),
300
+ };
301
+ }
302
+ //# sourceMappingURL=optimize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/tools/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,QAAkB;IAElB,MAAM,CAAC,KAAK,CACV;QACE,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;KACnC,EACD,uBAAuB,CACxB,CAAC;IAEF,iFAAiF;IACjF,IAAI,QAAQ,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,OAAO,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAQvC,MAAM,EAAE;QACT,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,EAAE,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC,CAAC;QAEJ,+BAA+B;QAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE9E,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,aAAa;YACnC,YAAY;YACZ,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;SACvC,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,OAAwB,EACxB,QAAkB;IAElB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAE1E,OAAO;;4BAEmB,OAAO,CAAC,KAAK;;EAEvC,OAAO,CAAC,OAAO;;;;EAIf,OAAO,CAAC,QAAQ;;;iBAGD,QAAQ,CAAC,UAAU,CAAC,WAAW;iBAC/B,QAAQ,CAAC,UAAU,CAAC,WAAW;qBAC3B,QAAQ,CAAC,UAAU,CAAC,eAAe;cAC1C,QAAQ,CAAC,UAAU,CAAC,QAAQ;oBACtB,QAAQ,CAAC,UAAU,CAAC,aAAa;;;;EAInD,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;EAEhH,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;EAE7G,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;EAG9D,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;EAoBpD,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,OAAwB,EACxB,QAAkB;IAElB,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,oBAAoB,EAAE,CAAC;gBACrB,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,sDAAsD;gBACnE,MAAM,EAAE,KAAK;aACd,CAAC;QACF,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,WAAW,EAAE,yBAAyB,OAAO,CAAC,KAAK,YAAY,QAAQ,CAAC,YAAY,WAAW;YAC7F,uDAAuD,OAAO,CAAC,QAAQ,aAAa;KACvF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAY;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,aAAa,CAAC;IACzD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,aAAa,CAAC;IACzF,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC1D,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,QAA4B,EAC5B,aAA6B;IAE7B,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,aAAa;gBAChB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,aAAa;gBAChB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;gBAC3E,MAAM;YACR,KAAK,UAAU;gBACb,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,gBAAgB;gBACnB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;gBAC3E,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC3E,MAAM;YACR,KAAK,eAAe;gBAClB,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;gBACvE,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAwB,EACxB,QAAkB,EAClB,YAAoB,CAAC;IAErB,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACrC,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,MAAM,gBAAgB,GAAmB,EAAE,CAAC;IAE5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,+BAA+B;QAC/B,IAAI,eAAe,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM;QACR,CAAC;QAED,MAAM,cAAc,GAAoB;YACtC,GAAG,OAAO;YACV,OAAO,EAAE,cAAc;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QACtE,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;QAChC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEtD,4EAA4E;QAC5E,eAAe,GAAG;YAChB,GAAG,eAAe;YAClB,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9D,UAAU,EAAE,MAAM,CAAC,YAAY;YAC/B,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;SACrE,CAAC;QAEF,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,YAAY,EAAE,EAC9D,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,cAAc;QACvB,oBAAoB,EAAE,gBAAgB;QACtC,YAAY,EAAE,eAAe,CAAC,UAAU;QACxC,WAAW,EAAE,WAAW,gBAAgB,CAAC,MAAM,yBAAyB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;KACnJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,WAAW,EAAE;QACX,KAAK,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAA2B;QAClE,iBAAiB,EAAE,EAAE;QACrB,aAAa,EAAE,CAAC;KACjB;IAED;;OAEG;IACH,OAAO,EAAE;QACP,KAAK,EAAE,CAAC,aAAa,EAAE,eAAe,CAA2B;QACjE,iBAAiB,EAAE,EAAE;QACrB,aAAa,EAAE,CAAC;KACjB;IAED;;OAEG;IACH,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC,UAAU,CAA2B;QAC7C,iBAAiB,EAAE,EAAE;QACrB,aAAa,EAAE,CAAC;KACjB;IAED;;OAEG;IACH,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAA2B;QAC5F,iBAAiB,EAAE,EAAE;QACrB,aAAa,EAAE,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAAkB;IAMlB,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;IAEhC,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAyC,CAAC;IAClF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/D,wBAAwB;IACxB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC;QACxF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,mCAAmC;YAC3C,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;QAChC,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,sCAAsC;YAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,GAAG,EAAE,IAAI,UAAU,CAAC,aAAa,GAAG,EAAE,EAAE,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,gCAAgC;YACxC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,kCAAkC;QAC1C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Atlas Server - Variant Generation Tool
3
+ *
4
+ * Generates multiple solution variants for a given task:
5
+ * - Different approaches with trade-offs
6
+ * - Pros and cons analysis
7
+ * - Use case recommendations
8
+ * - Diversity in implementation strategies
9
+ */
10
+ import type { PipelineContext, DecompositionResult, SolutionVariant, VariantGenerationResult } from '../types.js';
11
+ /**
12
+ * Generate multiple solution variants for a task
13
+ */
14
+ export declare function generateVariants(context: PipelineContext, decomposition: DecompositionResult, variantCount?: number): Promise<VariantGenerationResult>;
15
+ /**
16
+ * Compare variants and rank them
17
+ */
18
+ export declare function rankVariants(variants: SolutionVariant[], criteria: RankingCriteria): RankedVariant[];
19
+ export interface RankingCriteria {
20
+ /** Weight for simplicity (0-1) */
21
+ simplicityWeight: number;
22
+ /** Weight for performance (0-1) */
23
+ performanceWeight: number;
24
+ /** Weight for maintainability (0-1) */
25
+ maintainabilityWeight: number;
26
+ /** Weight for feature completeness (0-1) */
27
+ completenessWeight: number;
28
+ }
29
+ export interface RankedVariant extends SolutionVariant {
30
+ rank: number;
31
+ score: number;
32
+ }
33
+ /**
34
+ * Ensure variants are sufficiently diverse
35
+ */
36
+ export declare function checkVariantDiversity(variants: SolutionVariant[]): {
37
+ isDiverse: boolean;
38
+ similarityScore: number;
39
+ suggestions: string[];
40
+ };
41
+ /**
42
+ * Merge best aspects of multiple variants
43
+ */
44
+ export declare function synthesizeBestAspects(variants: SolutionVariant[]): {
45
+ combinedPros: string[];
46
+ conflictingAspects: string[];
47
+ synthesis: string;
48
+ };
49
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../src/tools/variants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAerB;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,mBAAmB,EAClC,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,uBAAuB,CAAC,CAqDlC;AA6GD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,QAAQ,EAAE,eAAe,GACxB,aAAa,EAAE,CAYjB;AAED,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAmDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAmCA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EAAE,GAC1B;IACD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB,CAyBA"}
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Atlas Server - Variant Generation Tool
3
+ *
4
+ * Generates multiple solution variants for a given task:
5
+ * - Different approaches with trade-offs
6
+ * - Pros and cons analysis
7
+ * - Use case recommendations
8
+ * - Diversity in implementation strategies
9
+ */
10
+ import { getOllamaClient, PromptTemplates } from './ollama.js';
11
+ import { logger, generateId } from '../utils.js';
12
+ // ============================================================================
13
+ // Configuration
14
+ // ============================================================================
15
+ const DEFAULT_VARIANT_COUNT = 3;
16
+ const VARIANT_LABELS = ['A', 'B', 'C', 'D', 'E'];
17
+ // ============================================================================
18
+ // Variant Generation
19
+ // ============================================================================
20
+ /**
21
+ * Generate multiple solution variants for a task
22
+ */
23
+ export async function generateVariants(context, decomposition, variantCount = DEFAULT_VARIANT_COUNT) {
24
+ logger.debug({ taskCount: decomposition.tasks.length, variantCount }, 'Starting variant generation');
25
+ const client = getOllamaClient();
26
+ const prompt = buildVariantPrompt(context, decomposition, variantCount);
27
+ const response = await client.generateJson(prompt, {
28
+ systemPrompt: PromptTemplates.variantGeneration,
29
+ temperature: 0.7, // Higher temp for creative diversity
30
+ maxTokens: 4096,
31
+ });
32
+ if (response.data) {
33
+ const variants = response.data.variants.map((v, index) => ({
34
+ id: generateId(),
35
+ label: VARIANT_LABELS[index] ?? `V${index + 1}`,
36
+ content: v.content,
37
+ approach: v.approach,
38
+ tradeoffs: {
39
+ pros: v.pros,
40
+ cons: v.cons,
41
+ },
42
+ useCase: v.useCase,
43
+ }));
44
+ const recommendedIndex = Math.min(Math.max(0, response.data.recommendedIndex), variants.length - 1);
45
+ return {
46
+ variants,
47
+ recommendedVariantId: variants[recommendedIndex]?.id ?? variants[0]?.id ?? '',
48
+ recommendationReason: response.data.recommendationReason,
49
+ };
50
+ }
51
+ // Fallback: generate single variant
52
+ logger.warn('Variant generation failed, using fallback');
53
+ return fallbackVariant(context, decomposition);
54
+ }
55
+ /**
56
+ * Build the variant generation prompt
57
+ */
58
+ function buildVariantPrompt(context, decomposition, variantCount) {
59
+ const { intent, projectInfo, codeSnippets } = context;
60
+ let prompt = `Generate ${variantCount} different solution variants for this task.
61
+
62
+ ## Task Summary
63
+ ${decomposition.summary}
64
+
65
+ ## Subtasks
66
+ ${decomposition.tasks.map((t) => `- [${t.type}] ${t.description} (${t.complexity} complexity)`).join('\n')}
67
+
68
+ ## Intent
69
+ - Type: ${intent.primaryIntent}
70
+ - Keywords: ${intent.keywords.join(', ')}
71
+ `;
72
+ if (projectInfo) {
73
+ prompt += `
74
+ ## Project Context
75
+ - Languages: ${projectInfo.languages.join(', ')}
76
+ - Frameworks: ${projectInfo.frameworks.join(', ')}
77
+ `;
78
+ }
79
+ if (codeSnippets.length > 0) {
80
+ prompt += `
81
+ ## Existing Code Context
82
+ ${codeSnippets[0] ? `\`\`\`${codeSnippets[0].language}\n${codeSnippets[0].content.substring(0, 800)}\n\`\`\`` : ''}
83
+ `;
84
+ }
85
+ prompt += `
86
+ ## Requirements
87
+ Generate ${variantCount} meaningfully different solutions. Each should:
88
+ 1. Take a different approach or make different trade-offs
89
+ 2. Be complete and production-ready
90
+ 3. Include clear pros and cons
91
+ 4. Specify the best use case
92
+
93
+ ## Output Format
94
+ {
95
+ "variants": [
96
+ {
97
+ "approach": "Brief description of the approach",
98
+ "content": "The complete solution code or text",
99
+ "pros": ["advantage 1", "advantage 2"],
100
+ "cons": ["disadvantage 1", "disadvantage 2"],
101
+ "useCase": "When to use this approach"
102
+ }
103
+ ],
104
+ "recommendedIndex": 0,
105
+ "recommendationReason": "Why this variant is recommended for most cases"
106
+ }`;
107
+ return prompt;
108
+ }
109
+ /**
110
+ * Fallback variant when LLM fails
111
+ */
112
+ function fallbackVariant(context, decomposition) {
113
+ const variant = {
114
+ id: generateId(),
115
+ label: 'A',
116
+ content: `// Solution for: ${decomposition.summary}
117
+ //
118
+ // Tasks:
119
+ ${decomposition.tasks.map((t) => `// - ${t.description}`).join('\n')}
120
+ //
121
+ // Implementation needed based on the specific requirements.
122
+ // This is a placeholder for the actual solution.
123
+
124
+ function solution() {
125
+ // TODO: Implement based on task breakdown
126
+ throw new Error('Not implemented');
127
+ }
128
+
129
+ export { solution };`,
130
+ approach: 'Standard implementation approach',
131
+ tradeoffs: {
132
+ pros: ['Straightforward implementation', 'Easy to understand'],
133
+ cons: ['May need refinement', 'Generic approach'],
134
+ },
135
+ useCase: 'General purpose implementation',
136
+ };
137
+ return {
138
+ variants: [variant],
139
+ recommendedVariantId: variant.id,
140
+ recommendationReason: 'Single fallback variant generated',
141
+ };
142
+ }
143
+ // ============================================================================
144
+ // Variant Analysis
145
+ // ============================================================================
146
+ /**
147
+ * Compare variants and rank them
148
+ */
149
+ export function rankVariants(variants, criteria) {
150
+ return variants
151
+ .map((variant) => ({
152
+ variant,
153
+ score: calculateVariantScore(variant, criteria),
154
+ }))
155
+ .sort((a, b) => b.score - a.score)
156
+ .map((item, index) => ({
157
+ ...item.variant,
158
+ rank: index + 1,
159
+ score: item.score,
160
+ }));
161
+ }
162
+ /**
163
+ * Calculate score for a variant based on criteria
164
+ */
165
+ function calculateVariantScore(variant, criteria) {
166
+ let score = 50; // Base score
167
+ // Adjust based on pros/cons ratio
168
+ const prosConsRatio = variant.tradeoffs.pros.length /
169
+ Math.max(1, variant.tradeoffs.cons.length);
170
+ score += Math.min(20, prosConsRatio * 10);
171
+ // Adjust based on code length (simple heuristic)
172
+ const codeLength = variant.content.length;
173
+ if (codeLength < 500) {
174
+ score += criteria.simplicityWeight * 15;
175
+ }
176
+ else if (codeLength > 2000) {
177
+ score -= criteria.simplicityWeight * 10;
178
+ }
179
+ // Check for performance keywords
180
+ const performanceKeywords = ['efficient', 'optimized', 'fast', 'cached', 'lazy'];
181
+ const hasPerformanceFeatures = performanceKeywords.some((kw) => variant.content.toLowerCase().includes(kw) ||
182
+ variant.approach.toLowerCase().includes(kw));
183
+ if (hasPerformanceFeatures) {
184
+ score += criteria.performanceWeight * 15;
185
+ }
186
+ // Check for maintainability indicators
187
+ const maintainabilityKeywords = ['modular', 'clean', 'documented', 'typed', 'tested'];
188
+ const hasMaintainabilityFeatures = maintainabilityKeywords.some((kw) => variant.approach.toLowerCase().includes(kw));
189
+ if (hasMaintainabilityFeatures) {
190
+ score += criteria.maintainabilityWeight * 15;
191
+ }
192
+ return Math.min(100, Math.max(0, score));
193
+ }
194
+ // ============================================================================
195
+ // Variant Diversity
196
+ // ============================================================================
197
+ /**
198
+ * Ensure variants are sufficiently diverse
199
+ */
200
+ export function checkVariantDiversity(variants) {
201
+ if (variants.length < 2) {
202
+ return {
203
+ isDiverse: true,
204
+ similarityScore: 0,
205
+ suggestions: [],
206
+ };
207
+ }
208
+ // Simple diversity check based on approach descriptions
209
+ const approaches = variants.map((v) => v.approach.toLowerCase());
210
+ const uniqueWords = new Set();
211
+ const allWords = [];
212
+ for (const approach of approaches) {
213
+ const words = approach.split(/\s+/).filter((w) => w.length > 3);
214
+ words.forEach((w) => uniqueWords.add(w));
215
+ allWords.push(...words);
216
+ }
217
+ const diversityRatio = uniqueWords.size / Math.max(1, allWords.length);
218
+ const isDiverse = diversityRatio > 0.5;
219
+ const suggestions = [];
220
+ if (!isDiverse) {
221
+ suggestions.push('Consider approaches with different paradigms (functional vs OOP)');
222
+ suggestions.push('Explore trade-offs between simplicity and features');
223
+ suggestions.push('Consider different libraries or built-in alternatives');
224
+ }
225
+ return {
226
+ isDiverse,
227
+ similarityScore: 1 - diversityRatio,
228
+ suggestions,
229
+ };
230
+ }
231
+ /**
232
+ * Merge best aspects of multiple variants
233
+ */
234
+ export function synthesizeBestAspects(variants) {
235
+ const allPros = variants.flatMap((v) => v.tradeoffs.pros);
236
+ const allCons = variants.flatMap((v) => v.tradeoffs.cons);
237
+ // Find unique pros
238
+ const uniquePros = [...new Set(allPros)];
239
+ // Find conflicts (aspects that are pros in some variants but cons in others)
240
+ const conflictingAspects = uniquePros.filter((pro) => allCons.some((con) => con.toLowerCase().includes(pro.toLowerCase().split(' ')[0] ?? '')));
241
+ const synthesis = `A synthesized solution could combine:
242
+ ${uniquePros.slice(0, 5).map((p) => `- ${p}`).join('\n')}
243
+
244
+ While being mindful of:
245
+ ${conflictingAspects.slice(0, 3).map((c) => `- ${c}`).join('\n') || '- No major conflicts identified'}`;
246
+ return {
247
+ combinedPros: uniquePros,
248
+ conflictingAspects,
249
+ synthesis,
250
+ };
251
+ }
252
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/tools/variants.ts"],"names":[],"mappings":"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"}