agentenkit 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +82 -15
  2. package/dist/adapters/brave.d.ts +21 -0
  3. package/dist/adapters/brave.d.ts.map +1 -0
  4. package/dist/adapters/brave.js +52 -0
  5. package/dist/adapters/brave.js.map +1 -0
  6. package/dist/adapters/computesdk.d.ts +71 -0
  7. package/dist/adapters/computesdk.d.ts.map +1 -0
  8. package/dist/adapters/computesdk.js +163 -0
  9. package/dist/adapters/computesdk.js.map +1 -0
  10. package/dist/adapters/docker.d.ts +35 -0
  11. package/dist/adapters/docker.d.ts.map +1 -0
  12. package/dist/adapters/docker.js +246 -0
  13. package/dist/adapters/docker.js.map +1 -0
  14. package/dist/adapters/e2b.d.ts +44 -0
  15. package/dist/adapters/e2b.d.ts.map +1 -0
  16. package/dist/adapters/e2b.js +349 -0
  17. package/dist/adapters/e2b.js.map +1 -0
  18. package/dist/adapters/inline.d.ts +19 -5
  19. package/dist/adapters/inline.d.ts.map +1 -1
  20. package/dist/adapters/inline.js +87 -14
  21. package/dist/adapters/inline.js.map +1 -1
  22. package/dist/adapters/jina.d.ts +34 -0
  23. package/dist/adapters/jina.d.ts.map +1 -0
  24. package/dist/adapters/jina.js +99 -0
  25. package/dist/adapters/jina.js.map +1 -0
  26. package/dist/adapters/local-sandbox.d.ts +32 -0
  27. package/dist/adapters/local-sandbox.d.ts.map +1 -0
  28. package/dist/adapters/local-sandbox.js +257 -0
  29. package/dist/adapters/local-sandbox.js.map +1 -0
  30. package/dist/adapters/memory.d.ts +146 -3
  31. package/dist/adapters/memory.d.ts.map +1 -1
  32. package/dist/adapters/memory.js +474 -3
  33. package/dist/adapters/memory.js.map +1 -1
  34. package/dist/adapters/page-reader.d.ts +39 -0
  35. package/dist/adapters/page-reader.d.ts.map +1 -0
  36. package/dist/adapters/page-reader.js +165 -0
  37. package/dist/adapters/page-reader.js.map +1 -0
  38. package/dist/adapters/prisma.d.ts +125 -18
  39. package/dist/adapters/prisma.d.ts.map +1 -1
  40. package/dist/adapters/prisma.js +308 -67
  41. package/dist/adapters/prisma.js.map +1 -1
  42. package/dist/adapters/qstash.d.ts +15 -2
  43. package/dist/adapters/qstash.d.ts.map +1 -1
  44. package/dist/adapters/qstash.js +31 -14
  45. package/dist/adapters/qstash.js.map +1 -1
  46. package/dist/adapters/redis.d.ts +40 -4
  47. package/dist/adapters/redis.d.ts.map +1 -1
  48. package/dist/adapters/redis.js +265 -20
  49. package/dist/adapters/redis.js.map +1 -1
  50. package/dist/adapters/sandbox-shell.d.ts +60 -0
  51. package/dist/adapters/sandbox-shell.d.ts.map +1 -0
  52. package/dist/adapters/sandbox-shell.js +129 -0
  53. package/dist/adapters/sandbox-shell.js.map +1 -0
  54. package/dist/adapters/sqlite.d.ts +88 -2
  55. package/dist/adapters/sqlite.d.ts.map +1 -1
  56. package/dist/adapters/sqlite.js +443 -37
  57. package/dist/adapters/sqlite.js.map +1 -1
  58. package/dist/adapters/stream-scripts.d.ts +49 -0
  59. package/dist/adapters/stream-scripts.d.ts.map +1 -0
  60. package/dist/adapters/stream-scripts.js +150 -0
  61. package/dist/adapters/stream-scripts.js.map +1 -0
  62. package/dist/adapters/upstash.d.ts +20 -0
  63. package/dist/adapters/upstash.d.ts.map +1 -1
  64. package/dist/adapters/upstash.js +29 -0
  65. package/dist/adapters/upstash.js.map +1 -1
  66. package/dist/adapters/web-search-shared.d.ts +11 -0
  67. package/dist/adapters/web-search-shared.d.ts.map +1 -0
  68. package/dist/adapters/web-search-shared.js +40 -0
  69. package/dist/adapters/web-search-shared.js.map +1 -0
  70. package/dist/admin/memory.d.ts +11 -1
  71. package/dist/admin/memory.d.ts.map +1 -1
  72. package/dist/admin/memory.js +83 -14
  73. package/dist/admin/memory.js.map +1 -1
  74. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
  75. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
  76. package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
  77. package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
  78. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
  79. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
  80. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
  81. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
  82. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
  83. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
  84. package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
  85. package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
  86. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
  87. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
  88. package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
  89. package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
  90. package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
  91. package/dist/admin/migrations/postgres/index.js +16 -1
  92. package/dist/admin/migrations/postgres/index.js.map +1 -1
  93. package/dist/admin/migrations/runner.d.ts +21 -1
  94. package/dist/admin/migrations/runner.d.ts.map +1 -1
  95. package/dist/admin/migrations/runner.js +41 -4
  96. package/dist/admin/migrations/runner.js.map +1 -1
  97. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
  98. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
  99. package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
  100. package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
  101. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
  102. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
  103. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
  104. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
  105. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
  106. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
  107. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
  108. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
  109. package/dist/admin/migrations/sqlite/index.d.ts +2 -2
  110. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
  111. package/dist/admin/migrations/sqlite/index.js +17 -3
  112. package/dist/admin/migrations/sqlite/index.js.map +1 -1
  113. package/dist/admin/postgres.d.ts +14 -4
  114. package/dist/admin/postgres.d.ts.map +1 -1
  115. package/dist/admin/postgres.js +131 -36
  116. package/dist/admin/postgres.js.map +1 -1
  117. package/dist/admin/shared.d.ts +19 -0
  118. package/dist/admin/shared.d.ts.map +1 -0
  119. package/dist/admin/shared.js +28 -0
  120. package/dist/admin/shared.js.map +1 -0
  121. package/dist/admin/sqlite.d.ts +9 -1
  122. package/dist/admin/sqlite.d.ts.map +1 -1
  123. package/dist/admin/sqlite.js +112 -29
  124. package/dist/admin/sqlite.js.map +1 -1
  125. package/dist/core/admin.d.ts +28 -6
  126. package/dist/core/admin.d.ts.map +1 -1
  127. package/dist/core/admin.js +92 -23
  128. package/dist/core/admin.js.map +1 -1
  129. package/dist/core/agent.d.ts +7 -4
  130. package/dist/core/agent.d.ts.map +1 -1
  131. package/dist/core/agent.js +15 -11
  132. package/dist/core/agent.js.map +1 -1
  133. package/dist/core/agui.d.ts +17 -0
  134. package/dist/core/agui.d.ts.map +1 -0
  135. package/dist/core/agui.js +69 -0
  136. package/dist/core/agui.js.map +1 -0
  137. package/dist/core/builtin/definitions.d.ts +12 -0
  138. package/dist/core/builtin/definitions.d.ts.map +1 -0
  139. package/dist/core/builtin/definitions.js +149 -0
  140. package/dist/core/builtin/definitions.js.map +1 -0
  141. package/dist/core/builtin/html.d.ts +13 -0
  142. package/dist/core/builtin/html.d.ts.map +1 -0
  143. package/dist/core/builtin/html.js +96 -0
  144. package/dist/core/builtin/html.js.map +1 -0
  145. package/dist/core/builtin/index.d.ts +21 -0
  146. package/dist/core/builtin/index.d.ts.map +1 -0
  147. package/dist/core/builtin/index.js +55 -0
  148. package/dist/core/builtin/index.js.map +1 -0
  149. package/dist/core/builtin/run.d.ts +37 -0
  150. package/dist/core/builtin/run.d.ts.map +1 -0
  151. package/dist/core/builtin/run.js +55 -0
  152. package/dist/core/builtin/run.js.map +1 -0
  153. package/dist/core/builtin/sandbox-tools.d.ts +69 -0
  154. package/dist/core/builtin/sandbox-tools.d.ts.map +1 -0
  155. package/dist/core/builtin/sandbox-tools.js +389 -0
  156. package/dist/core/builtin/sandbox-tools.js.map +1 -0
  157. package/dist/core/builtin/sandbox.d.ts +52 -0
  158. package/dist/core/builtin/sandbox.d.ts.map +1 -0
  159. package/dist/core/builtin/sandbox.js +174 -0
  160. package/dist/core/builtin/sandbox.js.map +1 -0
  161. package/dist/core/builtin/web.d.ts +54 -0
  162. package/dist/core/builtin/web.d.ts.map +1 -0
  163. package/dist/core/builtin/web.js +167 -0
  164. package/dist/core/builtin/web.js.map +1 -0
  165. package/dist/core/context.d.ts +13 -1
  166. package/dist/core/context.d.ts.map +1 -1
  167. package/dist/core/context.js +70 -19
  168. package/dist/core/context.js.map +1 -1
  169. package/dist/core/deleteThread.d.ts.map +1 -1
  170. package/dist/core/deleteThread.js +36 -4
  171. package/dist/core/deleteThread.js.map +1 -1
  172. package/dist/core/engine.d.ts +41 -11
  173. package/dist/core/engine.d.ts.map +1 -1
  174. package/dist/core/engine.js +880 -353
  175. package/dist/core/engine.js.map +1 -1
  176. package/dist/core/follow.d.ts +63 -1
  177. package/dist/core/follow.d.ts.map +1 -1
  178. package/dist/core/follow.js +293 -16
  179. package/dist/core/follow.js.map +1 -1
  180. package/dist/core/hitl.d.ts +43 -0
  181. package/dist/core/hitl.d.ts.map +1 -1
  182. package/dist/core/hitl.js +163 -35
  183. package/dist/core/hitl.js.map +1 -1
  184. package/dist/core/keys.d.ts +22 -4
  185. package/dist/core/keys.d.ts.map +1 -1
  186. package/dist/core/keys.js +23 -5
  187. package/dist/core/keys.js.map +1 -1
  188. package/dist/core/lease.d.ts +46 -0
  189. package/dist/core/lease.d.ts.map +1 -0
  190. package/dist/core/lease.js +142 -0
  191. package/dist/core/lease.js.map +1 -0
  192. package/dist/core/loop.d.ts +27 -7
  193. package/dist/core/loop.d.ts.map +1 -1
  194. package/dist/core/loop.js +140 -55
  195. package/dist/core/loop.js.map +1 -1
  196. package/dist/core/messages.d.ts +21 -2
  197. package/dist/core/messages.d.ts.map +1 -1
  198. package/dist/core/messages.js +61 -2
  199. package/dist/core/messages.js.map +1 -1
  200. package/dist/core/permanent.d.ts +11 -0
  201. package/dist/core/permanent.d.ts.map +1 -0
  202. package/dist/core/permanent.js +37 -0
  203. package/dist/core/permanent.js.map +1 -0
  204. package/dist/core/prune.d.ts +24 -0
  205. package/dist/core/prune.d.ts.map +1 -0
  206. package/dist/core/prune.js +43 -0
  207. package/dist/core/prune.js.map +1 -0
  208. package/dist/core/publish.d.ts +38 -10
  209. package/dist/core/publish.d.ts.map +1 -1
  210. package/dist/core/publish.js +126 -12
  211. package/dist/core/publish.js.map +1 -1
  212. package/dist/core/reclaim.d.ts +8 -1
  213. package/dist/core/reclaim.d.ts.map +1 -1
  214. package/dist/core/reclaim.js +149 -18
  215. package/dist/core/reclaim.js.map +1 -1
  216. package/dist/core/run.d.ts +7 -3
  217. package/dist/core/run.d.ts.map +1 -1
  218. package/dist/core/run.js +95 -35
  219. package/dist/core/run.js.map +1 -1
  220. package/dist/core/segment.d.ts +62 -0
  221. package/dist/core/segment.d.ts.map +1 -0
  222. package/dist/core/segment.js +318 -0
  223. package/dist/core/segment.js.map +1 -0
  224. package/dist/core/settle.d.ts +57 -0
  225. package/dist/core/settle.d.ts.map +1 -0
  226. package/dist/core/settle.js +181 -0
  227. package/dist/core/settle.js.map +1 -0
  228. package/dist/core/snapshot.d.ts +36 -0
  229. package/dist/core/snapshot.d.ts.map +1 -0
  230. package/dist/core/snapshot.js +87 -0
  231. package/dist/core/snapshot.js.map +1 -0
  232. package/dist/core/stop.d.ts +16 -1
  233. package/dist/core/stop.d.ts.map +1 -1
  234. package/dist/core/stop.js +69 -15
  235. package/dist/core/stop.js.map +1 -1
  236. package/dist/core/stream-events.d.ts +184 -0
  237. package/dist/core/stream-events.d.ts.map +1 -0
  238. package/dist/core/stream-events.js +26 -0
  239. package/dist/core/stream-events.js.map +1 -0
  240. package/dist/core/stream.d.ts +29 -0
  241. package/dist/core/stream.d.ts.map +1 -1
  242. package/dist/core/stream.js +79 -0
  243. package/dist/core/stream.js.map +1 -1
  244. package/dist/core/subagent.d.ts +36 -5
  245. package/dist/core/subagent.d.ts.map +1 -1
  246. package/dist/core/subagent.js +130 -25
  247. package/dist/core/subagent.js.map +1 -1
  248. package/dist/core/tools.d.ts +9 -3
  249. package/dist/core/tools.d.ts.map +1 -1
  250. package/dist/core/tools.js.map +1 -1
  251. package/dist/core/types.d.ts +212 -13
  252. package/dist/core/types.d.ts.map +1 -1
  253. package/dist/core/types.js +29 -1
  254. package/dist/core/types.js.map +1 -1
  255. package/dist/core/usage.d.ts +53 -5
  256. package/dist/core/usage.d.ts.map +1 -1
  257. package/dist/core/usage.js +170 -47
  258. package/dist/core/usage.js.map +1 -1
  259. package/dist/index.d.ts +29 -12
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +23 -7
  262. package/dist/index.js.map +1 -1
  263. package/dist/ports/admin.d.ts +59 -0
  264. package/dist/ports/admin.d.ts.map +1 -1
  265. package/dist/ports/kv.d.ts +17 -0
  266. package/dist/ports/kv.d.ts.map +1 -1
  267. package/dist/ports/queue.d.ts +87 -7
  268. package/dist/ports/queue.d.ts.map +1 -1
  269. package/dist/ports/queue.js +36 -1
  270. package/dist/ports/queue.js.map +1 -1
  271. package/dist/ports/runtime.d.ts +188 -20
  272. package/dist/ports/runtime.d.ts.map +1 -1
  273. package/dist/ports/sandbox.d.ts +159 -0
  274. package/dist/ports/sandbox.d.ts.map +1 -0
  275. package/dist/ports/sandbox.js +44 -0
  276. package/dist/ports/sandbox.js.map +1 -0
  277. package/dist/ports/storage.d.ts +26 -5
  278. package/dist/ports/storage.d.ts.map +1 -1
  279. package/dist/ports/streams.d.ts +60 -0
  280. package/dist/ports/streams.d.ts.map +1 -0
  281. package/dist/ports/streams.js +20 -0
  282. package/dist/ports/streams.js.map +1 -0
  283. package/dist/ports/tools.d.ts +60 -0
  284. package/dist/ports/tools.d.ts.map +1 -0
  285. package/dist/ports/tools.js +5 -0
  286. package/dist/ports/tools.js.map +1 -0
  287. package/dist/pricing.d.ts +29 -0
  288. package/dist/pricing.d.ts.map +1 -1
  289. package/dist/pricing.js +64 -10
  290. package/dist/pricing.js.map +1 -1
  291. package/dist/runtime.d.ts +6 -0
  292. package/dist/runtime.d.ts.map +1 -1
  293. package/dist/runtime.js +147 -46
  294. package/dist/runtime.js.map +1 -1
  295. package/package.json +1 -1
@@ -1,5 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { emptyTotals } from '../core/usage.js';
2
+ import { UsageMerger } from '../core/usage.js';
3
+ import { StreamClosedError, StreamGoneError } from '../ports/streams.js';
4
+ import { isStreamEnd } from '../core/stream-events.js';
5
+ import { sleep } from './stream-scripts.js';
3
6
  /** Open a SQLite handle with whichever driver the process has: `bun:sqlite`
4
7
  * first, then `node:sqlite`. Preferring one and requiring it are different
5
8
  * things — a Next.js server runs on Node even inside a Bun workspace, which
@@ -11,23 +14,58 @@ import { emptyTotals } from '../core/usage.js';
11
14
  export async function openSqlite(filename = 'agentic-kit.sqlite') {
12
15
  const tried = [];
13
16
  for (const specifier of ['bun:sqlite', 'node:sqlite']) {
17
+ let Ctor;
14
18
  try {
15
19
  // webpackIgnore keeps this a real runtime import. Bundlers otherwise
16
20
  // turn a variable specifier into a context module and fail to resolve
17
21
  // `node:sqlite` even on a Node that ships it — which is what happens
18
22
  // inside a Next.js server build.
19
23
  const mod = await import(/* webpackIgnore: true */ /* @vite-ignore */ specifier);
20
- const Ctor = mod.Database ?? mod.DatabaseSync;
21
- if (Ctor)
22
- return new Ctor(filename);
24
+ Ctor = mod.Database ?? mod.DatabaseSync;
23
25
  }
24
26
  catch (err) {
25
27
  tried.push(`${specifier}: ${err instanceof Error ? err.message : String(err)}`);
28
+ continue;
26
29
  }
30
+ // Outside the try: a driver that loaded but cannot open or set up the
31
+ // file (locked, unwritable) must say so, not report a missing driver.
32
+ if (Ctor)
33
+ return tuneSqlite(new Ctor(filename));
27
34
  }
28
35
  throw new Error('No SQLite driver available. Run under Bun, or Node 22+ for node:sqlite, ' +
29
36
  `or construct the store with your own handle. Tried — ${tried.join('; ')}`);
30
37
  }
38
+ /** Set a file up for more than one process (§3.4): WAL lets readers run beside
39
+ * the one writer, and busy_timeout makes a writer wait up to five seconds for
40
+ * the lock rather than fail at once with SQLITE_BUSY. `openSqlite` calls it;
41
+ * call it yourself on a handle you opened some other way. An in-memory
42
+ * database keeps its own journal mode, which is fine.
43
+ *
44
+ * busy_timeout goes FIRST: switching a new file to WAL takes a lock too.
45
+ * And SQLite does not always wait on the busy timeout for that switch: with
46
+ * several processes opening one fresh file at once (the workers of a
47
+ * `next build`) it can give up at once with "database is locked". So the
48
+ * switch is tried again for up to five seconds, like any other write. The
49
+ * Go runtime's Tune does the same. */
50
+ export function tuneSqlite(db) {
51
+ db.prepare('PRAGMA busy_timeout=5000').all(); // answers with a row
52
+ for (let tries = 0;; tries++) {
53
+ try {
54
+ db.prepare('PRAGMA journal_mode=WAL').all();
55
+ return db;
56
+ }
57
+ catch (err) {
58
+ const locked = /locked|busy/i.test(err instanceof Error ? err.message : String(err));
59
+ if (!locked || tries >= 100)
60
+ throw err;
61
+ sleepSync(50);
62
+ }
63
+ }
64
+ }
65
+ /** Blocks for `ms`. Only for a setup step that must stay synchronous. */
66
+ function sleepSync(ms) {
67
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
68
+ }
31
69
  // SQLite has no date or JSON type: times are epoch milliseconds so they sort
32
70
  // and compare as integers, and structured columns are TEXT holding JSON.
33
71
  const json = (v) => (v === undefined ? null : JSON.stringify(v));
@@ -117,6 +155,50 @@ export class SqliteStorage {
117
155
  costSource: 'TEXT',
118
156
  });
119
157
  this.db.prepare('CREATE INDEX IF NOT EXISTS usage_run ON usage(runId, createdAt)').run();
158
+ // The thread's current run, for ThreadTransition's compare-and-set.
159
+ this.addMissing('threads', { runId: 'TEXT' });
160
+ // The run a record entry belongs to.
161
+ this.addMissing('events', { runId: 'TEXT' });
162
+ // One event per seq on a thread: a counter that restarted must fail its
163
+ // write, never land a second event under a seq clients already have. A log
164
+ // from before this check may already hold duplicates; the index is then
165
+ // left off and said so, rather than refusing to start.
166
+ try {
167
+ this.db.prepare('CREATE UNIQUE INDEX IF NOT EXISTS events_thread_seq_unique ON events(threadId, seq)').run();
168
+ }
169
+ catch (err) {
170
+ console.warn('event seq uniqueness not enforced: the log already holds duplicate seqs', err);
171
+ }
172
+ // The same for messages: two appends that raced to one seq must not both
173
+ // land, or a turn's order would depend on which row the database returns
174
+ // first.
175
+ try {
176
+ this.db.prepare('CREATE UNIQUE INDEX IF NOT EXISTS messages_thread_seq_unique ON messages(threadId, seq)').run();
177
+ }
178
+ catch (err) {
179
+ console.warn('message seq uniqueness not enforced: the table already holds duplicate seqs', err);
180
+ }
181
+ }
182
+ /** Run `fn` in one write transaction. IMMEDIATE takes the write lock up
183
+ * front, so another process waits (busy_timeout) rather than failing half
184
+ * way through. */
185
+ tx(fn) {
186
+ this.write('BEGIN IMMEDIATE');
187
+ try {
188
+ const out = fn();
189
+ this.write('COMMIT');
190
+ return out;
191
+ }
192
+ catch (err) {
193
+ try {
194
+ this.write('ROLLBACK');
195
+ }
196
+ catch { /* already gone */ }
197
+ throw err;
198
+ }
199
+ }
200
+ changes(res) {
201
+ return Number(res?.changes ?? 0);
120
202
  }
121
203
  addMissing(table, cols) {
122
204
  const have = new Set(this.db.prepare(`PRAGMA table_info(${table})`).all().map((c) => c.name));
@@ -144,7 +226,7 @@ export class SqliteStorage {
144
226
  });
145
227
  toEvent = (r) => ({
146
228
  threadId: r.threadId, seq: r.seq, type: r.type,
147
- payload: parse(r.payload), createdAt: new Date(r.createdAt),
229
+ payload: parse(r.payload), createdAt: new Date(r.createdAt), ...(r.runId ? { runId: r.runId } : {}),
148
230
  });
149
231
  threads = {
150
232
  get: async (threadId) => {
@@ -164,22 +246,39 @@ export class SqliteStorage {
164
246
  this.write('UPDATE threads SET state = ?, updatedAt = ? WHERE id = ?', state, Date.now(), threadId);
165
247
  },
166
248
  delete: async (threadId) => {
167
- // No FK cascade here: the schema is created by this adapter and the
249
+ // One transaction: a thread is gone with everything it owned, or not at
250
+ // all. No FK cascade here: the schema is created by this adapter and the
168
251
  // cascade is spelled out, so a caller can read exactly what is removed.
169
- for (const t of ['messages', 'events', 'usage', 'runs']) {
170
- this.write(`DELETE FROM ${t} WHERE threadId = ?`, threadId);
171
- }
172
- this.write('DELETE FROM threads WHERE id = ?', threadId);
252
+ this.tx(() => {
253
+ const res = this.db.prepare('DELETE FROM threads WHERE id = ?').run(threadId);
254
+ if (this.changes(res) === 0)
255
+ throw new Error(`Unknown thread ${threadId}`);
256
+ for (const t of ['messages', 'events', 'usage', 'runs']) {
257
+ this.write(`DELETE FROM ${t} WHERE threadId = ?`, threadId);
258
+ }
259
+ });
260
+ },
261
+ transition: async (threadId, tr) => {
262
+ if (tr.from.length === 0)
263
+ return false;
264
+ // One conditional UPDATE, so exactly one caller can win (§3.4): the
265
+ // driver's change count says whether it was this one. A thread with no
266
+ // run recorded yet (from before the column) matches any run.
267
+ const res = this.db
268
+ .prepare(`UPDATE threads SET state = ?, updatedAt = ?, runId = COALESCE(NULLIF(?, ''), runId)
269
+ WHERE id = ? AND (? = '' OR runId IS NULL OR runId = ?)
270
+ AND state IN (${tr.from.map(() => '?').join(', ')})`)
271
+ .run(tr.to, Date.now(), tr.newRunId ?? '', threadId, tr.runId ?? '', tr.runId ?? '', ...tr.from);
272
+ return Number(res?.changes ?? 0) > 0;
173
273
  },
174
274
  claimState: async (threadId, from, to) => {
175
275
  // The §3.4 compare-and-set: one conditional UPDATE, so exactly one
176
- // caller can win. SQLite serialises writers, which is enough.
177
- const before = this.one('SELECT state FROM threads WHERE id = ?', threadId);
178
- if (!before || before.state !== from)
179
- return false;
180
- this.write('UPDATE threads SET state = ?, updatedAt = ? WHERE id = ? AND state = ?', to, Date.now(), threadId, from);
181
- const after = this.one('SELECT state FROM threads WHERE id = ?', threadId);
182
- return after?.state === to;
276
+ // caller can win, and the driver's change count says whether it was
277
+ // this one. A read before or after would race another process.
278
+ const res = this.db
279
+ .prepare('UPDATE threads SET state = ?, updatedAt = ? WHERE id = ? AND state = ?')
280
+ .run(to, Date.now(), threadId, from);
281
+ return this.changes(res) > 0;
183
282
  },
184
283
  };
185
284
  messages = {
@@ -188,8 +287,10 @@ export class SqliteStorage {
188
287
  const id = randomUUID();
189
288
  // An explicit seq keeps insertion order stable: several messages land
190
289
  // inside the same millisecond, so createdAt alone cannot order them.
191
- const seq = (this.one('SELECT COALESCE(MAX(seq),0) AS n FROM messages WHERE threadId = ?', threadId)?.n ?? 0) + 1;
192
- this.write('INSERT INTO messages (id,threadId,agentId,role,content,createdAt,seq) VALUES (?,?,?,?,?,?,?)', id, threadId, m.agentId ?? null, m.role, json(m.content), now, seq);
290
+ // Taken inside the INSERT, one statement, so another process cannot
291
+ // read the same MAX in between; the unique index backs that up.
292
+ this.write(`INSERT INTO messages (id,threadId,agentId,role,content,createdAt,seq)
293
+ VALUES (?,?,?,?,?,?,(SELECT COALESCE(MAX(seq),0)+1 FROM messages WHERE threadId = ?))`, id, threadId, m.agentId ?? null, m.role, json(m.content), now, threadId);
193
294
  return this.toMessage({
194
295
  id, threadId, agentId: m.agentId ?? null, role: m.role,
195
296
  content: json(m.content), createdAt: now,
@@ -214,8 +315,36 @@ export class SqliteStorage {
214
315
  },
215
316
  };
216
317
  events = {
318
+ // The seq is minted in the insert itself: SQLite runs one writer at a
319
+ // time, so no two appends on a thread read the same MAX.
217
320
  append: async (threadId, e) => {
218
- this.write('INSERT INTO events (id,threadId,seq,type,payload,createdAt) VALUES (?,?,?,?,?,?)', randomUUID(), threadId, e.seq, e.type, json(e.payload), new Date(e.createdAt).getTime());
321
+ const createdAt = e.createdAt ? new Date(e.createdAt).getTime() : Date.now();
322
+ const row = this.all(`INSERT INTO events (id,threadId,seq,type,payload,createdAt,runId)
323
+ SELECT ?,?,COALESCE(MAX(seq),0)+1,?,?,?,? FROM events WHERE threadId = ?
324
+ RETURNING seq`, randomUUID(), threadId, e.type, json(e.payload), createdAt, e.runId ?? null, threadId)[0];
325
+ return {
326
+ threadId, seq: Number(row.seq), type: e.type, payload: e.payload,
327
+ createdAt: new Date(createdAt), ...(e.runId ? { runId: e.runId } : {}),
328
+ };
329
+ },
330
+ list: async (threadId, f = {}) => {
331
+ const where = ['threadId = ?'];
332
+ const args = [threadId];
333
+ if (f.types) {
334
+ where.push(`type IN (${f.types.map(() => '?').join(',') || 'NULL'})`);
335
+ args.push(...f.types);
336
+ }
337
+ if (f.runId !== undefined) {
338
+ where.push('runId = ?');
339
+ args.push(f.runId);
340
+ }
341
+ if (f.after !== undefined) {
342
+ where.push('seq > ?');
343
+ args.push(f.after);
344
+ }
345
+ const limit = f.limit ? ` LIMIT ${Math.floor(f.limit)}` : '';
346
+ return this.all(`SELECT * FROM events WHERE ${where.join(' AND ')} ORDER BY seq${limit}`, ...args)
347
+ .map(this.toEvent);
219
348
  },
220
349
  listSince: async (threadId, sinceSeq) => this.all('SELECT * FROM events WHERE threadId = ? AND seq > ? ORDER BY seq', threadId, sinceSeq).map(this.toEvent),
221
350
  latest: async (threadId, type) => {
@@ -223,6 +352,23 @@ export class SqliteStorage {
223
352
  return r ? this.toEvent(r) : null;
224
353
  },
225
354
  listByType: async (threadId, type) => this.all('SELECT * FROM events WHERE threadId = ? AND type = ? ORDER BY seq', threadId, type).map(this.toEvent),
355
+ prune: async (types, opts) => {
356
+ const counts = {};
357
+ const marks = types.map(() => '?').join(',') || 'NULL';
358
+ if (opts.dryRun) {
359
+ for (const r of this.all(`SELECT type, COUNT(*) AS n FROM events WHERE type IN (${marks}) GROUP BY type`, ...types)) {
360
+ counts[r.type] = Number(r.n);
361
+ }
362
+ return counts;
363
+ }
364
+ const rows = this.all(`SELECT id, type FROM events WHERE type IN (${marks}) LIMIT ?`, ...types, opts.limit);
365
+ if (rows.length === 0)
366
+ return counts;
367
+ this.write(`DELETE FROM events WHERE id IN (${rows.map(() => '?').join(',')})`, ...rows.map((r) => r.id));
368
+ for (const r of rows)
369
+ counts[r.type] = (counts[r.type] ?? 0) + 1;
370
+ return counts;
371
+ },
226
372
  };
227
373
  usage = {
228
374
  record: async (threadId, u) => {
@@ -235,36 +381,296 @@ export class SqliteStorage {
235
381
  // per model call (§4), and the bill only ever wants them by agent and
236
382
  // model. Summing the groups gives the totals, so the two always agree.
237
383
  total: async (threadId, filter = {}) => {
384
+ // Grouped by currency as well, so a group never sums two units; the
385
+ // merge puts one agent's spend on one model back on a single line.
238
386
  const rows = this.all(`SELECT COALESCE(agentId,'') AS agentId, COALESCE(agentName,'') AS agentName,
239
387
  COALESCE(model,'') AS model, COALESCE(modelId,'') AS modelId,
240
388
  COALESCE(SUM(inputTokens),0) AS i, COALESCE(SUM(cachedInputTokens),0) AS cr,
241
389
  COALESCE(SUM(cacheWriteInputTokens),0) AS cw, COALESCE(SUM(outputTokens),0) AS o,
242
390
  COALESCE(SUM(reasoningTokens),0) AS rt, COALESCE(SUM(totalTokens),0) AS t,
243
391
  COUNT(*) AS calls, COALESCE(SUM(estimated),0) AS est,
244
- COALESCE(SUM(costMicros),0) AS cost, MAX(costCurrency) AS currency,
392
+ COALESCE(SUM(costMicros),0) AS cost, COALESCE(costCurrency,'') AS currency,
245
393
  COALESCE(SUM(CASE WHEN costMicros IS NULL THEN 1 ELSE 0 END),0) AS unpriced
246
394
  FROM usage WHERE threadId = ?${filter.runId ? ' AND runId = ?' : ''}
247
- GROUP BY agentId, agentName, model, modelId
395
+ GROUP BY agentId, agentName, model, modelId, costCurrency
248
396
  ORDER BY MIN(createdAt)`, ...(filter.runId ? [threadId, filter.runId] : [threadId]));
249
- const out = emptyTotals();
397
+ const merge = new UsageMerger();
250
398
  for (const r of rows) {
251
- out.inputTokens += r.i;
252
- out.cachedInputTokens += r.cr;
253
- out.outputTokens += r.o;
254
- out.totalTokens += r.t;
255
- out.costMicros += r.cost;
256
- out.unpriced += r.unpriced;
257
- out.currency ??= r.currency ?? undefined;
258
- out.lines.push({
259
- agentId: r.agentId || null, agentName: r.agentName || null,
260
- model: r.model || null, modelId: r.modelId || null,
261
- inputTokens: r.i, cacheReadInputTokens: r.cr, cacheWriteInputTokens: r.cw,
262
- outputTokens: r.o, reasoningTokens: r.rt,
263
- calls: r.calls, estimated: r.est, costMicros: r.cost,
399
+ merge.add({
400
+ line: {
401
+ agentId: r.agentId || null, agentName: r.agentName || null,
402
+ model: r.model || null, modelId: r.modelId || null,
403
+ inputTokens: r.i, cacheReadInputTokens: r.cr, cacheWriteInputTokens: r.cw,
404
+ outputTokens: r.o, reasoningTokens: r.rt,
405
+ calls: r.calls, estimated: r.est, costMicros: r.cost,
406
+ },
407
+ currency: r.currency,
408
+ totalTokens: r.t,
409
+ unpriced: r.unpriced,
264
410
  });
265
411
  }
266
- return out;
412
+ return merge.totals();
267
413
  },
268
414
  };
269
415
  }
416
+ /** The current time in epoch milliseconds, the form expiresAt is kept in. */
417
+ const NOW_MS = `CAST((julianday('now') - 2440587.5) * 86400000 AS INTEGER)`;
418
+ const STREAMS_SCHEMA = [
419
+ `CREATE TABLE IF NOT EXISTS run_streams (
420
+ id TEXT PRIMARY KEY, "threadId" TEXT NOT NULL, "runId" TEXT NOT NULL,
421
+ closed INTEGER NOT NULL, "endEvent" TEXT, "expiresAt" INTEGER NOT NULL)`,
422
+ `CREATE INDEX IF NOT EXISTS run_streams_expires ON run_streams("expiresAt")`,
423
+ `CREATE INDEX IF NOT EXISTS run_streams_thread ON run_streams("threadId")`,
424
+ `CREATE TABLE IF NOT EXISTS run_stream_events (
425
+ pos INTEGER PRIMARY KEY AUTOINCREMENT, "streamId" TEXT NOT NULL, event TEXT NOT NULL)`,
426
+ `CREATE INDEX IF NOT EXISTS run_stream_events_stream ON run_stream_events("streamId", pos)`,
427
+ ];
428
+ /** RunStreams over SQLite: the run_streams and run_stream_events tables, the
429
+ * same ones the Go adapter uses. The offset is the event row's key, which
430
+ * AUTOINCREMENT never reuses. Readers in this process wake on its own
431
+ * appends; one in another process sees them on its next poll. Expired
432
+ * streams are deleted as new ones open, 500 a pass, at most once a minute. */
433
+ export class SqliteRunStreams {
434
+ db;
435
+ opts;
436
+ waiters = new Map();
437
+ swept = 0;
438
+ constructor(db, opts = {}) {
439
+ this.db = db;
440
+ this.opts = opts;
441
+ for (const sql of STREAMS_SCHEMA)
442
+ this.db.prepare(sql).run();
443
+ }
444
+ tx(work) {
445
+ this.db.prepare('BEGIN IMMEDIATE').run();
446
+ try {
447
+ const out = work();
448
+ this.db.prepare('COMMIT').run();
449
+ return out;
450
+ }
451
+ catch (err) {
452
+ this.db.prepare('ROLLBACK').run();
453
+ throw err;
454
+ }
455
+ }
456
+ wake(streamId) {
457
+ const set = this.waiters.get(streamId);
458
+ this.waiters.delete(streamId);
459
+ for (const wake of set ?? [])
460
+ wake();
461
+ }
462
+ /** Registers a wake-up before the reader reads, so an append that lands
463
+ * between the read and the wait still wakes it. */
464
+ arm(streamId) {
465
+ let wake;
466
+ const woken = new Promise((resolve) => { wake = resolve; });
467
+ let set = this.waiters.get(streamId);
468
+ if (!set) {
469
+ set = new Set();
470
+ this.waiters.set(streamId, set);
471
+ }
472
+ set.add(wake);
473
+ const disarm = () => {
474
+ const s = this.waiters.get(streamId);
475
+ s?.delete(wake);
476
+ if (s && s.size === 0)
477
+ this.waiters.delete(streamId);
478
+ };
479
+ return { woken, disarm };
480
+ }
481
+ sweep() {
482
+ if (Date.now() - this.swept < 60_000)
483
+ return;
484
+ this.swept = Date.now();
485
+ const ids = this.db
486
+ .prepare(`SELECT id FROM run_streams WHERE "expiresAt" <= ${NOW_MS} LIMIT 500`)
487
+ .all();
488
+ for (const { id } of ids)
489
+ this.remove(id);
490
+ }
491
+ remove(streamId) {
492
+ this.tx(() => {
493
+ this.db.prepare('DELETE FROM run_stream_events WHERE "streamId" = ?').run(streamId);
494
+ this.db.prepare('DELETE FROM run_streams WHERE id = ?').run(streamId);
495
+ });
496
+ }
497
+ async open(streamId, meta, ttlMs) {
498
+ this.sweep();
499
+ // A row past its expiry is gone: replace it rather than reopen it.
500
+ this.db.prepare(`DELETE FROM run_streams WHERE id = ? AND "expiresAt" <= ${NOW_MS}`).run(streamId);
501
+ this.db
502
+ .prepare(`INSERT INTO run_streams (id, "threadId", "runId", closed, "expiresAt") VALUES (?, ?, ?, 0, ?)
503
+ ON CONFLICT (id) DO NOTHING`)
504
+ .run(streamId, meta.threadId, meta.runId, Date.now() + ttlMs);
505
+ }
506
+ /** Inside a transaction: whether the stream is live and closed. */
507
+ state(streamId) {
508
+ const row = this.db
509
+ .prepare(`SELECT closed, "expiresAt" > ${NOW_MS} AS live FROM run_streams WHERE id = ?`)
510
+ .all(streamId)[0];
511
+ return { live: !!row?.live, closed: !!row?.closed };
512
+ }
513
+ insert(streamId, events) {
514
+ const stmt = this.db.prepare('INSERT INTO run_stream_events ("streamId", event) VALUES (?, ?) RETURNING pos');
515
+ return events.map((e) => String(stmt.all(streamId, JSON.stringify(e))[0].pos));
516
+ }
517
+ async append(streamId, events) {
518
+ if (events.length === 0)
519
+ return [];
520
+ const offsets = this.tx(() => {
521
+ const { live, closed } = this.state(streamId);
522
+ if (!live)
523
+ throw new StreamGoneError(streamId);
524
+ if (closed)
525
+ throw new StreamClosedError(streamId);
526
+ return this.insert(streamId, events);
527
+ });
528
+ this.wake(streamId);
529
+ return offsets;
530
+ }
531
+ async close(streamId, end, graceMs) {
532
+ this.tx(() => {
533
+ const { live, closed } = this.state(streamId);
534
+ if (!live)
535
+ throw new StreamGoneError(streamId);
536
+ if (closed)
537
+ return;
538
+ this.insert(streamId, [end]);
539
+ this.db
540
+ .prepare('UPDATE run_streams SET closed = 1, "endEvent" = ?, "expiresAt" = ? WHERE id = ?')
541
+ .run(JSON.stringify(end), Date.now() + graceMs, streamId);
542
+ });
543
+ this.wake(streamId);
544
+ }
545
+ async delete(streamId) {
546
+ this.remove(streamId);
547
+ this.wake(streamId);
548
+ }
549
+ page(streamId, after) {
550
+ const row = this.db
551
+ .prepare(`SELECT "threadId", "runId", closed, "endEvent", "expiresAt" > ${NOW_MS} AS live
552
+ FROM run_streams WHERE id = ?`)
553
+ .all(streamId)[0];
554
+ if (!row || !row.live)
555
+ return null;
556
+ const rows = this.db
557
+ .prepare('SELECT pos, event FROM run_stream_events WHERE "streamId" = ? AND pos > ? ORDER BY pos')
558
+ .all(streamId, after ? Number(after) : 0);
559
+ return {
560
+ meta: { threadId: row.threadId, runId: row.runId },
561
+ closed: !!row.closed,
562
+ end: row.closed && row.endEvent ? JSON.parse(row.endEvent) : null,
563
+ items: rows.map((r) => ({ ...JSON.parse(r.event), offset: String(r.pos) })),
564
+ };
565
+ }
566
+ async *read(streamId, after, signal) {
567
+ let cursor = after;
568
+ for (;;) {
569
+ if (signal?.aborted)
570
+ return;
571
+ const { woken, disarm } = this.arm(streamId);
572
+ const page = this.page(streamId, cursor);
573
+ if (!page) {
574
+ disarm();
575
+ throw new StreamGoneError(streamId);
576
+ }
577
+ if (page.items.length > 0)
578
+ disarm();
579
+ for (const item of page.items) {
580
+ yield item;
581
+ cursor = item.offset;
582
+ if (isStreamEnd(item))
583
+ return;
584
+ }
585
+ if (page.items.length > 0)
586
+ continue;
587
+ // Read from past the end item: nothing more will ever come.
588
+ if (page.closed) {
589
+ disarm();
590
+ return;
591
+ }
592
+ await Promise.race([woken, sleep(this.opts.pollMs ?? 250, signal)]);
593
+ disarm();
594
+ }
595
+ }
596
+ async snapshot(streamId, after) {
597
+ const page = this.page(streamId, after ?? null);
598
+ return page && { meta: page.meta, items: page.items, end: page.end };
599
+ }
600
+ }
601
+ /** A Kv over SQLite, for a local setup whose storage is durable too: one
602
+ * file, one lifetime. With an in-memory Kv beside SQLite storage, a restart
603
+ * forgets what the kv held while the log keeps it: a thread's sandbox (so
604
+ * the next call makes a fresh one without saying the files are gone), a
605
+ * run's lock, an answered approval on its way to the worker.
606
+ *
607
+ * Expiry is enforced on read. `incr` and SET NX are single statements, so
608
+ * concurrent callers never collide on a counter or a lock. The Go package
609
+ * has the same adapter (adapters/sqlite/kv.go), with the same table. */
610
+ export class SqliteKv {
611
+ db;
612
+ constructor(db) {
613
+ this.db = db;
614
+ db.prepare('CREATE TABLE IF NOT EXISTS kv (key TEXT PRIMARY KEY, value TEXT NOT NULL, expiresAt INTEGER)').run();
615
+ }
616
+ one(sql, ...params) {
617
+ return this.db.prepare(sql).all(...params)[0];
618
+ }
619
+ changes(res) {
620
+ return Number(res?.changes ?? 0);
621
+ }
622
+ expiry(exSeconds) {
623
+ return exSeconds && exSeconds > 0 ? Date.now() + exSeconds * 1000 : null;
624
+ }
625
+ async get(key) {
626
+ const row = this.one('SELECT value FROM kv WHERE key = ? AND (expiresAt IS NULL OR expiresAt > ?)', key, Date.now());
627
+ return row ? String(row.value) : null;
628
+ }
629
+ async set(key, value, opts = {}) {
630
+ const expires = this.expiry(opts.exSeconds);
631
+ if (!opts.onlyIfNotExists) {
632
+ this.db.prepare(`INSERT INTO kv (key, value, expiresAt) VALUES (?, ?, ?)
633
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value, expiresAt = excluded.expiresAt`).run(key, value, expires);
634
+ return true;
635
+ }
636
+ // SET NX: one statement, so exactly one caller can win. An expired row
637
+ // counts as absent.
638
+ const res = this.db.prepare(`INSERT INTO kv (key, value, expiresAt) VALUES (?, ?, ?)
639
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value, expiresAt = excluded.expiresAt
640
+ WHERE kv.expiresAt IS NOT NULL AND kv.expiresAt <= ?`).run(key, value, expires, Date.now());
641
+ return this.changes(res) > 0;
642
+ }
643
+ async del(key) {
644
+ this.db.prepare('DELETE FROM kv WHERE key = ?').run(key);
645
+ }
646
+ async incr(key) {
647
+ // An expired counter starts again from 1; a live one advances and keeps
648
+ // its expiry, like Redis INCR.
649
+ const now = Date.now();
650
+ const row = this.one(`INSERT INTO kv (key, value, expiresAt) VALUES (?, '1', NULL)
651
+ ON CONFLICT(key) DO UPDATE SET
652
+ value = CASE WHEN kv.expiresAt IS NOT NULL AND kv.expiresAt <= ? THEN '1'
653
+ ELSE CAST(CAST(kv.value AS INTEGER) + 1 AS TEXT) END,
654
+ expiresAt = CASE WHEN kv.expiresAt IS NOT NULL AND kv.expiresAt <= ? THEN NULL ELSE kv.expiresAt END
655
+ RETURNING value`, key, now, now);
656
+ return Number(row.value);
657
+ }
658
+ async incrWithExpiry(key, exSeconds) {
659
+ const now = Date.now();
660
+ const row = this.one(`INSERT INTO kv (key, value, expiresAt) VALUES (?, '1', ?)
661
+ ON CONFLICT(key) DO UPDATE SET
662
+ value = CASE WHEN kv.expiresAt IS NOT NULL AND kv.expiresAt <= ? THEN '1'
663
+ ELSE CAST(CAST(kv.value AS INTEGER) + 1 AS TEXT) END,
664
+ expiresAt = CASE WHEN kv.expiresAt IS NOT NULL AND kv.expiresAt <= ? THEN excluded.expiresAt ELSE kv.expiresAt END
665
+ RETURNING value`, key, this.expiry(exSeconds), now, now);
666
+ return Number(row.value);
667
+ }
668
+ async setIfValue(key, expected, value, opts = {}) {
669
+ const res = this.db.prepare('UPDATE kv SET value = ?, expiresAt = ? WHERE key = ? AND value = ? AND (expiresAt IS NULL OR expiresAt > ?)').run(value, this.expiry(opts.exSeconds), key, expected, Date.now());
670
+ return this.changes(res) > 0;
671
+ }
672
+ async delIfValue(key, expected) {
673
+ return this.changes(this.db.prepare('DELETE FROM kv WHERE key = ? AND value = ?').run(key, expected)) > 0;
674
+ }
675
+ }
270
676
  //# sourceMappingURL=sqlite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"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"}