@yielded/agent-storage-memory 0.1.0-beta.169 → 0.1.0-beta.171

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.
@@ -1,4 +1,4 @@
1
- import { t as MemoryThreadStoreKernel } from "./MemoryThreadStoreKernel-DYNDjlhO.mjs";
1
+ import { t as MemoryThreadStoreKernel } from "./MemoryThreadStoreKernel-h_k2t46J.mjs";
2
2
  import { Layer } from "effect";
3
3
  import { MessageDeliveryError, MessageDeliveryStore, MessageDeliveryStoreLimits } from "@yielded/agent/message-delivery";
4
4
  declare namespace MemoryMessageDeliveryStore_d_exports {
@@ -3,7 +3,7 @@ import { n as MemoryThreadStoreKernel, t as boundedWorkSelection } from "./WorkS
3
3
  import { ScheduleInstant } from "@yielded/agent/schedule";
4
4
  import { Effect, Layer, MutableRef, Ref, Schema } from "effect";
5
5
  import { ThreadId } from "@yielded/agent/identifiers";
6
- import { MessageDeliveryChange, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryKey, MessageDeliveryPageRequest, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, messageDeliveryKeyString, messageDeliveryUsesCapacity, sameMessageDeliveryIdentity, validateMessageDelivery } from "@yielded/agent/message-delivery";
6
+ import { MessageDeliveryChange, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryKey, MessageDeliveryPageRequest, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, messageDeliveryKeyString, messageDeliveryUsesCapacity, peerMessageRetentionDeadline, sameMessageDeliveryIdentity, validateMessageDelivery } from "@yielded/agent/message-delivery";
7
7
  import { validateCanonicalSettlement } from "@yielded/agent/settlement-publisher";
8
8
  import { Settlement, settlementFailureFromRecord, submissionSettlementId, submissionSettlementRecordId } from "@yielded/agent/submission-ledger";
9
9
  import { PreparedInput } from "@yielded/agent/subscription";
@@ -51,11 +51,23 @@ const removeKey = (keys, key) => {
51
51
  const at = position(keys, key);
52
52
  if (keys[at] === key) keys.splice(at, 1);
53
53
  };
54
+ /** First deadline after the request time; retained evidence also supports clock rollback. */
55
+ const deadlinePosition = (deadlines, nowMillis) => {
56
+ let low = 0;
57
+ let high = deadlines.length;
58
+ while (low < high) {
59
+ const mid = Math.floor((low + high) / 2);
60
+ if (deadlines[mid] <= nowMillis) low = mid + 1;
61
+ else high = mid;
62
+ }
63
+ return low;
64
+ };
54
65
  const backend = () => ({
55
66
  records: /* @__PURE__ */ new Map(),
56
67
  work: /* @__PURE__ */ new Map(),
57
68
  ordered: /* @__PURE__ */ new Map(),
58
69
  pending: /* @__PURE__ */ new Map(),
70
+ retainedPeers: /* @__PURE__ */ new Map(),
59
71
  counts: /* @__PURE__ */ new Map(),
60
72
  metadata: /* @__PURE__ */ new Map(),
61
73
  deadlines: /* @__PURE__ */ new Map(),
@@ -142,6 +154,15 @@ const memoryMessageDeliveryStoreLayer = (limits = defaultMessageDeliveryStoreLim
142
154
  else counts.ordinary++;
143
155
  if (peer) counts.peer++;
144
156
  }
157
+ const retentionDeadline = peerMessageRetentionDeadline(record);
158
+ const previousDeadline = old?.peerRetentionDeadline ?? null;
159
+ if (previousDeadline !== retentionDeadline) {
160
+ let retained = current.retainedPeers.get(owner);
161
+ if (retained === void 0) current.retainedPeers.set(owner, retained = []);
162
+ if (previousDeadline !== null) retained.splice(deadlinePosition(retained, previousDeadline) - 1, 1);
163
+ if (retentionDeadline !== null) retained.splice(deadlinePosition(retained, retentionDeadline), 0, retentionDeadline);
164
+ if (retained.length === 0) current.retainedPeers.delete(owner);
165
+ }
145
166
  let owned = current.pending.get(owner);
146
167
  if (owned === void 0) current.pending.set(owner, owned = /* @__PURE__ */ new Set());
147
168
  if (pending) owned.add(record.key.messageId);
@@ -181,6 +202,7 @@ const memoryMessageDeliveryStoreLayer = (limits = defaultMessageDeliveryStoreLim
181
202
  update,
182
203
  pending,
183
204
  peer,
205
+ peerRetentionDeadline: retentionDeadline,
184
206
  ...deadlineKey === void 0 ? {} : { deadlineKey }
185
207
  });
186
208
  if (pending) current.work.set(key, {
@@ -311,7 +333,11 @@ const memoryMessageDeliveryStoreLayer = (limits = defaultMessageDeliveryStoreLim
311
333
  deliveries: counts?.retained ?? 0
312
334
  };
313
335
  },
314
- pendingPeerCount: (threadId, limit) => Math.min(MutableRef.get(state.ref).counts.get(threadId)?.peer ?? 0, limit),
336
+ peerCount: (threadId, nowMillis, limit) => {
337
+ const current = MutableRef.get(state.ref);
338
+ const retained = current.retainedPeers.get(threadId) ?? [];
339
+ return Math.min((current.counts.get(threadId)?.peer ?? 0) + retained.length - deadlinePosition(retained, nowMillis), limit);
340
+ },
315
341
  facts: Effect.fnUntraced(function* (threadId, after) {
316
342
  const current = MutableRef.get(state.ref);
317
343
  const keys = current.ordered.get(ownerKey(threadId)) ?? [];
@@ -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 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\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 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 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 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 ...(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 pendingPeerCount: (threadId, limit) =>\n Math.min(MutableRef.get(state.ref).counts.get(threadId)?.peer ?? 0, limit),\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: (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,4 +1,4 @@
1
- import { t as MemoryThreadStoreKernel } from "./MemoryThreadStoreKernel-DYNDjlhO.mjs";
1
+ import { t as MemoryThreadStoreKernel } from "./MemoryThreadStoreKernel-h_k2t46J.mjs";
2
2
  import { Crypto, Effect, Layer, Option } from "effect";
3
3
  import { SettlementPublisher } from "@yielded/agent/settlement-publisher";
4
4
  import { SubmissionLedger } from "@yielded/agent/submission-ledger";