agentenkit 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +34 -14
  2. package/dist/adapters/inline.d.ts +19 -5
  3. package/dist/adapters/inline.d.ts.map +1 -1
  4. package/dist/adapters/inline.js +87 -14
  5. package/dist/adapters/inline.js.map +1 -1
  6. package/dist/adapters/memory.d.ts +65 -3
  7. package/dist/adapters/memory.d.ts.map +1 -1
  8. package/dist/adapters/memory.js +267 -3
  9. package/dist/adapters/memory.js.map +1 -1
  10. package/dist/adapters/prisma.d.ts +125 -18
  11. package/dist/adapters/prisma.d.ts.map +1 -1
  12. package/dist/adapters/prisma.js +308 -67
  13. package/dist/adapters/prisma.js.map +1 -1
  14. package/dist/adapters/qstash.d.ts +15 -2
  15. package/dist/adapters/qstash.d.ts.map +1 -1
  16. package/dist/adapters/qstash.js +31 -14
  17. package/dist/adapters/qstash.js.map +1 -1
  18. package/dist/adapters/redis.d.ts +40 -4
  19. package/dist/adapters/redis.d.ts.map +1 -1
  20. package/dist/adapters/redis.js +265 -20
  21. package/dist/adapters/redis.js.map +1 -1
  22. package/dist/adapters/sqlite.d.ts +52 -2
  23. package/dist/adapters/sqlite.d.ts.map +1 -1
  24. package/dist/adapters/sqlite.js +342 -35
  25. package/dist/adapters/sqlite.js.map +1 -1
  26. package/dist/adapters/stream-scripts.d.ts +49 -0
  27. package/dist/adapters/stream-scripts.d.ts.map +1 -0
  28. package/dist/adapters/stream-scripts.js +150 -0
  29. package/dist/adapters/stream-scripts.js.map +1 -0
  30. package/dist/adapters/upstash.d.ts +20 -0
  31. package/dist/adapters/upstash.d.ts.map +1 -1
  32. package/dist/adapters/upstash.js +29 -0
  33. package/dist/adapters/upstash.js.map +1 -1
  34. package/dist/admin/memory.d.ts +11 -1
  35. package/dist/admin/memory.d.ts.map +1 -1
  36. package/dist/admin/memory.js +83 -14
  37. package/dist/admin/memory.js.map +1 -1
  38. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
  39. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
  40. package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
  41. package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
  42. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
  43. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
  44. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
  45. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
  46. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
  47. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
  48. package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
  49. package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
  50. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
  51. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
  52. package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
  53. package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
  54. package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
  55. package/dist/admin/migrations/postgres/index.js +16 -1
  56. package/dist/admin/migrations/postgres/index.js.map +1 -1
  57. package/dist/admin/migrations/runner.d.ts +21 -1
  58. package/dist/admin/migrations/runner.d.ts.map +1 -1
  59. package/dist/admin/migrations/runner.js +41 -4
  60. package/dist/admin/migrations/runner.js.map +1 -1
  61. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
  62. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
  63. package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
  64. package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
  65. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
  66. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
  67. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
  68. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
  69. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
  70. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
  71. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
  72. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
  73. package/dist/admin/migrations/sqlite/index.d.ts +2 -2
  74. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
  75. package/dist/admin/migrations/sqlite/index.js +17 -3
  76. package/dist/admin/migrations/sqlite/index.js.map +1 -1
  77. package/dist/admin/postgres.d.ts +14 -4
  78. package/dist/admin/postgres.d.ts.map +1 -1
  79. package/dist/admin/postgres.js +131 -36
  80. package/dist/admin/postgres.js.map +1 -1
  81. package/dist/admin/shared.d.ts +19 -0
  82. package/dist/admin/shared.d.ts.map +1 -0
  83. package/dist/admin/shared.js +28 -0
  84. package/dist/admin/shared.js.map +1 -0
  85. package/dist/admin/sqlite.d.ts +9 -1
  86. package/dist/admin/sqlite.d.ts.map +1 -1
  87. package/dist/admin/sqlite.js +112 -29
  88. package/dist/admin/sqlite.js.map +1 -1
  89. package/dist/core/admin.d.ts +28 -6
  90. package/dist/core/admin.d.ts.map +1 -1
  91. package/dist/core/admin.js +92 -23
  92. package/dist/core/admin.js.map +1 -1
  93. package/dist/core/agent.d.ts +7 -4
  94. package/dist/core/agent.d.ts.map +1 -1
  95. package/dist/core/agent.js +15 -11
  96. package/dist/core/agent.js.map +1 -1
  97. package/dist/core/agui.d.ts +17 -0
  98. package/dist/core/agui.d.ts.map +1 -0
  99. package/dist/core/agui.js +69 -0
  100. package/dist/core/agui.js.map +1 -0
  101. package/dist/core/context.d.ts +13 -1
  102. package/dist/core/context.d.ts.map +1 -1
  103. package/dist/core/context.js +70 -19
  104. package/dist/core/context.js.map +1 -1
  105. package/dist/core/deleteThread.d.ts.map +1 -1
  106. package/dist/core/deleteThread.js +33 -4
  107. package/dist/core/deleteThread.js.map +1 -1
  108. package/dist/core/engine.d.ts +41 -11
  109. package/dist/core/engine.d.ts.map +1 -1
  110. package/dist/core/engine.js +855 -352
  111. package/dist/core/engine.js.map +1 -1
  112. package/dist/core/follow.d.ts +63 -1
  113. package/dist/core/follow.d.ts.map +1 -1
  114. package/dist/core/follow.js +293 -16
  115. package/dist/core/follow.js.map +1 -1
  116. package/dist/core/hitl.d.ts +43 -0
  117. package/dist/core/hitl.d.ts.map +1 -1
  118. package/dist/core/hitl.js +163 -35
  119. package/dist/core/hitl.js.map +1 -1
  120. package/dist/core/keys.d.ts +22 -4
  121. package/dist/core/keys.d.ts.map +1 -1
  122. package/dist/core/keys.js +23 -5
  123. package/dist/core/keys.js.map +1 -1
  124. package/dist/core/lease.d.ts +46 -0
  125. package/dist/core/lease.d.ts.map +1 -0
  126. package/dist/core/lease.js +142 -0
  127. package/dist/core/lease.js.map +1 -0
  128. package/dist/core/loop.d.ts +27 -7
  129. package/dist/core/loop.d.ts.map +1 -1
  130. package/dist/core/loop.js +140 -55
  131. package/dist/core/loop.js.map +1 -1
  132. package/dist/core/messages.d.ts +21 -2
  133. package/dist/core/messages.d.ts.map +1 -1
  134. package/dist/core/messages.js +61 -2
  135. package/dist/core/messages.js.map +1 -1
  136. package/dist/core/prune.d.ts +24 -0
  137. package/dist/core/prune.d.ts.map +1 -0
  138. package/dist/core/prune.js +43 -0
  139. package/dist/core/prune.js.map +1 -0
  140. package/dist/core/publish.d.ts +38 -10
  141. package/dist/core/publish.d.ts.map +1 -1
  142. package/dist/core/publish.js +126 -12
  143. package/dist/core/publish.js.map +1 -1
  144. package/dist/core/reclaim.d.ts +8 -1
  145. package/dist/core/reclaim.d.ts.map +1 -1
  146. package/dist/core/reclaim.js +149 -18
  147. package/dist/core/reclaim.js.map +1 -1
  148. package/dist/core/run.d.ts +7 -3
  149. package/dist/core/run.d.ts.map +1 -1
  150. package/dist/core/run.js +95 -35
  151. package/dist/core/run.js.map +1 -1
  152. package/dist/core/segment.d.ts +62 -0
  153. package/dist/core/segment.d.ts.map +1 -0
  154. package/dist/core/segment.js +318 -0
  155. package/dist/core/segment.js.map +1 -0
  156. package/dist/core/settle.d.ts +57 -0
  157. package/dist/core/settle.d.ts.map +1 -0
  158. package/dist/core/settle.js +181 -0
  159. package/dist/core/settle.js.map +1 -0
  160. package/dist/core/snapshot.d.ts +36 -0
  161. package/dist/core/snapshot.d.ts.map +1 -0
  162. package/dist/core/snapshot.js +87 -0
  163. package/dist/core/snapshot.js.map +1 -0
  164. package/dist/core/stop.d.ts +16 -1
  165. package/dist/core/stop.d.ts.map +1 -1
  166. package/dist/core/stop.js +69 -15
  167. package/dist/core/stop.js.map +1 -1
  168. package/dist/core/stream-events.d.ts +184 -0
  169. package/dist/core/stream-events.d.ts.map +1 -0
  170. package/dist/core/stream-events.js +26 -0
  171. package/dist/core/stream-events.js.map +1 -0
  172. package/dist/core/stream.d.ts +29 -0
  173. package/dist/core/stream.d.ts.map +1 -1
  174. package/dist/core/stream.js +79 -0
  175. package/dist/core/stream.js.map +1 -1
  176. package/dist/core/subagent.d.ts +36 -5
  177. package/dist/core/subagent.d.ts.map +1 -1
  178. package/dist/core/subagent.js +117 -22
  179. package/dist/core/subagent.js.map +1 -1
  180. package/dist/core/types.d.ts +195 -12
  181. package/dist/core/types.d.ts.map +1 -1
  182. package/dist/core/types.js +26 -1
  183. package/dist/core/types.js.map +1 -1
  184. package/dist/core/usage.d.ts +53 -5
  185. package/dist/core/usage.d.ts.map +1 -1
  186. package/dist/core/usage.js +170 -47
  187. package/dist/core/usage.js.map +1 -1
  188. package/dist/index.d.ts +16 -11
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +12 -7
  191. package/dist/index.js.map +1 -1
  192. package/dist/ports/admin.d.ts +59 -0
  193. package/dist/ports/admin.d.ts.map +1 -1
  194. package/dist/ports/kv.d.ts +17 -0
  195. package/dist/ports/kv.d.ts.map +1 -1
  196. package/dist/ports/queue.d.ts +87 -7
  197. package/dist/ports/queue.d.ts.map +1 -1
  198. package/dist/ports/queue.js +36 -1
  199. package/dist/ports/queue.js.map +1 -1
  200. package/dist/ports/runtime.d.ts +171 -20
  201. package/dist/ports/runtime.d.ts.map +1 -1
  202. package/dist/ports/storage.d.ts +26 -5
  203. package/dist/ports/storage.d.ts.map +1 -1
  204. package/dist/ports/streams.d.ts +60 -0
  205. package/dist/ports/streams.d.ts.map +1 -0
  206. package/dist/ports/streams.js +20 -0
  207. package/dist/ports/streams.js.map +1 -0
  208. package/dist/pricing.d.ts +5 -0
  209. package/dist/pricing.d.ts.map +1 -1
  210. package/dist/pricing.js +35 -10
  211. package/dist/pricing.js.map +1 -1
  212. package/dist/runtime.d.ts +6 -0
  213. package/dist/runtime.d.ts.map +1 -1
  214. package/dist/runtime.js +144 -46
  215. package/dist/runtime.js.map +1 -1
  216. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import type { AgentEvent } from '../core/types.js';
2
2
  import type { Kv } from '../ports/kv.js';
3
3
  import type { EventBus } from '../ports/bus.js';
4
+ import { ScriptedRunStreams } from './stream-scripts.js';
4
5
  /** Minimal structural type of a node-redis (v4) client — the real client
5
6
  * satisfies it without importing the SDK here. Works against any Redis:
6
7
  * local Docker, self-hosted, or managed. */
@@ -11,6 +12,10 @@ export interface RedisClientLike {
11
12
  del: any;
12
13
  incr: any;
13
14
  publish: any;
15
+ /** node-redis v4: `eval(script, { keys, arguments })`. */
16
+ eval: any;
17
+ /** Any command, raw: `sendCommand(['XREAD', ...])`. */
18
+ sendCommand?: any;
14
19
  duplicate(): any;
15
20
  }
16
21
  /** A dedicated connection for subscriptions (node-redis `client.duplicate()`). */
@@ -32,18 +37,49 @@ export declare class RedisKv implements Kv {
32
37
  }): Promise<boolean>;
33
38
  del(key: string): any;
34
39
  incr(key: string): any;
40
+ setIfValue(key: string, expected: string, value: string, opts?: {
41
+ exSeconds?: number;
42
+ }): Promise<boolean>;
43
+ delIfValue(key: string, expected: string): Promise<boolean>;
44
+ incrWithExpiry(key: string, exSeconds: number): Promise<number>;
35
45
  }
36
46
  /** Reference EventBus adapter over plain Redis Pub/Sub (node-redis).
37
47
  *
38
- * While subscribed, emits a bus-only `HEARTBEAT` notice (seq 0, never
39
- * persisted) every heartbeatMs — the §2.5 watchdog pattern: pub/sub is
40
- * at-most-once, so the SSE distributor treats heartbeats as a trigger to
41
- * re-check for orphaned HITL waits. */
48
+ * One subscriber connection per process, shared by every subscription: a
49
+ * channel is subscribed when its first handler arrives and unsubscribed when
50
+ * its last one leaves. A connection per viewer would run a busy deployment
51
+ * into Redis's `maxclients`.
52
+ *
53
+ * While subscribed, a bus-only `HEARTBEAT` notice (seq 0, never persisted)
54
+ * reaches every subscription each `heartbeatMs`, from one timer per process —
55
+ * the §2.5 watchdog pattern: pub/sub is at-most-once, so the SSE distributor
56
+ * treats heartbeats as a trigger to re-check for orphaned HITL waits, and a
57
+ * follower fills any gap from the log. */
42
58
  export declare class RedisBus implements EventBus {
43
59
  private readonly client;
44
60
  private readonly heartbeatMs;
61
+ private sub;
62
+ private readonly handlers;
63
+ private heartbeat?;
45
64
  constructor(client: RedisClientLike, heartbeatMs?: number);
46
65
  publish(threadId: string, event: AgentEvent): Promise<void>;
66
+ /** The shared subscriber connection, opened on first use. */
67
+ private connection;
68
+ private deliver;
47
69
  subscribe(threadId: string, handler: (event: AgentEvent) => void): Promise<() => Promise<void>>;
70
+ private startHeartbeat;
71
+ private stopHeartbeat;
72
+ }
73
+ /** RunStreams over Redis Streams (see stream-scripts.ts for the keys and
74
+ * scripts, the same ones the Go adapter runs). Readers in one process share
75
+ * one blocking connection; `pollMs` is the floor under a missed wake-up. */
76
+ export declare class RedisRunStreams extends ScriptedRunStreams {
77
+ private readonly tail;
78
+ constructor(client: RedisClientLike, opts?: {
79
+ pollMs?: number;
80
+ blockMs?: number;
81
+ });
82
+ /** Closes the shared tail connection. */
83
+ shutdown(): Promise<void>;
48
84
  }
49
85
  //# sourceMappingURL=redis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;6CAE6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAG5B,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,IAAI,GAAG,CAAC;CAClB;AAED,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC;IACf,WAAW,EAAE,GAAG,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,EAAE,GAAG,CAAC;CACT;AAED,0DAA0D;AAC1D,qBAAa,OAAQ,YAAW,EAAE;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,eAAe;IAEnD,GAAG,CAAC,GAAG,EAAE,MAAM;IACT,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACvD,OAAO,CAAC,OAAO,CAAC;IAanB,GAAG,CAAC,GAAG,EAAE,MAAM;IACf,IAAI,CAAC,GAAG,EAAE,MAAM;CACjB;AAED;;;;;wCAKwC;AACxC,qBAAa,QAAS,YAAW,QAAQ;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,MAAM,EAAE,eAAe,EACvB,WAAW,SAAS;IAGjC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAI3C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;CAuBvE"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAmB,kBAAkB,EAAS,MAAM,qBAAqB,CAAC;AAGjF;;6CAE6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAG5B,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,GAAG,CAAC;IACV,uDAAuD;IACvD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,IAAI,GAAG,CAAC;CAClB;AAED,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC;IACf,WAAW,EAAE,GAAG,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,EAAE,GAAG,CAAC;CACT;AAED,0DAA0D;AAC1D,qBAAa,OAAQ,YAAW,EAAE;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,eAAe;IAEnD,GAAG,CAAC,GAAG,EAAE,MAAM;IACT,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACvD,OAAO,CAAC,OAAO,CAAC;IAanB,GAAG,CAAC,GAAG,EAAE,MAAM;IACf,IAAI,CAAC,GAAG,EAAE,MAAM;IACV,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAQtF,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAIxC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAOpD;AAED;;;;;;;;;;;2CAW2C;AAC3C,qBAAa,QAAS,YAAW,QAAQ;IAMrC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN9B,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;IAChF,OAAO,CAAC,SAAS,CAAC,CAAiC;gBAGhC,MAAM,EAAE,eAAe,EACvB,WAAW,SAAS;IAGjC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAIjD,6DAA6D;IAC7D,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,OAAO;IAUT,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;IAyCtE,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;CAItB;AAmID;;6EAE6E;AAC7E,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,MAAM,EAAE,eAAe,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAUrF,yCAAyC;IACnC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
@@ -1,4 +1,5 @@
1
- import { THREAD_CHANNEL } from './upstash.js';
1
+ import { compareEntryIds, ScriptedRunStreams, sleep } from './stream-scripts.js';
2
+ import { DEL_IF_VALUE_SCRIPT, INCR_WITH_EXPIRY_SCRIPT, SET_IF_VALUE_SCRIPT, THREAD_CHANNEL } from './upstash.js';
2
3
  /** Reference Kv adapter over plain Redis (node-redis). */
3
4
  export class RedisKv {
4
5
  redis;
@@ -17,16 +18,44 @@ export class RedisKv {
17
18
  }
18
19
  del(key) { return this.redis.del(key).then(() => undefined); }
19
20
  incr(key) { return this.redis.incr(key); }
21
+ async setIfValue(key, expected, value, opts) {
22
+ const ms = Math.round((opts?.exSeconds ?? 0) * 1000);
23
+ const n = await this.redis.eval(SET_IF_VALUE_SCRIPT, {
24
+ keys: [key],
25
+ arguments: [expected, value, String(ms)],
26
+ });
27
+ return Number(n) === 1;
28
+ }
29
+ async delIfValue(key, expected) {
30
+ const n = await this.redis.eval(DEL_IF_VALUE_SCRIPT, { keys: [key], arguments: [expected] });
31
+ return Number(n) === 1;
32
+ }
33
+ async incrWithExpiry(key, exSeconds) {
34
+ const n = await this.redis.eval(INCR_WITH_EXPIRY_SCRIPT, {
35
+ keys: [key],
36
+ arguments: [String(Math.round(exSeconds * 1000))],
37
+ });
38
+ return Number(n);
39
+ }
20
40
  }
21
41
  /** Reference EventBus adapter over plain Redis Pub/Sub (node-redis).
22
42
  *
23
- * While subscribed, emits a bus-only `HEARTBEAT` notice (seq 0, never
24
- * persisted) every heartbeatMs — the §2.5 watchdog pattern: pub/sub is
25
- * at-most-once, so the SSE distributor treats heartbeats as a trigger to
26
- * re-check for orphaned HITL waits. */
43
+ * One subscriber connection per process, shared by every subscription: a
44
+ * channel is subscribed when its first handler arrives and unsubscribed when
45
+ * its last one leaves. A connection per viewer would run a busy deployment
46
+ * into Redis's `maxclients`.
47
+ *
48
+ * While subscribed, a bus-only `HEARTBEAT` notice (seq 0, never persisted)
49
+ * reaches every subscription each `heartbeatMs`, from one timer per process —
50
+ * the §2.5 watchdog pattern: pub/sub is at-most-once, so the SSE distributor
51
+ * treats heartbeats as a trigger to re-check for orphaned HITL waits, and a
52
+ * follower fills any gap from the log. */
27
53
  export class RedisBus {
28
54
  client;
29
55
  heartbeatMs;
56
+ sub = null;
57
+ handlers = new Map();
58
+ heartbeat;
30
59
  constructor(client, heartbeatMs = 60_000) {
31
60
  this.client = client;
32
61
  this.heartbeatMs = heartbeatMs;
@@ -34,27 +63,243 @@ export class RedisBus {
34
63
  async publish(threadId, event) {
35
64
  await this.client.publish(THREAD_CHANNEL(threadId), JSON.stringify(event));
36
65
  }
37
- async subscribe(threadId, handler) {
38
- const sub = this.client.duplicate();
39
- await sub.connect();
40
- await sub.subscribe(THREAD_CHANNEL(threadId), (message) => {
66
+ /** The shared subscriber connection, opened on first use. */
67
+ connection() {
68
+ if (!this.sub) {
69
+ const sub = this.client.duplicate();
70
+ // node-redis emits 'error' on a dropped connection and reconnects by
71
+ // itself. With no listener, the emit throws and ends the process, so one
72
+ // Redis failover would take down every worker and SSE server.
73
+ sub.on('error', (err) => console.error('redis subscriber error', err));
74
+ this.sub = Promise.resolve(sub.connect()).then(() => sub, (err) => {
75
+ this.sub = null; // a later subscribe tries again
76
+ void Promise.resolve(sub.quit()).catch(() => undefined);
77
+ throw err;
78
+ });
79
+ }
80
+ return this.sub;
81
+ }
82
+ deliver(handlers, event) {
83
+ for (const handler of handlers) {
41
84
  try {
42
- handler(JSON.parse(message));
85
+ handler(event);
43
86
  }
44
87
  catch {
45
- // malformed frame — never kill the subscription
88
+ // one throwing handler must not stop the others
46
89
  }
47
- });
48
- const heartbeat = setInterval(() => {
49
- handler({
50
- threadId, seq: 0, type: 'HEARTBEAT', payload: null, createdAt: new Date(),
51
- });
52
- }, this.heartbeatMs);
90
+ }
91
+ }
92
+ async subscribe(threadId, handler) {
93
+ const channel = THREAD_CHANNEL(threadId);
94
+ const sub = await this.connection();
95
+ let set = this.handlers.get(channel);
96
+ if (!set) {
97
+ set = new Set();
98
+ this.handlers.set(channel, set);
99
+ const mine = set;
100
+ try {
101
+ await sub.subscribe(channel, (message) => {
102
+ let event;
103
+ try {
104
+ event = JSON.parse(message);
105
+ event.createdAt = new Date(event.createdAt);
106
+ }
107
+ catch {
108
+ return; // malformed frame — never kill the subscription
109
+ }
110
+ this.deliver([...mine], event);
111
+ });
112
+ }
113
+ catch (err) {
114
+ this.handlers.delete(channel);
115
+ throw err;
116
+ }
117
+ }
118
+ set.add(handler);
119
+ this.startHeartbeat();
120
+ let done = false;
53
121
  return async () => {
54
- clearInterval(heartbeat);
55
- await sub.unsubscribe(THREAD_CHANNEL(threadId)).catch(() => undefined);
56
- await sub.quit().catch(() => undefined);
122
+ if (done)
123
+ return;
124
+ done = true;
125
+ const current = this.handlers.get(channel);
126
+ current?.delete(handler);
127
+ if (current && current.size === 0) {
128
+ this.handlers.delete(channel);
129
+ await sub.unsubscribe(channel).catch(() => undefined);
130
+ }
131
+ if (this.handlers.size === 0)
132
+ this.stopHeartbeat();
57
133
  };
58
134
  }
135
+ startHeartbeat() {
136
+ if (this.heartbeat)
137
+ return;
138
+ this.heartbeat = setInterval(() => {
139
+ for (const [channel, set] of this.handlers) {
140
+ const threadId = channel.slice('thread:'.length, -':events'.length);
141
+ this.deliver([...set], {
142
+ threadId, seq: 0, type: 'HEARTBEAT', payload: null, createdAt: new Date(),
143
+ });
144
+ }
145
+ }, this.heartbeatMs);
146
+ this.heartbeat.unref?.();
147
+ }
148
+ stopHeartbeat() {
149
+ if (this.heartbeat)
150
+ clearInterval(this.heartbeat);
151
+ this.heartbeat = undefined;
152
+ }
153
+ }
154
+ /** How long a stream key with no reader stays watched. */
155
+ const TAIL_IDLE_MS = 10_000;
156
+ /** An XREAD reply as [key, entries] pairs. RESP2 gives an array of pairs;
157
+ * RESP3 clients give a map, as a Map or a plain object. */
158
+ function xreadPairs(reply) {
159
+ if (!reply)
160
+ return [];
161
+ if (Array.isArray(reply))
162
+ return reply;
163
+ if (reply instanceof Map)
164
+ return [...reply.entries()];
165
+ return Object.entries(reply);
166
+ }
167
+ /** One blocking `XREAD` per process, shared by every reader of every stream
168
+ * here: a connection per reader would run a busy deployment into Redis's
169
+ * `maxclients`, like a subscriber per viewer would. A reader registers the
170
+ * stream key and the last id it has; the tail wakes it when an entry past
171
+ * that id lands. When a key it does not watch yet arrives, the tail breaks
172
+ * its own block with `CLIENT UNBLOCK` and starts again with the new key. */
173
+ class StreamTail {
174
+ client;
175
+ blockMs;
176
+ conn = null;
177
+ /** Per key: the newest entry id the tail has seen, who waits, and when a
178
+ * reader last waited. A key stays watched a while after its last reader
179
+ * leaves, so a reader that waits again after each event does not break
180
+ * the block every time. */
181
+ keys = new Map();
182
+ running = false;
183
+ constructor(client, blockMs) {
184
+ this.client = client;
185
+ this.blockMs = blockMs;
186
+ }
187
+ connection() {
188
+ if (!this.conn) {
189
+ const conn = this.client.duplicate();
190
+ conn.on?.('error', (err) => console.error('redis stream tail error', err));
191
+ this.conn = Promise.resolve(conn.connect())
192
+ .then(async () => ({ client: conn, id: String(await conn.sendCommand(['CLIENT', 'ID'])) }))
193
+ .catch((err) => {
194
+ this.conn = null;
195
+ void Promise.resolve(conn.quit?.()).catch(() => undefined);
196
+ throw err;
197
+ });
198
+ }
199
+ return this.conn;
200
+ }
201
+ /** Resolves when `key` may have an entry past `after`. */
202
+ wait(key, after, maxMs, signal) {
203
+ return new Promise((resolve) => {
204
+ let entry = this.keys.get(key);
205
+ // The tail already saw something past this reader: wake at once.
206
+ if (entry && compareEntryIds(entry.seen, after) > 0)
207
+ return resolve();
208
+ let timer;
209
+ const done = () => {
210
+ clearTimeout(timer);
211
+ signal?.removeEventListener('abort', done);
212
+ const e = this.keys.get(key);
213
+ if (e?.waiters.delete(done))
214
+ e.used = Date.now();
215
+ resolve();
216
+ };
217
+ timer = setTimeout(done, maxMs);
218
+ signal?.addEventListener('abort', done, { once: true });
219
+ const fresh = !entry;
220
+ if (!entry) {
221
+ entry = { seen: after, waiters: new Set(), used: Date.now() };
222
+ this.keys.set(key, entry);
223
+ }
224
+ entry.waiters.add(done);
225
+ entry.used = Date.now();
226
+ if (fresh)
227
+ void this.restart();
228
+ });
229
+ }
230
+ /** Runs the loop, or breaks its current block so it takes the new keys. */
231
+ async restart() {
232
+ if (!this.running) {
233
+ this.running = true;
234
+ void this.loop().finally(() => {
235
+ this.running = false;
236
+ // A key that came in while the loop was on its way out.
237
+ if (this.keys.size > 0)
238
+ void this.restart();
239
+ });
240
+ return;
241
+ }
242
+ try {
243
+ const { id } = await this.connection();
244
+ await this.client.sendCommand?.(['CLIENT', 'UNBLOCK', id]);
245
+ }
246
+ catch {
247
+ // The loop's own timeout picks the key up.
248
+ }
249
+ }
250
+ async loop() {
251
+ for (;;) {
252
+ const now = Date.now();
253
+ for (const [key, e] of this.keys) {
254
+ if (e.waiters.size === 0 && now - e.used > TAIL_IDLE_MS)
255
+ this.keys.delete(key);
256
+ }
257
+ if (this.keys.size === 0)
258
+ return;
259
+ const keys = [...this.keys.keys()];
260
+ const ids = keys.map((k) => this.keys.get(k).seen);
261
+ let reply;
262
+ try {
263
+ const { client } = await this.connection();
264
+ reply = await client.sendCommand(['XREAD', 'BLOCK', String(this.blockMs), 'STREAMS', ...keys, ...ids]);
265
+ }
266
+ catch {
267
+ // A dropped connection: readers fall back on their own poll until
268
+ // the next pass reconnects.
269
+ await sleep(200);
270
+ continue;
271
+ }
272
+ for (const [key, entries] of xreadPairs(reply)) {
273
+ const entry = this.keys.get(String(key));
274
+ const last = entries.at(-1)?.[0];
275
+ if (!entry || !last)
276
+ continue;
277
+ entry.seen = String(last);
278
+ for (const wake of [...entry.waiters])
279
+ wake();
280
+ }
281
+ }
282
+ }
283
+ async close() {
284
+ const conn = this.conn;
285
+ this.conn = null;
286
+ if (conn)
287
+ await conn.then(({ client }) => client.quit()).catch(() => undefined);
288
+ }
289
+ }
290
+ /** RunStreams over Redis Streams (see stream-scripts.ts for the keys and
291
+ * scripts, the same ones the Go adapter runs). Readers in one process share
292
+ * one blocking connection; `pollMs` is the floor under a missed wake-up. */
293
+ export class RedisRunStreams extends ScriptedRunStreams {
294
+ tail;
295
+ constructor(client, opts = {}) {
296
+ const tail = new StreamTail(client, opts.blockMs ?? 5_000);
297
+ super((script, keys, args) => client.eval(script, { keys, arguments: args }), (key, after, maxMs, signal) => tail.wait(key, after, maxMs, signal), opts.pollMs ?? 1_000);
298
+ this.tail = tail;
299
+ }
300
+ /** Closes the shared tail connection. */
301
+ async shutdown() {
302
+ await this.tail.close();
303
+ }
59
304
  }
60
305
  //# sourceMappingURL=redis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BjH,0DAA0D;AAC1D,MAAM,OAAO,OAAO;IACW;IAA7B,YAA6B,KAAsB;QAAtB,UAAK,GAAL,KAAK,CAAiB;IAAG,CAAC;IAEvD,GAAG,CAAC,GAAW,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,GAAG,CACP,GAAW,EACX,KAAa,EACb,IAAwD;QAExD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAC9B,GAAG,EACH,KAAK,EACL,IAAI,EAAE,eAAe;YACnB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE;YAClC,CAAC,CAAC,IAAI,EAAE,SAAS;gBACf,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE;gBACxB,CAAC,CAAC,SAAS,CAChB,CAAC;QACF,2DAA2D;QAC3D,OAAO,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IACD,GAAG,CAAC,GAAW,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,GAAW,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAa,EAAE,IAA6B;QAC1F,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACnD,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;SACzC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,QAAgB;QAC5C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,SAAiB;QACjD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACvD,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;SAClD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;;2CAW2C;AAC3C,MAAM,OAAO,QAAQ;IAMA;IACA;IANX,GAAG,GAAwC,IAAI,CAAC;IACvC,QAAQ,GAAG,IAAI,GAAG,EAA4C,CAAC;IACxE,SAAS,CAAkC;IAEnD,YACmB,MAAuB,EACvB,cAAc,MAAM;QADpB,WAAM,GAAN,MAAM,CAAiB;QACvB,gBAAW,GAAX,WAAW,CAAS;IACpC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,KAAiB;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,6DAA6D;IACrD,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAyB,CAAC;YAC3D,qEAAqE;YACrE,yEAAyE;YACzE,8DAA8D;YAC9D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC5C,GAAG,EAAE,CAAC,GAAG,EACT,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,gCAAgC;gBACjD,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,GAAG,CAAC;YACZ,CAAC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEO,OAAO,CAAC,QAA+C,EAAE,KAAiB;QAChF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAoC;QACpE,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;oBAC/C,IAAI,KAAiB,CAAC;oBACtB,IAAI,CAAC;wBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;wBAC1C,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC9C,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,gDAAgD;oBAC1D,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,OAAO,KAAK,IAAI,EAAE;YAChB,IAAI,IAAI;gBAAE,OAAO;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACpE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE;oBACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE;iBAC5D,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpB,IAAI,CAAC,SAA+C,CAAC,KAAK,EAAE,EAAE,CAAC;IAClE,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,SAAS;YAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,0DAA0D;AAC1D,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B;4DAC4D;AAC5D,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAkD,CAAC;IACpF,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAA8C,CAAC;IACnG,OAAO,MAAM,CAAC,OAAO,CAAC,KAAe,CAA8C,CAAC;AACtF,CAAC;AAED;;;;;6EAK6E;AAC7E,MAAM,UAAU;IAUK;IACA;IAVX,IAAI,GAAgD,IAAI,CAAC;IACjE;;;gCAG4B;IACX,IAAI,GAAG,IAAI,GAAG,EAAoE,CAAC;IAC5F,OAAO,GAAG,KAAK,CAAC;IAExB,YACmB,MAAuB,EACvB,OAAe;QADf,WAAM,GAAN,MAAM,CAAiB;QACvB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEI,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;iBACxC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC1F,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC3D,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC,GAAW,EAAE,KAAa,EAAE,KAAa,EAAE,MAAoB;QAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,iEAAiE;YACjE,IAAI,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;gBAAE,OAAO,OAAO,EAAE,CAAC;YACtE,IAAI,KAAoC,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,KAAK;gBAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IACnE,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,wDAAwD;gBACxD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;oBAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,YAAY;oBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YACjC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzG,CAAC;YAAC,MAAM,CAAC;gBACP,kEAAkE;gBAClE,4BAA4B;gBAC5B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAC9B,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;oBAAE,IAAI,EAAE,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI;YAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClF,CAAC;CACF;AAED;;6EAE6E;AAC7E,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IACpC,IAAI,CAAa;IAElC,YAAY,MAAuB,EAAE,OAA8C,EAAE;QACnF,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QAC3D,KAAK,CACH,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EACtE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EACnE,IAAI,CAAC,MAAM,IAAI,KAAK,CACrB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
@@ -1,5 +1,7 @@
1
- import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewUsage, ThreadDTO, UsageFilter, UsageTotals } from '../core/types.js';
1
+ import type { AgentEvent, ExecutionState, MessageDTO, NewMessage, NewThreadEvent, NewUsage, ThreadDTO, ThreadEventFilter, UsageFilter, UsageTotals, ThreadTransition } from '../core/types.js';
2
2
  import type { Storage } from '../ports/storage.js';
3
+ import { type RunStreams, type StreamMeta, type StreamSnapshot } from '../ports/streams.js';
4
+ import { type StreamEnd, type StreamEvent, type StreamItem } from '../core/stream-events.js';
3
5
  /** Minimal structural type over a synchronous SQLite handle — `bun:sqlite`'s
4
6
  * `Database` satisfies it. Kept structural for the same reason every other
5
7
  * adapter is: the package never imports a driver itself (§3.4), so a caller
@@ -24,12 +26,23 @@ export interface SqliteStatementLike {
24
26
  * Imported dynamically so neither driver enters the module graph until asked
25
27
  * for: importing this file is safe anywhere, only calling this needs one. */
26
28
  export declare function openSqlite(filename?: string): Promise<SqliteLike>;
29
+ /** Set a file up for more than one process (§3.4): WAL lets readers run beside
30
+ * the one writer, and busy_timeout makes a writer wait up to five seconds for
31
+ * the lock rather than fail at once with SQLITE_BUSY. `openSqlite` calls it;
32
+ * call it yourself on a handle you opened some other way. An in-memory
33
+ * database keeps its own journal mode, which is fine. */
34
+ export declare function tuneSqlite<T extends SqliteLike>(db: T): T;
27
35
  /** A complete Storage over SQLite (§3.2) — every table the platform needs,
28
36
  * created on construction. This is what `dev: true` wires up: a working
29
37
  * agent platform with no infrastructure to stand up first. */
30
38
  export declare class SqliteStorage implements Storage {
31
39
  private readonly db;
32
40
  constructor(db: SqliteLike);
41
+ /** Run `fn` in one write transaction. IMMEDIATE takes the write lock up
42
+ * front, so another process waits (busy_timeout) rather than failing half
43
+ * way through. */
44
+ private tx;
45
+ private changes;
33
46
  private addMissing;
34
47
  private all;
35
48
  private one;
@@ -45,6 +58,7 @@ export declare class SqliteStorage implements Storage {
45
58
  list: () => Promise<ThreadDTO[]>;
46
59
  setState: (threadId: string, state: ExecutionState) => Promise<void>;
47
60
  delete: (threadId: string) => Promise<void>;
61
+ transition: (threadId: string, tr: ThreadTransition) => Promise<boolean>;
48
62
  claimState: (threadId: string, from: ExecutionState, to: ExecutionState) => Promise<boolean>;
49
63
  };
50
64
  messages: {
@@ -55,14 +69,50 @@ export declare class SqliteStorage implements Storage {
55
69
  deleteFrom: (threadId: string, messageId: string) => Promise<number>;
56
70
  };
57
71
  events: {
58
- append: (threadId: string, e: AgentEvent) => Promise<void>;
72
+ append: (threadId: string, e: NewThreadEvent) => Promise<AgentEvent>;
73
+ list: (threadId: string, f?: ThreadEventFilter) => Promise<AgentEvent[]>;
59
74
  listSince: (threadId: string, sinceSeq: number) => Promise<AgentEvent[]>;
60
75
  latest: (threadId: string, type: string) => Promise<AgentEvent | null>;
61
76
  listByType: (threadId: string, type: string) => Promise<AgentEvent[]>;
77
+ prune: (types: string[], opts: {
78
+ limit: number;
79
+ dryRun?: boolean;
80
+ }) => Promise<Record<string, number>>;
62
81
  };
63
82
  usage: {
64
83
  record: (threadId: string, u: NewUsage) => Promise<void>;
65
84
  total: (threadId: string, filter?: UsageFilter) => Promise<UsageTotals>;
66
85
  };
67
86
  }
87
+ /** RunStreams over SQLite: the run_streams and run_stream_events tables, the
88
+ * same ones the Go adapter uses. The offset is the event row's key, which
89
+ * AUTOINCREMENT never reuses. Readers in this process wake on its own
90
+ * appends; one in another process sees them on its next poll. Expired
91
+ * streams are deleted as new ones open, 500 a pass, at most once a minute. */
92
+ export declare class SqliteRunStreams implements RunStreams {
93
+ private readonly db;
94
+ private readonly opts;
95
+ private readonly waiters;
96
+ private swept;
97
+ constructor(db: SqliteLike, opts?: {
98
+ pollMs?: number;
99
+ });
100
+ private tx;
101
+ private wake;
102
+ /** Registers a wake-up before the reader reads, so an append that lands
103
+ * between the read and the wait still wakes it. */
104
+ private arm;
105
+ private sweep;
106
+ private remove;
107
+ open(streamId: string, meta: StreamMeta, ttlMs: number): Promise<void>;
108
+ /** Inside a transaction: whether the stream is live and closed. */
109
+ private state;
110
+ private insert;
111
+ append(streamId: string, events: StreamEvent[]): Promise<string[]>;
112
+ close(streamId: string, end: StreamEnd, graceMs: number): Promise<void>;
113
+ delete(streamId: string): Promise<void>;
114
+ private page;
115
+ read(streamId: string, after: string | null, signal?: AbortSignal): AsyncIterable<StreamItem>;
116
+ snapshot(streamId: string, after?: string | null): Promise<StreamSnapshot | null>;
117
+ }
68
118
  //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAClG,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;mBAImB;AACnB,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACrC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;8EAO8E;AAC9E,wBAAsB,UAAU,CAAC,QAAQ,SAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrF;AA8DD;;+DAE+D;AAC/D,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,UAAU;IA2B3C,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ,CAGb;IACH,OAAO,CAAC,SAAS,CAGd;IACH,OAAO,CAAC,OAAO,CAGE;IACjB,OAAO;wBACiB,MAAM;wBAIN;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;6BAab,MAAM,SAAS,cAAc;2BAI/B,MAAM;+BAQF,MAAM,QAAQ,cAAc,MAAM,cAAc;MAU7E;IAEF,QAAQ;2BACmB,MAAM,KAAK,UAAU;yBAiBvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;+BAYpC,MAAM,aAAa,MAAM;MAStD;IAEF,MAAM;2BACqB,MAAM,KAAK,UAAU;8BAIlB,MAAM,YAAY,MAAM;2BAG3B,MAAM,QAAQ,MAAM;+BAMhB,MAAM,QAAQ,MAAM;MAGjD;IAEF,KAAK;2BACsB,MAAM,KAAK,QAAQ;0BAmBpB,MAAM,WAAU,WAAW,KAAQ,OAAO,CAAC,WAAW,CAAC;MAkC/E;CAIH"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAC1G,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAC3C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAsC,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChI,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG1G;;;;mBAImB;AACnB,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACrC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACpC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;8EAO8E;AAC9E,wBAAsB,UAAU,CAAC,QAAQ,SAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrF;AAGD;;;;0DAI0D;AAC1D,wBAAgB,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAKzD;AA6DD;;+DAE+D;AAC/D,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,UAAU;IAgD3C;;uBAEmB;IACnB,OAAO,CAAC,EAAE;IAYV,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ,CAGb;IACH,OAAO,CAAC,SAAS,CAGd;IACH,OAAO,CAAC,OAAO,CAGE;IACjB,OAAO;wBACiB,MAAM;wBAIN;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;6BAab,MAAM,SAAS,cAAc;2BAI/B,MAAM;+BAYF,MAAM,MAAM,gBAAgB;+BAc5B,MAAM,QAAQ,cAAc,MAAM,cAAc;MAS7E;IAEF,QAAQ;2BACmB,MAAM,KAAK,UAAU;yBAiBvB,MAAM,SAAS;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;+BAYpC,MAAM,aAAa,MAAM;MAStD;IAEF,MAAM;2BAGqB,MAAM,KAAK,cAAc,KAAG,OAAO,CAAC,UAAU,CAAC;yBAajD,MAAM,MAAK,iBAAiB;8BAavB,MAAM,YAAY,MAAM;2BAG3B,MAAM,QAAQ,MAAM;+BAMhB,MAAM,QAAQ,MAAM;uBAG5B,MAAM,EAAE,QAAQ;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,OAAO,CAAA;SAAE;MAexE;IAEF,KAAK;2BACsB,MAAM,KAAK,QAAQ;0BAmBpB,MAAM,WAAU,WAAW,KAAQ,OAAO,CAAC,WAAW,CAAC;MAkC/E;CAIH;AAgBD;;;;+EAI+E;AAC/E,qBAAa,gBAAiB,YAAW,UAAU;IAK/C,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,KAAK,CAAK;gBAGC,EAAE,EAAE,UAAU,EACd,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAKjD,OAAO,CAAC,EAAE;IAYV,OAAO,CAAC,IAAI;IAMZ;wDACoD;IACpD,OAAO,CAAC,GAAG;IAcX,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,MAAM;IAOR,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;IAU5D,mEAAmE;IACnE,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,MAAM;IAKR,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE;IAY9C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAavD,MAAM,CAAC,QAAQ,EAAE,MAAM;IAK7B,OAAO,CAAC,IAAI;IAmBL,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC;IA2B9F,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAIxF"}