@effect-agent/storage-sqlite 0.1.0-beta.56 → 0.1.0-beta.58

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,6 +1,6 @@
1
- import { ActivityMutationFailpoint, ActivityMutationFailure, ActivityProcessorStore, ActivityStoreError } from "@effect-agent/thread/ActivityStore";
2
1
  import { Layer } from "effect";
3
2
  import * as SqlClientService from "effect/unstable/sql/SqlClient";
3
+ import { ActivityMutationFailpoint, ActivityMutationFailure, ActivityProcessorStore, ActivityStoreError } from "@effect-agent/thread/ActivityStore";
4
4
  declare namespace SqliteActivityStore_d_exports {
5
5
  export { SqliteActivityInitializationError, activityProcessorStoreLayer, activityProcessorStoreLayerWithFailpoints };
6
6
  }
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { ActivityBusy, ActivityClaim, ActivityClaimRequest, ActivityMutationFailpoint, ActivityOwnershipLost, ActivityProcessorKey, ActivityProcessorStore, ActivityProgress, ActivityStoreError, ActivityWorkConflict, PreparedActivity } from "@effect-agent/thread/ActivityStore";
3
- import { Digest } from "@effect-agent/thread/Records";
4
2
  import { Clock, Effect, Layer, Schema } from "effect";
5
3
  import * as SqlClientService from "effect/unstable/sql/SqlClient";
4
+ import { Digest } from "@effect-agent/thread/Records";
5
+ import { ActivityBusy, ActivityClaim, ActivityClaimRequest, ActivityMutationFailpoint, ActivityOwnershipLost, ActivityProcessorKey, ActivityProcessorStore, ActivityProgress, ActivityStoreError, ActivityWorkConflict, PreparedActivity } from "@effect-agent/thread/ActivityStore";
6
6
  //#region src/SqliteActivityStore.ts
7
7
  var SqliteActivityStore_exports = /* @__PURE__ */ __exportAll({
8
8
  activityProcessorStoreLayer: () => activityProcessorStoreLayer,
@@ -0,0 +1,14 @@
1
+ import { a as SqliteStorageCompatibilityError, o as SqliteStorageCorruptionError, s as SqliteStorageError } from "./SqliteStorageError-CzKmwCLl.mjs";
2
+ import { SqliteStorageConfig } from "./SqliteStorageConfig.mjs";
3
+ import { SqliteStorageFailpoint } from "./SqliteStorageFailpoint.mjs";
4
+ import { MessageDeliveryError, MessageDeliveryStore, MessageDeliveryStoreLimits } from "@effect-agent/thread/MessageDelivery";
5
+ import { Layer } from "effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ declare namespace SqliteMessageDeliveryStore_d_exports {
8
+ export { messageDeliveryStoreLayer };
9
+ }
10
+ /** Source-owned message obligations in the host's existing SQLite database. */
11
+ declare const messageDeliveryStoreLayer: (limits?: MessageDeliveryStoreLimits) => Layer.Layer<MessageDeliveryStore, MessageDeliveryError | SqliteStorageCompatibilityError | SqliteStorageCorruptionError | SqliteStorageError, SqlClient.SqlClient | SqliteStorageConfig | SqliteStorageFailpoint>;
12
+ //#endregion
13
+ export { messageDeliveryStoreLayer, SqliteMessageDeliveryStore_d_exports as t };
14
+ //# sourceMappingURL=SqliteMessageDeliveryStore.d.mts.map
@@ -0,0 +1,24 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
+ import { a as initializeSqliteJournal } from "./sqlite-journal-lDduEakl.mjs";
3
+ import { MessageDeliveryError, MessageDeliveryStore } from "@effect-agent/thread/MessageDelivery";
4
+ import { SqlMessageDeliveryTransaction, makeSqlMessageDeliveryStore } from "@effect-agent/thread/SqlMessageDeliveryStore";
5
+ import { Effect, Layer } from "effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ //#region src/SqliteMessageDeliveryStore.ts
8
+ var SqliteMessageDeliveryStore_exports = /* @__PURE__ */ __exportAll({ messageDeliveryStoreLayer: () => messageDeliveryStoreLayer });
9
+ const transactions = Layer.effect(SqlMessageDeliveryTransaction, Effect.gen(function* () {
10
+ const sql = yield* SqlClient.SqlClient;
11
+ return SqlMessageDeliveryTransaction.of({ run: (body) => sql.withTransaction(body).pipe(Effect.catchTag("SqlError", () => MessageDeliveryError.make({
12
+ reason: "storage",
13
+ operation: "transaction"
14
+ }))) });
15
+ }));
16
+ /** Source-owned message obligations in the host's existing SQLite database. */
17
+ const messageDeliveryStoreLayer = (limits) => Layer.effect(MessageDeliveryStore, Effect.gen(function* () {
18
+ yield* initializeSqliteJournal();
19
+ return yield* makeSqlMessageDeliveryStore(limits, { maxStoredValueBytes: 16777216 });
20
+ })).pipe(Layer.provide(transactions));
21
+ //#endregion
22
+ export { messageDeliveryStoreLayer, SqliteMessageDeliveryStore_exports as t };
23
+
24
+ //# sourceMappingURL=SqliteMessageDeliveryStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteMessageDeliveryStore.mjs","names":[],"sources":["../src/SqliteMessageDeliveryStore.ts"],"sourcesContent":["import {\n MessageDeliveryError,\n MessageDeliveryStore,\n type MessageDeliveryStoreLimits,\n} from \"@effect-agent/thread/MessageDelivery\";\nimport {\n makeSqlMessageDeliveryStore,\n SqlMessageDeliveryTransaction,\n} from \"@effect-agent/thread/SqlMessageDeliveryStore\";\nimport { Effect, Layer } from \"effect\";\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\";\n\nimport { initializeSqliteJournal } from \"./internal/sqlite-journal.ts\";\n\nconst transactions = Layer.effect(\n SqlMessageDeliveryTransaction,\n Effect.gen(function* () {\n const sql = yield* SqlClient.SqlClient;\n\n return SqlMessageDeliveryTransaction.of({\n run: (body) =>\n sql\n .withTransaction(body)\n .pipe(\n Effect.catchTag(\"SqlError\", () =>\n MessageDeliveryError.make({ reason: \"storage\", operation: \"transaction\" }),\n ),\n ),\n });\n }),\n);\n\n/** Source-owned message obligations in the host's existing SQLite database. */\nexport const messageDeliveryStoreLayer = (limits?: MessageDeliveryStoreLimits) =>\n Layer.effect(\n MessageDeliveryStore,\n Effect.gen(function* () {\n yield* initializeSqliteJournal();\n\n return yield* makeSqlMessageDeliveryStore(limits, { maxStoredValueBytes: 16 * 1024 * 1024 });\n }),\n ).pipe(Layer.provide(transactions));\n"],"mappings":";;;;;;;;AAcA,MAAM,eAAe,MAAM,OACzB,+BACA,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAO,UAAU;CAE7B,OAAO,8BAA8B,GAAG,EACtC,MAAM,SACJ,IACG,gBAAgB,IAAI,CAAC,CACrB,KACC,OAAO,SAAS,kBACd,qBAAqB,KAAK;EAAE,QAAQ;EAAW,WAAW;CAAc,CAAC,CAC3E,CACF,EACN,CAAC;AACH,CAAC,CACH;;AAGA,MAAa,6BAA6B,WACxC,MAAM,OACJ,sBACA,OAAO,IAAI,aAAa;CACtB,OAAO,wBAAwB;CAE/B,OAAO,OAAO,4BAA4B,QAAQ,EAAE,qBAAqB,SAAiB,CAAC;AAC7F,CAAC,CACH,CAAC,CAAC,KAAK,MAAM,QAAQ,YAAY,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { a as initializeSqliteJournal } from "./sqlite-journal-Ce8lwVYx.mjs";
2
+ import { a as initializeSqliteJournal } from "./sqlite-journal-lDduEakl.mjs";
3
3
  import { Effect, Layer, Result, Schema } from "effect";
4
4
  import * as SqlClientService from "effect/unstable/sql/SqlClient";
5
5
  import { ScheduleCapacityError, ScheduleChange, ScheduleConflict, ScheduleDueCursor, ScheduleFailpoint, ScheduleId, ScheduleInstant, ScheduleKey, ScheduleNotFound, ScheduleOwner, SchedulePageRequest, ScheduleRecord, ScheduleStorageError, ScheduleStore, defaultSchedulingLimits } from "@effect-agent/thread/Schedule";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { CanonicalSequence, ProducerEpoch } from "@effect-agent/thread/Records";
3
2
  import { Schema } from "effect";
3
+ import { CanonicalSequence, ProducerEpoch } from "@effect-agent/thread/Records";
4
4
  //#region src/SqliteStorageError.ts
5
5
  var SqliteStorageError_exports = /* @__PURE__ */ __exportAll({
6
6
  SqliteAppendConflict: () => SqliteAppendConflict,
@@ -1,9 +1,9 @@
1
1
  import { SqliteMigrator } from "@effect/sql-sqlite-node";
2
2
  //#region src/internal/migrations.d.ts
3
- declare const CurrentSqliteStorageVersion = 8;
3
+ declare const CurrentSqliteStorageVersion = 9;
4
4
  declare namespace SqliteStorageVersion_d_exports {
5
5
  export { CurrentSqliteStorageVersion };
6
6
  }
7
7
  //#endregion
8
8
  export { CurrentSqliteStorageVersion as n, SqliteStorageVersion_d_exports as t };
9
- //# sourceMappingURL=SqliteStorageVersion-DiIVkDFv.d.mts.map
9
+ //# sourceMappingURL=SqliteStorageVersion-gA7_96xM.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-DiIVkDFv.mjs";
1
+ import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-gA7_96xM.mjs";
2
2
  export { CurrentSqliteStorageVersion };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { t as CurrentSqliteStorageVersion } from "./migrations-BKcJueHB.mjs";
2
+ import { t as CurrentSqliteStorageVersion } from "./migrations-dnTR0RKq.mjs";
3
3
  //#region src/SqliteStorageVersion.ts
4
- var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () => 8 });
4
+ var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () => 9 });
5
5
  //#endregion
6
6
  export { CurrentSqliteStorageVersion, SqliteStorageVersion_exports as t };
7
7
 
@@ -2,13 +2,14 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { SqliteStorageConfig } from "./SqliteStorageConfig.mjs";
3
3
  import { SqliteLedgerError, SqliteStorageCorruptionError, SqliteStorageError, SqliteWriteContention } from "./SqliteStorageError.mjs";
4
4
  import { SqliteStorageFailpoint } from "./SqliteStorageFailpoint.mjs";
5
- import { a as initializeSqliteJournal, i as decodeRows } from "./sqlite-journal-Ce8lwVYx.mjs";
5
+ import { a as initializeSqliteJournal, i as decodeRows } from "./sqlite-journal-lDduEakl.mjs";
6
6
  import { storageConfigLayer, storageFailpointLayer } from "./SqliteThreadStore.mjs";
7
- import { ApprovalDecision, CanonicalSequence, DefinitionDigests, Digest, PersistedJson, ProducerEpoch, RecordEnvelope, SettlementOutcome } from "@effect-agent/thread/Records";
8
7
  import { Clock, Context, Crypto, DateTime, Effect, Layer, Option, Schema, Stream } from "effect";
9
8
  import * as SqlClientService from "effect/unstable/sql/SqlClient";
9
+ import { ApprovalDecision, CanonicalSequence, DefinitionDigests, Digest, PersistedJson, ProducerEpoch, RecordEnvelope, SettlementOutcome, WorkerAdmission } from "@effect-agent/thread/Records";
10
10
  import { NodeCrypto } from "@effect/platform-node";
11
11
  import { SqliteClient } from "@effect/sql-sqlite-node";
12
+ import { MessageAdmission } from "@effect-agent/core/Messaging";
12
13
  import { EMPTY_TAIL_DIGEST } from "@effect-agent/thread/Digest";
13
14
  import { AbortCommand, AbortIntent, AbortIntentRequest, AdmissionAdmitted, AdmissionConflict, AdmissionFence, AdmissionGroup, AdmissionNotAdmitted, AdmissionPolicyError, AdmissionRequest, AdmissionResult, ApprovalConflict, ApprovalDecisionCommand, ApprovalDecisionIntent, AttachChildToReservationRequest, BeginChildBudgetReleaseRequest, ChildAttachmentSnapshot, ChildBudgetReservationRequest, ChildBudgetReservationSnapshot, ChildReservationConflict, ChildReservationStatus, ChildSettledNotification, Claim, ClaimJoiningRequest, ClaimRequest, InputAppliedMarker, JoinSnapshot, JoinedToHost, JoiningClaim, LedgerCapabilities, LedgerError, MarkInputAppliedRequest, MarkJoinedRequest, MarkReadyRequest, MarkUnknownRequest, OwnershipLost, OwnershipRenewal, OwnershipSnapshot, ParentLinkage, QueueSequence, RecoverySnapshot, RecoverySnapshotRequest, ReleaseChildBudgetRequest, ReleaseOwnershipRequest, RenewOwnershipRequest, ReservedChildBudget, ReservedSettlement, RevertJoiningRequest, Settlement, SettlementConflict, SettlementFinalization, SettlementReservation, SettlementReservationSnapshot, SubmissionAdmissionFence, SubmissionLedger, SubmissionLookup, SubmissionLookupByKey, SubmissionSnapshot, SubmissionState, SuspendRequest, SuspensionReason, SuspensionSnapshot, UnknownResolution, UnknownResolutionCommand, UnknownResolutionConflict, UnknownResolutionIntent, settlementFailureFromRecord, submissionAbortRecordId } from "@effect-agent/thread/SubmissionLedger";
14
15
  //#region src/SqliteSubmissionLedger.ts
@@ -52,7 +53,9 @@ var SubmissionRow = class extends Schema.Class("SubmissionRow")({
52
53
  parent_submission_id: Schema.NullOr(BoundedIdentifier),
53
54
  parent_tool_call_id: Schema.NullOr(BoundedIdentifier),
54
55
  admission_group: Schema.NullOr(AdmissionGroup),
55
- admission_fence_json: Schema.NullOr(BoundedStoredText)
56
+ admission_fence_json: Schema.NullOr(BoundedStoredText),
57
+ worker_admission_json: Schema.NullOr(BoundedStoredText),
58
+ message_admission_json: Schema.NullOr(BoundedStoredText)
56
59
  }) {};
57
60
  var ChildReservationRow = class extends Schema.Class("ChildReservationRow")({
58
61
  reservation_id: BoundedIdentifier,
@@ -144,7 +147,9 @@ const SUBMISSION_COLUMNS = `
144
147
  parent_submission_id,
145
148
  parent_tool_call_id,
146
149
  admission_group,
147
- admission_fence_json
150
+ admission_fence_json,
151
+ worker_admission_json,
152
+ message_admission_json
148
153
  `;
149
154
  const CHILD_RESERVATION_COLUMNS = `
150
155
  reservation_id,
@@ -313,6 +318,8 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
313
318
  state: row.state,
314
319
  createdAt: row.created_at,
315
320
  ...row.admission_group === null ? {} : { admissionGroup: row.admission_group },
321
+ ...row.worker_admission_json === null ? {} : { workerAdmission: yield* parseStoredJsonText(row.worker_admission_json).pipe(Effect.mapError(internalFailure(operation))) },
322
+ ...row.message_admission_json === null ? {} : { messageAdmission: yield* parseStoredJsonText(row.message_admission_json).pipe(Effect.mapError(internalFailure(operation))) },
316
323
  ...row.admission_fence_json === null ? {} : { admissionFence: yield* parseStoredJsonText(row.admission_fence_json).pipe(Effect.mapError(internalFailure(operation))) },
317
324
  ...row.settled_outcome === null ? {} : { settledOutcome: row.settled_outcome },
318
325
  ...row.ready_at === null ? {} : { readyAt: row.ready_at },
@@ -481,6 +488,16 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
481
488
  const operation = "ledger admit";
482
489
  const validated = yield* Schema.decodeUnknownEffect(Schema.toType(AdmissionRequest))(request).pipe(Effect.mapError(internalFailure(operation)));
483
490
  const inputJson = yield* encodePersistedJsonText(validated.inputPayload).pipe(Effect.mapError(internalFailure(operation)));
491
+ const workerAdmissionJson = validated.workerAdmission === void 0 ? null : yield* Schema.encodeEffect(Schema.fromJsonString(WorkerAdmission))(validated.workerAdmission).pipe(Effect.mapError(internalFailure(operation)));
492
+ if (workerAdmissionJson !== null && new TextEncoder().encode(workerAdmissionJson).byteLength > 16777216) return yield* LedgerError.make({
493
+ operation,
494
+ message: "Worker admission metadata exceeds the stored value bound"
495
+ });
496
+ const messageAdmissionJson = validated.messageAdmission === void 0 ? null : yield* Schema.encodeEffect(Schema.fromJsonString(MessageAdmission))(validated.messageAdmission).pipe(Effect.mapError(internalFailure(operation)));
497
+ if (messageAdmissionJson !== null && new TextEncoder().encode(messageAdmissionJson).byteLength > 16777216) return yield* LedgerError.make({
498
+ operation,
499
+ message: "Message admission metadata exceeds the stored value bound"
500
+ });
484
501
  const agentDigestsJson = yield* encodeDefinitionDigestsText(validated.agentDigests).pipe(Effect.mapError(internalFailure(operation)));
485
502
  const mintedSubmissionId = yield* mintIdentifier("submission", operation);
486
503
  const mintedReceiptId = yield* mintIdentifier("receipt", operation);
@@ -505,8 +522,10 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
505
522
  existingInputDigest: existing[0].input_digest,
506
523
  attemptedInputDigest: validated.inputDigest
507
524
  });
525
+ const retainedWorkerAdmission = existing[0].worker_admission_json === null ? void 0 : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(existing[0].worker_admission_json).pipe(Effect.mapError(internalFailure(operation)));
526
+ const retainedMessageAdmission = existing[0].message_admission_json === null ? void 0 : yield* Schema.decodeEffect(Schema.fromJsonString(MessageAdmission))(existing[0].message_admission_json).pipe(Effect.mapError(internalFailure(operation)));
508
527
  const retainedFence = existing[0].admission_fence_json === null ? void 0 : yield* Schema.decodeEffect(Schema.fromJsonString(AdmissionFence))(existing[0].admission_fence_json).pipe(Effect.mapError(internalFailure(operation)));
509
- if ((existing[0].admission_group ?? void 0) !== validated.admissionGroup || !Schema.toEquivalence(Schema.optional(AdmissionFence))(retainedFence, validated.admissionFence)) return yield* AdmissionConflict.make({
528
+ if ((existing[0].admission_group ?? void 0) !== validated.admissionGroup || !Schema.toEquivalence(Schema.optional(WorkerAdmission))(retainedWorkerAdmission, validated.workerAdmission) || !Schema.toEquivalence(Schema.optional(MessageAdmission))(retainedMessageAdmission, validated.messageAdmission) || !Schema.toEquivalence(Schema.optional(AdmissionFence))(retainedFence, validated.admissionFence)) return yield* AdmissionConflict.make({
510
529
  threadId: validated.threadId,
511
530
  principal: validated.principal,
512
531
  idempotencyKey: validated.idempotencyKey,
@@ -521,6 +540,18 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
521
540
  replayed: true
522
541
  }).pipe(Effect.mapError(internalFailure(operation)));
523
542
  }
543
+ const firstRows = yield* sql`
544
+ SELECT worker_admission_json FROM effect_agent_submissions
545
+ WHERE thread_id=${validated.threadId} ORDER BY queue_sequence LIMIT 1
546
+ `.pipe(Effect.mapError(sqlFailure(operation)));
547
+ const first = yield* Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({ worker_admission_json: Schema.NullOr(BoundedStoredText) })))(firstRows).pipe(Effect.mapError(internalFailure(operation)));
548
+ if (first[0] !== void 0) {
549
+ const previous = first[0].worker_admission_json === null ? void 0 : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(first[0].worker_admission_json).pipe(Effect.mapError(internalFailure(operation)));
550
+ if (!Schema.toEquivalence(Schema.optional(WorkerAdmission.fields.origin))(previous?.origin, validated.workerAdmission?.origin)) return yield* AdmissionPolicyError.make({
551
+ reason: "refused",
552
+ code: "worker-origin-conflict"
553
+ });
554
+ }
524
555
  yield* admissionFence.check(validated);
525
556
  if (validated.admissionGroup !== void 0) {
526
557
  if ((yield* sql`
@@ -557,7 +588,9 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
557
588
  parent_submission_id,
558
589
  parent_tool_call_id,
559
590
  admission_group,
560
- admission_fence_json
591
+ admission_fence_json,
592
+ worker_admission_json,
593
+ message_admission_json
561
594
  ) VALUES (
562
595
  ${mintedSubmissionId},
563
596
  ${validated.threadId},
@@ -575,7 +608,9 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
575
608
  ${validated.parentLinkage?.parentSubmissionId ?? null},
576
609
  ${validated.parentLinkage?.parentToolCallId ?? null},
577
610
  ${validated.admissionGroup ?? null},
578
- ${validated.admissionFence === void 0 ? null : JSON.stringify(validated.admissionFence)}
611
+ ${validated.admissionFence === void 0 ? null : JSON.stringify(validated.admissionFence)},
612
+ ${workerAdmissionJson},
613
+ ${messageAdmissionJson}
579
614
  )
580
615
  `.pipe(Effect.mapError(sqlFailure(operation)));
581
616
  return yield* decodeAdmissionResult({