@evelinka-ai/core 0.1.3

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 (130) hide show
  1. package/README.md +16 -0
  2. package/dist/agent-lib/llm-semaphore.d.ts +47 -0
  3. package/dist/agent-lib/llm-semaphore.d.ts.map +1 -0
  4. package/dist/agent-lib/llm-semaphore.js +255 -0
  5. package/dist/agent-lib/llm-semaphore.js.map +1 -0
  6. package/dist/agent-lib/managed-tool.d.ts +29 -0
  7. package/dist/agent-lib/managed-tool.d.ts.map +1 -0
  8. package/dist/agent-lib/managed-tool.js +28 -0
  9. package/dist/agent-lib/managed-tool.js.map +1 -0
  10. package/dist/channels/catalog.d.ts +3 -0
  11. package/dist/channels/catalog.d.ts.map +1 -0
  12. package/dist/channels/catalog.js +20 -0
  13. package/dist/channels/catalog.js.map +1 -0
  14. package/dist/channels/model-catalog.d.ts +3 -0
  15. package/dist/channels/model-catalog.d.ts.map +1 -0
  16. package/dist/channels/model-catalog.js +6 -0
  17. package/dist/channels/model-catalog.js.map +1 -0
  18. package/dist/channels/usage.d.ts +3 -0
  19. package/dist/channels/usage.d.ts.map +1 -0
  20. package/dist/channels/usage.js +35 -0
  21. package/dist/channels/usage.js.map +1 -0
  22. package/dist/lib/atomic-file.d.ts +2 -0
  23. package/dist/lib/atomic-file.d.ts.map +1 -0
  24. package/dist/lib/atomic-file.js +16 -0
  25. package/dist/lib/atomic-file.js.map +1 -0
  26. package/dist/lib/budgets/record-call-usage.d.ts +31 -0
  27. package/dist/lib/budgets/record-call-usage.d.ts.map +1 -0
  28. package/dist/lib/budgets/record-call-usage.js +44 -0
  29. package/dist/lib/budgets/record-call-usage.js.map +1 -0
  30. package/dist/lib/budgets/token-budget.d.ts +61 -0
  31. package/dist/lib/budgets/token-budget.d.ts.map +1 -0
  32. package/dist/lib/budgets/token-budget.js +250 -0
  33. package/dist/lib/budgets/token-budget.js.map +1 -0
  34. package/dist/lib/budgets/token-usage-pg.d.ts +96 -0
  35. package/dist/lib/budgets/token-usage-pg.d.ts.map +1 -0
  36. package/dist/lib/budgets/token-usage-pg.js +305 -0
  37. package/dist/lib/budgets/token-usage-pg.js.map +1 -0
  38. package/dist/lib/budgets/usage.d.ts +103 -0
  39. package/dist/lib/budgets/usage.d.ts.map +1 -0
  40. package/dist/lib/budgets/usage.js +151 -0
  41. package/dist/lib/budgets/usage.js.map +1 -0
  42. package/dist/lib/control-plane/call-context.d.ts +7 -0
  43. package/dist/lib/control-plane/call-context.d.ts.map +1 -0
  44. package/dist/lib/control-plane/call-context.js +9 -0
  45. package/dist/lib/control-plane/call-context.js.map +1 -0
  46. package/dist/lib/control-plane/catalog.d.ts +33 -0
  47. package/dist/lib/control-plane/catalog.d.ts.map +1 -0
  48. package/dist/lib/control-plane/catalog.js +163 -0
  49. package/dist/lib/control-plane/catalog.js.map +1 -0
  50. package/dist/lib/control-plane/flow-settings.d.ts +32 -0
  51. package/dist/lib/control-plane/flow-settings.d.ts.map +1 -0
  52. package/dist/lib/control-plane/flow-settings.js +139 -0
  53. package/dist/lib/control-plane/flow-settings.js.map +1 -0
  54. package/dist/lib/control-plane/tools-config.d.ts +30 -0
  55. package/dist/lib/control-plane/tools-config.d.ts.map +1 -0
  56. package/dist/lib/control-plane/tools-config.js +104 -0
  57. package/dist/lib/control-plane/tools-config.js.map +1 -0
  58. package/dist/lib/delivery/push-store.d.ts +20 -0
  59. package/dist/lib/delivery/push-store.d.ts.map +1 -0
  60. package/dist/lib/delivery/push-store.js +74 -0
  61. package/dist/lib/delivery/push-store.js.map +1 -0
  62. package/dist/lib/delivery/push.d.ts +15 -0
  63. package/dist/lib/delivery/push.d.ts.map +1 -0
  64. package/dist/lib/delivery/push.js +97 -0
  65. package/dist/lib/delivery/push.js.map +1 -0
  66. package/dist/lib/delivery/schedule-lock.d.ts +16 -0
  67. package/dist/lib/delivery/schedule-lock.d.ts.map +1 -0
  68. package/dist/lib/delivery/schedule-lock.js +86 -0
  69. package/dist/lib/delivery/schedule-lock.js.map +1 -0
  70. package/dist/lib/memory/memory-dream.d.ts +181 -0
  71. package/dist/lib/memory/memory-dream.d.ts.map +1 -0
  72. package/dist/lib/memory/memory-dream.js +405 -0
  73. package/dist/lib/memory/memory-dream.js.map +1 -0
  74. package/dist/lib/memory/memory-vault-git.d.ts +14 -0
  75. package/dist/lib/memory/memory-vault-git.d.ts.map +1 -0
  76. package/dist/lib/memory/memory-vault-git.js +345 -0
  77. package/dist/lib/memory/memory-vault-git.js.map +1 -0
  78. package/dist/lib/memory/memory-vault.d.ts +83 -0
  79. package/dist/lib/memory/memory-vault.d.ts.map +1 -0
  80. package/dist/lib/memory/memory-vault.js +466 -0
  81. package/dist/lib/memory/memory-vault.js.map +1 -0
  82. package/dist/lib/memory/static-instructions.d.ts +2 -0
  83. package/dist/lib/memory/static-instructions.d.ts.map +1 -0
  84. package/dist/lib/memory/static-instructions.js +48 -0
  85. package/dist/lib/memory/static-instructions.js.map +1 -0
  86. package/dist/lib/memory/vault-explorer.d.ts +37 -0
  87. package/dist/lib/memory/vault-explorer.d.ts.map +1 -0
  88. package/dist/lib/memory/vault-explorer.js +212 -0
  89. package/dist/lib/memory/vault-explorer.js.map +1 -0
  90. package/dist/lib/models/llm-concurrency.d.ts +29 -0
  91. package/dist/lib/models/llm-concurrency.d.ts.map +1 -0
  92. package/dist/lib/models/llm-concurrency.js +103 -0
  93. package/dist/lib/models/llm-concurrency.js.map +1 -0
  94. package/dist/lib/models/model-catalog.d.ts +32 -0
  95. package/dist/lib/models/model-catalog.d.ts.map +1 -0
  96. package/dist/lib/models/model-catalog.js +115 -0
  97. package/dist/lib/models/model-catalog.js.map +1 -0
  98. package/dist/lib/models/model-config.d.ts +27 -0
  99. package/dist/lib/models/model-config.d.ts.map +1 -0
  100. package/dist/lib/models/model-config.js +155 -0
  101. package/dist/lib/models/model-config.js.map +1 -0
  102. package/dist/lib/observability/console-link.d.ts +3 -0
  103. package/dist/lib/observability/console-link.d.ts.map +1 -0
  104. package/dist/lib/observability/console-link.js +15 -0
  105. package/dist/lib/observability/console-link.js.map +1 -0
  106. package/dist/lib/observability/event-bus.d.ts +11 -0
  107. package/dist/lib/observability/event-bus.d.ts.map +1 -0
  108. package/dist/lib/observability/event-bus.js +24 -0
  109. package/dist/lib/observability/event-bus.js.map +1 -0
  110. package/dist/lib/observability/logger.d.ts +5 -0
  111. package/dist/lib/observability/logger.d.ts.map +1 -0
  112. package/dist/lib/observability/logger.js +47 -0
  113. package/dist/lib/observability/logger.js.map +1 -0
  114. package/dist/lib/observability/payload-store.d.ts +8 -0
  115. package/dist/lib/observability/payload-store.d.ts.map +1 -0
  116. package/dist/lib/observability/payload-store.js +101 -0
  117. package/dist/lib/observability/payload-store.js.map +1 -0
  118. package/dist/lib/observability/recorder-hook.d.ts +22 -0
  119. package/dist/lib/observability/recorder-hook.d.ts.map +1 -0
  120. package/dist/lib/observability/recorder-hook.js +241 -0
  121. package/dist/lib/observability/recorder-hook.js.map +1 -0
  122. package/dist/lib/observability/recorder.d.ts +339 -0
  123. package/dist/lib/observability/recorder.d.ts.map +1 -0
  124. package/dist/lib/observability/recorder.js +1182 -0
  125. package/dist/lib/observability/recorder.js.map +1 -0
  126. package/dist/tenant.d.ts +59 -0
  127. package/dist/tenant.d.ts.map +1 -0
  128. package/dist/tenant.js +18 -0
  129. package/dist/tenant.js.map +1 -0
  130. package/package.json +119 -0
@@ -0,0 +1,305 @@
1
+ import { Pool } from "pg";
2
+ import { logger } from "../observability/logger.js";
3
+ const log = logger.child({ module: "token-usage" });
4
+ let pool;
5
+ let ddlDone;
6
+ function getPool() {
7
+ const url = process.env.TOKEN_USAGE_POSTGRES_URL ?? process.env.WORKFLOW_POSTGRES_URL;
8
+ if (!url)
9
+ return undefined;
10
+ if (!pool) {
11
+ pool = new Pool({
12
+ connectionString: url,
13
+ max: 2,
14
+ connectionTimeoutMillis: 5_000,
15
+ query_timeout: 10_000,
16
+ statement_timeout: 10_000,
17
+ });
18
+ }
19
+ return pool;
20
+ }
21
+ const DDL = `CREATE TABLE IF NOT EXISTS token_usage (
22
+ id bigserial PRIMARY KEY,
23
+ session_id text NOT NULL,
24
+ root_id text NOT NULL,
25
+ flow text,
26
+ model text NOT NULL,
27
+ turn_id text,
28
+ step_index int,
29
+ at timestamptz NOT NULL,
30
+ input_tokens int NOT NULL DEFAULT 0,
31
+ output_tokens int NOT NULL DEFAULT 0,
32
+ cache_read_tokens int NOT NULL DEFAULT 0,
33
+ cache_write_tokens int NOT NULL DEFAULT 0,
34
+ instance text NOT NULL DEFAULT 'eve'
35
+ );
36
+ CREATE INDEX IF NOT EXISTS token_usage_at_idx ON token_usage (at);
37
+ CREATE INDEX IF NOT EXISTS token_usage_root_idx ON token_usage (root_id);
38
+ ALTER TABLE token_usage ADD COLUMN IF NOT EXISTS instance text NOT NULL DEFAULT 'eve';
39
+ CREATE INDEX IF NOT EXISTS token_usage_instance_idx ON token_usage (instance);`;
40
+ function ensureDdl(p) {
41
+ if (!ddlDone) {
42
+ ddlDone = p
43
+ .query(DDL)
44
+ .then(() => undefined)
45
+ .catch((err) => {
46
+ ddlDone = undefined;
47
+ throw err;
48
+ });
49
+ }
50
+ return ddlDone;
51
+ }
52
+ const INS = `INSERT INTO token_usage
53
+ (session_id, root_id, flow, model, turn_id, step_index, at,
54
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, instance)
55
+ VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)`;
56
+ const usageListeners = new Set();
57
+ export function onUsageRecorded(fn) {
58
+ usageListeners.add(fn);
59
+ return () => usageListeners.delete(fn);
60
+ }
61
+ export async function recordUsage(r) {
62
+ for (const fn of usageListeners) {
63
+ try {
64
+ fn(r);
65
+ }
66
+ catch (err) {
67
+ log.warn({ err: String(err) }, "usage listener threw — ignored");
68
+ }
69
+ }
70
+ const p = getPool();
71
+ if (!p)
72
+ return;
73
+ try {
74
+ await ensureDdl(p);
75
+ await p.query(INS, [
76
+ r.sessionId,
77
+ r.rootId,
78
+ r.flow,
79
+ r.model,
80
+ r.turnId,
81
+ r.stepIndex,
82
+ r.at,
83
+ r.input,
84
+ r.output,
85
+ r.cacheRead,
86
+ r.cacheWrite,
87
+ r.instance,
88
+ ]);
89
+ }
90
+ catch (err) {
91
+ log.error({ err }, "token usage write failed — swallowed");
92
+ }
93
+ }
94
+ const EMPTY_AGG = {
95
+ totals: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, requests: 0, sessions: 0 },
96
+ series: [],
97
+ seriesByModel: [],
98
+ byModel: [],
99
+ byFlow: [],
100
+ byInstance: [],
101
+ byRoot: [],
102
+ };
103
+ export async function readUsageAggregate(q) {
104
+ const p = getPool();
105
+ if (!p)
106
+ return EMPTY_AGG;
107
+ try {
108
+ await ensureDdl(p);
109
+ const args = [q.from, q.to];
110
+ let where = "at >= $1::timestamptz AND at < $2::timestamptz";
111
+ if (q.instance) {
112
+ args.push(q.instance);
113
+ where += ` AND instance = $${args.length}`;
114
+ }
115
+ const trunc = q.bucket === "hour" ? "hour" : "day";
116
+ const [totals, series, seriesByModel, byModel, byFlow, byInstance, byRoot] = await Promise.all([
117
+ p.query(`SELECT COALESCE(SUM(input_tokens),0)::int i, COALESCE(SUM(output_tokens),0)::int o,
118
+ COALESCE(SUM(cache_read_tokens),0)::int cr, COALESCE(SUM(cache_write_tokens),0)::int cw,
119
+ COUNT(*)::int reqs, COUNT(DISTINCT session_id)::int sess
120
+ FROM token_usage WHERE ${where}`, args),
121
+ p.query(`SELECT date_trunc('${trunc}', at) b,
122
+ SUM(input_tokens)::int i, SUM(output_tokens)::int o,
123
+ SUM(cache_read_tokens)::int cr, SUM(cache_write_tokens)::int cw
124
+ FROM token_usage WHERE ${where} GROUP BY b ORDER BY b`, args),
125
+ p.query(`SELECT date_trunc('${trunc}', at) b, model,
126
+ SUM(input_tokens + output_tokens)::int total
127
+ FROM token_usage WHERE ${where} GROUP BY b, model ORDER BY b`, args),
128
+ p.query(`SELECT model key, SUM(input_tokens)::int i, SUM(output_tokens)::int o,
129
+ SUM(input_tokens + output_tokens)::int total, COUNT(*)::int reqs
130
+ FROM token_usage WHERE ${where} GROUP BY model ORDER BY total DESC`, args),
131
+ p.query(`SELECT flow key, SUM(input_tokens)::int i, SUM(output_tokens)::int o,
132
+ SUM(input_tokens + output_tokens)::int total, COUNT(*)::int reqs
133
+ FROM token_usage WHERE ${where} GROUP BY flow ORDER BY total DESC`, args),
134
+ p.query(`SELECT instance key, SUM(input_tokens)::int i, SUM(output_tokens)::int o,
135
+ SUM(input_tokens + output_tokens)::int total, COUNT(*)::int reqs
136
+ FROM token_usage WHERE ${where} GROUP BY instance ORDER BY total DESC`, args),
137
+ p.query(`SELECT root_id, SUM(input_tokens)::int i, SUM(output_tokens)::int o,
138
+ SUM(input_tokens + output_tokens)::int total, COUNT(*)::int reqs
139
+ FROM token_usage WHERE ${where} GROUP BY root_id`, args),
140
+ ]);
141
+ const t = totals.rows[0] ?? {};
142
+ return {
143
+ totals: {
144
+ input: t.i ?? 0,
145
+ output: t.o ?? 0,
146
+ cacheRead: t.cr ?? 0,
147
+ cacheWrite: t.cw ?? 0,
148
+ requests: t.reqs ?? 0,
149
+ sessions: t.sess ?? 0,
150
+ },
151
+ series: series.rows.map((r) => ({
152
+ at: new Date(r.b).toISOString(),
153
+ input: r.i,
154
+ output: r.o,
155
+ cacheRead: r.cr,
156
+ cacheWrite: r.cw,
157
+ })),
158
+ seriesByModel: seriesByModel.rows.map((r) => ({
159
+ at: new Date(r.b).toISOString(),
160
+ model: r.model,
161
+ total: r.total,
162
+ })),
163
+ byModel: byModel.rows.map((r) => ({
164
+ key: r.key,
165
+ input: r.i,
166
+ output: r.o,
167
+ total: r.total,
168
+ requests: r.reqs,
169
+ })),
170
+ byFlow: byFlow.rows.map((r) => ({
171
+ key: r.key,
172
+ input: r.i,
173
+ output: r.o,
174
+ total: r.total,
175
+ requests: r.reqs,
176
+ })),
177
+ byInstance: byInstance.rows.map((r) => ({
178
+ key: r.key,
179
+ input: r.i,
180
+ output: r.o,
181
+ total: r.total,
182
+ requests: r.reqs,
183
+ })),
184
+ byRoot: byRoot.rows.map((r) => ({
185
+ rootId: r.root_id,
186
+ input: r.i,
187
+ output: r.o,
188
+ total: r.total,
189
+ requests: r.reqs,
190
+ })),
191
+ };
192
+ }
193
+ catch (err) {
194
+ log.error({ err }, "usage aggregate read failed — returning empty");
195
+ return EMPTY_AGG;
196
+ }
197
+ }
198
+ export async function readRunUsageByModel(rootId, flow) {
199
+ const p = getPool();
200
+ if (!p)
201
+ return [];
202
+ try {
203
+ await ensureDdl(p);
204
+ const args = [rootId];
205
+ let where = "root_id = $1";
206
+ if (flow) {
207
+ args.push(flow);
208
+ where += " AND flow = $2";
209
+ }
210
+ const res = await p.query(`SELECT model key, COALESCE(SUM(input_tokens),0)::int i, COALESCE(SUM(output_tokens),0)::int o,
211
+ COALESCE(SUM(cache_read_tokens),0)::int cr, COALESCE(SUM(cache_write_tokens),0)::int cw,
212
+ COALESCE(SUM(input_tokens + output_tokens),0)::int total, COUNT(*)::int reqs
213
+ FROM (
214
+ (SELECT DISTINCT ON (session_id, turn_id, step_index)
215
+ model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens
216
+ FROM token_usage WHERE ${where} AND turn_id IS NOT NULL AND step_index IS NOT NULL
217
+ ORDER BY session_id, turn_id, step_index, id DESC)
218
+ UNION ALL
219
+ (SELECT model, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens
220
+ FROM token_usage WHERE ${where} AND (turn_id IS NULL OR step_index IS NULL))
221
+ ) dedup GROUP BY model ORDER BY total DESC`, args);
222
+ return res.rows.map((r) => ({
223
+ key: r.key,
224
+ input: r.i,
225
+ output: r.o,
226
+ cacheRead: r.cr,
227
+ cacheWrite: r.cw,
228
+ total: r.total,
229
+ requests: r.reqs,
230
+ }));
231
+ }
232
+ catch (err) {
233
+ log.error({ err, rootId }, "readRunUsageByModel failed — returning empty");
234
+ return [];
235
+ }
236
+ }
237
+ export async function readRootDayTotal(rootId, dayIso) {
238
+ const p = getPool();
239
+ if (!p)
240
+ return 0;
241
+ try {
242
+ await ensureDdl(p);
243
+ const res = await p.query(`SELECT COALESCE(SUM(input_tokens + output_tokens),0)::bigint total
244
+ FROM token_usage
245
+ WHERE root_id = $1
246
+ AND at >= $2::timestamptz AND at < $2::timestamptz + interval '24 hours'`, [rootId, `${dayIso}T00:00:00Z`]);
247
+ return Number(res.rows[0]?.total ?? 0);
248
+ }
249
+ catch (err) {
250
+ log.warn({ err: String(err), rootId }, "root day total read failed — returning 0");
251
+ return 0;
252
+ }
253
+ }
254
+ export async function readUsageLogsPage(q) {
255
+ const p = getPool();
256
+ if (!p)
257
+ return { rows: [], nextCursor: null, hasMore: false };
258
+ try {
259
+ await ensureDdl(p);
260
+ const conds = [];
261
+ const args = [];
262
+ if (q.before != null) {
263
+ args.push(q.before);
264
+ conds.push(`id < $${args.length}`);
265
+ }
266
+ if (q.flow) {
267
+ args.push(q.flow);
268
+ conds.push(`flow = $${args.length}`);
269
+ }
270
+ if (q.model) {
271
+ args.push(q.model);
272
+ conds.push(`model = $${args.length}`);
273
+ }
274
+ if (q.instance) {
275
+ args.push(q.instance);
276
+ conds.push(`instance = $${args.length}`);
277
+ }
278
+ const where = conds.length ? `WHERE ${conds.join(" AND ")}` : "";
279
+ args.push(q.limit + 1);
280
+ const res = await p.query(`SELECT id, session_id, root_id, flow, model, at,
281
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, instance
282
+ FROM token_usage ${where} ORDER BY id DESC LIMIT $${args.length}`, args);
283
+ const all = res.rows.map((r) => ({
284
+ id: Number(r.id),
285
+ sessionId: r.session_id,
286
+ rootId: r.root_id,
287
+ flow: r.flow,
288
+ model: r.model,
289
+ at: new Date(r.at).toISOString(),
290
+ input: r.input_tokens,
291
+ output: r.output_tokens,
292
+ cacheRead: r.cache_read_tokens,
293
+ cacheWrite: r.cache_write_tokens,
294
+ instance: r.instance,
295
+ }));
296
+ const hasMore = all.length > q.limit;
297
+ const rows = hasMore ? all.slice(0, q.limit) : all;
298
+ return { rows, nextCursor: hasMore ? (rows[rows.length - 1]?.id ?? null) : null, hasMore };
299
+ }
300
+ catch (err) {
301
+ log.error({ err }, "usage logs read failed — returning empty");
302
+ return { rows: [], nextCursor: null, hasMore: false };
303
+ }
304
+ }
305
+ //# sourceMappingURL=token-usage-pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage-pg.js","sourceRoot":"","sources":["../../../src/lib/budgets/token-usage-pg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { type CostKind } from "../models/model-catalog.js";
2
+ import { type AggregateQuery, type LogsQuery, type UsageBreakdownRow, type UsageRootRow } from "./token-usage-pg.js";
3
+ export declare class UsageQueryError extends Error {
4
+ }
5
+ export declare function parseUsageQuery(rawUrl: string, now: Date): AggregateQuery;
6
+ export declare function parseLogsQuery(rawUrl: string): LogsQuery;
7
+ export interface SourceBreakdownRow {
8
+ key: string;
9
+ input: number;
10
+ output: number;
11
+ total: number;
12
+ requests: number;
13
+ }
14
+ export declare function enrichBySource(byRoot: UsageRootRow[], index: Map<string, string>): SourceBreakdownRow[];
15
+ export interface PricedBreakdown extends UsageBreakdownRow {
16
+ costUsd: number;
17
+ costKind: CostKind;
18
+ }
19
+ export declare function priceModels(rows: UsageBreakdownRow[], env?: NodeJS.ProcessEnv): {
20
+ rows: PricedBreakdown[];
21
+ realUsd: number;
22
+ notionalUsd: number;
23
+ };
24
+ export declare function buildUsage(rawUrl: string, now: Date): Promise<{
25
+ byModel: PricedBreakdown[];
26
+ byFlow: (UsageBreakdownRow & {
27
+ costUsd: number;
28
+ costKind: "mixed";
29
+ })[];
30
+ byInstance: (UsageBreakdownRow & {
31
+ costUsd: number;
32
+ costKind: "mixed";
33
+ })[];
34
+ bySource: (SourceBreakdownRow & {
35
+ costUsd: number;
36
+ costKind: "mixed";
37
+ })[];
38
+ cost: {
39
+ realUsd: number;
40
+ notionalUsd: number;
41
+ };
42
+ generatedAt: string;
43
+ totals: {
44
+ input: number;
45
+ output: number;
46
+ cacheRead: number;
47
+ cacheWrite: number;
48
+ requests: number;
49
+ sessions: number;
50
+ };
51
+ series: {
52
+ at: string;
53
+ input: number;
54
+ output: number;
55
+ cacheRead: number;
56
+ cacheWrite: number;
57
+ }[];
58
+ seriesByModel: {
59
+ at: string;
60
+ model: string;
61
+ total: number;
62
+ }[];
63
+ range: AggregateQuery;
64
+ }>;
65
+ export declare function buildRunUsage(rootId: string, rows: UsageBreakdownRow[], now: Date, env?: NodeJS.ProcessEnv): {
66
+ rootId: string;
67
+ byModel: {
68
+ model: string;
69
+ input: number;
70
+ output: number;
71
+ cacheRead: number;
72
+ cacheWrite: number;
73
+ calls: number;
74
+ }[];
75
+ total: {
76
+ input: number;
77
+ output: number;
78
+ cacheRead: number;
79
+ cacheWrite: number;
80
+ calls: number;
81
+ };
82
+ generatedAt: string;
83
+ };
84
+ export declare function buildUsageLogs(rawUrl: string, now: Date): Promise<{
85
+ rows: {
86
+ source: string;
87
+ id: number;
88
+ sessionId: string;
89
+ rootId: string;
90
+ flow: string | null;
91
+ model: string;
92
+ at: string;
93
+ input: number;
94
+ output: number;
95
+ cacheRead: number;
96
+ cacheWrite: number;
97
+ instance: string;
98
+ }[];
99
+ nextCursor: number | null;
100
+ hasMore: boolean;
101
+ generatedAt: string;
102
+ }>;
103
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/lib/budgets/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,4BAA4B,CAAC;AAElG,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAGd,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAM7B,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAQ7C,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,cAAc,CAezE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAiBxD;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EAAE,EACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB,kBAAkB,EAAE,CAYtB;AAQD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAgBD,wBAAgB,WAAW,CACzB,IAAI,EAAE,iBAAiB,EAAE,EACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAenE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuBzD;AAOD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EAAE,EACzB,GAAG,EAAE,IAAI,EACT,GAAG,GAAE,MAAM,CAAC,UAAwB;;;eAKzB,MAAM;eACN,MAAM;gBACL,MAAM;mBACH,MAAM;oBACL,MAAM;eACX,MAAM;;;;;;;;;;EAgClB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;;;;;;;;;;;;;;;;;;GAW7D"}
@@ -0,0 +1,151 @@
1
+ import { costKindFor, isCatalogModel, priceFor } from "../models/model-catalog.js";
2
+ import { readSessionsIndexed } from "../observability/recorder.js";
3
+ import { readUsageAggregate, readUsageLogsPage, } from "./token-usage-pg.js";
4
+ const WINDOW_MS = 7 * 24 * 3600 * 1000;
5
+ export class UsageQueryError extends Error {
6
+ }
7
+ function parseDate(value, field) {
8
+ const d = new Date(value);
9
+ if (Number.isNaN(d.getTime()))
10
+ throw new UsageQueryError(`invalid ${field}: ${value}`);
11
+ return d;
12
+ }
13
+ export function parseUsageQuery(rawUrl, now) {
14
+ const u = new URL(rawUrl, "http://localhost");
15
+ const bucket = u.searchParams.get("bucket") === "hour" ? "hour" : "day";
16
+ const fromParam = u.searchParams.get("from");
17
+ const toParam = u.searchParams.get("to");
18
+ const to = toParam ? parseDate(toParam, "to") : now;
19
+ const from = fromParam ? parseDate(fromParam, "from") : new Date(to.getTime() - WINDOW_MS);
20
+ return {
21
+ from: from.toISOString(),
22
+ to: to.toISOString(),
23
+ bucket,
24
+ instance: u.searchParams.get("instance") || undefined,
25
+ };
26
+ }
27
+ export function parseLogsQuery(rawUrl) {
28
+ const u = new URL(rawUrl, "http://localhost");
29
+ let limit = 50;
30
+ const l = u.searchParams.get("limit");
31
+ if (l != null) {
32
+ const n = Number(l);
33
+ if (Number.isFinite(n) && n > 0)
34
+ limit = Math.min(n, 200);
35
+ }
36
+ const b = u.searchParams.get("before");
37
+ const before = b != null && Number.isFinite(Number(b)) ? Number(b) : undefined;
38
+ return {
39
+ limit,
40
+ before,
41
+ flow: u.searchParams.get("flow") ?? undefined,
42
+ model: u.searchParams.get("model") ?? undefined,
43
+ instance: u.searchParams.get("instance") || undefined,
44
+ };
45
+ }
46
+ export function enrichBySource(byRoot, index) {
47
+ const acc = new Map();
48
+ for (const r of byRoot) {
49
+ const key = index.get(r.rootId) ?? "unknown";
50
+ const cur = acc.get(key) ?? { key, input: 0, output: 0, total: 0, requests: 0 };
51
+ cur.input += r.input;
52
+ cur.output += r.output;
53
+ cur.total += r.total;
54
+ cur.requests += r.requests;
55
+ acc.set(key, cur);
56
+ }
57
+ return [...acc.values()].sort((a, b) => b.total - a.total);
58
+ }
59
+ function sourceIndex() {
60
+ const m = new Map();
61
+ for (const row of readSessionsIndexed())
62
+ m.set(row.id, row.source.kind);
63
+ return m;
64
+ }
65
+ function catalogId(recorded, env) {
66
+ if (isCatalogModel(recorded, env))
67
+ return recorded;
68
+ const i = recorded.indexOf("/");
69
+ return i >= 0 ? recorded.slice(i + 1) : recorded;
70
+ }
71
+ export function priceModels(rows, env = process.env) {
72
+ let realUsd = 0;
73
+ let notionalUsd = 0;
74
+ const priced = rows.map((row) => {
75
+ const id = catalogId(row.key ?? "", env);
76
+ const price = priceFor(id, env);
77
+ const costKind = costKindFor(id, env);
78
+ const costUsd = price
79
+ ? (row.input * price.inputPerMTok + row.output * price.outputPerMTok) / 1_000_000
80
+ : 0;
81
+ if (costKind === "real")
82
+ realUsd += costUsd;
83
+ else
84
+ notionalUsd += costUsd;
85
+ return { ...row, costUsd, costKind };
86
+ });
87
+ return { rows: priced, realUsd, notionalUsd };
88
+ }
89
+ export async function buildUsage(rawUrl, now) {
90
+ const q = parseUsageQuery(rawUrl, now);
91
+ const agg = await readUsageAggregate(q);
92
+ const { byRoot, byModel, byFlow, byInstance, ...rest } = agg;
93
+ const priced = priceModels(byModel);
94
+ const mixed = (r) => ({
95
+ ...r,
96
+ costUsd: 0,
97
+ costKind: "mixed",
98
+ });
99
+ return {
100
+ range: q,
101
+ ...rest,
102
+ byModel: priced.rows,
103
+ byFlow: byFlow.map(mixed),
104
+ byInstance: byInstance.map(mixed),
105
+ bySource: enrichBySource(byRoot, sourceIndex()).map(mixed),
106
+ cost: { realUsd: priced.realUsd, notionalUsd: priced.notionalUsd },
107
+ generatedAt: now.toISOString(),
108
+ };
109
+ }
110
+ export function buildRunUsage(rootId, rows, now, env = process.env) {
111
+ const acc = new Map();
112
+ for (const r of rows) {
113
+ const model = catalogId(r.key ?? "unknown", env) || "unknown";
114
+ const cur = acc.get(model) ?? {
115
+ model,
116
+ input: 0,
117
+ output: 0,
118
+ cacheRead: 0,
119
+ cacheWrite: 0,
120
+ calls: 0,
121
+ };
122
+ cur.input += r.input;
123
+ cur.output += r.output;
124
+ cur.cacheRead += r.cacheRead ?? 0;
125
+ cur.cacheWrite += r.cacheWrite ?? 0;
126
+ cur.calls += r.requests;
127
+ acc.set(model, cur);
128
+ }
129
+ const byModel = [...acc.values()].sort((a, b) => b.input + b.output - (a.input + a.output));
130
+ const total = byModel.reduce((t, m) => ({
131
+ input: t.input + m.input,
132
+ output: t.output + m.output,
133
+ cacheRead: t.cacheRead + m.cacheRead,
134
+ cacheWrite: t.cacheWrite + m.cacheWrite,
135
+ calls: t.calls + m.calls,
136
+ }), { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, calls: 0 });
137
+ return { rootId, byModel, total, generatedAt: now.toISOString() };
138
+ }
139
+ export async function buildUsageLogs(rawUrl, now) {
140
+ const q = parseLogsQuery(rawUrl);
141
+ const page = await readUsageLogsPage(q);
142
+ const idx = sourceIndex();
143
+ const rows = page.rows.map((r) => ({ ...r, source: idx.get(r.rootId) ?? "unknown" }));
144
+ return {
145
+ rows,
146
+ nextCursor: page.nextCursor,
147
+ hasMore: page.hasMore,
148
+ generatedAt: now.toISOString(),
149
+ };
150
+ }
151
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/lib/budgets/usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface CallContext {
2
+ sessionId: string;
3
+ rootId: string;
4
+ }
5
+ export declare function withCallContext<T>(ctx: CallContext, fn: () => T): T;
6
+ export declare function currentCallContext(): CallContext | undefined;
7
+ //# sourceMappingURL=call-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-context.d.ts","sourceRoot":"","sources":["../../../src/lib/control-plane/call-context.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEnE;AAED,wBAAgB,kBAAkB,IAAI,WAAW,GAAG,SAAS,CAE5D"}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const als = new AsyncLocalStorage();
3
+ export function withCallContext(ctx, fn) {
4
+ return als.run(ctx, fn);
5
+ }
6
+ export function currentCallContext() {
7
+ return als.getStore();
8
+ }
9
+ //# sourceMappingURL=call-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-context.js","sourceRoot":"","sources":["../../../src/lib/control-plane/call-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAAe,CAAC;AAEjD,MAAM,UAAU,eAAe,CAAI,GAAgB,EAAE,EAAW;IAC9D,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ToolDescriptorTS } from "./tools-config.js";
2
+ export interface CatalogSubagent {
3
+ name: string;
4
+ title: string;
5
+ description: string;
6
+ tools: string[];
7
+ nests: string[];
8
+ hitl: string[];
9
+ launch: string;
10
+ hasSettings: boolean;
11
+ icon: string | null;
12
+ role: string | null;
13
+ kind?: "subagent" | "task";
14
+ groupBy: string | null;
15
+ }
16
+ export interface CatalogResponseTS {
17
+ subagents: CatalogSubagent[];
18
+ tools: ToolDescriptorTS[];
19
+ generatedAt: string;
20
+ }
21
+ interface ParsedInstructions {
22
+ title?: string;
23
+ description?: string;
24
+ launch?: string;
25
+ icon?: string;
26
+ role?: string;
27
+ groupBy?: string;
28
+ }
29
+ export declare function parseInstructions(md: string): ParsedInstructions;
30
+ export declare function discoverSubagents(root?: string): CatalogSubagent[];
31
+ export declare function buildCatalog(role?: string): CatalogResponseTS;
32
+ export {};
33
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/lib/control-plane/catalog.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAiB,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAI1F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAGf,WAAW,EAAE,OAAO,CAAC;IAGrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAIpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAIpB,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAI3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AA2CD,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+BD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,CAwChE;AA6BD,wBAAgB,iBAAiB,CAAC,IAAI,SAAiB,GAAG,eAAe,EAAE,CAoB1E;AAQD,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAU7D"}