effect-agent 0.1.0-beta.124 → 0.1.0-beta.126

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 (80) hide show
  1. package/dist/{Records-D88mgvyS.d.mts → Admin-C34cVKlT.d.mts} +2908 -3941
  2. package/dist/{AgentRuntime-BUxDdLpw.d.mts → AgentRuntime-DEDvMkAR.d.mts} +2 -2
  3. package/dist/Digest-U69rDHuO.d.mts +22 -0
  4. package/dist/{DurableAgentRuntime-B-9w7jDt.mjs → DurableAgentRuntime-BydyN_n-.mjs} +89 -15
  5. package/dist/DurableAgentRuntime-BydyN_n-.mjs.map +1 -0
  6. package/dist/{EventSource-CnlZ3Kma.d.mts → EventSource-Bac0SxKL.d.mts} +3 -3
  7. package/dist/{PreparedInputAdmission-BQLGldl-.d.mts → PreparedInputAdmission-DcQGQ0Yp.d.mts} +4 -4
  8. package/dist/Records-B5GFWCpn.d.mts +1104 -0
  9. package/dist/{Schedule-BIOHA6RR.d.mts → Schedule-CtYREFnz.d.mts} +2 -2
  10. package/dist/{Subagent-DCrB7an7.mjs → Subagent-DJeZDrbD.mjs} +6 -2
  11. package/dist/Subagent-DJeZDrbD.mjs.map +1 -0
  12. package/dist/{Subagent-CNik9RiA.d.mts → Subagent-DRFyQxdb.d.mts} +21 -4
  13. package/dist/{SubagentHost-4WB8Hj0C.d.mts → SubagentHost-DQjHFGqH.d.mts} +10 -2
  14. package/dist/{Subscription-CRteOKRf.d.mts → Subscription-Bk2Smmqc.d.mts} +34 -3
  15. package/dist/{SubscriptionInput-oNcwTPti.d.mts → SubscriptionInput-ekbJz3pF.d.mts} +3 -3
  16. package/dist/capabilities/Subagent.d.mts +1 -1
  17. package/dist/capabilities/Subagent.mjs +1 -1
  18. package/dist/durable/ActivityStore.d.mts +1 -1
  19. package/dist/durable/Admin.d.mts +1 -1
  20. package/dist/durable/AgentRegistration.d.mts +1 -1
  21. package/dist/durable/Certification.d.mts +1 -1
  22. package/dist/durable/CommittedActivity.d.mts +3 -1
  23. package/dist/durable/Digest.d.mts +1 -1
  24. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  25. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  26. package/dist/durable/EventSource.d.mts +1 -1
  27. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  28. package/dist/durable/MessageDelivery.d.mts +82 -41
  29. package/dist/durable/MessageDeliveryStoreConformance.d.mts +23 -1
  30. package/dist/durable/PersistentHistory.d.mts +1 -1
  31. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  32. package/dist/durable/Records.d.mts +2 -2
  33. package/dist/durable/Records.mjs +12 -2
  34. package/dist/durable/Records.mjs.map +1 -1
  35. package/dist/durable/Recovery.d.mts +1 -1
  36. package/dist/durable/RunJournal.d.mts +1 -1
  37. package/dist/durable/Schedule.d.mts +1 -1
  38. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  39. package/dist/durable/ScheduleTransition.d.mts +1 -1
  40. package/dist/durable/Scheduling.d.mts +3 -2
  41. package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
  42. package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
  43. package/dist/durable/SqlThreadNativeReads.d.mts +2 -1
  44. package/dist/durable/SqlThreadNativeReads.mjs +1 -1
  45. package/dist/durable/SqlThreadNativeReads.mjs.map +1 -1
  46. package/dist/durable/SubmissionLedger.d.mts +1 -1
  47. package/dist/durable/SubmissionLedgerConformance.d.mts +2 -1
  48. package/dist/durable/SubmissionStatus.d.mts +1 -1
  49. package/dist/durable/Subscription.d.mts +1 -1
  50. package/dist/durable/SubscriptionInput.d.mts +1 -1
  51. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  52. package/dist/durable/SubscriptionTools.d.mts +4 -3
  53. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  54. package/dist/durable/Subscriptions.d.mts +6 -5
  55. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  56. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  57. package/dist/durable/ThreadInvariants.d.mts +2 -1
  58. package/dist/durable/ThreadProjection.d.mts +1 -1
  59. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  60. package/dist/durable/ThreadStore.d.mts +1 -1
  61. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  62. package/dist/durable/ThreadStoreConformance.mjs +10 -1
  63. package/dist/durable/ThreadStoreConformance.mjs.map +1 -1
  64. package/dist/durable/WorkerHost.d.mts +9 -2
  65. package/dist/durable/WorkerHost.mjs.map +1 -1
  66. package/dist/engine/AgentRuntime.d.mts +1 -1
  67. package/dist/engine/SubagentHost.d.mts +1 -1
  68. package/dist/engine/SubagentHost.mjs.map +1 -1
  69. package/dist/index.d.mts +12 -10
  70. package/dist/index.mjs +2 -2
  71. package/package.json +1 -1
  72. package/src/capabilities/internal/subagent-background.ts +37 -3
  73. package/src/durable/Records.ts +13 -1
  74. package/src/durable/SqlThreadNativeReads.ts +1 -1
  75. package/src/durable/ThreadStoreConformance.ts +28 -0
  76. package/src/durable/WorkerHost.ts +14 -2
  77. package/src/durable/internal/worker-host.ts +284 -9
  78. package/src/engine/SubagentHost.ts +9 -0
  79. package/dist/DurableAgentRuntime-B-9w7jDt.mjs.map +0 -1
  80. package/dist/Subagent-DCrB7an7.mjs.map +0 -1
@@ -1,9 +1,10 @@
1
1
  import { r as Principal } from "../Receipt-BAHyigAF.mjs";
2
- import { O as PersistedJson, ya as AdmissionFence } from "../Records-D88mgvyS.mjs";
3
- import { D as SubscriptionStore, E as SubscriptionSourceError, O as SubscriptionStoreFailure, T as SubscriptionSnapshot, _ as SubscriptionKey, c as SubscriptionAuthorizer, f as SubscriptionDeliveryKey, i as EventSourceVersion, m as SubscriptionError, p as SubscriptionDeliverySnapshot, r as EventAcknowledgement, u as SubscriptionConfiguration, v as SubscriptionLimits, w as SubscriptionScope } from "../Subscription-CRteOKRf.mjs";
4
- import { r as EventSources } from "../EventSource-CnlZ3Kma.mjs";
5
- import { t as PreparedInputAdmission } from "../PreparedInputAdmission-BQLGldl-.mjs";
6
- import { n as SubscriptionInputBindings } from "../SubscriptionInput-oNcwTPti.mjs";
2
+ import { O as PersistedJson } from "../Records-B5GFWCpn.mjs";
3
+ import { pt as AdmissionFence } from "../Admin-C34cVKlT.mjs";
4
+ import { D as SubscriptionStore, E as SubscriptionSourceError, O as SubscriptionStoreFailure, T as SubscriptionSnapshot, _ as SubscriptionKey, c as SubscriptionAuthorizer, f as SubscriptionDeliveryKey, i as EventSourceVersion, m as SubscriptionError, p as SubscriptionDeliverySnapshot, r as EventAcknowledgement, u as SubscriptionConfiguration, v as SubscriptionLimits, w as SubscriptionScope } from "../Subscription-Bk2Smmqc.mjs";
5
+ import { r as EventSources } from "../EventSource-Bac0SxKL.mjs";
6
+ import { t as PreparedInputAdmission } from "../PreparedInputAdmission-DcQGQ0Yp.mjs";
7
+ import { n as SubscriptionInputBindings } from "../SubscriptionInput-ekbJz3pF.mjs";
7
8
  import { Context, Crypto, Effect, Layer } from "effect";
8
9
  declare namespace Subscriptions_d_exports {
9
10
  export { SubscribeOptions, SubscriptionDriver, SubscriptionFailure, SubscriptionIntake, Subscriptions };
@@ -1,5 +1,5 @@
1
1
  import { ContextHistory, ContextHistoryError } from "../engine/ContextHistory.mjs";
2
- import { Sn as ThreadStore } from "../Records-D88mgvyS.mjs";
2
+ import { Qr as ThreadStore } from "../Admin-C34cVKlT.mjs";
3
3
  import { Layer, Schema } from "effect";
4
4
  declare namespace ThreadContextHistory_d_exports {
5
5
  export { ThreadContextHistoryOptions, layer };
@@ -1,5 +1,5 @@
1
1
  import { ContextHistoryError } from "../engine/ContextHistory.mjs";
2
- import { l as CanonicalRecordEnvelope } from "../Records-D88mgvyS.mjs";
2
+ import { l as CanonicalRecordEnvelope } from "../Records-B5GFWCpn.mjs";
3
3
  import { Effect, Schema } from "effect";
4
4
  declare namespace ThreadContextHistoryProjection_d_exports {
5
5
  export { ContextHistoryBoundary, ContextHistoryEvidence, ContextHistoryProjection, matchText, normalizeQuery, normalizeText, project, windowIdFor };
@@ -1,4 +1,5 @@
1
- import { A as ProducerId, Yr as IntegrityReport, a as BatchId, cn as ThreadExport, ko as SubmissionSnapshot, on as ThreadCheckpoint } from "../Records-D88mgvyS.mjs";
1
+ import { A as ProducerId, a as BatchId } from "../Records-B5GFWCpn.mjs";
2
+ import { Cn as SubmissionSnapshot, Ir as ThreadCheckpoint, Rr as ThreadExport, c as IntegrityReport } from "../Admin-C34cVKlT.mjs";
2
3
  import { Crypto, Effect } from "effect";
3
4
  declare namespace ThreadInvariants_d_exports {
4
5
  export { ThreadInvariantInput, verifyThreadInvariants };
@@ -1,5 +1,5 @@
1
1
  import { u as ThreadId } from "../Identifiers-CN2s30fF.mjs";
2
- import { G as SubagentRequested, J as SubmissionSettledRecord, K as SubagentStarted, Q as ToolApprovalRequested, U as SubagentJoined, W as SubagentLineageRecorded, Z as ToolApprovalDecided, _ as Digest, l as CanonicalRecordEnvelope, q as SubmissionSettled, rt as ToolCallUnknown, t as AbortRequested } from "../Records-D88mgvyS.mjs";
2
+ import { G as SubagentRequested, J as SubmissionSettledRecord, K as SubagentStarted, Q as ToolApprovalRequested, U as SubagentJoined, W as SubagentLineageRecorded, Z as ToolApprovalDecided, _ as Digest, l as CanonicalRecordEnvelope, q as SubmissionSettled, rt as ToolCallUnknown, t as AbortRequested } from "../Records-B5GFWCpn.mjs";
3
3
  import { Schema } from "effect";
4
4
  declare namespace ThreadProjection_d_exports {
5
5
  export { ApprovalRecord, OpenToolCallState, SubagentInvocationState, ThreadProjection, initialThreadProjection, reduceThreadRecord, replayThread, replayThreadFromCheckpoint };
@@ -1,4 +1,4 @@
1
- import { Zt as AppendResult, en as FencedAppendRequest } from "../Records-D88mgvyS.mjs";
1
+ import { Ar as FencedAppendRequest, Dr as AppendResult } from "../Admin-C34cVKlT.mjs";
2
2
  import { Context, Effect, Layer, Option, Schema } from "effect";
3
3
  declare namespace ThreadProjectionMaintenance_d_exports {
4
4
  export { ThreadProjectionError, ThreadProjectionMaintenance, ThreadProjectionMaintenanceService, drainDue };
@@ -1,2 +1,2 @@
1
- import { $t as FenceRejected, An as getRecord, Cn as ThreadStoreDiagnostic, Dn as ThreadTail, Mn as readOutstanding, Nn as readWorkerState, On as ThreadTailRequest, Qt as CheckpointRejected, Sn as ThreadStore, Tn as ThreadStoreFailure, Xt as AppendConflict, Zt as AppendResult, _n as ThreadReadRequest, an as SelectedThreadRead, bn as ThreadRunInputRequest, cn as ThreadExport, dn as ThreadNotMaterialized, en as FencedAppendRequest, fn as ThreadObservation, gn as ThreadRead, hn as ThreadPeerCountRequest, in as SaveRecoveryCheckpointRequest, jn as getRunInput, kn as ThreadWorkerStateRequest, ln as ThreadExportRequest, mn as ThreadOutstandingRequest, nn as MAX_THREAD_EXPORT_RECORDS, on as ThreadCheckpoint, pn as ThreadOutstanding, rn as SaveCheckpointRequest, sn as ThreadCheckpoints, tn as LoadCheckpointRequest, un as ThreadMaterialization, vn as ThreadRecordRequest, wn as ThreadStoreError, xn as ThreadSelection, yn as ThreadRecoveryCheckpoints } from "../Records-D88mgvyS.mjs";
1
+ import { $r as ThreadStoreDiagnostic, Ar as FencedAppendRequest, Br as ThreadMaterialization, Dr as AppendResult, Er as AppendConflict, Fr as SelectedThreadRead, Gr as ThreadPeerCountRequest, Hr as ThreadObservation, Ir as ThreadCheckpoint, Jr as ThreadRecordRequest, Kr as ThreadRead, Lr as ThreadCheckpoints, Mr as MAX_THREAD_EXPORT_RECORDS, Nr as SaveCheckpointRequest, Or as CheckpointRejected, Pr as SaveRecoveryCheckpointRequest, Qr as ThreadStore, Rr as ThreadExport, Ur as ThreadOutstanding, Vr as ThreadNotMaterialized, Wr as ThreadOutstandingRequest, Xr as ThreadRunInputRequest, Yr as ThreadRecoveryCheckpoints, Zr as ThreadSelection, ai as ThreadWorkerStateRequest, ci as readOutstanding, ei as ThreadStoreError, ii as ThreadTailRequest, jr as LoadCheckpointRequest, kr as FenceRejected, li as readWorkerState, oi as getRecord, qr as ThreadReadRequest, ri as ThreadTail, si as getRunInput, ti as ThreadStoreFailure, zr as ThreadExportRequest } from "../Admin-C34cVKlT.mjs";
2
2
  export { AppendConflict, AppendResult, CheckpointRejected, FenceRejected, FencedAppendRequest, LoadCheckpointRequest, MAX_THREAD_EXPORT_RECORDS, SaveCheckpointRequest, SaveRecoveryCheckpointRequest, SelectedThreadRead, ThreadCheckpoint, ThreadCheckpoints, ThreadExport, ThreadExportRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadOutstanding, ThreadOutstandingRequest, ThreadPeerCountRequest, ThreadRead, ThreadReadRequest, ThreadRecordRequest, ThreadRecoveryCheckpoints, ThreadRunInputRequest, ThreadSelection, ThreadStore, ThreadStoreDiagnostic, ThreadStoreError, ThreadStoreFailure, ThreadTail, ThreadTailRequest, ThreadWorkerStateRequest, getRecord, getRunInput, readOutstanding, readWorkerState };
@@ -1,4 +1,4 @@
1
- import { Qt as CheckpointRejected, Sn as ThreadStore, Tn as ThreadStoreFailure } from "../Records-D88mgvyS.mjs";
1
+ import { Or as CheckpointRejected, Qr as ThreadStore, ti as ThreadStoreFailure } from "../Admin-C34cVKlT.mjs";
2
2
  import { Effect, Schema } from "effect";
3
3
  //#region src/durable/ThreadStoreConformance.d.ts
4
4
  declare const ThreadStoreConformanceViolation_base: Schema.Class<ThreadStoreConformanceViolation, Schema.TaggedStruct<"ThreadStoreConformanceViolation", {
@@ -2,7 +2,7 @@ import { AgentId, DelegationId, ReceiptId, RunId, SettlementId, SubmissionId, Th
2
2
  import { AgentPolicy } from "../core/AgentPolicy.mjs";
3
3
  import { IdempotencyKey } from "../core/Receipt.mjs";
4
4
  import { SubagentDelegationCaps, SubagentGrant, SubagentReservationAmounts } from "../core/SubagentContract.mjs";
5
- import { BatchId, CanonicalBatch, CanonicalSequence, DeploymentId, PeerMessagePrepared, ProducerEpoch, ProducerId, RecordEnvelope, RecordId, SubtreeBudgetReserved, ToolCallPrepared, ToolCallResolved, ToolCallSettled, ToolCallUnknown, UserInputRecorded, WorkerInputCompleted, WorkerInputRequested } from "./Records.mjs";
5
+ import { BatchId, CanonicalBatch, CanonicalSequence, DeploymentId, PeerMessagePrepared, ProducerEpoch, ProducerId, RecordEnvelope, RecordId, SubtreeBudgetReserved, ToolCallPrepared, ToolCallResolved, ToolCallSettled, ToolCallUnknown, UserInputRecorded, WorkerInputCompleted, WorkerInputRequested, WorkerStopRequested } from "./Records.mjs";
6
6
  import { EMPTY_TAIL_DIGEST } from "./Digest.mjs";
7
7
  import { AppendConflict, CheckpointRejected, FenceRejected, FencedAppendRequest, LoadCheckpointRequest, SaveCheckpointRequest, ThreadCheckpoint, ThreadExportRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadObservation, ThreadRead, ThreadStore, ThreadTailRequest, getRecord, getRunInput, readWorkerState } from "./ThreadStore.mjs";
8
8
  import { DateTime, Effect, Option, Schema, Stream } from "effect";
@@ -486,6 +486,15 @@ const threadStoreConformanceCases = [
486
486
  });
487
487
  yield* ensure(accounting.records.length === 4 && accounting.records.filter(({ record }) => record.payload._tag === "SubtreeBudgetReserved").map(({ record }) => record.recordId).join() === "selected", "Worker state excludes conversation and another Run's accounting, retaining completed lifetime reservations");
488
488
  yield* ensure(accounting.tailSequence === tail.lastSequence && accounting.tailDigest === tail.tailDigest, "The accounting snapshot carries the full canonical CAS tail");
489
+ yield* append(threadId, batch("stop-worker", [envelope("stop-worker", WorkerStopRequested.make({ command: {
490
+ worker: origin.worker,
491
+ idempotencyKey: Schema.decodeSync(IdempotencyKey)("stop-worker")
492
+ } }))]), tail);
493
+ yield* ensure((yield* readWorkerState({
494
+ threadId,
495
+ sourceSubmissionId: CONFORMANCE_SUBMISSION,
496
+ limit: 5
497
+ })).records.some(({ record }) => record.payload._tag === "WorkerStopRequested"), "Native worker state retains explicit stop intent after assignment completion");
489
498
  })),
490
499
  atomicBatchVisibility,
491
500
  idempotentReplay,
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadStoreConformance.mjs","names":[],"sources":["../../src/durable/ThreadStoreConformance.ts"],"sourcesContent":["import { Effect, DateTime, Option, Schema, Stream } from \"effect\";\n\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport {\n ThreadId,\n RunId,\n SubmissionId,\n ToolCallId,\n TurnId,\n AgentId,\n DelegationId,\n ReceiptId,\n SettlementId,\n} from \"../core/Identifiers.ts\";\nimport { IdempotencyKey } from \"../core/Receipt.ts\";\nimport {\n SubagentDelegationCaps,\n SubagentGrant,\n SubagentReservationAmounts,\n} from \"../core/SubagentContract.ts\";\nimport { EMPTY_TAIL_DIGEST } from \"./Digest.ts\";\nimport type { Digest } from \"./Records.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n DeploymentId,\n ProducerEpoch,\n ProducerId,\n RecordEnvelope,\n RecordId,\n UserInputRecorded,\n ToolCallPrepared,\n ToolCallUnknown,\n ToolCallResolved,\n ToolCallSettled,\n WorkerInputRequested,\n WorkerInputCompleted,\n SubtreeBudgetReserved,\n PeerMessagePrepared,\n} from \"./Records.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n CheckpointRejected,\n ThreadCheckpoint,\n ThreadExportRequest,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadObservation,\n ThreadRead,\n ThreadStore,\n getRecord,\n getRunInput,\n readWorkerState,\n ThreadTailRequest,\n FencedAppendRequest,\n FenceRejected,\n LoadCheckpointRequest,\n SaveCheckpointRequest,\n type ThreadStoreFailure,\n} from \"./ThreadStore.ts\";\n\n/** A ThreadStore contract invariant that an adapter under test violated. */\nexport class ThreadStoreConformanceViolation extends Schema.TaggedError<ThreadStoreConformanceViolation>()(\n \"ThreadStoreConformanceViolation\",\n {\n caseName: Schema.String,\n message: Schema.String,\n },\n) {}\n\nexport type ThreadStoreConformanceFailure =\n | ThreadStoreFailure\n | CheckpointRejected\n | ThreadStoreConformanceViolation;\n\n/**\n * One adapter-neutral ThreadStore contract case. Each case owns disjoint\n * Thread identities, so a suite may run every case against one shared store\n * instance or against a fresh store per case.\n */\nexport interface ThreadStoreConformanceCase {\n readonly name: string;\n readonly run: Effect.Effect<void, ThreadStoreConformanceFailure, ThreadStore>;\n}\n\nconst decodeThreadId = Schema.decodeSync(ThreadId);\nconst decodeRecordId = Schema.decodeSync(RecordId);\nconst decodeBatchId = Schema.decodeSync(BatchId);\nconst decodeSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeEpoch = Schema.decodeSync(ProducerEpoch);\n\nconst CONFORMANCE_DEPLOYMENT = Schema.decodeSync(DeploymentId)(\"deployment-conformance\");\nconst CONFORMANCE_PRODUCER = Schema.decodeSync(ProducerId)(\"producer-conformance\");\nconst CONFORMANCE_SUBMISSION = Schema.decodeSync(SubmissionId)(\"submission-conformance\");\nconst CONFORMANCE_RUN = Schema.decodeSync(RunId)(\"run-conformance\");\nconst CONFORMANCE_CREATED_AT = DateTime.toUtc(DateTime.makeUnsafe(1));\n\nconst ZERO_SEQUENCE = decodeSequence(0);\nconst EPOCH_ONE = decodeEpoch(1);\nconst EPOCH_TWO = decodeEpoch(2);\nconst EMPTY_TAIL = { lastSequence: ZERO_SEQUENCE, tailDigest: EMPTY_TAIL_DIGEST } as const;\nconst isAppendConflict = Schema.is(AppendConflict);\nconst isFenceRejected = Schema.is(FenceRejected);\nconst isCheckpointRejected = Schema.is(CheckpointRejected);\nconst isThreadNotMaterialized = Schema.is(ThreadNotMaterialized);\n\nconst record = (recordId: string, input: string): RecordEnvelope =>\n RecordEnvelope.make({\n recordId: decodeRecordId(recordId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: CONFORMANCE_CREATED_AT,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n payload: UserInputRecorded.make({\n submissionId: CONFORMANCE_SUBMISSION,\n kind: \"user\",\n runId: CONFORMANCE_RUN,\n input,\n }),\n });\n\nconst batch = (\n batchId: string,\n records: readonly [RecordEnvelope, ...Array<RecordEnvelope>],\n): CanonicalBatch =>\n CanonicalBatch.make({\n batchId: decodeBatchId(batchId),\n producerId: CONFORMANCE_PRODUCER,\n records,\n });\n\nconst materialize = Effect.fn(\"ThreadStoreConformance.materialize\")(function* (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n) {\n const store = yield* ThreadStore;\n\n yield* store.materialize(ThreadMaterialization.make({ threadId, producerEpoch }));\n});\n\nconst append = Effect.fn(\"ThreadStoreConformance.append\")(function* (\n threadId: ThreadId,\n canonicalBatch: CanonicalBatch,\n tail: Pick<AppendResult, \"lastSequence\" | \"tailDigest\"> = EMPTY_TAIL,\n producerEpoch: ProducerEpoch = EPOCH_ONE,\n) {\n const store = yield* ThreadStore;\n\n return yield* store.append(\n FencedAppendRequest.make({\n threadId,\n batch: canonicalBatch,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch,\n }),\n );\n});\n\nconst readAll = Effect.fn(\"ThreadStoreConformance.readAll\")(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n\n return yield* store.read(ThreadRead.make({ threadId, limit: 1_024 })).pipe(Stream.runCollect);\n});\n\nconst checkpointAt = (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n tailDigest: Digest,\n): ThreadCheckpoint =>\n ThreadCheckpoint.make({\n schemaVersion: 1,\n threadId,\n throughSequence,\n tailDigest,\n state: { conformance: true },\n createdAt: CONFORMANCE_CREATED_AT,\n });\n\nconst conformanceCase = (\n name: string,\n build: (assert: {\n readonly ensure: (\n condition: boolean,\n message: string,\n ) => Effect.Effect<void, ThreadStoreConformanceViolation>;\n readonly expectFailure: <A, E, R>(\n description: string,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<E, ThreadStoreConformanceViolation, R>;\n }) => Effect.Effect<void, ThreadStoreConformanceFailure, ThreadStore>,\n): ThreadStoreConformanceCase => ({\n name,\n run: build({\n ensure: (condition, message) =>\n condition\n ? Effect.void\n : Effect.fail(ThreadStoreConformanceViolation.make({ caseName: name, message })),\n expectFailure: (description, effect) =>\n Effect.flip(effect).pipe(\n Effect.mapError(() =>\n ThreadStoreConformanceViolation.make({\n caseName: name,\n message: `Expected failure but the operation succeeded: ${description}`,\n }),\n ),\n ),\n }).pipe(Effect.withSpan(`ThreadStoreConformance.${name}`)),\n});\n\nconst atomicBatchVisibility = conformanceCase(\n \"commits batches atomically with no partial reader visibility\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-atomic\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const committed = yield* append(\n threadId,\n batch(\"atomic-batch-1\", [\n record(\"atomic-record-1\", \"first\"),\n record(\"atomic-record-2\", \"second\"),\n record(\"atomic-record-3\", \"third\"),\n ]),\n );\n\n yield* ensure(\n committed.firstSequence === 1 && committed.lastSequence === 3,\n \"A three-record batch must commit sequences 1 through 3\",\n );\n\n const read = yield* readAll(threadId);\n\n yield* ensure(read.length === 3, \"Readers must observe the full committed batch\");\n yield* ensure(\n read.every((envelope, index) => envelope.sequence === index + 1),\n \"Committed records must be gap-free in declaration order\",\n );\n\n const observed = yield* store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(3), Stream.runCollect);\n\n yield* ensure(\n observed.map((envelope) => envelope.record.recordId).join(\",\") ===\n read.map((envelope) => envelope.record.recordId).join(\",\"),\n \"Observers must see exactly the committed batch records in order\",\n );\n\n const duplicate = record(\"atomic-record-4\", \"duplicate\");\n\n const intraBatch = yield* expectFailure(\n \"a batch containing one record ID twice\",\n append(threadId, batch(\"atomic-batch-2\", [duplicate, duplicate]), committed),\n );\n\n yield* ensure(\n isAppendConflict(intraBatch) && intraBatch.reason === \"record-identity\",\n \"A duplicated record ID inside one batch must conflict with reason record-identity\",\n );\n\n const crossBatch = yield* expectFailure(\n \"a batch reusing an already-committed record ID\",\n append(threadId, batch(\"atomic-batch-3\", [record(\"atomic-record-1\", \"reused\")]), committed),\n );\n\n yield* ensure(\n isAppendConflict(crossBatch) && crossBatch.reason === \"record-identity\",\n \"A record ID reused across batches must conflict with reason record-identity\",\n );\n\n const exported = yield* store.export(ThreadExportRequest.make({ threadId }));\n\n yield* ensure(\n exported.records.length === 3 &&\n exported.tailSequence === committed.lastSequence &&\n exported.tailDigest === committed.tailDigest,\n \"A conflicting batch must leave no partial prefix behind\",\n );\n }),\n);\n\nconst idempotentReplay = conformanceCase(\n \"replays an identical batch idempotently and rejects altered content\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-replay\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const original = batch(\"replay-batch-1\", [\n record(\"replay-record-1\", \"Lisbon\"),\n record(\"replay-record-2\", \"Porto\"),\n ]);\n\n const first = yield* append(threadId, original);\n\n yield* ensure(!first.replayed, \"The first append of a batch must not report replayed\");\n\n const replayed = yield* append(threadId, original);\n\n yield* ensure(\n replayed.replayed &&\n replayed.firstSequence === first.firstSequence &&\n replayed.lastSequence === first.lastSequence &&\n replayed.tailDigest === first.tailDigest,\n \"Replaying an identical batch must return the original result with replayed set\",\n );\n\n const altered = yield* expectFailure(\n \"replaying a batch ID with different canonical content\",\n append(threadId, batch(\"replay-batch-1\", [record(\"replay-record-3\", \"Faro\")])),\n );\n\n yield* ensure(\n isAppendConflict(altered) && altered.reason === \"batch-digest\",\n \"A batch ID replayed with different content must conflict with reason batch-digest\",\n );\n\n const read = yield* readAll(threadId);\n\n yield* ensure(read.length === 2, \"Replay and conflict must not duplicate committed records\");\n }),\n);\n\nconst tailConflict = conformanceCase(\n \"rejects stale expected tails and reports the actual tail\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-tail\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"tail-batch-1\", [record(\"tail-record-1\", \"first\")]),\n );\n\n const staleSequence = yield* expectFailure(\n \"an append declaring the pre-append tail sequence\",\n append(threadId, batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")])),\n );\n\n yield* ensure(\n isAppendConflict(staleSequence) && staleSequence.reason === \"tail\",\n \"A stale expected tail sequence must conflict with reason tail\",\n );\n yield* ensure(\n isAppendConflict(staleSequence) &&\n staleSequence.actualTailSequence === first.lastSequence &&\n staleSequence.actualTailDigest === first.tailDigest,\n \"A tail conflict must carry the actual committed tail as a resume hint\",\n );\n\n const staleDigest = yield* expectFailure(\n \"an append declaring the right sequence with the wrong digest\",\n append(threadId, batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")]), {\n lastSequence: first.lastSequence,\n tailDigest: EMPTY_TAIL_DIGEST,\n }),\n );\n\n yield* ensure(\n isAppendConflict(staleDigest) && staleDigest.reason === \"tail\",\n \"A stale expected tail digest must conflict with reason tail\",\n );\n\n const recovered = yield* append(\n threadId,\n batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")]),\n first,\n );\n\n yield* ensure(\n recovered.firstSequence === first.lastSequence + 1,\n \"An append declaring the true tail must commit after a tail conflict\",\n );\n }),\n);\n\nconst producerFencing = conformanceCase(\n \"fences stale producer epochs while allowing epoch takeover\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-fencing\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"fence-batch-1\", [record(\"fence-record-1\", \"first\")]),\n );\n\n yield* materialize(threadId, EPOCH_TWO);\n\n const staleAppend = yield* expectFailure(\n \"an append using the pre-takeover producer epoch\",\n append(\n threadId,\n batch(\"fence-batch-2\", [record(\"fence-record-2\", \"second\")]),\n first,\n EPOCH_ONE,\n ),\n );\n\n yield* ensure(\n isFenceRejected(staleAppend) &&\n staleAppend.actualEpoch === EPOCH_TWO &&\n staleAppend.attemptedEpoch === EPOCH_ONE,\n \"A stale producer epoch must be fenced with both epochs reported\",\n );\n\n const staleMaterialize = yield* expectFailure(\n \"re-materializing with the pre-takeover producer epoch\",\n materialize(threadId, EPOCH_ONE),\n );\n\n yield* ensure(\n isFenceRejected(staleMaterialize),\n \"A stale producer epoch must not re-register through materialization\",\n );\n\n const takeover = yield* append(\n threadId,\n batch(\"fence-batch-2\", [record(\"fence-record-2\", \"second\")]),\n first,\n EPOCH_TWO,\n );\n\n yield* ensure(\n !takeover.replayed && takeover.firstSequence === first.lastSequence + 1,\n \"The takeover epoch must append after the committed tail\",\n );\n }),\n);\n\nconst offsetResumability = conformanceCase(\n \"resumes observation from a saved offset with exactly the suffix\",\n ({ ensure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-offsets\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"offset-batch-1\", [\n record(\"offset-record-1\", \"first\"),\n record(\"offset-record-2\", \"second\"),\n ]),\n );\n\n const second = yield* append(\n threadId,\n batch(\"offset-batch-2\", [record(\"offset-record-3\", \"third\")]),\n first,\n );\n\n yield* append(\n threadId,\n batch(\"offset-batch-3\", [record(\"offset-record-4\", \"fourth\")]),\n second,\n );\n\n const committed = yield* readAll(threadId);\n\n yield* ensure(committed.length === 4, \"All committed records must be readable\");\n const savedOffset = committed[1]?.offset;\n\n yield* ensure(savedOffset !== undefined, \"Committed records must carry observation offsets\");\n if (savedOffset === undefined) return;\n\n const resumed = yield* store\n .observe(ThreadObservation.make({ threadId, afterOffset: savedOffset }))\n .pipe(Stream.take(2), Stream.runCollect);\n\n yield* ensure(\n resumed.map((envelope) => envelope.record.recordId).join(\",\") ===\n committed\n .slice(2)\n .map((envelope) => envelope.record.recordId)\n .join(\",\"),\n \"Observation from a saved offset must deliver exactly the suffix in order\",\n );\n\n const fromStart = yield* store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(4), Stream.runCollect);\n\n yield* ensure(\n fromStart.map((envelope) => envelope.record.recordId).join(\",\") ===\n committed.map((envelope) => envelope.record.recordId).join(\",\"),\n \"Observation without an offset must deliver the full log in order\",\n );\n }),\n);\n\nconst checkpointBoundaries = conformanceCase(\n \"enforces checkpoint save and load boundary rules\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-checkpoints\");\n const store = yield* ThreadStore;\n const checkpoints = store.checkpoints;\n\n if (checkpoints === undefined) {\n return yield* ThreadStoreConformanceViolation.make({\n caseName: \"enforces checkpoint save and load boundary rules\",\n message: \"The optional checkpoint suite requires checkpoint support\",\n });\n }\n\n const missing = [\n yield* expectFailure(\n \"saving a checkpoint for an unmaterialized Thread\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(threadId, ZERO_SEQUENCE, EMPTY_TAIL_DIGEST),\n }),\n ),\n ),\n yield* expectFailure(\n \"loading a checkpoint for an unmaterialized Thread\",\n checkpoints.load(LoadCheckpointRequest.make({ threadId })),\n ),\n ];\n\n yield* ensure(\n missing.every(isThreadNotMaterialized),\n \"Checkpoints require a materialized Thread\",\n );\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"checkpoint-batch-1\", [record(\"checkpoint-record-1\", \"Kyoto\")]),\n );\n\n const aheadOfTail = yield* expectFailure(\n \"a checkpoint claiming a sequence beyond the committed tail\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(\n threadId,\n decodeSequence(first.lastSequence + 1),\n first.tailDigest,\n ),\n }),\n ),\n );\n\n yield* ensure(\n isCheckpointRejected(aheadOfTail) && aheadOfTail.reason === \"ahead-of-tail\",\n \"A checkpoint ahead of the tail must be rejected with reason ahead-of-tail\",\n );\n\n const digestMismatch = yield* expectFailure(\n \"a checkpoint whose digest does not match the canonical chain\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(threadId, first.lastSequence, EMPTY_TAIL_DIGEST),\n }),\n ),\n );\n\n yield* ensure(\n isCheckpointRejected(digestMismatch) && digestMismatch.reason === \"digest-mismatch\",\n \"A checkpoint with a mismatched digest must be rejected with reason digest-mismatch\",\n );\n yield* ensure(\n Option.isNone(yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }))),\n \"Rejected checkpoints must not become loadable\",\n );\n\n const valid = checkpointAt(threadId, first.lastSequence, first.tailDigest);\n\n yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));\n yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));\n\n const loaded = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));\n\n yield* ensure(\n Option.isSome(loaded) &&\n loaded.value.throughSequence === first.lastSequence &&\n loaded.value.tailDigest === first.tailDigest,\n \"A valid checkpoint must load bound to its canonical sequence and digest\",\n );\n\n const beforeCheckpoint = yield* checkpoints.load(\n LoadCheckpointRequest.make({ threadId, atOrBeforeSequence: ZERO_SEQUENCE }),\n );\n\n yield* ensure(\n Option.isNone(beforeCheckpoint),\n \"Checkpoint lookup must respect the atOrBeforeSequence bound\",\n );\n\n yield* append(\n threadId,\n batch(\"checkpoint-batch-2\", [record(\"checkpoint-record-2\", \"Nara\")]),\n first,\n );\n const afterAppend = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));\n\n yield* ensure(\n Option.isSome(afterAppend) && afterAppend.value.throughSequence === first.lastSequence,\n \"An older checkpoint must remain loadable after later appends\",\n );\n }),\n);\n\nconst tailInspection = conformanceCase(\n \"inspects the canonical tail so a resuming producer can compose its next append\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-tail-inspection\");\n const store = yield* ThreadStore;\n\n const missing = yield* expectFailure(\n \"inspecting the tail of an unmaterialized Thread\",\n store.inspectTail(ThreadTailRequest.make({ threadId })),\n );\n\n yield* ensure(\n isThreadNotMaterialized(missing) && missing.threadId === threadId,\n \"Tail inspection of an unmaterialized Thread must fail as not materialized\",\n );\n\n yield* materialize(threadId, EPOCH_ONE);\n const empty = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n empty.tailSequence === ZERO_SEQUENCE &&\n empty.tailDigest === EMPTY_TAIL_DIGEST &&\n empty.producerEpoch === EPOCH_ONE,\n \"An empty Thread must report the zero tail and its registered epoch\",\n );\n\n const first = yield* append(\n threadId,\n batch(\"inspect-batch-1\", [record(\"inspect-record-1\", \"first\")]),\n );\n\n const afterAppend = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n afterAppend.tailSequence === first.lastSequence &&\n afterAppend.tailDigest === first.tailDigest,\n \"Tail inspection must match the latest AppendResult\",\n );\n\n const resumed = yield* append(\n threadId,\n batch(\"inspect-batch-2\", [record(\"inspect-record-2\", \"second\")]),\n { lastSequence: afterAppend.tailSequence, tailDigest: afterAppend.tailDigest },\n afterAppend.producerEpoch,\n );\n\n yield* ensure(\n resumed.firstSequence === afterAppend.tailSequence + 1,\n \"An append composed from the inspected tail must commit without exporting the log\",\n );\n\n yield* materialize(threadId, EPOCH_TWO);\n const afterTakeover = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n afterTakeover.producerEpoch === EPOCH_TWO &&\n afterTakeover.tailSequence === resumed.lastSequence,\n \"Tail inspection must reflect epoch takeover without disturbing the tail\",\n );\n }),\n);\n\nconst notMaterializedOperations = conformanceCase(\n \"fails every read and write against an unmaterialized Thread\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-not-materialized\");\n const store = yield* ThreadStore;\n\n const failures = [\n yield* expectFailure(\n \"appending to an unmaterialized Thread\",\n append(threadId, batch(\"missing-batch-1\", [record(\"missing-record-1\", \"first\")])),\n ),\n yield* expectFailure(\"reading an unmaterialized Thread\", readAll(threadId)),\n yield* expectFailure(\n \"observing an unmaterialized Thread\",\n store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(1), Stream.runCollect),\n ),\n yield* expectFailure(\n \"exporting an unmaterialized Thread\",\n store.export(ThreadExportRequest.make({ threadId })),\n ),\n yield* expectFailure(\n \"inspecting the tail of an unmaterialized Thread\",\n store.inspectTail(ThreadTailRequest.make({ threadId })),\n ),\n ];\n\n yield* Effect.forEach(\n failures,\n (failure) =>\n ensure(\n isThreadNotMaterialized(failure) && failure.threadId === threadId,\n \"Operations against an unmaterialized Thread must fail as not materialized\",\n ),\n { discard: true },\n );\n }),\n);\n\nconst selectedOutstanding = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n return yield* Stream.runCollect(\n store.read({\n threadId,\n page: { limit: 1024 },\n selection: {\n _tag: \"Outstanding\",\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n },\n }),\n );\n});\n\nconst nativeOutstandingReads = conformanceCase(\n \"native reads retain uncertainty until canonical result and preserve exact input identities\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-native-outstanding\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n let tail = yield* append(\n threadId,\n batch(\"native-input\", [record(\"native-input\", \"original\")]),\n );\n\n const toolCallId = Schema.decodeSync(ToolCallId)(\"native-call\");\n\n const prepared = ToolCallPrepared.make({\n runId: CONFORMANCE_RUN,\n turnId: Schema.decodeSync(TurnId)(\"native-turn\"),\n turn: 1,\n toolCallId,\n toolName: \"write\",\n parameters: { original: true },\n parametersDigest: EMPTY_TAIL_DIGEST,\n executionKind: \"orchestration\",\n executionClass: \"uncertain\",\n });\n\n const envelope = (id: string, payload: RecordEnvelope[\"payload\"]) =>\n RecordEnvelope.make({ ...record(id, \"unused\"), payload });\n\n tail = yield* append(\n threadId,\n batch(\"native-prepared\", [envelope(\"native-prepared\", prepared)]),\n tail,\n );\n const store = yield* ThreadStore;\n\n const selected = {\n threadId,\n page: { limit: 1 },\n selection: {\n _tag: \"Outstanding\" as const,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n },\n };\n\n yield* expectFailure(\n \"Old decoder must reject a selected read\",\n Schema.decodeUnknownEffect(ThreadRead)(selected),\n );\n yield* expectFailure(\n \"Digest mismatch must reject a selected read\",\n Stream.runCollect(\n store.read({\n ...selected,\n selection: { ...selected.selection, expectedTailDigest: EMPTY_TAIL_DIGEST },\n }),\n ),\n );\n const first = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n first.length === 1 &&\n first[0]?.record.payload._tag === \"ToolCallPrepared\" &&\n first[0].record.payload.executionKind === \"orchestration\",\n \"A current orchestration preparation is not an unknown outcome\",\n );\n tail = yield* append(\n threadId,\n batch(\"native-unknown\", [\n envelope(\n \"native-unknown\",\n ToolCallUnknown.make({\n runId: CONFORMANCE_RUN,\n turn: 1,\n toolCallId,\n toolName: \"write\",\n reason: \"ownership lost\",\n }),\n ),\n ]),\n tail,\n );\n tail = yield* append(\n threadId,\n batch(\"native-permission\", [\n envelope(\n \"native-permission\",\n ToolCallResolved.make({\n runId: CONFORMANCE_RUN,\n toolCallId,\n resolution: \"safe-retry\",\n author: \"operator\",\n reason: \"supplier supports same key\",\n }),\n ),\n ]),\n tail,\n );\n yield* expectFailure(\n \"An append that changed outstanding flags invalidates the captured page\",\n Stream.runCollect(store.read(selected)),\n );\n const unknown = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n unknown.length === 1 && unknown[0]?.record.payload._tag === \"ToolCallUnknown\",\n \"A resolution permission is not a recorded external result\",\n );\n\n const exact = yield* getRecord({\n threadId,\n recordId: decodeRecordId(\"native-prepared\"),\n });\n\n const input = yield* getRunInput({ threadId, runId: CONFORMANCE_RUN });\n\n yield* ensure(\n Option.isSome(exact) &&\n exact.value.record.payload._tag === \"ToolCallPrepared\" &&\n Option.isSome(input) &&\n input.value.record.recordId === \"native-input\",\n \"Exact lookups retain original preparation and host input\",\n );\n tail = yield* append(\n threadId,\n batch(\"later-preparation\", [envelope(\"later-preparation\", prepared)]),\n tail,\n );\n const retained = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n retained.length === 2 &&\n retained[0]?.record.payload._tag === \"ToolCallUnknown\" &&\n retained[1]?.record.payload._tag === \"ToolCallPrepared\",\n \"A later preparation never overwrites older uncertainty\",\n );\n\n const currentSelection = {\n ...selected,\n selection: {\n ...selected.selection,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n },\n };\n\n const sparsePage = yield* Stream.runCollect(store.read(currentSelection));\n\n const sparseNext = yield* Stream.runCollect(\n store.read({\n ...currentSelection,\n page: { limit: 1, afterSequence: sparsePage[0]!.sequence },\n }),\n );\n\n yield* ensure(\n sparsePage[0]?.record.payload._tag === \"ToolCallUnknown\" &&\n sparseNext[0]?.record.payload._tag === \"ToolCallPrepared\",\n \"Selection pages use sparse canonical sequence without skipping current records\",\n );\n yield* append(\n threadId,\n batch(\"native-result\", [\n envelope(\n \"native-result\",\n ToolCallSettled.make({\n runId: CONFORMANCE_RUN,\n toolCallId,\n toolName: \"write\",\n result: { receipt: \"supplier-receipt\" },\n isFailure: false,\n }),\n ),\n ]),\n tail,\n );\n yield* ensure(\n (yield* selectedOutstanding(threadId)).length === 0,\n \"Only canonical result retires the uncertain call\",\n );\n const missingThread = decodeThreadId(\"native-missing\");\n\n const missing = yield* expectFailure(\n \"reading unmaterialized native state\",\n selectedOutstanding(missingThread),\n );\n\n yield* ensure(\n isThreadNotMaterialized(missing),\n \"Missing storage is never an empty inventory\",\n );\n }),\n);\n\nconst nativeAmbiguousOwnership = conformanceCase(\n \"native Run input lookup fails closed on ambiguous original input\",\n ({ expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ambiguous-native-run\");\n\n yield* materialize(threadId, EPOCH_ONE);\n yield* append(\n threadId,\n batch(\"inputs\", [record(\"input-1\", \"first\"), record(\"input-2\", \"second\")]),\n );\n yield* expectFailure(\n \"ambiguous original Run input\",\n getRunInput({ threadId, runId: CONFORMANCE_RUN }),\n );\n }),\n);\n\nconst nativeWorkerAccounting = conformanceCase(\n \"native worker accounting retains lifetime reservations without conversation history\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"native-worker-accounting\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n const workerThreadId = decodeThreadId(\"worker\");\n const agentId = Schema.decodeSync(AgentId)(\"agent\");\n\n const origin = {\n worker: {\n schemaVersion: 1 as const,\n delegationId: Schema.decodeSync(DelegationId)(\"child\"),\n targetAgentId: agentId,\n threadId: workerThreadId,\n },\n source: { _tag: \"programmatic\" as const, agentId, threadId },\n targetDigests: {\n agent: EMPTY_TAIL_DIGEST,\n model: EMPTY_TAIL_DIGEST,\n tools: EMPTY_TAIL_DIGEST,\n },\n policy: AgentPolicy.make({\n maxTurns: 1,\n maxToolCalls: 1,\n maxDuration: \"1 second\",\n toolConcurrency: 1,\n }),\n budget: {\n caps: SubagentDelegationCaps.make({}),\n allocation: SubagentReservationAmounts.make({\n turns: 1,\n toolCalls: 1,\n durationMillis: 1000,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 0,\n }),\n },\n grant: SubagentGrant.make({ allowedToolNames: [], maxDepth: 1 }),\n depth: 1,\n firstMessageId: Schema.decodeSync(IdempotencyKey)(\"message-0\"),\n createdAtMillis: 0,\n expiresAtMillis: 1000,\n };\n\n const envelope = (id: string, payload: RecordEnvelope[\"payload\"]) =>\n RecordEnvelope.make({ ...record(id, \"unused\"), payload });\n\n const completed = (messageId: IdempotencyKey, verified: boolean) =>\n WorkerInputCompleted.make({\n messageId,\n workerThreadId,\n submissionId: CONFORMANCE_SUBMISSION,\n receiptId: Schema.decodeSync(ReceiptId)(\"receipt\"),\n settlementId: Schema.decodeSync(SettlementId)(\"settlement\"),\n completedAtMillis: 1,\n ...(verified ? { effectsResolved: true as const } : {}),\n });\n\n const requested = WorkerInputRequested.make({\n admission: { origin, messageId: origin.firstMessageId, parameters: {}, createdAtMillis: 0 },\n inputDigest: EMPTY_TAIL_DIGEST,\n });\n\n let tail = yield* append(\n threadId,\n batch(\"legacy\", [\n envelope(\"requested\", requested),\n envelope(\"legacy-completion\", completed(origin.firstMessageId, false)),\n ]),\n );\n\n yield* expectFailure(\n \"Legacy acknowledgements remain explicitly incomplete\",\n selectedOutstanding(threadId),\n );\n tail = yield* append(\n threadId,\n batch(\"verified\", [envelope(\"verified\", completed(origin.firstMessageId, true))]),\n tail,\n );\n yield* ensure(\n (yield* selectedOutstanding(threadId)).length === 0 &&\n Option.isSome(yield* getRecord({ threadId, recordId: decodeRecordId(\"requested\") })),\n \"Proven completion retires the input while retaining its canonical reservation\",\n );\n // Cross the recovery horizon with irrelevant conversation records. Native worker\n // accounting must return the same families and scope, while capturing the full CAS tail.\n for (let base = 0; base < 4097; base += 256) {\n const makeInput = (n: number) =>\n envelope(\n `history-${n}`,\n UserInputRecorded.make({ kind: \"steering\", input: `message-${n}` }),\n );\n\n tail = yield* append(\n threadId,\n batch(`history-${base}`, [\n makeInput(base),\n ...Array.from({ length: Math.min(255, 4096 - base) }, (_, offset) =>\n makeInput(base + offset + 1),\n ),\n ]),\n tail,\n );\n }\n\n const budgetRow = (id: string, sourceSubmissionId: SubmissionId) =>\n envelope(\n id,\n SubtreeBudgetReserved.make({\n reservationId: id,\n sourceSubmissionId,\n childThreadId: workerThreadId,\n lifetime: \"background\",\n depth: 1,\n policy: origin.policy,\n budget: origin.budget,\n grant: origin.grant,\n }),\n );\n\n tail = yield* append(\n threadId,\n batch(\"scoped-budgets\", [\n budgetRow(\"selected\", CONFORMANCE_SUBMISSION),\n budgetRow(\"old-run\", Schema.decodeSync(SubmissionId)(\"old-run\")),\n ]),\n tail,\n );\n yield* ensure(\n (yield* store.countPeerMessages!({ threadId, limit: 1 })) === 0,\n \"Conversation history does not count as peer sends\",\n );\n\n const peerProof = (n: number) =>\n envelope(\n `peer-${n}`,\n PeerMessagePrepared.make({\n messageId: Schema.decodeSync(IdempotencyKey)(`peer-${n}`),\n encodedEnvelope: {},\n sourcePrincipal: Schema.decodeSync(PeerMessagePrepared.fields.sourcePrincipal)(\"owner\"),\n operation: \"send\",\n deadlineAtMillis: 1000,\n }),\n );\n\n tail = yield* append(threadId, batch(\"peer-proofs\", [peerProof(0), peerProof(1)]), tail);\n yield* ensure(\n (yield* store.countPeerMessages!({ threadId, limit: 1 })) === 1 &&\n (yield* store.countPeerMessages!({ threadId, limit: 1000 })) === 2,\n \"Peer count saturates at the requested capacity without returning payloads\",\n );\n\n yield* expectFailure(\n \"Worker accounting cannot return a partial authorization snapshot\",\n readWorkerState({ threadId, sourceSubmissionId: CONFORMANCE_SUBMISSION, limit: 3 }),\n );\n\n const accounting = yield* readWorkerState({\n threadId,\n sourceSubmissionId: CONFORMANCE_SUBMISSION,\n limit: 4,\n });\n\n yield* ensure(\n accounting.records.length === 4 &&\n accounting.records\n .filter(({ record }) => record.payload._tag === \"SubtreeBudgetReserved\")\n .map(({ record }) => record.recordId)\n .join() === \"selected\",\n \"Worker state excludes conversation and another Run's accounting, retaining completed lifetime reservations\",\n );\n yield* ensure(\n accounting.tailSequence === tail.lastSequence && accounting.tailDigest === tail.tailDigest,\n \"The accounting snapshot carries the full canonical CAS tail\",\n );\n }),\n);\n\n/**\n * The shared, adapter-parameterized ThreadStore contract suite (STORE-010). Every\n * durable adapter test suite must execute each case against its own store provisioning.\n */\nexport const threadStoreConformanceCases: ReadonlyArray<ThreadStoreConformanceCase> = [\n nativeOutstandingReads,\n nativeAmbiguousOwnership,\n nativeWorkerAccounting,\n atomicBatchVisibility,\n idempotentReplay,\n tailConflict,\n producerFencing,\n offsetResumability,\n tailInspection,\n notMaterializedOperations,\n];\n\n/** Additional contract cases only for adapters advertising `ThreadStore.checkpoints`. */\nexport const threadCheckpointConformanceCases: ReadonlyArray<ThreadStoreConformanceCase> = [\n checkpointBoundaries,\n];\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadStoreConformance.mjs","names":[],"sources":["../../src/durable/ThreadStoreConformance.ts"],"sourcesContent":["import { Effect, DateTime, Option, Schema, Stream } from \"effect\";\n\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport {\n ThreadId,\n RunId,\n SubmissionId,\n ToolCallId,\n TurnId,\n AgentId,\n DelegationId,\n ReceiptId,\n SettlementId,\n} from \"../core/Identifiers.ts\";\nimport { IdempotencyKey } from \"../core/Receipt.ts\";\nimport {\n SubagentDelegationCaps,\n SubagentGrant,\n SubagentReservationAmounts,\n} from \"../core/SubagentContract.ts\";\nimport { EMPTY_TAIL_DIGEST } from \"./Digest.ts\";\nimport type { Digest } from \"./Records.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n DeploymentId,\n ProducerEpoch,\n ProducerId,\n RecordEnvelope,\n RecordId,\n UserInputRecorded,\n ToolCallPrepared,\n ToolCallUnknown,\n ToolCallResolved,\n ToolCallSettled,\n WorkerInputRequested,\n WorkerInputCompleted,\n WorkerStopRequested,\n SubtreeBudgetReserved,\n PeerMessagePrepared,\n} from \"./Records.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n CheckpointRejected,\n ThreadCheckpoint,\n ThreadExportRequest,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadObservation,\n ThreadRead,\n ThreadStore,\n getRecord,\n getRunInput,\n readWorkerState,\n ThreadTailRequest,\n FencedAppendRequest,\n FenceRejected,\n LoadCheckpointRequest,\n SaveCheckpointRequest,\n type ThreadStoreFailure,\n} from \"./ThreadStore.ts\";\n\n/** A ThreadStore contract invariant that an adapter under test violated. */\nexport class ThreadStoreConformanceViolation extends Schema.TaggedError<ThreadStoreConformanceViolation>()(\n \"ThreadStoreConformanceViolation\",\n {\n caseName: Schema.String,\n message: Schema.String,\n },\n) {}\n\nexport type ThreadStoreConformanceFailure =\n | ThreadStoreFailure\n | CheckpointRejected\n | ThreadStoreConformanceViolation;\n\n/**\n * One adapter-neutral ThreadStore contract case. Each case owns disjoint\n * Thread identities, so a suite may run every case against one shared store\n * instance or against a fresh store per case.\n */\nexport interface ThreadStoreConformanceCase {\n readonly name: string;\n readonly run: Effect.Effect<void, ThreadStoreConformanceFailure, ThreadStore>;\n}\n\nconst decodeThreadId = Schema.decodeSync(ThreadId);\nconst decodeRecordId = Schema.decodeSync(RecordId);\nconst decodeBatchId = Schema.decodeSync(BatchId);\nconst decodeSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeEpoch = Schema.decodeSync(ProducerEpoch);\n\nconst CONFORMANCE_DEPLOYMENT = Schema.decodeSync(DeploymentId)(\"deployment-conformance\");\nconst CONFORMANCE_PRODUCER = Schema.decodeSync(ProducerId)(\"producer-conformance\");\nconst CONFORMANCE_SUBMISSION = Schema.decodeSync(SubmissionId)(\"submission-conformance\");\nconst CONFORMANCE_RUN = Schema.decodeSync(RunId)(\"run-conformance\");\nconst CONFORMANCE_CREATED_AT = DateTime.toUtc(DateTime.makeUnsafe(1));\n\nconst ZERO_SEQUENCE = decodeSequence(0);\nconst EPOCH_ONE = decodeEpoch(1);\nconst EPOCH_TWO = decodeEpoch(2);\nconst EMPTY_TAIL = { lastSequence: ZERO_SEQUENCE, tailDigest: EMPTY_TAIL_DIGEST } as const;\nconst isAppendConflict = Schema.is(AppendConflict);\nconst isFenceRejected = Schema.is(FenceRejected);\nconst isCheckpointRejected = Schema.is(CheckpointRejected);\nconst isThreadNotMaterialized = Schema.is(ThreadNotMaterialized);\n\nconst record = (recordId: string, input: string): RecordEnvelope =>\n RecordEnvelope.make({\n recordId: decodeRecordId(recordId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: CONFORMANCE_CREATED_AT,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n payload: UserInputRecorded.make({\n submissionId: CONFORMANCE_SUBMISSION,\n kind: \"user\",\n runId: CONFORMANCE_RUN,\n input,\n }),\n });\n\nconst batch = (\n batchId: string,\n records: readonly [RecordEnvelope, ...Array<RecordEnvelope>],\n): CanonicalBatch =>\n CanonicalBatch.make({\n batchId: decodeBatchId(batchId),\n producerId: CONFORMANCE_PRODUCER,\n records,\n });\n\nconst materialize = Effect.fn(\"ThreadStoreConformance.materialize\")(function* (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n) {\n const store = yield* ThreadStore;\n\n yield* store.materialize(ThreadMaterialization.make({ threadId, producerEpoch }));\n});\n\nconst append = Effect.fn(\"ThreadStoreConformance.append\")(function* (\n threadId: ThreadId,\n canonicalBatch: CanonicalBatch,\n tail: Pick<AppendResult, \"lastSequence\" | \"tailDigest\"> = EMPTY_TAIL,\n producerEpoch: ProducerEpoch = EPOCH_ONE,\n) {\n const store = yield* ThreadStore;\n\n return yield* store.append(\n FencedAppendRequest.make({\n threadId,\n batch: canonicalBatch,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch,\n }),\n );\n});\n\nconst readAll = Effect.fn(\"ThreadStoreConformance.readAll\")(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n\n return yield* store.read(ThreadRead.make({ threadId, limit: 1_024 })).pipe(Stream.runCollect);\n});\n\nconst checkpointAt = (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n tailDigest: Digest,\n): ThreadCheckpoint =>\n ThreadCheckpoint.make({\n schemaVersion: 1,\n threadId,\n throughSequence,\n tailDigest,\n state: { conformance: true },\n createdAt: CONFORMANCE_CREATED_AT,\n });\n\nconst conformanceCase = (\n name: string,\n build: (assert: {\n readonly ensure: (\n condition: boolean,\n message: string,\n ) => Effect.Effect<void, ThreadStoreConformanceViolation>;\n readonly expectFailure: <A, E, R>(\n description: string,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<E, ThreadStoreConformanceViolation, R>;\n }) => Effect.Effect<void, ThreadStoreConformanceFailure, ThreadStore>,\n): ThreadStoreConformanceCase => ({\n name,\n run: build({\n ensure: (condition, message) =>\n condition\n ? Effect.void\n : Effect.fail(ThreadStoreConformanceViolation.make({ caseName: name, message })),\n expectFailure: (description, effect) =>\n Effect.flip(effect).pipe(\n Effect.mapError(() =>\n ThreadStoreConformanceViolation.make({\n caseName: name,\n message: `Expected failure but the operation succeeded: ${description}`,\n }),\n ),\n ),\n }).pipe(Effect.withSpan(`ThreadStoreConformance.${name}`)),\n});\n\nconst atomicBatchVisibility = conformanceCase(\n \"commits batches atomically with no partial reader visibility\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-atomic\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const committed = yield* append(\n threadId,\n batch(\"atomic-batch-1\", [\n record(\"atomic-record-1\", \"first\"),\n record(\"atomic-record-2\", \"second\"),\n record(\"atomic-record-3\", \"third\"),\n ]),\n );\n\n yield* ensure(\n committed.firstSequence === 1 && committed.lastSequence === 3,\n \"A three-record batch must commit sequences 1 through 3\",\n );\n\n const read = yield* readAll(threadId);\n\n yield* ensure(read.length === 3, \"Readers must observe the full committed batch\");\n yield* ensure(\n read.every((envelope, index) => envelope.sequence === index + 1),\n \"Committed records must be gap-free in declaration order\",\n );\n\n const observed = yield* store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(3), Stream.runCollect);\n\n yield* ensure(\n observed.map((envelope) => envelope.record.recordId).join(\",\") ===\n read.map((envelope) => envelope.record.recordId).join(\",\"),\n \"Observers must see exactly the committed batch records in order\",\n );\n\n const duplicate = record(\"atomic-record-4\", \"duplicate\");\n\n const intraBatch = yield* expectFailure(\n \"a batch containing one record ID twice\",\n append(threadId, batch(\"atomic-batch-2\", [duplicate, duplicate]), committed),\n );\n\n yield* ensure(\n isAppendConflict(intraBatch) && intraBatch.reason === \"record-identity\",\n \"A duplicated record ID inside one batch must conflict with reason record-identity\",\n );\n\n const crossBatch = yield* expectFailure(\n \"a batch reusing an already-committed record ID\",\n append(threadId, batch(\"atomic-batch-3\", [record(\"atomic-record-1\", \"reused\")]), committed),\n );\n\n yield* ensure(\n isAppendConflict(crossBatch) && crossBatch.reason === \"record-identity\",\n \"A record ID reused across batches must conflict with reason record-identity\",\n );\n\n const exported = yield* store.export(ThreadExportRequest.make({ threadId }));\n\n yield* ensure(\n exported.records.length === 3 &&\n exported.tailSequence === committed.lastSequence &&\n exported.tailDigest === committed.tailDigest,\n \"A conflicting batch must leave no partial prefix behind\",\n );\n }),\n);\n\nconst idempotentReplay = conformanceCase(\n \"replays an identical batch idempotently and rejects altered content\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-replay\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const original = batch(\"replay-batch-1\", [\n record(\"replay-record-1\", \"Lisbon\"),\n record(\"replay-record-2\", \"Porto\"),\n ]);\n\n const first = yield* append(threadId, original);\n\n yield* ensure(!first.replayed, \"The first append of a batch must not report replayed\");\n\n const replayed = yield* append(threadId, original);\n\n yield* ensure(\n replayed.replayed &&\n replayed.firstSequence === first.firstSequence &&\n replayed.lastSequence === first.lastSequence &&\n replayed.tailDigest === first.tailDigest,\n \"Replaying an identical batch must return the original result with replayed set\",\n );\n\n const altered = yield* expectFailure(\n \"replaying a batch ID with different canonical content\",\n append(threadId, batch(\"replay-batch-1\", [record(\"replay-record-3\", \"Faro\")])),\n );\n\n yield* ensure(\n isAppendConflict(altered) && altered.reason === \"batch-digest\",\n \"A batch ID replayed with different content must conflict with reason batch-digest\",\n );\n\n const read = yield* readAll(threadId);\n\n yield* ensure(read.length === 2, \"Replay and conflict must not duplicate committed records\");\n }),\n);\n\nconst tailConflict = conformanceCase(\n \"rejects stale expected tails and reports the actual tail\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-tail\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"tail-batch-1\", [record(\"tail-record-1\", \"first\")]),\n );\n\n const staleSequence = yield* expectFailure(\n \"an append declaring the pre-append tail sequence\",\n append(threadId, batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")])),\n );\n\n yield* ensure(\n isAppendConflict(staleSequence) && staleSequence.reason === \"tail\",\n \"A stale expected tail sequence must conflict with reason tail\",\n );\n yield* ensure(\n isAppendConflict(staleSequence) &&\n staleSequence.actualTailSequence === first.lastSequence &&\n staleSequence.actualTailDigest === first.tailDigest,\n \"A tail conflict must carry the actual committed tail as a resume hint\",\n );\n\n const staleDigest = yield* expectFailure(\n \"an append declaring the right sequence with the wrong digest\",\n append(threadId, batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")]), {\n lastSequence: first.lastSequence,\n tailDigest: EMPTY_TAIL_DIGEST,\n }),\n );\n\n yield* ensure(\n isAppendConflict(staleDigest) && staleDigest.reason === \"tail\",\n \"A stale expected tail digest must conflict with reason tail\",\n );\n\n const recovered = yield* append(\n threadId,\n batch(\"tail-batch-2\", [record(\"tail-record-2\", \"second\")]),\n first,\n );\n\n yield* ensure(\n recovered.firstSequence === first.lastSequence + 1,\n \"An append declaring the true tail must commit after a tail conflict\",\n );\n }),\n);\n\nconst producerFencing = conformanceCase(\n \"fences stale producer epochs while allowing epoch takeover\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-fencing\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"fence-batch-1\", [record(\"fence-record-1\", \"first\")]),\n );\n\n yield* materialize(threadId, EPOCH_TWO);\n\n const staleAppend = yield* expectFailure(\n \"an append using the pre-takeover producer epoch\",\n append(\n threadId,\n batch(\"fence-batch-2\", [record(\"fence-record-2\", \"second\")]),\n first,\n EPOCH_ONE,\n ),\n );\n\n yield* ensure(\n isFenceRejected(staleAppend) &&\n staleAppend.actualEpoch === EPOCH_TWO &&\n staleAppend.attemptedEpoch === EPOCH_ONE,\n \"A stale producer epoch must be fenced with both epochs reported\",\n );\n\n const staleMaterialize = yield* expectFailure(\n \"re-materializing with the pre-takeover producer epoch\",\n materialize(threadId, EPOCH_ONE),\n );\n\n yield* ensure(\n isFenceRejected(staleMaterialize),\n \"A stale producer epoch must not re-register through materialization\",\n );\n\n const takeover = yield* append(\n threadId,\n batch(\"fence-batch-2\", [record(\"fence-record-2\", \"second\")]),\n first,\n EPOCH_TWO,\n );\n\n yield* ensure(\n !takeover.replayed && takeover.firstSequence === first.lastSequence + 1,\n \"The takeover epoch must append after the committed tail\",\n );\n }),\n);\n\nconst offsetResumability = conformanceCase(\n \"resumes observation from a saved offset with exactly the suffix\",\n ({ ensure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-offsets\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"offset-batch-1\", [\n record(\"offset-record-1\", \"first\"),\n record(\"offset-record-2\", \"second\"),\n ]),\n );\n\n const second = yield* append(\n threadId,\n batch(\"offset-batch-2\", [record(\"offset-record-3\", \"third\")]),\n first,\n );\n\n yield* append(\n threadId,\n batch(\"offset-batch-3\", [record(\"offset-record-4\", \"fourth\")]),\n second,\n );\n\n const committed = yield* readAll(threadId);\n\n yield* ensure(committed.length === 4, \"All committed records must be readable\");\n const savedOffset = committed[1]?.offset;\n\n yield* ensure(savedOffset !== undefined, \"Committed records must carry observation offsets\");\n if (savedOffset === undefined) return;\n\n const resumed = yield* store\n .observe(ThreadObservation.make({ threadId, afterOffset: savedOffset }))\n .pipe(Stream.take(2), Stream.runCollect);\n\n yield* ensure(\n resumed.map((envelope) => envelope.record.recordId).join(\",\") ===\n committed\n .slice(2)\n .map((envelope) => envelope.record.recordId)\n .join(\",\"),\n \"Observation from a saved offset must deliver exactly the suffix in order\",\n );\n\n const fromStart = yield* store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(4), Stream.runCollect);\n\n yield* ensure(\n fromStart.map((envelope) => envelope.record.recordId).join(\",\") ===\n committed.map((envelope) => envelope.record.recordId).join(\",\"),\n \"Observation without an offset must deliver the full log in order\",\n );\n }),\n);\n\nconst checkpointBoundaries = conformanceCase(\n \"enforces checkpoint save and load boundary rules\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-checkpoints\");\n const store = yield* ThreadStore;\n const checkpoints = store.checkpoints;\n\n if (checkpoints === undefined) {\n return yield* ThreadStoreConformanceViolation.make({\n caseName: \"enforces checkpoint save and load boundary rules\",\n message: \"The optional checkpoint suite requires checkpoint support\",\n });\n }\n\n const missing = [\n yield* expectFailure(\n \"saving a checkpoint for an unmaterialized Thread\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(threadId, ZERO_SEQUENCE, EMPTY_TAIL_DIGEST),\n }),\n ),\n ),\n yield* expectFailure(\n \"loading a checkpoint for an unmaterialized Thread\",\n checkpoints.load(LoadCheckpointRequest.make({ threadId })),\n ),\n ];\n\n yield* ensure(\n missing.every(isThreadNotMaterialized),\n \"Checkpoints require a materialized Thread\",\n );\n yield* materialize(threadId, EPOCH_ONE);\n\n const first = yield* append(\n threadId,\n batch(\"checkpoint-batch-1\", [record(\"checkpoint-record-1\", \"Kyoto\")]),\n );\n\n const aheadOfTail = yield* expectFailure(\n \"a checkpoint claiming a sequence beyond the committed tail\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(\n threadId,\n decodeSequence(first.lastSequence + 1),\n first.tailDigest,\n ),\n }),\n ),\n );\n\n yield* ensure(\n isCheckpointRejected(aheadOfTail) && aheadOfTail.reason === \"ahead-of-tail\",\n \"A checkpoint ahead of the tail must be rejected with reason ahead-of-tail\",\n );\n\n const digestMismatch = yield* expectFailure(\n \"a checkpoint whose digest does not match the canonical chain\",\n checkpoints.save(\n SaveCheckpointRequest.make({\n checkpoint: checkpointAt(threadId, first.lastSequence, EMPTY_TAIL_DIGEST),\n }),\n ),\n );\n\n yield* ensure(\n isCheckpointRejected(digestMismatch) && digestMismatch.reason === \"digest-mismatch\",\n \"A checkpoint with a mismatched digest must be rejected with reason digest-mismatch\",\n );\n yield* ensure(\n Option.isNone(yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }))),\n \"Rejected checkpoints must not become loadable\",\n );\n\n const valid = checkpointAt(threadId, first.lastSequence, first.tailDigest);\n\n yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));\n yield* checkpoints.save(SaveCheckpointRequest.make({ checkpoint: valid }));\n\n const loaded = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));\n\n yield* ensure(\n Option.isSome(loaded) &&\n loaded.value.throughSequence === first.lastSequence &&\n loaded.value.tailDigest === first.tailDigest,\n \"A valid checkpoint must load bound to its canonical sequence and digest\",\n );\n\n const beforeCheckpoint = yield* checkpoints.load(\n LoadCheckpointRequest.make({ threadId, atOrBeforeSequence: ZERO_SEQUENCE }),\n );\n\n yield* ensure(\n Option.isNone(beforeCheckpoint),\n \"Checkpoint lookup must respect the atOrBeforeSequence bound\",\n );\n\n yield* append(\n threadId,\n batch(\"checkpoint-batch-2\", [record(\"checkpoint-record-2\", \"Nara\")]),\n first,\n );\n const afterAppend = yield* checkpoints.load(LoadCheckpointRequest.make({ threadId }));\n\n yield* ensure(\n Option.isSome(afterAppend) && afterAppend.value.throughSequence === first.lastSequence,\n \"An older checkpoint must remain loadable after later appends\",\n );\n }),\n);\n\nconst tailInspection = conformanceCase(\n \"inspects the canonical tail so a resuming producer can compose its next append\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-tail-inspection\");\n const store = yield* ThreadStore;\n\n const missing = yield* expectFailure(\n \"inspecting the tail of an unmaterialized Thread\",\n store.inspectTail(ThreadTailRequest.make({ threadId })),\n );\n\n yield* ensure(\n isThreadNotMaterialized(missing) && missing.threadId === threadId,\n \"Tail inspection of an unmaterialized Thread must fail as not materialized\",\n );\n\n yield* materialize(threadId, EPOCH_ONE);\n const empty = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n empty.tailSequence === ZERO_SEQUENCE &&\n empty.tailDigest === EMPTY_TAIL_DIGEST &&\n empty.producerEpoch === EPOCH_ONE,\n \"An empty Thread must report the zero tail and its registered epoch\",\n );\n\n const first = yield* append(\n threadId,\n batch(\"inspect-batch-1\", [record(\"inspect-record-1\", \"first\")]),\n );\n\n const afterAppend = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n afterAppend.tailSequence === first.lastSequence &&\n afterAppend.tailDigest === first.tailDigest,\n \"Tail inspection must match the latest AppendResult\",\n );\n\n const resumed = yield* append(\n threadId,\n batch(\"inspect-batch-2\", [record(\"inspect-record-2\", \"second\")]),\n { lastSequence: afterAppend.tailSequence, tailDigest: afterAppend.tailDigest },\n afterAppend.producerEpoch,\n );\n\n yield* ensure(\n resumed.firstSequence === afterAppend.tailSequence + 1,\n \"An append composed from the inspected tail must commit without exporting the log\",\n );\n\n yield* materialize(threadId, EPOCH_TWO);\n const afterTakeover = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* ensure(\n afterTakeover.producerEpoch === EPOCH_TWO &&\n afterTakeover.tailSequence === resumed.lastSequence,\n \"Tail inspection must reflect epoch takeover without disturbing the tail\",\n );\n }),\n);\n\nconst notMaterializedOperations = conformanceCase(\n \"fails every read and write against an unmaterialized Thread\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-not-materialized\");\n const store = yield* ThreadStore;\n\n const failures = [\n yield* expectFailure(\n \"appending to an unmaterialized Thread\",\n append(threadId, batch(\"missing-batch-1\", [record(\"missing-record-1\", \"first\")])),\n ),\n yield* expectFailure(\"reading an unmaterialized Thread\", readAll(threadId)),\n yield* expectFailure(\n \"observing an unmaterialized Thread\",\n store\n .observe(ThreadObservation.make({ threadId }))\n .pipe(Stream.take(1), Stream.runCollect),\n ),\n yield* expectFailure(\n \"exporting an unmaterialized Thread\",\n store.export(ThreadExportRequest.make({ threadId })),\n ),\n yield* expectFailure(\n \"inspecting the tail of an unmaterialized Thread\",\n store.inspectTail(ThreadTailRequest.make({ threadId })),\n ),\n ];\n\n yield* Effect.forEach(\n failures,\n (failure) =>\n ensure(\n isThreadNotMaterialized(failure) && failure.threadId === threadId,\n \"Operations against an unmaterialized Thread must fail as not materialized\",\n ),\n { discard: true },\n );\n }),\n);\n\nconst selectedOutstanding = Effect.fnUntraced(function* (threadId: ThreadId) {\n const store = yield* ThreadStore;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n return yield* Stream.runCollect(\n store.read({\n threadId,\n page: { limit: 1024 },\n selection: {\n _tag: \"Outstanding\",\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n },\n }),\n );\n});\n\nconst nativeOutstandingReads = conformanceCase(\n \"native reads retain uncertainty until canonical result and preserve exact input identities\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"conformance-native-outstanding\");\n\n yield* materialize(threadId, EPOCH_ONE);\n\n let tail = yield* append(\n threadId,\n batch(\"native-input\", [record(\"native-input\", \"original\")]),\n );\n\n const toolCallId = Schema.decodeSync(ToolCallId)(\"native-call\");\n\n const prepared = ToolCallPrepared.make({\n runId: CONFORMANCE_RUN,\n turnId: Schema.decodeSync(TurnId)(\"native-turn\"),\n turn: 1,\n toolCallId,\n toolName: \"write\",\n parameters: { original: true },\n parametersDigest: EMPTY_TAIL_DIGEST,\n executionKind: \"orchestration\",\n executionClass: \"uncertain\",\n });\n\n const envelope = (id: string, payload: RecordEnvelope[\"payload\"]) =>\n RecordEnvelope.make({ ...record(id, \"unused\"), payload });\n\n tail = yield* append(\n threadId,\n batch(\"native-prepared\", [envelope(\"native-prepared\", prepared)]),\n tail,\n );\n const store = yield* ThreadStore;\n\n const selected = {\n threadId,\n page: { limit: 1 },\n selection: {\n _tag: \"Outstanding\" as const,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n },\n };\n\n yield* expectFailure(\n \"Old decoder must reject a selected read\",\n Schema.decodeUnknownEffect(ThreadRead)(selected),\n );\n yield* expectFailure(\n \"Digest mismatch must reject a selected read\",\n Stream.runCollect(\n store.read({\n ...selected,\n selection: { ...selected.selection, expectedTailDigest: EMPTY_TAIL_DIGEST },\n }),\n ),\n );\n const first = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n first.length === 1 &&\n first[0]?.record.payload._tag === \"ToolCallPrepared\" &&\n first[0].record.payload.executionKind === \"orchestration\",\n \"A current orchestration preparation is not an unknown outcome\",\n );\n tail = yield* append(\n threadId,\n batch(\"native-unknown\", [\n envelope(\n \"native-unknown\",\n ToolCallUnknown.make({\n runId: CONFORMANCE_RUN,\n turn: 1,\n toolCallId,\n toolName: \"write\",\n reason: \"ownership lost\",\n }),\n ),\n ]),\n tail,\n );\n tail = yield* append(\n threadId,\n batch(\"native-permission\", [\n envelope(\n \"native-permission\",\n ToolCallResolved.make({\n runId: CONFORMANCE_RUN,\n toolCallId,\n resolution: \"safe-retry\",\n author: \"operator\",\n reason: \"supplier supports same key\",\n }),\n ),\n ]),\n tail,\n );\n yield* expectFailure(\n \"An append that changed outstanding flags invalidates the captured page\",\n Stream.runCollect(store.read(selected)),\n );\n const unknown = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n unknown.length === 1 && unknown[0]?.record.payload._tag === \"ToolCallUnknown\",\n \"A resolution permission is not a recorded external result\",\n );\n\n const exact = yield* getRecord({\n threadId,\n recordId: decodeRecordId(\"native-prepared\"),\n });\n\n const input = yield* getRunInput({ threadId, runId: CONFORMANCE_RUN });\n\n yield* ensure(\n Option.isSome(exact) &&\n exact.value.record.payload._tag === \"ToolCallPrepared\" &&\n Option.isSome(input) &&\n input.value.record.recordId === \"native-input\",\n \"Exact lookups retain original preparation and host input\",\n );\n tail = yield* append(\n threadId,\n batch(\"later-preparation\", [envelope(\"later-preparation\", prepared)]),\n tail,\n );\n const retained = yield* selectedOutstanding(threadId);\n\n yield* ensure(\n retained.length === 2 &&\n retained[0]?.record.payload._tag === \"ToolCallUnknown\" &&\n retained[1]?.record.payload._tag === \"ToolCallPrepared\",\n \"A later preparation never overwrites older uncertainty\",\n );\n\n const currentSelection = {\n ...selected,\n selection: {\n ...selected.selection,\n expectedTailSequence: tail.lastSequence,\n expectedTailDigest: tail.tailDigest,\n },\n };\n\n const sparsePage = yield* Stream.runCollect(store.read(currentSelection));\n\n const sparseNext = yield* Stream.runCollect(\n store.read({\n ...currentSelection,\n page: { limit: 1, afterSequence: sparsePage[0]!.sequence },\n }),\n );\n\n yield* ensure(\n sparsePage[0]?.record.payload._tag === \"ToolCallUnknown\" &&\n sparseNext[0]?.record.payload._tag === \"ToolCallPrepared\",\n \"Selection pages use sparse canonical sequence without skipping current records\",\n );\n yield* append(\n threadId,\n batch(\"native-result\", [\n envelope(\n \"native-result\",\n ToolCallSettled.make({\n runId: CONFORMANCE_RUN,\n toolCallId,\n toolName: \"write\",\n result: { receipt: \"supplier-receipt\" },\n isFailure: false,\n }),\n ),\n ]),\n tail,\n );\n yield* ensure(\n (yield* selectedOutstanding(threadId)).length === 0,\n \"Only canonical result retires the uncertain call\",\n );\n const missingThread = decodeThreadId(\"native-missing\");\n\n const missing = yield* expectFailure(\n \"reading unmaterialized native state\",\n selectedOutstanding(missingThread),\n );\n\n yield* ensure(\n isThreadNotMaterialized(missing),\n \"Missing storage is never an empty inventory\",\n );\n }),\n);\n\nconst nativeAmbiguousOwnership = conformanceCase(\n \"native Run input lookup fails closed on ambiguous original input\",\n ({ expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ambiguous-native-run\");\n\n yield* materialize(threadId, EPOCH_ONE);\n yield* append(\n threadId,\n batch(\"inputs\", [record(\"input-1\", \"first\"), record(\"input-2\", \"second\")]),\n );\n yield* expectFailure(\n \"ambiguous original Run input\",\n getRunInput({ threadId, runId: CONFORMANCE_RUN }),\n );\n }),\n);\n\nconst nativeWorkerAccounting = conformanceCase(\n \"native worker accounting retains lifetime reservations without conversation history\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"native-worker-accounting\");\n const store = yield* ThreadStore;\n\n yield* materialize(threadId, EPOCH_ONE);\n const workerThreadId = decodeThreadId(\"worker\");\n const agentId = Schema.decodeSync(AgentId)(\"agent\");\n\n const origin = {\n worker: {\n schemaVersion: 1 as const,\n delegationId: Schema.decodeSync(DelegationId)(\"child\"),\n targetAgentId: agentId,\n threadId: workerThreadId,\n },\n source: { _tag: \"programmatic\" as const, agentId, threadId },\n targetDigests: {\n agent: EMPTY_TAIL_DIGEST,\n model: EMPTY_TAIL_DIGEST,\n tools: EMPTY_TAIL_DIGEST,\n },\n policy: AgentPolicy.make({\n maxTurns: 1,\n maxToolCalls: 1,\n maxDuration: \"1 second\",\n toolConcurrency: 1,\n }),\n budget: {\n caps: SubagentDelegationCaps.make({}),\n allocation: SubagentReservationAmounts.make({\n turns: 1,\n toolCalls: 1,\n durationMillis: 1000,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 0,\n }),\n },\n grant: SubagentGrant.make({ allowedToolNames: [], maxDepth: 1 }),\n depth: 1,\n firstMessageId: Schema.decodeSync(IdempotencyKey)(\"message-0\"),\n createdAtMillis: 0,\n expiresAtMillis: 1000,\n };\n\n const envelope = (id: string, payload: RecordEnvelope[\"payload\"]) =>\n RecordEnvelope.make({ ...record(id, \"unused\"), payload });\n\n const completed = (messageId: IdempotencyKey, verified: boolean) =>\n WorkerInputCompleted.make({\n messageId,\n workerThreadId,\n submissionId: CONFORMANCE_SUBMISSION,\n receiptId: Schema.decodeSync(ReceiptId)(\"receipt\"),\n settlementId: Schema.decodeSync(SettlementId)(\"settlement\"),\n completedAtMillis: 1,\n ...(verified ? { effectsResolved: true as const } : {}),\n });\n\n const requested = WorkerInputRequested.make({\n admission: { origin, messageId: origin.firstMessageId, parameters: {}, createdAtMillis: 0 },\n inputDigest: EMPTY_TAIL_DIGEST,\n });\n\n let tail = yield* append(\n threadId,\n batch(\"legacy\", [\n envelope(\"requested\", requested),\n envelope(\"legacy-completion\", completed(origin.firstMessageId, false)),\n ]),\n );\n\n yield* expectFailure(\n \"Legacy acknowledgements remain explicitly incomplete\",\n selectedOutstanding(threadId),\n );\n tail = yield* append(\n threadId,\n batch(\"verified\", [envelope(\"verified\", completed(origin.firstMessageId, true))]),\n tail,\n );\n yield* ensure(\n (yield* selectedOutstanding(threadId)).length === 0 &&\n Option.isSome(yield* getRecord({ threadId, recordId: decodeRecordId(\"requested\") })),\n \"Proven completion retires the input while retaining its canonical reservation\",\n );\n // Cross the recovery horizon with irrelevant conversation records. Native worker\n // accounting must return the same families and scope, while capturing the full CAS tail.\n for (let base = 0; base < 4097; base += 256) {\n const makeInput = (n: number) =>\n envelope(\n `history-${n}`,\n UserInputRecorded.make({ kind: \"steering\", input: `message-${n}` }),\n );\n\n tail = yield* append(\n threadId,\n batch(`history-${base}`, [\n makeInput(base),\n ...Array.from({ length: Math.min(255, 4096 - base) }, (_, offset) =>\n makeInput(base + offset + 1),\n ),\n ]),\n tail,\n );\n }\n\n const budgetRow = (id: string, sourceSubmissionId: SubmissionId) =>\n envelope(\n id,\n SubtreeBudgetReserved.make({\n reservationId: id,\n sourceSubmissionId,\n childThreadId: workerThreadId,\n lifetime: \"background\",\n depth: 1,\n policy: origin.policy,\n budget: origin.budget,\n grant: origin.grant,\n }),\n );\n\n tail = yield* append(\n threadId,\n batch(\"scoped-budgets\", [\n budgetRow(\"selected\", CONFORMANCE_SUBMISSION),\n budgetRow(\"old-run\", Schema.decodeSync(SubmissionId)(\"old-run\")),\n ]),\n tail,\n );\n yield* ensure(\n (yield* store.countPeerMessages!({ threadId, limit: 1 })) === 0,\n \"Conversation history does not count as peer sends\",\n );\n\n const peerProof = (n: number) =>\n envelope(\n `peer-${n}`,\n PeerMessagePrepared.make({\n messageId: Schema.decodeSync(IdempotencyKey)(`peer-${n}`),\n encodedEnvelope: {},\n sourcePrincipal: Schema.decodeSync(PeerMessagePrepared.fields.sourcePrincipal)(\"owner\"),\n operation: \"send\",\n deadlineAtMillis: 1000,\n }),\n );\n\n tail = yield* append(threadId, batch(\"peer-proofs\", [peerProof(0), peerProof(1)]), tail);\n yield* ensure(\n (yield* store.countPeerMessages!({ threadId, limit: 1 })) === 1 &&\n (yield* store.countPeerMessages!({ threadId, limit: 1000 })) === 2,\n \"Peer count saturates at the requested capacity without returning payloads\",\n );\n\n yield* expectFailure(\n \"Worker accounting cannot return a partial authorization snapshot\",\n readWorkerState({ threadId, sourceSubmissionId: CONFORMANCE_SUBMISSION, limit: 3 }),\n );\n\n const accounting = yield* readWorkerState({\n threadId,\n sourceSubmissionId: CONFORMANCE_SUBMISSION,\n limit: 4,\n });\n\n yield* ensure(\n accounting.records.length === 4 &&\n accounting.records\n .filter(({ record }) => record.payload._tag === \"SubtreeBudgetReserved\")\n .map(({ record }) => record.recordId)\n .join() === \"selected\",\n \"Worker state excludes conversation and another Run's accounting, retaining completed lifetime reservations\",\n );\n yield* ensure(\n accounting.tailSequence === tail.lastSequence && accounting.tailDigest === tail.tailDigest,\n \"The accounting snapshot carries the full canonical CAS tail\",\n );\n // Regression: https://github.com/danieljvdm/effect-agent/blob/c721a292205e06185f0136c3ed05dcf53e29ca66/packages/effect-agent/src/durable/SqlThreadNativeReads.ts#L195-L214\n yield* append(\n threadId,\n batch(\"stop-worker\", [\n envelope(\n \"stop-worker\",\n WorkerStopRequested.make({\n command: {\n worker: origin.worker,\n idempotencyKey: Schema.decodeSync(IdempotencyKey)(\"stop-worker\"),\n },\n }),\n ),\n ]),\n tail,\n );\n\n const stopped = yield* readWorkerState({\n threadId,\n sourceSubmissionId: CONFORMANCE_SUBMISSION,\n limit: 5,\n });\n\n yield* ensure(\n stopped.records.some(({ record }) => record.payload._tag === \"WorkerStopRequested\"),\n \"Native worker state retains explicit stop intent after assignment completion\",\n );\n }),\n);\n\n/**\n * The shared, adapter-parameterized ThreadStore contract suite (STORE-010). Every\n * durable adapter test suite must execute each case against its own store provisioning.\n */\nexport const threadStoreConformanceCases: ReadonlyArray<ThreadStoreConformanceCase> = [\n nativeOutstandingReads,\n nativeAmbiguousOwnership,\n nativeWorkerAccounting,\n atomicBatchVisibility,\n idempotentReplay,\n tailConflict,\n producerFencing,\n offsetResumability,\n tailInspection,\n notMaterializedOperations,\n];\n\n/** Additional contract cases only for adapters advertising `ThreadStore.checkpoints`. */\nexport const threadCheckpointConformanceCases: ReadonlyArray<ThreadStoreConformanceCase> = [\n checkpointBoundaries,\n];\n"],"mappings":"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"}
@@ -4,7 +4,8 @@ import { r as Principal } from "../Receipt-BAHyigAF.mjs";
4
4
  import { t as AgentPolicy } from "../AgentPolicy-BqDoSXO6.mjs";
5
5
  import { r as AnyDefinition, t as Agent_d_exports } from "../Agent-D9cXqfF3.mjs";
6
6
  import { c as WorkerError, f as WorkerRef, h as WorkerSource } from "../Worker-fwWkBg12.mjs";
7
- import { O as PersistedJson, _ as Digest, dt as WorkerOrigin, h as DefinitionDigests, ko as SubmissionSnapshot } from "../Records-D88mgvyS.mjs";
7
+ import { O as PersistedJson, _ as Digest, ft as WorkerOrigin, h as DefinitionDigests, lt as WorkerContinuation } from "../Records-B5GFWCpn.mjs";
8
+ import { Cn as SubmissionSnapshot } from "../Admin-C34cVKlT.mjs";
8
9
  import { Context, Effect, Option, Schema } from "effect";
9
10
  declare namespace WorkerHost_d_exports {
10
11
  export { WorkerBudgetAuthorizer, WorkerConcurrencyLimit, WorkerConcurrencyResolver, WorkerHostAuthorizationRequest, WorkerHostAuthorizer, WorkerHostConfig, WorkerHostLimits, WorkerPolicyResolver, WorkerPolicySource, WorkerPolicyTarget };
@@ -23,6 +24,7 @@ export type WorkerPolicyTarget = {
23
24
  readonly source: WorkerSource;
24
25
  } & ({
25
26
  readonly _tag: "InitialInput";
27
+ readonly continuationOf?: WorkerContinuation;
26
28
  readonly sourceSubmission?: SubmissionSnapshot;
27
29
  readonly input: PersistedJson;
28
30
  readonly inputDigest: Digest;
@@ -65,6 +67,7 @@ export declare const WorkerConcurrencyResolver: Context.Reference<{
65
67
  readonly source: WorkerSource;
66
68
  readonly sourceSubmission?: SubmissionSnapshot;
67
69
  readonly worker: WorkerRef;
70
+ readonly continuationOf?: WorkerContinuation;
68
71
  readonly principal: Principal;
69
72
  }) => Effect.Effect<Option.Option<WorkerConcurrencyLimit>, WorkerError>;
70
73
  }>;
@@ -104,8 +107,11 @@ export interface WorkerHostAuthorizationRequest {
104
107
  readonly sourceSubmissionId?: SubmissionId;
105
108
  readonly principal: Principal;
106
109
  readonly operation: WorkerError["operation"];
107
- readonly access: "context" | "read" | "send" | "control";
110
+ /** Report access follows native frozen-message proof and preserves the destination principal. */
111
+ readonly access: "context" | "read" | "send" | "control" | "report";
108
112
  readonly worker?: WorkerRef;
113
+ /** Native-verified successful predecessor, never a caller-supplied authorization grant. */
114
+ readonly continuationOf?: WorkerContinuation;
109
115
  }
110
116
  export declare const WorkerHostAuthorizer: Context.Reference<{
111
117
  readonly authorize: (request: WorkerHostAuthorizationRequest) => Effect.Effect<Principal, WorkerError>;
@@ -120,6 +126,7 @@ export declare const WorkerBudgetAuthorizer: Context.Reference<{
120
126
  readonly source: WorkerSource;
121
127
  readonly principal: Principal;
122
128
  readonly worker: WorkerRef;
129
+ readonly continuationOf?: WorkerContinuation;
123
130
  readonly policy: AgentPolicy;
124
131
  readonly budget: SubagentBudgetReservation;
125
132
  }) => Effect.Effect<void, WorkerError>;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerHost.mjs","names":[],"sources":["../../src/durable/WorkerHost.ts"],"sourcesContent":["import { Context, Effect, Option, Schema } from \"effect\";\n\nimport type * as Agent from \"../core/Agent.ts\";\nimport type { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport type { SubagentBudgetReservation } from \"../core/SubagentContract.ts\";\nimport { WorkerError, type WorkerRef, type WorkerSource } from \"../core/Worker.ts\";\nimport type { DefinitionDigests, Digest, PersistedJson, WorkerOrigin } from \"./Records.ts\";\nimport type { Principal, SubmissionSnapshot } from \"./SubmissionLedger.ts\";\n\n/** Host-verified source input; absence never means the latest input in the Thread. */\nexport interface WorkerPolicySource {\n readonly threadId: ThreadId;\n readonly definition: Agent.AnyDefinition;\n readonly definitions: DefinitionDigests;\n readonly submission?: SubmissionSnapshot;\n}\n\n/** Initial input is validated again at destination admission, including idempotent replay. */\nexport type WorkerPolicyTarget = {\n readonly definition: Agent.AnyDefinition;\n readonly definitions: DefinitionDigests;\n readonly source: WorkerSource;\n} & (\n | {\n readonly _tag: \"InitialInput\";\n readonly sourceSubmission?: SubmissionSnapshot;\n readonly input: PersistedJson;\n readonly inputDigest: Digest;\n }\n | {\n readonly _tag: \"RetainedWorker\";\n /** Verified against canonical source history before this request reaches the resolver. */\n readonly origin: WorkerOrigin;\n }\n);\n\n/**\n * Opt-in host authority for policies captured in immutable application input. None preserves\n * the registered Definition's existing policy/override semantics. Some is a complete policy,\n * never merged with static overrides. Decode and authorize the exact captured revision; do not\n * read mutable settings or substitute a current capture for missing historical authority.\n * RetainedWorker may affirm only origin.policy, never replace a continuing worker's allowance.\n * Return WorkerError(unavailable) for temporarily unavailable authority so delivery can retry.\n * Implementations are acquired through Effect Layers; capture their dependencies in Layer R.\n */\nexport const WorkerPolicyResolver = Context.Reference<{\n readonly resolveSource: (\n request: WorkerPolicySource,\n ) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n readonly resolveTarget: (\n request: WorkerPolicyTarget,\n ) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n}>(\"@effect-agent/thread/WorkerPolicyResolver\", {\n defaultValue: () => ({\n resolveSource: () => Effect.succeed(Option.none()),\n resolveTarget: () => Effect.succeed(Option.none()),\n }),\n});\n\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\n\n/** A host-authorized ceiling on active background workers, not retained workers or Run usage. */\nexport const WorkerConcurrencyLimit = Schema.Struct({\n maxActiveWorkersPerSource: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type WorkerConcurrencyLimit = typeof WorkerConcurrencyLimit.Type;\n\n/**\n * Optional source-aware operational authority. Resolution occurs inside every new source\n * reservation attempt, against the same canonical history used for the append CAS. None\n * preserves WorkerHostConfig; Some can only narrow it. The selected submission is exact,\n * never the latest input. Implementations must authorize that immutable capture and retain\n * construction dependencies in Layer R. Unavailable authority must return WorkerError(unavailable).\n *\n * One worker occupies a slot while any of its inputs remain unacknowledged. Steering an active\n * worker does not acquire another slot. Decreases (including zero) do not cancel incumbents;\n * an idle worker needs a slot again. Idempotent retained reservations do not reacquire slots.\n */\nexport const WorkerConcurrencyResolver = Context.Reference<{\n readonly resolve: (request: {\n readonly source: WorkerSource;\n readonly sourceSubmission?: SubmissionSnapshot;\n readonly worker: WorkerRef;\n readonly principal: Principal;\n }) => Effect.Effect<Option.Option<WorkerConcurrencyLimit>, WorkerError>;\n}>(\"@effect-agent/thread/WorkerConcurrencyResolver\", {\n defaultValue: () => ({ resolve: () => Effect.succeed(Option.none()) }),\n});\n\n/** Host ceilings apply across all declarations owned by one source Thread. */\nexport const WorkerHostLimits = Schema.Struct({\n maxWorkersPerSource: Positive.check(Schema.isLessThanOrEqualTo(100)),\n /** Active background workers across declarations; omission retains source Tool concurrency. */\n maxActiveWorkersPerSource: Schema.optionalKey(Positive.check(Schema.isLessThanOrEqualTo(100))),\n maxInputsPerWorker: Positive.check(Schema.isLessThanOrEqualTo(1_000)),\n maxPendingInputsPerWorker: Positive.check(Schema.isLessThanOrEqualTo(100)),\n maxUpdateInputsPerWorker: Schema.optionalKey(Positive.check(Schema.isLessThanOrEqualTo(1_000))),\n maxPendingUpdateInputsPerWorker: Schema.optionalKey(\n Positive.check(Schema.isLessThanOrEqualTo(100)),\n ),\n lifetimeMillis: Positive.check(Schema.isLessThanOrEqualTo(604_800_000)),\n /** Preparation may repeat after loss before its decision commits; keep callbacks side-effect free. */\n reportPreparationTimeoutMillis: Schema.optionalKey(\n Positive.check(Schema.isLessThanOrEqualTo(30_000)),\n ),\n});\n\nexport type WorkerHostLimits = typeof WorkerHostLimits.Type;\n\nexport const WorkerHostConfig = Context.Reference<WorkerHostLimits>(\n \"@effect-agent/thread/WorkerHostConfig\",\n {\n defaultValue: () => ({\n maxWorkersPerSource: 32,\n maxInputsPerWorker: 64,\n maxPendingInputsPerWorker: 8,\n lifetimeMillis: 86_400_000,\n }),\n },\n);\n\n/**\n * Authenticate every acquisition/operation and authorize its exact source Thread. A returned\n * Principal is host-owned admission identity. Context access authenticates source metadata;\n * read, send and control remain separate grants. WorkerRefs and caller-supplied Thread\n * identifiers alone never confer any of them.\n */\nexport interface WorkerHostAuthorizationRequest {\n readonly sourceThreadId: ThreadId;\n /** An explicitly selected owner input; authorize this locator as well as the Thread. */\n readonly sourceSubmissionId?: SubmissionId;\n readonly principal: Principal;\n readonly operation: WorkerError[\"operation\"];\n readonly access: \"context\" | \"read\" | \"send\" | \"control\";\n readonly worker?: WorkerRef;\n}\n\nexport const WorkerHostAuthorizer = Context.Reference<{\n readonly authorize: (\n request: WorkerHostAuthorizationRequest,\n ) => Effect.Effect<Principal, WorkerError>;\n}>(\"@effect-agent/thread/WorkerHostAuthorizer\", {\n defaultValue: () => ({\n authorize: (request) =>\n WorkerError.make({\n operation: request.operation,\n reason: \"denied\",\n }),\n }),\n});\n\n/**\n * Deployment-owned permission to fund a root's background worker independently. The decision\n * covers the exact immutable origin and is checked again before each input admission. It never\n * changes delegation depth or Tool authority. Omission denies independent funding.\n */\nexport const WorkerBudgetAuthorizer = Context.Reference<{\n readonly authorize: (request: {\n readonly source: WorkerSource;\n readonly principal: Principal;\n readonly worker: WorkerRef;\n readonly policy: AgentPolicy;\n readonly budget: SubagentBudgetReservation;\n }) => Effect.Effect<void, WorkerError>;\n}>(\"@effect-agent/thread/WorkerBudgetAuthorizer\", {\n defaultValue: () => ({\n authorize: () => WorkerError.make({ operation: \"start\", reason: \"denied\" }),\n }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAa,uBAAuB,QAAQ,UAOzC,6CAA6C,EAC9C,qBAAqB;CACnB,qBAAqB,OAAO,QAAQ,OAAO,KAAK,CAAC;CACjD,qBAAqB,OAAO,QAAQ,OAAO,KAAK,CAAC;AACnD,GACF,CAAC;AAED,MAAM,WAAW,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;;AAGzD,MAAa,yBAAyB,OAAO,OAAO,EAClD,2BAA2B,OAAO,IAAI,MAAM,OAAO,uBAAuB,CAAC,CAAC,EAC9E,CAAC;;;;;;;;;;;;AAeD,MAAa,4BAA4B,QAAQ,UAO9C,kDAAkD,EACnD,qBAAqB,EAAE,eAAe,OAAO,QAAQ,OAAO,KAAK,CAAC,EAAE,GACtE,CAAC;;AAGD,MAAa,mBAAmB,OAAO,OAAO;CAC5C,qBAAqB,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;;CAEnE,2BAA2B,OAAO,YAAY,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC,CAAC;CAC7F,oBAAoB,SAAS,MAAM,OAAO,oBAAoB,GAAK,CAAC;CACpE,2BAA2B,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;CACzE,0BAA0B,OAAO,YAAY,SAAS,MAAM,OAAO,oBAAoB,GAAK,CAAC,CAAC;CAC9F,iCAAiC,OAAO,YACtC,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC,CAChD;CACA,gBAAgB,SAAS,MAAM,OAAO,oBAAoB,MAAW,CAAC;;CAEtE,gCAAgC,OAAO,YACrC,SAAS,MAAM,OAAO,oBAAoB,GAAM,CAAC,CACnD;AACF,CAAC;AAID,MAAa,mBAAmB,QAAQ,UACtC,yCACA,EACE,qBAAqB;CACnB,qBAAqB;CACrB,oBAAoB;CACpB,2BAA2B;CAC3B,gBAAgB;AAClB,GACF,CACF;AAkBA,MAAa,uBAAuB,QAAQ,UAIzC,6CAA6C,EAC9C,qBAAqB,EACnB,YAAY,YACV,YAAY,KAAK;CACf,WAAW,QAAQ;CACnB,QAAQ;AACV,CAAC,EACL,GACF,CAAC;;;;;;AAOD,MAAa,yBAAyB,QAAQ,UAQ3C,+CAA+C,EAChD,qBAAqB,EACnB,iBAAiB,YAAY,KAAK;CAAE,WAAW;CAAS,QAAQ;AAAS,CAAC,EAC5E,GACF,CAAC"}
1
+ {"version":3,"file":"WorkerHost.mjs","names":[],"sources":["../../src/durable/WorkerHost.ts"],"sourcesContent":["import { Context, Effect, Option, Schema } from \"effect\";\n\nimport type * as Agent from \"../core/Agent.ts\";\nimport type { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport type { SubmissionId, ThreadId } from \"../core/Identifiers.ts\";\nimport type { SubagentBudgetReservation } from \"../core/SubagentContract.ts\";\nimport { WorkerError, type WorkerRef, type WorkerSource } from \"../core/Worker.ts\";\nimport type {\n DefinitionDigests,\n Digest,\n PersistedJson,\n WorkerOrigin,\n WorkerContinuation,\n} from \"./Records.ts\";\nimport type { Principal, SubmissionSnapshot } from \"./SubmissionLedger.ts\";\n\n/** Host-verified source input; absence never means the latest input in the Thread. */\nexport interface WorkerPolicySource {\n readonly threadId: ThreadId;\n readonly definition: Agent.AnyDefinition;\n readonly definitions: DefinitionDigests;\n readonly submission?: SubmissionSnapshot;\n}\n\n/** Initial input is validated again at destination admission, including idempotent replay. */\nexport type WorkerPolicyTarget = {\n readonly definition: Agent.AnyDefinition;\n readonly definitions: DefinitionDigests;\n readonly source: WorkerSource;\n} & (\n | {\n readonly _tag: \"InitialInput\";\n readonly continuationOf?: WorkerContinuation;\n readonly sourceSubmission?: SubmissionSnapshot;\n readonly input: PersistedJson;\n readonly inputDigest: Digest;\n }\n | {\n readonly _tag: \"RetainedWorker\";\n /** Verified against canonical source history before this request reaches the resolver. */\n readonly origin: WorkerOrigin;\n }\n);\n\n/**\n * Opt-in host authority for policies captured in immutable application input. None preserves\n * the registered Definition's existing policy/override semantics. Some is a complete policy,\n * never merged with static overrides. Decode and authorize the exact captured revision; do not\n * read mutable settings or substitute a current capture for missing historical authority.\n * RetainedWorker may affirm only origin.policy, never replace a continuing worker's allowance.\n * Return WorkerError(unavailable) for temporarily unavailable authority so delivery can retry.\n * Implementations are acquired through Effect Layers; capture their dependencies in Layer R.\n */\nexport const WorkerPolicyResolver = Context.Reference<{\n readonly resolveSource: (\n request: WorkerPolicySource,\n ) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n readonly resolveTarget: (\n request: WorkerPolicyTarget,\n ) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n}>(\"@effect-agent/thread/WorkerPolicyResolver\", {\n defaultValue: () => ({\n resolveSource: () => Effect.succeed(Option.none()),\n resolveTarget: () => Effect.succeed(Option.none()),\n }),\n});\n\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\n\n/** A host-authorized ceiling on active background workers, not retained workers or Run usage. */\nexport const WorkerConcurrencyLimit = Schema.Struct({\n maxActiveWorkersPerSource: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n});\n\nexport type WorkerConcurrencyLimit = typeof WorkerConcurrencyLimit.Type;\n\n/**\n * Optional source-aware operational authority. Resolution occurs inside every new source\n * reservation attempt, against the same canonical history used for the append CAS. None\n * preserves WorkerHostConfig; Some can only narrow it. The selected submission is exact,\n * never the latest input. Implementations must authorize that immutable capture and retain\n * construction dependencies in Layer R. Unavailable authority must return WorkerError(unavailable).\n *\n * One worker occupies a slot while any of its inputs remain unacknowledged. Steering an active\n * worker does not acquire another slot. Decreases (including zero) do not cancel incumbents;\n * an idle worker needs a slot again. Idempotent retained reservations do not reacquire slots.\n */\nexport const WorkerConcurrencyResolver = Context.Reference<{\n readonly resolve: (request: {\n readonly source: WorkerSource;\n readonly sourceSubmission?: SubmissionSnapshot;\n readonly worker: WorkerRef;\n readonly continuationOf?: WorkerContinuation;\n readonly principal: Principal;\n }) => Effect.Effect<Option.Option<WorkerConcurrencyLimit>, WorkerError>;\n}>(\"@effect-agent/thread/WorkerConcurrencyResolver\", {\n defaultValue: () => ({ resolve: () => Effect.succeed(Option.none()) }),\n});\n\n/** Host ceilings apply across all declarations owned by one source Thread. */\nexport const WorkerHostLimits = Schema.Struct({\n maxWorkersPerSource: Positive.check(Schema.isLessThanOrEqualTo(100)),\n /** Active background workers across declarations; omission retains source Tool concurrency. */\n maxActiveWorkersPerSource: Schema.optionalKey(Positive.check(Schema.isLessThanOrEqualTo(100))),\n maxInputsPerWorker: Positive.check(Schema.isLessThanOrEqualTo(1_000)),\n maxPendingInputsPerWorker: Positive.check(Schema.isLessThanOrEqualTo(100)),\n maxUpdateInputsPerWorker: Schema.optionalKey(Positive.check(Schema.isLessThanOrEqualTo(1_000))),\n maxPendingUpdateInputsPerWorker: Schema.optionalKey(\n Positive.check(Schema.isLessThanOrEqualTo(100)),\n ),\n lifetimeMillis: Positive.check(Schema.isLessThanOrEqualTo(604_800_000)),\n /** Preparation may repeat after loss before its decision commits; keep callbacks side-effect free. */\n reportPreparationTimeoutMillis: Schema.optionalKey(\n Positive.check(Schema.isLessThanOrEqualTo(30_000)),\n ),\n});\n\nexport type WorkerHostLimits = typeof WorkerHostLimits.Type;\n\nexport const WorkerHostConfig = Context.Reference<WorkerHostLimits>(\n \"@effect-agent/thread/WorkerHostConfig\",\n {\n defaultValue: () => ({\n maxWorkersPerSource: 32,\n maxInputsPerWorker: 64,\n maxPendingInputsPerWorker: 8,\n lifetimeMillis: 86_400_000,\n }),\n },\n);\n\n/**\n * Authenticate every acquisition/operation and authorize its exact source Thread. A returned\n * Principal is host-owned admission identity. Context access authenticates source metadata;\n * read, send and control remain separate grants. WorkerRefs and caller-supplied Thread\n * identifiers alone never confer any of them.\n */\nexport interface WorkerHostAuthorizationRequest {\n readonly sourceThreadId: ThreadId;\n /** An explicitly selected owner input; authorize this locator as well as the Thread. */\n readonly sourceSubmissionId?: SubmissionId;\n readonly principal: Principal;\n readonly operation: WorkerError[\"operation\"];\n /** Report access follows native frozen-message proof and preserves the destination principal. */\n readonly access: \"context\" | \"read\" | \"send\" | \"control\" | \"report\";\n readonly worker?: WorkerRef;\n /** Native-verified successful predecessor, never a caller-supplied authorization grant. */\n readonly continuationOf?: WorkerContinuation;\n}\n\nexport const WorkerHostAuthorizer = Context.Reference<{\n readonly authorize: (\n request: WorkerHostAuthorizationRequest,\n ) => Effect.Effect<Principal, WorkerError>;\n}>(\"@effect-agent/thread/WorkerHostAuthorizer\", {\n defaultValue: () => ({\n authorize: (request) =>\n WorkerError.make({\n operation: request.operation,\n reason: \"denied\",\n }),\n }),\n});\n\n/**\n * Deployment-owned permission to fund a root's background worker independently. The decision\n * covers the exact immutable origin and is checked again before each input admission. It never\n * changes delegation depth or Tool authority. Omission denies independent funding.\n */\nexport const WorkerBudgetAuthorizer = Context.Reference<{\n readonly authorize: (request: {\n readonly source: WorkerSource;\n readonly principal: Principal;\n readonly worker: WorkerRef;\n readonly continuationOf?: WorkerContinuation;\n readonly policy: AgentPolicy;\n readonly budget: SubagentBudgetReservation;\n }) => Effect.Effect<void, WorkerError>;\n}>(\"@effect-agent/thread/WorkerBudgetAuthorizer\", {\n defaultValue: () => ({\n authorize: () => WorkerError.make({ operation: \"start\", reason: \"denied\" }),\n }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqDA,MAAa,uBAAuB,QAAQ,UAOzC,6CAA6C,EAC9C,qBAAqB;CACnB,qBAAqB,OAAO,QAAQ,OAAO,KAAK,CAAC;CACjD,qBAAqB,OAAO,QAAQ,OAAO,KAAK,CAAC;AACnD,GACF,CAAC;AAED,MAAM,WAAW,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;;AAGzD,MAAa,yBAAyB,OAAO,OAAO,EAClD,2BAA2B,OAAO,IAAI,MAAM,OAAO,uBAAuB,CAAC,CAAC,EAC9E,CAAC;;;;;;;;;;;;AAeD,MAAa,4BAA4B,QAAQ,UAQ9C,kDAAkD,EACnD,qBAAqB,EAAE,eAAe,OAAO,QAAQ,OAAO,KAAK,CAAC,EAAE,GACtE,CAAC;;AAGD,MAAa,mBAAmB,OAAO,OAAO;CAC5C,qBAAqB,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;;CAEnE,2BAA2B,OAAO,YAAY,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC,CAAC;CAC7F,oBAAoB,SAAS,MAAM,OAAO,oBAAoB,GAAK,CAAC;CACpE,2BAA2B,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC;CACzE,0BAA0B,OAAO,YAAY,SAAS,MAAM,OAAO,oBAAoB,GAAK,CAAC,CAAC;CAC9F,iCAAiC,OAAO,YACtC,SAAS,MAAM,OAAO,oBAAoB,GAAG,CAAC,CAChD;CACA,gBAAgB,SAAS,MAAM,OAAO,oBAAoB,MAAW,CAAC;;CAEtE,gCAAgC,OAAO,YACrC,SAAS,MAAM,OAAO,oBAAoB,GAAM,CAAC,CACnD;AACF,CAAC;AAID,MAAa,mBAAmB,QAAQ,UACtC,yCACA,EACE,qBAAqB;CACnB,qBAAqB;CACrB,oBAAoB;CACpB,2BAA2B;CAC3B,gBAAgB;AAClB,GACF,CACF;AAqBA,MAAa,uBAAuB,QAAQ,UAIzC,6CAA6C,EAC9C,qBAAqB,EACnB,YAAY,YACV,YAAY,KAAK;CACf,WAAW,QAAQ;CACnB,QAAQ;AACV,CAAC,EACL,GACF,CAAC;;;;;;AAOD,MAAa,yBAAyB,QAAQ,UAS3C,+CAA+C,EAChD,qBAAqB,EACnB,iBAAiB,YAAY,KAAK;CAAE,WAAW;CAAS,QAAQ;AAAS,CAAC,EAC5E,GACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import { A as start, C as decodeFinalOutput, D as renderInputPrompt, E as projectCompletionOutput, F as withTerminalDefectEvent, M as stream, N as streamUnknown, O as run, P as streamWithUsageAccountingUnknown, S as ToolCallWaiting, T as projectCompletionFromToolOutput, _ as SubagentDurability, a as AgentResultSchema, b as SubagentDurabilityError, c as AgentSpawner, d as DetachedRun, f as EngineProvidedToolServices, g as SpawnedChildRun, h as SpawnRunOptions, i as AgentResult, j as startUnknown, k as runUnknown, l as AgentSpawnerParent, m as SpawnDelegation, n as AgentChildPending, o as AgentRuntimeFailure, p as RuntimeBinding, r as AgentCompletionProjectionRequirements, s as AgentRuntimeRequirements, u as AgentSpawnerService, v as SubagentDurabilityDurable, w as encodeRunDisposition, x as SubagentDurabilityService, y as SubagentDurabilityEphemeral } from "../AgentRuntime-BUxDdLpw.mjs";
1
+ import { A as start, C as decodeFinalOutput, D as renderInputPrompt, E as projectCompletionOutput, F as withTerminalDefectEvent, M as stream, N as streamUnknown, O as run, P as streamWithUsageAccountingUnknown, S as ToolCallWaiting, T as projectCompletionFromToolOutput, _ as SubagentDurability, a as AgentResultSchema, b as SubagentDurabilityError, c as AgentSpawner, d as DetachedRun, f as EngineProvidedToolServices, g as SpawnedChildRun, h as SpawnRunOptions, i as AgentResult, j as startUnknown, k as runUnknown, l as AgentSpawnerParent, m as SpawnDelegation, n as AgentChildPending, o as AgentRuntimeFailure, p as RuntimeBinding, r as AgentCompletionProjectionRequirements, s as AgentRuntimeRequirements, u as AgentSpawnerService, v as SubagentDurabilityDurable, w as encodeRunDisposition, x as SubagentDurabilityService, y as SubagentDurabilityEphemeral } from "../AgentRuntime-DEDvMkAR.mjs";
2
2
  export { AgentChildPending, type AgentCompletionProjectionRequirements, type AgentResult, AgentResultSchema, type AgentRuntimeFailure, type AgentRuntimeRequirements, AgentSpawner, type AgentSpawnerParent, type AgentSpawnerService, type DetachedRun, type EngineProvidedToolServices, type RuntimeBinding, type SpawnDelegation, type SpawnRunOptions, type SpawnedChildRun, SubagentDurability, type SubagentDurabilityDurable, type SubagentDurabilityEphemeral, SubagentDurabilityError, type SubagentDurabilityService, ToolCallWaiting, decodeFinalOutput, encodeRunDisposition, projectCompletionFromToolOutput, projectCompletionOutput, renderInputPrompt, run, runUnknown, start, startUnknown, stream, streamUnknown, streamWithUsageAccountingUnknown, withTerminalDefectEvent };
@@ -1,2 +1,2 @@
1
- import { a as StartWorkerRequest, c as WorkerMessageRequest, d as WorkerReportPreparationFailure, f as WorkerReporting, i as FollowUpWorkerRequest, l as WorkerObservation, n as DeferredFollowUpWorkerRequest, o as SubagentHost, p as WorkerRunReport, r as DeferredStartWorkerRequest, t as BackgroundReporting, u as WorkerReceiptRequest } from "../SubagentHost-4WB8Hj0C.mjs";
1
+ import { a as StartWorkerRequest, c as WorkerMessageRequest, d as WorkerReportPreparationFailure, f as WorkerReporting, i as FollowUpWorkerRequest, l as WorkerObservation, n as DeferredFollowUpWorkerRequest, o as SubagentHost, p as WorkerRunReport, r as DeferredStartWorkerRequest, t as BackgroundReporting, u as WorkerReceiptRequest } from "../SubagentHost-DQjHFGqH.mjs";
2
2
  export { BackgroundReporting, DeferredFollowUpWorkerRequest, DeferredStartWorkerRequest, FollowUpWorkerRequest, StartWorkerRequest, SubagentHost, WorkerMessageRequest, WorkerObservation, WorkerReceiptRequest, WorkerReportPreparationFailure, WorkerReporting, WorkerRunReport };
@@ -1 +1 @@
1
- {"version":3,"file":"SubagentHost.mjs","names":[],"sources":["../../src/engine/SubagentHost.ts"],"sourcesContent":["import type { Effect, Option } from \"effect\";\nimport { Context, Schema, Stream } from \"effect\";\n\nimport type * as Agent from \"../core/Agent.ts\";\nimport type { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport type * as FailureDiagnostic from \"../core/FailureDiagnostic.ts\";\nimport type { DelegationId, RunId, SettlementId, ThreadId } from \"../core/Identifiers.ts\";\nimport type { MessageRef, MessageStatus } from \"../core/Messaging.ts\";\nimport { type IdempotencyKey, type JoinedToHost, type Receipt } from \"../core/Receipt.ts\";\nimport type { SubagentBudgetReservation } from \"../core/SubagentContract.ts\";\nimport {\n WorkerError,\n type WorkerStop,\n type WorkerStopped,\n type WorkerCompletion,\n type WorkerHistoryEntry,\n type WorkerContext,\n type WorkerBudgetScope,\n type WorkerSource,\n type WorkerPage,\n type WorkerRef,\n type WorkerStarted,\n type WorkerSummary,\n} from \"../core/Worker.ts\";\n\n/** Prepared values cross this port only to be Schema-decoded before durable storage. */\nexport interface StartWorkerRequest {\n readonly delegationId: DelegationId;\n readonly target: Agent.AnyDefinition;\n readonly idempotencyKey: IdempotencyKey;\n readonly encodedInput: unknown;\n readonly encodedParameters: unknown;\n readonly policy: AgentPolicy;\n readonly budget: SubagentBudgetReservation;\n readonly encodedGrant: unknown;\n readonly toolCallAllowance?: number;\n /** Author-owned request; the durable host must separately authorize worker-run funding. */\n readonly budgetScope?: WorkerBudgetScope;\n}\n\n/**\n * First-admission preparation stays lazy until the owner authorizes the caller and checks the\n * retained command. Replays compare declared parameters/options and reuse the original capture.\n * Prepared policy, budget, and allowance are frozen first-admission configuration, not replay\n * arguments; changing them requires a new command key. Current caller authorization still applies.\n * Preparation must be free of external effects: concurrent first admissions can prepare before\n * the retained delivery chooses its first writer.\n */\nexport interface DeferredStartWorkerRequest<E = never, R = never> extends Pick<\n StartWorkerRequest,\n | \"delegationId\"\n | \"target\"\n | \"idempotencyKey\"\n | \"encodedParameters\"\n | \"encodedGrant\"\n | \"budgetScope\"\n> {\n readonly prepare: Effect.Effect<\n Pick<StartWorkerRequest, \"encodedInput\" | \"policy\" | \"budget\" | \"toolCallAllowance\">,\n E,\n R\n >;\n}\n\nexport interface FollowUpWorkerRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly idempotencyKey: IdempotencyKey;\n readonly encodedInput: unknown;\n readonly encodedParameters: unknown;\n}\n\n/**\n * Like deferred starts, follow-ups prepare only after current authorization and retained-command\n * lookup. Replays compare declared parameters and reuse the original input and worker authority.\n * Preparation must be free of external effects because concurrent first admissions can prepare.\n */\nexport interface DeferredFollowUpWorkerRequest<E = never, R = never> extends Omit<\n FollowUpWorkerRequest,\n \"encodedInput\"\n> {\n readonly prepare: Effect.Effect<Pick<FollowUpWorkerRequest, \"encodedInput\">, E, R>;\n}\n\nexport interface WorkerReceiptRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly receipt: Receipt;\n}\n\nexport interface WorkerMessageRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly message: MessageRef;\n}\n\n/**\n * Canonical terminal values remain encoded until the capability decodes the saved parameters\n * and target output and applies its declared result projection. Child E does not survive settlement.\n */\nexport type WorkerObservation =\n | { readonly _tag: \"Pending\"; readonly receipt: Receipt }\n | {\n readonly _tag: \"Settled\";\n readonly receipt: Receipt;\n /** Absent when an input failed or was cancelled before any Run started. */\n readonly runId?: RunId;\n readonly settlementId: SettlementId;\n readonly outcome: \"completed\" | \"failed\" | \"aborted\";\n readonly encodedParameters: unknown;\n readonly encodedResult: unknown;\n /** Operator-private failed-settlement evidence; never part of a model Tool result. */\n readonly diagnostic?: FailureDiagnostic.Failure;\n readonly budgetExhausted: boolean;\n };\n\n/** One actual canonical Run, independent of how many input Receipts joined it. */\nexport interface WorkerRunReport {\n readonly worker: WorkerRef;\n readonly context: WorkerContext;\n readonly observation: Extract<WorkerObservation, { readonly _tag: \"Settled\" }> & {\n readonly runId: RunId;\n };\n}\n\n/** A bounded projection failure; raw application errors never enter durable report records. */\nexport class WorkerReportPreparationFailure extends Schema.TaggedError<WorkerReportPreparationFailure>()(\n \"WorkerReportPreparationFailure\",\n { stage: Schema.Literals([\"projection\", \"input\", \"preparation\"]) },\n) {}\n\n/**\n * Source-owned standard projection discovered from background tools.\n * The concrete descriptor retains its E/R; durable registration captures R and records\n * bounded preparation failure rather than serializing arbitrary application errors.\n */\nexport interface WorkerReporting<E = never, R = never> {\n readonly delegationId: DelegationId;\n readonly target: Agent.AnyDefinition;\n readonly prepare: (report: WorkerRunReport) => Effect.Effect<\n {\n readonly message: WorkerCompletion;\n },\n E | WorkerReportPreparationFailure,\n R\n >;\n}\n\n/** Descriptor carried by background tools; registration discovers it without an app handoff. */\nexport const BackgroundReporting = Context.Reference<\n WorkerReporting<WorkerReportPreparationFailure> | undefined\n>(\"@effect-agent/engine/BackgroundReporting\", { defaultValue: () => undefined });\n\n/**\n * Trusted, caller-bound host port. The interpreter supplies a fresh facet for each Tool Call;\n * programmatic callers acquire a separately authorized Thread facet. Request values cannot\n * choose the source identity, replace worker provenance or expand its authority and budgets.\n */\nexport class SubagentHost extends Context.Service<\n SubagentHost,\n {\n readonly context: Effect.Effect<WorkerContext, WorkerError>;\n /** Resolve prepared input through host authority; None retains legacy target inheritance. */\n readonly resolveTargetPolicy: (request: {\n readonly target: Agent.AnyDefinition;\n readonly encodedInput: unknown;\n }) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n /** Prepared callers retain strict input/policy conflicts; deferred callers replay the saved capture. */\n readonly start: <E = never, R = never>(\n request: StartWorkerRequest | DeferredStartWorkerRequest<E, R>,\n ) => Effect.Effect<WorkerStarted, WorkerError | E, R>;\n /** Prepared callers retain strict input conflicts; deferred callers replay the saved capture. */\n readonly followUp: <E = never, R = never>(\n request: FollowUpWorkerRequest | DeferredFollowUpWorkerRequest<E, R>,\n ) => Effect.Effect<MessageStatus, WorkerError | E, R>;\n readonly inspect: (\n request: WorkerReceiptRequest | WorkerMessageRequest,\n ) => Effect.Effect<WorkerObservation | MessageStatus, WorkerError>;\n /** Inspect the continuing worker using the same summary contract as discovery. */\n readonly summary: (request: {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n }) => Effect.Effect<WorkerSummary, WorkerError>;\n /** A finite snapshot through the captured tail; resume with the last sequence as `after`. */\n readonly observe: (request: {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly after?: number;\n }) => Stream.Stream<WorkerHistoryEntry, WorkerError>;\n /** Interrupting this wait never requests cancellation of accepted work. */\n readonly await: (\n request: WorkerReceiptRequest,\n ) => Effect.Effect<WorkerObservation, WorkerError>;\n readonly list: (request: {\n readonly delegationId: DelegationId;\n readonly target: Agent.AnyDefinition;\n readonly limit: number;\n readonly after?: ThreadId;\n }) => Effect.Effect<WorkerPage, WorkerError>;\n /** Seal the whole worker; retries reconcile the same command, including a lost acknowledgement. */\n readonly stop: (\n request: WorkerStop & { readonly target: Agent.AnyDefinition },\n ) => Effect.Effect<WorkerStopped, WorkerError>;\n /** Cancel exactly this Receipt; preserve JoinedToHost without broadening its target. */\n readonly cancel: (\n request: WorkerReceiptRequest,\n ) => Effect.Effect<void, WorkerError | JoinedToHost>;\n }\n>()(\"@effect-agent/engine/SubagentHost\") {\n static readonly unavailable: SubagentHost[\"Service\"] = {\n context: WorkerError.make({ operation: \"context\", reason: \"unavailable\" }),\n resolveTargetPolicy: () => WorkerError.make({ operation: \"start\", reason: \"unavailable\" }),\n start: () => WorkerError.make({ operation: \"start\", reason: \"unavailable\" }),\n followUp: () => WorkerError.make({ operation: \"followUp\", reason: \"unavailable\" }),\n inspect: () => WorkerError.make({ operation: \"inspect\", reason: \"unavailable\" }),\n summary: () => WorkerError.make({ operation: \"inspect\", reason: \"unavailable\" }),\n observe: () => Stream.fail(WorkerError.make({ operation: \"observe\", reason: \"unavailable\" })),\n await: () => WorkerError.make({ operation: \"await\", reason: \"unavailable\" }),\n list: () => WorkerError.make({ operation: \"list\", reason: \"unavailable\" }),\n stop: () => WorkerError.make({ operation: \"stop\", reason: \"unavailable\" }),\n cancel: () => WorkerError.make({ operation: \"cancel\", reason: \"unavailable\" }),\n };\n\n /** Runtime-owned per-call binding. Unconfigured Runs deny background operations. */\n static readonly forTool = Context.Reference<\n (source: Extract<WorkerSource, { readonly _tag: \"tool\" }>) => SubagentHost[\"Service\"]\n >(\"@effect-agent/engine/SubagentHost/forTool\", {\n defaultValue: () => () => SubagentHost.unavailable,\n });\n}\n"],"mappings":";;;;;;;;;;AA8HA,IAAa,iCAAb,cAAoD,OAAO,YAA4C,CAAC,CACtG,kCACA,EAAE,OAAO,OAAO,SAAS;CAAC;CAAc;CAAS;AAAa,CAAC,EAAE,CACnE,CAAC,CAAC,CAAC;;AAoBH,MAAa,sBAAsB,QAAQ,UAEzC,4CAA4C,EAAE,oBAAoB,KAAA,EAAU,CAAC;;;;;;AAO/E,IAAa,eAAb,MAAa,qBAAqB,QAAQ,QAkDxC,CAAC,CAAC,mCAAmC,CAAC,CAAC;CACvC,OAAgB,cAAuC;EACrD,SAAS,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EACzE,2BAA2B,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EACzF,aAAa,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EAC3E,gBAAgB,YAAY,KAAK;GAAE,WAAW;GAAY,QAAQ;EAAc,CAAC;EACjF,eAAe,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EAC/E,eAAe,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EAC/E,eAAe,OAAO,KAAK,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC,CAAC;EAC5F,aAAa,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EAC3E,YAAY,YAAY,KAAK;GAAE,WAAW;GAAQ,QAAQ;EAAc,CAAC;EACzE,YAAY,YAAY,KAAK;GAAE,WAAW;GAAQ,QAAQ;EAAc,CAAC;EACzE,cAAc,YAAY,KAAK;GAAE,WAAW;GAAU,QAAQ;EAAc,CAAC;CAC/E;;CAGA,OAAgB,UAAU,QAAQ,UAEhC,6CAA6C,EAC7C,0BAA0B,aAAa,YACzC,CAAC;AACH"}
1
+ {"version":3,"file":"SubagentHost.mjs","names":[],"sources":["../../src/engine/SubagentHost.ts"],"sourcesContent":["import type { Effect, Option } from \"effect\";\nimport { Context, Schema, Stream } from \"effect\";\n\nimport type * as Agent from \"../core/Agent.ts\";\nimport type { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport type { Update } from \"../core/AgentUpdates.ts\";\nimport type * as FailureDiagnostic from \"../core/FailureDiagnostic.ts\";\nimport type { DelegationId, RunId, SettlementId, ThreadId } from \"../core/Identifiers.ts\";\nimport type { MessageRef, MessageStatus } from \"../core/Messaging.ts\";\nimport { type IdempotencyKey, type JoinedToHost, type Receipt } from \"../core/Receipt.ts\";\nimport type { SubagentBudgetReservation } from \"../core/SubagentContract.ts\";\nimport {\n WorkerError,\n type WorkerStop,\n type WorkerStopped,\n type WorkerCompletion,\n type WorkerHistoryEntry,\n type WorkerContext,\n type WorkerBudgetScope,\n type WorkerSource,\n type WorkerPage,\n type WorkerRef,\n type WorkerStarted,\n type WorkerSummary,\n} from \"../core/Worker.ts\";\n\n/** Prepared values cross this port only to be Schema-decoded before durable storage. */\nexport interface StartWorkerRequest {\n readonly delegationId: DelegationId;\n /** Start a distinct assignment using verified completed predecessor authority. */\n readonly continuationOf?: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly idempotencyKey: IdempotencyKey;\n readonly encodedInput: unknown;\n readonly encodedParameters: unknown;\n readonly policy: AgentPolicy;\n readonly budget: SubagentBudgetReservation;\n readonly encodedGrant: unknown;\n readonly toolCallAllowance?: number;\n /** Author-owned request; the durable host must separately authorize worker-run funding. */\n readonly budgetScope?: WorkerBudgetScope;\n}\n\n/**\n * First-admission preparation stays lazy until the owner authorizes the caller and checks the\n * retained command. Replays compare declared parameters/options and reuse the original capture.\n * Prepared policy, budget, and allowance are frozen first-admission configuration, not replay\n * arguments; changing them requires a new command key. Current caller authorization still applies.\n * Preparation must be free of external effects: concurrent first admissions can prepare before\n * the retained delivery chooses its first writer.\n */\nexport interface DeferredStartWorkerRequest<E = never, R = never> extends Pick<\n StartWorkerRequest,\n | \"delegationId\"\n | \"continuationOf\"\n | \"target\"\n | \"idempotencyKey\"\n | \"encodedParameters\"\n | \"encodedGrant\"\n | \"budgetScope\"\n> {\n readonly prepare: Effect.Effect<\n Pick<StartWorkerRequest, \"encodedInput\" | \"policy\" | \"budget\" | \"toolCallAllowance\">,\n E,\n R\n >;\n}\n\nexport interface FollowUpWorkerRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly idempotencyKey: IdempotencyKey;\n readonly encodedInput: unknown;\n readonly encodedParameters: unknown;\n}\n\n/**\n * Like deferred starts, follow-ups prepare only after current authorization and retained-command\n * lookup. Replays compare declared parameters and reuse the original input and worker authority.\n * Preparation must be free of external effects because concurrent first admissions can prepare.\n */\nexport interface DeferredFollowUpWorkerRequest<E = never, R = never> extends Omit<\n FollowUpWorkerRequest,\n \"encodedInput\"\n> {\n readonly prepare: Effect.Effect<Pick<FollowUpWorkerRequest, \"encodedInput\">, E, R>;\n}\n\nexport interface WorkerReceiptRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly receipt: Receipt;\n}\n\nexport interface WorkerMessageRequest {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly message: MessageRef;\n}\n\n/**\n * Canonical terminal values remain encoded until the capability decodes the saved parameters\n * and target output and applies its declared result projection. Child E does not survive settlement.\n */\nexport type WorkerObservation =\n | { readonly _tag: \"Pending\"; readonly receipt: Receipt }\n | {\n readonly _tag: \"Settled\";\n readonly receipt: Receipt;\n /** Absent when an input failed or was cancelled before any Run started. */\n readonly runId?: RunId;\n readonly settlementId: SettlementId;\n readonly outcome: \"completed\" | \"failed\" | \"aborted\";\n readonly encodedParameters: unknown;\n readonly encodedResult: unknown;\n /** Operator-private failed-settlement evidence; never part of a model Tool result. */\n readonly diagnostic?: FailureDiagnostic.Failure;\n readonly budgetExhausted: boolean;\n };\n\n/** One actual canonical Run, independent of how many input Receipts joined it. */\nexport interface WorkerRunReport {\n readonly worker: WorkerRef;\n readonly context: WorkerContext;\n readonly observation: Extract<WorkerObservation, { readonly _tag: \"Settled\" }> & {\n readonly runId: RunId;\n };\n}\n\n/** A bounded projection failure; raw application errors never enter durable report records. */\nexport class WorkerReportPreparationFailure extends Schema.TaggedError<WorkerReportPreparationFailure>()(\n \"WorkerReportPreparationFailure\",\n { stage: Schema.Literals([\"projection\", \"input\", \"preparation\"]) },\n) {}\n\n/**\n * Source-owned standard projection discovered from background tools.\n * The concrete descriptor retains its E/R; durable registration captures R and records\n * bounded preparation failure rather than serializing arbitrary application errors.\n */\nexport interface WorkerReporting<E = never, R = never> {\n readonly delegationId: DelegationId;\n readonly target: Agent.AnyDefinition;\n /** Pure first-emission selection. False retains the canonical update without parent delivery. */\n readonly reportUpdate?: (update: Update) => boolean;\n /** False retains a filtered report receipt without waking the parent. */\n readonly reportCompletion?: (report: WorkerRunReport) => boolean;\n readonly prepare: (report: WorkerRunReport) => Effect.Effect<\n {\n readonly message: WorkerCompletion;\n },\n E | WorkerReportPreparationFailure,\n R\n >;\n}\n\n/** Descriptor carried by background tools; registration discovers it without an app handoff. */\nexport const BackgroundReporting = Context.Reference<\n WorkerReporting<WorkerReportPreparationFailure> | undefined\n>(\"@effect-agent/engine/BackgroundReporting\", { defaultValue: () => undefined });\n\n/**\n * Trusted, caller-bound host port. The interpreter supplies a fresh facet for each Tool Call;\n * programmatic callers acquire a separately authorized Thread facet. Request values cannot\n * choose the source identity, replace worker provenance or expand its authority and budgets.\n */\nexport class SubagentHost extends Context.Service<\n SubagentHost,\n {\n readonly context: Effect.Effect<WorkerContext, WorkerError>;\n /** Resolve prepared input through host authority; None retains legacy target inheritance. */\n readonly resolveTargetPolicy: (request: {\n readonly continuationOf?: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly encodedInput: unknown;\n }) => Effect.Effect<Option.Option<AgentPolicy>, WorkerError>;\n /** Prepared callers retain strict input/policy conflicts; deferred callers replay the saved capture. */\n readonly start: <E = never, R = never>(\n request: StartWorkerRequest | DeferredStartWorkerRequest<E, R>,\n ) => Effect.Effect<WorkerStarted, WorkerError | E, R>;\n /** Prepared callers retain strict input conflicts; deferred callers replay the saved capture. */\n readonly followUp: <E = never, R = never>(\n request: FollowUpWorkerRequest | DeferredFollowUpWorkerRequest<E, R>,\n ) => Effect.Effect<MessageStatus, WorkerError | E, R>;\n readonly inspect: (\n request: WorkerReceiptRequest | WorkerMessageRequest,\n ) => Effect.Effect<WorkerObservation | MessageStatus, WorkerError>;\n /** Inspect the continuing worker using the same summary contract as discovery. */\n readonly summary: (request: {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n }) => Effect.Effect<WorkerSummary, WorkerError>;\n /** A finite snapshot through the captured tail; resume with the last sequence as `after`. */\n readonly observe: (request: {\n readonly worker: WorkerRef;\n readonly target: Agent.AnyDefinition;\n readonly after?: number;\n }) => Stream.Stream<WorkerHistoryEntry, WorkerError>;\n /** Interrupting this wait never requests cancellation of accepted work. */\n readonly await: (\n request: WorkerReceiptRequest,\n ) => Effect.Effect<WorkerObservation, WorkerError>;\n readonly list: (request: {\n readonly delegationId: DelegationId;\n readonly target: Agent.AnyDefinition;\n readonly limit: number;\n readonly after?: ThreadId;\n }) => Effect.Effect<WorkerPage, WorkerError>;\n /** Seal the whole worker; retries reconcile the same command, including a lost acknowledgement. */\n readonly stop: (\n request: WorkerStop & { readonly target: Agent.AnyDefinition },\n ) => Effect.Effect<WorkerStopped, WorkerError>;\n /** Cancel exactly this Receipt; preserve JoinedToHost without broadening its target. */\n readonly cancel: (\n request: WorkerReceiptRequest,\n ) => Effect.Effect<void, WorkerError | JoinedToHost>;\n }\n>()(\"@effect-agent/engine/SubagentHost\") {\n static readonly unavailable: SubagentHost[\"Service\"] = {\n context: WorkerError.make({ operation: \"context\", reason: \"unavailable\" }),\n resolveTargetPolicy: () => WorkerError.make({ operation: \"start\", reason: \"unavailable\" }),\n start: () => WorkerError.make({ operation: \"start\", reason: \"unavailable\" }),\n followUp: () => WorkerError.make({ operation: \"followUp\", reason: \"unavailable\" }),\n inspect: () => WorkerError.make({ operation: \"inspect\", reason: \"unavailable\" }),\n summary: () => WorkerError.make({ operation: \"inspect\", reason: \"unavailable\" }),\n observe: () => Stream.fail(WorkerError.make({ operation: \"observe\", reason: \"unavailable\" })),\n await: () => WorkerError.make({ operation: \"await\", reason: \"unavailable\" }),\n list: () => WorkerError.make({ operation: \"list\", reason: \"unavailable\" }),\n stop: () => WorkerError.make({ operation: \"stop\", reason: \"unavailable\" }),\n cancel: () => WorkerError.make({ operation: \"cancel\", reason: \"unavailable\" }),\n };\n\n /** Runtime-owned per-call binding. Unconfigured Runs deny background operations. */\n static readonly forTool = Context.Reference<\n (source: Extract<WorkerSource, { readonly _tag: \"tool\" }>) => SubagentHost[\"Service\"]\n >(\"@effect-agent/engine/SubagentHost/forTool\", {\n defaultValue: () => () => SubagentHost.unavailable,\n });\n}\n"],"mappings":";;;;;;;;;;AAkIA,IAAa,iCAAb,cAAoD,OAAO,YAA4C,CAAC,CACtG,kCACA,EAAE,OAAO,OAAO,SAAS;CAAC;CAAc;CAAS;AAAa,CAAC,EAAE,CACnE,CAAC,CAAC,CAAC;;AAwBH,MAAa,sBAAsB,QAAQ,UAEzC,4CAA4C,EAAE,oBAAoB,KAAA,EAAU,CAAC;;;;;;AAO/E,IAAa,eAAb,MAAa,qBAAqB,QAAQ,QAmDxC,CAAC,CAAC,mCAAmC,CAAC,CAAC;CACvC,OAAgB,cAAuC;EACrD,SAAS,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EACzE,2BAA2B,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EACzF,aAAa,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EAC3E,gBAAgB,YAAY,KAAK;GAAE,WAAW;GAAY,QAAQ;EAAc,CAAC;EACjF,eAAe,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EAC/E,eAAe,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC;EAC/E,eAAe,OAAO,KAAK,YAAY,KAAK;GAAE,WAAW;GAAW,QAAQ;EAAc,CAAC,CAAC;EAC5F,aAAa,YAAY,KAAK;GAAE,WAAW;GAAS,QAAQ;EAAc,CAAC;EAC3E,YAAY,YAAY,KAAK;GAAE,WAAW;GAAQ,QAAQ;EAAc,CAAC;EACzE,YAAY,YAAY,KAAK;GAAE,WAAW;GAAQ,QAAQ;EAAc,CAAC;EACzE,cAAc,YAAY,KAAK;GAAE,WAAW;GAAU,QAAQ;EAAc,CAAC;CAC/E;;CAGA,OAAgB,UAAU,QAAQ,UAEhC,6CAA6C,EAC7C,0BAA0B,aAAa,YACzC,CAAC;AACH"}