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

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 (198) hide show
  1. package/dist/{Admin-DTDihBra.d.mts → Admin-NvXFPDIM.d.mts} +32 -12
  2. package/dist/{Agent-BiRbr73L.mjs → Agent-B3J0B4l6.mjs} +6 -3
  3. package/dist/Agent-B3J0B4l6.mjs.map +1 -0
  4. package/dist/{AgentRuntime-DaDKMasp.mjs → AgentRuntime-DrQfy4cL.mjs} +7 -6
  5. package/dist/AgentRuntime-DrQfy4cL.mjs.map +1 -0
  6. package/dist/{AgentRuntime-CHDyRbSf.d.mts → AgentRuntime-Dx5u_FJD.d.mts} +6 -6
  7. package/dist/{Digest-C3EODOee.mjs → Digest-ft4ku9pj.mjs} +2 -2
  8. package/dist/{Digest-C3EODOee.mjs.map → Digest-ft4ku9pj.mjs.map} +1 -1
  9. package/dist/{DurableAgentRuntime-BJbuIqQq.mjs → DurableAgentRuntime-CWhu1exp.mjs} +142 -96
  10. package/dist/DurableAgentRuntime-CWhu1exp.mjs.map +1 -0
  11. package/dist/{DurableStep-DXGn7KQ4.d.mts → DurableStep-CAJnlgfL.d.mts} +5 -4
  12. package/dist/{EventSource-Cc58uEso.d.mts → EventSource-DNyaWmyQ.d.mts} +2 -2
  13. package/dist/{MessageDelivery-ClHg7c0O.d.mts → MessageDelivery-CLzWJImC.d.mts} +4 -4
  14. package/dist/{Messaging-SVu6rWV8.d.mts → Messaging-DpEZMTVE.d.mts} +2 -2
  15. package/dist/{MessagingHost-CZCyrnvJ.mjs → MessagingHost-BILcuj0V.mjs} +2 -2
  16. package/dist/{MessagingHost-CZCyrnvJ.mjs.map → MessagingHost-BILcuj0V.mjs.map} +1 -1
  17. package/dist/{MessagingHost-C6SOAcoG.d.mts → MessagingHost-BKxDskYj.d.mts} +2 -2
  18. package/dist/{PreparedInputAdmission-CjcX1OP0.d.mts → PreparedInputAdmission-BQ9UCLFS.d.mts} +3 -3
  19. package/dist/{Records-DzL4Kbtw.mjs → Records-CZRedCE7.mjs} +3 -3
  20. package/dist/{Records-DzL4Kbtw.mjs.map → Records-CZRedCE7.mjs.map} +1 -1
  21. package/dist/{RunContinuation-CWHuciup.mjs → RunContinuation-BF95Ncv2.mjs} +12 -14
  22. package/dist/RunContinuation-BF95Ncv2.mjs.map +1 -0
  23. package/dist/{RunContinuation-DSnUTSSb.d.mts → RunContinuation-CL0wBsQE.d.mts} +3 -6
  24. package/dist/{RunJournal-DGblbFas.mjs → RunJournal-oJLo-pjS.mjs} +3 -3
  25. package/dist/{RunJournal-DGblbFas.mjs.map → RunJournal-oJLo-pjS.mjs.map} +1 -1
  26. package/dist/{RunOptions-Be77lKVZ.d.mts → RunOptions-BANtohGk.d.mts} +3 -3
  27. package/dist/{RunStorage-BF2YgWkg.mjs → RunStorage-DlfvMfHM.mjs} +20 -6
  28. package/dist/RunStorage-DlfvMfHM.mjs.map +1 -0
  29. package/dist/{Scheduling-07_dsGED.mjs → Scheduling-BebkRVc2.mjs} +3 -3
  30. package/dist/{Scheduling-07_dsGED.mjs.map → Scheduling-BebkRVc2.mjs.map} +1 -1
  31. package/dist/{Subagent-xhN_aD1r.d.mts → Subagent-5ulnV6An.d.mts} +9 -9
  32. package/dist/{Subagent-CexndZSp.mjs → Subagent-C7F7c8Op.mjs} +3 -3
  33. package/dist/{Subagent-CexndZSp.mjs.map → Subagent-C7F7c8Op.mjs.map} +1 -1
  34. package/dist/{SubagentHost-D1xBgn9g.d.mts → SubagentHost-CikdGpmk.d.mts} +2 -2
  35. package/dist/{Subscription-DuC_PcGx.d.mts → Subscription-D2yn6Eo3.d.mts} +2 -2
  36. package/dist/{SubscriptionInput-B1IeAEDi.d.mts → SubscriptionInput-Cog4x7Rd.d.mts} +2 -2
  37. package/dist/{ThreadImport-ZgWxf7bB.mjs → ThreadImport-BoTfjjrz.mjs} +9 -9
  38. package/dist/{ThreadImport-ZgWxf7bB.mjs.map → ThreadImport-BoTfjjrz.mjs.map} +1 -1
  39. package/dist/{ThreadImport-D_Biid6w.d.mts → ThreadImport-CMKa8U7y.d.mts} +42 -42
  40. package/dist/{ThreadStore-BC4V-mY-.mjs → ThreadStore-D2rqtt7k.mjs} +17 -12
  41. package/dist/ThreadStore-D2rqtt7k.mjs.map +1 -0
  42. package/dist/{ThreadTransfer-S7FnTRHt.mjs → ThreadTransfer-BFolkpEp.mjs} +4 -4
  43. package/dist/{ThreadTransfer-S7FnTRHt.mjs.map → ThreadTransfer-BFolkpEp.mjs.map} +1 -1
  44. package/dist/{Worker-CHRaIsWu.d.mts → Worker-CLYgfqhF.d.mts} +7 -5
  45. package/dist/{Worker-DZjdMjZn.mjs → Worker-CtuUwYOK.mjs} +4 -2
  46. package/dist/Worker-CtuUwYOK.mjs.map +1 -0
  47. package/dist/{WorkerAdmission-C47Vy_cK.mjs → WorkerAdmission-CtX1HRkm.mjs} +6 -6
  48. package/dist/{WorkerAdmission-C47Vy_cK.mjs.map → WorkerAdmission-CtX1HRkm.mjs.map} +1 -1
  49. package/dist/{agent-registration-a6QYaG3h.mjs → agent-registration-Dt57NAP6.mjs} +5 -5
  50. package/dist/{agent-registration-a6QYaG3h.mjs.map → agent-registration-Dt57NAP6.mjs.map} +1 -1
  51. package/dist/capabilities/BrowserUse.d.mts +6 -2
  52. package/dist/capabilities/BrowserUse.mjs +23 -5
  53. package/dist/capabilities/BrowserUse.mjs.map +1 -1
  54. package/dist/capabilities/CodeMode.mjs +2 -1
  55. package/dist/capabilities/CodeMode.mjs.map +1 -1
  56. package/dist/capabilities/Commands.d.mts +1 -1
  57. package/dist/capabilities/ContextTools.mjs +1 -1
  58. package/dist/capabilities/McpClient.mjs +1 -1
  59. package/dist/capabilities/MemoryNotes.d.mts +1 -1
  60. package/dist/capabilities/MemoryNotes.mjs +2 -1
  61. package/dist/capabilities/MemoryNotes.mjs.map +1 -1
  62. package/dist/capabilities/Messaging.d.mts +1 -1
  63. package/dist/capabilities/Messaging.mjs +2 -2
  64. package/dist/capabilities/RunHooks.d.mts +1 -1
  65. package/dist/capabilities/Subagent.d.mts +2 -2
  66. package/dist/capabilities/Subagent.mjs +2 -2
  67. package/dist/capabilities/ToolDiscovery.mjs +1 -1
  68. package/dist/capabilities/WebCapture.mjs +1 -1
  69. package/dist/capabilities/WebSearch.mjs +1 -1
  70. package/dist/core/Agent.mjs +1 -1
  71. package/dist/core/Worker.d.mts +1 -1
  72. package/dist/core/Worker.mjs +1 -1
  73. package/dist/durable/ActivityStore.mjs +1 -1
  74. package/dist/durable/Admin.d.mts +1 -1
  75. package/dist/durable/Admin.mjs +1 -1
  76. package/dist/durable/AgentRegistration.d.mts +1 -1
  77. package/dist/durable/AgentRegistration.mjs +1 -1
  78. package/dist/durable/Certification.d.mts +1 -1
  79. package/dist/durable/CommittedActivity.d.mts +1 -1
  80. package/dist/durable/CommittedActivity.mjs +3 -3
  81. package/dist/durable/Digest.mjs +1 -1
  82. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  83. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  84. package/dist/durable/EventSource.d.mts +1 -1
  85. package/dist/durable/EventSource.mjs +1 -1
  86. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  87. package/dist/durable/LifecyclePublication.d.mts +1 -1
  88. package/dist/durable/LifecyclePublication.mjs +3 -3
  89. package/dist/durable/MessageDelivery.d.mts +1 -1
  90. package/dist/durable/MessageDelivery.mjs +3 -3
  91. package/dist/durable/MessageDeliveryStoreConformance.d.mts +40 -40
  92. package/dist/durable/MessageDeliveryStoreConformance.mjs +3 -3
  93. package/dist/durable/PersistentHistory.d.mts +1 -1
  94. package/dist/durable/PersistentHistory.mjs +4 -4
  95. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  96. package/dist/durable/RecordFormat.mjs +1 -1
  97. package/dist/durable/Records.mjs +1 -1
  98. package/dist/durable/Recovery.d.mts +1 -1
  99. package/dist/durable/Recovery.mjs +1 -1
  100. package/dist/durable/RunContinuation.d.mts +2 -2
  101. package/dist/durable/RunContinuation.mjs +3 -3
  102. package/dist/durable/RunJournal.d.mts +1 -1
  103. package/dist/durable/RunJournal.mjs +1 -1
  104. package/dist/durable/RunStorage.d.mts +1 -1
  105. package/dist/durable/RunStorage.mjs +1 -1
  106. package/dist/durable/Schedule.mjs +1 -1
  107. package/dist/durable/ScheduleStoreConformance.mjs +1 -1
  108. package/dist/durable/ScheduleTransition.mjs +1 -1
  109. package/dist/durable/Scheduling.d.mts +1 -1
  110. package/dist/durable/Scheduling.mjs +1 -1
  111. package/dist/durable/SettlementPublisher.d.mts +1 -1
  112. package/dist/durable/SettlementPublisher.mjs +3 -3
  113. package/dist/durable/SubmissionLedger.d.mts +1 -1
  114. package/dist/durable/SubmissionLedger.mjs +4 -4
  115. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  116. package/dist/durable/SubmissionLedgerConformance.mjs +7 -7
  117. package/dist/durable/SubmissionStatus.d.mts +1 -1
  118. package/dist/durable/Subscription.d.mts +1 -1
  119. package/dist/durable/Subscription.mjs +2 -2
  120. package/dist/durable/SubscriptionInput.d.mts +1 -1
  121. package/dist/durable/SubscriptionInput.mjs +2 -2
  122. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  123. package/dist/durable/SubscriptionStoreConformance.mjs +1 -1
  124. package/dist/durable/SubscriptionTools.d.mts +3 -3
  125. package/dist/durable/SubscriptionTools.mjs +2 -1
  126. package/dist/durable/SubscriptionTools.mjs.map +1 -1
  127. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  128. package/dist/durable/SubscriptionTransition.mjs +1 -1
  129. package/dist/durable/Subscriptions.d.mts +5 -5
  130. package/dist/durable/Subscriptions.mjs +2 -2
  131. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  132. package/dist/durable/ThreadArchiveRange.mjs +1 -1
  133. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  134. package/dist/durable/ThreadContextHistory.mjs +2 -2
  135. package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
  136. package/dist/durable/ThreadImport.d.mts +1 -1
  137. package/dist/durable/ThreadImport.mjs +1 -1
  138. package/dist/durable/ThreadInvariants.d.mts +3 -3
  139. package/dist/durable/ThreadInvariants.mjs +4 -4
  140. package/dist/durable/ThreadProjection.mjs +1 -1
  141. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  142. package/dist/durable/ThreadReader.d.mts +1 -1
  143. package/dist/durable/ThreadReader.mjs +1 -1
  144. package/dist/durable/ThreadStore.d.mts +2 -2
  145. package/dist/durable/ThreadStore.mjs +3 -3
  146. package/dist/durable/ThreadStoreConformance.d.mts +2 -1
  147. package/dist/durable/ThreadStoreConformance.mjs +4 -4
  148. package/dist/durable/ThreadTransfer.d.mts +1 -1
  149. package/dist/durable/ThreadTransfer.mjs +1 -1
  150. package/dist/durable/ThreadWork.d.mts +1 -1
  151. package/dist/durable/ThreadWork.mjs +5 -5
  152. package/dist/durable/ToolReconciler.mjs +1 -1
  153. package/dist/durable/WorkerAdmission.d.mts +1 -1
  154. package/dist/durable/WorkerAdmission.mjs +1 -1
  155. package/dist/durable/WorkerHost.d.mts +2 -2
  156. package/dist/durable/WorkerHost.mjs +1 -1
  157. package/dist/engine/AgentRuntime.d.mts +1 -1
  158. package/dist/engine/AgentRuntime.mjs +1 -1
  159. package/dist/engine/DurableStep.d.mts +2 -2
  160. package/dist/engine/DurableStep.mjs +1 -11
  161. package/dist/engine/DurableStep.mjs.map +1 -1
  162. package/dist/engine/MessagingHost.d.mts +1 -1
  163. package/dist/engine/MessagingHost.mjs +1 -1
  164. package/dist/engine/RunOptions.d.mts +1 -1
  165. package/dist/engine/SubagentHost.d.mts +1 -1
  166. package/dist/engine/SubagentHost.mjs +1 -1
  167. package/dist/index.d.mts +16 -16
  168. package/dist/index.mjs +15 -15
  169. package/dist/{run-context-reader-DvTEq2RC.d.mts → run-context-reader-kpO9xhP2.d.mts} +2 -2
  170. package/dist/sandbox/CodeExecutor.d.mts +3 -1
  171. package/dist/sandbox/CodeExecutor.mjs +3 -1
  172. package/dist/sandbox/CodeExecutor.mjs.map +1 -1
  173. package/dist/tool-execution-Ba7tO7Pt.mjs +17 -0
  174. package/dist/tool-execution-Ba7tO7Pt.mjs.map +1 -0
  175. package/package.json +1 -1
  176. package/src/capabilities/BrowserUse.ts +25 -5
  177. package/src/capabilities/CodeMode.ts +1 -0
  178. package/src/core/Worker.ts +3 -1
  179. package/src/core/internal/agent-updates.ts +9 -1
  180. package/src/core/internal/tool-execution.ts +33 -0
  181. package/src/durable/DurableAgentRuntime.ts +152 -151
  182. package/src/durable/RunContinuation.ts +44 -32
  183. package/src/durable/RunStorage.ts +56 -15
  184. package/src/durable/ThreadStore.ts +11 -0
  185. package/src/durable/internal/agent-updates.ts +59 -3
  186. package/src/durable/internal/prompt-history-cache.ts +19 -3
  187. package/src/durable/internal/record-encoding.ts +8 -7
  188. package/src/durable/internal/worker-host.ts +3 -1
  189. package/src/engine/DurableStep.ts +5 -31
  190. package/src/engine/internal/agent-runtime.ts +2 -1
  191. package/src/sandbox/CodeExecutor.ts +3 -1
  192. package/dist/Agent-BiRbr73L.mjs.map +0 -1
  193. package/dist/AgentRuntime-DaDKMasp.mjs.map +0 -1
  194. package/dist/DurableAgentRuntime-BJbuIqQq.mjs.map +0 -1
  195. package/dist/RunContinuation-CWHuciup.mjs.map +0 -1
  196. package/dist/RunStorage-BF2YgWkg.mjs.map +0 -1
  197. package/dist/ThreadStore-BC4V-mY-.mjs.map +0 -1
  198. package/dist/Worker-DZjdMjZn.mjs.map +0 -1
@@ -2,12 +2,12 @@ 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 { QueueSequence } from "./core/Receipt.mjs";
5
- import { n as AssignmentTerminal } from "./Worker-DZjdMjZn.mjs";
6
- import { B as ObservationOffset, C as MAX_CANONICAL_RECORD_BYTES, D as MAX_PERSISTED_JSON_NODES, P as MAX_RUN_TOOL_CALL_IDENTITIES, T as MAX_PERSISTED_JSON_COLLECTION_LENGTH, U as PersistedJson, V as PROMPT_EVIDENCE_TAGS, W as ProducerId, X as RecordEnvelope, Z as RecordId, b as Digest, f as CanonicalSequence, i as BatchId, o as CURRENT_RECORD_FORMAT, u as CanonicalRecordEnvelope } from "./Records-DzL4Kbtw.mjs";
7
- import { c as boundedCanonicalJson, l as canonicalJson } from "./Digest-C3EODOee.mjs";
5
+ import { n as AssignmentTerminal } from "./Worker-CtuUwYOK.mjs";
6
+ import { B as ObservationOffset, C as MAX_CANONICAL_RECORD_BYTES, D as MAX_PERSISTED_JSON_NODES, P as MAX_RUN_TOOL_CALL_IDENTITIES, T as MAX_PERSISTED_JSON_COLLECTION_LENGTH, U as PersistedJson, V as PROMPT_EVIDENCE_TAGS, W as ProducerId, X as RecordEnvelope, Z as RecordId, b as Digest, f as CanonicalSequence, i as BatchId, o as CURRENT_RECORD_FORMAT, u as CanonicalRecordEnvelope } from "./Records-CZRedCE7.mjs";
7
+ import { c as boundedCanonicalJson, l as canonicalJson } from "./Digest-ft4ku9pj.mjs";
8
8
  import { AbortIntent, AdmissionRequest, ApprovalDecisionIntent, UnknownResolutionIntent } from "./durable/SubmissionLedger.mjs";
9
9
  import { ExportRecord, ExportedRecord } from "./durable/RecordFormat.mjs";
10
- import { O as subagentLineageRecordId, S as runIdForSubmission, X as workerOriginRecordId } from "./RunJournal-DGblbFas.mjs";
10
+ import { O as subagentLineageRecordId, S as runIdForSubmission, X as workerOriginRecordId } from "./RunJournal-oJLo-pjS.mjs";
11
11
  import { ScheduleInstant } from "./durable/Schedule.mjs";
12
12
  import { MessageDeliveryRecord } from "./durable/MessageDelivery.mjs";
13
13
  import { MAX_CANONICAL_BATCH_BYTES } from "./durable/ThreadArchiveRange.mjs";
@@ -90,18 +90,17 @@ const capturePayload = (payload) => {
90
90
  const copy = { ...payload };
91
91
  Object.setPrototypeOf(copy, Object.getPrototypeOf(payload));
92
92
  const copies = new WeakMap([[payload, copy]]);
93
- const pending = [copy];
94
93
  const owned = [copy];
95
- while (pending.length > 0) {
96
- const next = pending.pop();
97
- for (const [key, value] of Object.entries(next)) {
94
+ for (let index = 0; index < owned.length; index++) {
95
+ const next = owned[index];
96
+ for (const key of Object.keys(next)) {
97
+ const value = Reflect.get(next, key);
98
98
  if (!Predicate.isObjectOrArray(value)) continue;
99
99
  let child = copies.get(value);
100
100
  if (child === void 0) {
101
101
  const created = copyOwn(value);
102
102
  copies.set(value, created);
103
103
  owned.push(created);
104
- pending.push(created);
105
104
  child = created;
106
105
  }
107
106
  setOwn(next, key, child);
@@ -118,7 +117,8 @@ const ownWire = (wire, copies) => {
118
117
  const pending = Predicate.isObjectOrArray(wire) ? [wire] : [];
119
118
  while (pending.length > 0) {
120
119
  const next = pending.pop();
121
- for (const [key, value] of Object.entries(next)) {
120
+ for (const key of Object.keys(next)) {
121
+ const value = Reflect.get(next, key);
122
122
  if (!Predicate.isObjectOrArray(value)) continue;
123
123
  const copy = copies.get(value);
124
124
  if (copy !== void 0) setOwn(next, key, copy);
@@ -224,6 +224,7 @@ var ThreadStore_exports = /* @__PURE__ */ __exportAll({
224
224
  ExecutionCheckpoint: () => ExecutionCheckpoint,
225
225
  ExecutionRead: () => ExecutionRead,
226
226
  ExecutionUpdate: () => ExecutionUpdate,
227
+ FreshRunRead: () => FreshRunRead,
227
228
  LoadCheckpointRequest: () => LoadCheckpointRequest,
228
229
  MAX_PROMPT_CHECKPOINT_BYTES: () => MAX_PROMPT_CHECKPOINT_BYTES,
229
230
  MAX_PROMPT_CHECKPOINT_RUNS: () => 16,
@@ -765,6 +766,10 @@ var ThreadTail = class extends Schema.Class("@effect-agent/thread/ThreadTail")({
765
766
  tailSequence: CanonicalSequence
766
767
  }) {};
767
768
  var ThreadIdentityRequest = class extends Schema.Class("@effect-agent/thread/ThreadIdentityRequest")({ threadId: ThreadId }) {};
769
+ var FreshRunRead = class extends Schema.Class("@effect-agent/thread/FreshRunRead")({
770
+ threadId: ThreadId,
771
+ submissionId: SubmissionId
772
+ }) {};
768
773
  /**
769
774
  * One consistent snapshot: Thread ID, canonical tail, admission presence, first record,
770
775
  * exact worker origin, then exact subagent lineage. A row selected twice appears only
@@ -987,6 +992,6 @@ var ThreadReader = class ThreadReader extends Context.Service()("@effect-agent/t
987
992
  }
988
993
  };
989
994
  //#endregion
990
- export { ThreadTailRequest as $, ThreadExportRejected as A, ThreadPromptRead as B, ThreadApprovalFact as C, ThreadExportBatch as D, ThreadExport as E, ThreadIdentityRequest as F, ThreadResolutionFact as G, ThreadReadRequest as H, ThreadMaterialization as I, ThreadStore as J, ThreadRunInputRequest as K, ThreadNotMaterialized as L, ThreadExportSnapshot as M, ThreadExportSource as N, ThreadExportCursor as O, ThreadIdentity as P, ThreadTail as Q, ThreadObservation as R, ThreadAdmission as S, ThreadCommands as T, ThreadReader as U, ThreadRead as V, ThreadRecordRequest as W, ThreadStoreError as X, ThreadStoreDiagnostic as Y, ThreadStore_exports as Z, PromptCheckpointHead as _, isPreContinuationFact as _t, CommitBatch as a, canonicalBatchFitsTransfer as at, SelectedThreadRead as b, terminalUsageCharge as bt, ExecutionUpdate as c, makeTransferFactCheck as ct, MAX_PROMPT_CHECKPOINT_RUNS as d, transferPageFits as dt, ThreadVerificationRequest as et, MAX_THREAD_EXPORT_CURSOR_CHARS as f, transferRecordDependencies as ft, PromptCheckpoint as g, executionRunIds as gt, PreparedAppend as h, canonicalRunIds as ht, CheckpointRejected as i, ThreadWorkerStateRequest as it, ThreadExportRequest as j, ThreadExportRecord as k, LoadCheckpointRequest as l, readWorkerState as lt, MAX_THREAD_EXPORT_PAGE_RECORDS as m, recordEncoding as mt, AppendRequest as n, ThreadWorkerCapacityRequest as nt, ExecutionCheckpoint as o, getRecord as ot, MAX_THREAD_EXPORT_PAGE_BYTES as p, captureRecord as pt, ThreadSelection as q, AppendResult as r, ThreadWorkerSeal as rt, ExecutionRead as s, getRunInput as st, AppendConflict as t, ThreadWorkerCapacity as tt, MAX_PROMPT_CHECKPOINT_BYTES as u, streamExport as ut, PromptCheckpointRead as v, isTerminalBudgetFact as vt, ThreadCheckpoint as w, ThreadAbortFact as x, SaveCheckpointRequest as y, isWorkHandoff as yt, ThreadPeerCountRequest as z };
995
+ export { ThreadTail as $, ThreadExportRecord as A, ThreadPeerCountRequest as B, ThreadAdmission as C, ThreadExport as D, ThreadCommands as E, ThreadIdentity as F, ThreadRecordRequest as G, ThreadRead as H, ThreadIdentityRequest as I, ThreadSelection as J, ThreadResolutionFact as K, ThreadMaterialization as L, ThreadExportRequest as M, ThreadExportSnapshot as N, ThreadExportBatch as O, ThreadExportSource as P, ThreadStore_exports as Q, ThreadNotMaterialized as R, ThreadAbortFact as S, ThreadCheckpoint as T, ThreadReadRequest as U, ThreadPromptRead as V, ThreadReader as W, ThreadStoreDiagnostic as X, ThreadStore as Y, ThreadStoreError as Z, PromptCheckpoint as _, executionRunIds as _t, CommitBatch as a, ThreadWorkerStateRequest as at, SaveCheckpointRequest as b, isWorkHandoff as bt, ExecutionUpdate as c, getRunInput as ct, MAX_PROMPT_CHECKPOINT_BYTES as d, streamExport as dt, ThreadTailRequest as et, MAX_PROMPT_CHECKPOINT_RUNS as f, transferPageFits as ft, PreparedAppend as g, canonicalRunIds as gt, MAX_THREAD_EXPORT_PAGE_RECORDS as h, recordEncoding as ht, CheckpointRejected as i, ThreadWorkerSeal as it, ThreadExportRejected as j, ThreadExportCursor as k, FreshRunRead as l, makeTransferFactCheck as lt, MAX_THREAD_EXPORT_PAGE_BYTES as m, captureRecord as mt, AppendRequest as n, ThreadWorkerCapacity as nt, ExecutionCheckpoint as o, canonicalBatchFitsTransfer as ot, MAX_THREAD_EXPORT_CURSOR_CHARS as p, transferRecordDependencies as pt, ThreadRunInputRequest as q, AppendResult as r, ThreadWorkerCapacityRequest as rt, ExecutionRead as s, getRecord as st, AppendConflict as t, ThreadVerificationRequest as tt, LoadCheckpointRequest as u, readWorkerState as ut, PromptCheckpointHead as v, isPreContinuationFact as vt, ThreadApprovalFact as w, SelectedThreadRead as x, terminalUsageCharge as xt, PromptCheckpointRead as y, isTerminalBudgetFact as yt, ThreadObservation as z };
991
996
 
992
- //# sourceMappingURL=ThreadStore-BC4V-mY-.mjs.map
997
+ //# sourceMappingURL=ThreadStore-D2rqtt7k.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadStore-D2rqtt7k.mjs","names":[],"sources":["../src/durable/internal/record-ownership.ts","../src/durable/internal/record-encoding.ts","../src/durable/internal/transfer-dependencies.ts","../src/durable/ThreadStore.ts"],"sourcesContent":["import type { RunId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport type { ModelCallUsage } from \"../../core/Usage.ts\";\nimport type { RecordEnvelope } from \"../Records.ts\";\nimport { runIdForSubmission } from \"../RunJournal.ts\";\n\n/** Index membership comes from canonical owner fields, never parsing opaque identities. */\nexport const canonicalRunIds = ({ payload }: RecordEnvelope): ReadonlyArray<RunId> => {\n const ids = new Set<RunId>();\n\n if (\"runId\" in payload && payload.runId !== undefined) ids.add(payload.runId);\n if (payload._tag === \"AbortRequested\" || payload._tag === \"SubmissionSettled\")\n ids.add(runIdForSubmission(payload.submissionId));\n if (payload._tag === \"AgentUpdateEmitted\") ids.add(payload.update.runId);\n if (payload._tag === \"WorkerInputRequested\" && payload.admission.executionRunId !== null)\n ids.add(payload.admission.executionRunId);\n if (payload._tag === \"SubtreeBudgetReserved\" && payload.executionRunId !== null)\n ids.add(payload.executionRunId);\n if (payload._tag === \"PeerMessagePrepared\" && payload.source._tag === \"tool\")\n ids.add(payload.source.runId);\n\n return [...ids];\n};\n\n/** A joined Receipt's closure is discoverable from its host, but owns no host execution charge. */\nexport const executionRunIds = (record: RecordEnvelope): ReadonlyArray<RunId> =>\n record.payload._tag === \"SubmissionSettled\"\n ? [runIdForSubmission(record.payload.submissionId)]\n : canonicalRunIds(record);\n\n/**\n * These immutable preparations are durable handoff intents before a destination row exists.\n * Their canonical tag/identity index is published with the preparation and survives Run\n * settlement. WorkerInputCompleted closes capacity only with factual effectsResolved evidence;\n * ToolCallSettled/Resolved close operations, and destination delivery state owns transport closure.\n */\nexport const isWorkHandoff = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"WorkerInputRequested\" ||\n payload._tag === \"WorkerReportPrepared\" ||\n payload._tag === \"PeerMessagePrepared\" ||\n payload._tag === \"WorkerStopRequested\" ||\n payload._tag === \"SubtreeBudgetReserved\" ||\n payload._tag === \"SubagentRequested\" ||\n (payload._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined);\n\n/** A host can prepare independent work before the source admission ever starts a Run. */\nexport const isPreContinuationFact = (record: RecordEnvelope): boolean =>\n (isWorkHandoff(record) &&\n record.payload._tag !== \"SubagentRequested\" &&\n record.payload._tag !== \"AgentUpdateEmitted\") ||\n (record.payload._tag === \"UserInputRecorded\" && record.payload.kind === \"user\") ||\n record.payload._tag === \"AbortRequested\" ||\n record.payload._tag === \"SubmissionSettled\";\n\n/** Grouped usage is no larger than its original identities/components plus bounded counters. */\nexport const terminalUsageCharge = (calls: ReadonlyArray<ModelCallUsage>): number =>\n calls.reduce((bytes, call) => bytes + utf8ByteLength(JSON.stringify(call)) + 512, 0);\n\n/** These facts end accepted work or durably request its termination. */\nexport const isTerminalBudgetFact = ({ payload }: RecordEnvelope): boolean =>\n payload._tag === \"AbortRequested\" ||\n payload._tag === \"RunFailed\" ||\n payload._tag === \"RunCompleted\" ||\n payload._tag === \"SubmissionSettled\";\n","import { DateTime, Predicate, Result, Schema } from \"effect\";\n\nimport type { RunId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport { ExportedRecord } from \"../RecordFormat.ts\";\nimport {\n type CanonicalRecordPayload,\n MAX_CANONICAL_RECORD_BYTES,\n MAX_PERSISTED_JSON_COLLECTION_LENGTH,\n MAX_PERSISTED_JSON_DEPTH,\n MAX_PERSISTED_JSON_NODES,\n RecordEnvelope,\n type RecordJson,\n type RunContinuation,\n} from \"../Records.ts\";\nimport { boundedCanonicalJson, canonicalJson } from \"./canonical-json.ts\";\nimport {\n executionRunIds,\n isPreContinuationFact,\n isTerminalBudgetFact,\n terminalUsageCharge,\n} from \"./record-ownership.ts\";\n\nconst encodeRecord = Schema.encodeSync(RecordEnvelope);\n\nconst recordLimits = {\n depth: MAX_PERSISTED_JSON_DEPTH + 4,\n nodes: MAX_PERSISTED_JSON_NODES * 4,\n collectionLength: MAX_PERSISTED_JSON_COLLECTION_LENGTH,\n // UTF-16 units give a lower bound while serializing; capture checks the exact UTF-8 width.\n textUnits: MAX_CANONICAL_RECORD_BYTES,\n};\n\nexport class RecordEncodingError extends Schema.TaggedError<RecordEncodingError>()(\n \"RecordEncodingError\",\n { message: Schema.String, cause: Schema.optionalKey(Schema.Defect()) },\n) {}\n\nexport interface RecordEncoding {\n readonly canonical: RecordEnvelope;\n readonly wire: RecordJson;\n readonly json: string;\n readonly bytes: number;\n readonly progress: ProgressAppendRecord;\n}\n\ninterface CapturedRecordEncoding extends RecordEncoding {\n readonly wire: typeof RecordEnvelope.Encoded;\n}\n\n/** Private capture metadata, never caller-supplied wire data or execution authority. */\nexport interface ProgressAppendRecord {\n readonly recordId: RecordEnvelope[\"recordId\"];\n readonly runIds: ReadonlyArray<RunId>;\n readonly recordBytes: number;\n readonly terminalUsageBytes: number;\n readonly preContinuation: boolean;\n readonly terminal: boolean;\n readonly continuation?: RunContinuation;\n}\n\nconst progressRecord = (record: RecordEnvelope, bytes: number): ProgressAppendRecord => {\n const payload = record.payload;\n\n return Object.freeze({\n recordId: record.recordId,\n runIds: Object.freeze(executionRunIds(record)),\n recordBytes: bytes,\n preContinuation: isPreContinuationFact(record),\n terminal: isTerminalBudgetFact(record),\n terminalUsageBytes:\n payload._tag === \"ModelResponseRecorded\" || payload._tag === \"ModelCallAborted\"\n ? terminalUsageCharge(payload.modelUsage ?? [])\n : 0,\n ...(payload._tag === \"RunContinuation\" ? { continuation: payload } : {}),\n });\n};\n\nconst captured = new WeakMap<RecordEnvelope, CapturedRecordEncoding>();\n\n// Define own data properties so valid JSON keys never invoke inherited setters.\nconst setOwn = (target: object, key: PropertyKey, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n};\n\n/** JSON arrays use indexed values, even when inherited or non-enumerable. */\nconst copyOwn = (value: object): object => {\n if (!Array.isArray(value)) {\n const copy = { ...value };\n\n Object.setPrototypeOf(copy, Object.getPrototypeOf(value));\n\n return copy;\n }\n const copy: Array<unknown> = [];\n\n for (let index = 0; index < value.length; index++) setOwn(copy, index, value[index]);\n for (const key of Reflect.ownKeys(value)) {\n if (\n !Object.hasOwn(copy, key) &&\n Object.getOwnPropertyDescriptor(value, key)?.enumerable === true\n )\n setOwn(copy, key, Reflect.get(value, key));\n }\n\n return copy;\n};\n\n/** Own every fact before suspension; encoded JSON fields can share these private frozen values. */\nconst capturePayload = (payload: CanonicalRecordPayload) => {\n const copy = { ...payload };\n\n Object.setPrototypeOf(copy, Object.getPrototypeOf(payload));\n const copies = new WeakMap<object, object>([[payload, copy]]);\n\n const owned: Array<object> = [copy];\n\n for (let index = 0; index < owned.length; index++) {\n const next = owned[index]!;\n\n for (const key of Object.keys(next)) {\n const value = Reflect.get(next, key);\n\n if (!Predicate.isObjectOrArray(value)) continue;\n let child = copies.get(value);\n\n if (child === undefined) {\n const created = copyOwn(value);\n\n copies.set(value, created);\n owned.push(created);\n child = created;\n }\n setOwn(next, key, child);\n }\n }\n for (const value of owned) Object.freeze(value);\n\n return { payload: Object.freeze(copy), copies };\n};\n\n/** Schema-created structures are private; detach JSON pass-throughs using the same owned copy. */\nconst ownWire = <Wire extends RecordJson>(wire: Wire, copies: WeakMap<object, object>): Wire => {\n const pending: Array<object> = Predicate.isObjectOrArray(wire) ? [wire] : [];\n\n while (pending.length > 0) {\n const next = pending.pop()!;\n\n for (const key of Object.keys(next)) {\n const value = Reflect.get(next, key);\n\n if (!Predicate.isObjectOrArray(value)) continue;\n const copy = copies.get(value);\n\n if (copy !== undefined) setOwn(next, key, copy);\n else pending.push(value);\n }\n Object.freeze(next);\n }\n\n return wire;\n};\n\n/** Capture at the Schema boundary; only the privately owned result can reuse its encoding. */\nexport const captureRecord = (\n input: RecordEnvelope,\n): Result.Result<CapturedRecordEncoding, RecordEncodingError> => {\n try {\n const existing = captured.get(input);\n\n if (existing !== undefined) return Result.succeed(existing);\n const encoded = encodeRecord(input);\n const owned = capturePayload(input.payload);\n const wire = ownWire(encoded, owned.copies);\n const serialized = boundedCanonicalJson(wire, recordLimits);\n\n if (Result.isFailure(serialized))\n return Result.fail(RecordEncodingError.make({ message: serialized.failure.message }));\n const json = serialized.success;\n const bytes = utf8ByteLength(json);\n\n if (bytes > MAX_CANONICAL_RECORD_BYTES)\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical JSON exceeds its byte bound\" }),\n );\n const createdAt = DateTime.makeUnsafe(DateTime.toEpochMillis(input.createdAt));\n\n // DateTime fills this cache lazily; populate it before freezing our private copy.\n Object.freeze(DateTime.toPartsUtc(createdAt));\n Object.freeze(createdAt);\n\n const canonical = Object.freeze(\n RecordEnvelope.make(\n {\n ...input,\n createdAt,\n payload: owned.payload,\n },\n { disableChecks: true },\n ),\n );\n\n const encoding = Object.freeze({\n canonical,\n wire,\n json,\n bytes,\n progress: progressRecord(canonical, bytes),\n });\n\n captured.set(canonical, encoding);\n\n return Result.succeed(encoding);\n } catch (cause) {\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical record capture failed\", cause }),\n );\n }\n};\n\n/** Read evidence retains its original wire; fresh writes use the captured Schema encoding. */\nexport const recordEncoding = (\n record: RecordEnvelope,\n): Result.Result<RecordEncoding, RecordEncodingError> => {\n const existing = captured.get(record);\n\n if (existing !== undefined) return Result.succeed(existing);\n\n try {\n if (!(record instanceof ExportedRecord)) return captureRecord(record);\n const json = canonicalJson(record.wire);\n const bytes = utf8ByteLength(json);\n\n return Result.succeed({\n canonical: record,\n wire: record.wire,\n json,\n bytes,\n progress: progressRecord(record, bytes),\n });\n } catch (cause) {\n return Result.fail(\n RecordEncodingError.make({ message: \"Canonical record encoding failed\", cause }),\n );\n }\n};\n","import type { RecordEnvelope, RecordId } from \"../Records.ts\";\n\n/** Exact references outside one complete canonical batch. */\nexport const transferRecordDependencies = (\n records: ReadonlyArray<RecordEnvelope>,\n): ReadonlyArray<RecordId> => {\n const local = new Set(records.map((record) => record.recordId));\n const dependencies = new Set<RecordId>();\n\n for (const { payload } of records) {\n if (payload._tag === \"WorkerInputRefused\")\n for (const ref of [payload.reservation, payload.stop])\n if (!local.has(ref.recordId)) dependencies.add(ref.recordId);\n if (payload._tag === \"WorkHandoffCompleted\" && !local.has(payload.preparationId))\n dependencies.add(payload.preparationId);\n if (payload._tag === \"RunContextRecorded\")\n for (const ref of payload.retained)\n if (!local.has(ref.recordId)) dependencies.add(ref.recordId);\n if (payload._tag === \"RunContinuation\")\n for (const ref of [\n payload.originalInput,\n payload.savedContext,\n payload.latestResponse,\n payload.terminal,\n payload.lastFact,\n ])\n if (ref !== undefined && !local.has(ref.recordId)) dependencies.add(ref.recordId);\n }\n\n return [...dependencies].sort();\n};\n","import { Context, Effect, Layer, Option, Result, Schema, Stream, Struct } from \"effect\";\n\nimport { ReceiptId, RunId, SubmissionId, ThreadId, ToolCallId } from \"../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../core/internal/utf8.ts\";\nimport { QueueSequence } from \"../core/Receipt.ts\";\nimport { AssignmentTerminal } from \"../core/Worker.ts\";\nimport type { IntegrityReport } from \"./Admin.ts\";\nimport {\n captureRecord,\n recordEncoding,\n type ProgressAppendRecord,\n} from \"./internal/record-encoding.ts\";\nimport { transferRecordDependencies } from \"./internal/transfer-dependencies.ts\";\nimport type { LifecyclePublicationStorage } from \"./LifecyclePublication.ts\";\nimport { MessageDeliveryRecord } from \"./MessageDelivery.ts\";\nimport { ExportRecord } from \"./RecordFormat.ts\";\nimport {\n type CanonicalBatch,\n type RecordJson,\n BatchId,\n CanonicalRecordEnvelope,\n CanonicalSequence,\n CURRENT_RECORD_FORMAT,\n Digest,\n MAX_RUN_TOOL_CALL_IDENTITIES,\n ObservationOffset,\n PersistedJson,\n type PromptRecordEnvelope,\n ProducerId,\n RecordId,\n RecordEnvelope,\n type RunContinuation,\n} from \"./Records.ts\";\nimport { subagentLineageRecordId, workerOriginRecordId } from \"./RunJournal.ts\";\nimport { ScheduleInstant } from \"./Schedule.ts\";\nimport type { OwnershipLost } from \"./SubmissionLedger.ts\";\nimport {\n AbortIntent,\n AdmissionRequest,\n ApprovalDecisionIntent,\n UnknownResolutionIntent,\n} from \"./SubmissionLedger.ts\";\nimport { MAX_CANONICAL_BATCH_BYTES, type ThreadArchiveStorage } from \"./ThreadArchiveRange.ts\";\nimport type { ThreadWorkStorage } from \"./ThreadWork.ts\";\n\nexport const MAX_THREAD_EXPORT_PAGE_RECORDS = 256;\nexport const MAX_THREAD_EXPORT_PAGE_BYTES = 32 * 1024 * 1024;\nexport const MAX_THREAD_EXPORT_CURSOR_CHARS = 16_384;\n/** Includes a maximally JSON-escaped cursor, snapshot, seal, digests and page structure. */\nconst THREAD_EXPORT_METADATA_BYTES = 128 * 1024;\n\n/** Reserve the manifest identity even when no canonical record or admission exists yet. */\nexport const transferPageFits = (threadId: ThreadId, factBytes = 0): boolean =>\n utf8ByteLength(JSON.stringify(threadId)) + factBytes + THREAD_EXPORT_METADATA_BYTES <=\n MAX_THREAD_EXPORT_PAGE_BYTES;\n\n/** Check a complete retained fact before fresh acceptance; existing replays keep their identity. */\nexport const makeTransferFactCheck = <A, I>(schema: Schema.Codec<A, I>) => {\n const encode = Schema.encodeResult(Schema.fromJsonString(schema));\n\n return (threadId: ThreadId, fact: A): boolean => {\n const encoded = encode(fact);\n\n return Result.isSuccess(encoded) && transferPageFits(threadId, utf8ByteLength(encoded.success));\n };\n};\n\nexport { PROMPT_EVIDENCE_TAGS } from \"./Records.ts\";\n\n/** Counts of closed owner facts, computed only when an idle export begins. */\nexport const ThreadExportSnapshot = Schema.Struct({\n admissions: Schema.Natural,\n aborts: Schema.Natural,\n approvals: Schema.Natural,\n resolutions: Schema.Natural,\n deliveries: Schema.Natural,\n});\n\nexport type ThreadExportSnapshot = typeof ThreadExportSnapshot.Type;\n\n/** Irreversible Thread-local admission restriction, independent of claims and worker completion. */\nexport const ThreadWorkerSeal = Schema.Struct({ terminal: Schema.optionalKey(AssignmentTerminal) });\nexport type ThreadWorkerSeal = typeof ThreadWorkerSeal.Type;\n\n/** Opaque, snapshot-bound transfer position. Only the exporting adapter constructs it. */\nexport const ThreadExportCursor = Schema.NonEmptyString.check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_CURSOR_CHARS),\n);\n\nexport type ThreadExportCursor = typeof ThreadExportCursor.Type;\n\n/** Exact canonical identity; absence is not proof that an admission was never accepted. */\nexport const ThreadRecordRequest = Schema.Struct({ threadId: ThreadId, recordId: RecordId });\nexport type ThreadRecordRequest = typeof ThreadRecordRequest.Type;\n\n/** The original user input for a Run, excluding later joined inputs. */\nexport const ThreadRunInputRequest = Schema.Struct({ threadId: ThreadId, runId: RunId });\nexport type ThreadRunInputRequest = typeof ThreadRunInputRequest.Type;\n\n/** Native accounting for one funding Run; settled Thread history is never included. */\nexport const ThreadWorkerStateRequest = Schema.Struct({\n threadId: ThreadId,\n sourceSubmissionId: Schema.optionalKey(SubmissionId),\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(16_384)),\n});\n\nexport type ThreadWorkerStateRequest = typeof ThreadWorkerStateRequest.Type;\n\n/** Saturating count of outstanding peer intents and terminal deliveries inside their retention window. */\nexport const ThreadPeerCountRequest = Schema.Struct({\n threadId: ThreadId,\n nowMillis: ScheduleInstant,\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1000)),\n});\n\nexport type ThreadPeerCountRequest = typeof ThreadPeerCountRequest.Type;\n\n/** Capacity is derived from unresolved canonical obligations at this exact tail. */\nexport const ThreadWorkerCapacityRequest = Schema.Struct({\n threadId: ThreadId,\n workerThreadId: ThreadId,\n expectedTailSequence: CanonicalSequence,\n update: Schema.Boolean,\n activeLimit: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(100)),\n pendingLimit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n});\n\nexport type ThreadWorkerCapacityRequest = typeof ThreadWorkerCapacityRequest.Type;\n\nexport const ThreadWorkerCapacity = Schema.Struct({\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n /** min(actual distinct workers, activeLimit + 1); equality remains distinguishable. */\n activeWorkers: Schema.Natural.check(Schema.isLessThanOrEqualTo(101)),\n workerActive: Schema.Boolean,\n /** min(actual inputs in the requested partition, pendingLimit + 1). */\n pendingInputs: Schema.Natural.check(Schema.isLessThanOrEqualTo(101)),\n});\n\nexport type ThreadWorkerCapacity = typeof ThreadWorkerCapacity.Type;\n\n/** Explicit maintenance may traverse all pages while retaining only one bounded page or Run. */\nexport const ThreadVerificationRequest = Schema.Struct({\n threadId: ThreadId,\n requireAllSettled: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type ThreadVerificationRequest = typeof ThreadVerificationRequest.Type;\n\nexport interface ThreadVerificationStorage {\n readonly verify: (\n request: ThreadVerificationRequest,\n ) => Effect.Effect<IntegrityReport, ThreadStoreError | ThreadNotMaterialized>;\n}\n\nconst incomplete = (operation: string) =>\n ThreadStoreError.make({\n operation,\n message: \"Native canonical read is incomplete or corrupt\",\n });\n\n/** Collect a complete bounded selection, using canonical sequence as a sparse cursor. */\nconst selectedRecords = Effect.fnUntraced(function* (\n threadId: ThreadId,\n selection: ThreadSelection,\n limit: number,\n) {\n const store = yield* ThreadReader;\n const records: Array<CanonicalRecordEnvelope> = [];\n let bytes = 0;\n let afterSequence: CanonicalSequence | undefined;\n\n while (true) {\n const pageLimit = Math.min(8, limit + 1 - records.length);\n\n const page = yield* Stream.runCollect(\n store.read({\n threadId,\n selection,\n page: { limit: pageLimit, ...(afterSequence === undefined ? {} : { afterSequence }) },\n }),\n );\n\n for (const entry of page) {\n if (\n entry.threadId !== threadId ||\n entry.sequence <= (afterSequence ?? 0) ||\n (\"expectedTailSequence\" in selection && entry.sequence > selection.expectedTailSequence)\n )\n return yield* incomplete(\"read selection identity\");\n afterSequence = entry.sequence;\n bytes += yield* Effect.fromResult(recordEncoding(entry.record)).pipe(\n Effect.map((record) => record.bytes),\n Effect.mapError(() => incomplete(\"read selection bytes\")),\n );\n if (bytes > MAX_THREAD_EXPORT_PAGE_BYTES)\n return yield* incomplete(\"read selection byte limit\");\n records.push(entry);\n }\n if (page.length > pageLimit || records.length > limit)\n return yield* incomplete(\"read selection limit\");\n if (page.length < pageLimit) return records;\n }\n});\n\n/** Host-owned read: authenticate the Thread and exact locator before calling. */\nexport const getRecord = Effect.fnUntraced(function* (request: ThreadRecordRequest) {\n yield* Schema.decodeEffect(ThreadRecordRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"getRecord request\")),\n );\n\n const records = yield* selectedRecords(\n request.threadId,\n { _tag: \"RecordId\", recordId: request.recordId },\n 1,\n );\n\n if (records.some((entry) => entry.record.recordId !== request.recordId))\n return yield* incomplete(\"getRecord identity\");\n\n return Option.fromUndefinedOr(records[0]);\n});\n\nexport const getRunInput = Effect.fnUntraced(function* (request: ThreadRunInputRequest) {\n yield* Schema.decodeEffect(ThreadRunInputRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"getRunInput request\")),\n );\n\n const records = yield* selectedRecords(\n request.threadId,\n { _tag: \"RunInput\", runId: request.runId },\n 1,\n );\n\n if (\n records.some(\n ({ record: { payload } }) =>\n payload._tag !== \"UserInputRecorded\" ||\n payload.kind !== \"user\" ||\n payload.runId !== request.runId,\n )\n )\n return yield* incomplete(\"getRunInput identity\");\n\n return Option.fromUndefinedOr(records[0]);\n});\n\n/** A bounded snapshot of source identity and the selected funding Run's accounting. */\nexport const readWorkerState = Effect.fnUntraced(function* (request: ThreadWorkerStateRequest) {\n yield* Schema.decodeEffect(ThreadWorkerStateRequest)(request).pipe(\n Effect.mapError(() => incomplete(\"readWorkerState request\")),\n );\n const store = yield* ThreadReader;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId: request.threadId }));\n\n const records = yield* selectedRecords(\n request.threadId,\n {\n _tag: \"WorkerState\",\n expectedTailSequence: tail.tailSequence,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n },\n request.limit,\n );\n\n return {\n threadId: request.threadId,\n tailSequence: tail.tailSequence,\n records,\n };\n});\n\nexport class ThreadMaterialization extends Schema.Class<ThreadMaterialization>(\n \"@effect-agent/thread/ThreadMaterialization\",\n)({\n threadId: ThreadId,\n}) {}\n\nconst isExecutionProgressRecord = (\n record: RecordEnvelope,\n): record is RecordEnvelope & { readonly payload: RunContinuation } =>\n record.payload._tag === \"RunContinuation\";\n\nconst ExecutionProgressRecord = RecordEnvelope.pipe(\n Schema.refine(isExecutionProgressRecord, { message: \"Expected a Run continuation record\" }),\n);\n\n/** Current interpreter state. Wire version 2 retains one copy of its continuation. */\nexport class ExecutionCheckpoint extends Schema.Class<ExecutionCheckpoint>(\n \"@effect-agent/thread/ExecutionCheckpoint\",\n)({\n version: Schema.Literal(2),\n /** Logical progress encoding is charged while active; previous revisions are discarded. */\n progressRecord: ExecutionProgressRecord,\n /** Original start, evaluated context and validated completion intent while the Run is active. */\n operational: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(8)),\n canonicalRecords: Schema.Natural,\n /** Stable admitted-input position also supplies a bounded transfer cursor. */\n originalSequence: CanonicalSequence.check(Schema.isGreaterThan(0)),\n throughSequence: CanonicalSequence,\n batchId: BatchId,\n}) {\n /** View of the retained payload, not a second encoded field. */\n get progress(): RunContinuation {\n return this.progressRecord.payload;\n }\n}\n\n/** A revision-checked transition committed by the same owner as the retained history facts. */\nexport class ExecutionUpdate extends Schema.Class<ExecutionUpdate>(\n \"@effect-agent/thread/ExecutionUpdate\",\n)({\n previousRevision: Schema.Natural,\n checkpoint: ExecutionCheckpoint,\n /** Newly durable operational facts; capture and validate these before entering the writer. */\n facts: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(8)),\n /** Delete current Run state in the same transaction as its authorized terminal publication. */\n retire: Schema.Boolean,\n}) {}\n\n/** A progress-only commit has no canonical records and does not advance the history tail. */\nexport class CommitBatch extends Schema.Class<CommitBatch>(\"@effect-agent/thread/CommitBatch\")({\n batchId: BatchId,\n producerId: ProducerId,\n records: Schema.Array(RecordEnvelope).check(Schema.isMaxLength(256)),\n}) {}\n\nexport class ExecutionRead extends Schema.Class<ExecutionRead>(\n \"@effect-agent/thread/ExecutionRead\",\n)({\n threadId: ThreadId,\n runId: RunId,\n}) {}\n\nexport class AppendRequest extends Schema.Class<AppendRequest>(\n \"@effect-agent/thread/AppendRequest\",\n)({\n threadId: ThreadId,\n batch: CommitBatch,\n executions: Schema.optionalKey(Schema.Array(ExecutionUpdate).check(Schema.isMaxLength(256))),\n expectedTailSequence: CanonicalSequence,\n}) {}\n\nconst RecordCount = Schema.Array(Schema.Unknown).check(Schema.isMaxLength(256));\nconst ExecutionRecordCount = Schema.Array(Schema.Unknown).check(Schema.isMaxLength(8));\n\nconst AppendHeader = Schema.Struct({\n threadId: ThreadId,\n expectedTailSequence: CanonicalSequence,\n batchId: BatchId,\n producerId: ProducerId,\n records: RecordCount,\n executions: RecordCount,\n});\n\nconst validateHeader = Schema.decodeUnknownSync(AppendHeader);\n\nconst validateExecutionHeader = Schema.decodeUnknownSync(\n Schema.Struct({\n previousRevision: ExecutionUpdate.fields.previousRevision,\n retire: ExecutionUpdate.fields.retire,\n checkpoint: Schema.Struct({\n version: ExecutionCheckpoint.fields.version,\n canonicalRecords: ExecutionCheckpoint.fields.canonicalRecords,\n originalSequence: ExecutionCheckpoint.fields.originalSequence,\n throughSequence: ExecutionCheckpoint.fields.throughSequence,\n batchId: ExecutionCheckpoint.fields.batchId,\n operational: ExecutionRecordCount,\n }),\n facts: ExecutionRecordCount,\n }),\n);\n\n/** Capture records once; wrapper fields retain their owning Schema's constraints. */\nconst captureExecution = (input: ExecutionUpdate) => {\n const checkpointInput = input.checkpoint;\n const operationalInput = checkpointInput.operational;\n const factsInput = input.facts;\n\n const header = validateExecutionHeader({\n previousRevision: input.previousRevision,\n retire: input.retire,\n checkpoint: {\n version: checkpointInput.version,\n canonicalRecords: checkpointInput.canonicalRecords,\n originalSequence: checkpointInput.originalSequence,\n throughSequence: checkpointInput.throughSequence,\n batchId: checkpointInput.batchId,\n operational: operationalInput,\n },\n facts: factsInput,\n });\n\n const operationalLength = header.checkpoint.operational.length;\n const factsLength = header.facts.length;\n\n const progress = captureRecord(checkpointInput.progressRecord);\n\n if (Result.isFailure(progress)) return Result.fail(progress.failure);\n const progressRecord = progress.success.canonical;\n\n if (!isExecutionProgressRecord(progressRecord))\n return Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"Expected a Run continuation record\",\n }),\n );\n\n // Use the Schema-validated indexed lengths, never a caller's iterator. Sparse slots\n // still visit the record boundary, where undefined is refused.\n const operational = [];\n\n for (let index = 0; index < operationalLength; index++) {\n const record = captureRecord(operationalInput[index]!);\n\n if (Result.isFailure(record)) return Result.fail(record.failure);\n operational.push(record.success);\n }\n const facts = [];\n\n for (let index = 0; index < factsLength; index++) {\n const record = captureRecord(factsInput[index]!);\n\n if (Result.isFailure(record)) return Result.fail(record.failure);\n facts.push(record.success);\n }\n\n const checkpoint = Object.freeze(\n ExecutionCheckpoint.make(\n {\n ...header.checkpoint,\n progressRecord,\n operational: Object.freeze(operational.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const update = Object.freeze(\n ExecutionUpdate.make(\n {\n previousRevision: header.previousRevision,\n retire: header.retire,\n checkpoint,\n facts: Object.freeze(facts.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const checkpointJson = `{\"version\":${checkpoint.version},\"progressRecord\":${progress.success.json},\"operational\":[${operational.map(({ json }) => json).join(\",\")}],\"canonicalRecords\":${checkpoint.canonicalRecords},\"originalSequence\":${checkpoint.originalSequence},\"throughSequence\":${checkpoint.throughSequence},\"batchId\":${JSON.stringify(checkpoint.batchId)}}`;\n const json = `{\"previousRevision\":${update.previousRevision},\"checkpoint\":${checkpointJson},\"facts\":[${facts.map(({ json }) => json).join(\",\")}],\"retire\":${update.retire}}`;\n\n return Result.succeed(\n Object.freeze({\n update,\n json,\n checkpointJson,\n factsJson: JSON.stringify(facts.map(({ wire }) => wire)),\n bytes: utf8ByteLength(json),\n }),\n );\n};\n\nconst capturedAppends = new WeakMap<AppendRequest, CapturedAppend>();\n\n/**\n * Admission reserves one complete batch's envelope, references, snapshot and continuation cursor.\n * Adapters supply their native offset byte bound. Dependency literals already occur in record\n * wire, so ordinary batches need only arithmetic; near the page limit, charge the exact references.\n */\nexport const canonicalBatchFitsTransfer = (\n threadId: ThreadId,\n batch: Pick<CommitBatch, \"batchId\" | \"records\">,\n batchBytes: number,\n maxOffsetBytes: number,\n): boolean => {\n const threadJson = JSON.stringify(threadId);\n const threadBytes = utf8ByteLength(threadJson);\n const batchIdBytes = utf8ByteLength(JSON.stringify(batch.batchId));\n\n // 128 bytes per envelope covers keys, sequence and punctuation. 128 KiB reserves the\n // maximum JSON-escaped cursor plus bounded snapshot, seal, digest and page metadata.\n const overhead =\n batch.records.length * (batchIdBytes + threadBytes + maxOffsetBytes + 128) +\n threadBytes +\n THREAD_EXPORT_METADATA_BYTES;\n\n if (2 * batchBytes + overhead + 2 <= MAX_THREAD_EXPORT_PAGE_BYTES) return true;\n\n const dependencyBytes = utf8ByteLength(JSON.stringify(transferRecordDependencies(batch.records)));\n\n return batchBytes + overhead + dependencyBytes <= MAX_THREAD_EXPORT_PAGE_BYTES;\n};\n\n/**\n * Adapter-owned append captured before writer acquisition can suspend. Record JSON\n * is shared by the batch and record rows. Privately owned facts and wire metadata\n * keep payloads, identities and validation stable across suspension; adapters persist the\n * captured strings rather than reconstructing bytes from caller-owned values.\n * Transport decoding intentionally returns an ordinary AppendRequest for fresh capture.\n */\nexport interface PreparedAppend extends AppendRequest {\n readonly batchJson: string;\n readonly batchBytes: number;\n readonly progress: ReadonlyArray<ProgressAppendRecord>;\n readonly executionWrites: ReadonlyArray<{\n readonly update: ExecutionUpdate;\n readonly json: string;\n /** Checkpoint wire from the same detached, validated execution capture. */\n readonly checkpointJson: string;\n /** Schema-encoded fact array from this same capture, for the stable retry digest. */\n readonly factsJson: string;\n readonly bytes: number;\n }>;\n readonly records: ReadonlyArray<{\n readonly recordId: RecordId;\n readonly recordJson: string;\n readonly recordBytes: number;\n readonly wire: RecordJson;\n readonly canonical: CanonicalBatch[\"records\"][number];\n }>;\n}\n\ninterface CapturedAppend extends PreparedAppend {\n readonly records: ReadonlyArray<\n Omit<PreparedAppend[\"records\"][number], \"wire\"> & {\n readonly wire: typeof RecordEnvelope.Encoded;\n }\n >;\n}\n\nexport const PreparedAppend = {\n capture: (input: AppendRequest): Effect.Effect<CapturedAppend, ThreadStoreError> =>\n Effect.suspend(() => {\n const existing = capturedAppends.get(input);\n\n if (existing !== undefined) return Effect.succeed(existing);\n\n return Effect.try({\n try: () =>\n Result.gen(function* () {\n const executions = input.executions ?? [];\n const recordInputs = input.batch.records;\n\n const header = validateHeader({\n ...input,\n batchId: input.batch.batchId,\n producerId: input.batch.producerId,\n records: recordInputs,\n executions,\n });\n\n const recordLength = header.records.length;\n const executionLength = header.executions.length;\n\n const executionWrites: Array<PreparedAppend[\"executionWrites\"][number]> = [];\n\n for (let index = 0; index < executionLength; index++)\n executionWrites.push(yield* captureExecution(executions[index]!));\n Object.freeze(executionWrites);\n\n if (recordLength === 0 && executionWrites.length === 0)\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"A commit must contain history facts or an active execution transition\",\n }),\n );\n if (executionWrites.some(({ bytes }) => !transferPageFits(header.threadId, bytes)))\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare durable commit\",\n message: \"Active state exceeds its bounded transfer representation\",\n }),\n );\n // Visit Schema-validated indexed slots, including sparse ones, never a caller's iterator.\n const encodings = [];\n\n for (let index = 0; index < recordLength; index++)\n encodings.push(yield* captureRecord(recordInputs[index]!));\n const prefix = `{\"batchId\":${JSON.stringify(header.batchId)},\"producerId\":${JSON.stringify(header.producerId)},\"records\":[`;\n const batchJson = `${prefix}${encodings.map(({ json }) => json).join(\",\")}]}`;\n\n const batchBytes = encodings.reduce(\n (total, record) => total + record.bytes,\n utf8ByteLength(prefix) + (encodings.length === 0 ? 2 : encodings.length + 1),\n );\n\n if (batchBytes > MAX_CANONICAL_BATCH_BYTES)\n return yield* Result.fail(\n ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: `Canonical batch exceeds ${MAX_CANONICAL_BATCH_BYTES} bytes`,\n }),\n );\n\n const batch = Object.freeze(\n CommitBatch.make(\n {\n batchId: header.batchId,\n producerId: header.producerId,\n records: Object.freeze(encodings.map(({ canonical }) => canonical)),\n },\n { disableChecks: true },\n ),\n );\n\n const request = AppendRequest.make(\n {\n threadId: header.threadId,\n expectedTailSequence: header.expectedTailSequence,\n batch,\n ...(executionWrites.length === 0\n ? {}\n : { executions: Object.freeze(executionWrites.map(({ update }) => update)) }),\n },\n { disableChecks: true },\n );\n\n const records = Object.freeze(\n encodings.map(({ canonical, json, wire, bytes }) =>\n Object.freeze({\n recordId: canonical.recordId,\n recordJson: json,\n recordBytes: bytes,\n wire,\n canonical,\n }),\n ),\n );\n\n const progress = Object.freeze(encodings.map(({ progress }) => progress));\n\n const captured = Object.freeze(\n Object.assign(request, {\n batchJson,\n batchBytes,\n records,\n progress,\n executionWrites,\n }),\n );\n\n capturedAppends.set(captured, captured);\n\n return captured;\n }),\n catch: (cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: Schema.isSchemaError(cause)\n ? cause.message\n : \"Canonical append capture failed\",\n cause,\n }),\n }).pipe(\n Effect.flatMap(Effect.fromResult),\n Effect.mapError((cause) =>\n Schema.is(ThreadStoreError)(cause)\n ? cause\n : ThreadStoreError.make({\n operation: \"prepare canonical append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n }),\n};\n\nexport class AppendResult extends Schema.Class<AppendResult>(\"@effect-agent/thread/AppendResult\")({\n firstSequence: CanonicalSequence,\n lastSequence: CanonicalSequence,\n replayed: Schema.Boolean,\n}) {}\n\nexport class ThreadRead extends Schema.Class<ThreadRead>(\"@effect-agent/thread/ThreadRead\")({\n threadId: ThreadId,\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: Schema.Natural.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),\n}) {}\n\n/** Sparse ordered history page at a fixed tail; no record-count limit on the whole range. */\nexport const ThreadPromptRead = Schema.Struct({\n ...ThreadRead.fields,\n throughSequence: CanonicalSequence,\n});\n\nexport type ThreadPromptRead = typeof ThreadPromptRead.Type;\n\n/** Closed native selections; mutable metadata is read at this exact canonical tail. */\nexport const ThreadSelection = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"RecordId\"), recordId: RecordId }),\n Schema.Struct({ _tag: Schema.Literal(\"RunInput\"), runId: RunId }),\n /** Exact original declaration indexed by its deterministic settlement identity. */\n Schema.Struct({\n _tag: Schema.Literal(\"ToolDeclaration\"),\n settlementRecordId: RecordId,\n throughSequence: CanonicalSequence,\n }),\n /** Only the selected Run's facts; unrelated Thread traffic cannot enlarge its suffix. */\n Schema.Struct({\n _tag: Schema.Literal(\"RunEvidence\"),\n runId: RunId,\n submissionId: SubmissionId,\n throughSequence: CanonicalSequence,\n }),\n /** Exact declaration, this call's facts, and shared approval proof from its original batch. */\n Schema.Struct({\n _tag: Schema.Literal(\"OperationEvidence\"),\n runId: RunId,\n toolCallId: ToolCallId,\n originRecordId: RecordId,\n approvalToolCallIds: Schema.Array(ToolCallId).check(\n Schema.isMinLength(1),\n Schema.isMaxLength(MAX_RUN_TOOL_CALL_IDENTITIES),\n Schema.makeFilter((ids) => new Set(ids).size === ids.length),\n ),\n throughSequence: CanonicalSequence,\n }).check(\n Schema.makeFilter((selection) => selection.approvalToolCallIds.includes(selection.toolCallId)),\n ),\n Schema.Struct({\n _tag: Schema.Literal(\"LastAgentUpdate\"),\n throughSequence: CanonicalSequence,\n }),\n /** Sparse canonical pages; callers bound total evidence before building model metadata. */\n Schema.Struct({\n _tag: Schema.Literal(\"PromptEvidence\"),\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"LatestModelCompleted\"),\n throughSequence: CanonicalSequence,\n }),\n /** Latest application input; framework worker completion/update messages are excluded. */\n Schema.Struct({\n _tag: Schema.Literal(\"LatestApplicationInput\"),\n throughSequence: CanonicalSequence,\n }),\n /** Presence of durable ownership forbids an immediate-history writer on this Thread. */\n Schema.Struct({\n _tag: Schema.Literal(\"DurableHistoryOwner\"),\n throughSequence: CanonicalSequence,\n }),\n /** Latest rollover covering positions strictly before the addressed evidence. */\n Schema.Struct({\n _tag: Schema.Literal(\"ContextWindowBoundary\"),\n atSequence: CanonicalSequence,\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"DeliveryPredecessor\"),\n throughSequence: CanonicalSequence,\n }),\n /** Canonical creation/handoff intents retained independently of Run settlement. */\n Schema.Struct({\n _tag: Schema.Literal(\"WorkHandoffs\"),\n throughSequence: CanonicalSequence,\n }),\n /** Unresolved inputs only, selected through disposable work membership. */\n Schema.Struct({\n _tag: Schema.Literal(\"LiveWorkerInputs\"),\n throughSequence: CanonicalSequence,\n workerThreadId: Schema.optionalKey(ThreadId),\n }),\n /** A retained stop for the exact worker, independent of historical inputs. */\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerStop\"),\n workerThreadId: ThreadId,\n throughSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerExecution\"),\n expectedTailSequence: CanonicalSequence,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"WorkerState\"),\n expectedTailSequence: CanonicalSequence,\n sourceSubmissionId: Schema.optionalKey(SubmissionId),\n }),\n]);\n\nexport type ThreadSelection = typeof ThreadSelection.Type;\n\n/** Nested page makes an old ThreadRead decoder reject, never strip a selection into history. */\nexport const SelectedThreadRead = Schema.Struct({\n threadId: ThreadId,\n selection: ThreadSelection,\n page: Schema.Struct({\n afterSequence: Schema.optionalKey(CanonicalSequence),\n limit: ThreadRead.fields.limit,\n }),\n});\n\nexport type SelectedThreadRead = typeof SelectedThreadRead.Type;\nexport const ThreadReadRequest = Schema.Union([SelectedThreadRead, ThreadRead]);\nexport type ThreadReadRequest = typeof ThreadReadRequest.Type;\n\nexport class ThreadObservation extends Schema.Class<ThreadObservation>(\n \"@effect-agent/thread/ThreadObservation\",\n)({\n threadId: ThreadId,\n afterOffset: Schema.optionalKey(ObservationOffset),\n}) {}\n\nexport class ThreadExportRequest extends Schema.Class<ThreadExportRequest>(\n \"@effect-agent/thread/ThreadExportRequest\",\n)({\n threadId: ThreadId,\n cursor: Schema.optionalKey(ThreadExportCursor),\n}) {}\n\nexport class ThreadTailRequest extends Schema.Class<ThreadTailRequest>(\n \"@effect-agent/thread/ThreadTailRequest\",\n)({\n threadId: ThreadId,\n}) {}\n\n/**\n * The committed tail of one Thread Log. A resuming producer composes its next\n * AppendRequest from this value instead of exporting the whole log.\n */\nexport class ThreadTail extends Schema.Class<ThreadTail>(\"@effect-agent/thread/ThreadTail\")({\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n}) {}\n\nexport class ThreadIdentityRequest extends Schema.Class<ThreadIdentityRequest>(\n \"@effect-agent/thread/ThreadIdentityRequest\",\n)({ threadId: ThreadId }) {}\n\nexport class FreshRunRead extends Schema.Class<FreshRunRead>(\"@effect-agent/thread/FreshRunRead\")({\n threadId: ThreadId,\n submissionId: SubmissionId,\n}) {}\n\n/**\n * One consistent snapshot: Thread ID, canonical tail, admission presence, first record,\n * exact worker origin, then exact subagent lineage. A row selected twice appears only\n * once. Missing identity records remain absent; the snapshot grants no execution authority.\n */\nexport class ThreadIdentity extends Schema.Class<ThreadIdentity>(\n \"@effect-agent/thread/ThreadIdentity\",\n)(\n Schema.Struct({\n ...ThreadTail.fields,\n /** Whether any admission is retained, including settled inputs and inputs not yet canonical. */\n hasAdmissions: Schema.Boolean,\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(3)),\n }).check(\n Schema.makeFilter((snapshot) => {\n if (snapshot.tailSequence === 0) return snapshot.records.length === 0;\n if (snapshot.records[0]?.sequence !== 1) return false;\n const origin = workerOriginRecordId(snapshot.threadId);\n const lineage = subagentLineageRecordId(snapshot.threadId);\n const ids = new Set<RecordId>();\n const sequences = new Set<CanonicalSequence>();\n let previous = -1;\n\n for (const entry of snapshot.records) {\n const rank =\n entry.sequence === 1\n ? 0\n : entry.record.recordId === origin\n ? 1\n : entry.record.recordId === lineage\n ? 2\n : -1;\n\n if (\n entry.threadId !== snapshot.threadId ||\n entry.sequence < 1 ||\n entry.sequence > snapshot.tailSequence ||\n rank <= previous ||\n ids.has(entry.record.recordId) ||\n sequences.has(entry.sequence)\n )\n return false;\n ids.add(entry.record.recordId);\n sequences.add(entry.sequence);\n previous = rank;\n }\n\n return true;\n }),\n ),\n) {}\n\n/** Immutable accepted input, distinct from all regenerable ledger execution state. */\nexport class ThreadAdmission extends Schema.Class<ThreadAdmission>(\n \"@effect-agent/thread/ThreadAdmission\",\n)({\n ...AdmissionRequest.fields,\n submissionId: SubmissionId,\n receiptId: ReceiptId,\n queueSequence: QueueSequence,\n createdAt: Schema.DateTimeUtcFromString,\n /** Stable closed Receipt timestamp; required for idle transfer, absent on active verification facts. */\n settledAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n}) {}\n\n/** Accepted operator commands are facts; their application markers are deliberately omitted. */\nexport const ThreadAbortFact = AbortIntent.mapFields(Struct.omit([\"canonicalRecordId\"]));\n\nexport const ThreadApprovalFact = ApprovalDecisionIntent.mapFields(\n Struct.omit([\"canonicalRecordId\"]),\n);\n\nexport const ThreadResolutionFact = UnknownResolutionIntent.mapFields(\n Struct.omit([\"canonicalRecordId\"]),\n);\n\nexport const ThreadCommands = Schema.Struct({\n aborts: Schema.Array(ThreadAbortFact).check(Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS)),\n approvals: Schema.Array(ThreadApprovalFact).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n resolutions: Schema.Array(ThreadResolutionFact).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n});\n\nexport const ThreadExportBatch = Schema.Struct({ batchId: BatchId, producerId: ProducerId });\n\n/** The wire is part of the export type: ordinary read envelopes are not lossless archives. */\nexport class ThreadExportRecord extends CanonicalRecordEnvelope.extend<ThreadExportRecord>(\n \"@effect-agent/thread/ThreadExportRecord\",\n)({\n record: ExportRecord,\n}) {}\n\n/** One bounded, batch-aligned page. An absent cursor alone marks a complete transfer. */\nexport class ThreadExport extends Schema.Class<ThreadExport>(\"@effect-agent/thread/ThreadExport\")({\n transferFormat: Schema.Literal(\"effect-agent/thread-transfer@4\"),\n format: Schema.NonEmptyString,\n threadId: ThreadId,\n tailSequence: CanonicalSequence,\n snapshot: ThreadExportSnapshot,\n /** Presence seals the restored inbox; a terminal reason also requires exact settled worker evidence. */\n workerSeal: Schema.optionalKey(ThreadWorkerSeal),\n /** Inclusive first canonical position, even on a page containing only other owner facts. */\n fromSequence: CanonicalSequence.check(Schema.isGreaterThan(0)),\n records: Schema.Array(ThreadExportRecord).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n batches: Schema.Array(ThreadExportBatch).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n admissions: Schema.Array(ThreadAdmission).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n commands: ThreadCommands,\n /** Frozen delivery facts and outcomes; claims and leases are never transfer authority. */\n deliveries: Schema.Array(MessageDeliveryRecord).check(\n Schema.isMaxLength(MAX_THREAD_EXPORT_PAGE_RECORDS),\n ),\n cursor: Schema.optionalKey(ThreadExportCursor),\n /** Exact reference-bearing records identify cross-range recovery dependencies. */\n dependencies: Schema.Array(RecordId).check(Schema.isMaxLength(256 * 4_096)),\n}) {}\n\n/** Idle export authority. Applications quiesce external producers for the complete export. */\nexport class ThreadExportSource extends Context.Service<\n ThreadExportSource,\n Pick<ThreadStore[\"Service\"], \"export\">\n>()(\"@effect-agent/thread/ThreadExportSource\") {\n static layer() {\n return Layer.effect(\n ThreadExportSource,\n Effect.map(ThreadStore, (store) => ThreadExportSource.of({ export: store.export })),\n );\n }\n}\n\n/** Pull bounded idle pages. The caller keeps this Thread quiescent until the stream ends. */\nexport const streamExport = (request: ThreadExportRequest) =>\n Stream.unwrap(\n Effect.gen(function* () {\n const source = yield* ThreadExportSource;\n let previous: ThreadExport | undefined;\n\n return Stream.paginate(request, (current) =>\n source.export(current).pipe(\n Effect.flatMap((page) => {\n if (\n page.threadId !== request.threadId ||\n (previous !== undefined &&\n (!Schema.toEquivalence(ThreadExportSnapshot)(page.snapshot, previous.snapshot) ||\n !Schema.toEquivalence(Schema.UndefinedOr(ThreadWorkerSeal))(\n page.workerSeal,\n previous.workerSeal,\n ) ||\n page.tailSequence !== previous.tailSequence ||\n page.fromSequence !==\n (previous.records.at(-1)?.sequence ?? previous.fromSequence - 1) + 1 ||\n (page.cursor !== undefined && page.cursor === current.cursor)))\n )\n return Effect.fail(\n ThreadStoreError.make({\n operation: \"stream Thread export\",\n message: \"Transfer snapshot or cursor is inconsistent\",\n }),\n );\n previous = page;\n\n return Effect.succeed([\n [page],\n page.cursor === undefined\n ? Option.none()\n : Option.some(\n ThreadExportRequest.make({ threadId: request.threadId, cursor: page.cursor }),\n ),\n ] as const);\n }),\n ),\n );\n }),\n );\n\n/**\n * A disposable projection snapshot. Adapters bind its sequence to a complete batch in the canonical\n * log; consumers decode `state` and decide projection compatibility before suffix replay.\n * Run recovery uses authoritative active checkpoints independently of these application snapshots.\n */\nexport class ThreadCheckpoint extends Schema.Class<ThreadCheckpoint>(\n \"@effect-agent/thread/ThreadCheckpoint\",\n)({\n schemaVersion: Schema.Literal(1),\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n state: PersistedJson,\n createdAt: Schema.DateTimeUtcFromString,\n}) {}\n\nexport class SaveCheckpointRequest extends Schema.Class<SaveCheckpointRequest>(\n \"@effect-agent/thread/SaveCheckpointRequest\",\n)({\n checkpoint: ThreadCheckpoint,\n}) {}\n\nexport class LoadCheckpointRequest extends Schema.Class<LoadCheckpointRequest>(\n \"@effect-agent/thread/LoadCheckpointRequest\",\n)({\n threadId: ThreadId,\n atOrBeforeSequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\n/** A bounded, disposable prior Prompt, checked against its captured historyDigest. */\nexport const MAX_PROMPT_CHECKPOINT_BYTES = 16 * 1024 * 1024;\n\n/** Maximum ordinary Runs between full prompt replacements and in a cold catch-up suffix. */\nexport const MAX_PROMPT_CHECKPOINT_RUNS = 16;\n\nexport const PromptCheckpointHead = Schema.Struct({\n version: Schema.Literal(2),\n recordFormat: Schema.Literal(CURRENT_RECORD_FORMAT),\n threadId: ThreadId,\n runId: RunId,\n throughSequence: CanonicalSequence,\n historyThrough: CanonicalSequence,\n priorHistoryLength: Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 16_384 })),\n historyDigest: Digest,\n});\n\nexport const PromptCheckpoint = Schema.Struct({\n ...PromptCheckpointHead.fields,\n /** Canonical JSON from Effect's Prompt codec; integrity is checked before decoding it. */\n promptJson: Schema.String.check(Schema.isMaxLength(MAX_PROMPT_CHECKPOINT_BYTES)),\n});\n\nexport type PromptCheckpoint = typeof PromptCheckpoint.Type;\n\nexport const PromptCheckpointRead = Schema.Struct({\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n});\n\nexport type PromptCheckpointRead = typeof PromptCheckpointRead.Type;\n\n/**\n * Optional cold-context acceleration, separate from application checkpoints. Save only after\n * canonical settlement. Replace the prior value atomically at the exact supplied sequence.\n * One process owns the Thread; import only targets empty Threads and atomically deletes these\n * derivatives. The runtime validates the content digest and a bounded suffix of completed Runs.\n * Any incompatible head, content digest or suffix is a cache miss.\n * Never export these bytes or use them as execution/compaction evidence.\n */\nexport interface PromptCheckpoints {\n readonly save: (checkpoint: PromptCheckpoint) => Effect.Effect<void, ThreadStoreError>;\n readonly load: (\n request: PromptCheckpointRead,\n ) => Effect.Effect<Option.Option<PromptCheckpoint>, ThreadStoreError>;\n}\n\n/**\n * Content-free storage provenance constructed by adapters from source-authored labels.\n * Raw foreign lookalikes are not trusted diagnostics. Never include rejected values, SQL,\n * or schema messages.\n */\nexport class ThreadStoreDiagnostic extends Schema.Class<ThreadStoreDiagnostic>(\n \"@effect-agent/thread/ThreadStoreDiagnostic\",\n)({\n causeTag: Schema.String.check(Schema.isMaxLength(128)),\n operation: Schema.String.check(Schema.isMaxLength(256)),\n decoder: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(128))),\n issueTag: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(128))),\n sequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\nexport class ThreadStoreError extends Schema.TaggedError<ThreadStoreError>()(\"ThreadStoreError\", {\n operation: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n diagnostic: Schema.optionalKey(ThreadStoreDiagnostic),\n}) {}\n\nexport class ThreadNotMaterialized extends Schema.TaggedError<ThreadNotMaterialized>()(\n \"ThreadNotMaterialized\",\n { threadId: ThreadId },\n) {}\n\n/** Export is Thread-local: external schedules, subscriptions and ingress are application-owned. */\nexport class ThreadExportRejected extends Schema.TaggedError<ThreadExportRejected>()(\n \"ThreadExportRejected\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\"non-idle\", \"source-changed\", \"live-import-source\"]),\n },\n) {\n override get message(): string {\n switch (this.reason) {\n case \"non-idle\":\n return `Thread ${this.threadId} is not idle; close its active owner and finish pending work before export.`;\n case \"source-changed\":\n return `Thread ${this.threadId} changed during export; keep the source quiescent and restart from the first page.`;\n case \"live-import-source\":\n return `Import requires a detached archive; finish exporting Thread ${this.threadId} before opening the destination transaction.`;\n }\n }\n}\n\n/**\n * A canonical append that cannot commit: `batch-content` replays a batch ID with different\n * content, `record-identity` reuses a canonical record ID, and `tail` declares a stale expected\n * tail. `stale-command` rejects a superseded operational request and must not be reprepared.\n * Tail conflicts carry the actual committed tail as a diagnostic resume hint.\n */\nexport class AppendConflict extends Schema.TaggedError<AppendConflict>()(\"AppendConflict\", {\n threadId: ThreadId,\n batchId: BatchId,\n reason: Schema.Literals([\"batch-content\", \"record-identity\", \"tail\", \"stale-command\"]),\n actualTailSequence: Schema.optionalKey(CanonicalSequence),\n}) {}\n\nexport class CheckpointRejected extends Schema.TaggedError<CheckpointRejected>()(\n \"CheckpointRejected\",\n {\n threadId: ThreadId,\n reason: Schema.Literals([\n \"ahead-of-tail\",\n \"not-batch-boundary\",\n \"unsupported-version\",\n \"corrupt\",\n ]),\n },\n) {}\n\nexport type ThreadStoreFailure =\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | OwnershipLost;\n\n/**\n * Optional, disposable projection storage. Neither history execution nor durable recovery\n * requires it. Adapters that offer it must bind every checkpoint to a canonical batch tail.\n * Application consumers own projection compatibility; this port does not interpret metadata.\n */\nexport interface ThreadCheckpoints {\n readonly save: (\n request: SaveCheckpointRequest,\n ) => Effect.Effect<void, ThreadStoreError | ThreadNotMaterialized | CheckpointRejected>;\n readonly load: (\n request: LoadCheckpointRequest,\n ) => Effect.Effect<\n Option.Option<ThreadCheckpoint>,\n ThreadStoreError | ThreadNotMaterialized | CheckpointRejected\n >;\n}\n\nexport class ThreadStore extends Context.Service<\n ThreadStore,\n {\n readonly lifecyclePublications?: LifecyclePublicationStorage;\n /** Native owner inventory and explicit canonical-index reconstruction. Absence fails closed. */\n readonly work?: ThreadWorkStorage;\n /** Bounded physical log ranges, independent of compaction and execution ownership. */\n readonly archives?: ThreadArchiveStorage;\n readonly verification?: ThreadVerificationStorage;\n readonly materialize: (request: ThreadMaterialization) => Effect.Effect<void, ThreadStoreError>;\n /**\n * Commit history and current execution atomically under the storage owner's mutation gate.\n * Only the latest active operational intent replays. Historical batches compare exact\n * canonical content; their prior operational intent is no longer retained.\n */\n readonly append: (\n request: AppendRequest,\n ) => Effect.Effect<\n AppendResult,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | OwnershipLost\n >;\n /** Authoritative current state only. Absence after settlement is normal; loss while active is corruption. */\n readonly readExecution: (\n request: ExecutionRead,\n ) => Effect.Effect<\n Option.Option<ExecutionCheckpoint>,\n ThreadStoreError | ThreadNotMaterialized\n >;\n /** Return immutable values decoded from privately owned canonical JSON. Unknown/Json\n * subgraphs must not retain caller/provider objects, accessors or oversized backing views.\n * Schema validation without canonical capture does not establish this ownership. */\n readonly read: (\n request: ThreadReadRequest,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n /** Decode only PromptRecord fields of PROMPT_EVIDENCE_TAGS, including archived ranges.\n * Bound raw hydration without shortening a page before its limit or captured range end.\n * Preserve read's canonical ownership contract, including nested Unknown/Json values.\n * The immutable source was validated on write; use read for integrity or execution evidence. */\n readonly readPrompt: (\n request: ThreadPromptRead,\n ) => Stream.Stream<PromptRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly observe: (\n request: ThreadObservation,\n ) => Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>;\n readonly export: (\n request: ThreadExportRequest,\n ) => Effect.Effect<\n ThreadExport,\n ThreadStoreError | ThreadNotMaterialized | ThreadExportRejected\n >;\n readonly inspectTail: (\n request: ThreadTailRequest,\n ) => Effect.Effect<ThreadTail, ThreadStoreError | ThreadNotMaterialized>;\n readonly readIdentity: (\n request: ThreadIdentityRequest,\n ) => Effect.Effect<ThreadIdentity, ThreadStoreError | ThreadNotMaterialized>;\n /** Owner-held preparation for an admitted root Run. Some proves an initialized root\n * identity and no checkpoint, Run membership or exact input/abort/settlement record.\n * None requires ordinary recovery; it never authorizes overwriting existing evidence. */\n readonly readFreshRun?: (\n request: FreshRunRead,\n ) => Effect.Effect<Option.Option<ThreadIdentity>, ThreadStoreError | ThreadNotMaterialized>;\n readonly readWorkerCapacity?: (\n request: ThreadWorkerCapacityRequest,\n ) => Effect.Effect<ThreadWorkerCapacity, ThreadStoreError | ThreadNotMaterialized>;\n /** Absent when this adapter does not support disposable checkpoints. */\n readonly checkpoints?: ThreadCheckpoints | undefined;\n readonly promptCheckpoints?: PromptCheckpoints | undefined;\n /** Indexed scalar count; unsupported adapters fail closed at the caller. */\n readonly countPeerMessages?:\n | ((\n request: ThreadPeerCountRequest,\n ) => Effect.Effect<number, ThreadStoreError | ThreadNotMaterialized>)\n | undefined;\n }\n>()(\"@effect-agent/thread/ThreadStore\") {}\n\n/** Canonical observation without append, materialization, or checkpoint mutation authority. */\nexport class ThreadReader extends Context.Service<\n ThreadReader,\n Pick<\n ThreadStore[\"Service\"],\n | \"read\"\n | \"readExecution\"\n | \"readPrompt\"\n | \"observe\"\n | \"export\"\n | \"inspectTail\"\n | \"readIdentity\"\n | \"countPeerMessages\"\n | \"readWorkerCapacity\"\n >\n>()(\"@effect-agent/thread/ThreadReader\") {\n static fromStore(store: ThreadStore[\"Service\"]): ThreadReader[\"Service\"] {\n return {\n read: store.read,\n readExecution: store.readExecution,\n readPrompt: store.readPrompt,\n observe: store.observe,\n export: store.export,\n inspectTail: store.inspectTail,\n readIdentity: store.readIdentity,\n ...(store.readWorkerCapacity === undefined\n ? {}\n : { readWorkerCapacity: store.readWorkerCapacity }),\n ...(store.countPeerMessages === undefined\n ? {}\n : { countPeerMessages: store.countPeerMessages }),\n };\n }\n\n /** Capture this assembly's store, independently of other local or routed stores. */\n static layer() {\n return Layer.effect(ThreadReader, Effect.map(ThreadStore, ThreadReader.fromStore));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAOA,MAAa,mBAAmB,EAAE,cAAoD;CACpF,MAAM,sBAAM,IAAI,IAAW;CAE3B,IAAI,WAAW,WAAW,QAAQ,UAAU,KAAA,GAAW,IAAI,IAAI,QAAQ,KAAK;CAC5E,IAAI,QAAQ,SAAS,oBAAoB,QAAQ,SAAS,qBACxD,IAAI,IAAI,mBAAmB,QAAQ,YAAY,CAAC;CAClD,IAAI,QAAQ,SAAS,sBAAsB,IAAI,IAAI,QAAQ,OAAO,KAAK;CACvE,IAAI,QAAQ,SAAS,0BAA0B,QAAQ,UAAU,mBAAmB,MAClF,IAAI,IAAI,QAAQ,UAAU,cAAc;CAC1C,IAAI,QAAQ,SAAS,2BAA2B,QAAQ,mBAAmB,MACzE,IAAI,IAAI,QAAQ,cAAc;CAChC,IAAI,QAAQ,SAAS,yBAAyB,QAAQ,OAAO,SAAS,QACpE,IAAI,IAAI,QAAQ,OAAO,KAAK;CAE9B,OAAO,CAAC,GAAG,GAAG;AAChB;;AAGA,MAAa,mBAAmB,WAC9B,OAAO,QAAQ,SAAS,sBACpB,CAAC,mBAAmB,OAAO,QAAQ,YAAY,CAAC,IAChD,gBAAgB,MAAM;;;;;;;AAQ5B,MAAa,iBAAiB,EAAE,cAC9B,QAAQ,SAAS,0BACjB,QAAQ,SAAS,0BACjB,QAAQ,SAAS,yBACjB,QAAQ,SAAS,yBACjB,QAAQ,SAAS,2BACjB,QAAQ,SAAS,uBAChB,QAAQ,SAAS,wBAAwB,QAAQ,aAAa,KAAA;;AAGjE,MAAa,yBAAyB,WACnC,cAAc,MAAM,KACnB,OAAO,QAAQ,SAAS,uBACxB,OAAO,QAAQ,SAAS,wBACzB,OAAO,QAAQ,SAAS,uBAAuB,OAAO,QAAQ,SAAS,UACxE,OAAO,QAAQ,SAAS,oBACxB,OAAO,QAAQ,SAAS;;AAG1B,MAAa,uBAAuB,UAClC,MAAM,QAAQ,OAAO,SAAS,QAAQ,eAAe,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,CAAC;;AAGrF,MAAa,wBAAwB,EAAE,cACrC,QAAQ,SAAS,oBACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,kBACjB,QAAQ,SAAS;;;ACxCnB,MAAM,eAAe,OAAO,WAAW,cAAc;AAErD,MAAM,eAAe;CACnB,OAAA;CACA,OAAO,2BAA2B;CAClC,kBAAkB;CAElB,WAAW;AACb;AAEA,IAAa,sBAAb,cAAyC,OAAO,YAAiC,CAAC,CAChF,uBACA;CAAE,SAAS,OAAO;CAAQ,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;AAAE,CACvE,CAAC,CAAC,CAAC;AAyBH,MAAM,kBAAkB,QAAwB,UAAwC;CACtF,MAAM,UAAU,OAAO;CAEvB,OAAO,OAAO,OAAO;EACnB,UAAU,OAAO;EACjB,QAAQ,OAAO,OAAO,gBAAgB,MAAM,CAAC;EAC7C,aAAa;EACb,iBAAiB,sBAAsB,MAAM;EAC7C,UAAU,qBAAqB,MAAM;EACrC,oBACE,QAAQ,SAAS,2BAA2B,QAAQ,SAAS,qBACzD,oBAAoB,QAAQ,cAAc,CAAC,CAAC,IAC5C;EACN,GAAI,QAAQ,SAAS,oBAAoB,EAAE,cAAc,QAAQ,IAAI,CAAC;CACxE,CAAC;AACH;AAEA,MAAM,2BAAW,IAAI,QAAgD;AAGrE,MAAM,UAAU,QAAgB,KAAkB,UAAyB;CACzE,OAAO,eAAe,QAAQ,KAAK;EACjC;EACA,UAAU;EACV,YAAY;EACZ,cAAc;CAChB,CAAC;AACH;;AAGA,MAAM,WAAW,UAA0B;CACzC,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;EACzB,MAAM,OAAO,EAAE,GAAG,MAAM;EAExB,OAAO,eAAe,MAAM,OAAO,eAAe,KAAK,CAAC;EAExD,OAAO;CACT;CACA,MAAM,OAAuB,CAAC;CAE9B,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,OAAO,MAAM,OAAO,MAAM,MAAM;CACnF,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GACrC,IACE,CAAC,OAAO,OAAO,MAAM,GAAG,KACxB,OAAO,yBAAyB,OAAO,GAAG,CAAC,EAAE,eAAe,MAE5D,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC;CAG7C,OAAO;AACT;;AAGA,MAAM,kBAAkB,YAAoC;CAC1D,MAAM,OAAO,EAAE,GAAG,QAAQ;CAE1B,OAAO,eAAe,MAAM,OAAO,eAAe,OAAO,CAAC;CAC1D,MAAM,SAAS,IAAI,QAAwB,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;CAE5D,MAAM,QAAuB,CAAC,IAAI;CAElC,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,MAAM;EAEnB,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAAG;GACnC,MAAM,QAAQ,QAAQ,IAAI,MAAM,GAAG;GAEnC,IAAI,CAAC,UAAU,gBAAgB,KAAK,GAAG;GACvC,IAAI,QAAQ,OAAO,IAAI,KAAK;GAE5B,IAAI,UAAU,KAAA,GAAW;IACvB,MAAM,UAAU,QAAQ,KAAK;IAE7B,OAAO,IAAI,OAAO,OAAO;IACzB,MAAM,KAAK,OAAO;IAClB,QAAQ;GACV;GACA,OAAO,MAAM,KAAK,KAAK;EACzB;CACF;CACA,KAAK,MAAM,SAAS,OAAO,OAAO,OAAO,KAAK;CAE9C,OAAO;EAAE,SAAS,OAAO,OAAO,IAAI;EAAG;CAAO;AAChD;;AAGA,MAAM,WAAoC,MAAY,WAA0C;CAC9F,MAAM,UAAyB,UAAU,gBAAgB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;CAE3E,OAAO,QAAQ,SAAS,GAAG;EACzB,MAAM,OAAO,QAAQ,IAAI;EAEzB,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAAG;GACnC,MAAM,QAAQ,QAAQ,IAAI,MAAM,GAAG;GAEnC,IAAI,CAAC,UAAU,gBAAgB,KAAK,GAAG;GACvC,MAAM,OAAO,OAAO,IAAI,KAAK;GAE7B,IAAI,SAAS,KAAA,GAAW,OAAO,MAAM,KAAK,IAAI;QACzC,QAAQ,KAAK,KAAK;EACzB;EACA,OAAO,OAAO,IAAI;CACpB;CAEA,OAAO;AACT;;AAGA,MAAa,iBACX,UAC+D;CAC/D,IAAI;EACF,MAAM,WAAW,SAAS,IAAI,KAAK;EAEnC,IAAI,aAAa,KAAA,GAAW,OAAO,OAAO,QAAQ,QAAQ;EAC1D,MAAM,UAAU,aAAa,KAAK;EAClC,MAAM,QAAQ,eAAe,MAAM,OAAO;EAC1C,MAAM,OAAO,QAAQ,SAAS,MAAM,MAAM;EAC1C,MAAM,aAAa,qBAAqB,MAAM,YAAY;EAE1D,IAAI,OAAO,UAAU,UAAU,GAC7B,OAAO,OAAO,KAAK,oBAAoB,KAAK,EAAE,SAAS,WAAW,QAAQ,QAAQ,CAAC,CAAC;EACtF,MAAM,OAAO,WAAW;EACxB,MAAM,QAAQ,eAAe,IAAI;EAEjC,IAAI,QAAA,SACF,OAAO,OAAO,KACZ,oBAAoB,KAAK,EAAE,SAAS,wCAAwC,CAAC,CAC/E;EACF,MAAM,YAAY,SAAS,WAAW,SAAS,cAAc,MAAM,SAAS,CAAC;EAG7E,OAAO,OAAO,SAAS,WAAW,SAAS,CAAC;EAC5C,OAAO,OAAO,SAAS;EAEvB,MAAM,YAAY,OAAO,OACvB,eAAe,KACb;GACE,GAAG;GACH;GACA,SAAS,MAAM;EACjB,GACA,EAAE,eAAe,KAAK,CACxB,CACF;EAEA,MAAM,WAAW,OAAO,OAAO;GAC7B;GACA;GACA;GACA;GACA,UAAU,eAAe,WAAW,KAAK;EAC3C,CAAC;EAED,SAAS,IAAI,WAAW,QAAQ;EAEhC,OAAO,OAAO,QAAQ,QAAQ;CAChC,SAAS,OAAO;EACd,OAAO,OAAO,KACZ,oBAAoB,KAAK;GAAE,SAAS;GAAmC;EAAM,CAAC,CAChF;CACF;AACF;;AAGA,MAAa,kBACX,WACuD;CACvD,MAAM,WAAW,SAAS,IAAI,MAAM;CAEpC,IAAI,aAAa,KAAA,GAAW,OAAO,OAAO,QAAQ,QAAQ;CAE1D,IAAI;EACF,IAAI,EAAE,kBAAkB,iBAAiB,OAAO,cAAc,MAAM;EACpE,MAAM,OAAO,cAAc,OAAO,IAAI;EACtC,MAAM,QAAQ,eAAe,IAAI;EAEjC,OAAO,OAAO,QAAQ;GACpB,WAAW;GACX,MAAM,OAAO;GACb;GACA;GACA,UAAU,eAAe,QAAQ,KAAK;EACxC,CAAC;CACH,SAAS,OAAO;EACd,OAAO,OAAO,KACZ,oBAAoB,KAAK;GAAE,SAAS;GAAoC;EAAM,CAAC,CACjF;CACF;AACF;;;;ACvPA,MAAa,8BACX,YAC4B;CAC5B,MAAM,QAAQ,IAAI,IAAI,QAAQ,KAAK,WAAW,OAAO,QAAQ,CAAC;CAC9D,MAAM,+BAAe,IAAI,IAAc;CAEvC,KAAK,MAAM,EAAE,aAAa,SAAS;EACjC,IAAI,QAAQ,SAAS,sBACd;QAAA,MAAM,OAAO,CAAC,QAAQ,aAAa,QAAQ,IAAI,GAClD,IAAI,CAAC,MAAM,IAAI,IAAI,QAAQ,GAAG,aAAa,IAAI,IAAI,QAAQ;EAAA;EAC/D,IAAI,QAAQ,SAAS,0BAA0B,CAAC,MAAM,IAAI,QAAQ,aAAa,GAC7E,aAAa,IAAI,QAAQ,aAAa;EACxC,IAAI,QAAQ,SAAS,sBACd;QAAA,MAAM,OAAO,QAAQ,UACxB,IAAI,CAAC,MAAM,IAAI,IAAI,QAAQ,GAAG,aAAa,IAAI,IAAI,QAAQ;EAAA;EAC/D,IAAI,QAAQ,SAAS,mBACd;QAAA,MAAM,OAAO;IAChB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;GACV,GACE,IAAI,QAAQ,KAAA,KAAa,CAAC,MAAM,IAAI,IAAI,QAAQ,GAAG,aAAa,IAAI,IAAI,QAAQ;EAAA;CACtF;CAEA,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,KAAK;AAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACeA,MAAa,iCAAiC;AAC9C,MAAa,+BAA+B;AAC5C,MAAa,iCAAiC;;AAE9C,MAAM,+BAA+B;;AAGrC,MAAa,oBAAoB,UAAoB,YAAY,MAC/D,eAAe,KAAK,UAAU,QAAQ,CAAC,IAAI,YAAY,gCACvD;;AAGF,MAAa,yBAA+B,WAA+B;CACzE,MAAM,SAAS,OAAO,aAAa,OAAO,eAAe,MAAM,CAAC;CAEhE,QAAQ,UAAoB,SAAqB;EAC/C,MAAM,UAAU,OAAO,IAAI;EAE3B,OAAO,OAAO,UAAU,OAAO,KAAK,iBAAiB,UAAU,eAAe,QAAQ,OAAO,CAAC;CAChG;AACF;;AAKA,MAAa,uBAAuB,OAAO,OAAO;CAChD,YAAY,OAAO;CACnB,QAAQ,OAAO;CACf,WAAW,OAAO;CAClB,aAAa,OAAO;CACpB,YAAY,OAAO;AACrB,CAAC;;AAKD,MAAa,mBAAmB,OAAO,OAAO,EAAE,UAAU,OAAO,YAAY,kBAAkB,EAAE,CAAC;;AAIlG,MAAa,qBAAqB,OAAO,eAAe,MACtD,OAAO,YAAY,8BAA8B,CACnD;;AAKA,MAAa,sBAAsB,OAAO,OAAO;CAAE,UAAU;CAAU,UAAU;AAAS,CAAC;;AAI3F,MAAa,wBAAwB,OAAO,OAAO;CAAE,UAAU;CAAU,OAAO;AAAM,CAAC;;AAIvF,MAAa,2BAA2B,OAAO,OAAO;CACpD,UAAU;CACV,oBAAoB,OAAO,YAAY,YAAY;CACnD,OAAO,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,GAAG,OAAO,oBAAoB,KAAM,CAAC;AACrF,CAAC;;AAKD,MAAa,yBAAyB,OAAO,OAAO;CAClD,UAAU;CACV,WAAW;CACX,OAAO,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,GAAG,OAAO,oBAAoB,GAAI,CAAC;AACnF,CAAC;;AAKD,MAAa,8BAA8B,OAAO,OAAO;CACvD,UAAU;CACV,gBAAgB;CAChB,sBAAsB;CACtB,QAAQ,OAAO;CACf,aAAa,OAAO,IAAI,MAAM,OAAO,uBAAuB,CAAC,GAAG,OAAO,oBAAoB,GAAG,CAAC;CAC/F,cAAc,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,GAAG,OAAO,oBAAoB,GAAG,CAAC;AACzF,CAAC;AAID,MAAa,uBAAuB,OAAO,OAAO;CAChD,UAAU;CACV,cAAc;;CAEd,eAAe,OAAO,QAAQ,MAAM,OAAO,oBAAoB,GAAG,CAAC;CACnE,cAAc,OAAO;;CAErB,eAAe,OAAO,QAAQ,MAAM,OAAO,oBAAoB,GAAG,CAAC;AACrE,CAAC;;AAKD,MAAa,4BAA4B,OAAO,OAAO;CACrD,UAAU;CACV,mBAAmB,OAAO,YAAY,OAAO,OAAO;AACtD,CAAC;AAUD,MAAM,cAAc,cAClB,iBAAiB,KAAK;CACpB;CACA,SAAS;AACX,CAAC;;AAGH,MAAM,kBAAkB,OAAO,WAAW,WACxC,UACA,WACA,OACA;CACA,MAAM,QAAQ,OAAO;CACrB,MAAM,UAA0C,CAAC;CACjD,IAAI,QAAQ;CACZ,IAAI;CAEJ,OAAO,MAAM;EACX,MAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,IAAI,QAAQ,MAAM;EAExD,MAAM,OAAO,OAAO,OAAO,WACzB,MAAM,KAAK;GACT;GACA;GACA,MAAM;IAAE,OAAO;IAAW,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;GAAG;EACtF,CAAC,CACH;EAEA,KAAK,MAAM,SAAS,MAAM;GACxB,IACE,MAAM,aAAa,YACnB,MAAM,aAAa,iBAAiB,MACnC,0BAA0B,aAAa,MAAM,WAAW,UAAU,sBAEnE,OAAO,OAAO,WAAW,yBAAyB;GACpD,gBAAgB,MAAM;GACtB,SAAS,OAAO,OAAO,WAAW,eAAe,MAAM,MAAM,CAAC,CAAC,CAAC,KAC9D,OAAO,KAAK,WAAW,OAAO,KAAK,GACnC,OAAO,eAAe,WAAW,sBAAsB,CAAC,CAC1D;GACA,IAAI,QAAA,UACF,OAAO,OAAO,WAAW,2BAA2B;GACtD,QAAQ,KAAK,KAAK;EACpB;EACA,IAAI,KAAK,SAAS,aAAa,QAAQ,SAAS,OAC9C,OAAO,OAAO,WAAW,sBAAsB;EACjD,IAAI,KAAK,SAAS,WAAW,OAAO;CACtC;AACF,CAAC;;AAGD,MAAa,YAAY,OAAO,WAAW,WAAW,SAA8B;CAClF,OAAO,OAAO,aAAa,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,KACvD,OAAO,eAAe,WAAW,mBAAmB,CAAC,CACvD;CAEA,MAAM,UAAU,OAAO,gBACrB,QAAQ,UACR;EAAE,MAAM;EAAY,UAAU,QAAQ;CAAS,GAC/C,CACF;CAEA,IAAI,QAAQ,MAAM,UAAU,MAAM,OAAO,aAAa,QAAQ,QAAQ,GACpE,OAAO,OAAO,WAAW,oBAAoB;CAE/C,OAAO,OAAO,gBAAgB,QAAQ,EAAE;AAC1C,CAAC;AAED,MAAa,cAAc,OAAO,WAAW,WAAW,SAAgC;CACtF,OAAO,OAAO,aAAa,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,KACzD,OAAO,eAAe,WAAW,qBAAqB,CAAC,CACzD;CAEA,MAAM,UAAU,OAAO,gBACrB,QAAQ,UACR;EAAE,MAAM;EAAY,OAAO,QAAQ;CAAM,GACzC,CACF;CAEA,IACE,QAAQ,MACL,EAAE,QAAQ,EAAE,gBACX,QAAQ,SAAS,uBACjB,QAAQ,SAAS,UACjB,QAAQ,UAAU,QAAQ,KAC9B,GAEA,OAAO,OAAO,WAAW,sBAAsB;CAEjD,OAAO,OAAO,gBAAgB,QAAQ,EAAE;AAC1C,CAAC;;AAGD,MAAa,kBAAkB,OAAO,WAAW,WAAW,SAAmC;CAC7F,OAAO,OAAO,aAAa,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,KAC5D,OAAO,eAAe,WAAW,yBAAyB,CAAC,CAC7D;CAEA,MAAM,OAAO,QAAO,OADC,aAAA,CACK,YAAY,kBAAkB,KAAK,EAAE,UAAU,QAAQ,SAAS,CAAC,CAAC;CAE5F,MAAM,UAAU,OAAO,gBACrB,QAAQ,UACR;EACE,MAAM;EACN,sBAAsB,KAAK;EAC3B,GAAI,QAAQ,uBAAuB,KAAA,IAC/B,CAAC,IACD,EAAE,oBAAoB,QAAQ,mBAAmB;CACvD,GACA,QAAQ,KACV;CAEA,OAAO;EACL,UAAU,QAAQ;EAClB,cAAc,KAAK;EACnB;CACF;AACF,CAAC;AAED,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC,EACA,UAAU,SACZ,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAM,6BACJ,WAEA,OAAO,QAAQ,SAAS;AAE1B,MAAM,0BAA0B,eAAe,KAC7C,OAAO,OAAO,2BAA2B,EAAE,SAAS,qCAAqC,CAAC,CAC5F;;AAGA,IAAa,sBAAb,cAAyC,OAAO,MAC9C,0CACF,CAAC,CAAC;CACA,SAAS,OAAO,QAAQ,CAAC;;CAEzB,gBAAgB;;CAEhB,aAAa,OAAO,MAAM,cAAc,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;CACrE,kBAAkB,OAAO;;CAEzB,kBAAkB,kBAAkB,MAAM,OAAO,cAAc,CAAC,CAAC;CACjE,iBAAiB;CACjB,SAAS;AACX,CAAC,CAAC,CAAC;;CAED,IAAI,WAA4B;EAC9B,OAAO,KAAK,eAAe;CAC7B;AACF;;AAGA,IAAa,kBAAb,cAAqC,OAAO,MAC1C,sCACF,CAAC,CAAC;CACA,kBAAkB,OAAO;CACzB,YAAY;;CAEZ,OAAO,OAAO,MAAM,cAAc,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;;CAE/D,QAAQ,OAAO;AACjB,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,cAAb,cAAiC,OAAO,MAAmB,kCAAkC,CAAC,CAAC;CAC7F,SAAS;CACT,YAAY;CACZ,SAAS,OAAO,MAAM,cAAc,CAAC,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC;AACrE,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,gBAAb,cAAmC,OAAO,MACxC,oCACF,CAAC,CAAC;CACA,UAAU;CACV,OAAO;AACT,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,gBAAb,cAAmC,OAAO,MACxC,oCACF,CAAC,CAAC;CACA,UAAU;CACV,OAAO;CACP,YAAY,OAAO,YAAY,OAAO,MAAM,eAAe,CAAC,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC,CAAC;CAC3F,sBAAsB;AACxB,CAAC,CAAC,CAAC,CAAC;AAEJ,MAAM,cAAc,OAAO,MAAM,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC;AAC9E,MAAM,uBAAuB,OAAO,MAAM,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAErF,MAAM,eAAe,OAAO,OAAO;CACjC,UAAU;CACV,sBAAsB;CACtB,SAAS;CACT,YAAY;CACZ,SAAS;CACT,YAAY;AACd,CAAC;AAED,MAAM,iBAAiB,OAAO,kBAAkB,YAAY;AAE5D,MAAM,0BAA0B,OAAO,kBACrC,OAAO,OAAO;CACZ,kBAAkB,gBAAgB,OAAO;CACzC,QAAQ,gBAAgB,OAAO;CAC/B,YAAY,OAAO,OAAO;EACxB,SAAS,oBAAoB,OAAO;EACpC,kBAAkB,oBAAoB,OAAO;EAC7C,kBAAkB,oBAAoB,OAAO;EAC7C,iBAAiB,oBAAoB,OAAO;EAC5C,SAAS,oBAAoB,OAAO;EACpC,aAAa;CACf,CAAC;CACD,OAAO;AACT,CAAC,CACH;;AAGA,MAAM,oBAAoB,UAA2B;CACnD,MAAM,kBAAkB,MAAM;CAC9B,MAAM,mBAAmB,gBAAgB;CACzC,MAAM,aAAa,MAAM;CAEzB,MAAM,SAAS,wBAAwB;EACrC,kBAAkB,MAAM;EACxB,QAAQ,MAAM;EACd,YAAY;GACV,SAAS,gBAAgB;GACzB,kBAAkB,gBAAgB;GAClC,kBAAkB,gBAAgB;GAClC,iBAAiB,gBAAgB;GACjC,SAAS,gBAAgB;GACzB,aAAa;EACf;EACA,OAAO;CACT,CAAC;CAED,MAAM,oBAAoB,OAAO,WAAW,YAAY;CACxD,MAAM,cAAc,OAAO,MAAM;CAEjC,MAAM,WAAW,cAAc,gBAAgB,cAAc;CAE7D,IAAI,OAAO,UAAU,QAAQ,GAAG,OAAO,OAAO,KAAK,SAAS,OAAO;CACnE,MAAM,iBAAiB,SAAS,QAAQ;CAExC,IAAI,CAAC,0BAA0B,cAAc,GAC3C,OAAO,OAAO,KACZ,iBAAiB,KAAK;EACpB,WAAW;EACX,SAAS;CACX,CAAC,CACH;CAIF,MAAM,cAAc,CAAC;CAErB,KAAK,IAAI,QAAQ,GAAG,QAAQ,mBAAmB,SAAS;EACtD,MAAM,SAAS,cAAc,iBAAiB,MAAO;EAErD,IAAI,OAAO,UAAU,MAAM,GAAG,OAAO,OAAO,KAAK,OAAO,OAAO;EAC/D,YAAY,KAAK,OAAO,OAAO;CACjC;CACA,MAAM,QAAQ,CAAC;CAEf,KAAK,IAAI,QAAQ,GAAG,QAAQ,aAAa,SAAS;EAChD,MAAM,SAAS,cAAc,WAAW,MAAO;EAE/C,IAAI,OAAO,UAAU,MAAM,GAAG,OAAO,OAAO,KAAK,OAAO,OAAO;EAC/D,MAAM,KAAK,OAAO,OAAO;CAC3B;CAEA,MAAM,aAAa,OAAO,OACxB,oBAAoB,KAClB;EACE,GAAG,OAAO;EACV;EACA,aAAa,OAAO,OAAO,YAAY,KAAK,EAAE,gBAAgB,SAAS,CAAC;CAC1E,GACA,EAAE,eAAe,KAAK,CACxB,CACF;CAEA,MAAM,SAAS,OAAO,OACpB,gBAAgB,KACd;EACE,kBAAkB,OAAO;EACzB,QAAQ,OAAO;EACf;EACA,OAAO,OAAO,OAAO,MAAM,KAAK,EAAE,gBAAgB,SAAS,CAAC;CAC9D,GACA,EAAE,eAAe,KAAK,CACxB,CACF;CAEA,MAAM,iBAAiB,cAAc,WAAW,QAAQ,oBAAoB,SAAS,QAAQ,KAAK,kBAAkB,YAAY,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,uBAAuB,WAAW,iBAAiB,sBAAsB,WAAW,iBAAiB,qBAAqB,WAAW,gBAAgB,aAAa,KAAK,UAAU,WAAW,OAAO,EAAE;CACvW,MAAM,OAAO,uBAAuB,OAAO,iBAAiB,gBAAgB,eAAe,YAAY,MAAM,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,aAAa,OAAO,OAAO;CAE1K,OAAO,OAAO,QACZ,OAAO,OAAO;EACZ;EACA;EACA;EACA,WAAW,KAAK,UAAU,MAAM,KAAK,EAAE,WAAW,IAAI,CAAC;EACvD,OAAO,eAAe,IAAI;CAC5B,CAAC,CACH;AACF;AAEA,MAAM,kCAAkB,IAAI,QAAuC;;;;;;AAOnE,MAAa,8BACX,UACA,OACA,YACA,mBACY;CACZ,MAAM,aAAa,KAAK,UAAU,QAAQ;CAC1C,MAAM,cAAc,eAAe,UAAU;CAC7C,MAAM,eAAe,eAAe,KAAK,UAAU,MAAM,OAAO,CAAC;CAIjE,MAAM,WACJ,MAAM,QAAQ,UAAU,eAAe,cAAc,iBAAiB,OACtE,cACA;CAEF,IAAI,IAAI,aAAa,WAAW,KAAA,UAAmC,OAAO;CAE1E,MAAM,kBAAkB,eAAe,KAAK,UAAU,2BAA2B,MAAM,OAAO,CAAC,CAAC;CAEhG,OAAO,aAAa,WAAW,mBAAmB;AACpD;AAuCA,MAAa,iBAAiB,EAC5B,UAAU,UACR,OAAO,cAAc;CACnB,MAAM,WAAW,gBAAgB,IAAI,KAAK;CAE1C,IAAI,aAAa,KAAA,GAAW,OAAO,OAAO,QAAQ,QAAQ;CAE1D,OAAO,OAAO,IAAI;EAChB,WACE,OAAO,IAAI,aAAa;GACtB,MAAM,aAAa,MAAM,cAAc,CAAC;GACxC,MAAM,eAAe,MAAM,MAAM;GAEjC,MAAM,SAAS,eAAe;IAC5B,GAAG;IACH,SAAS,MAAM,MAAM;IACrB,YAAY,MAAM,MAAM;IACxB,SAAS;IACT;GACF,CAAC;GAED,MAAM,eAAe,OAAO,QAAQ;GACpC,MAAM,kBAAkB,OAAO,WAAW;GAE1C,MAAM,kBAAoE,CAAC;GAE3E,KAAK,IAAI,QAAQ,GAAG,QAAQ,iBAAiB,SAC3C,gBAAgB,KAAK,OAAO,iBAAiB,WAAW,MAAO,CAAC;GAClE,OAAO,OAAO,eAAe;GAE7B,IAAI,iBAAiB,KAAK,gBAAgB,WAAW,GACnD,OAAO,OAAO,OAAO,KACnB,iBAAiB,KAAK;IACpB,WAAW;IACX,SAAS;GACX,CAAC,CACH;GACF,IAAI,gBAAgB,MAAM,EAAE,YAAY,CAAC,iBAAiB,OAAO,UAAU,KAAK,CAAC,GAC/E,OAAO,OAAO,OAAO,KACnB,iBAAiB,KAAK;IACpB,WAAW;IACX,SAAS;GACX,CAAC,CACH;GAEF,MAAM,YAAY,CAAC;GAEnB,KAAK,IAAI,QAAQ,GAAG,QAAQ,cAAc,SACxC,UAAU,KAAK,OAAO,cAAc,aAAa,MAAO,CAAC;GAC3D,MAAM,SAAS,cAAc,KAAK,UAAU,OAAO,OAAO,EAAE,gBAAgB,KAAK,UAAU,OAAO,UAAU,EAAE;GAC9G,MAAM,YAAY,GAAG,SAAS,UAAU,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE;GAE1E,MAAM,aAAa,UAAU,QAC1B,OAAO,WAAW,QAAQ,OAAO,OAClC,eAAe,MAAM,KAAK,UAAU,WAAW,IAAI,IAAI,UAAU,SAAS,EAC5E;GAEA,IAAI,aAAA,UACF,OAAO,OAAO,OAAO,KACnB,iBAAiB,KAAK;IACpB,WAAW;IACX,SAAS,2BAA2B,0BAA0B;GAChE,CAAC,CACH;GAEF,MAAM,QAAQ,OAAO,OACnB,YAAY,KACV;IACE,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,SAAS,OAAO,OAAO,UAAU,KAAK,EAAE,gBAAgB,SAAS,CAAC;GACpE,GACA,EAAE,eAAe,KAAK,CACxB,CACF;GAEA,MAAM,UAAU,cAAc,KAC5B;IACE,UAAU,OAAO;IACjB,sBAAsB,OAAO;IAC7B;IACA,GAAI,gBAAgB,WAAW,IAC3B,CAAC,IACD,EAAE,YAAY,OAAO,OAAO,gBAAgB,KAAK,EAAE,aAAa,MAAM,CAAC,EAAE;GAC/E,GACA,EAAE,eAAe,KAAK,CACxB;GAEA,MAAM,UAAU,OAAO,OACrB,UAAU,KAAK,EAAE,WAAW,MAAM,MAAM,YACtC,OAAO,OAAO;IACZ,UAAU,UAAU;IACpB,YAAY;IACZ,aAAa;IACb;IACA;GACF,CAAC,CACH,CACF;GAEA,MAAM,WAAW,OAAO,OAAO,UAAU,KAAK,EAAE,eAAe,QAAQ,CAAC;GAExE,MAAM,WAAW,OAAO,OACtB,OAAO,OAAO,SAAS;IACrB;IACA;IACA;IACA;IACA;GACF,CAAC,CACH;GAEA,gBAAgB,IAAI,UAAU,QAAQ;GAEtC,OAAO;EACT,CAAC;EACH,QAAQ,UACN,OAAO,GAAG,gBAAgB,CAAC,CAAC,KAAK,IAC7B,QACA,iBAAiB,KAAK;GACpB,WAAW;GACX,SAAS,OAAO,cAAc,KAAK,IAC/B,MAAM,UACN;GACJ;EACF,CAAC;CACT,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,OAAO,UAAU,GAChC,OAAO,UAAU,UACf,OAAO,GAAG,gBAAgB,CAAC,CAAC,KAAK,IAC7B,QACA,iBAAiB,KAAK;EACpB,WAAW;EACX,SAAS,MAAM;EACf;CACF,CAAC,CACP,CACF;AACF,CAAC,EACL;AAEA,IAAa,eAAb,cAAkC,OAAO,MAAoB,mCAAmC,CAAC,CAAC;CAChG,eAAe;CACf,cAAc;CACd,UAAU,OAAO;AACnB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,aAAb,cAAgC,OAAO,MAAkB,iCAAiC,CAAC,CAAC;CAC1F,UAAU;CACV,eAAe,OAAO,YAAY,iBAAiB;CACnD,OAAO,OAAO,QAAQ,MAAM,OAAO,cAAc,CAAC,GAAG,OAAO,oBAAoB,IAAK,CAAC;AACxF,CAAC,CAAC,CAAC,CAAC;;AAGJ,MAAa,mBAAmB,OAAO,OAAO;CAC5C,GAAG,WAAW;CACd,iBAAiB;AACnB,CAAC;;AAKD,MAAa,kBAAkB,OAAO,MAAM;CAC1C,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,UAAU;EAAG,UAAU;CAAS,CAAC;CACtE,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,UAAU;EAAG,OAAO;CAAM,CAAC;CAEhE,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,iBAAiB;EACtC,oBAAoB;EACpB,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,aAAa;EAClC,OAAO;EACP,cAAc;EACd,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,mBAAmB;EACxC,OAAO;EACP,YAAY;EACZ,gBAAgB;EAChB,qBAAqB,OAAO,MAAM,UAAU,CAAC,CAAC,MAC5C,OAAO,YAAY,CAAC,GACpB,OAAO,YAAY,4BAA4B,GAC/C,OAAO,YAAY,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,MAAM,CAC7D;EACA,iBAAiB;CACnB,CAAC,CAAC,CAAC,MACD,OAAO,YAAY,cAAc,UAAU,oBAAoB,SAAS,UAAU,UAAU,CAAC,CAC/F;CACA,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,iBAAiB;EACtC,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,gBAAgB;EACrC,iBAAiB;CACnB,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,sBAAsB;EAC3C,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,wBAAwB;EAC7C,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,qBAAqB;EAC1C,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,uBAAuB;EAC5C,YAAY;EACZ,iBAAiB;CACnB,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,qBAAqB;EAC1C,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,cAAc;EACnC,iBAAiB;CACnB,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,kBAAkB;EACvC,iBAAiB;EACjB,gBAAgB,OAAO,YAAY,QAAQ;CAC7C,CAAC;CAED,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,YAAY;EACjC,gBAAgB;EAChB,iBAAiB;CACnB,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,iBAAiB;EACtC,sBAAsB;CACxB,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,aAAa;EAClC,sBAAsB;EACtB,oBAAoB,OAAO,YAAY,YAAY;CACrD,CAAC;AACH,CAAC;;AAKD,MAAa,qBAAqB,OAAO,OAAO;CAC9C,UAAU;CACV,WAAW;CACX,MAAM,OAAO,OAAO;EAClB,eAAe,OAAO,YAAY,iBAAiB;EACnD,OAAO,WAAW,OAAO;CAC3B,CAAC;AACH,CAAC;AAGD,MAAa,oBAAoB,OAAO,MAAM,CAAC,oBAAoB,UAAU,CAAC;AAG9E,IAAa,oBAAb,cAAuC,OAAO,MAC5C,wCACF,CAAC,CAAC;CACA,UAAU;CACV,aAAa,OAAO,YAAY,iBAAiB;AACnD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,sBAAb,cAAyC,OAAO,MAC9C,0CACF,CAAC,CAAC;CACA,UAAU;CACV,QAAQ,OAAO,YAAY,kBAAkB;AAC/C,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,oBAAb,cAAuC,OAAO,MAC5C,wCACF,CAAC,CAAC,EACA,UAAU,SACZ,CAAC,CAAC,CAAC,CAAC;;;;;AAMJ,IAAa,aAAb,cAAgC,OAAO,MAAkB,iCAAiC,CAAC,CAAC;CAC1F,UAAU;CACV,cAAc;AAChB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC,EAAE,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC;AAE3B,IAAa,eAAb,cAAkC,OAAO,MAAoB,mCAAmC,CAAC,CAAC;CAChG,UAAU;CACV,cAAc;AAChB,CAAC,CAAC,CAAC,CAAC;;;;;;AAOJ,IAAa,iBAAb,cAAoC,OAAO,MACzC,qCACF,CAAC,CACC,OAAO,OAAO;CACZ,GAAG,WAAW;;CAEd,eAAe,OAAO;CACtB,SAAS,OAAO,MAAM,uBAAuB,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC,MACD,OAAO,YAAY,aAAa;CAC9B,IAAI,SAAS,iBAAiB,GAAG,OAAO,SAAS,QAAQ,WAAW;CACpE,IAAI,SAAS,QAAQ,EAAE,EAAE,aAAa,GAAG,OAAO;CAChD,MAAM,SAAS,qBAAqB,SAAS,QAAQ;CACrD,MAAM,UAAU,wBAAwB,SAAS,QAAQ;CACzD,MAAM,sBAAM,IAAI,IAAc;CAC9B,MAAM,4BAAY,IAAI,IAAuB;CAC7C,IAAI,WAAW;CAEf,KAAK,MAAM,SAAS,SAAS,SAAS;EACpC,MAAM,OACJ,MAAM,aAAa,IACf,IACA,MAAM,OAAO,aAAa,SACxB,IACA,MAAM,OAAO,aAAa,UACxB,IACA;EAEV,IACE,MAAM,aAAa,SAAS,YAC5B,MAAM,WAAW,KACjB,MAAM,WAAW,SAAS,gBAC1B,QAAQ,YACR,IAAI,IAAI,MAAM,OAAO,QAAQ,KAC7B,UAAU,IAAI,MAAM,QAAQ,GAE5B,OAAO;EACT,IAAI,IAAI,MAAM,OAAO,QAAQ;EAC7B,UAAU,IAAI,MAAM,QAAQ;EAC5B,WAAW;CACb;CAEA,OAAO;AACT,CAAC,CACH,CACF,CAAC,CAAC,CAAC;;AAGH,IAAa,kBAAb,cAAqC,OAAO,MAC1C,sCACF,CAAC,CAAC;CACA,GAAG,iBAAiB;CACpB,cAAc;CACd,WAAW;CACX,eAAe;CACf,WAAW,OAAO;;CAElB,WAAW,OAAO,YAAY,OAAO,qBAAqB;AAC5D,CAAC,CAAC,CAAC,CAAC;;AAGJ,MAAa,kBAAkB,YAAY,UAAU,OAAO,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAEvF,MAAa,qBAAqB,uBAAuB,UACvD,OAAO,KAAK,CAAC,mBAAmB,CAAC,CACnC;AAEA,MAAa,uBAAuB,wBAAwB,UAC1D,OAAO,KAAK,CAAC,mBAAmB,CAAC,CACnC;AAEA,MAAa,iBAAiB,OAAO,OAAO;CAC1C,QAAQ,OAAO,MAAM,eAAe,CAAC,CAAC,MAAM,OAAO,YAAA,GAA0C,CAAC;CAC9F,WAAW,OAAO,MAAM,kBAAkB,CAAC,CAAC,MAC1C,OAAO,YAAA,GAA0C,CACnD;CACA,aAAa,OAAO,MAAM,oBAAoB,CAAC,CAAC,MAC9C,OAAO,YAAA,GAA0C,CACnD;AACF,CAAC;AAED,MAAa,oBAAoB,OAAO,OAAO;CAAE,SAAS;CAAS,YAAY;AAAW,CAAC;;AAG3F,IAAa,qBAAb,cAAwC,wBAAwB,OAC9D,yCACF,CAAC,CAAC,EACA,QAAQ,aACV,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,eAAb,cAAkC,OAAO,MAAoB,mCAAmC,CAAC,CAAC;CAChG,gBAAgB,OAAO,QAAQ,gCAAgC;CAC/D,QAAQ,OAAO;CACf,UAAU;CACV,cAAc;CACd,UAAU;;CAEV,YAAY,OAAO,YAAY,gBAAgB;;CAE/C,cAAc,kBAAkB,MAAM,OAAO,cAAc,CAAC,CAAC;CAC7D,SAAS,OAAO,MAAM,kBAAkB,CAAC,CAAC,MACxC,OAAO,YAAA,GAA0C,CACnD;CACA,SAAS,OAAO,MAAM,iBAAiB,CAAC,CAAC,MACvC,OAAO,YAAA,GAA0C,CACnD;CACA,YAAY,OAAO,MAAM,eAAe,CAAC,CAAC,MACxC,OAAO,YAAA,GAA0C,CACnD;CACA,UAAU;;CAEV,YAAY,OAAO,MAAM,qBAAqB,CAAC,CAAC,MAC9C,OAAO,YAAA,GAA0C,CACnD;CACA,QAAQ,OAAO,YAAY,kBAAkB;;CAE7C,cAAc,OAAO,MAAM,QAAQ,CAAC,CAAC,MAAM,OAAO,YAAY,OAAW,CAAC;AAC5E,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,qBAAb,MAAa,2BAA2B,QAAQ,QAG9C,CAAC,CAAC,yCAAyC,CAAC,CAAC;CAC7C,OAAO,QAAQ;EACb,OAAO,MAAM,OACX,oBACA,OAAO,IAAI,cAAc,UAAU,mBAAmB,GAAG,EAAE,QAAQ,MAAM,OAAO,CAAC,CAAC,CACpF;CACF;AACF;;AAGA,MAAa,gBAAgB,YAC3B,OAAO,OACL,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CACtB,IAAI;CAEJ,OAAO,OAAO,SAAS,UAAU,YAC/B,OAAO,OAAO,OAAO,CAAC,CAAC,KACrB,OAAO,SAAS,SAAS;EACvB,IACE,KAAK,aAAa,QAAQ,YACzB,aAAa,KAAA,MACX,CAAC,OAAO,cAAc,oBAAoB,CAAC,CAAC,KAAK,UAAU,SAAS,QAAQ,KAC3E,CAAC,OAAO,cAAc,OAAO,YAAY,gBAAgB,CAAC,CAAC,CACzD,KAAK,YACL,SAAS,UACX,KACA,KAAK,iBAAiB,SAAS,gBAC/B,KAAK,kBACF,SAAS,QAAQ,GAAG,EAAE,CAAC,EAAE,YAAY,SAAS,eAAe,KAAK,KACpE,KAAK,WAAW,KAAA,KAAa,KAAK,WAAW,QAAQ,SAE1D,OAAO,OAAO,KACZ,iBAAiB,KAAK;GACpB,WAAW;GACX,SAAS;EACX,CAAC,CACH;EACF,WAAW;EAEX,OAAO,OAAO,QAAQ,CACpB,CAAC,IAAI,GACL,KAAK,WAAW,KAAA,IACZ,OAAO,KAAK,IACZ,OAAO,KACL,oBAAoB,KAAK;GAAE,UAAU,QAAQ;GAAU,QAAQ,KAAK;EAAO,CAAC,CAC9E,CACN,CAAU;CACZ,CAAC,CACH,CACF;AACF,CAAC,CACH;;;;;;AAOF,IAAa,mBAAb,cAAsC,OAAO,MAC3C,uCACF,CAAC,CAAC;CACA,eAAe,OAAO,QAAQ,CAAC;CAC/B,UAAU;CACV,iBAAiB;CACjB,OAAO;CACP,WAAW,OAAO;AACpB,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC,EACA,YAAY,iBACd,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC;CACA,UAAU;CACV,oBAAoB,OAAO,YAAY,iBAAiB;AAC1D,CAAC,CAAC,CAAC,CAAC;;AAGJ,MAAa,8BAA8B;;AAG3C,MAAa,6BAA6B;AAE1C,MAAa,uBAAuB,OAAO,OAAO;CAChD,SAAS,OAAO,QAAQ,CAAC;CACzB,cAAc,OAAO,QAAQ,qBAAqB;CAClD,UAAU;CACV,OAAO;CACP,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB,OAAO,IAAI,MAAM,OAAO,UAAU;EAAE,SAAS;EAAG,SAAS;CAAO,CAAC,CAAC;CACtF,eAAe;AACjB,CAAC;AAED,MAAa,mBAAmB,OAAO,OAAO;CAC5C,GAAG,qBAAqB;;CAExB,YAAY,OAAO,OAAO,MAAM,OAAO,YAAY,2BAA2B,CAAC;AACjF,CAAC;AAID,MAAa,uBAAuB,OAAO,OAAO;CAChD,UAAU;CACV,iBAAiB;AACnB,CAAC;;;;;;AAwBD,IAAa,wBAAb,cAA2C,OAAO,MAChD,4CACF,CAAC,CAAC;CACA,UAAU,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC;CACrD,WAAW,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC;CACtD,SAAS,OAAO,YAAY,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC,CAAC;CACxE,UAAU,OAAO,YAAY,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,CAAC,CAAC;CACzE,UAAU,OAAO,YAAY,iBAAiB;AAChD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,mBAAb,cAAsC,OAAO,YAA8B,CAAC,CAAC,oBAAoB;CAC/F,WAAW,OAAO;CAClB,SAAS,OAAO;CAChB,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;CACzC,YAAY,OAAO,YAAY,qBAAqB;AACtD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,wBAAb,cAA2C,OAAO,YAAmC,CAAC,CACpF,yBACA,EAAE,UAAU,SAAS,CACvB,CAAC,CAAC,CAAC;;AAGH,IAAa,uBAAb,cAA0C,OAAO,YAAkC,CAAC,CAClF,wBACA;CACE,UAAU;CACV,QAAQ,OAAO,SAAS;EAAC;EAAY;EAAkB;CAAoB,CAAC;AAC9E,CACF,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,QAAQ,KAAK,QAAb;GACE,KAAK,YACH,OAAO,UAAU,KAAK,SAAS;GACjC,KAAK,kBACH,OAAO,UAAU,KAAK,SAAS;GACjC,KAAK,sBACH,OAAO,+DAA+D,KAAK,SAAS;EACxF;CACF;AACF;;;;;;;AAQA,IAAa,iBAAb,cAAoC,OAAO,YAA4B,CAAC,CAAC,kBAAkB;CACzF,UAAU;CACV,SAAS;CACT,QAAQ,OAAO,SAAS;EAAC;EAAiB;EAAmB;EAAQ;CAAe,CAAC;CACrF,oBAAoB,OAAO,YAAY,iBAAiB;AAC1D,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,qBAAb,cAAwC,OAAO,YAAgC,CAAC,CAC9E,sBACA;CACE,UAAU;CACV,QAAQ,OAAO,SAAS;EACtB;EACA;EACA;EACA;CACF,CAAC;AACH,CACF,CAAC,CAAC,CAAC;AAyBH,IAAa,cAAb,cAAiC,QAAQ,QA2EvC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;;AAGzC,IAAa,eAAb,MAAa,qBAAqB,QAAQ,QAcxC,CAAC,CAAC,mCAAmC,CAAC,CAAC;CACvC,OAAO,UAAU,OAAwD;EACvE,OAAO;GACL,MAAM,MAAM;GACZ,eAAe,MAAM;GACrB,YAAY,MAAM;GAClB,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,aAAa,MAAM;GACnB,cAAc,MAAM;GACpB,GAAI,MAAM,uBAAuB,KAAA,IAC7B,CAAC,IACD,EAAE,oBAAoB,MAAM,mBAAmB;GACnD,GAAI,MAAM,sBAAsB,KAAA,IAC5B,CAAC,IACD,EAAE,mBAAmB,MAAM,kBAAkB;EACnD;CACF;;CAGA,OAAO,QAAQ;EACb,OAAO,MAAM,OAAO,cAAc,OAAO,IAAI,aAAa,aAAa,SAAS,CAAC;CACnF;AACF"}
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { n as utf8ByteLength } from "./utf8-B5pAmhTo.mjs";
3
- import { f as CanonicalSequence } from "./Records-DzL4Kbtw.mjs";
4
- import { r as canonicalJson } from "./Digest-C3EODOee.mjs";
5
- import { A as ThreadExportRejected, E as ThreadExport, M as ThreadExportSnapshot, X as ThreadStoreError, ft as transferRecordDependencies, j as ThreadExportRequest } from "./ThreadStore-BC4V-mY-.mjs";
3
+ import { f as CanonicalSequence } from "./Records-CZRedCE7.mjs";
4
+ import { r as canonicalJson } from "./Digest-ft4ku9pj.mjs";
5
+ import { D as ThreadExport, M as ThreadExportRequest, N as ThreadExportSnapshot, Z as ThreadStoreError, j as ThreadExportRejected, pt as transferRecordDependencies } from "./ThreadStore-D2rqtt7k.mjs";
6
6
  import { Context, Effect, Schema } from "effect";
7
7
  //#region src/durable/internal/thread-transfer-source.ts
8
8
  /** Installed before opening the source pull, so producer fibers observe the same phase. */
@@ -151,4 +151,4 @@ const exportThreadPage = Effect.fnUntraced(function* (input) {
151
151
  //#endregion
152
152
  export { checkTransferPageBytes as a, transferDependencies as c, checkExportSource as i, transferSections as l, ThreadTransfer_exports as n, exportThreadPage as o, TransferManifest as r, sameTransferManifest as s, ThreadExporterReader as t, ImportSourcePhase as u };
153
153
 
154
- //# sourceMappingURL=ThreadTransfer-S7FnTRHt.mjs.map
154
+ //# sourceMappingURL=ThreadTransfer-BFolkpEp.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadTransfer-S7FnTRHt.mjs","names":[],"sources":["../src/durable/internal/thread-transfer-source.ts","../src/durable/ThreadTransfer.ts"],"sourcesContent":["import { Context } from \"effect\";\n\n/** Installed before opening the source pull, so producer fibers observe the same phase. */\nexport const ImportSourcePhase = Context.Reference<{ writing: boolean } | undefined>(\n \"@effect-agent/thread/internal/ImportSourcePhase\",\n { defaultValue: () => undefined },\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport type { ThreadId } from \"../core/Identifiers.ts\";\nimport { canonicalJson, utf8ByteLength } from \"./Digest.ts\";\nimport { ImportSourcePhase } from \"./internal/thread-transfer-source.ts\";\nimport { transferRecordDependencies } from \"./internal/transfer-dependencies.ts\";\nimport {\n type RecordId,\n CURRENT_RECORD_FORMAT,\n CanonicalSequence,\n type CanonicalRecordEnvelope,\n} from \"./Records.ts\";\nimport {\n MAX_THREAD_EXPORT_PAGE_BYTES,\n ThreadExport,\n ThreadExportRequest,\n ThreadExportSnapshot,\n ThreadExportRejected,\n type ThreadNotMaterialized,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\n\nexport const transferSections = [\n \"admissions\",\n \"aborts\",\n \"approvals\",\n \"resolutions\",\n \"deliveries\",\n] as const;\n\nexport type TransferSection = (typeof transferSections)[number];\n\nexport type TransferFacts = Pick<ThreadExport, \"admissions\" | \"commands\" | \"deliveries\">;\n\nexport type TransferManifest = Pick<\n ThreadExport,\n \"threadId\" | \"format\" | \"tailSequence\" | \"snapshot\" | \"workerSeal\"\n>;\n\n/** Reads share the adapter's single page transaction. Batch reads hydrate archives. */\nexport class ThreadExporterReader extends Context.Service<\n ThreadExporterReader,\n {\n readonly snapshot: (\n threadId: ThreadId,\n captured?: TransferManifest,\n ) => Effect.Effect<\n TransferManifest,\n ThreadStoreError | ThreadNotMaterialized | ThreadExportRejected\n >;\n readonly batch: (\n threadId: ThreadId,\n fromSequence: number,\n ) => Effect.Effect<\n Pick<ThreadExport, \"records\" | \"batches\">,\n ThreadStoreError | ThreadNotMaterialized\n >;\n /** A keyset read of at most 256 facts. Keys stay bounded independently of fact identities. */\n readonly facts: (\n threadId: ThreadId,\n section: TransferSection,\n after: string | undefined,\n ) => Effect.Effect<\n {\n readonly facts: TransferFacts;\n readonly after: string;\n },\n ThreadStoreError\n >;\n }\n>()(\"@effect-agent/thread/ThreadExporterReader\") {}\n\nexport const TransferManifest = Schema.Struct({\n threadId: ThreadExport.fields.threadId,\n format: ThreadExport.fields.format,\n tailSequence: ThreadExport.fields.tailSequence,\n snapshot: ThreadExportSnapshot,\n workerSeal: ThreadExport.fields.workerSeal,\n});\n\nconst Position = Schema.Struct({\n manifest: TransferManifest,\n fromSequence: Schema.Int.check(Schema.isGreaterThan(0)),\n section: Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: transferSections.length })),\n consumed: Schema.Natural,\n after: Schema.optionalKey(Schema.String),\n});\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"Thread transfer\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst nextSection = (position: typeof Position.Type) => {\n const { after: _, ...retained } = position;\n\n return { ...retained, section: position.section + 1, consumed: 0 };\n};\n\n/** Exact manifest equality replaces a redundant stored snapshot fingerprint. */\nexport const sameTransferManifest = Schema.toEquivalence(TransferManifest);\n\n/** Must run BEFORE a source gate, transaction or routed RPC is acquired. */\nexport const checkExportSource = (threadId: ThreadId) =>\n Effect.flatMap(ImportSourcePhase, (phase) =>\n phase?.writing\n ? Effect.fail(ThreadExportRejected.make({ threadId, reason: \"live-import-source\" }))\n : Effect.void,\n );\n\n/** Exact evidence references outside this canonical page. */\nexport const transferDependencies = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n): ReadonlyArray<RecordId> =>\n [...new Set(transferRecordDependencies(records.map((entry) => entry.record)))].sort();\n\nconst factCount = (facts: TransferFacts, section: TransferSection): number =>\n section === \"admissions\"\n ? facts.admissions.length\n : section === \"deliveries\"\n ? facts.deliveries.length\n : facts.commands[section].length;\n\nexport const checkTransferPageBytes = (page: ThreadExport) =>\n Schema.encodeEffect(ThreadExport)(page).pipe(\n Effect.mapError(() => failure(\"Transfer page does not encode its canonical wire\")),\n Effect.flatMap((wire) =>\n utf8ByteLength(canonicalJson(wire)) <= MAX_THREAD_EXPORT_PAGE_BYTES\n ? Effect.void\n : Effect.fail(failure(\"Transfer page exceeds 32 MiB\")),\n ),\n );\n\n/** Stateless pages require application quiescence; no transfer counter is maintained on writes. */\nexport const exportThreadPage = Effect.fnUntraced(function* (input: ThreadExportRequest) {\n const reader = yield* ThreadExporterReader;\n\n const request = yield* Schema.decodeEffect(ThreadExportRequest)(input).pipe(\n Effect.mapError(() => failure(\"Invalid export request\")),\n );\n\n const captured =\n request.cursor === undefined\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(Position))(request.cursor).pipe(\n Effect.mapError((cause) => failure(\"Invalid transfer cursor\", cause)),\n );\n\n const manifest = yield* reader.snapshot(request.threadId, captured?.manifest);\n let position = captured ?? { manifest, fromSequence: 1, section: 0, consumed: 0 };\n\n if (!sameTransferManifest(position.manifest, manifest) || manifest.threadId !== request.threadId)\n return yield* ThreadExportRejected.make({\n threadId: request.threadId,\n reason: \"source-changed\",\n });\n if (\n manifest.format !== CURRENT_RECORD_FORMAT ||\n position.fromSequence > manifest.tailSequence + 1\n )\n return yield* failure(\"Unsupported format or invalid canonical transfer position\");\n let canonical: Pick<ThreadExport, \"records\" | \"batches\"> = { records: [], batches: [] };\n\n let facts: TransferFacts = {\n admissions: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n deliveries: [],\n };\n\n const fromSequence = position.fromSequence;\n\n if (fromSequence <= manifest.tailSequence) {\n canonical = yield* reader.batch(request.threadId, fromSequence);\n if (\n canonical.batches.length !== 1 ||\n canonical.records.length === 0 ||\n canonical.records.length > 256\n )\n return yield* failure(\"A transfer page must contain a complete bounded canonical batch\");\n const batch = canonical.batches[0]!;\n\n for (const [index, entry] of canonical.records.entries())\n if (\n entry.threadId !== request.threadId ||\n entry.sequence !== fromSequence + index ||\n entry.batchId !== batch.batchId\n )\n return yield* failure(\"Canonical batch identity or sequence mismatch\");\n\n position = {\n ...position,\n fromSequence: fromSequence + canonical.records.length,\n };\n } else {\n while (position.section < transferSections.length) {\n const section = transferSections[position.section]!;\n\n if (position.consumed > manifest.snapshot[section])\n return yield* failure(\"Transfer fact cursor exceeds its captured count\");\n if (position.consumed === manifest.snapshot[section]) {\n const probe = yield* reader.facts(request.threadId, section, position.after);\n\n const remaining = factCount(probe.facts, section);\n\n if (remaining !== 0) return yield* failure(\"Native transfer count omits retained facts\");\n position = nextSection(position);\n continue;\n }\n const page = yield* reader.facts(request.threadId, section, position.after);\n\n facts = page.facts;\n\n const count = factCount(facts, section);\n\n if (\n count === 0 ||\n count > 256 ||\n page.after === position.after ||\n position.consumed + count > manifest.snapshot[section]\n )\n return yield* failure(\"Transfer fact page is missing or exceeds its captured count\");\n position = { ...position, consumed: position.consumed + count, after: page.after };\n break;\n }\n }\n while (\n position.section < transferSections.length &&\n position.consumed === manifest.snapshot[transferSections[position.section]!]\n ) {\n const section = transferSections[position.section]!;\n const probe = yield* reader.facts(request.threadId, section, position.after);\n\n const count = factCount(probe.facts, section);\n\n if (count !== 0) return yield* failure(\"Native transfer count omits retained facts\");\n position = nextSection(position);\n }\n\n const more =\n position.fromSequence <= manifest.tailSequence || position.section < transferSections.length;\n\n const cursor = more\n ? yield* Schema.encodeEffect(Schema.fromJsonString(Position))(position).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode transfer cursor\", cause)),\n )\n : undefined;\n\n const page = yield* ThreadExport.makeEffect({\n ...manifest,\n transferFormat: \"effect-agent/thread-transfer@4\",\n fromSequence: Schema.decodeSync(CanonicalSequence)(fromSequence),\n ...canonical,\n ...facts,\n dependencies: transferDependencies(canonical.records),\n ...(cursor === undefined ? {} : { cursor }),\n }).pipe(Effect.mapError(() => failure(\"Transfer page exceeds its schema bounds\")));\n\n yield* checkTransferPageBytes(page);\n\n return page;\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadTransfer-BFolkpEp.mjs","names":[],"sources":["../src/durable/internal/thread-transfer-source.ts","../src/durable/ThreadTransfer.ts"],"sourcesContent":["import { Context } from \"effect\";\n\n/** Installed before opening the source pull, so producer fibers observe the same phase. */\nexport const ImportSourcePhase = Context.Reference<{ writing: boolean } | undefined>(\n \"@effect-agent/thread/internal/ImportSourcePhase\",\n { defaultValue: () => undefined },\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport type { ThreadId } from \"../core/Identifiers.ts\";\nimport { canonicalJson, utf8ByteLength } from \"./Digest.ts\";\nimport { ImportSourcePhase } from \"./internal/thread-transfer-source.ts\";\nimport { transferRecordDependencies } from \"./internal/transfer-dependencies.ts\";\nimport {\n type RecordId,\n CURRENT_RECORD_FORMAT,\n CanonicalSequence,\n type CanonicalRecordEnvelope,\n} from \"./Records.ts\";\nimport {\n MAX_THREAD_EXPORT_PAGE_BYTES,\n ThreadExport,\n ThreadExportRequest,\n ThreadExportSnapshot,\n ThreadExportRejected,\n type ThreadNotMaterialized,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\n\nexport const transferSections = [\n \"admissions\",\n \"aborts\",\n \"approvals\",\n \"resolutions\",\n \"deliveries\",\n] as const;\n\nexport type TransferSection = (typeof transferSections)[number];\n\nexport type TransferFacts = Pick<ThreadExport, \"admissions\" | \"commands\" | \"deliveries\">;\n\nexport type TransferManifest = Pick<\n ThreadExport,\n \"threadId\" | \"format\" | \"tailSequence\" | \"snapshot\" | \"workerSeal\"\n>;\n\n/** Reads share the adapter's single page transaction. Batch reads hydrate archives. */\nexport class ThreadExporterReader extends Context.Service<\n ThreadExporterReader,\n {\n readonly snapshot: (\n threadId: ThreadId,\n captured?: TransferManifest,\n ) => Effect.Effect<\n TransferManifest,\n ThreadStoreError | ThreadNotMaterialized | ThreadExportRejected\n >;\n readonly batch: (\n threadId: ThreadId,\n fromSequence: number,\n ) => Effect.Effect<\n Pick<ThreadExport, \"records\" | \"batches\">,\n ThreadStoreError | ThreadNotMaterialized\n >;\n /** A keyset read of at most 256 facts. Keys stay bounded independently of fact identities. */\n readonly facts: (\n threadId: ThreadId,\n section: TransferSection,\n after: string | undefined,\n ) => Effect.Effect<\n {\n readonly facts: TransferFacts;\n readonly after: string;\n },\n ThreadStoreError\n >;\n }\n>()(\"@effect-agent/thread/ThreadExporterReader\") {}\n\nexport const TransferManifest = Schema.Struct({\n threadId: ThreadExport.fields.threadId,\n format: ThreadExport.fields.format,\n tailSequence: ThreadExport.fields.tailSequence,\n snapshot: ThreadExportSnapshot,\n workerSeal: ThreadExport.fields.workerSeal,\n});\n\nconst Position = Schema.Struct({\n manifest: TransferManifest,\n fromSequence: Schema.Int.check(Schema.isGreaterThan(0)),\n section: Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: transferSections.length })),\n consumed: Schema.Natural,\n after: Schema.optionalKey(Schema.String),\n});\n\nconst failure = (message: string, cause?: unknown) =>\n ThreadStoreError.make({\n operation: \"Thread transfer\",\n message,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst nextSection = (position: typeof Position.Type) => {\n const { after: _, ...retained } = position;\n\n return { ...retained, section: position.section + 1, consumed: 0 };\n};\n\n/** Exact manifest equality replaces a redundant stored snapshot fingerprint. */\nexport const sameTransferManifest = Schema.toEquivalence(TransferManifest);\n\n/** Must run BEFORE a source gate, transaction or routed RPC is acquired. */\nexport const checkExportSource = (threadId: ThreadId) =>\n Effect.flatMap(ImportSourcePhase, (phase) =>\n phase?.writing\n ? Effect.fail(ThreadExportRejected.make({ threadId, reason: \"live-import-source\" }))\n : Effect.void,\n );\n\n/** Exact evidence references outside this canonical page. */\nexport const transferDependencies = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n): ReadonlyArray<RecordId> =>\n [...new Set(transferRecordDependencies(records.map((entry) => entry.record)))].sort();\n\nconst factCount = (facts: TransferFacts, section: TransferSection): number =>\n section === \"admissions\"\n ? facts.admissions.length\n : section === \"deliveries\"\n ? facts.deliveries.length\n : facts.commands[section].length;\n\nexport const checkTransferPageBytes = (page: ThreadExport) =>\n Schema.encodeEffect(ThreadExport)(page).pipe(\n Effect.mapError(() => failure(\"Transfer page does not encode its canonical wire\")),\n Effect.flatMap((wire) =>\n utf8ByteLength(canonicalJson(wire)) <= MAX_THREAD_EXPORT_PAGE_BYTES\n ? Effect.void\n : Effect.fail(failure(\"Transfer page exceeds 32 MiB\")),\n ),\n );\n\n/** Stateless pages require application quiescence; no transfer counter is maintained on writes. */\nexport const exportThreadPage = Effect.fnUntraced(function* (input: ThreadExportRequest) {\n const reader = yield* ThreadExporterReader;\n\n const request = yield* Schema.decodeEffect(ThreadExportRequest)(input).pipe(\n Effect.mapError(() => failure(\"Invalid export request\")),\n );\n\n const captured =\n request.cursor === undefined\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(Position))(request.cursor).pipe(\n Effect.mapError((cause) => failure(\"Invalid transfer cursor\", cause)),\n );\n\n const manifest = yield* reader.snapshot(request.threadId, captured?.manifest);\n let position = captured ?? { manifest, fromSequence: 1, section: 0, consumed: 0 };\n\n if (!sameTransferManifest(position.manifest, manifest) || manifest.threadId !== request.threadId)\n return yield* ThreadExportRejected.make({\n threadId: request.threadId,\n reason: \"source-changed\",\n });\n if (\n manifest.format !== CURRENT_RECORD_FORMAT ||\n position.fromSequence > manifest.tailSequence + 1\n )\n return yield* failure(\"Unsupported format or invalid canonical transfer position\");\n let canonical: Pick<ThreadExport, \"records\" | \"batches\"> = { records: [], batches: [] };\n\n let facts: TransferFacts = {\n admissions: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n deliveries: [],\n };\n\n const fromSequence = position.fromSequence;\n\n if (fromSequence <= manifest.tailSequence) {\n canonical = yield* reader.batch(request.threadId, fromSequence);\n if (\n canonical.batches.length !== 1 ||\n canonical.records.length === 0 ||\n canonical.records.length > 256\n )\n return yield* failure(\"A transfer page must contain a complete bounded canonical batch\");\n const batch = canonical.batches[0]!;\n\n for (const [index, entry] of canonical.records.entries())\n if (\n entry.threadId !== request.threadId ||\n entry.sequence !== fromSequence + index ||\n entry.batchId !== batch.batchId\n )\n return yield* failure(\"Canonical batch identity or sequence mismatch\");\n\n position = {\n ...position,\n fromSequence: fromSequence + canonical.records.length,\n };\n } else {\n while (position.section < transferSections.length) {\n const section = transferSections[position.section]!;\n\n if (position.consumed > manifest.snapshot[section])\n return yield* failure(\"Transfer fact cursor exceeds its captured count\");\n if (position.consumed === manifest.snapshot[section]) {\n const probe = yield* reader.facts(request.threadId, section, position.after);\n\n const remaining = factCount(probe.facts, section);\n\n if (remaining !== 0) return yield* failure(\"Native transfer count omits retained facts\");\n position = nextSection(position);\n continue;\n }\n const page = yield* reader.facts(request.threadId, section, position.after);\n\n facts = page.facts;\n\n const count = factCount(facts, section);\n\n if (\n count === 0 ||\n count > 256 ||\n page.after === position.after ||\n position.consumed + count > manifest.snapshot[section]\n )\n return yield* failure(\"Transfer fact page is missing or exceeds its captured count\");\n position = { ...position, consumed: position.consumed + count, after: page.after };\n break;\n }\n }\n while (\n position.section < transferSections.length &&\n position.consumed === manifest.snapshot[transferSections[position.section]!]\n ) {\n const section = transferSections[position.section]!;\n const probe = yield* reader.facts(request.threadId, section, position.after);\n\n const count = factCount(probe.facts, section);\n\n if (count !== 0) return yield* failure(\"Native transfer count omits retained facts\");\n position = nextSection(position);\n }\n\n const more =\n position.fromSequence <= manifest.tailSequence || position.section < transferSections.length;\n\n const cursor = more\n ? yield* Schema.encodeEffect(Schema.fromJsonString(Position))(position).pipe(\n Effect.mapError((cause) => failure(\"Cannot encode transfer cursor\", cause)),\n )\n : undefined;\n\n const page = yield* ThreadExport.makeEffect({\n ...manifest,\n transferFormat: \"effect-agent/thread-transfer@4\",\n fromSequence: Schema.decodeSync(CanonicalSequence)(fromSequence),\n ...canonical,\n ...facts,\n dependencies: transferDependencies(canonical.records),\n ...(cursor === undefined ? {} : { cursor }),\n }).pipe(Effect.mapError(() => failure(\"Transfer page exceeds its schema bounds\")));\n\n yield* checkTransferPageBytes(page);\n\n return page;\n});\n"],"mappings":"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"}
@@ -164,8 +164,9 @@ declare const WorkerSummary: Schema.Struct<{
164
164
  readonly threadId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">;
165
165
  }>;
166
166
  readonly latestReceipt: Schema.NullOr<typeof Receipt>;
167
- /** stopping/stopped identify an owner-issued worker stop, never an ordinary Receipt abort. */
168
- readonly state: Schema.Literals<readonly ["starting", "active", "idle", "stopping", "stopped", "completed", "failed", "cancelled"]>;
167
+ /** Unknown work awaits reconciliation and is not progressing. stopping/stopped identify
168
+ * an owner-issued worker stop, never an ordinary Receipt abort. */
169
+ readonly state: Schema.Literals<readonly ["starting", "active", "unknown", "idle", "stopping", "stopped", "completed", "failed", "cancelled"]>;
169
170
  readonly acceptedInput: Schema.NullOr<Schema.Struct<{
170
171
  readonly receipt: typeof Receipt;
171
172
  readonly messageId: Schema.brand<Schema.NonEmptyString, "@effect-agent/thread/IdempotencyKey">;
@@ -249,8 +250,9 @@ declare const WorkerPage: Schema.Struct<{
249
250
  readonly threadId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">;
250
251
  }>;
251
252
  readonly latestReceipt: Schema.NullOr<typeof Receipt>;
252
- /** stopping/stopped identify an owner-issued worker stop, never an ordinary Receipt abort. */
253
- readonly state: Schema.Literals<readonly ["starting", "active", "idle", "stopping", "stopped", "completed", "failed", "cancelled"]>;
253
+ /** Unknown work awaits reconciliation and is not progressing. stopping/stopped identify
254
+ * an owner-issued worker stop, never an ordinary Receipt abort. */
255
+ readonly state: Schema.Literals<readonly ["starting", "active", "unknown", "idle", "stopping", "stopped", "completed", "failed", "cancelled"]>;
254
256
  readonly acceptedInput: Schema.NullOr<Schema.Struct<{
255
257
  readonly receipt: typeof Receipt;
256
258
  readonly messageId: Schema.brand<Schema.NonEmptyString, "@effect-agent/thread/IdempotencyKey">;
@@ -469,4 +471,4 @@ declare const FrameworkMessage: Schema.Union<readonly [Schema.Struct<{
469
471
  type FrameworkMessage = typeof FrameworkMessage.Type;
470
472
  //#endregion
471
473
  export { WorkerStop as _, WorkerBudgetScope as a, WorkerUpdate as b, WorkerError as c, WorkerPage as d, WorkerRef as f, WorkerStarted as g, WorkerSource as h, WorkerAppliedInput as i, WorkerHistoryEntry as l, WorkerRun as m, AssignmentTerminal as n, WorkerCompletion as o, WorkerReport as p, FrameworkMessage as r, WorkerContext as s, AssignmentDisposition as t, WorkerInput as u, WorkerStopped as v, Worker_d_exports as x, WorkerSummary as y };
472
- //# sourceMappingURL=Worker-CHRaIsWu.d.mts.map
474
+ //# sourceMappingURL=Worker-CLYgfqhF.d.mts.map
@@ -162,10 +162,12 @@ const WorkerRun = Schema.Struct({
162
162
  const WorkerSummary = Schema.Struct({
163
163
  worker: WorkerRef,
164
164
  latestReceipt: Schema.NullOr(Receipt),
165
- /** stopping/stopped identify an owner-issued worker stop, never an ordinary Receipt abort. */
165
+ /** Unknown work awaits reconciliation and is not progressing. stopping/stopped identify
166
+ * an owner-issued worker stop, never an ordinary Receipt abort. */
166
167
  state: Schema.Literals([
167
168
  "starting",
168
169
  "active",
170
+ "unknown",
169
171
  "idle",
170
172
  "stopping",
171
173
  "stopped",
@@ -268,4 +270,4 @@ const FrameworkMessage = Schema.Union([WorkerCompletion, WorkerUpdate]);
268
270
  //#endregion
269
271
  export { MessageStatus as C, MessageRef as S, WorkerStop as _, WorkerBudgetScope as a, WorkerUpdate as b, WorkerError as c, WorkerPage as d, WorkerRef as f, WorkerStarted as g, WorkerSource as h, WorkerAppliedInput as i, WorkerHistoryEntry as l, WorkerRun as m, AssignmentTerminal as n, WorkerCompletion as o, WorkerReport as p, FrameworkMessage as r, WorkerContext as s, AssignmentDisposition as t, WorkerInput as u, WorkerStopped as v, Worker_exports as x, WorkerSummary as y };
270
272
 
271
- //# sourceMappingURL=Worker-DZjdMjZn.mjs.map
273
+ //# sourceMappingURL=Worker-CtuUwYOK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Worker-CtuUwYOK.mjs","names":["FailureDiagnostic.Value"],"sources":["../src/core/internal/message-status.ts","../src/core/Worker.ts"],"sourcesContent":["import * as Schema from \"effect/Schema\";\n\nimport { SettlementId, ThreadId } from \"../Identifiers.ts\";\nimport { IdempotencyKey, Receipt } from \"../Receipt.ts\";\n\n/** A retained outbound delivery identity, not a destination Receipt or access grant. */\nexport const MessageRef = Schema.Struct({ ownerThreadId: ThreadId, messageId: IdempotencyKey });\nexport type MessageRef = typeof MessageRef.Type;\n\nconst Reason = Schema.NonEmptyString.check(Schema.isMaxLength(256));\nconst identity = { message: MessageRef };\n\n/**\n * Source-owned delivery evidence. Pending confirms retention only; accepted supplies the\n * destination Receipt, and processed supplies its canonical settlement. Neither retention nor\n * acceptance proves execution. Refused is a definite rejection; parked stops automatic retry\n * while retaining the same identity and any acceptance evidence. Inspect instead of resending.\n */\nexport const MessageStatus = Schema.Union([\n Schema.Struct({\n ...identity,\n status: Schema.Literal(\"pending\"),\n receipt: Schema.Null,\n settlement: Schema.Null,\n reason: Schema.NullOr(Reason),\n }),\n Schema.Struct({\n ...identity,\n status: Schema.Literal(\"accepted\"),\n receipt: Receipt,\n settlement: Schema.Null,\n reason: Schema.NullOr(Reason),\n }),\n Schema.Struct({\n ...identity,\n status: Schema.Literal(\"processed\"),\n receipt: Receipt,\n settlement: Schema.Struct({\n settlementId: SettlementId,\n outcome: Schema.Literals([\"completed\", \"failed\", \"aborted\"]),\n }),\n reason: Schema.Null,\n }),\n Schema.Struct({\n ...identity,\n status: Schema.Literal(\"refused\"),\n receipt: Schema.Null,\n settlement: Schema.Null,\n reason: Reason,\n }),\n Schema.Struct({\n ...identity,\n status: Schema.Literal(\"parked\"),\n receipt: Schema.NullOr(Receipt),\n settlement: Schema.Null,\n reason: Reason,\n }),\n]);\n\nexport type MessageStatus = typeof MessageStatus.Type;\n","import * as Schema from \"effect/Schema\";\n\nimport { AgentPolicy } from \"./AgentPolicy.ts\";\nimport { Update } from \"./AgentUpdates.ts\";\nimport * as FailureDiagnostic from \"./FailureDiagnostic.ts\";\nimport { AgentId, DelegationId, RunId, SettlementId, ThreadId, ToolCallId } from \"./Identifiers.ts\";\nimport { MessageStatus } from \"./internal/message-status.ts\";\nimport { IdempotencyKey, Receipt } from \"./Receipt.ts\";\nimport { SubagentExecutionFailure, SubagentGrant } from \"./SubagentContract.ts\";\n\n/** Assignment output selected through the Definition's runDisposition declaration. */\nexport const AssignmentDisposition = Schema.Literals([\"completed\", \"waiting\"]);\nexport type AssignmentDisposition = typeof AssignmentDisposition.Type;\n\n/** A permanent destination outcome; an ordinary Run completion does not imply this. */\nexport const AssignmentTerminal = Schema.Literals([\"completed\", \"failed\", \"cancelled\"]);\nexport type AssignmentTerminal = typeof AssignmentTerminal.Type;\n\n/** A reusable child Thread, correlated with its declaration. This value grants no authority. */\nexport const WorkerRef = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n delegationId: DelegationId,\n targetAgentId: AgentId,\n threadId: ThreadId,\n});\n\nexport type WorkerRef = typeof WorkerRef.Type;\n\n/** A continuing worker identity and retained first delivery, never an execution handle. */\nexport const WorkerStarted = Schema.Struct({\n worker: WorkerRef,\n delivery: MessageStatus,\n}).check(\n Schema.makeFilter(\n ({ worker, delivery }) =>\n delivery.receipt === null || worker.threadId === delivery.receipt.threadId,\n ),\n);\n\nexport type WorkerStarted = typeof WorkerStarted.Type;\n\n/** Stable owner command. Reusing its key for a different worker conflicts. */\nexport const WorkerStop = Schema.Struct({ worker: WorkerRef, idempotencyKey: IdempotencyKey });\nexport type WorkerStop = typeof WorkerStop.Type;\n\n/** The inbox is sealed and active execution has released ownership. External actions are not undone. */\nexport const WorkerStopped = WorkerStop;\nexport type WorkerStopped = typeof WorkerStopped.Type;\n\n/** A host-authorized Run allowance is independent of the immutable delegation lineage. */\nexport const WorkerBudgetScope = Schema.Literals([\"source-subtree\", \"worker-run\"]);\nexport type WorkerBudgetScope = typeof WorkerBudgetScope.Type;\n\n/** Host-bound caller metadata. Programmatic calls never fabricate Run or Tool Call identities. */\nexport const WorkerSource = Schema.Union([\n Schema.Struct({\n _tag: Schema.Literal(\"tool\"),\n agentId: AgentId,\n threadId: ThreadId,\n runId: RunId,\n toolCallId: ToolCallId,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"programmatic\"),\n agentId: AgentId,\n threadId: ThreadId,\n }),\n]);\n\nexport type WorkerSource = typeof WorkerSource.Type;\n\n/** The caller's effective policy and root-relative depth, resolved by its host. */\nexport const WorkerContext = Schema.Struct({\n source: WorkerSource,\n policy: AgentPolicy,\n depth: Schema.Natural,\n grant: Schema.optionalKey(SubagentGrant),\n});\n\nexport type WorkerContext = typeof WorkerContext.Type;\n\n/** Admission identity is distinct from canonical input application. */\nexport const WorkerInput = Schema.Struct({ receipt: Receipt, messageId: IdempotencyKey });\nexport type WorkerInput = typeof WorkerInput.Type;\n\nexport const WorkerAppliedInput = Schema.Struct({\n ...WorkerInput.fields,\n runId: RunId,\n sequence: Schema.Natural,\n});\n\n/** A Run outcome is not assignment completion. Interpret only a Definition's disposition. */\nexport const WorkerRun = Schema.Struct({\n runId: RunId,\n hostReceipt: Receipt,\n outcome: Schema.NullOr(Schema.Literals([\"completed\", \"failed\", \"aborted\"])),\n disposition: Schema.NullOr(Schema.Json),\n});\n\n/** Bounded durable listing data; a latest Receipt never substitutes for a requested Receipt. */\nexport const WorkerSummary = Schema.Struct({\n worker: WorkerRef,\n latestReceipt: Schema.NullOr(Receipt),\n /** Unknown work awaits reconciliation and is not progressing. stopping/stopped identify\n * an owner-issued worker stop, never an ordinary Receipt abort. */\n state: Schema.Literals([\n \"starting\",\n \"active\",\n \"unknown\",\n \"idle\",\n \"stopping\",\n \"stopped\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n ]),\n acceptedInput: Schema.NullOr(WorkerInput),\n appliedInput: Schema.NullOr(WorkerAppliedInput),\n run: Schema.NullOr(WorkerRun),\n /** One retained unadmitted input, if any; its state is independent of destination execution. */\n pendingDelivery: Schema.NullOr(MessageStatus),\n /** Consistent destination facts; pending delivery has its own source-owned version. */\n watermark: Schema.Struct({\n canonicalSequence: Schema.Natural,\n acceptedQueueSequence: Schema.Natural,\n pendingDeliveryVersion: Schema.NullOr(Schema.Natural),\n }),\n});\n\nexport type WorkerSummary = typeof WorkerSummary.Type;\n\nexport const WorkerPage = Schema.Struct({\n items: Schema.Array(WorkerSummary).check(Schema.isMaxLength(100)),\n next: Schema.NullOr(ThreadId),\n});\n\nexport type WorkerPage = typeof WorkerPage.Type;\n\n/** Authorized canonical history, encoded independently of storage-adapter representations. */\nexport const WorkerHistoryEntry = Schema.Struct({\n sequence: Schema.Natural.check(Schema.isGreaterThan(0)),\n recordId: Schema.NonEmptyString.check(Schema.isMaxLength(1_024)),\n record: Schema.Json,\n});\n\nexport type WorkerHistoryEntry = typeof WorkerHistoryEntry.Type;\n\n/**\n * Closed host-boundary failures. Original causes stay private and survive diagnostic transport.\n * Retained delivery states are successful MessageStatus values, including pending and refused.\n * After a storage failure, keep the same idempotency key and parameters when reconciling.\n */\nexport class WorkerError extends Schema.TaggedError<WorkerError>()(\"WorkerError\", {\n cause: Schema.optionalKey(FailureDiagnostic.Value),\n stack: Schema.optionalKey(Schema.String),\n /** Concurrency pressure may clear without changing the request. */\n retryable: Schema.optionalKey(Schema.Literal(true)),\n operation: Schema.Literals([\n \"context\",\n \"start\",\n \"followUp\",\n \"inspect\",\n \"observe\",\n \"await\",\n \"list\",\n \"cancel\",\n \"stop\",\n ]),\n reason: Schema.Literals([\n \"denied\",\n \"declaration-unavailable\",\n \"worker-mismatch\",\n \"receipt-mismatch\",\n \"message-mismatch\",\n \"idempotency-conflict\",\n \"capacity\",\n \"not-found\",\n // Decode earlier failures without emitting them for retained deliveries.\n \"delivery-pending\",\n \"storage\",\n \"corrupt\",\n \"unavailable\",\n ]),\n}) {}\n\nexport { WorkerOperationTool } from \"./SubagentContract.ts\";\n\n/** One projected canonical Run outcome. Joined receipts share this identity. */\nexport const WorkerReport = <Success extends Schema.Top>(success: Success) => {\n const identity = {\n _tag: Schema.Literal(\"Settled\"),\n worker: WorkerRef,\n receipt: Receipt,\n runId: RunId,\n settlementId: SettlementId,\n };\n\n return Schema.Union([\n // Union preserves the Success codec while making the result field required.\n Schema.Struct({\n ...identity,\n outcome: Schema.Literal(\"completed\"),\n result: Schema.Union([success]),\n }),\n Schema.Struct({\n ...identity,\n outcome: Schema.Literals([\"failed\", \"aborted\"]),\n failure: SubagentExecutionFailure,\n }),\n ]);\n};\n\nexport type WorkerReport<Success extends Schema.Top> = ReturnType<\n typeof WorkerReport<Success>\n>[\"Type\"];\n\n/** Framework message stored separately from the parent's application input. */\nexport const WorkerCompletion = Schema.Struct({\n _tag: Schema.Literal(\"WorkerCompletion\"),\n budgetExhausted: Schema.Boolean,\n schemaVersion: Schema.Literal(1),\n report: WorkerReport(Schema.Json),\n}).check(Schema.makeFilter(({ report }) => report.worker.threadId === report.receipt.threadId));\n\nexport type WorkerCompletion = typeof WorkerCompletion.Type;\n\n/** Source-worker intermediate output, kept separate from application input. */\nexport const WorkerUpdate = Schema.Struct({\n _tag: Schema.Literal(\"WorkerUpdate\"),\n schemaVersion: Schema.Literal(1),\n worker: WorkerRef,\n update: Update,\n}).check(\n Schema.makeFilter(\n ({ worker, update }) =>\n worker.threadId === update.threadId && worker.targetAgentId === update.agentId,\n ),\n);\n\nexport type WorkerUpdate = typeof WorkerUpdate.Type;\nexport const FrameworkMessage = Schema.Union([WorkerCompletion, WorkerUpdate]);\nexport type FrameworkMessage = typeof FrameworkMessage.Type;\n"],"mappings":";;;;;;;;;;AAMA,MAAa,aAAa,OAAO,OAAO;CAAE,eAAe;CAAU,WAAW;AAAe,CAAC;AAG9F,MAAM,SAAS,OAAO,eAAe,MAAM,OAAO,YAAY,GAAG,CAAC;AAClE,MAAM,WAAW,EAAE,SAAS,WAAW;;;;;;;AAQvC,MAAa,gBAAgB,OAAO,MAAM;CACxC,OAAO,OAAO;EACZ,GAAG;EACH,QAAQ,OAAO,QAAQ,SAAS;EAChC,SAAS,OAAO;EAChB,YAAY,OAAO;EACnB,QAAQ,OAAO,OAAO,MAAM;CAC9B,CAAC;CACD,OAAO,OAAO;EACZ,GAAG;EACH,QAAQ,OAAO,QAAQ,UAAU;EACjC,SAAS;EACT,YAAY,OAAO;EACnB,QAAQ,OAAO,OAAO,MAAM;CAC9B,CAAC;CACD,OAAO,OAAO;EACZ,GAAG;EACH,QAAQ,OAAO,QAAQ,WAAW;EAClC,SAAS;EACT,YAAY,OAAO,OAAO;GACxB,cAAc;GACd,SAAS,OAAO,SAAS;IAAC;IAAa;IAAU;GAAS,CAAC;EAC7D,CAAC;EACD,QAAQ,OAAO;CACjB,CAAC;CACD,OAAO,OAAO;EACZ,GAAG;EACH,QAAQ,OAAO,QAAQ,SAAS;EAChC,SAAS,OAAO;EAChB,YAAY,OAAO;EACnB,QAAQ;CACV,CAAC;CACD,OAAO,OAAO;EACZ,GAAG;EACH,QAAQ,OAAO,QAAQ,QAAQ;EAC/B,SAAS,OAAO,OAAO,OAAO;EAC9B,YAAY,OAAO;EACnB,QAAQ;CACV,CAAC;AACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CD,MAAa,wBAAwB,OAAO,SAAS,CAAC,aAAa,SAAS,CAAC;;AAI7E,MAAa,qBAAqB,OAAO,SAAS;CAAC;CAAa;CAAU;AAAW,CAAC;;AAItF,MAAa,YAAY,OAAO,OAAO;CACrC,eAAe,OAAO,QAAQ,CAAC;CAC/B,cAAc;CACd,eAAe;CACf,UAAU;AACZ,CAAC;;AAKD,MAAa,gBAAgB,OAAO,OAAO;CACzC,QAAQ;CACR,UAAU;AACZ,CAAC,CAAC,CAAC,MACD,OAAO,YACJ,EAAE,QAAQ,eACT,SAAS,YAAY,QAAQ,OAAO,aAAa,SAAS,QAAQ,QACtE,CACF;;AAKA,MAAa,aAAa,OAAO,OAAO;CAAE,QAAQ;CAAW,gBAAgB;AAAe,CAAC;;AAI7F,MAAa,gBAAgB;;AAI7B,MAAa,oBAAoB,OAAO,SAAS,CAAC,kBAAkB,YAAY,CAAC;;AAIjF,MAAa,eAAe,OAAO,MAAM,CACvC,OAAO,OAAO;CACZ,MAAM,OAAO,QAAQ,MAAM;CAC3B,SAAS;CACT,UAAU;CACV,OAAO;CACP,YAAY;AACd,CAAC,GACD,OAAO,OAAO;CACZ,MAAM,OAAO,QAAQ,cAAc;CACnC,SAAS;CACT,UAAU;AACZ,CAAC,CACH,CAAC;;AAKD,MAAa,gBAAgB,OAAO,OAAO;CACzC,QAAQ;CACR,QAAQ;CACR,OAAO,OAAO;CACd,OAAO,OAAO,YAAY,aAAa;AACzC,CAAC;;AAKD,MAAa,cAAc,OAAO,OAAO;CAAE,SAAS;CAAS,WAAW;AAAe,CAAC;AAGxF,MAAa,qBAAqB,OAAO,OAAO;CAC9C,GAAG,YAAY;CACf,OAAO;CACP,UAAU,OAAO;AACnB,CAAC;;AAGD,MAAa,YAAY,OAAO,OAAO;CACrC,OAAO;CACP,aAAa;CACb,SAAS,OAAO,OAAO,OAAO,SAAS;EAAC;EAAa;EAAU;CAAS,CAAC,CAAC;CAC1E,aAAa,OAAO,OAAO,OAAO,IAAI;AACxC,CAAC;;AAGD,MAAa,gBAAgB,OAAO,OAAO;CACzC,QAAQ;CACR,eAAe,OAAO,OAAO,OAAO;;;CAGpC,OAAO,OAAO,SAAS;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,eAAe,OAAO,OAAO,WAAW;CACxC,cAAc,OAAO,OAAO,kBAAkB;CAC9C,KAAK,OAAO,OAAO,SAAS;;CAE5B,iBAAiB,OAAO,OAAO,aAAa;;CAE5C,WAAW,OAAO,OAAO;EACvB,mBAAmB,OAAO;EAC1B,uBAAuB,OAAO;EAC9B,wBAAwB,OAAO,OAAO,OAAO,OAAO;CACtD,CAAC;AACH,CAAC;AAID,MAAa,aAAa,OAAO,OAAO;CACtC,OAAO,OAAO,MAAM,aAAa,CAAC,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC;CAChE,MAAM,OAAO,OAAO,QAAQ;AAC9B,CAAC;;AAKD,MAAa,qBAAqB,OAAO,OAAO;CAC9C,UAAU,OAAO,QAAQ,MAAM,OAAO,cAAc,CAAC,CAAC;CACtD,UAAU,OAAO,eAAe,MAAM,OAAO,YAAY,IAAK,CAAC;CAC/D,QAAQ,OAAO;AACjB,CAAC;;;;;;AASD,IAAa,cAAb,cAAiC,OAAO,YAAyB,CAAC,CAAC,eAAe;CAChF,OAAO,OAAO,YAAYA,KAAuB;CACjD,OAAO,OAAO,YAAY,OAAO,MAAM;;CAEvC,WAAW,OAAO,YAAY,OAAO,QAAQ,IAAI,CAAC;CAClD,WAAW,OAAO,SAAS;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,QAAQ,OAAO,SAAS;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;CACF,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;;AAKJ,MAAa,gBAA4C,YAAqB;CAC5E,MAAM,WAAW;EACf,MAAM,OAAO,QAAQ,SAAS;EAC9B,QAAQ;EACR,SAAS;EACT,OAAO;EACP,cAAc;CAChB;CAEA,OAAO,OAAO,MAAM,CAElB,OAAO,OAAO;EACZ,GAAG;EACH,SAAS,OAAO,QAAQ,WAAW;EACnC,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC;CAChC,CAAC,GACD,OAAO,OAAO;EACZ,GAAG;EACH,SAAS,OAAO,SAAS,CAAC,UAAU,SAAS,CAAC;EAC9C,SAAS;CACX,CAAC,CACH,CAAC;AACH;;AAOA,MAAa,mBAAmB,OAAO,OAAO;CAC5C,MAAM,OAAO,QAAQ,kBAAkB;CACvC,iBAAiB,OAAO;CACxB,eAAe,OAAO,QAAQ,CAAC;CAC/B,QAAQ,aAAa,OAAO,IAAI;AAClC,CAAC,CAAC,CAAC,MAAM,OAAO,YAAY,EAAE,aAAa,OAAO,OAAO,aAAa,OAAO,QAAQ,QAAQ,CAAC;;AAK9F,MAAa,eAAe,OAAO,OAAO;CACxC,MAAM,OAAO,QAAQ,cAAc;CACnC,eAAe,OAAO,QAAQ,CAAC;CAC/B,QAAQ;CACR,QAAQ;AACV,CAAC,CAAC,CAAC,MACD,OAAO,YACJ,EAAE,QAAQ,aACT,OAAO,aAAa,OAAO,YAAY,OAAO,kBAAkB,OAAO,OAC3E,CACF;AAGA,MAAa,mBAAmB,OAAO,MAAM,CAAC,kBAAkB,YAAY,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { c as WorkerError } from "./Worker-DZjdMjZn.mjs";
3
- import { It as WorkerOrigin, Lt as WorkerOriginRecorded, W as ProducerId, X as RecordEnvelope, Z as RecordId, c as CanonicalBatch, i as BatchId, jt as WorkerAdmission, yt as ThreadCreated } from "./Records-DzL4Kbtw.mjs";
2
+ import { c as WorkerError } from "./Worker-CtuUwYOK.mjs";
3
+ import { It as WorkerOrigin, Lt as WorkerOriginRecorded, W as ProducerId, X as RecordEnvelope, Z as RecordId, c as CanonicalBatch, i as BatchId, jt as WorkerAdmission, yt as ThreadCreated } from "./Records-CZRedCE7.mjs";
4
4
  import { AdmissionConflict, AdmissionPolicyError, AdmissionRequest, LedgerError, MarkReadyRequest, SubmissionLedger } from "./durable/SubmissionLedger.mjs";
5
- import { o as definitionDigestsEqual } from "./agent-registration-a6QYaG3h.mjs";
6
- import { X as workerOriginRecordId } from "./RunJournal-DGblbFas.mjs";
7
- import { $ as ThreadTailRequest, F as ThreadIdentityRequest, I as ThreadMaterialization, J as ThreadStore, L as ThreadNotMaterialized, X as ThreadStoreError, n as AppendRequest, t as AppendConflict } from "./ThreadStore-BC4V-mY-.mjs";
5
+ import { o as definitionDigestsEqual } from "./agent-registration-Dt57NAP6.mjs";
6
+ import { X as workerOriginRecordId } from "./RunJournal-oJLo-pjS.mjs";
7
+ import { I as ThreadIdentityRequest, L as ThreadMaterialization, R as ThreadNotMaterialized, Y as ThreadStore, Z as ThreadStoreError, et as ThreadTailRequest, n as AppendRequest, t as AppendConflict } from "./ThreadStore-D2rqtt7k.mjs";
8
8
  import { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from "./durable/DurableFailpoint.mjs";
9
9
  import { WakeScheduler } from "./durable/WakeScheduler.mjs";
10
10
  import { Context, DateTime, Effect, Schema } from "effect";
@@ -158,4 +158,4 @@ const WorkerAdmissionPort = Context.Reference("@effect-agent/thread/WorkerAdmiss
158
158
  //#endregion
159
159
  export { admitWorker as a, threadCreatedBatchId as c, WorkerAdmission_exports as i, threadCreatedRecordId as l, WorkerAdmissionPort as n, ensureThreadCreated as o, WorkerAdmissionRequest as r, ensureWorkerOrigin as s, WorkerAdmissionFailure as t };
160
160
 
161
- //# sourceMappingURL=WorkerAdmission-C47Vy_cK.mjs.map
161
+ //# sourceMappingURL=WorkerAdmission-CtX1HRkm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerAdmission-C47Vy_cK.mjs","names":[],"sources":["../src/durable/internal/thread-initialization.ts","../src/durable/WorkerAdmission.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { WorkerError } from \"../../core/Worker.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n RecordEnvelope,\n RecordId,\n ThreadCreated,\n WorkerOrigin,\n WorkerOriginRecorded,\n type DefinitionDigests,\n type DeploymentId,\n type ProducerId,\n} from \"../Records.ts\";\nimport { workerOriginRecordId } from \"../RunJournal.ts\";\nimport type { OwnershipLost } from \"../SubmissionLedger.ts\";\nimport type { AppendConflict, ThreadNotMaterialized, ThreadStoreError } from \"../ThreadStore.ts\";\nimport {\n AppendRequest,\n ThreadIdentityRequest,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport { definitionDigestsEqual } from \"./agent-registration.ts\";\n\ninterface InitializationConfig {\n readonly producerId: ProducerId;\n readonly deploymentId: DeploymentId;\n}\n\n/** Stable identities retained across admission retries and recovery. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n Schema.decodeSync(BatchId)(`thread-created:${threadId}`);\n\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n Schema.decodeSync(RecordId)(`thread-created:${threadId}`);\n\n/**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. Concurrent admissions\n * re-read this invariant after a tail conflict before considering initialization complete.\n */\nexport const ensureThreadCreated = Effect.fnUntraced(\n function* (\n config: InitializationConfig,\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | OwnershipLost,\n ThreadStore | WakeScheduler\n > {\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* Effect.map(DateTime.now, (createdAt) =>\n RecordEnvelope.make({\n recordId: threadCreatedRecordId(threadId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload: ThreadCreated.make({ agentId, definitions }),\n }),\n );\n\n yield* store\n .append(\n AppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\",\n }),\n ),\n);\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\n\nexport const ensureWorkerOrigin = Effect.fnUntraced(\n function* (config: InitializationConfig, origin: WorkerOrigin) {\n const store = yield* ThreadStore;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* store.readIdentity(\n ThreadIdentityRequest.make({ threadId: origin.worker.threadId }),\n );\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin))\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n const id = workerOriginRecordId(origin.worker.threadId);\n\n yield* failpoint.hit(\"worker:before-origin-append\");\n\n const appended = yield* store\n .append(\n AppendRequest.make({\n threadId: origin.worker.threadId,\n expectedTailSequence: current.tailSequence,\n\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: config.producerId,\n records: [\n RecordEnvelope.make({\n recordId: id,\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(origin.createdAtMillis),\n deploymentId: config.deploymentId,\n payload: WorkerOriginRecorded.make({ origin }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n );\n\n if (appended) {\n yield* failpoint.hit(\"worker:after-origin-append\");\n\n return;\n }\n }\n\n return yield* WorkerError.make({ operation: \"start\", reason: \"storage\" });\n },\n Effect.mapError((cause) =>\n cause._tag === \"WorkerError\"\n ? cause\n : WorkerError.make({ operation: \"start\", reason: \"storage\", cause }),\n ),\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from \"./DurableFailpoint.ts\";\nimport { ensureThreadCreated, ensureWorkerOrigin } from \"./internal/thread-initialization.ts\";\nimport { ProducerId, WorkerAdmission } from \"./Records.ts\";\nimport {\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n LedgerError,\n MarkReadyRequest,\n SubmissionLedger,\n} from \"./SubmissionLedger.ts\";\nimport {\n AppendConflict,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n/**\n * Storage admission after source authorization, input validation and capacity reservation.\n * This is an internal host port, not an authorization entrypoint. Hosts route the whole\n * operation to the destination owner and enroll recovery before executing it.\n */\nexport class WorkerAdmissionRequest extends Schema.Class<WorkerAdmissionRequest>(\n \"@effect-agent/thread/WorkerAdmissionRequest\",\n)({\n ...AdmissionRequest.fields,\n workerAdmission: WorkerAdmission,\n producerId: ProducerId,\n}) {}\n\nexport const WorkerAdmissionFailure = Schema.Union([\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n]);\n\n/** Local implementation shared by every host; retries finish the same admitted row. */\nexport const admitWorker = Effect.fnUntraced(function* (request: WorkerAdmissionRequest) {\n const origin = request.workerAdmission.origin;\n\n if (\n origin.worker.threadId !== request.threadId ||\n origin.worker.targetAgentId !== request.agentId ||\n request.parentLinkage !== undefined\n )\n return yield* LedgerError.make({\n operation: \"admit worker\",\n message: \"Worker admission does not belong to the destination Thread\",\n });\n\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const admitted = yield* ledger.admit(AdmissionRequest.make(request));\n\n yield* failpoint.hit(\"submit:after-admit\");\n if (admitted.replayed && admitted.state !== \"admitted\") return admitted;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: request.threadId,\n }),\n );\n\n const config = {\n producerId: request.producerId,\n deploymentId: request.deploymentId,\n };\n\n yield* ensureThreadCreated(config, request.threadId, request.agentId, request.agentDigests);\n yield* ensureWorkerOrigin(config, origin).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n yield* failpoint.hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(request.threadId);\n\n return admitted;\n});\n\n/** Placement adapter for the composite operation; local hosts use the same implementation. */\nexport const WorkerAdmissionPort = Context.Reference<{ readonly admit: typeof admitWorker }>(\n \"@effect-agent/thread/WorkerAdmissionPort\",\n { defaultValue: () => ({ admit: admitWorker }) },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"WorkerAdmission-CtX1HRkm.mjs","names":[],"sources":["../src/durable/internal/thread-initialization.ts","../src/durable/WorkerAdmission.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { WorkerError } from \"../../core/Worker.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n RecordEnvelope,\n RecordId,\n ThreadCreated,\n WorkerOrigin,\n WorkerOriginRecorded,\n type DefinitionDigests,\n type DeploymentId,\n type ProducerId,\n} from \"../Records.ts\";\nimport { workerOriginRecordId } from \"../RunJournal.ts\";\nimport type { OwnershipLost } from \"../SubmissionLedger.ts\";\nimport type { AppendConflict, ThreadNotMaterialized, ThreadStoreError } from \"../ThreadStore.ts\";\nimport {\n AppendRequest,\n ThreadIdentityRequest,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport { definitionDigestsEqual } from \"./agent-registration.ts\";\n\ninterface InitializationConfig {\n readonly producerId: ProducerId;\n readonly deploymentId: DeploymentId;\n}\n\n/** Stable identities retained across admission retries and recovery. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n Schema.decodeSync(BatchId)(`thread-created:${threadId}`);\n\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n Schema.decodeSync(RecordId)(`thread-created:${threadId}`);\n\n/**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. Concurrent admissions\n * re-read this invariant after a tail conflict before considering initialization complete.\n */\nexport const ensureThreadCreated = Effect.fnUntraced(\n function* (\n config: InitializationConfig,\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | OwnershipLost,\n ThreadStore | WakeScheduler\n > {\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* Effect.map(DateTime.now, (createdAt) =>\n RecordEnvelope.make({\n recordId: threadCreatedRecordId(threadId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload: ThreadCreated.make({ agentId, definitions }),\n }),\n );\n\n yield* store\n .append(\n AppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\",\n }),\n ),\n);\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\n\nexport const ensureWorkerOrigin = Effect.fnUntraced(\n function* (config: InitializationConfig, origin: WorkerOrigin) {\n const store = yield* ThreadStore;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* store.readIdentity(\n ThreadIdentityRequest.make({ threadId: origin.worker.threadId }),\n );\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin))\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n const id = workerOriginRecordId(origin.worker.threadId);\n\n yield* failpoint.hit(\"worker:before-origin-append\");\n\n const appended = yield* store\n .append(\n AppendRequest.make({\n threadId: origin.worker.threadId,\n expectedTailSequence: current.tailSequence,\n\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: config.producerId,\n records: [\n RecordEnvelope.make({\n recordId: id,\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(origin.createdAtMillis),\n deploymentId: config.deploymentId,\n payload: WorkerOriginRecorded.make({ origin }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n );\n\n if (appended) {\n yield* failpoint.hit(\"worker:after-origin-append\");\n\n return;\n }\n }\n\n return yield* WorkerError.make({ operation: \"start\", reason: \"storage\" });\n },\n Effect.mapError((cause) =>\n cause._tag === \"WorkerError\"\n ? cause\n : WorkerError.make({ operation: \"start\", reason: \"storage\", cause }),\n ),\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from \"./DurableFailpoint.ts\";\nimport { ensureThreadCreated, ensureWorkerOrigin } from \"./internal/thread-initialization.ts\";\nimport { ProducerId, WorkerAdmission } from \"./Records.ts\";\nimport {\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n LedgerError,\n MarkReadyRequest,\n SubmissionLedger,\n} from \"./SubmissionLedger.ts\";\nimport {\n AppendConflict,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n/**\n * Storage admission after source authorization, input validation and capacity reservation.\n * This is an internal host port, not an authorization entrypoint. Hosts route the whole\n * operation to the destination owner and enroll recovery before executing it.\n */\nexport class WorkerAdmissionRequest extends Schema.Class<WorkerAdmissionRequest>(\n \"@effect-agent/thread/WorkerAdmissionRequest\",\n)({\n ...AdmissionRequest.fields,\n workerAdmission: WorkerAdmission,\n producerId: ProducerId,\n}) {}\n\nexport const WorkerAdmissionFailure = Schema.Union([\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n DurableRuntimeFailpointError,\n]);\n\n/** Local implementation shared by every host; retries finish the same admitted row. */\nexport const admitWorker = Effect.fnUntraced(function* (request: WorkerAdmissionRequest) {\n const origin = request.workerAdmission.origin;\n\n if (\n origin.worker.threadId !== request.threadId ||\n origin.worker.targetAgentId !== request.agentId ||\n request.parentLinkage !== undefined\n )\n return yield* LedgerError.make({\n operation: \"admit worker\",\n message: \"Worker admission does not belong to the destination Thread\",\n });\n\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const admitted = yield* ledger.admit(AdmissionRequest.make(request));\n\n yield* failpoint.hit(\"submit:after-admit\");\n if (admitted.replayed && admitted.state !== \"admitted\") return admitted;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: request.threadId,\n }),\n );\n\n const config = {\n producerId: request.producerId,\n deploymentId: request.deploymentId,\n };\n\n yield* ensureThreadCreated(config, request.threadId, request.agentId, request.agentDigests);\n yield* ensureWorkerOrigin(config, origin).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n yield* failpoint.hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(request.threadId);\n\n return admitted;\n});\n\n/** Placement adapter for the composite operation; local hosts use the same implementation. */\nexport const WorkerAdmissionPort = Context.Reference<{ readonly admit: typeof admitWorker }>(\n \"@effect-agent/thread/WorkerAdmissionPort\",\n { defaultValue: () => ({ admit: admitWorker }) },\n);\n"],"mappings":"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"}