@effect-agent/platform-cloudflare 0.1.0-beta.84 → 0.1.0-beta.86

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.
Files changed (81) hide show
  1. package/dist/Alarm.d.mts +4 -4
  2. package/dist/Alarm.mjs +6 -6
  3. package/dist/Alarm.mjs.map +1 -1
  4. package/dist/BrowserRestCapture.d.mts +3 -3
  5. package/dist/BrowserRestCapture.mjs +3 -3
  6. package/dist/BrowserRestCapture.mjs.map +1 -1
  7. package/dist/BrowserRestCrawl.d.mts +2 -2
  8. package/dist/BrowserRestCrawl.mjs +3 -3
  9. package/dist/BrowserRestCrawl.mjs.map +1 -1
  10. package/dist/CloudflareBindings.d.mts +2 -2
  11. package/dist/CloudflareBindings.mjs +2 -2
  12. package/dist/CloudflareBindings.mjs.map +1 -1
  13. package/dist/{CloudflareBrowser-D4YqaTAl.mjs → CloudflareBrowser-DV6kya1H.mjs} +4 -4
  14. package/dist/CloudflareBrowser-DV6kya1H.mjs.map +1 -0
  15. package/dist/{CloudflareBrowser-DJq53niJ.d.mts → CloudflareBrowser-Doe1M7R5.d.mts} +4 -4
  16. package/dist/CloudflareBrowser.d.mts +1 -1
  17. package/dist/CloudflareBrowser.mjs +1 -1
  18. package/dist/CloudflareCodeMode.d.mts +2 -2
  19. package/dist/CloudflareCodeMode.mjs +2 -2
  20. package/dist/CloudflareCodeMode.mjs.map +1 -1
  21. package/dist/CloudflareConfig.mjs +3 -3
  22. package/dist/CloudflareConfig.mjs.map +1 -1
  23. package/dist/CloudflareMemory.d.mts +26 -26
  24. package/dist/CloudflareMemory.mjs +16 -16
  25. package/dist/CloudflareMemory.mjs.map +1 -1
  26. package/dist/CloudflareScheduling.d.mts +3 -3
  27. package/dist/CloudflareScheduling.mjs +11 -11
  28. package/dist/CloudflareScheduling.mjs.map +1 -1
  29. package/dist/CloudflareSubscriptions.d.mts +5 -5
  30. package/dist/CloudflareSubscriptions.mjs +20 -14
  31. package/dist/CloudflareSubscriptions.mjs.map +1 -1
  32. package/dist/CloudflareThreadClient.d.mts +228 -18
  33. package/dist/CloudflareThreadClient.mjs +12 -12
  34. package/dist/CloudflareThreadClient.mjs.map +1 -1
  35. package/dist/InteractiveBrowser.d.mts +2 -2
  36. package/dist/InteractiveBrowser.mjs +18 -18
  37. package/dist/InteractiveBrowser.mjs.map +1 -1
  38. package/dist/ProtectedBrowser.d.mts +2 -2
  39. package/dist/ProtectedBrowser.mjs +14 -14
  40. package/dist/ProtectedBrowser.mjs.map +1 -1
  41. package/dist/{ThreadObject-mmWMMWdY.mjs → ThreadObject-B4gJ7t0d.mjs} +29 -27
  42. package/dist/ThreadObject-B4gJ7t0d.mjs.map +1 -0
  43. package/dist/{ThreadObject-BS1gRV0V.d.mts → ThreadObject-BT0c-_vx.d.mts} +61 -65
  44. package/dist/ThreadObject.d.mts +1 -1
  45. package/dist/ThreadObject.mjs +1 -1
  46. package/dist/WakeScheduler.d.mts +1 -1
  47. package/dist/WakeScheduler.mjs +2 -2
  48. package/dist/WakeScheduler.mjs.map +1 -1
  49. package/dist/{browser-session-lifecycle-CUbVfEgP.mjs → browser-session-lifecycle-CmbQABHC.mjs} +5 -5
  50. package/dist/browser-session-lifecycle-CmbQABHC.mjs.map +1 -0
  51. package/dist/index.d.mts +2 -2
  52. package/dist/index.mjs +2 -2
  53. package/dist/{prepared-admission-DSi55W-7.mjs → prepared-admission-DU0_T-ev.mjs} +7 -7
  54. package/dist/prepared-admission-DU0_T-ev.mjs.map +1 -0
  55. package/package.json +1 -1
  56. package/src/Alarm.ts +19 -19
  57. package/src/BrowserRestCapture.ts +3 -3
  58. package/src/BrowserRestCrawl.ts +13 -13
  59. package/src/CloudflareBindings.ts +2 -2
  60. package/src/CloudflareCodeMode.ts +4 -4
  61. package/src/CloudflareConfig.ts +3 -3
  62. package/src/CloudflareMemory.ts +29 -29
  63. package/src/CloudflareScheduling.ts +13 -13
  64. package/src/CloudflareSubscriptions.ts +28 -32
  65. package/src/CloudflareThreadClient.ts +14 -14
  66. package/src/InteractiveBrowser.ts +34 -37
  67. package/src/ThreadObject.ts +14 -14
  68. package/src/WakeScheduler.ts +2 -2
  69. package/src/internal/browser-quick-action.ts +4 -4
  70. package/src/internal/browser-session-lifecycle.ts +8 -8
  71. package/src/internal/layers.ts +47 -47
  72. package/src/internal/message-delivery.ts +9 -10
  73. package/src/internal/prepared-admission.ts +7 -7
  74. package/src/internal/transport.ts +1 -1
  75. package/src/protected-browser/binding.ts +3 -3
  76. package/src/protected-browser/native.ts +3 -3
  77. package/src/protected-browser/policy.ts +42 -44
  78. package/dist/CloudflareBrowser-D4YqaTAl.mjs.map +0 -1
  79. package/dist/ThreadObject-mmWMMWdY.mjs.map +0 -1
  80. package/dist/browser-session-lifecycle-CUbVfEgP.mjs.map +0 -1
  81. package/dist/prepared-admission-DSi55W-7.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- import { A as ThreadPublicationOptions, C as portCall, D as CloudflareDurableRuntimeOptions, E as CloudflareDurableRuntimeInitializationError, M as layerConfig, N as layerHostConfig, O as CloudflareDurableRuntimeServices, P as layerInHost, S as make, T as CloudflareBootstrapServices, _ as decodeAdminVerifyRequest, a as AdminVerifyRequest, b as encodeAdminResponse, c as Instance, d as RetryExecuted, g as decodeAdminResponse, h as decodeAdminExplainRequest, i as AdminResponse, j as layer, k as ThreadObjectPorts, l as ObligationsScanned, m as VerifiedIntegrity, n as AdminFailed, o as Class, p as ThreadRpcOperation, r as AdminFailure, s as ExplainedRecovery, t as AdminExplainRequest, u as Options, v as decodeObligationThresholds, w as submit, x as handleRpc, y as decodeRetryCommand } from "./ThreadObject-BS1gRV0V.mjs";
1
+ import { A as ThreadPublicationOptions, C as portCall, D as CloudflareDurableRuntimeOptions, E as CloudflareDurableRuntimeInitializationError, M as layerConfig, N as layerHostConfig, O as CloudflareDurableRuntimeServices, P as layerInHost, S as make, T as CloudflareBootstrapServices, _ as decodeAdminVerifyRequest, a as AdminVerifyRequest, b as encodeAdminResponse, c as Instance, d as RetryExecuted, g as decodeAdminResponse, h as decodeAdminExplainRequest, i as AdminResponse, j as layer, k as ThreadObjectPorts, l as ObligationsScanned, m as VerifiedIntegrity, n as AdminFailed, o as Class, p as ThreadRpcOperation, r as AdminFailure, s as ExplainedRecovery, t as AdminExplainRequest, u as Options, v as decodeObligationThresholds, w as submit, x as handleRpc, y as decodeRetryCommand } from "./ThreadObject-BT0c-_vx.mjs";
2
2
  export { AdminExplainRequest, AdminFailed, AdminFailure, AdminResponse, AdminVerifyRequest, type CloudflareBootstrapServices as BootstrapServices, Class, ExplainedRecovery, type CloudflareDurableRuntimeInitializationError as InitializationError, Instance, ObligationsScanned, Options, type ThreadPublicationOptions as PublicationOptions, RetryExecuted, type CloudflareDurableRuntimeOptions as RuntimeOptions, type CloudflareDurableRuntimeServices as Services, ThreadObjectPorts, ThreadRpcOperation, VerifiedIntegrity, decodeAdminExplainRequest, decodeAdminResponse, decodeAdminVerifyRequest, decodeObligationThresholds, decodeRetryCommand, encodeAdminResponse, handleRpc, layer, layerConfig, layerHostConfig, layerInHost, make, portCall, submit };
@@ -1,3 +1,3 @@
1
1
  import "./CloudflareThreadClient.mjs";
2
- import { C as layer, E as layerInHost, S as ThreadObjectPorts, T as layerHostConfig, _ as encodeAdminResponse, a as AdminVerifyRequest, b as portCall, c as RetryExecuted, d as VerifiedIntegrity, f as decodeAdminExplainRequest, g as decodeRetryCommand, h as decodeObligationThresholds, i as AdminResponse, m as decodeAdminVerifyRequest, n as AdminFailed, o as ExplainedRecovery, p as decodeAdminResponse, r as AdminFailure, s as ObligationsScanned, t as AdminExplainRequest, u as ThreadRpcOperation, v as handleRpc, w as layerConfig, x as submit, y as make } from "./ThreadObject-mmWMMWdY.mjs";
2
+ import { C as layer, E as layerInHost, S as ThreadObjectPorts, T as layerHostConfig, _ as encodeAdminResponse, a as AdminVerifyRequest, b as portCall, c as RetryExecuted, d as VerifiedIntegrity, f as decodeAdminExplainRequest, g as decodeRetryCommand, h as decodeObligationThresholds, i as AdminResponse, m as decodeAdminVerifyRequest, n as AdminFailed, o as ExplainedRecovery, p as decodeAdminResponse, r as AdminFailure, s as ObligationsScanned, t as AdminExplainRequest, u as ThreadRpcOperation, v as handleRpc, w as layerConfig, x as submit, y as make } from "./ThreadObject-B4gJ7t0d.mjs";
3
3
  export { AdminExplainRequest, AdminFailed, AdminFailure, AdminResponse, AdminVerifyRequest, ExplainedRecovery, ObligationsScanned, RetryExecuted, ThreadObjectPorts, ThreadRpcOperation, VerifiedIntegrity, decodeAdminExplainRequest, decodeAdminResponse, decodeAdminVerifyRequest, decodeObligationThresholds, decodeRetryCommand, encodeAdminResponse, handleRpc, layer, layerConfig, layerHostConfig, layerInHost, make, portCall, submit };
@@ -1,7 +1,7 @@
1
1
  import { ThreadObjectNamespace, ThreadObjectPlacement } from "./CloudflareBindings.mjs";
2
2
  import { DurableAlarmService } from "./Alarm.mjs";
3
3
  import { Layer } from "effect";
4
- import { WakeScheduler } from "@effect-agent/thread/WakeScheduler";
4
+ import { WakeScheduler } from "effect-agent/wake-scheduler";
5
5
  declare namespace WakeScheduler_d_exports {
6
6
  export { cloudflareWakeSchedulerLayer };
7
7
  }
@@ -2,9 +2,9 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
2
  import { ThreadObjectNamespace, ThreadObjectPlacement, callThreadObject } from "./CloudflareBindings.mjs";
3
3
  import { r as safeCauseMessage } from "./boundary-BguazVkh.mjs";
4
4
  import { DurableAlarmService } from "./Alarm.mjs";
5
- import "@effect-agent/core/Identifiers";
6
5
  import { Effect, Layer, PubSub, Schema, Stream } from "effect";
7
- import { WakeScheduler, makeWakeSubscriptionHub } from "@effect-agent/thread/WakeScheduler";
6
+ import "effect-agent/identifiers";
7
+ import { WakeScheduler, makeWakeSubscriptionHub } from "effect-agent/wake-scheduler";
8
8
  //#region src/WakeScheduler.ts
9
9
  var WakeScheduler_exports = /* @__PURE__ */ __exportAll({ cloudflareWakeSchedulerLayer: () => cloudflareWakeSchedulerLayer });
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"WakeScheduler.mjs","names":[],"sources":["../src/WakeScheduler.ts"],"sourcesContent":["import { type ThreadId } from \"@effect-agent/core/Identifiers\";\nimport { makeWakeSubscriptionHub, WakeScheduler } from \"@effect-agent/thread/WakeScheduler\";\nimport { Effect, Layer, PubSub, Schema, Stream } from \"effect\";\n\nimport { DurableAlarmService } from \"./Alarm.ts\";\nimport {\n callThreadObject,\n ThreadObjectPlacement,\n ThreadObjectNamespace,\n} from \"./CloudflareBindings.ts\";\nimport { safeCauseMessage } from \"./internal/boundary.ts\";\n\n/**\n * Bounded in-memory wake buffer for same-incarnation `awaitSettlement` subscribers. Wake\n * hints are droppable by contract (consumers pair every subscription with ledger polls), so\n * a full buffer slides out the oldest hint and an eviction simply loses the buffer — the\n * poll interval and the persisted alarm keep liveness (persistence §14).\n */\nconst WAKE_BUFFER_CAPACITY = 1_024;\n\n/** A remote wake stub call failed; always swallowed and logged (hints are droppable). */\nclass RemoteWakeDropped extends Schema.TaggedError<RemoteWakeDropped>()(\"RemoteWakeDropped\", {\n threadId: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n}) {}\n\n/**\n * The DC `WakeScheduler` (plan §1.4):\n *\n * - `notify(local)` → `setAlarm(now)` — durable, cheap, coalescing (the alarm slot keeps the\n * earliest deadline) — plus a same-incarnation PubSub hint for `awaitSettlement` waiters.\n * - `notify(remote)` → fire-and-forget `wake()` on the owning Object's stub with every error\n * swallowed and logged: hints are droppable, and the target's own alarm/scan pairing (the\n * maintenance pass re-polls unsettled children) guarantees liveness without this call.\n * - `wakes` → the bounded sliding PubSub only. No important state lives in memory: the\n * subscription accelerates waiters within one incarnation and the settlement poll interval\n * is the correctness path.\n */\nexport const cloudflareWakeSchedulerLayer: Layer.Layer<\n WakeScheduler,\n never,\n DurableAlarmService | ThreadObjectPlacement | ThreadObjectNamespace\n> = Layer.effect(WakeScheduler)(\n Effect.gen(function* () {\n const alarm = yield* DurableAlarmService;\n const placement = yield* ThreadObjectPlacement;\n const namespace = yield* ThreadObjectNamespace;\n const hints = yield* PubSub.sliding<ThreadId>(WAKE_BUFFER_CAPACITY);\n const progress = yield* makeWakeSubscriptionHub;\n\n yield* Effect.addFinalizer(() => PubSub.shutdown(hints));\n\n const notifyLocal = (threadId: ThreadId) =>\n progress.notify(threadId).pipe(\n Effect.andThen(PubSub.publish(hints, threadId)),\n Effect.andThen(alarm.scheduleNow),\n Effect.catch((error) =>\n // `notify` never fails by contract; a failed alarm write degrades to \"hint lost\"\n // and the pass re-arm (or the next entry point's pre-arm) restores the invariant.\n Effect.logWarning(\"CloudflareWakeScheduler: local alarm wake failed\", error),\n ),\n Effect.asVoid,\n );\n\n const notifyRemote = (threadId: ThreadId) =>\n callThreadObject(\n threadId,\n (target) => target.wake(),\n (cause) =>\n RemoteWakeDropped.make({\n threadId,\n message: safeCauseMessage(cause, \"The remote wake failed without a diagnostic\"),\n cause,\n }),\n ).pipe(\n Effect.provideService(ThreadObjectNamespace, namespace),\n Effect.catch((error) =>\n Effect.logWarning(`CloudflareWakeScheduler: remote wake of ${threadId} dropped`, error),\n ),\n Effect.asVoid,\n );\n\n return WakeScheduler.of({\n notify: (threadId) =>\n placement.ownsThread(threadId) ? notifyLocal(threadId) : notifyRemote(threadId),\n subscribe: progress.subscribe,\n wakes: Stream.fromPubSub(hints),\n });\n }),\n);\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,uBAAuB;;AAG7B,IAAM,oBAAN,cAAgC,OAAO,YAA+B,CAAC,CAAC,qBAAqB;CAC3F,UAAU,OAAO;CACjB,SAAS,OAAO;CAChB,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;AAC3C,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;AAcJ,MAAa,+BAIT,MAAM,OAAO,aAAa,CAAC,CAC7B,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO;CACrB,MAAM,YAAY,OAAO;CACzB,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,OAAO,QAAkB,oBAAoB;CAClE,MAAM,WAAW,OAAO;CAExB,OAAO,OAAO,mBAAmB,OAAO,SAAS,KAAK,CAAC;CAEvD,MAAM,eAAe,aACnB,SAAS,OAAO,QAAQ,CAAC,CAAC,KACxB,OAAO,QAAQ,OAAO,QAAQ,OAAO,QAAQ,CAAC,GAC9C,OAAO,QAAQ,MAAM,WAAW,GAChC,OAAO,OAAO,UAGZ,OAAO,WAAW,oDAAoD,KAAK,CAC7E,GACA,OAAO,MACT;CAEF,MAAM,gBAAgB,aACpB,iBACE,WACC,WAAW,OAAO,KAAK,IACvB,UACC,kBAAkB,KAAK;EACrB;EACA,SAAS,iBAAiB,OAAO,6CAA6C;EAC9E;CACF,CAAC,CACL,CAAC,CAAC,KACA,OAAO,eAAe,uBAAuB,SAAS,GACtD,OAAO,OAAO,UACZ,OAAO,WAAW,2CAA2C,SAAS,WAAW,KAAK,CACxF,GACA,OAAO,MACT;CAEF,OAAO,cAAc,GAAG;EACtB,SAAS,aACP,UAAU,WAAW,QAAQ,IAAI,YAAY,QAAQ,IAAI,aAAa,QAAQ;EAChF,WAAW,SAAS;EACpB,OAAO,OAAO,WAAW,KAAK;CAChC,CAAC;AACH,CAAC,CACH"}
1
+ {"version":3,"file":"WakeScheduler.mjs","names":[],"sources":["../src/WakeScheduler.ts"],"sourcesContent":["import { Effect, Layer, PubSub, Schema, Stream } from \"effect\";\nimport { type ThreadId } from \"effect-agent/identifiers\";\nimport { makeWakeSubscriptionHub, WakeScheduler } from \"effect-agent/wake-scheduler\";\n\nimport { DurableAlarmService } from \"./Alarm.ts\";\nimport {\n callThreadObject,\n ThreadObjectPlacement,\n ThreadObjectNamespace,\n} from \"./CloudflareBindings.ts\";\nimport { safeCauseMessage } from \"./internal/boundary.ts\";\n\n/**\n * Bounded in-memory wake buffer for same-incarnation `awaitSettlement` subscribers. Wake\n * hints are droppable by contract (consumers pair every subscription with ledger polls), so\n * a full buffer slides out the oldest hint and an eviction simply loses the buffer — the\n * poll interval and the persisted alarm keep liveness (persistence §14).\n */\nconst WAKE_BUFFER_CAPACITY = 1_024;\n\n/** A remote wake stub call failed; always swallowed and logged (hints are droppable). */\nclass RemoteWakeDropped extends Schema.TaggedError<RemoteWakeDropped>()(\"RemoteWakeDropped\", {\n threadId: Schema.String,\n message: Schema.String,\n cause: Schema.optionalKey(Schema.Defect()),\n}) {}\n\n/**\n * The DC `WakeScheduler` (plan §1.4):\n *\n * - `notify(local)` → `setAlarm(now)` — durable, cheap, coalescing (the alarm slot keeps the\n * earliest deadline) — plus a same-incarnation PubSub hint for `awaitSettlement` waiters.\n * - `notify(remote)` → fire-and-forget `wake()` on the owning Object's stub with every error\n * swallowed and logged: hints are droppable, and the target's own alarm/scan pairing (the\n * maintenance pass re-polls unsettled children) guarantees liveness without this call.\n * - `wakes` → the bounded sliding PubSub only. No important state lives in memory: the\n * subscription accelerates waiters within one incarnation and the settlement poll interval\n * is the correctness path.\n */\nexport const cloudflareWakeSchedulerLayer: Layer.Layer<\n WakeScheduler,\n never,\n DurableAlarmService | ThreadObjectPlacement | ThreadObjectNamespace\n> = Layer.effect(WakeScheduler)(\n Effect.gen(function* () {\n const alarm = yield* DurableAlarmService;\n const placement = yield* ThreadObjectPlacement;\n const namespace = yield* ThreadObjectNamespace;\n const hints = yield* PubSub.sliding<ThreadId>(WAKE_BUFFER_CAPACITY);\n const progress = yield* makeWakeSubscriptionHub;\n\n yield* Effect.addFinalizer(() => PubSub.shutdown(hints));\n\n const notifyLocal = (threadId: ThreadId) =>\n progress.notify(threadId).pipe(\n Effect.andThen(PubSub.publish(hints, threadId)),\n Effect.andThen(alarm.scheduleNow),\n Effect.catch((error) =>\n // `notify` never fails by contract; a failed alarm write degrades to \"hint lost\"\n // and the pass re-arm (or the next entry point's pre-arm) restores the invariant.\n Effect.logWarning(\"CloudflareWakeScheduler: local alarm wake failed\", error),\n ),\n Effect.asVoid,\n );\n\n const notifyRemote = (threadId: ThreadId) =>\n callThreadObject(\n threadId,\n (target) => target.wake(),\n (cause) =>\n RemoteWakeDropped.make({\n threadId,\n message: safeCauseMessage(cause, \"The remote wake failed without a diagnostic\"),\n cause,\n }),\n ).pipe(\n Effect.provideService(ThreadObjectNamespace, namespace),\n Effect.catch((error) =>\n Effect.logWarning(`CloudflareWakeScheduler: remote wake of ${threadId} dropped`, error),\n ),\n Effect.asVoid,\n );\n\n return WakeScheduler.of({\n notify: (threadId) =>\n placement.ownsThread(threadId) ? notifyLocal(threadId) : notifyRemote(threadId),\n subscribe: progress.subscribe,\n wakes: Stream.fromPubSub(hints),\n });\n }),\n);\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,uBAAuB;;AAG7B,IAAM,oBAAN,cAAgC,OAAO,YAA+B,CAAC,CAAC,qBAAqB;CAC3F,UAAU,OAAO;CACjB,SAAS,OAAO;CAChB,OAAO,OAAO,YAAY,OAAO,OAAO,CAAC;AAC3C,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;AAcJ,MAAa,+BAIT,MAAM,OAAO,aAAa,CAAC,CAC7B,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO;CACrB,MAAM,YAAY,OAAO;CACzB,MAAM,YAAY,OAAO;CACzB,MAAM,QAAQ,OAAO,OAAO,QAAkB,oBAAoB;CAClE,MAAM,WAAW,OAAO;CAExB,OAAO,OAAO,mBAAmB,OAAO,SAAS,KAAK,CAAC;CAEvD,MAAM,eAAe,aACnB,SAAS,OAAO,QAAQ,CAAC,CAAC,KACxB,OAAO,QAAQ,OAAO,QAAQ,OAAO,QAAQ,CAAC,GAC9C,OAAO,QAAQ,MAAM,WAAW,GAChC,OAAO,OAAO,UAGZ,OAAO,WAAW,oDAAoD,KAAK,CAC7E,GACA,OAAO,MACT;CAEF,MAAM,gBAAgB,aACpB,iBACE,WACC,WAAW,OAAO,KAAK,IACvB,UACC,kBAAkB,KAAK;EACrB;EACA,SAAS,iBAAiB,OAAO,6CAA6C;EAC9E;CACF,CAAC,CACL,CAAC,CAAC,KACA,OAAO,eAAe,uBAAuB,SAAS,GACtD,OAAO,OAAO,UACZ,OAAO,WAAW,2CAA2C,SAAS,WAAW,KAAK,CACxF,GACA,OAAO,MACT;CAEF,OAAO,cAAc,GAAG;EACtB,SAAS,aACP,UAAU,WAAW,QAAQ,IAAI,YAAY,QAAQ,IAAI,aAAa,QAAQ;EAChF,WAAW,SAAS;EACpB,OAAO,OAAO,WAAW,KAAK;CAChC,CAAC;AACH,CAAC,CACH"}
@@ -57,17 +57,17 @@ var BrowserRunSessionLifecycle = class extends Context.Service()("@effect-agent/
57
57
  catch: () => new BrowserRunCleanupError({ reason: "malformed" })
58
58
  });
59
59
  if (response.status === 404) {
60
- const absent = Schema.decodeUnknownOption(Schema.fromJsonString(Absent))(body, { onExcessProperty: "error" });
60
+ const absent = Schema.decodeOption(Schema.fromJsonString(Absent))(body, { onExcessProperty: "error" });
61
61
  if (Option.isSome(absent)) return true;
62
62
  return yield* new BrowserRunCleanupError({ reason: "malformed" });
63
63
  }
64
- if (method === "DELETE") return (yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Closed))(body).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "malformed" })))).status === "closed";
65
- const result = yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Metadata))(body).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "malformed" })));
64
+ if (method === "DELETE") return (yield* Schema.decodeEffect(Schema.fromJsonString(Closed))(body).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "malformed" })))).status === "closed";
65
+ const result = yield* Schema.decodeEffect(Schema.fromJsonString(Metadata))(body).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "malformed" })));
66
66
  if (result.sessionId !== sessionId) return yield* new BrowserRunCleanupError({ reason: "malformed" });
67
67
  return result.endTime !== void 0 && result.endTime > 0;
68
68
  });
69
69
  return { close: Effect.fn("BrowserRunSessionLifecycle.close")(function* (sessionId) {
70
- const id = yield* Schema.decodeUnknownEffect(Identity)(Redacted.value(sessionId)).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "configuration" })));
70
+ const id = yield* Schema.decodeEffect(Identity)(Redacted.value(sessionId)).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: "configuration" })));
71
71
  if (yield* request("DELETE", id)) return;
72
72
  for (let read = 0; read < 2; read++) if (yield* request("GET", id)) return;
73
73
  return yield* new BrowserRunCleanupError({ reason: "pending" });
@@ -81,4 +81,4 @@ var BrowserRunSessionLifecycle = class extends Context.Service()("@effect-agent/
81
81
  //#endregion
82
82
  export { BrowserRunSessionLifecycle as n, BrowserRunCleanupError as t };
83
83
 
84
- //# sourceMappingURL=browser-session-lifecycle-CUbVfEgP.mjs.map
84
+ //# sourceMappingURL=browser-session-lifecycle-CmbQABHC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-session-lifecycle-CmbQABHC.mjs","names":[],"sources":["../src/internal/browser-session-lifecycle.ts"],"sourcesContent":["import { Context, Effect, Layer, Option, Redacted, Schema, Stream } from \"effect\";\nimport { FetchHttpClient, HttpClient, HttpClientRequest } from \"effect/unstable/http\";\n\nexport class BrowserRunCleanupError extends Schema.TaggedError<BrowserRunCleanupError>()(\n \"BrowserRunCleanupError\",\n {\n reason: Schema.Literals([\n \"configuration\",\n \"authorization\",\n \"rate-limited\",\n \"provider\",\n \"malformed\",\n \"timeout\",\n \"pending\",\n ]),\n status: Schema.optionalKey(Schema.Int),\n },\n) {}\n\nexport interface BrowserRunLifecycleOptions {\n readonly accountId: string;\n readonly apiToken: Redacted.Redacted<string>;\n}\n\nconst Identity = Schema.String.check(Schema.isUUID());\nconst Account = Schema.String.check(Schema.isPattern(/^[a-f0-9]{32}$/));\nconst Closed = Schema.Struct({ status: Schema.Literals([\"closing\", \"closed\"]) });\nconst Metadata = Schema.Struct({ sessionId: Identity, endTime: Schema.optionalKey(Schema.Finite) });\n// This exact provider response is accepted only on a fixed-origin, authenticated,\n// exact-session request. An arbitrary 404 or a listing omission is never absence.\nconst Absent = Schema.Struct({ error: Schema.Literal(\"Session not found\") });\n\nexport class BrowserRunSessionLifecycle extends Context.Service<\n BrowserRunSessionLifecycle,\n {\n readonly close: (\n sessionId: Redacted.Redacted<string>,\n ) => Effect.Effect<void, BrowserRunCleanupError>;\n }\n>()(\"@effect-agent/platform-cloudflare/BrowserRunSessionLifecycle\") {\n static layer(options: BrowserRunLifecycleOptions) {\n return Layer.effect(\n this,\n Effect.gen(function* () {\n if (\n !Schema.is(Account)(options.accountId) ||\n Redacted.value(options.apiToken).length === 0\n ) {\n return yield* new BrowserRunCleanupError({ reason: \"configuration\" });\n }\n const client = yield* HttpClient.HttpClient;\n\n const request = Effect.fn(\"BrowserRunSessionLifecycle.request\")(function* (\n method: \"GET\" | \"DELETE\",\n sessionId: string,\n ) {\n const path = method === \"DELETE\" ? \"browser\" : \"session\";\n\n const response = yield* client\n .execute(\n HttpClientRequest.make(method)(\n `https://api.cloudflare.com/client/v4/accounts/${options.accountId}/browser-rendering/devtools/${path}/${sessionId}`,\n ).pipe(HttpClientRequest.bearerToken(options.apiToken)),\n )\n .pipe(\n // workerd supports manual/follow, not error. Reject every redirect below.\n Effect.provideService(FetchHttpClient.RequestInit, { redirect: \"manual\" }),\n Effect.mapError(() => new BrowserRunCleanupError({ reason: \"provider\" })),\n );\n\n if (response.status === 401 || response.status === 403)\n return yield* new BrowserRunCleanupError({\n reason: \"authorization\",\n status: response.status,\n });\n if (response.status === 429)\n return yield* new BrowserRunCleanupError({\n reason: \"rate-limited\",\n status: response.status,\n });\n if (response.status !== 200 && response.status !== 404)\n return yield* new BrowserRunCleanupError({\n reason: \"provider\",\n status: response.status,\n });\n if (response.headers[\"content-type\"]?.split(\";\", 1)[0]?.trim() !== \"application/json\")\n return yield* new BrowserRunCleanupError({ reason: \"malformed\" });\n\n const bytes = yield* Stream.runFoldEffect(\n response.stream,\n () => new Uint8Array(),\n (body, chunk) => {\n if (body.byteLength + chunk.byteLength > 16_384)\n return Effect.fail(new BrowserRunCleanupError({ reason: \"malformed\" }));\n const combined = new Uint8Array(body.byteLength + chunk.byteLength);\n\n combined.set(body);\n combined.set(chunk, body.byteLength);\n\n return Effect.succeed(combined);\n },\n ).pipe(Effect.mapError(() => new BrowserRunCleanupError({ reason: \"malformed\" })));\n\n const body = yield* Effect.try({\n try: () => new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: false }).decode(bytes),\n catch: () => new BrowserRunCleanupError({ reason: \"malformed\" }),\n });\n\n if (response.status === 404) {\n const absent = Schema.decodeOption(Schema.fromJsonString(Absent))(body, {\n onExcessProperty: \"error\",\n });\n\n if (Option.isSome(absent)) return true;\n\n return yield* new BrowserRunCleanupError({ reason: \"malformed\" });\n }\n if (method === \"DELETE\") {\n const result = yield* Schema.decodeEffect(Schema.fromJsonString(Closed))(body).pipe(\n Effect.mapError(() => new BrowserRunCleanupError({ reason: \"malformed\" })),\n );\n\n return result.status === \"closed\";\n }\n\n const result = yield* Schema.decodeEffect(Schema.fromJsonString(Metadata))(body).pipe(\n Effect.mapError(() => new BrowserRunCleanupError({ reason: \"malformed\" })),\n );\n\n if (result.sessionId !== sessionId)\n return yield* new BrowserRunCleanupError({ reason: \"malformed\" });\n\n return result.endTime !== undefined && result.endTime > 0;\n });\n\n const close = Effect.fn(\"BrowserRunSessionLifecycle.close\")(\n function* (sessionId: Redacted.Redacted<string>) {\n const id = yield* Schema.decodeEffect(Identity)(Redacted.value(sessionId)).pipe(\n Effect.mapError(() => new BrowserRunCleanupError({ reason: \"configuration\" })),\n );\n\n if (yield* request(\"DELETE\", id)) return;\n for (let read = 0; read < 2; read++) {\n if (yield* request(\"GET\", id)) return;\n }\n\n return yield* new BrowserRunCleanupError({ reason: \"pending\" });\n },\n Effect.timeoutOrElse({\n duration: \"10 seconds\",\n orElse: () => Effect.fail(new BrowserRunCleanupError({ reason: \"timeout\" })),\n }),\n Effect.withTracerEnabled(false),\n );\n\n return { close };\n }),\n );\n }\n}\n"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { t as CloudflareBindings_d_exports } from "./CloudflareBindings.mjs";
2
2
  import { a as CloudflareConfig_d_exports } from "./CloudflareConfig-f3CqTel1.mjs";
3
3
  import { t as Alarm_d_exports } from "./Alarm.mjs";
4
- import { t as CloudflareBrowser_d_exports } from "./CloudflareBrowser-DJq53niJ.mjs";
4
+ import { t as CloudflareBrowser_d_exports } from "./CloudflareBrowser-Doe1M7R5.mjs";
5
5
  import { t as CloudflareAiGateway_d_exports } from "./CloudflareAiGateway.mjs";
6
6
  import { t as CloudflareCodeMode_d_exports } from "./CloudflareCodeMode.mjs";
7
7
  import { t as CloudflareMemory_d_exports } from "./CloudflareMemory.mjs";
8
8
  import { t as CloudflareScheduling_d_exports } from "./CloudflareScheduling.mjs";
9
9
  import { t as CloudflareSubscriptions_d_exports } from "./CloudflareSubscriptions.mjs";
10
10
  import { t as CloudflareThreadClient_d_exports } from "./CloudflareThreadClient.mjs";
11
- import { f as ThreadObject_d_exports } from "./ThreadObject-BS1gRV0V.mjs";
11
+ import { f as ThreadObject_d_exports } from "./ThreadObject-BT0c-_vx.mjs";
12
12
  import { t as WakeScheduler_d_exports } from "./WakeScheduler.mjs";
13
13
  export { Alarm_d_exports as Alarm, CloudflareAiGateway_d_exports as CloudflareAiGateway, CloudflareBindings_d_exports as CloudflareBindings, CloudflareBrowser_d_exports as CloudflareBrowser, CloudflareCodeMode_d_exports as CloudflareCodeMode, CloudflareConfig_d_exports as CloudflareConfig, CloudflareMemory_d_exports as CloudflareMemory, CloudflareScheduling_d_exports as CloudflareScheduling, CloudflareSubscriptions_d_exports as CloudflareSubscriptions, CloudflareThreadClient_d_exports as CloudflareThreadClient, ThreadObject_d_exports as ThreadObject, WakeScheduler_d_exports as WakeScheduler };
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  import { t as CloudflareBindings_exports } from "./CloudflareBindings.mjs";
2
2
  import { t as CloudflareConfig_exports } from "./CloudflareConfig.mjs";
3
3
  import { t as Alarm_exports } from "./Alarm.mjs";
4
- import { t as CloudflareBrowser_exports } from "./CloudflareBrowser-D4YqaTAl.mjs";
4
+ import { t as CloudflareBrowser_exports } from "./CloudflareBrowser-DV6kya1H.mjs";
5
5
  import { t as CloudflareCodeMode_exports } from "./CloudflareCodeMode.mjs";
6
6
  import { t as CloudflareMemory_exports } from "./CloudflareMemory.mjs";
7
7
  import { t as CloudflareThreadClient_exports } from "./CloudflareThreadClient.mjs";
8
8
  import { t as CloudflareScheduling_exports } from "./CloudflareScheduling.mjs";
9
9
  import { t as CloudflareSubscriptions_exports } from "./CloudflareSubscriptions.mjs";
10
10
  import { t as WakeScheduler_exports } from "./WakeScheduler.mjs";
11
- import { l as ThreadObject_exports } from "./ThreadObject-mmWMMWdY.mjs";
11
+ import { l as ThreadObject_exports } from "./ThreadObject-B4gJ7t0d.mjs";
12
12
  import { t as CloudflareAiGateway_exports } from "./CloudflareAiGateway.mjs";
13
13
  export { Alarm_exports as Alarm, CloudflareAiGateway_exports as CloudflareAiGateway, CloudflareBindings_exports as CloudflareBindings, CloudflareBrowser_exports as CloudflareBrowser, CloudflareCodeMode_exports as CloudflareCodeMode, CloudflareConfig_exports as CloudflareConfig, CloudflareMemory_exports as CloudflareMemory, CloudflareScheduling_exports as CloudflareScheduling, CloudflareSubscriptions_exports as CloudflareSubscriptions, CloudflareThreadClient_exports as CloudflareThreadClient, ThreadObject_exports as ThreadObject, WakeScheduler_exports as WakeScheduler };
@@ -1,11 +1,11 @@
1
1
  import { CloudflareThreadClient } from "./CloudflareThreadClient.mjs";
2
- import "@effect-agent/core/Identifiers";
3
- import "@effect-agent/thread/DurableAgentRuntime";
4
2
  import { Effect, Layer } from "effect";
5
- import { PersistedJson } from "@effect-agent/thread/Records";
6
- import { ScheduleStorageError, ScheduledInputAdmission, ScheduledInputRefused, ScheduledInputRetryable } from "@effect-agent/thread/Schedule";
7
- import { PreparedInputAdmission } from "@effect-agent/thread/PreparedInputAdmission";
8
- import "@effect-agent/thread/Subscription";
3
+ import "effect-agent/durable-agent-runtime";
4
+ import "effect-agent/identifiers";
5
+ import { PersistedJson } from "effect-agent/records";
6
+ import { ScheduleStorageError, ScheduledInputAdmission, ScheduledInputRefused, ScheduledInputRetryable } from "effect-agent/schedule";
7
+ import { PreparedInputAdmission } from "effect-agent/prepared-input-admission";
8
+ import "effect-agent/subscription";
9
9
  //#region src/internal/prepared-admission.ts
10
10
  const passthroughAgent = (agentId) => ({ definition: {
11
11
  id: agentId,
@@ -70,4 +70,4 @@ const cloudflareScheduledInputAdmissionLayer = Layer.effect(ScheduledInputAdmiss
70
70
  //#endregion
71
71
  export { cloudflareScheduledInputAdmissionLayer as n, cloudflarePreparedInputAdmissionLayer as t };
72
72
 
73
- //# sourceMappingURL=prepared-admission-DSi55W-7.mjs.map
73
+ //# sourceMappingURL=prepared-admission-DU0_T-ev.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-admission-DU0_T-ev.mjs","names":[],"sources":["../src/internal/prepared-admission.ts"],"sourcesContent":["import { Effect, Layer } from \"effect\";\nimport { type DurableSubmitAgent } from \"effect-agent/durable-agent-runtime\";\nimport { type AgentId } from \"effect-agent/identifiers\";\nimport { PreparedInputAdmission } from \"effect-agent/prepared-input-admission\";\nimport { PersistedJson } from \"effect-agent/records\";\nimport {\n type ScheduledEnvelope,\n ScheduledInputAdmission,\n ScheduledInputRetryable,\n ScheduledInputRefused,\n ScheduleStorageError,\n} from \"effect-agent/schedule\";\nimport { type PreparedInput } from \"effect-agent/subscription\";\n\nimport { CloudflareThreadClient, type ThreadClientError } from \"../CloudflareThreadClient.ts\";\n\nconst passthroughAgent = (agentId: AgentId): DurableSubmitAgent<typeof PersistedJson> => ({\n definition: { id: agentId, input: PersistedJson },\n});\n\n/** Ordinary prepared admission through one freshly addressed Thread Object call. */\nexport const cloudflarePreparedInputAdmissionLayer: Layer.Layer<\n PreparedInputAdmission,\n never,\n CloudflareThreadClient\n> = Layer.effect(\n PreparedInputAdmission,\n Effect.gen(function* () {\n const client = yield* CloudflareThreadClient;\n\n return PreparedInputAdmission.of({\n submissionStatus: (receipt) =>\n client\n .submissionStatus(receipt)\n .pipe(Effect.mapError(() => ScheduledInputRetryable.make({ reason: \"storage\" }))),\n submit: (envelope) =>\n client\n .submit(passthroughAgent(envelope.agentId), envelope.input, {\n threadId: envelope.threadId,\n principal: envelope.deliveryPrincipal,\n idempotencyKey: envelope.admissionKey,\n ...(envelope.admissionGroup === undefined\n ? {}\n : { admissionGroup: envelope.admissionGroup }),\n ...(envelope.admissionFence === undefined\n ? {}\n : { admissionFence: envelope.admissionFence }),\n ...(envelope.workerAdmission === undefined\n ? {}\n : { workerAdmission: envelope.workerAdmission }),\n ...(envelope.messageAdmission === undefined\n ? {}\n : { messageAdmission: envelope.messageAdmission }),\n definitions: envelope.definitions,\n })\n .pipe(\n Effect.catchTags({\n AdmissionConflict: () =>\n ScheduleStorageError.make({ operation: \"prepared admission\", reason: \"corrupt\" }),\n AdmissionLimitExceeded: () => ScheduledInputRetryable.make({ reason: \"capacity\" }),\n ThreadClientError: (error: ThreadClientError) =>\n ScheduledInputRetryable.make({\n reason: error.overloaded === true ? \"capacity\" : \"transport\",\n }),\n HostProtocolError: () => ScheduledInputRetryable.make({ reason: \"ambiguous\" }),\n AdmissionPolicyError: (error) =>\n error.reason === \"refused\"\n ? ScheduledInputRefused.make({ code: error.code })\n : ScheduledInputRetryable.make({\n reason: error.reason === \"occupied\" ? \"capacity\" : \"storage\",\n }),\n LedgerError: () => ScheduledInputRetryable.make({ reason: \"storage\" }),\n ThreadStoreError: () => ScheduledInputRetryable.make({ reason: \"storage\" }),\n DurableAlarmError: () => ScheduledInputRetryable.make({ reason: \"storage\" }),\n AgentInputError: () =>\n ScheduleStorageError.make({ operation: \"prepared admission\", reason: \"corrupt\" }),\n DigestError: () =>\n ScheduleStorageError.make({ operation: \"prepared admission\", reason: \"corrupt\" }),\n ThreadNotMaterialized: () => ScheduledInputRetryable.make({ reason: \"storage\" }),\n AppendConflict: () => ScheduledInputRetryable.make({ reason: \"ambiguous\" }),\n FenceRejected: () => ScheduledInputRetryable.make({ reason: \"ambiguous\" }),\n DurableRuntimeFailpointError: () =>\n ScheduledInputRetryable.make({ reason: \"ambiguous\" }),\n }),\n ),\n });\n }),\n);\n\nconst preparedFromSchedule = (envelope: ScheduledEnvelope): PreparedInput => ({\n schemaVersion: 1,\n threadId: envelope.threadId,\n deliveryPrincipal: envelope.deliveryPrincipal,\n ...(envelope.admissionGroup === undefined ? {} : { admissionGroup: envelope.admissionGroup }),\n ...(envelope.admissionFence === undefined ? {} : { admissionFence: envelope.admissionFence }),\n agentId: envelope.agentId,\n definitions: envelope.definitions,\n input: envelope.input,\n inputDigest: envelope.inputDigest,\n admissionKey: envelope.admissionKey,\n authorization: envelope.authorization,\n});\n\n/** Compatibility adapter retaining Scheduling's public admission port. */\nexport const cloudflareScheduledInputAdmissionLayer: Layer.Layer<\n ScheduledInputAdmission,\n never,\n PreparedInputAdmission\n> = Layer.effect(\n ScheduledInputAdmission,\n Effect.map(PreparedInputAdmission, (admission) =>\n ScheduledInputAdmission.of({\n submit: (envelope) => admission.submit(preparedFromSchedule(envelope)),\n }),\n ),\n);\n"],"mappings":";;;;;;;;;AAgBA,MAAM,oBAAoB,aAAgE,EACxF,YAAY;CAAE,IAAI;CAAS,OAAO;AAAc,EAClD;;AAGA,MAAa,wCAIT,MAAM,OACR,wBACA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,OAAO,uBAAuB,GAAG;EAC/B,mBAAmB,YACjB,OACG,iBAAiB,OAAO,CAAC,CACzB,KAAK,OAAO,eAAe,wBAAwB,KAAK,EAAE,QAAQ,UAAU,CAAC,CAAC,CAAC;EACpF,SAAS,aACP,OACG,OAAO,iBAAiB,SAAS,OAAO,GAAG,SAAS,OAAO;GAC1D,UAAU,SAAS;GACnB,WAAW,SAAS;GACpB,gBAAgB,SAAS;GACzB,GAAI,SAAS,mBAAmB,KAAA,IAC5B,CAAC,IACD,EAAE,gBAAgB,SAAS,eAAe;GAC9C,GAAI,SAAS,mBAAmB,KAAA,IAC5B,CAAC,IACD,EAAE,gBAAgB,SAAS,eAAe;GAC9C,GAAI,SAAS,oBAAoB,KAAA,IAC7B,CAAC,IACD,EAAE,iBAAiB,SAAS,gBAAgB;GAChD,GAAI,SAAS,qBAAqB,KAAA,IAC9B,CAAC,IACD,EAAE,kBAAkB,SAAS,iBAAiB;GAClD,aAAa,SAAS;EACxB,CAAC,CAAC,CACD,KACC,OAAO,UAAU;GACf,yBACE,qBAAqB,KAAK;IAAE,WAAW;IAAsB,QAAQ;GAAU,CAAC;GAClF,8BAA8B,wBAAwB,KAAK,EAAE,QAAQ,WAAW,CAAC;GACjF,oBAAoB,UAClB,wBAAwB,KAAK,EAC3B,QAAQ,MAAM,eAAe,OAAO,aAAa,YACnD,CAAC;GACH,yBAAyB,wBAAwB,KAAK,EAAE,QAAQ,YAAY,CAAC;GAC7E,uBAAuB,UACrB,MAAM,WAAW,YACb,sBAAsB,KAAK,EAAE,MAAM,MAAM,KAAK,CAAC,IAC/C,wBAAwB,KAAK,EAC3B,QAAQ,MAAM,WAAW,aAAa,aAAa,UACrD,CAAC;GACP,mBAAmB,wBAAwB,KAAK,EAAE,QAAQ,UAAU,CAAC;GACrE,wBAAwB,wBAAwB,KAAK,EAAE,QAAQ,UAAU,CAAC;GAC1E,yBAAyB,wBAAwB,KAAK,EAAE,QAAQ,UAAU,CAAC;GAC3E,uBACE,qBAAqB,KAAK;IAAE,WAAW;IAAsB,QAAQ;GAAU,CAAC;GAClF,mBACE,qBAAqB,KAAK;IAAE,WAAW;IAAsB,QAAQ;GAAU,CAAC;GAClF,6BAA6B,wBAAwB,KAAK,EAAE,QAAQ,UAAU,CAAC;GAC/E,sBAAsB,wBAAwB,KAAK,EAAE,QAAQ,YAAY,CAAC;GAC1E,qBAAqB,wBAAwB,KAAK,EAAE,QAAQ,YAAY,CAAC;GACzE,oCACE,wBAAwB,KAAK,EAAE,QAAQ,YAAY,CAAC;EACxD,CAAC,CACH;CACN,CAAC;AACH,CAAC,CACH;AAEA,MAAM,wBAAwB,cAAgD;CAC5E,eAAe;CACf,UAAU,SAAS;CACnB,mBAAmB,SAAS;CAC5B,GAAI,SAAS,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,SAAS,eAAe;CAC3F,GAAI,SAAS,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,SAAS,eAAe;CAC3F,SAAS,SAAS;CAClB,aAAa,SAAS;CACtB,OAAO,SAAS;CAChB,aAAa,SAAS;CACtB,cAAc,SAAS;CACvB,eAAe,SAAS;AAC1B;;AAGA,MAAa,yCAIT,MAAM,OACR,yBACA,OAAO,IAAI,yBAAyB,cAClC,wBAAwB,GAAG,EACzB,SAAS,aAAa,UAAU,OAAO,qBAAqB,QAAQ,CAAC,EACvE,CAAC,CACH,CACF"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@effect-agent/platform-cloudflare","version":"0.1.0-beta.84","dependencies":{"@effect-agent/core":"0.1.0-beta.84","@effect-agent/engine":"0.1.0-beta.84","@effect-agent/sandbox":"0.1.0-beta.84","@effect-agent/storage-cloudflare":"0.1.0-beta.84","@effect-agent/thread":"0.1.0-beta.84","@effect/platform-browser":"4.0.0-rc.112","@effect/sql-sqlite-do":"4.0.0-rc.112"},"devDependencies":{"@cloudflare/puppeteer":"1.1.0","@cloudflare/vitest-pool-workers":"0.21.3","@cloudflare/workers-types":"5.20260825.1","@effect-agent/capabilities":"0.1.0-beta.84","@effect-agent/testing":"0.1.0-beta.84","@effect/platform-node":"4.0.0-rc.112","@effect/sql-d1":"4.0.0-rc.112","@effect/vitest":"4.0.0-rc.112","effect":"4.0.0-rc.112","effect-cf":"0.41.0","esbuild":"0.28.1","miniflare":"5.20260811.1-alpha","typescript":"7.0.2","vite-plus":"0.3.0","vitest":"4.1.11"},"peerDependencies":{"@cloudflare/puppeteer":"^1.1.0","effect":"^4.0.0-rc.112","effect-cf":"^0.41.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./Alarm":{"types":"./dist/Alarm.d.mts","default":"./dist/Alarm.mjs"},"./BrowserRestCapture":{"types":"./dist/BrowserRestCapture.d.mts","default":"./dist/BrowserRestCapture.mjs"},"./BrowserRestCrawl":{"types":"./dist/BrowserRestCrawl.d.mts","default":"./dist/BrowserRestCrawl.mjs"},"./CloudflareBindings":{"types":"./dist/CloudflareBindings.d.mts","default":"./dist/CloudflareBindings.mjs"},"./CloudflareBrowser":{"types":"./dist/CloudflareBrowser.d.mts","default":"./dist/CloudflareBrowser.mjs"},"./CloudflareCodeMode":{"types":"./dist/CloudflareCodeMode.d.mts","default":"./dist/CloudflareCodeMode.mjs"},"./CloudflareConfig":{"types":"./dist/CloudflareConfig.d.mts","default":"./dist/CloudflareConfig.mjs"},"./CloudflareMemory":{"types":"./dist/CloudflareMemory.d.mts","default":"./dist/CloudflareMemory.mjs"},"./CloudflareScheduling":{"types":"./dist/CloudflareScheduling.d.mts","default":"./dist/CloudflareScheduling.mjs"},"./CloudflareSubscriptions":{"types":"./dist/CloudflareSubscriptions.d.mts","default":"./dist/CloudflareSubscriptions.mjs"},"./CloudflareThreadClient":{"types":"./dist/CloudflareThreadClient.d.mts","default":"./dist/CloudflareThreadClient.mjs"},"./InteractiveBrowser":{"types":"./dist/InteractiveBrowser.d.mts","default":"./dist/InteractiveBrowser.mjs"},"./ProtectedBrowser":{"types":"./dist/ProtectedBrowser.d.mts","default":"./dist/ProtectedBrowser.mjs"},"./ThreadObject":{"types":"./dist/ThreadObject.d.mts","default":"./dist/ThreadObject.mjs"},"./WakeScheduler":{"types":"./dist/WakeScheduler.d.mts","default":"./dist/WakeScheduler.mjs"},"./CloudflareAiGateway":{"types":"./dist/CloudflareAiGateway.d.mts","default":"./dist/CloudflareAiGateway.mjs"}},"description":"Cloudflare Layer assembly for Effect Agent: Durable Objects and Browser Run adapters.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/platform-cloudflare"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json"},"peerDependenciesMeta":{"@cloudflare/puppeteer":{"optional":true}}}
1
+ {"name":"@effect-agent/platform-cloudflare","version":"0.1.0-beta.86","dependencies":{"@effect-agent/storage-cloudflare":"0.1.0-beta.86","@effect/platform-browser":"4.0.0-rc.112","@effect/sql-sqlite-do":"4.0.0-rc.112","effect-agent":"0.1.0-beta.86"},"devDependencies":{"@cloudflare/puppeteer":"1.1.0","@cloudflare/vitest-pool-workers":"0.21.3","@cloudflare/workers-types":"5.20260825.1","@effect-agent/testing":"0.1.0-beta.86","@effect/platform-node":"4.0.0-rc.112","@effect/sql-d1":"4.0.0-rc.112","@effect/vitest":"4.0.0-rc.112","effect":"4.0.0-rc.112","effect-cf":"0.41.0","esbuild":"0.28.1","miniflare":"5.20260811.1-alpha","typescript":"7.0.2","vite-plus":"0.3.0","vitest":"4.1.11"},"peerDependencies":{"@cloudflare/puppeteer":"^1.1.0","effect":"^4.0.0-rc.112","effect-cf":"^0.41.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./alarm":{"types":"./dist/Alarm.d.mts","default":"./dist/Alarm.mjs"},"./browser-rest-capture":{"types":"./dist/BrowserRestCapture.d.mts","default":"./dist/BrowserRestCapture.mjs"},"./browser-rest-crawl":{"types":"./dist/BrowserRestCrawl.d.mts","default":"./dist/BrowserRestCrawl.mjs"},"./cloudflare-bindings":{"types":"./dist/CloudflareBindings.d.mts","default":"./dist/CloudflareBindings.mjs"},"./cloudflare-browser":{"types":"./dist/CloudflareBrowser.d.mts","default":"./dist/CloudflareBrowser.mjs"},"./cloudflare-code-mode":{"types":"./dist/CloudflareCodeMode.d.mts","default":"./dist/CloudflareCodeMode.mjs"},"./cloudflare-config":{"types":"./dist/CloudflareConfig.d.mts","default":"./dist/CloudflareConfig.mjs"},"./cloudflare-memory":{"types":"./dist/CloudflareMemory.d.mts","default":"./dist/CloudflareMemory.mjs"},"./cloudflare-scheduling":{"types":"./dist/CloudflareScheduling.d.mts","default":"./dist/CloudflareScheduling.mjs"},"./cloudflare-subscriptions":{"types":"./dist/CloudflareSubscriptions.d.mts","default":"./dist/CloudflareSubscriptions.mjs"},"./cloudflare-thread-client":{"types":"./dist/CloudflareThreadClient.d.mts","default":"./dist/CloudflareThreadClient.mjs"},"./interactive-browser":{"types":"./dist/InteractiveBrowser.d.mts","default":"./dist/InteractiveBrowser.mjs"},"./protected-browser":{"types":"./dist/ProtectedBrowser.d.mts","default":"./dist/ProtectedBrowser.mjs"},"./thread-object":{"types":"./dist/ThreadObject.d.mts","default":"./dist/ThreadObject.mjs"},"./wake-scheduler":{"types":"./dist/WakeScheduler.d.mts","default":"./dist/WakeScheduler.mjs"},"./cloudflare-ai-gateway":{"types":"./dist/CloudflareAiGateway.d.mts","default":"./dist/CloudflareAiGateway.mjs"}},"description":"Cloudflare Layer assembly for Effect Agent: Durable Objects and Browser Run adapters.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/platform-cloudflare"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json"},"peerDependenciesMeta":{"@cloudflare/puppeteer":{"optional":true}}}
package/src/Alarm.ts CHANGED
@@ -1,16 +1,3 @@
1
- import { ThreadId } from "@effect-agent/core/Identifiers";
2
- import { type DurableBindingFailure } from "@effect-agent/thread/AgentRegistration";
3
- import {
4
- DurableAgentRuntime,
5
- type DurableWorkerFailure,
6
- type RecoveryReport,
7
- } from "@effect-agent/thread/DurableAgentRuntime";
8
- import { SubmissionLedger, type SubmissionSnapshot } from "@effect-agent/thread/SubmissionLedger";
9
- import {
10
- ThreadProjectionMaintenance,
11
- drainDue,
12
- type ThreadProjectionError,
13
- } from "@effect-agent/thread/ThreadProjectionMaintenance";
14
1
  import {
15
2
  Cause,
16
3
  Clock,
@@ -28,6 +15,19 @@ import {
28
15
  Semaphore,
29
16
  Stream,
30
17
  } from "effect";
18
+ import { type DurableBindingFailure } from "effect-agent/agent-registration";
19
+ import {
20
+ DurableAgentRuntime,
21
+ type DurableWorkerFailure,
22
+ type RecoveryReport,
23
+ } from "effect-agent/durable-agent-runtime";
24
+ import { ThreadId } from "effect-agent/identifiers";
25
+ import { SubmissionLedger, type SubmissionSnapshot } from "effect-agent/submission-ledger";
26
+ import {
27
+ ThreadProjectionMaintenance,
28
+ drainDue,
29
+ type ThreadProjectionError,
30
+ } from "effect-agent/thread-projection-maintenance";
31
31
  import { SqlClient } from "effect/unstable/sql/SqlClient";
32
32
 
33
33
  import { DurableObjectContext } from "./CloudflareBindings.ts";
@@ -545,12 +545,12 @@ export class ThreadMaintenance extends Context.Service<
545
545
 
546
546
  // A broken disposable index still needs a retry alarm and must not prevent startup.
547
547
  const projectionDeadline = projection.pendingDeadline.pipe(
548
- Effect.catchCause((cause) =>
549
- Cause.hasInterrupts(cause)
550
- ? Effect.failCause(cause)
551
- : Effect.logError("Thread projection deadline unavailable", cause).pipe(
552
- Effect.as(Option.some(0)),
553
- ),
548
+ Effect.catchCauseIf(
549
+ (cause) => !Cause.hasInterrupts(cause),
550
+ (cause) =>
551
+ Effect.logError("Thread projection deadline unavailable", cause).pipe(
552
+ Effect.as(Option.some(0)),
553
+ ),
554
554
  ),
555
555
  );
556
556
 
@@ -1,3 +1,4 @@
1
+ import { Effect, Layer, Option, Redacted, Schema, Stream } from "effect";
1
2
  import {
2
3
  PageCapture,
3
4
  PageCaptureInferencePolicyError,
@@ -19,9 +20,8 @@ import {
19
20
  type PageCaptureError,
20
21
  type PageCaptureOutput,
21
22
  type PageCaptureRequest,
22
- } from "@effect-agent/sandbox/PageCapture";
23
- import { SandboxImplementation } from "@effect-agent/sandbox/Sandbox";
24
- import { Effect, Layer, Option, Redacted, Schema, Stream } from "effect";
23
+ } from "effect-agent/page-capture";
24
+ import { SandboxImplementation } from "effect-agent/sandbox";
25
25
  import { HttpClient, HttpClientRequest, type HttpClientError } from "effect/unstable/http";
26
26
 
27
27
  import {
@@ -1,15 +1,3 @@
1
- import {
2
- PageCrawl,
3
- PageCrawlLimitError,
4
- PageCrawlProtocolError,
5
- PageCrawlRateLimitedError,
6
- PageCrawlRecord,
7
- PageCrawlTerminalError,
8
- type PageCrawlCrawl,
9
- type PageCrawlError,
10
- type PageCrawlRequest,
11
- } from "@effect-agent/sandbox/PageCrawl";
12
- import { SandboxImplementation } from "@effect-agent/sandbox/Sandbox";
13
1
  import {
14
2
  Duration,
15
3
  Effect,
@@ -22,6 +10,18 @@ import {
22
10
  Scope,
23
11
  Stream,
24
12
  } from "effect";
13
+ import {
14
+ PageCrawl,
15
+ PageCrawlLimitError,
16
+ PageCrawlProtocolError,
17
+ PageCrawlRateLimitedError,
18
+ PageCrawlRecord,
19
+ PageCrawlTerminalError,
20
+ type PageCrawlCrawl,
21
+ type PageCrawlError,
22
+ type PageCrawlRequest,
23
+ } from "effect-agent/page-crawl";
24
+ import { SandboxImplementation } from "effect-agent/sandbox";
25
25
  import {
26
26
  HttpClient,
27
27
  HttpClientRequest,
@@ -319,7 +319,7 @@ const makeCrawl =
319
319
  );
320
320
  }
321
321
 
322
- return yield* Schema.decodeUnknownEffect(Schema.fromJsonString(schema))(bodyText).pipe(
322
+ return yield* Schema.decodeEffect(Schema.fromJsonString(schema))(bodyText).pipe(
323
323
  Effect.mapError((cause) =>
324
324
  protocolError(
325
325
  "Browser Run returned a malformed crawl response",
@@ -1,6 +1,6 @@
1
- import { type ThreadId } from "@effect-agent/core/Identifiers";
2
- import { type ProducerId } from "@effect-agent/thread/Records";
3
1
  import { Context, Effect, Layer, Predicate, Schema } from "effect";
2
+ import { type ThreadId } from "effect-agent/identifiers";
3
+ import { type ProducerId } from "effect-agent/records";
4
4
  import { RpcTargets } from "effect-cf";
5
5
 
6
6
  /**
@@ -1,3 +1,5 @@
1
+ import { RpcTarget } from "cloudflare:workers";
2
+ import { Clock, Duration, Effect, Exit, Fiber, Layer, Option, Queue, Schema } from "effect";
1
3
  import {
2
4
  CodeExecutionHost,
3
5
  CodeExecutionResourceUse,
@@ -16,10 +18,8 @@ import {
16
18
  CodeSourceError,
17
19
  type CodeExecutorExecute,
18
20
  type CodeExecutionRequest,
19
- } from "@effect-agent/sandbox/CodeExecutor";
20
- import { SandboxImplementation } from "@effect-agent/sandbox/Sandbox";
21
- import { RpcTarget } from "cloudflare:workers";
22
- import { Clock, Duration, Effect, Exit, Fiber, Layer, Option, Queue, Schema } from "effect";
21
+ } from "effect-agent/code-executor";
22
+ import { SandboxImplementation } from "effect-agent/sandbox";
23
23
 
24
24
  import { safeCauseDiagnostic, safeCauseMessage } from "./internal/boundary.ts";
25
25
 
@@ -1,7 +1,7 @@
1
- import { DEFAULT_MAX_STORED_VALUE_BYTES } from "@effect-agent/storage-cloudflare/DoStorageConfig";
2
- import { DeploymentId } from "@effect-agent/thread/Records";
3
- import { DEFAULT_OWNERSHIP_LEASE_DURATION } from "@effect-agent/thread/SubmissionLedger";
1
+ import { DEFAULT_MAX_STORED_VALUE_BYTES } from "@effect-agent/storage-cloudflare/do-storage-config";
4
2
  import { Context, Duration, Schema } from "effect";
3
+ import { DeploymentId } from "effect-agent/records";
4
+ import { DEFAULT_OWNERSHIP_LEASE_DURATION } from "effect-agent/submission-ledger";
5
5
 
6
6
  /**
7
7
  * Schema-validated configuration for the Cloudflare durable runtime (deployment spec §4:
@@ -1,27 +1,8 @@
1
- import * as Memory from "@effect-agent/core/Memory";
2
- import * as MemoryNamespace from "@effect-agent/core/MemoryNamespace";
3
- import { MemoryNamespaceAddress } from "@effect-agent/core/MemoryNamespace";
4
- import { type MemoryLookup, MemoryRecallLimits } from "@effect-agent/core/MemoryReference";
5
- import { MemoryAccess } from "@effect-agent/core/MemoryRevalidation";
6
- import {
7
- type MemoryReader,
8
- type MemoryWrite,
9
- MemoryKey,
10
- MemoryDocument,
11
- MemoryMutationFailpoint,
12
- MemoryStorageError,
13
- MemoryWriter,
14
- } from "@effect-agent/core/MemoryStore";
15
- import {
16
- type MemoryIndexSearch,
17
- type SemanticMemoryProfile,
18
- } from "@effect-agent/core/SemanticMemoryIndex";
19
- import { type SemanticCandidateLimits } from "@effect-agent/core/SemanticMemoryRevalidation";
20
1
  import {
21
2
  type DoMemoryStorageLimits,
22
3
  defaultDoMemoryStorageLimits,
23
4
  doMemoryStoreLayerWithFailpoints,
24
- } from "@effect-agent/storage-cloudflare/DoMemoryStore";
5
+ } from "@effect-agent/storage-cloudflare/do-memory-store";
25
6
  import {
26
7
  type MemoryOwnerAuthorizer,
27
8
  decodeMemoryWire,
@@ -34,9 +15,28 @@ import {
34
15
  MemoryRpcError,
35
16
  MemoryRpcLimits,
36
17
  type MemoryOwnerFailure,
37
- } from "@effect-agent/storage-cloudflare/MemoryProtocol";
38
- import { Principal } from "@effect-agent/thread/SubmissionLedger";
18
+ } from "@effect-agent/storage-cloudflare/memory-protocol";
39
19
  import { Clock, Context, Effect, Layer, Schema } from "effect";
20
+ import * as Memory from "effect-agent/memory";
21
+ import * as MemoryNamespace from "effect-agent/memory-namespace";
22
+ import { MemoryNamespaceAddress } from "effect-agent/memory-namespace";
23
+ import { type MemoryLookup, MemoryRecallLimits } from "effect-agent/memory-reference";
24
+ import { MemoryAccess } from "effect-agent/memory-revalidation";
25
+ import {
26
+ type MemoryReader,
27
+ type MemoryWrite,
28
+ MemoryKey,
29
+ MemoryDocument,
30
+ MemoryMutationFailpoint,
31
+ MemoryStorageError,
32
+ MemoryWriter,
33
+ } from "effect-agent/memory-store";
34
+ import {
35
+ type MemoryIndexSearch,
36
+ type SemanticMemoryProfile,
37
+ } from "effect-agent/semantic-memory-index";
38
+ import { type SemanticCandidateLimits } from "effect-agent/semantic-memory-revalidation";
39
+ import { Principal } from "effect-agent/submission-ledger";
40
40
  import {
41
41
  DurableObject as EffectCfDurableObject,
42
42
  DurableObjectState,
@@ -71,7 +71,7 @@ const makeMemoryClient = Effect.fn("CloudflareMemoryClient.make")(function* <
71
71
  principal: Principal,
72
72
  rpcLimits: MemoryRpcLimits = defaultMemoryRpcLimits,
73
73
  ) {
74
- const validated = yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(rpcLimits).pipe(
74
+ const validated = yield* Schema.decodeEffect(MemoryRpcLimits)(rpcLimits).pipe(
75
75
  Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
76
76
  );
77
77
 
@@ -79,13 +79,13 @@ const makeMemoryClient = Effect.fn("CloudflareMemoryClient.make")(function* <
79
79
  Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
80
80
  );
81
81
 
82
- principal = yield* Schema.decodeUnknownEffect(Principal)(principal).pipe(
82
+ principal = yield* Schema.decodeEffect(Principal)(principal).pipe(
83
83
  Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
84
84
  );
85
85
  const { namespace } = yield* MemoryObjectNamespace;
86
86
 
87
87
  const call = Effect.fn("CloudflareMemoryClient.call")(function* (request: MemoryOwnerRequest) {
88
- const decoded = yield* Schema.decodeUnknownEffect(MemoryOwnerRequest)(request).pipe(
88
+ const decoded = yield* Schema.decodeEffect(MemoryOwnerRequest)(request).pipe(
89
89
  Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
90
90
  );
91
91
 
@@ -134,7 +134,7 @@ const makeMemoryClient = Effect.fn("CloudflareMemoryClient.make")(function* <
134
134
  lookup: MemoryLookup,
135
135
  limits: MemoryRecallLimits,
136
136
  ) {
137
- limits = yield* Schema.decodeUnknownEffect(MemoryRecallLimits)(limits).pipe(
137
+ limits = yield* Schema.decodeEffect(MemoryRecallLimits)(limits).pipe(
138
138
  Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
139
139
  );
140
140
  const timeoutMillis = Math.min(validated.timeoutMillis, limits.timeoutMillis);
@@ -395,9 +395,9 @@ const makeMemoryObject = <E>(
395
395
  const state = yield* DurableObjectState.DurableObjectState;
396
396
  const scope = yield* Effect.scope;
397
397
 
398
- yield* Schema.decodeUnknownEffect(MemoryRpcLimits)(
399
- options.rpcLimits ?? defaultMemoryRpcLimits,
400
- ).pipe(Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })));
398
+ yield* Schema.decodeEffect(MemoryRpcLimits)(options.rpcLimits ?? defaultMemoryRpcLimits).pipe(
399
+ Effect.mapError(() => MemoryRpcError.make({ reason: "protocol" })),
400
+ );
401
401
 
402
402
  return yield* state.blockConcurrencyWhile(Layer.buildWithScope(application, scope));
403
403
  }),
@@ -1,11 +1,14 @@
1
- import { AgentId } from "@effect-agent/core/Identifiers";
2
1
  import {
3
2
  DoScheduleAlarmControl,
4
3
  DoScheduleTransaction,
5
4
  scheduleStoreLayer,
6
- } from "@effect-agent/storage-cloudflare/DoScheduleStore";
7
- import { type DurableSubmitAgent } from "@effect-agent/thread/DurableAgentRuntime";
8
- import { DefinitionDigests, PersistedJson } from "@effect-agent/thread/Records";
5
+ } from "@effect-agent/storage-cloudflare/do-schedule-store";
6
+ import { BrowserCrypto } from "@effect/platform-browser";
7
+ import { SqliteClient } from "@effect/sql-sqlite-do";
8
+ import { Clock, Context, DateTime, Effect, Layer, Schema } from "effect";
9
+ import { type DurableSubmitAgent } from "effect-agent/durable-agent-runtime";
10
+ import { AgentId } from "effect-agent/identifiers";
11
+ import { DefinitionDigests, PersistedJson } from "effect-agent/records";
9
12
  import {
10
13
  ScheduleAuthorizationError,
11
14
  type ScheduleAuthorizer,
@@ -25,18 +28,15 @@ import {
25
28
  ScheduleTimingRequest,
26
29
  ScheduleValidationError,
27
30
  defaultSchedulingLimits,
28
- } from "@effect-agent/thread/Schedule";
29
- import { scheduleOwnerKey } from "@effect-agent/thread/ScheduleTransition";
31
+ } from "effect-agent/schedule";
32
+ import { scheduleOwnerKey } from "effect-agent/schedule-transition";
30
33
  import {
31
34
  Scheduling,
32
35
  ScheduleDriver,
33
36
  type ScheduleManagementFailure,
34
37
  ScheduleWakeNoop,
35
- } from "@effect-agent/thread/Scheduling";
36
- import { AdmissionFence } from "@effect-agent/thread/SubmissionLedger";
37
- import { BrowserCrypto } from "@effect/platform-browser";
38
- import { SqliteClient } from "@effect/sql-sqlite-do";
39
- import { Clock, Context, DateTime, Effect, Layer, Schema } from "effect";
38
+ } from "effect-agent/scheduling";
39
+ import { AdmissionFence } from "effect-agent/submission-ledger";
40
40
  import {
41
41
  DurableObject as EffectCfDurableObject,
42
42
  DurableObjectAlarm,
@@ -401,7 +401,7 @@ const decodeOwnerName = Effect.fn("decodeScheduleOwnerName")(function* (
401
401
  });
402
402
  }
403
403
 
404
- const tuple = yield* Schema.decodeUnknownEffect(
404
+ const tuple = yield* Schema.decodeEffect(
405
405
  Schema.fromJsonString(Schema.Tuple([Schema.String, Schema.String])),
406
406
  )(name).pipe(
407
407
  Effect.mapError(() =>
@@ -409,7 +409,7 @@ const decodeOwnerName = Effect.fn("decodeScheduleOwnerName")(function* (
409
409
  ),
410
410
  );
411
411
 
412
- return yield* Schema.decodeUnknownEffect(ScheduleOwner)({
412
+ return yield* Schema.decodeEffect(ScheduleOwner)({
413
413
  tenantId: tuple[0],
414
414
  ownerId: tuple[1],
415
415
  }).pipe(