@effect-agent/storage-cloudflare 0.1.0-beta.42 → 0.1.0-beta.44

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/src/routing.ts CHANGED
@@ -94,6 +94,7 @@ export class PortTransportError extends Schema.TaggedError<PortTransportError>()
94
94
  const safeTransportDiagnostic = (cause: unknown): string => {
95
95
  try {
96
96
  const message = cause instanceof Error ? cause.message : cause;
97
+
97
98
  return boundPortDiagnostic(typeof message === "string" ? message : String(message));
98
99
  } catch {
99
100
  return "[unavailable transport diagnostic]";
@@ -104,6 +105,7 @@ const transportRetryableSignal = (cause: unknown): boolean | undefined => {
104
105
  if (!Predicate.isObjectKeyword(cause)) return undefined;
105
106
  try {
106
107
  const signal = Reflect.get(cause, "retryable");
108
+
107
109
  return typeof signal === "boolean" ? signal : undefined;
108
110
  } catch {
109
111
  return undefined;
@@ -116,6 +118,7 @@ const transportRetryableSignal = (cause: unknown): boolean | undefined => {
116
118
  */
117
119
  export const portTransportFailure = (target: string, cause: unknown): PortTransportError => {
118
120
  const retryable = transportRetryableSignal(cause);
121
+
119
122
  return PortTransportError.make({
120
123
  target,
121
124
  message: safeTransportDiagnostic(cause),
@@ -185,10 +188,13 @@ const routableSubmissionTarget = (
185
188
  });
186
189
  }
187
190
  const separator = submissionId.indexOf(":");
191
+
188
192
  if (separator === -1) return LOCAL;
189
193
  if (!UUID_HEAD_PATTERN.test(submissionId.slice(0, separator))) return LOCAL;
190
194
  const tail = submissionId.slice(separator + 1);
195
+
191
196
  if (tail === localThreadId) return LOCAL;
197
+
192
198
  return yield* decodeThreadId(tail).pipe(
193
199
  Effect.map((threadId): RouteTarget => ({ _tag: "foreign", threadId })),
194
200
  Effect.orElseSucceed(() => LOCAL),
@@ -232,7 +238,9 @@ const makeTransportCall = (transport: ThreadPortTransport["Service"]) =>
232
238
  }),
233
239
  ),
234
240
  );
241
+
235
242
  const raw = yield* transport.call(target, encoded);
243
+
236
244
  return yield* decodePortResponse(raw).pipe(
237
245
  Effect.mapError((error) =>
238
246
  PortProtocolError.make({
@@ -278,14 +286,17 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
278
286
  ): Effect.Effect<ResultSchema["Type"], FailureSchema["Type"] | LedgerError> => {
279
287
  const isExpectedResult = Schema.is(resultSchema);
280
288
  const isExpectedFailure = Schema.is(failureSchema);
289
+
281
290
  return transportCall(target, call).pipe(
282
291
  Effect.mapError(routeFailure(operation, target)),
283
292
  Effect.flatMap(
284
293
  (response): Effect.Effect<ResultSchema["Type"], FailureSchema["Type"] | LedgerError> => {
285
294
  if (response._tag === "PortFailed") {
286
295
  const failure = response.failure;
296
+
287
297
  if (isExpectedFailure(failure)) return Effect.fail(failure);
288
298
  if (failure._tag === "LedgerError") return Effect.fail(failure);
299
+
289
300
  return Effect.fail(
290
301
  LedgerError.make({
291
302
  operation,
@@ -298,6 +309,7 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
298
309
  );
299
310
  }
300
311
  const result = response.result;
312
+
301
313
  if (!isExpectedResult(result)) {
302
314
  return Effect.fail(
303
315
  LedgerError.make({
@@ -308,6 +320,7 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
308
320
  }),
309
321
  );
310
322
  }
323
+
311
324
  return Effect.succeed(result);
312
325
  },
313
326
  ),
@@ -337,6 +350,7 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
337
350
  Effect.flatMap((response) => {
338
351
  if (response._tag === "PortFailed") {
339
352
  if (response.failure._tag === "LedgerError") return Effect.fail(response.failure);
353
+
340
354
  return Effect.succeed(
341
355
  AdmissionIndeterminate.make({
342
356
  reason: boundPortDiagnostic(
@@ -356,6 +370,7 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
356
370
  }),
357
371
  );
358
372
  }
373
+
359
374
  return Effect.succeed(response.result.resolution);
360
375
  }),
361
376
  Effect.catchTags({
@@ -408,18 +423,24 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
408
423
  snapshot: RecoverySnapshot,
409
424
  ): Effect.fn.Return<RecoverySnapshot, LedgerError> {
410
425
  const operation = "ledger load recovery snapshot";
426
+
411
427
  const attachments = new Map(
412
428
  snapshot.childAttachments.map((attachment) => [attachment.childSubmissionId, attachment]),
413
429
  );
430
+
414
431
  let enriched = false;
432
+
415
433
  for (const reservation of snapshot.childReservations) {
416
434
  const childSubmissionId = reservation.childSubmissionId;
435
+
417
436
  if (childSubmissionId === undefined || attachments.has(childSubmissionId)) continue;
418
437
  const target = yield* submissionTarget(operation, childSubmissionId);
438
+
419
439
  // A local or opaque child identity was already answered authoritatively by the local
420
440
  // facet; absence there means the child admission never committed.
421
441
  if (target._tag !== "foreign") continue;
422
442
  const child = yield* foreignLookupById(operation, target.threadId, childSubmissionId);
443
+
423
444
  if (Option.isNone(child)) continue;
424
445
  attachments.set(
425
446
  childSubmissionId,
@@ -437,11 +458,14 @@ const makeRoutedLedgerServices = Effect.fn("DoPortRouting.makeRoutedLedgerServic
437
458
  if (!enriched) return snapshot;
438
459
  // Rebuild in reservation (parent Tool Call) order, the order the local facet documents.
439
460
  const ordered: Array<ChildAttachmentSnapshot> = [];
461
+
440
462
  for (const reservation of snapshot.childReservations) {
441
463
  if (reservation.childSubmissionId === undefined) continue;
442
464
  const attachment = attachments.get(reservation.childSubmissionId);
465
+
443
466
  if (attachment !== undefined) ordered.push(attachment);
444
467
  }
468
+
445
469
  return RecoverySnapshot.make({ ...snapshot, childAttachments: ordered });
446
470
  });
447
471
 
@@ -708,6 +732,7 @@ const makeRoutedStoreServices = Effect.fn("DoPortRouting.makeRoutedStoreServices
708
732
  ): Effect.Effect<ResultSchema["Type"], FailureSchema["Type"] | ThreadStoreError> => {
709
733
  const isExpectedResult = Schema.is(resultSchema);
710
734
  const isExpectedFailure = Schema.is(failureSchema);
735
+
711
736
  return transportCall(target, call).pipe(
712
737
  Effect.mapError(routeFailure(operation, target)),
713
738
  Effect.flatMap(
@@ -716,8 +741,10 @@ const makeRoutedStoreServices = Effect.fn("DoPortRouting.makeRoutedStoreServices
716
741
  ): Effect.Effect<ResultSchema["Type"], FailureSchema["Type"] | ThreadStoreError> => {
717
742
  if (response._tag === "PortFailed") {
718
743
  const failure = response.failure;
744
+
719
745
  if (isExpectedFailure(failure)) return Effect.fail(failure);
720
746
  if (failure._tag === "ThreadStoreError") return Effect.fail(failure);
747
+
721
748
  return Effect.fail(
722
749
  ThreadStoreError.make({
723
750
  operation,
@@ -730,6 +757,7 @@ const makeRoutedStoreServices = Effect.fn("DoPortRouting.makeRoutedStoreServices
730
757
  );
731
758
  }
732
759
  const result = response.result;
760
+
733
761
  if (!isExpectedResult(result)) {
734
762
  return Effect.fail(
735
763
  ThreadStoreError.make({
@@ -740,6 +768,7 @@ const makeRoutedStoreServices = Effect.fn("DoPortRouting.makeRoutedStoreServices
740
768
  }),
741
769
  );
742
770
  }
771
+
743
772
  return Effect.succeed(result);
744
773
  },
745
774
  ),
@@ -885,6 +914,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
885
914
  switch (request._tag) {
886
915
  case "LedgerAdmit": {
887
916
  const ledger = yield* SubmissionLedger;
917
+
888
918
  return yield* capture(
889
919
  ledger
890
920
  .admit(request.request)
@@ -893,12 +923,14 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
893
923
  }
894
924
  case "LedgerMarkReady": {
895
925
  const ledger = yield* SubmissionLedger;
926
+
896
927
  return yield* capture(
897
928
  ledger.markReady(request.request).pipe(Effect.map(() => LedgerMarkReadyResult.make({}))),
898
929
  );
899
930
  }
900
931
  case "LedgerLookup": {
901
932
  const ledger = yield* SubmissionLedger;
933
+
902
934
  return yield* capture(
903
935
  ledger
904
936
  .lookup(request.request)
@@ -913,6 +945,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
913
945
  }
914
946
  case "LedgerResolveAdmission": {
915
947
  const ledger = yield* SubmissionLedger;
948
+
916
949
  return yield* capture(
917
950
  ledger
918
951
  .resolveAdmission(request.request)
@@ -921,6 +954,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
921
954
  }
922
955
  case "LedgerRequestAbort": {
923
956
  const ledger = yield* SubmissionLedger;
957
+
924
958
  return yield* capture(
925
959
  ledger
926
960
  .requestAbort(request.request)
@@ -929,6 +963,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
929
963
  }
930
964
  case "LedgerRecordChildSettled": {
931
965
  const ledger = yield* SubmissionLedger;
966
+
932
967
  return yield* capture(
933
968
  ledger
934
969
  .recordChildSettled(request.request)
@@ -937,12 +972,14 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
937
972
  }
938
973
  case "StoreMaterialize": {
939
974
  const store = yield* ThreadStore;
975
+
940
976
  return yield* capture(
941
977
  store.materialize(request.request).pipe(Effect.map(() => StoreMaterializeResult.make({}))),
942
978
  );
943
979
  }
944
980
  case "StoreAppend": {
945
981
  const store = yield* ThreadStore;
982
+
946
983
  return yield* capture(
947
984
  store
948
985
  .append(request.request)
@@ -951,6 +988,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
951
988
  }
952
989
  case "StoreReadPage": {
953
990
  const store = yield* ThreadStore;
991
+
954
992
  return yield* capture(
955
993
  store.read(request.request).pipe(
956
994
  Stream.runCollect,
@@ -960,6 +998,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
960
998
  }
961
999
  case "StoreInspectTail": {
962
1000
  const store = yield* ThreadStore;
1001
+
963
1002
  return yield* capture(
964
1003
  store
965
1004
  .inspectTail(request.request)
@@ -968,6 +1007,7 @@ export const executePortRequest = Effect.fn("DoPortRouting.executePortRequest")(
968
1007
  }
969
1008
  case "StoreExport": {
970
1009
  const store = yield* ThreadStore;
1010
+
971
1011
  return yield* capture(
972
1012
  store
973
1013
  .export(request.request)
@@ -1010,6 +1050,7 @@ export const handleEncodedPortRequest = Effect.fn("DoPortRouting.handleEncodedPo
1010
1050
  ),
1011
1051
  ),
1012
1052
  );
1053
+
1013
1054
  return yield* encodePortResponse(response).pipe(
1014
1055
  Effect.catch((error) =>
1015
1056
  Effect.succeed(