agentenkit 0.1.5 → 0.2.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 (118) hide show
  1. package/README.md +48 -2
  2. package/dist/adapters/memory.d.ts +2 -2
  3. package/dist/adapters/memory.d.ts.map +1 -1
  4. package/dist/adapters/memory.js +3 -9
  5. package/dist/adapters/memory.js.map +1 -1
  6. package/dist/adapters/prisma.d.ts +61 -18
  7. package/dist/adapters/prisma.d.ts.map +1 -1
  8. package/dist/adapters/prisma.js +65 -16
  9. package/dist/adapters/prisma.js.map +1 -1
  10. package/dist/adapters/sqlite.d.ts +3 -2
  11. package/dist/adapters/sqlite.d.ts.map +1 -1
  12. package/dist/adapters/sqlite.js +82 -11
  13. package/dist/adapters/sqlite.js.map +1 -1
  14. package/dist/admin/default.d.ts +11 -4
  15. package/dist/admin/default.d.ts.map +1 -1
  16. package/dist/admin/default.js +11 -6
  17. package/dist/admin/default.js.map +1 -1
  18. package/dist/admin/memory.d.ts.map +1 -1
  19. package/dist/admin/memory.js +8 -2
  20. package/dist/admin/memory.js.map +1 -1
  21. package/dist/admin/migrations/postgres/0001-init.d.ts +10 -0
  22. package/dist/admin/migrations/postgres/0001-init.d.ts.map +1 -0
  23. package/dist/admin/migrations/postgres/0001-init.js +56 -0
  24. package/dist/admin/migrations/postgres/0001-init.js.map +1 -0
  25. package/dist/admin/migrations/postgres/index.d.ts +9 -0
  26. package/dist/admin/migrations/postgres/index.d.ts.map +1 -0
  27. package/dist/admin/migrations/postgres/index.js +17 -0
  28. package/dist/admin/migrations/postgres/index.js.map +1 -0
  29. package/dist/admin/migrations/runner.d.ts +81 -0
  30. package/dist/admin/migrations/runner.d.ts.map +1 -0
  31. package/dist/admin/migrations/runner.js +137 -0
  32. package/dist/admin/migrations/runner.js.map +1 -0
  33. package/dist/admin/migrations/sqlite/0001-init.d.ts +11 -0
  34. package/dist/admin/migrations/sqlite/0001-init.d.ts.map +1 -0
  35. package/dist/admin/migrations/sqlite/0001-init.js +44 -0
  36. package/dist/admin/migrations/sqlite/0001-init.js.map +1 -0
  37. package/dist/admin/migrations/sqlite/index.d.ts +7 -0
  38. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -0
  39. package/dist/admin/migrations/sqlite/index.js +38 -0
  40. package/dist/admin/migrations/sqlite/index.js.map +1 -0
  41. package/dist/admin/postgres.d.ts +27 -4
  42. package/dist/admin/postgres.d.ts.map +1 -1
  43. package/dist/admin/postgres.js +49 -55
  44. package/dist/admin/postgres.js.map +1 -1
  45. package/dist/admin/sqlite.d.ts +18 -2
  46. package/dist/admin/sqlite.d.ts.map +1 -1
  47. package/dist/admin/sqlite.js +51 -54
  48. package/dist/admin/sqlite.js.map +1 -1
  49. package/dist/core/admin.d.ts +8 -1
  50. package/dist/core/admin.d.ts.map +1 -1
  51. package/dist/core/admin.js +21 -2
  52. package/dist/core/admin.js.map +1 -1
  53. package/dist/core/agent.d.ts +3 -0
  54. package/dist/core/agent.d.ts.map +1 -1
  55. package/dist/core/agent.js +4 -4
  56. package/dist/core/agent.js.map +1 -1
  57. package/dist/core/context.d.ts +5 -0
  58. package/dist/core/context.d.ts.map +1 -1
  59. package/dist/core/context.js +38 -9
  60. package/dist/core/context.js.map +1 -1
  61. package/dist/core/engine.d.ts +4 -1
  62. package/dist/core/engine.d.ts.map +1 -1
  63. package/dist/core/engine.js +93 -20
  64. package/dist/core/engine.js.map +1 -1
  65. package/dist/core/hitl.d.ts.map +1 -1
  66. package/dist/core/hitl.js +6 -0
  67. package/dist/core/hitl.js.map +1 -1
  68. package/dist/core/loop.d.ts +35 -0
  69. package/dist/core/loop.d.ts.map +1 -1
  70. package/dist/core/loop.js +134 -19
  71. package/dist/core/loop.js.map +1 -1
  72. package/dist/core/messages.d.ts +48 -0
  73. package/dist/core/messages.d.ts.map +1 -0
  74. package/dist/core/messages.js +74 -0
  75. package/dist/core/messages.js.map +1 -0
  76. package/dist/core/publish.d.ts +21 -1
  77. package/dist/core/publish.d.ts.map +1 -1
  78. package/dist/core/publish.js +57 -3
  79. package/dist/core/publish.js.map +1 -1
  80. package/dist/core/run.d.ts.map +1 -1
  81. package/dist/core/run.js +44 -4
  82. package/dist/core/run.js.map +1 -1
  83. package/dist/core/stop.d.ts.map +1 -1
  84. package/dist/core/stop.js +42 -0
  85. package/dist/core/stop.js.map +1 -1
  86. package/dist/core/subagent.d.ts +5 -0
  87. package/dist/core/subagent.d.ts.map +1 -1
  88. package/dist/core/subagent.js +23 -10
  89. package/dist/core/subagent.js.map +1 -1
  90. package/dist/core/tools.d.ts +12 -0
  91. package/dist/core/tools.d.ts.map +1 -1
  92. package/dist/core/tools.js.map +1 -1
  93. package/dist/core/types.d.ts +164 -9
  94. package/dist/core/types.d.ts.map +1 -1
  95. package/dist/core/types.js +9 -0
  96. package/dist/core/types.js.map +1 -1
  97. package/dist/core/usage.d.ts +47 -2
  98. package/dist/core/usage.d.ts.map +1 -1
  99. package/dist/core/usage.js +130 -2
  100. package/dist/core/usage.js.map +1 -1
  101. package/dist/index.d.ts +11 -3
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +6 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/ports/admin.d.ts +18 -0
  106. package/dist/ports/admin.d.ts.map +1 -1
  107. package/dist/ports/runtime.d.ts +78 -4
  108. package/dist/ports/runtime.d.ts.map +1 -1
  109. package/dist/ports/storage.d.ts +16 -4
  110. package/dist/ports/storage.d.ts.map +1 -1
  111. package/dist/pricing.d.ts +66 -0
  112. package/dist/pricing.d.ts.map +1 -0
  113. package/dist/pricing.js +98 -0
  114. package/dist/pricing.js.map +1 -0
  115. package/dist/runtime.d.ts.map +1 -1
  116. package/dist/runtime.js +7 -2
  117. package/dist/runtime.js.map +1 -1
  118. package/package.json +1 -1
package/README.md CHANGED
@@ -36,7 +36,7 @@ const queue = new InlineQueue();
36
36
 
37
37
  export const runtime = await setupAgentCore({
38
38
  storage: new SqliteStorage(db), // ← later: PrismaStorage, or your own
39
- admin: new SqliteAdminStore(db), // ← later: PostgresAdminStore
39
+ admin: SqliteAdminStore.open(db), // ← later: PostgresAdminStore
40
40
  bus: new MemoryBus(), // ← later: RedisBus
41
41
  kv: new MemoryKv(), // ← later: RedisKv
42
42
  queue, // ← later: QStashQueue
@@ -115,8 +115,12 @@ for await (const e of runtime.events.follow(threadId, { signal })) { … } /
115
115
  const missed = await runtime.events.since(threadId, lastSeq); // raw replay
116
116
  const unsub = await runtime.events.subscribe(threadId, handler); // raw tail
117
117
  await runtime.worker.handleJob(job); // queue consumer (§2.8)
118
+ await runtime.events.publishEvent(threadId, 'MY_EVENT', payload); // your own event, same pipe
118
119
  ```
119
120
 
121
+ Tools get `publishEvent` on their second argument, bound to their thread; see
122
+ [Custom events](../../docs/custom-events.md).
123
+
120
124
  The Next.js routes in [`examples/nextjs-app`](../../examples/nextjs-app) show the HTTP
121
125
  wiring — each handler is a few lines over the runtime.
122
126
 
@@ -159,6 +163,41 @@ Implement any of them for your own stack — `core/` imports nothing else. The
159
163
  [`Memory*` adapters](./src/adapters/memory.ts) are a complete implementation used by the
160
164
  test suite and double as a template.
161
165
 
166
+ ## Cost (§4)
167
+
168
+ Give the runtime a `pricer` and every usage row carries the money as well as the
169
+ tokens, so spend is read from the store the engine already fills:
170
+
171
+ ```ts
172
+ import { pricing, setupAgentCore } from 'agentenkit';
173
+
174
+ const runtime = await setupAgentCore({
175
+ // ... ports ...
176
+ pricer: pricing.table({
177
+ // dollars per MILLION tokens, typed off the provider's pricing page
178
+ 'gpt-4o': { inputPerMillion: 2.5, cacheReadPerMillion: 1.25, outputPerMillion: 10 },
179
+ }),
180
+ });
181
+ ```
182
+
183
+ One row per model call: main run, nested run or compaction, streamed or not,
184
+ finished or cut short. Reading it back:
185
+
186
+ ```ts
187
+ await runtime.getThreadUsage(threadId); // the thread header
188
+ await storage.usage.total(threadId, { runId }); // one run's bill
189
+ ```
190
+
191
+ Every total carries `costMicros`, `currency`, `unpriced` and `lines` — the same
192
+ spend grouped by agent and model, which is what a credit system charges for. A
193
+ spec's `onFinish` receives it ready-made as `info.usage`, and
194
+ `run({ costBudgetMicros })` caps a run by money the way `tokenBudget` caps it by
195
+ tokens.
196
+
197
+ `pricing` also ships `receipt`, for the figure a gateway already computed, and
198
+ `chain`, to try one then the other. See
199
+ [Cost and pricing](https://eadwincode.github.io/agentic-kit/cost-and-pricing).
200
+
162
201
  ## The admin store (§2.9) — not yours
163
202
 
164
203
  Run records, step timings and a thread index are the **platform's** data, in the
@@ -168,9 +207,16 @@ platform's own tables. You do not implement `AdminStore`; you read it back:
168
207
  await runtime.admin.overview(); // threads and runs by state, plus what's in flight
169
208
  await runtime.admin.listRuns({ state: ['FAILED'], since });
170
209
  await runtime.admin.stats({ since }); // p50/p95 duration and queue wait, tokens, failures
171
- await runtime.admin.getRun(runId); // one run: steps, nested runs, timeline
210
+ await runtime.admin.getRun(runId); // one run: steps, nested runs, timeline, spend
172
211
  ```
173
212
 
213
+ Its schema migrates itself, from numbered migration files. `setupAgentCore`
214
+ opens the connection and returns; the schema is brought up to date behind it,
215
+ and every admin call waits for that before its first query. Several workers
216
+ starting at once queue on a Postgres advisory lock rather than racing. An
217
+ existing database needs nothing: migration `0001` is the schema as it stood
218
+ before the migrator. Your own `Storage` is never touched by any of this.
219
+
174
220
  Configure nothing and it is SQLite on disk (`AGENTIC_KIT_ADMIN_DB` moves the file).
175
221
  Set `AGENTIC_KIT_ADMIN_DATABASE_URL` and it is Postgres — point it at its own database
176
222
  or the one you already have; the `agentic_` table prefix keeps them apart. `pg` is an
@@ -1,4 +1,4 @@
1
- import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewUsage, RunJob, ThreadDTO, UsageTotals } from '../core/types.js';
1
+ import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewUsage, RunJob, ThreadDTO, UsageFilter, UsageTotals } from '../core/types.js';
2
2
  import type { Storage } from '../ports/storage.js';
3
3
  import type { EventBus } from '../ports/bus.js';
4
4
  import type { EnqueueOptions, Queue } from '../ports/queue.js';
@@ -68,7 +68,7 @@ export declare class MemoryStorage implements Storage {
68
68
  threadId: string;
69
69
  })[];
70
70
  record(t: string, u: NewUsage): Promise<void>;
71
- total(t: string): Promise<UsageTotals>;
71
+ total(t: string, filter?: UsageFilter): Promise<UsageTotals>;
72
72
  };
73
73
  }
74
74
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrI,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAKzC;;0CAE0C;AAC1C,qBAAa,QAAS,YAAW,EAAE;IACjC,OAAO,CAAC,CAAC,CAA+B;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM;IAMf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAWxF,GAAG,CAAC,GAAG,EAAE,MAAM;IACf,IAAI,CAAC,GAAG,EAAE,MAAM;CAOvB;AAED,kFAAkF;AAClF,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAmD;IAC/D,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,CAAM;IAEhC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAI3C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;IAMlE;8DAC0D;IAC1D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGtC;AAED;wFACwF;AACxF,qBAAa,WAAY,YAAW,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAM;IAC1C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAI1C,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAUtE;AAED,iFAAiF;AACjF,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO;;eAEQ,MAAM;sBACC;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;oBASpB,MAAM,SAAS,cAAc;oBAQ7B,MAAM;sBAOJ,MAAM,QAAQ,cAAc,MAAM,cAAc;MAMpE;IAEF,QAAQ;;kBAEU,MAAM,KAAK,UAAU;gBAUvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;sBAKpC,MAAM,aAAa,MAAM;MAM7C;IAEF,MAAM;;kBAEY,MAAM,KAAK,UAAU;qBAKlB,MAAM,YAAY,MAAM;kBAI3B,MAAM,QAAQ,MAAM;sBAKhB,MAAM,QAAQ,MAAM;MAIxC;IAEF,KAAK;kBACa,CAAC,QAAQ,GAAG;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE;kBACnC,MAAM,KAAK,QAAQ;iBACpB,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;MAa5C;CAIH"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAElJ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAKzC;;0CAE0C;AAC1C,qBAAa,QAAS,YAAW,EAAE;IACjC,OAAO,CAAC,CAAC,CAA+B;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM;IAMf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;IAWxF,GAAG,CAAC,GAAG,EAAE,MAAM;IACf,IAAI,CAAC,GAAG,EAAE,MAAM;CAOvB;AAED,kFAAkF;AAClF,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAmD;IAC/D,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,CAAM;IAEhC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAI3C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;IAMlE;8DAC0D;IAC1D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGtC;AAED;wFACwF;AACxF,qBAAa,WAAY,YAAW,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAM;IAC1C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAI1C,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAUtE;AAED,iFAAiF;AACjF,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO;;eAEQ,MAAM;sBACC;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;oBASpB,MAAM,SAAS,cAAc;oBAQ7B,MAAM;sBAOJ,MAAM,QAAQ,cAAc,MAAM,cAAc;MAMpE;IAEF,QAAQ;;kBAEU,MAAM,KAAK,UAAU;gBAUvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;sBAKpC,MAAM,aAAa,MAAM;MAM7C;IAEF,MAAM;;kBAEY,MAAM,KAAK,UAAU;qBAKlB,MAAM,YAAY,MAAM;kBAI3B,MAAM,QAAQ,MAAM;sBAKhB,MAAM,QAAQ,MAAM;MAIxC;IAEF,KAAK;kBACa,CAAC,QAAQ,GAAG;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE;kBACnC,MAAM,KAAK,QAAQ;iBACpB,MAAM,WAAU,WAAW,GAAQ,OAAO,CAAC,WAAW,CAAC;MAOtE;CAIH"}
@@ -1,3 +1,4 @@
1
+ import { sumUsage } from '../core/usage.js';
1
2
  const id = () => Math.random().toString(36).slice(2, 12);
2
3
  /** In-memory Kv — tests and local prototyping. Expiry is enforced lazily on
3
4
  * read; incr is synchronous internally, so concurrent callers can never
@@ -179,15 +180,8 @@ export class MemoryStorage {
179
180
  usage = {
180
181
  recorded: [],
181
182
  async record(t, u) { this.recorded.push({ threadId: t, ...u }); },
182
- async total(t) {
183
- return this.recorded
184
- .filter((u) => u.threadId === t)
185
- .reduce((sum, u) => ({
186
- inputTokens: sum.inputTokens + u.inputTokens,
187
- cachedInputTokens: sum.cachedInputTokens + u.cachedInputTokens,
188
- outputTokens: sum.outputTokens + u.outputTokens,
189
- totalTokens: sum.totalTokens + u.totalTokens,
190
- }), { inputTokens: 0, cachedInputTokens: 0, outputTokens: 0, totalTokens: 0 });
183
+ async total(t, filter = {}) {
184
+ return sumUsage(this.recorded.filter((u) => u.threadId === t && (!filter.runId || u.runId === filter.runId)));
191
185
  },
192
186
  };
193
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAM5C,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAGzD;;0CAE0C;AAC1C,MAAM,OAAO,QAAQ;IACX,CAAC,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACjF,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,IAAwD;QAC5F,IAAI,IAAI,EAAE,eAAe,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;YACd,KAAK;YACL,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,kEAAkE;QAClE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,kFAAkF;AAClF,MAAM,OAAO,SAAS;IACZ,IAAI,GAAG,IAAI,GAAG,EAAwC,CAAC;IACtD,SAAS,GAAiB,EAAE,CAAC;IAEtC,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,KAAiB;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;YAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAgC;QAChE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAC5D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE,GAAG,GAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD;8DAC0D;IAC1D,WAAW,CAAC,QAAgB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAED;wFACwF;AACxF,MAAM,OAAO,WAAW;IACb,KAAK,GAAa,EAAE,CAAC;IAC9B,wEAAwE;IAC/D,MAAM,GAA8B,EAAE,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAqB;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,OAAuC;QACjD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,OAAO,aAAa;IACxB,OAAO,GAAG;QACR,KAAK,EAAE,IAAI,GAAG,EAAqB;QACnC,KAAK,CAAC,GAAG,CAAC,CAAS,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,MAAM,CAAC,IAAyB;YACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACjH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,CAAS,EAAE,KAAqB;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAAC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,qEAAqE;QACrE,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,CAAS,EAAE,IAAoB,EAAE,EAAkB;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACnD,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,QAAQ,GAAG;QACT,KAAK,EAAE,IAAI,GAAG,EAAwB;QACtC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,CAAa;YACnC,MAAM,GAAG,GAAe;gBACtB,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;gBACjD,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE;aACxD,CAAC;YACF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAS,EAAE,IAAkC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,CAAS,EAAE,SAAiB;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YACvD,IAAI,IAAI,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAClC,CAAC;KACF,CAAC;IAEF,MAAM,GAAG;QACP,KAAK,EAAE,IAAI,GAAG,EAAwB;QACtC,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,CAAa;YACnC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,QAAgB;YACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC;iBAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,IAAY;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,CAAS,EAAE,IAAY;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;iBAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;IAEF,KAAK,GAAG;QACN,QAAQ,EAAE,EAAyC;QACnD,KAAK,CAAC,MAAM,CAAC,CAAS,EAAE,CAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,KAAK,CAAC,CAAS,EAAE,SAAsB,EAAE;YAC7C,OAAO,QAAQ,CACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CACvE,CACF,CAAC;QACJ,CAAC;KACF,CAAC;CAIH"}
@@ -1,4 +1,4 @@
1
- import type { AgentEvent, ExecutionState, NewMessage, NewUsage, ThreadDTO, UsageTotals } from '../core/types.js';
1
+ import type { AgentEvent, ExecutionState, NewMessage, NewUsage, ThreadDTO, UsageFilter, UsageTotals } from '../core/types.js';
2
2
  import type { Storage } from '../ports/storage.js';
3
3
  /** Minimal structural type of the Prisma client surface we use. The real
4
4
  * `PrismaClient` satisfies it — no SDK import needed in the package. */
@@ -119,25 +119,68 @@ export interface PrismaLike {
119
119
  };
120
120
  tokenUsage: {
121
121
  create(a: {
122
- data: NewUsage & {
123
- threadId: string;
124
- };
122
+ data: TokenUsageRow;
125
123
  }): Promise<unknown>;
126
- aggregate(a: {
127
- where: {
128
- threadId: string;
129
- };
130
- _sum: {
131
- inputTokens: true;
132
- cachedInputTokens: true;
133
- outputTokens: true;
134
- totalTokens: true;
135
- };
136
- }): Promise<{
137
- _sum: Partial<Record<keyof UsageTotals, number | null>>;
138
- }>;
124
+ /** One grouped read rather than every row: a long thread holds a usage row
125
+ * per model call (§4), and the bill only ever wants them by agent and
126
+ * model.
127
+ *
128
+ * Loosely typed on purpose. Prisma generates `groupBy` with a chain of
129
+ * conditional generics that no hand-written signature can mirror, so a
130
+ * precise one here would make the real PrismaClient fail to satisfy this
131
+ * interface. The RESULT is typed, which is the half the adapter reads. */
132
+ groupBy(a: any): Promise<UsageGroupRow[]>;
133
+ /** The two figures a groupBy cannot give: how many calls were estimated
134
+ * or unpriced (a conditional count), and which currency the priced
135
+ * rows are in. Loosely typed for the same reason as groupBy. */
136
+ count(a: any): Promise<number>;
137
+ findFirst(a: any): Promise<{
138
+ costCurrency: string | null;
139
+ } | null>;
139
140
  };
140
141
  }
142
+ /** The row this adapter writes. `cachedInputTokens` holds cache READS, keeping
143
+ * the column that was already there meaning what it always meant; cache
144
+ * writes are their own column beside it. A null `costMicros` is an unpriced
145
+ * call, which is not the same as one that cost nothing. */
146
+ export interface TokenUsageRow {
147
+ threadId: string;
148
+ runId: string | null;
149
+ agentId: string | null;
150
+ agentName: string | null;
151
+ kind: string;
152
+ step: number;
153
+ model: string | null;
154
+ modelId: string | null;
155
+ inputTokens: number;
156
+ cachedInputTokens: number;
157
+ cacheWriteInputTokens: number;
158
+ outputTokens: number;
159
+ reasoningTokens: number;
160
+ totalTokens: number;
161
+ outcome: string;
162
+ estimated: boolean;
163
+ /** Typed loosely on purpose: Prisma's JSON input is a recursive generated
164
+ * union (`InputJsonValue`) that no hand-written interface can mirror, so a
165
+ * precise type here makes the real PrismaClient fail to satisfy this. */
166
+ providerMetadata: any;
167
+ /** Millionths of `costCurrency`; null is an unpriced call. Declare the
168
+ * column as BigInt: a thread's summed spend outgrows a 4-byte Int. */
169
+ costMicros: number | null;
170
+ costCurrency: string | null;
171
+ costSource: string | null;
172
+ }
173
+ /** One group of the read above. */
174
+ export interface UsageGroupRow {
175
+ agentId: string | null;
176
+ agentName: string | null;
177
+ model: string | null;
178
+ modelId: string | null;
179
+ _count: number;
180
+ /** BigInt columns come back as `bigint`, so every figure is coerced before
181
+ * it is summed — mixing `bigint` and `number` arithmetic throws. */
182
+ _sum: Record<string, number | bigint | null>;
183
+ }
141
184
  /** Reference Storage adapter over PostgreSQL/Prisma (schema in the README / spec §2.4). */
142
185
  export declare class PrismaStorage implements Storage {
143
186
  private readonly prisma;
@@ -169,7 +212,7 @@ export declare class PrismaStorage implements Storage {
169
212
  listByType: (threadId: string, type: string) => Promise<AgentEvent[]>;
170
213
  };
171
214
  usage: {
172
- total: (threadId: string) => Promise<UsageTotals>;
215
+ total: (threadId: string, filter?: UsageFilter) => Promise<UsageTotals>;
173
216
  record: (threadId: string, usage: NewUsage) => Promise<void>;
174
217
  };
175
218
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { emptyTotals } from '../core/usage.js';
1
2
  /** Reference Storage adapter over PostgreSQL/Prisma (schema in the README / spec §2.4). */
2
3
  export class PrismaStorage {
3
4
  prisma;
@@ -71,34 +72,82 @@ export class PrismaStorage {
71
72
  listByType: (threadId, type) => this.prisma.agentEvent.findMany({ where: { threadId, type }, orderBy: { seq: 'asc' } }),
72
73
  };
73
74
  usage = {
74
- total: async (threadId) => {
75
- // One aggregate rather than reading every row: a long thread can hold a
76
- // usage row per run segment (§4).
77
- const { _sum } = await this.prisma.tokenUsage.aggregate({
78
- where: { threadId },
75
+ total: async (threadId, filter = {}) => {
76
+ const groups = await this.prisma.tokenUsage.groupBy({
77
+ by: ['agentId', 'agentName', 'model', 'modelId'],
78
+ where: { threadId, ...(filter.runId ? { runId: filter.runId } : {}) },
79
79
  _sum: {
80
- inputTokens: true,
81
- cachedInputTokens: true,
82
- outputTokens: true,
83
- totalTokens: true,
80
+ inputTokens: true, cachedInputTokens: true, cacheWriteInputTokens: true,
81
+ outputTokens: true, reasoningTokens: true, totalTokens: true, costMicros: true,
84
82
  },
83
+ _count: true,
85
84
  });
86
- return {
87
- inputTokens: _sum.inputTokens ?? 0,
88
- cachedInputTokens: _sum.cachedInputTokens ?? 0,
89
- outputTokens: _sum.outputTokens ?? 0,
90
- totalTokens: _sum.totalTokens ?? 0,
91
- };
85
+ const where = { threadId, ...(filter.runId ? { runId: filter.runId } : {}) };
86
+ // The figures a grouped sum cannot carry: which calls were guesses,
87
+ // which were never priced, and what unit the money is in. Read
88
+ // alongside the groups rather than hardcoded, so a bill can tell
89
+ // "spent nothing" from "nobody priced this".
90
+ const [estimatedByGroup, unpriced, first] = await Promise.all([
91
+ this.prisma.tokenUsage.groupBy({
92
+ by: ['agentId', 'agentName', 'model', 'modelId'],
93
+ where: { ...where, estimated: true },
94
+ _count: true,
95
+ }),
96
+ this.prisma.tokenUsage.count({ where: { ...where, costMicros: null } }),
97
+ this.prisma.tokenUsage.findFirst({
98
+ where: { ...where, costCurrency: { not: null } },
99
+ orderBy: { createdAt: 'asc' },
100
+ select: { costCurrency: true },
101
+ }),
102
+ ]);
103
+ const estimatedOf = new Map(estimatedByGroup.map((g) => [`${g.agentId}|${g.agentName}|${g.model}|${g.modelId}`, g._count]));
104
+ const out = emptyTotals();
105
+ out.unpriced = unpriced;
106
+ out.currency = first?.costCurrency ?? undefined;
107
+ for (const g of groups) {
108
+ const n = (k) => Number(g._sum[k] ?? 0);
109
+ out.inputTokens += n('inputTokens');
110
+ out.cachedInputTokens += n('cachedInputTokens');
111
+ out.outputTokens += n('outputTokens');
112
+ out.totalTokens += n('totalTokens');
113
+ out.costMicros += n('costMicros');
114
+ out.lines.push({
115
+ agentId: g.agentId, agentName: g.agentName, model: g.model, modelId: g.modelId,
116
+ inputTokens: n('inputTokens'),
117
+ cacheReadInputTokens: n('cachedInputTokens'),
118
+ cacheWriteInputTokens: n('cacheWriteInputTokens'),
119
+ outputTokens: n('outputTokens'),
120
+ reasoningTokens: n('reasoningTokens'),
121
+ calls: g._count,
122
+ estimated: estimatedOf.get(`${g.agentId}|${g.agentName}|${g.model}|${g.modelId}`) ?? 0,
123
+ costMicros: n('costMicros'),
124
+ });
125
+ }
126
+ return out;
92
127
  },
93
128
  record: async (threadId, usage) => {
94
129
  await this.prisma.tokenUsage.create({
95
130
  data: {
96
131
  threadId,
132
+ runId: usage.runId ?? null,
97
133
  agentId: usage.agentId ?? null,
134
+ agentName: usage.agentName ?? null,
135
+ kind: usage.kind,
136
+ step: usage.step,
137
+ model: usage.model ?? null,
138
+ modelId: usage.modelId ?? null,
98
139
  inputTokens: usage.inputTokens,
99
- cachedInputTokens: usage.cachedInputTokens,
140
+ cachedInputTokens: usage.cacheReadInputTokens,
141
+ cacheWriteInputTokens: usage.cacheWriteInputTokens,
100
142
  outputTokens: usage.outputTokens,
143
+ reasoningTokens: usage.reasoningTokens,
101
144
  totalTokens: usage.totalTokens,
145
+ outcome: usage.outcome,
146
+ estimated: usage.estimated ?? false,
147
+ providerMetadata: usage.providerMetadata ?? null,
148
+ costMicros: usage.cost?.micros ?? null,
149
+ costCurrency: usage.cost?.currency ?? null,
150
+ costSource: usage.cost?.source ?? null,
102
151
  },
103
152
  });
104
153
  },
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkG/C,2FAA2F;AAC3F,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,OAAO,GAAG;QACR,GAAG,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrF,MAAM,EAAE,CAAC,IAAyB,EAAE,EAAE,CACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,IAAI,EAAE,GAAG,EAAE,CACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;QACjE,QAAQ,EAAE,KAAK,EAAE,QAAgB,EAAE,KAAqB,EAAE,EAAE;YAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,IAAoB,EAAE,EAAkB,EAAE,EAAE;YAC/E,4DAA4D;YAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC9C,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;gBACpC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;aACpB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE;QAC3B,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KAC/E,CAAC;IAEF,QAAQ,GAAG;QACT,MAAM,EAAE,CAAC,QAAgB,EAAE,CAAa,EAAE,EAAE,CAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;SACjF,CAAC;QACJ,IAAI,EAAE,CAAC,QAAgB,EAAE,IAAkC,EAAE,EAAE,CAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC3B,sEAAsE;YACtE,2DAA2D;YAC3D,KAAK,EAAE;gBACL,QAAQ;gBACR,GAAG,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE;YACD,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC9B,CAAC;QACJ,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,SAAiB,EAAE,EAAE;YACxD,iEAAiE;YACjE,kEAAkE;YAClE,0DAA0D;YAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC9C,KAAK,EAAE,EAAE,QAAQ,EAAE;gBACnB,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;aAC9B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YACvE,IAAI,IAAI,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;aACzE,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;IAEF,MAAM,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,KAAiB,EAAE,EAAE;YACpD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;gBAClC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;aAC7E,CAAC,CAAC;QACL,CAAC;QACD,SAAS,EAAE,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAAE,CAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC9B,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;YAC1C,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;SACxB,CAAC;QACJ,MAAM,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE,CACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAC/B,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzB,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SACzB,CAAC;QACJ,UAAU,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE,CAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;KAC1F,CAAC;IAEF,KAAK,GAAG;QACN,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,SAAsB,EAAE,EAAwB,EAAE;YAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC;gBAChD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACrE,IAAI,EAAE;oBACJ,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI;oBACvE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;iBAC/E;gBACD,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7E,oEAAoE;YACpE,+DAA+D;YAC/D,iEAAiE;YACjE,6CAA6C;YAC7C,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC7B,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC;oBAChD,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;oBACpC,MAAM,EAAE,IAAI;iBACb,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC/B,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBAChD,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC7B,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;iBAC/B,CAAC;aACH,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC/F,CAAC;YACF,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;YAC1B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxB,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,YAAY,IAAI,SAAS,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChD,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;gBACpC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBAChD,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;gBACtC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;gBACpC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;gBAClC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAC9E,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC;oBAC7B,oBAAoB,EAAE,CAAC,CAAC,mBAAmB,CAAC;oBAC5C,qBAAqB,EAAE,CAAC,CAAC,uBAAuB,CAAC;oBACjD,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC;oBAC/B,eAAe,EAAE,CAAC,CAAC,iBAAiB,CAAC;oBACrC,KAAK,EAAE,CAAC,CAAC,MAAM;oBACf,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;oBACtF,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,KAAe,EAAE,EAAE;YAClD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;gBAClC,IAAI,EAAE;oBACJ,QAAQ;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;oBAClC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;oBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,iBAAiB,EAAE,KAAK,CAAC,oBAAoB;oBAC7C,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;oBAClD,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;oBACnC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;oBAChD,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;oBACtC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI;oBAC1C,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;iBACvC;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;CAIH"}
@@ -1,4 +1,4 @@
1
- import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewUsage, ThreadDTO, UsageTotals } from '../core/types.js';
1
+ import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewUsage, ThreadDTO, UsageFilter, UsageTotals } from '../core/types.js';
2
2
  import type { Storage } from '../ports/storage.js';
3
3
  /** Minimal structural type over a synchronous SQLite handle — `bun:sqlite`'s
4
4
  * `Database` satisfies it. Kept structural for the same reason every other
@@ -30,6 +30,7 @@ export declare function openSqlite(filename?: string): Promise<SqliteLike>;
30
30
  export declare class SqliteStorage implements Storage {
31
31
  private readonly db;
32
32
  constructor(db: SqliteLike);
33
+ private addMissing;
33
34
  private all;
34
35
  private one;
35
36
  private write;
@@ -61,7 +62,7 @@ export declare class SqliteStorage implements Storage {
61
62
  };
62
63
  usage: {
63
64
  record: (threadId: string, u: NewUsage) => Promise<void>;
64
- total: (threadId: string) => Promise<UsageTotals>;
65
+ total: (threadId: string, filter?: UsageFilter) => Promise<UsageTotals>;
65
66
  };
66
67
  }
67
68
  //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EACrF,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;mBAImB;AACnB,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACrC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;8EAO8E;AAC9E,wBAAsB,UAAU,CAAC,QAAQ,SAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrF;AA+CD;;+DAE+D;AAC/D,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,UAAU;IAO3C,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ,CAGb;IACH,OAAO,CAAC,SAAS,CAGd;IACH,OAAO,CAAC,OAAO,CAGE;IACjB,OAAO;wBACiB,MAAM;wBAIN;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;6BAab,MAAM,SAAS,cAAc;2BAI/B,MAAM;+BAQF,MAAM,QAAQ,cAAc,MAAM,cAAc;MAU7E;IAEF,QAAQ;2BACmB,MAAM,KAAK,UAAU;yBAiBvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;+BAYpC,MAAM,aAAa,MAAM;MAStD;IAEF,MAAM;2BACqB,MAAM,KAAK,UAAU;8BAIlB,MAAM,YAAY,MAAM;2BAG3B,MAAM,QAAQ,MAAM;+BAMhB,MAAM,QAAQ,MAAM;MAGjD;IAEF,KAAK;2BACsB,MAAM,KAAK,QAAQ;0BAOpB,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC;MAUrD;CAIH"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAClG,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;mBAImB;AACnB,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACrC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;8EAO8E;AAC9E,wBAAsB,UAAU,CAAC,QAAQ,SAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrF;AA8DD;;+DAE+D;AAC/D,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,UAAU;IA2B3C,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ,CAGb;IACH,OAAO,CAAC,SAAS,CAGd;IACH,OAAO,CAAC,OAAO,CAGE;IACjB,OAAO;wBACiB,MAAM;wBAIN;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;6BAab,MAAM,SAAS,cAAc;2BAI/B,MAAM;+BAQF,MAAM,QAAQ,cAAc,MAAM,cAAc;MAU7E;IAEF,QAAQ;2BACmB,MAAM,KAAK,UAAU;yBAiBvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;+BAYpC,MAAM,aAAa,MAAM;MAStD;IAEF,MAAM;2BACqB,MAAM,KAAK,UAAU;8BAIlB,MAAM,YAAY,MAAM;2BAG3B,MAAM,QAAQ,MAAM;+BAMhB,MAAM,QAAQ,MAAM;MAGjD;IAEF,KAAK;2BACsB,MAAM,KAAK,QAAQ;0BAmBpB,MAAM,WAAU,WAAW,KAAQ,OAAO,CAAC,WAAW,CAAC;MAkC/E;CAIH"}
@@ -1,4 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ import { emptyTotals } from '../core/usage.js';
2
3
  /** Open a SQLite handle with whichever driver the process has: `bun:sqlite`
3
4
  * first, then `node:sqlite`. Preferring one and requiring it are different
4
5
  * things — a Next.js server runs on Node even inside a Bun workspace, which
@@ -49,12 +50,27 @@ CREATE TABLE IF NOT EXISTS events (
49
50
  );
50
51
  CREATE INDEX IF NOT EXISTS events_thread_seq ON events(threadId, seq);
51
52
  CREATE INDEX IF NOT EXISTS events_thread_type ON events(threadId, type, seq);
53
+ -- One row per MODEL CALL, not per run segment. cachedInputTokens holds cache
54
+ -- READS, so the column that was already there still means what it always
55
+ -- meant, and cache writes get their own column beside it. A NULL costMicros
56
+ -- is an unpriced call, which is not the same as one that cost nothing.
57
+ -- (Statements here are split on the semicolon, so never write one in a
58
+ -- comment.)
52
59
  CREATE TABLE IF NOT EXISTS usage (
53
- id TEXT PRIMARY KEY, threadId TEXT NOT NULL, agentId TEXT,
60
+ id TEXT PRIMARY KEY, threadId TEXT NOT NULL, runId TEXT, agentId TEXT, agentName TEXT,
61
+ kind TEXT NOT NULL DEFAULT 'step', step INTEGER NOT NULL DEFAULT 0,
62
+ model TEXT, modelId TEXT,
54
63
  inputTokens INTEGER NOT NULL, cachedInputTokens INTEGER NOT NULL,
55
- outputTokens INTEGER NOT NULL, totalTokens INTEGER NOT NULL, createdAt INTEGER NOT NULL
64
+ cacheWriteInputTokens INTEGER NOT NULL DEFAULT 0,
65
+ outputTokens INTEGER NOT NULL, reasoningTokens INTEGER NOT NULL DEFAULT 0,
66
+ totalTokens INTEGER NOT NULL,
67
+ outcome TEXT NOT NULL DEFAULT 'finished', estimated INTEGER NOT NULL DEFAULT 0,
68
+ providerMetadata TEXT,
69
+ costMicros INTEGER, costCurrency TEXT, costSource TEXT,
70
+ createdAt INTEGER NOT NULL
56
71
  );
57
72
  CREATE INDEX IF NOT EXISTS usage_thread ON usage(threadId);
73
+ CREATE INDEX IF NOT EXISTS usage_run ON usage(runId, createdAt);
58
74
  CREATE TABLE IF NOT EXISTS runs (
59
75
  id TEXT PRIMARY KEY, threadId TEXT NOT NULL, parentRunId TEXT,
60
76
  depth INTEGER NOT NULL DEFAULT 0, agent TEXT NOT NULL, model TEXT NOT NULL,
@@ -81,6 +97,33 @@ export class SqliteStorage {
81
97
  if (sql)
82
98
  this.db.prepare(sql).run();
83
99
  }
100
+ // CREATE TABLE IF NOT EXISTS leaves an existing table as it was, so a
101
+ // usage table from before cost moved onto it (§4) gets its new columns
102
+ // here. Idempotent: a column that exists is skipped.
103
+ this.addMissing('usage', {
104
+ runId: 'TEXT',
105
+ agentName: 'TEXT',
106
+ kind: "TEXT NOT NULL DEFAULT 'step'",
107
+ step: 'INTEGER NOT NULL DEFAULT 0',
108
+ model: 'TEXT',
109
+ modelId: 'TEXT',
110
+ cacheWriteInputTokens: 'INTEGER NOT NULL DEFAULT 0',
111
+ reasoningTokens: 'INTEGER NOT NULL DEFAULT 0',
112
+ outcome: "TEXT NOT NULL DEFAULT 'finished'",
113
+ estimated: 'INTEGER NOT NULL DEFAULT 0',
114
+ providerMetadata: 'TEXT',
115
+ costMicros: 'INTEGER',
116
+ costCurrency: 'TEXT',
117
+ costSource: 'TEXT',
118
+ });
119
+ this.db.prepare('CREATE INDEX IF NOT EXISTS usage_run ON usage(runId, createdAt)').run();
120
+ }
121
+ addMissing(table, cols) {
122
+ const have = new Set(this.db.prepare(`PRAGMA table_info(${table})`).all().map((c) => c.name));
123
+ for (const [col, type] of Object.entries(cols)) {
124
+ if (!have.has(col))
125
+ this.db.prepare(`ALTER TABLE ${table} ADD COLUMN ${col} ${type}`).run();
126
+ }
84
127
  }
85
128
  all(sql, ...p) {
86
129
  return this.db.prepare(sql).all(...p);
@@ -183,16 +226,44 @@ export class SqliteStorage {
183
226
  };
184
227
  usage = {
185
228
  record: async (threadId, u) => {
186
- this.write('INSERT INTO usage (id,threadId,agentId,inputTokens,cachedInputTokens,outputTokens,totalTokens,createdAt) VALUES (?,?,?,?,?,?,?,?)', randomUUID(), threadId, u.agentId ?? null, u.inputTokens, u.cachedInputTokens, u.outputTokens, u.totalTokens, Date.now());
229
+ this.write(`INSERT INTO usage (id,threadId,runId,agentId,agentName,kind,step,model,modelId,
230
+ inputTokens,cachedInputTokens,cacheWriteInputTokens,outputTokens,reasoningTokens,
231
+ totalTokens,outcome,estimated,providerMetadata,costMicros,costCurrency,costSource,createdAt)
232
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, randomUUID(), threadId, u.runId ?? null, u.agentId ?? null, u.agentName ?? null, u.kind, u.step, u.model ?? null, u.modelId ?? null, u.inputTokens, u.cacheReadInputTokens, u.cacheWriteInputTokens, u.outputTokens, u.reasoningTokens, u.totalTokens, u.outcome, u.estimated ? 1 : 0, u.providerMetadata ? JSON.stringify(u.providerMetadata) : null, u.cost?.micros ?? null, u.cost?.currency ?? null, u.cost?.source ?? null, Date.now());
187
233
  },
188
- total: async (threadId) => {
189
- const r = this.one(`SELECT COALESCE(SUM(inputTokens),0) AS i, COALESCE(SUM(cachedInputTokens),0) AS c,
190
- COALESCE(SUM(outputTokens),0) AS o, COALESCE(SUM(totalTokens),0) AS t
191
- FROM usage WHERE threadId = ?`, threadId);
192
- return {
193
- inputTokens: r?.i ?? 0, cachedInputTokens: r?.c ?? 0,
194
- outputTokens: r?.o ?? 0, totalTokens: r?.t ?? 0,
195
- };
234
+ // One grouped read rather than every row: a long thread holds a usage row
235
+ // per model call (§4), and the bill only ever wants them by agent and
236
+ // model. Summing the groups gives the totals, so the two always agree.
237
+ total: async (threadId, filter = {}) => {
238
+ const rows = this.all(`SELECT COALESCE(agentId,'') AS agentId, COALESCE(agentName,'') AS agentName,
239
+ COALESCE(model,'') AS model, COALESCE(modelId,'') AS modelId,
240
+ COALESCE(SUM(inputTokens),0) AS i, COALESCE(SUM(cachedInputTokens),0) AS cr,
241
+ COALESCE(SUM(cacheWriteInputTokens),0) AS cw, COALESCE(SUM(outputTokens),0) AS o,
242
+ COALESCE(SUM(reasoningTokens),0) AS rt, COALESCE(SUM(totalTokens),0) AS t,
243
+ COUNT(*) AS calls, COALESCE(SUM(estimated),0) AS est,
244
+ COALESCE(SUM(costMicros),0) AS cost, MAX(costCurrency) AS currency,
245
+ COALESCE(SUM(CASE WHEN costMicros IS NULL THEN 1 ELSE 0 END),0) AS unpriced
246
+ FROM usage WHERE threadId = ?${filter.runId ? ' AND runId = ?' : ''}
247
+ GROUP BY agentId, agentName, model, modelId
248
+ ORDER BY MIN(createdAt)`, ...(filter.runId ? [threadId, filter.runId] : [threadId]));
249
+ const out = emptyTotals();
250
+ for (const r of rows) {
251
+ out.inputTokens += r.i;
252
+ out.cachedInputTokens += r.cr;
253
+ out.outputTokens += r.o;
254
+ out.totalTokens += r.t;
255
+ out.costMicros += r.cost;
256
+ out.unpriced += r.unpriced;
257
+ out.currency ??= r.currency ?? undefined;
258
+ out.lines.push({
259
+ agentId: r.agentId || null, agentName: r.agentName || null,
260
+ model: r.model || null, modelId: r.modelId || null,
261
+ inputTokens: r.i, cacheReadInputTokens: r.cr, cacheWriteInputTokens: r.cw,
262
+ outputTokens: r.o, reasoningTokens: r.rt,
263
+ calls: r.calls, estimated: r.est, costMicros: r.cost,
264
+ });
265
+ }
266
+ return out;
196
267
  },
197
268
  };
198
269
  }