@agentlensai/server 0.3.0 → 0.6.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 (259) hide show
  1. package/dist/db/embedding-store.d.ts +74 -0
  2. package/dist/db/embedding-store.d.ts.map +1 -0
  3. package/dist/db/embedding-store.js +177 -0
  4. package/dist/db/embedding-store.js.map +1 -0
  5. package/dist/db/health-snapshot-store.d.ts +33 -0
  6. package/dist/db/health-snapshot-store.d.ts.map +1 -0
  7. package/dist/db/health-snapshot-store.js +112 -0
  8. package/dist/db/health-snapshot-store.js.map +1 -0
  9. package/dist/db/lesson-store.d.ts +57 -0
  10. package/dist/db/lesson-store.d.ts.map +1 -0
  11. package/dist/db/lesson-store.js +217 -0
  12. package/dist/db/lesson-store.js.map +1 -0
  13. package/dist/db/migrate.d.ts.map +1 -1
  14. package/dist/db/migrate.js +256 -8
  15. package/dist/db/migrate.js.map +1 -1
  16. package/dist/db/schema.sqlite.d.ts +822 -47
  17. package/dist/db/schema.sqlite.d.ts.map +1 -1
  18. package/dist/db/schema.sqlite.js +79 -4
  19. package/dist/db/schema.sqlite.js.map +1 -1
  20. package/dist/db/session-summary-store.d.ts +45 -0
  21. package/dist/db/session-summary-store.d.ts.map +1 -0
  22. package/dist/db/session-summary-store.js +112 -0
  23. package/dist/db/session-summary-store.js.map +1 -0
  24. package/dist/db/sqlite-store.d.ts +19 -12
  25. package/dist/db/sqlite-store.d.ts.map +1 -1
  26. package/dist/db/sqlite-store.js +145 -44
  27. package/dist/db/sqlite-store.js.map +1 -1
  28. package/dist/db/tenant-scoped-store.d.ts +61 -0
  29. package/dist/db/tenant-scoped-store.d.ts.map +1 -0
  30. package/dist/db/tenant-scoped-store.js +94 -0
  31. package/dist/db/tenant-scoped-store.js.map +1 -0
  32. package/dist/index.d.ts +18 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +78 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/lib/alert-engine.d.ts +11 -0
  37. package/dist/lib/alert-engine.d.ts.map +1 -1
  38. package/dist/lib/alert-engine.js +65 -24
  39. package/dist/lib/alert-engine.js.map +1 -1
  40. package/dist/lib/analysis/cost-analysis.d.ts +20 -0
  41. package/dist/lib/analysis/cost-analysis.d.ts.map +1 -0
  42. package/dist/lib/analysis/cost-analysis.js +161 -0
  43. package/dist/lib/analysis/cost-analysis.js.map +1 -0
  44. package/dist/lib/analysis/error-patterns.d.ts +26 -0
  45. package/dist/lib/analysis/error-patterns.d.ts.map +1 -0
  46. package/dist/lib/analysis/error-patterns.js +158 -0
  47. package/dist/lib/analysis/error-patterns.js.map +1 -0
  48. package/dist/lib/analysis/index.d.ts +23 -0
  49. package/dist/lib/analysis/index.d.ts.map +1 -0
  50. package/dist/lib/analysis/index.js +144 -0
  51. package/dist/lib/analysis/index.js.map +1 -0
  52. package/dist/lib/analysis/performance-trends.d.ts +19 -0
  53. package/dist/lib/analysis/performance-trends.d.ts.map +1 -0
  54. package/dist/lib/analysis/performance-trends.js +121 -0
  55. package/dist/lib/analysis/performance-trends.js.map +1 -0
  56. package/dist/lib/analysis/tool-sequences.d.ts +19 -0
  57. package/dist/lib/analysis/tool-sequences.d.ts.map +1 -0
  58. package/dist/lib/analysis/tool-sequences.js +148 -0
  59. package/dist/lib/analysis/tool-sequences.js.map +1 -0
  60. package/dist/lib/context/index.d.ts +5 -0
  61. package/dist/lib/context/index.d.ts.map +1 -0
  62. package/dist/lib/context/index.js +5 -0
  63. package/dist/lib/context/index.js.map +1 -0
  64. package/dist/lib/context/retrieval.d.ts +60 -0
  65. package/dist/lib/context/retrieval.d.ts.map +1 -0
  66. package/dist/lib/context/retrieval.js +233 -0
  67. package/dist/lib/context/retrieval.js.map +1 -0
  68. package/dist/lib/embeddings/index.d.ts +31 -0
  69. package/dist/lib/embeddings/index.d.ts.map +1 -0
  70. package/dist/lib/embeddings/index.js +31 -0
  71. package/dist/lib/embeddings/index.js.map +1 -0
  72. package/dist/lib/embeddings/local.d.ts +15 -0
  73. package/dist/lib/embeddings/local.d.ts.map +1 -0
  74. package/dist/lib/embeddings/local.js +65 -0
  75. package/dist/lib/embeddings/local.js.map +1 -0
  76. package/dist/lib/embeddings/math.d.ts +13 -0
  77. package/dist/lib/embeddings/math.d.ts.map +1 -0
  78. package/dist/lib/embeddings/math.js +35 -0
  79. package/dist/lib/embeddings/math.js.map +1 -0
  80. package/dist/lib/embeddings/openai.d.ts +15 -0
  81. package/dist/lib/embeddings/openai.d.ts.map +1 -0
  82. package/dist/lib/embeddings/openai.js +58 -0
  83. package/dist/lib/embeddings/openai.js.map +1 -0
  84. package/dist/lib/embeddings/summarizer.d.ts +26 -0
  85. package/dist/lib/embeddings/summarizer.d.ts.map +1 -0
  86. package/dist/lib/embeddings/summarizer.js +181 -0
  87. package/dist/lib/embeddings/summarizer.js.map +1 -0
  88. package/dist/lib/embeddings/types.d.ts +17 -0
  89. package/dist/lib/embeddings/types.d.ts.map +1 -0
  90. package/dist/lib/embeddings/types.js +5 -0
  91. package/dist/lib/embeddings/types.js.map +1 -0
  92. package/dist/lib/embeddings/worker.d.ts +56 -0
  93. package/dist/lib/embeddings/worker.d.ts.map +1 -0
  94. package/dist/lib/embeddings/worker.js +109 -0
  95. package/dist/lib/embeddings/worker.js.map +1 -0
  96. package/dist/lib/health/computer.d.ts +28 -0
  97. package/dist/lib/health/computer.d.ts.map +1 -0
  98. package/dist/lib/health/computer.js +270 -0
  99. package/dist/lib/health/computer.js.map +1 -0
  100. package/dist/lib/optimization/classifier.d.ts +34 -0
  101. package/dist/lib/optimization/classifier.d.ts.map +1 -0
  102. package/dist/lib/optimization/classifier.js +108 -0
  103. package/dist/lib/optimization/classifier.js.map +1 -0
  104. package/dist/lib/optimization/engine.d.ts +24 -0
  105. package/dist/lib/optimization/engine.d.ts.map +1 -0
  106. package/dist/lib/optimization/engine.js +202 -0
  107. package/dist/lib/optimization/engine.js.map +1 -0
  108. package/dist/lib/optimization/index.d.ts +10 -0
  109. package/dist/lib/optimization/index.d.ts.map +1 -0
  110. package/dist/lib/optimization/index.js +9 -0
  111. package/dist/lib/optimization/index.js.map +1 -0
  112. package/dist/lib/sse.d.ts +1 -0
  113. package/dist/lib/sse.d.ts.map +1 -1
  114. package/dist/lib/sse.js +8 -1
  115. package/dist/lib/sse.js.map +1 -1
  116. package/dist/middleware/auth.d.ts +1 -0
  117. package/dist/middleware/auth.d.ts.map +1 -1
  118. package/dist/middleware/auth.js +2 -1
  119. package/dist/middleware/auth.js.map +1 -1
  120. package/dist/routes/agents.d.ts.map +1 -1
  121. package/dist/routes/agents.js +6 -3
  122. package/dist/routes/agents.js.map +1 -1
  123. package/dist/routes/alerts.d.ts.map +1 -1
  124. package/dist/routes/alerts.js +15 -7
  125. package/dist/routes/alerts.js.map +1 -1
  126. package/dist/routes/analytics.d.ts.map +1 -1
  127. package/dist/routes/analytics.js +16 -2
  128. package/dist/routes/analytics.js.map +1 -1
  129. package/dist/routes/api-keys.d.ts.map +1 -1
  130. package/dist/routes/api-keys.js +30 -5
  131. package/dist/routes/api-keys.js.map +1 -1
  132. package/dist/routes/context.d.ts +23 -0
  133. package/dist/routes/context.d.ts.map +1 -0
  134. package/dist/routes/context.js +52 -0
  135. package/dist/routes/context.js.map +1 -0
  136. package/dist/routes/events.d.ts +6 -1
  137. package/dist/routes/events.d.ts.map +1 -1
  138. package/dist/routes/events.js +61 -6
  139. package/dist/routes/events.js.map +1 -1
  140. package/dist/routes/health.d.ts +21 -0
  141. package/dist/routes/health.d.ts.map +1 -0
  142. package/dist/routes/health.js +142 -0
  143. package/dist/routes/health.js.map +1 -0
  144. package/dist/routes/ingest.d.ts +6 -0
  145. package/dist/routes/ingest.d.ts.map +1 -1
  146. package/dist/routes/ingest.js +23 -4
  147. package/dist/routes/ingest.js.map +1 -1
  148. package/dist/routes/lessons.d.ts +19 -0
  149. package/dist/routes/lessons.d.ts.map +1 -0
  150. package/dist/routes/lessons.js +164 -0
  151. package/dist/routes/lessons.js.map +1 -0
  152. package/dist/routes/optimize.d.ts +15 -0
  153. package/dist/routes/optimize.d.ts.map +1 -0
  154. package/dist/routes/optimize.js +55 -0
  155. package/dist/routes/optimize.js.map +1 -0
  156. package/dist/routes/recall.d.ts +22 -0
  157. package/dist/routes/recall.d.ts.map +1 -0
  158. package/dist/routes/recall.js +91 -0
  159. package/dist/routes/recall.js.map +1 -0
  160. package/dist/routes/reflect.d.ts +15 -0
  161. package/dist/routes/reflect.d.ts.map +1 -0
  162. package/dist/routes/reflect.js +54 -0
  163. package/dist/routes/reflect.js.map +1 -0
  164. package/dist/routes/sessions.d.ts.map +1 -1
  165. package/dist/routes/sessions.js +8 -6
  166. package/dist/routes/sessions.js.map +1 -1
  167. package/dist/routes/stats.d.ts.map +1 -1
  168. package/dist/routes/stats.js +3 -1
  169. package/dist/routes/stats.js.map +1 -1
  170. package/dist/routes/stream.d.ts +9 -2
  171. package/dist/routes/stream.d.ts.map +1 -1
  172. package/dist/routes/stream.js +55 -2
  173. package/dist/routes/stream.js.map +1 -1
  174. package/dist/routes/tenant-helper.d.ts +20 -0
  175. package/dist/routes/tenant-helper.d.ts.map +1 -0
  176. package/dist/routes/tenant-helper.js +35 -0
  177. package/dist/routes/tenant-helper.js.map +1 -0
  178. package/package.json +11 -11
  179. package/LICENSE +0 -21
  180. package/dist/__tests__/agents-stats.test.d.ts +0 -5
  181. package/dist/__tests__/agents-stats.test.d.ts.map +0 -1
  182. package/dist/__tests__/agents-stats.test.js +0 -134
  183. package/dist/__tests__/agents-stats.test.js.map +0 -1
  184. package/dist/__tests__/alerts.test.d.ts +0 -5
  185. package/dist/__tests__/alerts.test.d.ts.map +0 -1
  186. package/dist/__tests__/alerts.test.js +0 -245
  187. package/dist/__tests__/alerts.test.js.map +0 -1
  188. package/dist/__tests__/analytics.test.d.ts +0 -5
  189. package/dist/__tests__/analytics.test.d.ts.map +0 -1
  190. package/dist/__tests__/analytics.test.js +0 -218
  191. package/dist/__tests__/analytics.test.js.map +0 -1
  192. package/dist/__tests__/api-keys.test.d.ts +0 -5
  193. package/dist/__tests__/api-keys.test.d.ts.map +0 -1
  194. package/dist/__tests__/api-keys.test.js +0 -118
  195. package/dist/__tests__/api-keys.test.js.map +0 -1
  196. package/dist/__tests__/auth-no-db.test.d.ts +0 -2
  197. package/dist/__tests__/auth-no-db.test.d.ts.map +0 -1
  198. package/dist/__tests__/auth-no-db.test.js +0 -43
  199. package/dist/__tests__/auth-no-db.test.js.map +0 -1
  200. package/dist/__tests__/auth.test.d.ts +0 -5
  201. package/dist/__tests__/auth.test.d.ts.map +0 -1
  202. package/dist/__tests__/auth.test.js +0 -86
  203. package/dist/__tests__/auth.test.js.map +0 -1
  204. package/dist/__tests__/config.test.d.ts +0 -2
  205. package/dist/__tests__/config.test.d.ts.map +0 -1
  206. package/dist/__tests__/config.test.js +0 -37
  207. package/dist/__tests__/config.test.js.map +0 -1
  208. package/dist/__tests__/events-ingest.test.d.ts +0 -5
  209. package/dist/__tests__/events-ingest.test.d.ts.map +0 -1
  210. package/dist/__tests__/events-ingest.test.js +0 -248
  211. package/dist/__tests__/events-ingest.test.js.map +0 -1
  212. package/dist/__tests__/events-query.test.d.ts +0 -5
  213. package/dist/__tests__/events-query.test.d.ts.map +0 -1
  214. package/dist/__tests__/events-query.test.js +0 -205
  215. package/dist/__tests__/events-query.test.js.map +0 -1
  216. package/dist/__tests__/health.test.d.ts +0 -5
  217. package/dist/__tests__/health.test.d.ts.map +0 -1
  218. package/dist/__tests__/health.test.js +0 -40
  219. package/dist/__tests__/health.test.js.map +0 -1
  220. package/dist/__tests__/ingest.test.d.ts +0 -8
  221. package/dist/__tests__/ingest.test.d.ts.map +0 -1
  222. package/dist/__tests__/ingest.test.js +0 -469
  223. package/dist/__tests__/ingest.test.js.map +0 -1
  224. package/dist/__tests__/llm-tracking.test.d.ts +0 -10
  225. package/dist/__tests__/llm-tracking.test.d.ts.map +0 -1
  226. package/dist/__tests__/llm-tracking.test.js +0 -602
  227. package/dist/__tests__/llm-tracking.test.js.map +0 -1
  228. package/dist/__tests__/sessions.test.d.ts +0 -5
  229. package/dist/__tests__/sessions.test.d.ts.map +0 -1
  230. package/dist/__tests__/sessions.test.js +0 -176
  231. package/dist/__tests__/sessions.test.js.map +0 -1
  232. package/dist/__tests__/stream.test.d.ts +0 -5
  233. package/dist/__tests__/stream.test.d.ts.map +0 -1
  234. package/dist/__tests__/stream.test.js +0 -352
  235. package/dist/__tests__/stream.test.js.map +0 -1
  236. package/dist/__tests__/test-helpers.d.ts +0 -24
  237. package/dist/__tests__/test-helpers.d.ts.map +0 -1
  238. package/dist/__tests__/test-helpers.js +0 -45
  239. package/dist/__tests__/test-helpers.js.map +0 -1
  240. package/dist/db/__tests__/init.test.d.ts +0 -2
  241. package/dist/db/__tests__/init.test.d.ts.map +0 -1
  242. package/dist/db/__tests__/init.test.js +0 -73
  243. package/dist/db/__tests__/init.test.js.map +0 -1
  244. package/dist/db/__tests__/sqlite-store-read.test.d.ts +0 -2
  245. package/dist/db/__tests__/sqlite-store-read.test.d.ts.map +0 -1
  246. package/dist/db/__tests__/sqlite-store-read.test.js +0 -749
  247. package/dist/db/__tests__/sqlite-store-read.test.js.map +0 -1
  248. package/dist/db/__tests__/sqlite-store-write.test.d.ts +0 -2
  249. package/dist/db/__tests__/sqlite-store-write.test.d.ts.map +0 -1
  250. package/dist/db/__tests__/sqlite-store-write.test.js +0 -418
  251. package/dist/db/__tests__/sqlite-store-write.test.js.map +0 -1
  252. package/dist/lib/__tests__/alert-engine.test.d.ts +0 -5
  253. package/dist/lib/__tests__/alert-engine.test.d.ts.map +0 -1
  254. package/dist/lib/__tests__/alert-engine.test.js +0 -211
  255. package/dist/lib/__tests__/alert-engine.test.js.map +0 -1
  256. package/dist/lib/__tests__/retention.test.d.ts +0 -2
  257. package/dist/lib/__tests__/retention.test.d.ts.map +0 -1
  258. package/dist/lib/__tests__/retention.test.js +0 -238
  259. package/dist/lib/__tests__/retention.test.js.map +0 -1
@@ -9,6 +9,8 @@
9
9
  * 4. Logs to console
10
10
  */
11
11
  import { ulid } from 'ulid';
12
+ import { SqliteEventStore } from '../db/sqlite-store.js';
13
+ import { TenantScopedStore } from '../db/tenant-scoped-store.js';
12
14
  import { eventBus } from './event-bus.js';
13
15
  /** Default evaluation interval: 60 seconds */
14
16
  const DEFAULT_CHECK_INTERVAL_MS = 60_000;
@@ -93,37 +95,75 @@ export class AlertEngine {
93
95
  console.log('[AlertEngine] Stopped');
94
96
  }
95
97
  }
98
+ /**
99
+ * Get a tenant-scoped store for a given rule.
100
+ * If the underlying store is SqliteEventStore and the rule has a tenantId,
101
+ * returns a TenantScopedStore. Otherwise returns the original store.
102
+ */
103
+ getTenantStore(rule) {
104
+ const tenantId = rule.tenantId ?? 'default';
105
+ if (this.store instanceof SqliteEventStore) {
106
+ return new TenantScopedStore(this.store, tenantId);
107
+ }
108
+ return this.store;
109
+ }
96
110
  /**
97
111
  * Run a single evaluation cycle (can also be called manually / from tests).
112
+ *
113
+ * Rules are grouped by tenantId so every operation — listing rules,
114
+ * querying analytics, deduplication, and history insertion — goes
115
+ * through a tenant-scoped store. This prevents any cross-tenant
116
+ * data leakage during alert evaluation.
98
117
  */
99
118
  async evaluate() {
100
119
  if (this.running)
101
120
  return [];
102
121
  this.running = true;
103
122
  try {
104
- const rules = await this.store.listAlertRules();
105
- const enabledRules = rules.filter((r) => r.enabled);
123
+ // NOTE (E1-H3): This intentionally calls listAlertRules() without a tenantId
124
+ // to fetch rules across ALL tenants. The alert engine is a system-level service
125
+ // that evaluates every tenant's rules, then scopes all subsequent reads/writes
126
+ // through per-tenant TenantScopedStore instances (see grouping below).
127
+ // This is the only place where cross-tenant global access is expected.
128
+ const allRules = await this.store.listAlertRules();
129
+ const rulesByTenant = new Map();
130
+ for (const rule of allRules) {
131
+ const tid = rule.tenantId ?? 'default';
132
+ let bucket = rulesByTenant.get(tid);
133
+ if (!bucket) {
134
+ bucket = [];
135
+ rulesByTenant.set(tid, bucket);
136
+ }
137
+ bucket.push(rule);
138
+ }
106
139
  const triggered = [];
107
- for (const rule of enabledRules) {
108
- try {
109
- const currentValue = await this.computeCurrentValue(rule);
110
- const shouldTrigger = this.checkCondition(rule.condition, currentValue, rule.threshold);
111
- if (shouldTrigger) {
112
- // M1 fix: Deduplication skip if the rule already triggered within its window
113
- const recentHistory = await this.store.listAlertHistory({ ruleId: rule.id, limit: 1 });
114
- if (recentHistory.entries.length > 0) {
115
- const lastTrigger = new Date(recentHistory.entries[0].triggeredAt).getTime();
116
- const cooldownMs = rule.windowMinutes * 60_000;
117
- if (Date.now() - lastTrigger < cooldownMs) {
118
- continue; // Still within cooldown period
140
+ for (const [tenantId, tenantRules] of rulesByTenant) {
141
+ // Build a single tenant-scoped store per tenant
142
+ const tenantStore = this.store instanceof SqliteEventStore
143
+ ? new TenantScopedStore(this.store, tenantId)
144
+ : this.store;
145
+ const enabledRules = tenantRules.filter((r) => r.enabled);
146
+ for (const rule of enabledRules) {
147
+ try {
148
+ const currentValue = await this.computeCurrentValue(rule, tenantStore);
149
+ const shouldTrigger = this.checkCondition(rule.condition, currentValue, rule.threshold);
150
+ if (shouldTrigger) {
151
+ // M1 fix: Deduplication — skip if the rule already triggered within its window
152
+ const recentHistory = await tenantStore.listAlertHistory({ ruleId: rule.id, limit: 1 });
153
+ if (recentHistory.entries.length > 0) {
154
+ const lastTrigger = new Date(recentHistory.entries[0].triggeredAt).getTime();
155
+ const cooldownMs = rule.windowMinutes * 60_000;
156
+ if (Date.now() - lastTrigger < cooldownMs) {
157
+ continue; // Still within cooldown period
158
+ }
119
159
  }
160
+ const entry = await this.triggerAlert(rule, currentValue, tenantStore);
161
+ triggered.push(entry);
120
162
  }
121
- const entry = await this.triggerAlert(rule, currentValue);
122
- triggered.push(entry);
123
163
  }
124
- }
125
- catch (err) {
126
- console.error(`[AlertEngine] Error evaluating rule "${rule.name}" (${rule.id}):`, err);
164
+ catch (err) {
165
+ console.error(`[AlertEngine] Error evaluating rule "${rule.name}" (${rule.id}):`, err);
166
+ }
127
167
  }
128
168
  }
129
169
  return triggered;
@@ -135,12 +175,12 @@ export class AlertEngine {
135
175
  /**
136
176
  * Compute the current metric value for a rule by querying analytics.
137
177
  */
138
- async computeCurrentValue(rule) {
178
+ async computeCurrentValue(rule, tenantStore) {
139
179
  const now = new Date();
140
180
  const windowStart = new Date(now.getTime() - rule.windowMinutes * 60_000);
141
181
  const from = windowStart.toISOString();
142
182
  const to = now.toISOString();
143
- const analytics = await this.store.getAnalytics({
183
+ const analytics = await tenantStore.getAnalytics({
144
184
  from,
145
185
  to,
146
186
  agentId: rule.scope.agentId,
@@ -192,7 +232,7 @@ export class AlertEngine {
192
232
  /**
193
233
  * Trigger an alert: persist history, deliver webhooks, emit on EventBus.
194
234
  */
195
- async triggerAlert(rule, currentValue) {
235
+ async triggerAlert(rule, currentValue, tenantStore) {
196
236
  const now = new Date().toISOString();
197
237
  const message = this.buildMessage(rule, currentValue);
198
238
  const entry = {
@@ -202,9 +242,10 @@ export class AlertEngine {
202
242
  currentValue,
203
243
  threshold: rule.threshold,
204
244
  message,
245
+ tenantId: rule.tenantId,
205
246
  };
206
- // 1. Persist to alert history
207
- await this.store.insertAlertHistory(entry);
247
+ // 1. Persist to alert history (via tenant-scoped store)
248
+ await tenantStore.insertAlertHistory(entry);
208
249
  // 2. Console log
209
250
  console.log(`[AlertEngine] 🔔 Alert triggered: "${rule.name}" — ${message}`);
210
251
  // 3. Emit on EventBus (Story 12.5)
@@ -1 +1 @@
1
- {"version":3,"file":"alert-engine.js","sourceRoot":"","sources":["../../src/lib/alert-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEzC,uEAAuE;AAEvE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;IAEhF,sCAAsC;IACtC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QACxF,iDAAiD;QACjD,+DAA+D;IACjE,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,MAAM,mBAAmB,GAAG;QAC1B,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,aAAa;QACtB,4BAA4B,EAAE,gBAAgB;QAC9C,aAAa,EAAE,iBAAiB;QAChC,aAAa,EAAE,aAAa;QAC5B,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7D,+DAA+D;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,MAAM,OAAO,WAAW;IAMZ;IALF,KAAK,GAA0C,IAAI,CAAC;IACpD,OAAO,GAAG,KAAK,CAAC;IACP,eAAe,CAAS;IAEzC,YACU,KAAkB,EAC1B,OAA4B;QADpB,UAAK,GAAL,KAAK,CAAa;QAG1B,IAAI,CAAC,eAAe;YAClB,OAAO,EAAE,eAAe;gBACxB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;oBAC3D,yBAAyB,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC;QAC5F,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,SAAS,GAAmB,EAAE,CAAC;YAErC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAExF,IAAI,aAAa,EAAE,CAAC;wBAClB,+EAA+E;wBAC/E,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;wBACvF,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACrC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;4BAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;4BAC/C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,UAAU,EAAE,CAAC;gCAC1C,SAAS,CAAC,+BAA+B;4BAC3C,CAAC;wBACH,CAAC;wBAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBAC1D,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAe;QAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAC9C,IAAI;YACJ,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAEhC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC;oBAAE,OAAO,CAAC,CAAC;gBACtC,OAAO,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/C,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,MAAM,CAAC,YAAY,CAAC;YAC7B,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,OAAO,MAAM,CAAC,YAAY,CAAC;YAC7B,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,MAAM,CAAC,UAAU,CAAC;YAC3B,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,0DAA0D;gBAC1D,0EAA0E;gBAC1E,+DAA+D;gBAC/D,OAAO,MAAM,CAAC,UAAU,CAAC;YAC3B,CAAC;YACD;gBACE,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,SAAyB,EACzB,YAAoB,EACpB,SAAiB;QAEjB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,cAAc,CAAC;YACpB,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB;gBACxB,OAAO,YAAY,GAAG,SAAS,CAAC;YAElC,KAAK,eAAe;gBAClB,uDAAuD;gBACvD,OAAO,YAAY,KAAK,CAAC,CAAC;YAE5B;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,IAAe,EAAE,YAAoB;QAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAiB;YAC1B,EAAE,EAAE,IAAI,EAAE;YACV,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,WAAW,EAAE,GAAG;YAChB,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO;SACR,CAAC;QAEF,8BAA8B;QAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE3C,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC;QAE7E,mCAAmC;QACnC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QAEH,qDAAqD;QACrD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAExC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,IAAe,EAAE,KAAmB;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAC5C,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAC3F,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,OAAO,GAAG;YACd,WAAW,EAAE,IAAI,CAAC,EAAE;YACpB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC3B,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,cAAc;iBACpD,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CACV,qCAAqC,GAAG,iBAAiB,GAAG,CAAC,MAAM,EAAE,CACtE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,qCAAqC,GAAG,SAAS,EACjD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAe,EAAE,YAAoB;QACxD,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAC9B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpD,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,oBAAoB;gBACvB,OAAO,cAAc,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,aAAa,GAAG,CAAC;YACrJ,KAAK,cAAc;gBACjB,OAAO,SAAS,SAAS,CAAC,YAAY,CAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,IAAI,CAAC,aAAa,GAAG,CAAC;YAC/H,KAAK,iBAAiB;gBACpB,OAAO,mBAAmB,SAAS,CAAC,YAAY,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,IAAI,CAAC,aAAa,GAAG,CAAC;YAC5I,KAAK,qBAAqB;gBACxB,OAAO,eAAe,SAAS,CAAC,YAAY,CAAC,sBAAsB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,IAAI,CAAC,aAAa,GAAG,CAAC;YACpI,KAAK,eAAe;gBAClB,OAAO,kCAAkC,IAAI,CAAC,aAAa,GAAG,CAAC;YACjE;gBACE,OAAO,wBAAwB,IAAI,CAAC,SAAS,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"alert-engine.js","sourceRoot":"","sources":["../../src/lib/alert-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Cost Analysis (Story 4.3)
3
+ *
4
+ * Analyzes cost data from sessions and llm_response events to provide
5
+ * cost breakdowns by model, agent, and time trends.
6
+ */
7
+ import type { IEventStore } from '@agentlensai/core';
8
+ import type { CostAnalysisResult } from '@agentlensai/core';
9
+ export interface CostAnalysisOpts {
10
+ agentId?: string;
11
+ from?: string;
12
+ to?: string;
13
+ model?: string;
14
+ limit?: number;
15
+ }
16
+ /**
17
+ * Analyze costs across sessions and LLM calls.
18
+ */
19
+ export declare function analyzeCosts(store: IEventStore, opts?: CostAnalysisOpts): Promise<CostAnalysisResult>;
20
+ //# sourceMappingURL=cost-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-analysis.d.ts","sourceRoot":"","sources":["../../../src/lib/analysis/cost-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAoJ7B"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Cost Analysis (Story 4.3)
3
+ *
4
+ * Analyzes cost data from sessions and llm_response events to provide
5
+ * cost breakdowns by model, agent, and time trends.
6
+ */
7
+ /**
8
+ * Analyze costs across sessions and LLM calls.
9
+ */
10
+ export async function analyzeCosts(store, opts = {}) {
11
+ const limit = opts.limit ?? 20;
12
+ // Query sessions with cost data
13
+ const sessionResult = await store.querySessions({
14
+ agentId: opts.agentId,
15
+ from: opts.from,
16
+ to: opts.to,
17
+ limit: 1000,
18
+ });
19
+ // Query llm_response events for model breakdown
20
+ const llmResult = await store.queryEvents({
21
+ agentId: opts.agentId,
22
+ from: opts.from,
23
+ to: opts.to,
24
+ eventType: 'llm_response',
25
+ limit: 1000,
26
+ order: 'asc',
27
+ });
28
+ // Track whether either query hit its limit (results may be truncated)
29
+ const possiblyTruncated = sessionResult.sessions.length === 1000 || llmResult.events.length === 1000;
30
+ const sessions = sessionResult.sessions;
31
+ const llmEvents = llmResult.events;
32
+ // Filter llm events by model if specified
33
+ const filteredLlmEvents = opts.model
34
+ ? llmEvents.filter((e) => {
35
+ const p = e.payload;
36
+ return p.model === opts.model;
37
+ })
38
+ : llmEvents;
39
+ const eventsAnalyzed = filteredLlmEvents.length;
40
+ const timeRange = {
41
+ from: sessions.length > 0
42
+ ? sessions.reduce((min, s) => (s.startedAt < min ? s.startedAt : min), sessions[0].startedAt)
43
+ : (opts.from ?? ''),
44
+ to: sessions.length > 0
45
+ ? sessions.reduce((max, s) => (s.startedAt > max ? s.startedAt : max), sessions[0].startedAt)
46
+ : (opts.to ?? ''),
47
+ };
48
+ // Summary from sessions
49
+ const totalCost = sessions.reduce((sum, s) => sum + s.totalCostUsd, 0);
50
+ const totalSessions = sessions.length;
51
+ const avgPerSession = totalSessions > 0 ? totalCost / totalSessions : 0;
52
+ // Cost by model from llm_response events
53
+ const modelMap = new Map();
54
+ for (const event of filteredLlmEvents) {
55
+ const p = event.payload;
56
+ const model = p.model ?? 'unknown';
57
+ const cost = p.costUsd ?? 0;
58
+ const entry = modelMap.get(model) ?? { totalCost: 0, callCount: 0 };
59
+ entry.totalCost += cost;
60
+ entry.callCount++;
61
+ modelMap.set(model, entry);
62
+ }
63
+ const byModel = Array.from(modelMap.entries())
64
+ .map(([model, data]) => ({
65
+ model,
66
+ totalCost: Math.round(data.totalCost * 1_000_000) / 1_000_000,
67
+ callCount: data.callCount,
68
+ avgCostPerCall: data.callCount > 0
69
+ ? Math.round((data.totalCost / data.callCount) * 1_000_000) / 1_000_000
70
+ : 0,
71
+ }))
72
+ .sort((a, b) => b.totalCost - a.totalCost);
73
+ // Cost by agent from sessions
74
+ const agentMap = new Map();
75
+ for (const session of sessions) {
76
+ const entry = agentMap.get(session.agentId) ?? { totalCost: 0, sessionCount: 0 };
77
+ entry.totalCost += session.totalCostUsd;
78
+ entry.sessionCount++;
79
+ agentMap.set(session.agentId, entry);
80
+ }
81
+ const byAgent = Array.from(agentMap.entries())
82
+ .map(([agentId, data]) => ({
83
+ agentId,
84
+ totalCost: Math.round(data.totalCost * 1_000_000) / 1_000_000,
85
+ sessionCount: data.sessionCount,
86
+ avgCostPerSession: data.sessionCount > 0
87
+ ? Math.round((data.totalCost / data.sessionCount) * 1_000_000) / 1_000_000
88
+ : 0,
89
+ }))
90
+ .sort((a, b) => b.totalCost - a.totalCost);
91
+ // Cost trend over time (daily buckets)
92
+ const dailyMap = new Map();
93
+ for (const session of sessions) {
94
+ const date = session.startedAt.slice(0, 10); // YYYY-MM-DD
95
+ const entry = dailyMap.get(date) ?? { totalCost: 0, sessionCount: 0 };
96
+ entry.totalCost += session.totalCostUsd;
97
+ entry.sessionCount++;
98
+ dailyMap.set(date, entry);
99
+ }
100
+ const buckets = Array.from(dailyMap.entries())
101
+ .map(([date, data]) => ({
102
+ date,
103
+ totalCost: Math.round(data.totalCost * 1_000_000) / 1_000_000,
104
+ sessionCount: data.sessionCount,
105
+ }))
106
+ .sort((a, b) => a.date.localeCompare(b.date));
107
+ // Trend detection: compare last 7 days vs previous 7 days
108
+ const direction = detectCostTrend(buckets);
109
+ // Top sessions by cost
110
+ const topSessions = [...sessions]
111
+ .sort((a, b) => b.totalCostUsd - a.totalCostUsd)
112
+ .slice(0, limit)
113
+ .map((s) => ({
114
+ sessionId: s.id,
115
+ agentId: s.agentId,
116
+ totalCost: Math.round(s.totalCostUsd * 1_000_000) / 1_000_000,
117
+ startedAt: s.startedAt,
118
+ }));
119
+ return {
120
+ summary: {
121
+ totalCost: Math.round(totalCost * 1_000_000) / 1_000_000,
122
+ avgPerSession: Math.round(avgPerSession * 1_000_000) / 1_000_000,
123
+ totalSessions,
124
+ },
125
+ byModel,
126
+ byAgent,
127
+ trend: {
128
+ direction,
129
+ buckets,
130
+ },
131
+ topSessions,
132
+ metadata: {
133
+ eventsAnalyzed,
134
+ timeRange,
135
+ ...(possiblyTruncated ? { truncated: true, note: 'Results may be incomplete — query limit reached' } : {}),
136
+ },
137
+ };
138
+ }
139
+ /**
140
+ * Detect cost trend by comparing the most recent 7 day-buckets vs the previous 7.
141
+ */
142
+ function detectCostTrend(buckets) {
143
+ if (buckets.length < 2)
144
+ return 'stable';
145
+ const recent = buckets.slice(-7);
146
+ const previous = buckets.slice(-14, -7);
147
+ if (previous.length === 0)
148
+ return 'stable';
149
+ const recentTotal = recent.reduce((s, b) => s + b.totalCost, 0);
150
+ const previousTotal = previous.reduce((s, b) => s + b.totalCost, 0);
151
+ if (previousTotal === 0) {
152
+ return recentTotal > 0 ? 'increasing' : 'stable';
153
+ }
154
+ const changeRatio = (recentTotal - previousTotal) / previousTotal;
155
+ if (changeRatio > 0.1)
156
+ return 'increasing';
157
+ if (changeRatio < -0.1)
158
+ return 'decreasing';
159
+ return 'stable';
160
+ }
161
+ //# sourceMappingURL=cost-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-analysis.js","sourceRoot":"","sources":["../../../src/lib/analysis/cost-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Error Pattern Analysis (Story 4.1)
3
+ *
4
+ * Analyzes tool_error events and error/critical severity events to find
5
+ * recurring error patterns, grouping by normalized message.
6
+ */
7
+ import type { IEventStore } from '@agentlensai/core';
8
+ import type { ErrorPatternResult } from '@agentlensai/core';
9
+ export interface ErrorPatternOpts {
10
+ agentId?: string;
11
+ from?: string;
12
+ to?: string;
13
+ limit?: number;
14
+ }
15
+ /**
16
+ * Normalize an error message for grouping:
17
+ * - Replace UUIDs with <UUID>
18
+ * - Replace file paths with <PATH>
19
+ * - Replace numbers with <N>
20
+ */
21
+ export declare function normalizeErrorMessage(msg: string): string;
22
+ /**
23
+ * Analyze error patterns from the event store.
24
+ */
25
+ export declare function analyzeErrorPatterns(store: IEventStore, opts?: ErrorPatternOpts): Promise<ErrorPatternResult>;
26
+ //# sourceMappingURL=error-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-patterns.d.ts","sourceRoot":"","sources":["../../../src/lib/analysis/error-patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQzD;AAgBD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAiI7B"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Error Pattern Analysis (Story 4.1)
3
+ *
4
+ * Analyzes tool_error events and error/critical severity events to find
5
+ * recurring error patterns, grouping by normalized message.
6
+ */
7
+ /**
8
+ * Normalize an error message for grouping:
9
+ * - Replace UUIDs with <UUID>
10
+ * - Replace file paths with <PATH>
11
+ * - Replace numbers with <N>
12
+ */
13
+ export function normalizeErrorMessage(msg) {
14
+ return msg
15
+ // UUIDs: 8-4-4-4-12 hex pattern
16
+ .replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, '<UUID>')
17
+ // File paths: /foo/bar/baz.ts etc.
18
+ .replace(/\/[\w\/.\-]+/g, '<PATH>')
19
+ // Numbers (standalone or in context)
20
+ .replace(/\d+/g, '<N>');
21
+ }
22
+ /**
23
+ * Extract error message from an event payload.
24
+ */
25
+ function getErrorMessage(event) {
26
+ const payload = event.payload;
27
+ if (event.eventType === 'tool_error') {
28
+ return String(payload.error ?? 'Unknown error');
29
+ }
30
+ // For other error/critical severity events, try to extract a message
31
+ return String(payload.error ?? payload.message ?? payload.reason ?? JSON.stringify(payload));
32
+ }
33
+ /**
34
+ * Analyze error patterns from the event store.
35
+ */
36
+ export async function analyzeErrorPatterns(store, opts = {}) {
37
+ const limit = opts.limit ?? 20;
38
+ // Query error events: tool_error events + error/critical severity events
39
+ // We query tool_error events first
40
+ const toolErrorResult = await store.queryEvents({
41
+ agentId: opts.agentId,
42
+ from: opts.from,
43
+ to: opts.to,
44
+ eventType: 'tool_error',
45
+ limit: 1000,
46
+ order: 'asc',
47
+ });
48
+ // Then query error/critical severity events
49
+ const severityErrorResult = await store.queryEvents({
50
+ agentId: opts.agentId,
51
+ from: opts.from,
52
+ to: opts.to,
53
+ severity: ['error', 'critical'],
54
+ limit: 1000,
55
+ order: 'asc',
56
+ });
57
+ // Track whether either query hit its limit (results may be truncated)
58
+ const possiblyTruncated = toolErrorResult.events.length === 1000 || severityErrorResult.events.length === 1000;
59
+ // Merge and deduplicate by event ID
60
+ const seenIds = new Set();
61
+ const allErrors = [];
62
+ for (const event of [...toolErrorResult.events, ...severityErrorResult.events]) {
63
+ if (!seenIds.has(event.id)) {
64
+ seenIds.add(event.id);
65
+ allErrors.push(event);
66
+ }
67
+ }
68
+ // Sort by timestamp ascending
69
+ allErrors.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
70
+ const eventsAnalyzed = allErrors.length;
71
+ const timeRange = {
72
+ from: allErrors.length > 0 ? allErrors[0].timestamp : (opts.from ?? ''),
73
+ to: allErrors.length > 0 ? allErrors[allErrors.length - 1].timestamp : (opts.to ?? ''),
74
+ };
75
+ // Group by normalized error message pattern
76
+ const patternMap = new Map();
77
+ // To find preceding tools, we need session timelines.
78
+ // Cache session events to avoid repeated queries.
79
+ const sessionEventsCache = new Map();
80
+ for (const event of allErrors) {
81
+ const msg = getErrorMessage(event);
82
+ const pattern = normalizeErrorMessage(msg);
83
+ let entry = patternMap.get(pattern);
84
+ if (!entry) {
85
+ entry = {
86
+ count: 0,
87
+ firstSeen: event.timestamp,
88
+ lastSeen: event.timestamp,
89
+ sessions: new Set(),
90
+ precedingTools: [],
91
+ };
92
+ patternMap.set(pattern, entry);
93
+ }
94
+ entry.count++;
95
+ if (event.timestamp < entry.firstSeen)
96
+ entry.firstSeen = event.timestamp;
97
+ if (event.timestamp > entry.lastSeen)
98
+ entry.lastSeen = event.timestamp;
99
+ entry.sessions.add(event.sessionId);
100
+ // Get preceding tool calls (last 3 tool_call events before this error in the session)
101
+ let sessionEvents = sessionEventsCache.get(event.sessionId);
102
+ if (!sessionEvents) {
103
+ sessionEvents = await store.getSessionTimeline(event.sessionId);
104
+ sessionEventsCache.set(event.sessionId, sessionEvents);
105
+ }
106
+ const eventIdx = sessionEvents.findIndex((e) => e.id === event.id);
107
+ if (eventIdx > 0) {
108
+ const preceding = [];
109
+ for (let i = eventIdx - 1; i >= 0 && preceding.length < 3; i--) {
110
+ const prev = sessionEvents[i];
111
+ if (prev.eventType === 'tool_call') {
112
+ const p = prev.payload;
113
+ preceding.unshift(String(p.toolName ?? 'unknown'));
114
+ }
115
+ }
116
+ if (preceding.length > 0) {
117
+ entry.precedingTools.push(preceding);
118
+ }
119
+ }
120
+ }
121
+ // Build result sorted by frequency descending
122
+ const patterns = Array.from(patternMap.entries())
123
+ .map(([pattern, entry]) => ({
124
+ pattern,
125
+ count: entry.count,
126
+ firstSeen: entry.firstSeen,
127
+ lastSeen: entry.lastSeen,
128
+ affectedSessions: Array.from(entry.sessions),
129
+ // Deduplicate preceding tool sequences
130
+ precedingTools: deduplicateSequences(entry.precedingTools),
131
+ }))
132
+ .sort((a, b) => b.count - a.count)
133
+ .slice(0, limit);
134
+ return {
135
+ patterns,
136
+ metadata: {
137
+ eventsAnalyzed,
138
+ timeRange,
139
+ ...(possiblyTruncated ? { truncated: true, note: 'Results may be incomplete — query limit reached' } : {}),
140
+ },
141
+ };
142
+ }
143
+ /**
144
+ * Deduplicate tool sequences by stringified form, keeping unique ones.
145
+ */
146
+ function deduplicateSequences(sequences) {
147
+ const seen = new Set();
148
+ const result = [];
149
+ for (const seq of sequences) {
150
+ const key = seq.join('→');
151
+ if (!seen.has(key)) {
152
+ seen.add(key);
153
+ result.push(seq);
154
+ }
155
+ }
156
+ return result;
157
+ }
158
+ //# sourceMappingURL=error-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-patterns.js","sourceRoot":"","sources":["../../../src/lib/analysis/error-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Analysis Dispatcher (Story 4.6)
3
+ *
4
+ * Maps analysis type strings to handler functions and converts
5
+ * their results into the unified ReflectResult format.
6
+ */
7
+ import type { IEventStore, ReflectResult } from '@agentlensai/core';
8
+ export interface AnalysisOpts {
9
+ agentId?: string;
10
+ from?: string;
11
+ to?: string;
12
+ limit?: number;
13
+ params?: Record<string, unknown>;
14
+ }
15
+ /**
16
+ * Run an analysis by type string and return a unified ReflectResult.
17
+ */
18
+ export declare function runAnalysis(analysis: string, store: IEventStore, opts?: AnalysisOpts): Promise<ReflectResult>;
19
+ export { analyzeErrorPatterns } from './error-patterns.js';
20
+ export { analyzeToolSequences } from './tool-sequences.js';
21
+ export { analyzeCosts } from './cost-analysis.js';
22
+ export { analyzePerformance } from './performance-trends.js';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAmC,MAAM,mBAAmB,CAAC;AAMrG,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,aAAa,CAAC,CAaxB;AA+ID,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}