@riotprompt/riotprompt 0.0.8 → 0.0.10

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 (59) hide show
  1. package/.kodrdriv-test-cache.json +6 -0
  2. package/BUG-ANALYSIS.md +523 -0
  3. package/CODE-REVIEW-SUMMARY.md +330 -0
  4. package/FIXES-APPLIED.md +437 -0
  5. package/README.md +2 -2
  6. package/dist/builder.js +3 -0
  7. package/dist/builder.js.map +1 -1
  8. package/dist/chat.d.ts +1 -1
  9. package/dist/chat.js +2 -5
  10. package/dist/chat.js.map +1 -1
  11. package/dist/constants.js +1 -2
  12. package/dist/constants.js.map +1 -1
  13. package/dist/context-manager.d.ts +136 -0
  14. package/dist/context-manager.js +243 -0
  15. package/dist/context-manager.js.map +1 -0
  16. package/dist/conversation-logger.d.ts +285 -0
  17. package/dist/conversation-logger.js +491 -0
  18. package/dist/conversation-logger.js.map +1 -0
  19. package/dist/conversation.d.ts +277 -0
  20. package/dist/conversation.js +649 -0
  21. package/dist/conversation.js.map +1 -0
  22. package/dist/formatter.js.map +1 -1
  23. package/dist/items/section.js +3 -3
  24. package/dist/items/section.js.map +1 -1
  25. package/dist/iteration-strategy.d.ts +233 -0
  26. package/dist/iteration-strategy.js +520 -0
  27. package/dist/iteration-strategy.js.map +1 -0
  28. package/dist/loader.js +21 -3
  29. package/dist/loader.js.map +1 -1
  30. package/dist/message-builder.d.ts +156 -0
  31. package/dist/message-builder.js +256 -0
  32. package/dist/message-builder.js.map +1 -0
  33. package/dist/model-config.d.ts +115 -0
  34. package/dist/model-config.js +205 -0
  35. package/dist/model-config.js.map +1 -0
  36. package/dist/override.js +8 -1
  37. package/dist/override.js.map +1 -1
  38. package/dist/parser.js +3 -3
  39. package/dist/parser.js.map +1 -1
  40. package/dist/recipes.d.ts +42 -0
  41. package/dist/recipes.js +189 -4
  42. package/dist/recipes.js.map +1 -1
  43. package/dist/reflection.d.ts +250 -0
  44. package/dist/reflection.js +419 -0
  45. package/dist/reflection.js.map +1 -0
  46. package/dist/riotprompt.cjs +3854 -178
  47. package/dist/riotprompt.cjs.map +1 -1
  48. package/dist/riotprompt.d.ts +20 -2
  49. package/dist/riotprompt.js +10 -1
  50. package/dist/riotprompt.js.map +1 -1
  51. package/dist/token-budget.d.ts +177 -0
  52. package/dist/token-budget.js +401 -0
  53. package/dist/token-budget.js.map +1 -0
  54. package/dist/tools.d.ts +239 -0
  55. package/dist/tools.js +324 -0
  56. package/dist/tools.js.map +1 -0
  57. package/dist/util/general.js +1 -1
  58. package/dist/util/general.js.map +1 -1
  59. package/package.json +23 -20
@@ -0,0 +1,419 @@
1
+ import { wrapLogger, DEFAULT_LOGGER } from './logger.js';
2
+ import { TokenCounter } from './token-budget.js';
3
+
4
+ function _define_property(obj, key, value) {
5
+ if (key in obj) {
6
+ Object.defineProperty(obj, key, {
7
+ value: value,
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true
11
+ });
12
+ } else {
13
+ obj[key] = value;
14
+ }
15
+ return obj;
16
+ }
17
+ // ===== METRICS COLLECTOR =====
18
+ /**
19
+ * MetricsCollector gathers execution metrics during agentic execution.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const collector = new MetricsCollector();
24
+ *
25
+ * collector.recordToolCall('read_file', iteration, duration, true);
26
+ * collector.recordToolCall('search_code', iteration, duration, false, error);
27
+ *
28
+ * const metrics = collector.getMetrics(messages);
29
+ * ```
30
+ */ class MetricsCollector {
31
+ /**
32
+ * Record a tool execution
33
+ */ recordToolCall(name, iteration, duration, success, error, inputSize, outputSize) {
34
+ this.toolMetrics.push({
35
+ name,
36
+ iteration,
37
+ timestamp: new Date().toISOString(),
38
+ duration,
39
+ success,
40
+ error,
41
+ inputSize,
42
+ outputSize
43
+ });
44
+ }
45
+ /**
46
+ * Increment iteration count
47
+ */ incrementIteration() {
48
+ this.iterationCount++;
49
+ }
50
+ /**
51
+ * Get complete metrics
52
+ */ getMetrics(messages, model) {
53
+ const endTime = new Date();
54
+ const totalDuration = endTime.getTime() - this.startTime.getTime();
55
+ // Calculate tool statistics
56
+ const toolStats = this.calculateToolStats();
57
+ // Count unique tools
58
+ const uniqueTools = new Set(this.toolMetrics.map((m)=>m.name));
59
+ // Calculate investigation depth
60
+ const totalTools = this.toolMetrics.length;
61
+ const investigationDepth = totalTools < 3 ? 'shallow' : totalTools < 8 ? 'moderate' : 'deep';
62
+ // Calculate iteration efficiency
63
+ const iterationEfficiency = this.iterationCount > 0 ? totalTools / this.iterationCount : 0;
64
+ // Calculate token usage if model provided
65
+ let tokenUsage;
66
+ if (model) {
67
+ let counter;
68
+ try {
69
+ counter = new TokenCounter(model);
70
+ const total = counter.countConversation(messages);
71
+ tokenUsage = {
72
+ total,
73
+ systemPrompt: 0,
74
+ userContent: 0,
75
+ toolResults: 0,
76
+ conversation: total
77
+ };
78
+ } catch (error) {
79
+ this.logger.warn('Could not calculate token usage', {
80
+ error
81
+ });
82
+ } finally{
83
+ // Always dispose of the counter to prevent resource leaks
84
+ counter === null || counter === void 0 ? void 0 : counter.dispose();
85
+ }
86
+ }
87
+ return {
88
+ startTime: this.startTime,
89
+ endTime,
90
+ totalDuration,
91
+ iterations: this.iterationCount,
92
+ toolCallsExecuted: this.toolMetrics.length,
93
+ toolMetrics: this.toolMetrics,
94
+ toolStats,
95
+ messageCount: messages.length,
96
+ tokenUsage,
97
+ investigationDepth,
98
+ toolDiversity: uniqueTools.size,
99
+ iterationEfficiency
100
+ };
101
+ }
102
+ /**
103
+ * Calculate aggregated tool statistics
104
+ */ calculateToolStats() {
105
+ const stats = new Map();
106
+ // Group by tool name
107
+ const byTool = new Map();
108
+ for (const metric of this.toolMetrics){
109
+ if (!byTool.has(metric.name)) {
110
+ byTool.set(metric.name, []);
111
+ }
112
+ byTool.get(metric.name).push(metric);
113
+ }
114
+ // Calculate stats for each tool
115
+ for (const [name, metrics] of byTool){
116
+ const total = metrics.length;
117
+ const success = metrics.filter((m)=>m.success).length;
118
+ const failures = total - success;
119
+ const totalDuration = metrics.reduce((sum, m)=>sum + m.duration, 0);
120
+ const avgDuration = totalDuration / total;
121
+ const successRate = total > 0 ? success / total : 0;
122
+ stats.set(name, {
123
+ name,
124
+ total,
125
+ success,
126
+ failures,
127
+ totalDuration,
128
+ avgDuration,
129
+ successRate
130
+ });
131
+ }
132
+ return stats;
133
+ }
134
+ constructor(logger){
135
+ _define_property(this, "startTime", void 0);
136
+ _define_property(this, "toolMetrics", void 0);
137
+ _define_property(this, "iterationCount", void 0);
138
+ _define_property(this, "logger", void 0);
139
+ this.startTime = new Date();
140
+ this.toolMetrics = [];
141
+ this.iterationCount = 0;
142
+ this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'MetricsCollector');
143
+ }
144
+ }
145
+ // ===== REFLECTION REPORT GENERATOR =====
146
+ /**
147
+ * ReflectionReportGenerator generates analysis reports from execution metrics.
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const generator = new ReflectionReportGenerator();
152
+ * const report = generator.generate(metrics, result);
153
+ *
154
+ * console.log('Success rate:', report.toolEffectiveness.overallSuccessRate);
155
+ * console.log('Recommendations:', report.recommendations.length);
156
+ * ```
157
+ */ class ReflectionReportGenerator {
158
+ /**
159
+ * Generate reflection report
160
+ */ generate(metrics, result) {
161
+ var _result_finalMessage;
162
+ this.logger.debug('Generating reflection report');
163
+ const report = {
164
+ id: `reflection-${Date.now()}`,
165
+ generated: new Date(),
166
+ summary: this.generateSummary(metrics),
167
+ toolEffectiveness: this.analyzeToolEffectiveness(metrics),
168
+ performanceInsights: this.analyzePerformance(metrics),
169
+ timeline: this.buildTimeline(metrics),
170
+ tokenUsage: metrics.tokenUsage,
171
+ qualityAssessment: this.assessQuality(metrics),
172
+ recommendations: this.generateRecommendations(metrics, result),
173
+ conversationHistory: result.conversation.getMessages(),
174
+ output: ((_result_finalMessage = result.finalMessage) === null || _result_finalMessage === void 0 ? void 0 : _result_finalMessage.content) || undefined
175
+ };
176
+ this.logger.info('Generated reflection report', {
177
+ recommendations: report.recommendations.length,
178
+ toolsAnalyzed: metrics.toolStats.size
179
+ });
180
+ return report;
181
+ }
182
+ /**
183
+ * Generate execution summary
184
+ */ generateSummary(metrics) {
185
+ const successfulTools = metrics.toolMetrics.filter((m)=>m.success).length;
186
+ const successRate = metrics.toolMetrics.length > 0 ? successfulTools / metrics.toolMetrics.length : 0;
187
+ return {
188
+ startTime: metrics.startTime,
189
+ endTime: metrics.endTime || new Date(),
190
+ totalDuration: metrics.totalDuration,
191
+ iterations: metrics.iterations,
192
+ toolCallsExecuted: metrics.toolCallsExecuted,
193
+ uniqueToolsUsed: metrics.toolDiversity,
194
+ successRate
195
+ };
196
+ }
197
+ /**
198
+ * Analyze tool effectiveness
199
+ */ analyzeToolEffectiveness(metrics) {
200
+ const successfulTools = metrics.toolMetrics.filter((m)=>m.success).length;
201
+ const overallSuccessRate = metrics.toolMetrics.length > 0 ? successfulTools / metrics.toolMetrics.length : 1;
202
+ // Find failed tools
203
+ const failedTools = Array.from(metrics.toolStats.values()).filter((stats)=>stats.failures > 0).map((stats)=>({
204
+ name: stats.name,
205
+ failures: stats.failures,
206
+ rate: stats.successRate
207
+ })).sort((a, b)=>b.failures - a.failures);
208
+ // Find slow tools (>1s average)
209
+ const slowTools = Array.from(metrics.toolStats.values()).filter((stats)=>stats.avgDuration > 1000).map((stats)=>({
210
+ name: stats.name,
211
+ avgDuration: stats.avgDuration
212
+ })).sort((a, b)=>b.avgDuration - a.avgDuration);
213
+ // Most used tools
214
+ const mostUsedTools = Array.from(metrics.toolStats.values()).map((stats)=>({
215
+ name: stats.name,
216
+ count: stats.total
217
+ })).sort((a, b)=>b.count - a.count).slice(0, 5);
218
+ return {
219
+ overallSuccessRate,
220
+ toolStats: metrics.toolStats,
221
+ failedTools,
222
+ slowTools,
223
+ mostUsedTools
224
+ };
225
+ }
226
+ /**
227
+ * Analyze performance
228
+ */ analyzePerformance(metrics) {
229
+ const avgIterationDuration = metrics.iterations > 0 ? metrics.totalDuration / metrics.iterations : 0;
230
+ // Find slowest and fastest tools
231
+ const toolsBySpeed = Array.from(metrics.toolStats.values()).sort((a, b)=>b.avgDuration - a.avgDuration);
232
+ const slowestTool = toolsBySpeed[0] ? {
233
+ name: toolsBySpeed[0].name,
234
+ duration: toolsBySpeed[0].avgDuration
235
+ } : undefined;
236
+ const fastestTool = toolsBySpeed[toolsBySpeed.length - 1] ? {
237
+ name: toolsBySpeed[toolsBySpeed.length - 1].name,
238
+ duration: toolsBySpeed[toolsBySpeed.length - 1].avgDuration
239
+ } : undefined;
240
+ // Identify bottlenecks
241
+ const bottlenecks = [];
242
+ if (slowestTool && slowestTool.duration > 1000) {
243
+ bottlenecks.push(`${slowestTool.name} averaging ${slowestTool.duration}ms`);
244
+ }
245
+ if (avgIterationDuration > 10000) {
246
+ bottlenecks.push(`Slow iterations averaging ${avgIterationDuration.toFixed(0)}ms`);
247
+ }
248
+ return {
249
+ totalDuration: metrics.totalDuration,
250
+ avgIterationDuration,
251
+ slowestTool,
252
+ fastestTool,
253
+ bottlenecks
254
+ };
255
+ }
256
+ /**
257
+ * Build execution timeline
258
+ */ buildTimeline(metrics) {
259
+ const events = [];
260
+ for (const metric of metrics.toolMetrics){
261
+ events.push({
262
+ timestamp: metric.timestamp,
263
+ iteration: metric.iteration,
264
+ type: 'tool-call',
265
+ description: `${metric.name}(${metric.success ? 'success' : 'failure'})`,
266
+ duration: metric.duration,
267
+ success: metric.success
268
+ });
269
+ }
270
+ return events.sort((a, b)=>new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
271
+ }
272
+ /**
273
+ * Assess investigation quality
274
+ */ assessQuality(metrics) {
275
+ const toolDiversity = metrics.toolDiversity;
276
+ const iterationEfficiency = metrics.iterationEfficiency;
277
+ // Calculate coverage (tools / iterations - aim for 1-2)
278
+ const coverage = metrics.iterations > 0 ? Math.min(1, metrics.toolCallsExecuted / (metrics.iterations * 2)) : 0;
279
+ // Overall quality score (0-1)
280
+ const depthScore = metrics.investigationDepth === 'deep' ? 1 : metrics.investigationDepth === 'moderate' ? 0.7 : 0.3;
281
+ const diversityScore = Math.min(1, toolDiversity / 5); // 5+ tools = max score
282
+ const efficiencyScore = Math.min(1, iterationEfficiency / 2); // 2 tools/iteration = max
283
+ const overall = (depthScore + diversityScore + efficiencyScore) / 3;
284
+ return {
285
+ investigationDepth: metrics.investigationDepth,
286
+ toolDiversity,
287
+ iterationEfficiency,
288
+ coverage,
289
+ overall
290
+ };
291
+ }
292
+ /**
293
+ * Generate recommendations
294
+ */ generateRecommendations(metrics, _result) {
295
+ const recommendations = [];
296
+ // Check for tool failures
297
+ const failedTools = Array.from(metrics.toolStats.values()).filter((stats)=>stats.failures > 0);
298
+ if (failedTools.length > 0) {
299
+ recommendations.push({
300
+ type: 'tool-failure',
301
+ severity: 'high',
302
+ message: `${failedTools.length} tool(s) had failures. Review tool implementations.`,
303
+ suggestion: 'Check error logs and validate tool parameters',
304
+ relatedTools: failedTools.map((t)=>t.name)
305
+ });
306
+ }
307
+ // Check for shallow investigation
308
+ if (metrics.investigationDepth === 'shallow' && metrics.toolCallsExecuted < 2) {
309
+ recommendations.push({
310
+ type: 'investigation-depth',
311
+ severity: 'medium',
312
+ message: 'Investigation was shallow. Consider adjusting strategy to encourage more tool usage.',
313
+ suggestion: 'Use investigateThenRespond strategy with requireMinimumTools'
314
+ });
315
+ }
316
+ // Check for slow tools
317
+ const slowTools = Array.from(metrics.toolStats.values()).filter((stats)=>stats.avgDuration > 1000);
318
+ if (slowTools.length > 0) {
319
+ recommendations.push({
320
+ type: 'performance',
321
+ severity: 'medium',
322
+ message: `${slowTools.length} tool(s) taking >1s. Consider optimization.`,
323
+ suggestion: 'Add caching, reduce scope, or optimize implementations',
324
+ relatedTools: slowTools.map((t)=>t.name)
325
+ });
326
+ }
327
+ // Check token usage
328
+ if (metrics.tokenUsage) {
329
+ if (metrics.tokenUsage.percentage && metrics.tokenUsage.percentage > 80) {
330
+ recommendations.push({
331
+ type: 'token-budget',
332
+ severity: 'high',
333
+ message: `Token usage at ${metrics.tokenUsage.percentage.toFixed(1)}%. Increase budget or enable compression.`,
334
+ suggestion: 'Increase max tokens or use priority-based compression'
335
+ });
336
+ }
337
+ }
338
+ return recommendations;
339
+ }
340
+ /**
341
+ * Format report as markdown
342
+ */ formatMarkdown(report) {
343
+ let markdown = `# Agentic Execution - Self-Reflection Report\n\n`;
344
+ markdown += `**Generated:** ${report.generated.toISOString()}\n`;
345
+ markdown += `**Duration:** ${(report.summary.totalDuration / 1000).toFixed(1)}s\n\n`;
346
+ markdown += `## Execution Summary\n\n`;
347
+ markdown += `- **Iterations**: ${report.summary.iterations}\n`;
348
+ markdown += `- **Tool Calls**: ${report.summary.toolCallsExecuted}\n`;
349
+ markdown += `- **Unique Tools**: ${report.summary.uniqueToolsUsed}\n`;
350
+ markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\n`;
351
+ markdown += `- **Success Rate**: ${(report.summary.successRate * 100).toFixed(1)}%\n\n`;
352
+ markdown += `## Tool Effectiveness Analysis\n\n`;
353
+ markdown += `| Tool | Calls | Success | Failures | Success Rate | Avg Duration |\n`;
354
+ markdown += `|------|-------|---------|----------|--------------|---------------|\n`;
355
+ for (const [name, stats] of report.toolEffectiveness.toolStats){
356
+ markdown += `| ${name} | ${stats.total} | ${stats.success} | ${stats.failures} | `;
357
+ markdown += `${(stats.successRate * 100).toFixed(1)}% | ${stats.avgDuration.toFixed(0)}ms |\n`;
358
+ }
359
+ if (report.toolEffectiveness.failedTools.length > 0) {
360
+ markdown += `\n### Tools with Failures\n\n`;
361
+ for (const tool of report.toolEffectiveness.failedTools){
362
+ markdown += `- **${tool.name}**: ${tool.failures} failures (${(tool.rate * 100).toFixed(1)}% success)\n`;
363
+ }
364
+ }
365
+ if (report.toolEffectiveness.slowTools.length > 0) {
366
+ markdown += `\n### Slow Tools (>1s average)\n\n`;
367
+ for (const tool of report.toolEffectiveness.slowTools){
368
+ markdown += `- **${tool.name}**: ${(tool.avgDuration / 1000).toFixed(2)}s average\n`;
369
+ }
370
+ }
371
+ markdown += `\n## Quality Assessment\n\n`;
372
+ markdown += `- **Overall Score**: ${(report.qualityAssessment.overall * 100).toFixed(0)}%\n`;
373
+ markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\n`;
374
+ markdown += `- **Tool Diversity**: ${report.qualityAssessment.toolDiversity} unique tools\n`;
375
+ markdown += `- **Efficiency**: ${report.qualityAssessment.iterationEfficiency.toFixed(2)} tools per iteration\n\n`;
376
+ if (report.recommendations.length > 0) {
377
+ markdown += `## Recommendations\n\n`;
378
+ const byPriority = {
379
+ high: report.recommendations.filter((r)=>r.severity === 'high'),
380
+ medium: report.recommendations.filter((r)=>r.severity === 'medium'),
381
+ low: report.recommendations.filter((r)=>r.severity === 'low')
382
+ };
383
+ if (byPriority.high.length > 0) {
384
+ markdown += `### 🔴 High Priority\n\n`;
385
+ byPriority.high.forEach((rec, i)=>{
386
+ markdown += `${i + 1}. **${rec.message}**\n`;
387
+ if (rec.suggestion) {
388
+ markdown += ` - Suggestion: ${rec.suggestion}\n`;
389
+ }
390
+ markdown += `\n`;
391
+ });
392
+ }
393
+ if (byPriority.medium.length > 0) {
394
+ markdown += `### 🟡 Medium Priority\n\n`;
395
+ byPriority.medium.forEach((rec, i)=>{
396
+ markdown += `${i + 1}. **${rec.message}**\n`;
397
+ if (rec.suggestion) {
398
+ markdown += ` - Suggestion: ${rec.suggestion}\n`;
399
+ }
400
+ markdown += `\n`;
401
+ });
402
+ }
403
+ }
404
+ if (report.output) {
405
+ markdown += `## Final Output\n\n`;
406
+ markdown += `\`\`\`\n${report.output}\n\`\`\`\n\n`;
407
+ }
408
+ markdown += `---\n\n`;
409
+ markdown += `*Report generated by RiotPrompt Agentic Reflection System*\n`;
410
+ return markdown;
411
+ }
412
+ constructor(logger){
413
+ _define_property(this, "logger", void 0);
414
+ this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ReflectionReportGenerator');
415
+ }
416
+ }
417
+
418
+ export { MetricsCollector, ReflectionReportGenerator, ReflectionReportGenerator as default };
419
+ //# sourceMappingURL=reflection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection.js","sources":["../src/reflection.ts"],"sourcesContent":["import { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport type { ConversationMessage } from \"./conversation\";\nimport type { StrategyResult } from \"./iteration-strategy\";\nimport { TokenCounter } from \"./token-budget\";\nimport { Model } from \"./chat\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Tool execution metric for a single call\n */\nexport interface ToolExecutionMetric {\n name: string;\n iteration: number;\n timestamp: string;\n duration: number;\n success: boolean;\n error?: string;\n inputSize?: number;\n outputSize?: number;\n}\n\n/**\n * Aggregated statistics for a tool\n */\nexport interface ToolStats {\n name: string;\n total: number;\n success: number;\n failures: number;\n totalDuration: number;\n avgDuration: number;\n successRate: number;\n}\n\n/**\n * Token usage metrics\n */\nexport interface TokenUsageMetrics {\n total: number;\n systemPrompt: number;\n userContent: number;\n toolResults: number;\n conversation: number;\n percentage?: number;\n budget?: number;\n}\n\n/**\n * Complete execution metrics\n */\nexport interface AgenticExecutionMetrics {\n startTime: Date;\n endTime?: Date;\n totalDuration: number;\n iterations: number;\n toolCallsExecuted: number;\n toolMetrics: ToolExecutionMetric[];\n toolStats: Map<string, ToolStats>;\n messageCount: number;\n tokenUsage?: TokenUsageMetrics;\n investigationDepth: 'shallow' | 'moderate' | 'deep';\n toolDiversity: number;\n iterationEfficiency: number;\n}\n\n/**\n * Recommendation type\n */\nexport type RecommendationType =\n | 'tool-failure'\n | 'performance'\n | 'investigation-depth'\n | 'token-budget'\n | 'strategy-adjustment'\n | 'quality-issue';\n\n/**\n * Recommendation from analysis\n */\nexport interface Recommendation {\n type: RecommendationType;\n severity: 'high' | 'medium' | 'low';\n message: string;\n suggestion?: string;\n relatedTools?: string[];\n relatedMetrics?: any;\n}\n\n/**\n * Tool effectiveness analysis\n */\nexport interface ToolEffectivenessAnalysis {\n overallSuccessRate: number;\n toolStats: Map<string, ToolStats>;\n failedTools: Array<{ name: string; failures: number; rate: number }>;\n slowTools: Array<{ name: string; avgDuration: number }>;\n mostUsedTools: Array<{ name: string; count: number }>;\n}\n\n/**\n * Performance insights\n */\nexport interface PerformanceInsights {\n totalDuration: number;\n avgIterationDuration: number;\n slowestTool?: { name: string; duration: number };\n fastestTool?: { name: string; duration: number };\n bottlenecks: string[];\n}\n\n/**\n * Timeline event\n */\nexport interface TimelineEvent {\n timestamp: string;\n iteration: number;\n type: 'message' | 'tool-call' | 'tool-result';\n description: string;\n duration?: number;\n success?: boolean;\n}\n\n/**\n * Quality assessment\n */\nexport interface QualityAssessment {\n investigationDepth: 'shallow' | 'moderate' | 'deep';\n toolDiversity: number;\n iterationEfficiency: number;\n coverage: number;\n overall: number; // 0-1\n}\n\n/**\n * Complete reflection report\n */\nexport interface ReflectionReport {\n id: string;\n generated: Date;\n summary: {\n startTime: Date;\n endTime: Date;\n totalDuration: number;\n iterations: number;\n toolCallsExecuted: number;\n uniqueToolsUsed: number;\n successRate: number;\n };\n toolEffectiveness: ToolEffectivenessAnalysis;\n performanceInsights: PerformanceInsights;\n timeline: TimelineEvent[];\n tokenUsage?: TokenUsageMetrics;\n qualityAssessment: QualityAssessment;\n recommendations: Recommendation[];\n conversationHistory?: ConversationMessage[];\n output?: string;\n}\n\n/**\n * Reflection configuration\n */\nexport interface ReflectionConfig {\n enabled: boolean;\n outputPath?: string;\n format?: 'markdown' | 'json' | 'html';\n includeConversation?: boolean;\n includeRecommendations?: boolean;\n sections?: ReflectionSection[];\n}\n\nexport type ReflectionSection =\n | 'summary'\n | 'tool-effectiveness'\n | 'performance'\n | 'timeline'\n | 'token-usage'\n | 'quality-assessment'\n | 'recommendations'\n | 'conversation'\n | 'output';\n\n// ===== METRICS COLLECTOR =====\n\n/**\n * MetricsCollector gathers execution metrics during agentic execution.\n *\n * @example\n * ```typescript\n * const collector = new MetricsCollector();\n *\n * collector.recordToolCall('read_file', iteration, duration, true);\n * collector.recordToolCall('search_code', iteration, duration, false, error);\n *\n * const metrics = collector.getMetrics(messages);\n * ```\n */\nexport class MetricsCollector {\n private startTime: Date;\n private toolMetrics: ToolExecutionMetric[];\n private iterationCount: number;\n private logger: any;\n\n constructor(logger?: any) {\n this.startTime = new Date();\n this.toolMetrics = [];\n this.iterationCount = 0;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'MetricsCollector');\n }\n\n /**\n * Record a tool execution\n */\n recordToolCall(\n name: string,\n iteration: number,\n duration: number,\n success: boolean,\n error?: string,\n inputSize?: number,\n outputSize?: number\n ): void {\n this.toolMetrics.push({\n name,\n iteration,\n timestamp: new Date().toISOString(),\n duration,\n success,\n error,\n inputSize,\n outputSize,\n });\n }\n\n /**\n * Increment iteration count\n */\n incrementIteration(): void {\n this.iterationCount++;\n }\n\n /**\n * Get complete metrics\n */\n getMetrics(messages: ConversationMessage[], model?: Model): AgenticExecutionMetrics {\n const endTime = new Date();\n const totalDuration = endTime.getTime() - this.startTime.getTime();\n\n // Calculate tool statistics\n const toolStats = this.calculateToolStats();\n\n // Count unique tools\n const uniqueTools = new Set(this.toolMetrics.map(m => m.name));\n\n // Calculate investigation depth\n const totalTools = this.toolMetrics.length;\n const investigationDepth: 'shallow' | 'moderate' | 'deep' =\n totalTools < 3 ? 'shallow' :\n totalTools < 8 ? 'moderate' : 'deep';\n\n // Calculate iteration efficiency\n const iterationEfficiency = this.iterationCount > 0\n ? totalTools / this.iterationCount\n : 0;\n\n // Calculate token usage if model provided\n let tokenUsage: TokenUsageMetrics | undefined;\n if (model) {\n let counter: TokenCounter | undefined;\n try {\n counter = new TokenCounter(model);\n const total = counter.countConversation(messages);\n\n tokenUsage = {\n total,\n systemPrompt: 0, // Could be calculated by filtering messages\n userContent: 0,\n toolResults: 0,\n conversation: total,\n };\n } catch (error) {\n this.logger.warn('Could not calculate token usage', { error });\n } finally {\n // Always dispose of the counter to prevent resource leaks\n counter?.dispose();\n }\n }\n\n return {\n startTime: this.startTime,\n endTime,\n totalDuration,\n iterations: this.iterationCount,\n toolCallsExecuted: this.toolMetrics.length,\n toolMetrics: this.toolMetrics,\n toolStats,\n messageCount: messages.length,\n tokenUsage,\n investigationDepth,\n toolDiversity: uniqueTools.size,\n iterationEfficiency,\n };\n }\n\n /**\n * Calculate aggregated tool statistics\n */\n private calculateToolStats(): Map<string, ToolStats> {\n const stats = new Map<string, ToolStats>();\n\n // Group by tool name\n const byTool = new Map<string, ToolExecutionMetric[]>();\n for (const metric of this.toolMetrics) {\n if (!byTool.has(metric.name)) {\n byTool.set(metric.name, []);\n }\n byTool.get(metric.name)!.push(metric);\n }\n\n // Calculate stats for each tool\n for (const [name, metrics] of byTool) {\n const total = metrics.length;\n const success = metrics.filter(m => m.success).length;\n const failures = total - success;\n const totalDuration = metrics.reduce((sum, m) => sum + m.duration, 0);\n const avgDuration = totalDuration / total;\n const successRate = total > 0 ? success / total : 0;\n\n stats.set(name, {\n name,\n total,\n success,\n failures,\n totalDuration,\n avgDuration,\n successRate,\n });\n }\n\n return stats;\n }\n}\n\n// ===== REFLECTION REPORT GENERATOR =====\n\n/**\n * ReflectionReportGenerator generates analysis reports from execution metrics.\n *\n * @example\n * ```typescript\n * const generator = new ReflectionReportGenerator();\n * const report = generator.generate(metrics, result);\n *\n * console.log('Success rate:', report.toolEffectiveness.overallSuccessRate);\n * console.log('Recommendations:', report.recommendations.length);\n * ```\n */\nexport class ReflectionReportGenerator {\n private logger: any;\n\n constructor(logger?: any) {\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ReflectionReportGenerator');\n }\n\n /**\n * Generate reflection report\n */\n generate(\n metrics: AgenticExecutionMetrics,\n result: StrategyResult\n ): ReflectionReport {\n this.logger.debug('Generating reflection report');\n\n const report: ReflectionReport = {\n id: `reflection-${Date.now()}`,\n generated: new Date(),\n summary: this.generateSummary(metrics),\n toolEffectiveness: this.analyzeToolEffectiveness(metrics),\n performanceInsights: this.analyzePerformance(metrics),\n timeline: this.buildTimeline(metrics),\n tokenUsage: metrics.tokenUsage,\n qualityAssessment: this.assessQuality(metrics),\n recommendations: this.generateRecommendations(metrics, result),\n conversationHistory: result.conversation.getMessages(),\n output: result.finalMessage?.content || undefined,\n };\n\n this.logger.info('Generated reflection report', {\n recommendations: report.recommendations.length,\n toolsAnalyzed: metrics.toolStats.size\n });\n\n return report;\n }\n\n /**\n * Generate execution summary\n */\n private generateSummary(metrics: AgenticExecutionMetrics) {\n const successfulTools = metrics.toolMetrics.filter(m => m.success).length;\n const successRate = metrics.toolMetrics.length > 0\n ? successfulTools / metrics.toolMetrics.length\n : 0;\n\n return {\n startTime: metrics.startTime,\n endTime: metrics.endTime || new Date(),\n totalDuration: metrics.totalDuration,\n iterations: metrics.iterations,\n toolCallsExecuted: metrics.toolCallsExecuted,\n uniqueToolsUsed: metrics.toolDiversity,\n successRate,\n };\n }\n\n /**\n * Analyze tool effectiveness\n */\n private analyzeToolEffectiveness(metrics: AgenticExecutionMetrics): ToolEffectivenessAnalysis {\n const successfulTools = metrics.toolMetrics.filter(m => m.success).length;\n const overallSuccessRate = metrics.toolMetrics.length > 0\n ? successfulTools / metrics.toolMetrics.length\n : 1;\n\n // Find failed tools\n const failedTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.failures > 0)\n .map(stats => ({\n name: stats.name,\n failures: stats.failures,\n rate: stats.successRate\n }))\n .sort((a, b) => b.failures - a.failures);\n\n // Find slow tools (>1s average)\n const slowTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.avgDuration > 1000)\n .map(stats => ({\n name: stats.name,\n avgDuration: stats.avgDuration\n }))\n .sort((a, b) => b.avgDuration - a.avgDuration);\n\n // Most used tools\n const mostUsedTools = Array.from(metrics.toolStats.values())\n .map(stats => ({\n name: stats.name,\n count: stats.total\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5);\n\n return {\n overallSuccessRate,\n toolStats: metrics.toolStats,\n failedTools,\n slowTools,\n mostUsedTools,\n };\n }\n\n /**\n * Analyze performance\n */\n private analyzePerformance(metrics: AgenticExecutionMetrics): PerformanceInsights {\n const avgIterationDuration = metrics.iterations > 0\n ? metrics.totalDuration / metrics.iterations\n : 0;\n\n // Find slowest and fastest tools\n const toolsBySpeed = Array.from(metrics.toolStats.values())\n .sort((a, b) => b.avgDuration - a.avgDuration);\n\n const slowestTool = toolsBySpeed[0]\n ? { name: toolsBySpeed[0].name, duration: toolsBySpeed[0].avgDuration }\n : undefined;\n\n const fastestTool = toolsBySpeed[toolsBySpeed.length - 1]\n ? { name: toolsBySpeed[toolsBySpeed.length - 1].name, duration: toolsBySpeed[toolsBySpeed.length - 1].avgDuration }\n : undefined;\n\n // Identify bottlenecks\n const bottlenecks: string[] = [];\n if (slowestTool && slowestTool.duration > 1000) {\n bottlenecks.push(`${slowestTool.name} averaging ${slowestTool.duration}ms`);\n }\n if (avgIterationDuration > 10000) {\n bottlenecks.push(`Slow iterations averaging ${avgIterationDuration.toFixed(0)}ms`);\n }\n\n return {\n totalDuration: metrics.totalDuration,\n avgIterationDuration,\n slowestTool,\n fastestTool,\n bottlenecks,\n };\n }\n\n /**\n * Build execution timeline\n */\n private buildTimeline(metrics: AgenticExecutionMetrics): TimelineEvent[] {\n const events: TimelineEvent[] = [];\n\n for (const metric of metrics.toolMetrics) {\n events.push({\n timestamp: metric.timestamp,\n iteration: metric.iteration,\n type: 'tool-call',\n description: `${metric.name}(${metric.success ? 'success' : 'failure'})`,\n duration: metric.duration,\n success: metric.success,\n });\n }\n\n return events.sort((a, b) =>\n new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()\n );\n }\n\n /**\n * Assess investigation quality\n */\n private assessQuality(metrics: AgenticExecutionMetrics): QualityAssessment {\n const toolDiversity = metrics.toolDiversity;\n const iterationEfficiency = metrics.iterationEfficiency;\n\n // Calculate coverage (tools / iterations - aim for 1-2)\n const coverage = metrics.iterations > 0\n ? Math.min(1, metrics.toolCallsExecuted / (metrics.iterations * 2))\n : 0;\n\n // Overall quality score (0-1)\n const depthScore = metrics.investigationDepth === 'deep' ? 1 :\n metrics.investigationDepth === 'moderate' ? 0.7 : 0.3;\n const diversityScore = Math.min(1, toolDiversity / 5); // 5+ tools = max score\n const efficiencyScore = Math.min(1, iterationEfficiency / 2); // 2 tools/iteration = max\n\n const overall = (depthScore + diversityScore + efficiencyScore) / 3;\n\n return {\n investigationDepth: metrics.investigationDepth,\n toolDiversity,\n iterationEfficiency,\n coverage,\n overall,\n };\n }\n\n /**\n * Generate recommendations\n */\n private generateRecommendations(\n metrics: AgenticExecutionMetrics,\n _result: StrategyResult\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Check for tool failures\n const failedTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.failures > 0);\n\n if (failedTools.length > 0) {\n recommendations.push({\n type: 'tool-failure',\n severity: 'high',\n message: `${failedTools.length} tool(s) had failures. Review tool implementations.`,\n suggestion: 'Check error logs and validate tool parameters',\n relatedTools: failedTools.map(t => t.name),\n });\n }\n\n // Check for shallow investigation\n if (metrics.investigationDepth === 'shallow' && metrics.toolCallsExecuted < 2) {\n recommendations.push({\n type: 'investigation-depth',\n severity: 'medium',\n message: 'Investigation was shallow. Consider adjusting strategy to encourage more tool usage.',\n suggestion: 'Use investigateThenRespond strategy with requireMinimumTools',\n });\n }\n\n // Check for slow tools\n const slowTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.avgDuration > 1000);\n\n if (slowTools.length > 0) {\n recommendations.push({\n type: 'performance',\n severity: 'medium',\n message: `${slowTools.length} tool(s) taking >1s. Consider optimization.`,\n suggestion: 'Add caching, reduce scope, or optimize implementations',\n relatedTools: slowTools.map(t => t.name),\n });\n }\n\n // Check token usage\n if (metrics.tokenUsage) {\n if (metrics.tokenUsage.percentage && metrics.tokenUsage.percentage > 80) {\n recommendations.push({\n type: 'token-budget',\n severity: 'high',\n message: `Token usage at ${metrics.tokenUsage.percentage.toFixed(1)}%. Increase budget or enable compression.`,\n suggestion: 'Increase max tokens or use priority-based compression',\n });\n }\n }\n\n return recommendations;\n }\n\n /**\n * Format report as markdown\n */\n formatMarkdown(report: ReflectionReport): string {\n let markdown = `# Agentic Execution - Self-Reflection Report\\n\\n`;\n markdown += `**Generated:** ${report.generated.toISOString()}\\n`;\n markdown += `**Duration:** ${(report.summary.totalDuration / 1000).toFixed(1)}s\\n\\n`;\n\n markdown += `## Execution Summary\\n\\n`;\n markdown += `- **Iterations**: ${report.summary.iterations}\\n`;\n markdown += `- **Tool Calls**: ${report.summary.toolCallsExecuted}\\n`;\n markdown += `- **Unique Tools**: ${report.summary.uniqueToolsUsed}\\n`;\n markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\\n`;\n markdown += `- **Success Rate**: ${(report.summary.successRate * 100).toFixed(1)}%\\n\\n`;\n\n markdown += `## Tool Effectiveness Analysis\\n\\n`;\n markdown += `| Tool | Calls | Success | Failures | Success Rate | Avg Duration |\\n`;\n markdown += `|------|-------|---------|----------|--------------|---------------|\\n`;\n\n for (const [name, stats] of report.toolEffectiveness.toolStats) {\n markdown += `| ${name} | ${stats.total} | ${stats.success} | ${stats.failures} | `;\n markdown += `${(stats.successRate * 100).toFixed(1)}% | ${stats.avgDuration.toFixed(0)}ms |\\n`;\n }\n\n if (report.toolEffectiveness.failedTools.length > 0) {\n markdown += `\\n### Tools with Failures\\n\\n`;\n for (const tool of report.toolEffectiveness.failedTools) {\n markdown += `- **${tool.name}**: ${tool.failures} failures (${(tool.rate * 100).toFixed(1)}% success)\\n`;\n }\n }\n\n if (report.toolEffectiveness.slowTools.length > 0) {\n markdown += `\\n### Slow Tools (>1s average)\\n\\n`;\n for (const tool of report.toolEffectiveness.slowTools) {\n markdown += `- **${tool.name}**: ${(tool.avgDuration / 1000).toFixed(2)}s average\\n`;\n }\n }\n\n markdown += `\\n## Quality Assessment\\n\\n`;\n markdown += `- **Overall Score**: ${(report.qualityAssessment.overall * 100).toFixed(0)}%\\n`;\n markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\\n`;\n markdown += `- **Tool Diversity**: ${report.qualityAssessment.toolDiversity} unique tools\\n`;\n markdown += `- **Efficiency**: ${report.qualityAssessment.iterationEfficiency.toFixed(2)} tools per iteration\\n\\n`;\n\n if (report.recommendations.length > 0) {\n markdown += `## Recommendations\\n\\n`;\n\n const byPriority = {\n high: report.recommendations.filter(r => r.severity === 'high'),\n medium: report.recommendations.filter(r => r.severity === 'medium'),\n low: report.recommendations.filter(r => r.severity === 'low'),\n };\n\n if (byPriority.high.length > 0) {\n markdown += `### 🔴 High Priority\\n\\n`;\n byPriority.high.forEach((rec, i) => {\n markdown += `${i + 1}. **${rec.message}**\\n`;\n if (rec.suggestion) {\n markdown += ` - Suggestion: ${rec.suggestion}\\n`;\n }\n markdown += `\\n`;\n });\n }\n\n if (byPriority.medium.length > 0) {\n markdown += `### 🟡 Medium Priority\\n\\n`;\n byPriority.medium.forEach((rec, i) => {\n markdown += `${i + 1}. **${rec.message}**\\n`;\n if (rec.suggestion) {\n markdown += ` - Suggestion: ${rec.suggestion}\\n`;\n }\n markdown += `\\n`;\n });\n }\n }\n\n if (report.output) {\n markdown += `## Final Output\\n\\n`;\n markdown += `\\`\\`\\`\\n${report.output}\\n\\`\\`\\`\\n\\n`;\n }\n\n markdown += `---\\n\\n`;\n markdown += `*Report generated by RiotPrompt Agentic Reflection System*\\n`;\n\n return markdown;\n }\n}\n\nexport default ReflectionReportGenerator;\n\n"],"names":["MetricsCollector","recordToolCall","name","iteration","duration","success","error","inputSize","outputSize","toolMetrics","push","timestamp","Date","toISOString","incrementIteration","iterationCount","getMetrics","messages","model","endTime","totalDuration","getTime","startTime","toolStats","calculateToolStats","uniqueTools","Set","map","m","totalTools","length","investigationDepth","iterationEfficiency","tokenUsage","counter","TokenCounter","total","countConversation","systemPrompt","userContent","toolResults","conversation","logger","warn","dispose","iterations","toolCallsExecuted","messageCount","toolDiversity","size","stats","Map","byTool","metric","has","set","get","metrics","filter","failures","reduce","sum","avgDuration","successRate","wrapLogger","DEFAULT_LOGGER","ReflectionReportGenerator","generate","result","debug","report","id","now","generated","summary","generateSummary","toolEffectiveness","analyzeToolEffectiveness","performanceInsights","analyzePerformance","timeline","buildTimeline","qualityAssessment","assessQuality","recommendations","generateRecommendations","conversationHistory","getMessages","output","finalMessage","content","undefined","info","toolsAnalyzed","successfulTools","uniqueToolsUsed","overallSuccessRate","failedTools","Array","from","values","rate","sort","a","b","slowTools","mostUsedTools","count","slice","avgIterationDuration","toolsBySpeed","slowestTool","fastestTool","bottlenecks","toFixed","events","type","description","coverage","Math","min","depthScore","diversityScore","efficiencyScore","overall","_result","severity","message","suggestion","relatedTools","t","percentage","formatMarkdown","markdown","tool","byPriority","high","r","medium","low","forEach","rec","i"],"mappings":"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"}