@yielded/agent 0.1.0-beta.174 → 0.1.0-beta.175

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 (175) hide show
  1. package/dist/{Admin-BHmp2V9p.d.mts → Admin-Qa3I1oA5.d.mts} +38 -7
  2. package/dist/{AgentRuntime-BD3ZHAMq.d.mts → AgentRuntime-CHDyRbSf.d.mts} +3 -3
  3. package/dist/{AgentRuntime-B6qZlD3f.mjs → AgentRuntime-DaDKMasp.mjs} +123 -114
  4. package/dist/AgentRuntime-DaDKMasp.mjs.map +1 -0
  5. package/dist/{Digest-EpeqWEdv.mjs → Digest-C3EODOee.mjs} +2 -2
  6. package/dist/{Digest-EpeqWEdv.mjs.map → Digest-C3EODOee.mjs.map} +1 -1
  7. package/dist/{DurableAgentRuntime-CBBjRNJN.mjs → DurableAgentRuntime-CPlw5_7e.mjs} +161 -85
  8. package/dist/DurableAgentRuntime-CPlw5_7e.mjs.map +1 -0
  9. package/dist/{EventSource-C9aaJaXT.d.mts → EventSource-BTu68yDW.d.mts} +2 -2
  10. package/dist/InMemory.d.mts +2 -2
  11. package/dist/{MessageDelivery-BGDm-c46.d.mts → MessageDelivery-DjAZJ4Fd.d.mts} +4 -4
  12. package/dist/{MessagingHost-CRUK4JBi.mjs → MessagingHost-CZCyrnvJ.mjs} +27 -26
  13. package/dist/MessagingHost-CZCyrnvJ.mjs.map +1 -0
  14. package/dist/{PreparedInputAdmission-BvDqlgiP.d.mts → PreparedInputAdmission-wgY4JMZY.d.mts} +3 -3
  15. package/dist/{Records-BiuJDWNe.mjs → Records-DzL4Kbtw.mjs} +2 -2
  16. package/dist/{Records-BiuJDWNe.mjs.map → Records-DzL4Kbtw.mjs.map} +1 -1
  17. package/dist/{RunContinuation-CTJ1jGrO.d.mts → RunContinuation-3jB5pULC.d.mts} +10 -4
  18. package/dist/{RunContinuation-4ZATcVLB.mjs → RunContinuation-BiyKJK32.mjs} +74 -40
  19. package/dist/RunContinuation-BiyKJK32.mjs.map +1 -0
  20. package/dist/{RunJournal-CNZqA3Ge.mjs → RunJournal-CPMKcfd0.mjs} +84 -79
  21. package/dist/RunJournal-CPMKcfd0.mjs.map +1 -0
  22. package/dist/{RunStorage-BHjuuERI.mjs → RunStorage-CzutHJBE.mjs} +3 -2
  23. package/dist/RunStorage-CzutHJBE.mjs.map +1 -0
  24. package/dist/{Scheduling-NG8slKdI.mjs → Scheduling-07_dsGED.mjs} +3 -3
  25. package/dist/{Scheduling-NG8slKdI.mjs.map → Scheduling-07_dsGED.mjs.map} +1 -1
  26. package/dist/{Subagent-CTIpnzlB.mjs → Subagent-CexndZSp.mjs} +2 -2
  27. package/dist/{Subagent-CTIpnzlB.mjs.map → Subagent-CexndZSp.mjs.map} +1 -1
  28. package/dist/{Subagent-DKhZA72u.d.mts → Subagent-xhN_aD1r.d.mts} +3 -3
  29. package/dist/{Subscription-BNg9VCRl.d.mts → Subscription-DmIHlOJK.d.mts} +2 -2
  30. package/dist/{SubscriptionInput-BUoXv-_K.d.mts → SubscriptionInput-DgcQhvbe.d.mts} +2 -2
  31. package/dist/{Thread-dk-QiNml.d.mts → Thread-DzdJAY4J.d.mts} +4 -3
  32. package/dist/{ThreadHistory-ByxS8HU1.d.mts → ThreadHistory-KPPBJLJb.d.mts} +12 -2
  33. package/dist/{ThreadImport-CodYoJoa.mjs → ThreadImport-CjlG57vH.mjs} +8 -8
  34. package/dist/{ThreadImport-CodYoJoa.mjs.map → ThreadImport-CjlG57vH.mjs.map} +1 -1
  35. package/dist/{ThreadImport-CMgzttvr.d.mts → ThreadImport-DP-vOk2F.d.mts} +4 -4
  36. package/dist/{ThreadStore-59uDGXul.mjs → ThreadStore-EuUilthA.mjs} +5 -7
  37. package/dist/ThreadStore-EuUilthA.mjs.map +1 -0
  38. package/dist/{ThreadTransfer-3jigUl3g.mjs → ThreadTransfer-DB_zsrtJ.mjs} +4 -4
  39. package/dist/{ThreadTransfer-3jigUl3g.mjs.map → ThreadTransfer-DB_zsrtJ.mjs.map} +1 -1
  40. package/dist/{WorkerAdmission-DDYJdOsU.mjs → WorkerAdmission-eBeXt_mu.mjs} +5 -5
  41. package/dist/{WorkerAdmission-DDYJdOsU.mjs.map → WorkerAdmission-eBeXt_mu.mjs.map} +1 -1
  42. package/dist/{agent-registration-DRbyhAu-.mjs → agent-registration-a6QYaG3h.mjs} +4 -4
  43. package/dist/{agent-registration-DRbyhAu-.mjs.map → agent-registration-a6QYaG3h.mjs.map} +1 -1
  44. package/dist/capabilities/Messaging.mjs +1 -1
  45. package/dist/capabilities/ModelContext.d.mts +1 -1
  46. package/dist/capabilities/RunHooks.d.mts +1 -1
  47. package/dist/capabilities/Subagent.d.mts +1 -1
  48. package/dist/capabilities/Subagent.mjs +1 -1
  49. package/dist/core/Thread.d.mts +2 -2
  50. package/dist/core/Thread.mjs +5 -3
  51. package/dist/core/Thread.mjs.map +1 -1
  52. package/dist/durable/ActivityStore.mjs +1 -1
  53. package/dist/durable/Admin.d.mts +1 -1
  54. package/dist/durable/Admin.mjs +1 -1
  55. package/dist/durable/AgentRegistration.d.mts +1 -1
  56. package/dist/durable/AgentRegistration.mjs +1 -1
  57. package/dist/durable/Certification.d.mts +1 -1
  58. package/dist/durable/CommittedActivity.d.mts +1 -1
  59. package/dist/durable/CommittedActivity.mjs +3 -3
  60. package/dist/durable/Digest.mjs +1 -1
  61. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  62. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  63. package/dist/durable/EventSource.d.mts +1 -1
  64. package/dist/durable/EventSource.mjs +1 -1
  65. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  66. package/dist/durable/LifecyclePublication.d.mts +1 -1
  67. package/dist/durable/LifecyclePublication.mjs +2 -2
  68. package/dist/durable/MessageDelivery.d.mts +1 -1
  69. package/dist/durable/MessageDelivery.mjs +2 -2
  70. package/dist/durable/MessageDeliveryStoreConformance.d.mts +40 -40
  71. package/dist/durable/MessageDeliveryStoreConformance.mjs +2 -2
  72. package/dist/durable/PersistentHistory.d.mts +2 -2
  73. package/dist/durable/PersistentHistory.mjs +4 -4
  74. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  75. package/dist/durable/RecordFormat.mjs +1 -1
  76. package/dist/durable/Records.mjs +1 -1
  77. package/dist/durable/Recovery.d.mts +1 -1
  78. package/dist/durable/Recovery.mjs +1 -1
  79. package/dist/durable/RunContinuation.d.mts +2 -2
  80. package/dist/durable/RunContinuation.mjs +3 -3
  81. package/dist/durable/RunJournal.d.mts +2 -2
  82. package/dist/durable/RunJournal.mjs +2 -2
  83. package/dist/durable/RunStorage.d.mts +1 -1
  84. package/dist/durable/RunStorage.mjs +1 -1
  85. package/dist/durable/Schedule.mjs +1 -1
  86. package/dist/durable/ScheduleStoreConformance.mjs +1 -1
  87. package/dist/durable/ScheduleTransition.mjs +1 -1
  88. package/dist/durable/Scheduling.d.mts +1 -1
  89. package/dist/durable/Scheduling.mjs +1 -1
  90. package/dist/durable/SettlementPublisher.d.mts +1 -1
  91. package/dist/durable/SettlementPublisher.mjs +3 -3
  92. package/dist/durable/SqlMemoryStore.mjs +5 -3
  93. package/dist/durable/SqlMemoryStore.mjs.map +1 -1
  94. package/dist/durable/SubmissionLedger.d.mts +1 -1
  95. package/dist/durable/SubmissionLedger.mjs +7 -3
  96. package/dist/durable/SubmissionLedger.mjs.map +1 -1
  97. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  98. package/dist/durable/SubmissionLedgerConformance.mjs +6 -6
  99. package/dist/durable/SubmissionStatus.d.mts +1 -1
  100. package/dist/durable/Subscription.d.mts +1 -1
  101. package/dist/durable/Subscription.mjs +2 -2
  102. package/dist/durable/SubscriptionInput.d.mts +1 -1
  103. package/dist/durable/SubscriptionInput.mjs +2 -2
  104. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  105. package/dist/durable/SubscriptionStoreConformance.mjs +1 -1
  106. package/dist/durable/SubscriptionTools.d.mts +2 -2
  107. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  108. package/dist/durable/SubscriptionTransition.mjs +1 -1
  109. package/dist/durable/Subscriptions.d.mts +5 -5
  110. package/dist/durable/Subscriptions.mjs +2 -2
  111. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  112. package/dist/durable/ThreadArchiveRange.mjs +1 -1
  113. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  114. package/dist/durable/ThreadContextHistory.mjs +2 -2
  115. package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
  116. package/dist/durable/ThreadImport.d.mts +1 -1
  117. package/dist/durable/ThreadImport.mjs +1 -1
  118. package/dist/durable/ThreadInvariants.d.mts +3 -3
  119. package/dist/durable/ThreadInvariants.mjs +4 -4
  120. package/dist/durable/ThreadProjection.mjs +1 -1
  121. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  122. package/dist/durable/ThreadReader.d.mts +1 -1
  123. package/dist/durable/ThreadReader.mjs +1 -1
  124. package/dist/durable/ThreadStore.d.mts +1 -1
  125. package/dist/durable/ThreadStore.mjs +2 -2
  126. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  127. package/dist/durable/ThreadStoreConformance.mjs +4 -4
  128. package/dist/durable/ThreadTransfer.d.mts +1 -1
  129. package/dist/durable/ThreadTransfer.mjs +1 -1
  130. package/dist/durable/ThreadWork.d.mts +2 -2
  131. package/dist/durable/ThreadWork.mjs +12 -6
  132. package/dist/durable/ThreadWork.mjs.map +1 -1
  133. package/dist/durable/ToolReconciler.mjs +1 -1
  134. package/dist/durable/WakeScheduler.mjs +23 -39
  135. package/dist/durable/WakeScheduler.mjs.map +1 -1
  136. package/dist/durable/WorkerAdmission.d.mts +1 -1
  137. package/dist/durable/WorkerAdmission.mjs +1 -1
  138. package/dist/durable/WorkerHost.d.mts +1 -1
  139. package/dist/engine/AgentRuntime.d.mts +1 -1
  140. package/dist/engine/AgentRuntime.mjs +1 -1
  141. package/dist/engine/MessagingHost.mjs +1 -1
  142. package/dist/engine/Output.mjs +1 -1
  143. package/dist/engine/ThreadHistory.d.mts +1 -1
  144. package/dist/engine/ThreadHistory.mjs +3 -2
  145. package/dist/engine/ThreadHistory.mjs.map +1 -1
  146. package/dist/index.d.mts +12 -12
  147. package/dist/index.mjs +13 -13
  148. package/dist/{output-contract-CMIhu4Cw.mjs → output-contract-DCnLYCdp.mjs} +12 -15
  149. package/dist/{output-contract-CMIhu4Cw.mjs.map → output-contract-DCnLYCdp.mjs.map} +1 -1
  150. package/dist/{run-context-reader-CC7ZD95F.d.mts → run-context-reader-DVhJZ1Qe.d.mts} +2 -2
  151. package/package.json +1 -1
  152. package/src/core/Thread.ts +143 -146
  153. package/src/durable/DurableAgentRuntime.ts +381 -206
  154. package/src/durable/RunContinuation.ts +113 -62
  155. package/src/durable/RunJournal.ts +99 -108
  156. package/src/durable/RunStorage.ts +7 -0
  157. package/src/durable/SqlMemoryStore.ts +8 -6
  158. package/src/durable/SubmissionLedger.ts +7 -0
  159. package/src/durable/ThreadStore.ts +9 -7
  160. package/src/durable/ThreadWork.ts +10 -0
  161. package/src/durable/WakeScheduler.ts +34 -66
  162. package/src/durable/internal/usage-totals.ts +28 -31
  163. package/src/engine/MessagingHost.ts +4 -2
  164. package/src/engine/ThreadHistory.ts +47 -48
  165. package/src/engine/internal/agent-runtime.ts +234 -202
  166. package/src/engine/internal/output-contract.ts +15 -15
  167. package/src/engine/internal/primitive-delta.ts +2 -3
  168. package/src/engine/internal/tool-telemetry.ts +3 -5
  169. package/dist/AgentRuntime-B6qZlD3f.mjs.map +0 -1
  170. package/dist/DurableAgentRuntime-CBBjRNJN.mjs.map +0 -1
  171. package/dist/MessagingHost-CRUK4JBi.mjs.map +0 -1
  172. package/dist/RunContinuation-4ZATcVLB.mjs.map +0 -1
  173. package/dist/RunJournal-CNZqA3Ge.mjs.map +0 -1
  174. package/dist/RunStorage-BHjuuERI.mjs.map +0 -1
  175. package/dist/ThreadStore-59uDGXul.mjs.map +0 -1
@@ -287,163 +287,160 @@ const appendEncoded = Effect.fnUntraced(function* (
287
287
  });
288
288
 
289
289
  /** In-memory storage shared for the consumer's Scope; it does not survive process loss. */
290
- export const layerMemory = Layer.effect(
291
- Store,
292
- Effect.gen(function* () {
293
- const state = yield* SynchronizedRef.make<State>({ threads: new Map(), contentBytes: 0 });
294
- const root: Owner = { closed: false };
295
-
296
- const release = (owner: Owner) =>
297
- SynchronizedRef.update(state, (current) => {
298
- owner.closed = true;
299
- const threads = new Map(current.threads);
300
- let contentBytes = current.contentBytes;
301
-
302
- for (const [id, entry] of threads) {
303
- if (belongsTo(entry.owner, owner)) {
304
- threads.delete(id);
305
- contentBytes -= entry.snapshot.contentBytes;
306
- }
290
+ export const makeMemoryStore = Effect.gen(function* () {
291
+ const state = yield* SynchronizedRef.make<State>({ threads: new Map(), contentBytes: 0 });
292
+ const root: Owner = { closed: false };
293
+
294
+ const release = (owner: Owner) =>
295
+ SynchronizedRef.update(state, (current) => {
296
+ owner.closed = true;
297
+ const threads = new Map(current.threads);
298
+ let contentBytes = current.contentBytes;
299
+
300
+ for (const [id, entry] of threads) {
301
+ if (belongsTo(entry.owner, owner)) {
302
+ threads.delete(id);
303
+ contentBytes -= entry.snapshot.contentBytes;
307
304
  }
305
+ }
308
306
 
309
- return { threads, contentBytes };
310
- });
307
+ return { threads, contentBytes };
308
+ });
311
309
 
312
- yield* Effect.addFinalizer(() => release(root));
313
-
314
- const view = (owner: Owner): StoreService => ({
315
- scoped: Effect.acquireRelease(
316
- Effect.sync((): Owner => ({ closed: false, parent: owner })),
317
- release,
318
- ).pipe(Effect.map(view)),
319
- create: (threadId) =>
320
- SynchronizedRef.modifyEffect(
321
- state,
322
- Effect.fnUntraced(function* (threads) {
323
- const existing = yield* access(threads, owner, threadId);
324
-
325
- if (existing !== undefined) return [existing, threads] as const;
326
- if (threads.threads.size >= MAX_THREADS) {
327
- return yield* ThreadLimitExceeded.make({
328
- threadId,
329
- limit: "threads",
330
- limitValue: MAX_THREADS,
331
- observedValue: threads.threads.size + 1,
332
- });
333
- }
310
+ yield* Effect.addFinalizer(() => release(root));
311
+
312
+ const view = (owner: Owner): StoreService => ({
313
+ scoped: Effect.acquireRelease(
314
+ Effect.sync((): Owner => ({ closed: false, parent: owner })),
315
+ release,
316
+ ).pipe(Effect.map(view)),
317
+ create: (threadId) =>
318
+ SynchronizedRef.modifyEffect(
319
+ state,
320
+ Effect.fnUntraced(function* (threads) {
321
+ const existing = yield* access(threads, owner, threadId);
322
+
323
+ if (existing !== undefined) return [existing, threads] as const;
324
+ if (threads.threads.size >= MAX_THREADS) {
325
+ return yield* ThreadLimitExceeded.make({
326
+ threadId,
327
+ limit: "threads",
328
+ limitValue: MAX_THREADS,
329
+ observedValue: threads.threads.size + 1,
330
+ });
331
+ }
334
332
 
335
- const created = Thread.make({
336
- version: 1,
333
+ const created = Thread.make({
334
+ version: 1,
335
+ threadId,
336
+ nextSequence: 0,
337
+ contentBytes: 0,
338
+ messages: [],
339
+ });
340
+
341
+ return [created, put(threads, owner, created)] as const;
342
+ }),
343
+ ),
344
+ append: Effect.fnUntraced(function* (threadId, message) {
345
+ const encoded = yield* encodeMessage(threadId, message.message);
346
+ const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
347
+
348
+ return yield* SynchronizedRef.modifyEffect(
349
+ state,
350
+ Effect.fnUntraced(function* (threads) {
351
+ const current = yield* findSnapshot(threads, owner, threadId);
352
+
353
+ return yield* appendEncoded(threads, owner, current, message, encoded, timestamp);
354
+ }),
355
+ );
356
+ }),
357
+ recordHistory: Effect.fnUntraced(function* (threadId, historyRunId, history) {
358
+ const incoming = yield* Effect.forEach(history.content, (message) =>
359
+ encodeMessage(threadId, message).pipe(Effect.map((encoded) => ({ message, encoded }))),
360
+ );
361
+
362
+ // Publish the complete suffix only after verification and every bounded append succeed.
363
+ return yield* SynchronizedRef.modifyEffect(
364
+ state,
365
+ Effect.fnUntraced(function* (threads) {
366
+ const current = yield* findSnapshot(threads, owner, threadId);
367
+
368
+ const currentEncoded = yield* Effect.forEach(current.messages, (entry) =>
369
+ encodeMessage(threadId, entry.message),
370
+ );
371
+
372
+ if (
373
+ incoming.length < currentEncoded.length ||
374
+ currentEncoded.some((encoded, index) => encoded !== incoming[index]?.encoded)
375
+ ) {
376
+ return yield* ThreadHistoryDiverged.make({
337
377
  threadId,
338
- nextSequence: 0,
339
- contentBytes: 0,
340
- messages: [],
378
+ message: "Engine history is not an append-only extension of official history",
341
379
  });
380
+ }
381
+ const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
342
382
 
343
- return [created, put(threads, owner, created)] as const;
344
- }),
345
- ),
346
- append: Effect.fnUntraced(function* (threadId, message) {
347
- const encoded = yield* encodeMessage(threadId, message.message);
348
- const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
349
-
350
- return yield* SynchronizedRef.modifyEffect(
351
- state,
352
- Effect.fnUntraced(function* (threads) {
353
- const current = yield* findSnapshot(threads, owner, threadId);
354
-
355
- return yield* appendEncoded(threads, owner, current, message, encoded, timestamp);
356
- }),
357
- );
358
- }),
359
- recordHistory: Effect.fnUntraced(function* (threadId, historyRunId, history) {
360
- const incoming = yield* Effect.forEach(history.content, (message) =>
361
- encodeMessage(threadId, message).pipe(Effect.map((encoded) => ({ message, encoded }))),
362
- );
363
-
364
- // Publish the complete suffix only after verification and every bounded append succeed.
365
- return yield* SynchronizedRef.modifyEffect(
366
- state,
367
- Effect.fnUntraced(function* (threads) {
368
- const current = yield* findSnapshot(threads, owner, threadId);
369
-
370
- const currentEncoded = yield* Effect.forEach(current.messages, (entry) =>
371
- encodeMessage(threadId, entry.message),
372
- );
383
+ if (incoming.length === currentEncoded.length) return [current, threads] as const;
384
+
385
+ const messages = [...current.messages];
386
+ let contentBytes = current.contentBytes;
387
+ let storeBytes = threads.contentBytes;
388
+ let nextSequence = current.nextSequence;
389
+
390
+ for (const entry of incoming.slice(currentEncoded.length)) {
391
+ const append = ThreadAppend.make({ runId: historyRunId, message: entry.message });
373
392
 
374
- if (
375
- incoming.length < currentEncoded.length ||
376
- currentEncoded.some((encoded, index) => encoded !== incoming[index]?.encoded)
377
- ) {
378
- return yield* ThreadHistoryDiverged.make({
393
+ const messageBytes = yield* messageSize(threadId, entry.encoded);
394
+
395
+ contentBytes += messageBytes;
396
+ storeBytes += messageBytes;
397
+ if (storeBytes > MAX_STORE_CONTENT_BYTES) {
398
+ return yield* ThreadLimitExceeded.make({
379
399
  threadId,
380
- message: "Engine history is not an append-only extension of official history",
400
+ limit: "store-content-bytes",
401
+ limitValue: MAX_STORE_CONTENT_BYTES,
402
+ observedValue: storeBytes,
381
403
  });
382
404
  }
383
- const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
384
-
385
- if (incoming.length === currentEncoded.length) return [current, threads] as const;
386
-
387
- const messages = [...current.messages];
388
- let contentBytes = current.contentBytes;
389
- let storeBytes = threads.contentBytes;
390
- let nextSequence = current.nextSequence;
391
-
392
- for (const entry of incoming.slice(currentEncoded.length)) {
393
- const append = ThreadAppend.make({ runId: historyRunId, message: entry.message });
394
-
395
- const messageBytes = yield* messageSize(threadId, entry.encoded);
396
-
397
- contentBytes += messageBytes;
398
- storeBytes += messageBytes;
399
- if (storeBytes > MAX_STORE_CONTENT_BYTES) {
400
- return yield* ThreadLimitExceeded.make({
401
- threadId,
402
- limit: "store-content-bytes",
403
- limitValue: MAX_STORE_CONTENT_BYTES,
404
- observedValue: storeBytes,
405
- });
406
- }
407
- messages.push(
408
- ThreadMessage.make({
409
- threadId,
410
- sequence: nextSequence,
411
- ...(append.runId === undefined ? {} : { runId: append.runId }),
412
- message: append.message,
413
- encodedBytes: messageBytes,
414
- timestamp,
415
- }),
416
- );
417
- nextSequence += 1;
418
- }
405
+ messages.push(
406
+ ThreadMessage.make({
407
+ threadId,
408
+ sequence: nextSequence,
409
+ ...(append.runId === undefined ? {} : { runId: append.runId }),
410
+ message: append.message,
411
+ encodedBytes: messageBytes,
412
+ timestamp,
413
+ }),
414
+ );
415
+ nextSequence += 1;
416
+ }
419
417
 
420
- const snapshot = Thread.make({
421
- version: current.version,
422
- threadId,
423
- nextSequence,
424
- contentBytes,
425
- messages,
426
- });
418
+ const snapshot = Thread.make({
419
+ version: current.version,
420
+ threadId,
421
+ nextSequence,
422
+ contentBytes,
423
+ messages,
424
+ });
427
425
 
428
- return [snapshot, put(threads, owner, snapshot)] as const;
429
- }),
430
- );
431
- }),
432
- snapshot: (threadId) =>
433
- SynchronizedRef.get(state).pipe(
434
- Effect.flatMap((all) => findSnapshot(all, owner, threadId)),
435
- ),
436
- export: Effect.fnUntraced(function* (threadId) {
437
- const snapshot = yield* findSnapshot(yield* SynchronizedRef.get(state), owner, threadId);
438
-
439
- return ThreadExport.make({
440
- format: "effect-agent/ephemeral-thread@1",
441
- exportedAt: DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis)),
442
- snapshot,
443
- });
444
- }),
445
- });
426
+ return [snapshot, put(threads, owner, snapshot)] as const;
427
+ }),
428
+ );
429
+ }),
430
+ snapshot: (threadId) =>
431
+ SynchronizedRef.get(state).pipe(Effect.flatMap((all) => findSnapshot(all, owner, threadId))),
432
+ export: Effect.fnUntraced(function* (threadId) {
433
+ const snapshot = yield* findSnapshot(yield* SynchronizedRef.get(state), owner, threadId);
434
+
435
+ return ThreadExport.make({
436
+ format: "effect-agent/ephemeral-thread@1",
437
+ exportedAt: DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis)),
438
+ snapshot,
439
+ });
440
+ }),
441
+ });
442
+
443
+ return view(root);
444
+ });
446
445
 
447
- return view(root);
448
- }),
449
- );
446
+ export const layerMemory = Layer.effect(Store, makeMemoryStore);