@yielded/agent-storage-memory 0.1.0-beta.173 → 0.1.0-beta.175

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.
@@ -104,7 +104,7 @@ const memoryMessageDeliveryStoreLayer = (limits = defaultMessageDeliveryStoreLim
104
104
  ...afterThreadId === void 0 ? {} : { afterThreadId }
105
105
  };
106
106
  })),
107
- page: (threadId, after, limit) => Effect.gen(function* () {
107
+ page: Effect.fnUntraced(function* (threadId, after, limit) {
108
108
  const current = yield* Ref.get(state);
109
109
  const candidates = boundedWorkSelection(limit + 1, (id) => id, after);
110
110
  for (const id of current.pending.get(threadId) ?? []) candidates.add(id);
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryMessageDeliveryStore.mjs","names":[],"sources":["../src/MemoryMessageDeliveryStore.ts"],"sourcesContent":["import { ThreadId } from \"@yielded/agent/identifiers\";\nimport {\n applyMessageDeliveryChange,\n defaultMessageDeliveryStoreLimits,\n MessageDeliveryChange,\n MessageDeliveryError,\n MessageDeliveryFailpoint,\n MessageDeliveryKey,\n MessageDeliveryPageRequest,\n MessageDeliveryRecord,\n MessageDeliveryStore,\n MessageDeliveryStoreLimits,\n messageDeliveryDeadline,\n messageDeliveryKeyString,\n messageDeliveryUsesCapacity,\n peerMessageRetentionDeadline,\n isWorkerUpdateDelivery,\n messageDeliveryCapacity,\n sameMessageDeliveryIdentity,\n validateMessageDelivery,\n} from \"@yielded/agent/message-delivery\";\nimport { ScheduleInstant } from \"@yielded/agent/schedule\";\nimport { validateCanonicalSettlement } from \"@yielded/agent/settlement-publisher\";\nimport {\n Settlement,\n settlementFailureFromRecord,\n submissionSettlementRecordId,\n submissionSettlementId,\n} from \"@yielded/agent/submission-ledger\";\nimport { PreparedInput } from \"@yielded/agent/subscription\";\nimport {\n ThreadDeliveryImportReader,\n ThreadImportRejected,\n invalidThreadArchive,\n} from \"@yielded/agent/thread-import\";\nimport { ThreadStoreError, makeTransferFactCheck } from \"@yielded/agent/thread-store\";\nimport { workId, type ThreadWorkEntry } from \"@yielded/agent/thread-work\";\nimport { Effect, Layer, MutableRef, Ref, Schema } from \"effect\";\n\nimport { MemoryThreadStoreKernel } from \"./internal/MemoryThreadStoreKernel.ts\";\nimport { boundedWorkSelection } from \"./internal/WorkSelection.ts\";\n\nconst codec = Schema.fromJsonString(MessageDeliveryRecord);\nconst deliveryFitsTransfer = makeTransferFactCheck(MessageDeliveryRecord);\n\nconst checkTransfer = (record: MessageDeliveryRecord) =>\n deliveryFitsTransfer(record.key.ownerThreadId, { ...record, leaseUntilMillis: null })\n ? Effect.void\n : Effect.fail(\n MessageDeliveryError.make({ reason: \"capacity\", operation: \"transfer-page-bytes\" }),\n );\n\nconst decode = (text: string) =>\n Schema.decodeEffect(codec)(text).pipe(\n Effect.mapError(() => MessageDeliveryError.make({ reason: \"corrupt\", operation: \"decode\" })),\n );\n\nconst Scan = Schema.Struct({\n nowMillis: ScheduleInstant,\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n ownerThreadId: Schema.optionalKey(ThreadId),\n});\n\nconst position = (keys: ReadonlyArray<string>, key: string) => {\n let low = 0;\n let high = keys.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n\n if (keys[mid] < key) low = mid + 1;\n else high = mid;\n }\n\n return low;\n};\n\nconst retainKey = (keys: Array<string>, key: string) => {\n const at = position(keys, key);\n\n if (keys[at] !== key) keys.splice(at, 0, key);\n};\n\nconst removeKey = (keys: Array<string>, key: string) => {\n const at = position(keys, key);\n\n if (keys[at] === key) keys.splice(at, 1);\n};\n\n/** First deadline after the request time; retained evidence also supports clock rollback. */\nconst deadlinePosition = (deadlines: ReadonlyArray<number>, nowMillis: number) => {\n let low = 0;\n let high = deadlines.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n\n if (deadlines[mid] <= nowMillis) low = mid + 1;\n else high = mid;\n }\n\n return low;\n};\n\nconst backend = () => ({\n records: new Map<string, string>(),\n work: new Map<string, ThreadWorkEntry>(),\n ordered: new Map<string, Array<string>>(),\n pending: new Map<ThreadId, Set<MessageDeliveryKey[\"messageId\"]>>(),\n retainedPeers: new Map<ThreadId, Array<number>>(),\n counts: new Map<ThreadId, { retained: number; ordinary: number; update: number; peer: number }>(),\n metadata: new Map<\n string,\n {\n update: boolean;\n pending: boolean;\n peer: boolean;\n peerRetentionDeadline: number | null;\n deadlineKey?: string;\n importVisit?: \"visiting\" | \"verified\";\n }\n >(),\n deadlines: new Map<string, { readonly key: MessageDeliveryKey; readonly deadline: number }>(),\n deadlineKeys: new Array<string>(),\n ownerDeadlineKeys: new Map<ThreadId, Array<string>>(),\n});\n\nconst ownerKey = (id: ThreadId) => JSON.stringify([id]);\n\nconst keysFor = (current: ReturnType<typeof backend>, key: string) => {\n let keys = current.ordered.get(key);\n\n if (keys === undefined) current.ordered.set(key, (keys = []));\n\n return keys;\n};\n\nexport interface MemoryMessageDeliveryStoreOptions {\n /** UTF-8 bound on the complete stored record, including a processed Settlement. */\n readonly maxStoredValueBytes?: number;\n}\n\n/**\n * Pair with MemoryThreadStoreLive so export/import sees every retained delivery obligation.\n * Each retained value and live partition is bounded; completed deduplication evidence is never evicted.\n */\nexport const memoryMessageDeliveryStoreLayer = (\n limits: MessageDeliveryStoreLimits = defaultMessageDeliveryStoreLimits,\n options: MemoryMessageDeliveryStoreOptions = {},\n): Layer.Layer<MessageDeliveryStore, MessageDeliveryError, MemoryThreadStoreKernel> =>\n Layer.effect(\n MessageDeliveryStore,\n Effect.gen(function* () {\n const journal = yield* MemoryThreadStoreKernel;\n const config = yield* validateMessageDelivery(MessageDeliveryStoreLimits, limits, \"limits\");\n\n const maxStoredValueBytes = yield* validateMessageDelivery(\n Schema.Int.check(Schema.isGreaterThan(0)),\n options.maxStoredValueBytes ?? 16 * 1_024 * 1_024,\n \"stored-value-limit\",\n );\n\n const state = yield* Ref.make(backend());\n\n yield* journal.registerDeliveryLookup((threadId, messageId) =>\n MutableRef.get(state.ref).records.has(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n ),\n );\n yield* journal.registerWorkOwner(\"deliveries\", {\n threads: (request) =>\n Ref.get(state).pipe(\n Effect.map((current) => {\n const candidates = boundedWorkSelection<ThreadId>(\n request.limit,\n (id) => id,\n request.afterThreadId,\n );\n\n for (const threadId of current.pending.keys()) candidates.add(threadId);\n const threadIds = candidates.values;\n\n const afterThreadId =\n threadIds.length === request.limit ? threadIds.at(-1) : undefined;\n\n return {\n threadIds,\n ...(afterThreadId === undefined ? {} : { afterThreadId }),\n };\n }),\n ),\n page: (threadId, after, limit) =>\n Effect.gen(function* () {\n const current = yield* Ref.get(state);\n\n const candidates = boundedWorkSelection<MessageDeliveryKey[\"messageId\"]>(\n limit + 1,\n (id) => id,\n after,\n );\n\n for (const id of current.pending.get(threadId) ?? []) candidates.add(id);\n const ids = candidates.values;\n\n const entries: Array<ThreadWorkEntry> = [];\n\n for (const messageId of ids.slice(0, limit)) {\n const key = messageDeliveryKeyString({ ownerThreadId: threadId, messageId });\n const entry = current.work.get(key);\n\n if (entry === undefined || !current.records.has(key))\n return yield* ThreadStoreError.make({\n operation: \"delivery work\",\n message: \"Pending delivery index is incomplete or corrupt\",\n });\n entries.push(entry);\n }\n const next = ids.length > limit ? ids[limit - 1] : undefined;\n\n return { entries, ...(next === undefined ? {} : { after: next }) };\n }),\n });\n\n const commitInto = (\n current: ReturnType<typeof backend>,\n record: MessageDeliveryRecord,\n encoded: string,\n publish: boolean,\n ) => {\n const key = messageDeliveryKeyString(record.key);\n const owner = record.key.ownerThreadId;\n const old = current.metadata.get(key);\n const update = isWorkerUpdateDelivery(record);\n const pending = messageDeliveryUsesCapacity(record);\n\n const peer =\n record.envelope.messageAdmission !== undefined &&\n \"peerName\" in record.envelope.messageAdmission;\n\n let counts = current.counts.get(owner);\n\n if (counts === undefined)\n current.counts.set(owner, (counts = { retained: 0, ordinary: 0, update: 0, peer: 0 }));\n if (old === undefined) counts.retained++;\n if (old?.pending) {\n if (old.update) counts.update--;\n else counts.ordinary--;\n if (old.peer) counts.peer--;\n }\n if (pending) {\n if (update) counts.update++;\n else counts.ordinary++;\n if (peer) counts.peer++;\n }\n const retentionDeadline = peerMessageRetentionDeadline(record);\n const previousDeadline = old?.peerRetentionDeadline ?? null;\n\n if (previousDeadline !== retentionDeadline) {\n let retained = current.retainedPeers.get(owner);\n\n if (retained === undefined) current.retainedPeers.set(owner, (retained = []));\n if (previousDeadline !== null)\n retained.splice(deadlinePosition(retained, previousDeadline) - 1, 1);\n if (retentionDeadline !== null)\n retained.splice(deadlinePosition(retained, retentionDeadline), 0, retentionDeadline);\n if (retained.length === 0) current.retainedPeers.delete(owner);\n }\n let owned = current.pending.get(owner);\n\n if (owned === undefined) current.pending.set(owner, (owned = new Set()));\n if (pending) owned.add(record.key.messageId);\n else owned.delete(record.key.messageId);\n if (owned.size === 0) current.pending.delete(owner);\n retainKey(keysFor(current, ownerKey(owner)), record.key.messageId);\n const admission = record.envelope.workerAdmission;\n\n if (admission !== undefined) {\n const worker = admission.origin.worker;\n\n if (record.key.messageId === admission.origin.firstMessageId)\n retainKey(\n keysFor(current, JSON.stringify([owner, worker.delegationId, worker.targetAgentId])),\n record.key.messageId,\n );\n const inputs = keysFor(current, JSON.stringify([owner, worker.threadId]));\n\n if (\n (record.status === \"pending\" || record.status === \"parked\") &&\n record.receipt === null\n )\n retainKey(inputs, record.key.messageId);\n else removeKey(inputs, record.key.messageId);\n }\n const deadline = messageDeliveryDeadline(record);\n let ownerDeadlines = current.ownerDeadlineKeys.get(owner);\n\n if (ownerDeadlines === undefined)\n current.ownerDeadlineKeys.set(owner, (ownerDeadlines = []));\n if (old?.deadlineKey !== undefined) {\n current.deadlines.delete(old.deadlineKey);\n removeKey(current.deadlineKeys, old.deadlineKey);\n removeKey(ownerDeadlines, old.deadlineKey);\n }\n\n const deadlineKey =\n deadline === null ? undefined : `${String(deadline).padStart(16, \"0\")}:${key}`;\n\n if (deadlineKey !== undefined && deadline !== null) {\n current.deadlines.set(deadlineKey, { key: record.key, deadline });\n retainKey(current.deadlineKeys, deadlineKey);\n retainKey(ownerDeadlines, deadlineKey);\n }\n current.metadata.set(key, {\n update,\n pending,\n peer,\n peerRetentionDeadline: retentionDeadline,\n ...(deadlineKey === undefined ? {} : { deadlineKey }),\n });\n if (pending)\n current.work.set(key, {\n id: workId(\"delivery\", record.key.messageId),\n owner: { _tag: \"Delivery\", messageId: record.key.messageId },\n partition: update ? \"update\" : \"ordinary\",\n stateReference: {\n _tag: \"Delivery\",\n messageId: record.key.messageId,\n version: record.version,\n },\n state: record.status === \"pending\" ? \"ready\" : \"waiting\",\n ...(record.status === \"parked\"\n ? { wait: \"parked\" as const }\n : record.receipt !== null\n ? { wait: \"destination\" as const }\n : {}),\n ...(deadline === null ? {} : { notBeforeMillis: deadline }),\n ...(record.receipt === null\n ? {}\n : {\n receiptId: record.receipt.receiptId,\n queueSequence: record.receipt.queueSequence,\n }),\n });\n else current.work.delete(key);\n current.records.set(key, encoded);\n if (publish) {\n journal.initializeWork(owner);\n journal.retainDelivery(owner, record.key.messageId);\n }\n };\n\n const commit = (record: MessageDeliveryRecord, encoded: string) =>\n Effect.sync(() => commitInto(MutableRef.get(state.ref), record, encoded, true));\n\n const failpoint = yield* MessageDeliveryFailpoint;\n\n const encode = Effect.fnUntraced(function* (record: MessageDeliveryRecord) {\n const text = yield* Schema.encodeEffect(codec)(record).pipe(\n Effect.mapError(() =>\n MessageDeliveryError.make({ reason: \"corrupt\", operation: \"encode\" }),\n ),\n );\n\n if (new TextEncoder().encode(text).byteLength > maxStoredValueBytes) {\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"stored-value-bytes\",\n });\n }\n\n return text;\n });\n\n const insert: MessageDeliveryStore[\"Service\"][\"insert\"] = Effect.fnUntraced(\n function* (record) {\n const encoded = yield* encode(record);\n const input = yield* decode(encoded);\n\n if (\n input.version !== 1 ||\n input.status !== \"pending\" ||\n input.leaseUntilMillis !== null ||\n input.retry.attempts !== 0 ||\n input.retry.generation !== 0 ||\n input.retry.automaticAttempts !== 0 ||\n input.retry.nextAttemptAtMillis !== input.createdAtMillis ||\n input.retry.lastAttemptAtMillis !== null ||\n input.retry.lastFailure !== null ||\n input.deadlineAtMillis !== input.initialDeadlineAtMillis\n ) {\n return yield* MessageDeliveryError.make({\n reason: \"validation\",\n operation: \"insert-state\",\n });\n }\n if (\n new TextEncoder().encode(JSON.stringify(input.envelope)).byteLength >\n config.maxEnvelopeBytes\n ) {\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"envelope-bytes\",\n });\n }\n yield* failpoint.hit(\"message-delivery:insert:before\");\n\n const inserted = yield* journal.withMutation(\n Effect.uninterruptible(\n Effect.gen(function* () {\n yield* journal.checkThreadCapacity(input.key.ownerThreadId).pipe(\n Effect.mapError(() =>\n MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"Thread capacity\",\n }),\n ),\n );\n const { records } = yield* Ref.get(state);\n const key = messageDeliveryKeyString(input.key);\n const existingText = records.get(key);\n\n if (existingText !== undefined) {\n const existing = yield* decode(existingText);\n\n if (!sameMessageDeliveryIdentity(existing, input))\n return yield* MessageDeliveryError.make({\n reason: \"conflict\",\n operation: \"insert\",\n });\n\n journal.retainDelivery(existing.key.ownerThreadId, existing.key.messageId);\n\n return existing;\n }\n\n yield* checkTransfer(input);\n const update = isWorkerUpdateDelivery(input);\n const counts = MutableRef.get(state.ref).counts.get(input.key.ownerThreadId);\n const capacity = messageDeliveryCapacity(config, update);\n\n if ((update ? (counts?.update ?? 0) : (counts?.ordinary ?? 0)) >= capacity.pending)\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"insert\",\n });\n yield* commit(input, encoded);\n\n return input;\n }),\n ),\n );\n\n yield* failpoint.hit(\"message-delivery:insert:after\");\n\n return yield* decode(yield* encode(inserted));\n },\n );\n\n const get: MessageDeliveryStore[\"Service\"][\"get\"] = Effect.fnUntraced(function* (key) {\n const input = yield* validateMessageDelivery(MessageDeliveryKey, key, \"get\");\n const text = (yield* Ref.get(state)).records.get(messageDeliveryKeyString(input));\n\n return text === undefined ? null : yield* decode(text);\n });\n\n const change: MessageDeliveryStore[\"Service\"][\"change\"] = Effect.fnUntraced(\n function* (key, change) {\n const input = yield* validateMessageDelivery(MessageDeliveryChange, change, \"change\");\n const decodedKey = yield* validateMessageDelivery(MessageDeliveryKey, key, \"change\");\n const point = `message-delivery:${input._tag.toLowerCase()}`;\n\n yield* failpoint.hit(`${point}:before`);\n\n const changed = yield* journal.withMutation(\n Effect.uninterruptible(\n Effect.gen(function* () {\n const existing = yield* get(decodedKey);\n\n if (existing === null)\n return yield* MessageDeliveryError.make({\n reason: \"not-found\",\n operation: \"change\",\n });\n const next = yield* Effect.fromResult(applyMessageDeliveryChange(existing, input));\n\n if (next === existing) return existing;\n yield* checkTransfer(next);\n const encoded = yield* encode(next);\n\n yield* commit(next, encoded);\n\n return next;\n }),\n ),\n );\n\n yield* failpoint.hit(`${point}:after`);\n\n return yield* decode(yield* encode(changed));\n },\n );\n\n const transferDecode = (text: string) =>\n decode(text).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"delivery transfer\",\n message: \"Invalid retained delivery wire\",\n }),\n ),\n );\n\n yield* journal.registerDeliveryTransfer({\n record: (threadId, messageId) => {\n const text = MutableRef.get(state.ref).records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined ? Effect.succeed(undefined) : transferDecode(text);\n },\n snapshot: (threadId) => {\n const counts = MutableRef.get(state.ref).counts.get(threadId);\n\n return {\n idle: (MutableRef.get(state.ref).pending.get(threadId)?.size ?? 0) === 0,\n deliveries: counts?.retained ?? 0,\n };\n },\n peerCount: (threadId, nowMillis, limit) => {\n const current = MutableRef.get(state.ref);\n const retained = current.retainedPeers.get(threadId) ?? [];\n\n return Math.min(\n (current.counts.get(threadId)?.peer ?? 0) +\n retained.length -\n deadlinePosition(retained, nowMillis),\n limit,\n );\n },\n facts: Effect.fnUntraced(function* (threadId, after) {\n const current = MutableRef.get(state.ref);\n const keys = current.ordered.get(ownerKey(threadId)) ?? [];\n\n const at =\n after === undefined\n ? 0\n : position(keys, after) + Number(keys[position(keys, after)] === after);\n\n const messageId = keys[at];\n\n const record =\n messageId === undefined\n ? undefined\n : yield* transferDecode(\n current.records.get(\n messageDeliveryKeyString({\n ownerThreadId: threadId,\n messageId: Schema.decodeSync(MessageDeliveryKey.fields.messageId)(messageId),\n }),\n ) ?? \"\",\n );\n\n return {\n facts: {\n admissions: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n deliveries:\n record === undefined\n ? []\n : [MessageDeliveryRecord.make({ ...record, leaseUntilMillis: null })],\n },\n after: messageId ?? after ?? \"\",\n };\n }),\n startImport: Effect.fnUntraced(function* (threadId) {\n const current = MutableRef.get(state.ref);\n\n if ((current.counts.get(threadId)?.retained ?? 0) > 0)\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"target-not-empty\",\n message: \"Destination Thread owns retained deliveries\",\n });\n const staged = backend();\n\n return {\n record: (messageId) => {\n const text = staged.records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined ? Effect.succeed(undefined) : transferDecode(text);\n },\n has: (messageId) =>\n staged.records.has(messageDeliveryKeyString({ ownerThreadId: threadId, messageId })),\n stage: Effect.fnUntraced(function* (page) {\n for (const record of page.archive.deliveries) {\n const key = messageDeliveryKeyString(record.key);\n\n if (staged.records.has(key) || current.records.has(key))\n return yield* invalidThreadArchive(\"Duplicate retained delivery\", threadId);\n\n const text = yield* encode(record).pipe(\n Effect.mapError(() =>\n ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Delivery wire exceeds destination stored-value bound\",\n }),\n ),\n );\n\n if (\n new TextEncoder().encode(\n JSON.stringify(\n yield* Schema.encodeEffect(PreparedInput)(record.envelope).pipe(\n Effect.mapError(() =>\n invalidThreadArchive(\"Invalid delivery envelope\", threadId),\n ),\n ),\n ),\n ).byteLength > config.maxEnvelopeBytes\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Delivery envelope exceeds destination bound\",\n });\n const counts = staged.counts.get(threadId);\n\n if (\n messageDeliveryUsesCapacity(record) &&\n (isWorkerUpdateDelivery(record)\n ? (counts?.update ?? 0)\n : (counts?.ordinary ?? 0)) >=\n messageDeliveryCapacity(config, isWorkerUpdateDelivery(record)).pending\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Pending delivery capacity exceeded\",\n });\n commitInto(staged, record, text, false);\n }\n }),\n prepareCommit: Effect.fnUntraced(function* () {\n const reader = yield* ThreadDeliveryImportReader;\n\n const read = (messageId: MessageDeliveryKey[\"messageId\"]) => {\n const text = staged.records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined\n ? Effect.fail(invalidThreadArchive(\"Missing delivery predecessor\", threadId))\n : transferDecode(text);\n };\n\n const visit = (messageId: MessageDeliveryKey[\"messageId\"]) => {\n const metadata = staged.metadata.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return metadata === undefined\n ? Effect.fail(\n invalidThreadArchive(\"Missing delivery predecessor metadata\", threadId),\n )\n : Effect.succeed(metadata);\n };\n\n const verifyPredecessors = Effect.fnUntraced(function* (\n start: MessageDeliveryKey[\"messageId\"],\n ) {\n let cursor: MessageDeliveryKey[\"messageId\"] | undefined = start;\n\n while (cursor !== undefined) {\n const metadata = yield* visit(cursor);\n\n if (metadata.importVisit === \"verified\") break;\n if (metadata.importVisit === \"visiting\")\n return yield* invalidThreadArchive(\"Delivery predecessor cycle\", threadId);\n metadata.importVisit = \"visiting\";\n const record: MessageDeliveryRecord = yield* read(cursor);\n\n if (\n record.predecessor !== undefined &&\n (yield* read(record.predecessor)).createdAtMillis > record.createdAtMillis\n )\n return yield* invalidThreadArchive(\n \"Delivery predecessor has a later boundary\",\n threadId,\n );\n cursor = record.predecessor;\n }\n cursor = start;\n while (cursor !== undefined) {\n const metadata = yield* visit(cursor);\n\n if (metadata.importVisit === \"verified\") break;\n metadata.importVisit = \"verified\";\n cursor = (yield* read(cursor)).predecessor;\n }\n });\n\n for (const text of staged.records.values()) {\n const d = yield* transferDecode(text);\n\n yield* verifyPredecessors(d.key.messageId);\n if (d.receipt !== null) {\n if (\n d.settlement !== null &&\n d.settlement.settlementId !== submissionSettlementId(d.receipt.submissionId)\n )\n return yield* invalidThreadArchive(\n \"Delivery settlement identity is not canonical\",\n threadId,\n );\n const foreign = d.receipt.threadId !== threadId;\n\n if (foreign && d.status !== \"processed\")\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-obligations\",\n message: \"Live foreign delivery receipt cannot be restored\",\n });\n\n const destination = yield* reader.admission(\n d.receipt.threadId,\n d.receipt.submissionId,\n );\n\n // A closed foreign delivery retains frozen evidence, not the receiver's execution authority.\n if (destination === undefined) {\n if (foreign && d.status === \"processed\") continue;\n\n return yield* invalidThreadArchive(\n \"Destination delivery receipt evidence is missing\",\n threadId,\n );\n }\n\n const expected = PreparedInput.make({\n schemaVersion: 1,\n authorization: d.envelope.authorization,\n threadId: destination.threadId,\n deliveryPrincipal: destination.principal,\n admissionKey: destination.idempotencyKey,\n agentId: destination.agentId,\n definitions: destination.agentDigests,\n input: destination.inputPayload,\n inputDigest: destination.inputDigest,\n ...(destination.admissionGroup === undefined\n ? {}\n : { admissionGroup: destination.admissionGroup }),\n ...(destination.admissionFence === undefined\n ? {}\n : { admissionFence: destination.admissionFence }),\n ...(destination.workerAdmission === undefined\n ? {}\n : { workerAdmission: destination.workerAdmission }),\n ...(destination.messageAdmission === undefined\n ? {}\n : { messageAdmission: destination.messageAdmission }),\n });\n\n if (\n d.receipt.receiptId !== destination.receiptId ||\n d.receipt.queueSequence !== destination.queueSequence ||\n !Schema.toEquivalence(PreparedInput)(d.envelope, expected)\n )\n return yield* invalidThreadArchive(\n \"Delivery envelope differs from destination admission\",\n threadId,\n );\n if (d.settlement !== null) {\n const record = yield* reader.record(\n destination.threadId,\n submissionSettlementRecordId(destination.submissionId),\n );\n\n if (record === undefined) {\n if (foreign) continue;\n\n return yield* invalidThreadArchive(\n \"Processed delivery has no destination settlement\",\n threadId,\n );\n }\n\n const settled = yield* validateCanonicalSettlement(record, destination).pipe(\n Effect.mapError(() =>\n invalidThreadArchive(\"Invalid destination settlement\", threadId),\n ),\n );\n\n const failure = settlementFailureFromRecord(record);\n\n const expected = Settlement.make({\n submissionId: settled.submissionId,\n receiptId: settled.receiptId,\n settlementId: settled.settlementId,\n outcome: settled.outcome,\n settledAt: d.settlement.settledAt,\n ...(failure === undefined ? {} : { failure }),\n ...(d.settlement.runDisposition === undefined ||\n settled.runDisposition === undefined\n ? {}\n : { runDisposition: settled.runDisposition }),\n ...(d.settlement.usageSummary === undefined ||\n settled.usageSummary === undefined\n ? {}\n : { usageSummary: settled.usageSummary }),\n });\n\n if (!Schema.toEquivalence(Settlement)(d.settlement, expected))\n return yield* invalidThreadArchive(\n \"Delivery settlement differs from destination evidence\",\n threadId,\n );\n }\n }\n }\n\n return () => {\n for (const text of staged.records.values())\n commitInto(current, Schema.decodeSync(codec)(text), text, true);\n };\n }),\n };\n }),\n });\n\n return MessageDeliveryStore.of({\n limits: config,\n maxStoredValueBytes,\n insert,\n get,\n change,\n list: Effect.fnUntraced(function* (request) {\n const input = yield* validateMessageDelivery(MessageDeliveryPageRequest, request, \"list\");\n\n const current = yield* Ref.get(state);\n\n const workerKey =\n input.workerStarts !== undefined\n ? JSON.stringify([\n input.ownerThreadId,\n input.workerStarts.delegationId,\n input.workerStarts.targetAgentId,\n ])\n : input.pendingWorker !== undefined\n ? JSON.stringify([input.ownerThreadId, input.pendingWorker])\n : undefined;\n\n const keys =\n workerKey === undefined\n ? input.pendingOnly\n ? Array.from(current.pending.get(input.ownerThreadId) ?? []).sort()\n : (current.ordered.get(ownerKey(input.ownerThreadId)) ?? [])\n : (current.ordered.get(workerKey) ?? []);\n\n const start =\n input.after === undefined\n ? 0\n : position(keys, input.after) +\n Number(keys[position(keys, input.after)] === input.after);\n\n const items: Array<MessageDeliveryRecord> = [];\n let bytes = 0;\n let at = start;\n\n while (at < keys.length && items.length < input.limit) {\n const text = current.records.get(\n messageDeliveryKeyString({\n ownerThreadId: input.ownerThreadId,\n messageId: Schema.decodeSync(MessageDeliveryKey.fields.messageId)(keys[at]),\n }),\n );\n\n if (text === undefined)\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"list locator\",\n });\n const size = new TextEncoder().encode(text).byteLength;\n\n if (size > 32 * 1024 * 1024)\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"list byte bound\",\n });\n if (bytes + size > 32 * 1024 * 1024) break;\n items.push(yield* decode(text));\n bytes += size;\n at++;\n }\n\n return {\n items,\n next: at < keys.length ? (items.at(-1)?.key.messageId ?? null) : null,\n };\n }),\n due: Effect.fnUntraced(function* (nowMillis, limit, ownerThreadId) {\n const input = yield* validateMessageDelivery(\n Scan,\n { nowMillis, limit, ...(ownerThreadId === undefined ? {} : { ownerThreadId }) },\n \"due\",\n );\n\n const current = MutableRef.get(state.ref);\n\n const keys =\n input.ownerThreadId === undefined\n ? current.deadlineKeys\n : (current.ownerDeadlineKeys.get(input.ownerThreadId) ?? []);\n\n const selected: Array<MessageDeliveryKey> = [];\n\n for (const key of keys) {\n const row = current.deadlines.get(key);\n\n if (row === undefined)\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"deadline index\",\n });\n if (row.deadline > input.nowMillis || selected.length === input.limit) break;\n selected.push(row.key);\n }\n\n return selected;\n }),\n nextDeadline: Effect.fnUntraced(function* (ownerThreadId) {\n if (ownerThreadId !== undefined)\n yield* validateMessageDelivery(ThreadId, ownerThreadId, \"nextDeadline\");\n const current = MutableRef.get(state.ref);\n\n const first = (\n ownerThreadId === undefined\n ? current.deadlineKeys\n : current.ownerDeadlineKeys.get(ownerThreadId)\n )?.[0];\n\n return first === undefined ? null : (current.deadlines.get(first)?.deadline ?? null);\n }),\n });\n }),\n );\n\nexport const MemoryMessageDeliveryStoreLive = memoryMessageDeliveryStoreLayer();\n"],"mappings":"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"}
1
+ {"version":3,"file":"MemoryMessageDeliveryStore.mjs","names":[],"sources":["../src/MemoryMessageDeliveryStore.ts"],"sourcesContent":["import { ThreadId } from \"@yielded/agent/identifiers\";\nimport {\n applyMessageDeliveryChange,\n defaultMessageDeliveryStoreLimits,\n MessageDeliveryChange,\n MessageDeliveryError,\n MessageDeliveryFailpoint,\n MessageDeliveryKey,\n MessageDeliveryPageRequest,\n MessageDeliveryRecord,\n MessageDeliveryStore,\n MessageDeliveryStoreLimits,\n messageDeliveryDeadline,\n messageDeliveryKeyString,\n messageDeliveryUsesCapacity,\n peerMessageRetentionDeadline,\n isWorkerUpdateDelivery,\n messageDeliveryCapacity,\n sameMessageDeliveryIdentity,\n validateMessageDelivery,\n} from \"@yielded/agent/message-delivery\";\nimport { ScheduleInstant } from \"@yielded/agent/schedule\";\nimport { validateCanonicalSettlement } from \"@yielded/agent/settlement-publisher\";\nimport {\n Settlement,\n settlementFailureFromRecord,\n submissionSettlementRecordId,\n submissionSettlementId,\n} from \"@yielded/agent/submission-ledger\";\nimport { PreparedInput } from \"@yielded/agent/subscription\";\nimport {\n ThreadDeliveryImportReader,\n ThreadImportRejected,\n invalidThreadArchive,\n} from \"@yielded/agent/thread-import\";\nimport { ThreadStoreError, makeTransferFactCheck } from \"@yielded/agent/thread-store\";\nimport { workId, type ThreadWorkEntry } from \"@yielded/agent/thread-work\";\nimport { Effect, Layer, MutableRef, Ref, Schema } from \"effect\";\n\nimport { MemoryThreadStoreKernel } from \"./internal/MemoryThreadStoreKernel.ts\";\nimport { boundedWorkSelection } from \"./internal/WorkSelection.ts\";\n\nconst codec = Schema.fromJsonString(MessageDeliveryRecord);\nconst deliveryFitsTransfer = makeTransferFactCheck(MessageDeliveryRecord);\n\nconst checkTransfer = (record: MessageDeliveryRecord) =>\n deliveryFitsTransfer(record.key.ownerThreadId, { ...record, leaseUntilMillis: null })\n ? Effect.void\n : Effect.fail(\n MessageDeliveryError.make({ reason: \"capacity\", operation: \"transfer-page-bytes\" }),\n );\n\nconst decode = (text: string) =>\n Schema.decodeEffect(codec)(text).pipe(\n Effect.mapError(() => MessageDeliveryError.make({ reason: \"corrupt\", operation: \"decode\" })),\n );\n\nconst Scan = Schema.Struct({\n nowMillis: ScheduleInstant,\n limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n ownerThreadId: Schema.optionalKey(ThreadId),\n});\n\nconst position = (keys: ReadonlyArray<string>, key: string) => {\n let low = 0;\n let high = keys.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n\n if (keys[mid] < key) low = mid + 1;\n else high = mid;\n }\n\n return low;\n};\n\nconst retainKey = (keys: Array<string>, key: string) => {\n const at = position(keys, key);\n\n if (keys[at] !== key) keys.splice(at, 0, key);\n};\n\nconst removeKey = (keys: Array<string>, key: string) => {\n const at = position(keys, key);\n\n if (keys[at] === key) keys.splice(at, 1);\n};\n\n/** First deadline after the request time; retained evidence also supports clock rollback. */\nconst deadlinePosition = (deadlines: ReadonlyArray<number>, nowMillis: number) => {\n let low = 0;\n let high = deadlines.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n\n if (deadlines[mid] <= nowMillis) low = mid + 1;\n else high = mid;\n }\n\n return low;\n};\n\nconst backend = () => ({\n records: new Map<string, string>(),\n work: new Map<string, ThreadWorkEntry>(),\n ordered: new Map<string, Array<string>>(),\n pending: new Map<ThreadId, Set<MessageDeliveryKey[\"messageId\"]>>(),\n retainedPeers: new Map<ThreadId, Array<number>>(),\n counts: new Map<ThreadId, { retained: number; ordinary: number; update: number; peer: number }>(),\n metadata: new Map<\n string,\n {\n update: boolean;\n pending: boolean;\n peer: boolean;\n peerRetentionDeadline: number | null;\n deadlineKey?: string;\n importVisit?: \"visiting\" | \"verified\";\n }\n >(),\n deadlines: new Map<string, { readonly key: MessageDeliveryKey; readonly deadline: number }>(),\n deadlineKeys: new Array<string>(),\n ownerDeadlineKeys: new Map<ThreadId, Array<string>>(),\n});\n\nconst ownerKey = (id: ThreadId) => JSON.stringify([id]);\n\nconst keysFor = (current: ReturnType<typeof backend>, key: string) => {\n let keys = current.ordered.get(key);\n\n if (keys === undefined) current.ordered.set(key, (keys = []));\n\n return keys;\n};\n\nexport interface MemoryMessageDeliveryStoreOptions {\n /** UTF-8 bound on the complete stored record, including a processed Settlement. */\n readonly maxStoredValueBytes?: number;\n}\n\n/**\n * Pair with MemoryThreadStoreLive so export/import sees every retained delivery obligation.\n * Each retained value and live partition is bounded; completed deduplication evidence is never evicted.\n */\nexport const memoryMessageDeliveryStoreLayer = (\n limits: MessageDeliveryStoreLimits = defaultMessageDeliveryStoreLimits,\n options: MemoryMessageDeliveryStoreOptions = {},\n): Layer.Layer<MessageDeliveryStore, MessageDeliveryError, MemoryThreadStoreKernel> =>\n Layer.effect(\n MessageDeliveryStore,\n Effect.gen(function* () {\n const journal = yield* MemoryThreadStoreKernel;\n const config = yield* validateMessageDelivery(MessageDeliveryStoreLimits, limits, \"limits\");\n\n const maxStoredValueBytes = yield* validateMessageDelivery(\n Schema.Int.check(Schema.isGreaterThan(0)),\n options.maxStoredValueBytes ?? 16 * 1_024 * 1_024,\n \"stored-value-limit\",\n );\n\n const state = yield* Ref.make(backend());\n\n yield* journal.registerDeliveryLookup((threadId, messageId) =>\n MutableRef.get(state.ref).records.has(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n ),\n );\n yield* journal.registerWorkOwner(\"deliveries\", {\n threads: (request) =>\n Ref.get(state).pipe(\n Effect.map((current) => {\n const candidates = boundedWorkSelection<ThreadId>(\n request.limit,\n (id) => id,\n request.afterThreadId,\n );\n\n for (const threadId of current.pending.keys()) candidates.add(threadId);\n const threadIds = candidates.values;\n\n const afterThreadId =\n threadIds.length === request.limit ? threadIds.at(-1) : undefined;\n\n return {\n threadIds,\n ...(afterThreadId === undefined ? {} : { afterThreadId }),\n };\n }),\n ),\n page: Effect.fnUntraced(function* (threadId, after, limit) {\n const current = yield* Ref.get(state);\n\n const candidates = boundedWorkSelection<MessageDeliveryKey[\"messageId\"]>(\n limit + 1,\n (id) => id,\n after,\n );\n\n for (const id of current.pending.get(threadId) ?? []) candidates.add(id);\n const ids = candidates.values;\n\n const entries: Array<ThreadWorkEntry> = [];\n\n for (const messageId of ids.slice(0, limit)) {\n const key = messageDeliveryKeyString({ ownerThreadId: threadId, messageId });\n const entry = current.work.get(key);\n\n if (entry === undefined || !current.records.has(key))\n return yield* ThreadStoreError.make({\n operation: \"delivery work\",\n message: \"Pending delivery index is incomplete or corrupt\",\n });\n entries.push(entry);\n }\n const next = ids.length > limit ? ids[limit - 1] : undefined;\n\n return { entries, ...(next === undefined ? {} : { after: next }) };\n }),\n });\n\n const commitInto = (\n current: ReturnType<typeof backend>,\n record: MessageDeliveryRecord,\n encoded: string,\n publish: boolean,\n ) => {\n const key = messageDeliveryKeyString(record.key);\n const owner = record.key.ownerThreadId;\n const old = current.metadata.get(key);\n const update = isWorkerUpdateDelivery(record);\n const pending = messageDeliveryUsesCapacity(record);\n\n const peer =\n record.envelope.messageAdmission !== undefined &&\n \"peerName\" in record.envelope.messageAdmission;\n\n let counts = current.counts.get(owner);\n\n if (counts === undefined)\n current.counts.set(owner, (counts = { retained: 0, ordinary: 0, update: 0, peer: 0 }));\n if (old === undefined) counts.retained++;\n if (old?.pending) {\n if (old.update) counts.update--;\n else counts.ordinary--;\n if (old.peer) counts.peer--;\n }\n if (pending) {\n if (update) counts.update++;\n else counts.ordinary++;\n if (peer) counts.peer++;\n }\n const retentionDeadline = peerMessageRetentionDeadline(record);\n const previousDeadline = old?.peerRetentionDeadline ?? null;\n\n if (previousDeadline !== retentionDeadline) {\n let retained = current.retainedPeers.get(owner);\n\n if (retained === undefined) current.retainedPeers.set(owner, (retained = []));\n if (previousDeadline !== null)\n retained.splice(deadlinePosition(retained, previousDeadline) - 1, 1);\n if (retentionDeadline !== null)\n retained.splice(deadlinePosition(retained, retentionDeadline), 0, retentionDeadline);\n if (retained.length === 0) current.retainedPeers.delete(owner);\n }\n let owned = current.pending.get(owner);\n\n if (owned === undefined) current.pending.set(owner, (owned = new Set()));\n if (pending) owned.add(record.key.messageId);\n else owned.delete(record.key.messageId);\n if (owned.size === 0) current.pending.delete(owner);\n retainKey(keysFor(current, ownerKey(owner)), record.key.messageId);\n const admission = record.envelope.workerAdmission;\n\n if (admission !== undefined) {\n const worker = admission.origin.worker;\n\n if (record.key.messageId === admission.origin.firstMessageId)\n retainKey(\n keysFor(current, JSON.stringify([owner, worker.delegationId, worker.targetAgentId])),\n record.key.messageId,\n );\n const inputs = keysFor(current, JSON.stringify([owner, worker.threadId]));\n\n if (\n (record.status === \"pending\" || record.status === \"parked\") &&\n record.receipt === null\n )\n retainKey(inputs, record.key.messageId);\n else removeKey(inputs, record.key.messageId);\n }\n const deadline = messageDeliveryDeadline(record);\n let ownerDeadlines = current.ownerDeadlineKeys.get(owner);\n\n if (ownerDeadlines === undefined)\n current.ownerDeadlineKeys.set(owner, (ownerDeadlines = []));\n if (old?.deadlineKey !== undefined) {\n current.deadlines.delete(old.deadlineKey);\n removeKey(current.deadlineKeys, old.deadlineKey);\n removeKey(ownerDeadlines, old.deadlineKey);\n }\n\n const deadlineKey =\n deadline === null ? undefined : `${String(deadline).padStart(16, \"0\")}:${key}`;\n\n if (deadlineKey !== undefined && deadline !== null) {\n current.deadlines.set(deadlineKey, { key: record.key, deadline });\n retainKey(current.deadlineKeys, deadlineKey);\n retainKey(ownerDeadlines, deadlineKey);\n }\n current.metadata.set(key, {\n update,\n pending,\n peer,\n peerRetentionDeadline: retentionDeadline,\n ...(deadlineKey === undefined ? {} : { deadlineKey }),\n });\n if (pending)\n current.work.set(key, {\n id: workId(\"delivery\", record.key.messageId),\n owner: { _tag: \"Delivery\", messageId: record.key.messageId },\n partition: update ? \"update\" : \"ordinary\",\n stateReference: {\n _tag: \"Delivery\",\n messageId: record.key.messageId,\n version: record.version,\n },\n state: record.status === \"pending\" ? \"ready\" : \"waiting\",\n ...(record.status === \"parked\"\n ? { wait: \"parked\" as const }\n : record.receipt !== null\n ? { wait: \"destination\" as const }\n : {}),\n ...(deadline === null ? {} : { notBeforeMillis: deadline }),\n ...(record.receipt === null\n ? {}\n : {\n receiptId: record.receipt.receiptId,\n queueSequence: record.receipt.queueSequence,\n }),\n });\n else current.work.delete(key);\n current.records.set(key, encoded);\n if (publish) {\n journal.initializeWork(owner);\n journal.retainDelivery(owner, record.key.messageId);\n }\n };\n\n const commit = (record: MessageDeliveryRecord, encoded: string) =>\n Effect.sync(() => commitInto(MutableRef.get(state.ref), record, encoded, true));\n\n const failpoint = yield* MessageDeliveryFailpoint;\n\n const encode = Effect.fnUntraced(function* (record: MessageDeliveryRecord) {\n const text = yield* Schema.encodeEffect(codec)(record).pipe(\n Effect.mapError(() =>\n MessageDeliveryError.make({ reason: \"corrupt\", operation: \"encode\" }),\n ),\n );\n\n if (new TextEncoder().encode(text).byteLength > maxStoredValueBytes) {\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"stored-value-bytes\",\n });\n }\n\n return text;\n });\n\n const insert: MessageDeliveryStore[\"Service\"][\"insert\"] = Effect.fnUntraced(\n function* (record) {\n const encoded = yield* encode(record);\n const input = yield* decode(encoded);\n\n if (\n input.version !== 1 ||\n input.status !== \"pending\" ||\n input.leaseUntilMillis !== null ||\n input.retry.attempts !== 0 ||\n input.retry.generation !== 0 ||\n input.retry.automaticAttempts !== 0 ||\n input.retry.nextAttemptAtMillis !== input.createdAtMillis ||\n input.retry.lastAttemptAtMillis !== null ||\n input.retry.lastFailure !== null ||\n input.deadlineAtMillis !== input.initialDeadlineAtMillis\n ) {\n return yield* MessageDeliveryError.make({\n reason: \"validation\",\n operation: \"insert-state\",\n });\n }\n if (\n new TextEncoder().encode(JSON.stringify(input.envelope)).byteLength >\n config.maxEnvelopeBytes\n ) {\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"envelope-bytes\",\n });\n }\n yield* failpoint.hit(\"message-delivery:insert:before\");\n\n const inserted = yield* journal.withMutation(\n Effect.uninterruptible(\n Effect.gen(function* () {\n yield* journal.checkThreadCapacity(input.key.ownerThreadId).pipe(\n Effect.mapError(() =>\n MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"Thread capacity\",\n }),\n ),\n );\n const { records } = yield* Ref.get(state);\n const key = messageDeliveryKeyString(input.key);\n const existingText = records.get(key);\n\n if (existingText !== undefined) {\n const existing = yield* decode(existingText);\n\n if (!sameMessageDeliveryIdentity(existing, input))\n return yield* MessageDeliveryError.make({\n reason: \"conflict\",\n operation: \"insert\",\n });\n\n journal.retainDelivery(existing.key.ownerThreadId, existing.key.messageId);\n\n return existing;\n }\n\n yield* checkTransfer(input);\n const update = isWorkerUpdateDelivery(input);\n const counts = MutableRef.get(state.ref).counts.get(input.key.ownerThreadId);\n const capacity = messageDeliveryCapacity(config, update);\n\n if ((update ? (counts?.update ?? 0) : (counts?.ordinary ?? 0)) >= capacity.pending)\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"insert\",\n });\n yield* commit(input, encoded);\n\n return input;\n }),\n ),\n );\n\n yield* failpoint.hit(\"message-delivery:insert:after\");\n\n return yield* decode(yield* encode(inserted));\n },\n );\n\n const get: MessageDeliveryStore[\"Service\"][\"get\"] = Effect.fnUntraced(function* (key) {\n const input = yield* validateMessageDelivery(MessageDeliveryKey, key, \"get\");\n const text = (yield* Ref.get(state)).records.get(messageDeliveryKeyString(input));\n\n return text === undefined ? null : yield* decode(text);\n });\n\n const change: MessageDeliveryStore[\"Service\"][\"change\"] = Effect.fnUntraced(\n function* (key, change) {\n const input = yield* validateMessageDelivery(MessageDeliveryChange, change, \"change\");\n const decodedKey = yield* validateMessageDelivery(MessageDeliveryKey, key, \"change\");\n const point = `message-delivery:${input._tag.toLowerCase()}`;\n\n yield* failpoint.hit(`${point}:before`);\n\n const changed = yield* journal.withMutation(\n Effect.uninterruptible(\n Effect.gen(function* () {\n const existing = yield* get(decodedKey);\n\n if (existing === null)\n return yield* MessageDeliveryError.make({\n reason: \"not-found\",\n operation: \"change\",\n });\n const next = yield* Effect.fromResult(applyMessageDeliveryChange(existing, input));\n\n if (next === existing) return existing;\n yield* checkTransfer(next);\n const encoded = yield* encode(next);\n\n yield* commit(next, encoded);\n\n return next;\n }),\n ),\n );\n\n yield* failpoint.hit(`${point}:after`);\n\n return yield* decode(yield* encode(changed));\n },\n );\n\n const transferDecode = (text: string) =>\n decode(text).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"delivery transfer\",\n message: \"Invalid retained delivery wire\",\n }),\n ),\n );\n\n yield* journal.registerDeliveryTransfer({\n record: (threadId, messageId) => {\n const text = MutableRef.get(state.ref).records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined ? Effect.succeed(undefined) : transferDecode(text);\n },\n snapshot: (threadId) => {\n const counts = MutableRef.get(state.ref).counts.get(threadId);\n\n return {\n idle: (MutableRef.get(state.ref).pending.get(threadId)?.size ?? 0) === 0,\n deliveries: counts?.retained ?? 0,\n };\n },\n peerCount: (threadId, nowMillis, limit) => {\n const current = MutableRef.get(state.ref);\n const retained = current.retainedPeers.get(threadId) ?? [];\n\n return Math.min(\n (current.counts.get(threadId)?.peer ?? 0) +\n retained.length -\n deadlinePosition(retained, nowMillis),\n limit,\n );\n },\n facts: Effect.fnUntraced(function* (threadId, after) {\n const current = MutableRef.get(state.ref);\n const keys = current.ordered.get(ownerKey(threadId)) ?? [];\n\n const at =\n after === undefined\n ? 0\n : position(keys, after) + Number(keys[position(keys, after)] === after);\n\n const messageId = keys[at];\n\n const record =\n messageId === undefined\n ? undefined\n : yield* transferDecode(\n current.records.get(\n messageDeliveryKeyString({\n ownerThreadId: threadId,\n messageId: Schema.decodeSync(MessageDeliveryKey.fields.messageId)(messageId),\n }),\n ) ?? \"\",\n );\n\n return {\n facts: {\n admissions: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n deliveries:\n record === undefined\n ? []\n : [MessageDeliveryRecord.make({ ...record, leaseUntilMillis: null })],\n },\n after: messageId ?? after ?? \"\",\n };\n }),\n startImport: Effect.fnUntraced(function* (threadId) {\n const current = MutableRef.get(state.ref);\n\n if ((current.counts.get(threadId)?.retained ?? 0) > 0)\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"target-not-empty\",\n message: \"Destination Thread owns retained deliveries\",\n });\n const staged = backend();\n\n return {\n record: (messageId) => {\n const text = staged.records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined ? Effect.succeed(undefined) : transferDecode(text);\n },\n has: (messageId) =>\n staged.records.has(messageDeliveryKeyString({ ownerThreadId: threadId, messageId })),\n stage: Effect.fnUntraced(function* (page) {\n for (const record of page.archive.deliveries) {\n const key = messageDeliveryKeyString(record.key);\n\n if (staged.records.has(key) || current.records.has(key))\n return yield* invalidThreadArchive(\"Duplicate retained delivery\", threadId);\n\n const text = yield* encode(record).pipe(\n Effect.mapError(() =>\n ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Delivery wire exceeds destination stored-value bound\",\n }),\n ),\n );\n\n if (\n new TextEncoder().encode(\n JSON.stringify(\n yield* Schema.encodeEffect(PreparedInput)(record.envelope).pipe(\n Effect.mapError(() =>\n invalidThreadArchive(\"Invalid delivery envelope\", threadId),\n ),\n ),\n ),\n ).byteLength > config.maxEnvelopeBytes\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Delivery envelope exceeds destination bound\",\n });\n const counts = staged.counts.get(threadId);\n\n if (\n messageDeliveryUsesCapacity(record) &&\n (isWorkerUpdateDelivery(record)\n ? (counts?.update ?? 0)\n : (counts?.ordinary ?? 0)) >=\n messageDeliveryCapacity(config, isWorkerUpdateDelivery(record)).pending\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Pending delivery capacity exceeded\",\n });\n commitInto(staged, record, text, false);\n }\n }),\n prepareCommit: Effect.fnUntraced(function* () {\n const reader = yield* ThreadDeliveryImportReader;\n\n const read = (messageId: MessageDeliveryKey[\"messageId\"]) => {\n const text = staged.records.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return text === undefined\n ? Effect.fail(invalidThreadArchive(\"Missing delivery predecessor\", threadId))\n : transferDecode(text);\n };\n\n const visit = (messageId: MessageDeliveryKey[\"messageId\"]) => {\n const metadata = staged.metadata.get(\n messageDeliveryKeyString({ ownerThreadId: threadId, messageId }),\n );\n\n return metadata === undefined\n ? Effect.fail(\n invalidThreadArchive(\"Missing delivery predecessor metadata\", threadId),\n )\n : Effect.succeed(metadata);\n };\n\n const verifyPredecessors = Effect.fnUntraced(function* (\n start: MessageDeliveryKey[\"messageId\"],\n ) {\n let cursor: MessageDeliveryKey[\"messageId\"] | undefined = start;\n\n while (cursor !== undefined) {\n const metadata = yield* visit(cursor);\n\n if (metadata.importVisit === \"verified\") break;\n if (metadata.importVisit === \"visiting\")\n return yield* invalidThreadArchive(\"Delivery predecessor cycle\", threadId);\n metadata.importVisit = \"visiting\";\n const record: MessageDeliveryRecord = yield* read(cursor);\n\n if (\n record.predecessor !== undefined &&\n (yield* read(record.predecessor)).createdAtMillis > record.createdAtMillis\n )\n return yield* invalidThreadArchive(\n \"Delivery predecessor has a later boundary\",\n threadId,\n );\n cursor = record.predecessor;\n }\n cursor = start;\n while (cursor !== undefined) {\n const metadata = yield* visit(cursor);\n\n if (metadata.importVisit === \"verified\") break;\n metadata.importVisit = \"verified\";\n cursor = (yield* read(cursor)).predecessor;\n }\n });\n\n for (const text of staged.records.values()) {\n const d = yield* transferDecode(text);\n\n yield* verifyPredecessors(d.key.messageId);\n if (d.receipt !== null) {\n if (\n d.settlement !== null &&\n d.settlement.settlementId !== submissionSettlementId(d.receipt.submissionId)\n )\n return yield* invalidThreadArchive(\n \"Delivery settlement identity is not canonical\",\n threadId,\n );\n const foreign = d.receipt.threadId !== threadId;\n\n if (foreign && d.status !== \"processed\")\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-obligations\",\n message: \"Live foreign delivery receipt cannot be restored\",\n });\n\n const destination = yield* reader.admission(\n d.receipt.threadId,\n d.receipt.submissionId,\n );\n\n // A closed foreign delivery retains frozen evidence, not the receiver's execution authority.\n if (destination === undefined) {\n if (foreign && d.status === \"processed\") continue;\n\n return yield* invalidThreadArchive(\n \"Destination delivery receipt evidence is missing\",\n threadId,\n );\n }\n\n const expected = PreparedInput.make({\n schemaVersion: 1,\n authorization: d.envelope.authorization,\n threadId: destination.threadId,\n deliveryPrincipal: destination.principal,\n admissionKey: destination.idempotencyKey,\n agentId: destination.agentId,\n definitions: destination.agentDigests,\n input: destination.inputPayload,\n inputDigest: destination.inputDigest,\n ...(destination.admissionGroup === undefined\n ? {}\n : { admissionGroup: destination.admissionGroup }),\n ...(destination.admissionFence === undefined\n ? {}\n : { admissionFence: destination.admissionFence }),\n ...(destination.workerAdmission === undefined\n ? {}\n : { workerAdmission: destination.workerAdmission }),\n ...(destination.messageAdmission === undefined\n ? {}\n : { messageAdmission: destination.messageAdmission }),\n });\n\n if (\n d.receipt.receiptId !== destination.receiptId ||\n d.receipt.queueSequence !== destination.queueSequence ||\n !Schema.toEquivalence(PreparedInput)(d.envelope, expected)\n )\n return yield* invalidThreadArchive(\n \"Delivery envelope differs from destination admission\",\n threadId,\n );\n if (d.settlement !== null) {\n const record = yield* reader.record(\n destination.threadId,\n submissionSettlementRecordId(destination.submissionId),\n );\n\n if (record === undefined) {\n if (foreign) continue;\n\n return yield* invalidThreadArchive(\n \"Processed delivery has no destination settlement\",\n threadId,\n );\n }\n\n const settled = yield* validateCanonicalSettlement(record, destination).pipe(\n Effect.mapError(() =>\n invalidThreadArchive(\"Invalid destination settlement\", threadId),\n ),\n );\n\n const failure = settlementFailureFromRecord(record);\n\n const expected = Settlement.make({\n submissionId: settled.submissionId,\n receiptId: settled.receiptId,\n settlementId: settled.settlementId,\n outcome: settled.outcome,\n settledAt: d.settlement.settledAt,\n ...(failure === undefined ? {} : { failure }),\n ...(d.settlement.runDisposition === undefined ||\n settled.runDisposition === undefined\n ? {}\n : { runDisposition: settled.runDisposition }),\n ...(d.settlement.usageSummary === undefined ||\n settled.usageSummary === undefined\n ? {}\n : { usageSummary: settled.usageSummary }),\n });\n\n if (!Schema.toEquivalence(Settlement)(d.settlement, expected))\n return yield* invalidThreadArchive(\n \"Delivery settlement differs from destination evidence\",\n threadId,\n );\n }\n }\n }\n\n return () => {\n for (const text of staged.records.values())\n commitInto(current, Schema.decodeSync(codec)(text), text, true);\n };\n }),\n };\n }),\n });\n\n return MessageDeliveryStore.of({\n limits: config,\n maxStoredValueBytes,\n insert,\n get,\n change,\n list: Effect.fnUntraced(function* (request) {\n const input = yield* validateMessageDelivery(MessageDeliveryPageRequest, request, \"list\");\n\n const current = yield* Ref.get(state);\n\n const workerKey =\n input.workerStarts !== undefined\n ? JSON.stringify([\n input.ownerThreadId,\n input.workerStarts.delegationId,\n input.workerStarts.targetAgentId,\n ])\n : input.pendingWorker !== undefined\n ? JSON.stringify([input.ownerThreadId, input.pendingWorker])\n : undefined;\n\n const keys =\n workerKey === undefined\n ? input.pendingOnly\n ? Array.from(current.pending.get(input.ownerThreadId) ?? []).sort()\n : (current.ordered.get(ownerKey(input.ownerThreadId)) ?? [])\n : (current.ordered.get(workerKey) ?? []);\n\n const start =\n input.after === undefined\n ? 0\n : position(keys, input.after) +\n Number(keys[position(keys, input.after)] === input.after);\n\n const items: Array<MessageDeliveryRecord> = [];\n let bytes = 0;\n let at = start;\n\n while (at < keys.length && items.length < input.limit) {\n const text = current.records.get(\n messageDeliveryKeyString({\n ownerThreadId: input.ownerThreadId,\n messageId: Schema.decodeSync(MessageDeliveryKey.fields.messageId)(keys[at]),\n }),\n );\n\n if (text === undefined)\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"list locator\",\n });\n const size = new TextEncoder().encode(text).byteLength;\n\n if (size > 32 * 1024 * 1024)\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"list byte bound\",\n });\n if (bytes + size > 32 * 1024 * 1024) break;\n items.push(yield* decode(text));\n bytes += size;\n at++;\n }\n\n return {\n items,\n next: at < keys.length ? (items.at(-1)?.key.messageId ?? null) : null,\n };\n }),\n due: Effect.fnUntraced(function* (nowMillis, limit, ownerThreadId) {\n const input = yield* validateMessageDelivery(\n Scan,\n { nowMillis, limit, ...(ownerThreadId === undefined ? {} : { ownerThreadId }) },\n \"due\",\n );\n\n const current = MutableRef.get(state.ref);\n\n const keys =\n input.ownerThreadId === undefined\n ? current.deadlineKeys\n : (current.ownerDeadlineKeys.get(input.ownerThreadId) ?? []);\n\n const selected: Array<MessageDeliveryKey> = [];\n\n for (const key of keys) {\n const row = current.deadlines.get(key);\n\n if (row === undefined)\n return yield* MessageDeliveryError.make({\n reason: \"corrupt\",\n operation: \"deadline index\",\n });\n if (row.deadline > input.nowMillis || selected.length === input.limit) break;\n selected.push(row.key);\n }\n\n return selected;\n }),\n nextDeadline: Effect.fnUntraced(function* (ownerThreadId) {\n if (ownerThreadId !== undefined)\n yield* validateMessageDelivery(ThreadId, ownerThreadId, \"nextDeadline\");\n const current = MutableRef.get(state.ref);\n\n const first = (\n ownerThreadId === undefined\n ? current.deadlineKeys\n : current.ownerDeadlineKeys.get(ownerThreadId)\n )?.[0];\n\n return first === undefined ? null : (current.deadlines.get(first)?.deadline ?? null);\n }),\n });\n }),\n );\n\nexport const MemoryMessageDeliveryStoreLive = memoryMessageDeliveryStoreLayer();\n"],"mappings":"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"}