@laserdata/laser-sdk 0.5.3 → 0.6.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 (356) hide show
  1. package/README.md +105 -79
  2. package/dist/agent/agdx.d.ts +8 -3
  3. package/dist/agent/agdx.d.ts.map +1 -1
  4. package/dist/agent/agdx.js +39 -22
  5. package/dist/agent/agdx.js.map +1 -1
  6. package/dist/agent/builder.d.ts +25 -15
  7. package/dist/agent/builder.d.ts.map +1 -1
  8. package/dist/agent/builder.js +103 -59
  9. package/dist/agent/builder.js.map +1 -1
  10. package/dist/agent/context.d.ts +3 -6
  11. package/dist/agent/context.d.ts.map +1 -1
  12. package/dist/agent/context.js +17 -9
  13. package/dist/agent/context.js.map +1 -1
  14. package/dist/agent/contract.d.ts +2 -2
  15. package/dist/agent/contract.d.ts.map +1 -1
  16. package/dist/agent/contract.js +10 -6
  17. package/dist/agent/contract.js.map +1 -1
  18. package/dist/agent/memory-handler.d.ts +25 -0
  19. package/dist/agent/memory-handler.d.ts.map +1 -0
  20. package/dist/agent/memory-handler.js +43 -0
  21. package/dist/agent/memory-handler.js.map +1 -0
  22. package/dist/agent/registry.d.ts +3 -10
  23. package/dist/agent/registry.d.ts.map +1 -1
  24. package/dist/agent/registry.js +22 -19
  25. package/dist/agent/registry.js.map +1 -1
  26. package/dist/agent/reliable-consumer.d.ts +19 -9
  27. package/dist/agent/reliable-consumer.d.ts.map +1 -1
  28. package/dist/agent/reliable-consumer.js +193 -54
  29. package/dist/agent/reliable-consumer.js.map +1 -1
  30. package/dist/agent/replies.d.ts +6 -0
  31. package/dist/agent/replies.d.ts.map +1 -1
  32. package/dist/agent/replies.js +55 -4
  33. package/dist/agent/replies.js.map +1 -1
  34. package/dist/agent/router.d.ts +1 -1
  35. package/dist/agent/router.d.ts.map +1 -1
  36. package/dist/agent/router.js +5 -19
  37. package/dist/agent/router.js.map +1 -1
  38. package/dist/agent/scope.d.ts +7 -3
  39. package/dist/agent/scope.d.ts.map +1 -1
  40. package/dist/agent/scope.js +11 -1
  41. package/dist/agent/scope.js.map +1 -1
  42. package/dist/agent/timer.d.ts +6 -0
  43. package/dist/agent/timer.d.ts.map +1 -0
  44. package/dist/agent/timer.js +21 -0
  45. package/dist/agent/timer.js.map +1 -0
  46. package/dist/agent/workflow.d.ts +16 -19
  47. package/dist/agent/workflow.d.ts.map +1 -1
  48. package/dist/agent/workflow.js +17 -6
  49. package/dist/agent/workflow.js.map +1 -1
  50. package/dist/blob.d.ts +2 -3
  51. package/dist/blob.d.ts.map +1 -1
  52. package/dist/blob.js.map +1 -1
  53. package/dist/bridges/a2a.d.ts +34 -23
  54. package/dist/bridges/a2a.d.ts.map +1 -1
  55. package/dist/bridges/a2a.js +29 -19
  56. package/dist/bridges/a2a.js.map +1 -1
  57. package/dist/bridges/hops.d.ts +1 -1
  58. package/dist/bridges/hops.d.ts.map +1 -1
  59. package/dist/bridges/hops.js +1 -1
  60. package/dist/bridges/hops.js.map +1 -1
  61. package/dist/bridges/mcp.d.ts +27 -7
  62. package/dist/bridges/mcp.d.ts.map +1 -1
  63. package/dist/bridges/mcp.js +24 -9
  64. package/dist/bridges/mcp.js.map +1 -1
  65. package/dist/client/bytes.d.ts +5 -0
  66. package/dist/client/bytes.d.ts.map +1 -1
  67. package/dist/client/bytes.js +15 -0
  68. package/dist/client/bytes.js.map +1 -1
  69. package/dist/client/capabilities.d.ts +25 -13
  70. package/dist/client/capabilities.d.ts.map +1 -1
  71. package/dist/client/capabilities.js +145 -123
  72. package/dist/client/capabilities.js.map +1 -1
  73. package/dist/client/error-classify.d.ts +57 -0
  74. package/dist/client/error-classify.d.ts.map +1 -0
  75. package/dist/client/error-classify.js +347 -0
  76. package/dist/client/error-classify.js.map +1 -0
  77. package/dist/client/errors.d.ts +113 -40
  78. package/dist/client/errors.d.ts.map +1 -1
  79. package/dist/client/errors.js +191 -53
  80. package/dist/client/errors.js.map +1 -1
  81. package/dist/client/internals.d.ts +1 -0
  82. package/dist/client/internals.d.ts.map +1 -1
  83. package/dist/client/internals.js +1 -0
  84. package/dist/client/internals.js.map +1 -1
  85. package/dist/client/laser.d.ts +62 -46
  86. package/dist/client/laser.d.ts.map +1 -1
  87. package/dist/client/laser.js +206 -120
  88. package/dist/client/laser.js.map +1 -1
  89. package/dist/client/managed.d.ts +3 -0
  90. package/dist/client/managed.d.ts.map +1 -1
  91. package/dist/client/managed.js +70 -3
  92. package/dist/client/managed.js.map +1 -1
  93. package/dist/context-scope.d.ts +25 -9
  94. package/dist/context-scope.d.ts.map +1 -1
  95. package/dist/context-scope.js +36 -9
  96. package/dist/context-scope.js.map +1 -1
  97. package/dist/context.d.ts +33 -16
  98. package/dist/context.d.ts.map +1 -1
  99. package/dist/context.js +174 -95
  100. package/dist/context.js.map +1 -1
  101. package/dist/conversation-state.d.ts +1 -1
  102. package/dist/conversation-state.d.ts.map +1 -1
  103. package/dist/conversation-state.js +35 -16
  104. package/dist/conversation-state.js.map +1 -1
  105. package/dist/govern.d.ts +24 -5
  106. package/dist/govern.d.ts.map +1 -1
  107. package/dist/govern.js +116 -28
  108. package/dist/govern.js.map +1 -1
  109. package/dist/iggy/apache-iggy.d.ts +59 -56
  110. package/dist/iggy/apache-iggy.d.ts.map +1 -1
  111. package/dist/iggy/apache-iggy.js +300 -137
  112. package/dist/iggy/apache-iggy.js.map +1 -1
  113. package/dist/index.d.ts +97 -65
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +49 -30
  116. package/dist/index.js.map +1 -1
  117. package/dist/intent.d.ts +16 -2
  118. package/dist/intent.d.ts.map +1 -1
  119. package/dist/intent.js +50 -18
  120. package/dist/intent.js.map +1 -1
  121. package/dist/managed/coordination.d.ts +82 -0
  122. package/dist/managed/coordination.d.ts.map +1 -0
  123. package/dist/managed/coordination.js +367 -0
  124. package/dist/managed/coordination.js.map +1 -0
  125. package/dist/managed/destinations.d.ts +4 -3
  126. package/dist/managed/destinations.d.ts.map +1 -1
  127. package/dist/managed/destinations.js +29 -13
  128. package/dist/managed/destinations.js.map +1 -1
  129. package/dist/managed/filters.d.ts +5 -5
  130. package/dist/managed/filters.d.ts.map +1 -1
  131. package/dist/managed/filters.js +39 -22
  132. package/dist/managed/filters.js.map +1 -1
  133. package/dist/managed/forks.d.ts +8 -11
  134. package/dist/managed/forks.d.ts.map +1 -1
  135. package/dist/managed/forks.js +33 -13
  136. package/dist/managed/forks.js.map +1 -1
  137. package/dist/managed/graph.d.ts +1 -4
  138. package/dist/managed/graph.d.ts.map +1 -1
  139. package/dist/managed/graph.js +5 -3
  140. package/dist/managed/graph.js.map +1 -1
  141. package/dist/managed/kv.d.ts +26 -14
  142. package/dist/managed/kv.d.ts.map +1 -1
  143. package/dist/managed/kv.js +88 -61
  144. package/dist/managed/kv.js.map +1 -1
  145. package/dist/managed/projections.d.ts +5 -8
  146. package/dist/managed/projections.d.ts.map +1 -1
  147. package/dist/managed/projections.js +22 -2
  148. package/dist/managed/projections.js.map +1 -1
  149. package/dist/managed/query.d.ts +20 -6
  150. package/dist/managed/query.d.ts.map +1 -1
  151. package/dist/managed/query.js +97 -24
  152. package/dist/managed/query.js.map +1 -1
  153. package/dist/managed/runs.d.ts +2 -4
  154. package/dist/managed/runs.d.ts.map +1 -1
  155. package/dist/managed/runs.js +9 -1
  156. package/dist/managed/runs.js.map +1 -1
  157. package/dist/managed/watch.d.ts +2 -4
  158. package/dist/managed/watch.d.ts.map +1 -1
  159. package/dist/managed/watch.js +9 -1
  160. package/dist/managed/watch.js.map +1 -1
  161. package/dist/memory/handle.d.ts +75 -22
  162. package/dist/memory/handle.d.ts.map +1 -1
  163. package/dist/memory/handle.js +232 -58
  164. package/dist/memory/handle.js.map +1 -1
  165. package/dist/memory/log-memory.d.ts +24 -12
  166. package/dist/memory/log-memory.d.ts.map +1 -1
  167. package/dist/memory/log-memory.js +214 -100
  168. package/dist/memory/log-memory.js.map +1 -1
  169. package/dist/memory/topic.d.ts +2 -2
  170. package/dist/memory/topic.d.ts.map +1 -1
  171. package/dist/memory/topic.js +7 -5
  172. package/dist/memory/topic.js.map +1 -1
  173. package/dist/memory/types.d.ts +41 -5
  174. package/dist/memory/types.d.ts.map +1 -1
  175. package/dist/memory/types.js +44 -18
  176. package/dist/memory/types.js.map +1 -1
  177. package/dist/memory/vector-memory.d.ts +8 -6
  178. package/dist/memory/vector-memory.d.ts.map +1 -1
  179. package/dist/memory/vector-memory.js +65 -34
  180. package/dist/memory/vector-memory.js.map +1 -1
  181. package/dist/memory.d.ts +6 -5
  182. package/dist/memory.d.ts.map +1 -1
  183. package/dist/memory.js +4 -4
  184. package/dist/memory.js.map +1 -1
  185. package/dist/provenance/agent-topic.d.ts +3 -1
  186. package/dist/provenance/agent-topic.d.ts.map +1 -1
  187. package/dist/provenance/agent-topic.js +3 -1
  188. package/dist/provenance/agent-topic.js.map +1 -1
  189. package/dist/provenance/provenance.d.ts +3 -3
  190. package/dist/provenance/provenance.d.ts.map +1 -1
  191. package/dist/provenance/provenance.js +30 -18
  192. package/dist/provenance/provenance.js.map +1 -1
  193. package/dist/runtime/clock.d.ts +3 -0
  194. package/dist/runtime/clock.d.ts.map +1 -1
  195. package/dist/runtime/clock.js +16 -3
  196. package/dist/runtime/clock.js.map +1 -1
  197. package/dist/schema-codecs.d.ts +7 -3
  198. package/dist/schema-codecs.d.ts.map +1 -1
  199. package/dist/schema-codecs.js +80 -12
  200. package/dist/schema-codecs.js.map +1 -1
  201. package/dist/session.d.ts +27 -18
  202. package/dist/session.d.ts.map +1 -1
  203. package/dist/session.js +95 -37
  204. package/dist/session.js.map +1 -1
  205. package/dist/signing.d.ts +11 -5
  206. package/dist/signing.d.ts.map +1 -1
  207. package/dist/signing.js +64 -21
  208. package/dist/signing.js.map +1 -1
  209. package/dist/snapshot.d.ts +10 -2
  210. package/dist/snapshot.d.ts.map +1 -1
  211. package/dist/snapshot.js +62 -28
  212. package/dist/snapshot.js.map +1 -1
  213. package/dist/state-store.d.ts +1 -1
  214. package/dist/state-store.d.ts.map +1 -1
  215. package/dist/state-store.js.map +1 -1
  216. package/dist/stream/batching.d.ts +81 -0
  217. package/dist/stream/batching.d.ts.map +1 -0
  218. package/dist/stream/batching.js +210 -0
  219. package/dist/stream/batching.js.map +1 -0
  220. package/dist/stream/bson.d.ts +3 -0
  221. package/dist/stream/bson.d.ts.map +1 -0
  222. package/dist/stream/bson.js +245 -0
  223. package/dist/stream/bson.js.map +1 -0
  224. package/dist/stream/codecs.d.ts +58 -6
  225. package/dist/stream/codecs.d.ts.map +1 -1
  226. package/dist/stream/codecs.js +143 -59
  227. package/dist/stream/codecs.js.map +1 -1
  228. package/dist/stream/consumer-group.d.ts +13 -10
  229. package/dist/stream/consumer-group.d.ts.map +1 -1
  230. package/dist/stream/consumer-group.js +91 -31
  231. package/dist/stream/consumer-group.js.map +1 -1
  232. package/dist/stream/consumer-start.d.ts +17 -0
  233. package/dist/stream/consumer-start.d.ts.map +1 -0
  234. package/dist/stream/consumer-start.js +2 -0
  235. package/dist/stream/consumer-start.js.map +1 -0
  236. package/dist/stream/consumer.d.ts +166 -24
  237. package/dist/stream/consumer.d.ts.map +1 -1
  238. package/dist/stream/consumer.js +451 -68
  239. package/dist/stream/consumer.js.map +1 -1
  240. package/dist/stream/cursor.d.ts +5 -12
  241. package/dist/stream/cursor.d.ts.map +1 -1
  242. package/dist/stream/cursor.js +34 -8
  243. package/dist/stream/cursor.js.map +1 -1
  244. package/dist/stream/header-value.d.ts +61 -15
  245. package/dist/stream/header-value.d.ts.map +1 -1
  246. package/dist/stream/header-value.js.map +1 -1
  247. package/dist/stream/message.d.ts +17 -0
  248. package/dist/stream/message.d.ts.map +1 -0
  249. package/dist/stream/message.js +9 -0
  250. package/dist/stream/message.js.map +1 -0
  251. package/dist/stream/producer.d.ts +127 -11
  252. package/dist/stream/producer.d.ts.map +1 -1
  253. package/dist/stream/producer.js +401 -36
  254. package/dist/stream/producer.js.map +1 -1
  255. package/dist/stream/publish.d.ts +6 -15
  256. package/dist/stream/publish.d.ts.map +1 -1
  257. package/dist/stream/publish.js +18 -28
  258. package/dist/stream/publish.js.map +1 -1
  259. package/dist/stream/record.d.ts +4 -6
  260. package/dist/stream/record.d.ts.map +1 -1
  261. package/dist/stream/record.js +4 -3
  262. package/dist/stream/record.js.map +1 -1
  263. package/dist/stream/routing.d.ts +12 -0
  264. package/dist/stream/routing.d.ts.map +1 -1
  265. package/dist/stream/routing.js +6 -1
  266. package/dist/stream/routing.js.map +1 -1
  267. package/dist/stream/stream.d.ts +1 -4
  268. package/dist/stream/stream.d.ts.map +1 -1
  269. package/dist/stream/stream.js +5 -1
  270. package/dist/stream/stream.js.map +1 -1
  271. package/dist/stream/topic.d.ts +22 -23
  272. package/dist/stream/topic.d.ts.map +1 -1
  273. package/dist/stream/topic.js +90 -30
  274. package/dist/stream/topic.js.map +1 -1
  275. package/dist/stream/typed-topic.d.ts +9 -13
  276. package/dist/stream/typed-topic.d.ts.map +1 -1
  277. package/dist/stream/typed-topic.js +25 -10
  278. package/dist/stream/typed-topic.js.map +1 -1
  279. package/dist/swarm.d.ts +0 -1
  280. package/dist/swarm.d.ts.map +1 -1
  281. package/dist/swarm.js +1 -0
  282. package/dist/swarm.js.map +1 -1
  283. package/dist/testing.d.ts +3 -3
  284. package/dist/testing.d.ts.map +1 -1
  285. package/dist/testing.js +3 -3
  286. package/dist/testing.js.map +1 -1
  287. package/dist/types/ids.d.ts +17 -2
  288. package/dist/types/ids.d.ts.map +1 -1
  289. package/dist/types/ids.js +34 -14
  290. package/dist/types/ids.js.map +1 -1
  291. package/dist/wire/agent.d.ts +22 -0
  292. package/dist/wire/agent.d.ts.map +1 -1
  293. package/dist/wire/agent.js +80 -25
  294. package/dist/wire/agent.js.map +1 -1
  295. package/dist/wire/authz.d.ts +35 -1
  296. package/dist/wire/authz.d.ts.map +1 -1
  297. package/dist/wire/authz.js +45 -15
  298. package/dist/wire/authz.js.map +1 -1
  299. package/dist/wire/cbor.d.ts.map +1 -1
  300. package/dist/wire/cbor.js +13 -2
  301. package/dist/wire/cbor.js.map +1 -1
  302. package/dist/wire/checkpoint.d.ts +17 -12
  303. package/dist/wire/checkpoint.d.ts.map +1 -1
  304. package/dist/wire/checkpoint.js +28 -3
  305. package/dist/wire/checkpoint.js.map +1 -1
  306. package/dist/wire/control.d.ts +82 -0
  307. package/dist/wire/control.d.ts.map +1 -1
  308. package/dist/wire/control.js +219 -0
  309. package/dist/wire/control.js.map +1 -1
  310. package/dist/wire/filter-eval.d.ts +41 -7
  311. package/dist/wire/filter-eval.d.ts.map +1 -1
  312. package/dist/wire/filter-eval.js +26 -28
  313. package/dist/wire/filter-eval.js.map +1 -1
  314. package/dist/wire/filter.d.ts +51 -17
  315. package/dist/wire/filter.d.ts.map +1 -1
  316. package/dist/wire/filter.js +99 -10
  317. package/dist/wire/filter.js.map +1 -1
  318. package/dist/wire/fork.d.ts +14 -1
  319. package/dist/wire/fork.d.ts.map +1 -1
  320. package/dist/wire/fork.js +19 -8
  321. package/dist/wire/fork.js.map +1 -1
  322. package/dist/wire/graph.d.ts +3 -0
  323. package/dist/wire/graph.d.ts.map +1 -1
  324. package/dist/wire/graph.js +18 -4
  325. package/dist/wire/graph.js.map +1 -1
  326. package/dist/wire/hello.d.ts +4 -1
  327. package/dist/wire/hello.d.ts.map +1 -1
  328. package/dist/wire/hello.js +13 -3
  329. package/dist/wire/hello.js.map +1 -1
  330. package/dist/wire/index.d.ts +4 -1
  331. package/dist/wire/index.d.ts.map +1 -1
  332. package/dist/wire/index.js +4 -1
  333. package/dist/wire/index.js.map +1 -1
  334. package/dist/wire/kv.d.ts +37 -2
  335. package/dist/wire/kv.d.ts.map +1 -1
  336. package/dist/wire/kv.js +36 -18
  337. package/dist/wire/kv.js.map +1 -1
  338. package/dist/wire/query.d.ts +6 -0
  339. package/dist/wire/query.d.ts.map +1 -1
  340. package/dist/wire/query.js +38 -12
  341. package/dist/wire/query.js.map +1 -1
  342. package/dist/wire/schema.d.ts +29 -6
  343. package/dist/wire/schema.d.ts.map +1 -1
  344. package/dist/wire/schema.js +61 -26
  345. package/dist/wire/schema.js.map +1 -1
  346. package/dist/wire/snapshot.js +1 -1
  347. package/dist/wire/snapshot.js.map +1 -1
  348. package/dist/wire/value.d.ts +10 -2
  349. package/dist/wire/value.d.ts.map +1 -1
  350. package/dist/wire/value.js +29 -3
  351. package/dist/wire/value.js.map +1 -1
  352. package/package.json +2 -3
  353. package/dist/stream/polling-strategy.d.ts +0 -14
  354. package/dist/stream/polling-strategy.d.ts.map +0 -1
  355. package/dist/stream/polling-strategy.js +0 -2
  356. package/dist/stream/polling-strategy.js.map +0 -1
package/dist/context.d.ts CHANGED
@@ -2,12 +2,20 @@ import type { Laser } from "./client/laser.js";
2
2
  import type { Provenance } from "./provenance/provenance.js";
3
3
  import type { AgentId, ConversationId, MessageId } from "./types/ids.js";
4
4
  import type { AgentEnvelope } from "./wire/agent.js";
5
+ /**
6
+ * The most raw records one context read examines in each partition, the same
7
+ * window the Rust and Python SDKs use. An open read takes the newest records
8
+ * before the current tail, and a point-in-time read the newest records before
9
+ * the checkpoint, then keeps the ones of the conversation. Turns older than the
10
+ * window on a busy shared partition are outside the read, so a long
11
+ * conversation saves state with a checkpoint and replays from it.
12
+ */
13
+ export declare const CONTEXT_READ_WINDOW = 10000;
5
14
  export interface ContextMessage {
6
15
  readonly id: MessageId;
7
16
  readonly provenance: Provenance;
8
17
  readonly payload: Uint8Array;
9
18
  readonly envelope?: AgentEnvelope;
10
- readonly timestampMicros: bigint;
11
19
  /** The name of the topic the message was read from. */
12
20
  readonly topic: string;
13
21
  }
@@ -18,16 +26,22 @@ export interface ContextMessage {
18
26
  export declare class Checkpoint {
19
27
  private readonly perTopic;
20
28
  private constructor();
21
- static empty(): Checkpoint;
22
- static capture(laser: Laser, topics: readonly string[]): Promise<Checkpoint>;
23
29
  /** The per-partition offsets for `topic`, or `undefined` when the checkpoint
24
30
  * was not taken over that topic. */
25
31
  topicOffsets(topic: string): ReadonlyMap<number, bigint> | undefined;
26
- get topics(): readonly string[];
27
32
  isEmpty(): boolean;
28
- toJSON(): Record<string, Record<string, string>>;
33
+ /** The Rust and Python JSON shape, `{"per_topic": {topic: {partition: offset}}}`,
34
+ * with every offset an exact JSON integer. */
35
+ toJSON(): {
36
+ readonly per_topic: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
37
+ };
38
+ /** Reads `toJSON` output, as a JSON string or an already parsed value. */
29
39
  static fromJSON(value: unknown): Checkpoint;
30
40
  }
41
+ /** The current tail of `topics` on `laser`'s default stream, one entry per
42
+ * topic. Fold up to it with the `at` replay bound or resume after it with
43
+ * `from-checkpoint`. */
44
+ export declare function contextCheckpoint(laser: Laser, topics: readonly string[]): Promise<Checkpoint>;
31
45
  export interface ContextPolicy {
32
46
  select(history: readonly ContextMessage[]): readonly ContextMessage[];
33
47
  }
@@ -41,18 +55,18 @@ export declare class RoleFilter implements ContextPolicy {
41
55
  constructor(agents: Iterable<AgentId>);
42
56
  select(history: readonly ContextMessage[]): readonly ContextMessage[];
43
57
  }
44
- export declare class ContextChain implements ContextPolicy {
58
+ export declare class Chain implements ContextPolicy {
45
59
  readonly policies: readonly ContextPolicy[];
46
60
  constructor(policies: readonly ContextPolicy[]);
47
61
  select(history: readonly ContextMessage[]): readonly ContextMessage[];
48
62
  }
49
63
  export declare class TokenBudget implements ContextPolicy {
50
- readonly maxTokens: number;
64
+ private readonly maxTokens;
51
65
  private readonly estimate;
52
66
  constructor(maxTokens: number, estimate?: (message: ContextMessage) => number);
53
67
  select(history: readonly ContextMessage[]): readonly ContextMessage[];
54
68
  }
55
- interface ContextAssemblerOptions {
69
+ export interface ContextAssemblerOptions {
56
70
  readonly conversation: ConversationId;
57
71
  readonly acrossSubconversations: boolean;
58
72
  readonly topics: readonly string[];
@@ -62,19 +76,20 @@ interface ContextAssemblerOptions {
62
76
  readonly toCheckpoint?: Checkpoint;
63
77
  }
64
78
  export declare class ContextAssemblerBuilder {
65
- private readonly conversation;
79
+ private conversation;
66
80
  private acrossChildren;
67
81
  private selectedTopics;
68
82
  private selectedPolicy;
69
83
  private offsets;
70
84
  private resumeFrom;
71
85
  private stopAt;
72
- constructor(conversation: ConversationId);
86
+ /** The conversation whose history is assembled. Required. */
87
+ conversationId(conversation: ConversationId): this;
73
88
  acrossSubconversations(value?: boolean): this;
74
89
  topics(topics: readonly string[]): this;
75
90
  policy(policy: ContextPolicy): this;
76
- /** One offset map shared by every topic. `fromCheckpoint` takes precedence
77
- * for the topics it names. */
91
+ /** One offset map shared by every topic. If `fromCheckpoint` is set, it
92
+ * replaces this map for every topic. Missing checkpoint positions start at zero. */
78
93
  fromOffsets(offsets: ReadonlyMap<number, bigint>): this;
79
94
  /** Resume after `checkpoint`, per topic and partition, and read to the tail. */
80
95
  fromCheckpoint(checkpoint: Checkpoint): this;
@@ -84,10 +99,12 @@ export declare class ContextAssemblerBuilder {
84
99
  }
85
100
  export declare class ContextAssembler {
86
101
  private readonly options;
87
- static builder(conversation: ConversationId): ContextAssemblerBuilder;
88
- constructor(options: ContextAssemblerOptions);
102
+ static builder(): ContextAssemblerBuilder;
103
+ private constructor();
89
104
  assemble(laser: Laser): Promise<readonly ContextMessage[]>;
90
- private matches;
91
105
  }
92
- export {};
106
+ /** Every record of each partition's range instead of the newest
107
+ * `CONTEXT_READ_WINDOW`, for state replay. An open range ends at the tail
108
+ * seen when the replay starts. Not exported from the package. */
109
+ export declare function replayContext(options: ContextAssemblerOptions, laser: Laser): Promise<readonly ContextMessage[]>;
93
110
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAA;AASzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;IACjC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;uCAGuC;AACvC,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAD3B,OAAO,eAEH;IAUJ;wCACoC;IACpC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEnE;IAED,OAAO,IAAI,OAAO,CAEjB;IAED;kDAC8C;IAC9C,MAAM,IAAI;QACR,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;KAChF,CAWA;IAED,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CA0B1C;CACF;AAED;;wBAEwB;AACxB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAE9F;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,CAAA;CACtE;AAED,qBAAa,KAAM,YAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAAlC,YAAqB,KAAK,EAAE,MAAM,EAAI;IAEtC,MAAM,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,CAEpE;CACF;AAED,qBAAa,UAAW,YAAW,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,YAAY,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAEpC;IAED,MAAM,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,CAKpE;CACF;AAED,qBAAa,KAAM,YAAW,aAAa;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAAvD,YAAqB,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAI;IAE3D,MAAM,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,CAKpE;CACF;AAED,qBAAa,WAAY,YAAW,aAAa;IAE7C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAF3B,YACmB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,CAAC,OAAO,EAAE,cAAc,KAAK,MACb,EACzC;IAEJ,MAAM,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,CAapE;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAA;IACrC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAA;CACnC;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAiE;IACvF,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAwB;IAEtC,6DAA6D;IAC7D,cAAc,CAAC,YAAY,EAAE,cAAc,GAAG,IAAI,CAGjD;IAED,sBAAsB,CAAC,KAAK,UAAO,GAAG,IAAI,CAGzC;IAED,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAGtC;IAED,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAGlC;IAED;wFACoF;IACpF,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGtD;IAED,gFAAgF;IAChF,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAG3C;IAED,2EAA2E;IAC3E,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAGzC;IAED,KAAK,IAAI,gBAAgB,CAaxB;CACF;AAED,qBAAa,gBAAgB;IAKP,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ5C,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAExC;IAED,OAAO,eAAkE;IAOzE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAEzD;CACF;AAED;;iEAEiE;AACjE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAEpC"}
package/dist/context.js CHANGED
@@ -1,12 +1,21 @@
1
+ import { ConfigError, InvalidError } from "./client/errors.js";
1
2
  import { decodeAgentMessage } from "./agent/reliable-consumer.js";
2
3
  import { AgentTopic } from "./provenance/agent-topic.js";
3
4
  const READ_BATCH = 1_000;
4
- // Ceiling on the records one assembly holds in memory per topic. A conversation
5
- // topic grows without bound, and this read is reachable from bridge requests, so
6
- // the window keeps the most recent records rather than materializing the whole
7
- // history. Selection policies want the newest records, so the oldest are the
8
- // ones dropped.
9
- const MAX_CONTEXT_RECORDS = 10_000;
5
+ /**
6
+ * The most raw records one context read examines in each partition, the same
7
+ * window the Rust and Python SDKs use. An open read takes the newest records
8
+ * before the current tail, and a point-in-time read the newest records before
9
+ * the checkpoint, then keeps the ones of the conversation. Turns older than the
10
+ * window on a busy shared partition are outside the read, so a long
11
+ * conversation saves state with a checkpoint and replays from it.
12
+ */
13
+ export const CONTEXT_READ_WINDOW = 10_000;
14
+ const WINDOW = BigInt(CONTEXT_READ_WINDOW);
15
+ const U32_MAX = 0xffff_ffff;
16
+ const U64_MAX = 0xffffffffffffffffn;
17
+ // Node 22 writes and reads JSON integers beyond 2^53 exactly through these.
18
+ const EXACT_JSON = JSON;
10
19
  /** A point in a conversation's log: the next offset each partition of each
11
20
  * topic will write, as captured by `ContextScope.checkpoint`. A client-side
12
21
  * bookmark keyed by topic name, never a record on the log. `toJSON` and
@@ -16,9 +25,7 @@ export class Checkpoint {
16
25
  constructor(perTopic) {
17
26
  this.perTopic = perTopic;
18
27
  }
19
- static empty() {
20
- return new Checkpoint(new Map());
21
- }
28
+ /** @internal */
22
29
  static async capture(laser, topics) {
23
30
  const entries = await Promise.all(topics.map(async (topic) => [topic, await laser.topic(topic).tailOffsets()]));
24
31
  return new Checkpoint(new Map(entries));
@@ -28,39 +35,51 @@ export class Checkpoint {
28
35
  topicOffsets(topic) {
29
36
  return this.perTopic.get(topic);
30
37
  }
31
- get topics() {
32
- return [...this.perTopic.keys()];
33
- }
34
38
  isEmpty() {
35
39
  return this.perTopic.size === 0;
36
40
  }
41
+ /** The Rust and Python JSON shape, `{"per_topic": {topic: {partition: offset}}}`,
42
+ * with every offset an exact JSON integer. */
37
43
  toJSON() {
38
- return Object.fromEntries([...this.perTopic].map(([topic, offsets]) => [
39
- topic,
40
- Object.fromEntries([...offsets].map(([partition, offset]) => [String(partition), String(offset)]))
41
- ]));
44
+ return {
45
+ per_topic: Object.fromEntries([...this.perTopic].map(([topic, offsets]) => [
46
+ topic,
47
+ Object.fromEntries([...offsets].map(([partition, offset]) => [String(partition), jsonInteger(offset)]))
48
+ ]))
49
+ };
42
50
  }
51
+ /** Reads `toJSON` output, as a JSON string or an already parsed value. */
43
52
  static fromJSON(value) {
44
- const parsed = typeof value === "string" ? JSON.parse(value) : value;
45
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
46
- throw new TypeError("a checkpoint is an object keyed by topic name");
53
+ let parsed = value;
54
+ if (typeof value === "string") {
55
+ try {
56
+ parsed = JSON.parse(value, exactIntegers);
57
+ }
58
+ catch (cause) {
59
+ throw new InvalidError("a checkpoint must be JSON", undefined, { cause });
60
+ }
47
61
  }
48
62
  const perTopic = new Map();
49
- for (const [topic, offsets] of Object.entries(parsed)) {
50
- if (typeof offsets !== "object" || offsets === null || Array.isArray(offsets)) {
51
- throw new TypeError(`checkpoint topic ${topic} is not an object keyed by partition`);
52
- }
53
- perTopic.set(topic, new Map(Object.entries(offsets).map(([partition, offset]) => {
54
- if (!/^\d+$/.test(partition) ||
55
- (typeof offset !== "string" && typeof offset !== "number")) {
56
- throw new TypeError(`checkpoint topic ${topic} has an invalid partition entry`);
63
+ for (const [topic, offsets] of Object.entries(jsonObject(jsonObject(parsed, "a checkpoint")["per_topic"], "checkpoint per_topic"))) {
64
+ const partitions = new Map();
65
+ for (const [partition, offset] of Object.entries(jsonObject(offsets, `checkpoint topic ${topic}`))) {
66
+ const partitionId = Number(partition);
67
+ if (!/^\d+$/.test(partition) || partitionId > U32_MAX) {
68
+ throw new InvalidError(`checkpoint topic ${topic} has partition ${partition}, not a u32`);
57
69
  }
58
- return [Number(partition), BigInt(offset)];
59
- })));
70
+ partitions.set(partitionId, offsetOf(offset, topic));
71
+ }
72
+ perTopic.set(topic, partitions);
60
73
  }
61
74
  return new Checkpoint(perTopic);
62
75
  }
63
76
  }
77
+ /** The current tail of `topics` on `laser`'s default stream, one entry per
78
+ * topic. Fold up to it with the `at` replay bound or resume after it with
79
+ * `from-checkpoint`. */
80
+ export function contextCheckpoint(laser, topics) {
81
+ return Checkpoint.capture(laser, topics);
82
+ }
64
83
  export class LastN {
65
84
  count;
66
85
  constructor(count) {
@@ -73,16 +92,16 @@ export class LastN {
73
92
  export class RoleFilter {
74
93
  agents;
75
94
  constructor(agents) {
76
- this.agents = new Set([...agents].map((agent) => agent.asString()));
95
+ this.agents = new Set([...agents].map((agent) => agent.asStr()));
77
96
  }
78
97
  select(history) {
79
98
  return history.filter((message) => {
80
99
  const agent = message.provenance.agent;
81
- return agent !== undefined && this.agents.has(agent.asString());
100
+ return agent !== undefined && this.agents.has(agent.asStr());
82
101
  });
83
102
  }
84
103
  }
85
- export class ContextChain {
104
+ export class Chain {
86
105
  policies;
87
106
  constructor(policies) {
88
107
  this.policies = policies;
@@ -123,8 +142,10 @@ export class ContextAssemblerBuilder {
123
142
  offsets = new Map();
124
143
  resumeFrom;
125
144
  stopAt;
126
- constructor(conversation) {
145
+ /** The conversation whose history is assembled. Required. */
146
+ conversationId(conversation) {
127
147
  this.conversation = conversation;
148
+ return this;
128
149
  }
129
150
  acrossSubconversations(value = true) {
130
151
  this.acrossChildren = value;
@@ -138,8 +159,8 @@ export class ContextAssemblerBuilder {
138
159
  this.selectedPolicy = policy;
139
160
  return this;
140
161
  }
141
- /** One offset map shared by every topic. `fromCheckpoint` takes precedence
142
- * for the topics it names. */
162
+ /** One offset map shared by every topic. If `fromCheckpoint` is set, it
163
+ * replaces this map for every topic. Missing checkpoint positions start at zero. */
143
164
  fromOffsets(offsets) {
144
165
  this.offsets = new Map(offsets);
145
166
  return this;
@@ -155,7 +176,10 @@ export class ContextAssemblerBuilder {
155
176
  return this;
156
177
  }
157
178
  build() {
158
- return new ContextAssembler({
179
+ if (this.conversation === undefined) {
180
+ throw new ConfigError("ContextAssembler.builder().conversationId() is required");
181
+ }
182
+ return ContextAssembler.create({
159
183
  conversation: this.conversation,
160
184
  acrossSubconversations: this.acrossChildren,
161
185
  topics: this.selectedTopics,
@@ -168,72 +192,127 @@ export class ContextAssemblerBuilder {
168
192
  }
169
193
  export class ContextAssembler {
170
194
  options;
171
- static builder(conversation) {
172
- return new ContextAssemblerBuilder(conversation);
195
+ static builder() {
196
+ return new ContextAssemblerBuilder();
173
197
  }
174
198
  constructor(options) {
175
199
  this.options = options;
176
200
  }
177
- async assemble(laser) {
178
- const perTopic = await Promise.all(this.options.topics.map(async (topic, topicIndex) => {
179
- const collected = [];
180
- // A topic nobody has written yet has no history, same as in Rust.
181
- if ((await laser.topic(topic).partitionCount()) === undefined)
182
- return collected;
183
- const cursor = await laser.topic(topic).replay({ batchSize: READ_BATCH });
184
- const resume = this.options.fromCheckpoint?.topicOffsets(topic);
185
- cursor.fromOffsets(resume ?? this.options.fromOffsets);
186
- const stop = this.options.toCheckpoint;
187
- if (stop !== undefined) {
188
- // A checkpoint holds the next offset to write, so a partition it does
189
- // not name existed only after it and reads as empty.
190
- const ends = stop.topicOffsets(topic) ?? new Map();
191
- cursor.until(new Map([...cursor.offsets.keys()].map((partition) => [partition, ends.get(partition) ?? 0n])));
192
- }
193
- for (;;) {
194
- const records = await cursor.poll();
195
- if (records.length === 0)
196
- break;
197
- for (const record of records) {
198
- const decoded = decodeAgentMessage(record);
199
- if (decoded.kind !== "message" || !this.matches(decoded.message.provenance))
200
- continue;
201
- collected.push({
202
- id: decoded.message.id,
203
- provenance: decoded.message.provenance,
204
- payload: decoded.message.payload,
205
- ...(decoded.message.envelope !== undefined
206
- ? { envelope: decoded.message.envelope }
207
- : {}),
208
- timestampMicros: record.timestampMicros ?? 0n,
209
- topic,
210
- topicIndex
211
- });
212
- if (collected.length > MAX_CONTEXT_RECORDS)
213
- collected.shift();
214
- }
215
- }
201
+ /** @internal */
202
+ static create(options) {
203
+ return new ContextAssembler(options);
204
+ }
205
+ assemble(laser) {
206
+ return readContext(this.options, laser, false);
207
+ }
208
+ }
209
+ /** Every record of each partition's range instead of the newest
210
+ * `CONTEXT_READ_WINDOW`, for state replay. An open range ends at the tail
211
+ * seen when the replay starts. Not exported from the package. */
212
+ export function replayContext(options, laser) {
213
+ return readContext(options, laser, true);
214
+ }
215
+ async function readContext(options, laser, whole) {
216
+ const perTopic = await Promise.all(options.topics.map(async (topic, topicIndex) => {
217
+ // The log timestamp only orders the merged read, like in Rust.
218
+ const collected = [];
219
+ // A topic nobody has written yet has no history, same as in Rust.
220
+ if ((await laser.topic(topic).partitionCount()) === undefined)
216
221
  return collected;
217
- }));
218
- const ordered = perTopic.flat().sort((left, right) => {
219
- if (left.timestampMicros !== right.timestampMicros) {
220
- return left.timestampMicros < right.timestampMicros ? -1 : 1;
221
- }
222
- if (left.topicIndex !== right.topicIndex)
223
- return left.topicIndex - right.topicIndex;
224
- if (left.id.partitionId !== right.id.partitionId) {
225
- return left.id.partitionId - right.id.partitionId;
222
+ const handle = laser.topic(topic);
223
+ const cursor = (await handle.replay()).batch(READ_BATCH);
224
+ const partitions = [...cursor.offsets.keys()];
225
+ const resume = options.fromCheckpoint;
226
+ const from = (partition) => resume === undefined
227
+ ? (options.fromOffsets.get(partition) ?? 0n)
228
+ : (resume.topicOffsets(topic)?.get(partition) ?? 0n);
229
+ // A checkpoint holds the next offset to write, so a point-in-time read
230
+ // ends before it, and a partition it does not name existed only after
231
+ // it and reads as empty. An open read ends at the tail seen now.
232
+ const stop = options.toCheckpoint;
233
+ const ends = stop === undefined
234
+ ? await handle.tailOffsets()
235
+ : (stop.topicOffsets(topic) ?? new Map());
236
+ const starts = new Map();
237
+ const bounds = new Map();
238
+ for (const partition of partitions) {
239
+ const end = ends.get(partition) ?? 0n;
240
+ const windowStart = end > WINDOW ? end - WINDOW : 0n;
241
+ const start = from(partition);
242
+ starts.set(partition, whole || start > windowStart ? start : windowStart);
243
+ bounds.set(partition, end);
244
+ }
245
+ cursor.fromOffsets(starts).until(bounds);
246
+ for (;;) {
247
+ const records = await cursor.pollRecords();
248
+ if (records.length === 0)
249
+ break;
250
+ for (const record of records) {
251
+ const decoded = decodeAgentMessage(record);
252
+ if (decoded.kind !== "message" || !inConversation(options, decoded.message.provenance))
253
+ continue;
254
+ collected.push({
255
+ id: decoded.message.id,
256
+ provenance: decoded.message.provenance,
257
+ payload: decoded.message.payload,
258
+ ...(decoded.message.envelope !== undefined
259
+ ? { envelope: decoded.message.envelope }
260
+ : {}),
261
+ timestampMicros: record.timestampMicros ?? 0n,
262
+ topic,
263
+ topicIndex
264
+ });
226
265
  }
227
- return left.id.offset < right.id.offset ? -1 : left.id.offset > right.id.offset ? 1 : 0;
228
- });
229
- return this.options.policy.select(ordered);
266
+ }
267
+ return collected;
268
+ }));
269
+ const ordered = perTopic.flat().sort((left, right) => {
270
+ if (left.timestampMicros !== right.timestampMicros) {
271
+ return left.timestampMicros < right.timestampMicros ? -1 : 1;
272
+ }
273
+ if (left.topicIndex !== right.topicIndex)
274
+ return left.topicIndex - right.topicIndex;
275
+ if (left.id.partitionId !== right.id.partitionId) {
276
+ return left.id.partitionId - right.id.partitionId;
277
+ }
278
+ return left.id.offset < right.id.offset ? -1 : left.id.offset > right.id.offset ? 1 : 0;
279
+ });
280
+ return options.policy.select(ordered);
281
+ }
282
+ function inConversation(options, provenance) {
283
+ if (provenance.conversationId.equals(options.conversation))
284
+ return true;
285
+ return (options.acrossSubconversations &&
286
+ (provenance.rootConversationId?.equals(options.conversation) === true ||
287
+ provenance.parentConversationId?.equals(options.conversation) === true));
288
+ }
289
+ function jsonInteger(value) {
290
+ return value <= BigInt(Number.MAX_SAFE_INTEGER)
291
+ ? Number(value)
292
+ : EXACT_JSON.rawJSON(String(value));
293
+ }
294
+ function exactIntegers(_key, value, context) {
295
+ return typeof value === "number" &&
296
+ context?.source !== undefined &&
297
+ /^-?\d+$/.test(context.source)
298
+ ? BigInt(context.source)
299
+ : value;
300
+ }
301
+ function jsonObject(value, what) {
302
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
303
+ throw new InvalidError(`${what} must be a JSON object`);
230
304
  }
231
- matches(provenance) {
232
- if (provenance.conversationId.equals(this.options.conversation))
233
- return true;
234
- return (this.options.acrossSubconversations &&
235
- (provenance.rootConversationId?.equals(this.options.conversation) === true ||
236
- provenance.parentConversationId?.equals(this.options.conversation) === true));
305
+ return value;
306
+ }
307
+ function offsetOf(value, topic) {
308
+ const offset = typeof value === "bigint"
309
+ ? value
310
+ : typeof value === "number" && Number.isSafeInteger(value)
311
+ ? BigInt(value)
312
+ : undefined;
313
+ if (offset === undefined || offset < 0n || offset > U64_MAX) {
314
+ throw new InvalidError(`checkpoint topic ${topic} has an offset that is not a u64`);
237
315
  }
316
+ return offset;
238
317
  }
239
318
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export type ReplayBound = {
21
21
  export declare const FULL_REPLAY: ReplayBound;
22
22
  export declare function resumeOffsets(snapshot: FoldSnapshot): ReadonlyMap<number, bigint>;
23
23
  declare function load<State>(laser: Laser, conversation: ConversationId, topics: readonly string[], bound: ReplayBound, initial: State, fold: (state: State, message: ContextMessage) => State): Promise<State>;
24
- declare function loadWith<State>(laser: Laser, store: SnapshotStore, conversation: ConversationId, topics: readonly string[], initial: State, decodeState: (bytes: Uint8Array) => State, fold: (state: State, message: ContextMessage) => State): Promise<State>;
24
+ declare function loadWith<State>(laser: Laser, store: SnapshotStore, conversation: ConversationId, topics: readonly string[], initial: State, fold: (state: State, message: ContextMessage) => State, decodeState?: (bytes: Uint8Array) => State): Promise<State>;
25
25
  export declare const ConversationState: {
26
26
  readonly load: typeof load;
27
27
  readonly loadWith: typeof loadWith;
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../src/conversation-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAA2B,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEhF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7B,eAAO,MAAM,WAAW,EAAE,WAA8B,CAAA;AAExD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAOjF;AAED,iBAAe,IAAI,CAAC,KAAK,EACvB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,cAAc,EAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,KAAK,EACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,KAAK,KAAK,GACrD,OAAO,CAAC,KAAK,CAAC,CAehB;AAED,iBAAe,QAAQ,CAAC,KAAK,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,cAAc,EAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,KAAK,EACd,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,KAAK,EACzC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,KAAK,KAAK,GACrD,OAAO,CAAC,KAAK,CAAC,CAYhB;AAED,eAAO,MAAM,iBAAiB;;;CAA8B,CAAA"}
1
+ {"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../src/conversation-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEhF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7B,eAAO,MAAM,WAAW,EAAE,WAA8B,CAAA;AAExD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAOjF;AAKD,iBAAe,IAAI,CAAC,KAAK,EACvB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,cAAc,EAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,KAAK,EACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,KAAK,KAAK,GACrD,OAAO,CAAC,KAAK,CAAC,CAuBhB;AAID,iBAAe,QAAQ,CAAC,KAAK,EAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,cAAc,EAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,KAAK,EACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,KAAK,KAAK,EACtD,WAAW,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,KAAkD,GACrF,OAAO,CAAC,KAAK,CAAC,CAYhB;AAYD,eAAO,MAAM,iBAAiB;;;CAA8B,CAAA"}
@@ -1,4 +1,5 @@
1
- import { ContextAssembler, LastN } from "./context.js";
1
+ import { CodecError } from "./client/errors.js";
2
+ import { ContextAssembler, LastN, replayContext } from "./context.js";
2
3
  import { foldSnapshotResumeOffset } from "./wire/snapshot.js";
3
4
  export const FULL_REPLAY = { kind: "full" };
4
5
  export function resumeOffsets(snapshot) {
@@ -7,29 +8,47 @@ export function resumeOffsets(snapshot) {
7
8
  foldSnapshotResumeOffset(snapshot, partition)
8
9
  ]));
9
10
  }
11
+ // `last` reads the newest context window like a context read. Every other
12
+ // bound folds its whole range, read in chunks up to the tail seen when the
13
+ // replay starts or up to the checkpoint.
10
14
  async function load(laser, conversation, topics, bound, initial, fold) {
11
- const builder = ContextAssembler.builder(conversation).topics(topics);
12
- if (bound.kind === "last")
13
- builder.policy(new LastN(bound.count));
14
- if (bound.kind === "full")
15
- builder.policy(new LastN(Number.MAX_SAFE_INTEGER));
16
- if (bound.kind === "from-offsets") {
17
- builder.policy(new LastN(Number.MAX_SAFE_INTEGER)).fromOffsets(bound.offsets);
15
+ if (bound.kind === "last") {
16
+ const history = await ContextAssembler.builder()
17
+ .conversationId(conversation)
18
+ .topics(topics)
19
+ .policy(new LastN(bound.count))
20
+ .build()
21
+ .assemble(laser);
22
+ return history.reduce(fold, initial);
18
23
  }
19
- if (bound.kind === "from-checkpoint") {
20
- builder.policy(new LastN(Number.MAX_SAFE_INTEGER)).fromCheckpoint(bound.checkpoint);
21
- }
22
- if (bound.kind === "at") {
23
- builder.policy(new LastN(Number.MAX_SAFE_INTEGER)).toCheckpoint(bound.checkpoint);
24
- }
25
- const history = await builder.build().assemble(laser);
24
+ const history = await replayContext({
25
+ conversation,
26
+ acrossSubconversations: false,
27
+ topics,
28
+ policy: new LastN(Number.MAX_SAFE_INTEGER),
29
+ fromOffsets: bound.kind === "from-offsets" ? bound.offsets : new Map(),
30
+ ...(bound.kind === "from-checkpoint" ? { fromCheckpoint: bound.checkpoint } : {}),
31
+ ...(bound.kind === "at" ? { toCheckpoint: bound.checkpoint } : {})
32
+ }, laser);
26
33
  return history.reduce(fold, initial);
27
34
  }
28
- async function loadWith(laser, store, conversation, topics, initial, decodeState, fold) {
35
+ // The newest snapshot's state (JSON by default, like the Rust SDK) plus a
36
+ // replay of only the tail past it.
37
+ async function loadWith(laser, store, conversation, topics, initial, fold, decodeState = (bytes) => decodeJsonState(bytes)) {
29
38
  const snapshot = await store.latest(conversation);
30
39
  return load(laser, conversation, topics, snapshot === undefined
31
40
  ? FULL_REPLAY
32
41
  : { kind: "from-offsets", offsets: resumeOffsets(snapshot) }, snapshot === undefined ? initial : decodeState(snapshot.state), fold);
33
42
  }
43
+ function decodeJsonState(bytes) {
44
+ try {
45
+ return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
46
+ }
47
+ catch (error) {
48
+ throw new CodecError(`decode snapshot state: ${String(error)}`, "json", "decode", {
49
+ cause: error
50
+ });
51
+ }
52
+ }
34
53
  export const ConversationState = { load, loadWith };
35
54
  //# sourceMappingURL=conversation-state.js.map