agentic-qe 1.8.4 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
  2. package/CHANGELOG.md +375 -0
  3. package/README.md +86 -18
  4. package/dist/App.d.ts +5 -0
  5. package/dist/App.d.ts.map +1 -0
  6. package/dist/App.js +15 -0
  7. package/dist/App.js.map +1 -0
  8. package/dist/cli/commands/constitution.d.ts +34 -0
  9. package/dist/cli/commands/constitution.d.ts.map +1 -0
  10. package/dist/cli/commands/constitution.js +679 -0
  11. package/dist/cli/commands/constitution.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +8 -75
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +22 -2292
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/telemetry.d.ts +36 -0
  17. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  18. package/dist/cli/commands/telemetry.js +364 -0
  19. package/dist/cli/commands/telemetry.js.map +1 -0
  20. package/dist/cli/index.js +66 -0
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/init/agents.d.ts +22 -0
  23. package/dist/cli/init/agents.d.ts.map +1 -0
  24. package/dist/cli/init/agents.js +522 -0
  25. package/dist/cli/init/agents.js.map +1 -0
  26. package/dist/cli/init/bash-wrapper.d.ts +14 -0
  27. package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
  28. package/dist/cli/init/bash-wrapper.js +47 -0
  29. package/dist/cli/init/bash-wrapper.js.map +1 -0
  30. package/dist/cli/init/claude-config.d.ts +24 -0
  31. package/dist/cli/init/claude-config.d.ts.map +1 -0
  32. package/dist/cli/init/claude-config.js +275 -0
  33. package/dist/cli/init/claude-config.js.map +1 -0
  34. package/dist/cli/init/claude-md.d.ts +19 -0
  35. package/dist/cli/init/claude-md.d.ts.map +1 -0
  36. package/dist/cli/init/claude-md.js +153 -0
  37. package/dist/cli/init/claude-md.js.map +1 -0
  38. package/dist/cli/init/commands.d.ts +6 -0
  39. package/dist/cli/init/commands.d.ts.map +1 -0
  40. package/dist/cli/init/commands.js +83 -0
  41. package/dist/cli/init/commands.js.map +1 -0
  42. package/dist/cli/init/database-init.d.ts +15 -0
  43. package/dist/cli/init/database-init.d.ts.map +1 -0
  44. package/dist/cli/init/database-init.js +203 -0
  45. package/dist/cli/init/database-init.js.map +1 -0
  46. package/dist/cli/init/directory-structure.d.ts +14 -0
  47. package/dist/cli/init/directory-structure.d.ts.map +1 -0
  48. package/dist/cli/init/directory-structure.js +107 -0
  49. package/dist/cli/init/directory-structure.js.map +1 -0
  50. package/dist/cli/init/documentation.d.ts +14 -0
  51. package/dist/cli/init/documentation.d.ts.map +1 -0
  52. package/dist/cli/init/documentation.js +195 -0
  53. package/dist/cli/init/documentation.js.map +1 -0
  54. package/dist/cli/init/fleet-config.d.ts +34 -0
  55. package/dist/cli/init/fleet-config.d.ts.map +1 -0
  56. package/dist/cli/init/fleet-config.js +269 -0
  57. package/dist/cli/init/fleet-config.js.map +1 -0
  58. package/dist/cli/init/helpers.d.ts +6 -0
  59. package/dist/cli/init/helpers.d.ts.map +1 -0
  60. package/dist/cli/init/helpers.js +94 -0
  61. package/dist/cli/init/helpers.js.map +1 -0
  62. package/dist/cli/init/index.d.ts +32 -0
  63. package/dist/cli/init/index.d.ts.map +1 -0
  64. package/dist/cli/init/index.js +294 -0
  65. package/dist/cli/init/index.js.map +1 -0
  66. package/dist/cli/init/skills.d.ts +6 -0
  67. package/dist/cli/init/skills.d.ts.map +1 -0
  68. package/dist/cli/init/skills.js +138 -0
  69. package/dist/cli/init/skills.js.map +1 -0
  70. package/dist/cli/init/utils/file-utils.d.ts +74 -0
  71. package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
  72. package/dist/cli/init/utils/file-utils.js +187 -0
  73. package/dist/cli/init/utils/file-utils.js.map +1 -0
  74. package/dist/cli/init/utils/index.d.ts +18 -0
  75. package/dist/cli/init/utils/index.d.ts.map +1 -0
  76. package/dist/cli/init/utils/index.js +48 -0
  77. package/dist/cli/init/utils/index.js.map +1 -0
  78. package/dist/cli/init/utils/log-utils.d.ts +47 -0
  79. package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
  80. package/dist/cli/init/utils/log-utils.js +68 -0
  81. package/dist/cli/init/utils/log-utils.js.map +1 -0
  82. package/dist/cli/init/utils/path-utils.d.ts +91 -0
  83. package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
  84. package/dist/cli/init/utils/path-utils.js +208 -0
  85. package/dist/cli/init/utils/path-utils.js.map +1 -0
  86. package/dist/cli/init/utils/validation-utils.d.ts +44 -0
  87. package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
  88. package/dist/cli/init/utils/validation-utils.js +68 -0
  89. package/dist/cli/init/utils/validation-utils.js.map +1 -0
  90. package/dist/cli/init/utils.d.ts +183 -0
  91. package/dist/cli/init/utils.d.ts.map +1 -0
  92. package/dist/cli/init/utils.js +354 -0
  93. package/dist/cli/init/utils.js.map +1 -0
  94. package/dist/components/Dashboard/Dashboard.d.ts +4 -0
  95. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
  96. package/dist/components/Dashboard/Dashboard.js +148 -0
  97. package/dist/components/Dashboard/Dashboard.js.map +1 -0
  98. package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
  99. package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
  100. package/dist/components/Dashboard/DashboardHeader.js +138 -0
  101. package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
  102. package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
  103. package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
  104. package/dist/constitution/evaluators/ast-evaluator.js +303 -0
  105. package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
  106. package/dist/constitution/evaluators/base.d.ts +144 -0
  107. package/dist/constitution/evaluators/base.d.ts.map +1 -0
  108. package/dist/constitution/evaluators/base.js +144 -0
  109. package/dist/constitution/evaluators/base.js.map +1 -0
  110. package/dist/constitution/evaluators/index.d.ts +19 -0
  111. package/dist/constitution/evaluators/index.d.ts.map +1 -0
  112. package/dist/constitution/evaluators/index.js +56 -0
  113. package/dist/constitution/evaluators/index.js.map +1 -0
  114. package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
  115. package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
  116. package/dist/constitution/evaluators/metric-evaluator.js +195 -0
  117. package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
  118. package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
  119. package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
  120. package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
  121. package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
  122. package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
  123. package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
  124. package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
  125. package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
  126. package/dist/contexts/DashboardContext.d.ts +41 -0
  127. package/dist/contexts/DashboardContext.d.ts.map +1 -0
  128. package/dist/contexts/DashboardContext.js +187 -0
  129. package/dist/contexts/DashboardContext.js.map +1 -0
  130. package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
  131. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  132. package/dist/core/memory/SwarmMemoryManager.js +279 -120
  133. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  134. package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
  135. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  136. package/dist/hooks/useKeyboardShortcuts.js +69 -0
  137. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  138. package/dist/telemetry/instrumentation/agent.d.ts +158 -0
  139. package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
  140. package/dist/telemetry/instrumentation/agent.js +372 -0
  141. package/dist/telemetry/instrumentation/agent.js.map +1 -0
  142. package/dist/telemetry/instrumentation/index.d.ts +24 -0
  143. package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
  144. package/dist/telemetry/instrumentation/index.js +54 -0
  145. package/dist/telemetry/instrumentation/index.js.map +1 -0
  146. package/dist/telemetry/instrumentation/memory.d.ts +313 -0
  147. package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
  148. package/dist/telemetry/instrumentation/memory.js +552 -0
  149. package/dist/telemetry/instrumentation/memory.js.map +1 -0
  150. package/dist/telemetry/instrumentation/task.d.ts +146 -0
  151. package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
  152. package/dist/telemetry/instrumentation/task.js +305 -0
  153. package/dist/telemetry/instrumentation/task.js.map +1 -0
  154. package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
  155. package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
  156. package/dist/telemetry/metrics/collectors/cost.js +526 -0
  157. package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
  158. package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
  159. package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
  160. package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
  161. package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
  162. package/dist/telemetry/metrics/index.d.ts +4 -1
  163. package/dist/telemetry/metrics/index.d.ts.map +1 -1
  164. package/dist/telemetry/metrics/index.js +18 -2
  165. package/dist/telemetry/metrics/index.js.map +1 -1
  166. package/dist/telemetry/types.d.ts +1 -1
  167. package/dist/telemetry/types.d.ts.map +1 -1
  168. package/dist/visualization/api/RestEndpoints.d.ts +136 -0
  169. package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
  170. package/dist/visualization/api/RestEndpoints.js +428 -0
  171. package/dist/visualization/api/RestEndpoints.js.map +1 -0
  172. package/dist/visualization/api/WebSocketServer.d.ts +165 -0
  173. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
  174. package/dist/visualization/api/WebSocketServer.js +518 -0
  175. package/dist/visualization/api/WebSocketServer.js.map +1 -0
  176. package/dist/visualization/core/DataTransformer.d.ts +89 -0
  177. package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
  178. package/dist/visualization/core/DataTransformer.js +478 -0
  179. package/dist/visualization/core/DataTransformer.js.map +1 -0
  180. package/dist/visualization/index.d.ts +92 -0
  181. package/dist/visualization/index.d.ts.map +1 -0
  182. package/dist/visualization/index.js +121 -0
  183. package/dist/visualization/index.js.map +1 -0
  184. package/dist/visualization/types.d.ts +148 -0
  185. package/dist/visualization/types.d.ts.map +1 -0
  186. package/dist/visualization/types.js +7 -0
  187. package/dist/visualization/types.js.map +1 -0
  188. package/dist/voting/consensus.d.ts +87 -0
  189. package/dist/voting/consensus.d.ts.map +1 -0
  190. package/dist/voting/consensus.js +568 -0
  191. package/dist/voting/consensus.js.map +1 -0
  192. package/dist/voting/index.d.ts +12 -0
  193. package/dist/voting/index.d.ts.map +1 -0
  194. package/dist/voting/index.js +36 -0
  195. package/dist/voting/index.js.map +1 -0
  196. package/dist/voting/orchestrator.d.ts +65 -0
  197. package/dist/voting/orchestrator.d.ts.map +1 -0
  198. package/dist/voting/orchestrator.js +306 -0
  199. package/dist/voting/orchestrator.js.map +1 -0
  200. package/dist/voting/panel-assembly.d.ts +54 -0
  201. package/dist/voting/panel-assembly.d.ts.map +1 -0
  202. package/dist/voting/panel-assembly.js +192 -0
  203. package/dist/voting/panel-assembly.js.map +1 -0
  204. package/dist/voting/protocol.d.ts +119 -0
  205. package/dist/voting/protocol.d.ts.map +1 -0
  206. package/dist/voting/protocol.js +18 -0
  207. package/dist/voting/protocol.js.map +1 -0
  208. package/dist/voting/types.d.ts +125 -0
  209. package/dist/voting/types.d.ts.map +1 -0
  210. package/dist/voting/types.js +7 -0
  211. package/dist/voting/types.js.map +1 -0
  212. package/package.json +27 -2
@@ -0,0 +1,526 @@
1
+ "use strict";
2
+ /**
3
+ * Token and Cost Tracking Collector (Phase 2 - Action A5)
4
+ *
5
+ * Implements middleware for tracking LLM token usage and costs across agents,
6
+ * tasks, and fleet operations. Supports multiple LLM providers with accurate
7
+ * cost calculations based on pricing tables.
8
+ *
9
+ * Features:
10
+ * - Token counting for input/output from all LLM API responses
11
+ * - Per-agent cost tracking with attribution
12
+ * - Fleet-wide cost aggregation
13
+ * - Support for Anthropic, OpenRouter, ONNX (local), OpenAI
14
+ * - Prometheus-compatible metric export
15
+ * - Cache-aware cost calculation (write premium, read discount)
16
+ *
17
+ * @module telemetry/metrics/collectors/cost
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.CostTracker = exports.PRICING_TABLE = void 0;
21
+ exports.getCostTracker = getCostTracker;
22
+ exports.withTokenTracking = withTokenTracking;
23
+ const bootstrap_1 = require("../../bootstrap");
24
+ /**
25
+ * Pricing table for supported LLM providers
26
+ *
27
+ * Anthropic pricing (January 2025):
28
+ * - Claude Sonnet 4.5: $3.00 input / $15.00 output per 1M tokens
29
+ * - Cache write: 25% premium ($3.75/M)
30
+ * - Cache read: 90% discount ($0.30/M)
31
+ *
32
+ * OpenRouter: ~99% cost savings vs Anthropic
33
+ * ONNX: $0 (local inference)
34
+ */
35
+ exports.PRICING_TABLE = [
36
+ // Anthropic models
37
+ {
38
+ provider: 'anthropic',
39
+ model: 'claude-sonnet-4-5-20250929',
40
+ inputCostPerMillion: 3.0,
41
+ outputCostPerMillion: 15.0,
42
+ cacheWriteCostPerMillion: 3.75, // 25% premium
43
+ cacheReadCostPerMillion: 0.3, // 90% discount
44
+ },
45
+ {
46
+ provider: 'anthropic',
47
+ model: 'claude-sonnet-4',
48
+ inputCostPerMillion: 3.0,
49
+ outputCostPerMillion: 15.0,
50
+ cacheWriteCostPerMillion: 3.75,
51
+ cacheReadCostPerMillion: 0.3,
52
+ },
53
+ {
54
+ provider: 'anthropic',
55
+ model: 'claude-3-5-sonnet-20241022',
56
+ inputCostPerMillion: 3.0,
57
+ outputCostPerMillion: 15.0,
58
+ cacheWriteCostPerMillion: 3.75,
59
+ cacheReadCostPerMillion: 0.3,
60
+ },
61
+ {
62
+ provider: 'anthropic',
63
+ model: 'claude-3-5-haiku-20241022',
64
+ inputCostPerMillion: 1.0,
65
+ outputCostPerMillion: 5.0,
66
+ cacheWriteCostPerMillion: 1.25,
67
+ cacheReadCostPerMillion: 0.1,
68
+ },
69
+ {
70
+ provider: 'anthropic',
71
+ model: 'claude-3-opus-20240229',
72
+ inputCostPerMillion: 15.0,
73
+ outputCostPerMillion: 75.0,
74
+ cacheWriteCostPerMillion: 18.75,
75
+ cacheReadCostPerMillion: 1.5,
76
+ },
77
+ // OpenRouter (99% cost savings)
78
+ {
79
+ provider: 'openrouter',
80
+ model: 'meta-llama/llama-3.1-8b-instruct',
81
+ inputCostPerMillion: 0.03, // ~99% cheaper than Claude
82
+ outputCostPerMillion: 0.15,
83
+ },
84
+ {
85
+ provider: 'openrouter',
86
+ model: 'openai/gpt-3.5-turbo',
87
+ inputCostPerMillion: 0.5,
88
+ outputCostPerMillion: 1.5,
89
+ },
90
+ // OpenAI (for comparison)
91
+ {
92
+ provider: 'openai',
93
+ model: 'gpt-4-turbo',
94
+ inputCostPerMillion: 10.0,
95
+ outputCostPerMillion: 30.0,
96
+ },
97
+ {
98
+ provider: 'openai',
99
+ model: 'gpt-3.5-turbo',
100
+ inputCostPerMillion: 0.5,
101
+ outputCostPerMillion: 1.5,
102
+ },
103
+ // ONNX (local, free)
104
+ {
105
+ provider: 'onnx',
106
+ model: 'Xenova/gpt2',
107
+ inputCostPerMillion: 0,
108
+ outputCostPerMillion: 0,
109
+ },
110
+ ];
111
+ /**
112
+ * CostTracker
113
+ *
114
+ * Middleware for tracking LLM token usage and costs with OpenTelemetry metrics.
115
+ *
116
+ * Usage:
117
+ * 1. Wrap LLM calls with trackTokens()
118
+ * 2. Extract usage from API response
119
+ * 3. Metrics automatically exported to OTEL collector
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const costTracker = new CostTracker();
124
+ *
125
+ * // Track Anthropic call
126
+ * const response = await anthropic.messages.create({...});
127
+ * costTracker.trackTokens({
128
+ * agentId: 'test-gen-001',
129
+ * taskId: 'task-123',
130
+ * provider: 'anthropic',
131
+ * model: 'claude-sonnet-4',
132
+ * usage: {
133
+ * inputTokens: response.usage.input_tokens,
134
+ * outputTokens: response.usage.output_tokens,
135
+ * cacheCreationTokens: response.usage.cache_creation_input_tokens,
136
+ * cacheReadTokens: response.usage.cache_read_input_tokens,
137
+ * totalTokens: response.usage.input_tokens + response.usage.output_tokens,
138
+ * },
139
+ * });
140
+ * ```
141
+ */
142
+ class CostTracker {
143
+ constructor() {
144
+ // In-memory aggregations
145
+ this.agentMetrics = new Map();
146
+ this.taskMetrics = new Map();
147
+ this.fleetMetrics = null;
148
+ const meter = (0, bootstrap_1.getMeter)('agentic-qe-cost-tracker', '1.0.0');
149
+ // Token counters
150
+ this.tokenCounter = meter.createCounter('aqe.agent.token.count', {
151
+ description: 'Total tokens consumed by agents',
152
+ unit: 'tokens',
153
+ });
154
+ // Cost counters
155
+ this.costCounter = meter.createCounter('aqe.agent.cost.total', {
156
+ description: 'Total cost incurred by agents',
157
+ unit: 'usd',
158
+ });
159
+ // Token histograms (distribution)
160
+ this.tokenHistogram = meter.createHistogram('aqe.agent.token.distribution', {
161
+ description: 'Distribution of token usage per call',
162
+ unit: 'tokens',
163
+ });
164
+ // Cost histograms
165
+ this.costHistogram = meter.createHistogram('aqe.agent.cost.distribution', {
166
+ description: 'Distribution of costs per call',
167
+ unit: 'usd',
168
+ });
169
+ // Active agents counter (using UpDownCounter instead of Gauge)
170
+ this.activeAgentsGauge = meter.createUpDownCounter('aqe.agent.cost_tracking.active', {
171
+ description: 'Number of agents with active cost tracking',
172
+ });
173
+ // Initialize fleet metrics
174
+ this.initializeFleetMetrics();
175
+ }
176
+ /**
177
+ * Track token usage and costs for an LLM call
178
+ *
179
+ * Extracts token counts from API response, calculates costs using pricing table,
180
+ * and records metrics to OpenTelemetry.
181
+ *
182
+ * @param params - Tracking parameters
183
+ */
184
+ trackTokens(params) {
185
+ const { agentId, taskId, provider, model, usage, attributes } = params;
186
+ // Get pricing for this model
187
+ const pricing = this.getPricing(provider, model);
188
+ if (!pricing) {
189
+ console.warn(`No pricing found for provider=${provider} model=${model}`);
190
+ return;
191
+ }
192
+ // Calculate costs
193
+ const cost = this.calculateCost(usage, pricing);
194
+ // Create metrics object
195
+ const metrics = {
196
+ id: agentId,
197
+ type: 'agent',
198
+ tokens: usage,
199
+ cost,
200
+ provider,
201
+ model,
202
+ timestamp: Date.now(),
203
+ };
204
+ // Store agent metrics
205
+ this.updateAgentMetrics(agentId, metrics);
206
+ // Store task metrics if provided
207
+ if (taskId) {
208
+ this.updateTaskMetrics(taskId, metrics);
209
+ }
210
+ // Update fleet metrics
211
+ this.updateFleetMetrics(metrics);
212
+ // Record to OpenTelemetry
213
+ this.recordMetrics(metrics, attributes);
214
+ }
215
+ /**
216
+ * Get pricing configuration for a provider/model
217
+ */
218
+ getPricing(provider, model) {
219
+ return exports.PRICING_TABLE.find(p => p.provider === provider && p.model === model) || null;
220
+ }
221
+ /**
222
+ * Calculate cost breakdown from token usage
223
+ */
224
+ calculateCost(usage, pricing) {
225
+ // Regular tokens (non-cached)
226
+ const regularInputTokens = usage.inputTokens - (usage.cacheCreationTokens || 0) - (usage.cacheReadTokens || 0);
227
+ const inputCost = (regularInputTokens / 1000000) * pricing.inputCostPerMillion;
228
+ const outputCost = (usage.outputTokens / 1000000) * pricing.outputCostPerMillion;
229
+ let cacheWriteCost;
230
+ let cacheReadCost;
231
+ let cacheSavings;
232
+ // Cache write cost (25% premium)
233
+ if (usage.cacheCreationTokens && pricing.cacheWriteCostPerMillion) {
234
+ cacheWriteCost = (usage.cacheCreationTokens / 1000000) * pricing.cacheWriteCostPerMillion;
235
+ }
236
+ // Cache read cost (90% discount)
237
+ if (usage.cacheReadTokens && pricing.cacheReadCostPerMillion) {
238
+ cacheReadCost = (usage.cacheReadTokens / 1000000) * pricing.cacheReadCostPerMillion;
239
+ // Calculate savings vs regular cost
240
+ const regularCostWouldBe = (usage.cacheReadTokens / 1000000) * pricing.inputCostPerMillion;
241
+ cacheSavings = regularCostWouldBe - cacheReadCost;
242
+ }
243
+ const totalCost = inputCost + outputCost + (cacheWriteCost || 0) + (cacheReadCost || 0);
244
+ return {
245
+ inputCost,
246
+ outputCost,
247
+ cacheWriteCost,
248
+ cacheReadCost,
249
+ totalCost,
250
+ cacheSavings,
251
+ };
252
+ }
253
+ /**
254
+ * Update agent-level metrics (accumulate)
255
+ */
256
+ updateAgentMetrics(agentId, metrics) {
257
+ const existing = this.agentMetrics.get(agentId);
258
+ if (existing) {
259
+ // Accumulate tokens
260
+ existing.tokens.inputTokens += metrics.tokens.inputTokens;
261
+ existing.tokens.outputTokens += metrics.tokens.outputTokens;
262
+ existing.tokens.totalTokens += metrics.tokens.totalTokens;
263
+ if (metrics.tokens.cacheCreationTokens) {
264
+ existing.tokens.cacheCreationTokens = (existing.tokens.cacheCreationTokens || 0) + metrics.tokens.cacheCreationTokens;
265
+ }
266
+ if (metrics.tokens.cacheReadTokens) {
267
+ existing.tokens.cacheReadTokens = (existing.tokens.cacheReadTokens || 0) + metrics.tokens.cacheReadTokens;
268
+ }
269
+ // Accumulate costs
270
+ existing.cost.inputCost += metrics.cost.inputCost;
271
+ existing.cost.outputCost += metrics.cost.outputCost;
272
+ existing.cost.totalCost += metrics.cost.totalCost;
273
+ if (metrics.cost.cacheWriteCost) {
274
+ existing.cost.cacheWriteCost = (existing.cost.cacheWriteCost || 0) + metrics.cost.cacheWriteCost;
275
+ }
276
+ if (metrics.cost.cacheReadCost) {
277
+ existing.cost.cacheReadCost = (existing.cost.cacheReadCost || 0) + metrics.cost.cacheReadCost;
278
+ }
279
+ if (metrics.cost.cacheSavings) {
280
+ existing.cost.cacheSavings = (existing.cost.cacheSavings || 0) + metrics.cost.cacheSavings;
281
+ }
282
+ existing.timestamp = metrics.timestamp;
283
+ }
284
+ else {
285
+ this.agentMetrics.set(agentId, { ...metrics });
286
+ this.activeAgentsGauge.add(1, { agent_id: agentId });
287
+ }
288
+ }
289
+ /**
290
+ * Update task-level metrics
291
+ */
292
+ updateTaskMetrics(taskId, metrics) {
293
+ const taskMetrics = { ...metrics, id: taskId, type: 'task' };
294
+ this.taskMetrics.set(taskId, taskMetrics);
295
+ }
296
+ /**
297
+ * Update fleet-wide metrics
298
+ */
299
+ updateFleetMetrics(metrics) {
300
+ if (!this.fleetMetrics) {
301
+ this.initializeFleetMetrics();
302
+ }
303
+ if (this.fleetMetrics) {
304
+ // Accumulate fleet totals
305
+ this.fleetMetrics.tokens.inputTokens += metrics.tokens.inputTokens;
306
+ this.fleetMetrics.tokens.outputTokens += metrics.tokens.outputTokens;
307
+ this.fleetMetrics.tokens.totalTokens += metrics.tokens.totalTokens;
308
+ if (metrics.tokens.cacheCreationTokens) {
309
+ this.fleetMetrics.tokens.cacheCreationTokens = (this.fleetMetrics.tokens.cacheCreationTokens || 0) + metrics.tokens.cacheCreationTokens;
310
+ }
311
+ if (metrics.tokens.cacheReadTokens) {
312
+ this.fleetMetrics.tokens.cacheReadTokens = (this.fleetMetrics.tokens.cacheReadTokens || 0) + metrics.tokens.cacheReadTokens;
313
+ }
314
+ this.fleetMetrics.cost.inputCost += metrics.cost.inputCost;
315
+ this.fleetMetrics.cost.outputCost += metrics.cost.outputCost;
316
+ this.fleetMetrics.cost.totalCost += metrics.cost.totalCost;
317
+ if (metrics.cost.cacheWriteCost) {
318
+ this.fleetMetrics.cost.cacheWriteCost = (this.fleetMetrics.cost.cacheWriteCost || 0) + metrics.cost.cacheWriteCost;
319
+ }
320
+ if (metrics.cost.cacheReadCost) {
321
+ this.fleetMetrics.cost.cacheReadCost = (this.fleetMetrics.cost.cacheReadCost || 0) + metrics.cost.cacheReadCost;
322
+ }
323
+ if (metrics.cost.cacheSavings) {
324
+ this.fleetMetrics.cost.cacheSavings = (this.fleetMetrics.cost.cacheSavings || 0) + metrics.cost.cacheSavings;
325
+ }
326
+ this.fleetMetrics.timestamp = metrics.timestamp;
327
+ }
328
+ }
329
+ /**
330
+ * Initialize empty fleet metrics
331
+ */
332
+ initializeFleetMetrics() {
333
+ this.fleetMetrics = {
334
+ id: 'fleet',
335
+ type: 'fleet',
336
+ tokens: {
337
+ inputTokens: 0,
338
+ outputTokens: 0,
339
+ totalTokens: 0,
340
+ cacheCreationTokens: 0,
341
+ cacheReadTokens: 0,
342
+ },
343
+ cost: {
344
+ inputCost: 0,
345
+ outputCost: 0,
346
+ totalCost: 0,
347
+ cacheWriteCost: 0,
348
+ cacheReadCost: 0,
349
+ cacheSavings: 0,
350
+ },
351
+ provider: 'mixed',
352
+ model: 'mixed',
353
+ timestamp: Date.now(),
354
+ };
355
+ }
356
+ /**
357
+ * Record metrics to OpenTelemetry
358
+ */
359
+ recordMetrics(metrics, attributes) {
360
+ const baseAttrs = {
361
+ agent_id: metrics.id,
362
+ provider: metrics.provider,
363
+ model: metrics.model,
364
+ type: metrics.type,
365
+ ...attributes,
366
+ };
367
+ // Token counters
368
+ this.tokenCounter.add(metrics.tokens.inputTokens, {
369
+ ...baseAttrs,
370
+ token_type: 'input',
371
+ });
372
+ this.tokenCounter.add(metrics.tokens.outputTokens, {
373
+ ...baseAttrs,
374
+ token_type: 'output',
375
+ });
376
+ if (metrics.tokens.cacheCreationTokens) {
377
+ this.tokenCounter.add(metrics.tokens.cacheCreationTokens, {
378
+ ...baseAttrs,
379
+ token_type: 'cache_write',
380
+ });
381
+ }
382
+ if (metrics.tokens.cacheReadTokens) {
383
+ this.tokenCounter.add(metrics.tokens.cacheReadTokens, {
384
+ ...baseAttrs,
385
+ token_type: 'cache_read',
386
+ });
387
+ }
388
+ // Cost counters
389
+ this.costCounter.add(metrics.cost.totalCost, baseAttrs);
390
+ // Token distribution histogram
391
+ this.tokenHistogram.record(metrics.tokens.totalTokens, baseAttrs);
392
+ // Cost distribution histogram
393
+ this.costHistogram.record(metrics.cost.totalCost, baseAttrs);
394
+ // Cache savings (if applicable)
395
+ if (metrics.cost.cacheSavings && metrics.cost.cacheSavings > 0) {
396
+ this.costCounter.add(-metrics.cost.cacheSavings, {
397
+ ...baseAttrs,
398
+ cost_type: 'cache_savings',
399
+ });
400
+ }
401
+ }
402
+ /**
403
+ * Get metrics for a specific agent
404
+ */
405
+ getAgentMetrics(agentId) {
406
+ return this.agentMetrics.get(agentId) || null;
407
+ }
408
+ /**
409
+ * Get metrics for a specific task
410
+ */
411
+ getTaskMetrics(taskId) {
412
+ return this.taskMetrics.get(taskId) || null;
413
+ }
414
+ /**
415
+ * Get fleet-wide metrics
416
+ */
417
+ getFleetMetrics() {
418
+ return this.fleetMetrics;
419
+ }
420
+ /**
421
+ * Get all agent metrics
422
+ */
423
+ getAllAgentMetrics() {
424
+ return new Map(this.agentMetrics);
425
+ }
426
+ /**
427
+ * Reset all metrics (for testing)
428
+ */
429
+ reset() {
430
+ this.agentMetrics.clear();
431
+ this.taskMetrics.clear();
432
+ this.initializeFleetMetrics();
433
+ }
434
+ /**
435
+ * Export metrics in Prometheus format
436
+ */
437
+ exportPrometheusMetrics() {
438
+ const lines = [];
439
+ // Fleet metrics
440
+ if (this.fleetMetrics) {
441
+ lines.push('# HELP aqe_fleet_tokens_total Total tokens consumed by fleet');
442
+ lines.push('# TYPE aqe_fleet_tokens_total counter');
443
+ lines.push(`aqe_fleet_tokens_total{type="input"} ${this.fleetMetrics.tokens.inputTokens}`);
444
+ lines.push(`aqe_fleet_tokens_total{type="output"} ${this.fleetMetrics.tokens.outputTokens}`);
445
+ lines.push('');
446
+ lines.push('# HELP aqe_fleet_cost_total Total cost incurred by fleet');
447
+ lines.push('# TYPE aqe_fleet_cost_total counter');
448
+ lines.push(`aqe_fleet_cost_total ${this.fleetMetrics.cost.totalCost}`);
449
+ lines.push('');
450
+ if (this.fleetMetrics.cost.cacheSavings) {
451
+ lines.push('# HELP aqe_fleet_cache_savings_total Total cache savings');
452
+ lines.push('# TYPE aqe_fleet_cache_savings_total counter');
453
+ lines.push(`aqe_fleet_cache_savings_total ${this.fleetMetrics.cost.cacheSavings}`);
454
+ lines.push('');
455
+ }
456
+ }
457
+ // Per-agent metrics
458
+ this.agentMetrics.forEach((metrics, agentId) => {
459
+ const labels = `agent_id="${agentId}",provider="${metrics.provider}",model="${metrics.model}"`;
460
+ lines.push(`aqe_agent_tokens_total{${labels},type="input"} ${metrics.tokens.inputTokens}`);
461
+ lines.push(`aqe_agent_tokens_total{${labels},type="output"} ${metrics.tokens.outputTokens}`);
462
+ lines.push(`aqe_agent_cost_total{${labels}} ${metrics.cost.totalCost}`);
463
+ });
464
+ return lines.join('\n');
465
+ }
466
+ }
467
+ exports.CostTracker = CostTracker;
468
+ /**
469
+ * Singleton instance for global cost tracking
470
+ */
471
+ let globalCostTracker = null;
472
+ /**
473
+ * Get or create the global CostTracker instance
474
+ */
475
+ function getCostTracker() {
476
+ if (!globalCostTracker) {
477
+ globalCostTracker = new CostTracker();
478
+ }
479
+ return globalCostTracker;
480
+ }
481
+ /**
482
+ * Middleware wrapper for LLM calls with automatic token tracking
483
+ *
484
+ * @example
485
+ * ```typescript
486
+ * const callLLM = withTokenTracking(
487
+ * async (prompt: string) => {
488
+ * const response = await anthropic.messages.create({
489
+ * model: 'claude-sonnet-4',
490
+ * messages: [{ role: 'user', content: prompt }],
491
+ * });
492
+ * return response;
493
+ * },
494
+ * {
495
+ * agentId: 'test-gen-001',
496
+ * taskId: 'task-123',
497
+ * provider: 'anthropic',
498
+ * model: 'claude-sonnet-4',
499
+ * }
500
+ * );
501
+ *
502
+ * const result = await callLLM('Generate tests for...');
503
+ * ```
504
+ */
505
+ function withTokenTracking(fn, context) {
506
+ return async (...args) => {
507
+ const tracker = getCostTracker();
508
+ const result = await fn(...args);
509
+ // Extract usage from response
510
+ const usage = result.usage;
511
+ if (usage) {
512
+ tracker.trackTokens({
513
+ ...context,
514
+ usage: {
515
+ inputTokens: usage.input_tokens || 0,
516
+ outputTokens: usage.output_tokens || 0,
517
+ cacheCreationTokens: usage.cache_creation_input_tokens,
518
+ cacheReadTokens: usage.cache_read_input_tokens,
519
+ totalTokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
520
+ },
521
+ });
522
+ }
523
+ return result;
524
+ };
525
+ }
526
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../../../src/telemetry/metrics/collectors/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * LLM Provider Pricing Configuration
3
+ *
4
+ * Centralized pricing tables for all supported LLM providers.
5
+ * Prices are updated as of January 2025.
6
+ *
7
+ * Storage: This configuration is stored in memory namespace:
8
+ * - `aqe/phase2/instrumentation/token-metrics/pricing`
9
+ *
10
+ * @module telemetry/metrics/collectors/pricing-config
11
+ */
12
+ import { ProviderPricing } from './cost';
13
+ /**
14
+ * Pricing update metadata
15
+ */
16
+ export interface PricingMetadata {
17
+ /** Last updated timestamp */
18
+ lastUpdated: string;
19
+ /** Pricing version */
20
+ version: string;
21
+ /** Source of pricing data */
22
+ source: string;
23
+ }
24
+ /**
25
+ * Extended pricing configuration with metadata
26
+ */
27
+ export interface PricingConfig {
28
+ /** Pricing metadata */
29
+ metadata: PricingMetadata;
30
+ /** Provider pricing tables */
31
+ providers: ProviderPricing[];
32
+ }
33
+ /**
34
+ * Current pricing configuration (January 2025)
35
+ *
36
+ * Sources:
37
+ * - Anthropic: https://docs.anthropic.com/claude/pricing
38
+ * - OpenRouter: https://openrouter.ai/models
39
+ * - OpenAI: https://openai.com/pricing
40
+ */
41
+ export declare const PRICING_CONFIG: PricingConfig;
42
+ /**
43
+ * Get pricing for a specific provider and model
44
+ *
45
+ * @param provider - Provider name
46
+ * @param model - Model identifier
47
+ * @returns Pricing configuration or null if not found
48
+ */
49
+ export declare function getPricing(provider: string, model: string): ProviderPricing | null;
50
+ /**
51
+ * Get all pricing for a provider
52
+ *
53
+ * @param provider - Provider name
54
+ * @returns Array of pricing configurations
55
+ */
56
+ export declare function getProviderPricing(provider: string): ProviderPricing[];
57
+ /**
58
+ * Calculate cost savings percentage comparing two models
59
+ *
60
+ * @param baseModel - Base model for comparison (e.g., Claude)
61
+ * @param compareModel - Model to compare against
62
+ * @param tokenCount - Number of tokens to calculate savings for
63
+ * @returns Savings percentage (0-1)
64
+ */
65
+ export declare function calculateSavingsPercentage(baseModel: {
66
+ provider: string;
67
+ model: string;
68
+ }, compareModel: {
69
+ provider: string;
70
+ model: string;
71
+ }, tokenCount: {
72
+ input: number;
73
+ output: number;
74
+ }): number | null;
75
+ /**
76
+ * Export pricing configuration as JSON for memory storage
77
+ */
78
+ export declare function exportPricingConfig(): string;
79
+ /**
80
+ * Memory namespace for pricing configuration
81
+ */
82
+ export declare const PRICING_MEMORY_NAMESPACE = "aqe/phase2/instrumentation/token-metrics";
83
+ /**
84
+ * Memory key for pricing data
85
+ */
86
+ export declare const PRICING_MEMORY_KEY = "pricing";
87
+ //# sourceMappingURL=pricing-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-config.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/metrics/collectors/pricing-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,8BAA8B;IAC9B,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,aA+H5B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,eAAe,GAAG,IAAI,CAIxB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAEnB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAC9C,YAAY,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACjD,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,GAAG,IAAI,CAmBf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,6CAA6C,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAC"}