@effect-agent/storage-sqlite 0.1.0-beta.50 → 0.1.0-beta.52
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.
- package/dist/SqliteScheduleStore.mjs +1 -1
- package/dist/{SqliteStorageVersion-DwQbn4bw.d.mts → SqliteStorageVersion-DiIVkDFv.d.mts} +2 -2
- package/dist/SqliteStorageVersion.d.mts +1 -1
- package/dist/SqliteStorageVersion.mjs +2 -2
- package/dist/SqliteSubmissionLedger.mjs +35 -6
- package/dist/SqliteSubmissionLedger.mjs.map +1 -1
- package/dist/SqliteSubscriptionStore.mjs +1 -1
- package/dist/SqliteThreadStore.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/{migrations-B82C9A3r.mjs → migrations-BKcJueHB.mjs} +12 -4
- package/dist/migrations-BKcJueHB.mjs.map +1 -0
- package/dist/{sqlite-journal-BxBxOUEI.mjs → sqlite-journal-j4E5Cqsj.mjs} +9 -9
- package/dist/{sqlite-journal-BxBxOUEI.mjs.map → sqlite-journal-j4E5Cqsj.mjs.map} +1 -1
- package/package.json +1 -1
- package/src/SqliteSubmissionLedger.ts +61 -3
- package/src/internal/migrations.ts +12 -3
- package/dist/migrations-B82C9A3r.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { a as initializeSqliteJournal } from "./sqlite-journal-
|
|
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 =
|
|
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-
|
|
9
|
+
//# sourceMappingURL=SqliteStorageVersion-DiIVkDFv.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-
|
|
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-
|
|
2
|
+
import { t as CurrentSqliteStorageVersion } from "./migrations-BKcJueHB.mjs";
|
|
3
3
|
//#region src/SqliteStorageVersion.ts
|
|
4
|
-
var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () =>
|
|
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-
|
|
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({
|