@assemblyline-agents/postgres 0.1.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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/adapter-checkpoints.d.ts +6 -0
  4. package/dist/adapter-checkpoints.d.ts.map +1 -0
  5. package/dist/adapter-checkpoints.js +110 -0
  6. package/dist/adapter-checkpoints.js.map +1 -0
  7. package/dist/adapter-conversation-turns.d.ts +20 -0
  8. package/dist/adapter-conversation-turns.d.ts.map +1 -0
  9. package/dist/adapter-conversation-turns.js +216 -0
  10. package/dist/adapter-conversation-turns.js.map +1 -0
  11. package/dist/adapter-conversations.d.ts +46 -0
  12. package/dist/adapter-conversations.d.ts.map +1 -0
  13. package/dist/adapter-conversations.js +129 -0
  14. package/dist/adapter-conversations.js.map +1 -0
  15. package/dist/adapter-delivery.d.ts +13 -0
  16. package/dist/adapter-delivery.d.ts.map +1 -0
  17. package/dist/adapter-delivery.js +157 -0
  18. package/dist/adapter-delivery.js.map +1 -0
  19. package/dist/adapter-grants.d.ts +11 -0
  20. package/dist/adapter-grants.d.ts.map +1 -0
  21. package/dist/adapter-grants.js +125 -0
  22. package/dist/adapter-grants.js.map +1 -0
  23. package/dist/adapter-memory.d.ts +21 -0
  24. package/dist/adapter-memory.d.ts.map +1 -0
  25. package/dist/adapter-memory.js +181 -0
  26. package/dist/adapter-memory.js.map +1 -0
  27. package/dist/adapter-misc.d.ts +61 -0
  28. package/dist/adapter-misc.d.ts.map +1 -0
  29. package/dist/adapter-misc.js +127 -0
  30. package/dist/adapter-misc.js.map +1 -0
  31. package/dist/adapter-runs.d.ts +20 -0
  32. package/dist/adapter-runs.d.ts.map +1 -0
  33. package/dist/adapter-runs.js +193 -0
  34. package/dist/adapter-runs.js.map +1 -0
  35. package/dist/adapter-sandbox.d.ts +27 -0
  36. package/dist/adapter-sandbox.d.ts.map +1 -0
  37. package/dist/adapter-sandbox.js +267 -0
  38. package/dist/adapter-sandbox.js.map +1 -0
  39. package/dist/adapter-settings.d.ts +8 -0
  40. package/dist/adapter-settings.d.ts.map +1 -0
  41. package/dist/adapter-settings.js +38 -0
  42. package/dist/adapter-settings.js.map +1 -0
  43. package/dist/adapter-usage.d.ts +7 -0
  44. package/dist/adapter-usage.d.ts.map +1 -0
  45. package/dist/adapter-usage.js +243 -0
  46. package/dist/adapter-usage.js.map +1 -0
  47. package/dist/client-types.d.ts +6 -0
  48. package/dist/client-types.d.ts.map +1 -0
  49. package/dist/client-types.js +2 -0
  50. package/dist/client-types.js.map +1 -0
  51. package/dist/index.d.ts +208 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +424 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/migrations.d.ts +35 -0
  56. package/dist/migrations.d.ts.map +1 -0
  57. package/dist/migrations.js +694 -0
  58. package/dist/migrations.js.map +1 -0
  59. package/dist/presets.d.ts +19 -0
  60. package/dist/presets.d.ts.map +1 -0
  61. package/dist/presets.js +31 -0
  62. package/dist/presets.js.map +1 -0
  63. package/dist/provider.d.ts +12 -0
  64. package/dist/provider.d.ts.map +1 -0
  65. package/dist/provider.js +86 -0
  66. package/dist/provider.js.map +1 -0
  67. package/dist/row-mappers.d.ts +24 -0
  68. package/dist/row-mappers.d.ts.map +1 -0
  69. package/dist/row-mappers.js +450 -0
  70. package/dist/row-mappers.js.map +1 -0
  71. package/dist/sql-helpers.d.ts +46 -0
  72. package/dist/sql-helpers.d.ts.map +1 -0
  73. package/dist/sql-helpers.js +244 -0
  74. package/dist/sql-helpers.js.map +1 -0
  75. package/dist/stores.d.ts +40 -0
  76. package/dist/stores.d.ts.map +1 -0
  77. package/dist/stores.js +210 -0
  78. package/dist/stores.js.map +1 -0
  79. package/package.json +49 -0
@@ -0,0 +1,267 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mapSandboxSession, mapSandboxSyncJob } from "./row-mappers.js";
3
+ import { applySandboxSyncJobPatchForPostgres, createPostgresSandboxSyncJobRecord, positiveLimit, postgresSandboxSyncRetryDelayMs, sessionRootFromManifest, timestamp } from "./sql-helpers.js";
4
+ export async function recordSandboxSnapshot(client, input) {
5
+ const record = {
6
+ id: randomUUID(),
7
+ runId: input.runId,
8
+ sandboxId: input.sandboxId,
9
+ snapshotId: input.snapshotId,
10
+ metadata: input.metadata ?? {},
11
+ createdAt: timestamp()
12
+ };
13
+ await client.query(`insert into openeve_sandbox_snapshots
14
+ (id, run_id, sandbox_id, snapshot_id, metadata, created_at)
15
+ values ($1,$2,$3,$4,$5::jsonb,$6)`, [
16
+ record.id,
17
+ record.runId,
18
+ record.sandboxId,
19
+ record.snapshotId,
20
+ JSON.stringify(record.metadata),
21
+ record.createdAt
22
+ ]);
23
+ return record;
24
+ }
25
+ export async function upsertSandboxSession(client, input) {
26
+ const now = timestamp();
27
+ const createdAt = input.createdAt ?? now;
28
+ const updatedAt = input.updatedAt ?? now;
29
+ const result = await client.query(`insert into openeve_sandbox_sessions
30
+ (id, session_key, provider, sandbox_id, run_id, root, state, dirty, last_seen_at, last_synced_at, snapshot_id, sync_job_id, manifest, metadata, created_at, updated_at)
31
+ values ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13::jsonb,$14::jsonb,$15,$16)
32
+ on conflict (session_key) do update set
33
+ provider=$3,
34
+ sandbox_id=$4,
35
+ run_id=$5,
36
+ root=$6,
37
+ state=$7,
38
+ dirty=$8,
39
+ last_seen_at=$9,
40
+ last_synced_at=$10,
41
+ snapshot_id=$11,
42
+ sync_job_id=$12,
43
+ manifest=$13::jsonb,
44
+ metadata=$14::jsonb,
45
+ updated_at=$16
46
+ returning *`, [
47
+ input.id ?? randomUUID(),
48
+ input.sessionKey,
49
+ input.provider,
50
+ input.sandboxId,
51
+ input.runId ?? null,
52
+ sessionRootFromManifest(input.manifest),
53
+ input.state,
54
+ input.dirty,
55
+ input.lastSeenAt,
56
+ input.lastSyncedAt ?? null,
57
+ input.snapshotId ?? null,
58
+ input.syncJobId ?? null,
59
+ JSON.stringify(input.manifest),
60
+ JSON.stringify({}),
61
+ createdAt,
62
+ updatedAt
63
+ ]);
64
+ const row = result.rows[0];
65
+ if (!row)
66
+ throw new Error(`Sandbox session not upserted: ${input.sessionKey}`);
67
+ return mapSandboxSession(row);
68
+ }
69
+ export async function getSandboxSession(client, sessionKey) {
70
+ const result = await client.query("select * from openeve_sandbox_sessions where session_key=$1", [sessionKey]);
71
+ const row = result.rows[0];
72
+ return row ? mapSandboxSession(row) : undefined;
73
+ }
74
+ export async function listSandboxSessions(client, options = {}) {
75
+ const result = options.dirty === undefined
76
+ ? await client.query("select * from openeve_sandbox_sessions order by updated_at asc")
77
+ : await client.query("select * from openeve_sandbox_sessions where dirty=$1 order by updated_at asc", [options.dirty]);
78
+ return result.rows.map(mapSandboxSession);
79
+ }
80
+ export async function updateSandboxSession(client, sessionKey, patch) {
81
+ const current = await getSandboxSession(client, sessionKey);
82
+ if (!current)
83
+ throw new Error(`Sandbox session not found: ${sessionKey}`);
84
+ const updated = { ...current };
85
+ for (const [key, value] of Object.entries(patch)) {
86
+ if (value === undefined)
87
+ delete updated[key];
88
+ else
89
+ updated[key] = value;
90
+ }
91
+ return upsertSandboxSession(client, {
92
+ ...updated,
93
+ sessionKey,
94
+ id: current.id,
95
+ createdAt: current.createdAt,
96
+ updatedAt: timestamp()
97
+ });
98
+ }
99
+ export async function createSandboxSyncJob(client, input) {
100
+ return enqueueSandboxSyncJob(client, input);
101
+ }
102
+ export async function enqueueSandboxSyncJob(client, input) {
103
+ const record = createPostgresSandboxSyncJobRecord(input);
104
+ const result = await client.query(`insert into openeve_sandbox_sync_jobs
105
+ (id, run_id, sandbox_id, status, idempotency_key, reason, manifest, error, attempt_count, max_attempts, next_attempt_at, lease_token, lease_expires_at, completed_at, failed_at, last_error, metadata, created_at, updated_at)
106
+ values ($1,$2,$3,$4,$5,$6,$7::jsonb,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17::jsonb,$18,$19)
107
+ on conflict (idempotency_key) do update set updated_at=openeve_sandbox_sync_jobs.updated_at
108
+ returning *`, [
109
+ record.id,
110
+ record.runId,
111
+ record.sandboxId,
112
+ record.status,
113
+ record.idempotencyKey,
114
+ record.reason,
115
+ JSON.stringify(record.manifest),
116
+ record.error ?? null,
117
+ record.attemptCount,
118
+ record.maxAttempts,
119
+ record.nextAttemptAt,
120
+ record.leaseToken ?? null,
121
+ record.leaseExpiresAt ?? null,
122
+ record.completedAt ?? null,
123
+ record.failedAt ?? null,
124
+ record.lastError ?? null,
125
+ JSON.stringify(record.metadata),
126
+ record.createdAt,
127
+ record.updatedAt
128
+ ]);
129
+ return mapSandboxSyncJob(result.rows[0] ?? {
130
+ id: record.id,
131
+ run_id: record.runId,
132
+ sandbox_id: record.sandboxId,
133
+ status: record.status,
134
+ idempotency_key: record.idempotencyKey,
135
+ reason: record.reason,
136
+ manifest: record.manifest,
137
+ error: record.error ?? null,
138
+ attempt_count: record.attemptCount,
139
+ max_attempts: record.maxAttempts,
140
+ next_attempt_at: record.nextAttemptAt,
141
+ lease_token: record.leaseToken ?? null,
142
+ lease_expires_at: record.leaseExpiresAt ?? null,
143
+ completed_at: record.completedAt ?? null,
144
+ failed_at: record.failedAt ?? null,
145
+ last_error: record.lastError ?? null,
146
+ metadata: record.metadata,
147
+ created_at: record.createdAt,
148
+ updated_at: record.updatedAt
149
+ });
150
+ }
151
+ export async function updateSandboxSyncJob(client, id, patch) {
152
+ const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
153
+ if (!current)
154
+ throw new Error(`Sandbox sync job not found: ${id}`);
155
+ const updated = applySandboxSyncJobPatchForPostgres(mapSandboxSyncJob(current), patch);
156
+ await client.query(`update openeve_sandbox_sync_jobs
157
+ set status=$2, manifest=$3::jsonb, error=$4, attempt_count=$5, max_attempts=$6,
158
+ next_attempt_at=$7, lease_token=$8, lease_expires_at=$9, completed_at=$10,
159
+ failed_at=$11, last_error=$12, metadata=$13::jsonb, updated_at=$14
160
+ where id=$1`, [
161
+ updated.id,
162
+ updated.status,
163
+ JSON.stringify(updated.manifest),
164
+ updated.error ?? null,
165
+ updated.attemptCount,
166
+ updated.maxAttempts,
167
+ updated.nextAttemptAt,
168
+ updated.leaseToken ?? null,
169
+ updated.leaseExpiresAt ?? null,
170
+ updated.completedAt ?? null,
171
+ updated.failedAt ?? null,
172
+ updated.lastError ?? null,
173
+ JSON.stringify(updated.metadata),
174
+ updated.updatedAt
175
+ ]);
176
+ return updated;
177
+ }
178
+ export async function listSandboxSyncJobs(client, runId) {
179
+ const result = runId
180
+ ? await client.query("select * from openeve_sandbox_sync_jobs where run_id=$1 order by created_at asc", [runId])
181
+ : await client.query("select * from openeve_sandbox_sync_jobs order by created_at asc");
182
+ return result.rows.map(mapSandboxSyncJob);
183
+ }
184
+ export async function leaseSandboxSyncJobs(client, options = {}) {
185
+ const now = options.now ?? new Date();
186
+ const leaseToken = randomUUID();
187
+ const leaseForMs = positiveLimit(options.leaseForMs, 5 * 60_000);
188
+ const leaseExpiresAt = new Date(now.getTime() + leaseForMs).toISOString();
189
+ const result = await client.query(`update openeve_sandbox_sync_jobs
190
+ set status='running',
191
+ lease_token=$1,
192
+ lease_expires_at=$2,
193
+ attempt_count=attempt_count + 1,
194
+ error=null,
195
+ updated_at=$3
196
+ where id in (
197
+ select id from openeve_sandbox_sync_jobs
198
+ where status in ('pending', 'failed')
199
+ and next_attempt_at <= $3
200
+ and attempt_count < max_attempts
201
+ order by next_attempt_at asc, created_at asc
202
+ limit $4
203
+ for update skip locked
204
+ )
205
+ returning *`, [leaseToken, leaseExpiresAt, now.toISOString(), positiveLimit(options.limit, 10)]);
206
+ return result.rows.map(mapSandboxSyncJob);
207
+ }
208
+ export async function completeSandboxSyncJob(client, id, leaseToken, patch = {}) {
209
+ const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
210
+ if (!current)
211
+ throw new Error(`Sandbox sync job not found: ${id}`);
212
+ const job = mapSandboxSyncJob(current);
213
+ if (job.status === "completed")
214
+ return job;
215
+ if (job.leaseToken !== leaseToken)
216
+ throw new Error(`Sandbox sync job lease mismatch: ${id}`);
217
+ const completedAt = timestamp();
218
+ const result = await client.query(`update openeve_sandbox_sync_jobs
219
+ set status='completed', manifest=$2::jsonb, metadata=$3::jsonb, lease_token=null,
220
+ lease_expires_at=null, completed_at=$4, error=null, updated_at=$4
221
+ where id=$1 and lease_token=$5
222
+ returning *`, [id, JSON.stringify(patch.manifest ?? job.manifest), JSON.stringify(patch.metadata ?? job.metadata), completedAt, leaseToken]);
223
+ const row = result.rows[0];
224
+ if (!row)
225
+ throw new Error(`Sandbox sync job lease mismatch: ${id}`);
226
+ return mapSandboxSyncJob(row);
227
+ }
228
+ export async function failSandboxSyncJob(client, id, leaseToken, failure) {
229
+ const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
230
+ if (!current)
231
+ throw new Error(`Sandbox sync job not found: ${id}`);
232
+ const job = mapSandboxSyncJob(current);
233
+ if (job.leaseToken !== leaseToken)
234
+ throw new Error(`Sandbox sync job lease mismatch: ${id}`);
235
+ const now = failure.now ?? new Date();
236
+ const permanent = job.attemptCount >= job.maxAttempts;
237
+ const nextAttemptAt = permanent
238
+ ? job.nextAttemptAt
239
+ : new Date(now.getTime() + positiveLimit(failure.retryDelayMs, postgresSandboxSyncRetryDelayMs(job.attemptCount))).toISOString();
240
+ const result = await client.query(`update openeve_sandbox_sync_jobs
241
+ set status=$2, next_attempt_at=$3, lease_token=null, lease_expires_at=null,
242
+ failed_at=$4, last_error=$5, error=$5, updated_at=$6
243
+ where id=$1 and lease_token=$7
244
+ returning *`, [
245
+ id,
246
+ permanent ? "blocked_requires_operator" : "pending",
247
+ nextAttemptAt,
248
+ permanent ? now.toISOString() : job.failedAt ?? null,
249
+ failure.error,
250
+ timestamp(),
251
+ leaseToken
252
+ ]);
253
+ const row = result.rows[0];
254
+ if (!row)
255
+ throw new Error(`Sandbox sync job lease mismatch: ${id}`);
256
+ return mapSandboxSyncJob(row);
257
+ }
258
+ export async function recoverExpiredSandboxSyncJobs(client, now = new Date()) {
259
+ const result = await client.query(`update openeve_sandbox_sync_jobs
260
+ set status='pending', next_attempt_at=$1, lease_token=null, lease_expires_at=null, updated_at=$1
261
+ where status='running'
262
+ and lease_expires_at is not null
263
+ and lease_expires_at <= $1
264
+ returning *`, [now.toISOString()]);
265
+ return result.rows.map(mapSandboxSyncJob);
266
+ }
267
+ //# sourceMappingURL=adapter-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-sandbox.js","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { JsonObject, JsonValue } from "@assemblyline-agents/core";
2
+ import type { RuntimeControlEvent, RuntimeSettingRecord } from "@assemblyline-agents/runtime";
3
+ import type { QueryClient } from "./client-types.js";
4
+ export declare function getSetting(client: QueryClient, scope: string, key: string): Promise<RuntimeSettingRecord | undefined>;
5
+ export declare function setSetting(client: QueryClient, scope: string, key: string, value: JsonValue): Promise<RuntimeSettingRecord>;
6
+ export declare function appendRuntimeControlEvent(client: QueryClient, scope: string, type: string, data?: JsonObject): Promise<RuntimeControlEvent>;
7
+ export declare function listRuntimeControlEvents(client: QueryClient, scope: string): Promise<RuntimeControlEvent[]>;
8
+ //# sourceMappingURL=adapter-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-settings.d.ts","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAG3H;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAUjI;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAOrJ;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CASjH"}
@@ -0,0 +1,38 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { normalizeJsonObject, normalizeJsonValue, timestamp, toIso } from "./sql-helpers.js";
3
+ export async function getSetting(client, scope, key) {
4
+ const result = await client.query("select * from openeve_runtime_settings where scope=$1 and key=$2", [scope, key]);
5
+ return result.rows[0] ? mapSetting(result.rows[0]) : undefined;
6
+ }
7
+ export async function setSetting(client, scope, key, value) {
8
+ const updatedAt = timestamp();
9
+ const result = await client.query(`insert into openeve_runtime_settings (scope, key, value, updated_at)
10
+ values ($1,$2,$3::jsonb,$4)
11
+ on conflict (scope, key) do update set value=excluded.value, updated_at=excluded.updated_at
12
+ returning *`, [scope, key, JSON.stringify(value), updatedAt]);
13
+ return mapSetting(result.rows[0]);
14
+ }
15
+ export async function appendRuntimeControlEvent(client, scope, type, data = {}) {
16
+ const event = { id: randomUUID(), scope, type, data, timestamp: timestamp() };
17
+ await client.query("insert into openeve_runtime_control_events (id, scope, type, data, created_at) values ($1,$2,$3,$4::jsonb,$5)", [event.id, scope, type, JSON.stringify(data), event.timestamp]);
18
+ return event;
19
+ }
20
+ export async function listRuntimeControlEvents(client, scope) {
21
+ const result = await client.query("select * from openeve_runtime_control_events where scope=$1 order by created_at asc", [scope]);
22
+ return result.rows.map((row) => ({
23
+ id: String(row.id),
24
+ scope: String(row.scope),
25
+ type: String(row.type),
26
+ data: normalizeJsonObject(row.data),
27
+ timestamp: toIso(row.created_at)
28
+ }));
29
+ }
30
+ function mapSetting(row) {
31
+ return {
32
+ scope: String(row.scope),
33
+ key: String(row.key),
34
+ value: normalizeJsonValue(row.value),
35
+ updatedAt: toIso(row.updated_at)
36
+ };
37
+ }
38
+ //# sourceMappingURL=adapter-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-settings.js","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW;IAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,kEAAkE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,KAAgB;IAChG,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;;;iBAGa,EACb,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC/C,CAAC;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAmB,EAAE,KAAa,EAAE,IAAY,EAAE,OAAmB,EAAE;IACrH,MAAM,KAAK,GAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;IACnG,MAAM,MAAM,CAAC,KAAK,CAChB,+GAA+G,EAC/G,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAC/D,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAmB,EAAE,KAAa;IAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,qFAAqF,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvI,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ;IAC1B,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACpB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type UsageAggregate, type UsageQuery, type UsageRecord, type UsageRecordInput, type UsageSummaryQuery } from "@assemblyline-agents/runtime";
2
+ import type { QueryClient } from "./client-types.js";
3
+ export declare function recordUsage(client: QueryClient, input: UsageRecordInput): Promise<UsageRecord>;
4
+ export declare function listUsage(client: QueryClient, runId?: string): Promise<UsageRecord[]>;
5
+ export declare function queryUsage(client: QueryClient, query: UsageQuery): Promise<UsageRecord[]>;
6
+ export declare function summarizeUsage(client: QueryClient, query: UsageSummaryQuery): Promise<UsageAggregate[]>;
7
+ //# sourceMappingURL=adapter-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-usage.d.ts","sourceRoot":"","sources":["../src/adapter-usage.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAEpG;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAK3F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAY/F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgD7G"}
@@ -0,0 +1,243 @@
1
+ import { UsageAccountingError, createUsageRecord, reconcileUsageRecord, usageRecordInput } from "@assemblyline-agents/runtime";
2
+ import { mapUsage } from "./row-mappers.js";
3
+ import { toIso } from "./sql-helpers.js";
4
+ export async function recordUsage(client, input) {
5
+ return withTransaction(client, (tx) => insertUsage(tx, createUsageRecord(input)));
6
+ }
7
+ export async function listUsage(client, runId) {
8
+ const result = runId
9
+ ? await client.query("select * from openeve_usage_records where run_id=$1 order by occurred_at asc, id asc", [runId])
10
+ : await client.query("select * from openeve_usage_records order by occurred_at asc, id asc");
11
+ return result.rows.map(mapUsage);
12
+ }
13
+ export async function queryUsage(client, query) {
14
+ const built = usageWhere(query);
15
+ const limit = boundedLimit(query.limit);
16
+ built.params.push(limit);
17
+ const result = await client.query(`select * from openeve_usage_records
18
+ ${built.sql}
19
+ order by occurred_at desc, id desc
20
+ limit $${built.params.length}`, built.params);
21
+ return result.rows.map(mapUsage);
22
+ }
23
+ export async function summarizeUsage(client, query) {
24
+ const built = usageWhere(query);
25
+ const groups = [...new Set([...(query.groupBy ?? []), "currency"])];
26
+ const selections = groups.map(groupSelection);
27
+ const selectPrefix = selections.length > 0
28
+ ? `${selections.map((selection) => `${selection.expression} as "${selection.alias}"`).join(", ")},`
29
+ : "";
30
+ const groupSql = selections.length > 0
31
+ ? `group by ${selections.map((selection) => selection.expression).join(", ")}`
32
+ : "";
33
+ const result = await client.query(`select ${selectPrefix}
34
+ count(*)::text as record_count,
35
+ coalesce(sum(input_tokens), 0)::text as input_tokens,
36
+ coalesce(sum(output_tokens), 0)::text as output_tokens,
37
+ coalesce(sum(cached_tokens), 0)::text as cached_tokens,
38
+ coalesce(sum(cache_write_tokens), 0)::text as cache_write_tokens,
39
+ coalesce(sum(reasoning_tokens), 0)::text as reasoning_tokens,
40
+ coalesce(sum(cost_micros), 0)::text as actual_cost_micros,
41
+ coalesce(sum(upstream_cost_micros), 0)::text as upstream_cost_micros,
42
+ coalesce(min(currency), 'USD') as currency,
43
+ count(*) filter (where cost_source='unavailable')::text as unavailable_cost_records,
44
+ count(*) filter (where token_source='unavailable')::text as unreconciled_token_records,
45
+ count(*) filter (where cost_source='unavailable')::text as unreconciled_records
46
+ from openeve_usage_records
47
+ ${built.sql}
48
+ ${groupSql}
49
+ order by ${selections.length > 0 ? selections.map((selection) => `"${selection.alias}"`).join(", ") : "record_count desc"}`, built.params);
50
+ return result.rows.map((row) => ({
51
+ dimensions: Object.fromEntries(selections.map((selection) => [
52
+ selection.group,
53
+ row[selection.alias] === null || row[selection.alias] === undefined ? "unknown" : String(row[selection.alias])
54
+ ])),
55
+ recordCount: String(row.record_count ?? "0"),
56
+ inputTokens: String(row.input_tokens ?? "0"),
57
+ outputTokens: String(row.output_tokens ?? "0"),
58
+ cachedTokens: String(row.cached_tokens ?? "0"),
59
+ cacheWriteTokens: String(row.cache_write_tokens ?? "0"),
60
+ reasoningTokens: String(row.reasoning_tokens ?? "0"),
61
+ actualCostMicros: String(row.actual_cost_micros ?? "0"),
62
+ upstreamCostMicros: String(row.upstream_cost_micros ?? "0"),
63
+ currency: String(row.currency ?? "USD"),
64
+ unavailableCostRecords: String(row.unavailable_cost_records ?? "0"),
65
+ unreconciledTokenRecords: String(row.unreconciled_token_records ?? "0"),
66
+ unreconciledRecords: String(row.unreconciled_records ?? "0")
67
+ }));
68
+ }
69
+ async function insertUsage(client, record) {
70
+ const result = await client.query(`insert into openeve_usage_records
71
+ (id,idempotency_key,run_id,parent_run_id,agent_id,agent_revision,subagent,turn_id,iteration,
72
+ provider,provider_request_id,model,response_model,billing_mode,record_kind,
73
+ input_tokens,output_tokens,cached_tokens,cache_write_tokens,reasoning_tokens,
74
+ cost_usd,cost_micros,upstream_cost_micros,currency,
75
+ token_source,cost_source,provider_receipt,receipt_sha256,metadata,occurred_at,created_at)
76
+ values
77
+ ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,
78
+ $21,$22,$23,$24,$25,$26,$27::jsonb,$28,$29::jsonb,$30,$31)
79
+ on conflict (idempotency_key) do nothing
80
+ returning *`, [
81
+ record.id,
82
+ record.idempotencyKey,
83
+ record.runId ?? null,
84
+ record.parentRunId ?? null,
85
+ record.agentId ?? null,
86
+ record.agentRevision ?? null,
87
+ record.subagent ?? null,
88
+ record.turnId ?? null,
89
+ record.iteration ?? null,
90
+ record.provider ?? null,
91
+ record.providerRequestId ?? null,
92
+ record.model ?? null,
93
+ record.responseModel ?? null,
94
+ record.billingMode,
95
+ record.recordKind,
96
+ record.inputTokens,
97
+ record.outputTokens,
98
+ record.cachedTokens,
99
+ record.cacheWriteTokens,
100
+ record.reasoningTokens,
101
+ record.costUsd ?? 0,
102
+ record.costMicros,
103
+ record.upstreamCostMicros,
104
+ record.currency,
105
+ record.tokenSource,
106
+ record.costSource,
107
+ JSON.stringify(record.providerReceipt),
108
+ record.receiptSha256 ?? null,
109
+ JSON.stringify(record.metadata),
110
+ record.occurredAt,
111
+ record.createdAt
112
+ ]);
113
+ const inserted = result.rows[0];
114
+ if (inserted)
115
+ return mapUsage(inserted);
116
+ const existing = await client.query("select * from openeve_usage_records where idempotency_key=$1 for update", [record.idempotencyKey]);
117
+ const row = existing.rows[0];
118
+ if (!row)
119
+ throw new UsageAccountingError(`Usage idempotency conflict did not return ${record.idempotencyKey}.`);
120
+ const current = mapUsage(row);
121
+ const reconciled = reconcileUsageRecord(current, usageRecordInput(record));
122
+ if (reconciled === current)
123
+ return current;
124
+ const updated = await client.query(`update openeve_usage_records
125
+ set input_tokens=$2,output_tokens=$3,cached_tokens=$4,cache_write_tokens=$5,reasoning_tokens=$6,
126
+ cost_usd=$7,cost_micros=$8,upstream_cost_micros=$9,
127
+ currency=$10,token_source=$11,cost_source=$12,provider_receipt=$13::jsonb,
128
+ receipt_sha256=$14,metadata=$15::jsonb
129
+ where id=$1
130
+ returning *`, [
131
+ reconciled.id,
132
+ reconciled.inputTokens,
133
+ reconciled.outputTokens,
134
+ reconciled.cachedTokens,
135
+ reconciled.cacheWriteTokens,
136
+ reconciled.reasoningTokens,
137
+ reconciled.costUsd ?? 0,
138
+ reconciled.costMicros,
139
+ reconciled.upstreamCostMicros,
140
+ reconciled.currency,
141
+ reconciled.tokenSource,
142
+ reconciled.costSource,
143
+ JSON.stringify(reconciled.providerReceipt),
144
+ reconciled.receiptSha256 ?? null,
145
+ JSON.stringify(reconciled.metadata)
146
+ ]);
147
+ const updatedRow = updated.rows[0];
148
+ if (!updatedRow)
149
+ throw new UsageAccountingError(`Usage reconciliation update failed for ${record.idempotencyKey}.`);
150
+ return mapUsage(updatedRow);
151
+ }
152
+ function usageWhere(query) {
153
+ const clauses = [];
154
+ const params = [];
155
+ const add = (column, value) => {
156
+ if (value === undefined)
157
+ return;
158
+ params.push(value);
159
+ clauses.push(`${column}=$${params.length}`);
160
+ };
161
+ add("run_id", query.runId);
162
+ add("parent_run_id", query.parentRunId);
163
+ add("agent_id", query.agentId);
164
+ add("agent_revision", query.agentRevision);
165
+ add("subagent", query.subagent);
166
+ add("provider", query.provider);
167
+ add("model", query.model);
168
+ add("response_model", query.responseModel);
169
+ add("billing_mode", query.billingMode);
170
+ add("currency", query.currency?.trim().toUpperCase());
171
+ add("token_source", query.tokenSource);
172
+ add("cost_source", query.costSource);
173
+ add("record_kind", query.recordKind);
174
+ if (query.from !== undefined) {
175
+ params.push(toIso(query.from));
176
+ clauses.push(`occurred_at >= $${params.length}`);
177
+ }
178
+ if (query.to !== undefined) {
179
+ params.push(toIso(query.to));
180
+ clauses.push(`occurred_at < $${params.length}`);
181
+ }
182
+ if ("before" in query && query.before) {
183
+ params.push(query.before.occurredAt, query.before.id);
184
+ clauses.push(`(occurred_at, id) < ($${params.length - 1}, $${params.length})`);
185
+ }
186
+ return { sql: clauses.length > 0 ? `where ${clauses.join(" and ")}` : "", params };
187
+ }
188
+ function groupSelection(group) {
189
+ const columns = {
190
+ agentId: "coalesce(agent_id,'unknown')",
191
+ agentRevision: "coalesce(agent_revision,'unknown')",
192
+ runId: "coalesce(run_id,'unknown')",
193
+ parentRunId: "coalesce(parent_run_id,'unknown')",
194
+ subagent: "coalesce(subagent,'unknown')",
195
+ provider: "coalesce(provider,'unknown')",
196
+ model: "coalesce(model,'unknown')",
197
+ responseModel: "coalesce(response_model,'unknown')",
198
+ billingMode: "billing_mode",
199
+ currency: "currency",
200
+ tokenSource: "token_source",
201
+ costSource: "cost_source",
202
+ recordKind: "record_kind"
203
+ };
204
+ if (group === "day")
205
+ return { group, alias: "day", expression: "to_char(occurred_at at time zone 'UTC','YYYY-MM-DD')" };
206
+ if (group === "month")
207
+ return { group, alias: "month", expression: "to_char(occurred_at at time zone 'UTC','YYYY-MM')" };
208
+ return { group, alias: snakeCase(group), expression: columns[group] };
209
+ }
210
+ async function withTransaction(client, operation) {
211
+ const pool = client;
212
+ const pinned = await pool.connect?.();
213
+ const tx = pinned ?? client;
214
+ try {
215
+ await tx.query("begin");
216
+ const result = await operation(tx);
217
+ await tx.query("commit");
218
+ return result;
219
+ }
220
+ catch (error) {
221
+ try {
222
+ await tx.query("rollback");
223
+ }
224
+ catch {
225
+ // Preserve the original accounting error.
226
+ }
227
+ throw error;
228
+ }
229
+ finally {
230
+ pinned?.release();
231
+ }
232
+ }
233
+ function boundedLimit(value) {
234
+ if (value === undefined)
235
+ return 200;
236
+ if (!Number.isInteger(value) || value < 1)
237
+ throw new UsageAccountingError("limit must be a positive integer.");
238
+ return Math.min(value, 10_000);
239
+ }
240
+ function snakeCase(value) {
241
+ return value.replace(/[A-Z]/gu, (letter) => `_${letter.toLowerCase()}`);
242
+ }
243
+ //# sourceMappingURL=adapter-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-usage.js","sourceRoot":"","sources":["../src/adapter-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface QueryClient {
2
+ query<Row = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{
3
+ rows: Row[];
4
+ }>;
5
+ }
6
+ //# sourceMappingURL=client-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-types.d.ts","sourceRoot":"","sources":["../src/client-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;CACjG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-types.js","sourceRoot":"","sources":["../src/client-types.ts"],"names":[],"mappings":""}