@effect-agent/storage-sqlite 0.1.0-beta.56 → 0.1.0-beta.57
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/SqliteActivityStore.d.mts +1 -1
- package/dist/SqliteActivityStore.mjs +2 -2
- package/dist/SqliteMessageDeliveryStore.d.mts +14 -0
- package/dist/SqliteMessageDeliveryStore.mjs +24 -0
- package/dist/SqliteMessageDeliveryStore.mjs.map +1 -0
- package/dist/SqliteScheduleStore.mjs +1 -1
- package/dist/SqliteStorageError.mjs +1 -1
- package/dist/{SqliteStorageVersion-DiIVkDFv.d.mts → SqliteStorageVersion-gA7_96xM.d.mts} +2 -2
- package/dist/SqliteStorageVersion.d.mts +1 -1
- package/dist/SqliteStorageVersion.mjs +2 -2
- package/dist/SqliteSubmissionLedger.mjs +42 -7
- package/dist/SqliteSubmissionLedger.mjs.map +1 -1
- package/dist/SqliteSubscriptionStore.mjs +1 -1
- package/dist/SqliteThreadStore.d.mts +1 -1
- package/dist/SqliteThreadStore.mjs +2 -2
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +3 -2
- package/dist/{migrations-BKcJueHB.mjs → migrations-dnTR0RKq.mjs} +29 -4
- package/dist/migrations-dnTR0RKq.mjs.map +1 -0
- package/dist/{sqlite-journal-Ce8lwVYx.mjs → sqlite-journal-lDduEakl.mjs} +242 -29
- package/dist/sqlite-journal-lDduEakl.mjs.map +1 -0
- package/package.json +1 -1
- package/src/SqliteMessageDeliveryStore.ts +42 -0
- package/src/SqliteSubmissionLedger.ts +118 -3
- package/src/index.ts +1 -0
- package/src/internal/message-delivery-schema.ts +24 -0
- package/src/internal/migrations.ts +7 -2
- package/src/internal/sqlite-journal.ts +263 -36
- package/dist/migrations-BKcJueHB.mjs.map +0 -1
- package/dist/sqlite-journal-Ce8lwVYx.mjs.map +0 -1
|
@@ -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-
|
|
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 =
|
|
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-
|
|
9
|
+
//# sourceMappingURL=SqliteStorageVersion-gA7_96xM.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as CurrentSqliteStorageVersion } from "./SqliteStorageVersion-
|
|
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-
|
|
2
|
+
import { t as CurrentSqliteStorageVersion } from "./migrations-dnTR0RKq.mjs";
|
|
3
3
|
//#region src/SqliteStorageVersion.ts
|
|
4
|
-
var SqliteStorageVersion_exports = /* @__PURE__ */ __exportAll({ CurrentSqliteStorageVersion: () =>
|
|
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-
|
|
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({
|