@cat-factory/node-server 0.95.2 → 0.97.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 (69) hide show
  1. package/dist/container.d.ts.map +1 -1
  2. package/dist/container.js +26 -5
  3. package/dist/container.js.map +1 -1
  4. package/dist/db/schema.d.ts.map +1 -1
  5. package/dist/db/schema.js +3 -0
  6. package/dist/db/schema.js.map +1 -1
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +4 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/machineEventRelay.d.ts +21 -0
  12. package/dist/machineEventRelay.d.ts.map +1 -0
  13. package/dist/machineEventRelay.js +34 -0
  14. package/dist/machineEventRelay.js.map +1 -0
  15. package/dist/propagator.d.ts +1 -1
  16. package/dist/propagator.d.ts.map +1 -1
  17. package/dist/propagator.js +6 -1
  18. package/dist/propagator.js.map +1 -1
  19. package/dist/repositories/drizzle/_shared.d.ts +2 -0
  20. package/dist/repositories/drizzle/_shared.d.ts.map +1 -0
  21. package/dist/repositories/drizzle/_shared.js +11 -0
  22. package/dist/repositories/drizzle/_shared.js.map +1 -0
  23. package/dist/repositories/drizzle/accounts.d.ts +62 -0
  24. package/dist/repositories/drizzle/accounts.d.ts.map +1 -0
  25. package/dist/repositories/drizzle/accounts.js +438 -0
  26. package/dist/repositories/drizzle/accounts.js.map +1 -0
  27. package/dist/repositories/drizzle/board.d.ts +74 -0
  28. package/dist/repositories/drizzle/board.d.ts.map +1 -0
  29. package/dist/repositories/drizzle/board.js +489 -0
  30. package/dist/repositories/drizzle/board.js.map +1 -0
  31. package/dist/repositories/drizzle/connections.d.ts +84 -0
  32. package/dist/repositories/drizzle/connections.d.ts.map +1 -0
  33. package/dist/repositories/drizzle/connections.js +391 -0
  34. package/dist/repositories/drizzle/connections.js.map +1 -0
  35. package/dist/repositories/drizzle/execution.d.ts +58 -0
  36. package/dist/repositories/drizzle/execution.d.ts.map +1 -0
  37. package/dist/repositories/drizzle/execution.js +585 -0
  38. package/dist/repositories/drizzle/execution.js.map +1 -0
  39. package/dist/repositories/drizzle/initiatives.d.ts +54 -0
  40. package/dist/repositories/drizzle/initiatives.d.ts.map +1 -0
  41. package/dist/repositories/drizzle/initiatives.js +343 -0
  42. package/dist/repositories/drizzle/initiatives.js.map +1 -0
  43. package/dist/repositories/drizzle/kaizen.d.ts +34 -0
  44. package/dist/repositories/drizzle/kaizen.d.ts.map +1 -0
  45. package/dist/repositories/drizzle/kaizen.js +192 -0
  46. package/dist/repositories/drizzle/kaizen.js.map +1 -0
  47. package/dist/repositories/drizzle/reviews.d.ts +75 -0
  48. package/dist/repositories/drizzle/reviews.d.ts.map +1 -0
  49. package/dist/repositories/drizzle/reviews.js +449 -0
  50. package/dist/repositories/drizzle/reviews.js.map +1 -0
  51. package/dist/repositories/drizzle/sandbox.d.ts +61 -0
  52. package/dist/repositories/drizzle/sandbox.d.ts.map +1 -0
  53. package/dist/repositories/drizzle/sandbox.js +370 -0
  54. package/dist/repositories/drizzle/sandbox.js.map +1 -0
  55. package/dist/repositories/drizzle/settings.d.ts +76 -0
  56. package/dist/repositories/drizzle/settings.d.ts.map +1 -0
  57. package/dist/repositories/drizzle/settings.js +377 -0
  58. package/dist/repositories/drizzle/settings.js.map +1 -0
  59. package/dist/repositories/drizzle/telemetry.d.ts +60 -0
  60. package/dist/repositories/drizzle/telemetry.d.ts.map +1 -0
  61. package/dist/repositories/drizzle/telemetry.js +559 -0
  62. package/dist/repositories/drizzle/telemetry.js.map +1 -0
  63. package/dist/repositories/drizzle.d.ts +6 -113
  64. package/dist/repositories/drizzle.d.ts.map +1 -1
  65. package/dist/repositories/drizzle.js +20 -4118
  66. package/dist/repositories/drizzle.js.map +1 -1
  67. package/drizzle/20260716082429_big_polaris/migration.sql +1 -0
  68. package/drizzle/20260716082429_big_polaris/snapshot.json +15675 -0
  69. package/package.json +18 -18
@@ -0,0 +1,559 @@
1
+ // Drizzle/Postgres implementations of the core kernel repository ports, split by
2
+ // domain (mirrors the Cloudflare D1 per-repository layout). The row<->domain mapping
3
+ // is the SAME shared mapping the D1 repos use (@cat-factory/server), so behaviour
4
+ // matches across stores; this layer only owns the Drizzle queries. Assembled into the
5
+ // CoreRepositories set by ./drizzle.ts (the barrel).
6
+ import { parseJsonArray } from './_shared.js';
7
+ import { LLM_WARNING_FINISH_REASONS } from '@cat-factory/kernel';
8
+ import { isWebSearchProvider } from '@cat-factory/contracts';
9
+ import { and, asc, count, desc, eq, gte, inArray, lt, sql } from 'drizzle-orm';
10
+ import { agentContextSnapshots, agentSearchQueries, binaryArtifacts, llmCallMetrics, provisioningLog, tokenUsage, } from '../../db/schema.js';
11
+ export class DrizzleTokenUsageRepository {
12
+ db;
13
+ constructor(db) {
14
+ this.db = db;
15
+ }
16
+ async record(usage) {
17
+ await this.db.insert(tokenUsage).values({
18
+ id: usage.id,
19
+ workspace_id: usage.workspaceId,
20
+ account_id: usage.accountId,
21
+ user_id: usage.userId,
22
+ execution_id: usage.executionId,
23
+ agent_kind: usage.agentKind,
24
+ provider: usage.provider,
25
+ model: usage.model,
26
+ input_tokens: usage.inputTokens,
27
+ output_tokens: usage.outputTokens,
28
+ cost_estimate: usage.costEstimate,
29
+ billing: usage.billing,
30
+ vendor: usage.vendor,
31
+ created_at: usage.createdAt,
32
+ });
33
+ }
34
+ async usageBreakdownForWorkspace(workspaceId, epochMs) {
35
+ // One GROUP BY over the workspace's current period — both billing kinds (the report
36
+ // shows total usage). Never a per-model loop. sum() of int columns is bigint; cast +
37
+ // coerce like the totals rollups. Ordered heaviest-first in SQL, mirroring the D1 repo.
38
+ const rows = await this.db
39
+ .select({
40
+ billing: tokenUsage.billing,
41
+ vendor: tokenUsage.vendor,
42
+ provider: tokenUsage.provider,
43
+ model: tokenUsage.model,
44
+ input: sql `coalesce(sum(${tokenUsage.input_tokens}), 0)::bigint`,
45
+ output: sql `coalesce(sum(${tokenUsage.output_tokens}), 0)::bigint`,
46
+ cost: sql `coalesce(sum(${tokenUsage.cost_estimate}), 0)::float8`,
47
+ calls: sql `count(*)::bigint`,
48
+ })
49
+ .from(tokenUsage)
50
+ .where(and(eq(tokenUsage.workspace_id, workspaceId), gte(tokenUsage.created_at, epochMs)))
51
+ .groupBy(tokenUsage.billing, tokenUsage.vendor, tokenUsage.provider, tokenUsage.model)
52
+ .orderBy(sql `(coalesce(sum(${tokenUsage.input_tokens}), 0) + coalesce(sum(${tokenUsage.output_tokens}), 0)) desc`);
53
+ return rows.map((r) => ({
54
+ billing: (r.billing === 'subscription' ? 'subscription' : 'metered'),
55
+ vendor: r.vendor,
56
+ provider: r.provider,
57
+ model: r.model,
58
+ inputTokens: Number(r.input ?? 0),
59
+ outputTokens: Number(r.output ?? 0),
60
+ costEstimate: r.cost ?? 0,
61
+ calls: Number(r.calls ?? 0),
62
+ }));
63
+ }
64
+ async totalsSince(epochMs) {
65
+ // sum() of int columns is bigint in Postgres — cast to bigint (NOT int4, which
66
+ // overflows past ~2.1B tokens) and coerce: node-postgres returns bigint as a
67
+ // string to avoid precision loss, and token totals stay well within Number's
68
+ // safe-integer range. Matches the 64-bit sum the D1/SQLite store returns.
69
+ const [row] = await this.db
70
+ .select({
71
+ input: sql `coalesce(sum(${tokenUsage.input_tokens}), 0)::bigint`,
72
+ output: sql `coalesce(sum(${tokenUsage.output_tokens}), 0)::bigint`,
73
+ cost: sql `coalesce(sum(${tokenUsage.cost_estimate}), 0)::float8`,
74
+ })
75
+ .from(tokenUsage)
76
+ .where(and(gte(tokenUsage.created_at, epochMs), eq(tokenUsage.billing, 'metered')));
77
+ return {
78
+ inputTokens: Number(row?.input ?? 0),
79
+ outputTokens: Number(row?.output ?? 0),
80
+ costEstimate: row?.cost ?? 0,
81
+ };
82
+ }
83
+ async totalsSinceForWorkspace(workspaceId, epochMs) {
84
+ const [row] = await this.db
85
+ .select({
86
+ input: sql `coalesce(sum(${tokenUsage.input_tokens}), 0)::bigint`,
87
+ output: sql `coalesce(sum(${tokenUsage.output_tokens}), 0)::bigint`,
88
+ cost: sql `coalesce(sum(${tokenUsage.cost_estimate}), 0)::float8`,
89
+ })
90
+ .from(tokenUsage)
91
+ .where(and(eq(tokenUsage.workspace_id, workspaceId), gte(tokenUsage.created_at, epochMs), eq(tokenUsage.billing, 'metered')));
92
+ return {
93
+ inputTokens: Number(row?.input ?? 0),
94
+ outputTokens: Number(row?.output ?? 0),
95
+ costEstimate: row?.cost ?? 0,
96
+ };
97
+ }
98
+ async totalsSinceForAccount(accountId, epochMs) {
99
+ const [row] = await this.db
100
+ .select({
101
+ input: sql `coalesce(sum(${tokenUsage.input_tokens}), 0)::bigint`,
102
+ output: sql `coalesce(sum(${tokenUsage.output_tokens}), 0)::bigint`,
103
+ cost: sql `coalesce(sum(${tokenUsage.cost_estimate}), 0)::float8`,
104
+ })
105
+ .from(tokenUsage)
106
+ .where(and(eq(tokenUsage.account_id, accountId), gte(tokenUsage.created_at, epochMs), eq(tokenUsage.billing, 'metered')));
107
+ return {
108
+ inputTokens: Number(row?.input ?? 0),
109
+ outputTokens: Number(row?.output ?? 0),
110
+ costEstimate: row?.cost ?? 0,
111
+ };
112
+ }
113
+ async totalsSinceForUser(userId, epochMs) {
114
+ const [row] = await this.db
115
+ .select({
116
+ input: sql `coalesce(sum(${tokenUsage.input_tokens}), 0)::bigint`,
117
+ output: sql `coalesce(sum(${tokenUsage.output_tokens}), 0)::bigint`,
118
+ cost: sql `coalesce(sum(${tokenUsage.cost_estimate}), 0)::float8`,
119
+ })
120
+ .from(tokenUsage)
121
+ .where(and(eq(tokenUsage.user_id, userId), gte(tokenUsage.created_at, epochMs), eq(tokenUsage.billing, 'metered')));
122
+ return {
123
+ inputTokens: Number(row?.input ?? 0),
124
+ outputTokens: Number(row?.output ?? 0),
125
+ costEstimate: row?.cost ?? 0,
126
+ };
127
+ }
128
+ async deleteOlderThan(epochMs) {
129
+ const deleted = await this.db
130
+ .delete(tokenUsage)
131
+ .where(lt(tokenUsage.created_at, epochMs))
132
+ .returning({ id: tokenUsage.id });
133
+ return deleted.length;
134
+ }
135
+ }
136
+ function rowToLlmMetric(row) {
137
+ return {
138
+ id: row.id,
139
+ workspaceId: row.workspace_id,
140
+ executionId: row.execution_id,
141
+ agentKind: row.agent_kind,
142
+ provider: row.provider,
143
+ model: row.model,
144
+ createdAt: row.created_at,
145
+ streaming: row.streaming === 1,
146
+ messageCount: row.message_count,
147
+ toolCount: row.tool_count,
148
+ requestMaxTokens: row.request_max_tokens,
149
+ promptTokens: row.prompt_tokens,
150
+ cachedPromptTokens: row.cached_prompt_tokens,
151
+ completionTokens: row.completion_tokens,
152
+ totalTokens: row.total_tokens,
153
+ finishReason: row.finish_reason,
154
+ upstreamMs: row.upstream_ms,
155
+ overheadMs: row.overhead_ms,
156
+ totalMs: row.total_ms,
157
+ ok: row.ok === 1,
158
+ httpStatus: row.http_status,
159
+ errorMessage: row.error_message,
160
+ promptText: row.prompt_text,
161
+ promptPrefixCount: row.prompt_prefix_count,
162
+ promptHash: row.prompt_hash,
163
+ responseText: row.response_text,
164
+ reasoningText: row.reasoning_text,
165
+ };
166
+ }
167
+ export class DrizzleLlmCallMetricRepository {
168
+ db;
169
+ constructor(db) {
170
+ this.db = db;
171
+ }
172
+ async record(metric) {
173
+ await this.db.insert(llmCallMetrics).values({
174
+ id: metric.id,
175
+ workspace_id: metric.workspaceId,
176
+ execution_id: metric.executionId,
177
+ agent_kind: metric.agentKind,
178
+ provider: metric.provider,
179
+ model: metric.model,
180
+ created_at: metric.createdAt,
181
+ streaming: metric.streaming ? 1 : 0,
182
+ message_count: metric.messageCount,
183
+ tool_count: metric.toolCount,
184
+ request_max_tokens: metric.requestMaxTokens,
185
+ prompt_tokens: metric.promptTokens,
186
+ cached_prompt_tokens: metric.cachedPromptTokens,
187
+ completion_tokens: metric.completionTokens,
188
+ total_tokens: metric.totalTokens,
189
+ finish_reason: metric.finishReason,
190
+ upstream_ms: metric.upstreamMs,
191
+ overhead_ms: metric.overheadMs,
192
+ total_ms: metric.totalMs,
193
+ ok: metric.ok ? 1 : 0,
194
+ http_status: metric.httpStatus,
195
+ error_message: metric.errorMessage,
196
+ prompt_text: metric.promptText,
197
+ prompt_prefix_count: metric.promptPrefixCount,
198
+ prompt_hash: metric.promptHash,
199
+ response_text: metric.responseText,
200
+ reasoning_text: metric.reasoningText,
201
+ });
202
+ }
203
+ async latestChainTip(workspaceId, executionId, agentKind) {
204
+ // The newest call for the conversation; one indexed row, no text columns.
205
+ const rows = await this.db
206
+ .select({
207
+ messageCount: llmCallMetrics.message_count,
208
+ promptHash: llmCallMetrics.prompt_hash,
209
+ })
210
+ .from(llmCallMetrics)
211
+ .where(and(eq(llmCallMetrics.workspace_id, workspaceId), eq(llmCallMetrics.execution_id, executionId), eq(llmCallMetrics.agent_kind, agentKind)))
212
+ // message_count breaks a same-millisecond createdAt tie in chain order (it grows
213
+ // monotonically as the conversation appends); id is the last resort.
214
+ .orderBy(desc(llmCallMetrics.created_at), desc(llmCallMetrics.message_count), desc(llmCallMetrics.id))
215
+ .limit(1);
216
+ const row = rows[0];
217
+ return row ? { messageCount: row.messageCount, promptHash: row.promptHash } : null;
218
+ }
219
+ async listByExecution(workspaceId, executionId, limit, agentKind) {
220
+ const base = this.db
221
+ .select()
222
+ .from(llmCallMetrics)
223
+ .where(and(eq(llmCallMetrics.workspace_id, workspaceId), eq(llmCallMetrics.execution_id, executionId), ...(agentKind == null ? [] : [eq(llmCallMetrics.agent_kind, agentKind)])))
224
+ .orderBy(desc(llmCallMetrics.created_at), desc(llmCallMetrics.id));
225
+ const rows = await (limit == null ? base : base.limit(limit));
226
+ return rows.map(rowToLlmMetric);
227
+ }
228
+ async summarizeByExecution(workspaceId, executionId) {
229
+ // Aggregate-only: selects no prompt/response text, so it stays cheap on every
230
+ // execution emit (it backs the live board rollups). int sums fit Number's safe
231
+ // range here (per-run call counts/tokens are small), so a plain ::bigint cast
232
+ // matching the SQLite 64-bit sum is unnecessary — totals are coerced below.
233
+ const reasons = [...LLM_WARNING_FINISH_REASONS];
234
+ const rows = await this.db
235
+ .select({
236
+ agentKind: llmCallMetrics.agent_kind,
237
+ calls: sql `count(*)::int`,
238
+ promptTokens: sql `coalesce(sum(${llmCallMetrics.prompt_tokens}), 0)::int`,
239
+ cachedPromptTokens: sql `coalesce(sum(${llmCallMetrics.cached_prompt_tokens}), 0)::int`,
240
+ completionTokens: sql `coalesce(sum(${llmCallMetrics.completion_tokens}), 0)::int`,
241
+ peakCompletionTokens: sql `coalesce(max(${llmCallMetrics.completion_tokens}), 0)::int`,
242
+ maxOutputTokens: sql `max(${llmCallMetrics.request_max_tokens})`,
243
+ truncatedCalls: sql `coalesce(sum(case when ${llmCallMetrics.finish_reason} = 'length' then 1 else 0 end), 0)::int`,
244
+ upstreamMs: sql `coalesce(sum(${llmCallMetrics.upstream_ms}), 0)::int`,
245
+ overheadMs: sql `coalesce(sum(${llmCallMetrics.overhead_ms}), 0)::int`,
246
+ errors: sql `coalesce(sum(case when ${llmCallMetrics.ok} = 0 then 1 else 0 end), 0)::int`,
247
+ // `inArray` builds the IN-list membership: idiomatic, type-checked, and tied to
248
+ // the shared constant. (A raw `${...finish_reason} in ${reasons}` renders the same
249
+ // `in ($1, $2)` on this drizzle version; inArray just documents intent and can't
250
+ // silently mis-bind the array.)
251
+ warnings: sql `coalesce(sum(case when ${llmCallMetrics.ok} = 1 and ${inArray(llmCallMetrics.finish_reason, reasons)} then 1 else 0 end), 0)::int`,
252
+ })
253
+ .from(llmCallMetrics)
254
+ .where(and(eq(llmCallMetrics.workspace_id, workspaceId), eq(llmCallMetrics.execution_id, executionId)))
255
+ .groupBy(llmCallMetrics.agent_kind);
256
+ return rows.map((r) => ({
257
+ agentKind: r.agentKind,
258
+ calls: Number(r.calls),
259
+ promptTokens: Number(r.promptTokens),
260
+ cachedPromptTokens: Number(r.cachedPromptTokens),
261
+ completionTokens: Number(r.completionTokens),
262
+ peakCompletionTokens: Number(r.peakCompletionTokens),
263
+ maxOutputTokens: r.maxOutputTokens == null ? null : Number(r.maxOutputTokens),
264
+ truncatedCalls: Number(r.truncatedCalls),
265
+ upstreamMs: Number(r.upstreamMs),
266
+ overheadMs: Number(r.overheadMs),
267
+ errors: Number(r.errors),
268
+ warnings: Number(r.warnings),
269
+ }));
270
+ }
271
+ async deleteOlderThan(epochMs) {
272
+ const deleted = await this.db
273
+ .delete(llmCallMetrics)
274
+ .where(lt(llmCallMetrics.created_at, epochMs))
275
+ .returning({ id: llmCallMetrics.id });
276
+ return deleted.length;
277
+ }
278
+ }
279
+ function rowToAgentContextSnapshot(row) {
280
+ return {
281
+ id: row.id,
282
+ workspaceId: row.workspace_id,
283
+ executionId: row.execution_id,
284
+ agentKind: row.agent_kind,
285
+ stepIndex: row.step_index,
286
+ createdAt: row.created_at,
287
+ model: row.model,
288
+ harness: row.harness,
289
+ systemPrompt: row.system_prompt,
290
+ userPrompt: row.user_prompt,
291
+ fragments: parseJsonArray(row.fragments),
292
+ contextFiles: parseJsonArray(row.context_files),
293
+ extras: parseAgentContextExtras(row.extras),
294
+ };
295
+ }
296
+ /** Parse the extras JSON object column, degrading a malformed value to {}. */
297
+ function parseAgentContextExtras(text) {
298
+ try {
299
+ const parsed = JSON.parse(text);
300
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
301
+ ? parsed
302
+ : {};
303
+ }
304
+ catch {
305
+ return {};
306
+ }
307
+ }
308
+ export class DrizzleAgentContextSnapshotRepository {
309
+ db;
310
+ constructor(db) {
311
+ this.db = db;
312
+ }
313
+ async record(snapshot) {
314
+ await this.db.insert(agentContextSnapshots).values({
315
+ id: snapshot.id,
316
+ workspace_id: snapshot.workspaceId,
317
+ execution_id: snapshot.executionId,
318
+ agent_kind: snapshot.agentKind,
319
+ step_index: snapshot.stepIndex,
320
+ created_at: snapshot.createdAt,
321
+ model: snapshot.model,
322
+ harness: snapshot.harness,
323
+ system_prompt: snapshot.systemPrompt,
324
+ user_prompt: snapshot.userPrompt,
325
+ fragments: JSON.stringify(snapshot.fragments),
326
+ context_files: JSON.stringify(snapshot.contextFiles),
327
+ extras: JSON.stringify(snapshot.extras),
328
+ });
329
+ }
330
+ async listByExecution(workspaceId, executionId) {
331
+ const rows = await this.db
332
+ .select()
333
+ .from(agentContextSnapshots)
334
+ .where(and(eq(agentContextSnapshots.workspace_id, workspaceId), eq(agentContextSnapshots.execution_id, executionId)))
335
+ .orderBy(desc(agentContextSnapshots.created_at), desc(agentContextSnapshots.id));
336
+ return rows.map(rowToAgentContextSnapshot);
337
+ }
338
+ async deleteOlderThan(epochMs) {
339
+ const deleted = await this.db
340
+ .delete(agentContextSnapshots)
341
+ .where(lt(agentContextSnapshots.created_at, epochMs))
342
+ .returning({ id: agentContextSnapshots.id });
343
+ return deleted.length;
344
+ }
345
+ }
346
+ function rowToAgentSearchQuery(row) {
347
+ return {
348
+ id: row.id,
349
+ workspaceId: row.workspace_id,
350
+ executionId: row.execution_id,
351
+ agentKind: row.agent_kind,
352
+ // The stored provider column is free-text; narrow it back to the wire union.
353
+ provider: isWebSearchProvider(row.provider) ? row.provider : null,
354
+ query: row.query,
355
+ resultCount: row.result_count,
356
+ createdAt: row.created_at,
357
+ };
358
+ }
359
+ export class DrizzleAgentSearchQueryRepository {
360
+ db;
361
+ constructor(db) {
362
+ this.db = db;
363
+ }
364
+ async record(query) {
365
+ await this.db.insert(agentSearchQueries).values({
366
+ id: query.id,
367
+ workspace_id: query.workspaceId,
368
+ execution_id: query.executionId,
369
+ agent_kind: query.agentKind,
370
+ provider: query.provider,
371
+ query: query.query,
372
+ result_count: query.resultCount,
373
+ created_at: query.createdAt,
374
+ });
375
+ }
376
+ async listByExecution(workspaceId, executionId) {
377
+ const rows = await this.db
378
+ .select()
379
+ .from(agentSearchQueries)
380
+ .where(and(eq(agentSearchQueries.workspace_id, workspaceId), eq(agentSearchQueries.execution_id, executionId)))
381
+ .orderBy(desc(agentSearchQueries.created_at), desc(agentSearchQueries.id));
382
+ return rows.map(rowToAgentSearchQuery);
383
+ }
384
+ async deleteOlderThan(epochMs) {
385
+ const deleted = await this.db
386
+ .delete(agentSearchQueries)
387
+ .where(lt(agentSearchQueries.created_at, epochMs))
388
+ .returning({ id: agentSearchQueries.id });
389
+ return deleted.length;
390
+ }
391
+ }
392
+ function rowToBinaryArtifact(row) {
393
+ return {
394
+ id: row.id,
395
+ workspaceId: row.workspace_id,
396
+ executionId: row.execution_id,
397
+ blockId: row.block_id,
398
+ kind: row.kind,
399
+ view: row.view,
400
+ contentType: row.content_type,
401
+ byteSize: row.byte_size,
402
+ hash: row.hash,
403
+ storage: row.storage,
404
+ storageKey: row.storage_key,
405
+ createdAt: row.created_at,
406
+ };
407
+ }
408
+ /** Drizzle/Postgres metadata store for binary artifacts (mirror of D1 migration 0017). */
409
+ export class DrizzleBinaryArtifactMetadataStore {
410
+ db;
411
+ constructor(db) {
412
+ this.db = db;
413
+ }
414
+ async insert(record) {
415
+ await this.db.insert(binaryArtifacts).values({
416
+ workspace_id: record.workspaceId,
417
+ id: record.id,
418
+ execution_id: record.executionId,
419
+ block_id: record.blockId,
420
+ kind: record.kind,
421
+ view: record.view,
422
+ content_type: record.contentType,
423
+ byte_size: record.byteSize,
424
+ hash: record.hash,
425
+ storage: record.storage,
426
+ storage_key: record.storageKey,
427
+ created_at: record.createdAt,
428
+ });
429
+ }
430
+ async get(workspaceId, id) {
431
+ const rows = await this.db
432
+ .select()
433
+ .from(binaryArtifacts)
434
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), eq(binaryArtifacts.id, id)))
435
+ .limit(1);
436
+ return rows[0] ? rowToBinaryArtifact(rows[0]) : null;
437
+ }
438
+ async listByExecution(workspaceId, executionId) {
439
+ const rows = await this.db
440
+ .select()
441
+ .from(binaryArtifacts)
442
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), eq(binaryArtifacts.execution_id, executionId)))
443
+ .orderBy(asc(binaryArtifacts.created_at), asc(binaryArtifacts.id));
444
+ return rows.map(rowToBinaryArtifact);
445
+ }
446
+ async countByExecution(workspaceId, executionId) {
447
+ const rows = await this.db
448
+ .select({ n: count() })
449
+ .from(binaryArtifacts)
450
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), eq(binaryArtifacts.execution_id, executionId)));
451
+ return rows[0]?.n ?? 0;
452
+ }
453
+ async listByBlock(workspaceId, blockId) {
454
+ const rows = await this.db
455
+ .select()
456
+ .from(binaryArtifacts)
457
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), eq(binaryArtifacts.block_id, blockId)))
458
+ .orderBy(asc(binaryArtifacts.created_at), asc(binaryArtifacts.id));
459
+ return rows.map(rowToBinaryArtifact);
460
+ }
461
+ async delete(workspaceId, id) {
462
+ await this.db
463
+ .delete(binaryArtifacts)
464
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), eq(binaryArtifacts.id, id)));
465
+ }
466
+ async listOlderThan(workspaceId, olderThan) {
467
+ const rows = await this.db
468
+ .select()
469
+ .from(binaryArtifacts)
470
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), lt(binaryArtifacts.created_at, olderThan)));
471
+ return rows.map(rowToBinaryArtifact);
472
+ }
473
+ async deleteOlderThan(workspaceId, olderThan) {
474
+ const deleted = await this.db
475
+ .delete(binaryArtifacts)
476
+ .where(and(eq(binaryArtifacts.workspace_id, workspaceId), lt(binaryArtifacts.created_at, olderThan)))
477
+ .returning({ id: binaryArtifacts.id });
478
+ return deleted.length;
479
+ }
480
+ async listByWorkspace(workspaceId) {
481
+ const rows = await this.db
482
+ .select()
483
+ .from(binaryArtifacts)
484
+ .where(eq(binaryArtifacts.workspace_id, workspaceId));
485
+ return rows.map(rowToBinaryArtifact);
486
+ }
487
+ async deleteByWorkspace(workspaceId) {
488
+ const deleted = await this.db
489
+ .delete(binaryArtifacts)
490
+ .where(eq(binaryArtifacts.workspace_id, workspaceId))
491
+ .returning({ id: binaryArtifacts.id });
492
+ return deleted.length;
493
+ }
494
+ }
495
+ function rowToProvisioningLog(row) {
496
+ return {
497
+ id: row.id,
498
+ workspaceId: row.workspace_id,
499
+ subsystem: row.subsystem,
500
+ operation: row.operation,
501
+ targetId: row.target_id,
502
+ providerId: row.provider_id,
503
+ blockId: row.block_id,
504
+ executionId: row.execution_id,
505
+ outcome: row.outcome,
506
+ error: row.error,
507
+ detail: row.detail,
508
+ createdAt: row.created_at,
509
+ };
510
+ }
511
+ /** Drizzle/Postgres provisioning-log sink, in its own `provisioning` schema. */
512
+ export class DrizzleProvisioningLogRepository {
513
+ db;
514
+ constructor(db) {
515
+ this.db = db;
516
+ }
517
+ async append(record) {
518
+ await this.db.insert(provisioningLog).values({
519
+ id: record.id,
520
+ workspace_id: record.workspaceId,
521
+ subsystem: record.subsystem,
522
+ operation: record.operation,
523
+ target_id: record.targetId,
524
+ provider_id: record.providerId,
525
+ block_id: record.blockId,
526
+ execution_id: record.executionId,
527
+ outcome: record.outcome,
528
+ error: record.error,
529
+ detail: record.detail,
530
+ created_at: record.createdAt,
531
+ });
532
+ }
533
+ async list(workspaceId, query = {}) {
534
+ const conditions = [eq(provisioningLog.workspace_id, workspaceId)];
535
+ if (query.subsystem)
536
+ conditions.push(eq(provisioningLog.subsystem, query.subsystem));
537
+ if (query.executionId)
538
+ conditions.push(eq(provisioningLog.execution_id, query.executionId));
539
+ if (query.targetId)
540
+ conditions.push(eq(provisioningLog.target_id, query.targetId));
541
+ if (query.before != null)
542
+ conditions.push(lt(provisioningLog.created_at, query.before));
543
+ const base = this.db
544
+ .select()
545
+ .from(provisioningLog)
546
+ .where(and(...conditions))
547
+ .orderBy(desc(provisioningLog.created_at), desc(provisioningLog.id));
548
+ const rows = await (query.limit == null ? base : base.limit(query.limit));
549
+ return rows.map(rowToProvisioningLog);
550
+ }
551
+ async deleteOlderThan(epochMs) {
552
+ const deleted = await this.db
553
+ .delete(provisioningLog)
554
+ .where(lt(provisioningLog.created_at, epochMs))
555
+ .returning({ id: provisioningLog.id });
556
+ return deleted.length;
557
+ }
558
+ }
559
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/repositories/drizzle/telemetry.ts"],"names":[],"mappings":"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"}