@cat-factory/node-server 0.95.2 → 0.96.1
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.
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +16 -5
- package/dist/container.js.map +1 -1
- package/dist/repositories/drizzle/_shared.d.ts +2 -0
- package/dist/repositories/drizzle/_shared.d.ts.map +1 -0
- package/dist/repositories/drizzle/_shared.js +11 -0
- package/dist/repositories/drizzle/_shared.js.map +1 -0
- package/dist/repositories/drizzle/accounts.d.ts +62 -0
- package/dist/repositories/drizzle/accounts.d.ts.map +1 -0
- package/dist/repositories/drizzle/accounts.js +438 -0
- package/dist/repositories/drizzle/accounts.js.map +1 -0
- package/dist/repositories/drizzle/board.d.ts +74 -0
- package/dist/repositories/drizzle/board.d.ts.map +1 -0
- package/dist/repositories/drizzle/board.js +489 -0
- package/dist/repositories/drizzle/board.js.map +1 -0
- package/dist/repositories/drizzle/connections.d.ts +84 -0
- package/dist/repositories/drizzle/connections.d.ts.map +1 -0
- package/dist/repositories/drizzle/connections.js +391 -0
- package/dist/repositories/drizzle/connections.js.map +1 -0
- package/dist/repositories/drizzle/execution.d.ts +58 -0
- package/dist/repositories/drizzle/execution.d.ts.map +1 -0
- package/dist/repositories/drizzle/execution.js +585 -0
- package/dist/repositories/drizzle/execution.js.map +1 -0
- package/dist/repositories/drizzle/initiatives.d.ts +54 -0
- package/dist/repositories/drizzle/initiatives.d.ts.map +1 -0
- package/dist/repositories/drizzle/initiatives.js +343 -0
- package/dist/repositories/drizzle/initiatives.js.map +1 -0
- package/dist/repositories/drizzle/kaizen.d.ts +34 -0
- package/dist/repositories/drizzle/kaizen.d.ts.map +1 -0
- package/dist/repositories/drizzle/kaizen.js +192 -0
- package/dist/repositories/drizzle/kaizen.js.map +1 -0
- package/dist/repositories/drizzle/reviews.d.ts +75 -0
- package/dist/repositories/drizzle/reviews.d.ts.map +1 -0
- package/dist/repositories/drizzle/reviews.js +449 -0
- package/dist/repositories/drizzle/reviews.js.map +1 -0
- package/dist/repositories/drizzle/sandbox.d.ts +61 -0
- package/dist/repositories/drizzle/sandbox.d.ts.map +1 -0
- package/dist/repositories/drizzle/sandbox.js +370 -0
- package/dist/repositories/drizzle/sandbox.js.map +1 -0
- package/dist/repositories/drizzle/settings.d.ts +76 -0
- package/dist/repositories/drizzle/settings.d.ts.map +1 -0
- package/dist/repositories/drizzle/settings.js +377 -0
- package/dist/repositories/drizzle/settings.js.map +1 -0
- package/dist/repositories/drizzle/telemetry.d.ts +60 -0
- package/dist/repositories/drizzle/telemetry.d.ts.map +1 -0
- package/dist/repositories/drizzle/telemetry.js +559 -0
- package/dist/repositories/drizzle/telemetry.js.map +1 -0
- package/dist/repositories/drizzle.d.ts +6 -113
- package/dist/repositories/drizzle.d.ts.map +1 -1
- package/dist/repositories/drizzle.js +20 -4118
- package/dist/repositories/drizzle.js.map +1 -1
- package/package.json +7 -7
|
@@ -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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"}
|