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

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 (177) hide show
  1. package/dist/{Admin-BHmp2V9p.d.mts → Admin-DTDihBra.d.mts} +50 -13
  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-BJbuIqQq.mjs} +237 -114
  8. package/dist/DurableAgentRuntime-BJbuIqQq.mjs.map +1 -0
  9. package/dist/{EventSource-C9aaJaXT.d.mts → EventSource-Cc58uEso.d.mts} +2 -2
  10. package/dist/InMemory.d.mts +2 -2
  11. package/dist/{MessageDelivery-BGDm-c46.d.mts → MessageDelivery-ClHg7c0O.d.mts} +42 -42
  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-CjcX1OP0.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-4ZATcVLB.mjs → RunContinuation-CWHuciup.mjs} +74 -40
  18. package/dist/RunContinuation-CWHuciup.mjs.map +1 -0
  19. package/dist/{RunContinuation-CTJ1jGrO.d.mts → RunContinuation-DSnUTSSb.d.mts} +11 -5
  20. package/dist/{RunJournal-CNZqA3Ge.mjs → RunJournal-DGblbFas.mjs} +86 -81
  21. package/dist/RunJournal-DGblbFas.mjs.map +1 -0
  22. package/dist/{RunStorage-BHjuuERI.mjs → RunStorage-BF2YgWkg.mjs} +44 -33
  23. package/dist/RunStorage-BF2YgWkg.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-DuC_PcGx.d.mts} +2 -2
  30. package/dist/{SubscriptionInput-BUoXv-_K.d.mts → SubscriptionInput-B1IeAEDi.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-CMgzttvr.d.mts → ThreadImport-D_Biid6w.d.mts} +42 -42
  34. package/dist/{ThreadImport-CodYoJoa.mjs → ThreadImport-ZgWxf7bB.mjs} +8 -8
  35. package/dist/{ThreadImport-CodYoJoa.mjs.map → ThreadImport-ZgWxf7bB.mjs.map} +1 -1
  36. package/dist/{ThreadStore-59uDGXul.mjs → ThreadStore-BC4V-mY-.mjs} +42 -23
  37. package/dist/ThreadStore-BC4V-mY-.mjs.map +1 -0
  38. package/dist/{ThreadTransfer-3jigUl3g.mjs → ThreadTransfer-S7FnTRHt.mjs} +4 -4
  39. package/dist/{ThreadTransfer-3jigUl3g.mjs.map → ThreadTransfer-S7FnTRHt.mjs.map} +1 -1
  40. package/dist/{WorkerAdmission-DDYJdOsU.mjs → WorkerAdmission-C47Vy_cK.mjs} +5 -5
  41. package/dist/{WorkerAdmission-DDYJdOsU.mjs.map → WorkerAdmission-C47Vy_cK.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 +68 -68
  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-DvTEq2RC.d.mts} +2 -2
  151. package/package.json +1 -1
  152. package/src/core/Thread.ts +143 -146
  153. package/src/durable/DurableAgentRuntime.ts +549 -260
  154. package/src/durable/RunContinuation.ts +115 -64
  155. package/src/durable/RunJournal.ts +107 -112
  156. package/src/durable/RunStorage.ts +90 -61
  157. package/src/durable/SqlMemoryStore.ts +8 -6
  158. package/src/durable/SubmissionLedger.ts +15 -0
  159. package/src/durable/ThreadStore.ts +48 -26
  160. package/src/durable/ThreadWork.ts +10 -0
  161. package/src/durable/WakeScheduler.ts +34 -66
  162. package/src/durable/internal/initial-context.ts +17 -2
  163. package/src/durable/internal/prompt-history-cache.ts +13 -8
  164. package/src/durable/internal/usage-totals.ts +28 -31
  165. package/src/engine/MessagingHost.ts +4 -2
  166. package/src/engine/ThreadHistory.ts +47 -48
  167. package/src/engine/internal/agent-runtime.ts +234 -202
  168. package/src/engine/internal/output-contract.ts +15 -15
  169. package/src/engine/internal/primitive-delta.ts +2 -3
  170. package/src/engine/internal/tool-telemetry.ts +3 -5
  171. package/dist/AgentRuntime-B6qZlD3f.mjs.map +0 -1
  172. package/dist/DurableAgentRuntime-CBBjRNJN.mjs.map +0 -1
  173. package/dist/MessagingHost-CRUK4JBi.mjs.map +0 -1
  174. package/dist/RunContinuation-4ZATcVLB.mjs.map +0 -1
  175. package/dist/RunJournal-CNZqA3Ge.mjs.map +0 -1
  176. package/dist/RunStorage-BHjuuERI.mjs.map +0 -1
  177. package/dist/ThreadStore-59uDGXul.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { RunId, ThreadId, ToolCallId } from "../core/Identifiers.mjs";
3
- import { Tt as ToolCallUnknown, U as PersistedJson, _t as SubmissionSettledRecord, bt as ToolApprovalDecided, f as CanonicalSequence, ft as SubagentJoined, g as DeclaredToolCall, ht as SubagentStarted, mt as SubagentRequested, pt as SubagentLineageRecorded, t as AbortRequested, xt as ToolApprovalRequested } from "../Records-BiuJDWNe.mjs";
3
+ import { Tt as ToolCallUnknown, U as PersistedJson, _t as SubmissionSettledRecord, bt as ToolApprovalDecided, f as CanonicalSequence, ft as SubagentJoined, g as DeclaredToolCall, ht as SubagentStarted, mt as SubagentRequested, pt as SubagentLineageRecorded, t as AbortRequested, xt as ToolApprovalRequested } from "../Records-DzL4Kbtw.mjs";
4
4
  import { Schema } from "effect";
5
5
  //#region src/durable/ThreadProjection.ts
6
6
  var ThreadProjection_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- import { Xr as AppendResult, Yr as AppendRequest } from "../Admin-BHmp2V9p.mjs";
1
+ import { Xr as AppendResult, Yr as AppendRequest } from "../Admin-DTDihBra.mjs";
2
2
  import { Context, Effect, Layer, Option, Schema } from "effect";
3
3
  declare namespace ThreadProjectionMaintenance_d_exports {
4
4
  export { ThreadProjectionError, ThreadProjectionMaintenance, ThreadProjectionMaintenanceService, drainDue };
@@ -1,2 +1,2 @@
1
- import { Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ii as ThreadRead, Ji as ThreadTail, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Ri as ThreadReader, Vi as ThreadRunInputRequest, Yi as ThreadTailRequest, ia as getRunInput, ki as ThreadIdentity, oa as readWorkerState, ra as getRecord, ta as ThreadWorkerStateRequest, xi as ThreadExport, zi as ThreadRecordRequest } from "../Admin-BHmp2V9p.mjs";
1
+ import { Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ii as ThreadRead, Ji as ThreadTail, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Ri as ThreadReader, Vi as ThreadRunInputRequest, Yi as ThreadTailRequest, ia as getRunInput, ki as ThreadIdentity, oa as readWorkerState, ra as getRecord, ta as ThreadWorkerStateRequest, xi as ThreadExport, zi as ThreadRecordRequest } from "../Admin-DTDihBra.mjs";
2
2
  export { ThreadExport, ThreadExportRequest, ThreadIdentity, ThreadIdentityRequest, ThreadNotMaterialized, ThreadObservation, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadRunInputRequest, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadWorkerStateRequest, getRecord, getRunInput, readWorkerState };
@@ -1,2 +1,2 @@
1
- import { $ as ThreadTailRequest, B as ThreadPromptRead, E as ThreadExport, F as ThreadIdentityRequest, H as ThreadReadRequest, K as ThreadRunInputRequest, L as ThreadNotMaterialized, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, it as ThreadWorkerStateRequest, j as ThreadExportRequest, lt as readWorkerState, ot as getRecord, st as getRunInput } from "../ThreadStore-59uDGXul.mjs";
1
+ import { $ as ThreadTailRequest, B as ThreadPromptRead, E as ThreadExport, F as ThreadIdentityRequest, H as ThreadReadRequest, K as ThreadRunInputRequest, L as ThreadNotMaterialized, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, it as ThreadWorkerStateRequest, j as ThreadExportRequest, lt as readWorkerState, ot as getRecord, st as getRunInput } from "../ThreadStore-BC4V-mY-.mjs";
2
2
  export { ThreadExport, ThreadExportRequest, ThreadIdentity, ThreadIdentityRequest, ThreadNotMaterialized, ThreadObservation, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadRunInputRequest, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadWorkerStateRequest, getRecord, getRunInput, readWorkerState };
@@ -1,3 +1,3 @@
1
1
  import { W as PROMPT_EVIDENCE_TAGS } from "../Records-BTnGRdcf.mjs";
2
- import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Bi as ThreadResolutionFact, Ci as ThreadExportCursor, Di as ThreadExportSnapshot, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Hi as ThreadSelection, Ii as ThreadRead, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Oi as ThreadExportSource, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Qr as CommitBatch, Ri as ThreadReader, Si as ThreadExportBatch, Ti as ThreadExportRejected, Ui as ThreadStore, Vi as ThreadRunInputRequest, Wi as ThreadStoreDiagnostic, Xi as ThreadVerificationRequest, Xr as AppendResult, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, _i as ThreadApprovalFact, aa as makeTransferFactCheck, ai as MAX_THREAD_EXPORT_CURSOR_CHARS, bi as ThreadCommands, ca as transferPageFits, ci as PreparedAppend, di as PromptCheckpointRead, ea as ThreadWorkerSeal, ei as ExecutionRead, fi as PromptCheckpoints, gi as ThreadAdmission, hi as ThreadAbortFact, ia as getRunInput, ii as MAX_PROMPT_CHECKPOINT_RUNS, ji as ThreadMaterialization, ki as ThreadIdentity, li as PromptCheckpoint, mi as SelectedThreadRead, na as canonicalBatchFitsTransfer, ni as LoadCheckpointRequest, oa as readWorkerState, oi as MAX_THREAD_EXPORT_PAGE_BYTES, pi as SaveCheckpointRequest, ra as getRecord, ri as MAX_PROMPT_CHECKPOINT_BYTES, sa as streamExport, si as MAX_THREAD_EXPORT_PAGE_RECORDS, ta as ThreadWorkerStateRequest, ti as ExecutionUpdate, ui as PromptCheckpointHead, vi as ThreadCheckpoint, wi as ThreadExportRecord, xi as ThreadExport, yi as ThreadCheckpoints, zi as ThreadRecordRequest } from "../Admin-BHmp2V9p.mjs";
2
+ import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Bi as ThreadResolutionFact, Ci as ThreadExportCursor, Di as ThreadExportSnapshot, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Hi as ThreadSelection, Ii as ThreadRead, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Oi as ThreadExportSource, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Qr as CommitBatch, Ri as ThreadReader, Si as ThreadExportBatch, Ti as ThreadExportRejected, Ui as ThreadStore, Vi as ThreadRunInputRequest, Wi as ThreadStoreDiagnostic, Xi as ThreadVerificationRequest, Xr as AppendResult, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, _i as ThreadApprovalFact, aa as makeTransferFactCheck, ai as MAX_THREAD_EXPORT_CURSOR_CHARS, bi as ThreadCommands, ca as transferPageFits, ci as PreparedAppend, di as PromptCheckpointRead, ea as ThreadWorkerSeal, ei as ExecutionRead, fi as PromptCheckpoints, gi as ThreadAdmission, hi as ThreadAbortFact, ia as getRunInput, ii as MAX_PROMPT_CHECKPOINT_RUNS, ji as ThreadMaterialization, ki as ThreadIdentity, li as PromptCheckpoint, mi as SelectedThreadRead, na as canonicalBatchFitsTransfer, ni as LoadCheckpointRequest, oa as readWorkerState, oi as MAX_THREAD_EXPORT_PAGE_BYTES, pi as SaveCheckpointRequest, ra as getRecord, ri as MAX_PROMPT_CHECKPOINT_BYTES, sa as streamExport, si as MAX_THREAD_EXPORT_PAGE_RECORDS, ta as ThreadWorkerStateRequest, ti as ExecutionUpdate, ui as PromptCheckpointHead, vi as ThreadCheckpoint, wi as ThreadExportRecord, xi as ThreadExport, yi as ThreadCheckpoints, zi as ThreadRecordRequest } from "../Admin-DTDihBra.mjs";
3
3
  export { AppendConflict, AppendRequest, AppendResult, CheckpointRejected, CommitBatch, ExecutionCheckpoint, ExecutionRead, ExecutionUpdate, LoadCheckpointRequest, MAX_PROMPT_CHECKPOINT_BYTES, MAX_PROMPT_CHECKPOINT_RUNS, MAX_THREAD_EXPORT_CURSOR_CHARS, MAX_THREAD_EXPORT_PAGE_BYTES, MAX_THREAD_EXPORT_PAGE_RECORDS, PROMPT_EVIDENCE_TAGS, PreparedAppend, PromptCheckpoint, PromptCheckpointHead, PromptCheckpointRead, PromptCheckpoints, SaveCheckpointRequest, SelectedThreadRead, ThreadAbortFact, ThreadAdmission, ThreadApprovalFact, ThreadCheckpoint, ThreadCheckpoints, ThreadCommands, ThreadExport, ThreadExportBatch, ThreadExportCursor, ThreadExportRecord, ThreadExportRejected, ThreadExportRequest, ThreadExportSnapshot, ThreadExportSource, ThreadIdentity, ThreadIdentityRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadPeerCountRequest, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadResolutionFact, ThreadRunInputRequest, ThreadSelection, ThreadStore, ThreadStoreDiagnostic, ThreadStoreError, ThreadStoreFailure, ThreadTail, ThreadTailRequest, ThreadVerificationRequest, ThreadVerificationStorage, ThreadWorkerCapacity, ThreadWorkerCapacityRequest, ThreadWorkerSeal, ThreadWorkerStateRequest, canonicalBatchFitsTransfer, getRecord, getRunInput, makeTransferFactCheck, readWorkerState, streamExport, transferPageFits };
@@ -1,3 +1,3 @@
1
- import { V as PROMPT_EVIDENCE_TAGS } from "../Records-BiuJDWNe.mjs";
2
- import { $ as ThreadTailRequest, A as ThreadExportRejected, B as ThreadPromptRead, C as ThreadApprovalFact, D as ThreadExportBatch, E as ThreadExport, F as ThreadIdentityRequest, G as ThreadResolutionFact, H as ThreadReadRequest, I as ThreadMaterialization, J as ThreadStore, K as ThreadRunInputRequest, L as ThreadNotMaterialized, M as ThreadExportSnapshot, N as ThreadExportSource, O as ThreadExportCursor, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, S as ThreadAdmission, T as ThreadCommands, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, Y as ThreadStoreDiagnostic, _ as PromptCheckpointHead, a as CommitBatch, at as canonicalBatchFitsTransfer, b as SelectedThreadRead, c as ExecutionUpdate, ct as makeTransferFactCheck, d as MAX_PROMPT_CHECKPOINT_RUNS, dt as transferPageFits, et as ThreadVerificationRequest, f as MAX_THREAD_EXPORT_CURSOR_CHARS, g as PromptCheckpoint, h as PreparedAppend, i as CheckpointRejected, it as ThreadWorkerStateRequest, j as ThreadExportRequest, k as ThreadExportRecord, l as LoadCheckpointRequest, lt as readWorkerState, m as MAX_THREAD_EXPORT_PAGE_RECORDS, n as AppendRequest, nt as ThreadWorkerCapacityRequest, o as ExecutionCheckpoint, ot as getRecord, p as MAX_THREAD_EXPORT_PAGE_BYTES, q as ThreadSelection, r as AppendResult, rt as ThreadWorkerSeal, s as ExecutionRead, st as getRunInput, t as AppendConflict, tt as ThreadWorkerCapacity, u as MAX_PROMPT_CHECKPOINT_BYTES, ut as streamExport, v as PromptCheckpointRead, w as ThreadCheckpoint, x as ThreadAbortFact, y as SaveCheckpointRequest, z as ThreadPeerCountRequest } from "../ThreadStore-59uDGXul.mjs";
1
+ import { V as PROMPT_EVIDENCE_TAGS } from "../Records-DzL4Kbtw.mjs";
2
+ import { $ as ThreadTailRequest, A as ThreadExportRejected, B as ThreadPromptRead, C as ThreadApprovalFact, D as ThreadExportBatch, E as ThreadExport, F as ThreadIdentityRequest, G as ThreadResolutionFact, H as ThreadReadRequest, I as ThreadMaterialization, J as ThreadStore, K as ThreadRunInputRequest, L as ThreadNotMaterialized, M as ThreadExportSnapshot, N as ThreadExportSource, O as ThreadExportCursor, P as ThreadIdentity, Q as ThreadTail, R as ThreadObservation, S as ThreadAdmission, T as ThreadCommands, U as ThreadReader, V as ThreadRead, W as ThreadRecordRequest, X as ThreadStoreError, Y as ThreadStoreDiagnostic, _ as PromptCheckpointHead, a as CommitBatch, at as canonicalBatchFitsTransfer, b as SelectedThreadRead, c as ExecutionUpdate, ct as makeTransferFactCheck, d as MAX_PROMPT_CHECKPOINT_RUNS, dt as transferPageFits, et as ThreadVerificationRequest, f as MAX_THREAD_EXPORT_CURSOR_CHARS, g as PromptCheckpoint, h as PreparedAppend, i as CheckpointRejected, it as ThreadWorkerStateRequest, j as ThreadExportRequest, k as ThreadExportRecord, l as LoadCheckpointRequest, lt as readWorkerState, m as MAX_THREAD_EXPORT_PAGE_RECORDS, n as AppendRequest, nt as ThreadWorkerCapacityRequest, o as ExecutionCheckpoint, ot as getRecord, p as MAX_THREAD_EXPORT_PAGE_BYTES, q as ThreadSelection, r as AppendResult, rt as ThreadWorkerSeal, s as ExecutionRead, st as getRunInput, t as AppendConflict, tt as ThreadWorkerCapacity, u as MAX_PROMPT_CHECKPOINT_BYTES, ut as streamExport, v as PromptCheckpointRead, w as ThreadCheckpoint, x as ThreadAbortFact, y as SaveCheckpointRequest, z as ThreadPeerCountRequest } from "../ThreadStore-BC4V-mY-.mjs";
3
3
  export { AppendConflict, AppendRequest, AppendResult, CheckpointRejected, CommitBatch, ExecutionCheckpoint, ExecutionRead, ExecutionUpdate, LoadCheckpointRequest, MAX_PROMPT_CHECKPOINT_BYTES, MAX_PROMPT_CHECKPOINT_RUNS, MAX_THREAD_EXPORT_CURSOR_CHARS, MAX_THREAD_EXPORT_PAGE_BYTES, MAX_THREAD_EXPORT_PAGE_RECORDS, PROMPT_EVIDENCE_TAGS, PreparedAppend, PromptCheckpoint, PromptCheckpointHead, PromptCheckpointRead, SaveCheckpointRequest, SelectedThreadRead, ThreadAbortFact, ThreadAdmission, ThreadApprovalFact, ThreadCheckpoint, ThreadCommands, ThreadExport, ThreadExportBatch, ThreadExportCursor, ThreadExportRecord, ThreadExportRejected, ThreadExportRequest, ThreadExportSnapshot, ThreadExportSource, ThreadIdentity, ThreadIdentityRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadPeerCountRequest, ThreadPromptRead, ThreadRead, ThreadReadRequest, ThreadReader, ThreadRecordRequest, ThreadResolutionFact, ThreadRunInputRequest, ThreadSelection, ThreadStore, ThreadStoreDiagnostic, ThreadStoreError, ThreadTail, ThreadTailRequest, ThreadVerificationRequest, ThreadWorkerCapacity, ThreadWorkerCapacityRequest, ThreadWorkerSeal, ThreadWorkerStateRequest, canonicalBatchFitsTransfer, getRecord, getRunInput, makeTransferFactCheck, readWorkerState, streamExport, transferPageFits };
@@ -1,5 +1,5 @@
1
1
  import { Y as PromptRecordEnvelope, d as CanonicalRecordEnvelope } from "../Records-BTnGRdcf.mjs";
2
- import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Ca as ThreadWorkStorage, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Ti as ThreadExportRejected, Ui as ThreadStore, Xr as AppendResult, Xt as OwnershipLost, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, ei as ExecutionRead, fi as PromptCheckpoints, ji as ThreadMaterialization, ki as ThreadIdentity, no as ThreadArchiveStorage, uo as LifecyclePublicationStorage, xi as ThreadExport, yi as ThreadCheckpoints } from "../Admin-BHmp2V9p.mjs";
2
+ import { $i as ThreadWorkerCapacityRequest, $r as ExecutionCheckpoint, Ai as ThreadIdentityRequest, Ei as ThreadExportRequest, Fi as ThreadPromptRead, Gi as ThreadStoreError, Ji as ThreadTail, Jr as AppendConflict, Ki as ThreadStoreFailure, Li as ThreadReadRequest, Mi as ThreadNotMaterialized, Ni as ThreadObservation, Pi as ThreadPeerCountRequest, Qi as ThreadWorkerCapacity, Ti as ThreadExportRejected, Ui as ThreadStore, Xr as AppendResult, Xt as OwnershipLost, Yi as ThreadTailRequest, Yr as AppendRequest, Zi as ThreadVerificationStorage, Zr as CheckpointRejected, do as LifecyclePublicationStorage, ei as ExecutionRead, fi as PromptCheckpoints, ji as ThreadMaterialization, ki as ThreadIdentity, ro as ThreadArchiveStorage, wa as ThreadWorkStorage, xi as ThreadExport, yi as ThreadCheckpoints } from "../Admin-DTDihBra.mjs";
3
3
  import { Effect, Option, Schema, Stream } from "effect";
4
4
  //#region src/durable/ThreadStoreConformance.d.ts
5
5
  declare const ThreadStoreConformanceViolation_base: Schema.Class<ThreadStoreConformanceViolation, Schema.TaggedStruct<"ThreadStoreConformanceViolation", {
@@ -2,10 +2,10 @@ import { AgentId, DelegationId, ReceiptId, RunId, SettlementId, SubmissionId, Th
2
2
  import { AgentPolicy } from "../core/AgentPolicy.mjs";
3
3
  import { IdempotencyKey } from "../core/Receipt.mjs";
4
4
  import { SubagentDelegationCaps, SubagentGrant, SubagentReservationAmounts } from "../core/SubagentContract.mjs";
5
- import { Ft as WorkerInputRequested, H as PeerMessagePrepared, Lt as WorkerOriginRecorded, Nt as WorkerInputCompleted, Vt as WorkerStopRequested, W as ProducerId, X as RecordEnvelope, Z as RecordId, b as Digest, c as CanonicalBatch, f as CanonicalSequence, i as BatchId, kt as UserInputRecorded, vt as SubtreeBudgetReserved, y as DeploymentId } from "../Records-BiuJDWNe.mjs";
6
- import { D as subagentLineageRecordId, Y as workerOriginRecordId } from "../RunJournal-CNZqA3Ge.mjs";
7
- import { $ as ThreadTailRequest, F as ThreadIdentityRequest, I as ThreadMaterialization, J as ThreadStore, L as ThreadNotMaterialized, R as ThreadObservation, U as ThreadReader, V as ThreadRead, X as ThreadStoreError, i as CheckpointRejected, j as ThreadExportRequest, l as LoadCheckpointRequest, lt as readWorkerState, n as AppendRequest, ot as getRecord, st as getRunInput, t as AppendConflict, w as ThreadCheckpoint, y as SaveCheckpointRequest } from "../ThreadStore-59uDGXul.mjs";
8
- import { a as canonicalRecordBytes } from "../RunContinuation-4ZATcVLB.mjs";
5
+ import { Ft as WorkerInputRequested, H as PeerMessagePrepared, Lt as WorkerOriginRecorded, Nt as WorkerInputCompleted, Vt as WorkerStopRequested, W as ProducerId, X as RecordEnvelope, Z as RecordId, b as Digest, c as CanonicalBatch, f as CanonicalSequence, i as BatchId, kt as UserInputRecorded, vt as SubtreeBudgetReserved, y as DeploymentId } from "../Records-DzL4Kbtw.mjs";
6
+ import { O as subagentLineageRecordId, X as workerOriginRecordId } from "../RunJournal-DGblbFas.mjs";
7
+ import { $ as ThreadTailRequest, F as ThreadIdentityRequest, I as ThreadMaterialization, J as ThreadStore, L as ThreadNotMaterialized, R as ThreadObservation, U as ThreadReader, V as ThreadRead, X as ThreadStoreError, i as CheckpointRejected, j as ThreadExportRequest, l as LoadCheckpointRequest, lt as readWorkerState, n as AppendRequest, ot as getRecord, st as getRunInput, t as AppendConflict, w as ThreadCheckpoint, y as SaveCheckpointRequest } from "../ThreadStore-BC4V-mY-.mjs";
8
+ import { a as canonicalRecordBytes } from "../RunContinuation-CWHuciup.mjs";
9
9
  import { DateTime, Effect, Option, Schema, Stream } from "effect";
10
10
  //#region src/durable/ThreadStoreConformance.ts
11
11
  /** A ThreadStore contract invariant that an adapter under test violated. */
@@ -1,6 +1,6 @@
1
1
  import { u as ThreadId } from "../Identifiers-CN2s30fF.mjs";
2
2
  import { d as CanonicalRecordEnvelope, et as RecordId } from "../Records-BTnGRdcf.mjs";
3
- import { Ei as ThreadExportRequest, Gi as ThreadStoreError, Mi as ThreadNotMaterialized, Ti as ThreadExportRejected, xi as ThreadExport } from "../Admin-BHmp2V9p.mjs";
3
+ import { Ei as ThreadExportRequest, Gi as ThreadStoreError, Mi as ThreadNotMaterialized, Ti as ThreadExportRejected, xi as ThreadExport } from "../Admin-DTDihBra.mjs";
4
4
  import { Context, Effect, Schema } from "effect";
5
5
  declare namespace ThreadTransfer_d_exports {
6
6
  export { ThreadExporterReader, TransferFacts, TransferManifest, TransferSection, checkExportSource, checkTransferPageBytes, exportThreadPage, sameTransferManifest, transferDependencies, transferSections };
@@ -1,2 +1,2 @@
1
- import { a as checkTransferPageBytes, c as transferDependencies, i as checkExportSource, l as transferSections, o as exportThreadPage, r as TransferManifest, s as sameTransferManifest, t as ThreadExporterReader } from "../ThreadTransfer-3jigUl3g.mjs";
1
+ import { a as checkTransferPageBytes, c as transferDependencies, i as checkExportSource, l as transferSections, o as exportThreadPage, r as TransferManifest, s as sameTransferManifest, t as ThreadExporterReader } from "../ThreadTransfer-S7FnTRHt.mjs";
2
2
  export { ThreadExporterReader, TransferManifest, checkExportSource, checkTransferPageBytes, exportThreadPage, sameTransferManifest, transferDependencies, transferSections };
@@ -1,2 +1,2 @@
1
- import { Aa as WorkOwner, Ba as operationEvidence, Ca as ThreadWorkStorage, Da as WorkIndexChange, Ea as WorkDiscoveryUnavailable, Fa as admissionWork, Ha as validateWorkPage, Ia as advanceWorkEntry, La as decodeWorkCursor, Ma as WorkThreadsPage, Na as WorkThreadsRequest, Oa as WorkIndexProgress, Pa as WorkerReportingMode, Ra as deliveryPredecessor, Sa as ThreadWorkRequest, Ta as WORK_INDEX_VERSION, Ua as workId, Va as resolveWorkEvidence, Wa as workIndexChanges, _a as MAX_WORK_REBUILD_RECORDS, ba as ThreadWorkEntry, da as MAX_RECOVERY_WORK_ITEMS, fa as MAX_WORK_CURSOR_CHARS, ga as MAX_WORK_REBUILD_BYTES, ha as MAX_WORK_PAGE_ENTRIES, ja as WorkStateReference, ka as WorkIndexRebuildRequest, la as CanonicalWorkEntry, ma as MAX_WORK_PAGE_BYTES, pa as MAX_WORK_ENTRY_BYTES, ua as MAX_RECOVERY_PAGES, va as ThreadWorkCursor, xa as ThreadWorkPage, ya as ThreadWorkDiscovery, za as encodeWorkCursor } from "../Admin-BHmp2V9p.mjs";
2
- export { CanonicalWorkEntry, MAX_RECOVERY_PAGES, MAX_RECOVERY_WORK_ITEMS, MAX_WORK_CURSOR_CHARS, MAX_WORK_ENTRY_BYTES, MAX_WORK_PAGE_BYTES, MAX_WORK_PAGE_ENTRIES, MAX_WORK_REBUILD_BYTES, MAX_WORK_REBUILD_RECORDS, ThreadWorkCursor, ThreadWorkDiscovery, ThreadWorkEntry, ThreadWorkPage, ThreadWorkRequest, ThreadWorkStorage, WORK_INDEX_VERSION, WorkDiscoveryUnavailable, WorkIndexChange, WorkIndexProgress, WorkIndexRebuildRequest, WorkOwner, WorkStateReference, WorkThreadsPage, WorkThreadsRequest, WorkerReportingMode, admissionWork, advanceWorkEntry, decodeWorkCursor, deliveryPredecessor, encodeWorkCursor, operationEvidence, resolveWorkEvidence, validateWorkPage, workId, workIndexChanges };
1
+ import { Aa as WorkIndexRebuildRequest, Ba as encodeWorkCursor, Ca as ThreadWorkRequest, Da as WorkDiscoveryUnavailable, Ea as WORK_INDEX_VERSION, Fa as WorkerReportingMode, Ga as workIndexChanges, Ha as resolveWorkEvidence, Ia as admissionWork, La as advanceWorkEntry, Ma as WorkStateReference, Na as WorkThreadsPage, Oa as WorkIndexChange, Pa as WorkThreadsRequest, Ra as decodeWorkCursor, Sa as ThreadWorkPage, Ua as validateWorkPage, Va as operationEvidence, Wa as workId, _a as MAX_WORK_REBUILD_BYTES, ba as ThreadWorkDiscovery, da as MAX_RECOVERY_PAGES, fa as MAX_RECOVERY_WORK_ITEMS, ga as MAX_WORK_PAGE_ENTRIES, ha as MAX_WORK_PAGE_BYTES, ja as WorkOwner, ka as WorkIndexProgress, la as CanonicalWorkEntry, ma as MAX_WORK_ENTRY_BYTES, pa as MAX_WORK_CURSOR_CHARS, ua as FreshAdmissionWork, va as MAX_WORK_REBUILD_RECORDS, wa as ThreadWorkStorage, xa as ThreadWorkEntry, ya as ThreadWorkCursor, za as deliveryPredecessor } from "../Admin-DTDihBra.mjs";
2
+ export { CanonicalWorkEntry, FreshAdmissionWork, MAX_RECOVERY_PAGES, MAX_RECOVERY_WORK_ITEMS, MAX_WORK_CURSOR_CHARS, MAX_WORK_ENTRY_BYTES, MAX_WORK_PAGE_BYTES, MAX_WORK_PAGE_ENTRIES, MAX_WORK_REBUILD_BYTES, MAX_WORK_REBUILD_RECORDS, ThreadWorkCursor, ThreadWorkDiscovery, ThreadWorkEntry, ThreadWorkPage, ThreadWorkRequest, ThreadWorkStorage, WORK_INDEX_VERSION, WorkDiscoveryUnavailable, WorkIndexChange, WorkIndexProgress, WorkIndexRebuildRequest, WorkOwner, WorkStateReference, WorkThreadsPage, WorkThreadsRequest, WorkerReportingMode, admissionWork, advanceWorkEntry, decodeWorkCursor, deliveryPredecessor, encodeWorkCursor, operationEvidence, resolveWorkEvidence, validateWorkPage, workId, workIndexChanges };
@@ -2,15 +2,16 @@ import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { ReceiptId, RunId, SubmissionId, ThreadId, ToolCallId } from "../core/Identifiers.mjs";
3
3
  import { n as utf8ByteLength } from "../utf8-B5pAmhTo.mjs";
4
4
  import { IdempotencyKey, QueueSequence } from "../core/Receipt.mjs";
5
- import { Z as RecordId, b as Digest, f as CanonicalSequence } from "../Records-BiuJDWNe.mjs";
6
- import { s as digestJson } from "../Digest-EpeqWEdv.mjs";
7
- import { x as runIdForSubmission } from "../RunJournal-CNZqA3Ge.mjs";
8
- import { J as ThreadStore, U as ThreadReader, X as ThreadStoreError } from "../ThreadStore-59uDGXul.mjs";
9
- import { a as canonicalRecordBytes, x as resolveEvidence } from "../RunContinuation-4ZATcVLB.mjs";
5
+ import { Z as RecordId, b as Digest, f as CanonicalSequence } from "../Records-DzL4Kbtw.mjs";
6
+ import { s as digestJson } from "../Digest-C3EODOee.mjs";
7
+ import { S as runIdForSubmission } from "../RunJournal-DGblbFas.mjs";
8
+ import { J as ThreadStore, U as ThreadReader, X as ThreadStoreError } from "../ThreadStore-BC4V-mY-.mjs";
9
+ import { a as canonicalRecordBytes, x as resolveEvidence } from "../RunContinuation-CWHuciup.mjs";
10
10
  import { Context, Effect, Layer, Option, Schema, Stream } from "effect";
11
11
  //#region src/durable/ThreadWork.ts
12
12
  var ThreadWork_exports = /* @__PURE__ */ __exportAll({
13
13
  CanonicalWorkEntry: () => CanonicalWorkEntry,
14
+ FreshAdmissionWork: () => FreshAdmissionWork,
14
15
  MAX_RECOVERY_PAGES: () => 8,
15
16
  MAX_RECOVERY_WORK_ITEMS: () => 32,
16
17
  MAX_WORK_CURSOR_CHARS: () => MAX_WORK_CURSOR_CHARS,
@@ -180,6 +181,11 @@ const ThreadWorkCursor = Schema.Struct({
180
181
  ]),
181
182
  after: Schema.optionalKey(WorkId)
182
183
  });
184
+ /** Local snapshot request; it grants no claim or dispatch authority. */
185
+ const FreshAdmissionWork = Schema.Struct({
186
+ threadId: ThreadId,
187
+ submissionId: SubmissionId
188
+ });
183
189
  const WorkThreadsRequest = Schema.Struct({
184
190
  afterThreadId: Schema.optionalKey(ThreadId),
185
191
  limit: Schema.Int.check(Schema.isBetween({
@@ -505,6 +511,6 @@ const advanceWorkEntry = (previous, next) => previous === void 0 ? next : {
505
511
  originRecordId: previous.originRecordId
506
512
  };
507
513
  //#endregion
508
- export { CanonicalWorkEntry, MAX_RECOVERY_PAGES, MAX_RECOVERY_WORK_ITEMS, MAX_WORK_CURSOR_CHARS, MAX_WORK_ENTRY_BYTES, MAX_WORK_PAGE_BYTES, MAX_WORK_PAGE_ENTRIES, MAX_WORK_REBUILD_BYTES, MAX_WORK_REBUILD_RECORDS, ThreadWorkCursor, ThreadWorkDiscovery, ThreadWorkEntry, ThreadWorkPage, ThreadWorkRequest, WORK_INDEX_VERSION, WorkDiscoveryUnavailable, WorkIndexProgress, WorkIndexRebuildRequest, WorkOwner, WorkStateReference, WorkThreadsPage, WorkThreadsRequest, admissionWork, advanceWorkEntry, decodeWorkCursor, deliveryPredecessor, encodeWorkCursor, operationEvidence, resolveWorkEvidence, ThreadWork_exports as t, validateWorkPage, workId, workIndexChanges };
514
+ export { CanonicalWorkEntry, FreshAdmissionWork, MAX_RECOVERY_PAGES, MAX_RECOVERY_WORK_ITEMS, MAX_WORK_CURSOR_CHARS, MAX_WORK_ENTRY_BYTES, MAX_WORK_PAGE_BYTES, MAX_WORK_PAGE_ENTRIES, MAX_WORK_REBUILD_BYTES, MAX_WORK_REBUILD_RECORDS, ThreadWorkCursor, ThreadWorkDiscovery, ThreadWorkEntry, ThreadWorkPage, ThreadWorkRequest, WORK_INDEX_VERSION, WorkDiscoveryUnavailable, WorkIndexProgress, WorkIndexRebuildRequest, WorkOwner, WorkStateReference, WorkThreadsPage, WorkThreadsRequest, admissionWork, advanceWorkEntry, decodeWorkCursor, deliveryPredecessor, encodeWorkCursor, operationEvidence, resolveWorkEvidence, ThreadWork_exports as t, validateWorkPage, workId, workIndexChanges };
509
515
 
510
516
  //# sourceMappingURL=ThreadWork.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadWork.mjs","names":[],"sources":["../../src/durable/ThreadWork.ts"],"sourcesContent":["import { Context, Effect, Layer, Option, Schema, Stream } from \"effect\";\n\nimport { ReceiptId, RunId, SubmissionId, ThreadId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { IdempotencyKey, QueueSequence } from \"../core/Receipt.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport {\n CanonicalSequence,\n Digest,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n RecordId,\n type CanonicalRecordEnvelope,\n type ModelResponseRecorded,\n} from \"./Records.ts\";\nimport { canonicalRecordBytes, resolveEvidence } from \"./RunContinuation.ts\";\nimport { runIdForSubmission } from \"./RunJournal.ts\";\nimport type { SubmissionWorkItem } from \"./SubmissionLedger.ts\";\nimport { ThreadReader, ThreadStore, ThreadStoreError } from \"./ThreadStore.ts\";\n\nexport const WORK_INDEX_VERSION = 3;\nexport const MAX_WORK_PAGE_ENTRIES = 128;\nexport const MAX_WORK_ENTRY_BYTES = 8 * 1024;\nexport const MAX_WORK_PAGE_BYTES = MAX_WORK_PAGE_ENTRIES * MAX_WORK_ENTRY_BYTES;\nexport const MAX_WORK_REBUILD_RECORDS = 256;\nexport const MAX_WORK_REBUILD_BYTES = 32 * 1024 * 1024;\nexport const MAX_RECOVERY_WORK_ITEMS = 32;\nexport const MAX_RECOVERY_PAGES = 8;\nexport const MAX_WORK_CURSOR_CHARS = 32 * 1024;\n\nconst Cursor = Schema.NonEmptyString.check(Schema.isMaxLength(MAX_WORK_CURSOR_CHARS));\nconst WorkId = Schema.NonEmptyString.check(Schema.isMaxLength(4096));\n\n/** Stable logical owners. Finding an owner does not acquire its lease, grant, or authority. */\nexport const WorkOwner = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Admission\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Operation\"), runId: RunId, toolCallId: ToolCallId }),\n Schema.Struct({\n _tag: Schema.Literal(\"Child\"),\n runId: RunId,\n toolCallId: ToolCallId,\n childThreadId: ThreadId,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerInput\"),\n messageId: IdempotencyKey,\n workerThreadId: ThreadId,\n update: Schema.Boolean,\n }),\n Schema.Struct({ _tag: Schema.Literal(\"Report\"), runId: RunId }),\n Schema.Struct({ _tag: Schema.Literal(\"WorkerEffects\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Delivery\"), messageId: IdempotencyKey }),\n Schema.Struct({\n _tag: Schema.Literal(\"Handoff\"),\n recordId: RecordId,\n kind: Schema.Literals([\n \"peer\",\n \"report\",\n \"update\",\n \"worker-stop\",\n \"reservation\",\n \"child-accounting\",\n ]),\n messageId: Schema.optionalKey(IdempotencyKey),\n childThreadId: Schema.optionalKey(ThreadId),\n }),\n]);\n\nexport type WorkOwner = typeof WorkOwner.Type;\n\nexport const WorkStateReference = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Submission\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Canonical\"), recordId: RecordId }),\n Schema.Struct({\n _tag: Schema.Literal(\"Delivery\"),\n messageId: IdempotencyKey,\n version: Schema.Int.check(Schema.isGreaterThan(0)),\n }),\n]);\n\n/** Content-free scheduling metadata; resolve the selected owner through its storage port. */\nexport const ThreadWorkEntry = Schema.Struct({\n id: WorkId,\n owner: WorkOwner,\n stateReference: WorkStateReference,\n state: Schema.Literals([\"ready\", \"waiting\", \"unknown\", \"handoff\"]),\n wait: Schema.optionalKey(\n Schema.Literals([\n \"admission\",\n \"ownership\",\n \"approval\",\n \"input\",\n \"child\",\n \"worker\",\n \"effect-resolution\",\n \"destination\",\n \"parked\",\n \"capacity\",\n ]),\n ),\n notBeforeMillis: Schema.optionalKey(Schema.Natural),\n receiptId: Schema.optionalKey(ReceiptId),\n queueSequence: Schema.optionalKey(QueueSequence),\n originRecordId: Schema.optionalKey(RecordId),\n /** Separate accepted-update capacity from ordinary message/worker transport. */\n partition: Schema.optionalKey(Schema.Literals([\"ordinary\", \"update\"])),\n});\n\nexport type ThreadWorkEntry = typeof ThreadWorkEntry.Type;\n\n/** The initial declaration remains addressable while later facts change an operation's state. */\nexport const CanonicalWorkEntry = Schema.Struct({\n ...ThreadWorkEntry.fields,\n createdSequence: CanonicalSequence,\n updatedSequence: CanonicalSequence,\n originRecordId: RecordId,\n});\n\nexport type CanonicalWorkEntry = typeof CanonicalWorkEntry.Type;\n\nexport const ThreadWorkRequest = Schema.Struct({\n threadId: ThreadId,\n cursor: Schema.optionalKey(Cursor),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_WORK_PAGE_ENTRIES })),\n});\n\nexport type ThreadWorkRequest = typeof ThreadWorkRequest.Type;\n\nexport const ThreadWorkPage = Schema.Struct({\n entries: Schema.Array(ThreadWorkEntry).check(Schema.isMaxLength(MAX_WORK_PAGE_ENTRIES)),\n /** An empty page with a cursor is progress, not a complete empty inventory. */\n cursor: Schema.optionalKey(Cursor),\n});\n\nexport type ThreadWorkPage = typeof ThreadWorkPage.Type;\n\nexport const ThreadWorkCursor = Schema.Struct({\n version: Schema.Literal(WORK_INDEX_VERSION),\n /** Bind the exact admitted identity without copying it into every continuation. */\n threadDigest: Digest,\n source: Schema.Literals([\"admissions\", \"canonical\", \"deliveries\"]),\n after: Schema.optionalKey(WorkId),\n});\n\nexport type ThreadWorkCursor = typeof ThreadWorkCursor.Type;\n\nexport const WorkThreadsRequest = Schema.Struct({\n afterThreadId: Schema.optionalKey(ThreadId),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 32 })),\n});\n\nexport type WorkThreadsRequest = typeof WorkThreadsRequest.Type;\n\nexport const WorkThreadsPage = Schema.Struct({\n threadIds: Schema.Array(ThreadId).check(Schema.isMaxLength(32)),\n afterThreadId: Schema.optionalKey(ThreadId),\n});\n\nexport type WorkThreadsPage = typeof WorkThreadsPage.Type;\n\nexport const WorkIndexRebuildRequest = Schema.Struct({\n threadId: ThreadId,\n /** Explicitly discard a damaged derivative; canonical facts and owner state are untouched. */\n restart: Schema.optionalKey(Schema.Boolean),\n /** At most 256 records per pass by default; the 32 MiB byte cap may stop a pass sooner. */\n limit: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_WORK_REBUILD_RECORDS })),\n ),\n});\n\nexport type WorkIndexRebuildRequest = typeof WorkIndexRebuildRequest.Type;\n\nexport const WorkIndexProgress = Schema.Struct({\n version: Schema.Literal(WORK_INDEX_VERSION),\n threadId: ThreadId,\n state: Schema.Literals([\"ready\", \"rebuilding\"]),\n throughSequence: CanonicalSequence,\n tailSequence: CanonicalSequence,\n processedRecords: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_WORK_REBUILD_RECORDS)),\n processedBytes: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_WORK_REBUILD_BYTES)),\n});\n\nexport type WorkIndexProgress = typeof WorkIndexProgress.Type;\n\nexport class WorkDiscoveryUnavailable extends Schema.TaggedError<WorkDiscoveryUnavailable>()(\n \"WorkDiscoveryUnavailable\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\"missing-index\", \"incomplete-rebuild\", \"unsupported\"]),\n },\n) {}\n\n/** Native owner pages and canonical-index maintenance, implemented at the storage owner. */\nexport interface ThreadWorkStorage {\n readonly threads: (\n request: WorkThreadsRequest,\n ) => Effect.Effect<WorkThreadsPage, ThreadStoreError>;\n readonly page: (\n request: ThreadWorkRequest,\n ) => Effect.Effect<ThreadWorkPage, WorkDiscoveryUnavailable | ThreadStoreError>;\n /** One bounded pass. Append transactions and the completion check serialize with this pass. */\n readonly rebuild: (\n request: WorkIndexRebuildRequest,\n ) => Effect.Effect<WorkIndexProgress, WorkDiscoveryUnavailable | ThreadStoreError>;\n}\n\n/**\n * Inventories combine current admission/delivery owners with canonical operations and handoffs.\n * Cursors are Thread-bound, forward-only live scans. Revalidate selected candidates; creations\n * before an already consumed cursor appear in the next scan. Rebuild never runs implicitly.\n */\nexport class ThreadWorkDiscovery extends Context.Service<ThreadWorkDiscovery, ThreadWorkStorage>()(\n \"@effect-agent/thread/ThreadWorkDiscovery\",\n) {\n static readonly layer = Layer.effect(\n ThreadWorkDiscovery,\n Effect.map(\n ThreadStore,\n (store) =>\n store.work ?? {\n threads: () =>\n ThreadStoreError.make({\n operation: \"discover Thread work\",\n message: \"The storage adapter has no work-discovery port\",\n }),\n page: ({ threadId }) =>\n WorkDiscoveryUnavailable.make({ threadId, reason: \"unsupported\" }),\n rebuild: ({ threadId }) =>\n WorkDiscoveryUnavailable.make({ threadId, reason: \"unsupported\" }),\n },\n ),\n );\n}\n\n/** Opaque tuple identity; never split or reinterpret an application identifier. */\nexport const workId = (kind: string, ...ids: ReadonlyArray<string>): string =>\n JSON.stringify([kind, ...ids]);\n\nexport const admissionWork = (row: SubmissionWorkItem): ThreadWorkEntry => ({\n id: workId(\"admission\", row.submissionId),\n owner: { _tag: \"Admission\", submissionId: row.submissionId },\n stateReference: { _tag: \"Submission\", submissionId: row.submissionId },\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n state:\n row.state === \"unknown\"\n ? \"unknown\"\n : row.state === \"suspended\" || row.state === \"joining\" || row.state === \"joined\"\n ? \"waiting\"\n : \"ready\",\n ...(row.state === \"unknown\"\n ? { wait: \"effect-resolution\" as const }\n : row.state === \"suspended\"\n ? { wait: \"input\" as const }\n : row.state === \"admitted\"\n ? { wait: \"admission\" as const }\n : {}),\n});\n\nexport const decodeWorkCursor = Effect.fnUntraced(function* (request: ThreadWorkRequest) {\n const threadDigest = yield* digestJson({ threadId: request.threadId }).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Cannot bind work-discovery cursor to its Thread\",\n cause,\n }),\n ),\n );\n\n if (request.cursor === undefined)\n return ThreadWorkCursor.make({\n version: WORK_INDEX_VERSION,\n threadDigest,\n source: \"admissions\",\n });\n\n const cursor = yield* Schema.decodeEffect(Schema.fromJsonString(ThreadWorkCursor))(\n request.cursor,\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Invalid work-discovery cursor\",\n cause,\n }),\n ),\n );\n\n if (cursor.threadDigest !== threadDigest)\n return yield* ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Work cursor belongs to another Thread\",\n });\n\n return cursor;\n});\n\nexport const encodeWorkCursor = Schema.encodeSync(Schema.fromJsonString(ThreadWorkCursor));\n\n/** Validate metadata before returning a page, including a resident encoded-byte ceiling. */\nexport const validateWorkPage = Effect.fnUntraced(function* (page: ThreadWorkPage, limit: number) {\n yield* Schema.decodeEffect(ThreadWorkPage)(page).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work page\",\n message: \"Invalid work-discovery metadata\",\n cause,\n }),\n ),\n );\n if (\n page.entries.length > limit ||\n new Set(page.entries.map((entry) => entry.id)).size !== page.entries.length ||\n page.entries.some((entry) => utf8ByteLength(JSON.stringify(entry)) > MAX_WORK_ENTRY_BYTES) ||\n utf8ByteLength(JSON.stringify(page)) > MAX_WORK_PAGE_BYTES\n )\n return yield* ThreadStoreError.make({\n operation: \"work page\",\n message: \"Work-discovery metadata exceeds its page bound\",\n });\n\n return page;\n});\n\n/** Exact current canonical owner state, checked against the inventory's immutable fingerprint. */\nexport const resolveWorkEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n entry: ThreadWorkEntry,\n) {\n if (entry.stateReference._tag !== \"Canonical\")\n return yield* ThreadStoreError.make({\n operation: \"resolve work\",\n message: \"Work is owned by another storage port\",\n });\n\n return yield* resolveEvidence(threadId, entry.stateReference);\n});\n\n/** Own-call facts plus the original batch's shared approval proof, without another Run's history. */\nexport const operationEvidence = (\n threadId: ThreadId,\n owner: Extract<WorkOwner, { _tag: \"Operation\" }>,\n originRecordId: RecordId,\n throughSequence: CanonicalSequence,\n declaration: ModelResponseRecorded,\n): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError, ThreadReader> =>\n Stream.unwrap(\n Effect.map(ThreadReader, (reader) =>\n Stream.suspend(() => {\n const approvalToolCallIds = declaration.toolOperations.map((call) => call.toolCallId);\n const approvalIds = new Set(approvalToolCallIds);\n let afterSequence = CanonicalSequence.make(0);\n let records = 0;\n let bytes = 0;\n\n return Stream.paginate(\n undefined,\n Effect.fnUntraced(function* () {\n const page = yield* Stream.runCollect(\n reader.read({\n threadId,\n selection: {\n _tag: \"OperationEvidence\",\n runId: owner.runId,\n toolCallId: owner.toolCallId,\n originRecordId,\n approvalToolCallIds,\n throughSequence,\n },\n page: { limit: 8, afterSequence },\n }),\n ).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"ThreadStoreError\"\n ? cause\n : ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation is unavailable\",\n cause,\n }),\n ),\n );\n\n if (page.length > 8)\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation page exceeds its bound\",\n });\n for (const entry of page) {\n const payload = entry.record.payload;\n\n if (\n entry.threadId !== threadId ||\n entry.sequence <= afterSequence ||\n entry.sequence > throughSequence ||\n (entry.record.recordId === originRecordId\n ? payload._tag !== \"ModelResponseRecorded\" ||\n payload.runId !== owner.runId ||\n payload.turn !== declaration.turn ||\n payload.toolOperations.length !== approvalIds.size ||\n payload.toolOperations.some((call) => !approvalIds.has(call.toolCallId)) ||\n !payload.toolOperations.some((call) => call.toolCallId === owner.toolCallId)\n : !(\"runId\" in payload) ||\n payload.runId !== owner.runId ||\n !(\"toolCallId\" in payload) ||\n (payload._tag === \"ToolApprovalRequested\" ||\n payload._tag === \"ToolApprovalDecided\"\n ? payload.turn !== declaration.turn || !approvalIds.has(payload.toolCallId)\n : payload.toolCallId !== owner.toolCallId))\n )\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation has invalid evidence identity\",\n });\n afterSequence = entry.sequence;\n records++;\n bytes += canonicalRecordBytes(entry.record);\n if (records > MAX_RUN_EVIDENCE_RECORDS || bytes > MAX_RUN_EVIDENCE_BYTES)\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation exceeds its recovery bound\",\n });\n }\n\n return [page, page.length < 8 ? Option.none() : Option.some(undefined)] as const;\n }),\n );\n }),\n ),\n );\n\n/** The last frozen report/update, independent of completed deliveries and unrelated history. */\nexport const deliveryPredecessor = Effect.fnUntraced(function* (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n) {\n const reader = yield* ThreadReader;\n\n const records = yield* Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"DeliveryPredecessor\", throughSequence },\n page: { limit: 1 },\n }),\n );\n\n if (records.length > 1)\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Ambiguous delivery predecessor\",\n });\n const found = records[0];\n\n if (found === undefined) return undefined;\n if (found.threadId !== threadId || found.sequence > throughSequence)\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Invalid delivery predecessor identity\",\n });\n const payload = found.record.payload;\n\n if (payload._tag === \"WorkerReportPrepared\") return payload.messageId;\n if (payload._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined)\n return payload.delivery.messageId;\n\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Invalid delivery predecessor evidence\",\n });\n});\n\n/** Origin reporting mode retained by the disposable fold, including private worker inputs. */\nexport type WorkerReportingMode = \"none\" | \"private\" | \"standard\";\n\nexport type WorkIndexChange =\n | { readonly _tag: \"Put\"; readonly entry: CanonicalWorkEntry }\n | { readonly _tag: \"Remove\"; readonly id: string; readonly stateRecordId?: RecordId }\n | { readonly _tag: \"WorkerMode\"; readonly mode: Exclude<WorkerReportingMode, \"none\"> };\n\n/**\n * Fold only canonical creation, factual closure, and durable handoff evidence. Storage commits\n * these changes with the source batch. Rebuild folds the same rules in sequence order; it may\n * suppress a delivery handoff only after its authoritative delivery row exists.\n */\nexport const workIndexChanges = Effect.fnUntraced(function* (\n envelope: CanonicalRecordEnvelope,\n reporting: WorkerReportingMode,\n): Effect.fn.Return<ReadonlyArray<WorkIndexChange>, ThreadStoreError> {\n const { record, sequence } = envelope;\n const payload = record.payload;\n\n if (\n !new Set([\n \"ModelResponseRecorded\",\n \"ToolCallUnknown\",\n \"ToolApprovalRequested\",\n \"ToolApprovalDecided\",\n \"ToolCallSettled\",\n \"ToolCallResolved\",\n \"SubagentRequested\",\n \"SubagentJoined\",\n \"WorkerInputRequested\",\n \"WorkerInputCompleted\",\n \"WorkerInputRefused\",\n \"WorkerOriginRecorded\",\n \"SubmissionSettled\",\n \"WorkerReportPrepared\",\n \"WorkerReportRefused\",\n \"PeerMessagePrepared\",\n \"AgentUpdateEmitted\",\n \"WorkerStopRequested\",\n \"SubtreeBudgetReserved\",\n \"WorkHandoffCompleted\",\n ]).has(payload._tag)\n )\n return [] as ReadonlyArray<WorkIndexChange>;\n\n const remove = (kind: string, ...ids: ReadonlyArray<string>): WorkIndexChange => ({\n _tag: \"Remove\",\n id: workId(kind, ...ids),\n });\n\n const put = (\n id: string,\n owner: WorkOwner,\n state: ThreadWorkEntry[\"state\"],\n wait?: ThreadWorkEntry[\"wait\"],\n ): WorkIndexChange => ({\n _tag: \"Put\",\n entry: {\n id,\n owner,\n stateReference: { _tag: \"Canonical\", recordId: record.recordId },\n state,\n ...(wait === undefined ? {} : { wait }),\n createdSequence: sequence,\n updatedSequence: sequence,\n originRecordId: record.recordId,\n },\n });\n\n const operation = (\n runId: RunId,\n toolCallId: ToolCallId,\n state: ThreadWorkEntry[\"state\"],\n wait?: ThreadWorkEntry[\"wait\"],\n ) =>\n put(\n workId(\"operation\", runId, toolCallId),\n { _tag: \"Operation\", runId, toolCallId },\n state,\n wait,\n );\n\n const handoff = (\n kind: Extract<WorkOwner, { _tag: \"Handoff\" }>[\"kind\"],\n messageId?: IdempotencyKey,\n childThreadId?: ThreadId,\n ) =>\n put(\n workId(\"handoff\", record.recordId),\n {\n _tag: \"Handoff\",\n recordId: record.recordId,\n kind,\n ...(messageId === undefined ? {} : { messageId }),\n ...(childThreadId === undefined ? {} : { childThreadId }),\n },\n \"handoff\",\n \"destination\",\n );\n\n switch (payload._tag) {\n case \"ModelResponseRecorded\":\n return payload.toolOperations.map((call) =>\n operation(payload.runId, call.toolCallId, \"ready\"),\n );\n case \"ToolCallUnknown\":\n return [operation(payload.runId, payload.toolCallId, \"unknown\", \"effect-resolution\")];\n case \"ToolApprovalRequested\":\n return [operation(payload.runId, payload.toolCallId, \"waiting\", \"approval\")];\n case \"ToolApprovalDecided\":\n return [operation(payload.runId, payload.toolCallId, \"ready\")];\n case \"ToolCallSettled\":\n return [remove(\"operation\", payload.runId, payload.toolCallId)];\n case \"ToolCallResolved\":\n return payload.resolution === \"safe-retry\"\n ? [operation(payload.runId, payload.toolCallId, \"unknown\", \"effect-resolution\")]\n : [remove(\"operation\", payload.runId, payload.toolCallId)];\n case \"SubagentRequested\":\n return [\n remove(\"reservation\", payload.reservationId),\n put(\n workId(\"child\", payload.runId, payload.toolCallId),\n {\n _tag: \"Child\",\n runId: payload.runId,\n toolCallId: payload.toolCallId,\n childThreadId: payload.childThreadId,\n },\n \"waiting\",\n \"child\",\n ),\n ];\n case \"SubagentJoined\":\n return [remove(\"child\", payload.runId, payload.toolCallId), handoff(\"child-accounting\")];\n case \"WorkerInputRequested\":\n return [\n remove(\"reservation\", payload.admission.messageId),\n put(\n workId(\"worker-input\", payload.admission.messageId),\n {\n _tag: \"WorkerInput\",\n messageId: payload.admission.messageId,\n workerThreadId: payload.admission.origin.worker.threadId,\n update: payload.admission.reportKind === \"update\",\n },\n \"waiting\",\n \"worker\",\n ),\n ];\n case \"WorkerInputCompleted\":\n return payload.effectsResolved === true\n ? [\n remove(\"worker-input\", payload.messageId),\n remove(\"worker-effects\", payload.submissionId),\n ]\n : [];\n case \"WorkerInputRefused\":\n return [\n {\n _tag: \"Remove\",\n id: workId(\"worker-input\", payload.messageId),\n stateRecordId: payload.reservation.recordId,\n },\n {\n _tag: \"Remove\",\n id: workId(\"reservation\", payload.messageId),\n stateRecordId: payload.reservation.recordId,\n },\n ];\n case \"WorkerOriginRecorded\":\n return [\n {\n _tag: \"WorkerMode\",\n mode: payload.origin.reporting?.mode === \"standard\" ? \"standard\" : \"private\",\n },\n ];\n case \"SubmissionSettled\":\n return reporting === \"none\"\n ? []\n : [\n put(\n workId(\"worker-effects\", payload.submissionId),\n { _tag: \"WorkerEffects\", submissionId: payload.submissionId },\n \"waiting\",\n \"effect-resolution\",\n ),\n ...(reporting === \"standard\" &&\n payload.runId === runIdForSubmission(payload.submissionId)\n ? [\n put(\n workId(\"report\", payload.runId),\n { _tag: \"Report\", runId: payload.runId },\n \"ready\",\n ),\n ]\n : []),\n ];\n case \"WorkerReportPrepared\":\n return [remove(\"report\", payload.runId), handoff(\"report\", payload.messageId)];\n case \"WorkerReportRefused\":\n return [remove(\"report\", payload.runId)];\n case \"PeerMessagePrepared\":\n return [handoff(\"peer\", payload.messageId)];\n case \"AgentUpdateEmitted\":\n return payload.delivery === undefined ? [] : [handoff(\"update\", payload.delivery.messageId)];\n case \"WorkerStopRequested\":\n return [handoff(\"worker-stop\", undefined, payload.command.worker.threadId)];\n case \"SubtreeBudgetReserved\":\n return [\n put(\n workId(\"reservation\", payload.reservationId),\n {\n _tag: \"Handoff\",\n recordId: record.recordId,\n kind: \"reservation\",\n childThreadId: payload.childThreadId,\n },\n \"waiting\",\n \"capacity\",\n ),\n ];\n case \"WorkHandoffCompleted\":\n return [{ _tag: \"Remove\", id: payload.ownerId }];\n default:\n return [];\n }\n});\n\n/** Backfill is chronological. A state's creation identity never changes on later updates. */\nexport const advanceWorkEntry = (\n previous: CanonicalWorkEntry | undefined,\n next: CanonicalWorkEntry,\n): CanonicalWorkEntry =>\n previous === undefined\n ? next\n : {\n ...next,\n createdSequence: previous.createdSequence,\n originRecordId: previous.originRecordId,\n };\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadWork.mjs","names":[],"sources":["../../src/durable/ThreadWork.ts"],"sourcesContent":["import { Context, Effect, Layer, Option, Schema, Stream } from \"effect\";\n\nimport { ReceiptId, RunId, SubmissionId, ThreadId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { IdempotencyKey, QueueSequence } from \"../core/Receipt.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport {\n CanonicalSequence,\n Digest,\n MAX_RUN_EVIDENCE_BYTES,\n MAX_RUN_EVIDENCE_RECORDS,\n RecordId,\n type CanonicalRecordEnvelope,\n type ModelResponseRecorded,\n} from \"./Records.ts\";\nimport { canonicalRecordBytes, resolveEvidence } from \"./RunContinuation.ts\";\nimport { runIdForSubmission } from \"./RunJournal.ts\";\nimport type { SubmissionWorkItem } from \"./SubmissionLedger.ts\";\nimport { ThreadReader, ThreadStore, ThreadStoreError } from \"./ThreadStore.ts\";\n\nexport const WORK_INDEX_VERSION = 3;\nexport const MAX_WORK_PAGE_ENTRIES = 128;\nexport const MAX_WORK_ENTRY_BYTES = 8 * 1024;\nexport const MAX_WORK_PAGE_BYTES = MAX_WORK_PAGE_ENTRIES * MAX_WORK_ENTRY_BYTES;\nexport const MAX_WORK_REBUILD_RECORDS = 256;\nexport const MAX_WORK_REBUILD_BYTES = 32 * 1024 * 1024;\nexport const MAX_RECOVERY_WORK_ITEMS = 32;\nexport const MAX_RECOVERY_PAGES = 8;\nexport const MAX_WORK_CURSOR_CHARS = 32 * 1024;\n\nconst Cursor = Schema.NonEmptyString.check(Schema.isMaxLength(MAX_WORK_CURSOR_CHARS));\nconst WorkId = Schema.NonEmptyString.check(Schema.isMaxLength(4096));\n\n/** Stable logical owners. Finding an owner does not acquire its lease, grant, or authority. */\nexport const WorkOwner = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Admission\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Operation\"), runId: RunId, toolCallId: ToolCallId }),\n Schema.Struct({\n _tag: Schema.Literal(\"Child\"),\n runId: RunId,\n toolCallId: ToolCallId,\n childThreadId: ThreadId,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerInput\"),\n messageId: IdempotencyKey,\n workerThreadId: ThreadId,\n update: Schema.Boolean,\n }),\n Schema.Struct({ _tag: Schema.Literal(\"Report\"), runId: RunId }),\n Schema.Struct({ _tag: Schema.Literal(\"WorkerEffects\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Delivery\"), messageId: IdempotencyKey }),\n Schema.Struct({\n _tag: Schema.Literal(\"Handoff\"),\n recordId: RecordId,\n kind: Schema.Literals([\n \"peer\",\n \"report\",\n \"update\",\n \"worker-stop\",\n \"reservation\",\n \"child-accounting\",\n ]),\n messageId: Schema.optionalKey(IdempotencyKey),\n childThreadId: Schema.optionalKey(ThreadId),\n }),\n]);\n\nexport type WorkOwner = typeof WorkOwner.Type;\n\nexport const WorkStateReference = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Submission\"), submissionId: SubmissionId }),\n Schema.Struct({ _tag: Schema.Literal(\"Canonical\"), recordId: RecordId }),\n Schema.Struct({\n _tag: Schema.Literal(\"Delivery\"),\n messageId: IdempotencyKey,\n version: Schema.Int.check(Schema.isGreaterThan(0)),\n }),\n]);\n\n/** Content-free scheduling metadata; resolve the selected owner through its storage port. */\nexport const ThreadWorkEntry = Schema.Struct({\n id: WorkId,\n owner: WorkOwner,\n stateReference: WorkStateReference,\n state: Schema.Literals([\"ready\", \"waiting\", \"unknown\", \"handoff\"]),\n wait: Schema.optionalKey(\n Schema.Literals([\n \"admission\",\n \"ownership\",\n \"approval\",\n \"input\",\n \"child\",\n \"worker\",\n \"effect-resolution\",\n \"destination\",\n \"parked\",\n \"capacity\",\n ]),\n ),\n notBeforeMillis: Schema.optionalKey(Schema.Natural),\n receiptId: Schema.optionalKey(ReceiptId),\n queueSequence: Schema.optionalKey(QueueSequence),\n originRecordId: Schema.optionalKey(RecordId),\n /** Separate accepted-update capacity from ordinary message/worker transport. */\n partition: Schema.optionalKey(Schema.Literals([\"ordinary\", \"update\"])),\n});\n\nexport type ThreadWorkEntry = typeof ThreadWorkEntry.Type;\n\n/** The initial declaration remains addressable while later facts change an operation's state. */\nexport const CanonicalWorkEntry = Schema.Struct({\n ...ThreadWorkEntry.fields,\n createdSequence: CanonicalSequence,\n updatedSequence: CanonicalSequence,\n originRecordId: RecordId,\n});\n\nexport type CanonicalWorkEntry = typeof CanonicalWorkEntry.Type;\n\nexport const ThreadWorkRequest = Schema.Struct({\n threadId: ThreadId,\n cursor: Schema.optionalKey(Cursor),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_WORK_PAGE_ENTRIES })),\n});\n\nexport type ThreadWorkRequest = typeof ThreadWorkRequest.Type;\n\nexport const ThreadWorkPage = Schema.Struct({\n entries: Schema.Array(ThreadWorkEntry).check(Schema.isMaxLength(MAX_WORK_PAGE_ENTRIES)),\n /** An empty page with a cursor is progress, not a complete empty inventory. */\n cursor: Schema.optionalKey(Cursor),\n});\n\nexport type ThreadWorkPage = typeof ThreadWorkPage.Type;\n\nexport const ThreadWorkCursor = Schema.Struct({\n version: Schema.Literal(WORK_INDEX_VERSION),\n /** Bind the exact admitted identity without copying it into every continuation. */\n threadDigest: Digest,\n source: Schema.Literals([\"admissions\", \"canonical\", \"deliveries\"]),\n after: Schema.optionalKey(WorkId),\n});\n\nexport type ThreadWorkCursor = typeof ThreadWorkCursor.Type;\n\n/** Local snapshot request; it grants no claim or dispatch authority. */\nexport const FreshAdmissionWork = Schema.Struct({ threadId: ThreadId, submissionId: SubmissionId });\nexport type FreshAdmissionWork = typeof FreshAdmissionWork.Type;\n\nexport const WorkThreadsRequest = Schema.Struct({\n afterThreadId: Schema.optionalKey(ThreadId),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 32 })),\n});\n\nexport type WorkThreadsRequest = typeof WorkThreadsRequest.Type;\n\nexport const WorkThreadsPage = Schema.Struct({\n threadIds: Schema.Array(ThreadId).check(Schema.isMaxLength(32)),\n afterThreadId: Schema.optionalKey(ThreadId),\n});\n\nexport type WorkThreadsPage = typeof WorkThreadsPage.Type;\n\nexport const WorkIndexRebuildRequest = Schema.Struct({\n threadId: ThreadId,\n /** Explicitly discard a damaged derivative; canonical facts and owner state are untouched. */\n restart: Schema.optionalKey(Schema.Boolean),\n /** At most 256 records per pass by default; the 32 MiB byte cap may stop a pass sooner. */\n limit: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: MAX_WORK_REBUILD_RECORDS })),\n ),\n});\n\nexport type WorkIndexRebuildRequest = typeof WorkIndexRebuildRequest.Type;\n\nexport const WorkIndexProgress = Schema.Struct({\n version: Schema.Literal(WORK_INDEX_VERSION),\n threadId: ThreadId,\n state: Schema.Literals([\"ready\", \"rebuilding\"]),\n throughSequence: CanonicalSequence,\n tailSequence: CanonicalSequence,\n processedRecords: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_WORK_REBUILD_RECORDS)),\n processedBytes: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_WORK_REBUILD_BYTES)),\n});\n\nexport type WorkIndexProgress = typeof WorkIndexProgress.Type;\n\nexport class WorkDiscoveryUnavailable extends Schema.TaggedError<WorkDiscoveryUnavailable>()(\n \"WorkDiscoveryUnavailable\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\"missing-index\", \"incomplete-rebuild\", \"unsupported\"]),\n },\n) {}\n\n/** Native owner pages and canonical-index maintenance, implemented at the storage owner. */\nexport interface ThreadWorkStorage {\n /** Native proof that this untouched root admission has no other recovery obligations.\n * A caller must still claim and validate current controls before dispatch. */\n readonly isOnlyFreshAdmission?: (\n request: FreshAdmissionWork,\n ) => Effect.Effect<boolean, ThreadStoreError>;\n\n readonly threads: (\n request: WorkThreadsRequest,\n ) => Effect.Effect<WorkThreadsPage, ThreadStoreError>;\n readonly page: (\n request: ThreadWorkRequest,\n ) => Effect.Effect<ThreadWorkPage, WorkDiscoveryUnavailable | ThreadStoreError>;\n /** One bounded pass. Append transactions and the completion check serialize with this pass. */\n readonly rebuild: (\n request: WorkIndexRebuildRequest,\n ) => Effect.Effect<WorkIndexProgress, WorkDiscoveryUnavailable | ThreadStoreError>;\n}\n\n/**\n * Inventories combine current admission/delivery owners with canonical operations and handoffs.\n * Cursors are Thread-bound, forward-only live scans. Revalidate selected candidates; creations\n * before an already consumed cursor appear in the next scan. Rebuild never runs implicitly.\n */\nexport class ThreadWorkDiscovery extends Context.Service<ThreadWorkDiscovery, ThreadWorkStorage>()(\n \"@effect-agent/thread/ThreadWorkDiscovery\",\n) {\n static readonly layer = Layer.effect(\n ThreadWorkDiscovery,\n Effect.map(\n ThreadStore,\n (store) =>\n store.work ?? {\n threads: () =>\n ThreadStoreError.make({\n operation: \"discover Thread work\",\n message: \"The storage adapter has no work-discovery port\",\n }),\n page: ({ threadId }) =>\n WorkDiscoveryUnavailable.make({ threadId, reason: \"unsupported\" }),\n rebuild: ({ threadId }) =>\n WorkDiscoveryUnavailable.make({ threadId, reason: \"unsupported\" }),\n },\n ),\n );\n}\n\n/** Opaque tuple identity; never split or reinterpret an application identifier. */\nexport const workId = (kind: string, ...ids: ReadonlyArray<string>): string =>\n JSON.stringify([kind, ...ids]);\n\nexport const admissionWork = (row: SubmissionWorkItem): ThreadWorkEntry => ({\n id: workId(\"admission\", row.submissionId),\n owner: { _tag: \"Admission\", submissionId: row.submissionId },\n stateReference: { _tag: \"Submission\", submissionId: row.submissionId },\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n state:\n row.state === \"unknown\"\n ? \"unknown\"\n : row.state === \"suspended\" || row.state === \"joining\" || row.state === \"joined\"\n ? \"waiting\"\n : \"ready\",\n ...(row.state === \"unknown\"\n ? { wait: \"effect-resolution\" as const }\n : row.state === \"suspended\"\n ? { wait: \"input\" as const }\n : row.state === \"admitted\"\n ? { wait: \"admission\" as const }\n : {}),\n});\n\nexport const decodeWorkCursor = Effect.fnUntraced(function* (request: ThreadWorkRequest) {\n const threadDigest = yield* digestJson({ threadId: request.threadId }).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Cannot bind work-discovery cursor to its Thread\",\n cause,\n }),\n ),\n );\n\n if (request.cursor === undefined)\n return ThreadWorkCursor.make({\n version: WORK_INDEX_VERSION,\n threadDigest,\n source: \"admissions\",\n });\n\n const cursor = yield* Schema.decodeEffect(Schema.fromJsonString(ThreadWorkCursor))(\n request.cursor,\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Invalid work-discovery cursor\",\n cause,\n }),\n ),\n );\n\n if (cursor.threadDigest !== threadDigest)\n return yield* ThreadStoreError.make({\n operation: \"work cursor\",\n message: \"Work cursor belongs to another Thread\",\n });\n\n return cursor;\n});\n\nexport const encodeWorkCursor = Schema.encodeSync(Schema.fromJsonString(ThreadWorkCursor));\n\n/** Validate metadata before returning a page, including a resident encoded-byte ceiling. */\nexport const validateWorkPage = Effect.fnUntraced(function* (page: ThreadWorkPage, limit: number) {\n yield* Schema.decodeEffect(ThreadWorkPage)(page).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"work page\",\n message: \"Invalid work-discovery metadata\",\n cause,\n }),\n ),\n );\n if (\n page.entries.length > limit ||\n new Set(page.entries.map((entry) => entry.id)).size !== page.entries.length ||\n page.entries.some((entry) => utf8ByteLength(JSON.stringify(entry)) > MAX_WORK_ENTRY_BYTES) ||\n utf8ByteLength(JSON.stringify(page)) > MAX_WORK_PAGE_BYTES\n )\n return yield* ThreadStoreError.make({\n operation: \"work page\",\n message: \"Work-discovery metadata exceeds its page bound\",\n });\n\n return page;\n});\n\n/** Exact current canonical owner state, checked against the inventory's immutable fingerprint. */\nexport const resolveWorkEvidence = Effect.fnUntraced(function* (\n threadId: ThreadId,\n entry: ThreadWorkEntry,\n) {\n if (entry.stateReference._tag !== \"Canonical\")\n return yield* ThreadStoreError.make({\n operation: \"resolve work\",\n message: \"Work is owned by another storage port\",\n });\n\n return yield* resolveEvidence(threadId, entry.stateReference);\n});\n\n/** Own-call facts plus the original batch's shared approval proof, without another Run's history. */\nexport const operationEvidence = (\n threadId: ThreadId,\n owner: Extract<WorkOwner, { _tag: \"Operation\" }>,\n originRecordId: RecordId,\n throughSequence: CanonicalSequence,\n declaration: ModelResponseRecorded,\n): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError, ThreadReader> =>\n Stream.unwrap(\n Effect.map(ThreadReader, (reader) =>\n Stream.suspend(() => {\n const approvalToolCallIds = declaration.toolOperations.map((call) => call.toolCallId);\n const approvalIds = new Set(approvalToolCallIds);\n let afterSequence = CanonicalSequence.make(0);\n let records = 0;\n let bytes = 0;\n\n return Stream.paginate(\n undefined,\n Effect.fnUntraced(function* () {\n const page = yield* Stream.runCollect(\n reader.read({\n threadId,\n selection: {\n _tag: \"OperationEvidence\",\n runId: owner.runId,\n toolCallId: owner.toolCallId,\n originRecordId,\n approvalToolCallIds,\n throughSequence,\n },\n page: { limit: 8, afterSequence },\n }),\n ).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"ThreadStoreError\"\n ? cause\n : ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation is unavailable\",\n cause,\n }),\n ),\n );\n\n if (page.length > 8)\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation page exceeds its bound\",\n });\n for (const entry of page) {\n const payload = entry.record.payload;\n\n if (\n entry.threadId !== threadId ||\n entry.sequence <= afterSequence ||\n entry.sequence > throughSequence ||\n (entry.record.recordId === originRecordId\n ? payload._tag !== \"ModelResponseRecorded\" ||\n payload.runId !== owner.runId ||\n payload.turn !== declaration.turn ||\n payload.toolOperations.length !== approvalIds.size ||\n payload.toolOperations.some((call) => !approvalIds.has(call.toolCallId)) ||\n !payload.toolOperations.some((call) => call.toolCallId === owner.toolCallId)\n : !(\"runId\" in payload) ||\n payload.runId !== owner.runId ||\n !(\"toolCallId\" in payload) ||\n (payload._tag === \"ToolApprovalRequested\" ||\n payload._tag === \"ToolApprovalDecided\"\n ? payload.turn !== declaration.turn || !approvalIds.has(payload.toolCallId)\n : payload.toolCallId !== owner.toolCallId))\n )\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation has invalid evidence identity\",\n });\n afterSequence = entry.sequence;\n records++;\n bytes += canonicalRecordBytes(entry.record);\n if (records > MAX_RUN_EVIDENCE_RECORDS || bytes > MAX_RUN_EVIDENCE_BYTES)\n return yield* ThreadStoreError.make({\n operation: \"operation evidence\",\n message: \"Selected operation exceeds its recovery bound\",\n });\n }\n\n return [page, page.length < 8 ? Option.none() : Option.some(undefined)] as const;\n }),\n );\n }),\n ),\n );\n\n/** The last frozen report/update, independent of completed deliveries and unrelated history. */\nexport const deliveryPredecessor = Effect.fnUntraced(function* (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n) {\n const reader = yield* ThreadReader;\n\n const records = yield* Stream.runCollect(\n reader.read({\n threadId,\n selection: { _tag: \"DeliveryPredecessor\", throughSequence },\n page: { limit: 1 },\n }),\n );\n\n if (records.length > 1)\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Ambiguous delivery predecessor\",\n });\n const found = records[0];\n\n if (found === undefined) return undefined;\n if (found.threadId !== threadId || found.sequence > throughSequence)\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Invalid delivery predecessor identity\",\n });\n const payload = found.record.payload;\n\n if (payload._tag === \"WorkerReportPrepared\") return payload.messageId;\n if (payload._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined)\n return payload.delivery.messageId;\n\n return yield* ThreadStoreError.make({\n operation: \"delivery predecessor\",\n message: \"Invalid delivery predecessor evidence\",\n });\n});\n\n/** Origin reporting mode retained by the disposable fold, including private worker inputs. */\nexport type WorkerReportingMode = \"none\" | \"private\" | \"standard\";\n\nexport type WorkIndexChange =\n | { readonly _tag: \"Put\"; readonly entry: CanonicalWorkEntry }\n | { readonly _tag: \"Remove\"; readonly id: string; readonly stateRecordId?: RecordId }\n | { readonly _tag: \"WorkerMode\"; readonly mode: Exclude<WorkerReportingMode, \"none\"> };\n\n/**\n * Fold only canonical creation, factual closure, and durable handoff evidence. Storage commits\n * these changes with the source batch. Rebuild folds the same rules in sequence order; it may\n * suppress a delivery handoff only after its authoritative delivery row exists.\n */\nexport const workIndexChanges = Effect.fnUntraced(function* (\n envelope: CanonicalRecordEnvelope,\n reporting: WorkerReportingMode,\n): Effect.fn.Return<ReadonlyArray<WorkIndexChange>, ThreadStoreError> {\n const { record, sequence } = envelope;\n const payload = record.payload;\n\n if (\n !new Set([\n \"ModelResponseRecorded\",\n \"ToolCallUnknown\",\n \"ToolApprovalRequested\",\n \"ToolApprovalDecided\",\n \"ToolCallSettled\",\n \"ToolCallResolved\",\n \"SubagentRequested\",\n \"SubagentJoined\",\n \"WorkerInputRequested\",\n \"WorkerInputCompleted\",\n \"WorkerInputRefused\",\n \"WorkerOriginRecorded\",\n \"SubmissionSettled\",\n \"WorkerReportPrepared\",\n \"WorkerReportRefused\",\n \"PeerMessagePrepared\",\n \"AgentUpdateEmitted\",\n \"WorkerStopRequested\",\n \"SubtreeBudgetReserved\",\n \"WorkHandoffCompleted\",\n ]).has(payload._tag)\n )\n return [] as ReadonlyArray<WorkIndexChange>;\n\n const remove = (kind: string, ...ids: ReadonlyArray<string>): WorkIndexChange => ({\n _tag: \"Remove\",\n id: workId(kind, ...ids),\n });\n\n const put = (\n id: string,\n owner: WorkOwner,\n state: ThreadWorkEntry[\"state\"],\n wait?: ThreadWorkEntry[\"wait\"],\n ): WorkIndexChange => ({\n _tag: \"Put\",\n entry: {\n id,\n owner,\n stateReference: { _tag: \"Canonical\", recordId: record.recordId },\n state,\n ...(wait === undefined ? {} : { wait }),\n createdSequence: sequence,\n updatedSequence: sequence,\n originRecordId: record.recordId,\n },\n });\n\n const operation = (\n runId: RunId,\n toolCallId: ToolCallId,\n state: ThreadWorkEntry[\"state\"],\n wait?: ThreadWorkEntry[\"wait\"],\n ) =>\n put(\n workId(\"operation\", runId, toolCallId),\n { _tag: \"Operation\", runId, toolCallId },\n state,\n wait,\n );\n\n const handoff = (\n kind: Extract<WorkOwner, { _tag: \"Handoff\" }>[\"kind\"],\n messageId?: IdempotencyKey,\n childThreadId?: ThreadId,\n ) =>\n put(\n workId(\"handoff\", record.recordId),\n {\n _tag: \"Handoff\",\n recordId: record.recordId,\n kind,\n ...(messageId === undefined ? {} : { messageId }),\n ...(childThreadId === undefined ? {} : { childThreadId }),\n },\n \"handoff\",\n \"destination\",\n );\n\n switch (payload._tag) {\n case \"ModelResponseRecorded\":\n return payload.toolOperations.map((call) =>\n operation(payload.runId, call.toolCallId, \"ready\"),\n );\n case \"ToolCallUnknown\":\n return [operation(payload.runId, payload.toolCallId, \"unknown\", \"effect-resolution\")];\n case \"ToolApprovalRequested\":\n return [operation(payload.runId, payload.toolCallId, \"waiting\", \"approval\")];\n case \"ToolApprovalDecided\":\n return [operation(payload.runId, payload.toolCallId, \"ready\")];\n case \"ToolCallSettled\":\n return [remove(\"operation\", payload.runId, payload.toolCallId)];\n case \"ToolCallResolved\":\n return payload.resolution === \"safe-retry\"\n ? [operation(payload.runId, payload.toolCallId, \"unknown\", \"effect-resolution\")]\n : [remove(\"operation\", payload.runId, payload.toolCallId)];\n case \"SubagentRequested\":\n return [\n remove(\"reservation\", payload.reservationId),\n put(\n workId(\"child\", payload.runId, payload.toolCallId),\n {\n _tag: \"Child\",\n runId: payload.runId,\n toolCallId: payload.toolCallId,\n childThreadId: payload.childThreadId,\n },\n \"waiting\",\n \"child\",\n ),\n ];\n case \"SubagentJoined\":\n return [remove(\"child\", payload.runId, payload.toolCallId), handoff(\"child-accounting\")];\n case \"WorkerInputRequested\":\n return [\n remove(\"reservation\", payload.admission.messageId),\n put(\n workId(\"worker-input\", payload.admission.messageId),\n {\n _tag: \"WorkerInput\",\n messageId: payload.admission.messageId,\n workerThreadId: payload.admission.origin.worker.threadId,\n update: payload.admission.reportKind === \"update\",\n },\n \"waiting\",\n \"worker\",\n ),\n ];\n case \"WorkerInputCompleted\":\n return payload.effectsResolved === true\n ? [\n remove(\"worker-input\", payload.messageId),\n remove(\"worker-effects\", payload.submissionId),\n ]\n : [];\n case \"WorkerInputRefused\":\n return [\n {\n _tag: \"Remove\",\n id: workId(\"worker-input\", payload.messageId),\n stateRecordId: payload.reservation.recordId,\n },\n {\n _tag: \"Remove\",\n id: workId(\"reservation\", payload.messageId),\n stateRecordId: payload.reservation.recordId,\n },\n ];\n case \"WorkerOriginRecorded\":\n return [\n {\n _tag: \"WorkerMode\",\n mode: payload.origin.reporting?.mode === \"standard\" ? \"standard\" : \"private\",\n },\n ];\n case \"SubmissionSettled\":\n return reporting === \"none\"\n ? []\n : [\n put(\n workId(\"worker-effects\", payload.submissionId),\n { _tag: \"WorkerEffects\", submissionId: payload.submissionId },\n \"waiting\",\n \"effect-resolution\",\n ),\n ...(reporting === \"standard\" &&\n payload.runId === runIdForSubmission(payload.submissionId)\n ? [\n put(\n workId(\"report\", payload.runId),\n { _tag: \"Report\", runId: payload.runId },\n \"ready\",\n ),\n ]\n : []),\n ];\n case \"WorkerReportPrepared\":\n return [remove(\"report\", payload.runId), handoff(\"report\", payload.messageId)];\n case \"WorkerReportRefused\":\n return [remove(\"report\", payload.runId)];\n case \"PeerMessagePrepared\":\n return [handoff(\"peer\", payload.messageId)];\n case \"AgentUpdateEmitted\":\n return payload.delivery === undefined ? [] : [handoff(\"update\", payload.delivery.messageId)];\n case \"WorkerStopRequested\":\n return [handoff(\"worker-stop\", undefined, payload.command.worker.threadId)];\n case \"SubtreeBudgetReserved\":\n return [\n put(\n workId(\"reservation\", payload.reservationId),\n {\n _tag: \"Handoff\",\n recordId: record.recordId,\n kind: \"reservation\",\n childThreadId: payload.childThreadId,\n },\n \"waiting\",\n \"capacity\",\n ),\n ];\n case \"WorkHandoffCompleted\":\n return [{ _tag: \"Remove\", id: payload.ownerId }];\n default:\n return [];\n }\n});\n\n/** Backfill is chronological. A state's creation identity never changes on later updates. */\nexport const advanceWorkEntry = (\n previous: CanonicalWorkEntry | undefined,\n next: CanonicalWorkEntry,\n): CanonicalWorkEntry =>\n previous === undefined\n ? next\n : {\n ...next,\n createdSequence: previous.createdSequence,\n originRecordId: previous.originRecordId,\n };\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { RunId, SubmissionId, ThreadId, ToolCallId } from "../core/Identifiers.mjs";
3
- import { U as PersistedJson, b as Digest, g as DeclaredToolCall } from "../Records-BiuJDWNe.mjs";
3
+ import { U as PersistedJson, b as Digest, g as DeclaredToolCall } from "../Records-DzL4Kbtw.mjs";
4
4
  import { Context, Effect, Layer, Schema } from "effect";
5
5
  //#region src/durable/ToolReconciler.ts
6
6
  var ToolReconciler_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
- import { Context, Deferred, Effect, Layer, Ref, Stream } from "effect";
2
+ import { Context, Deferred, Effect, Layer, Stream } from "effect";
3
3
  //#region src/durable/WakeScheduler.ts
4
4
  var WakeScheduler_exports = /* @__PURE__ */ __exportAll({
5
5
  WakeScheduler: () => WakeScheduler,
@@ -11,46 +11,30 @@ var WakeScheduler_exports = /* @__PURE__ */ __exportAll({
11
11
  * rechecks canonical storage. Scope finalizers remove cancelled waiters, and notify broadcasts
12
12
  * instead of consuming a signal that belongs to another waiter.
13
13
  */
14
- const makeWakeSubscriptionHub = Effect.gen(function* () {
15
- const registrations = yield* Ref.make(/* @__PURE__ */ new Map());
16
- const nextId = yield* Ref.make(0);
17
- const remove = (threadId, id) => Ref.update(registrations, (current) => {
18
- const existing = current.get(threadId);
19
- if (existing === void 0 || !existing.has(id)) return current;
20
- const next = new Map(current);
21
- const thread = new Map(existing);
22
- thread.delete(id);
23
- if (thread.size === 0) next.delete(threadId);
24
- else next.set(threadId, thread);
25
- return next;
14
+ const makeWakeSubscriptionHub = Effect.sync(() => {
15
+ const registrations = /* @__PURE__ */ new Map();
16
+ const subscribe = (threadId) => Effect.acquireRelease(Effect.sync(() => {
17
+ const deferred = Deferred.makeUnsafe();
18
+ let waiters = registrations.get(threadId);
19
+ if (waiters === void 0) {
20
+ waiters = /* @__PURE__ */ new Set();
21
+ registrations.set(threadId, waiters);
22
+ }
23
+ waiters.add(deferred);
24
+ return deferred;
25
+ }), (deferred) => Effect.sync(() => {
26
+ const waiters = registrations.get(threadId);
27
+ if (waiters?.delete(deferred) && waiters.size === 0) registrations.delete(threadId);
28
+ })).pipe(Effect.map(Deferred.await));
29
+ const notify = (threadId) => Effect.sync(() => {
30
+ const waiters = registrations.get(threadId);
31
+ if (waiters === void 0) return;
32
+ registrations.delete(threadId);
33
+ for (const waiter of waiters) Deferred.doneUnsafe(waiter, Effect.void);
26
34
  });
27
35
  return {
28
- subscribe: Effect.fnUntraced(function* (threadId) {
29
- const deferred = yield* Deferred.make();
30
- const registration = {
31
- id: yield* Ref.getAndUpdate(nextId, (current) => current + 1),
32
- deferred
33
- };
34
- yield* Effect.addFinalizer(() => remove(threadId, registration.id));
35
- yield* Ref.update(registrations, (current) => {
36
- const next = new Map(current);
37
- const thread = new Map(current.get(threadId) ?? []);
38
- thread.set(registration.id, registration.deferred);
39
- next.set(threadId, thread);
40
- return next;
41
- });
42
- return Deferred.await(registration.deferred);
43
- }),
44
- notify: Effect.fnUntraced(function* (threadId) {
45
- const waiters = yield* Ref.modify(registrations, (current) => {
46
- const thread = current.get(threadId);
47
- if (thread === void 0) return [[], current];
48
- const next = new Map(current);
49
- next.delete(threadId);
50
- return [[...thread.values()], next];
51
- });
52
- yield* Effect.forEach(waiters, (waiter) => Deferred.succeed(waiter, void 0), { discard: true });
53
- })
36
+ subscribe,
37
+ notify
54
38
  };
55
39
  });
56
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"WakeScheduler.mjs","names":[],"sources":["../../src/durable/WakeScheduler.ts"],"sourcesContent":["import type { Scope } from \"effect\";\nimport { Context, Deferred, Effect, Layer, Ref, Stream } from \"effect\";\n\nimport { type ThreadId } from \"../core/Identifiers.ts\";\n\n/**\n * Incarnation-local, thread-keyed wake registrations. A registration is installed before\n * its returned Effect can be awaited, which lets a caller subscribe, check durable authority,\n * and then park without a lost-wakeup window.\n */\nexport interface WakeSubscriptionHub {\n /** Register one Scope-owned waiter and return its one-shot wake Effect. */\n readonly subscribe: (\n threadId: ThreadId,\n ) => Effect.Effect<Effect.Effect<void>, never, Scope.Scope>;\n /** Wake every currently registered waiter for exactly this Thread. */\n readonly notify: (threadId: ThreadId) => Effect.Effect<void>;\n}\n\ninterface WakeRegistration {\n readonly id: number;\n readonly deferred: Deferred.Deferred<void>;\n}\n\ntype WakeRegistrations = ReadonlyMap<ThreadId, ReadonlyMap<number, Deferred.Deferred<void>>>;\n\n/**\n * Build the shared per-incarnation registration primitive used by host WakeSchedulers. The hub\n * contains hints only: eviction may discard it, while a reconnecting caller re-subscribes and\n * rechecks canonical storage. Scope finalizers remove cancelled waiters, and notify broadcasts\n * instead of consuming a signal that belongs to another waiter.\n */\nexport const makeWakeSubscriptionHub: Effect.Effect<WakeSubscriptionHub> = Effect.gen(function* () {\n const registrations = yield* Ref.make<WakeRegistrations>(new Map());\n const nextId = yield* Ref.make(0);\n\n const remove = (threadId: ThreadId, id: number) =>\n Ref.update(registrations, (current) => {\n const existing = current.get(threadId);\n\n if (existing === undefined || !existing.has(id)) return current;\n const next = new Map(current);\n const thread = new Map(existing);\n\n thread.delete(id);\n if (thread.size === 0) {\n next.delete(threadId);\n } else {\n next.set(threadId, thread);\n }\n\n return next;\n });\n\n const subscribe = Effect.fnUntraced(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<Effect.Effect<void>, never, Scope.Scope> {\n const deferred = yield* Deferred.make<void>();\n const id = yield* Ref.getAndUpdate(nextId, (current) => current + 1);\n const registration: WakeRegistration = { id, deferred };\n\n yield* Effect.addFinalizer(() => remove(threadId, registration.id));\n yield* Ref.update(registrations, (current) => {\n const next = new Map(current);\n const thread = new Map(current.get(threadId) ?? []);\n\n thread.set(registration.id, registration.deferred);\n next.set(threadId, thread);\n\n return next;\n });\n\n return Deferred.await(registration.deferred);\n });\n\n const notify = Effect.fnUntraced(function* (threadId: ThreadId) {\n const waiters = yield* Ref.modify(registrations, (current) => {\n const thread = current.get(threadId);\n\n if (thread === undefined) return [[], current] as const;\n const next = new Map(current);\n\n next.delete(threadId);\n\n return [[...thread.values()], next] as const;\n });\n\n yield* Effect.forEach(waiters, (waiter) => Deferred.succeed(waiter, undefined), {\n discard: true,\n });\n });\n\n return { subscribe, notify };\n});\n\n/**\n * Liveness hint channel for durable schedulers. `notify` announces that a Thread lane may\n * have claimable, canonical, or settled work; `wakes` is the all-lanes subscription surface for\n * workers, while `subscribe` installs an efficient one-Thread wait registration. Progress hints\n * may skip settlement registrations, whose readers only need finalized submissions. Adapters\n * may conservatively ignore the optional modes; decorators should forward them to retain filtering.\n *\n * Correctness must NEVER depend on delivery: notifications may be dropped, coalesced, duplicated,\n * or observed by no subscriber (a notify before any subscription is simply lost). Every consumer\n * must pair a wake with durable authority: workers use periodic SubmissionLedger scans, while a\n * public progress waiter subscribes before its canonical read and reconnects/rechecks after an\n * incarnation loss (persistence §14).\n *\n * Each run of `wakes` creates its own subscription whose resources live in that run's Scope and\n * are released when the consuming stream ends or is interrupted. Implementations must not spawn\n * daemon fibers.\n */\nexport class WakeScheduler extends Context.Service<\n WakeScheduler,\n {\n /**\n * Run a Thread's processing while the host coalesces redundant scheduling hints. The\n * default is to run `body` unchanged. Execute the body once, preserving its result, errors,\n * requirements, and interruption. This grants no ownership and must preserve local\n * waiter notifications, durable recovery deadlines, and progress for work awaited by `body`.\n * A host that defers hints must arrange a prompt wake for remaining work when `body` exits.\n */\n readonly withProcessing?: <A, E, R>(\n threadId: ThreadId,\n body: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n /**\n * Best-effort hint to workers and all Thread waiters. `progress` may omit settlement waiters,\n * but still reaches workers and progress waiters. Never fails.\n */\n readonly notify: (threadId: ThreadId, kind?: \"progress\") => Effect.Effect<void>;\n /**\n * Scope-owned one-shot registration for exactly one Thread. `settlement` prefers broad hints;\n * conservative adapters may also deliver progress. Every hint still requires an authority read.\n */\n readonly subscribe: (\n threadId: ThreadId,\n kind?: \"settlement\",\n ) => Effect.Effect<Effect.Effect<void>, never, Scope.Scope>;\n /** Scope-owned subscription to wake hints, starting at subscription time. */\n readonly wakes: Stream.Stream<ThreadId>;\n }\n>()(\"@effect-agent/thread/WakeScheduler\") {\n /**\n * Discards every notification and never wakes anyone. Valid because WakeScheduler is only a\n * liveness hint: consumers relying on ledger scans stay correct, merely slower.\n */\n static readonly layerNoop: Layer.Layer<WakeScheduler> = Layer.succeed(WakeScheduler, {\n notify: () => Effect.void,\n subscribe: () => Effect.succeed(Effect.never),\n wakes: Stream.never,\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAgCA,MAAa,0BAA8D,OAAO,IAAI,aAAa;CACjG,MAAM,gBAAgB,OAAO,IAAI,qBAAwB,IAAI,IAAI,CAAC;CAClE,MAAM,SAAS,OAAO,IAAI,KAAK,CAAC;CAEhC,MAAM,UAAU,UAAoB,OAClC,IAAI,OAAO,gBAAgB,YAAY;EACrC,MAAM,WAAW,QAAQ,IAAI,QAAQ;EAErC,IAAI,aAAa,KAAA,KAAa,CAAC,SAAS,IAAI,EAAE,GAAG,OAAO;EACxD,MAAM,OAAO,IAAI,IAAI,OAAO;EAC5B,MAAM,SAAS,IAAI,IAAI,QAAQ;EAE/B,OAAO,OAAO,EAAE;EAChB,IAAI,OAAO,SAAS,GAClB,KAAK,OAAO,QAAQ;OAEpB,KAAK,IAAI,UAAU,MAAM;EAG3B,OAAO;CACT,CAAC;CAwCH,OAAO;EAAE,WAtCS,OAAO,WAAW,WAClC,UAC2D;GAC3D,MAAM,WAAW,OAAO,SAAS,KAAW;GAE5C,MAAM,eAAiC;IAAE,IAAA,OADvB,IAAI,aAAa,SAAS,YAAY,UAAU,CAAC;IACtB;GAAS;GAEtD,OAAO,OAAO,mBAAmB,OAAO,UAAU,aAAa,EAAE,CAAC;GAClE,OAAO,IAAI,OAAO,gBAAgB,YAAY;IAC5C,MAAM,OAAO,IAAI,IAAI,OAAO;IAC5B,MAAM,SAAS,IAAI,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC;IAElD,OAAO,IAAI,aAAa,IAAI,aAAa,QAAQ;IACjD,KAAK,IAAI,UAAU,MAAM;IAEzB,OAAO;GACT,CAAC;GAED,OAAO,SAAS,MAAM,aAAa,QAAQ;EAC7C,CAmBiB;EAAG,QAjBL,OAAO,WAAW,WAAW,UAAoB;GAC9D,MAAM,UAAU,OAAO,IAAI,OAAO,gBAAgB,YAAY;IAC5D,MAAM,SAAS,QAAQ,IAAI,QAAQ;IAEnC,IAAI,WAAW,KAAA,GAAW,OAAO,CAAC,CAAC,GAAG,OAAO;IAC7C,MAAM,OAAO,IAAI,IAAI,OAAO;IAE5B,KAAK,OAAO,QAAQ;IAEpB,OAAO,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG,IAAI;GACpC,CAAC;GAED,OAAO,OAAO,QAAQ,UAAU,WAAW,SAAS,QAAQ,QAAQ,KAAA,CAAS,GAAG,EAC9E,SAAS,KACX,CAAC;EACH,CAEyB;CAAE;AAC7B,CAAC;;;;;;;;;;;;;;;;;;AAmBD,IAAa,gBAAb,MAAa,sBAAsB,QAAQ,QA8BzC,CAAC,CAAC,oCAAoC,CAAC,CAAC;;;;;CAKxC,OAAgB,YAAwC,MAAM,QAAQ,eAAe;EACnF,cAAc,OAAO;EACrB,iBAAiB,OAAO,QAAQ,OAAO,KAAK;EAC5C,OAAO,OAAO;CAChB,CAAC;AACH"}
1
+ {"version":3,"file":"WakeScheduler.mjs","names":[],"sources":["../../src/durable/WakeScheduler.ts"],"sourcesContent":["import type { Scope } from \"effect\";\nimport { Context, Deferred, Effect, Layer, Stream } from \"effect\";\n\nimport { type ThreadId } from \"../core/Identifiers.ts\";\n\n/**\n * Incarnation-local, thread-keyed wake registrations. A registration is installed before\n * its returned Effect can be awaited, which lets a caller subscribe, check durable authority,\n * and then park without a lost-wakeup window.\n */\nexport interface WakeSubscriptionHub {\n /** Register one Scope-owned waiter and return its one-shot wake Effect. */\n readonly subscribe: (\n threadId: ThreadId,\n ) => Effect.Effect<Effect.Effect<void>, never, Scope.Scope>;\n /** Wake every currently registered waiter for exactly this Thread. */\n readonly notify: (threadId: ThreadId) => Effect.Effect<void>;\n}\n\n/**\n * Build the shared per-incarnation registration primitive used by host WakeSchedulers. The hub\n * contains hints only: eviction may discard it, while a reconnecting caller re-subscribes and\n * rechecks canonical storage. Scope finalizers remove cancelled waiters, and notify broadcasts\n * instead of consuming a signal that belongs to another waiter.\n */\nexport const makeWakeSubscriptionHub: Effect.Effect<WakeSubscriptionHub> = Effect.sync(() => {\n const registrations = new Map<ThreadId, Set<Deferred.Deferred<void>>>();\n\n const subscribe = (threadId: ThreadId) =>\n Effect.acquireRelease(\n Effect.sync(() => {\n const deferred = Deferred.makeUnsafe<void>();\n let waiters = registrations.get(threadId);\n\n if (waiters === undefined) {\n waiters = new Set();\n registrations.set(threadId, waiters);\n }\n waiters.add(deferred);\n\n return deferred;\n }),\n (deferred) =>\n Effect.sync(() => {\n const waiters = registrations.get(threadId);\n\n if (waiters?.delete(deferred) && waiters.size === 0) registrations.delete(threadId);\n }),\n ).pipe(Effect.map(Deferred.await));\n\n const notify = (threadId: ThreadId) =>\n Effect.sync(() => {\n const waiters = registrations.get(threadId);\n\n if (waiters === undefined) return;\n // Detach before resuming: a resumed waiter may register its next wait immediately.\n registrations.delete(threadId);\n for (const waiter of waiters) Deferred.doneUnsafe(waiter, Effect.void);\n });\n\n return { subscribe, notify };\n});\n\n/**\n * Liveness hint channel for durable schedulers. `notify` announces that a Thread lane may\n * have claimable, canonical, or settled work; `wakes` is the all-lanes subscription surface for\n * workers, while `subscribe` installs an efficient one-Thread wait registration. Progress hints\n * may skip settlement registrations, whose readers only need finalized submissions. Adapters\n * may conservatively ignore the optional modes; decorators should forward them to retain filtering.\n *\n * Correctness must NEVER depend on delivery: notifications may be dropped, coalesced, duplicated,\n * or observed by no subscriber (a notify before any subscription is simply lost). Every consumer\n * must pair a wake with durable authority: workers use periodic SubmissionLedger scans, while a\n * public progress waiter subscribes before its canonical read and reconnects/rechecks after an\n * incarnation loss (persistence §14).\n *\n * Each run of `wakes` creates its own subscription whose resources live in that run's Scope and\n * are released when the consuming stream ends or is interrupted. Implementations must not spawn\n * daemon fibers.\n */\nexport class WakeScheduler extends Context.Service<\n WakeScheduler,\n {\n /**\n * Run a Thread's processing while the host coalesces redundant scheduling hints. The\n * default is to run `body` unchanged. Execute the body once, preserving its result, errors,\n * requirements, and interruption. This grants no ownership and must preserve local\n * waiter notifications, durable recovery deadlines, and progress for work awaited by `body`.\n * A host that defers hints must arrange a prompt wake for remaining work when `body` exits.\n */\n readonly withProcessing?: <A, E, R>(\n threadId: ThreadId,\n body: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n /**\n * Best-effort hint to workers and all Thread waiters. `progress` may omit settlement waiters,\n * but still reaches workers and progress waiters. Never fails.\n */\n readonly notify: (threadId: ThreadId, kind?: \"progress\") => Effect.Effect<void>;\n /**\n * Scope-owned one-shot registration for exactly one Thread. `settlement` prefers broad hints;\n * conservative adapters may also deliver progress. Every hint still requires an authority read.\n */\n readonly subscribe: (\n threadId: ThreadId,\n kind?: \"settlement\",\n ) => Effect.Effect<Effect.Effect<void>, never, Scope.Scope>;\n /** Scope-owned subscription to wake hints, starting at subscription time. */\n readonly wakes: Stream.Stream<ThreadId>;\n }\n>()(\"@effect-agent/thread/WakeScheduler\") {\n /**\n * Discards every notification and never wakes anyone. Valid because WakeScheduler is only a\n * liveness hint: consumers relying on ledger scans stay correct, merely slower.\n */\n static readonly layerNoop: Layer.Layer<WakeScheduler> = Layer.succeed(WakeScheduler, {\n notify: () => Effect.void,\n subscribe: () => Effect.succeed(Effect.never),\n wakes: Stream.never,\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,MAAa,0BAA8D,OAAO,WAAW;CAC3F,MAAM,gCAAgB,IAAI,IAA4C;CAEtE,MAAM,aAAa,aACjB,OAAO,eACL,OAAO,WAAW;EAChB,MAAM,WAAW,SAAS,WAAiB;EAC3C,IAAI,UAAU,cAAc,IAAI,QAAQ;EAExC,IAAI,YAAY,KAAA,GAAW;GACzB,0BAAU,IAAI,IAAI;GAClB,cAAc,IAAI,UAAU,OAAO;EACrC;EACA,QAAQ,IAAI,QAAQ;EAEpB,OAAO;CACT,CAAC,IACA,aACC,OAAO,WAAW;EAChB,MAAM,UAAU,cAAc,IAAI,QAAQ;EAE1C,IAAI,SAAS,OAAO,QAAQ,KAAK,QAAQ,SAAS,GAAG,cAAc,OAAO,QAAQ;CACpF,CAAC,CACL,CAAC,CAAC,KAAK,OAAO,IAAI,SAAS,KAAK,CAAC;CAEnC,MAAM,UAAU,aACd,OAAO,WAAW;EAChB,MAAM,UAAU,cAAc,IAAI,QAAQ;EAE1C,IAAI,YAAY,KAAA,GAAW;EAE3B,cAAc,OAAO,QAAQ;EAC7B,KAAK,MAAM,UAAU,SAAS,SAAS,WAAW,QAAQ,OAAO,IAAI;CACvE,CAAC;CAEH,OAAO;EAAE;EAAW;CAAO;AAC7B,CAAC;;;;;;;;;;;;;;;;;;AAmBD,IAAa,gBAAb,MAAa,sBAAsB,QAAQ,QA8BzC,CAAC,CAAC,oCAAoC,CAAC,CAAC;;;;;CAKxC,OAAgB,YAAwC,MAAM,QAAQ,eAAe;EACnF,cAAc,OAAO;EACrB,iBAAiB,OAAO,QAAQ,OAAO,KAAK;EAC5C,OAAO,OAAO;CAChB,CAAC;AACH"}