@riotprompt/riotprompt 0.0.8 → 0.0.9

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