effect-agent 0.1.0-beta.131 → 0.1.0-beta.133
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.
- package/dist/{Admin-C34cVKlT.d.mts → Admin-CUja0lmO.d.mts} +21 -3
- package/dist/{DurableAgentRuntime-BydyN_n-.mjs → DurableAgentRuntime-DH2baLGe.mjs} +13 -21
- package/dist/DurableAgentRuntime-DH2baLGe.mjs.map +1 -0
- package/dist/{EventSource-Bac0SxKL.d.mts → EventSource-DoiZF3xv.d.mts} +2 -2
- package/dist/{PreparedInputAdmission-DcQGQ0Yp.d.mts → PreparedInputAdmission-B1bzyIuV.d.mts} +3 -3
- package/dist/{Subscription-Bk2Smmqc.d.mts → Subscription-m_yNfNeN.d.mts} +2 -2
- package/dist/{SubscriptionInput-ekbJz3pF.d.mts → SubscriptionInput-ON3-b8Sl.d.mts} +2 -2
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +1 -1
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/MessageDelivery.d.mts +41 -41
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +1 -1
- package/dist/durable/PersistentHistory.d.mts +1 -1
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/Scheduling.d.mts +1 -1
- package/dist/durable/SqlStorageV2Upgrade.d.mts +1 -1
- package/dist/durable/SqlSubscriptionStore.d.mts +1 -1
- package/dist/durable/SqlThreadNativeReads.d.mts +2 -1
- package/dist/durable/SqlThreadNativeReads.mjs +75 -38
- package/dist/durable/SqlThreadNativeReads.mjs.map +1 -1
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionTools.d.mts +2 -2
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/Subscriptions.d.mts +5 -5
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadInvariants.d.mts +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadStore.d.mts +2 -2
- package/dist/durable/ThreadStore.mjs +30 -2
- package/dist/durable/ThreadStore.mjs.map +1 -1
- package/dist/durable/ThreadStoreConformance.d.mts +1 -1
- package/dist/durable/ThreadStoreConformance.mjs +34 -3
- package/dist/durable/ThreadStoreConformance.mjs.map +1 -1
- package/dist/durable/WorkerHost.d.mts +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/src/durable/SqlThreadNativeReads.ts +75 -2
- package/src/durable/ThreadStore.ts +63 -1
- package/src/durable/ThreadStoreConformance.ts +113 -1
- package/src/durable/internal/agent-updates.ts +4 -0
- package/src/durable/internal/worker-host.ts +17 -18
- package/dist/DurableAgentRuntime-BydyN_n-.mjs.map +0 -1
|
@@ -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 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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"}
|
|
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 { subagentLineageRecordId, workerOriginRecordId } from \"./RunJournal.ts\";\nimport {\n type AppendResult,\n AppendConflict,\n CheckpointRejected,\n ThreadCheckpoint,\n ThreadExportRequest,\n ThreadMaterialization,\n ThreadIdentityRequest,\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 const emptyIdentity = yield* store.readIdentity(ThreadIdentityRequest.make({ threadId }));\n\n yield* ensure(\n emptyIdentity.tailSequence === ZERO_SEQUENCE &&\n emptyIdentity.tailDigest === EMPTY_TAIL_DIGEST &&\n emptyIdentity.producerEpoch === EPOCH_ONE &&\n emptyIdentity.records.length === 0,\n \"A materialized empty identity remains distinct from a missing Thread\",\n );\n\n const first = yield* append(\n threadId,\n batch(\"inspect-batch-1\", [record(workerOriginRecordId(threadId), \"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 // Regression: https://github.com/danieljvdm/effect-agent/commit/6a4f4f870\n const identity = yield* store.readIdentity(ThreadIdentityRequest.make({ threadId }));\n\n yield* ensure(\n identity.threadId === threadId &&\n identity.tailSequence === first.lastSequence &&\n identity.tailDigest === first.tailDigest &&\n identity.producerEpoch === EPOCH_ONE &&\n identity.records.length === 1 &&\n identity.records[0]?.record.recordId === workerOriginRecordId(threadId),\n \"Identity captures the canonical tail and deduplicates a first record at the origin locator\",\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 const staleIdentity = yield* expectFailure(\n \"appending from an identity snapshot after a tail advance\",\n append(\n threadId,\n batch(\"inspect-stale-identity\", [record(\"inspect-record-3\", \"third\")]),\n { lastSequence: identity.tailSequence, tailDigest: identity.tailDigest },\n identity.producerEpoch,\n ),\n );\n\n yield* ensure(\n isAppendConflict(staleIdentity) && staleIdentity.reason === \"tail\",\n \"Identity reads do not bypass the canonical append tail fence\",\n );\n const beforeTakeover = yield* store.readIdentity(ThreadIdentityRequest.make({ threadId }));\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 const fencedIdentity = yield* expectFailure(\n \"appending from an identity snapshot after an epoch-only takeover\",\n append(\n threadId,\n batch(\"inspect-stale-epoch\", [record(\"inspect-record-3\", \"third\")]),\n { lastSequence: beforeTakeover.tailSequence, tailDigest: beforeTakeover.tailDigest },\n beforeTakeover.producerEpoch,\n ),\n );\n\n yield* ensure(\n isFenceRejected(fencedIdentity),\n \"An epoch-only takeover rejects the identity snapshot's captured producer fence\",\n );\n\n const afterTakeoverIdentity = yield* store.readIdentity(\n ThreadIdentityRequest.make({ threadId }),\n );\n\n const retried = yield* append(\n threadId,\n batch(\"inspect-retry-identity\", [record(\"inspect-record-3\", \"third\")]),\n {\n lastSequence: afterTakeoverIdentity.tailSequence,\n tailDigest: afterTakeoverIdentity.tailDigest,\n },\n afterTakeoverIdentity.producerEpoch,\n );\n\n yield* ensure(\n afterTakeoverIdentity.producerEpoch === EPOCH_TWO &&\n afterTakeoverIdentity.tailSequence === resumed.lastSequence &&\n afterTakeoverIdentity.records.length === 1 &&\n retried.lastSequence === resumed.lastSequence + 1,\n \"Rereading identity after takeover retains the bounded facts and permits the current producer\",\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 yield* expectFailure(\n \"reading the identity of an unmaterialized Thread\",\n store.readIdentity(ThreadIdentityRequest.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 // Regression: https://github.com/danieljvdm/effect-agent/commit/6a4f4f870\n // Payloads do not select identity: the exact lineage locator precedes the\n // exact origin locator in the log, while replies retain first/origin/lineage order.\n tail = yield* append(\n threadId,\n batch(\"identity-lineage\", [record(subagentLineageRecordId(threadId), \"lineage\")]),\n tail,\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 tail = yield* append(\n threadId,\n batch(\"identity-origin\", [record(workerOriginRecordId(threadId), \"origin\")]),\n tail,\n );\n const identity = yield* store.readIdentity(ThreadIdentityRequest.make({ threadId }));\n\n yield* ensure(\n identity.threadId === threadId &&\n identity.tailSequence === tail.lastSequence &&\n identity.tailDigest === tail.tailDigest &&\n identity.producerEpoch === EPOCH_ONE &&\n identity.records.length === 3 &&\n identity.records.map(({ record }) => record.recordId).join() ===\n [\n \"requested\",\n workerOriginRecordId(threadId),\n subagentLineageRecordId(threadId),\n ].join() &&\n identity.records.every(\n (entry) => entry.threadId === threadId && entry.sequence <= identity.tailSequence,\n ),\n \"Identity selects the exact canonical locators in semantic order beyond the recovery horizon\",\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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"}
|
|
@@ -5,7 +5,7 @@ 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
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-
|
|
8
|
+
import { Cn as SubmissionSnapshot } from "../Admin-CUja0lmO.mjs";
|
|
9
9
|
import { Context, Effect, Option, Schema } from "effect";
|
|
10
10
|
declare namespace WorkerHost_d_exports {
|
|
11
11
|
export { WorkerBudgetAuthorizer, WorkerConcurrencyLimit, WorkerConcurrencyResolver, WorkerHostAuthorizationRequest, WorkerHostAuthorizer, WorkerHostConfig, WorkerHostLimits, WorkerPolicyResolver, WorkerPolicySource, WorkerPolicyTarget };
|
package/dist/index.d.mts
CHANGED
|
@@ -59,17 +59,17 @@ import { t as Memory_d_exports } from "./core/Memory.mjs";
|
|
|
59
59
|
import { N as Records_d_exports } from "./Records-B5GFWCpn.mjs";
|
|
60
60
|
import { t as ActivityStore_d_exports } from "./durable/ActivityStore.mjs";
|
|
61
61
|
import { n as Digest_d_exports } from "./Digest-U69rDHuO.mjs";
|
|
62
|
-
import { J as Recovery_d_exports, Xn as DurableAgentRuntime_d_exports,
|
|
62
|
+
import { J as Recovery_d_exports, Xn as DurableAgentRuntime_d_exports, ba as AgentRegistration_d_exports, bi as RunJournal_d_exports, hi as SubmissionStatus_d_exports, ii as ThreadStore_d_exports, t as Admin_d_exports, yn as SubmissionLedger_d_exports } from "./Admin-CUja0lmO.mjs";
|
|
63
63
|
import { t as DurableFailpoint_d_exports } from "./DurableFailpoint-Cnr3wx1L.mjs";
|
|
64
64
|
import { a as OperationAuthorizer_d_exports } from "./OperationAuthorizer-TzcQtpX5.mjs";
|
|
65
65
|
import { l as ToolReconciler_d_exports } from "./ToolReconciler-BmVRAHKs.mjs";
|
|
66
66
|
import { n as WakeScheduler_d_exports } from "./WakeScheduler-EjUF-GhC.mjs";
|
|
67
67
|
import { t as CommittedActivity_d_exports } from "./durable/CommittedActivity.mjs";
|
|
68
68
|
import { R as Schedule_d_exports } from "./Schedule-CtYREFnz.mjs";
|
|
69
|
-
import { k as Subscription_d_exports } from "./Subscription-
|
|
70
|
-
import { n as EventSource_d_exports } from "./EventSource-
|
|
71
|
-
import { n as PreparedInputAdmission_d_exports } from "./PreparedInputAdmission-
|
|
72
|
-
import { r as SubscriptionInput_d_exports } from "./SubscriptionInput-
|
|
69
|
+
import { k as Subscription_d_exports } from "./Subscription-m_yNfNeN.mjs";
|
|
70
|
+
import { n as EventSource_d_exports } from "./EventSource-DoiZF3xv.mjs";
|
|
71
|
+
import { n as PreparedInputAdmission_d_exports } from "./PreparedInputAdmission-B1bzyIuV.mjs";
|
|
72
|
+
import { r as SubscriptionInput_d_exports } from "./SubscriptionInput-ON3-b8Sl.mjs";
|
|
73
73
|
import { t as Subscriptions_d_exports } from "./durable/Subscriptions.mjs";
|
|
74
74
|
import { t as MessageDelivery_d_exports } from "./durable/MessageDelivery.mjs";
|
|
75
75
|
import { t as PersistentHistory_d_exports } from "./durable/PersistentHistory.mjs";
|
package/dist/index.mjs
CHANGED
|
@@ -68,7 +68,7 @@ import { t as Recovery_exports } from "./durable/Recovery.mjs";
|
|
|
68
68
|
import { t as Admin_exports } from "./durable/Admin.mjs";
|
|
69
69
|
import { t as Digest_exports } from "./durable/Digest.mjs";
|
|
70
70
|
import { t as AgentRegistration_exports } from "./durable/AgentRegistration.mjs";
|
|
71
|
-
import { r as DurableAgentRuntime_exports } from "./DurableAgentRuntime-
|
|
71
|
+
import { r as DurableAgentRuntime_exports } from "./DurableAgentRuntime-DH2baLGe.mjs";
|
|
72
72
|
import { n as RunJournal_exports } from "./RunJournal-BXrq0VIK.mjs";
|
|
73
73
|
import { t as ThreadStore_exports } from "./durable/ThreadStore.mjs";
|
|
74
74
|
import { t as CommittedActivity_exports } from "./durable/CommittedActivity.mjs";
|
|
@@ -77,12 +77,12 @@ import { t as Schedule_exports } from "./durable/Schedule.mjs";
|
|
|
77
77
|
import { t as PreparedInputAdmission_exports } from "./durable/PreparedInputAdmission.mjs";
|
|
78
78
|
import { t as Subscription_exports } from "./durable/Subscription.mjs";
|
|
79
79
|
import { t as MessageDelivery_exports } from "./durable/MessageDelivery.mjs";
|
|
80
|
+
import { t as WakeScheduler_exports } from "./durable/WakeScheduler.mjs";
|
|
80
81
|
import { t as WorkerHost_exports } from "./durable/WorkerHost.mjs";
|
|
81
82
|
import { t as OperationAuthorizer_exports } from "./durable/OperationAuthorizer.mjs";
|
|
82
83
|
import { t as SubmissionStatus_exports } from "./durable/SubmissionStatus.mjs";
|
|
83
84
|
import { t as ThreadInvariants_exports } from "./durable/ThreadInvariants.mjs";
|
|
84
85
|
import { t as ToolReconciler_exports } from "./durable/ToolReconciler.mjs";
|
|
85
|
-
import { t as WakeScheduler_exports } from "./durable/WakeScheduler.mjs";
|
|
86
86
|
import { t as EventSource_exports } from "./durable/EventSource.mjs";
|
|
87
87
|
import { t as PersistentHistory_exports } from "./durable/PersistentHistory.mjs";
|
|
88
88
|
import { t as ScheduleTransition_exports } from "./durable/ScheduleTransition.mjs";
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"effect-agent","version":"0.1.0-beta.131","devDependencies":{"@effect/platform-node":"4.0.0-rc.116","@effect/vitest":"4.0.0-rc.116","effect":"4.0.0-rc.116","typescript":"7.0.2","vite-plus":"0.3.2"},"peerDependencies":{"effect":"^4.0.0-rc.116"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-thread-native-reads":{"types":"./dist/durable/SqlThreadNativeReads.d.mts","default":"./dist/durable/SqlThreadNativeReads.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./sql-message-delivery-store":{"types":"./dist/durable/SqlMessageDeliveryStore.d.mts","default":"./dist/durable/SqlMessageDeliveryStore.mjs"},"./sql-storage-v2-upgrade":{"types":"./dist/durable/SqlStorageV2Upgrade.d.mts","default":"./dist/durable/SqlStorageV2Upgrade.mjs"},"./sql-subscription-store":{"types":"./dist/durable/SqlSubscriptionStore.d.mts","default":"./dist/durable/SqlSubscriptionStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
|
|
1
|
+
{"name":"effect-agent","version":"0.1.0-beta.133","devDependencies":{"@effect/platform-node":"4.0.0-rc.116","@effect/vitest":"4.0.0-rc.116","effect":"4.0.0-rc.116","typescript":"7.0.2","vite-plus":"0.3.2"},"peerDependencies":{"effect":"^4.0.0-rc.116"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-thread-native-reads":{"types":"./dist/durable/SqlThreadNativeReads.d.mts","default":"./dist/durable/SqlThreadNativeReads.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./sql-message-delivery-store":{"types":"./dist/durable/SqlMessageDeliveryStore.d.mts","default":"./dist/durable/SqlMessageDeliveryStore.mjs"},"./sql-storage-v2-upgrade":{"types":"./dist/durable/SqlStorageV2Upgrade.d.mts","default":"./dist/durable/SqlStorageV2Upgrade.mjs"},"./sql-subscription-store":{"types":"./dist/durable/SqlSubscriptionStore.d.mts","default":"./dist/durable/SqlSubscriptionStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
|
|
@@ -6,13 +6,16 @@ import {
|
|
|
6
6
|
CanonicalRecordEnvelope,
|
|
7
7
|
CanonicalSequence,
|
|
8
8
|
Digest,
|
|
9
|
+
ProducerEpoch,
|
|
9
10
|
RecordId,
|
|
10
11
|
} from "./Records.ts";
|
|
11
|
-
import { runIdForSubmission } from "./RunJournal.ts";
|
|
12
|
+
import { runIdForSubmission, subagentLineageRecordId, workerOriginRecordId } from "./RunJournal.ts";
|
|
12
13
|
import type { ThreadStore } from "./ThreadStore.ts";
|
|
13
14
|
import {
|
|
14
15
|
SelectedThreadRead,
|
|
15
16
|
ThreadPeerCountRequest,
|
|
17
|
+
ThreadIdentity,
|
|
18
|
+
ThreadIdentityRequest,
|
|
16
19
|
ThreadNotMaterialized,
|
|
17
20
|
ThreadStoreError,
|
|
18
21
|
} from "./ThreadStore.ts";
|
|
@@ -248,6 +251,76 @@ export const makeSelectedReads = Effect.fnUntraced(function* (
|
|
|
248
251
|
),
|
|
249
252
|
);
|
|
250
253
|
|
|
254
|
+
const readIdentity: ThreadStore["Service"]["readIdentity"] = Effect.fnUntraced(
|
|
255
|
+
function* (request) {
|
|
256
|
+
yield* Schema.decodeEffect(Schema.toType(ThreadIdentityRequest))(request);
|
|
257
|
+
|
|
258
|
+
return yield* sql.withTransaction(
|
|
259
|
+
Effect.gen(function* () {
|
|
260
|
+
const tails = yield* sql`SELECT tail_sequence, tail_digest, producer_epoch
|
|
261
|
+
FROM effect_agent_threads WHERE thread_id = ${request.threadId}`;
|
|
262
|
+
|
|
263
|
+
if (tails.length === 0)
|
|
264
|
+
return yield* ThreadNotMaterialized.make({ threadId: request.threadId });
|
|
265
|
+
|
|
266
|
+
const decoded = yield* Schema.decodeUnknownEffect(
|
|
267
|
+
Schema.Array(
|
|
268
|
+
Schema.Struct({
|
|
269
|
+
tail_sequence: CanonicalSequence,
|
|
270
|
+
tail_digest: Digest,
|
|
271
|
+
producer_epoch: ProducerEpoch,
|
|
272
|
+
}),
|
|
273
|
+
),
|
|
274
|
+
)(tails);
|
|
275
|
+
|
|
276
|
+
const tail = decoded[0];
|
|
277
|
+
|
|
278
|
+
if (decoded.length !== 1 || tail === undefined) return yield* failure("identity tail");
|
|
279
|
+
const origin = workerOriginRecordId(request.threadId);
|
|
280
|
+
const lineage = subagentLineageRecordId(request.threadId);
|
|
281
|
+
|
|
282
|
+
const rows =
|
|
283
|
+
yield* sql`SELECT thread_id, sequence, record_id, batch_id, record_json FROM (
|
|
284
|
+
SELECT thread_id, sequence, record_id, batch_id, record_json, 0 AS identity_order
|
|
285
|
+
FROM effect_agent_canonical_records WHERE thread_id = ${request.threadId} AND sequence = 1
|
|
286
|
+
UNION ALL
|
|
287
|
+
SELECT thread_id, sequence, record_id, batch_id, record_json, 1 AS identity_order
|
|
288
|
+
FROM effect_agent_canonical_records WHERE thread_id = ${request.threadId} AND record_id = ${origin} AND sequence <> 1
|
|
289
|
+
UNION ALL
|
|
290
|
+
SELECT thread_id, sequence, record_id, batch_id, record_json, 2 AS identity_order
|
|
291
|
+
FROM effect_agent_canonical_records WHERE thread_id = ${request.threadId} AND record_id = ${lineage} AND sequence <> 1
|
|
292
|
+
) ORDER BY identity_order`;
|
|
293
|
+
|
|
294
|
+
const records = yield* Schema.decodeUnknownEffect(Schema.Array(Row))(rows).pipe(
|
|
295
|
+
Effect.flatMap(
|
|
296
|
+
Effect.forEach((row) =>
|
|
297
|
+
envelope(row).pipe(
|
|
298
|
+
Effect.filterOrFail(
|
|
299
|
+
(value) => value.record.recordId === row.record_id,
|
|
300
|
+
() => failure("identity record locator"),
|
|
301
|
+
),
|
|
302
|
+
),
|
|
303
|
+
),
|
|
304
|
+
),
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
return yield* ThreadIdentity.makeEffect({
|
|
308
|
+
threadId: request.threadId,
|
|
309
|
+
tailSequence: tail.tail_sequence,
|
|
310
|
+
tailDigest: tail.tail_digest,
|
|
311
|
+
producerEpoch: tail.producer_epoch,
|
|
312
|
+
records,
|
|
313
|
+
});
|
|
314
|
+
}),
|
|
315
|
+
);
|
|
316
|
+
},
|
|
317
|
+
Effect.mapError((cause) =>
|
|
318
|
+
cause._tag === "ThreadNotMaterialized" || cause._tag === "ThreadStoreError"
|
|
319
|
+
? cause
|
|
320
|
+
: failure("readIdentity", cause),
|
|
321
|
+
),
|
|
322
|
+
);
|
|
323
|
+
|
|
251
324
|
const countPeerMessages: NonNullable<ThreadStore["Service"]["countPeerMessages"]> =
|
|
252
325
|
Effect.fnUntraced(
|
|
253
326
|
function* (request) {
|
|
@@ -266,5 +339,5 @@ export const makeSelectedReads = Effect.fnUntraced(function* (
|
|
|
266
339
|
),
|
|
267
340
|
);
|
|
268
341
|
|
|
269
|
-
return { read, countPeerMessages };
|
|
342
|
+
return { read, countPeerMessages, readIdentity };
|
|
270
343
|
});
|