effect-agent 0.1.0-beta.140 → 0.1.0-beta.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{AgentRuntime-RdmnK_aD.mjs → AgentRuntime-xeCUXutN.mjs} +10 -9
  2. package/dist/AgentRuntime-xeCUXutN.mjs.map +1 -0
  3. package/dist/{DurableAgentRuntime-BmG_UVZG.mjs → DurableAgentRuntime-DQXDcPKQ.mjs} +2 -2
  4. package/dist/{DurableAgentRuntime-BmG_UVZG.mjs.map → DurableAgentRuntime-DQXDcPKQ.mjs.map} +1 -1
  5. package/dist/{Subagent-Bnc7I-kb.mjs → Subagent-8RzJkqJ9.mjs} +2 -2
  6. package/dist/{Subagent-Bnc7I-kb.mjs.map → Subagent-8RzJkqJ9.mjs.map} +1 -1
  7. package/dist/capabilities/Subagent.mjs +1 -1
  8. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  9. package/dist/engine/AgentRuntime.mjs +1 -1
  10. package/dist/index.d.mts +1 -2
  11. package/dist/index.mjs +4 -5
  12. package/package.json +1 -1
  13. package/src/engine/internal/agent-runtime.ts +49 -19
  14. package/src/index.ts +0 -2
  15. package/dist/AgentRuntime-RdmnK_aD.mjs.map +0 -1
  16. package/dist/durable/SqlMessageDeliveryStore.d.mts +0 -42
  17. package/dist/durable/SqlMessageDeliveryStore.mjs +0 -179
  18. package/dist/durable/SqlMessageDeliveryStore.mjs.map +0 -1
  19. package/dist/durable/SqlStorageV2Upgrade.d.mts +0 -21
  20. package/dist/durable/SqlStorageV2Upgrade.mjs +0 -459
  21. package/dist/durable/SqlStorageV2Upgrade.mjs.map +0 -1
  22. package/dist/durable/SqlSubscriptionStore.d.mts +0 -62
  23. package/dist/durable/SqlSubscriptionStore.mjs +0 -751
  24. package/dist/durable/SqlSubscriptionStore.mjs.map +0 -1
  25. package/dist/durable/SqlThreadNativeReads.d.mts +0 -55
  26. package/dist/durable/SqlThreadNativeReads.mjs +0 -196
  27. package/dist/durable/SqlThreadNativeReads.mjs.map +0 -1
  28. package/src/durable/SqlMessageDeliveryStore.ts +0 -335
  29. package/src/durable/SqlStorageV2Upgrade.ts +0 -500
  30. package/src/durable/SqlSubscriptionStore.ts +0 -1440
  31. package/src/durable/SqlThreadNativeReads.ts +0 -343
  32. package/src/durable/internal/storage-v2-layout.ts +0 -163
  33. package/src/durable/internal/storage-v2.ts +0 -73
@@ -1,42 +0,0 @@
1
- import { u as ThreadId } from "../Identifiers-CN2s30fF.mjs";
2
- import { MessageDeliveryChange, MessageDeliveryError, MessageDeliveryFailure, MessageDeliveryKey, MessageDeliveryPage, MessageDeliveryPageRequest, MessageDeliveryRecord, MessageDeliveryStoreLimits } from "./MessageDelivery.mjs";
3
- import { Context, Effect } from "effect";
4
- import * as SqlClient from "effect/unstable/sql/SqlClient";
5
- import { SqlError } from "effect/unstable/sql/SqlError";
6
- //#region src/durable/SqlMessageDeliveryStore.d.ts
7
- declare const SqlMessageDeliveryTransaction_base: Context.ServiceClass<SqlMessageDeliveryTransaction, "@effect-agent/thread/SqlMessageDeliveryTransaction", {
8
- readonly run: <A>(body: Effect.Effect<A, MessageDeliveryFailure>) => Effect.Effect<A, MessageDeliveryFailure>;
9
- }>;
10
- /** The adapter owns the atomic transaction and any associated native wake/alarm update. */
11
- export declare class SqlMessageDeliveryTransaction extends SqlMessageDeliveryTransaction_base {}
12
- export interface SqlMessageDeliveryStoreOptions {
13
- /** UTF-8 bound on the complete persisted record, including a processed Settlement. */
14
- readonly maxStoredValueBytes?: number;
15
- }
16
- /**
17
- * Shared SQL implementation over the adapter-owned effect_agent_message_deliveries table.
18
- * Required columns: owner_thread_id, message_id (composite primary key), version, state,
19
- * deadline_at_millis (nullable effective wake deadline), record_json. Index non-null deadlines
20
- * by (deadline_at_millis, owner_thread_id, message_id). No source/receiver ledger joins.
21
- * Before failpoints precede the atomic transaction; after failpoints run after its commit.
22
- */
23
- export declare const makeSqlMessageDeliveryStore: (limits?: {
24
- readonly maxPendingPerOwner: number;
25
- readonly maxRetainedPerOwner: number;
26
- readonly maxEnvelopeBytes: number;
27
- readonly maxPendingUpdatesPerOwner?: number | undefined;
28
- readonly maxRetainedUpdatesPerOwner?: number | undefined;
29
- } | undefined, options?: SqlMessageDeliveryStoreOptions | undefined) => Effect.Effect<{
30
- readonly limits: MessageDeliveryStoreLimits;
31
- readonly maxStoredValueBytes: number;
32
- readonly insert: (record: MessageDeliveryRecord) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;
33
- readonly get: (key: MessageDeliveryKey) => Effect.Effect<MessageDeliveryRecord | null, MessageDeliveryError>;
34
- readonly list: (request: MessageDeliveryPageRequest) => Effect.Effect<MessageDeliveryPage, MessageDeliveryError>;
35
- readonly change: (key: MessageDeliveryKey, change: MessageDeliveryChange) => Effect.Effect<MessageDeliveryRecord, MessageDeliveryFailure>;
36
- readonly due: (nowMillis: number, limit: number, ownerThreadId?: ThreadId) => Effect.Effect<ReadonlyArray<MessageDeliveryKey>, MessageDeliveryError>;
37
- readonly nextDeadline: (ownerThreadId?: ThreadId) => Effect.Effect<number | null, MessageDeliveryError>;
38
- }, MessageDeliveryError, SqlClient.SqlClient | SqlMessageDeliveryTransaction>;
39
- /** Add the pending-only index within the adapter's format transaction. */
40
- export declare const createMessageDeliveryPendingIndex: Effect.Effect<void, SqlError, SqlClient.SqlClient>;
41
- //#endregion
42
- //# sourceMappingURL=SqlMessageDeliveryStore.d.mts.map
@@ -1,179 +0,0 @@
1
- import { ThreadId } from "../core/Identifiers.mjs";
2
- import { IdempotencyKey } from "../core/Receipt.mjs";
3
- import { ScheduleInstant } from "./Schedule.mjs";
4
- import { MessageDeliveryChange, MessageDeliveryError, MessageDeliveryFailpoint, MessageDeliveryKey, MessageDeliveryPageRequest, MessageDeliveryRecord, MessageDeliveryStore, MessageDeliveryStoreLimits, applyMessageDeliveryChange, defaultMessageDeliveryStoreLimits, isWorkerUpdateDelivery, messageDeliveryCapacity, messageDeliveryDeadline, sameMessageDeliveryIdentity, validateMessageDelivery } from "./MessageDelivery.mjs";
5
- import { Context, Effect, Schema } from "effect";
6
- import * as SqlClient from "effect/unstable/sql/SqlClient";
7
- //#region src/durable/SqlMessageDeliveryStore.ts
8
- /** The adapter owns the atomic transaction and any associated native wake/alarm update. */
9
- var SqlMessageDeliveryTransaction = class extends Context.Service()("@effect-agent/thread/SqlMessageDeliveryTransaction") {};
10
- const Row = Schema.Struct({
11
- owner_thread_id: ThreadId,
12
- message_id: IdempotencyKey,
13
- version: Schema.Int,
14
- state: Schema.String,
15
- deadline_at_millis: Schema.NullOr(ScheduleInstant),
16
- record_json: Schema.String
17
- });
18
- const Count = Schema.Struct({
19
- retained: Schema.Natural,
20
- pending: Schema.Natural
21
- });
22
- const Deadline = Schema.Struct({ deadline: Schema.NullOr(ScheduleInstant) });
23
- const Scan = Schema.Struct({
24
- nowMillis: ScheduleInstant,
25
- limit: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),
26
- ownerThreadId: Schema.optionalKey(ThreadId)
27
- });
28
- const codec = Schema.fromJsonString(MessageDeliveryRecord);
29
- const bytes = (text) => new TextEncoder().encode(text).byteLength;
30
- const storage = (operation, cause) => MessageDeliveryError.make({
31
- reason: "storage",
32
- operation,
33
- ...cause === void 0 ? {} : { cause }
34
- });
35
- const corrupt = (operation, cause) => MessageDeliveryError.make({
36
- reason: "corrupt",
37
- operation,
38
- ...cause === void 0 ? {} : { cause }
39
- });
40
- const query = (operation, effect) => effect.pipe(Effect.mapError((cause) => storage(operation, cause)));
41
- /**
42
- * Shared SQL implementation over the adapter-owned effect_agent_message_deliveries table.
43
- * Required columns: owner_thread_id, message_id (composite primary key), version, state,
44
- * deadline_at_millis (nullable effective wake deadline), record_json. Index non-null deadlines
45
- * by (deadline_at_millis, owner_thread_id, message_id). No source/receiver ledger joins.
46
- * Before failpoints precede the atomic transaction; after failpoints run after its commit.
47
- */
48
- const makeSqlMessageDeliveryStore = Effect.fn("SqlMessageDeliveryStore.make")(function* (limits = defaultMessageDeliveryStoreLimits, options = {}) {
49
- const config = yield* validateMessageDelivery(MessageDeliveryStoreLimits, limits, "limits");
50
- const maxStoredValueBytes = yield* validateMessageDelivery(Schema.Int.check(Schema.isGreaterThan(0)), options.maxStoredValueBytes ?? 16777216, "stored-value-limit");
51
- const sql = yield* SqlClient.SqlClient;
52
- const transaction = yield* SqlMessageDeliveryTransaction;
53
- const failpoint = yield* MessageDeliveryFailpoint;
54
- const encode = Effect.fn("SqlMessageDeliveryStore.encode")(function* (record) {
55
- const text = yield* Schema.encodeEffect(codec)(record).pipe(Effect.mapError((cause) => corrupt("encode", cause)));
56
- if (bytes(text) > maxStoredValueBytes) return yield* MessageDeliveryError.make({
57
- reason: "capacity",
58
- operation: "stored-value-bytes"
59
- });
60
- return text;
61
- });
62
- const decode = Effect.fn("SqlMessageDeliveryStore.decode")(function* (row) {
63
- if (bytes(row.record_json) > maxStoredValueBytes) return yield* corrupt("stored-value-bytes");
64
- const record = yield* Schema.decodeEffect(codec)(row.record_json).pipe(Effect.mapError((cause) => corrupt("decode", cause)));
65
- if (record.key.ownerThreadId !== row.owner_thread_id || record.key.messageId !== row.message_id || record.version !== row.version || record.status !== row.state || messageDeliveryDeadline(record) !== row.deadline_at_millis) return yield* corrupt("row-metadata");
66
- return record;
67
- });
68
- const decodeRows = (rows) => Schema.decodeUnknownEffect(Schema.Array(Row))(rows).pipe(Effect.mapError((cause) => corrupt("rows", cause)), Effect.flatMap((rows) => Effect.forEach(rows, decode)));
69
- const get = Effect.fn("SqlMessageDeliveryStore.get")(function* (key) {
70
- const input = yield* validateMessageDelivery(MessageDeliveryKey, key, "get");
71
- const rows = yield* query("get", sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.ownerThreadId} AND message_id = ${input.messageId}`);
72
- return (yield* decodeRows(rows))[0] ?? null;
73
- });
74
- const insert = Effect.fn("SqlMessageDeliveryStore.insert")(function* (record) {
75
- const text = yield* encode(record);
76
- const input = yield* Schema.decodeEffect(codec)(text).pipe(Effect.mapError((cause) => corrupt("insert", cause)));
77
- if (input.version !== 1 || input.status !== "pending" || input.leaseUntilMillis !== null || input.retry.attempts !== 0 || input.retry.generation !== 0 || input.retry.automaticAttempts !== 0 || input.retry.nextAttemptAtMillis !== input.createdAtMillis || input.retry.lastAttemptAtMillis !== null || input.retry.lastFailure !== null || input.deadlineAtMillis !== input.initialDeadlineAtMillis) return yield* MessageDeliveryError.make({
78
- reason: "validation",
79
- operation: "insert-state"
80
- });
81
- if (bytes(JSON.stringify(input.envelope)) > config.maxEnvelopeBytes) return yield* MessageDeliveryError.make({
82
- reason: "capacity",
83
- operation: "envelope-bytes"
84
- });
85
- yield* failpoint.hit("message-delivery:insert:before");
86
- const result = yield* transaction.run(Effect.gen(function* () {
87
- const existing = yield* get(input.key);
88
- if (existing !== null) {
89
- if (!sameMessageDeliveryIdentity(existing, input)) return yield* MessageDeliveryError.make({
90
- reason: "conflict",
91
- operation: "insert"
92
- });
93
- return existing;
94
- }
95
- const update = isWorkerUpdateDelivery(input);
96
- const capacity = messageDeliveryCapacity(config, update);
97
- const counts = yield* query("count", sql`SELECT COUNT(*) AS retained, COALESCE(SUM(CASE WHEN state IN ('pending', 'accepted', 'parked') THEN 1 ELSE 0 END), 0) AS pending FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.key.ownerThreadId} AND COALESCE(json_extract(record_json, '$.envelope.messageAdmission._tag'), '') ${update ? sql`= 'WorkerUpdate'` : sql`<> 'WorkerUpdate'`}`);
98
- const count = (yield* Schema.decodeUnknownEffect(Schema.Array(Count))(counts).pipe(Effect.mapError((cause) => corrupt("count", cause))))[0];
99
- if (count === void 0) return yield* corrupt("count");
100
- if (count.retained >= capacity.retained || count.pending >= capacity.pending) return yield* MessageDeliveryError.make({
101
- reason: "capacity",
102
- operation: "insert"
103
- });
104
- yield* query("insert", sql`INSERT INTO effect_agent_message_deliveries (owner_thread_id, message_id, version, state, deadline_at_millis, record_json) VALUES (${input.key.ownerThreadId}, ${input.key.messageId}, ${input.version}, ${input.status}, ${messageDeliveryDeadline(input)}, ${text})`);
105
- return input;
106
- }));
107
- yield* failpoint.hit("message-delivery:insert:after");
108
- return result;
109
- });
110
- const change = Effect.fn("SqlMessageDeliveryStore.change")(function* (key, change) {
111
- const decodedKey = yield* validateMessageDelivery(MessageDeliveryKey, key, "change");
112
- const input = yield* validateMessageDelivery(MessageDeliveryChange, change, "change");
113
- const point = `message-delivery:${input._tag.toLowerCase()}`;
114
- yield* failpoint.hit(`${point}:before`);
115
- const result = yield* transaction.run(Effect.gen(function* () {
116
- const current = yield* get(decodedKey);
117
- if (current === null) return yield* MessageDeliveryError.make({
118
- reason: "not-found",
119
- operation: "change"
120
- });
121
- const next = yield* Effect.fromResult(applyMessageDeliveryChange(current, input));
122
- const text = yield* encode(next);
123
- const updated = yield* query("change", sql`UPDATE effect_agent_message_deliveries SET version = ${next.version}, state = ${next.status}, deadline_at_millis = ${messageDeliveryDeadline(next)}, record_json = ${text} WHERE owner_thread_id = ${decodedKey.ownerThreadId} AND message_id = ${decodedKey.messageId} AND version = ${input.expectedVersion} RETURNING owner_thread_id, message_id, version, state, deadline_at_millis, record_json`);
124
- const rows = yield* decodeRows(updated);
125
- if (rows.length !== 1 || rows[0] === void 0) return yield* MessageDeliveryError.make({
126
- reason: "conflict",
127
- operation: "change"
128
- });
129
- return rows[0];
130
- }));
131
- yield* failpoint.hit(`${point}:after`);
132
- return result;
133
- });
134
- return MessageDeliveryStore.of({
135
- limits: config,
136
- maxStoredValueBytes,
137
- insert,
138
- get,
139
- change,
140
- list: Effect.fn("SqlMessageDeliveryStore.list")(function* (request) {
141
- const input = yield* validateMessageDelivery(MessageDeliveryPageRequest, request, "list");
142
- const rows = yield* query("list", sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.ownerThreadId} ${input.after === void 0 ? sql`` : sql`AND message_id > ${input.after}`} ${input.pendingOnly ? sql`AND state NOT IN ('processed', 'refused')` : sql``}
143
- ${input.workerStarts === void 0 ? sql`` : sql`AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.delegationId') = ${input.workerStarts.delegationId}
144
- AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.targetAgentId') = ${input.workerStarts.targetAgentId}
145
- AND message_id = json_extract(record_json, '$.envelope.workerAdmission.origin.firstMessageId')`}
146
- ${input.pendingWorker === void 0 ? sql`` : sql`AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.threadId') = ${input.pendingWorker}
147
- AND state IN ('pending', 'parked') AND json_extract(record_json, '$.receipt') IS NULL`}
148
- ORDER BY message_id LIMIT ${input.limit + 1}`);
149
- const records = yield* decodeRows(rows);
150
- const items = records.slice(0, input.limit);
151
- return {
152
- items,
153
- next: records.length > input.limit ? items.at(-1)?.key.messageId ?? null : null
154
- };
155
- }),
156
- due: Effect.fn("SqlMessageDeliveryStore.due")(function* (nowMillis, limit, ownerThreadId) {
157
- const input = yield* validateMessageDelivery(Scan, {
158
- nowMillis,
159
- limit,
160
- ...ownerThreadId === void 0 ? {} : { ownerThreadId }
161
- }, "due");
162
- const rows = yield* query("due", sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE deadline_at_millis IS NOT NULL AND deadline_at_millis <= ${input.nowMillis} ${input.ownerThreadId === void 0 ? sql`` : sql`AND owner_thread_id = ${input.ownerThreadId}`} ORDER BY deadline_at_millis, owner_thread_id, message_id LIMIT ${input.limit}`);
163
- return (yield* decodeRows(rows)).map((record) => record.key);
164
- }),
165
- nextDeadline: Effect.fn("SqlMessageDeliveryStore.nextDeadline")(function* (ownerThreadId) {
166
- if (ownerThreadId !== void 0) yield* validateMessageDelivery(ThreadId, ownerThreadId, "nextDeadline");
167
- const rows = yield* query("next-deadline", sql`SELECT MIN(deadline_at_millis) AS deadline FROM effect_agent_message_deliveries ${ownerThreadId === void 0 ? sql`` : sql`WHERE owner_thread_id = ${ownerThreadId}`}`);
168
- return (yield* Schema.decodeUnknownEffect(Schema.Array(Deadline))(rows).pipe(Effect.mapError((cause) => corrupt("next-deadline", cause))))[0]?.deadline ?? null;
169
- })
170
- });
171
- });
172
- /** Add the pending-only index within the adapter's format transaction. */
173
- const createMessageDeliveryPendingIndex = Effect.gen(function* () {
174
- yield* (yield* SqlClient.SqlClient)`CREATE INDEX effect_agent_message_deliveries_pending ON effect_agent_message_deliveries(owner_thread_id, message_id) WHERE state NOT IN ('processed', 'refused')`;
175
- });
176
- //#endregion
177
- export { SqlMessageDeliveryTransaction, createMessageDeliveryPendingIndex, makeSqlMessageDeliveryStore };
178
-
179
- //# sourceMappingURL=SqlMessageDeliveryStore.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqlMessageDeliveryStore.mjs","names":[],"sources":["../../src/durable/SqlMessageDeliveryStore.ts"],"sourcesContent":["import { Context, Effect, Schema } from \"effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\nimport type { SqlError } from \"effect/unstable/sql/SqlError\";\n\nimport { ThreadId } from \"../core/Identifiers.ts\";\nimport {\n applyMessageDeliveryChange,\n defaultMessageDeliveryStoreLimits,\n MessageDeliveryChange,\n MessageDeliveryError,\n type MessageDeliveryFailure,\n MessageDeliveryFailpoint,\n MessageDeliveryKey,\n MessageDeliveryPageRequest,\n MessageDeliveryRecord,\n MessageDeliveryStore,\n MessageDeliveryStoreLimits,\n messageDeliveryDeadline,\n isWorkerUpdateDelivery,\n messageDeliveryCapacity,\n sameMessageDeliveryIdentity,\n validateMessageDelivery,\n} from \"./MessageDelivery.ts\";\nimport { ScheduleInstant } from \"./Schedule.ts\";\nimport { IdempotencyKey } from \"./SubmissionLedger.ts\";\n\n/** The adapter owns the atomic transaction and any associated native wake/alarm update. */\nexport class SqlMessageDeliveryTransaction extends Context.Service<\n SqlMessageDeliveryTransaction,\n {\n readonly run: <A>(\n body: Effect.Effect<A, MessageDeliveryFailure>,\n ) => Effect.Effect<A, MessageDeliveryFailure>;\n }\n>()(\"@effect-agent/thread/SqlMessageDeliveryTransaction\") {}\n\nexport interface SqlMessageDeliveryStoreOptions {\n /** UTF-8 bound on the complete persisted record, including a processed Settlement. */\n readonly maxStoredValueBytes?: number;\n}\n\nconst Row = Schema.Struct({\n owner_thread_id: ThreadId,\n message_id: IdempotencyKey,\n version: Schema.Int,\n state: Schema.String,\n deadline_at_millis: Schema.NullOr(ScheduleInstant),\n record_json: Schema.String,\n});\n\nconst Count = Schema.Struct({ retained: Schema.Natural, pending: Schema.Natural });\nconst Deadline = Schema.Struct({ deadline: Schema.NullOr(ScheduleInstant) });\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 codec = Schema.fromJsonString(MessageDeliveryRecord);\nconst bytes = (text: string): number => new TextEncoder().encode(text).byteLength;\n\nconst storage = (operation: string, cause?: unknown) =>\n MessageDeliveryError.make({\n reason: \"storage\",\n operation,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst corrupt = (operation: string, cause?: unknown) =>\n MessageDeliveryError.make({\n reason: \"corrupt\",\n operation,\n ...(cause === undefined ? {} : { cause }),\n });\n\nconst query = <A>(operation: string, effect: Effect.Effect<A, SqlError>) =>\n effect.pipe(Effect.mapError((cause) => storage(operation, cause)));\n\n/**\n * Shared SQL implementation over the adapter-owned effect_agent_message_deliveries table.\n * Required columns: owner_thread_id, message_id (composite primary key), version, state,\n * deadline_at_millis (nullable effective wake deadline), record_json. Index non-null deadlines\n * by (deadline_at_millis, owner_thread_id, message_id). No source/receiver ledger joins.\n * Before failpoints precede the atomic transaction; after failpoints run after its commit.\n */\nexport const makeSqlMessageDeliveryStore = Effect.fn(\"SqlMessageDeliveryStore.make\")(function* (\n limits: MessageDeliveryStoreLimits = defaultMessageDeliveryStoreLimits,\n options: SqlMessageDeliveryStoreOptions = {},\n) {\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 sql = yield* SqlClient.SqlClient;\n const transaction = yield* SqlMessageDeliveryTransaction;\n const failpoint = yield* MessageDeliveryFailpoint;\n\n const encode = Effect.fn(\"SqlMessageDeliveryStore.encode\")(function* (\n record: MessageDeliveryRecord,\n ) {\n const text = yield* Schema.encodeEffect(codec)(record).pipe(\n Effect.mapError((cause) => corrupt(\"encode\", cause)),\n );\n\n if (bytes(text) > maxStoredValueBytes)\n return yield* MessageDeliveryError.make({\n reason: \"capacity\",\n operation: \"stored-value-bytes\",\n });\n\n return text;\n });\n\n const decode = Effect.fn(\"SqlMessageDeliveryStore.decode\")(function* (row: typeof Row.Type) {\n if (bytes(row.record_json) > maxStoredValueBytes) return yield* corrupt(\"stored-value-bytes\");\n\n const record = yield* Schema.decodeEffect(codec)(row.record_json).pipe(\n Effect.mapError((cause) => corrupt(\"decode\", cause)),\n );\n\n if (\n record.key.ownerThreadId !== row.owner_thread_id ||\n record.key.messageId !== row.message_id ||\n record.version !== row.version ||\n record.status !== row.state ||\n messageDeliveryDeadline(record) !== row.deadline_at_millis\n ) {\n return yield* corrupt(\"row-metadata\");\n }\n\n return record;\n });\n\n const decodeRows = (rows: unknown) =>\n Schema.decodeUnknownEffect(Schema.Array(Row))(rows).pipe(\n Effect.mapError((cause) => corrupt(\"rows\", cause)),\n Effect.flatMap((rows) => Effect.forEach(rows, decode)),\n );\n\n const get: MessageDeliveryStore[\"Service\"][\"get\"] = Effect.fn(\"SqlMessageDeliveryStore.get\")(\n function* (key) {\n const input = yield* validateMessageDelivery(MessageDeliveryKey, key, \"get\");\n\n const rows = yield* query(\n \"get\",\n sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.ownerThreadId} AND message_id = ${input.messageId}`,\n );\n\n return (yield* decodeRows(rows))[0] ?? null;\n },\n );\n\n const insert: MessageDeliveryStore[\"Service\"][\"insert\"] = Effect.fn(\n \"SqlMessageDeliveryStore.insert\",\n )(function* (record) {\n const text = yield* encode(record);\n\n const input = yield* Schema.decodeEffect(codec)(text).pipe(\n Effect.mapError((cause) => corrupt(\"insert\", cause)),\n );\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({ reason: \"validation\", operation: \"insert-state\" });\n }\n if (bytes(JSON.stringify(input.envelope)) > config.maxEnvelopeBytes)\n return yield* MessageDeliveryError.make({ reason: \"capacity\", operation: \"envelope-bytes\" });\n yield* failpoint.hit(\"message-delivery:insert:before\");\n\n const result = yield* transaction.run(\n Effect.gen(function* () {\n const existing = yield* get(input.key);\n\n if (existing !== null) {\n if (!sameMessageDeliveryIdentity(existing, input))\n return yield* MessageDeliveryError.make({ reason: \"conflict\", operation: \"insert\" });\n\n return existing;\n }\n\n const update = isWorkerUpdateDelivery(input);\n const capacity = messageDeliveryCapacity(config, update);\n\n const counts = yield* query(\n \"count\",\n sql`SELECT COUNT(*) AS retained, COALESCE(SUM(CASE WHEN state IN ('pending', 'accepted', 'parked') THEN 1 ELSE 0 END), 0) AS pending FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.key.ownerThreadId} AND COALESCE(json_extract(record_json, '$.envelope.messageAdmission._tag'), '') ${update ? sql`= 'WorkerUpdate'` : sql`<> 'WorkerUpdate'`}`,\n );\n\n const count = (yield* Schema.decodeUnknownEffect(Schema.Array(Count))(counts).pipe(\n Effect.mapError((cause) => corrupt(\"count\", cause)),\n ))[0];\n\n if (count === undefined) return yield* corrupt(\"count\");\n if (count.retained >= capacity.retained || count.pending >= capacity.pending)\n return yield* MessageDeliveryError.make({ reason: \"capacity\", operation: \"insert\" });\n yield* query(\n \"insert\",\n sql`INSERT INTO effect_agent_message_deliveries (owner_thread_id, message_id, version, state, deadline_at_millis, record_json) VALUES (${input.key.ownerThreadId}, ${input.key.messageId}, ${input.version}, ${input.status}, ${messageDeliveryDeadline(input)}, ${text})`,\n );\n\n return input;\n }),\n );\n\n yield* failpoint.hit(\"message-delivery:insert:after\");\n\n return result;\n });\n\n const change: MessageDeliveryStore[\"Service\"][\"change\"] = Effect.fn(\n \"SqlMessageDeliveryStore.change\",\n )(function* (key, change) {\n const decodedKey = yield* validateMessageDelivery(MessageDeliveryKey, key, \"change\");\n const input = yield* validateMessageDelivery(MessageDeliveryChange, change, \"change\");\n const point = `message-delivery:${input._tag.toLowerCase()}`;\n\n yield* failpoint.hit(`${point}:before`);\n\n const result = yield* transaction.run(\n Effect.gen(function* () {\n const current = yield* get(decodedKey);\n\n if (current === null)\n return yield* MessageDeliveryError.make({ reason: \"not-found\", operation: \"change\" });\n const next = yield* Effect.fromResult(applyMessageDeliveryChange(current, input));\n const text = yield* encode(next);\n\n const updated = yield* query(\n \"change\",\n sql`UPDATE effect_agent_message_deliveries SET version = ${next.version}, state = ${next.status}, deadline_at_millis = ${messageDeliveryDeadline(next)}, record_json = ${text} WHERE owner_thread_id = ${decodedKey.ownerThreadId} AND message_id = ${decodedKey.messageId} AND version = ${input.expectedVersion} RETURNING owner_thread_id, message_id, version, state, deadline_at_millis, record_json`,\n );\n\n const rows = yield* decodeRows(updated);\n\n if (rows.length !== 1 || rows[0] === undefined)\n return yield* MessageDeliveryError.make({ reason: \"conflict\", operation: \"change\" });\n\n return rows[0];\n }),\n );\n\n yield* failpoint.hit(`${point}:after`);\n\n return result;\n });\n\n return MessageDeliveryStore.of({\n limits: config,\n maxStoredValueBytes,\n insert,\n get,\n change,\n list: Effect.fn(\"SqlMessageDeliveryStore.list\")(function* (request) {\n const input = yield* validateMessageDelivery(MessageDeliveryPageRequest, request, \"list\");\n\n const rows = yield* query(\n \"list\",\n sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE owner_thread_id = ${input.ownerThreadId} ${input.after === undefined ? sql`` : sql`AND message_id > ${input.after}`} ${input.pendingOnly ? sql`AND state NOT IN ('processed', 'refused')` : sql``}\n ${\n input.workerStarts === undefined\n ? sql``\n : sql`AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.delegationId') = ${input.workerStarts.delegationId}\n AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.targetAgentId') = ${input.workerStarts.targetAgentId}\n AND message_id = json_extract(record_json, '$.envelope.workerAdmission.origin.firstMessageId')`\n }\n ${\n input.pendingWorker === undefined\n ? sql``\n : sql`AND json_extract(record_json, '$.envelope.workerAdmission.origin.worker.threadId') = ${input.pendingWorker}\n AND state IN ('pending', 'parked') AND json_extract(record_json, '$.receipt') IS NULL`\n }\n ORDER BY message_id LIMIT ${input.limit + 1}`,\n );\n\n const records = yield* decodeRows(rows);\n const items = records.slice(0, input.limit);\n\n return {\n items,\n next: records.length > input.limit ? (items.at(-1)?.key.messageId ?? null) : null,\n };\n }),\n due: Effect.fn(\"SqlMessageDeliveryStore.due\")(function* (nowMillis, limit, ownerThreadId) {\n const input = yield* validateMessageDelivery(\n Scan,\n { nowMillis, limit, ...(ownerThreadId === undefined ? {} : { ownerThreadId }) },\n \"due\",\n );\n\n const rows = yield* query(\n \"due\",\n sql`SELECT owner_thread_id, message_id, version, state, deadline_at_millis, record_json FROM effect_agent_message_deliveries WHERE deadline_at_millis IS NOT NULL AND deadline_at_millis <= ${input.nowMillis} ${input.ownerThreadId === undefined ? sql`` : sql`AND owner_thread_id = ${input.ownerThreadId}`} ORDER BY deadline_at_millis, owner_thread_id, message_id LIMIT ${input.limit}`,\n );\n\n return (yield* decodeRows(rows)).map((record) => record.key);\n }),\n nextDeadline: Effect.fn(\"SqlMessageDeliveryStore.nextDeadline\")(function* (ownerThreadId) {\n if (ownerThreadId !== undefined)\n yield* validateMessageDelivery(ThreadId, ownerThreadId, \"nextDeadline\");\n\n const rows = yield* query(\n \"next-deadline\",\n sql`SELECT MIN(deadline_at_millis) AS deadline FROM effect_agent_message_deliveries ${ownerThreadId === undefined ? sql`` : sql`WHERE owner_thread_id = ${ownerThreadId}`}`,\n );\n\n const decoded = yield* Schema.decodeUnknownEffect(Schema.Array(Deadline))(rows).pipe(\n Effect.mapError((cause) => corrupt(\"next-deadline\", cause)),\n );\n\n return decoded[0]?.deadline ?? null;\n }),\n });\n});\n\n/** Add the pending-only index within the adapter's format transaction. */\nexport const createMessageDeliveryPendingIndex = Effect.gen(function* () {\n const sql = yield* SqlClient.SqlClient;\n\n yield* sql`CREATE INDEX effect_agent_message_deliveries_pending ON effect_agent_message_deliveries(owner_thread_id, message_id) WHERE state NOT IN ('processed', 'refused')`;\n});\n"],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { d as ScheduleFailpointError } from "../Schedule-CtYREFnz.mjs";
2
- import { g as SubscriptionFailpointError } from "../Subscription-_VTIVN8o.mjs";
3
- import { Effect, Schema } from "effect";
4
- import * as SqlClient from "effect/unstable/sql/SqlClient";
5
- //#region src/durable/SqlStorageV2Upgrade.d.ts
6
- declare const StorageUpgradeError_base: Schema.Class<StorageUpgradeError, Schema.TaggedStruct<"StorageUpgradeError", {
7
- readonly table: Schema.String;
8
- readonly rowKey: Schema.String;
9
- readonly reason: Schema.Literals<readonly ["corrupt", "unsupported", "storage"]>;
10
- readonly message: Schema.String;
11
- }>, import("effect/Cause").YieldableError>;
12
- /** Adapter initialization preserves this diagnosis; no payloads are included in diagnostics. */
13
- export declare class StorageUpgradeError extends StorageUpgradeError_base {}
14
- /** Native SQL only; callers own one transaction, recheck the version inside it, and advance it last. */
15
- export declare const upgradeV2Schedules: (maxBytes: number) => Effect.Effect<undefined, ScheduleFailpointError | import("effect/unstable/sql/SqlError").SqlError | StorageUpgradeError, SqlClient.SqlClient>;
16
- /** v2 registrations were immutable: revision 1 and the delivery snapshot have one possible value. */
17
- export declare const upgradeV2Subscriptions: (maxBytes: number) => Effect.Effect<undefined, Schema.SchemaError | import("effect/unstable/sql/SqlError").SqlError | StorageUpgradeError | SubscriptionFailpointError, import("effect/Crypto").Crypto | SqlClient.SqlClient>;
18
- /** Check the shared layout without reading journal, receipt, lease or settlement payloads. */
19
- export declare const checkV2ThreadLayout: () => Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError | StorageUpgradeError, SqlClient.SqlClient>;
20
- //#endregion
21
- //# sourceMappingURL=SqlStorageV2Upgrade.d.mts.map