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
@@ -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;AAGhE,sEAAsE;AACtE,eAAO,MAAM,UAAU,EAAE,SAAS,EAA0C,CAAC;AAE7E;;;gEAGgE;AAChE,eAAO,MAAM,OAAO,EAAE,gBAQrB,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"}
@@ -1,6 +1,21 @@
1
1
  import { sql as init } from './0001-init.js';
2
+ import { sql as runSettledAt } from './0002-run-settled-at.js';
3
+ import { sql as runEnqueuedAt } from './0003-run-enqueued-at.js';
4
+ import { sql as runSettleClaim } from './0004-run-settle-claim.js';
5
+ import { sql as bigintCounters } from './0005-bigint-counters.js';
2
6
  /** The admin migrations for Postgres, in apply order. Append only. */
3
- export const migrations = [{ version: '0001_init', sql: init }];
7
+ export const migrations = [
8
+ // The Go runtime's 0001 differs from this one only in its header comment;
9
+ // the SQL is the same. A released file is never edited, so each runtime
10
+ // accepts the other's checksum, and one admin database serves both.
11
+ { version: '0001_init', sql: init, equivalent: ['2e6ebddc37635c42e74e8c73bba63e0f01bdd8371d33698c50079ebfb8f6782c'] },
12
+ // Named and worded exactly as the Go runtime's, so both record the same
13
+ // version and checksum.
14
+ { version: '0002_run_settled_at', sql: runSettledAt },
15
+ { version: '0003_run_enqueued_at', sql: runEnqueuedAt },
16
+ { version: '0004_run_settle_claim', sql: runSettleClaim },
17
+ { version: '0005_bigint_counters', sql: bigintCounters },
18
+ ];
4
19
  /** Postgres takes a transaction-scoped advisory lock, so several workers
5
20
  * starting at once queue rather than racing on the same DDL. The key is
6
21
  * arbitrary and constant: it only has to be the same in every process
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7C,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7E;;;gEAGgE;AAChE,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE;;oDAE0C;IAClD,MAAM,EAAE,oEAAoE;IAC5E,SAAS,EAAE,2DAA2D;IACtE,IAAI,EAAE,0CAA0C;CACjD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/migrations/postgres/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAElE,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,0EAA0E;IAC1E,wEAAwE;IACxE,oEAAoE;IACpE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,kEAAkE,CAAC,EAAE;IACrH,wEAAwE;IACxE,wBAAwB;IACxB,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,YAAY,EAAE;IACrD,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,EAAE,aAAa,EAAE;IACvD,EAAE,OAAO,EAAE,uBAAuB,EAAE,GAAG,EAAE,cAAc,EAAE;IACzD,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,EAAE,cAAc,EAAE;CACzD,CAAC;AAEF;;;gEAGgE;AAChE,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE;;oDAE0C;IAClD,MAAM,EAAE,oEAAoE;IAC5E,SAAS,EAAE,2DAA2D;IACtE,IAAI,EAAE,0CAA0C;CACjD,CAAC"}
@@ -4,6 +4,10 @@ export interface Migration {
4
4
  /** Sorts and identifies it. Never reused, never renamed. */
5
5
  version: string;
6
6
  sql: string;
7
+ /** Other checksums this step is known to be the same as: the same SQL,
8
+ * recorded under a different text by the Go runtime. A database migrated
9
+ * by either runtime is then accepted by both. */
10
+ equivalent?: string[];
7
11
  }
8
12
  /** The two calls a migration runner needs. Both stores already have them. */
9
13
  export interface MigrationDriver {
@@ -19,6 +23,11 @@ export interface MigrationDialect {
19
23
  insert: string;
20
24
  /** Reads one version back. One bind parameter. */
21
25
  selectOne: string;
26
+ /** Opens the migration's transaction; `BEGIN` when omitted. SQLite's is
27
+ * `BEGIN IMMEDIATE`: a plain BEGIN takes the write lock only at the first
28
+ * write, so two processes that both read the ledger first both fail with
29
+ * SQLITE_BUSY instead of one waiting for the other. */
30
+ begin?: string;
22
31
  /** Taken first inside each migration's transaction, so two workers starting
23
32
  * together queue rather than both applying the same file. Omitted for a
24
33
  * database that serialises writers by itself. */
@@ -75,7 +84,18 @@ export declare function runMigrations(db: MigrationDriver, dialect: MigrationDia
75
84
  * that failed surfaces on the first call rather than as a mystery empty
76
85
  * dashboard.
77
86
  *
87
+ * A failed migration is never an unhandled rejection: nothing awaits it until
88
+ * the first admin call, and Node ends the process on a rejection nobody
89
+ * handled. Nor is it final: a database that was down at boot comes back, so
90
+ * a call made after `retryMs` runs the migration again (the wait doubles on
91
+ * each failure, up to a minute). Calls in between fail fast with the last
92
+ * error.
93
+ *
78
94
  * Written once here so every admin store, including one added later, gets the
79
95
  * same behaviour for free. */
80
- export declare function gatedAdminStore(inner: AdminStore, ready: Promise<void>): AdminStore;
96
+ export declare function gatedAdminStore(inner: AdminStore, migrate: () => Promise<void>, opts?: {
97
+ retryMs?: number;
98
+ maxRetryMs?: number;
99
+ now?: () => number;
100
+ }): AdminStore;
81
101
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/admin/migrations/runner.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,0BAA0B;AAC1B,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAChF;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB;;sDAEkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;oEASgE;IAChE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;;;;8CAK8C;AAC9C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhD;AAED;;qBAEqB;AACrB,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MACgC,CAAC;AAExE;;;;;;;;;;;;;;;;;;YAkBY;AACZ,wBAAsB,aAAa,CACjC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;;;;;;+BAU+B;AAC/B,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAoBnF"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/admin/migrations/runner.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,0BAA0B;AAC1B,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ;;sDAEkD;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAChF;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB;;;4DAGwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;sDAEkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;oEASgE;IAChE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;;;;8CAK8C;AAC9C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWhD;AAED;;qBAEqB;AACrB,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MACgC,CAAC;AAExE;;;;;;;;;;;;;;;;;;YAkBY;AACZ,wBAAsB,aAAa,CACjC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;;;;;;;;;;;;;+BAiB+B;AAC/B,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC5B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GACvE,UAAU,CAiDZ"}
@@ -66,7 +66,7 @@ export const checksum = (sql) => createHash('sha256').update(sql.replace(/\r\n/g
66
66
  * here. */
67
67
  export async function runMigrations(db, dialect, migrations) {
68
68
  const where = (msg) => `${dialect.name} migrations: ${msg}`;
69
- await db.exec('BEGIN');
69
+ await db.exec(dialect.begin ?? 'BEGIN');
70
70
  try {
71
71
  if (dialect.lock)
72
72
  await db.exec(dialect.lock);
@@ -81,7 +81,7 @@ export async function runMigrations(db, dialect, migrations) {
81
81
  const sum = checksum(m.sql);
82
82
  const already = applied.get(m.version);
83
83
  if (already !== undefined) {
84
- if (already !== sum) {
84
+ if (already !== sum && !m.equivalent?.includes(already)) {
85
85
  throw new Error(`${m.version} changed after it was applied: the database no longer matches the code`);
86
86
  }
87
87
  continue;
@@ -111,16 +111,53 @@ export async function runMigrations(db, dialect, migrations) {
111
111
  * that failed surfaces on the first call rather than as a mystery empty
112
112
  * dashboard.
113
113
  *
114
+ * A failed migration is never an unhandled rejection: nothing awaits it until
115
+ * the first admin call, and Node ends the process on a rejection nobody
116
+ * handled. Nor is it final: a database that was down at boot comes back, so
117
+ * a call made after `retryMs` runs the migration again (the wait doubles on
118
+ * each failure, up to a minute). Calls in between fail fast with the last
119
+ * error.
120
+ *
114
121
  * Written once here so every admin store, including one added later, gets the
115
122
  * same behaviour for free. */
116
- export function gatedAdminStore(inner, ready) {
123
+ export function gatedAdminStore(inner, migrate, opts = {}) {
124
+ const now = opts.now ?? Date.now;
125
+ const maxRetryMs = opts.maxRetryMs ?? 60_000;
126
+ let wait = opts.retryMs ?? 1_000;
127
+ let failedAt = 0;
128
+ let lastError;
129
+ let ready = null;
130
+ const start = () => {
131
+ const attempt = migrate().then(() => {
132
+ lastError = undefined;
133
+ }, (err) => {
134
+ lastError = err;
135
+ failedAt = now();
136
+ ready = null;
137
+ });
138
+ ready = attempt;
139
+ return attempt;
140
+ };
141
+ void start();
142
+ const whenReady = async () => {
143
+ if (ready)
144
+ await ready;
145
+ if (lastError === undefined)
146
+ return;
147
+ if (now() - failedAt < wait)
148
+ throw lastError;
149
+ wait = Math.min(wait * 2, maxRetryMs);
150
+ await start();
151
+ if (lastError !== undefined)
152
+ throw lastError;
153
+ };
117
154
  const gate = (group) => {
118
155
  const out = {};
119
156
  for (const [name, fn] of Object.entries(group)) {
120
157
  out[name] =
121
158
  typeof fn === 'function'
122
159
  ? async (...args) => {
123
- await ready;
160
+ await whenReady();
124
161
  return fn.apply(group, args);
125
162
  }
126
163
  : fn;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/admin/migrations/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/admin/migrations/runner.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/sqlite/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 settledAt INTEGER;\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/sqlite/0002-run-settled-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,oVAMf,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/sqlite/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 settledAt INTEGER;
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/sqlite/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/sqlite/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 enqueuedAt INTEGER;\nALTER TABLE agentic_runs ADD COLUMN costBudgetMicros INTEGER;\nALTER TABLE agentic_runs ADD COLUMN maxSteps INTEGER;\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/sqlite/0003-run-enqueued-at.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,4mBAUf,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/sqlite/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 enqueuedAt INTEGER;
12
+ ALTER TABLE agentic_runs ADD COLUMN costBudgetMicros INTEGER;
13
+ ALTER TABLE agentic_runs ADD COLUMN maxSteps INTEGER;
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/sqlite/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/sqlite/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 settlingAt INTEGER;\nALTER TABLE agentic_runs ADD COLUMN 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/sqlite/0004-run-settle-claim.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,eAAO,MAAM,GAAG,8oBAUf,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/sqlite/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 settlingAt INTEGER;
12
+ ALTER TABLE agentic_runs ADD COLUMN 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/sqlite/0004-run-settle-claim.ts"],"names":[],"mappings":"AAAA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;CAUlB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { Migration, MigrationDialect } from '../runner.js';
2
2
  /** The admin migrations for SQLite, in apply order. Append only. */
3
3
  export declare const migrations: Migration[];
4
- /** SQLite needs no lock: the driver holds one connection and the database
5
- * takes one writer at a time. */
4
+ /** SQLite needs no lock: the database takes one writer at a time, and
5
+ * BEGIN IMMEDIATE makes a second process wait for it. */
6
6
  export declare const dialect: MigrationDialect;
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AAGjF,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,SAAS,EAA0C,CAAC;AA2B7E;kCACkC;AAClC,eAAO,MAAM,OAAO,EAAE,gBAQrB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/migrations/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AAMjF,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,SAAS,EAUjC,CAAC;AA2BF;0DAC0D;AAC1D,eAAO,MAAM,OAAO,EAAE,gBASrB,CAAC"}
@@ -1,6 +1,19 @@
1
1
  import { sql as init } from './0001-init.js';
2
+ import { sql as runSettledAt } from './0002-run-settled-at.js';
3
+ import { sql as runEnqueuedAt } from './0003-run-enqueued-at.js';
4
+ import { sql as runSettleClaim } from './0004-run-settle-claim.js';
2
5
  /** The admin migrations for SQLite, in apply order. Append only. */
3
- export const migrations = [{ version: '0001_init', sql: init }];
6
+ export const migrations = [
7
+ // The Go runtime's 0001 differs from this one only in its header comment;
8
+ // the SQL is the same. A released file is never edited, so each runtime
9
+ // accepts the other's checksum, and one admin database serves both.
10
+ { version: '0001_init', sql: init, equivalent: ['800097b6ae76a1d130ca14c520f0789974051fb7275be0bcc1458a2e88aaa039'] },
11
+ // Named and worded exactly as the Go runtime's, so both record the same
12
+ // version and checksum.
13
+ { version: '0002_run_settled_at', sql: runSettledAt },
14
+ { version: '0003_run_enqueued_at', sql: runEnqueuedAt },
15
+ { version: '0004_run_settle_claim', sql: runSettleClaim },
16
+ ];
4
17
  /** Columns added after the first release, per table. SQLite cannot express
5
18
  * ADD COLUMN IF NOT EXISTS, so these are checked against the live table. */
6
19
  const LATER_COLUMNS = {
@@ -24,8 +37,8 @@ async function repair(db) {
24
37
  }
25
38
  }
26
39
  }
27
- /** SQLite needs no lock: the driver holds one connection and the database
28
- * takes one writer at a time. */
40
+ /** SQLite needs no lock: the database takes one writer at a time, and
41
+ * BEGIN IMMEDIATE makes a second process wait for it. */
29
42
  export const dialect = {
30
43
  name: 'sqlite',
31
44
  ledger: `CREATE TABLE IF NOT EXISTS agentic_migrations (
@@ -33,6 +46,7 @@ export const dialect = {
33
46
  insert: `INSERT INTO agentic_migrations (version, checksum, appliedAt)
34
47
  VALUES (?, ?, CAST(strftime('%s','now') AS INTEGER) * 1000)`,
35
48
  selectOne: 'SELECT version FROM agentic_migrations WHERE version = ?',
49
+ begin: 'BEGIN IMMEDIATE',
36
50
  repair,
37
51
  };
38
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/migrations/sqlite/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7C,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7E;6EAC6E;AAC7E,MAAM,aAAa,GAA2C;IAC5D,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IACpE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;KAClF;IACD,eAAe,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;CACzC,CAAC;AAEF;;wCAEwC;AACxC,KAAK,UAAU,MAAM,CAAC,EAAmB;IACvC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS,CAAC,oBAAoB;QACnD,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED;kCACkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;kFACwE;IAChF,MAAM,EAAE;uEAC6D;IACrE,SAAS,EAAE,0DAA0D;IACrE,MAAM;CACP,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/migrations/sqlite/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEnE,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,0EAA0E;IAC1E,wEAAwE;IACxE,oEAAoE;IACpE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,kEAAkE,CAAC,EAAE;IACrH,wEAAwE;IACxE,wBAAwB;IACxB,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,EAAE,YAAY,EAAE;IACrD,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAG,EAAE,aAAa,EAAE;IACvD,EAAE,OAAO,EAAE,uBAAuB,EAAE,GAAG,EAAE,cAAc,EAAE;CAC1D,CAAC;AAEF;6EAC6E;AAC7E,MAAM,aAAa,GAA2C;IAC5D,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IACpE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;KAClF;IACD,eAAe,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;CACzC,CAAC;AAEF;;wCAEwC;AACxC,KAAK,UAAU,MAAM,CAAC,EAAmB;IACvC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS,CAAC,oBAAoB;QACnD,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED;0DAC0D;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;kFACwE;IAChF,MAAM,EAAE;uEAC6D;IACrE,SAAS,EAAE,0DAA0D;IACrE,KAAK,EAAE,iBAAiB;IACxB,MAAM;CACP,CAAC"}
@@ -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
  /** Minimal structural type over a Postgres client. Both `pg`'s `Pool` and its
4
4
  * `Client` satisfy it, so the package never imports the driver (§3.4). */
5
5
  export interface PgLike {
@@ -32,9 +32,10 @@ export declare class PostgresAdminStore implements AdminStore {
32
32
  private constructor();
33
33
  /** The store with its schema migration already running behind it (§2.9).
34
34
  *
35
- * Connecting stays synchronous — a URL that cannot be reached is a
36
- * configuration problem worth failing on at startup. Only the schema moves
37
- * to the background, so a service starts at the same speed whether or not
35
+ * Nothing here touches the network: a `pg` Pool connects lazily, so a
36
+ * URL that cannot be reached shows up as a failed migration, logged, and
37
+ * retried on a later admin call (see `gatedAdminStore`). The schema runs
38
+ * in the background, so a service starts at the same speed whether or not
38
39
  * it has migrating to do, and the returned store waits for it before its
39
40
  * first call.
40
41
  *
@@ -48,13 +49,22 @@ export declare class PostgresAdminStore implements AdminStore {
48
49
  upsert: (t: NewAdminThread) => Promise<void>;
49
50
  countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
50
51
  list: (f: AdminThreadFilter) => Promise<AdminThread[]>;
52
+ get: (threadId: string) => Promise<AdminThread | null>;
53
+ delete: (threadId: string) => Promise<void>;
51
54
  };
55
+ /** Run `fn` in one transaction, on one connection: a pool hands each query
56
+ * whichever connection is free, which is not a transaction at all. */
57
+ private transaction;
52
58
  runs: {
53
59
  start: (run: NewRunRecord) => Promise<RunRecord>;
54
60
  patch: (runId: string, patch: RunPatch) => Promise<void>;
55
61
  get: (runId: string) => Promise<RunRecord | null>;
56
62
  listByThread: (threadId: string) => Promise<RunRecord[]>;
57
63
  list: (f: RunFilter) => Promise<RunRecord[]>;
64
+ increment: (runId: string, d: RunDeltas) => Promise<void>;
65
+ totals: (f: RunFilter) => Promise<RunTotals>;
66
+ claimSettle: (runId: string, token: string, staleBefore: Date) => Promise<boolean>;
67
+ endSettle: (runId: string, token: string, settled: boolean) => Promise<void>;
58
68
  countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
59
69
  };
60
70
  steps: {
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/admin/postgres.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,EACrC,MAAM,mBAAmB,CAAC;AAI3B;2EAC2E;AAC3E,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE;;;;gFAI4E;IAC5E,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACnC;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;gEAEgE;AAChE,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/D;AAmCD;;oEAEoE;AACpE,qBAAa,kBAAmB,YAAW,UAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;;;;;gBAUY;IACZ,MAAM,CAAC,OAAO,CACZ,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,GACzD,UAAU;IAYb,OAAO;oBACa,cAAc;;kBAiBhB,iBAAiB,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;MAkB1D;IAEF,IAAI;qBACiB,YAAY;uBAeV,MAAM,SAAS,QAAQ;qBAczB,MAAM;iCAIM,MAAM;kBAOrB,SAAS;;MAuBzB;IAEF,KAAK;oBACe,aAAa;2BAgBN,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;iCAOxB,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;MAO7D;CACH"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/admin/postgres.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;AAK3B;2EAC2E;AAC3E,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE;;;;gFAI4E;IAC5E,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACnC;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;gEAEgE;AAChE,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/D;AAkED;;oEAEoE;AACpE,qBAAa,kBAAmB,YAAW,UAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;;;;;;gBAWY;IACZ,MAAM,CAAC,OAAO,CACZ,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,GACzD,UAAU;IAwBb,OAAO;oBACa,cAAc;;kBAiBhB,iBAAiB,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;wBAcpC,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;2BAIjC,MAAM;MAO/B;IAEF;2EACuE;YACzD,WAAW;IAiBzB,IAAI;qBACiB,YAAY;uBAiBV,MAAM,SAAS,QAAQ;qBAezB,MAAM;iCAIM,MAAM;kBAOrB,SAAS;2BAWA,MAAM,KAAK,SAAS;oBAQ3B,SAAS,KAAG,OAAO,CAAC,SAAS,CAAC;6BAarB,MAAM,SAAS,MAAM,eAAe,IAAI;2BAS1C,MAAM,SAAS,MAAM,WAAW,OAAO;;MAkBhE;IAEF,KAAK;oBACe,aAAa;2BAgBN,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;iCAOxB,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;MAO7D;CACH"}