agentenkit 0.2.3 → 0.4.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.
- package/README.md +34 -14
- package/dist/adapters/inline.d.ts +19 -5
- package/dist/adapters/inline.d.ts.map +1 -1
- package/dist/adapters/inline.js +87 -14
- package/dist/adapters/inline.js.map +1 -1
- package/dist/adapters/memory.d.ts +65 -3
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +267 -3
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/prisma.d.ts +125 -18
- package/dist/adapters/prisma.d.ts.map +1 -1
- package/dist/adapters/prisma.js +308 -67
- package/dist/adapters/prisma.js.map +1 -1
- package/dist/adapters/qstash.d.ts +15 -2
- package/dist/adapters/qstash.d.ts.map +1 -1
- package/dist/adapters/qstash.js +31 -14
- package/dist/adapters/qstash.js.map +1 -1
- package/dist/adapters/redis.d.ts +40 -4
- package/dist/adapters/redis.d.ts.map +1 -1
- package/dist/adapters/redis.js +265 -20
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sqlite.d.ts +52 -2
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +342 -35
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/adapters/stream-scripts.d.ts +49 -0
- package/dist/adapters/stream-scripts.d.ts.map +1 -0
- package/dist/adapters/stream-scripts.js +150 -0
- package/dist/adapters/stream-scripts.js.map +1 -0
- package/dist/adapters/upstash.d.ts +20 -0
- package/dist/adapters/upstash.d.ts.map +1 -1
- package/dist/adapters/upstash.js +29 -0
- package/dist/adapters/upstash.js.map +1 -1
- package/dist/admin/memory.d.ts +11 -1
- package/dist/admin/memory.d.ts.map +1 -1
- package/dist/admin/memory.js +83 -14
- package/dist/admin/memory.js.map +1 -1
- package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
- package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
- package/dist/admin/migrations/postgres/index.js +16 -1
- package/dist/admin/migrations/postgres/index.js.map +1 -1
- package/dist/admin/migrations/runner.d.ts +21 -1
- package/dist/admin/migrations/runner.d.ts.map +1 -1
- package/dist/admin/migrations/runner.js +41 -4
- package/dist/admin/migrations/runner.js.map +1 -1
- package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
- package/dist/admin/migrations/sqlite/index.d.ts +2 -2
- package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
- package/dist/admin/migrations/sqlite/index.js +17 -3
- package/dist/admin/migrations/sqlite/index.js.map +1 -1
- package/dist/admin/postgres.d.ts +14 -4
- package/dist/admin/postgres.d.ts.map +1 -1
- package/dist/admin/postgres.js +131 -36
- package/dist/admin/postgres.js.map +1 -1
- package/dist/admin/shared.d.ts +19 -0
- package/dist/admin/shared.d.ts.map +1 -0
- package/dist/admin/shared.js +28 -0
- package/dist/admin/shared.js.map +1 -0
- package/dist/admin/sqlite.d.ts +9 -1
- package/dist/admin/sqlite.d.ts.map +1 -1
- package/dist/admin/sqlite.js +112 -29
- package/dist/admin/sqlite.js.map +1 -1
- package/dist/core/admin.d.ts +28 -6
- package/dist/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +92 -23
- package/dist/core/admin.js.map +1 -1
- package/dist/core/agent.d.ts +7 -4
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +15 -11
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agui.d.ts +17 -0
- package/dist/core/agui.d.ts.map +1 -0
- package/dist/core/agui.js +69 -0
- package/dist/core/agui.js.map +1 -0
- package/dist/core/context.d.ts +13 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +70 -19
- package/dist/core/context.js.map +1 -1
- package/dist/core/deleteThread.d.ts.map +1 -1
- package/dist/core/deleteThread.js +33 -4
- package/dist/core/deleteThread.js.map +1 -1
- package/dist/core/engine.d.ts +41 -11
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +855 -352
- package/dist/core/engine.js.map +1 -1
- package/dist/core/follow.d.ts +63 -1
- package/dist/core/follow.d.ts.map +1 -1
- package/dist/core/follow.js +293 -16
- package/dist/core/follow.js.map +1 -1
- package/dist/core/hitl.d.ts +43 -0
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +163 -35
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/keys.d.ts +22 -4
- package/dist/core/keys.d.ts.map +1 -1
- package/dist/core/keys.js +23 -5
- package/dist/core/keys.js.map +1 -1
- package/dist/core/lease.d.ts +46 -0
- package/dist/core/lease.d.ts.map +1 -0
- package/dist/core/lease.js +142 -0
- package/dist/core/lease.js.map +1 -0
- package/dist/core/loop.d.ts +27 -7
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +140 -55
- package/dist/core/loop.js.map +1 -1
- package/dist/core/messages.d.ts +21 -2
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +61 -2
- package/dist/core/messages.js.map +1 -1
- package/dist/core/prune.d.ts +24 -0
- package/dist/core/prune.d.ts.map +1 -0
- package/dist/core/prune.js +43 -0
- package/dist/core/prune.js.map +1 -0
- package/dist/core/publish.d.ts +38 -10
- package/dist/core/publish.d.ts.map +1 -1
- package/dist/core/publish.js +126 -12
- package/dist/core/publish.js.map +1 -1
- package/dist/core/reclaim.d.ts +8 -1
- package/dist/core/reclaim.d.ts.map +1 -1
- package/dist/core/reclaim.js +149 -18
- package/dist/core/reclaim.js.map +1 -1
- package/dist/core/run.d.ts +7 -3
- package/dist/core/run.d.ts.map +1 -1
- package/dist/core/run.js +95 -35
- package/dist/core/run.js.map +1 -1
- package/dist/core/segment.d.ts +62 -0
- package/dist/core/segment.d.ts.map +1 -0
- package/dist/core/segment.js +318 -0
- package/dist/core/segment.js.map +1 -0
- package/dist/core/settle.d.ts +57 -0
- package/dist/core/settle.d.ts.map +1 -0
- package/dist/core/settle.js +181 -0
- package/dist/core/settle.js.map +1 -0
- package/dist/core/snapshot.d.ts +36 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/core/snapshot.js +87 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/stop.d.ts +16 -1
- package/dist/core/stop.d.ts.map +1 -1
- package/dist/core/stop.js +69 -15
- package/dist/core/stop.js.map +1 -1
- package/dist/core/stream-events.d.ts +184 -0
- package/dist/core/stream-events.d.ts.map +1 -0
- package/dist/core/stream-events.js +26 -0
- package/dist/core/stream-events.js.map +1 -0
- package/dist/core/stream.d.ts +29 -0
- package/dist/core/stream.d.ts.map +1 -1
- package/dist/core/stream.js +79 -0
- package/dist/core/stream.js.map +1 -1
- package/dist/core/subagent.d.ts +36 -5
- package/dist/core/subagent.d.ts.map +1 -1
- package/dist/core/subagent.js +117 -22
- package/dist/core/subagent.js.map +1 -1
- package/dist/core/types.d.ts +197 -11
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +26 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/usage.d.ts +53 -5
- package/dist/core/usage.d.ts.map +1 -1
- package/dist/core/usage.js +170 -47
- package/dist/core/usage.js.map +1 -1
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -7
- package/dist/index.js.map +1 -1
- package/dist/ports/admin.d.ts +59 -0
- package/dist/ports/admin.d.ts.map +1 -1
- package/dist/ports/kv.d.ts +17 -0
- package/dist/ports/kv.d.ts.map +1 -1
- package/dist/ports/queue.d.ts +87 -7
- package/dist/ports/queue.d.ts.map +1 -1
- package/dist/ports/queue.js +36 -1
- package/dist/ports/queue.js.map +1 -1
- package/dist/ports/runtime.d.ts +171 -20
- package/dist/ports/runtime.d.ts.map +1 -1
- package/dist/ports/storage.d.ts +26 -5
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/ports/streams.d.ts +60 -0
- package/dist/ports/streams.d.ts.map +1 -0
- package/dist/ports/streams.js +20 -0
- package/dist/ports/streams.js.map +1 -0
- package/dist/pricing.d.ts +5 -0
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +35 -10
- package/dist/pricing.js.map +1 -1
- package/dist/runtime.d.ts +6 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +144 -46
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/admin/postgres.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addRunTotals, emptyRunTotals, JSON_COLUMNS, RUN_COLUMNS } from './shared.js';
|
|
1
2
|
import { gatedAdminStore, runMigrations } from './migrations/runner.js';
|
|
2
3
|
import { dialect, migrations } from './migrations/postgres/index.js';
|
|
3
4
|
/** Open a `pg` Pool from a connection string. Dynamically imported so the
|
|
@@ -33,18 +34,54 @@ async function migrate(db) {
|
|
|
33
34
|
client?.release();
|
|
34
35
|
}
|
|
35
36
|
}
|
|
37
|
+
/** The RunFilter as a WHERE clause, limit aside. */
|
|
38
|
+
function runWhere(f) {
|
|
39
|
+
const where = [];
|
|
40
|
+
const vals = [];
|
|
41
|
+
if (f.state?.length)
|
|
42
|
+
where.push(`state = ANY($${vals.push(f.state)})`);
|
|
43
|
+
if (f.agent)
|
|
44
|
+
where.push(`agent = $${vals.push(f.agent)}`);
|
|
45
|
+
if (f.threadId)
|
|
46
|
+
where.push(`"threadId" = $${vals.push(f.threadId)}`);
|
|
47
|
+
if (f.threadIds?.length)
|
|
48
|
+
where.push(`"threadId" = ANY($${vals.push(f.threadIds)})`);
|
|
49
|
+
if (f.since)
|
|
50
|
+
where.push(`"startedAt" >= $${vals.push(f.since)}`);
|
|
51
|
+
if (f.until)
|
|
52
|
+
where.push(`"startedAt" <= $${vals.push(f.until)}`);
|
|
53
|
+
if (f.unsettled)
|
|
54
|
+
where.push('"endedAt" IS NOT NULL AND "settledAt" IS NULL');
|
|
55
|
+
if (f.depth !== undefined)
|
|
56
|
+
where.push(`depth = $${vals.push(f.depth)}`);
|
|
57
|
+
if (f.before) {
|
|
58
|
+
where.push(`("startedAt", id) < ($${vals.push(f.before.startedAt)}, $${vals.push(f.before.id)})`);
|
|
59
|
+
}
|
|
60
|
+
return { where: where.length ? ` WHERE ${where.join(' AND ')}` : '', vals };
|
|
61
|
+
}
|
|
62
|
+
/** BIGINT columns come back from `pg` as strings (§2.9). */
|
|
63
|
+
const num = (v) => (v === null || v === undefined ? null : Number(v));
|
|
64
|
+
const toThread = (r) => ({
|
|
65
|
+
id: r.id, state: r.state, model: r.model,
|
|
66
|
+
firstSeenAt: new Date(r.firstSeenAt), updatedAt: new Date(r.updatedAt),
|
|
67
|
+
startedWith: r.startedWith ? { ...r.startedWith, at: new Date(r.startedWith.at) } : null,
|
|
68
|
+
});
|
|
36
69
|
const toRun = (r) => ({
|
|
37
70
|
id: r.id, threadId: r.threadId, parentRunId: r.parentRunId ?? null, depth: r.depth,
|
|
38
71
|
agent: r.agent, model: r.model, state: r.state,
|
|
39
72
|
stopReason: r.stopReason ?? null, error: r.error ?? null,
|
|
40
73
|
startedAt: new Date(r.startedAt), endedAt: r.endedAt ? new Date(r.endedAt) : null,
|
|
41
|
-
|
|
74
|
+
enqueuedAt: r.enqueuedAt ? new Date(r.enqueuedAt) : null,
|
|
75
|
+
durationMs: num(r.durationMs), queuedMs: num(r.queuedMs),
|
|
76
|
+
settledAt: r.settledAt ? new Date(r.settledAt) : null,
|
|
77
|
+
settlingAt: r.settlingAt ? new Date(r.settlingAt) : null,
|
|
42
78
|
attempts: r.attempts, steps: r.steps,
|
|
43
|
-
inputTokens: r.inputTokens, cachedInputTokens: r.cachedInputTokens,
|
|
44
|
-
outputTokens: r.outputTokens, totalTokens: r.totalTokens,
|
|
79
|
+
inputTokens: Number(r.inputTokens), cachedInputTokens: Number(r.cachedInputTokens),
|
|
80
|
+
outputTokens: Number(r.outputTokens), totalTokens: Number(r.totalTokens),
|
|
45
81
|
result: r.result ?? null,
|
|
46
82
|
prompt: r.prompt ?? null, tokenBudget: r.tokenBudget ?? null,
|
|
47
83
|
runState: r.runState ?? null, providerOptions: r.providerOptions ?? null,
|
|
84
|
+
costBudgetMicros: num(r.costBudgetMicros), maxSteps: num(r.maxSteps),
|
|
48
85
|
});
|
|
49
86
|
/** Operational history in Postgres — the production store (§2.9), reached
|
|
50
87
|
* through AGENTIC_KIT_ADMIN_DATABASE_URL. Point it at its own database or the
|
|
@@ -56,9 +93,10 @@ export class PostgresAdminStore {
|
|
|
56
93
|
}
|
|
57
94
|
/** The store with its schema migration already running behind it (§2.9).
|
|
58
95
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
96
|
+
* Nothing here touches the network: a `pg` Pool connects lazily, so a
|
|
97
|
+
* URL that cannot be reached shows up as a failed migration, logged, and
|
|
98
|
+
* retried on a later admin call (see `gatedAdminStore`). The schema runs
|
|
99
|
+
* in the background, so a service starts at the same speed whether or not
|
|
62
100
|
* it has migrating to do, and the returned store waits for it before its
|
|
63
101
|
* first call.
|
|
64
102
|
*
|
|
@@ -67,14 +105,21 @@ export class PostgresAdminStore {
|
|
|
67
105
|
* race. */
|
|
68
106
|
static connect(db, log) {
|
|
69
107
|
const store = new PostgresAdminStore(db);
|
|
70
|
-
|
|
108
|
+
// A pg Pool emits 'error' when an idle connection drops (a failover, a
|
|
109
|
+
// server restart). An EventEmitter with no listener for it throws, which
|
|
110
|
+
// ends the process. The pool replaces the connection by itself, so a
|
|
111
|
+
// log line is all the error needs. A caller's own listener is left alone.
|
|
112
|
+
const emitter = db;
|
|
113
|
+
if (typeof emitter.on === 'function' && (emitter.listenerCount?.('error') ?? 0) === 0) {
|
|
114
|
+
emitter.on('error', (err) => (log ?? console).error('admin postgres connection error', err));
|
|
115
|
+
}
|
|
116
|
+
return gatedAdminStore(store, () => migrate(db).catch((err) => {
|
|
71
117
|
// Loud, because everything downstream of this is silent: admin writes
|
|
72
118
|
// are best effort, so a failed migration shows up as a dashboard with
|
|
73
119
|
// nothing in it rather than as an error.
|
|
74
120
|
(log ?? console).error('admin migrations failed', err);
|
|
75
121
|
throw err;
|
|
76
|
-
});
|
|
77
|
-
return gatedAdminStore(store, ready);
|
|
122
|
+
}));
|
|
78
123
|
}
|
|
79
124
|
threads = {
|
|
80
125
|
upsert: async (t) => {
|
|
@@ -97,23 +142,52 @@ export class PostgresAdminStore {
|
|
|
97
142
|
where.push(`"updatedAt" >= $${vals.push(f.since)}`);
|
|
98
143
|
const { rows } = await this.db.query(`SELECT * FROM agentic_threads${where.length ? ` WHERE ${where.join(' AND ')}` : ''}
|
|
99
144
|
ORDER BY "updatedAt" DESC LIMIT $${vals.push(f.limit ?? 100)}`, vals);
|
|
100
|
-
return rows.map(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
145
|
+
return rows.map(toThread);
|
|
146
|
+
},
|
|
147
|
+
get: async (threadId) => {
|
|
148
|
+
const { rows } = await this.db.query('SELECT * FROM agentic_threads WHERE id = $1', [threadId]);
|
|
149
|
+
return rows[0] ? toThread(rows[0]) : null;
|
|
150
|
+
},
|
|
151
|
+
delete: async (threadId) => {
|
|
152
|
+
await this.transaction(async (q) => {
|
|
153
|
+
await q('DELETE FROM agentic_steps WHERE "threadId" = $1', [threadId]);
|
|
154
|
+
await q('DELETE FROM agentic_runs WHERE "threadId" = $1', [threadId]);
|
|
155
|
+
await q('DELETE FROM agentic_threads WHERE id = $1', [threadId]);
|
|
156
|
+
});
|
|
105
157
|
},
|
|
106
158
|
};
|
|
159
|
+
/** Run `fn` in one transaction, on one connection: a pool hands each query
|
|
160
|
+
* whichever connection is free, which is not a transaction at all. */
|
|
161
|
+
async transaction(fn) {
|
|
162
|
+
const conn = this.db.connect ? await this.db.connect() : null;
|
|
163
|
+
const q = (sql, params) => (conn ?? this.db).query(sql, params);
|
|
164
|
+
try {
|
|
165
|
+
await q('BEGIN');
|
|
166
|
+
try {
|
|
167
|
+
await fn(q);
|
|
168
|
+
await q('COMMIT');
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
await q('ROLLBACK').catch(() => undefined);
|
|
172
|
+
throw err;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
conn?.release();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
107
179
|
runs = {
|
|
108
180
|
start: async (run) => {
|
|
109
181
|
const { rows } = await this.db.query(`INSERT INTO agentic_runs
|
|
110
182
|
(id, "threadId", "parentRunId", depth, agent, model, state,
|
|
111
|
-
prompt, "tokenBudget", "runState", "providerOptions")
|
|
112
|
-
VALUES ($1, $2, $3, $4, $5, $6,
|
|
183
|
+
prompt, "tokenBudget", "runState", "providerOptions", "enqueuedAt", "costBudgetMicros", "maxSteps")
|
|
184
|
+
VALUES ($1, $2, $3, $4, $5, $6, $11, $7, $8, $9, $10, $12, $13, $14) RETURNING *`, [
|
|
113
185
|
run.id, run.threadId, run.parentRunId ?? null, run.depth ?? 0,
|
|
114
186
|
run.agent, run.model, run.prompt ?? null, run.tokenBudget ?? null,
|
|
115
187
|
run.runState ? JSON.stringify(run.runState) : null,
|
|
116
188
|
run.providerOptions ? JSON.stringify(run.providerOptions) : null,
|
|
189
|
+
run.state ?? 'RUNNING', run.enqueuedAt ?? null,
|
|
190
|
+
run.costBudgetMicros ?? null, run.maxSteps ?? null,
|
|
117
191
|
]);
|
|
118
192
|
return toRun(rows[0]);
|
|
119
193
|
},
|
|
@@ -121,10 +195,11 @@ export class PostgresAdminStore {
|
|
|
121
195
|
const sets = [];
|
|
122
196
|
const vals = [];
|
|
123
197
|
for (const [k, v] of Object.entries(patch)) {
|
|
124
|
-
|
|
125
|
-
continue;
|
|
198
|
+
// Only the run's own columns, never a key SQL was built from blindly.
|
|
126
199
|
// JSON columns need the value serialised; everything else pg handles.
|
|
127
|
-
|
|
200
|
+
if (v === undefined || !RUN_COLUMNS.has(k))
|
|
201
|
+
continue;
|
|
202
|
+
sets.push(`"${k}" = $${vals.push(JSON_COLUMNS.has(k) ? JSON.stringify(v) : v)}`);
|
|
128
203
|
}
|
|
129
204
|
if (sets.length === 0)
|
|
130
205
|
return;
|
|
@@ -139,22 +214,42 @@ export class PostgresAdminStore {
|
|
|
139
214
|
return rows.map(toRun);
|
|
140
215
|
},
|
|
141
216
|
list: async (f) => {
|
|
142
|
-
const where =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
where.push(`agent = $${vals.push(f.agent)}`);
|
|
148
|
-
if (f.threadId)
|
|
149
|
-
where.push(`"threadId" = $${vals.push(f.threadId)}`);
|
|
150
|
-
if (f.since)
|
|
151
|
-
where.push(`"startedAt" >= $${vals.push(f.since)}`);
|
|
152
|
-
if (f.until)
|
|
153
|
-
where.push(`"startedAt" <= $${vals.push(f.until)}`);
|
|
154
|
-
const { rows } = await this.db.query(`SELECT * FROM agentic_runs${where.length ? ` WHERE ${where.join(' AND ')}` : ''}
|
|
155
|
-
ORDER BY "startedAt" DESC LIMIT $${vals.push(f.limit ?? 100)}`, vals);
|
|
217
|
+
const { where, vals } = runWhere(f);
|
|
218
|
+
// Ordered on the id after the start time, so a page's last run is a
|
|
219
|
+
// cursor that splits the listing exactly (RunFilter.before).
|
|
220
|
+
const { rows } = await this.db.query(`SELECT * FROM agentic_runs${where}
|
|
221
|
+
ORDER BY "startedAt" DESC, id DESC LIMIT $${vals.push(f.limit ?? 100)}`, vals);
|
|
156
222
|
return rows.map(toRun);
|
|
157
223
|
},
|
|
224
|
+
increment: async (runId, d) => {
|
|
225
|
+
await this.db.query(`UPDATE agentic_runs SET steps = steps + $1, "inputTokens" = "inputTokens" + $2,
|
|
226
|
+
"cachedInputTokens" = "cachedInputTokens" + $3, "outputTokens" = "outputTokens" + $4,
|
|
227
|
+
"totalTokens" = "totalTokens" + $5 WHERE id = $6`, [d.steps, d.inputTokens, d.cachedInputTokens, d.outputTokens, d.totalTokens, runId]);
|
|
228
|
+
},
|
|
229
|
+
totals: async (f) => {
|
|
230
|
+
const { where, vals } = runWhere({ ...f, before: undefined });
|
|
231
|
+
const { rows } = await this.db.query(`SELECT state, "stopReason", COUNT(*) AS n, COALESCE(SUM(steps),0) AS steps,
|
|
232
|
+
COALESCE(SUM("inputTokens"),0) AS "inputTokens", COALESCE(SUM("cachedInputTokens"),0) AS "cachedInputTokens",
|
|
233
|
+
COALESCE(SUM("outputTokens"),0) AS "outputTokens", COALESCE(SUM("totalTokens"),0) AS "totalTokens"
|
|
234
|
+
FROM agentic_runs${where} GROUP BY state, "stopReason"`, vals);
|
|
235
|
+
const out = emptyRunTotals();
|
|
236
|
+
for (const r of rows)
|
|
237
|
+
addRunTotals(out, r.state, r.stopReason, Number(r.n), r);
|
|
238
|
+
return out;
|
|
239
|
+
},
|
|
240
|
+
claimSettle: async (runId, token, staleBefore) => {
|
|
241
|
+
const { rows } = await this.db.query(`UPDATE agentic_runs SET "settlingAt" = now(), "settleToken" = $1
|
|
242
|
+
WHERE id = $2 AND "settledAt" IS NULL AND ("settlingAt" IS NULL OR "settlingAt" < $3)
|
|
243
|
+
RETURNING id`, [token, runId, staleBefore]);
|
|
244
|
+
return rows.length === 1;
|
|
245
|
+
},
|
|
246
|
+
endSettle: async (runId, token, settled) => {
|
|
247
|
+
await this.db.query(settled
|
|
248
|
+
? `UPDATE agentic_runs SET "settledAt" = now(), "settlingAt" = NULL, "settleToken" = NULL
|
|
249
|
+
WHERE id = $1 AND "settleToken" = $2`
|
|
250
|
+
: `UPDATE agentic_runs SET "settlingAt" = NULL, "settleToken" = NULL
|
|
251
|
+
WHERE id = $1 AND "settleToken" = $2`, [runId, token]);
|
|
252
|
+
},
|
|
158
253
|
countByState: async () => {
|
|
159
254
|
const { rows } = await this.db.query('SELECT state, COUNT(*)::int AS n FROM agentic_runs GROUP BY state');
|
|
160
255
|
return Object.fromEntries(rows.map((r) => [r.state, r.n]));
|
|
@@ -186,9 +281,9 @@ export class PostgresAdminStore {
|
|
|
186
281
|
}
|
|
187
282
|
const toStep = (r) => ({
|
|
188
283
|
runId: r.runId, threadId: r.threadId ?? '', agentId: r.agentId ?? null, index: r.index,
|
|
189
|
-
durationMs: r.durationMs, finishReason: r.finishReason,
|
|
190
|
-
inputTokens: r.inputTokens, cachedInputTokens: r.cachedInputTokens,
|
|
191
|
-
outputTokens: r.outputTokens, totalTokens: r.totalTokens,
|
|
284
|
+
durationMs: Number(r.durationMs), finishReason: r.finishReason,
|
|
285
|
+
inputTokens: Number(r.inputTokens), cachedInputTokens: Number(r.cachedInputTokens),
|
|
286
|
+
outputTokens: Number(r.outputTokens), totalTokens: Number(r.totalTokens),
|
|
192
287
|
tools: r.tools ?? [], text: r.text ?? null,
|
|
193
288
|
toolCalls: r.toolCalls ?? [], at: new Date(r.at),
|
|
194
289
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ExecutionState } from '../core/types.js';
|
|
2
|
+
import type { RunTotals } from '../ports/admin.js';
|
|
3
|
+
/** Zero totals over no runs. */
|
|
4
|
+
export declare const emptyRunTotals: () => RunTotals;
|
|
5
|
+
/** Fold one group of `runs` runs (one state and stop reason, with their
|
|
6
|
+
* summed counters) into totals. Every admin store groups the same way. */
|
|
7
|
+
export declare function addRunTotals(out: RunTotals, state: ExecutionState, stopReason: string | null | undefined, runs: number, sums: {
|
|
8
|
+
steps: number;
|
|
9
|
+
inputTokens: number;
|
|
10
|
+
cachedInputTokens: number;
|
|
11
|
+
outputTokens: number;
|
|
12
|
+
totalTokens: number;
|
|
13
|
+
}): void;
|
|
14
|
+
/** The run columns a patch may write (§2.9). Anything else in a patch is
|
|
15
|
+
* ignored rather than turned into SQL. */
|
|
16
|
+
export declare const RUN_COLUMNS: Set<string>;
|
|
17
|
+
/** The run columns that hold JSON. */
|
|
18
|
+
export declare const JSON_COLUMNS: Set<string>;
|
|
19
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/admin/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,gCAAgC;AAChC,eAAO,MAAM,cAAc,QAAO,SAGhC,CAAC;AAEH;2EAC2E;AAC3E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACjH,IAAI,CASN;AAED;2CAC2C;AAC3C,eAAO,MAAM,WAAW,aAItB,CAAC;AACH,sCAAsC;AACtC,eAAO,MAAM,YAAY,aAAqD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Zero totals over no runs. */
|
|
2
|
+
export const emptyRunTotals = () => ({
|
|
3
|
+
runs: 0, byState: {}, byStopReason: {}, steps: 0,
|
|
4
|
+
inputTokens: 0, cachedInputTokens: 0, outputTokens: 0, totalTokens: 0,
|
|
5
|
+
});
|
|
6
|
+
/** Fold one group of `runs` runs (one state and stop reason, with their
|
|
7
|
+
* summed counters) into totals. Every admin store groups the same way. */
|
|
8
|
+
export function addRunTotals(out, state, stopReason, runs, sums) {
|
|
9
|
+
out.runs += runs;
|
|
10
|
+
out.byState[state] = (out.byState[state] ?? 0) + runs;
|
|
11
|
+
if (stopReason)
|
|
12
|
+
out.byStopReason[stopReason] = (out.byStopReason[stopReason] ?? 0) + runs;
|
|
13
|
+
out.steps += Number(sums.steps);
|
|
14
|
+
out.inputTokens += Number(sums.inputTokens);
|
|
15
|
+
out.cachedInputTokens += Number(sums.cachedInputTokens);
|
|
16
|
+
out.outputTokens += Number(sums.outputTokens);
|
|
17
|
+
out.totalTokens += Number(sums.totalTokens);
|
|
18
|
+
}
|
|
19
|
+
/** The run columns a patch may write (§2.9). Anything else in a patch is
|
|
20
|
+
* ignored rather than turned into SQL. */
|
|
21
|
+
export const RUN_COLUMNS = new Set([
|
|
22
|
+
'state', 'stopReason', 'error', 'startedAt', 'endedAt', 'enqueuedAt', 'durationMs', 'queuedMs',
|
|
23
|
+
'settledAt', 'steps', 'inputTokens', 'cachedInputTokens', 'outputTokens', 'totalTokens',
|
|
24
|
+
'attempts', 'result', 'prompt', 'tokenBudget', 'runState', 'providerOptions', 'costBudgetMicros', 'maxSteps',
|
|
25
|
+
]);
|
|
26
|
+
/** The run columns that hold JSON. */
|
|
27
|
+
export const JSON_COLUMNS = new Set(['result', 'runState', 'providerOptions']);
|
|
28
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/admin/shared.ts"],"names":[],"mappings":"AAGA,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAc,EAAE,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAChD,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;CACtE,CAAC,CAAC;AAEH;2EAC2E;AAC3E,MAAM,UAAU,YAAY,CAC1B,GAAc,EACd,KAAqB,EACrB,UAAqC,EACrC,IAAY,EACZ,IAAkH;IAElH,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACjB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACtD,IAAI,UAAU;QAAE,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1F,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED;2CAC2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU;IAC9F,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa;IACvF,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU;CAC7G,CAAC,CAAC;AACH,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC"}
|
package/dist/admin/sqlite.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExecutionState, NewRunRecord, RunPatch, RunRecord } from '../core/types.js';
|
|
2
|
-
import type { AdminStore, AdminThread, AdminThreadFilter, NewAdminThread, NewStepRecord, RunFilter, StepRecord } from '../ports/admin.js';
|
|
2
|
+
import type { AdminStore, AdminThread, AdminThreadFilter, NewAdminThread, NewStepRecord, RunDeltas, RunFilter, RunTotals, StepRecord } from '../ports/admin.js';
|
|
3
3
|
import type { SqliteLike } from '../adapters/sqlite.js';
|
|
4
4
|
/** Operational history in SQLite — what `dev: true` uses (§2.9).
|
|
5
5
|
*
|
|
@@ -32,13 +32,21 @@ export declare class SqliteAdminStore implements AdminStore {
|
|
|
32
32
|
upsert: (t: NewAdminThread) => Promise<void>;
|
|
33
33
|
countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
|
|
34
34
|
list: (f: AdminThreadFilter) => Promise<AdminThread[]>;
|
|
35
|
+
get: (threadId: string) => Promise<AdminThread | null>;
|
|
36
|
+
delete: (threadId: string) => Promise<void>;
|
|
35
37
|
};
|
|
38
|
+
/** The RunFilter as a WHERE clause, limit aside. */
|
|
39
|
+
private runWhere;
|
|
36
40
|
runs: {
|
|
37
41
|
start: (run: NewRunRecord) => Promise<RunRecord>;
|
|
38
42
|
patch: (runId: string, patch: RunPatch) => Promise<void>;
|
|
39
43
|
get: (runId: string) => Promise<RunRecord | null>;
|
|
40
44
|
listByThread: (threadId: string) => Promise<RunRecord[]>;
|
|
41
45
|
list: (f: RunFilter) => Promise<RunRecord[]>;
|
|
46
|
+
increment: (runId: string, d: RunDeltas) => Promise<void>;
|
|
47
|
+
totals: (f: RunFilter) => Promise<RunTotals>;
|
|
48
|
+
claimSettle: (runId: string, token: string, staleBefore: Date) => Promise<boolean>;
|
|
49
|
+
endSettle: (runId: string, token: string, settled: boolean) => Promise<void>;
|
|
42
50
|
countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
|
|
43
51
|
};
|
|
44
52
|
steps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAC3D,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAaxD;;;;;;;4CAO4C;AAC5C,qBAAa,gBAAiB,YAAW,UAAU;IAG7B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;sCAMkC;IAClC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,GAAG,UAAU;IAanG,kEAAkE;IAClE,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK,CAcV;IAEH,OAAO;oBACa,cAAc;;kBAkBhB,iBAAiB,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;wBAkBpC,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;2BAUjC,MAAM;MAY/B;IAEF,oDAAoD;IACpD,OAAO,CAAC,QAAQ;IAwBhB,IAAI;qBACiB,YAAY;uBAgBV,MAAM,SAAS,QAAQ;qBAazB,MAAM;iCAIM,MAAM;kBAGrB,SAAS;2BAUA,MAAM,KAAK,SAAS;oBAQ3B,SAAS,KAAG,OAAO,CAAC,SAAS,CAAC;6BAcrB,MAAM,SAAS,MAAM,eAAe,IAAI;2BAU1C,MAAM,SAAS,MAAM,WAAW,OAAO;;MAkBhE;IAEF,KAAK;oBACe,aAAa;2BASN,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;iCAGxB,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;MAG7D;IAEF,OAAO,CAAC,MAAM,CAOX;CACJ"}
|
package/dist/admin/sqlite.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addRunTotals, emptyRunTotals, JSON_COLUMNS, RUN_COLUMNS } from './shared.js';
|
|
1
2
|
import { gatedAdminStore, runMigrations } from './migrations/runner.js';
|
|
2
3
|
import { dialect, migrations } from './migrations/sqlite/index.js';
|
|
3
4
|
const date = (n) => (n == null ? null : new Date(n));
|
|
@@ -32,14 +33,13 @@ export class SqliteAdminStore {
|
|
|
32
33
|
* not it has migrating to do. */
|
|
33
34
|
static open(db, log) {
|
|
34
35
|
const store = new SqliteAdminStore(db);
|
|
35
|
-
|
|
36
|
+
return gatedAdminStore(store, () => runMigrations(store.driver(), dialect, migrations).catch((err) => {
|
|
36
37
|
// Loud, because everything downstream of this is silent: admin writes
|
|
37
38
|
// are best effort, so a failed migration shows up as a dashboard with
|
|
38
39
|
// nothing in it rather than as an error.
|
|
39
40
|
(log ?? console).error('admin migrations failed', err);
|
|
40
41
|
throw err;
|
|
41
|
-
});
|
|
42
|
-
return gatedAdminStore(store, ready);
|
|
42
|
+
}));
|
|
43
43
|
}
|
|
44
44
|
/** The two calls the migrator needs, over this store's handle. */
|
|
45
45
|
driver() {
|
|
@@ -63,14 +63,16 @@ export class SqliteAdminStore {
|
|
|
63
63
|
id: r.id, threadId: r.threadId, parentRunId: r.parentRunId ?? null, depth: r.depth,
|
|
64
64
|
agent: r.agent, model: r.model, state: r.state,
|
|
65
65
|
stopReason: r.stopReason ?? null, error: r.error ?? null,
|
|
66
|
-
startedAt: new Date(r.startedAt), endedAt: date(r.endedAt),
|
|
66
|
+
startedAt: new Date(r.startedAt), endedAt: date(r.endedAt), enqueuedAt: date(r.enqueuedAt),
|
|
67
67
|
durationMs: r.durationMs ?? null, queuedMs: r.queuedMs ?? null,
|
|
68
|
+
settledAt: date(r.settledAt), settlingAt: date(r.settlingAt),
|
|
68
69
|
attempts: r.attempts, steps: r.steps,
|
|
69
70
|
inputTokens: r.inputTokens, cachedInputTokens: r.cachedInputTokens,
|
|
70
71
|
outputTokens: r.outputTokens, totalTokens: r.totalTokens,
|
|
71
72
|
result: parse(r.result),
|
|
72
73
|
prompt: r.prompt ?? null, tokenBudget: r.tokenBudget ?? null,
|
|
73
74
|
runState: parse(r.runState), providerOptions: parse(r.providerOptions),
|
|
75
|
+
costBudgetMicros: r.costBudgetMicros ?? null, maxSteps: r.maxSteps ?? null,
|
|
74
76
|
});
|
|
75
77
|
threads = {
|
|
76
78
|
upsert: async (t) => {
|
|
@@ -104,14 +106,81 @@ export class SqliteAdminStore {
|
|
|
104
106
|
startedWith: parseStart(r.startedWith),
|
|
105
107
|
}));
|
|
106
108
|
},
|
|
109
|
+
get: async (threadId) => {
|
|
110
|
+
const r = this.one('SELECT * FROM agentic_threads WHERE id = ?', threadId);
|
|
111
|
+
return r
|
|
112
|
+
? {
|
|
113
|
+
id: r.id, state: r.state, model: r.model,
|
|
114
|
+
firstSeenAt: new Date(r.firstSeenAt), updatedAt: new Date(r.updatedAt),
|
|
115
|
+
startedWith: parseStart(r.startedWith),
|
|
116
|
+
}
|
|
117
|
+
: null;
|
|
118
|
+
},
|
|
119
|
+
delete: async (threadId) => {
|
|
120
|
+
this.write('BEGIN IMMEDIATE');
|
|
121
|
+
try {
|
|
122
|
+
this.write('DELETE FROM agentic_steps WHERE threadId = ?', threadId);
|
|
123
|
+
this.write('DELETE FROM agentic_runs WHERE threadId = ?', threadId);
|
|
124
|
+
this.write('DELETE FROM agentic_threads WHERE id = ?', threadId);
|
|
125
|
+
this.write('COMMIT');
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
try {
|
|
129
|
+
this.write('ROLLBACK');
|
|
130
|
+
}
|
|
131
|
+
catch { /* already gone */ }
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
},
|
|
107
135
|
};
|
|
136
|
+
/** The RunFilter as a WHERE clause, limit aside. */
|
|
137
|
+
runWhere(f) {
|
|
138
|
+
const where = [];
|
|
139
|
+
const vals = [];
|
|
140
|
+
if (f.state?.length) {
|
|
141
|
+
where.push(`state IN (${f.state.map(() => '?').join(',')})`);
|
|
142
|
+
vals.push(...f.state);
|
|
143
|
+
}
|
|
144
|
+
if (f.agent) {
|
|
145
|
+
where.push('agent = ?');
|
|
146
|
+
vals.push(f.agent);
|
|
147
|
+
}
|
|
148
|
+
if (f.threadId) {
|
|
149
|
+
where.push('threadId = ?');
|
|
150
|
+
vals.push(f.threadId);
|
|
151
|
+
}
|
|
152
|
+
if (f.threadIds?.length) {
|
|
153
|
+
where.push(`threadId IN (${f.threadIds.map(() => '?').join(',')})`);
|
|
154
|
+
vals.push(...f.threadIds);
|
|
155
|
+
}
|
|
156
|
+
if (f.since) {
|
|
157
|
+
where.push('startedAt >= ?');
|
|
158
|
+
vals.push(f.since.getTime());
|
|
159
|
+
}
|
|
160
|
+
if (f.until) {
|
|
161
|
+
where.push('startedAt <= ?');
|
|
162
|
+
vals.push(f.until.getTime());
|
|
163
|
+
}
|
|
164
|
+
if (f.unsettled)
|
|
165
|
+
where.push('endedAt IS NOT NULL AND settledAt IS NULL');
|
|
166
|
+
if (f.depth !== undefined) {
|
|
167
|
+
where.push('depth = ?');
|
|
168
|
+
vals.push(f.depth);
|
|
169
|
+
}
|
|
170
|
+
if (f.before) {
|
|
171
|
+
where.push('(startedAt < ? OR startedAt = ? AND id < ?)');
|
|
172
|
+
vals.push(f.before.startedAt.getTime(), f.before.startedAt.getTime(), f.before.id);
|
|
173
|
+
}
|
|
174
|
+
return { where: where.length ? ` WHERE ${where.join(' AND ')}` : '', vals };
|
|
175
|
+
}
|
|
108
176
|
runs = {
|
|
109
177
|
start: async (run) => {
|
|
110
178
|
const startedAt = Date.now();
|
|
111
|
-
this.write('INSERT INTO agentic_runs (id,threadId,parentRunId,depth,agent,model,state,startedAt,prompt,tokenBudget,runState,providerOptions) VALUES (
|
|
179
|
+
this.write('INSERT INTO agentic_runs (id,threadId,parentRunId,depth,agent,model,state,startedAt,enqueuedAt,prompt,tokenBudget,runState,providerOptions,costBudgetMicros,maxSteps) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', run.id, run.threadId, run.parentRunId ?? null, run.depth ?? 0, run.agent, run.model, run.state ?? 'RUNNING', startedAt, run.enqueuedAt?.getTime() ?? null, run.prompt ?? null, run.tokenBudget ?? null, json(run.runState), json(run.providerOptions), run.costBudgetMicros ?? null, run.maxSteps ?? null);
|
|
112
180
|
return this.toRun({
|
|
113
181
|
...run, parentRunId: run.parentRunId ?? null, depth: run.depth ?? 0,
|
|
114
|
-
state: 'RUNNING', startedAt,
|
|
182
|
+
state: run.state ?? 'RUNNING', startedAt, enqueuedAt: run.enqueuedAt?.getTime() ?? null,
|
|
183
|
+
attempts: 0, steps: 0,
|
|
115
184
|
inputTokens: 0, cachedInputTokens: 0, outputTokens: 0, totalTokens: 0,
|
|
116
185
|
});
|
|
117
186
|
},
|
|
@@ -119,10 +188,12 @@ export class SqliteAdminStore {
|
|
|
119
188
|
const cols = [];
|
|
120
189
|
const vals = [];
|
|
121
190
|
for (const [k, v] of Object.entries(patch)) {
|
|
122
|
-
|
|
191
|
+
// Only the run's own columns, never a key SQL was built from blindly;
|
|
192
|
+
// JSON columns are encoded, since SQLite cannot bind an object.
|
|
193
|
+
if (v === undefined || !RUN_COLUMNS.has(k))
|
|
123
194
|
continue;
|
|
124
195
|
cols.push(`${k} = ?`);
|
|
125
|
-
vals.push(v instanceof Date ? v.getTime() : k
|
|
196
|
+
vals.push(v instanceof Date ? v.getTime() : JSON_COLUMNS.has(k) ? json(v) : v);
|
|
126
197
|
}
|
|
127
198
|
if (cols.length === 0)
|
|
128
199
|
return;
|
|
@@ -135,30 +206,42 @@ export class SqliteAdminStore {
|
|
|
135
206
|
listByThread: async (threadId) => this.all('SELECT * FROM agentic_runs WHERE threadId = ? ORDER BY startedAt DESC', threadId)
|
|
136
207
|
.map(this.toRun),
|
|
137
208
|
list: async (f) => {
|
|
138
|
-
const where =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
vals.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
209
|
+
const { where, vals } = this.runWhere(f);
|
|
210
|
+
// Ordered on the id after the start time, so a page's last run is a
|
|
211
|
+
// cursor that splits the listing exactly (RunFilter.before).
|
|
212
|
+
return this.all(`SELECT * FROM agentic_runs${where}` +
|
|
213
|
+
' ORDER BY startedAt DESC, id DESC LIMIT ?', ...vals, f.limit ?? 100).map(this.toRun);
|
|
214
|
+
},
|
|
215
|
+
increment: async (runId, d) => {
|
|
216
|
+
this.write(`UPDATE agentic_runs SET steps = steps + ?, inputTokens = inputTokens + ?,
|
|
217
|
+
cachedInputTokens = cachedInputTokens + ?, outputTokens = outputTokens + ?,
|
|
218
|
+
totalTokens = totalTokens + ? WHERE id = ?`, d.steps, d.inputTokens, d.cachedInputTokens, d.outputTokens, d.totalTokens, runId);
|
|
219
|
+
},
|
|
220
|
+
totals: async (f) => {
|
|
221
|
+
const { where, vals } = this.runWhere({ ...f, before: undefined });
|
|
222
|
+
const out = emptyRunTotals();
|
|
223
|
+
for (const r of this.all(`SELECT state, stopReason, COUNT(*) AS n, COALESCE(SUM(steps),0) AS steps,
|
|
224
|
+
COALESCE(SUM(inputTokens),0) AS inputTokens, COALESCE(SUM(cachedInputTokens),0) AS cachedInputTokens,
|
|
225
|
+
COALESCE(SUM(outputTokens),0) AS outputTokens, COALESCE(SUM(totalTokens),0) AS totalTokens
|
|
226
|
+
FROM agentic_runs${where} GROUP BY state, stopReason`, ...vals)) {
|
|
227
|
+
addRunTotals(out, r.state, r.stopReason, Number(r.n), r);
|
|
151
228
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
229
|
+
return out;
|
|
230
|
+
},
|
|
231
|
+
claimSettle: async (runId, token, staleBefore) => {
|
|
232
|
+
// The token is new for every claim, so reading it back says whether
|
|
233
|
+
// this write is the one that won.
|
|
234
|
+
this.write(`UPDATE agentic_runs SET settlingAt = ?, settleToken = ?
|
|
235
|
+
WHERE id = ? AND settledAt IS NULL AND (settlingAt IS NULL OR settlingAt < ?)`, Date.now(), token, runId, staleBefore.getTime());
|
|
236
|
+
return this.one('SELECT settleToken FROM agentic_runs WHERE id = ?', runId)?.settleToken === token;
|
|
237
|
+
},
|
|
238
|
+
endSettle: async (runId, token, settled) => {
|
|
239
|
+
if (settled) {
|
|
240
|
+
this.write('UPDATE agentic_runs SET settledAt = ?, settlingAt = NULL, settleToken = NULL WHERE id = ? AND settleToken = ?', Date.now(), runId, token);
|
|
155
241
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
vals.push(f.until.getTime());
|
|
242
|
+
else {
|
|
243
|
+
this.write('UPDATE agentic_runs SET settlingAt = NULL, settleToken = NULL WHERE id = ? AND settleToken = ?', runId, token);
|
|
159
244
|
}
|
|
160
|
-
return this.all(`SELECT * FROM agentic_runs${where.length ? ` WHERE ${where.join(' AND ')}` : ''}` +
|
|
161
|
-
' ORDER BY startedAt DESC LIMIT ?', ...vals, f.limit ?? 100).map(this.toRun);
|
|
162
245
|
},
|
|
163
246
|
countByState: async () => Object.fromEntries(this.all('SELECT state, COUNT(*) AS n FROM agentic_runs GROUP BY state')
|
|
164
247
|
.map((r) => [r.state, r.n])),
|