@effect-agent/storage-sqlite 0.1.0-beta.48 → 0.1.0-beta.50

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-BxBxOUEI.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";
@@ -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-BxBxOUEI.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, 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, 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";
13
13
  import { NodeCrypto } from "@effect/platform-node";
14
14
  //#region src/SqliteSubmissionLedger.ts
15
15
  var SqliteSubmissionLedger_exports = /* @__PURE__ */ __exportAll({
@@ -107,6 +107,14 @@ var AbortIntentRow = class extends Schema.Class("AbortIntentRow")({
107
107
  canonical_record_id: Schema.NullOr(BoundedIdentifier)
108
108
  }) {};
109
109
  var MaxQueueSequenceRow = class extends Schema.Class("MaxQueueSequenceRow")({ max_queue_sequence: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)) }) {};
110
+ var AbortIntentLookupRow = class extends Schema.Class("AbortIntentLookupRow")({
111
+ submission_id: BoundedIdentifier,
112
+ abort_submission_id: Schema.NullOr(BoundedIdentifier),
113
+ author: Schema.NullOr(BoundedIdentifier),
114
+ reason: Schema.NullOr(BoundedStoredText),
115
+ requested_at: Schema.NullOr(BoundedTimestamp),
116
+ canonical_record_id: Schema.NullOr(BoundedIdentifier)
117
+ }) {};
110
118
  var CanonicalRecordIdRow = class extends Schema.Class("CanonicalRecordIdRow")({ record_id: BoundedIdentifier }) {};
111
119
  const SUBMISSION_COLUMNS = `
112
120
  submission_id,
@@ -1507,6 +1515,42 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
1507
1515
  })];
1508
1516
  });
1509
1517
  const scanNonterminal = Stream.paginate(void 0, scanPage);
1518
+ const readAbortIntentForSubmission = Effect.fn("SqliteSubmissionLedger.readAbortIntentForSubmission")(function* (request) {
1519
+ const operation = "ledger read abort intent";
1520
+ const validated = yield* Schema.decodeUnknownEffect(Schema.toType(AbortIntentRequest))(request).pipe(Effect.mapError(internalFailure(operation)));
1521
+ const recordId = submissionAbortRecordId(validated.submissionId);
1522
+ const rows = yield* sql`
1523
+ SELECT
1524
+ submission.submission_id,
1525
+ abort.submission_id AS abort_submission_id,
1526
+ abort.author,
1527
+ abort.reason,
1528
+ abort.requested_at,
1529
+ canonical.record_id AS canonical_record_id
1530
+ FROM effect_agent_submissions AS submission
1531
+ LEFT JOIN effect_agent_abort_intents AS abort
1532
+ ON abort.submission_id = submission.submission_id
1533
+ LEFT JOIN effect_agent_canonical_records AS canonical
1534
+ ON canonical.thread_id = submission.thread_id
1535
+ AND canonical.record_id = ${recordId}
1536
+ WHERE submission.submission_id = ${validated.submissionId}
1537
+ `.pipe(Effect.mapError(sqlFailure(operation)));
1538
+ const decoded = yield* decodeRows(Schema.Array(AbortIntentLookupRow), "effect_agent_abort_intents", validated.submissionId, rows).pipe(Effect.mapError(internalFailure(operation)));
1539
+ if (decoded.length === 0) return yield* LedgerError.make({
1540
+ operation,
1541
+ message: `Unknown submission ${validated.submissionId}.`
1542
+ });
1543
+ if (decoded.length !== 1) return yield* corruptionFailure(operation, "effect_agent_abort_intents", validated.submissionId, "An abort intent lookup returned more than one row.");
1544
+ const row = decoded[0];
1545
+ if (row.abort_submission_id === null) return void 0;
1546
+ return yield* decodeAbortIntent({
1547
+ submissionId: row.abort_submission_id,
1548
+ author: row.author,
1549
+ reason: row.reason,
1550
+ requestedAt: row.requested_at,
1551
+ ...row.canonical_record_id === null ? {} : { canonicalRecordId: row.canonical_record_id }
1552
+ }).pipe(Effect.mapError((error) => corruptionFailure(operation, "effect_agent_abort_intents", validated.submissionId, error.message)));
1553
+ });
1510
1554
  const loadRecoverySnapshot = Effect.fn("SqliteSubmissionLedger.loadRecoverySnapshot")(function* (request) {
1511
1555
  const operation = "ledger load recovery snapshot";
1512
1556
  const validated = yield* Schema.decodeUnknownEffect(Schema.toType(RecoverySnapshotRequest))(request).pipe(Effect.mapError(internalFailure(operation)));
@@ -1636,7 +1680,8 @@ const makeServices = Effect.fn("SqliteSubmissionLedger.makeServices")(function*
1636
1680
  beginChildBudgetRelease,
1637
1681
  releaseChildBudget,
1638
1682
  scanNonterminal,
1639
- loadRecoverySnapshot
1683
+ loadRecoverySnapshot,
1684
+ readAbortIntent: readAbortIntentForSubmission
1640
1685
  }));
1641
1686
  });
1642
1687
  /**