@effect-agent/storage-sqlite 0.1.0-beta.49 → 0.1.0-beta.51

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,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { a as initializeSqliteJournal } from "./sqlite-journal-C5SZnSdC.mjs";
2
+ import { a as initializeSqliteJournal } from "./sqlite-journal-j4E5Cqsj.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,9 +1,9 @@
1
1
  import { SqliteMigrator } from "@effect/sql-sqlite-node";
2
2
  //#region src/internal/migrations.d.ts
3
- declare const CurrentSqliteStorageVersion = 7;
3
+ declare const CurrentSqliteStorageVersion = 8;
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-DwQbn4bw.d.mts.map
9
+ //# sourceMappingURL=SqliteStorageVersion-DiIVkDFv.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-DwQbn4bw.mjs";
1
+ import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-DiIVkDFv.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-B82C9A3r.mjs";
2
+ import { t as CurrentSqliteStorageVersion } from "./migrations-BKcJueHB.mjs";
3
3
  //#region src/SqliteStorageVersion.ts
4
- var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () => 7 });
4
+ var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () => 8 });
5
5
  //#endregion
6
6
  export { CurrentSqliteStorageVersion, SqliteStorageVersion_exports as t };
7
7
 
@@ -2,14 +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-C5SZnSdC.mjs";
5
+ import { a as initializeSqliteJournal, i as decodeRows } from "./sqlite-journal-j4E5Cqsj.mjs";
6
6
  import { storageConfigLayer, storageFailpointLayer } from "./SqliteThreadStore.mjs";
7
7
  import { ApprovalDecision, CanonicalSequence, DefinitionDigests, Digest, PersistedJson, ProducerEpoch, RecordEnvelope, SettlementOutcome } from "@effect-agent/thread/Records";
8
8
  import { Clock, Context, Crypto, DateTime, Effect, Layer, Option, Schema, Stream } from "effect";
9
9
  import * as SqlClientService from "effect/unstable/sql/SqlClient";
10
10
  import { SqliteClient } from "@effect/sql-sqlite-node";
11
11
  import { EMPTY_TAIL_DIGEST } from "@effect-agent/thread/Digest";
12
- import { AbortCommand, AbortIntent, AbortIntentRequest, AdmissionAdmitted, AdmissionConflict, AdmissionNotAdmitted, 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, SubmissionLedger, SubmissionLookup, SubmissionLookupByKey, SubmissionSnapshot, SubmissionState, SuspendRequest, SuspensionReason, SuspensionSnapshot, UnknownResolution, UnknownResolutionCommand, UnknownResolutionConflict, UnknownResolutionIntent, settlementFailureFromRecord, submissionAbortRecordId } from "@effect-agent/thread/SubmissionLedger";
12
+ 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";
13
13
  import { NodeCrypto } from "@effect/platform-node";
14
14
  //#region src/SqliteSubmissionLedger.ts
15
15
  var SqliteSubmissionLedger_exports = /* @__PURE__ */ __exportAll({
@@ -50,7 +50,9 @@ var SubmissionRow = class extends Schema.Class("SubmissionRow")({
50
50
  unknown_reason: Schema.NullOr(BoundedStoredText),
51
51
  unknown_tool_call_ids_json: Schema.NullOr(BoundedStoredText),
52
52
  parent_submission_id: Schema.NullOr(BoundedIdentifier),
53
- parent_tool_call_id: Schema.NullOr(BoundedIdentifier)
53
+ parent_tool_call_id: Schema.NullOr(BoundedIdentifier),
54
+ admission_group: Schema.NullOr(AdmissionGroup),
55
+ admission_fence_json: Schema.NullOr(BoundedStoredText)
54
56
  }) {};
55
57
  var ChildReservationRow = class extends Schema.Class("ChildReservationRow")({
56
58
  reservation_id: BoundedIdentifier,
@@ -140,7 +142,9 @@ const SUBMISSION_COLUMNS = `
140
142
  unknown_reason,
141
143
  unknown_tool_call_ids_json,
142
144
  parent_submission_id,
143
- parent_tool_call_id
145
+ parent_tool_call_id,
146
+ admission_group,
147
+ admission_fence_json
144
148
  `;
145
149
  const CHILD_RESERVATION_COLUMNS = `
146
150
  reservation_id,
@@ -218,6 +222,7 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
218
222
  const failpoint = yield* SqliteStorageFailpoint;
219
223
  const sql = yield* SqlClientService.SqlClient;
220
224
  const crypto = yield* Crypto.Crypto;
225
+ const admissionFence = yield* SubmissionAdmissionFence;
221
226
  const journal = yield* initializeSqliteJournal();
222
227
  const hitFailpoint = (location, operation) => failpoint.hit(location).pipe(Effect.mapError((error) => internalFailure(operation)(error)));
223
228
  /**
@@ -307,6 +312,8 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
307
312
  receiptId: row.receipt_id,
308
313
  state: row.state,
309
314
  createdAt: row.created_at,
315
+ ...row.admission_group === null ? {} : { admissionGroup: row.admission_group },
316
+ ...row.admission_fence_json === null ? {} : { admissionFence: yield* parseStoredJsonText(row.admission_fence_json).pipe(Effect.mapError(internalFailure(operation))) },
310
317
  ...row.settled_outcome === null ? {} : { settledOutcome: row.settled_outcome },
311
318
  ...row.ready_at === null ? {} : { readyAt: row.ready_at },
312
319
  ...row.parent_submission_id === null || row.parent_tool_call_id === null ? {} : { parentLinkage: {
@@ -498,6 +505,14 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
498
505
  existingInputDigest: existing[0].input_digest,
499
506
  attemptedInputDigest: validated.inputDigest
500
507
  });
508
+ 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({
510
+ threadId: validated.threadId,
511
+ principal: validated.principal,
512
+ idempotencyKey: validated.idempotencyKey,
513
+ existingInputDigest: existing[0].input_digest,
514
+ attemptedInputDigest: validated.inputDigest
515
+ });
501
516
  return yield* decodeAdmissionResult({
502
517
  submissionId: existing[0].submission_id,
503
518
  receiptId: existing[0].receipt_id,
@@ -506,6 +521,16 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
506
521
  replayed: true
507
522
  }).pipe(Effect.mapError(internalFailure(operation)));
508
523
  }
524
+ yield* admissionFence.check(validated);
525
+ if (validated.admissionGroup !== void 0) {
526
+ if ((yield* sql`
527
+ SELECT submission_id FROM effect_agent_submissions
528
+ WHERE thread_id=${validated.threadId} AND admission_group=${validated.admissionGroup} AND state<>'settled' LIMIT 1
529
+ `.pipe(Effect.mapError(sqlFailure(operation)))).length > 0) return yield* AdmissionPolicyError.make({
530
+ reason: "occupied",
531
+ code: "admission-group"
532
+ });
533
+ }
509
534
  const maxRows = yield* sql`
510
535
  SELECT COALESCE(MAX(queue_sequence), 0) AS max_queue_sequence
511
536
  FROM effect_agent_submissions
@@ -530,7 +555,9 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
530
555
  state,
531
556
  created_at,
532
557
  parent_submission_id,
533
- parent_tool_call_id
558
+ parent_tool_call_id,
559
+ admission_group,
560
+ admission_fence_json
534
561
  ) VALUES (
535
562
  ${mintedSubmissionId},
536
563
  ${validated.threadId},
@@ -546,7 +573,9 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
546
573
  'admitted',
547
574
  ${now.iso},
548
575
  ${validated.parentLinkage?.parentSubmissionId ?? null},
549
- ${validated.parentLinkage?.parentToolCallId ?? null}
576
+ ${validated.parentLinkage?.parentToolCallId ?? null},
577
+ ${validated.admissionGroup ?? null},
578
+ ${validated.admissionFence === void 0 ? null : JSON.stringify(validated.admissionFence)}
550
579
  )
551
580
  `.pipe(Effect.mapError(sqlFailure(operation)));
552
581
  return yield* decodeAdmissionResult({