@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.
- package/dist/Alarm.d.mts +4 -4
- package/dist/Alarm.mjs +6 -6
- package/dist/Alarm.mjs.map +1 -1
- package/dist/BrowserRestCapture.d.mts +3 -3
- package/dist/BrowserRestCapture.mjs +3 -3
- package/dist/BrowserRestCapture.mjs.map +1 -1
- package/dist/BrowserRestCrawl.d.mts +2 -2
- package/dist/BrowserRestCrawl.mjs +3 -3
- package/dist/BrowserRestCrawl.mjs.map +1 -1
- package/dist/CloudflareBindings.d.mts +2 -2
- package/dist/CloudflareBindings.mjs +2 -2
- package/dist/CloudflareBindings.mjs.map +1 -1
- package/dist/{CloudflareBrowser-D4YqaTAl.mjs → CloudflareBrowser-DV6kya1H.mjs} +4 -4
- package/dist/CloudflareBrowser-DV6kya1H.mjs.map +1 -0
- package/dist/{CloudflareBrowser-DJq53niJ.d.mts → CloudflareBrowser-Doe1M7R5.d.mts} +4 -4
- package/dist/CloudflareBrowser.d.mts +1 -1
- package/dist/CloudflareBrowser.mjs +1 -1
- package/dist/CloudflareCodeMode.d.mts +2 -2
- package/dist/CloudflareCodeMode.mjs +2 -2
- package/dist/CloudflareCodeMode.mjs.map +1 -1
- package/dist/CloudflareConfig.mjs +3 -3
- package/dist/CloudflareConfig.mjs.map +1 -1
- package/dist/CloudflareMemory.d.mts +26 -26
- package/dist/CloudflareMemory.mjs +16 -16
- package/dist/CloudflareMemory.mjs.map +1 -1
- package/dist/CloudflareScheduling.d.mts +3 -3
- package/dist/CloudflareScheduling.mjs +11 -11
- package/dist/CloudflareScheduling.mjs.map +1 -1
- package/dist/CloudflareSubscriptions.d.mts +5 -5
- package/dist/CloudflareSubscriptions.mjs +20 -14
- package/dist/CloudflareSubscriptions.mjs.map +1 -1
- package/dist/CloudflareThreadClient.d.mts +228 -18
- package/dist/CloudflareThreadClient.mjs +12 -12
- package/dist/CloudflareThreadClient.mjs.map +1 -1
- package/dist/InteractiveBrowser.d.mts +2 -2
- package/dist/InteractiveBrowser.mjs +18 -18
- package/dist/InteractiveBrowser.mjs.map +1 -1
- package/dist/ProtectedBrowser.d.mts +2 -2
- package/dist/ProtectedBrowser.mjs +14 -14
- package/dist/ProtectedBrowser.mjs.map +1 -1
- package/dist/{ThreadObject-mmWMMWdY.mjs → ThreadObject-B4gJ7t0d.mjs} +29 -27
- package/dist/ThreadObject-B4gJ7t0d.mjs.map +1 -0
- package/dist/{ThreadObject-BS1gRV0V.d.mts → ThreadObject-BT0c-_vx.d.mts} +61 -65
- package/dist/ThreadObject.d.mts +1 -1
- package/dist/ThreadObject.mjs +1 -1
- package/dist/WakeScheduler.d.mts +1 -1
- package/dist/WakeScheduler.mjs +2 -2
- package/dist/WakeScheduler.mjs.map +1 -1
- package/dist/{browser-session-lifecycle-CUbVfEgP.mjs → browser-session-lifecycle-CmbQABHC.mjs} +5 -5
- package/dist/browser-session-lifecycle-CmbQABHC.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{prepared-admission-DSi55W-7.mjs → prepared-admission-DU0_T-ev.mjs} +7 -7
- package/dist/prepared-admission-DU0_T-ev.mjs.map +1 -0
- package/package.json +1 -1
- package/src/Alarm.ts +19 -19
- package/src/BrowserRestCapture.ts +3 -3
- package/src/BrowserRestCrawl.ts +13 -13
- package/src/CloudflareBindings.ts +2 -2
- package/src/CloudflareCodeMode.ts +4 -4
- package/src/CloudflareConfig.ts +3 -3
- package/src/CloudflareMemory.ts +29 -29
- package/src/CloudflareScheduling.ts +13 -13
- package/src/CloudflareSubscriptions.ts +28 -32
- package/src/CloudflareThreadClient.ts +14 -14
- package/src/InteractiveBrowser.ts +34 -37
- package/src/ThreadObject.ts +14 -14
- package/src/WakeScheduler.ts +2 -2
- package/src/internal/browser-quick-action.ts +4 -4
- package/src/internal/browser-session-lifecycle.ts +8 -8
- package/src/internal/layers.ts +47 -47
- package/src/internal/message-delivery.ts +9 -10
- package/src/internal/prepared-admission.ts +7 -7
- package/src/internal/transport.ts +1 -1
- package/src/protected-browser/binding.ts +3 -3
- package/src/protected-browser/native.ts +3 -3
- package/src/protected-browser/policy.ts +42 -44
- package/dist/CloudflareBrowser-D4YqaTAl.mjs.map +0 -1
- package/dist/ThreadObject-mmWMMWdY.mjs.map +0 -1
- package/dist/browser-session-lifecycle-CUbVfEgP.mjs.map +0 -1
- package/dist/prepared-admission-DSi55W-7.mjs.map +0 -1
package/dist/ThreadObject.d.mts
CHANGED
|
@@ -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-
|
|
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 };
|
package/dist/ThreadObject.mjs
CHANGED
|
@@ -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-
|
|
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 };
|
package/dist/WakeScheduler.d.mts
CHANGED
|
@@ -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 "
|
|
4
|
+
import { WakeScheduler } from "effect-agent/wake-scheduler";
|
|
5
5
|
declare namespace WakeScheduler_d_exports {
|
|
6
6
|
export { cloudflareWakeSchedulerLayer };
|
|
7
7
|
}
|
package/dist/WakeScheduler.mjs
CHANGED
|
@@ -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
|
|
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 {
|
|
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"}
|
package/dist/{browser-session-lifecycle-CUbVfEgP.mjs → browser-session-lifecycle-CmbQABHC.mjs}
RENAMED
|
@@ -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.
|
|
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.
|
|
65
|
-
const result = yield* Schema.
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import "
|
|
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-
|
|
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.
|
|
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.
|
|
549
|
-
Cause.hasInterrupts(cause)
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
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 "
|
|
23
|
-
import { SandboxImplementation } from "
|
|
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 {
|
package/src/BrowserRestCrawl.ts
CHANGED
|
@@ -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.
|
|
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 "
|
|
20
|
-
import { SandboxImplementation } from "
|
|
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
|
|
package/src/CloudflareConfig.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DEFAULT_MAX_STORED_VALUE_BYTES } from "@effect-agent/storage-cloudflare/
|
|
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:
|
package/src/CloudflareMemory.ts
CHANGED
|
@@ -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/
|
|
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/
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
399
|
-
|
|
400
|
-
)
|
|
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/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
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 "
|
|
29
|
-
import { scheduleOwnerKey } from "
|
|
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 "
|
|
36
|
-
import { AdmissionFence } from "
|
|
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.
|
|
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.
|
|
412
|
+
return yield* Schema.decodeEffect(ScheduleOwner)({
|
|
413
413
|
tenantId: tuple[0],
|
|
414
414
|
ownerId: tuple[1],
|
|
415
415
|
}).pipe(
|