effect-agent 0.1.0-beta.113 → 0.1.0-beta.115

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 (137) hide show
  1. package/dist/Agent-1DMSO_Fl.mjs.map +1 -1
  2. package/dist/{Agent-DriBcXBN.d.mts → Agent-D9cXqfF3.d.mts} +9 -2
  3. package/dist/{AgentRuntime-DLwPoEVH.mjs → AgentRuntime-Cp1hAb-W.mjs} +8 -4
  4. package/dist/AgentRuntime-Cp1hAb-W.mjs.map +1 -0
  5. package/dist/{AgentRuntime-CWkHuzyt.d.mts → AgentRuntime-DyZv8uu2.d.mts} +6 -6
  6. package/dist/{DurableAgentRuntime-BIrgxwRl.mjs → DurableAgentRuntime-tNrkJZNo.mjs} +254 -162
  7. package/dist/DurableAgentRuntime-tNrkJZNo.mjs.map +1 -0
  8. package/dist/{DurableFailpoint-mx3-nsxU.d.mts → DurableFailpoint-Cnr3wx1L.d.mts} +3 -3
  9. package/dist/{EventSource-ARs56eBq.d.mts → EventSource-DPRdlvhV.d.mts} +3 -3
  10. package/dist/{Messaging-DaZDlBqh.d.mts → Messaging-JYYN3oYS.d.mts} +3 -3
  11. package/dist/{MessagingHost-e1Sbzfao.d.mts → MessagingHost-CqzpxbGz.d.mts} +3 -3
  12. package/dist/{MessagingHost-D89X7ma8.mjs → MessagingHost-DfsbMPvq.mjs} +2 -2
  13. package/dist/{MessagingHost-D89X7ma8.mjs.map → MessagingHost-DfsbMPvq.mjs.map} +1 -1
  14. package/dist/{Output-CAFJTAbP.d.mts → Output-V-6YL1_Z.d.mts} +2 -2
  15. package/dist/{PreparedInputAdmission-_WYg-D0f.d.mts → PreparedInputAdmission-DqQUjA9k.d.mts} +4 -4
  16. package/dist/{Records-BtxMy8xD.d.mts → Records-Byeb70tt.d.mts} +89 -31
  17. package/dist/{RunOptions-BoESJrxw.d.mts → RunOptions-CSBsSj0X.d.mts} +3 -3
  18. package/dist/{Schedule-DGPyXBzK.d.mts → Schedule-krSnBcbU.d.mts} +2 -2
  19. package/dist/{Subagent-D9eYdGTl.mjs → Subagent-Di8EEjWZ.mjs} +67 -105
  20. package/dist/Subagent-Di8EEjWZ.mjs.map +1 -0
  21. package/dist/{Subagent-F72tuaxy.d.mts → Subagent-gw9KD6eb.d.mts} +310 -35
  22. package/dist/{SubagentHost-CmiNTOBZ.d.mts → SubagentHost-P9zB_TfV.d.mts} +24 -18
  23. package/dist/{Subscription-B9VszlF9.d.mts → Subscription-Xnwd42Sm.d.mts} +6 -3
  24. package/dist/{SubscriptionInput-BJWZqCWP.d.mts → SubscriptionInput-CqtJ58vl.d.mts} +3 -3
  25. package/dist/{Worker-T_3RbaKc.mjs → Worker-CfwzMZEK.mjs} +66 -5
  26. package/dist/Worker-CfwzMZEK.mjs.map +1 -0
  27. package/dist/{Worker-Du9dhVnp.d.mts → Worker-fwWkBg12.d.mts} +199 -6
  28. package/dist/{agent-registration-B5CI-Ygk.mjs → agent-registration-CKNsrpwo.mjs} +7 -7
  29. package/dist/agent-registration-CKNsrpwo.mjs.map +1 -0
  30. package/dist/capabilities/Commands.d.mts +1 -1
  31. package/dist/capabilities/Messaging.d.mts +1 -1
  32. package/dist/capabilities/Messaging.mjs +2 -2
  33. package/dist/capabilities/RunHooks.d.mts +1 -1
  34. package/dist/capabilities/Subagent.d.mts +3 -3
  35. package/dist/capabilities/Subagent.mjs +3 -3
  36. package/dist/core/Agent.d.mts +1 -1
  37. package/dist/core/Worker.d.mts +2 -2
  38. package/dist/core/Worker.mjs +2 -2
  39. package/dist/durable/ActivityStore.d.mts +1 -1
  40. package/dist/durable/Admin.d.mts +1 -1
  41. package/dist/durable/AgentRegistration.d.mts +1 -1
  42. package/dist/durable/AgentRegistration.mjs +1 -1
  43. package/dist/durable/Certification.d.mts +2 -2
  44. package/dist/durable/CommittedActivity.d.mts +1 -1
  45. package/dist/durable/Digest.d.mts +1 -1
  46. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  47. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  48. package/dist/durable/DurableFailpoint.d.mts +1 -1
  49. package/dist/durable/DurableFailpoint.mjs +4 -0
  50. package/dist/durable/DurableFailpoint.mjs.map +1 -1
  51. package/dist/durable/DurableFailpointTestControl.d.mts +1 -1
  52. package/dist/durable/EventSource.d.mts +1 -1
  53. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  54. package/dist/durable/MessageDelivery.d.mts +20 -3
  55. package/dist/durable/MessageDelivery.mjs +12 -4
  56. package/dist/durable/MessageDelivery.mjs.map +1 -1
  57. package/dist/durable/MessageDeliveryStoreConformance.d.mts +41 -39
  58. package/dist/durable/MessageDeliveryStoreConformance.mjs +1 -1
  59. package/dist/durable/PersistentHistory.d.mts +1 -1
  60. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  61. package/dist/durable/Records.d.mts +2 -2
  62. package/dist/durable/Records.mjs +12 -5
  63. package/dist/durable/Records.mjs.map +1 -1
  64. package/dist/durable/Recovery.d.mts +1 -1
  65. package/dist/durable/RunJournal.d.mts +1 -1
  66. package/dist/durable/Schedule.d.mts +1 -1
  67. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  68. package/dist/durable/ScheduleTransition.d.mts +1 -1
  69. package/dist/durable/Scheduling.d.mts +2 -2
  70. package/dist/durable/SqlMessageDeliveryStore.mjs +7 -1
  71. package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -1
  72. package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
  73. package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
  74. package/dist/durable/SqlThreadNativeReads.d.mts +5 -1
  75. package/dist/durable/SqlThreadNativeReads.mjs +6 -0
  76. package/dist/durable/SqlThreadNativeReads.mjs.map +1 -1
  77. package/dist/durable/SubmissionLedger.d.mts +2 -2
  78. package/dist/durable/SubmissionLedger.mjs +34 -4
  79. package/dist/durable/SubmissionLedger.mjs.map +1 -1
  80. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  81. package/dist/durable/SubmissionLedgerConformance.mjs +899 -706
  82. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -1
  83. package/dist/durable/SubmissionStatus.d.mts +1 -1
  84. package/dist/durable/Subscription.d.mts +1 -1
  85. package/dist/durable/Subscription.mjs +1 -1
  86. package/dist/durable/SubscriptionInput.d.mts +1 -1
  87. package/dist/durable/SubscriptionInput.mjs +1 -1
  88. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  89. package/dist/durable/SubscriptionTools.d.mts +3 -3
  90. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  91. package/dist/durable/Subscriptions.d.mts +5 -5
  92. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  93. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  94. package/dist/durable/ThreadInvariants.d.mts +1 -1
  95. package/dist/durable/ThreadProjection.d.mts +1 -1
  96. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  97. package/dist/durable/ThreadStore.d.mts +1 -1
  98. package/dist/durable/ThreadStore.mjs +5 -0
  99. package/dist/durable/ThreadStore.mjs.map +1 -1
  100. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  101. package/dist/durable/WorkerHost.d.mts +3 -3
  102. package/dist/durable/WorkerHost.mjs +1 -1
  103. package/dist/engine/AgentRuntime.d.mts +1 -1
  104. package/dist/engine/AgentRuntime.mjs +1 -1
  105. package/dist/engine/MessagingHost.d.mts +1 -1
  106. package/dist/engine/MessagingHost.mjs +1 -1
  107. package/dist/engine/Output.d.mts +1 -1
  108. package/dist/engine/RunOptions.d.mts +1 -1
  109. package/dist/engine/SubagentHost.d.mts +2 -2
  110. package/dist/engine/SubagentHost.mjs +5 -1
  111. package/dist/engine/SubagentHost.mjs.map +1 -1
  112. package/dist/index.d.mts +16 -16
  113. package/dist/index.mjs +5 -5
  114. package/package.json +1 -1
  115. package/src/capabilities/Subagent.ts +2 -1
  116. package/src/capabilities/internal/subagent-background.ts +86 -57
  117. package/src/capabilities/internal/subagent-reporting.ts +3 -128
  118. package/src/core/Agent.ts +8 -1
  119. package/src/core/Worker.ts +58 -2
  120. package/src/durable/DurableAgentRuntime.ts +2 -0
  121. package/src/durable/DurableFailpoint.ts +4 -0
  122. package/src/durable/MessageDelivery.ts +17 -2
  123. package/src/durable/Records.ts +12 -2
  124. package/src/durable/SqlMessageDeliveryStore.ts +15 -1
  125. package/src/durable/SqlThreadNativeReads.ts +14 -0
  126. package/src/durable/SubmissionLedger.ts +48 -1
  127. package/src/durable/SubmissionLedgerConformance.ts +260 -42
  128. package/src/durable/ThreadStore.ts +5 -0
  129. package/src/durable/internal/agent-registration.ts +13 -48
  130. package/src/durable/internal/worker-host.ts +490 -341
  131. package/src/engine/SubagentHost.ts +37 -13
  132. package/src/engine/internal/agent-runtime.ts +17 -2
  133. package/dist/AgentRuntime-DLwPoEVH.mjs.map +0 -1
  134. package/dist/DurableAgentRuntime-BIrgxwRl.mjs.map +0 -1
  135. package/dist/Subagent-D9eYdGTl.mjs.map +0 -1
  136. package/dist/Worker-T_3RbaKc.mjs.map +0 -1
  137. package/dist/agent-registration-B5CI-Ygk.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { _ as Digest } from "../Records-BtxMy8xD.mjs";
1
+ import { _ as Digest } from "../Records-Byeb70tt.mjs";
2
2
  import { Context, Effect, Layer, Schema } from "effect";
3
3
  declare namespace ActivityStore_d_exports {
4
4
  export { ActivityBusy, ActivityClaim, ActivityClaimRequest, ActivityMutationFailpoint, ActivityMutationFailure, ActivityMutationPoint, ActivityOwnershipLost, ActivityProcessorKey, ActivityProcessorStore, ActivityProgress, ActivityStoreError, ActivityStoreFailure, ActivityWorkConflict, PreparedActivity };
@@ -1,2 +1,2 @@
1
- import { $r as RecoveryDisposition, Br as ExplainedEvidence, Gr as IntegrityCheckStatus, Hr as ExplainedUnknownCall, Jr as ObligationEntry, Kr as IntegrityReport, Qr as RECOVERY_DECISION_MEANINGS, Ur as IntegrityCheck, Vr as ExplainedSubmission, Wr as IntegrityCheckName, Xr as ObligationSeverity, Yr as ObligationReport, Zr as ObligationThresholds, ai as predictRecoveryDisposition, ei as RecoveryExplanation, ii as obligationSeverityOf, ni as RetryRefusalReason, oi as recoveryDecisionMeaning, qr as ObligationBlockedOn, ri as RetryRefused, si as renderRecoveryExplanation, ti as RetryCommand } from "../Records-BtxMy8xD.mjs";
1
+ import { $r as RECOVERY_DECISION_MEANINGS, Gr as IntegrityCheckName, Hr as ExplainedSubmission, Jr as ObligationBlockedOn, Kr as IntegrityCheckStatus, Qr as ObligationThresholds, Ur as ExplainedUnknownCall, Vr as ExplainedEvidence, Wr as IntegrityCheck, Xr as ObligationReport, Yr as ObligationEntry, Zr as ObligationSeverity, ai as obligationSeverityOf, ci as renderRecoveryExplanation, ei as RecoveryDisposition, ii as RetryRefused, ni as RetryCommand, oi as predictRecoveryDisposition, qr as IntegrityReport, ri as RetryRefusalReason, si as recoveryDecisionMeaning, ti as RecoveryExplanation } from "../Records-Byeb70tt.mjs";
2
2
  export { ExplainedEvidence, ExplainedSubmission, ExplainedUnknownCall, IntegrityCheck, IntegrityCheckName, IntegrityCheckStatus, IntegrityReport, ObligationBlockedOn, ObligationEntry, ObligationReport, ObligationSeverity, ObligationThresholds, RECOVERY_DECISION_MEANINGS, RecoveryDisposition, RecoveryExplanation, RetryCommand, RetryRefusalReason, RetryRefused, obligationSeverityOf, predictRecoveryDisposition, recoveryDecisionMeaning, renderRecoveryExplanation };
@@ -1,2 +1,2 @@
1
- import { _i as compileBindingContracts, di as BindingUnavailable, fi as DurableBindingFailure, gi as ResolvedBinding, hi as ReplayVersions, li as AgentAttemptContext, mi as ExecutableAgentBinding, pi as DurableWorkerBinding, ui as AgentRegistration, vi as compileRegistrations, yi as definitionDigestsEqual } from "../Records-BtxMy8xD.mjs";
1
+ import { _i as ResolvedBinding, bi as definitionDigestsEqual, di as AgentRegistration, fi as BindingUnavailable, gi as ReplayVersions, hi as ExecutableAgentBinding, mi as DurableWorkerBinding, pi as DurableBindingFailure, ui as AgentAttemptContext, vi as compileBindingContracts, yi as compileRegistrations } from "../Records-Byeb70tt.mjs";
2
2
  export { type AgentAttemptContext, type AgentRegistration, BindingUnavailable, type DurableBindingFailure, DurableWorkerBinding, type ExecutableAgentBinding, type ReplayVersions, type ResolvedBinding, compileBindingContracts, compileRegistrations, definitionDigestsEqual };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
- import { a as definitionDigestsEqual, i as compileRegistrations, n as DurableWorkerBinding, r as compileBindingContracts, t as BindingUnavailable } from "../agent-registration-B5CI-Ygk.mjs";
2
+ import { a as definitionDigestsEqual, i as compileRegistrations, n as DurableWorkerBinding, r as compileBindingContracts, t as BindingUnavailable } from "../agent-registration-CKNsrpwo.mjs";
3
3
  //#region src/durable/AgentRegistration.ts
4
4
  var AgentRegistration_exports = /* @__PURE__ */ __exportAll({
5
5
  BindingUnavailable: () => BindingUnavailable,
@@ -1,4 +1,4 @@
1
- import { bo as SubmissionLedger, yn as ThreadStore } from "../Records-BtxMy8xD.mjs";
1
+ import { bn as ThreadStore, xo as SubmissionLedger } from "../Records-Byeb70tt.mjs";
2
2
  import { Crypto, Effect, Schema } from "effect";
3
3
  //#region src/durable/Certification.d.ts
4
4
  declare const CertifiedAdapterIdentity_base: Schema.Class<CertifiedAdapterIdentity, Schema.Struct<{
@@ -43,7 +43,7 @@ export declare const CertificationSweepStatus: Schema.Literals<readonly ["conver
43
43
  export type CertificationSweepStatus = typeof CertificationSweepStatus.Type;
44
44
  declare const CertificationSweepResult_base: Schema.Class<CertificationSweepResult, Schema.Struct<{
45
45
  readonly scenario: Schema.Literals<readonly ["plain", "uncertain-tool", "durable-steps", "approval", "join", "delegation"]>;
46
- readonly location: Schema.Literals<readonly ["submit:after-admit", "submit:after-materialize", "claim:after-claim", "input:after-canonical-append", "run:before-start-append", "run:after-start-append", "run:before-duration-append", "run:after-duration-append", "turn:after-canonical-append", "turn:after-response-append", "turn:after-results-append", "compaction:before-canonical-append", "compaction:after-canonical-append", "checkpoint:before-save", "checkpoint:after-save", "tools:after-prepared-append", "tools:before-prepared-append", "tools:before-unavailable-append", "tools:after-unavailable-append", "policy:before-reservation-append", "policy:after-reservation-append", "step:after-step-append", "approval:after-request-append", "approval:after-suspend", "join:after-claim", "join:after-canonical-append", "resolve:after-intent", "terminalize:after-reserve", "terminalize:after-canonical-append", "abort:after-intent", "subagent:after-reserve", "subagent:after-request-append", "subagent:after-admit", "subagent:after-child-ready", "subagent:after-start-append", "subagent:after-sibling-settle", "subagent:after-suspend", "subagent:after-child-abort-intent", "subagent:before-join-append", "subagent:after-join-append", "subagent:after-release-pending", "subagent:after-release", "worker:before-source-append", "worker:after-source-append", "worker:before-origin-append", "worker:after-origin-append", "worker:before-completion-append", "worker:after-completion-append", "worker:before-subtree-append", "worker:after-subtree-append", "worker:before-report-append", "worker:after-report-append", "worker:before-report-delivery", "worker:after-report-delivery", "update:before-canonical-append", "update:after-canonical-append", "update:before-delivery-insert", "update:after-delivery-insert"]>;
46
+ readonly location: Schema.Literals<readonly ["submit:after-admit", "submit:after-materialize", "claim:after-claim", "input:after-canonical-append", "run:before-start-append", "run:after-start-append", "run:before-duration-append", "run:after-duration-append", "turn:after-canonical-append", "turn:after-response-append", "turn:after-results-append", "compaction:before-canonical-append", "compaction:after-canonical-append", "checkpoint:before-save", "checkpoint:after-save", "tools:after-prepared-append", "tools:before-prepared-append", "tools:before-unavailable-append", "tools:after-unavailable-append", "policy:before-reservation-append", "policy:after-reservation-append", "step:after-step-append", "approval:after-request-append", "approval:after-suspend", "join:after-claim", "join:after-canonical-append", "resolve:after-intent", "terminalize:after-reserve", "terminalize:after-canonical-append", "abort:after-intent", "subagent:after-reserve", "subagent:after-request-append", "subagent:after-admit", "subagent:after-child-ready", "subagent:after-start-append", "subagent:after-sibling-settle", "subagent:after-suspend", "subagent:after-child-abort-intent", "subagent:before-join-append", "subagent:after-join-append", "subagent:after-release-pending", "subagent:after-release", "worker:before-stop-append", "worker:after-stop-append", "worker:before-stop-seal", "worker:after-stop-seal", "worker:before-source-append", "worker:after-source-append", "worker:before-origin-append", "worker:after-origin-append", "worker:before-completion-append", "worker:after-completion-append", "worker:before-subtree-append", "worker:after-subtree-append", "worker:before-report-append", "worker:after-report-append", "worker:before-report-delivery", "worker:after-report-delivery", "update:before-canonical-append", "update:after-canonical-append", "update:before-delivery-insert", "update:after-delivery-insert"]>;
47
47
  /** The armed fault actually fired (one-shot) somewhere in the cell's drive or re-drive. */
48
48
  readonly failpointFired: Schema.Boolean;
49
49
  readonly status: Schema.Literals<readonly ["converged", "not-triggered", "failed"]>;
@@ -1,4 +1,4 @@
1
- import { O as PersistedJson, bi as DigestError, cn as ThreadNotMaterialized, l as CanonicalRecordEnvelope, xn as ThreadStoreError, yn as ThreadStore } from "../Records-BtxMy8xD.mjs";
1
+ import { O as PersistedJson, Sn as ThreadStoreError, bn as ThreadStore, l as CanonicalRecordEnvelope, ln as ThreadNotMaterialized, xi as DigestError } from "../Records-Byeb70tt.mjs";
2
2
  import { ActivityProcessorKey, ActivityProcessorStore, ActivityStoreFailure, PreparedActivity } from "./ActivityStore.mjs";
3
3
  import { Crypto, Effect, Schema, Scope } from "effect";
4
4
  declare namespace CommittedActivity_d_exports {
@@ -1,2 +1,2 @@
1
- import { Ci as digestCanonicalBatch, Ei as digestJson, Si as EMPTY_TAIL_DIGEST, Ti as digestDefinitions, bi as DigestError, wi as digestDefinition } from "../Records-BtxMy8xD.mjs";
1
+ import { Ci as EMPTY_TAIL_DIGEST, Di as digestJson, Ei as digestDefinitions, Ti as digestDefinition, wi as digestCanonicalBatch, xi as DigestError } from "../Records-Byeb70tt.mjs";
2
2
  export { DigestError, EMPTY_TAIL_DIGEST, digestCanonicalBatch, digestDefinition, digestDefinitions, digestJson };
@@ -1,3 +1,3 @@
1
1
  import { a as Receipt } from "../Receipt-BAHyigAF.mjs";
2
- import { At as DurableSubmitAgent, Bt as RecoverySweepResult, Ct as DurableObligationFailure, Dt as DurableRetryFailure, Et as DurableResolveFailure, Ft as DurableWorkerRequirements, Gt as threadCreatedBatchId, Ht as isolateRecovery, It as RecoveryBlocked, Kt as threadCreatedRecordId, Lt as RecoveryFailure, Mt as DurableSubmitOptions, Nt as DurableVerifyFailure, Ot as DurableRuntimeConfig, Pt as DurableWorkerFailure, Rt as RecoveryReport, St as DurableExplainFailure, Tt as DurableProgressFailure, Ut as recoveryRepairBatchId, Vt as childReservationIdFor, Wt as recoveryRepairRecordId, _t as DurableAgentRuntime, bt as DurableApprovalResolver, gt as DurableAbortFailure, jt as DurableSubmitFailure, kt as DurableRuntimeConfigOptions, wt as DurableObserveOptions, xt as DurableAwaitFailure, yt as DurableApprovalFailure, zt as RecoverySweepOptions } from "../Records-BtxMy8xD.mjs";
2
+ import { At as DurableRuntimeConfigOptions, Bt as RecoverySweepOptions, Ct as DurableExplainFailure, Dt as DurableResolveFailure, Et as DurableProgressFailure, Ft as DurableWorkerFailure, Gt as recoveryRepairRecordId, Ht as childReservationIdFor, It as DurableWorkerRequirements, Kt as threadCreatedBatchId, Lt as RecoveryBlocked, Mt as DurableSubmitFailure, Nt as DurableSubmitOptions, Ot as DurableRetryFailure, Pt as DurableVerifyFailure, Rt as RecoveryFailure, St as DurableAwaitFailure, Tt as DurableObserveOptions, Ut as isolateRecovery, Vt as RecoverySweepResult, Wt as recoveryRepairBatchId, _t as DurableAbortFailure, bt as DurableApprovalFailure, jt as DurableSubmitAgent, kt as DurableRuntimeConfig, qt as threadCreatedRecordId, vt as DurableAgentRuntime, wt as DurableObligationFailure, xt as DurableApprovalResolver, zt as RecoveryReport } from "../Records-Byeb70tt.mjs";
3
3
  export { DurableAbortFailure, DurableAgentRuntime, DurableApprovalFailure, DurableApprovalResolver, DurableAwaitFailure, DurableExplainFailure, DurableObligationFailure, DurableObserveOptions, DurableProgressFailure, DurableResolveFailure, DurableRetryFailure, DurableRuntimeConfig, DurableRuntimeConfigOptions, DurableSubmitAgent, DurableSubmitFailure, DurableSubmitOptions, DurableVerifyFailure, DurableWorkerFailure, DurableWorkerRequirements, Receipt, RecoveryBlocked, RecoveryFailure, RecoveryReport, RecoverySweepOptions, RecoverySweepResult, childReservationIdFor, isolateRecovery, recoveryRepairBatchId, recoveryRepairRecordId, threadCreatedBatchId, threadCreatedRecordId };
@@ -1,3 +1,3 @@
1
1
  import { Receipt } from "../core/Receipt.mjs";
2
- import { a as RecoveryBlocked, c as RecoverySweepResult, d as recoveryRepairBatchId, f as recoveryRepairRecordId, i as DurableRuntimeConfig, l as childReservationIdFor, m as threadCreatedRecordId, o as RecoveryFailure, p as threadCreatedBatchId, r as DurableApprovalResolver, s as RecoveryReport, t as DurableAgentRuntime, u as isolateRecovery } from "../DurableAgentRuntime-BIrgxwRl.mjs";
2
+ import { a as RecoveryBlocked, c as RecoverySweepResult, d as recoveryRepairBatchId, f as recoveryRepairRecordId, i as DurableRuntimeConfig, l as childReservationIdFor, m as threadCreatedRecordId, o as RecoveryFailure, p as threadCreatedBatchId, r as DurableApprovalResolver, s as RecoveryReport, t as DurableAgentRuntime, u as isolateRecovery } from "../DurableAgentRuntime-tNrkJZNo.mjs";
3
3
  export { DurableAgentRuntime, DurableApprovalResolver, DurableRuntimeConfig, Receipt, RecoveryBlocked, RecoveryFailure, RecoveryReport, RecoverySweepResult, childReservationIdFor, isolateRecovery, recoveryRepairBatchId, recoveryRepairRecordId, threadCreatedBatchId, threadCreatedRecordId };
@@ -1,2 +1,2 @@
1
- import { a as DurableRuntimeFailpointLocation, i as DurableRuntimeFailpointHandler, n as DurableRuntimeFailpoint, r as DurableRuntimeFailpointError } from "../DurableFailpoint-mx3-nsxU.mjs";
1
+ import { a as DurableRuntimeFailpointLocation, i as DurableRuntimeFailpointHandler, n as DurableRuntimeFailpoint, r as DurableRuntimeFailpointError } from "../DurableFailpoint-Cnr3wx1L.mjs";
2
2
  export { DurableRuntimeFailpoint, DurableRuntimeFailpointError, DurableRuntimeFailpointHandler, DurableRuntimeFailpointLocation };
@@ -63,6 +63,10 @@ const DurableRuntimeFailpointLocation = Schema.Literals([
63
63
  "subagent:after-join-append",
64
64
  "subagent:after-release-pending",
65
65
  "subagent:after-release",
66
+ "worker:before-stop-append",
67
+ "worker:after-stop-append",
68
+ "worker:before-stop-seal",
69
+ "worker:after-stop-seal",
66
70
  "worker:before-source-append",
67
71
  "worker:after-source-append",
68
72
  "worker:before-origin-append",
@@ -1 +1 @@
1
- {"version":3,"file":"DurableFailpoint.mjs","names":[],"sources":["../../src/durable/DurableFailpoint.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\n/**\n * Coordinator-owned failpoint locations (plan §Failpoints). Locations normally sit immediately\n * AFTER one durable mutation of the six-step coordinator flow, so a fault injected there\n * simulates a crash between two durable steps; the matching BEFORE boundary of each mutation is\n * owned by the storage adapters (`ledger:*:before`, `append:before`, ...), giving every durable\n * mutation a failpoint on both sides (change discipline). Run-start append also exposes its\n * BEFORE boundary here to distinguish a fresh clock from a committed clock in crash tests.\n *\n * The `subagent:*` family covers every durable mutation of the S2 establishment/join protocol\n * including reservation, request append, child admission, child readiness,\n * start-link append, sibling per-call settles at the suspension seam, the `waitingForChild`\n * suspension, child abort propagation, the atomic join batch, and both reservation-release\n * transitions.\n */\nexport const DurableRuntimeFailpointLocation = Schema.Literals([\n \"submit:after-admit\",\n \"submit:after-materialize\",\n \"claim:after-claim\",\n \"input:after-canonical-append\",\n \"run:before-start-append\",\n \"run:after-start-append\",\n \"run:before-duration-append\",\n \"run:after-duration-append\",\n \"turn:after-canonical-append\",\n \"turn:after-response-append\",\n \"turn:after-results-append\",\n \"compaction:before-canonical-append\",\n \"compaction:after-canonical-append\",\n \"checkpoint:before-save\",\n \"checkpoint:after-save\",\n \"tools:after-prepared-append\",\n \"tools:before-prepared-append\",\n \"tools:before-unavailable-append\",\n \"tools:after-unavailable-append\",\n \"policy:before-reservation-append\",\n \"policy:after-reservation-append\",\n \"step:after-step-append\",\n \"approval:after-request-append\",\n \"approval:after-suspend\",\n \"join:after-claim\",\n \"join:after-canonical-append\",\n \"resolve:after-intent\",\n \"terminalize:after-reserve\",\n \"terminalize:after-canonical-append\",\n \"abort:after-intent\",\n \"subagent:after-reserve\",\n \"subagent:after-request-append\",\n \"subagent:after-admit\",\n \"subagent:after-child-ready\",\n \"subagent:after-start-append\",\n \"subagent:after-sibling-settle\",\n \"subagent:after-suspend\",\n \"subagent:after-child-abort-intent\",\n \"subagent:before-join-append\",\n \"subagent:after-join-append\",\n \"subagent:after-release-pending\",\n \"subagent:after-release\",\n \"worker:before-source-append\",\n \"worker:after-source-append\",\n \"worker:before-origin-append\",\n \"worker:after-origin-append\",\n \"worker:before-completion-append\",\n \"worker:after-completion-append\",\n \"worker:before-subtree-append\",\n \"worker:after-subtree-append\",\n \"worker:before-report-append\",\n \"worker:after-report-append\",\n \"worker:before-report-delivery\",\n \"worker:after-report-delivery\",\n \"update:before-canonical-append\",\n \"update:after-canonical-append\",\n \"update:before-delivery-insert\",\n \"update:after-delivery-insert\",\n]);\n\nexport type DurableRuntimeFailpointLocation = typeof DurableRuntimeFailpointLocation.Type;\n\n/** Injected coordinator fault. Reaching the caller means the preceding durable step committed. */\nexport class DurableRuntimeFailpointError extends Schema.TaggedError<DurableRuntimeFailpointError>()(\n \"DurableRuntimeFailpointError\",\n {\n location: DurableRuntimeFailpointLocation,\n },\n) {}\n\nexport type DurableRuntimeFailpointHandler = (\n location: DurableRuntimeFailpointLocation,\n) => Effect.Effect<void, DurableRuntimeFailpointError>;\n\nconst noFailpoint: DurableRuntimeFailpointHandler = () => Effect.void;\n\n/**\n * Explicit fault-injection authority used at durable coordinator step boundaries. The process\n * crash harness (WP5) maps a hit to `process.exit`; in-process tests fail the step with the\n * typed `DurableRuntimeFailpointError` instead.\n */\nexport class DurableRuntimeFailpoint extends Context.Service<\n DurableRuntimeFailpoint,\n {\n readonly hit: DurableRuntimeFailpointHandler;\n }\n>()(\"@effect-agent/thread/DurableRuntimeFailpoint\") {\n /** Production default: no fault injection. */\n static readonly layer = Layer.succeed(this)({ hit: noFailpoint });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,kCAAkC,OAAO,SAAS;CAC7D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;AAKD,IAAa,+BAAb,cAAkD,OAAO,YAA0C,CAAC,CAClG,gCACA,EACE,UAAU,gCACZ,CACF,CAAC,CAAC,CAAC;AAMH,MAAM,oBAAoD,OAAO;;;;;;AAOjE,IAAa,0BAAb,cAA6C,QAAQ,QAKnD,CAAC,CAAC,8CAA8C,CAAC,CAAC;;CAElD,OAAgB,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC;AAClE"}
1
+ {"version":3,"file":"DurableFailpoint.mjs","names":[],"sources":["../../src/durable/DurableFailpoint.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\n/**\n * Coordinator-owned failpoint locations (plan §Failpoints). Locations normally sit immediately\n * AFTER one durable mutation of the six-step coordinator flow, so a fault injected there\n * simulates a crash between two durable steps; the matching BEFORE boundary of each mutation is\n * owned by the storage adapters (`ledger:*:before`, `append:before`, ...), giving every durable\n * mutation a failpoint on both sides (change discipline). Run-start append also exposes its\n * BEFORE boundary here to distinguish a fresh clock from a committed clock in crash tests.\n *\n * The `subagent:*` family covers every durable mutation of the S2 establishment/join protocol\n * including reservation, request append, child admission, child readiness,\n * start-link append, sibling per-call settles at the suspension seam, the `waitingForChild`\n * suspension, child abort propagation, the atomic join batch, and both reservation-release\n * transitions.\n */\nexport const DurableRuntimeFailpointLocation = Schema.Literals([\n \"submit:after-admit\",\n \"submit:after-materialize\",\n \"claim:after-claim\",\n \"input:after-canonical-append\",\n \"run:before-start-append\",\n \"run:after-start-append\",\n \"run:before-duration-append\",\n \"run:after-duration-append\",\n \"turn:after-canonical-append\",\n \"turn:after-response-append\",\n \"turn:after-results-append\",\n \"compaction:before-canonical-append\",\n \"compaction:after-canonical-append\",\n \"checkpoint:before-save\",\n \"checkpoint:after-save\",\n \"tools:after-prepared-append\",\n \"tools:before-prepared-append\",\n \"tools:before-unavailable-append\",\n \"tools:after-unavailable-append\",\n \"policy:before-reservation-append\",\n \"policy:after-reservation-append\",\n \"step:after-step-append\",\n \"approval:after-request-append\",\n \"approval:after-suspend\",\n \"join:after-claim\",\n \"join:after-canonical-append\",\n \"resolve:after-intent\",\n \"terminalize:after-reserve\",\n \"terminalize:after-canonical-append\",\n \"abort:after-intent\",\n \"subagent:after-reserve\",\n \"subagent:after-request-append\",\n \"subagent:after-admit\",\n \"subagent:after-child-ready\",\n \"subagent:after-start-append\",\n \"subagent:after-sibling-settle\",\n \"subagent:after-suspend\",\n \"subagent:after-child-abort-intent\",\n \"subagent:before-join-append\",\n \"subagent:after-join-append\",\n \"subagent:after-release-pending\",\n \"subagent:after-release\",\n \"worker:before-stop-append\",\n \"worker:after-stop-append\",\n \"worker:before-stop-seal\",\n \"worker:after-stop-seal\",\n \"worker:before-source-append\",\n \"worker:after-source-append\",\n \"worker:before-origin-append\",\n \"worker:after-origin-append\",\n \"worker:before-completion-append\",\n \"worker:after-completion-append\",\n \"worker:before-subtree-append\",\n \"worker:after-subtree-append\",\n \"worker:before-report-append\",\n \"worker:after-report-append\",\n \"worker:before-report-delivery\",\n \"worker:after-report-delivery\",\n \"update:before-canonical-append\",\n \"update:after-canonical-append\",\n \"update:before-delivery-insert\",\n \"update:after-delivery-insert\",\n]);\n\nexport type DurableRuntimeFailpointLocation = typeof DurableRuntimeFailpointLocation.Type;\n\n/** Injected coordinator fault. Reaching the caller means the preceding durable step committed. */\nexport class DurableRuntimeFailpointError extends Schema.TaggedError<DurableRuntimeFailpointError>()(\n \"DurableRuntimeFailpointError\",\n {\n location: DurableRuntimeFailpointLocation,\n },\n) {}\n\nexport type DurableRuntimeFailpointHandler = (\n location: DurableRuntimeFailpointLocation,\n) => Effect.Effect<void, DurableRuntimeFailpointError>;\n\nconst noFailpoint: DurableRuntimeFailpointHandler = () => Effect.void;\n\n/**\n * Explicit fault-injection authority used at durable coordinator step boundaries. The process\n * crash harness (WP5) maps a hit to `process.exit`; in-process tests fail the step with the\n * typed `DurableRuntimeFailpointError` instead.\n */\nexport class DurableRuntimeFailpoint extends Context.Service<\n DurableRuntimeFailpoint,\n {\n readonly hit: DurableRuntimeFailpointHandler;\n }\n>()(\"@effect-agent/thread/DurableRuntimeFailpoint\") {\n /** Production default: no fault injection. */\n static readonly layer = Layer.succeed(this)({ hit: noFailpoint });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,kCAAkC,OAAO,SAAS;CAC7D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;AAKD,IAAa,+BAAb,cAAkD,OAAO,YAA0C,CAAC,CAClG,gCACA,EACE,UAAU,gCACZ,CACF,CAAC,CAAC,CAAC;AAMH,MAAM,oBAAoD,OAAO;;;;;;AAOjE,IAAa,0BAAb,cAA6C,QAAQ,QAKnD,CAAC,CAAC,8CAA8C,CAAC,CAAC;;CAElD,OAAgB,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC;AAClE"}
@@ -1,4 +1,4 @@
1
- import { i as DurableRuntimeFailpointHandler, n as DurableRuntimeFailpoint } from "../DurableFailpoint-mx3-nsxU.mjs";
1
+ import { i as DurableRuntimeFailpointHandler, n as DurableRuntimeFailpoint } from "../DurableFailpoint-Cnr3wx1L.mjs";
2
2
  import { Context, Effect, Layer } from "effect";
3
3
  //#region src/durable/DurableFailpointTestControl.d.ts
4
4
  declare const DurableRuntimeFailpointTestControl_base: Context.ServiceClass<DurableRuntimeFailpointTestControl, "@effect-agent/thread/DurableRuntimeFailpointTestControl", {
@@ -1,2 +1,2 @@
1
- import { a as makeEventSource, i as NormalizedEvent, r as EventSources, t as EventSource } from "../EventSource-ARs56eBq.mjs";
1
+ import { a as makeEventSource, i as NormalizedEvent, r as EventSources, t as EventSource } from "../EventSource-DPRdlvhV.mjs";
2
2
  export { EventSource, EventSources, NormalizedEvent, makeEventSource };
@@ -1,7 +1,7 @@
1
1
  import { r as Principal } from "../Receipt-BAHyigAF.mjs";
2
- import "../Records-BtxMy8xD.mjs";
3
- import { E as SubscriptionSourceError } from "../Subscription-B9VszlF9.mjs";
4
- import { t as EventSource } from "../EventSource-ARs56eBq.mjs";
2
+ import "../Records-Byeb70tt.mjs";
3
+ import { E as SubscriptionSourceError } from "../Subscription-Xnwd42Sm.mjs";
4
+ import { t as EventSource } from "../EventSource-DPRdlvhV.mjs";
5
5
  import { SubscriptionFailure, SubscriptionIntake } from "./Subscriptions.mjs";
6
6
  import { Context, Effect, Layer, Redacted, Schema } from "effect";
7
7
  import { HttpClient } from "effect/unstable/http";
@@ -4,9 +4,9 @@ import { a as Receipt, t as IdempotencyKey } from "../Receipt-BAHyigAF.mjs";
4
4
  import { r as Update } from "../AgentUpdates-DMJ-_xow.mjs";
5
5
  import { a as FailureDiagnostic_d_exports, r as Diagnostic } from "../FailureDiagnostic-CaAkzGHL.mjs";
6
6
  import { t as AgentPolicy } from "../AgentPolicy-BqDoSXO6.mjs";
7
- import { h as DefinitionDigests, mo as Settlement } from "../Records-BtxMy8xD.mjs";
8
- import { a as PreparedInput } from "../Subscription-B9VszlF9.mjs";
9
- import { t as PreparedInputAdmission } from "../PreparedInputAdmission-_WYg-D0f.mjs";
7
+ import { h as DefinitionDigests, ho as Settlement } from "../Records-Byeb70tt.mjs";
8
+ import { a as PreparedInput } from "../Subscription-Xnwd42Sm.mjs";
9
+ import { t as PreparedInputAdmission } from "../PreparedInputAdmission-DqQUjA9k.mjs";
10
10
  import { Context, Crypto, Effect, Layer, Result, Schema } from "effect";
11
11
  declare namespace MessageDelivery_d_exports {
12
12
  export { MessageDeliveryChange, MessageDeliveryDriver, MessageDeliveryDriverLimits, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryFailpointError, MessageDeliveryFailure, MessageDeliveryKey, MessageDeliveryPage, MessageDeliveryPageRequest, MessageDeliveryPolicy, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryPolicy, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, messageDeliveryKeyString, messageDeliveryUsesCapacity, prepareMessageDelivery, readPending, sameMessageDeliveryIdentity, validateMessageDelivery };
@@ -81,6 +81,7 @@ export declare const MessageDeliveryRecord: Schema.Struct<{
81
81
  readonly threadId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">;
82
82
  }>]>;
83
83
  readonly budgetScope: Schema.optionalKey<Schema.Literals<readonly ["source-subtree", "worker-run"]>>;
84
+ readonly lifecycle: Schema.optionalKey<Schema.Literal<"assignment">>;
84
85
  readonly targetDigests: typeof DefinitionDigests;
85
86
  readonly policy: Schema.toCodecJson<typeof AgentPolicy>;
86
87
  readonly budget: Schema.Struct<{
@@ -274,12 +275,20 @@ export declare const MessageDeliveryChange: Schema.Union<readonly [Schema.Struct
274
275
  readonly untilMillis: Schema.Int;
275
276
  }>]>;
276
277
  export type MessageDeliveryChange = typeof MessageDeliveryChange.Type;
278
+ /** Select one native index per page; index filters cannot be combined. */
277
279
  export declare const MessageDeliveryPageRequest: Schema.Struct<{
278
280
  readonly ownerThreadId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">;
279
281
  readonly limit: Schema.Int;
280
282
  readonly after: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "@effect-agent/thread/IdempotencyKey">>;
281
283
  /** Native pending index, including accepted, future-due and parked obligations. */
282
284
  readonly pendingOnly: Schema.optionalKey<Schema.Boolean>;
285
+ /** First retained envelopes, including starts not admitted at the destination. */
286
+ readonly workerStarts: Schema.optionalKey<Schema.Struct<{
287
+ readonly delegationId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/DelegationId">;
288
+ readonly targetAgentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/AgentId">;
289
+ }>>;
290
+ /** Retained inputs not yet acknowledged by one destination worker. */
291
+ readonly pendingWorker: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">>;
283
292
  }>;
284
293
  export type MessageDeliveryPageRequest = typeof MessageDeliveryPageRequest.Type;
285
294
  export declare const MessageDeliveryPage: Schema.Struct<{
@@ -328,6 +337,7 @@ export declare const MessageDeliveryPage: Schema.Struct<{
328
337
  readonly threadId: Schema.brand<Schema.NonEmptyString, "@effect-agent/core/ThreadId">;
329
338
  }>]>;
330
339
  readonly budgetScope: Schema.optionalKey<Schema.Literals<readonly ["source-subtree", "worker-run"]>>;
340
+ readonly lifecycle: Schema.optionalKey<Schema.Literal<"assignment">>;
331
341
  readonly targetDigests: typeof DefinitionDigests;
332
342
  readonly policy: Schema.toCodecJson<typeof AgentPolicy>;
333
343
  readonly budget: Schema.Struct<{
@@ -489,6 +499,11 @@ export declare const readPending: (request: Pick<{
489
499
  readonly limit: number;
490
500
  readonly after?: (string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">) | undefined;
491
501
  readonly pendingOnly?: boolean | undefined;
502
+ readonly workerStarts?: {
503
+ readonly delegationId: string & import("effect/Brand").Brand<"@effect-agent/core/DelegationId">;
504
+ readonly targetAgentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
505
+ } | undefined;
506
+ readonly pendingWorker?: (string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">) | undefined;
492
507
  }, "limit" | "ownerThreadId">) => Effect.Effect<readonly {
493
508
  readonly schemaVersion: 1;
494
509
  readonly key: {
@@ -534,6 +549,7 @@ export declare const readPending: (request: Pick<{
534
549
  readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
535
550
  };
536
551
  readonly budgetScope?: "source-subtree" | "worker-run" | undefined;
552
+ readonly lifecycle?: "assignment" | undefined;
537
553
  readonly targetDigests: DefinitionDigests;
538
554
  readonly policy: AgentPolicy;
539
555
  readonly budget: {
@@ -724,6 +740,7 @@ export declare const prepareMessageDelivery: (options: {
724
740
  readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
725
741
  };
726
742
  readonly budgetScope?: "source-subtree" | "worker-run" | undefined;
743
+ readonly lifecycle?: "assignment" | undefined;
727
744
  readonly targetDigests: DefinitionDigests;
728
745
  readonly policy: AgentPolicy;
729
746
  readonly budget: {
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.mjs";
2
- import { ThreadId } from "../core/Identifiers.mjs";
2
+ import { AgentId, DelegationId, ThreadId } from "../core/Identifiers.mjs";
3
3
  import { IdempotencyKey, Receipt } from "../core/Receipt.mjs";
4
4
  import { o as Value, r as Diagnostic, s as capture } from "../FailureDiagnostic-BElLOoED.mjs";
5
- import { p as WorkerUpdate } from "../Worker-T_3RbaKc.mjs";
5
+ import { b as WorkerUpdate } from "../Worker-CfwzMZEK.mjs";
6
6
  import { Digest } from "./Records.mjs";
7
7
  import { Settlement } from "./SubmissionLedger.mjs";
8
8
  import { digestJson } from "./Digest.mjs";
@@ -175,13 +175,21 @@ const MessageDeliveryChange = Schema.Union([
175
175
  untilMillis: ScheduleInstant
176
176
  })
177
177
  ]);
178
+ /** Select one native index per page; index filters cannot be combined. */
178
179
  const MessageDeliveryPageRequest = Schema.Struct({
179
180
  ownerThreadId: ThreadId,
180
181
  limit: Positive.check(Schema.isLessThanOrEqualTo(4096)),
181
182
  after: Schema.optionalKey(IdempotencyKey),
182
183
  /** Native pending index, including accepted, future-due and parked obligations. */
183
- pendingOnly: Schema.optionalKey(Schema.Boolean)
184
- });
184
+ pendingOnly: Schema.optionalKey(Schema.Boolean),
185
+ /** First retained envelopes, including starts not admitted at the destination. */
186
+ workerStarts: Schema.optionalKey(Schema.Struct({
187
+ delegationId: DelegationId,
188
+ targetAgentId: AgentId
189
+ })),
190
+ /** Retained inputs not yet acknowledged by one destination worker. */
191
+ pendingWorker: Schema.optionalKey(ThreadId)
192
+ }).check(Schema.makeFilter((request) => Number(request.pendingOnly === true) + Number(request.workerStarts !== void 0) + Number(request.pendingWorker !== void 0) <= 1));
185
193
  const MessageDeliveryPage = Schema.Struct({
186
194
  items: Schema.Array(MessageDeliveryRecord),
187
195
  next: Schema.NullOr(IdempotencyKey)
@@ -1 +1 @@
1
- {"version":3,"file":"MessageDelivery.mjs","names":["FailureDiagnostic.Diagnostic","FailureDiagnostic.Value","FailureDiagnostic.capture"],"sources":["../../src/durable/MessageDelivery.ts"],"sourcesContent":["import { Clock, Context, Crypto, Effect, Layer, Result, Schema, Semaphore } from \"effect\";\n\nimport * as FailureDiagnostic from \"../core/FailureDiagnostic.ts\";\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport { WorkerUpdate } from \"../core/Worker.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport { admitPreparedInput, PreparedInputAdmission } from \"./PreparedInputAdmission.ts\";\nimport { Digest } from \"./Records.ts\";\nimport { ScheduleInstant, ScheduleRetry, ScheduleRetryReason } from \"./Schedule.ts\";\nimport { IdempotencyKey, Settlement } from \"./SubmissionLedger.ts\";\nimport { PreparedInput } from \"./Subscription.ts\";\n\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\nconst BoundedName = Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256));\n\n/** An owner is always a source Thread. Destination admission has its own frozen key. */\nexport const MessageDeliveryKey = Schema.Struct({\n ownerThreadId: ThreadId,\n messageId: IdempotencyKey,\n});\n\nexport type MessageDeliveryKey = typeof MessageDeliveryKey.Type;\n\nexport const MessageDeliveryPolicy = Schema.Struct({\n maxAutomaticAttempts: Positive.check(Schema.isLessThanOrEqualTo(100)),\n attemptTimeoutMillis: Positive.check(Schema.isLessThanOrEqualTo(300_000)),\n retryBaseMillis: Positive,\n retryMaxMillis: Positive,\n settlementPollMillis: Positive,\n}).check(Schema.makeFilter((value) => value.retryBaseMillis <= value.retryMaxMillis));\n\nexport type MessageDeliveryPolicy = typeof MessageDeliveryPolicy.Type;\n\nexport const defaultMessageDeliveryPolicy: MessageDeliveryPolicy = {\n maxAutomaticAttempts: 8,\n attemptTimeoutMillis: 30_000,\n retryBaseMillis: 1_000,\n retryMaxMillis: 60_000,\n settlementPollMillis: 5_000,\n};\n\nexport const MessageDeliveryStoreLimits = Schema.Struct({\n maxPendingPerOwner: Positive,\n maxRetainedPerOwner: Positive,\n maxEnvelopeBytes: Positive,\n /** Separate update capacity preserves the full ordinary allowance for terminal reports. */\n maxPendingUpdatesPerOwner: Schema.optionalKey(Positive),\n maxRetainedUpdatesPerOwner: Schema.optionalKey(Positive),\n}).check(\n Schema.makeFilter(\n (value) =>\n value.maxPendingPerOwner <= value.maxRetainedPerOwner &&\n (value.maxPendingUpdatesPerOwner ?? 32) <= (value.maxRetainedUpdatesPerOwner ?? 256),\n ),\n);\n\nexport type MessageDeliveryStoreLimits = typeof MessageDeliveryStoreLimits.Type;\n\nexport const defaultMessageDeliveryStoreLimits: MessageDeliveryStoreLimits = {\n maxPendingPerOwner: 100,\n maxRetainedPerOwner: 1_000,\n maxEnvelopeBytes: 262_144,\n maxPendingUpdatesPerOwner: 32,\n maxRetainedUpdatesPerOwner: 256,\n};\n\nconst ParkReason = Schema.Literals([\"exhausted\", \"deadline\", \"status-unavailable\"]);\n\nexport const MessageDeliveryRecord = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n envelopeDigest: Digest,\n /** Same-owner predecessor whose admission must be known before this message is submitted. */\n predecessor: Schema.optionalKey(IdempotencyKey),\n createdAtMillis: ScheduleInstant,\n /** Immutable creation identity; explicit recovery only renews deadlineAtMillis. */\n initialDeadlineAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n version: Positive,\n status: Schema.Literals([\"pending\", \"accepted\", \"processed\", \"refused\", \"parked\"]),\n receipt: Schema.NullOr(Receipt),\n settlement: Schema.NullOr(Settlement),\n refusal: Schema.NullOr(BoundedName),\n parkReason: Schema.NullOr(ParkReason),\n leaseUntilMillis: Schema.NullOr(ScheduleInstant),\n retry: ScheduleRetry,\n /** Last failed admission/status check, retained across retries and successful recovery. */\n lastFailureDiagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n}).check(\n Schema.makeFilter(\n (record) =>\n record.deadlineAtMillis > record.createdAtMillis &&\n record.initialDeadlineAtMillis > record.createdAtMillis &&\n record.predecessor !== record.key.messageId &&\n (record.status === \"processed\") === (record.settlement !== null) &&\n (record.status === \"refused\") === (record.refusal !== null) &&\n (record.status === \"parked\") === (record.parkReason !== null) &&\n (record.status === \"parked\") === record.retry.parked &&\n (record.status === \"accepted\" || record.status === \"processed\"\n ? record.receipt !== null\n : true) &&\n (record.status === \"pending\" || record.status === \"refused\"\n ? record.receipt === null\n : true) &&\n (record.receipt === null || record.receipt.threadId === record.envelope.threadId) &&\n (record.settlement === null ||\n (record.settlement.receiptId === record.receipt?.receiptId &&\n record.settlement.submissionId === record.receipt.submissionId)) &&\n (record.status === \"processed\" || record.status === \"refused\" || record.status === \"parked\"\n ? record.leaseUntilMillis === null\n : true),\n ),\n);\n\nexport type MessageDeliveryRecord = typeof MessageDeliveryRecord.Type;\n\nexport class MessageDeliveryError extends Schema.TaggedError<MessageDeliveryError>()(\n \"MessageDeliveryError\",\n {\n cause: Schema.optionalKey(FailureDiagnostic.Value),\n stack: Schema.optionalKey(Schema.String),\n reason: Schema.Literals([\n \"validation\",\n \"conflict\",\n \"capacity\",\n \"not-found\",\n \"storage\",\n \"corrupt\",\n ]),\n operation: Schema.String,\n },\n) {}\n\nexport class MessageDeliveryFailpointError extends Schema.TaggedError<MessageDeliveryFailpointError>()(\n \"MessageDeliveryFailpointError\",\n {\n point: Schema.String,\n },\n) {}\n\nexport type MessageDeliveryFailure = MessageDeliveryError | MessageDeliveryFailpointError;\n\nexport const MessageDeliveryFailpoint = Context.Reference<{\n readonly hit: (point: string) => Effect.Effect<void, MessageDeliveryFailpointError>;\n}>(\"@effect-agent/thread/MessageDeliveryFailpoint\", {\n defaultValue: () => ({ hit: () => Effect.void }),\n});\n\nconst fence = { expectedVersion: Positive, nowMillis: ScheduleInstant };\n\nexport const MessageDeliveryChange = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Claim\"), ...fence }),\n Schema.Struct({ _tag: Schema.Literal(\"Accept\"), ...fence, receipt: Receipt }),\n Schema.Struct({ _tag: Schema.Literal(\"Process\"), ...fence, settlement: Settlement }),\n Schema.Struct({ _tag: Schema.Literal(\"ObservePending\"), ...fence }),\n Schema.Struct({\n _tag: Schema.Literal(\"Refuse\"),\n ...fence,\n code: BoundedName,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"Retry\"),\n ...fence,\n reason: ScheduleRetryReason,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"Park\"),\n ...fence,\n reason: ParkReason,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({ _tag: Schema.Literal(\"Recover\"), ...fence, deadlineAtMillis: ScheduleInstant }),\n /** Waiting for earlier admission never spends an automatic transport attempt. */\n Schema.Struct({ _tag: Schema.Literal(\"Defer\"), ...fence, untilMillis: ScheduleInstant }),\n]);\n\nexport type MessageDeliveryChange = typeof MessageDeliveryChange.Type;\n\nexport const MessageDeliveryPageRequest = Schema.Struct({\n ownerThreadId: ThreadId,\n limit: Positive.check(Schema.isLessThanOrEqualTo(4096)),\n after: Schema.optionalKey(IdempotencyKey),\n /** Native pending index, including accepted, future-due and parked obligations. */\n pendingOnly: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type MessageDeliveryPageRequest = typeof MessageDeliveryPageRequest.Type;\n\nexport const MessageDeliveryPage = Schema.Struct({\n items: Schema.Array(MessageDeliveryRecord),\n next: Schema.NullOr(IdempotencyKey),\n});\n\nexport type MessageDeliveryPage = typeof MessageDeliveryPage.Type;\n\n/**\n * Trusted host port, independent of either Thread's active Submission. List/get require an owner.\n * Inserts and changes are atomic; identical inserts return current state even after completion.\n * No automatic deletion: completed rows retain deduplication evidence and count toward retention.\n * `due`/`nextDeadline` are bounded host recovery seams, never model-facing management operations.\n */\nexport class MessageDeliveryStore extends Context.Service<\n MessageDeliveryStore,\n {\n readonly limits: MessageDeliveryStoreLimits;\n readonly maxStoredValueBytes: number;\n readonly insert: (\n record: MessageDeliveryRecord,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly get: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord | null, MessageDeliveryError>;\n readonly list: (\n request: MessageDeliveryPageRequest,\n ) => Effect.Effect<MessageDeliveryPage, MessageDeliveryError>;\n readonly change: (\n key: MessageDeliveryKey,\n change: MessageDeliveryChange,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly due: (\n nowMillis: number,\n limit: number,\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryKey>, MessageDeliveryError>;\n readonly nextDeadline: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<number | null, MessageDeliveryError>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryStore\") {}\n\n/**\n * Read current source-owned obligations without acquiring a runtime or scanning completed history.\n * A retained receipt is native accepted-admission evidence, not proof of destination materialization.\n * Shipped worker admission reserves the source input before returning that receipt. Policy can\n * therefore leave accepted worker discovery to canonical outstanding inputs; a no-receipt action\n * delivery remains uncertain, including when parked or due in the future.\n */\nexport const readPending = Effect.fn(\"MessageDelivery.readPending\")(function* (\n request: Pick<MessageDeliveryPageRequest, \"ownerThreadId\" | \"limit\">,\n) {\n const store = yield* MessageDeliveryStore;\n\n const input = yield* validateMessageDelivery(\n MessageDeliveryPageRequest,\n {\n ownerThreadId: request.ownerThreadId,\n limit: request.limit,\n pendingOnly: true,\n },\n \"read-pending\",\n );\n\n const page = yield* validateMessageDelivery(\n MessageDeliveryPage,\n yield* store.list(input),\n \"read-pending result\",\n );\n\n if (page.next !== null || page.items.length > input.limit)\n return yield* MessageDeliveryError.make({ reason: \"capacity\", operation: \"read-pending\" });\n const records = page.items;\n\n if (\n records.some(\n (record) =>\n record.key.ownerThreadId !== input.ownerThreadId || !messageDeliveryUsesCapacity(record),\n ) ||\n new Set(records.map((record) => record.key.messageId)).size !== records.length\n )\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"read-pending result\",\n });\n\n return records;\n});\n\nexport const messageDeliveryKeyString = (key: MessageDeliveryKey): string =>\n JSON.stringify([key.ownerThreadId, key.messageId]);\n\nexport const messageDeliveryUsesCapacity = (record: MessageDeliveryRecord): boolean =>\n record.status !== \"processed\" && record.status !== \"refused\";\n\nexport const isWorkerUpdateDelivery = (record: MessageDeliveryRecord): boolean =>\n Schema.is(WorkerUpdate)(record.envelope.messageAdmission);\n\nexport const messageDeliveryCapacity = (limits: MessageDeliveryStoreLimits, update: boolean) => ({\n pending: update ? (limits.maxPendingUpdatesPerOwner ?? 32) : limits.maxPendingPerOwner,\n retained: update ? (limits.maxRetainedUpdatesPerOwner ?? 256) : limits.maxRetainedPerOwner,\n});\n\nexport const messageDeliveryDeadline = (record: MessageDeliveryRecord): number | null =>\n record.status === \"pending\" || record.status === \"accepted\"\n ? Math.min(record.deadlineAtMillis, record.leaseUntilMillis ?? record.retry.nextAttemptAtMillis)\n : null;\n\n/** Creation identity deliberately excludes operational counters and renewed recovery deadlines. */\nexport const sameMessageDeliveryIdentity = (\n left: MessageDeliveryRecord,\n right: MessageDeliveryRecord,\n): boolean =>\n messageDeliveryKeyString(left.key) === messageDeliveryKeyString(right.key) &&\n left.envelopeDigest === right.envelopeDigest &&\n left.predecessor === right.predecessor &&\n Schema.toEquivalence(PreparedInput)(left.envelope, right.envelope) &&\n Schema.toEquivalence(MessageDeliveryPolicy)(left.policy, right.policy) &&\n left.createdAtMillis === right.createdAtMillis &&\n left.initialDeadlineAtMillis === right.initialDeadlineAtMillis;\n\nconst error = (reason: MessageDeliveryError[\"reason\"], operation: string, cause?: unknown) =>\n MessageDeliveryError.make({ reason, operation, ...(cause === undefined ? {} : { cause }) });\n\nexport const validateMessageDelivery = <A, I>(\n schema: Schema.Codec<A, I>,\n value: unknown,\n operation: string,\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError(() => error(\"validation\", operation)),\n );\n\nconst MessageDeliveryPreparation = Schema.Struct({\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n createdAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n predecessor: Schema.optionalKey(IdempotencyKey),\n});\n\n/** Freeze and digest the complete admission envelope before publishing the obligation. */\nexport const prepareMessageDelivery = Effect.fn(\"MessageDelivery.prepare\")(function* (options: {\n readonly key: MessageDeliveryKey;\n readonly envelope: PreparedInput;\n readonly createdAtMillis: number;\n readonly deadlineAtMillis: number;\n readonly policy?: MessageDeliveryPolicy;\n readonly predecessor?: IdempotencyKey;\n}): Effect.fn.Return<MessageDeliveryRecord, MessageDeliveryError, Crypto.Crypto> {\n // JSON detaches every caller-owned value before Crypto can suspend preparation.\n const snapshot = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))({\n ...options,\n policy: options.policy ?? defaultMessageDeliveryPolicy,\n }).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))),\n Effect.mapError((cause) => error(\"validation\", \"prepare\", cause)),\n );\n\n const envelope = snapshot.envelope;\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError((cause) => error(\"validation\", \"prepare\", cause)),\n );\n\n const inputDigest = yield* digestJson(encoded.input).pipe(\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n if (inputDigest !== envelope.inputDigest) return yield* error(\"corrupt\", \"input-digest\");\n\n const envelopeDigest = yield* digestJson(encoded).pipe(\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n return yield* validateMessageDelivery(\n MessageDeliveryRecord,\n {\n schemaVersion: 1,\n key: snapshot.key,\n envelope,\n envelopeDigest,\n ...(snapshot.predecessor === undefined ? {} : { predecessor: snapshot.predecessor }),\n createdAtMillis: snapshot.createdAtMillis,\n initialDeadlineAtMillis: snapshot.deadlineAtMillis,\n deadlineAtMillis: snapshot.deadlineAtMillis,\n policy: snapshot.policy,\n version: 1,\n status: \"pending\",\n receipt: null,\n settlement: null,\n refusal: null,\n parkReason: null,\n leaseUntilMillis: null,\n retry: {\n attempts: 0,\n generation: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: snapshot.createdAtMillis,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n },\n \"prepare\",\n );\n});\n\n/** Pure reducer used under the adapter's atomic compare-and-swap boundary. */\nexport const applyMessageDeliveryChange = (\n record: MessageDeliveryRecord,\n change: MessageDeliveryChange,\n): Result.Result<MessageDeliveryRecord, MessageDeliveryError> => {\n const conflict = () => Result.fail(error(\"conflict\", change._tag));\n\n if (record.version !== change.expectedVersion) return conflict();\n if (record.status === \"processed\" || record.status === \"refused\") return conflict();\n const now = change.nowMillis;\n\n const base = {\n ...record,\n version: record.version + 1,\n ...(\"diagnostic\" in change && change.diagnostic !== undefined\n ? { lastFailureDiagnostic: change.diagnostic }\n : {}),\n };\n\n const parked = (reason: typeof ParkReason.Type): MessageDeliveryRecord => ({\n ...base,\n status: \"parked\",\n parkReason: reason,\n leaseUntilMillis: null,\n retry: { ...record.retry, parked: true },\n });\n\n if (change._tag === \"Defer\") {\n if (\n record.status !== \"pending\" ||\n (record.leaseUntilMillis !== null && record.leaseUntilMillis > now)\n )\n return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (change.untilMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(change.untilMillis, record.deadlineAtMillis),\n },\n });\n }\n\n if (change._tag === \"Recover\") {\n if (record.status !== \"parked\" || change.deadlineAtMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n deadlineAtMillis: change.deadlineAtMillis,\n status: record.receipt === null ? \"pending\" : \"accepted\",\n parkReason: null,\n retry: {\n ...record.retry,\n generation: record.retry.generation + 1,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: now,\n },\n });\n }\n if (record.status === \"parked\") return conflict();\n if (change._tag === \"Park\") return Result.succeed(parked(change.reason));\n if (change._tag === \"Claim\") {\n const due = messageDeliveryDeadline(record);\n\n if (due === null || due > now) return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: Math.min(now + record.policy.attemptTimeoutMillis, record.deadlineAtMillis),\n retry: {\n ...record.retry,\n attempts: record.retry.attempts + 1,\n automaticAttempts: record.retry.automaticAttempts + 1,\n lastAttemptAtMillis: now,\n },\n });\n }\n if (record.leaseUntilMillis === null || now > record.leaseUntilMillis) return conflict();\n if (change._tag === \"Accept\") {\n if (record.status !== \"pending\") return conflict();\n if (change.receipt.threadId !== record.envelope.threadId)\n return Result.fail(error(\"corrupt\", \"receipt-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"accepted\",\n receipt: change.receipt,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n lastFailure: null,\n },\n });\n }\n if (change._tag === \"Process\") {\n if (record.status !== \"accepted\") return conflict();\n if (\n change.settlement.submissionId !== record.receipt?.submissionId ||\n change.settlement.receiptId !== record.receipt.receiptId\n )\n return Result.fail(error(\"corrupt\", \"settlement-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"processed\",\n settlement: change.settlement,\n leaseUntilMillis: null,\n });\n }\n if (change._tag === \"ObservePending\") {\n if (record.status !== \"accepted\") return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n lastFailure: null,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n },\n });\n }\n if (change._tag === \"Refuse\") {\n if (record.status !== \"pending\") return conflict();\n\n return Result.succeed({\n ...base,\n status: \"refused\",\n refusal: change.code,\n leaseUntilMillis: null,\n });\n }\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n const delay = Math.min(\n record.policy.retryBaseMillis * 2 ** Math.min(record.retry.automaticAttempts - 1, 52),\n record.policy.retryMaxMillis,\n );\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(\n now + (record.status === \"accepted\" ? record.policy.settlementPollMillis : delay),\n record.deadlineAtMillis,\n ),\n lastFailure: change.reason,\n },\n });\n};\n\nexport const MessageDeliveryDriverLimits = Schema.Struct({\n batchSize: Positive.check(Schema.isLessThanOrEqualTo(100)),\n concurrency: Positive.check(Schema.isLessThanOrEqualTo(32)),\n});\n\nexport type MessageDeliveryDriverLimits = typeof MessageDeliveryDriverLimits.Type;\n\n/**\n * Finite, structured host pump. The host owns its Scope and wakes it from nextDeadline even\n * after source/receiver settlement. Failed or interrupted calls retain their expiring claim;\n * no ordinary tool is replayed here, only idempotent PreparedInput admission/status lookup.\n * Spans expose operation names; envelopes, principals, and message contents are never logged.\n */\nexport class MessageDeliveryDriver extends Context.Service<\n MessageDeliveryDriver,\n {\n readonly process: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly runDue: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryRecord>, MessageDeliveryFailure>;\n readonly retry: (\n key: MessageDeliveryKey,\n expectedVersion: number,\n deadlineAtMillis: number,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryDriver\") {\n static layer(\n limits: MessageDeliveryDriverLimits = { batchSize: 100, concurrency: 4 },\n ): Layer.Layer<\n MessageDeliveryDriver,\n MessageDeliveryError,\n MessageDeliveryStore | PreparedInputAdmission | Crypto.Crypto\n > {\n return Layer.effect(\n MessageDeliveryDriver,\n Effect.gen(function* () {\n const config = yield* validateMessageDelivery(\n MessageDeliveryDriverLimits,\n limits,\n \"driver-limits\",\n );\n\n const store = yield* MessageDeliveryStore;\n const admission = yield* PreparedInputAdmission;\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* MessageDeliveryFailpoint;\n const semaphore = yield* Semaphore.make(config.concurrency);\n\n const process = Effect.fn(\"MessageDelivery.process\")((key: MessageDeliveryKey) =>\n semaphore\n .withPermit(\n Effect.gen(function* () {\n const current = yield* store.get(key);\n\n if (current === null) return yield* error(\"not-found\", \"process\");\n const nowMillis = yield* Clock.currentTimeMillis;\n const due = messageDeliveryDeadline(current);\n\n if (due === null || due > nowMillis) return current;\n\n if (current.status === \"pending\" && current.predecessor !== undefined) {\n const previous = yield* store.get({\n ownerThreadId: key.ownerThreadId,\n messageId: current.predecessor,\n });\n\n if (\n previous === null ||\n (previous.receipt === null && previous.status !== \"refused\")\n ) {\n return yield* store.change(key, {\n _tag: \"Defer\",\n expectedVersion: current.version,\n nowMillis,\n untilMillis: nowMillis + current.policy.settlementPollMillis,\n });\n }\n }\n\n const claimed = yield* store.change(key, {\n _tag: \"Claim\",\n expectedVersion: current.version,\n nowMillis,\n });\n\n if (claimed.status === \"parked\") return claimed;\n\n const envelope = yield* Schema.encodeEffect(PreparedInput)(claimed.envelope).pipe(\n Effect.mapError((cause) => error(\"corrupt\", \"envelope\", cause)),\n );\n\n const digest = yield* digestJson(envelope).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n if (digest !== claimed.envelopeDigest)\n return yield* error(\"corrupt\", \"envelope-digest\");\n\n const timeout = Math.min(\n claimed.policy.attemptTimeoutMillis,\n (claimed.leaseUntilMillis ?? claimed.deadlineAtMillis) -\n (yield* Clock.currentTimeMillis),\n );\n\n // Digest computation cannot extend this claim's admission authority.\n if (timeout <= 0) return claimed;\n\n type WithoutFence<T> = T extends MessageDeliveryChange\n ? Omit<T, \"expectedVersion\" | \"nowMillis\">\n : never;\n\n const commit = (change: WithoutFence<MessageDeliveryChange>) =>\n Clock.currentTimeMillis.pipe(\n Effect.flatMap((time) =>\n store.change(key, {\n ...change,\n expectedVersion: claimed.version,\n nowMillis: time,\n }),\n ),\n );\n\n if (claimed.status === \"pending\") {\n const outcome = yield* admitPreparedInput(\n admission.submit(claimed.envelope),\n timeout,\n ).pipe(Effect.mapError((cause) => error(\"corrupt\", \"admission\", cause)));\n\n yield* failpoint.hit(\"message-delivery:admission:after\");\n if (outcome._tag === \"Receipt\")\n return yield* commit({ _tag: \"Accept\", receipt: outcome.receipt });\n if (outcome._tag === \"Refused\")\n return yield* commit({\n _tag: \"Refuse\",\n code: outcome.error.code,\n diagnostic: FailureDiagnostic.capture(outcome.error),\n });\n\n return yield* commit({\n _tag: \"Retry\",\n reason: outcome.reason,\n diagnostic: outcome.diagnostic,\n });\n }\n if (claimed.receipt === null) return yield* error(\"corrupt\", \"receipt\");\n if (admission.submissionStatus === undefined)\n return yield* commit({ _tag: \"Park\", reason: \"status-unavailable\" });\n\n const status = yield* admission.submissionStatus(claimed.receipt).pipe(\n Effect.timeout(timeout),\n Effect.map((status) => ({ _tag: \"Status\" as const, status })),\n Effect.catchTag(\"ScheduledInputRetryable\", (failure) =>\n Effect.succeed({\n _tag: \"Retry\" as const,\n reason: failure.reason,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"ScheduledInputRefused\", (failure) =>\n Effect.succeed({\n _tag: \"Unavailable\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"TimeoutError\", (failure) =>\n Effect.succeed({\n _tag: \"Retry\" as const,\n reason: \"timeout\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"ScheduleStorageError\", (failure) =>\n failure.reason === \"unavailable\"\n ? Effect.succeed({\n _tag: \"Retry\" as const,\n reason: \"storage\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n })\n : Effect.fail(error(\"corrupt\", \"status\", failure)),\n ),\n );\n\n if (status._tag === \"Unavailable\")\n return yield* commit({\n _tag: \"Park\",\n reason: \"status-unavailable\",\n diagnostic: status.diagnostic,\n });\n if (status._tag === \"Status\" && status.status._tag === \"settled\")\n return yield* commit({ _tag: \"Process\", settlement: status.status.settlement });\n if (status._tag === \"Status\") return yield* commit({ _tag: \"ObservePending\" });\n\n return yield* commit({\n _tag: \"Retry\",\n reason: status.reason,\n diagnostic: status.diagnostic,\n });\n }),\n )\n .pipe(\n Effect.catchTag(\"MessageDeliveryError\", (failure) =>\n failure.reason === \"conflict\"\n ? store.get(key).pipe(\n Effect.filterOrFail(\n (record) => record !== null,\n () => failure,\n ),\n )\n : Effect.fail(failure),\n ),\n ),\n );\n\n return MessageDeliveryDriver.of({\n process,\n runDue: Effect.fn(\"MessageDelivery.runDue\")(function* (ownerThreadId) {\n const keys = yield* store.due(\n yield* Clock.currentTimeMillis,\n config.batchSize,\n ownerThreadId,\n );\n\n return yield* Effect.forEach(keys, process, { concurrency: config.concurrency });\n }),\n retry: Effect.fn(\"MessageDelivery.retry\")(\n function* (key, expectedVersion, deadlineAtMillis) {\n return yield* store.change(key, {\n _tag: \"Recover\",\n expectedVersion,\n deadlineAtMillis,\n nowMillis: yield* Clock.currentTimeMillis,\n });\n },\n ),\n });\n }),\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MessageDelivery.mjs","names":["FailureDiagnostic.Diagnostic","FailureDiagnostic.Value","FailureDiagnostic.capture"],"sources":["../../src/durable/MessageDelivery.ts"],"sourcesContent":["import { Clock, Context, Crypto, Effect, Layer, Result, Schema, Semaphore } from \"effect\";\n\nimport * as FailureDiagnostic from \"../core/FailureDiagnostic.ts\";\nimport { AgentId, DelegationId, ThreadId } from \"../core/Identifiers.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport { WorkerUpdate } from \"../core/Worker.ts\";\nimport { digestJson } from \"./Digest.ts\";\nimport { admitPreparedInput, PreparedInputAdmission } from \"./PreparedInputAdmission.ts\";\nimport { Digest } from \"./Records.ts\";\nimport { ScheduleInstant, ScheduleRetry, ScheduleRetryReason } from \"./Schedule.ts\";\nimport { IdempotencyKey, Settlement } from \"./SubmissionLedger.ts\";\nimport { PreparedInput } from \"./Subscription.ts\";\n\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\nconst BoundedName = Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256));\n\n/** An owner is always a source Thread. Destination admission has its own frozen key. */\nexport const MessageDeliveryKey = Schema.Struct({\n ownerThreadId: ThreadId,\n messageId: IdempotencyKey,\n});\n\nexport type MessageDeliveryKey = typeof MessageDeliveryKey.Type;\n\nexport const MessageDeliveryPolicy = Schema.Struct({\n maxAutomaticAttempts: Positive.check(Schema.isLessThanOrEqualTo(100)),\n attemptTimeoutMillis: Positive.check(Schema.isLessThanOrEqualTo(300_000)),\n retryBaseMillis: Positive,\n retryMaxMillis: Positive,\n settlementPollMillis: Positive,\n}).check(Schema.makeFilter((value) => value.retryBaseMillis <= value.retryMaxMillis));\n\nexport type MessageDeliveryPolicy = typeof MessageDeliveryPolicy.Type;\n\nexport const defaultMessageDeliveryPolicy: MessageDeliveryPolicy = {\n maxAutomaticAttempts: 8,\n attemptTimeoutMillis: 30_000,\n retryBaseMillis: 1_000,\n retryMaxMillis: 60_000,\n settlementPollMillis: 5_000,\n};\n\nexport const MessageDeliveryStoreLimits = Schema.Struct({\n maxPendingPerOwner: Positive,\n maxRetainedPerOwner: Positive,\n maxEnvelopeBytes: Positive,\n /** Separate update capacity preserves the full ordinary allowance for terminal reports. */\n maxPendingUpdatesPerOwner: Schema.optionalKey(Positive),\n maxRetainedUpdatesPerOwner: Schema.optionalKey(Positive),\n}).check(\n Schema.makeFilter(\n (value) =>\n value.maxPendingPerOwner <= value.maxRetainedPerOwner &&\n (value.maxPendingUpdatesPerOwner ?? 32) <= (value.maxRetainedUpdatesPerOwner ?? 256),\n ),\n);\n\nexport type MessageDeliveryStoreLimits = typeof MessageDeliveryStoreLimits.Type;\n\nexport const defaultMessageDeliveryStoreLimits: MessageDeliveryStoreLimits = {\n maxPendingPerOwner: 100,\n maxRetainedPerOwner: 1_000,\n maxEnvelopeBytes: 262_144,\n maxPendingUpdatesPerOwner: 32,\n maxRetainedUpdatesPerOwner: 256,\n};\n\nconst ParkReason = Schema.Literals([\"exhausted\", \"deadline\", \"status-unavailable\"]);\n\nexport const MessageDeliveryRecord = Schema.Struct({\n schemaVersion: Schema.Literal(1),\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n envelopeDigest: Digest,\n /** Same-owner predecessor whose admission must be known before this message is submitted. */\n predecessor: Schema.optionalKey(IdempotencyKey),\n createdAtMillis: ScheduleInstant,\n /** Immutable creation identity; explicit recovery only renews deadlineAtMillis. */\n initialDeadlineAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n version: Positive,\n status: Schema.Literals([\"pending\", \"accepted\", \"processed\", \"refused\", \"parked\"]),\n receipt: Schema.NullOr(Receipt),\n settlement: Schema.NullOr(Settlement),\n refusal: Schema.NullOr(BoundedName),\n parkReason: Schema.NullOr(ParkReason),\n leaseUntilMillis: Schema.NullOr(ScheduleInstant),\n retry: ScheduleRetry,\n /** Last failed admission/status check, retained across retries and successful recovery. */\n lastFailureDiagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n}).check(\n Schema.makeFilter(\n (record) =>\n record.deadlineAtMillis > record.createdAtMillis &&\n record.initialDeadlineAtMillis > record.createdAtMillis &&\n record.predecessor !== record.key.messageId &&\n (record.status === \"processed\") === (record.settlement !== null) &&\n (record.status === \"refused\") === (record.refusal !== null) &&\n (record.status === \"parked\") === (record.parkReason !== null) &&\n (record.status === \"parked\") === record.retry.parked &&\n (record.status === \"accepted\" || record.status === \"processed\"\n ? record.receipt !== null\n : true) &&\n (record.status === \"pending\" || record.status === \"refused\"\n ? record.receipt === null\n : true) &&\n (record.receipt === null || record.receipt.threadId === record.envelope.threadId) &&\n (record.settlement === null ||\n (record.settlement.receiptId === record.receipt?.receiptId &&\n record.settlement.submissionId === record.receipt.submissionId)) &&\n (record.status === \"processed\" || record.status === \"refused\" || record.status === \"parked\"\n ? record.leaseUntilMillis === null\n : true),\n ),\n);\n\nexport type MessageDeliveryRecord = typeof MessageDeliveryRecord.Type;\n\nexport class MessageDeliveryError extends Schema.TaggedError<MessageDeliveryError>()(\n \"MessageDeliveryError\",\n {\n cause: Schema.optionalKey(FailureDiagnostic.Value),\n stack: Schema.optionalKey(Schema.String),\n reason: Schema.Literals([\n \"validation\",\n \"conflict\",\n \"capacity\",\n \"not-found\",\n \"storage\",\n \"corrupt\",\n ]),\n operation: Schema.String,\n },\n) {}\n\nexport class MessageDeliveryFailpointError extends Schema.TaggedError<MessageDeliveryFailpointError>()(\n \"MessageDeliveryFailpointError\",\n {\n point: Schema.String,\n },\n) {}\n\nexport type MessageDeliveryFailure = MessageDeliveryError | MessageDeliveryFailpointError;\n\nexport const MessageDeliveryFailpoint = Context.Reference<{\n readonly hit: (point: string) => Effect.Effect<void, MessageDeliveryFailpointError>;\n}>(\"@effect-agent/thread/MessageDeliveryFailpoint\", {\n defaultValue: () => ({ hit: () => Effect.void }),\n});\n\nconst fence = { expectedVersion: Positive, nowMillis: ScheduleInstant };\n\nexport const MessageDeliveryChange = Schema.Union([\n Schema.Struct({ _tag: Schema.Literal(\"Claim\"), ...fence }),\n Schema.Struct({ _tag: Schema.Literal(\"Accept\"), ...fence, receipt: Receipt }),\n Schema.Struct({ _tag: Schema.Literal(\"Process\"), ...fence, settlement: Settlement }),\n Schema.Struct({ _tag: Schema.Literal(\"ObservePending\"), ...fence }),\n Schema.Struct({\n _tag: Schema.Literal(\"Refuse\"),\n ...fence,\n code: BoundedName,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"Retry\"),\n ...fence,\n reason: ScheduleRetryReason,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"Park\"),\n ...fence,\n reason: ParkReason,\n diagnostic: Schema.optionalKey(FailureDiagnostic.Diagnostic),\n }),\n Schema.Struct({ _tag: Schema.Literal(\"Recover\"), ...fence, deadlineAtMillis: ScheduleInstant }),\n /** Waiting for earlier admission never spends an automatic transport attempt. */\n Schema.Struct({ _tag: Schema.Literal(\"Defer\"), ...fence, untilMillis: ScheduleInstant }),\n]);\n\nexport type MessageDeliveryChange = typeof MessageDeliveryChange.Type;\n\n/** Select one native index per page; index filters cannot be combined. */\nexport const MessageDeliveryPageRequest = Schema.Struct({\n ownerThreadId: ThreadId,\n limit: Positive.check(Schema.isLessThanOrEqualTo(4096)),\n after: Schema.optionalKey(IdempotencyKey),\n /** Native pending index, including accepted, future-due and parked obligations. */\n pendingOnly: Schema.optionalKey(Schema.Boolean),\n /** First retained envelopes, including starts not admitted at the destination. */\n workerStarts: Schema.optionalKey(\n Schema.Struct({ delegationId: DelegationId, targetAgentId: AgentId }),\n ),\n /** Retained inputs not yet acknowledged by one destination worker. */\n pendingWorker: Schema.optionalKey(ThreadId),\n}).check(\n Schema.makeFilter(\n (request) =>\n Number(request.pendingOnly === true) +\n Number(request.workerStarts !== undefined) +\n Number(request.pendingWorker !== undefined) <=\n 1,\n ),\n);\n\nexport type MessageDeliveryPageRequest = typeof MessageDeliveryPageRequest.Type;\n\nexport const MessageDeliveryPage = Schema.Struct({\n items: Schema.Array(MessageDeliveryRecord),\n next: Schema.NullOr(IdempotencyKey),\n});\n\nexport type MessageDeliveryPage = typeof MessageDeliveryPage.Type;\n\n/**\n * Trusted host port, independent of either Thread's active Submission. List/get require an owner.\n * Inserts and changes are atomic; identical inserts return current state even after completion.\n * No automatic deletion: completed rows retain deduplication evidence and count toward retention.\n * `due`/`nextDeadline` are bounded host recovery seams, never model-facing management operations.\n */\nexport class MessageDeliveryStore extends Context.Service<\n MessageDeliveryStore,\n {\n readonly limits: MessageDeliveryStoreLimits;\n readonly maxStoredValueBytes: number;\n readonly insert: (\n record: MessageDeliveryRecord,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly get: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord | null, MessageDeliveryError>;\n readonly list: (\n request: MessageDeliveryPageRequest,\n ) => Effect.Effect<MessageDeliveryPage, MessageDeliveryError>;\n readonly change: (\n key: MessageDeliveryKey,\n change: MessageDeliveryChange,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly due: (\n nowMillis: number,\n limit: number,\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryKey>, MessageDeliveryError>;\n readonly nextDeadline: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<number | null, MessageDeliveryError>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryStore\") {}\n\n/**\n * Read current source-owned obligations without acquiring a runtime or scanning completed history.\n * A retained receipt is native accepted-admission evidence, not proof of destination materialization.\n * Shipped worker admission reserves the source input before returning that receipt. Policy can\n * therefore leave accepted worker discovery to canonical outstanding inputs; a no-receipt action\n * delivery remains uncertain, including when parked or due in the future.\n */\nexport const readPending = Effect.fn(\"MessageDelivery.readPending\")(function* (\n request: Pick<MessageDeliveryPageRequest, \"ownerThreadId\" | \"limit\">,\n) {\n const store = yield* MessageDeliveryStore;\n\n const input = yield* validateMessageDelivery(\n MessageDeliveryPageRequest,\n {\n ownerThreadId: request.ownerThreadId,\n limit: request.limit,\n pendingOnly: true,\n },\n \"read-pending\",\n );\n\n const page = yield* validateMessageDelivery(\n MessageDeliveryPage,\n yield* store.list(input),\n \"read-pending result\",\n );\n\n if (page.next !== null || page.items.length > input.limit)\n return yield* MessageDeliveryError.make({ reason: \"capacity\", operation: \"read-pending\" });\n const records = page.items;\n\n if (\n records.some(\n (record) =>\n record.key.ownerThreadId !== input.ownerThreadId || !messageDeliveryUsesCapacity(record),\n ) ||\n new Set(records.map((record) => record.key.messageId)).size !== records.length\n )\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"read-pending result\",\n });\n\n return records;\n});\n\nexport const messageDeliveryKeyString = (key: MessageDeliveryKey): string =>\n JSON.stringify([key.ownerThreadId, key.messageId]);\n\nexport const messageDeliveryUsesCapacity = (record: MessageDeliveryRecord): boolean =>\n record.status !== \"processed\" && record.status !== \"refused\";\n\nexport const isWorkerUpdateDelivery = (record: MessageDeliveryRecord): boolean =>\n Schema.is(WorkerUpdate)(record.envelope.messageAdmission);\n\nexport const messageDeliveryCapacity = (limits: MessageDeliveryStoreLimits, update: boolean) => ({\n pending: update ? (limits.maxPendingUpdatesPerOwner ?? 32) : limits.maxPendingPerOwner,\n retained: update ? (limits.maxRetainedUpdatesPerOwner ?? 256) : limits.maxRetainedPerOwner,\n});\n\nexport const messageDeliveryDeadline = (record: MessageDeliveryRecord): number | null =>\n record.status === \"pending\" || record.status === \"accepted\"\n ? Math.min(record.deadlineAtMillis, record.leaseUntilMillis ?? record.retry.nextAttemptAtMillis)\n : null;\n\n/** Creation identity deliberately excludes operational counters and renewed recovery deadlines. */\nexport const sameMessageDeliveryIdentity = (\n left: MessageDeliveryRecord,\n right: MessageDeliveryRecord,\n): boolean =>\n messageDeliveryKeyString(left.key) === messageDeliveryKeyString(right.key) &&\n left.envelopeDigest === right.envelopeDigest &&\n left.predecessor === right.predecessor &&\n Schema.toEquivalence(PreparedInput)(left.envelope, right.envelope) &&\n Schema.toEquivalence(MessageDeliveryPolicy)(left.policy, right.policy) &&\n left.createdAtMillis === right.createdAtMillis &&\n left.initialDeadlineAtMillis === right.initialDeadlineAtMillis;\n\nconst error = (reason: MessageDeliveryError[\"reason\"], operation: string, cause?: unknown) =>\n MessageDeliveryError.make({ reason, operation, ...(cause === undefined ? {} : { cause }) });\n\nexport const validateMessageDelivery = <A, I>(\n schema: Schema.Codec<A, I>,\n value: unknown,\n operation: string,\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError(() => error(\"validation\", operation)),\n );\n\nconst MessageDeliveryPreparation = Schema.Struct({\n key: MessageDeliveryKey,\n envelope: PreparedInput,\n createdAtMillis: ScheduleInstant,\n deadlineAtMillis: ScheduleInstant,\n policy: MessageDeliveryPolicy,\n predecessor: Schema.optionalKey(IdempotencyKey),\n});\n\n/** Freeze and digest the complete admission envelope before publishing the obligation. */\nexport const prepareMessageDelivery = Effect.fn(\"MessageDelivery.prepare\")(function* (options: {\n readonly key: MessageDeliveryKey;\n readonly envelope: PreparedInput;\n readonly createdAtMillis: number;\n readonly deadlineAtMillis: number;\n readonly policy?: MessageDeliveryPolicy;\n readonly predecessor?: IdempotencyKey;\n}): Effect.fn.Return<MessageDeliveryRecord, MessageDeliveryError, Crypto.Crypto> {\n // JSON detaches every caller-owned value before Crypto can suspend preparation.\n const snapshot = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))({\n ...options,\n policy: options.policy ?? defaultMessageDeliveryPolicy,\n }).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(MessageDeliveryPreparation))),\n Effect.mapError((cause) => error(\"validation\", \"prepare\", cause)),\n );\n\n const envelope = snapshot.envelope;\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError((cause) => error(\"validation\", \"prepare\", cause)),\n );\n\n const inputDigest = yield* digestJson(encoded.input).pipe(\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n if (inputDigest !== envelope.inputDigest) return yield* error(\"corrupt\", \"input-digest\");\n\n const envelopeDigest = yield* digestJson(encoded).pipe(\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n return yield* validateMessageDelivery(\n MessageDeliveryRecord,\n {\n schemaVersion: 1,\n key: snapshot.key,\n envelope,\n envelopeDigest,\n ...(snapshot.predecessor === undefined ? {} : { predecessor: snapshot.predecessor }),\n createdAtMillis: snapshot.createdAtMillis,\n initialDeadlineAtMillis: snapshot.deadlineAtMillis,\n deadlineAtMillis: snapshot.deadlineAtMillis,\n policy: snapshot.policy,\n version: 1,\n status: \"pending\",\n receipt: null,\n settlement: null,\n refusal: null,\n parkReason: null,\n leaseUntilMillis: null,\n retry: {\n attempts: 0,\n generation: 0,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: snapshot.createdAtMillis,\n lastAttemptAtMillis: null,\n lastFailure: null,\n },\n },\n \"prepare\",\n );\n});\n\n/** Pure reducer used under the adapter's atomic compare-and-swap boundary. */\nexport const applyMessageDeliveryChange = (\n record: MessageDeliveryRecord,\n change: MessageDeliveryChange,\n): Result.Result<MessageDeliveryRecord, MessageDeliveryError> => {\n const conflict = () => Result.fail(error(\"conflict\", change._tag));\n\n if (record.version !== change.expectedVersion) return conflict();\n if (record.status === \"processed\" || record.status === \"refused\") return conflict();\n const now = change.nowMillis;\n\n const base = {\n ...record,\n version: record.version + 1,\n ...(\"diagnostic\" in change && change.diagnostic !== undefined\n ? { lastFailureDiagnostic: change.diagnostic }\n : {}),\n };\n\n const parked = (reason: typeof ParkReason.Type): MessageDeliveryRecord => ({\n ...base,\n status: \"parked\",\n parkReason: reason,\n leaseUntilMillis: null,\n retry: { ...record.retry, parked: true },\n });\n\n if (change._tag === \"Defer\") {\n if (\n record.status !== \"pending\" ||\n (record.leaseUntilMillis !== null && record.leaseUntilMillis > now)\n )\n return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (change.untilMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(change.untilMillis, record.deadlineAtMillis),\n },\n });\n }\n\n if (change._tag === \"Recover\") {\n if (record.status !== \"parked\" || change.deadlineAtMillis <= now) return conflict();\n\n return Result.succeed({\n ...base,\n deadlineAtMillis: change.deadlineAtMillis,\n status: record.receipt === null ? \"pending\" : \"accepted\",\n parkReason: null,\n retry: {\n ...record.retry,\n generation: record.retry.generation + 1,\n automaticAttempts: 0,\n parked: false,\n nextAttemptAtMillis: now,\n },\n });\n }\n if (record.status === \"parked\") return conflict();\n if (change._tag === \"Park\") return Result.succeed(parked(change.reason));\n if (change._tag === \"Claim\") {\n const due = messageDeliveryDeadline(record);\n\n if (due === null || due > now) return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: Math.min(now + record.policy.attemptTimeoutMillis, record.deadlineAtMillis),\n retry: {\n ...record.retry,\n attempts: record.retry.attempts + 1,\n automaticAttempts: record.retry.automaticAttempts + 1,\n lastAttemptAtMillis: now,\n },\n });\n }\n if (record.leaseUntilMillis === null || now > record.leaseUntilMillis) return conflict();\n if (change._tag === \"Accept\") {\n if (record.status !== \"pending\") return conflict();\n if (change.receipt.threadId !== record.envelope.threadId)\n return Result.fail(error(\"corrupt\", \"receipt-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"accepted\",\n receipt: change.receipt,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n lastFailure: null,\n },\n });\n }\n if (change._tag === \"Process\") {\n if (record.status !== \"accepted\") return conflict();\n if (\n change.settlement.submissionId !== record.receipt?.submissionId ||\n change.settlement.receiptId !== record.receipt.receiptId\n )\n return Result.fail(error(\"corrupt\", \"settlement-identity\"));\n\n return Result.succeed({\n ...base,\n status: \"processed\",\n settlement: change.settlement,\n leaseUntilMillis: null,\n });\n }\n if (change._tag === \"ObservePending\") {\n if (record.status !== \"accepted\") return conflict();\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n automaticAttempts: 0,\n lastFailure: null,\n nextAttemptAtMillis: Math.min(\n now + record.policy.settlementPollMillis,\n record.deadlineAtMillis,\n ),\n },\n });\n }\n if (change._tag === \"Refuse\") {\n if (record.status !== \"pending\") return conflict();\n\n return Result.succeed({\n ...base,\n status: \"refused\",\n refusal: change.code,\n leaseUntilMillis: null,\n });\n }\n if (now >= record.deadlineAtMillis) return Result.succeed(parked(\"deadline\"));\n if (record.retry.automaticAttempts >= record.policy.maxAutomaticAttempts)\n return Result.succeed(parked(\"exhausted\"));\n\n const delay = Math.min(\n record.policy.retryBaseMillis * 2 ** Math.min(record.retry.automaticAttempts - 1, 52),\n record.policy.retryMaxMillis,\n );\n\n return Result.succeed({\n ...base,\n leaseUntilMillis: null,\n retry: {\n ...record.retry,\n nextAttemptAtMillis: Math.min(\n now + (record.status === \"accepted\" ? record.policy.settlementPollMillis : delay),\n record.deadlineAtMillis,\n ),\n lastFailure: change.reason,\n },\n });\n};\n\nexport const MessageDeliveryDriverLimits = Schema.Struct({\n batchSize: Positive.check(Schema.isLessThanOrEqualTo(100)),\n concurrency: Positive.check(Schema.isLessThanOrEqualTo(32)),\n});\n\nexport type MessageDeliveryDriverLimits = typeof MessageDeliveryDriverLimits.Type;\n\n/**\n * Finite, structured host pump. The host owns its Scope and wakes it from nextDeadline even\n * after source/receiver settlement. Failed or interrupted calls retain their expiring claim;\n * no ordinary tool is replayed here, only idempotent PreparedInput admission/status lookup.\n * Spans expose operation names; envelopes, principals, and message contents are never logged.\n */\nexport class MessageDeliveryDriver extends Context.Service<\n MessageDeliveryDriver,\n {\n readonly process: (\n key: MessageDeliveryKey,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n readonly runDue: (\n ownerThreadId?: ThreadId,\n ) => Effect.Effect<ReadonlyArray<MessageDeliveryRecord>, MessageDeliveryFailure>;\n readonly retry: (\n key: MessageDeliveryKey,\n expectedVersion: number,\n deadlineAtMillis: number,\n ) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;\n }\n>()(\"@effect-agent/thread/MessageDeliveryDriver\") {\n static layer(\n limits: MessageDeliveryDriverLimits = { batchSize: 100, concurrency: 4 },\n ): Layer.Layer<\n MessageDeliveryDriver,\n MessageDeliveryError,\n MessageDeliveryStore | PreparedInputAdmission | Crypto.Crypto\n > {\n return Layer.effect(\n MessageDeliveryDriver,\n Effect.gen(function* () {\n const config = yield* validateMessageDelivery(\n MessageDeliveryDriverLimits,\n limits,\n \"driver-limits\",\n );\n\n const store = yield* MessageDeliveryStore;\n const admission = yield* PreparedInputAdmission;\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* MessageDeliveryFailpoint;\n const semaphore = yield* Semaphore.make(config.concurrency);\n\n const process = Effect.fn(\"MessageDelivery.process\")((key: MessageDeliveryKey) =>\n semaphore\n .withPermit(\n Effect.gen(function* () {\n const current = yield* store.get(key);\n\n if (current === null) return yield* error(\"not-found\", \"process\");\n const nowMillis = yield* Clock.currentTimeMillis;\n const due = messageDeliveryDeadline(current);\n\n if (due === null || due > nowMillis) return current;\n\n if (current.status === \"pending\" && current.predecessor !== undefined) {\n const previous = yield* store.get({\n ownerThreadId: key.ownerThreadId,\n messageId: current.predecessor,\n });\n\n if (\n previous === null ||\n (previous.receipt === null && previous.status !== \"refused\")\n ) {\n return yield* store.change(key, {\n _tag: \"Defer\",\n expectedVersion: current.version,\n nowMillis,\n untilMillis: nowMillis + current.policy.settlementPollMillis,\n });\n }\n }\n\n const claimed = yield* store.change(key, {\n _tag: \"Claim\",\n expectedVersion: current.version,\n nowMillis,\n });\n\n if (claimed.status === \"parked\") return claimed;\n\n const envelope = yield* Schema.encodeEffect(PreparedInput)(claimed.envelope).pipe(\n Effect.mapError((cause) => error(\"corrupt\", \"envelope\", cause)),\n );\n\n const digest = yield* digestJson(envelope).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError((cause) => error(\"storage\", \"digest\", cause)),\n );\n\n if (digest !== claimed.envelopeDigest)\n return yield* error(\"corrupt\", \"envelope-digest\");\n\n const timeout = Math.min(\n claimed.policy.attemptTimeoutMillis,\n (claimed.leaseUntilMillis ?? claimed.deadlineAtMillis) -\n (yield* Clock.currentTimeMillis),\n );\n\n // Digest computation cannot extend this claim's admission authority.\n if (timeout <= 0) return claimed;\n\n type WithoutFence<T> = T extends MessageDeliveryChange\n ? Omit<T, \"expectedVersion\" | \"nowMillis\">\n : never;\n\n const commit = (change: WithoutFence<MessageDeliveryChange>) =>\n Clock.currentTimeMillis.pipe(\n Effect.flatMap((time) =>\n store.change(key, {\n ...change,\n expectedVersion: claimed.version,\n nowMillis: time,\n }),\n ),\n );\n\n if (claimed.status === \"pending\") {\n const outcome = yield* admitPreparedInput(\n admission.submit(claimed.envelope),\n timeout,\n ).pipe(Effect.mapError((cause) => error(\"corrupt\", \"admission\", cause)));\n\n yield* failpoint.hit(\"message-delivery:admission:after\");\n if (outcome._tag === \"Receipt\")\n return yield* commit({ _tag: \"Accept\", receipt: outcome.receipt });\n if (outcome._tag === \"Refused\")\n return yield* commit({\n _tag: \"Refuse\",\n code: outcome.error.code,\n diagnostic: FailureDiagnostic.capture(outcome.error),\n });\n\n return yield* commit({\n _tag: \"Retry\",\n reason: outcome.reason,\n diagnostic: outcome.diagnostic,\n });\n }\n if (claimed.receipt === null) return yield* error(\"corrupt\", \"receipt\");\n if (admission.submissionStatus === undefined)\n return yield* commit({ _tag: \"Park\", reason: \"status-unavailable\" });\n\n const status = yield* admission.submissionStatus(claimed.receipt).pipe(\n Effect.timeout(timeout),\n Effect.map((status) => ({ _tag: \"Status\" as const, status })),\n Effect.catchTag(\"ScheduledInputRetryable\", (failure) =>\n Effect.succeed({\n _tag: \"Retry\" as const,\n reason: failure.reason,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"ScheduledInputRefused\", (failure) =>\n Effect.succeed({\n _tag: \"Unavailable\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"TimeoutError\", (failure) =>\n Effect.succeed({\n _tag: \"Retry\" as const,\n reason: \"timeout\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n }),\n ),\n Effect.catchTag(\"ScheduleStorageError\", (failure) =>\n failure.reason === \"unavailable\"\n ? Effect.succeed({\n _tag: \"Retry\" as const,\n reason: \"storage\" as const,\n diagnostic: FailureDiagnostic.capture(failure),\n })\n : Effect.fail(error(\"corrupt\", \"status\", failure)),\n ),\n );\n\n if (status._tag === \"Unavailable\")\n return yield* commit({\n _tag: \"Park\",\n reason: \"status-unavailable\",\n diagnostic: status.diagnostic,\n });\n if (status._tag === \"Status\" && status.status._tag === \"settled\")\n return yield* commit({ _tag: \"Process\", settlement: status.status.settlement });\n if (status._tag === \"Status\") return yield* commit({ _tag: \"ObservePending\" });\n\n return yield* commit({\n _tag: \"Retry\",\n reason: status.reason,\n diagnostic: status.diagnostic,\n });\n }),\n )\n .pipe(\n Effect.catchTag(\"MessageDeliveryError\", (failure) =>\n failure.reason === \"conflict\"\n ? store.get(key).pipe(\n Effect.filterOrFail(\n (record) => record !== null,\n () => failure,\n ),\n )\n : Effect.fail(failure),\n ),\n ),\n );\n\n return MessageDeliveryDriver.of({\n process,\n runDue: Effect.fn(\"MessageDelivery.runDue\")(function* (ownerThreadId) {\n const keys = yield* store.due(\n yield* Clock.currentTimeMillis,\n config.batchSize,\n ownerThreadId,\n );\n\n return yield* Effect.forEach(keys, process, { concurrency: config.concurrency });\n }),\n retry: Effect.fn(\"MessageDelivery.retry\")(\n function* (key, expectedVersion, deadlineAtMillis) {\n return yield* store.change(key, {\n _tag: \"Recover\",\n expectedVersion,\n deadlineAtMillis,\n nowMillis: yield* Clock.currentTimeMillis,\n });\n },\n ),\n });\n }),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,WAAW,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;AACzD,MAAM,cAAc,OAAO,OAAO,MAAM,OAAO,YAAY,CAAC,GAAG,OAAO,YAAY,GAAG,CAAC;;AAGtF,MAAa,qBAAqB,OAAO,OAAO;CAC9C,eAAe;CACf,WAAW;AACb,CAAC;AAID,MAAa,wBAAwB,OAAO,OAAO;CACjD,sBAAsB,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;CACpE,sBAAsB,SAAS,MAAM,OAAO,oBAAoB,GAAO,CAAC;CACxE,iBAAiB;CACjB,gBAAgB;CAChB,sBAAsB;AACxB,CAAC,CAAC,CAAC,MAAM,OAAO,YAAY,UAAU,MAAM,mBAAmB,MAAM,cAAc,CAAC;AAIpF,MAAa,+BAAsD;CACjE,sBAAsB;CACtB,sBAAsB;CACtB,iBAAiB;CACjB,gBAAgB;CAChB,sBAAsB;AACxB;AAEA,MAAa,6BAA6B,OAAO,OAAO;CACtD,oBAAoB;CACpB,qBAAqB;CACrB,kBAAkB;;CAElB,2BAA2B,OAAO,YAAY,QAAQ;CACtD,4BAA4B,OAAO,YAAY,QAAQ;AACzD,CAAC,CAAC,CAAC,MACD,OAAO,YACJ,UACC,MAAM,sBAAsB,MAAM,wBACjC,MAAM,6BAA6B,QAAQ,MAAM,8BAA8B,IACpF,CACF;AAIA,MAAa,oCAAgE;CAC3E,oBAAoB;CACpB,qBAAqB;CACrB,kBAAkB;CAClB,2BAA2B;CAC3B,4BAA4B;AAC9B;AAEA,MAAM,aAAa,OAAO,SAAS;CAAC;CAAa;CAAY;AAAoB,CAAC;AAElF,MAAa,wBAAwB,OAAO,OAAO;CACjD,eAAe,OAAO,QAAQ,CAAC;CAC/B,KAAK;CACL,UAAU;CACV,gBAAgB;;CAEhB,aAAa,OAAO,YAAY,cAAc;CAC9C,iBAAiB;;CAEjB,yBAAyB;CACzB,kBAAkB;CAClB,QAAQ;CACR,SAAS;CACT,QAAQ,OAAO,SAAS;EAAC;EAAW;EAAY;EAAa;EAAW;CAAQ,CAAC;CACjF,SAAS,OAAO,OAAO,OAAO;CAC9B,YAAY,OAAO,OAAO,UAAU;CACpC,SAAS,OAAO,OAAO,WAAW;CAClC,YAAY,OAAO,OAAO,UAAU;CACpC,kBAAkB,OAAO,OAAO,eAAe;CAC/C,OAAO;;CAEP,uBAAuB,OAAO,YAAYA,UAA4B;AACxE,CAAC,CAAC,CAAC,MACD,OAAO,YACJ,WACC,OAAO,mBAAmB,OAAO,mBACjC,OAAO,0BAA0B,OAAO,mBACxC,OAAO,gBAAgB,OAAO,IAAI,aACjC,OAAO,WAAW,iBAAkB,OAAO,eAAe,SAC1D,OAAO,WAAW,eAAgB,OAAO,YAAY,SACrD,OAAO,WAAW,cAAe,OAAO,eAAe,SACvD,OAAO,WAAW,aAAc,OAAO,MAAM,WAC7C,OAAO,WAAW,cAAc,OAAO,WAAW,cAC/C,OAAO,YAAY,OACnB,UACH,OAAO,WAAW,aAAa,OAAO,WAAW,YAC9C,OAAO,YAAY,OACnB,UACH,OAAO,YAAY,QAAQ,OAAO,QAAQ,aAAa,OAAO,SAAS,cACvE,OAAO,eAAe,QACpB,OAAO,WAAW,cAAc,OAAO,SAAS,aAC/C,OAAO,WAAW,iBAAiB,OAAO,QAAQ,kBACrD,OAAO,WAAW,eAAe,OAAO,WAAW,aAAa,OAAO,WAAW,WAC/E,OAAO,qBAAqB,OAC5B,KACR,CACF;AAIA,IAAa,uBAAb,cAA0C,OAAO,YAAkC,CAAC,CAClF,wBACA;CACE,OAAO,OAAO,YAAYC,KAAuB;CACjD,OAAO,OAAO,YAAY,OAAO,MAAM;CACvC,QAAQ,OAAO,SAAS;EACtB;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,WAAW,OAAO;AACpB,CACF,CAAC,CAAC,CAAC;AAEH,IAAa,gCAAb,cAAmD,OAAO,YAA2C,CAAC,CACpG,iCACA,EACE,OAAO,OAAO,OAChB,CACF,CAAC,CAAC,CAAC;AAIH,MAAa,2BAA2B,QAAQ,UAE7C,iDAAiD,EAClD,qBAAqB,EAAE,WAAW,OAAO,KAAK,GAChD,CAAC;AAED,MAAM,QAAQ;CAAE,iBAAiB;CAAU,WAAW;AAAgB;AAEtE,MAAa,wBAAwB,OAAO,MAAM;CAChD,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,OAAO;EAAG,GAAG;CAAM,CAAC;CACzD,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,QAAQ;EAAG,GAAG;EAAO,SAAS;CAAQ,CAAC;CAC5E,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,SAAS;EAAG,GAAG;EAAO,YAAY;CAAW,CAAC;CACnF,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,gBAAgB;EAAG,GAAG;CAAM,CAAC;CAClE,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,QAAQ;EAC7B,GAAG;EACH,MAAM;EACN,YAAY,OAAO,YAAYD,UAA4B;CAC7D,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,OAAO;EAC5B,GAAG;EACH,QAAQ;EACR,YAAY,OAAO,YAAYA,UAA4B;CAC7D,CAAC;CACD,OAAO,OAAO;EACZ,MAAM,OAAO,QAAQ,MAAM;EAC3B,GAAG;EACH,QAAQ;EACR,YAAY,OAAO,YAAYA,UAA4B;CAC7D,CAAC;CACD,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,SAAS;EAAG,GAAG;EAAO,kBAAkB;CAAgB,CAAC;CAE9F,OAAO,OAAO;EAAE,MAAM,OAAO,QAAQ,OAAO;EAAG,GAAG;EAAO,aAAa;CAAgB,CAAC;AACzF,CAAC;;AAKD,MAAa,6BAA6B,OAAO,OAAO;CACtD,eAAe;CACf,OAAO,SAAS,MAAM,OAAO,oBAAoB,IAAI,CAAC;CACtD,OAAO,OAAO,YAAY,cAAc;;CAExC,aAAa,OAAO,YAAY,OAAO,OAAO;;CAE9C,cAAc,OAAO,YACnB,OAAO,OAAO;EAAE,cAAc;EAAc,eAAe;CAAQ,CAAC,CACtE;;CAEA,eAAe,OAAO,YAAY,QAAQ;AAC5C,CAAC,CAAC,CAAC,MACD,OAAO,YACJ,YACC,OAAO,QAAQ,gBAAgB,IAAI,IACjC,OAAO,QAAQ,iBAAiB,KAAA,CAAS,IACzC,OAAO,QAAQ,kBAAkB,KAAA,CAAS,KAC5C,CACJ,CACF;AAIA,MAAa,sBAAsB,OAAO,OAAO;CAC/C,OAAO,OAAO,MAAM,qBAAqB;CACzC,MAAM,OAAO,OAAO,cAAc;AACpC,CAAC;;;;;;;AAUD,IAAa,uBAAb,cAA0C,QAAQ,QA2BhD,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC;;;;;;;;AASlD,MAAa,cAAc,OAAO,GAAG,6BAA6B,CAAC,CAAC,WAClE,SACA;CACA,MAAM,QAAQ,OAAO;CAErB,MAAM,QAAQ,OAAO,wBACnB,4BACA;EACE,eAAe,QAAQ;EACvB,OAAO,QAAQ;EACf,aAAa;CACf,GACA,cACF;CAEA,MAAM,OAAO,OAAO,wBAClB,qBACA,OAAO,MAAM,KAAK,KAAK,GACvB,qBACF;CAEA,IAAI,KAAK,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,OAClD,OAAO,OAAO,qBAAqB,KAAK;EAAE,QAAQ;EAAY,WAAW;CAAe,CAAC;CAC3F,MAAM,UAAU,KAAK;CAErB,IACE,QAAQ,MACL,WACC,OAAO,IAAI,kBAAkB,MAAM,iBAAiB,CAAC,4BAA4B,MAAM,CAC3F,KACA,IAAI,IAAI,QAAQ,KAAK,WAAW,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,QAAQ,QAExE,OAAO,OAAO,qBAAqB,KAAK;EACtC,QAAQ;EACR,WAAW;CACb,CAAC;CAEH,OAAO;AACT,CAAC;AAED,MAAa,4BAA4B,QACvC,KAAK,UAAU,CAAC,IAAI,eAAe,IAAI,SAAS,CAAC;AAEnD,MAAa,+BAA+B,WAC1C,OAAO,WAAW,eAAe,OAAO,WAAW;AAErD,MAAa,0BAA0B,WACrC,OAAO,GAAG,YAAY,CAAC,CAAC,OAAO,SAAS,gBAAgB;AAE1D,MAAa,2BAA2B,QAAoC,YAAqB;CAC/F,SAAS,SAAU,OAAO,6BAA6B,KAAM,OAAO;CACpE,UAAU,SAAU,OAAO,8BAA8B,MAAO,OAAO;AACzE;AAEA,MAAa,2BAA2B,WACtC,OAAO,WAAW,aAAa,OAAO,WAAW,aAC7C,KAAK,IAAI,OAAO,kBAAkB,OAAO,oBAAoB,OAAO,MAAM,mBAAmB,IAC7F;;AAGN,MAAa,+BACX,MACA,UAEA,yBAAyB,KAAK,GAAG,MAAM,yBAAyB,MAAM,GAAG,KACzE,KAAK,mBAAmB,MAAM,kBAC9B,KAAK,gBAAgB,MAAM,eAC3B,OAAO,cAAc,aAAa,CAAC,CAAC,KAAK,UAAU,MAAM,QAAQ,KACjE,OAAO,cAAc,qBAAqB,CAAC,CAAC,KAAK,QAAQ,MAAM,MAAM,KACrE,KAAK,oBAAoB,MAAM,mBAC/B,KAAK,4BAA4B,MAAM;AAEzC,MAAM,SAAS,QAAwC,WAAmB,UACxE,qBAAqB,KAAK;CAAE;CAAQ;CAAW,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;AAAG,CAAC;AAE5F,MAAa,2BACX,QACA,OACA,cAEA,OAAO,oBAAoB,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KACvD,OAAO,eAAe,MAAM,cAAc,SAAS,CAAC,CACtD;AAEF,MAAM,6BAA6B,OAAO,OAAO;CAC/C,KAAK;CACL,UAAU;CACV,iBAAiB;CACjB,kBAAkB;CAClB,QAAQ;CACR,aAAa,OAAO,YAAY,cAAc;AAChD,CAAC;;AAGD,MAAa,yBAAyB,OAAO,GAAG,yBAAyB,CAAC,CAAC,WAAW,SAOL;CAE/E,MAAM,WAAW,OAAO,OAAO,aAAa,OAAO,eAAe,0BAA0B,CAAC,CAAC,CAAC;EAC7F,GAAG;EACH,QAAQ,QAAQ,UAAU;CAC5B,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,OAAO,aAAa,OAAO,eAAe,0BAA0B,CAAC,CAAC,GACrF,OAAO,UAAU,UAAU,MAAM,cAAc,WAAW,KAAK,CAAC,CAClE;CAEA,MAAM,WAAW,SAAS;CAE1B,MAAM,UAAU,OAAO,OAAO,aAAa,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,KAClE,OAAO,UAAU,UAAU,MAAM,cAAc,WAAW,KAAK,CAAC,CAClE;CAMA,KAAI,OAJuB,WAAW,QAAQ,KAAK,CAAC,CAAC,KACnD,OAAO,UAAU,UAAU,MAAM,WAAW,UAAU,KAAK,CAAC,CAC9D,OAEoB,SAAS,aAAa,OAAO,OAAO,MAAM,WAAW,cAAc;CAEvF,MAAM,iBAAiB,OAAO,WAAW,OAAO,CAAC,CAAC,KAChD,OAAO,UAAU,UAAU,MAAM,WAAW,UAAU,KAAK,CAAC,CAC9D;CAEA,OAAO,OAAO,wBACZ,uBACA;EACE,eAAe;EACf,KAAK,SAAS;EACd;EACA;EACA,GAAI,SAAS,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,SAAS,YAAY;EAClF,iBAAiB,SAAS;EAC1B,yBAAyB,SAAS;EAClC,kBAAkB,SAAS;EAC3B,QAAQ,SAAS;EACjB,SAAS;EACT,QAAQ;EACR,SAAS;EACT,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,kBAAkB;EAClB,OAAO;GACL,UAAU;GACV,YAAY;GACZ,mBAAmB;GACnB,QAAQ;GACR,qBAAqB,SAAS;GAC9B,qBAAqB;GACrB,aAAa;EACf;CACF,GACA,SACF;AACF,CAAC;;AAGD,MAAa,8BACX,QACA,WAC+D;CAC/D,MAAM,iBAAiB,OAAO,KAAK,MAAM,YAAY,OAAO,IAAI,CAAC;CAEjE,IAAI,OAAO,YAAY,OAAO,iBAAiB,OAAO,SAAS;CAC/D,IAAI,OAAO,WAAW,eAAe,OAAO,WAAW,WAAW,OAAO,SAAS;CAClF,MAAM,MAAM,OAAO;CAEnB,MAAM,OAAO;EACX,GAAG;EACH,SAAS,OAAO,UAAU;EAC1B,GAAI,gBAAgB,UAAU,OAAO,eAAe,KAAA,IAChD,EAAE,uBAAuB,OAAO,WAAW,IAC3C,CAAC;CACP;CAEA,MAAM,UAAU,YAA2D;EACzE,GAAG;EACH,QAAQ;EACR,YAAY;EACZ,kBAAkB;EAClB,OAAO;GAAE,GAAG,OAAO;GAAO,QAAQ;EAAK;CACzC;CAEA,IAAI,OAAO,SAAS,SAAS;EAC3B,IACE,OAAO,WAAW,aACjB,OAAO,qBAAqB,QAAQ,OAAO,mBAAmB,KAE/D,OAAO,SAAS;EAClB,IAAI,OAAO,OAAO,kBAAkB,OAAO,OAAO,QAAQ,OAAO,UAAU,CAAC;EAC5E,IAAI,OAAO,eAAe,KAAK,OAAO,SAAS;EAE/C,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,kBAAkB;GAClB,OAAO;IACL,GAAG,OAAO;IACV,qBAAqB,KAAK,IAAI,OAAO,aAAa,OAAO,gBAAgB;GAC3E;EACF,CAAC;CACH;CAEA,IAAI,OAAO,SAAS,WAAW;EAC7B,IAAI,OAAO,WAAW,YAAY,OAAO,oBAAoB,KAAK,OAAO,SAAS;EAElF,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,kBAAkB,OAAO;GACzB,QAAQ,OAAO,YAAY,OAAO,YAAY;GAC9C,YAAY;GACZ,OAAO;IACL,GAAG,OAAO;IACV,YAAY,OAAO,MAAM,aAAa;IACtC,mBAAmB;IACnB,QAAQ;IACR,qBAAqB;GACvB;EACF,CAAC;CACH;CACA,IAAI,OAAO,WAAW,UAAU,OAAO,SAAS;CAChD,IAAI,OAAO,SAAS,QAAQ,OAAO,OAAO,QAAQ,OAAO,OAAO,MAAM,CAAC;CACvE,IAAI,OAAO,SAAS,SAAS;EAC3B,MAAM,MAAM,wBAAwB,MAAM;EAE1C,IAAI,QAAQ,QAAQ,MAAM,KAAK,OAAO,SAAS;EAC/C,IAAI,OAAO,OAAO,kBAAkB,OAAO,OAAO,QAAQ,OAAO,UAAU,CAAC;EAC5E,IAAI,OAAO,MAAM,qBAAqB,OAAO,OAAO,sBAClD,OAAO,OAAO,QAAQ,OAAO,WAAW,CAAC;EAE3C,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,kBAAkB,KAAK,IAAI,MAAM,OAAO,OAAO,sBAAsB,OAAO,gBAAgB;GAC5F,OAAO;IACL,GAAG,OAAO;IACV,UAAU,OAAO,MAAM,WAAW;IAClC,mBAAmB,OAAO,MAAM,oBAAoB;IACpD,qBAAqB;GACvB;EACF,CAAC;CACH;CACA,IAAI,OAAO,qBAAqB,QAAQ,MAAM,OAAO,kBAAkB,OAAO,SAAS;CACvF,IAAI,OAAO,SAAS,UAAU;EAC5B,IAAI,OAAO,WAAW,WAAW,OAAO,SAAS;EACjD,IAAI,OAAO,QAAQ,aAAa,OAAO,SAAS,UAC9C,OAAO,OAAO,KAAK,MAAM,WAAW,kBAAkB,CAAC;EAEzD,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,QAAQ;GACR,SAAS,OAAO;GAChB,kBAAkB;GAClB,OAAO;IACL,GAAG,OAAO;IACV,mBAAmB;IACnB,qBAAqB,KAAK,IACxB,MAAM,OAAO,OAAO,sBACpB,OAAO,gBACT;IACA,aAAa;GACf;EACF,CAAC;CACH;CACA,IAAI,OAAO,SAAS,WAAW;EAC7B,IAAI,OAAO,WAAW,YAAY,OAAO,SAAS;EAClD,IACE,OAAO,WAAW,iBAAiB,OAAO,SAAS,gBACnD,OAAO,WAAW,cAAc,OAAO,QAAQ,WAE/C,OAAO,OAAO,KAAK,MAAM,WAAW,qBAAqB,CAAC;EAE5D,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,QAAQ;GACR,YAAY,OAAO;GACnB,kBAAkB;EACpB,CAAC;CACH;CACA,IAAI,OAAO,SAAS,kBAAkB;EACpC,IAAI,OAAO,WAAW,YAAY,OAAO,SAAS;EAClD,IAAI,OAAO,OAAO,kBAAkB,OAAO,OAAO,QAAQ,OAAO,UAAU,CAAC;EAE5E,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,kBAAkB;GAClB,OAAO;IACL,GAAG,OAAO;IACV,mBAAmB;IACnB,aAAa;IACb,qBAAqB,KAAK,IACxB,MAAM,OAAO,OAAO,sBACpB,OAAO,gBACT;GACF;EACF,CAAC;CACH;CACA,IAAI,OAAO,SAAS,UAAU;EAC5B,IAAI,OAAO,WAAW,WAAW,OAAO,SAAS;EAEjD,OAAO,OAAO,QAAQ;GACpB,GAAG;GACH,QAAQ;GACR,SAAS,OAAO;GAChB,kBAAkB;EACpB,CAAC;CACH;CACA,IAAI,OAAO,OAAO,kBAAkB,OAAO,OAAO,QAAQ,OAAO,UAAU,CAAC;CAC5E,IAAI,OAAO,MAAM,qBAAqB,OAAO,OAAO,sBAClD,OAAO,OAAO,QAAQ,OAAO,WAAW,CAAC;CAE3C,MAAM,QAAQ,KAAK,IACjB,OAAO,OAAO,kBAAkB,KAAK,KAAK,IAAI,OAAO,MAAM,oBAAoB,GAAG,EAAE,GACpF,OAAO,OAAO,cAChB;CAEA,OAAO,OAAO,QAAQ;EACpB,GAAG;EACH,kBAAkB;EAClB,OAAO;GACL,GAAG,OAAO;GACV,qBAAqB,KAAK,IACxB,OAAO,OAAO,WAAW,aAAa,OAAO,OAAO,uBAAuB,QAC3E,OAAO,gBACT;GACA,aAAa,OAAO;EACtB;CACF,CAAC;AACH;AAEA,MAAa,8BAA8B,OAAO,OAAO;CACvD,WAAW,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;CACzD,aAAa,SAAS,MAAM,OAAO,oBAAoB,EAAE,CAAC;AAC5D,CAAC;;;;;;;AAUD,IAAa,wBAAb,MAAa,8BAA8B,QAAQ,QAejD,CAAC,CAAC,4CAA4C,CAAC,CAAC;CAChD,OAAO,MACL,SAAsC;EAAE,WAAW;EAAK,aAAa;CAAE,GAKvE;EACA,OAAO,MAAM,OACX,uBACA,OAAO,IAAI,aAAa;GACtB,MAAM,SAAS,OAAO,wBACpB,6BACA,QACA,eACF;GAEA,MAAM,QAAQ,OAAO;GACrB,MAAM,YAAY,OAAO;GACzB,MAAM,SAAS,OAAO,OAAO;GAC7B,MAAM,YAAY,OAAO;GACzB,MAAM,YAAY,OAAO,UAAU,KAAK,OAAO,WAAW;GAE1D,MAAM,UAAU,OAAO,GAAG,yBAAyB,CAAC,EAAE,QACpD,UACG,WACC,OAAO,IAAI,aAAa;IACtB,MAAM,UAAU,OAAO,MAAM,IAAI,GAAG;IAEpC,IAAI,YAAY,MAAM,OAAO,OAAO,MAAM,aAAa,SAAS;IAChE,MAAM,YAAY,OAAO,MAAM;IAC/B,MAAM,MAAM,wBAAwB,OAAO;IAE3C,IAAI,QAAQ,QAAQ,MAAM,WAAW,OAAO;IAE5C,IAAI,QAAQ,WAAW,aAAa,QAAQ,gBAAgB,KAAA,GAAW;KACrE,MAAM,WAAW,OAAO,MAAM,IAAI;MAChC,eAAe,IAAI;MACnB,WAAW,QAAQ;KACrB,CAAC;KAED,IACE,aAAa,QACZ,SAAS,YAAY,QAAQ,SAAS,WAAW,WAElD,OAAO,OAAO,MAAM,OAAO,KAAK;MAC9B,MAAM;MACN,iBAAiB,QAAQ;MACzB;MACA,aAAa,YAAY,QAAQ,OAAO;KAC1C,CAAC;IAEL;IAEA,MAAM,UAAU,OAAO,MAAM,OAAO,KAAK;KACvC,MAAM;KACN,iBAAiB,QAAQ;KACzB;IACF,CAAC;IAED,IAAI,QAAQ,WAAW,UAAU,OAAO;IAExC,MAAM,WAAW,OAAO,OAAO,aAAa,aAAa,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,KAC3E,OAAO,UAAU,UAAU,MAAM,WAAW,YAAY,KAAK,CAAC,CAChE;IAOA,KAAI,OALkB,WAAW,QAAQ,CAAC,CAAC,KACzC,OAAO,eAAe,OAAO,QAAQ,MAAM,GAC3C,OAAO,UAAU,UAAU,MAAM,WAAW,UAAU,KAAK,CAAC,CAC9D,OAEe,QAAQ,gBACrB,OAAO,OAAO,MAAM,WAAW,iBAAiB;IAElD,MAAM,UAAU,KAAK,IACnB,QAAQ,OAAO,uBACd,QAAQ,oBAAoB,QAAQ,qBAClC,OAAO,MAAM,kBAClB;IAGA,IAAI,WAAW,GAAG,OAAO;IAMzB,MAAM,UAAU,WACd,MAAM,kBAAkB,KACtB,OAAO,SAAS,SACd,MAAM,OAAO,KAAK;KAChB,GAAG;KACH,iBAAiB,QAAQ;KACzB,WAAW;IACb,CAAC,CACH,CACF;IAEF,IAAI,QAAQ,WAAW,WAAW;KAChC,MAAM,UAAU,OAAO,mBACrB,UAAU,OAAO,QAAQ,QAAQ,GACjC,OACF,CAAC,CAAC,KAAK,OAAO,UAAU,UAAU,MAAM,WAAW,aAAa,KAAK,CAAC,CAAC;KAEvE,OAAO,UAAU,IAAI,kCAAkC;KACvD,IAAI,QAAQ,SAAS,WACnB,OAAO,OAAO,OAAO;MAAE,MAAM;MAAU,SAAS,QAAQ;KAAQ,CAAC;KACnE,IAAI,QAAQ,SAAS,WACnB,OAAO,OAAO,OAAO;MACnB,MAAM;MACN,MAAM,QAAQ,MAAM;MACpB,YAAYE,QAA0B,QAAQ,KAAK;KACrD,CAAC;KAEH,OAAO,OAAO,OAAO;MACnB,MAAM;MACN,QAAQ,QAAQ;MAChB,YAAY,QAAQ;KACtB,CAAC;IACH;IACA,IAAI,QAAQ,YAAY,MAAM,OAAO,OAAO,MAAM,WAAW,SAAS;IACtE,IAAI,UAAU,qBAAqB,KAAA,GACjC,OAAO,OAAO,OAAO;KAAE,MAAM;KAAQ,QAAQ;IAAqB,CAAC;IAErE,MAAM,SAAS,OAAO,UAAU,iBAAiB,QAAQ,OAAO,CAAC,CAAC,KAChE,OAAO,QAAQ,OAAO,GACtB,OAAO,KAAK,YAAY;KAAE,MAAM;KAAmB;IAAO,EAAE,GAC5D,OAAO,SAAS,4BAA4B,YAC1C,OAAO,QAAQ;KACb,MAAM;KACN,QAAQ,QAAQ;KAChB,YAAYA,QAA0B,OAAO;IAC/C,CAAC,CACH,GACA,OAAO,SAAS,0BAA0B,YACxC,OAAO,QAAQ;KACb,MAAM;KACN,YAAYA,QAA0B,OAAO;IAC/C,CAAC,CACH,GACA,OAAO,SAAS,iBAAiB,YAC/B,OAAO,QAAQ;KACb,MAAM;KACN,QAAQ;KACR,YAAYA,QAA0B,OAAO;IAC/C,CAAC,CACH,GACA,OAAO,SAAS,yBAAyB,YACvC,QAAQ,WAAW,gBACf,OAAO,QAAQ;KACb,MAAM;KACN,QAAQ;KACR,YAAYA,QAA0B,OAAO;IAC/C,CAAC,IACD,OAAO,KAAK,MAAM,WAAW,UAAU,OAAO,CAAC,CACrD,CACF;IAEA,IAAI,OAAO,SAAS,eAClB,OAAO,OAAO,OAAO;KACnB,MAAM;KACN,QAAQ;KACR,YAAY,OAAO;IACrB,CAAC;IACH,IAAI,OAAO,SAAS,YAAY,OAAO,OAAO,SAAS,WACrD,OAAO,OAAO,OAAO;KAAE,MAAM;KAAW,YAAY,OAAO,OAAO;IAAW,CAAC;IAChF,IAAI,OAAO,SAAS,UAAU,OAAO,OAAO,OAAO,EAAE,MAAM,iBAAiB,CAAC;IAE7E,OAAO,OAAO,OAAO;KACnB,MAAM;KACN,QAAQ,OAAO;KACf,YAAY,OAAO;IACrB,CAAC;GACH,CAAC,CACH,CAAC,CACA,KACC,OAAO,SAAS,yBAAyB,YACvC,QAAQ,WAAW,aACf,MAAM,IAAI,GAAG,CAAC,CAAC,KACb,OAAO,cACJ,WAAW,WAAW,YACjB,OACR,CACF,IACA,OAAO,KAAK,OAAO,CACzB,CACF,CACJ;GAEA,OAAO,sBAAsB,GAAG;IAC9B;IACA,QAAQ,OAAO,GAAG,wBAAwB,CAAC,CAAC,WAAW,eAAe;KACpE,MAAM,OAAO,OAAO,MAAM,IACxB,OAAO,MAAM,mBACb,OAAO,WACP,aACF;KAEA,OAAO,OAAO,OAAO,QAAQ,MAAM,SAAS,EAAE,aAAa,OAAO,YAAY,CAAC;IACjF,CAAC;IACD,OAAO,OAAO,GAAG,uBAAuB,CAAC,CACvC,WAAW,KAAK,iBAAiB,kBAAkB;KACjD,OAAO,OAAO,MAAM,OAAO,KAAK;MAC9B,MAAM;MACN;MACA;MACA,WAAW,OAAO,MAAM;KAC1B,CAAC;IACH,CACF;GACF,CAAC;EACH,CAAC,CACH;CACF;AACF"}