@riotprompt/riotprompt 0.0.7 → 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.
- package/.kodrdriv-test-cache.json +6 -0
- package/README.md +2 -2
- package/dist/builder.d.ts +3 -15
- package/dist/builder.js +3 -0
- package/dist/builder.js.map +1 -1
- package/dist/context-manager.d.ts +135 -0
- package/dist/context-manager.js +220 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/conversation-logger.d.ts +283 -0
- package/dist/conversation-logger.js +454 -0
- package/dist/conversation-logger.js.map +1 -0
- package/dist/conversation.d.ts +271 -0
- package/dist/conversation.js +622 -0
- package/dist/conversation.js.map +1 -0
- package/dist/formatter.d.ts +27 -57
- package/dist/formatter.js +2 -2
- package/dist/formatter.js.map +1 -1
- package/dist/items/parameters.d.ts +1 -1
- package/dist/items/section.d.ts +2 -12
- package/dist/items/weighted.d.ts +3 -15
- package/dist/iteration-strategy.d.ts +231 -0
- package/dist/iteration-strategy.js +486 -0
- package/dist/iteration-strategy.js.map +1 -0
- package/dist/loader.d.ts +3 -11
- package/dist/loader.js +3 -0
- package/dist/loader.js.map +1 -1
- package/dist/message-builder.d.ts +156 -0
- package/dist/message-builder.js +254 -0
- package/dist/message-builder.js.map +1 -0
- package/dist/override.d.ts +3 -13
- package/dist/override.js +3 -0
- package/dist/override.js.map +1 -1
- package/dist/parser.d.ts +2 -8
- package/dist/recipes.d.ts +70 -268
- package/dist/recipes.js +189 -4
- package/dist/recipes.js.map +1 -1
- package/dist/reflection.d.ts +250 -0
- package/dist/reflection.js +416 -0
- package/dist/reflection.js.map +1 -0
- package/dist/riotprompt.cjs +3551 -220
- package/dist/riotprompt.cjs.map +1 -1
- package/dist/riotprompt.d.ts +18 -2
- package/dist/riotprompt.js +9 -1
- package/dist/riotprompt.js.map +1 -1
- package/dist/token-budget.d.ts +177 -0
- package/dist/token-budget.js +404 -0
- package/dist/token-budget.js.map +1 -0
- package/dist/tools.d.ts +239 -0
- package/dist/tools.js +324 -0
- package/dist/tools.js.map +1 -0
- package/package.json +35 -36
- package/.cursor/rules/focus-on-prompt.mdc +0 -5
|
@@ -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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"}
|