@yielded/agent 0.1.0-beta.171 → 0.1.0-beta.172

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 (94) hide show
  1. package/dist/{Admin-BmALDmj8.d.mts → Admin-BX9ns28E.d.mts} +2 -2
  2. package/dist/{DurableAgentRuntime-CQGiSnCa.mjs → DurableAgentRuntime-BAmSkWYr.mjs} +10 -9
  3. package/dist/DurableAgentRuntime-BAmSkWYr.mjs.map +1 -0
  4. package/dist/{EventSource-CVXzC_8E.d.mts → EventSource-BwliwQz9.d.mts} +2 -2
  5. package/dist/{MessageDelivery-BGKWdjUu.d.mts → MessageDelivery-CeSDfHZa.d.mts} +4 -4
  6. package/dist/{PreparedInputAdmission-C1xt29pl.d.mts → PreparedInputAdmission-CxSJSiTl.d.mts} +3 -3
  7. package/dist/{RecordFormat-BphUsB6Q.d.mts → RecordFormat-BNiLpe43.d.mts} +9 -3
  8. package/dist/{RunContinuation-CNWMmymY.mjs → RunContinuation-DHYNAQFi.mjs} +2 -2
  9. package/dist/{RunContinuation-CNWMmymY.mjs.map → RunContinuation-DHYNAQFi.mjs.map} +1 -1
  10. package/dist/{RunContinuation-B7a2dK8k.d.mts → RunContinuation-FHM7XPjq.d.mts} +3 -3
  11. package/dist/{RunStorage-FFaYE4-2.mjs → RunStorage-uqPxps09.mjs} +2 -2
  12. package/dist/{RunStorage-FFaYE4-2.mjs.map → RunStorage-uqPxps09.mjs.map} +1 -1
  13. package/dist/{Subscription-CQqYNUqy.d.mts → Subscription-DONig54Q.d.mts} +2 -2
  14. package/dist/{SubscriptionInput-BibUlnWP.d.mts → SubscriptionInput-mJIRxWJM.d.mts} +2 -2
  15. package/dist/{ThreadImport-mLZiwu30.d.mts → ThreadImport-CoQTZywm.d.mts} +42 -42
  16. package/dist/{ThreadImport-BsOXD7qr.mjs → ThreadImport-DckUMEqJ.mjs} +4 -4
  17. package/dist/{ThreadImport-BsOXD7qr.mjs.map → ThreadImport-DckUMEqJ.mjs.map} +1 -1
  18. package/dist/{ThreadStore-B5sew3ir.mjs → ThreadStore-CEekRa80.mjs} +2 -2
  19. package/dist/ThreadStore-CEekRa80.mjs.map +1 -0
  20. package/dist/{ThreadTransfer-DeO03GBg.mjs → ThreadTransfer-B4gTQLIl.mjs} +3 -5
  21. package/dist/ThreadTransfer-B4gTQLIl.mjs.map +1 -0
  22. package/dist/{WorkerAdmission-C1TxLQPT.mjs → WorkerAdmission-DFVbbVh2.mjs} +2 -2
  23. package/dist/{WorkerAdmission-C1TxLQPT.mjs.map → WorkerAdmission-DFVbbVh2.mjs.map} +1 -1
  24. package/dist/durable/Admin.d.mts +1 -1
  25. package/dist/durable/AgentRegistration.d.mts +1 -1
  26. package/dist/durable/Certification.d.mts +1 -1
  27. package/dist/durable/CommittedActivity.d.mts +1 -1
  28. package/dist/durable/CommittedActivity.mjs +1 -1
  29. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  30. package/dist/durable/DurableAgentRuntime.mjs +2 -2
  31. package/dist/durable/EventSource.d.mts +1 -1
  32. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  33. package/dist/durable/LifecyclePublication.d.mts +1 -1
  34. package/dist/durable/LifecyclePublication.mjs +1 -1
  35. package/dist/durable/MessageDelivery.d.mts +1 -1
  36. package/dist/durable/MessageDeliveryStoreConformance.d.mts +2 -2
  37. package/dist/durable/PersistentHistory.d.mts +1 -1
  38. package/dist/durable/PersistentHistory.mjs +2 -2
  39. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  40. package/dist/durable/RecordFormat.d.mts +2 -2
  41. package/dist/durable/RecordFormat.mjs +14 -2
  42. package/dist/durable/RecordFormat.mjs.map +1 -1
  43. package/dist/durable/Recovery.d.mts +1 -1
  44. package/dist/durable/RunContinuation.d.mts +2 -2
  45. package/dist/durable/RunContinuation.mjs +2 -2
  46. package/dist/durable/RunJournal.d.mts +1 -1
  47. package/dist/durable/RunStorage.d.mts +1 -1
  48. package/dist/durable/RunStorage.mjs +1 -1
  49. package/dist/durable/Scheduling.d.mts +1 -1
  50. package/dist/durable/SettlementPublisher.d.mts +1 -1
  51. package/dist/durable/SettlementPublisher.mjs +1 -1
  52. package/dist/durable/SubmissionLedger.d.mts +1 -1
  53. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  54. package/dist/durable/SubmissionLedgerConformance.mjs +2 -2
  55. package/dist/durable/SubmissionStatus.d.mts +1 -1
  56. package/dist/durable/Subscription.d.mts +1 -1
  57. package/dist/durable/SubscriptionInput.d.mts +1 -1
  58. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  59. package/dist/durable/SubscriptionTools.d.mts +2 -2
  60. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  61. package/dist/durable/Subscriptions.d.mts +5 -5
  62. package/dist/durable/ThreadArchiveRange.d.mts +1 -1
  63. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  64. package/dist/durable/ThreadContextHistory.mjs +1 -1
  65. package/dist/durable/ThreadImport.d.mts +1 -1
  66. package/dist/durable/ThreadImport.mjs +1 -1
  67. package/dist/durable/ThreadInvariants.d.mts +3 -3
  68. package/dist/durable/ThreadInvariants.mjs +3 -3
  69. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  70. package/dist/durable/ThreadReader.d.mts +1 -1
  71. package/dist/durable/ThreadReader.mjs +1 -1
  72. package/dist/durable/ThreadStore.d.mts +1 -1
  73. package/dist/durable/ThreadStore.mjs +1 -1
  74. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  75. package/dist/durable/ThreadStoreConformance.mjs +2 -2
  76. package/dist/durable/ThreadTransfer.d.mts +1 -1
  77. package/dist/durable/ThreadTransfer.mjs +1 -1
  78. package/dist/durable/ThreadWork.d.mts +1 -1
  79. package/dist/durable/ThreadWork.mjs +2 -2
  80. package/dist/durable/WorkerAdmission.d.mts +1 -1
  81. package/dist/durable/WorkerAdmission.mjs +1 -1
  82. package/dist/durable/WorkerHost.d.mts +1 -1
  83. package/dist/index.d.mts +9 -9
  84. package/dist/index.mjs +6 -6
  85. package/dist/{run-context-reader-BrbZ8tb7.d.mts → run-context-reader-OcsZr4bk.d.mts} +2 -2
  86. package/package.json +1 -1
  87. package/src/durable/DurableAgentRuntime.ts +4 -1
  88. package/src/durable/RecordFormat.ts +18 -0
  89. package/src/durable/ThreadStore.ts +1 -1
  90. package/src/durable/ThreadTransfer.ts +1 -8
  91. package/src/durable/internal/agent-updates.ts +10 -2
  92. package/dist/DurableAgentRuntime-CQGiSnCa.mjs.map +0 -1
  93. package/dist/ThreadStore-B5sew3ir.mjs.map +0 -1
  94. package/dist/ThreadTransfer-DeO03GBg.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RunStorage-FFaYE4-2.mjs","names":[],"sources":["../src/durable/internal/StorageOwner.ts","../src/durable/RunStorage.ts"],"sourcesContent":["import { Context, Effect, Option, Semaphore, type Scope } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { type Claim, LedgerError, OwnershipLost } from \"../SubmissionLedger.ts\";\n\nexport type MutationGate = <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n\n/** Local capability only. It is never encoded, persisted, or reconstructed from an Attempt ID. */\nexport interface OwnerGeneration {\n readonly claim: Claim;\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, OwnershipLost>;\n readonly release: Effect.Effect<void>;\n readonly use: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | OwnershipLost, R>;\n}\n\nexport interface StorageOwnerService {\n readonly identity: object;\n readonly withMutation: MutationGate;\n readonly withProgress: <A, E, R>(\n threadId: ThreadId,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n readonly isClosed: () => boolean;\n readonly hasOwner: (threadId: string, submissionId?: string) => boolean;\n /** Trusted administrative retirement, while holding the same mutation gate. */\n readonly closeSubmission: (threadId: string, submissionId: string) => void;\n readonly acquire: <E, R>(\n threadId: ThreadId,\n select: Effect.Effect<Option.Option<Claim>, E, R>,\n ) => Effect.Effect<Option.Option<OwnerGeneration>, E | LedgerError, R | Scope.Scope>;\n}\n\nexport class StorageOwner extends Context.Service<StorageOwner, StorageOwnerService>()(\n \"@effect-agent/durable/StorageOwner\",\n) {}\n\nconst ActiveOwner = Context.Reference<object | undefined>(\n \"@effect-agent/durable/internal/ActiveStorageOwner\",\n { defaultValue: () => undefined },\n);\n\nconst ActiveProgress = Context.Reference<\n { readonly owner: object; readonly threadId: ThreadId } | undefined\n>(\"@effect-agent/durable/internal/ActiveProgress\", { defaultValue: () => undefined });\n\n/** Reuse the physical owner's gate; reentrant calls remain in the same mutation. */\nexport const makeStorageOwner = Effect.fnUntraced(function* (gate: MutationGate) {\n const identity = {};\n let closed = false;\n const progress = new Map<ThreadId, { readonly gate: Semaphore.Semaphore; users: number }>();\n const active = new Map<string, { readonly claim: Claim; closed: boolean }>();\n\n const withMutation: MutationGate = (effect) =>\n Effect.flatMap(ActiveOwner, (current) =>\n current === identity ? effect : gate(Effect.provideService(effect, ActiveOwner, identity)),\n );\n\n yield* Effect.addFinalizer(() =>\n withMutation(\n Effect.sync(() => {\n closed = true;\n for (const entry of active.values()) entry.closed = true;\n active.clear();\n }),\n ),\n );\n\n return StorageOwner.of({\n identity,\n withMutation,\n withProgress: (threadId, effect) =>\n Effect.flatMap(ActiveProgress, (current) => {\n if (current?.owner === identity && current.threadId === threadId) return effect;\n\n return Effect.suspend(() => {\n let entry = progress.get(threadId);\n\n if (entry === undefined) {\n entry = { gate: Semaphore.makeUnsafe(1), users: 0 };\n progress.set(threadId, entry);\n }\n const retained = entry;\n\n retained.users++;\n\n return retained.gate\n .withPermits(1)(\n Effect.provideService(effect, ActiveProgress, { owner: identity, threadId }),\n )\n .pipe(\n Effect.ensuring(\n Effect.sync(() => {\n retained.users--;\n if (retained.users === 0 && progress.get(threadId) === retained)\n progress.delete(threadId);\n }),\n ),\n );\n });\n }),\n isClosed: () => closed,\n hasOwner: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n return (\n !closed &&\n entry !== undefined &&\n !entry.closed &&\n (submissionId === undefined || entry.claim.submissionId === submissionId)\n );\n },\n closeSubmission: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n if (entry?.claim.submissionId !== submissionId) return;\n entry.closed = true;\n active.delete(threadId);\n },\n acquire: (threadId, select) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const selected = yield* withMutation(\n Effect.gen(function* () {\n if (closed)\n return yield* LedgerError.make({\n operation: \"claim\",\n message: \"Storage owner is closed\",\n });\n if (active.has(threadId)) return Option.none<OwnerGeneration>();\n const selected = yield* select;\n\n if (Option.isNone(selected)) return Option.none<OwnerGeneration>();\n const entry = { claim: selected.value, closed: false };\n\n active.set(threadId, entry);\n\n const checkActive = Effect.suspend(() =>\n closed || entry.closed || active.get(threadId) !== entry\n ? Effect.fail(OwnershipLost.make({ submissionId: entry.claim.submissionId }))\n : Effect.void,\n );\n\n const release = withMutation(\n Effect.sync(() => {\n entry.closed = true;\n if (active.get(threadId) === entry) active.delete(threadId);\n }),\n );\n\n return Option.some<OwnerGeneration>({\n claim: entry.claim,\n identity: entry,\n checkActive,\n release,\n use: (effect) => withMutation(Effect.andThen(checkActive, effect)),\n });\n }),\n );\n\n if (Option.isNone(selected)) return selected;\n // A closed Scope runs this immediately. Never register while holding a nonlocal gate.\n yield* Effect.addFinalizer(() => selected.value.release);\n\n return yield* restore(Effect.succeed(selected));\n }),\n ),\n });\n});\n","import type { Scope } from \"effect\";\nimport { Cause, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { StorageOwner } from \"./internal/StorageOwner.ts\";\nimport type { CanonicalBatch, CanonicalSequence } from \"./Records.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n SettlementPublisher,\n} from \"./SettlementPublisher.ts\";\nimport {\n AttachChildToReservationRequest,\n ChildBudgetReservationRequest,\n ClaimJoiningRequest,\n type Claim,\n type ClaimRequest,\n type InputAppliedMarker,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n OwnershipLost,\n RevertJoiningRequest,\n SettlementConflict,\n SubmissionLedger,\n SuspendRequest,\n type SuspensionReason,\n} from \"./SubmissionLedger.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n AppendRequest,\n type CommitBatch,\n type ExecutionUpdate,\n PreparedAppend,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n type ThreadStoreFailure,\n ThreadTailRequest,\n} from \"./ThreadStore.ts\";\n\nexport {\n StorageOwner,\n makeStorageOwner,\n type MutationGate,\n type OwnerGeneration,\n type StorageOwnerService,\n} from \"./internal/StorageOwner.ts\";\n\nexport const RunChildBudgetReservation = Schema.Struct({\n reservationId: ChildBudgetReservationRequest.fields.reservationId,\n parentToolCallId: ChildBudgetReservationRequest.fields.parentToolCallId,\n allocation: ChildBudgetReservationRequest.fields.allocation,\n allocationDigest: ChildBudgetReservationRequest.fields.allocationDigest,\n});\n\nexport type RunChildBudgetReservation = typeof RunChildBudgetReservation.Type;\n\nexport const RunChildAttachment = Schema.Struct({\n reservationId: AttachChildToReservationRequest.fields.reservationId,\n childSubmissionId: AttachChildToReservationRequest.fields.childSubmissionId,\n});\n\nexport type RunChildAttachment = typeof RunChildAttachment.Type;\n\n/** Commands bound to one local scoped owner. No authority is transported in their values. */\nexport interface RunOwnership {\n readonly release: Effect.Effect<void>;\n readonly markInputApplied: (\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markInputApplied\"]>;\n readonly claimJoining: (\n maxCount: number,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"claimJoining\"]>;\n readonly markJoined: (\n submissionId: SubmissionId,\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markJoined\"]>;\n readonly revertJoining: (\n submissionId: SubmissionId,\n ) => Effect.Effect<void, LedgerError | OwnershipLost>;\n readonly suspend: (\n reason: SuspensionReason,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"suspend\"]>;\n readonly reserveChildBudget: (\n request: RunChildBudgetReservation,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"reserveChildBudget\"]>;\n readonly attachChildToReservation: (\n request: RunChildAttachment,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"attachChildToReservation\"]>;\n}\n\nexport interface RunWriter {\n readonly threadId: ThreadId;\n /** Opaque cache identity for this local writer lifetime; never portable authority. */\n readonly generation: object;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly withProgress: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | ThreadStoreFailure, R>;\n readonly tail: Effect.Effect<{ readonly sequence: CanonicalSequence }>;\n /** Uncertain commit failures close this session before another command may enter. */\n readonly append: (\n batch: CommitBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n /** Recheck the captured local capability after preflight, immediately before effect dispatch. */\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n}\n\nexport interface RunStorageSession extends RunWriter, RunOwnership {\n readonly claim: Claim;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly publishSettlement: (\n batch: CanonicalBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n}\n\nexport class RunStorage extends Context.Service<\n RunStorage,\n {\n readonly publishSettlement: SettlementPublisher[\"Service\"][\"publish\"];\n readonly claim: (\n request: ClaimRequest,\n ) => Effect.Effect<\n Option.Option<RunStorageSession>,\n LedgerError | ThreadStoreFailure,\n Scope.Scope\n >;\n }\n>()(\"@effect-agent/thread/RunStorage\") {}\n\n/** One writer's scoped capability, selected at claim or administrative construction. */\nclass WriterOwnership extends Context.Service<\n WriterOwnership,\n {\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n readonly release: Effect.Effect<void>;\n }\n>()(\"@effect-agent/durable/internal/WriterOwnership\") {}\n\nconst isDefiniteWriteRefusal = Schema.is(\n Schema.Union([AppendConflict, OwnershipLost, SettlementConflict, ThreadNotMaterialized]),\n);\n\nconst isDefiniteWriteFailure = (cause: Cause.Cause<unknown>) =>\n cause.reasons.length > 0 &&\n cause.reasons.every(\n (reason) => Cause.isFailReason(reason) && isDefiniteWriteRefusal(reason.error),\n );\n\nconst makeWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const owner = yield* StorageOwner;\n const ownership = yield* WriterOwnership;\n const checkActive = ownership.checkActive;\n const initial = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n let tail = { sequence: initial.tailSequence };\n\n const refresh = owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n const current = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n tail = { sequence: current.tailSequence };\n }),\n );\n\n const append: RunWriter[\"append\"] = (batch, executions) =>\n Effect.gen(function* () {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId,\n expectedTailSequence: tail.sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n for (let retries = 0; ; retries++) {\n const result = yield* store\n .append(\n captured.expectedTailSequence === tail.sequence\n ? captured\n : AppendRequest.make({\n ...captured,\n expectedTailSequence: tail.sequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = { sequence: conflict.actualTailSequence };\n if (captured.executions !== undefined) return Effect.fail(conflict);\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n // A historical replay returns its original coordinates, not today's canonical tail.\n if (result.replayed) yield* refresh;\n else tail = { sequence: result.lastSequence };\n\n return result;\n }\n }).pipe(\n // Revoke uncertain writes before releasing the writer's mutation gate.\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : ownership.release,\n ),\n ),\n ),\n );\n });\n\n const writer = {\n threadId,\n generation: ownership.identity,\n withProgress: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n owner.withProgress(threadId, Effect.andThen(checkActive, effect)),\n tail: Effect.sync(() => tail),\n append,\n checkActive: owner.withMutation(checkActive),\n refresh,\n };\n\n return {\n writer,\n adoptTail: (sequence: CanonicalSequence) => {\n tail = { sequence };\n },\n };\n});\n\n/** Trusted administrative writer sharing the physical owner's gate and lifetime. */\nexport const makeRunWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const owner = yield* StorageOwner;\n\n return (yield* makeWriter(threadId).pipe(\n Effect.provideService(WriterOwnership, {\n identity: owner.identity,\n checkActive: Effect.suspend(() =>\n owner.isClosed()\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"write Thread\",\n message: \"Storage owner is closed\",\n }),\n )\n : Effect.void,\n ),\n release: Effect.void,\n }),\n )).writer;\n});\n\n/** The same scoped single-owner protocol is used by every adapter. */\nexport const make = Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const publisher = yield* SettlementPublisher;\n const owner = yield* StorageOwner;\n\n const claim: RunStorage[\"Service\"][\"claim\"] = (request) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const granted = yield* owner.acquire(request.threadId, ledger.selectHead(request));\n\n if (Option.isNone(granted)) return Option.none();\n const generation = granted.value;\n const claimed = generation.claim;\n\n return yield* restore(\n Effect.gen(function* () {\n if (\n request.handoff !== undefined &&\n request.handoff.submissionId !== claimed.submissionId\n )\n return yield* LedgerError.make({\n operation: \"claim handoff\",\n message: \"The submission adapter did not honor the requested handoff\",\n });\n yield* store.materialize(ThreadMaterialization.make({ threadId: request.threadId }));\n\n const { writer, adoptTail } = yield* makeWriter(request.threadId).pipe(\n Effect.provideService(WriterOwnership, generation),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, owner),\n );\n\n const owned = <A, E>(effect: Effect.Effect<A, E>) => generation.use(effect);\n\n const session: RunStorageSession = {\n ...writer,\n claim: claimed,\n release: generation.release,\n refresh: writer.refresh,\n markInputApplied: (marker) =>\n owned(\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n ...marker,\n submissionId: claimed.submissionId,\n }),\n ),\n ),\n claimJoining: (maxCount) =>\n owned(\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: request.threadId,\n hostSubmissionId: claimed.submissionId,\n maxCount,\n }),\n ),\n ),\n markJoined: (submissionId, marker) =>\n owned(\n ledger.markJoined(\n MarkJoinedRequest.make({\n ...marker,\n submissionId,\n }),\n ),\n ),\n revertJoining: (submissionId) =>\n owned(\n ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId,\n guard: { hostSubmissionId: claimed.submissionId },\n }),\n ),\n ),\n suspend: (reason) =>\n owned(\n ledger\n .suspend(\n SuspendRequest.make({\n submissionId: claimed.submissionId,\n reason,\n }),\n )\n .pipe(\n Effect.tap((outcome) =>\n outcome === \"suspended\" ? generation.release : Effect.void,\n ),\n ),\n ),\n publishSettlement: (batch, executions) =>\n Effect.gen(function* () {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId: request.threadId,\n expectedTailSequence: (yield* writer.tail).sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"capture settlement\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n request.threadId,\n owned(\n Effect.gen(function* () {\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .publish(\n SettlementPublication.make({\n submissionId: claimed.submissionId,\n authority: { _tag: \"Owned\" },\n append: AppendRequest.make({\n ...captured,\n expectedTailSequence: (yield* writer.tail).sequence,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n\n return writer.refresh.pipe(\n Effect.andThen(\n captured.executions === undefined\n ? Effect.succeed(undefined)\n : Effect.fail(conflict),\n ),\n );\n }),\n );\n\n if (result === undefined) continue;\n adoptTail(result.tailSequence);\n\n return result;\n }\n }).pipe(\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : generation.release,\n ),\n ),\n ),\n );\n }),\n reserveChildBudget: (value) =>\n owned(\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...value,\n parentSubmissionId: claimed.submissionId,\n }),\n ),\n ),\n attachChildToReservation: (value) =>\n owned(ledger.attachChildToReservation(AttachChildToReservationRequest.make(value))),\n };\n\n return Option.some(session);\n }).pipe(Effect.onError(() => generation.release)),\n );\n }),\n );\n\n return RunStorage.of({ claim, publishSettlement: publisher.publish });\n});\n\nexport const layer = () => Layer.effect(RunStorage, make);\n"],"mappings":"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"}
1
+ {"version":3,"file":"RunStorage-uqPxps09.mjs","names":[],"sources":["../src/durable/internal/StorageOwner.ts","../src/durable/RunStorage.ts"],"sourcesContent":["import { Context, Effect, Option, Semaphore, type Scope } from \"effect\";\n\nimport type { ThreadId } from \"../../core/Identifiers.ts\";\nimport { type Claim, LedgerError, OwnershipLost } from \"../SubmissionLedger.ts\";\n\nexport type MutationGate = <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n\n/** Local capability only. It is never encoded, persisted, or reconstructed from an Attempt ID. */\nexport interface OwnerGeneration {\n readonly claim: Claim;\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, OwnershipLost>;\n readonly release: Effect.Effect<void>;\n readonly use: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | OwnershipLost, R>;\n}\n\nexport interface StorageOwnerService {\n readonly identity: object;\n readonly withMutation: MutationGate;\n readonly withProgress: <A, E, R>(\n threadId: ThreadId,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, R>;\n readonly isClosed: () => boolean;\n readonly hasOwner: (threadId: string, submissionId?: string) => boolean;\n /** Trusted administrative retirement, while holding the same mutation gate. */\n readonly closeSubmission: (threadId: string, submissionId: string) => void;\n readonly acquire: <E, R>(\n threadId: ThreadId,\n select: Effect.Effect<Option.Option<Claim>, E, R>,\n ) => Effect.Effect<Option.Option<OwnerGeneration>, E | LedgerError, R | Scope.Scope>;\n}\n\nexport class StorageOwner extends Context.Service<StorageOwner, StorageOwnerService>()(\n \"@effect-agent/durable/StorageOwner\",\n) {}\n\nconst ActiveOwner = Context.Reference<object | undefined>(\n \"@effect-agent/durable/internal/ActiveStorageOwner\",\n { defaultValue: () => undefined },\n);\n\nconst ActiveProgress = Context.Reference<\n { readonly owner: object; readonly threadId: ThreadId } | undefined\n>(\"@effect-agent/durable/internal/ActiveProgress\", { defaultValue: () => undefined });\n\n/** Reuse the physical owner's gate; reentrant calls remain in the same mutation. */\nexport const makeStorageOwner = Effect.fnUntraced(function* (gate: MutationGate) {\n const identity = {};\n let closed = false;\n const progress = new Map<ThreadId, { readonly gate: Semaphore.Semaphore; users: number }>();\n const active = new Map<string, { readonly claim: Claim; closed: boolean }>();\n\n const withMutation: MutationGate = (effect) =>\n Effect.flatMap(ActiveOwner, (current) =>\n current === identity ? effect : gate(Effect.provideService(effect, ActiveOwner, identity)),\n );\n\n yield* Effect.addFinalizer(() =>\n withMutation(\n Effect.sync(() => {\n closed = true;\n for (const entry of active.values()) entry.closed = true;\n active.clear();\n }),\n ),\n );\n\n return StorageOwner.of({\n identity,\n withMutation,\n withProgress: (threadId, effect) =>\n Effect.flatMap(ActiveProgress, (current) => {\n if (current?.owner === identity && current.threadId === threadId) return effect;\n\n return Effect.suspend(() => {\n let entry = progress.get(threadId);\n\n if (entry === undefined) {\n entry = { gate: Semaphore.makeUnsafe(1), users: 0 };\n progress.set(threadId, entry);\n }\n const retained = entry;\n\n retained.users++;\n\n return retained.gate\n .withPermits(1)(\n Effect.provideService(effect, ActiveProgress, { owner: identity, threadId }),\n )\n .pipe(\n Effect.ensuring(\n Effect.sync(() => {\n retained.users--;\n if (retained.users === 0 && progress.get(threadId) === retained)\n progress.delete(threadId);\n }),\n ),\n );\n });\n }),\n isClosed: () => closed,\n hasOwner: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n return (\n !closed &&\n entry !== undefined &&\n !entry.closed &&\n (submissionId === undefined || entry.claim.submissionId === submissionId)\n );\n },\n closeSubmission: (threadId, submissionId) => {\n const entry = active.get(threadId);\n\n if (entry?.claim.submissionId !== submissionId) return;\n entry.closed = true;\n active.delete(threadId);\n },\n acquire: (threadId, select) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const selected = yield* withMutation(\n Effect.gen(function* () {\n if (closed)\n return yield* LedgerError.make({\n operation: \"claim\",\n message: \"Storage owner is closed\",\n });\n if (active.has(threadId)) return Option.none<OwnerGeneration>();\n const selected = yield* select;\n\n if (Option.isNone(selected)) return Option.none<OwnerGeneration>();\n const entry = { claim: selected.value, closed: false };\n\n active.set(threadId, entry);\n\n const checkActive = Effect.suspend(() =>\n closed || entry.closed || active.get(threadId) !== entry\n ? Effect.fail(OwnershipLost.make({ submissionId: entry.claim.submissionId }))\n : Effect.void,\n );\n\n const release = withMutation(\n Effect.sync(() => {\n entry.closed = true;\n if (active.get(threadId) === entry) active.delete(threadId);\n }),\n );\n\n return Option.some<OwnerGeneration>({\n claim: entry.claim,\n identity: entry,\n checkActive,\n release,\n use: (effect) => withMutation(Effect.andThen(checkActive, effect)),\n });\n }),\n );\n\n if (Option.isNone(selected)) return selected;\n // A closed Scope runs this immediately. Never register while holding a nonlocal gate.\n yield* Effect.addFinalizer(() => selected.value.release);\n\n return yield* restore(Effect.succeed(selected));\n }),\n ),\n });\n});\n","import type { Scope } from \"effect\";\nimport { Cause, Context, Effect, Layer, Option, Schema } from \"effect\";\n\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport { StorageOwner } from \"./internal/StorageOwner.ts\";\nimport type { CanonicalBatch, CanonicalSequence } from \"./Records.ts\";\nimport {\n SettlementPublication,\n type SettlementPublicationFailure,\n type SettlementPublicationResult,\n SettlementPublisher,\n} from \"./SettlementPublisher.ts\";\nimport {\n AttachChildToReservationRequest,\n ChildBudgetReservationRequest,\n ClaimJoiningRequest,\n type Claim,\n type ClaimRequest,\n type InputAppliedMarker,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n OwnershipLost,\n RevertJoiningRequest,\n SettlementConflict,\n SubmissionLedger,\n SuspendRequest,\n type SuspensionReason,\n} from \"./SubmissionLedger.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n AppendRequest,\n type CommitBatch,\n type ExecutionUpdate,\n PreparedAppend,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n type ThreadStoreFailure,\n ThreadTailRequest,\n} from \"./ThreadStore.ts\";\n\nexport {\n StorageOwner,\n makeStorageOwner,\n type MutationGate,\n type OwnerGeneration,\n type StorageOwnerService,\n} from \"./internal/StorageOwner.ts\";\n\nexport const RunChildBudgetReservation = Schema.Struct({\n reservationId: ChildBudgetReservationRequest.fields.reservationId,\n parentToolCallId: ChildBudgetReservationRequest.fields.parentToolCallId,\n allocation: ChildBudgetReservationRequest.fields.allocation,\n allocationDigest: ChildBudgetReservationRequest.fields.allocationDigest,\n});\n\nexport type RunChildBudgetReservation = typeof RunChildBudgetReservation.Type;\n\nexport const RunChildAttachment = Schema.Struct({\n reservationId: AttachChildToReservationRequest.fields.reservationId,\n childSubmissionId: AttachChildToReservationRequest.fields.childSubmissionId,\n});\n\nexport type RunChildAttachment = typeof RunChildAttachment.Type;\n\n/** Commands bound to one local scoped owner. No authority is transported in their values. */\nexport interface RunOwnership {\n readonly release: Effect.Effect<void>;\n readonly markInputApplied: (\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markInputApplied\"]>;\n readonly claimJoining: (\n maxCount: number,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"claimJoining\"]>;\n readonly markJoined: (\n submissionId: SubmissionId,\n marker: InputAppliedMarker,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"markJoined\"]>;\n readonly revertJoining: (\n submissionId: SubmissionId,\n ) => Effect.Effect<void, LedgerError | OwnershipLost>;\n readonly suspend: (\n reason: SuspensionReason,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"suspend\"]>;\n readonly reserveChildBudget: (\n request: RunChildBudgetReservation,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"reserveChildBudget\"]>;\n readonly attachChildToReservation: (\n request: RunChildAttachment,\n ) => ReturnType<SubmissionLedger[\"Service\"][\"attachChildToReservation\"]>;\n}\n\nexport interface RunWriter {\n readonly threadId: ThreadId;\n /** Opaque cache identity for this local writer lifetime; never portable authority. */\n readonly generation: object;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly withProgress: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | ThreadStoreFailure, R>;\n readonly tail: Effect.Effect<{ readonly sequence: CanonicalSequence }>;\n /** Uncertain commit failures close this session before another command may enter. */\n readonly append: (\n batch: CommitBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n /** Recheck the captured local capability after preflight, immediately before effect dispatch. */\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n}\n\nexport interface RunStorageSession extends RunWriter, RunOwnership {\n readonly claim: Claim;\n readonly refresh: Effect.Effect<void, ThreadStoreFailure>;\n readonly publishSettlement: (\n batch: CanonicalBatch,\n executions?: ReadonlyArray<ExecutionUpdate>,\n ) => Effect.Effect<SettlementPublicationResult, SettlementPublicationFailure>;\n}\n\nexport class RunStorage extends Context.Service<\n RunStorage,\n {\n readonly publishSettlement: SettlementPublisher[\"Service\"][\"publish\"];\n readonly claim: (\n request: ClaimRequest,\n ) => Effect.Effect<\n Option.Option<RunStorageSession>,\n LedgerError | ThreadStoreFailure,\n Scope.Scope\n >;\n }\n>()(\"@effect-agent/thread/RunStorage\") {}\n\n/** One writer's scoped capability, selected at claim or administrative construction. */\nclass WriterOwnership extends Context.Service<\n WriterOwnership,\n {\n readonly identity: object;\n readonly checkActive: Effect.Effect<void, ThreadStoreFailure>;\n readonly release: Effect.Effect<void>;\n }\n>()(\"@effect-agent/durable/internal/WriterOwnership\") {}\n\nconst isDefiniteWriteRefusal = Schema.is(\n Schema.Union([AppendConflict, OwnershipLost, SettlementConflict, ThreadNotMaterialized]),\n);\n\nconst isDefiniteWriteFailure = (cause: Cause.Cause<unknown>) =>\n cause.reasons.length > 0 &&\n cause.reasons.every(\n (reason) => Cause.isFailReason(reason) && isDefiniteWriteRefusal(reason.error),\n );\n\nconst makeWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const owner = yield* StorageOwner;\n const ownership = yield* WriterOwnership;\n const checkActive = ownership.checkActive;\n const initial = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n let tail = { sequence: initial.tailSequence };\n\n const refresh = owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n const current = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n tail = { sequence: current.tailSequence };\n }),\n );\n\n const append: RunWriter[\"append\"] = (batch, executions) =>\n Effect.gen(function* () {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId,\n expectedTailSequence: tail.sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"capture append\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* checkActive;\n for (let retries = 0; ; retries++) {\n const result = yield* store\n .append(\n captured.expectedTailSequence === tail.sequence\n ? captured\n : AppendRequest.make({\n ...captured,\n expectedTailSequence: tail.sequence,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n tail = { sequence: conflict.actualTailSequence };\n if (captured.executions !== undefined) return Effect.fail(conflict);\n\n return Effect.succeed(undefined);\n }),\n );\n\n if (result === undefined) continue;\n // A historical replay returns its original coordinates, not today's canonical tail.\n if (result.replayed) yield* refresh;\n else tail = { sequence: result.lastSequence };\n\n return result;\n }\n }).pipe(\n // Revoke uncertain writes before releasing the writer's mutation gate.\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : ownership.release,\n ),\n ),\n ),\n );\n });\n\n const writer = {\n threadId,\n generation: ownership.identity,\n withProgress: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n owner.withProgress(threadId, Effect.andThen(checkActive, effect)),\n tail: Effect.sync(() => tail),\n append,\n checkActive: owner.withMutation(checkActive),\n refresh,\n };\n\n return {\n writer,\n adoptTail: (sequence: CanonicalSequence) => {\n tail = { sequence };\n },\n };\n});\n\n/** Trusted administrative writer sharing the physical owner's gate and lifetime. */\nexport const makeRunWriter = Effect.fnUntraced(function* (threadId: ThreadId) {\n const owner = yield* StorageOwner;\n\n return (yield* makeWriter(threadId).pipe(\n Effect.provideService(WriterOwnership, {\n identity: owner.identity,\n checkActive: Effect.suspend(() =>\n owner.isClosed()\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"write Thread\",\n message: \"Storage owner is closed\",\n }),\n )\n : Effect.void,\n ),\n release: Effect.void,\n }),\n )).writer;\n});\n\n/** The same scoped single-owner protocol is used by every adapter. */\nexport const make = Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const publisher = yield* SettlementPublisher;\n const owner = yield* StorageOwner;\n\n const claim: RunStorage[\"Service\"][\"claim\"] = (request) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const granted = yield* owner.acquire(request.threadId, ledger.selectHead(request));\n\n if (Option.isNone(granted)) return Option.none();\n const generation = granted.value;\n const claimed = generation.claim;\n\n return yield* restore(\n Effect.gen(function* () {\n if (\n request.handoff !== undefined &&\n request.handoff.submissionId !== claimed.submissionId\n )\n return yield* LedgerError.make({\n operation: \"claim handoff\",\n message: \"The submission adapter did not honor the requested handoff\",\n });\n yield* store.materialize(ThreadMaterialization.make({ threadId: request.threadId }));\n\n const { writer, adoptTail } = yield* makeWriter(request.threadId).pipe(\n Effect.provideService(WriterOwnership, generation),\n Effect.provideService(ThreadStore, store),\n Effect.provideService(StorageOwner, owner),\n );\n\n const owned = <A, E>(effect: Effect.Effect<A, E>) => generation.use(effect);\n\n const session: RunStorageSession = {\n ...writer,\n claim: claimed,\n release: generation.release,\n refresh: writer.refresh,\n markInputApplied: (marker) =>\n owned(\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n ...marker,\n submissionId: claimed.submissionId,\n }),\n ),\n ),\n claimJoining: (maxCount) =>\n owned(\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: request.threadId,\n hostSubmissionId: claimed.submissionId,\n maxCount,\n }),\n ),\n ),\n markJoined: (submissionId, marker) =>\n owned(\n ledger.markJoined(\n MarkJoinedRequest.make({\n ...marker,\n submissionId,\n }),\n ),\n ),\n revertJoining: (submissionId) =>\n owned(\n ledger.revertJoining(\n RevertJoiningRequest.make({\n submissionId,\n guard: { hostSubmissionId: claimed.submissionId },\n }),\n ),\n ),\n suspend: (reason) =>\n owned(\n ledger\n .suspend(\n SuspendRequest.make({\n submissionId: claimed.submissionId,\n reason,\n }),\n )\n .pipe(\n Effect.tap((outcome) =>\n outcome === \"suspended\" ? generation.release : Effect.void,\n ),\n ),\n ),\n publishSettlement: (batch, executions) =>\n Effect.gen(function* () {\n const captured = yield* PreparedAppend.capture(\n AppendRequest.make({\n threadId: request.threadId,\n expectedTailSequence: (yield* writer.tail).sequence,\n batch,\n ...(executions === undefined ? {} : { executions }),\n }),\n ).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({\n operation: \"capture settlement\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n return yield* owner.withProgress(\n request.threadId,\n owned(\n Effect.gen(function* () {\n for (let retries = 0; ; retries++) {\n const result = yield* publisher\n .publish(\n SettlementPublication.make({\n submissionId: claimed.submissionId,\n authority: { _tag: \"Owned\" },\n append: AppendRequest.make({\n ...captured,\n expectedTailSequence: (yield* writer.tail).sequence,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) => {\n if (\n conflict.reason !== \"tail\" ||\n conflict.actualTailSequence === undefined ||\n retries >= 8\n )\n return Effect.fail(conflict);\n\n return writer.refresh.pipe(\n Effect.andThen(\n captured.executions === undefined\n ? Effect.succeed(undefined)\n : Effect.fail(conflict),\n ),\n );\n }),\n );\n\n if (result === undefined) continue;\n adoptTail(result.tailSequence);\n\n return result;\n }\n }).pipe(\n Effect.onError((cause) =>\n isDefiniteWriteFailure(cause) ? Effect.void : generation.release,\n ),\n ),\n ),\n );\n }),\n reserveChildBudget: (value) =>\n owned(\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...value,\n parentSubmissionId: claimed.submissionId,\n }),\n ),\n ),\n attachChildToReservation: (value) =>\n owned(ledger.attachChildToReservation(AttachChildToReservationRequest.make(value))),\n };\n\n return Option.some(session);\n }).pipe(Effect.onError(() => generation.release)),\n );\n }),\n );\n\n return RunStorage.of({ claim, publishSettlement: publisher.publish });\n});\n\nexport const layer = () => Layer.effect(RunStorage, make);\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { a as Receipt, r as Principal } from "./Receipt-BkM21Qiu.mjs";
3
3
  import { r as Update } from "./AgentUpdates-DksV4D0A.mjs";
4
4
  import { t as AgentPolicy } from "./AgentPolicy-B4lbCU2T.mjs";
5
5
  import { S as Digest, b as DefinitionDigests } from "./Records-BTnGRdcf.mjs";
6
- import "./Admin-BmALDmj8.mjs";
6
+ import "./Admin-BX9ns28E.mjs";
7
7
  import { t as ScheduleAuthorizationDecision } from "./Schedule-CDgTz0vj.mjs";
8
8
  import { Context, Effect, Schema } from "effect";
9
9
  declare namespace Subscription_d_exports {
@@ -988,4 +988,4 @@ declare const subscriptionKeyString: (key: SubscriptionKey) => string;
988
988
  declare const subscriptionDeliveryKeyString: (key: SubscriptionDeliveryKey) => string;
989
989
  //#endregion
990
990
  export { defaultSubscriptionLimits as A, SubscriptionScanCursors as C, SubscriptionStore as D, SubscriptionSourceError as E, subscriptionKeyString as M, SubscriptionStoreFailure as O, SubscriptionRetentionPolicy as S, SubscriptionSnapshot as T, SubscriptionKey as _, PreparedInput as a, SubscriptionRecord as b, SubscriptionAuthorizer as c, SubscriptionDelivery as d, SubscriptionDeliveryKey as f, SubscriptionFailpointError as g, SubscriptionFailpoint as h, EventSourceVersion as i, subscriptionDeliveryKeyString as j, Subscription_d_exports as k, SubscriptionChange as l, SubscriptionError as m, DeliveryChange as n, SourcePartition as o, SubscriptionDeliverySnapshot as p, EventAcknowledgement as r, SourceRecovery as s, AcceptedEvent as t, SubscriptionConfiguration as u, SubscriptionLimits as v, SubscriptionScope as w, SubscriptionRefusal as x, SubscriptionName as y };
991
- //# sourceMappingURL=Subscription-CQqYNUqy.d.mts.map
991
+ //# sourceMappingURL=Subscription-DONig54Q.d.mts.map
@@ -1,6 +1,6 @@
1
1
  import { t as AgentId } from "./Identifiers-CN2s30fF.mjs";
2
2
  import { K as PersistedJson, b as DefinitionDigests } from "./Records-BTnGRdcf.mjs";
3
- import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, m as SubscriptionError, t as AcceptedEvent, u as SubscriptionConfiguration } from "./Subscription-CQqYNUqy.mjs";
3
+ import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, m as SubscriptionError, t as AcceptedEvent, u as SubscriptionConfiguration } from "./Subscription-DONig54Q.mjs";
4
4
  import { Context, Effect, Schema, Scope } from "effect";
5
5
  declare namespace SubscriptionInput_d_exports {
6
6
  export { SubscriptionInputBinding, SubscriptionInputBindings, makeSubscriptionInputBinding, resolveSubscriptionInput };
@@ -38,4 +38,4 @@ declare const makeSubscriptionInputBinding: <Event extends Schema.Top, Parameter
38
38
  }) => Effect.Effect<SubscriptionInputBinding, never, Exclude<R, Scope.Scope> | Exclude<Continuation["DecodingServices"], Scope.Scope> | Exclude<Continuation["EncodingServices"], Scope.Scope> | Exclude<Event["DecodingServices"], Scope.Scope> | Exclude<Input["EncodingServices"], Scope.Scope> | Exclude<Parameters["DecodingServices"], Scope.Scope>>;
39
39
  //#endregion
40
40
  export { resolveSubscriptionInput as a, makeSubscriptionInputBinding as i, SubscriptionInputBindings as n, SubscriptionInput_d_exports as r, SubscriptionInputBinding as t };
41
- //# sourceMappingURL=SubscriptionInput-BibUlnWP.d.mts.map
41
+ //# sourceMappingURL=SubscriptionInput-mJIRxWJM.d.mts.map
@@ -5,9 +5,9 @@ import { r as Update } from "./AgentUpdates-DksV4D0A.mjs";
5
5
  import { r as Diagnostic } from "./FailureDiagnostic-DvHruCSJ.mjs";
6
6
  import { t as AgentPolicy } from "./AgentPolicy-B4lbCU2T.mjs";
7
7
  import { $ as RecordEnvelope, b as DefinitionDigests, d as CanonicalRecordEnvelope, et as RecordId, l as CanonicalBatch, p as CanonicalSequence } from "./Records-BTnGRdcf.mjs";
8
- import { $r as ExecutionCheckpoint, Ct as ApprovalDecisionIntent, Gi as ThreadStoreError, Li as ThreadReadRequest, On as UnknownResolutionIntent, Vt as InputAppliedMarker, an as ResolutionSafeToRetry, bi as ThreadCommands, gi as ThreadAdmission, in as ResolutionNeverHappened, lt as AbortIntent, nn as ResolutionAbortSubmission, rn as ResolutionCompletedWithResult, sn as Settlement, wn as SuspensionSnapshot, xi as ThreadExport } from "./Admin-BmALDmj8.mjs";
9
- import { p as MessageDeliveryRecord } from "./MessageDelivery-BGKWdjUu.mjs";
10
- import { t as RunContextReader } from "./run-context-reader-BrbZ8tb7.mjs";
8
+ import { $r as ExecutionCheckpoint, Ct as ApprovalDecisionIntent, Gi as ThreadStoreError, Li as ThreadReadRequest, On as UnknownResolutionIntent, Vt as InputAppliedMarker, an as ResolutionSafeToRetry, bi as ThreadCommands, gi as ThreadAdmission, in as ResolutionNeverHappened, lt as AbortIntent, nn as ResolutionAbortSubmission, rn as ResolutionCompletedWithResult, sn as Settlement, wn as SuspensionSnapshot, xi as ThreadExport } from "./Admin-BX9ns28E.mjs";
9
+ import { p as MessageDeliveryRecord } from "./MessageDelivery-CeSDfHZa.mjs";
10
+ import { t as RunContextReader } from "./run-context-reader-OcsZr4bk.mjs";
11
11
  import { Context, Effect, Layer, Schema, Scope, Stream } from "effect";
12
12
  //#region src/durable/internal/thread-import-reader.d.ts
13
13
  declare const ThreadImportReader_base: Context.ServiceClass<ThreadImportReader, "@effect-agent/thread/ThreadImportReader", {
@@ -483,25 +483,6 @@ declare const prepareImportPage: (state: ThreadImportProgress, input: {
483
483
  readonly reportKind?: "update" | undefined;
484
484
  } | undefined;
485
485
  readonly messageAdmission?: {
486
- readonly schemaVersion: 1;
487
- readonly message: {
488
- readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
489
- readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
490
- };
491
- readonly peerName: string;
492
- readonly sender: {
493
- readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
494
- readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
495
- };
496
- readonly returnAddress: {
497
- readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
498
- readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
499
- };
500
- readonly inReplyTo?: {
501
- readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
502
- readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
503
- } | undefined;
504
- } | {
505
486
  readonly _tag: "WorkerCompletion";
506
487
  readonly budgetExhausted: boolean;
507
488
  readonly schemaVersion: 1;
@@ -542,6 +523,25 @@ declare const prepareImportPage: (state: ThreadImportProgress, input: {
542
523
  readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
543
524
  };
544
525
  readonly update: Update;
526
+ } | {
527
+ readonly schemaVersion: 1;
528
+ readonly message: {
529
+ readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
530
+ readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
531
+ };
532
+ readonly peerName: string;
533
+ readonly sender: {
534
+ readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
535
+ readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
536
+ };
537
+ readonly returnAddress: {
538
+ readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
539
+ readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
540
+ };
541
+ readonly inReplyTo?: {
542
+ readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
543
+ readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
544
+ } | undefined;
545
545
  } | undefined;
546
546
  };
547
547
  readonly envelopeDigest: string & import("effect/Brand").Brand<"@effect-agent/thread/Digest">;
@@ -723,25 +723,6 @@ declare const prepareImportPage: (state: ThreadImportProgress, input: {
723
723
  readonly reportKind?: "update" | undefined;
724
724
  } | undefined;
725
725
  readonly messageAdmission?: {
726
- readonly schemaVersion: 1;
727
- readonly message: {
728
- readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
729
- readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
730
- };
731
- readonly peerName: string;
732
- readonly sender: {
733
- readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
734
- readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
735
- };
736
- readonly returnAddress: {
737
- readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
738
- readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
739
- };
740
- readonly inReplyTo?: {
741
- readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
742
- readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
743
- } | undefined;
744
- } | {
745
726
  readonly _tag: "WorkerCompletion";
746
727
  readonly budgetExhausted: boolean;
747
728
  readonly schemaVersion: 1;
@@ -782,6 +763,25 @@ declare const prepareImportPage: (state: ThreadImportProgress, input: {
782
763
  readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
783
764
  };
784
765
  readonly update: Update;
766
+ } | {
767
+ readonly schemaVersion: 1;
768
+ readonly message: {
769
+ readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
770
+ readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
771
+ };
772
+ readonly peerName: string;
773
+ readonly sender: {
774
+ readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
775
+ readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
776
+ };
777
+ readonly returnAddress: {
778
+ readonly threadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
779
+ readonly agentId: string & import("effect/Brand").Brand<"@effect-agent/core/AgentId">;
780
+ };
781
+ readonly inReplyTo?: {
782
+ readonly ownerThreadId: string & import("effect/Brand").Brand<"@effect-agent/core/ThreadId">;
783
+ readonly messageId: string & import("effect/Brand").Brand<"@effect-agent/thread/IdempotencyKey">;
784
+ } | undefined;
785
785
  } | undefined;
786
786
  };
787
787
  readonly envelopeDigest: string & import("effect/Brand").Brand<"@effect-agent/thread/Digest">;
@@ -840,4 +840,4 @@ declare const rebuildClosedSubmission: (admission: ThreadAdmission) => Effect.Ef
840
840
  declare const reencodeThread: <E, R>(source: Stream.Stream<ThreadExport, E, R>) => Effect.Effect<ThreadImportResult, E | ThreadImportRejected | ThreadStoreError, R | ThreadImport>;
841
841
  //#endregion
842
842
  export { ThreadDeliveryImportReader as C, verifyImportedReferences as S, reencodeThread as _, ThreadImport as a, validateImportedRunExecution as b, ThreadImportResult as c, finishThreadImport as d, invalidThreadArchive as f, rebuildImportedSubmission as g, rebuildClosedSubmission as h, ThreadArchive as i, ThreadImport_d_exports as l, prepareImportPage as m, PreparedImportPage as n, ThreadImportProgress as o, makeThreadImportProgress as p, RebuiltSubmission as r, ThreadImportRejected as s, PreparedImportBatch as t, captureImportSource as u, validateClosedRun as v, ThreadImportReader as w, verifyImportedInputOrder as x, validateImportedExecution as y };
843
- //# sourceMappingURL=ThreadImport-mLZiwu30.d.mts.map
843
+ //# sourceMappingURL=ThreadImport-CoQTZywm.d.mts.map
@@ -8,13 +8,13 @@ import { r as canonicalJson, s as digestJson } from "./Digest-DCuPlhNk.mjs";
8
8
  import { AbortIntent, ApprovalDecisionIntent, ApprovalPendingSuspension, InputAppliedMarker, SubmissionState, SuspensionSnapshot, UnknownResolutionIntent, submissionAbortRecordId, submissionInputRecordId, submissionSettlementRecordId, unknownResolutionKind } from "./durable/SubmissionLedger.mjs";
9
9
  import { decodeExportRecord } from "./durable/RecordFormat.mjs";
10
10
  import { x as runIdForSubmission } from "./RunJournal-kfKVxJj7.mjs";
11
- import { C as ThreadApprovalFact, E as ThreadExport, G as ThreadResolutionFact, S as ThreadAdmission, _t as isPreContinuationFact, ct as makeTransferFactCheck, dt as transferPageFits, gt as executionRunIds, x as ThreadAbortFact } from "./ThreadStore-B5sew3ir.mjs";
11
+ import { C as ThreadApprovalFact, E as ThreadExport, G as ThreadResolutionFact, S as ThreadAdmission, _t as isPreContinuationFact, ct as makeTransferFactCheck, dt as transferPageFits, gt as executionRunIds, x as ThreadAbortFact } from "./ThreadStore-CEekRa80.mjs";
12
12
  import { MessageDeliveryRecord } from "./durable/MessageDelivery.mjs";
13
- import { _ as readRunContext, m as validateSuffix, o as isOperationalRecord, v as validateContextBoundary, y as RunContextReader } from "./RunContinuation-CNWMmymY.mjs";
13
+ import { _ as readRunContext, m as validateSuffix, o as isOperationalRecord, v as validateContextBoundary, y as RunContextReader } from "./RunContinuation-DHYNAQFi.mjs";
14
14
  import { workIndexChanges } from "./durable/ThreadWork.mjs";
15
15
  import { r as toolOperationStates } from "./tool-operations-BXBmagY1.mjs";
16
16
  import { validateCanonicalSettlement, validateJoinedSettlement } from "./durable/SettlementPublisher.mjs";
17
- import { c as transferDependencies, l as transferSections, s as sameTransferManifest, u as ImportSourcePhase } from "./ThreadTransfer-DeO03GBg.mjs";
17
+ import { c as transferDependencies, l as transferSections, s as sameTransferManifest, u as ImportSourcePhase } from "./ThreadTransfer-B4gTQLIl.mjs";
18
18
  import { Context, Effect, Layer, Pull, Schema, Stream } from "effect";
19
19
  //#region src/durable/internal/thread-import-reader.ts
20
20
  /** Exact indexes for one captured Thread transaction. Run records and commands enforce count and byte bounds. */
@@ -481,4 +481,4 @@ const reencodeThread = Effect.fnUntraced(function* (source) {
481
481
  //#endregion
482
482
  export { validateImportedRunExecution as _, ThreadImportResult as a, ThreadDeliveryImportReader as b, finishThreadImport as c, prepareImportPage as d, rebuildClosedSubmission as f, validateImportedExecution as g, validateClosedRun as h, ThreadImportRejected as i, invalidThreadArchive as l, reencodeThread as m, ThreadArchive as n, ThreadImport_exports as o, rebuildImportedSubmission as p, ThreadImport as r, captureImportSource as s, RebuiltSubmission as t, makeThreadImportProgress as u, verifyImportedInputOrder as v, ThreadImportReader as x, verifyImportedReferences as y };
483
483
 
484
- //# sourceMappingURL=ThreadImport-BsOXD7qr.mjs.map
484
+ //# sourceMappingURL=ThreadImport-DckUMEqJ.mjs.map