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
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { StreamClosedError, StreamGoneError } from '../ports/streams.js';
|
|
2
|
+
import { isStreamEnd } from '../core/stream-events.js';
|
|
3
|
+
/** RunStreams over Redis Streams, shared by the Redis and Upstash adapters.
|
|
4
|
+
* Each stream is two keys in one hash slot: a hash with who it belongs to
|
|
5
|
+
* and whether it is closed, and the Redis Stream itself, one entry per
|
|
6
|
+
* event. The offset is the entry id. Every write is one Lua script, so a
|
|
7
|
+
* close can never slip between an append's check and its XADD. The Go
|
|
8
|
+
* adapters run the same scripts on the same keys. */
|
|
9
|
+
export const streamMetaKey = (streamId) => `agent:run:{${streamId}}:meta`;
|
|
10
|
+
export const streamKey = (streamId) => `agent:run:{${streamId}}`;
|
|
11
|
+
/** KEYS: meta, stream. ARGV: threadId, runId, ttlMs. 1 opened, 0 already open. */
|
|
12
|
+
export const STREAM_OPEN_SCRIPT = `if redis.call('EXISTS', KEYS[1]) == 1 then return 0 end
|
|
13
|
+
redis.call('HSET', KEYS[1], 'threadId', ARGV[1], 'runId', ARGV[2], 'closed', '0')
|
|
14
|
+
redis.call('PEXPIRE', KEYS[1], ARGV[3])
|
|
15
|
+
return 1`;
|
|
16
|
+
/** KEYS: meta, stream. ARGV: one event JSON each. The entry ids, or -1 gone,
|
|
17
|
+
* -2 closed. The stream key takes the meta key's expiry. */
|
|
18
|
+
export const STREAM_APPEND_SCRIPT = `local closed = redis.call('HGET', KEYS[1], 'closed')
|
|
19
|
+
if not closed then return -1 end
|
|
20
|
+
if closed == '1' then return -2 end
|
|
21
|
+
local ids = {}
|
|
22
|
+
for i = 1, #ARGV do ids[i] = redis.call('XADD', KEYS[2], '*', 'e', ARGV[i]) end
|
|
23
|
+
local ttl = redis.call('PTTL', KEYS[1])
|
|
24
|
+
if ttl > 0 then redis.call('PEXPIRE', KEYS[2], ttl) end
|
|
25
|
+
return ids`;
|
|
26
|
+
/** KEYS: meta, stream. ARGV: end JSON, graceMs. 1 closed, 0 already closed,
|
|
27
|
+
* -1 gone. */
|
|
28
|
+
export const STREAM_CLOSE_SCRIPT = `local closed = redis.call('HGET', KEYS[1], 'closed')
|
|
29
|
+
if not closed then return -1 end
|
|
30
|
+
if closed == '1' then return 0 end
|
|
31
|
+
redis.call('XADD', KEYS[2], '*', 'e', ARGV[1])
|
|
32
|
+
redis.call('HSET', KEYS[1], 'closed', '1', 'end', ARGV[1])
|
|
33
|
+
redis.call('PEXPIRE', KEYS[1], ARGV[2])
|
|
34
|
+
redis.call('PEXPIRE', KEYS[2], ARGV[2])
|
|
35
|
+
return 1`;
|
|
36
|
+
/** KEYS: meta, stream. ARGV: the XRANGE start ('-', or '(' + an entry id).
|
|
37
|
+
* -1 gone, else { threadId, runId, closed, end JSON or '', entries }. */
|
|
38
|
+
export const STREAM_READ_SCRIPT = `local meta = redis.call('HMGET', KEYS[1], 'threadId', 'runId', 'closed', 'end')
|
|
39
|
+
if not meta[1] then return -1 end
|
|
40
|
+
return { meta[1], meta[2], meta[3], meta[4] or '', redis.call('XRANGE', KEYS[2], ARGV[1], '+') }`;
|
|
41
|
+
/** Compares two entry ids ("<ms>-<seq>"). */
|
|
42
|
+
export function compareEntryIds(a, b) {
|
|
43
|
+
const [am, as] = a.split('-').map(Number);
|
|
44
|
+
const [bm, bs] = b.split('-').map(Number);
|
|
45
|
+
return am - bm || (as ?? 0) - (bs ?? 0);
|
|
46
|
+
}
|
|
47
|
+
export function sleep(ms, signal) {
|
|
48
|
+
return new Promise((resolve) => {
|
|
49
|
+
if (signal?.aborted)
|
|
50
|
+
return resolve();
|
|
51
|
+
const done = () => {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
signal?.removeEventListener('abort', done);
|
|
54
|
+
resolve();
|
|
55
|
+
};
|
|
56
|
+
const timer = setTimeout(done, ms);
|
|
57
|
+
signal?.addEventListener('abort', done, { once: true });
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** A value from a script reply as a string. Upstash's client may already
|
|
61
|
+
* have parsed a JSON string into an object. */
|
|
62
|
+
const text = (v) => (typeof v === 'string' ? v : JSON.stringify(v));
|
|
63
|
+
function parseEntry(entry) {
|
|
64
|
+
const [id, fields] = entry;
|
|
65
|
+
const at = fields.findIndex((f) => text(f) === 'e');
|
|
66
|
+
const raw = fields[at + 1];
|
|
67
|
+
const event = (typeof raw === 'string' ? JSON.parse(raw) : raw);
|
|
68
|
+
return { ...event, offset: text(id) };
|
|
69
|
+
}
|
|
70
|
+
export class ScriptedRunStreams {
|
|
71
|
+
run;
|
|
72
|
+
waitForNews;
|
|
73
|
+
pollMs;
|
|
74
|
+
constructor(run, waitForNews,
|
|
75
|
+
/** The longest a reader waits before reading again, news or not: the
|
|
76
|
+
* floor under a missed wake-up. */
|
|
77
|
+
pollMs) {
|
|
78
|
+
this.run = run;
|
|
79
|
+
this.waitForNews = waitForNews;
|
|
80
|
+
this.pollMs = pollMs;
|
|
81
|
+
}
|
|
82
|
+
async open(streamId, meta, ttlMs) {
|
|
83
|
+
await this.run(STREAM_OPEN_SCRIPT, [streamMetaKey(streamId), streamKey(streamId)], [
|
|
84
|
+
meta.threadId, meta.runId, String(Math.max(1, Math.round(ttlMs))),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
async append(streamId, events) {
|
|
88
|
+
if (events.length === 0)
|
|
89
|
+
return [];
|
|
90
|
+
const res = await this.run(STREAM_APPEND_SCRIPT, [streamMetaKey(streamId), streamKey(streamId)], events.map((e) => JSON.stringify(e)));
|
|
91
|
+
if (Number(res) === -1)
|
|
92
|
+
throw new StreamGoneError(streamId);
|
|
93
|
+
if (Number(res) === -2)
|
|
94
|
+
throw new StreamClosedError(streamId);
|
|
95
|
+
return res.map(text);
|
|
96
|
+
}
|
|
97
|
+
async page(streamId, after) {
|
|
98
|
+
const res = await this.run(STREAM_READ_SCRIPT, [streamMetaKey(streamId), streamKey(streamId)], [
|
|
99
|
+
after ? `(${after}` : '-',
|
|
100
|
+
]);
|
|
101
|
+
if (!Array.isArray(res))
|
|
102
|
+
return null;
|
|
103
|
+
const [threadId, runId, closed, end, entries] = res;
|
|
104
|
+
return {
|
|
105
|
+
meta: { threadId: text(threadId), runId: text(runId) },
|
|
106
|
+
closed: text(closed) === '1',
|
|
107
|
+
end: text(closed) === '1' ? (typeof end === 'string' ? JSON.parse(end) : end) : null,
|
|
108
|
+
items: (entries ?? []).map(parseEntry),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async *read(streamId, after, signal) {
|
|
112
|
+
let cursor = after;
|
|
113
|
+
for (;;) {
|
|
114
|
+
if (signal?.aborted)
|
|
115
|
+
return;
|
|
116
|
+
const page = await this.page(streamId, cursor);
|
|
117
|
+
if (!page)
|
|
118
|
+
throw new StreamGoneError(streamId);
|
|
119
|
+
for (const item of page.items) {
|
|
120
|
+
yield item;
|
|
121
|
+
cursor = item.offset;
|
|
122
|
+
if (isStreamEnd(item))
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Read from past the end item: nothing more will ever come.
|
|
126
|
+
if (page.closed && page.items.length === 0)
|
|
127
|
+
return;
|
|
128
|
+
if (page.items.length === 0) {
|
|
129
|
+
await this.waitForNews(streamKey(streamId), cursor ?? '0-0', this.pollMs, signal);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async snapshot(streamId, after) {
|
|
134
|
+
const page = await this.page(streamId, after ?? null);
|
|
135
|
+
if (!page)
|
|
136
|
+
return null;
|
|
137
|
+
return { meta: page.meta, items: page.items, end: page.end };
|
|
138
|
+
}
|
|
139
|
+
async close(streamId, end, graceMs) {
|
|
140
|
+
const res = await this.run(STREAM_CLOSE_SCRIPT, [streamMetaKey(streamId), streamKey(streamId)], [
|
|
141
|
+
JSON.stringify(end), String(Math.max(1, Math.round(graceMs))),
|
|
142
|
+
]);
|
|
143
|
+
if (Number(res) === -1)
|
|
144
|
+
throw new StreamGoneError(streamId);
|
|
145
|
+
}
|
|
146
|
+
async delete(streamId) {
|
|
147
|
+
await this.run(`redis.call('DEL', KEYS[1], KEYS[2]) return 1`, [streamMetaKey(streamId), streamKey(streamId)], []);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=stream-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-scripts.js","sourceRoot":"","sources":["../../src/adapters/stream-scripts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { AgentEvent } from '../core/types.js';
|
|
2
2
|
import type { Kv } from '../ports/kv.js';
|
|
3
3
|
import type { EventBus } from '../ports/bus.js';
|
|
4
|
+
import { ScriptedRunStreams } from './stream-scripts.js';
|
|
5
|
+
/** The compare-and-act scripts behind `setIfValue` / `delIfValue`, the same
|
|
6
|
+
* ones the Go adapters run: one round trip, atomic on the server. */
|
|
7
|
+
export declare const SET_IF_VALUE_SCRIPT = "if redis.call('GET', KEYS[1]) ~= ARGV[1] then return 0 end\nif tonumber(ARGV[3]) > 0 then redis.call('SET', KEYS[1], ARGV[2], 'PX', ARGV[3]) else redis.call('SET', KEYS[1], ARGV[2]) end\nreturn 1";
|
|
8
|
+
export declare const DEL_IF_VALUE_SCRIPT = "if redis.call('GET', KEYS[1]) ~= ARGV[1] then return 0 end\nreturn redis.call('DEL', KEYS[1])";
|
|
9
|
+
export declare const INCR_WITH_EXPIRY_SCRIPT = "local n = redis.call('INCR', KEYS[1])\nif n == 1 and tonumber(ARGV[1]) > 0 then redis.call('PEXPIRE', KEYS[1], ARGV[1]) end\nreturn n";
|
|
4
10
|
/** Minimal structural type of the @upstash/redis client we use — the real
|
|
5
11
|
* client satisfies it without importing the SDK here. */
|
|
6
12
|
export interface UpstashRedisLike {
|
|
@@ -12,6 +18,7 @@ export interface UpstashRedisLike {
|
|
|
12
18
|
del(...keys: string[]): Promise<unknown>;
|
|
13
19
|
incr(key: string): Promise<number>;
|
|
14
20
|
publish(channel: string, value: string): Promise<unknown>;
|
|
21
|
+
eval(script: string, keys: string[], args: unknown[]): Promise<unknown>;
|
|
15
22
|
}
|
|
16
23
|
/** Reference Kv adapter over Upstash Redis. */
|
|
17
24
|
export declare class UpstashKv implements Kv {
|
|
@@ -24,6 +31,11 @@ export declare class UpstashKv implements Kv {
|
|
|
24
31
|
}): Promise<boolean>;
|
|
25
32
|
del(key: string): Promise<undefined>;
|
|
26
33
|
incr(key: string): Promise<number>;
|
|
34
|
+
setIfValue(key: string, expected: string, value: string, opts?: {
|
|
35
|
+
exSeconds?: number;
|
|
36
|
+
}): Promise<boolean>;
|
|
37
|
+
delIfValue(key: string, expected: string): Promise<boolean>;
|
|
38
|
+
incrWithExpiry(key: string, exSeconds: number): Promise<number>;
|
|
27
39
|
}
|
|
28
40
|
/** Upstash Pub/Sub over REST requires a WebSocket-based subscriber; the Redis
|
|
29
41
|
* REST client's `subscribe` differs per SDK version. Wire it in explicitly:
|
|
@@ -45,4 +57,12 @@ export declare class UpstashBus implements EventBus {
|
|
|
45
57
|
publish(threadId: string, event: AgentEvent): Promise<void>;
|
|
46
58
|
subscribe(threadId: string, handler: (event: AgentEvent) => void): Promise<() => void>;
|
|
47
59
|
}
|
|
60
|
+
/** RunStreams over Upstash Redis Streams: the same keys and scripts as
|
|
61
|
+
* RedisRunStreams (see stream-scripts.ts). Upstash's REST API has no
|
|
62
|
+
* blocking read, so a live reader polls every `pollMs`. */
|
|
63
|
+
export declare class UpstashRunStreams extends ScriptedRunStreams {
|
|
64
|
+
constructor(redis: UpstashRedisLike, opts?: {
|
|
65
|
+
pollMs?: number;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
48
68
|
//# sourceMappingURL=upstash.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstash.d.ts","sourceRoot":"","sources":["../../src/adapters/upstash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"upstash.d.ts","sourceRoot":"","sources":["../../src/adapters/upstash.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/upstash.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import { ScriptedRunStreams, sleep } from './stream-scripts.js';
|
|
2
|
+
/** The compare-and-act scripts behind `setIfValue` / `delIfValue`, the same
|
|
3
|
+
* ones the Go adapters run: one round trip, atomic on the server. */
|
|
4
|
+
export const SET_IF_VALUE_SCRIPT = `if redis.call('GET', KEYS[1]) ~= ARGV[1] then return 0 end
|
|
5
|
+
if tonumber(ARGV[3]) > 0 then redis.call('SET', KEYS[1], ARGV[2], 'PX', ARGV[3]) else redis.call('SET', KEYS[1], ARGV[2]) end
|
|
6
|
+
return 1`;
|
|
7
|
+
export const DEL_IF_VALUE_SCRIPT = `if redis.call('GET', KEYS[1]) ~= ARGV[1] then return 0 end
|
|
8
|
+
return redis.call('DEL', KEYS[1])`;
|
|
9
|
+
export const INCR_WITH_EXPIRY_SCRIPT = `local n = redis.call('INCR', KEYS[1])
|
|
10
|
+
if n == 1 and tonumber(ARGV[1]) > 0 then redis.call('PEXPIRE', KEYS[1], ARGV[1]) end
|
|
11
|
+
return n`;
|
|
1
12
|
/** Reference Kv adapter over Upstash Redis. */
|
|
2
13
|
export class UpstashKv {
|
|
3
14
|
redis;
|
|
@@ -16,6 +27,16 @@ export class UpstashKv {
|
|
|
16
27
|
}
|
|
17
28
|
del(key) { return this.redis.del(key).then(() => undefined); }
|
|
18
29
|
incr(key) { return this.redis.incr(key); }
|
|
30
|
+
async setIfValue(key, expected, value, opts) {
|
|
31
|
+
const ms = Math.round((opts?.exSeconds ?? 0) * 1000);
|
|
32
|
+
return Number(await this.redis.eval(SET_IF_VALUE_SCRIPT, [key], [expected, value, ms])) === 1;
|
|
33
|
+
}
|
|
34
|
+
async delIfValue(key, expected) {
|
|
35
|
+
return Number(await this.redis.eval(DEL_IF_VALUE_SCRIPT, [key], [expected])) === 1;
|
|
36
|
+
}
|
|
37
|
+
async incrWithExpiry(key, exSeconds) {
|
|
38
|
+
return Number(await this.redis.eval(INCR_WITH_EXPIRY_SCRIPT, [key], [Math.round(exSeconds * 1000)]));
|
|
39
|
+
}
|
|
19
40
|
}
|
|
20
41
|
export const THREAD_CHANNEL = (threadId) => `thread:${threadId}:events`;
|
|
21
42
|
export class UpstashBus {
|
|
@@ -43,4 +64,12 @@ export class UpstashBus {
|
|
|
43
64
|
});
|
|
44
65
|
}
|
|
45
66
|
}
|
|
67
|
+
/** RunStreams over Upstash Redis Streams: the same keys and scripts as
|
|
68
|
+
* RedisRunStreams (see stream-scripts.ts). Upstash's REST API has no
|
|
69
|
+
* blocking read, so a live reader polls every `pollMs`. */
|
|
70
|
+
export class UpstashRunStreams extends ScriptedRunStreams {
|
|
71
|
+
constructor(redis, opts = {}) {
|
|
72
|
+
super((script, keys, args) => redis.eval(script, keys, args), (_key, _after, maxMs, signal) => sleep(maxMs, signal), opts.pollMs ?? 250);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
46
75
|
//# sourceMappingURL=upstash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstash.js","sourceRoot":"","sources":["../../src/adapters/upstash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upstash.js","sourceRoot":"","sources":["../../src/adapters/upstash.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/memory.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
|
/** Operational history held in memory — tests, and the default when nothing
|
|
4
4
|
* durable is configured. Loses everything on restart, which is exactly what
|
|
5
5
|
* the SQLite and Postgres stores exist to fix. */
|
|
@@ -7,17 +7,27 @@ export declare class MemoryAdminStore implements AdminStore {
|
|
|
7
7
|
readonly runRows: Map<string, RunRecord>;
|
|
8
8
|
readonly stepRows: StepRecord[];
|
|
9
9
|
readonly threadRows: Map<string, AdminThread>;
|
|
10
|
+
/** Who holds each run's settle claim. */
|
|
11
|
+
private readonly settleTokens;
|
|
10
12
|
threads: {
|
|
11
13
|
upsert: (t: NewAdminThread) => Promise<void>;
|
|
12
14
|
countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
|
|
13
15
|
list: (f: AdminThreadFilter) => Promise<AdminThread[]>;
|
|
16
|
+
get: (threadId: string) => Promise<AdminThread | null>;
|
|
17
|
+
delete: (threadId: string) => Promise<void>;
|
|
14
18
|
};
|
|
19
|
+
/** The RunFilter, limit aside. */
|
|
20
|
+
private matches;
|
|
15
21
|
runs: {
|
|
16
22
|
start: (r: NewRunRecord) => Promise<RunRecord>;
|
|
17
23
|
patch: (runId: string, patch: RunPatch) => Promise<void>;
|
|
18
24
|
get: (runId: string) => Promise<RunRecord | null>;
|
|
19
25
|
listByThread: (threadId: string) => Promise<RunRecord[]>;
|
|
20
26
|
list: (f: RunFilter) => Promise<RunRecord[]>;
|
|
27
|
+
increment: (runId: string, d: RunDeltas) => Promise<void>;
|
|
28
|
+
totals: (f: RunFilter) => Promise<RunTotals>;
|
|
29
|
+
claimSettle: (runId: string, token: string, staleBefore: Date) => Promise<boolean>;
|
|
30
|
+
endSettle: (runId: string, token: string, settled: boolean) => Promise<void>;
|
|
21
31
|
countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
|
|
22
32
|
};
|
|
23
33
|
steps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/admin/memory.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":"memory.d.ts","sourceRoot":"","sources":["../../src/admin/memory.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;AAG3B;;mDAEmD;AACnD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,OAAO,yBAAgC;IAChD,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAM;IAErC,QAAQ,CAAC,UAAU,2BAAkC;IACrD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,OAAO;oBACa,cAAc;;kBAgBhB,iBAAiB;wBAQX,MAAM;2BACH,MAAM;MAY/B;IAEF,kCAAkC;IAClC,OAAO,CAAC,OAAO;IAef,IAAI;mBACe,YAAY;uBAUR,MAAM,SAAS,QAAQ;qBAIzB,MAAM;iCACM,MAAM;kBAIrB,SAAS;2BAMA,MAAM,KAAK,SAAS;oBAY3B,SAAS,KAAG,OAAO,CAAC,SAAS,CAAC;6BAQrB,MAAM,SAAS,MAAM,eAAe,IAAI;2BAO1C,MAAM,SAAS,MAAM,WAAW,OAAO;;MAWhE;IAEF,KAAK;oBACe,aAAa;2BAGN,MAAM;iCAEA,MAAM;MAIrC;CACH"}
|
package/dist/admin/memory.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addRunTotals, emptyRunTotals } from './shared.js';
|
|
1
2
|
/** Operational history held in memory — tests, and the default when nothing
|
|
2
3
|
* durable is configured. Loses everything on restart, which is exactly what
|
|
3
4
|
* the SQLite and Postgres stores exist to fix. */
|
|
@@ -5,6 +6,8 @@ export class MemoryAdminStore {
|
|
|
5
6
|
runRows = new Map();
|
|
6
7
|
stepRows = [];
|
|
7
8
|
threadRows = new Map();
|
|
9
|
+
/** Who holds each run's settle claim. */
|
|
10
|
+
settleTokens = new Map();
|
|
8
11
|
threads = {
|
|
9
12
|
upsert: async (t) => {
|
|
10
13
|
const now = new Date();
|
|
@@ -33,12 +36,51 @@ export class MemoryAdminStore {
|
|
|
33
36
|
.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())
|
|
34
37
|
.slice(0, f.limit ?? 100);
|
|
35
38
|
},
|
|
39
|
+
get: async (threadId) => this.threadRows.get(threadId) ?? null,
|
|
40
|
+
delete: async (threadId) => {
|
|
41
|
+
this.threadRows.delete(threadId);
|
|
42
|
+
for (const [id, r] of this.runRows) {
|
|
43
|
+
if (r.threadId === threadId) {
|
|
44
|
+
this.runRows.delete(id);
|
|
45
|
+
this.settleTokens.delete(id);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (let i = this.stepRows.length - 1; i >= 0; i--) {
|
|
49
|
+
if (this.stepRows[i].threadId === threadId)
|
|
50
|
+
this.stepRows.splice(i, 1);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
36
53
|
};
|
|
54
|
+
/** The RunFilter, limit aside. */
|
|
55
|
+
matches(r, f) {
|
|
56
|
+
if (f.state?.length && !f.state.includes(r.state))
|
|
57
|
+
return false;
|
|
58
|
+
if (f.agent && r.agent !== f.agent)
|
|
59
|
+
return false;
|
|
60
|
+
if (f.threadId && r.threadId !== f.threadId)
|
|
61
|
+
return false;
|
|
62
|
+
if (f.threadIds?.length && !f.threadIds.includes(r.threadId))
|
|
63
|
+
return false;
|
|
64
|
+
if (f.since && r.startedAt < f.since)
|
|
65
|
+
return false;
|
|
66
|
+
if (f.until && r.startedAt > f.until)
|
|
67
|
+
return false;
|
|
68
|
+
if (f.unsettled && (!r.endedAt || r.settledAt))
|
|
69
|
+
return false;
|
|
70
|
+
if (f.depth !== undefined && r.depth !== f.depth)
|
|
71
|
+
return false;
|
|
72
|
+
const c = f.before;
|
|
73
|
+
if (c && !(r.startedAt.getTime() < c.startedAt.getTime() ||
|
|
74
|
+
(r.startedAt.getTime() === c.startedAt.getTime() && r.id < c.id)))
|
|
75
|
+
return false;
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
37
78
|
runs = {
|
|
38
79
|
start: async (r) => {
|
|
39
80
|
const rec = {
|
|
40
|
-
parentRunId: null, depth: 0, prompt: null, tokenBudget: null, runState: null, providerOptions: null,
|
|
41
|
-
|
|
81
|
+
parentRunId: null, depth: 0, prompt: null, tokenBudget: null, runState: null, providerOptions: null,
|
|
82
|
+
enqueuedAt: null, ...r,
|
|
83
|
+
state: r.state ?? 'RUNNING', startedAt: new Date(), steps: 0, attempts: 0,
|
|
42
84
|
inputTokens: 0, cachedInputTokens: 0, outputTokens: 0, totalTokens: 0,
|
|
43
85
|
};
|
|
44
86
|
this.runRows.set(rec.id, rec);
|
|
@@ -54,21 +96,48 @@ export class MemoryAdminStore {
|
|
|
54
96
|
.filter((r) => r.threadId === threadId)
|
|
55
97
|
.sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime()),
|
|
56
98
|
list: async (f) => {
|
|
57
|
-
|
|
58
|
-
if (f.state?.length)
|
|
59
|
-
rows = rows.filter((r) => f.state.includes(r.state));
|
|
60
|
-
if (f.agent)
|
|
61
|
-
rows = rows.filter((r) => r.agent === f.agent);
|
|
62
|
-
if (f.threadId)
|
|
63
|
-
rows = rows.filter((r) => r.threadId === f.threadId);
|
|
64
|
-
if (f.since)
|
|
65
|
-
rows = rows.filter((r) => r.startedAt >= f.since);
|
|
66
|
-
if (f.until)
|
|
67
|
-
rows = rows.filter((r) => r.startedAt <= f.until);
|
|
99
|
+
const rows = [...this.runRows.values()].filter((r) => this.matches(r, f));
|
|
68
100
|
return rows
|
|
69
|
-
.sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime())
|
|
101
|
+
.sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime() || (a.id < b.id ? 1 : a.id > b.id ? -1 : 0))
|
|
70
102
|
.slice(0, f.limit ?? 100);
|
|
71
103
|
},
|
|
104
|
+
increment: async (runId, d) => {
|
|
105
|
+
const cur = this.runRows.get(runId);
|
|
106
|
+
if (!cur)
|
|
107
|
+
return;
|
|
108
|
+
this.runRows.set(runId, {
|
|
109
|
+
...cur,
|
|
110
|
+
steps: cur.steps + d.steps,
|
|
111
|
+
inputTokens: cur.inputTokens + d.inputTokens,
|
|
112
|
+
cachedInputTokens: cur.cachedInputTokens + d.cachedInputTokens,
|
|
113
|
+
outputTokens: cur.outputTokens + d.outputTokens,
|
|
114
|
+
totalTokens: cur.totalTokens + d.totalTokens,
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
totals: async (f) => {
|
|
118
|
+
const out = emptyRunTotals();
|
|
119
|
+
for (const r of this.runRows.values()) {
|
|
120
|
+
if (!this.matches(r, { ...f, before: undefined }))
|
|
121
|
+
continue;
|
|
122
|
+
addRunTotals(out, r.state, r.stopReason, 1, r);
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
125
|
+
},
|
|
126
|
+
claimSettle: async (runId, token, staleBefore) => {
|
|
127
|
+
const cur = this.runRows.get(runId);
|
|
128
|
+
if (!cur || cur.settledAt || (cur.settlingAt && cur.settlingAt >= staleBefore))
|
|
129
|
+
return false;
|
|
130
|
+
this.runRows.set(runId, { ...cur, settlingAt: new Date() });
|
|
131
|
+
this.settleTokens.set(runId, token);
|
|
132
|
+
return true;
|
|
133
|
+
},
|
|
134
|
+
endSettle: async (runId, token, settled) => {
|
|
135
|
+
const cur = this.runRows.get(runId);
|
|
136
|
+
if (!cur || this.settleTokens.get(runId) !== token)
|
|
137
|
+
return;
|
|
138
|
+
this.settleTokens.delete(runId);
|
|
139
|
+
this.runRows.set(runId, { ...cur, settlingAt: null, ...(settled ? { settledAt: new Date() } : {}) });
|
|
140
|
+
},
|
|
72
141
|
countByState: async () => {
|
|
73
142
|
const out = {};
|
|
74
143
|
for (const r of this.runRows.values())
|
package/dist/admin/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/admin/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/admin/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 0002_run_settled_at: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0002_run_settled_at.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export declare const sql = "-- A run settles exactly once (\u00A75.6): the spec's OnSettle runs either in the\n-- worker that ends the run or in a stop that ends it while no worker holds\n-- it. The time it ran is recorded on the run, so whichever side comes\n-- second can see the other already did it.\n\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"settledAt\" TIMESTAMPTZ;\n";
|
|
5
|
+
//# sourceMappingURL=0002-run-settled-at.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0002-run-settled-at.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0002-run-settled-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,0WAMf,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** 0002_run_settled_at: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0002_run_settled_at.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export const sql = `-- A run settles exactly once (§5.6): the spec's OnSettle runs either in the
|
|
5
|
+
-- worker that ends the run or in a stop that ends it while no worker holds
|
|
6
|
+
-- it. The time it ran is recorded on the run, so whichever side comes
|
|
7
|
+
-- second can see the other already did it.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "settledAt" TIMESTAMPTZ;
|
|
10
|
+
`;
|
|
11
|
+
//# sourceMappingURL=0002-run-settled-at.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0002-run-settled-at.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0002-run-settled-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;CAMlB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 0003_run_enqueued_at: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0003_run_enqueued_at.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export declare const sql = "-- A dispatched run opens QUEUED and becomes RUNNING when a worker picks it\n-- up (\u00A72.8). The enqueue time is kept on the record so a listing can tell a\n-- run that is waiting from one that is working, and so the queue-wait\n-- percentiles include the runs still waiting, not only the ones that got\n-- through. The money and step caps are kept too, so a run re-dispatched\n-- from its record keeps the caps it was admitted with.\n\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"enqueuedAt\" TIMESTAMPTZ;\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"costBudgetMicros\" BIGINT;\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"maxSteps\" INT;\n";
|
|
5
|
+
//# sourceMappingURL=0003-run-enqueued-at.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0003-run-enqueued-at.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0003-run-enqueued-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,iqBAUf,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 0003_run_enqueued_at: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0003_run_enqueued_at.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export const sql = `-- A dispatched run opens QUEUED and becomes RUNNING when a worker picks it
|
|
5
|
+
-- up (§2.8). The enqueue time is kept on the record so a listing can tell a
|
|
6
|
+
-- run that is waiting from one that is working, and so the queue-wait
|
|
7
|
+
-- percentiles include the runs still waiting, not only the ones that got
|
|
8
|
+
-- through. The money and step caps are kept too, so a run re-dispatched
|
|
9
|
+
-- from its record keeps the caps it was admitted with.
|
|
10
|
+
|
|
11
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "enqueuedAt" TIMESTAMPTZ;
|
|
12
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "costBudgetMicros" BIGINT;
|
|
13
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "maxSteps" INT;
|
|
14
|
+
`;
|
|
15
|
+
//# sourceMappingURL=0003-run-enqueued-at.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0003-run-enqueued-at.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0003-run-enqueued-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;CAUlB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 0004_run_settle_claim: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0004_run_settle_claim.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export declare const sql = "-- A run's settle hook is claimed before it runs (\u00A75.6): one conditional write\n-- sets settlingAt and a token, and only the writer that won calls the hook.\n-- The token lets the winner, and only the winner, mark the run settled or\n-- drop the claim. A claim left behind by a settler that died is taken over\n-- once it is old enough. The partial index is what the late-settle sweep\n-- reads: ended runs that never settled.\n\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"settlingAt\" TIMESTAMPTZ;\nALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS \"settleToken\" TEXT;\nCREATE INDEX IF NOT EXISTS agentic_runs_unsettled ON agentic_runs (\"endedAt\") WHERE \"settledAt\" IS NULL;\n";
|
|
5
|
+
//# sourceMappingURL=0004-run-settle-claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004-run-settle-claim.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0004-run-settle-claim.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,8rBAUf,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 0004_run_settle_claim: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0004_run_settle_claim.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export const sql = `-- A run's settle hook is claimed before it runs (§5.6): one conditional write
|
|
5
|
+
-- sets settlingAt and a token, and only the writer that won calls the hook.
|
|
6
|
+
-- The token lets the winner, and only the winner, mark the run settled or
|
|
7
|
+
-- drop the claim. A claim left behind by a settler that died is taken over
|
|
8
|
+
-- once it is old enough. The partial index is what the late-settle sweep
|
|
9
|
+
-- reads: ended runs that never settled.
|
|
10
|
+
|
|
11
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "settlingAt" TIMESTAMPTZ;
|
|
12
|
+
ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "settleToken" TEXT;
|
|
13
|
+
CREATE INDEX IF NOT EXISTS agentic_runs_unsettled ON agentic_runs ("endedAt") WHERE "settledAt" IS NULL;
|
|
14
|
+
`;
|
|
15
|
+
//# sourceMappingURL=0004-run-settle-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004-run-settle-claim.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0004-run-settle-claim.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;CAUlB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 0005_bigint_counters: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0005_bigint_counters.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export declare const sql = "-- Durations and token counts outgrow INT. A run parked on an approval for\n-- more than 24.8 days has a durationMs past 2^31, and a busy thread's token\n-- counters get there too. BIGINT holds both. SQLite needs nothing: its\n-- integers are already 64-bit.\n\nALTER TABLE agentic_runs ALTER COLUMN \"durationMs\" TYPE BIGINT, ALTER COLUMN \"queuedMs\" TYPE BIGINT, ALTER COLUMN \"inputTokens\" TYPE BIGINT, ALTER COLUMN \"cachedInputTokens\" TYPE BIGINT, ALTER COLUMN \"outputTokens\" TYPE BIGINT, ALTER COLUMN \"totalTokens\" TYPE BIGINT;\nALTER TABLE agentic_steps ALTER COLUMN \"durationMs\" TYPE BIGINT, ALTER COLUMN \"inputTokens\" TYPE BIGINT, ALTER COLUMN \"cachedInputTokens\" TYPE BIGINT, ALTER COLUMN \"outputTokens\" TYPE BIGINT, ALTER COLUMN \"totalTokens\" TYPE BIGINT;\n";
|
|
5
|
+
//# sourceMappingURL=0005-bigint-counters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005-bigint-counters.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0005-bigint-counters.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,uxBAOf,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** 0005_bigint_counters: the same SQL, byte for byte, as the Go runtime's
|
|
2
|
+
* admin/migrate/sql/postgres/0005_bigint_counters.sql, so the two record the same checksum
|
|
3
|
+
* for it. Never edit a released migration. Add the next number instead. */
|
|
4
|
+
export const sql = `-- Durations and token counts outgrow INT. A run parked on an approval for
|
|
5
|
+
-- more than 24.8 days has a durationMs past 2^31, and a busy thread's token
|
|
6
|
+
-- counters get there too. BIGINT holds both. SQLite needs nothing: its
|
|
7
|
+
-- integers are already 64-bit.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE agentic_runs ALTER COLUMN "durationMs" TYPE BIGINT, ALTER COLUMN "queuedMs" TYPE BIGINT, ALTER COLUMN "inputTokens" TYPE BIGINT, ALTER COLUMN "cachedInputTokens" TYPE BIGINT, ALTER COLUMN "outputTokens" TYPE BIGINT, ALTER COLUMN "totalTokens" TYPE BIGINT;
|
|
10
|
+
ALTER TABLE agentic_steps ALTER COLUMN "durationMs" TYPE BIGINT, ALTER COLUMN "inputTokens" TYPE BIGINT, ALTER COLUMN "cachedInputTokens" TYPE BIGINT, ALTER COLUMN "outputTokens" TYPE BIGINT, ALTER COLUMN "totalTokens" TYPE BIGINT;
|
|
11
|
+
`;
|
|
12
|
+
//# sourceMappingURL=0005-bigint-counters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005-bigint-counters.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/0005-bigint-counters.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;CAOlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAOhE,sEAAsE;AACtE,eAAO,MAAM,UAAU,EAAE,SAAS,EAWjC,CAAC;AAEF;;;gEAGgE;AAChE,eAAO,MAAM,OAAO,EAAE,gBAQrB,CAAC"}
|