authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-08-04 13:56:50+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-08-04 13:56:50+02:00
log2b1d4fecb859b9a68f4853b8c4c5857ffe9d448d
tree04cdf7acfa4b4ef8391e3a5f68f0ccc1c75a6afa
parentcec1bb9de38a80d7c06faa6841360002ca136080
signature Signed by PGP key B5690EEEBB952194

Upgrade Effect to beta.103 (#5331)


46 files changed, 775 insertions(+), 989 deletions(-)

apps/desktop/src/preview/Manager.ts+1-1
......@@ -109,7 +109,7 @@ const DIAGNOSTIC_BUFFER_LIMIT = 200;
109109const MAX_ARTIFACT_SITE_SLUG_LENGTH = 80;
110110const AGENT_CURSOR_MOVE_MS = 160;
111111const AGENT_CURSOR_CLICK_LEAD_MS = 40;
112const encodeUnknownJson = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);
112const encodeUnknownJson = Schema.encodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
113113const DEFAULT_ANNOTATION_THEME: DesktopPreviewAnnotationTheme = {
114114 colorScheme: "light",
115115 radius: "0.625rem",
apps/desktop/src/preview/PlaywrightInjectedRuntime.ts+1-1
......@@ -8,7 +8,7 @@ import * as Effect from "effect/Effect";
88import * as Schema from "effect/Schema";
99
1010const require = NodeModule.createRequire(import.meta.url);
11const encodeUnknownJson = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);
11const encodeUnknownJson = Schema.encodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
1212const PLAYWRIGHT_PACKAGE_SPECIFIER = "playwright-core/package.json";
1313const PLAYWRIGHT_SOURCE_MARKER = "source3 = ";
1414const PLAYWRIGHT_SOURCE_TERMINATOR = ";\n }\n});";
apps/server/src/cli/config.test.ts+6-2
......@@ -1,3 +1,5 @@
1// @effect-diagnostics nodeBuiltinImport:off
2import * as NodeFS from "node:fs";
13import * as NodeOS from "node:os";
24
35import { assert, expect, it } from "@effect/vitest";
......@@ -56,8 +58,10 @@ it.layer(NodeServices.layer)("cli config resolution", (it) => {
5658 const filePath = yield* fs.makeTempFileScoped({ prefix: "t3-bootstrap-", suffix: ".ndjson" });
5759 const encoded = yield* encodeDesktopBootstrap(payload);
5860 yield* fs.writeFileString(filePath, `${encoded}\n`);
59 const { fd } = yield* fs.open(filePath, { flag: "r" });
60 return fd;
61 return yield* Effect.acquireRelease(
62 Effect.sync(() => NodeFS.openSync(filePath, "r")),
63 (fd) => Effect.sync(() => NodeFS.closeSync(fd)),
64 );
6165 });
6266
6367 it.effect("falls back to effect/config values when flags are omitted", () =>
apps/server/src/cli/config.ts+1-1
......@@ -466,7 +466,7 @@ export const DurationFromString = Schema.String.pipe(
466466 return Effect.succeed(duration);
467467 }
468468 return Effect.fail(
469 new SchemaIssue.InvalidValue(Option.some(value), {
469 new SchemaIssue.InvalidValue({
470470 message: "Invalid duration. Use values like 5m, 1h, 30d, or 15 minutes.",
471471 }),
472472 );
apps/server/src/cloud/publicConfig.ts+2-3
......@@ -4,7 +4,6 @@ import { normalizeSecureRelayUrl } from "@t3tools/shared/relayUrl";
44import * as Config from "effect/Config";
55import * as ConfigProvider from "effect/ConfigProvider";
66import * as Effect from "effect/Effect";
7import * as Option from "effect/Option";
87import * as Schema from "effect/Schema";
98import * as SchemaIssue from "effect/SchemaIssue";
109
......@@ -24,7 +23,7 @@ function validateRelayUrl(value: string) {
2423 ? Effect.fail(
2524 new Config.ConfigError(
2625 new Schema.SchemaError(
27 new SchemaIssue.InvalidValue(Option.some(value), {
26 new SchemaIssue.InvalidValue({
2827 message: "Relay URL must be a secure absolute HTTPS origin.",
2928 }),
3029 ),
......@@ -130,7 +129,7 @@ function validateHostedAppUrl(value: string) {
130129 return Effect.fail(
131130 new Config.ConfigError(
132131 new Schema.SchemaError(
133 new SchemaIssue.InvalidValue(Option.some(value), {
132 new SchemaIssue.InvalidValue({
134133 message: "Hosted app URL must be an absolute HTTPS origin (or HTTP loopback origin).",
135134 }),
136135 ),
apps/server/src/http.ts+3-68
......@@ -14,10 +14,10 @@ import * as Option from "effect/Option";
1414import * as Path from "effect/Path";
1515import { cast } from "effect/Function";
1616import {
17 Headers,
1817 HttpBody,
1918 HttpClient,
2019 HttpClientResponse,
20 HttpMiddleware,
2121 HttpRouter,
2222 HttpServerResponse,
2323 HttpServerRequest,
......@@ -30,7 +30,6 @@ import * as ServerConfig from "./config.ts";
3030import { ASSET_ROUTE_PREFIX, resolveAsset } from "./assets/AssetAccess.ts";
3131import * as BrowserTraceCollector from "./observability/BrowserTraceCollector.ts";
3232import * as EnvironmentAuth from "./auth/EnvironmentAuth.ts";
33import * as HttpResponseCompression from "./httpCompression/HttpResponseCompression.ts";
3433import { traceRelayRequest } from "./cloud/traceRelayRequest.ts";
3534import {
3635 annotateEnvironmentRequest,
......@@ -44,74 +43,10 @@ import { browserApiCorsAllowedHeaders, browserApiCorsAllowedMethods } from "./ht
4443const OTLP_TRACES_PROXY_PATH = "/api/observability/v1/traces";
4544const LOOPBACK_HOSTNAMES = new Set(["127.0.0.1", "::1", "localhost"]);
4645const DESKTOP_RENDERER_ORIGINS = ["t3code://app", "t3code-dev://app"];
47const GZIP_MIN_BYTES = 1024;
48
49function acceptsGzip(value: string | undefined): boolean {
50 if (!value) return false;
51
52 const accepted = new Map(
53 value.split(",").map((entry) => {
54 const [coding = "", ...parameters] = entry.trim().toLowerCase().split(";");
55 const quality = parameters
56 .map((parameter) => parameter.trim().match(/^q=(.+)$/)?.[1])
57 .find((parameter) => parameter !== undefined);
58 return [coding, quality === undefined ? 1 : Number(quality)] as const;
59 }),
60 );
61 return (accepted.get("gzip") ?? accepted.get("*") ?? 0) > 0;
62}
63
64function varyByAcceptEncoding(value: string | undefined): string {
65 if (!value) return "Accept-Encoding";
66 const values = new Set(value.split(",").map((entry) => entry.trim().toLowerCase()));
67 return values.has("*") || values.has("accept-encoding") ? value : `${value}, Accept-Encoding`;
68}
69
70const compressHttpResponse = Effect.fnUntraced(function* (
71 response: HttpServerResponse.HttpServerResponse,
72 acceptEncoding: string | undefined,
73) {
74 const body = response.body;
75 if (
76 body._tag !== "Uint8Array" ||
77 body.contentLength < GZIP_MIN_BYTES ||
78 !body.contentType.startsWith("application/json") ||
79 response.headers["content-encoding"]
80 ) {
81 return response;
82 }
83
84 const variedResponse = HttpServerResponse.setHeader(
85 response,
86 "vary",
87 varyByAcceptEncoding(response.headers.vary),
88 );
89 if (!acceptsGzip(acceptEncoding)) return variedResponse;
90
91 const compression = yield* HttpResponseCompression.HttpResponseCompression;
92 const headers = Headers.set(
93 Headers.remove(variedResponse.headers, "content-length"),
94 "content-encoding",
95 "gzip",
96 );
97 return compression.gzip(body.body, {
98 status: response.status,
99 statusText: response.statusText,
100 headers,
101 cookies: response.cookies,
102 contentType: body.contentType,
103 });
46export const httpCompressionLayer = HttpRouter.middleware(HttpMiddleware.compression(), {
47 global: true,
10448});
10549
106export const httpCompressionLayer = HttpRouter.middleware(
107 (httpEffect) =>
108 Effect.flatMap(
109 Effect.all([httpEffect, HttpServerRequest.HttpServerRequest]),
110 ([response, request]) => compressHttpResponse(response, request.headers["accept-encoding"]),
111 ),
112 { global: true },
113);
114
11550export const browserApiCorsLayer = Layer.unwrap(
11651 Effect.gen(function* () {
11752 const config = yield* ServerConfig.ServerConfig;
apps/server/src/httpCompression/HttpResponseCompression.test.ts deleted-29
......@@ -1,29 +0,0 @@
1import { expect, it } from "@effect/vitest";
2import * as NodeStream from "node:stream";
3import * as Effect from "effect/Effect";
4
5import * as HttpResponseCompression from "./HttpResponseCompression.ts";
6
7it.effect("uses a native Node stream", () =>
8 Effect.gen(function* () {
9 const compression = yield* HttpResponseCompression.HttpResponseCompression;
10 const response = compression.gzip(new Uint8Array(), {});
11
12 expect(response.body._tag).toBe("Raw");
13 if (response.body._tag === "Raw") {
14 expect(response.body.body).toBeInstanceOf(NodeStream.Readable);
15 }
16 }).pipe(Effect.provide(HttpResponseCompression.layerNode)),
17);
18
19it.effect("uses a native Web stream for Bun", () =>
20 Effect.gen(function* () {
21 const compression = yield* HttpResponseCompression.HttpResponseCompression;
22 const response = compression.gzip(new Uint8Array(), {});
23
24 expect(response.body._tag).toBe("Raw");
25 if (response.body._tag === "Raw") {
26 expect(response.body.body).toBeInstanceOf(ReadableStream);
27 }
28 }).pipe(Effect.provide(HttpResponseCompression.layerBun)),
29);
apps/server/src/httpCompression/HttpResponseCompression.ts deleted-36
......@@ -1,36 +0,0 @@
1import * as Context from "effect/Context";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse";
5
6export class HttpResponseCompression extends Context.Service<
7 HttpResponseCompression,
8 {
9 readonly gzip: (
10 body: Uint8Array,
11 options: HttpServerResponse.Options,
12 ) => HttpServerResponse.HttpServerResponse;
13 }
14>()("t3/httpCompression/HttpResponseCompression") {}
15
16export const layerNode = Layer.effect(
17 HttpResponseCompression,
18 Effect.gen(function* () {
19 const NodeZlib = yield* Effect.promise(() => import("node:zlib"));
20 return {
21 gzip: (body, options) => {
22 const stream = NodeZlib.createGzip();
23 stream.end(body);
24 return HttpServerResponse.raw(stream, options);
25 },
26 };
27 }),
28);
29
30export const layerBun = Layer.succeed(HttpResponseCompression, {
31 gzip: (body, options) =>
32 HttpServerResponse.raw(
33 new Response(body).body!.pipeThrough(new CompressionStream("gzip")),
34 options,
35 ),
36});
apps/server/src/keybindings.ts+2-3
......@@ -29,7 +29,6 @@ import * as Exit from "effect/Exit";
2929import * as FileSystem from "effect/FileSystem";
3030import * as Path from "effect/Path";
3131import * as Layer from "effect/Layer";
32import * as Option from "effect/Option";
3332import * as Predicate from "effect/Predicate";
3433import * as PubSub from "effect/PubSub";
3534import * as Result from "effect/Result";
......@@ -68,7 +67,7 @@ export const ResolvedKeybindingFromConfig = KeybindingRule.pipe(
6867 Effect.filterOrFail(
6968 Predicate.isNotNull,
7069 () =>
71 new SchemaIssue.InvalidValue(Option.some(rule), {
70 new SchemaIssue.InvalidValue({
7271 message: "Invalid keybinding rule",
7372 }),
7473 ),
......@@ -80,7 +79,7 @@ export const ResolvedKeybindingFromConfig = KeybindingRule.pipe(
8079 const key = encodeShortcut(resolved.shortcut);
8180 if (!key) {
8281 return yield* Effect.fail(
83 new SchemaIssue.InvalidValue(Option.some(resolved), {
82 new SchemaIssue.InvalidValue({
8483 message: "Resolved shortcut cannot be encoded to key string",
8584 }),
8685 );
apps/server/src/mcp/McpHttpServer.test.ts+6-3
......@@ -5,7 +5,7 @@ import { EnvironmentId, PreviewTabId, ProviderInstanceId, ThreadId } from "@t3to
55import * as Effect from "effect/Effect";
66import * as Layer from "effect/Layer";
77import * as Stream from "effect/Stream";
8import { McpSchema, McpServer } from "effect/unstable/ai";
8import { McpProtocol, McpSchema, McpServer } from "effect/unstable/ai";
99import { HttpBody, HttpClient, HttpRouter, HttpServerResponse } from "effect/unstable/http";
1010
1111import * as McpHttpServer from "./McpHttpServer.ts";
......@@ -26,8 +26,9 @@ const invocation = {
2626};
2727const client = McpSchema.McpServerClient.of({
2828 clientId: 1,
29 protocolVersion: "2025-06-18",
2930 initializePayload: {
30 protocolVersion: "2025-03-26",
31 protocolVersion: "2025-06-18",
3132 capabilities: {},
3233 clientInfo: { name: "mcp-test", version: "1.0.0" },
3334 },
......@@ -103,6 +104,7 @@ it.effect("terminates HTTP MCP sessions with DELETE", () =>
103104 name: "MCP termination test",
104105 version: "1.0.0",
105106 path: "/mcp",
107 protocols: [McpProtocol.v2025_06_18],
106108 });
107109 yield* HttpRouter.serve(serverLayer, {
108110 disableListenLog: true,
......@@ -239,8 +241,9 @@ it.effect("registers annotated tools and preserves authenticated request context
239241 .pipe(
240242 Effect.provideService(McpInvocationContext.McpInvocationContext, invocation),
241243 Effect.provideService(McpSchema.McpServerClient, client),
244 Effect.flip,
242245 );
243 expect(malformed.isError).toBe(true);
246 expect(malformed._tag).toBe("InvalidParams");
244247
245248 const snapshot = yield* server
246249 .callTool({ name: "preview_snapshot", arguments: { tabId: alternateTabId } })
apps/server/src/mcp/McpHttpServer.ts+2-1
......@@ -6,7 +6,7 @@ import * as Option from "effect/Option";
66import * as Sink from "effect/Sink";
77import * as Stream from "effect/Stream";
88import type * as Types from "effect/Types";
9import { McpSchema, McpServer, Tool } from "effect/unstable/ai";
9import { McpProtocol, McpSchema, McpServer, Tool } from "effect/unstable/ai";
1010import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
1111
1212import packageJson from "../../package.json" with { type: "json" };
......@@ -220,6 +220,7 @@ const McpTransportLive = McpServer.layerHttp({
220220 name: "T3 Code",
221221 version: packageJson.version,
222222 path: "/mcp",
223 protocols: [McpProtocol.v2025_06_18],
223224}).pipe(Layer.provide(McpAuthMiddlewareLive));
224225
225226export const layer = PreviewToolkitRegistrationLive.pipe(Layer.provideMerge(McpTransportLive));
apps/server/src/provider/Layers/ClaudeAdapter.ts+2-2
......@@ -90,8 +90,8 @@ import {
9090} from "../Errors.ts";
9191import { type ClaudeAdapterShape } from "../Services/ClaudeAdapter.ts";
9292import { type EventNdjsonLogger, makeEventNdjsonLogger } from "./EventNdjsonLogger.ts";
93const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);
94const decodeUnknownJsonStringExit = Schema.decodeUnknownExit(Schema.UnknownFromJsonString);
93const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
94const decodeUnknownJsonStringExit = Schema.decodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
9595
9696const PROVIDER = ProviderDriverKind.make("claudeAgent");
9797type ClaudeTextStreamKind = Extract<RuntimeContentStreamKind, "assistant_text" | "reasoning_text">;
apps/server/src/provider/Layers/CursorAdapter.ts+1-1
......@@ -77,7 +77,7 @@ import {
7777import { type CursorAdapterShape } from "../Services/CursorAdapter.ts";
7878import { resolveCursorAcpBaseModelId } from "./CursorProvider.ts";
7979import { type EventNdjsonLogger, makeEventNdjsonLogger } from "./EventNdjsonLogger.ts";
80const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);
80const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
8181
8282const PROVIDER = ProviderDriverKind.make("cursor");
8383const CURSOR_RESUME_VERSION = 1 as const;
apps/server/src/provider/Layers/EventNdjsonLogger.test.ts+1-1
......@@ -20,7 +20,7 @@ import {
2020 writeBatchedMessages,
2121} from "./EventNdjsonLogger.ts";
2222
23const encodeUnknownJson = Schema.encodeUnknownSync(Schema.UnknownFromJsonString);
23const encodeUnknownJson = Schema.encodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
2424
2525function ownedLogPath(basePath: string, segment: string): string {
2626 const basename = NodePath.basename(basePath);
apps/server/src/provider/Layers/EventNdjsonLogger.ts+1-1
......@@ -34,7 +34,7 @@ const DEFAULT_MAX_BUFFERED_BYTES = MEBIBYTE;
3434const DEFAULT_MAX_BUFFERED_RECORDS = 512;
3535const GLOBAL_THREAD_SEGMENT = "_global";
3636const LOG_SCOPE = "provider-observability";
37const encodeUnknownJsonString = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);
37const encodeUnknownJsonString = Schema.encodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
3838
3939const transientCanonicalEventTypes = new Set([
4040 "content.delta",
apps/server/src/provider/Layers/GrokAdapter.ts+1-1
......@@ -69,7 +69,7 @@ import {
6969import { type GrokAdapterShape } from "../Services/GrokAdapter.ts";
7070import { type EventNdjsonLogger, makeEventNdjsonLogger } from "./EventNdjsonLogger.ts";
7171
72const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);
72const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
7373
7474const PROVIDER = ProviderDriverKind.make("grok");
7575const GROK_RESUME_VERSION = 1 as const;
apps/server/src/provider/acp/AcpNativeLogging.test.ts+1-1
......@@ -12,7 +12,7 @@ import type { EventNdjsonLogger } from "../Layers/EventNdjsonLogger.ts";
1212import { makeAcpNativeLoggerFactory } from "./AcpNativeLogging.ts";
1313
1414const nodeServicesIt = it.layer(NodeServices.layer);
15const encodeUnknownJson = Schema.encodeUnknownSync(Schema.UnknownFromJsonString);
15const encodeUnknownJson = Schema.encodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
1616
1717nodeServicesIt("ACP native logging", (it) => {
1818 it.effect("records bounded request and protocol diagnostics without raw payloads", () =>
apps/server/src/provider/opencodeRuntime.ts+1-1
......@@ -34,7 +34,7 @@ import { collectStreamAsString } from "./providerSnapshot.ts";
3434import * as NetService from "@t3tools/shared/Net";
3535import { HostProcessPlatform } from "@t3tools/shared/hostProcess";
3636import { resolveSpawnCommand } from "@t3tools/shared/shell";
37const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.UnknownFromJsonString);
37const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
3838const OPENCODE_EMPTY_CONFIG_CONTENT = "{}";
3939
4040const OPENCODE_SERVER_READY_PREFIX = "opencode server listening";
apps/server/src/server.test.ts+23-3
......@@ -73,7 +73,6 @@ const TEST_EPOCH = DateTime.makeUnsafe("1970-01-01T00:00:00.000Z");
7373
7474import * as BackgroundPolicy from "./background/BackgroundPolicy.ts";
7575import * as ServerConfig from "./config.ts";
76import * as HttpResponseCompression from "./httpCompression/HttpResponseCompression.ts";
7776import { makeRoutesLayer } from "./server.ts";
7877import { resolveAvailableEditorsForConfig } from "./ws.ts";
7978import * as CheckpointDiffQuery from "./checkpointing/CheckpointDiffQuery.ts";
......@@ -892,7 +891,6 @@ const buildAppUnderTest = (options?: {
892891 Layer.provideMerge(ServerSecretStore.layer),
893892 Layer.provide(workspaceAndProjectServicesLayer),
894893 Layer.provideMerge(FetchHttpClient.layer),
895 Layer.provide(HttpResponseCompression.layerNode),
896894 Layer.provide(layerConfig),
897895 );
898896
......@@ -3221,6 +3219,28 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
32213219 }).pipe(Effect.provide(NodeHttpServer.layerTest)),
32223220 );
32233221
3222 // Mirrors NodeHttpServer.layerTest, which does not expose server options,
3223 // with the production `websocket: { perMessageDeflate: true }` setting.
3224 const NodeHttpServerTestWithWsDeflate = HttpServer.layerTestClient.pipe(
3225 Layer.provide(
3226 Layer.fresh(FetchHttpClient.layer).pipe(
3227 Layer.provide(Layer.succeed(FetchHttpClient.RequestInit)({ keepalive: false })),
3228 ),
3229 ),
3230 Layer.provideMerge(
3231 Layer.unwrap(
3232 Effect.map(
3233 Effect.promise(() => import("node:http")),
3234 (NodeHttp) =>
3235 NodeHttpServer.layer(NodeHttp.createServer, {
3236 port: 0,
3237 websocket: { perMessageDeflate: true },
3238 }),
3239 ),
3240 ),
3241 ),
3242 );
3243
32243244 it.effect("negotiates permessage-deflate with clients that offer it", () =>
32253245 Effect.gen(function* () {
32263246 yield* buildAppUnderTest();
......@@ -3246,7 +3266,7 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
32463266
32473267 const plain = yield* openSocket(false);
32483268 assert.notInclude(plain.extensions, "permessage-deflate");
3249 }).pipe(Effect.scoped, Effect.provide(NodeHttpServer.layerTest)),
3269 }).pipe(Effect.scoped, Effect.provide(NodeHttpServerTestWithWsDeflate)),
32503270 );
32513271
32523272 it.effect("issues short-lived websocket tickets for authenticated bearer sessions", () =>
apps/server/src/server.ts+21-5
......@@ -10,7 +10,6 @@ import * as HttpApiBuilder from "effect/unstable/httpapi/HttpApiBuilder";
1010import * as BackgroundPolicy from "./background/BackgroundPolicy.ts";
1111import * as HostPowerMonitor from "./background/HostPowerMonitor.ts";
1212import * as ServerConfig from "./config.ts";
13import * as HttpResponseCompression from "./httpCompression/HttpResponseCompression.ts";
1413import {
1514 otlpTracesProxyRouteLayer,
1615 assetRouteLayer,
......@@ -182,6 +181,20 @@ const HttpServerLive = Layer.unwrap(
182181 port: config.port,
183182 hostname: config.host ?? "127.0.0.1",
184183 gracefulShutdownTimeout: HTTP_PREEMPTIVE_SHUTDOWN_GRACE_MS,
184 websocket: {
185 // Negotiate permessage-deflate with clients that offer it; clients
186 // that don't still get uncompressed frames on their connection. A
187 // dedicated compressor keeps a per-connection sliding window
188 // (context takeover) so the compression dictionary is shared across
189 // server-to-client frames. Decompression uses the shared
190 // decompressor: uWebSockets' dedicated decompressor path can abort
191 // connections (close 1006) on valid DEFLATE input — see
192 // https://github.com/uNetworking/uWebSockets.js/issues/633.
193 perMessageDeflate: {
194 compress: "dedicated",
195 decompress: "shared",
196 },
197 },
185198 });
186199 } else {
187200 const [NodeHttpServer, NodeHttp] = yield* Effect.all([
......@@ -192,14 +205,18 @@ const HttpServerLive = Layer.unwrap(
192205 host: config.host ?? "127.0.0.1",
193206 port: config.port,
194207 gracefulShutdownTimeout: HTTP_PREEMPTIVE_SHUTDOWN_GRACE_MS,
208 // Negotiate permessage-deflate with clients that offer it; clients
209 // that don't still get uncompressed frames on their connection.
210 // Context takeover stays enabled (ws default) so the compression
211 // window is shared across frames — that also makes small frames cheap
212 // to compress, so no size threshold is set (ws only honors
213 // `threshold` when context takeover is disabled).
214 websocket: { perMessageDeflate: true },
195215 });
196216 }
197217 }),
198218);
199219
200const HttpResponseCompressionLive =
201 typeof Bun !== "undefined" ? HttpResponseCompression.layerBun : HttpResponseCompression.layerNode;
202
203220const PlatformServicesLive = Layer.unwrap(
204221 Effect.gen(function* () {
205222 if (typeof Bun !== "undefined") {
......@@ -622,7 +639,6 @@ export const makeServerLayer = Layer.unwrap(
622639 Layer.provideMerge(runtimeServicesLive),
623640 Layer.provide(activationLayer),
624641 Layer.provideMerge(serverRelayBrokerTracingLayer),
625 Layer.provideMerge(HttpResponseCompressionLive),
626642 Layer.provideMerge(HttpServerLive),
627643 Layer.provide(ApplicationObservabilityLive),
628644 Layer.provideMerge(FetchHttpClient.layer),
apps/server/src/textGeneration/ClaudeTextGeneration.ts+1-1
......@@ -55,7 +55,7 @@ const ClaudeOutputEnvelope = Schema.Struct({
5555 structured_output: Schema.Unknown,
5656});
5757
58const encodeJsonString = Schema.encodeEffect(Schema.UnknownFromJsonString);
58const encodeJsonString = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
5959const decodeClaudeOutputEnvelope = Schema.decodeEffect(Schema.fromJsonString(ClaudeOutputEnvelope));
6060
6161export const makeClaudeTextGeneration = Effect.fn("makeClaudeTextGeneration")(function* (
apps/server/src/textGeneration/CodexTextGeneration.ts+1-1
......@@ -35,7 +35,7 @@ import { getCodexServiceTierOptionValue } from "../codexModelOptions.ts";
3535
3636const CODEX_GIT_TEXT_GENERATION_REASONING_EFFORT = "low";
3737const CODEX_TIMEOUT_MS = 180_000;
38const encodeJsonString = Schema.encodeEffect(Schema.UnknownFromJsonString);
38const encodeJsonString = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
3939/**
4040 * Build a Codex text-generation closure bound to a specific `CodexSettings`
4141 * payload. See `makeCodexAdapter` for the overall per-instance rationale.
infra/relay/src/agentActivity/AgentActivityRows.ts+2-2
......@@ -91,8 +91,8 @@ export class AgentActivityRows extends Context.Service<
9191 }
9292>()("t3code-relay/agentActivity/AgentActivityRows") {}
9393
94const decodeJsonString = Schema.decodeEffect(Schema.UnknownFromJsonString);
95const encodeJsonValue = Schema.encodeEffect(Schema.UnknownFromJsonString);
94const decodeJsonString = Schema.decodeEffect(Schema.fromJsonString(Schema.Unknown));
95const encodeJsonValue = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
9696
9797const encodeRelayAgentActivityStateJson = Schema.encodeEffect(
9898 Schema.fromJsonString(RelayAgentActivityStateSchema),
infra/relay/src/agentActivity/LiveActivities.ts+2-2
......@@ -122,8 +122,8 @@ export class LiveActivities extends Context.Service<
122122 }
123123>()("t3code-relay/agentActivity/LiveActivities") {}
124124
125const decodeJsonString = Schema.decodeEffect(Schema.UnknownFromJsonString);
126const encodeJsonValue = Schema.encodeEffect(Schema.UnknownFromJsonString);
125const decodeJsonString = Schema.decodeEffect(Schema.fromJsonString(Schema.Unknown));
126const encodeJsonValue = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
127127
128128const encodeRelayAgentActivityAggregateStateJson = Schema.encodeEffect(
129129 Schema.fromJsonString(RelayAgentActivityAggregateStateSchema),
infra/relay/src/observability.test.ts+2-2
......@@ -21,11 +21,11 @@ interface ExportedRequest {
2121const otlpAttributeValue = (value: {
2222 readonly stringValue?: string | null;
2323 readonly boolValue?: boolean | null;
24 readonly intValue?: number | null;
24 readonly intValue?: string | number | null;
2525 readonly doubleValue?: number | null;
2626}) => value.stringValue ?? value.boolValue ?? value.intValue ?? value.doubleValue;
2727
28const decodeJson = Schema.decodeUnknownEffect(Schema.UnknownFromJsonString);
28const decodeJson = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
2929
3030it.effect("exports schema error fields as span attributes", () =>
3131 Effect.gen(function* () {
infra/relay/src/worker.ts+5
......@@ -72,6 +72,11 @@ const webcryptoLayer = Layer.succeed(
7272);
7373
7474const httpPlatformNotSupportedLayer = Layer.succeed(HttpPlatform.HttpPlatform, {
75 platform: "web",
76 compression: {
77 algorithms: new Set<HttpPlatform.CompressionAlgorithm>(),
78 compressResponse: (response) => Effect.succeed(response),
79 },
7580 fileResponse: () => Effect.die("Relay API does not serve filesystem responses"),
7681 fileWebResponse: () => Effect.die("Relay API does not serve file responses"),
7782});
oxlint-plugin-t3code/test/utils.ts+1-1
......@@ -38,7 +38,7 @@ class OxlintFixtureExpectedFailure extends Data.TaggedError("OxlintFixtureExpect
3838 }
3939}
4040
41const encodeOxlintConfig = Schema.encodeEffect(Schema.UnknownFromJsonString);
41const encodeOxlintConfig = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
4242
4343interface RuleHarness {
4444 readonly run: (
packages/client-runtime/src/rpc/session.test.ts+2-2
......@@ -138,9 +138,9 @@ const RpcRequest = Schema.TaggedStruct("Request", {
138138 payload: Schema.Unknown,
139139 tag: Schema.String,
140140});
141const decodeJson = Schema.decodeUnknownSync(Schema.UnknownFromJsonString);
141const decodeJson = Schema.decodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
142142const decodeRpcRequest = Schema.decodeUnknownSync(RpcRequest);
143const encodeJson = Schema.encodeUnknownSync(Schema.UnknownFromJsonString);
143const encodeJson = Schema.encodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
144144const encodeServerConfig = Schema.encodeSync(ServerConfig);
145145const ENCODED_SERVER_CONFIG = encodeServerConfig(SERVER_CONFIG);
146146const LEGACY_SERVER_CONFIG = {
packages/contracts/src/orchestration.ts+1-2
......@@ -1,5 +1,4 @@
11import * as Effect from "effect/Effect";
2import * as Option from "effect/Option";
32import * as Schema from "effect/Schema";
43import * as SchemaIssue from "effect/SchemaIssue";
54import * as SchemaTransformation from "effect/SchemaTransformation";
......@@ -1320,7 +1319,7 @@ export const TurnCountRange = Schema.Struct({
13201319 Schema.makeFilter(
13211320 (input) =>
13221321 input.fromTurnCount <= input.toTurnCount ||
1323 new SchemaIssue.InvalidValue(Option.some(input.fromTurnCount), {
1322 new SchemaIssue.InvalidValue({
13241323 message: "fromTurnCount must be less than or equal to toTurnCount",
13251324 }),
13261325 { identifier: "OrchestrationTurnDiffRange" },
packages/effect-acp/src/errors.test.ts+1-1
......@@ -10,7 +10,7 @@ import * as AcpError from "./errors.ts";
1010const decodeNestedNumberPayload = Schema.decodeUnknownEffect(
1111 Schema.Struct({ profile: Schema.Struct({ token: Schema.Number }) }),
1212);
13const encodeUnknownJson = Schema.encodeSync(Schema.UnknownFromJsonString);
13const encodeUnknownJson = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown));
1414
1515describe("effect-acp errors", () => {
1616 it.effect("retains RPC method and cause without deriving the message from the cause", () => {
packages/effect-acp/src/protocol.test.ts+1-1
......@@ -49,7 +49,7 @@ const decodeExtResponse = Schema.decodeEffect(Schema.fromJsonString(ExtResponse)
4949const decodeRequestPermissionResponse = Schema.decodeEffect(
5050 Schema.fromJsonString(RequestPermissionResponse),
5151);
52const encodeUnknownJsonString = Schema.encodeUnknownSync(Schema.UnknownFromJsonString);
52const encodeUnknownJsonString = Schema.encodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
5353const encoder = new TextEncoder();
5454const mockPeerPath = Effect.map(Effect.service(Path.Path), (path) =>
5555 path.join(import.meta.dirname, "../test/fixtures/acp-mock-peer.ts"),
packages/effect-codex-app-server/src/_internal/shared.test.ts+1-1
......@@ -8,7 +8,7 @@ import * as Shared from "./shared.ts";
88const decodeNestedNumberPayload = Schema.decodeUnknownEffect(
99 Schema.Struct({ profile: Schema.Struct({ token: Schema.Number }) }),
1010);
11const encodeUnknownJson = Schema.encodeSync(Schema.UnknownFromJsonString);
11const encodeUnknownJson = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown));
1212
1313it.effect("preserves schema decode diagnostics without deriving the message from the cause", () =>
1414 Effect.gen(function* () {
packages/effect-codex-app-server/src/protocol.test.ts+2-2
......@@ -13,13 +13,13 @@ import * as CodexProtocol from "./protocol.ts";
1313import * as CodexRpc from "./rpc.ts";
1414import * as CodexSchema from "./schema.ts";
1515import { makeInMemoryStdio } from "./_internal/stdio.ts";
16const encodeUnknownJsonString = Schema.encodeUnknownSync(Schema.UnknownFromJsonString);
16const encodeUnknownJsonString = Schema.encodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
1717
1818const encoder = new TextEncoder();
1919
2020const encodeJsonl = (value: unknown) => encoder.encode(`${encodeUnknownJsonString(value)}\n`);
2121
22const decodeJson = Schema.decodeEffect(Schema.UnknownFromJsonString);
22const decodeJson = Schema.decodeEffect(Schema.fromJsonString(Schema.Unknown));
2323const decodeAccountTokenUsageResponse = Schema.decodeUnknownEffect(
2424 CodexRpc.CLIENT_REQUEST_RESPONSES["account/usage/read"],
2525);
packages/effect-codex-app-server/src/protocol.ts+2-2
......@@ -91,8 +91,8 @@ function isIncomingResponse(value: unknown): value is typeof JsonRpcResponseEnve
9191 return isJsonRpcResponseEnvelope(value);
9292}
9393
94const encodeJsonString = Schema.encodeUnknownEffect(Schema.UnknownFromJsonString);
95const decodeJsonString = Schema.decodeUnknownEffect(Schema.UnknownFromJsonString);
94const encodeJsonString = Schema.encodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
95const decodeJsonString = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
9696
9797const encodeWireMessage = (
9898 message: Record<string, unknown>,
packages/shared/src/schemaJson.ts+1-1
......@@ -175,7 +175,7 @@ export const formatSchemaError = (cause: Cause.Cause<Schema.SchemaError>) => {
175175 *
176176 * Mirrors `SchemaGetter.parseJson()` but strips JSONC syntax before parsing.
177177 */
178const decodeJsonString = Schema.decodeEffect(Schema.UnknownFromJsonString);
178const decodeJsonString = Schema.decodeEffect(Schema.fromJsonString(Schema.Unknown));
179179
180180const parseLenientJsonGetter = SchemaGetter.onSome((input: string) => {
181181 // Strip single-line comments - alternation preserves quoted strings.
packages/shared/src/schemaYaml.ts+2-5
......@@ -1,5 +1,4 @@
11import * as Effect from "effect/Effect";
2import * as Option from "effect/Option";
32import * as Schema from "effect/Schema";
43import * as SchemaGetter from "effect/SchemaGetter";
54import * as SchemaIssue from "effect/SchemaIssue";
......@@ -62,8 +61,7 @@ export function parseYaml<E extends string>(
6261 return SchemaGetter.transformOrFail((input: E) =>
6362 Effect.try({
6463 try: () => parseYamlString(input, options) as unknown,
65 catch: (error) =>
66 new SchemaIssue.InvalidValue(Option.none(), { message: formatYamlParseError(error) }),
64 catch: (error) => new SchemaIssue.InvalidValue({ message: formatYamlParseError(error) }),
6765 }),
6866 );
6967}
......@@ -97,8 +95,7 @@ export function stringifyYaml(
9795 return SchemaGetter.transformOrFail((input: unknown) =>
9896 Effect.try({
9997 try: () => stringifyYamlValue(input, options),
100 catch: () =>
101 new SchemaIssue.InvalidValue(Option.none(), { message: "Failed to stringify YAML." }),
98 catch: () => new SchemaIssue.InvalidValue({ message: "Failed to stringify YAML." }),
10299 }),
103100 );
104101}
patches/@effect__platform-bun@4.0.0-beta.102.patch deleted-50
......@@ -1,50 +0,0 @@
1diff --git a/dist/BunHttpServer.js b/dist/BunHttpServer.js
2index 5fb0cbacc183b58e31a442badf4aef06bebcd592..e31fb00c430821fc06247079091a93fb15a1ab92 100644
3--- a/dist/BunHttpServer.js
4+++ b/dist/BunHttpServer.js
5@@ -45,6 +45,20 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
6 ...options,
7 fetch: handlerStack[0],
8 websocket: {
9+ // Patch: upstreamed as https://github.com/Effect-TS/effect/pull/6691 (ships
10+ // in >= 4.0.0-beta.103 as the layer option `websocket: { ... }`). On
11+ // upgrade: drop this patch and pass the option in apps/server/src/server.ts.
12+ // Negotiate permessage-deflate with clients that offer it; clients that
13+ // don't still get uncompressed frames on their connection. A dedicated
14+ // compressor keeps a per-connection sliding window (context takeover) so
15+ // the compression dictionary is shared across server-to-client frames.
16+ // Decompression uses the shared decompressor: uWebSockets' dedicated
17+ // decompressor path can abort connections (close 1006) on valid DEFLATE
18+ // input — see https://github.com/uNetworking/uWebSockets.js/issues/633.
19+ perMessageDeflate: {
20+ compress: "dedicated",
21+ decompress: "shared"
22+ },
23 open(ws) {
24 Deferred.doneUnsafe(ws.data.deferred, Exit.succeed(ws));
25 },
26diff --git a/src/BunHttpServer.ts b/src/BunHttpServer.ts
27index 9f2ac3dfc018e2d35c6f44785f1ce05e2e06fc7c..f2bd3def712677ae1e7d475f5eaf27ac2e42ae1a 100644
28--- a/src/BunHttpServer.ts
29+++ b/src/BunHttpServer.ts
30@@ -90,6 +90,20 @@ export const make = Effect.fnUntraced(
31 ...options as ServeOptions<R>,
32 fetch: handlerStack[0],
33 websocket: {
34+ // Patch: upstreamed as https://github.com/Effect-TS/effect/pull/6691 (ships
35+ // in >= 4.0.0-beta.103 as the layer option `websocket: { ... }`). On
36+ // upgrade: drop this patch and pass the option in apps/server/src/server.ts.
37+ // Negotiate permessage-deflate with clients that offer it; clients that
38+ // don't still get uncompressed frames on their connection. A dedicated
39+ // compressor keeps a per-connection sliding window (context takeover) so
40+ // the compression dictionary is shared across server-to-client frames.
41+ // Decompression uses the shared decompressor: uWebSockets' dedicated
42+ // decompressor path can abort connections (close 1006) on valid DEFLATE
43+ // input — see https://github.com/uNetworking/uWebSockets.js/issues/633.
44+ perMessageDeflate: {
45+ compress: "dedicated",
46+ decompress: "shared"
47+ },
48 open(ws) {
49 Deferred.doneUnsafe(ws.data.deferred, Exit.succeed(ws))
50 },
patches/@effect__platform-node@4.0.0-beta.102.patch deleted-50
......@@ -1,50 +0,0 @@
1diff --git a/dist/NodeHttpServer.js b/dist/NodeHttpServer.js
2index ab7c9354853032fefa192ebfa8ab2026bac6ddb7..319815f01e78f5d4e6f7e62a00046ec092eaf797 100644
3--- a/dist/NodeHttpServer.js
4+++ b/dist/NodeHttpServer.js
5@@ -83,7 +83,17 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (evaluate, options)
6 });
7 const address = server.address();
8 const wss = yield* Effect.acquireRelease(Effect.sync(() => new NodeWS.WebSocketServer({
9- noServer: true
10+ noServer: true,
11+ // Patch: upstreamed as https://github.com/Effect-TS/effect/pull/6691 (ships
12+ // in >= 4.0.0-beta.103 as the layer option `websocket: { perMessageDeflate }`).
13+ // On upgrade: drop this patch and pass the option in apps/server/src/server.ts.
14+ // Negotiate permessage-deflate with clients that offer it; clients that
15+ // don't still get uncompressed frames on their connection. Context
16+ // takeover stays enabled (ws default) so the compression window is shared
17+ // across frames — that also makes small frames cheap to compress, so no
18+ // size threshold is set (ws only honors `threshold` when context takeover
19+ // is disabled).
20+ perMessageDeflate: true
21 })), wss => Effect.callback(resume => {
22 wss.close(() => resume(Effect.void));
23 })).pipe(Scope.provide(scope), Effect.cached);
24diff --git a/src/NodeHttpServer.ts b/src/NodeHttpServer.ts
25index e18cd931f17c26d6ca985a2d1ece9e9d760851d3..9c888a581738aea12dbdb2b213cce1c480aa2ecc 100644
26--- a/src/NodeHttpServer.ts
27+++ b/src/NodeHttpServer.ts
28@@ -116,7 +116,21 @@ export const make = Effect.fnUntraced(function*(
29 const address = server.address()!
30
31 const wss = yield* Effect.acquireRelease(
32- Effect.sync(() => new NodeWS.WebSocketServer({ noServer: true })),
33+ Effect.sync(() =>
34+ new NodeWS.WebSocketServer({
35+ noServer: true,
36+ // Patch: upstreamed as https://github.com/Effect-TS/effect/pull/6691 (ships
37+ // in >= 4.0.0-beta.103 as the layer option `websocket: { perMessageDeflate }`).
38+ // On upgrade: drop this patch and pass the option in apps/server/src/server.ts.
39+ // Negotiate permessage-deflate with clients that offer it; clients that
40+ // don't still get uncompressed frames on their connection. Context
41+ // takeover stays enabled (ws default) so the compression window is
42+ // shared across frames — that also makes small frames cheap to
43+ // compress, so no size threshold is set (ws only honors `threshold`
44+ // when context takeover is disabled).
45+ perMessageDeflate: true
46+ })
47+ ),
48 (wss) =>
49 Effect.callback<void>((resume) => {
50 wss.close(() => resume(Effect.void))
patches/@effect__vitest@4.0.0-beta.102.patch deleted-124
......@@ -1,124 +0,0 @@
1diff --git a/dist/index.d.ts b/dist/index.d.ts
2index bc52d20f3116059904e99498447451bd4083c0fe..43cf0824f9f294cb441d9ee4cc12de9f82c04e46 100644
3--- a/dist/index.d.ts
4+++ b/dist/index.d.ts
5@@ -7,11 +7,11 @@ import type * as Layer from "effect/Layer";
6 import type * as Schema from "effect/Schema";
7 import type * as Scope from "effect/Scope";
8 import type * as FC from "effect/testing/FastCheck";
9-import * as V from "vitest";
10+import * as V from "vite-plus/test";
11 /**
12 * @since 4.0.0
13 */
14-export * from "vitest";
15+export * from "vite-plus/test";
16 /**
17 * @since 4.0.0
18 */
19diff --git a/dist/index.js b/dist/index.js
20index 938c9c817abe9aeddb9ad8c74e099c62cbf5f091..760ecc47fec5e9df2efd75de17c05ba4b0700ec1 100644
21--- a/dist/index.js
22+++ b/dist/index.js
23@@ -1,9 +1,9 @@
24-import * as V from "vitest";
25+import * as V from "vite-plus/test";
26 import * as internal from "./internal/internal.js";
27 /**
28 * @since 4.0.0
29 */
30-export * from "vitest";
31+export * from "vite-plus/test";
32 /**
33 * @since 4.0.0
34 */
35diff --git a/dist/internal/internal.js b/dist/internal/internal.js
36index 29ea5844d6c7db5f8ee9cb40eea09fa06306ac76..45461c6610983e6b55cb0b303f3064fe0e12574c 100644
37--- a/dist/internal/internal.js
38+++ b/dist/internal/internal.js
39@@ -1,7 +1,7 @@
40 /**
41 * @since 4.0.0
42 */
43-import { getCurrentSuite } from "@vitest/runner";
44+import { getCurrentSuite } from "vite-plus/test/plugins/runner";
45 import * as Cause from "effect/Cause";
46 import * as Duration from "effect/Duration";
47 import * as Effect from "effect/Effect";
48@@ -16,7 +16,7 @@ import * as Scope from "effect/Scope";
49 import * as fc from "effect/testing/FastCheck";
50 import * as TestClock from "effect/testing/TestClock";
51 import * as TestConsole from "effect/testing/TestConsole";
52-import * as V from "vitest";
53+import * as V from "vite-plus/test";
54 const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) {
55 const exit = yield* Effect.exit(effect);
56 if (Exit.isFailure(exit)) {
57diff --git a/dist/utils.js b/dist/utils.js
58index cfb2c39847518b491ca5db87ef693947a75e5e53..c044d7a01c2dd9d86e35db3910aed384eca53a3b 100644
59--- a/dist/utils.js
60+++ b/dist/utils.js
61@@ -4,7 +4,7 @@ import * as Option from "effect/Option";
62 import * as Predicate from "effect/Predicate";
63 import * as Result from "effect/Result";
64 import * as assert from "node:assert";
65-import { assert as vassert } from "vitest";
66+import { assert as vassert } from "vite-plus/test";
67 // ----------------------------
68 // Primitives
69 // ----------------------------
70diff --git a/src/index.ts b/src/index.ts
71index 37886fb6c37a12710f73ccee87a3ff6ca8b2c9fa..2207df940dfae2a346211d09b8d39554e0c00d34 100644
72--- a/src/index.ts
73+++ b/src/index.ts
74@@ -7,13 +7,13 @@ import type * as Layer from "effect/Layer"
75 import type * as Schema from "effect/Schema"
76 import type * as Scope from "effect/Scope"
77 import type * as FC from "effect/testing/FastCheck"
78-import * as V from "vitest"
79+import * as V from "vite-plus/test"
80 import * as internal from "./internal/internal.ts"
81
82 /**
83 * @since 4.0.0
84 */
85-export * from "vitest"
86+export * from "vite-plus/test"
87
88 /**
89 * @since 4.0.0
90diff --git a/src/internal/internal.ts b/src/internal/internal.ts
91index 59c35ec9e65c93df8e2ba21299a5b23f2ce27772..38475742e3d39e8cb30c5ab6a1a45916882cdca4 100644
92--- a/src/internal/internal.ts
93+++ b/src/internal/internal.ts
94@@ -2,7 +2,7 @@
95 * @since 4.0.0
96 */
97
98-import { getCurrentSuite } from "@vitest/runner"
99+import { getCurrentSuite } from "vite-plus/test/plugins/runner"
100 import * as Cause from "effect/Cause"
101 import * as Duration from "effect/Duration"
102 import * as Effect from "effect/Effect"
103@@ -17,7 +17,7 @@ import * as Scope from "effect/Scope"
104 import * as fc from "effect/testing/FastCheck"
105 import * as TestClock from "effect/testing/TestClock"
106 import * as TestConsole from "effect/testing/TestConsole"
107-import * as V from "vitest"
108+import * as V from "vite-plus/test"
109 import type * as Vitest from "../index.ts"
110
111 const runPromise: <E, A>(
112diff --git a/src/utils.ts b/src/utils.ts
113index 09c824139056c992bf978c15dc3836b3dd2257a9..6cd39bf9c0f332ba65842e555cc1c3fe0675e923 100644
114--- a/src/utils.ts
115+++ b/src/utils.ts
116@@ -16,7 +16,7 @@ import * as Option from "effect/Option"
117 import * as Predicate from "effect/Predicate"
118 import * as Result from "effect/Result"
119 import * as assert from "node:assert"
120-import { assert as vassert } from "vitest"
121+import { assert as vassert } from "vite-plus/test"
122
123 // ----------------------------
124 // Primitives
patches/@effect__vitest@4.0.0-beta.103.patch created+106
......@@ -0,0 +1,106 @@
1diff --git a/dist/index.d.ts b/dist/index.d.ts
2index a364638..4ee44c2 100644
3--- a/dist/index.d.ts
4+++ b/dist/index.d.ts
5@@ -7,11 +7,11 @@ import type * as Layer from "effect/Layer";
6 import type * as Schema from "effect/Schema";
7 import type * as Scope from "effect/Scope";
8 import type * as FC from "effect/testing/FastCheck";
9-import * as V from "vitest";
10+import * as V from "vite-plus/test";
11 /**
12 * @since 4.0.0
13 */
14-export * from "vitest";
15+export * from "vite-plus/test";
16 /**
17 * @since 4.0.0
18 */
19diff --git a/dist/index.js b/dist/index.js
20index a1a89bd..687df5a 100644
21--- a/dist/index.js
22+++ b/dist/index.js
23@@ -1,9 +1,9 @@
24-import * as V from "vitest";
25+import * as V from "vite-plus/test";
26 import * as internal from "./internal/internal.js";
27 /**
28 * @since 4.0.0
29 */
30-export * from "vitest";
31+export * from "vite-plus/test";
32 /**
33 * @since 4.0.0
34 */
35diff --git a/dist/internal/internal.js b/dist/internal/internal.js
36index fe41479..8ae751c 100644
37--- a/dist/internal/internal.js
38+++ b/dist/internal/internal.js
39@@ -15,7 +15,7 @@ import * as Scope from "effect/Scope";
40 import * as fc from "effect/testing/FastCheck";
41 import * as TestClock from "effect/testing/TestClock";
42 import * as TestConsole from "effect/testing/TestConsole";
43-import * as V from "vitest";
44+import * as V from "vite-plus/test";
45 const getCurrentSuite = V.TestRunner.getCurrentSuite;
46 const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) {
47 const exit = yield* Effect.exit(effect);
48diff --git a/dist/utils.js b/dist/utils.js
49index 4871215..2c46e2b 100644
50--- a/dist/utils.js
51+++ b/dist/utils.js
52@@ -4,7 +4,7 @@ import * as Option from "effect/Option";
53 import * as Predicate from "effect/Predicate";
54 import * as Result from "effect/Result";
55 import * as assert from "node:assert";
56-import { assert as vassert } from "vitest";
57+import { assert as vassert } from "vite-plus/test";
58 // ----------------------------
59 // Primitives
60 // ----------------------------
61diff --git a/src/index.ts b/src/index.ts
62index b524786..8d4025d 100644
63--- a/src/index.ts
64+++ b/src/index.ts
65@@ -7,13 +7,13 @@ import type * as Layer from "effect/Layer"
66 import type * as Schema from "effect/Schema"
67 import type * as Scope from "effect/Scope"
68 import type * as FC from "effect/testing/FastCheck"
69-import * as V from "vitest"
70+import * as V from "vite-plus/test"
71 import * as internal from "./internal/internal.ts"
72
73 /**
74 * @since 4.0.0
75 */
76-export * from "vitest"
77+export * from "vite-plus/test"
78
79 /**
80 * @since 4.0.0
81diff --git a/src/internal/internal.ts b/src/internal/internal.ts
82index d4040a0..f02fc9d 100644
83--- a/src/internal/internal.ts
84+++ b/src/internal/internal.ts
85@@ -16,7 +16,7 @@ import * as Scope from "effect/Scope"
86 import * as fc from "effect/testing/FastCheck"
87 import * as TestClock from "effect/testing/TestClock"
88 import * as TestConsole from "effect/testing/TestConsole"
89-import * as V from "vitest"
90+import * as V from "vite-plus/test"
91 import type * as Vitest from "../index.ts"
92
93 const getCurrentSuite = V.TestRunner.getCurrentSuite
94diff --git a/src/utils.ts b/src/utils.ts
95index 4a4612c..846bcc9 100644
96--- a/src/utils.ts
97+++ b/src/utils.ts
98@@ -16,7 +16,7 @@ import * as Option from "effect/Option"
99 import * as Predicate from "effect/Predicate"
100 import * as Result from "effect/Result"
101 import * as assert from "node:assert"
102-import { assert as vassert } from "vitest"
103+import { assert as vassert } from "vite-plus/test"
104
105 // ----------------------------
106 // Primitives
patches/effect@4.0.0-beta.102.patch deleted-317
......@@ -1,317 +0,0 @@
1diff --git a/dist/unstable/ai/McpServer.js b/dist/unstable/ai/McpServer.js
2index 2830482842c07f2f0fb412076c901e52830b7e24..cd92160578fd152c6b6399ad8a328c4ddd7d300c 100644
3--- a/dist/unstable/ai/McpServer.js
4+++ b/dist/unstable/ai/McpServer.js
5@@ -230,6 +230,26 @@ export const run = /*#__PURE__*/Effect.fnUntraced(function* (options) {
6 const server = yield* McpServer;
7 const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter));
8 const clientSessions = protocolState.clientSessions;
9+ if (isHttp && options.path !== undefined) {
10+ const router = yield* HttpRouter.HttpRouter;
11+ yield* router.add("DELETE", options.path, Effect.gen(function* () {
12+ const request = yield* HttpServerRequest.HttpServerRequest;
13+ const sessionId = request.headers[MCP_SESSION_ID_HEADER];
14+ if (sessionId === undefined) {
15+ return HttpServerResponse.empty({
16+ status: 400
17+ });
18+ }
19+ if (!clientSessions.delete(sessionId)) {
20+ return HttpServerResponse.empty({
21+ status: 404
22+ });
23+ }
24+ return HttpServerResponse.empty({
25+ status: 204
26+ });
27+ }));
28+ }
29 const handlers = yield* Layer.build(layerHandlers(options)).pipe(Effect.provideService(McpProtocolState, protocolState));
30 const clients = yield* RcMap.make({
31 lookup: Effect.fnUntraced(function* (clientId) {
32@@ -493,7 +513,7 @@ export const layerHttp = options => {
33 allow: "POST"
34 }
35 });
36- const routes = Layer.mergeAll(HttpRouter.add("GET", options.path, methodNotAllowedResponse), HttpRouter.add("PUT", options.path, methodNotAllowedResponse), HttpRouter.add("PATCH", options.path, methodNotAllowedResponse), HttpRouter.add("DELETE", options.path, methodNotAllowedResponse));
37+ const routes = Layer.mergeAll(HttpRouter.add("GET", options.path, methodNotAllowedResponse), HttpRouter.add("PUT", options.path, methodNotAllowedResponse), HttpRouter.add("PATCH", options.path, methodNotAllowedResponse));
38 return Layer.merge(layerWithProtocolState(options), routes).pipe(Layer.provide(layerMcpProtocolHttp(options)), Layer.provide(protocolState), Layer.provide(RpcSerialization.layerJsonRpc()));
39 };
40 const layerMcpProtocolHttp = options => Layer.effect(RpcServer.Protocol)(Effect.gen(function* () {
41diff --git a/dist/unstable/rpc/RpcClient.d.ts b/dist/unstable/rpc/RpcClient.d.ts
42index a70061a638faabdd663eca25cb79585fec06e03c..15c940b61860830f11cad86b155e3b76f43d34ea 100644
43--- a/dist/unstable/rpc/RpcClient.d.ts
44+++ b/dist/unstable/rpc/RpcClient.d.ts
45@@ -2,6 +2,7 @@ import * as Cause from "../../Cause.ts";
46 import * as Context from "../../Context.ts";
47 import type * as Duration from "../../Duration.ts";
48 import * as Effect from "../../Effect.ts";
49+import * as Exit from "../../Exit.ts";
50 import * as Layer from "../../Layer.ts";
51 import * as Queue from "../../Queue.ts";
52 import * as Schedule from "../../Schedule.ts";
53@@ -261,9 +262,40 @@ export declare const layerProtocolWorker: (options: {
54 readonly targetUtilization?: number | undefined;
55 readonly timeToLive: Duration.Input;
56 }) => Layer.Layer<Protocol, WorkerError, Worker.WorkerPlatform | Worker.Spawner>;
57+declare const RequestHooks_base: Context.ServiceClass<RequestHooks, "effect/rpc/RpcClient/RequestHooks", {
58+ readonly onRequestStart?: ((info: {
59+ readonly id: RequestId;
60+ readonly tag: string;
61+ readonly stream: boolean;
62+ }) => Effect.Effect<void>) | undefined;
63+ readonly onRequestChunk?: ((info: {
64+ readonly id: RequestId;
65+ readonly tag: string;
66+ readonly chunkCount: number;
67+ }) => Effect.Effect<void>) | undefined;
68+ readonly onRequestExit?: ((info: {
69+ readonly id: RequestId;
70+ readonly tag: string;
71+ readonly stream: boolean;
72+ readonly exit: Exit.Exit<unknown, unknown>;
73+ }) => Effect.Effect<void>) | undefined;
74+ readonly onRequestInterrupt?: ((info: {
75+ readonly id: RequestId;
76+ readonly tag?: string | undefined;
77+ }) => Effect.Effect<void>) | undefined;
78+}>;
79+/**
80+ * @since 4.0.0
81+ * @category RequestHooks
82+ */
83+export declare class RequestHooks extends RequestHooks_base {
84+}
85 declare const ConnectionHooks_base: Context.ServiceClass<ConnectionHooks, "effect/rpc/RpcClient/ConnectionHooks", {
86 readonly onConnect: Effect.Effect<void>;
87 readonly onDisconnect: Effect.Effect<void>;
88+ readonly onPing?: Effect.Effect<void> | undefined;
89+ readonly onPong?: Effect.Effect<void> | undefined;
90+ readonly onPingTimeout?: Effect.Effect<void> | undefined;
91 }>;
92 /**
93 * Represents optional client protocol hooks that run when a transport connects
94diff --git a/dist/unstable/rpc/RpcClient.js b/dist/unstable/rpc/RpcClient.js
95index b6ddbacbde74fb0ce98c79452b95a1c8fc0e65ed..154fe9a1ec64e5a47cd2ea89536186d6a73a74f6 100644
96--- a/dist/unstable/rpc/RpcClient.js
97+++ b/dist/unstable/rpc/RpcClient.js
98@@ -47,6 +47,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
99 const services = yield* Effect.context();
100 const scope = Context.get(services, Scope.Scope);
101 const entries = new Map();
102+ const hooks = yield* Effect.serviceOption(RequestHooks);
103 let isShutdown = false;
104 yield* Scope.addFinalizer(scope, Effect.withFiber(parent => {
105 isShutdown = true;
106@@ -84,6 +85,11 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
107 return Effect.interrupt;
108 }
109 const id = generateRequestId();
110+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({
111+ id,
112+ tag: rpc._tag,
113+ stream: false
114+ }) : Effect.void;
115 const send = middleware(message => options.onFromClient({
116 message,
117 context,
118@@ -101,7 +107,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
119 headers: Headers.merge(parentFiber.getRef(CurrentHeaders), headers)
120 });
121 if (discard) {
122- return send;
123+ return onStart.pipe(Effect.andThen(send));
124 }
125 let fiber;
126 return Effect.onInterrupt(Effect.callback(resume => {
127@@ -119,7 +125,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
128 }
129 };
130 entries.set(id, entry);
131- fiber = send.pipe(span ? Effect.withParentSpan(span, {
132+ fiber = onStart.pipe(Effect.andThen(send), span ? Effect.withParentSpan(span, {
133 captureStackTrace: false
134 }) : identity, Effect.runForkWith(parentFiber.context));
135 fiber.addObserver(exit => {
136@@ -128,8 +134,9 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
137 }
138 });
139 }), interruptors => {
140+ const entry = entries.get(id);
141 entries.delete(id);
142- return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context));
143+ return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context, entry?.rpc._tag));
144 });
145 });
146 const onStreamRequest = Effect.fnUntraced(function* (rpc, middleware, payload, headers, streamBufferSize, context) {
147@@ -141,11 +148,17 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
148 });
149 const fiber = Fiber.getCurrent();
150 const id = generateRequestId();
151+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({
152+ id,
153+ tag: rpc._tag,
154+ stream: true
155+ }) : Effect.void;
156 const scope = Context.getUnsafe(fiber.context, Scope.Scope);
157 yield* Scope.addFinalizerExit(scope, exit => {
158- if (!entries.has(id)) return Effect.void;
159+ const entry = entries.get(id);
160+ if (!entry) return Effect.void;
161 entries.delete(id);
162- return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context);
163+ return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context, entry.rpc._tag);
164 });
165 const queue = yield* Queue.bounded(streamBufferSize);
166 entries.set(id, {
167@@ -153,9 +166,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
168 rpc,
169 queue,
170 scope,
171- context
172+ context,
173+ chunkCount: 0
174 });
175- yield* middleware(message => options.onFromClient({
176+ yield* onStart.pipe(Effect.andThen(middleware(message => options.onFromClient({
177 message,
178 context,
179 discard: false
180@@ -170,7 +184,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
181 sampled: span.sampled
182 } : {}),
183 headers: Headers.merge(fiber.getRef(CurrentHeaders), headers)
184- }).pipe(span ? Effect.withParentSpan(span, {
185+ }))).pipe(span ? Effect.withParentSpan(span, {
186 captureStackTrace: false
187 }) : identity, Effect.catchCause(error => Queue.failCause(queue, error)), Effect.interruptible, Effect.forkIn(scope, {
188 startImmediately: true
189@@ -200,7 +214,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
190 });
191 };
192 };
193- const sendInterrupt = (requestId, interruptors, context) => Effect.callback(resume => {
194+ const sendInterrupt = (requestId, interruptors, context, tag) => (Option.isSome(hooks) && hooks.value.onRequestInterrupt ? hooks.value.onRequestInterrupt({
195+ id: requestId,
196+ tag
197+ }) : Effect.void).pipe(Effect.andThen(Effect.callback(resume => {
198 const parentFiber = Fiber.getCurrent();
199 const fiber = options.onFromClient({
200 message: {
201@@ -214,7 +231,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
202 fiber.addObserver(() => {
203 resume(Effect.void);
204 });
205- });
206+ })));
207 const write = message => {
208 switch (message._tag) {
209 case "Chunk":
210@@ -222,7 +239,13 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
211 const requestId = message.requestId;
212 const entry = entries.get(requestId);
213 if (!entry || entry._tag !== "Queue") return Effect.void;
214- return Queue.offerAll(entry.queue, message.values).pipe(supportsAck ? Effect.flatMap(() => options.onFromClient({
215+ const chunkCount = entry.chunkCount += message.values.length;
216+ const onChunk = Option.isSome(hooks) && hooks.value.onRequestChunk ? hooks.value.onRequestChunk({
217+ id: requestId,
218+ tag: entry.rpc._tag,
219+ chunkCount
220+ }) : Effect.void;
221+ return Queue.offerAll(entry.queue, message.values).pipe(Effect.andThen(onChunk), supportsAck ? Effect.flatMap(() => options.onFromClient({
222 message: {
223 _tag: "Ack",
224 requestId: message.requestId
225@@ -237,11 +260,18 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
226 const entry = entries.get(requestId);
227 if (!entry) return Effect.void;
228 entries.delete(requestId);
229+ const onExit = Option.isSome(hooks) && hooks.value.onRequestExit ? hooks.value.onRequestExit({
230+ id: requestId,
231+ tag: entry.rpc._tag,
232+ stream: entry._tag === "Queue",
233+ exit: message.exit
234+ }) : Effect.void;
235 if (entry._tag === "Effect") {
236- entry.resume(message.exit);
237- return Effect.void;
238+ return onExit.pipe(Effect.andThen(Effect.sync(() => {
239+ entry.resume(message.exit);
240+ })));
241 }
242- return message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause);
243+ return onExit.pipe(Effect.andThen(message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause)));
244 }
245 case "Defect":
246 {
247@@ -590,7 +620,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
248 const requestClientMap = new Map();
249 const write = yield* socket.writer;
250 let parser = serialization.makeUnsafe();
251- const pinger = yield* makePinger(write(parser.encode(constPing)));
252+ const pinger = yield* makePinger(write(parser.encode(constPing)), Option.isSome(hooks) ? hooks.value : undefined);
253 let currentError;
254 const onOpen = Effect.suspend(() => {
255 currentError = undefined;
256@@ -610,8 +640,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
257 body: () => {
258 const response = responses[i++];
259 if (response._tag === "Pong") {
260- pinger.onPong();
261- return Effect.void;
262+ return pinger.onPong;
263 }
264 if ("requestId" in response) {
265 const clientId = requestClientMap.get(response.requestId);
266@@ -639,12 +668,12 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
267 }
268 }, {
269 onOpen
270- }).pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => Effect.fail(new Socket.SocketError({
271+ }).pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => (Option.isSome(hooks) && hooks.value.onPingTimeout ? hooks.value.onPingTimeout : Effect.void).pipe(Effect.andThen(Effect.fail(new Socket.SocketError({
272 reason: new Socket.SocketOpenError({
273 kind: "Timeout",
274 cause: new Error("ping timeout")
275 })
276- })))));
277+ })))))));
278 }).pipe(Effect.flatMap(() => Effect.fail(new Socket.SocketError({
279 reason: new Socket.SocketCloseError({
280 code: 1000
281@@ -686,20 +715,20 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
282 };
283 }));
284 const defaultRetryPolicy = /*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential(500, 1.5), /*#__PURE__*/Schedule.spaced(5000)]);
285-const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing) {
286+const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing, hooks) {
287 let recievedPong = true;
288 const latch = Latch.makeUnsafe();
289 const reset = () => {
290 recievedPong = true;
291 latch.closeUnsafe();
292 };
293- const onPong = () => {
294+ const onPong = Effect.sync(() => {
295 recievedPong = true;
296- };
297+ }).pipe(Effect.andThen(hooks?.onPong ?? Effect.void));
298 yield* Effect.suspend(() => {
299 if (!recievedPong) return latch.open;
300 recievedPong = false;
301- return writePing;
302+ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing));
303 }).pipe(Effect.delay("5 seconds"), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped);
304 return {
305 timeout: latch.await,
306@@ -842,6 +871,11 @@ export const makeProtocolWorker = options => Protocol.make(Effect.fnUntraced(fun
307 * @since 4.0.0
308 */
309 export const layerProtocolWorker = /*#__PURE__*/flow(makeProtocolWorker, /*#__PURE__*/Layer.effect(Protocol));
310+/**
311+ * @since 4.0.0
312+ * @category RequestHooks
313+ */
314+export class RequestHooks extends /*#__PURE__*/Context.Service()("effect/rpc/RpcClient/RequestHooks") {}
315 /**
316 * Represents optional client protocol hooks that run when a transport connects
317 * and disconnects.
patches/effect@4.0.0-beta.103.patch created+317
......@@ -0,0 +1,317 @@
1diff --git a/dist/unstable/ai/McpServer.js b/dist/unstable/ai/McpServer.js
2index 755e41c..dc431aa 100644
3--- a/dist/unstable/ai/McpServer.js
4+++ b/dist/unstable/ai/McpServer.js
5@@ -262,6 +262,26 @@ const runWithProtocolState = /*#__PURE__*/Effect.fnUntraced(function* (options,
6 const server = yield* McpServer;
7 const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter));
8 const sessions = protocolState.sessions;
9+ if (isHttp && options.path !== undefined) {
10+ const router = yield* HttpRouter.HttpRouter;
11+ yield* router.add("DELETE", options.path, Effect.gen(function* () {
12+ const request = yield* HttpServerRequest.HttpServerRequest;
13+ const sessionId = request.headers[MCP_SESSION_ID_HEADER];
14+ if (sessionId === undefined) {
15+ return HttpServerResponse.empty({
16+ status: 400
17+ });
18+ }
19+ if (!sessions.bySessionId.delete(sessionId)) {
20+ return HttpServerResponse.empty({
21+ status: 404
22+ });
23+ }
24+ return HttpServerResponse.empty({
25+ status: 204
26+ });
27+ }));
28+ }
29 const clientProtocols = new Map();
30 const cancelledRequests = new Map();
31 const handlers = yield* Layer.build(layerHandlers(options, {
32@@ -719,7 +739,7 @@ export const layerHttp = options => {
33 const methodNotAllowed = request => Effect.succeed(request.headers.origin !== undefined && !options.allowedOrigins?.includes(request.headers.origin) ? HttpServerResponse.empty({
34 status: 403
35 }) : methodNotAllowedResponse);
36- const routes = Layer.mergeAll(HttpRouter.add("GET", options.path, methodNotAllowed), HttpRouter.add("PUT", options.path, methodNotAllowed), HttpRouter.add("PATCH", options.path, methodNotAllowed), HttpRouter.add("DELETE", options.path, methodNotAllowed), HttpRouter.add("OPTIONS", options.path, methodNotAllowed));
37+ const routes = Layer.mergeAll(HttpRouter.add("GET", options.path, methodNotAllowed), HttpRouter.add("PUT", options.path, methodNotAllowed), HttpRouter.add("PATCH", options.path, methodNotAllowed), HttpRouter.add("OPTIONS", options.path, methodNotAllowed));
38 return Layer.merge(layerWithProtocolState(options), routes).pipe(Layer.provide(layerMcpProtocolHttp(options)), Layer.provide(protocolState), Layer.provide(RpcSerialization.layerJsonRpc()));
39 };
40 const layerMcpProtocolHttp = options => Layer.effect(RpcServer.Protocol)(Effect.gen(function* () {
41diff --git a/dist/unstable/rpc/RpcClient.d.ts b/dist/unstable/rpc/RpcClient.d.ts
42index aba2779..581d267 100644
43--- a/dist/unstable/rpc/RpcClient.d.ts
44+++ b/dist/unstable/rpc/RpcClient.d.ts
45@@ -2,6 +2,7 @@ import * as Cause from "../../Cause.ts";
46 import * as Context from "../../Context.ts";
47 import type * as Duration from "../../Duration.ts";
48 import * as Effect from "../../Effect.ts";
49+import * as Exit from "../../Exit.ts";
50 import * as Layer from "../../Layer.ts";
51 import * as Queue from "../../Queue.ts";
52 import * as Schedule from "../../Schedule.ts";
53@@ -261,9 +262,40 @@ export declare const layerProtocolWorker: (options: {
54 readonly targetUtilization?: number | undefined;
55 readonly timeToLive: Duration.Input;
56 }) => Layer.Layer<Protocol, WorkerError, Worker.WorkerPlatform | Worker.Spawner>;
57+declare const RequestHooks_base: Context.ServiceClass<RequestHooks, "effect/rpc/RpcClient/RequestHooks", {
58+ readonly onRequestStart?: ((info: {
59+ readonly id: RequestId;
60+ readonly tag: string;
61+ readonly stream: boolean;
62+ }) => Effect.Effect<void>) | undefined;
63+ readonly onRequestChunk?: ((info: {
64+ readonly id: RequestId;
65+ readonly tag: string;
66+ readonly chunkCount: number;
67+ }) => Effect.Effect<void>) | undefined;
68+ readonly onRequestExit?: ((info: {
69+ readonly id: RequestId;
70+ readonly tag: string;
71+ readonly stream: boolean;
72+ readonly exit: Exit.Exit<unknown, unknown>;
73+ }) => Effect.Effect<void>) | undefined;
74+ readonly onRequestInterrupt?: ((info: {
75+ readonly id: RequestId;
76+ readonly tag?: string | undefined;
77+ }) => Effect.Effect<void>) | undefined;
78+}>;
79+/**
80+ * @since 4.0.0
81+ * @category RequestHooks
82+ */
83+export declare class RequestHooks extends RequestHooks_base {
84+}
85 declare const ConnectionHooks_base: Context.ServiceClass<ConnectionHooks, "effect/rpc/RpcClient/ConnectionHooks", {
86 readonly onConnect: Effect.Effect<void>;
87 readonly onDisconnect: Effect.Effect<void>;
88+ readonly onPing?: Effect.Effect<void> | undefined;
89+ readonly onPong?: Effect.Effect<void> | undefined;
90+ readonly onPingTimeout?: Effect.Effect<void> | undefined;
91 }>;
92 /**
93 * Represents optional client protocol hooks that run when a transport connects
94diff --git a/dist/unstable/rpc/RpcClient.js b/dist/unstable/rpc/RpcClient.js
95index b536d0a..12ffac0 100644
96--- a/dist/unstable/rpc/RpcClient.js
97+++ b/dist/unstable/rpc/RpcClient.js
98@@ -47,6 +47,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
99 const services = yield* Effect.context();
100 const scope = Context.get(services, Scope.Scope);
101 const entries = new Map();
102+ const hooks = yield* Effect.serviceOption(RequestHooks);
103 let isShutdown = false;
104 yield* Scope.addFinalizer(scope, Effect.withFiber(parent => {
105 isShutdown = true;
106@@ -84,6 +85,11 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
107 return Effect.interrupt;
108 }
109 const id = generateRequestId();
110+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({
111+ id,
112+ tag: rpc._tag,
113+ stream: false
114+ }) : Effect.void;
115 const send = middleware(message => options.onFromClient({
116 message,
117 context,
118@@ -101,7 +107,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
119 headers: Headers.merge(parentFiber.getRef(CurrentHeaders), headers)
120 });
121 if (discard) {
122- return send;
123+ return onStart.pipe(Effect.andThen(send));
124 }
125 let fiber;
126 return Effect.onInterrupt(Effect.callback(resume => {
127@@ -119,7 +125,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
128 }
129 };
130 entries.set(id, entry);
131- fiber = send.pipe(span ? Effect.withParentSpan(span, {
132+ fiber = onStart.pipe(Effect.andThen(send), span ? Effect.withParentSpan(span, {
133 captureStackTrace: false
134 }) : identity, Effect.runForkWith(parentFiber.context));
135 fiber.addObserver(exit => {
136@@ -128,8 +134,9 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
137 }
138 });
139 }), interruptors => {
140+ const entry = entries.get(id);
141 entries.delete(id);
142- return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context));
143+ return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context, entry?.rpc._tag));
144 });
145 });
146 const onStreamRequest = Effect.fnUntraced(function* (rpc, middleware, payload, headers, streamBufferSize, context) {
147@@ -141,11 +148,17 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
148 });
149 const fiber = Fiber.getCurrent();
150 const id = generateRequestId();
151+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({
152+ id,
153+ tag: rpc._tag,
154+ stream: true
155+ }) : Effect.void;
156 const scope = Context.getUnsafe(fiber.context, Scope.Scope);
157 yield* Scope.addFinalizerExit(scope, exit => {
158- if (!entries.has(id)) return Effect.void;
159+ const entry = entries.get(id);
160+ if (!entry) return Effect.void;
161 entries.delete(id);
162- return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context);
163+ return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context, entry.rpc._tag);
164 });
165 const queue = yield* Queue.bounded(streamBufferSize);
166 entries.set(id, {
167@@ -153,9 +166,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
168 rpc,
169 queue,
170 scope,
171- context
172+ context,
173+ chunkCount: 0
174 });
175- yield* middleware(message => options.onFromClient({
176+ yield* onStart.pipe(Effect.andThen(middleware(message => options.onFromClient({
177 message,
178 context,
179 discard: false
180@@ -170,7 +184,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
181 sampled: span.sampled
182 } : {}),
183 headers: Headers.merge(fiber.getRef(CurrentHeaders), headers)
184- }).pipe(span ? Effect.withParentSpan(span, {
185+ }))).pipe(span ? Effect.withParentSpan(span, {
186 captureStackTrace: false
187 }) : identity, Effect.catchCause(error => Queue.failCause(queue, error)), Effect.interruptible, Effect.forkIn(scope, {
188 startImmediately: true
189@@ -200,7 +214,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
190 });
191 };
192 };
193- const sendInterrupt = (requestId, interruptors, context) => Effect.callback(resume => {
194+ const sendInterrupt = (requestId, interruptors, context, tag) => (Option.isSome(hooks) && hooks.value.onRequestInterrupt ? hooks.value.onRequestInterrupt({
195+ id: requestId,
196+ tag
197+ }) : Effect.void).pipe(Effect.andThen(Effect.callback(resume => {
198 const parentFiber = Fiber.getCurrent();
199 const fiber = options.onFromClient({
200 message: {
201@@ -214,7 +231,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
202 fiber.addObserver(() => {
203 resume(Effect.void);
204 });
205- });
206+ })));
207 const write = message => {
208 switch (message._tag) {
209 case "Chunk":
210@@ -222,7 +239,13 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
211 const requestId = message.requestId;
212 const entry = entries.get(requestId);
213 if (!entry || entry._tag !== "Queue") return Effect.void;
214- return Queue.offerAll(entry.queue, message.values).pipe(supportsAck ? Effect.flatMap(() => options.onFromClient({
215+ const chunkCount = entry.chunkCount += message.values.length;
216+ const onChunk = Option.isSome(hooks) && hooks.value.onRequestChunk ? hooks.value.onRequestChunk({
217+ id: requestId,
218+ tag: entry.rpc._tag,
219+ chunkCount
220+ }) : Effect.void;
221+ return Queue.offerAll(entry.queue, message.values).pipe(Effect.andThen(onChunk), supportsAck ? Effect.flatMap(() => options.onFromClient({
222 message: {
223 _tag: "Ack",
224 requestId: message.requestId
225@@ -237,11 +260,18 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro
226 const entry = entries.get(requestId);
227 if (!entry) return Effect.void;
228 entries.delete(requestId);
229+ const onExit = Option.isSome(hooks) && hooks.value.onRequestExit ? hooks.value.onRequestExit({
230+ id: requestId,
231+ tag: entry.rpc._tag,
232+ stream: entry._tag === "Queue",
233+ exit: message.exit
234+ }) : Effect.void;
235 if (entry._tag === "Effect") {
236- entry.resume(message.exit);
237- return Effect.void;
238+ return onExit.pipe(Effect.andThen(Effect.sync(() => {
239+ entry.resume(message.exit);
240+ })));
241 }
242- return message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause);
243+ return onExit.pipe(Effect.andThen(message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause)));
244 }
245 case "Defect":
246 {
247@@ -590,7 +620,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
248 const requestClientMap = new Map();
249 const write = yield* socket.writer;
250 let parser = serialization.makeUnsafe();
251- const pinger = yield* makePinger(write(parser.encode(constPing)));
252+ const pinger = yield* makePinger(write(parser.encode(constPing)), Option.isSome(hooks) ? hooks.value : undefined);
253 let currentError;
254 const onOpen = Effect.suspend(() => {
255 currentError = undefined;
256@@ -610,8 +640,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
257 body: () => {
258 const response = responses[i++];
259 if (response._tag === "Pong") {
260- pinger.onPong();
261- return Effect.void;
262+ return pinger.onPong;
263 }
264 if (Object.hasOwn(response, "requestId")) {
265 const requestId = response.requestId;
266@@ -640,12 +669,12 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
267 }
268 }, {
269 onOpen
270- }).pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => Effect.fail(new Socket.SocketError({
271+ }).pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => (Option.isSome(hooks) && hooks.value.onPingTimeout ? hooks.value.onPingTimeout : Effect.void).pipe(Effect.andThen(Effect.fail(new Socket.SocketError({
272 reason: new Socket.SocketOpenError({
273 kind: "Timeout",
274 cause: new Error("ping timeout")
275 })
276- })))));
277+ })))))));
278 }).pipe(Effect.flatMap(() => Effect.fail(new Socket.SocketError({
279 reason: new Socket.SocketCloseError({
280 code: 1000
281@@ -687,20 +716,20 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun
282 };
283 }));
284 const defaultRetryPolicy = /*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential(500, 1.5), /*#__PURE__*/Schedule.spaced(5000)]);
285-const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing) {
286+const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing, hooks) {
287 let recievedPong = true;
288 const latch = Latch.makeUnsafe();
289 const reset = () => {
290 recievedPong = true;
291 latch.closeUnsafe();
292 };
293- const onPong = () => {
294+ const onPong = Effect.sync(() => {
295 recievedPong = true;
296- };
297+ }).pipe(Effect.andThen(hooks?.onPong ?? Effect.void));
298 yield* Effect.suspend(() => {
299 if (!recievedPong) return latch.open;
300 recievedPong = false;
301- return writePing;
302+ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing));
303 }).pipe(Effect.delay("5 seconds"), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped);
304 return {
305 timeout: latch.await,
306@@ -843,6 +872,11 @@ export const makeProtocolWorker = options => Protocol.make(Effect.fnUntraced(fun
307 * @since 4.0.0
308 */
309 export const layerProtocolWorker = /*#__PURE__*/flow(makeProtocolWorker, /*#__PURE__*/Layer.effect(Protocol));
310+/**
311+ * @since 4.0.0
312+ * @category RequestHooks
313+ */
314+export class RequestHooks extends /*#__PURE__*/Context.Service()("effect/rpc/RpcClient/RequestHooks") {}
315 /**
316 * Represents optional client protocol hooks that run when a transport connects
317 * and disconnects.
pnpm-lock.yaml+227-234
......@@ -7,8 +7,8 @@ settings:
77catalogs:
88 default:
99 '@effect/openapi-generator':
10 specifier: 4.0.0-beta.102
11 version: 4.0.0-beta.102
10 specifier: 4.0.0-beta.103
11 version: 4.0.0-beta.103
1212 '@effect/tsgo':
1313 specifier: 0.13.2
1414 version: 0.13.2
......@@ -48,18 +48,18 @@ overrides:
4848 '@clerk/expo': 4.1.2
4949 '@clerk/react': 6.12.9
5050 '@clerk/shared': 4.25.9
51 '@effect/atom-react': 4.0.0-beta.102
52 '@effect/platform-bun': 4.0.0-beta.102
53 '@effect/platform-node': 4.0.0-beta.102
54 '@effect/platform-node-shared': 4.0.0-beta.102
55 '@effect/sql-pg': 4.0.0-beta.102
56 '@effect/sql-sqlite-bun': 4.0.0-beta.102
57 '@effect/vitest': 4.0.0-beta.102
51 '@effect/atom-react': 4.0.0-beta.103
52 '@effect/platform-bun': 4.0.0-beta.103
53 '@effect/platform-node': 4.0.0-beta.103
54 '@effect/platform-node-shared': 4.0.0-beta.103
55 '@effect/sql-pg': 4.0.0-beta.103
56 '@effect/sql-sqlite-bun': 4.0.0-beta.103
57 '@effect/vitest': 4.0.0-beta.103
5858 '@effect/vitest>vitest': '-'
5959 '@expo/metro-config': 56.0.14
6060 '@pierre/diffs>@shikijs/transformers': ^4.2.0
6161 '@types/node': 24.12.4
62 effect: 4.0.0-beta.102
62 effect: 4.0.0-beta.103
6363 expo-modules-jsi: 56.0.10
6464 expo-sharing>@expo/config-plugins: 56.0.9
6565 expo-sharing>@expo/config-types: 56.0.6
......@@ -69,16 +69,14 @@ overrides:
6969packageExtensionsChecksum: sha256-CUzzeefpj3gNFrCKNBhV9FOaniNbrLdKyIhWQyXuaiE=
7070
7171patchedDependencies:
72 '@effect/platform-bun@4.0.0-beta.102': 9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23
73 '@effect/platform-node@4.0.0-beta.102': cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0
74 '@effect/vitest@4.0.0-beta.102': a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425
72 '@effect/vitest@4.0.0-beta.103': a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b
7573 '@expo/metro-config@56.0.14': 8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46
7674 '@ff-labs/fff-node@0.9.4': 2b16019ce7ab61aec6478dd02f79ef468cc1d5c51e9d00764f7d2ab8167210c8
7775 '@legendapp/list@3.3.3': d162d67b73933ab077d00627cdf52b18ea88b28c4fae4e8340a854df25026f09
7876 '@pierre/diffs@1.3.0-beta.10': 7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa
7977 '@react-native-menu/menu@2.0.0': 5ea3ae4bf1d9baf5443b65c269bb09621c27a68d556f713778f37b1e8d46aaae
8078 '@react-navigation/native-stack@7.17.6': c7fc101b78d434904425e5a24c22fb0042298dec6f807250486e784f3c717273
81 effect@4.0.0-beta.102: 71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488
79 effect@4.0.0-beta.103: a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9
8280 expo-modules-jsi@56.0.10: 9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f
8381 react-native-gesture-handler@2.31.2: 808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3
8482 react-native-keyboard-controller@1.21.13: 20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008
......@@ -117,8 +115,8 @@ importers:
117115 specifier: 0.0.3
118116 version: 0.0.3
119117 '@effect/platform-node':
120 specifier: 4.0.0-beta.102
121 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
118 specifier: 4.0.0-beta.103
119 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
122120 '@t3tools/client-runtime':
123121 specifier: workspace:*
124122 version: link:../../packages/client-runtime
......@@ -135,8 +133,8 @@ importers:
135133 specifier: workspace:*
136134 version: link:../../packages/tailscale
137135 effect:
138 specifier: 4.0.0-beta.102
139 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
136 specifier: 4.0.0-beta.103
137 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
140138 electron:
141139 specifier: 41.5.0
142140 version: 41.5.0
......@@ -154,8 +152,8 @@ importers:
154152 version: 0.1.44(react@19.2.6)
155153 devDependencies:
156154 '@effect/vitest':
157 specifier: 4.0.0-beta.102
158 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
155 specifier: 4.0.0-beta.103
156 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
159157 '@types/node':
160158 specifier: 24.12.4
161159 version: 24.12.4
......@@ -200,8 +198,8 @@ importers:
200198 specifier: 4.1.2
201199 version: 4.1.2(expo-auth-session@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.18)(expo-crypto@56.0.4(expo@56.0.12))(expo-secure-store@56.0.4(expo@56.0.12))(expo-web-browser@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
202200 '@effect/atom-react':
203 specifier: 4.0.0-beta.102
204 version: 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(react@19.2.3)(scheduler@0.27.0)
201 specifier: 4.0.0-beta.103
202 version: 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(react@19.2.3)(scheduler@0.27.0)
205203 '@expo-google-fonts/dm-sans':
206204 specifier: ^0.4.2
207205 version: 0.4.2
......@@ -275,8 +273,8 @@ importers:
275273 specifier: 8.0.3
276274 version: 8.0.3
277275 effect:
278 specifier: 4.0.0-beta.102
279 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
276 specifier: 4.0.0-beta.103
277 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
280278 expo:
281279 specifier: ~56.0.12
282280 version: 56.0.12(8895228379997a2a064f9644cda56ed0)
......@@ -423,8 +421,8 @@ importers:
423421 version: 1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0)
424422 devDependencies:
425423 '@effect/vitest':
426 specifier: 4.0.0-beta.102
427 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
424 specifier: 4.0.0-beta.103
425 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
428426 '@pierre/trees':
429427 specifier: 1.0.0-beta.4
430428 version: 1.0.0-beta.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
......@@ -447,17 +445,17 @@ importers:
447445 specifier: ^0.3.170
448446 version: 0.3.170(@anthropic-ai/sdk@0.93.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3)
449447 '@effect/platform-bun':
450 specifier: 4.0.0-beta.102
451 version: 4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
448 specifier: 4.0.0-beta.103
449 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
452450 '@effect/platform-node':
453 specifier: 4.0.0-beta.102
454 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
451 specifier: 4.0.0-beta.103
452 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
455453 '@effect/platform-node-shared':
456 specifier: 4.0.0-beta.102
457 version: 4.0.0-beta.102(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
454 specifier: 4.0.0-beta.103
455 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
458456 '@effect/sql-sqlite-bun':
459 specifier: 4.0.0-beta.102
460 version: 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
457 specifier: 4.0.0-beta.103
458 version: 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
461459 '@ff-labs/fff-node':
462460 specifier: 0.9.4
463461 version: 0.9.4(patch_hash=2b16019ce7ab61aec6478dd02f79ef468cc1d5c51e9d00764f7d2ab8167210c8)
......@@ -468,8 +466,8 @@ importers:
468466 specifier: 'catalog:'
469467 version: 1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.3.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
470468 effect:
471 specifier: 4.0.0-beta.102
472 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
469 specifier: 4.0.0-beta.103
470 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
473471 node-pty:
474472 specifier: ^1.1.0
475473 version: 1.1.0
......@@ -478,8 +476,8 @@ importers:
478476 version: 2.9.0
479477 devDependencies:
480478 '@effect/vitest':
481 specifier: 4.0.0-beta.102
482 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
479 specifier: 4.0.0-beta.103
480 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
483481 '@t3tools/contracts':
484482 specifier: workspace:*
485483 version: link:../../packages/contracts
......@@ -532,8 +530,8 @@ importers:
532530 specifier: ^3.2.2
533531 version: 3.2.2(react@19.2.6)
534532 '@effect/atom-react':
535 specifier: 4.0.0-beta.102
536 version: 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(react@19.2.6)(scheduler@0.27.0)
533 specifier: 4.0.0-beta.103
534 version: 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(react@19.2.6)(scheduler@0.27.0)
537535 '@fontsource-variable/dm-sans':
538536 specifier: ^5.2.8
539537 version: 5.2.8
......@@ -574,8 +572,8 @@ importers:
574572 specifier: ^0.7.1
575573 version: 0.7.1
576574 effect:
577 specifier: 4.0.0-beta.102
578 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
575 specifier: 4.0.0-beta.103
576 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
579577 jose:
580578 specifier: 'catalog:'
581579 version: 6.2.2
......@@ -614,11 +612,11 @@ importers:
614612 version: 5.0.14(@types/react@19.2.16)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6))
615613 devDependencies:
616614 '@effect/platform-node':
617 specifier: 4.0.0-beta.102
618 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
615 specifier: 4.0.0-beta.103
616 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
619617 '@effect/vitest':
620 specifier: 4.0.0-beta.102
621 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
618 specifier: 4.0.0-beta.103
619 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
622620 '@rolldown/plugin-babel':
623621 specifier: ^0.2.0
624622 version: 0.2.3(@babel/core@7.29.7)(@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7))(@babel/runtime@7.29.7)(@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.1.5)
......@@ -665,8 +663,8 @@ importers:
665663 specifier: 3.14.0
666664 version: 3.14.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
667665 '@effect/sql-pg':
668 specifier: 4.0.0-beta.102
669 version: 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
666 specifier: 4.0.0-beta.103
667 version: 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
670668 '@noble/curves':
671669 specifier: 'catalog:'
672670 version: 1.9.1
......@@ -684,23 +682,23 @@ importers:
684682 version: link:../../packages/shared
685683 alchemy:
686684 specifier: 2.0.0-beta.65
687 version: 2.0.0-beta.65(249551d75ad3792c0b22cd2754b25266)
685 version: 2.0.0-beta.65(a455401069e1fee89f31a277c51247f6)
688686 drizzle-orm:
689687 specifier: 1.0.0-rc.4
690 version: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-pg@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-sqlite-bun@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3)
688 version: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3)
691689 effect:
692 specifier: 4.0.0-beta.102
693 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
690 specifier: 4.0.0-beta.103
691 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
694692 devDependencies:
695693 '@cloudflare/workers-types':
696694 specifier: ^4.20260601.1
697695 version: 4.20260604.1
698696 '@effect/platform-node':
699 specifier: 4.0.0-beta.102
700 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
697 specifier: 4.0.0-beta.103
698 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
701699 '@effect/vitest':
702 specifier: 4.0.0-beta.102
703 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
700 specifier: 4.0.0-beta.103
701 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
704702 '@types/node':
705703 specifier: 24.12.4
706704 version: 24.12.4
......@@ -717,18 +715,18 @@ importers:
717715 oxlint-plugin-t3code:
718716 dependencies:
719717 '@effect/platform-node':
720 specifier: 4.0.0-beta.102
721 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
718 specifier: 4.0.0-beta.103
719 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
722720 '@oxlint/plugins':
723721 specifier: ^1.63.0
724722 version: 1.68.0
725723 effect:
726 specifier: 4.0.0-beta.102
727 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
724 specifier: 4.0.0-beta.103
725 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
728726 devDependencies:
729727 '@effect/vitest':
730 specifier: 4.0.0-beta.102
731 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
728 specifier: 4.0.0-beta.103
729 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
732730 vite-plus:
733731 specifier: 'catalog:'
734732 version: 0.2.2(@types/node@24.12.4)(bufferutil@4.1.0)(esbuild@0.28.1)(jiti@2.7.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0)
......@@ -742,12 +740,12 @@ importers:
742740 specifier: workspace:*
743741 version: link:../shared
744742 effect:
745 specifier: 4.0.0-beta.102
746 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
743 specifier: 4.0.0-beta.103
744 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
747745 devDependencies:
748746 '@effect/vitest':
749 specifier: 4.0.0-beta.102
750 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
747 specifier: 4.0.0-beta.103
748 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
751749 vite-plus:
752750 specifier: 'catalog:'
753751 version: 0.2.2(@types/node@24.12.4)(bufferutil@4.1.0)(esbuild@0.28.1)(jiti@2.7.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0)
......@@ -755,12 +753,12 @@ importers:
755753 packages/contracts:
756754 dependencies:
757755 effect:
758 specifier: 4.0.0-beta.102
759 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
756 specifier: 4.0.0-beta.103
757 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
760758 devDependencies:
761759 '@effect/vitest':
762 specifier: 4.0.0-beta.102
763 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
760 specifier: 4.0.0-beta.103
761 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
764762 vite-plus:
765763 specifier: 'catalog:'
766764 version: 0.2.2(@types/node@24.12.4)(bufferutil@4.1.0)(esbuild@0.28.1)(jiti@2.7.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0)
......@@ -768,18 +766,18 @@ importers:
768766 packages/effect-acp:
769767 dependencies:
770768 effect:
771 specifier: 4.0.0-beta.102
772 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
769 specifier: 4.0.0-beta.103
770 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
773771 devDependencies:
774772 '@effect/openapi-generator':
775773 specifier: 'catalog:'
776 version: 4.0.0-beta.102(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
774 version: 4.0.0-beta.103(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
777775 '@effect/platform-node':
778 specifier: 4.0.0-beta.102
779 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
776 specifier: 4.0.0-beta.103
777 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
780778 '@effect/vitest':
781 specifier: 4.0.0-beta.102
782 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
779 specifier: 4.0.0-beta.103
780 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
783781 '@types/node':
784782 specifier: 24.12.4
785783 version: 24.12.4
......@@ -790,18 +788,18 @@ importers:
790788 packages/effect-codex-app-server:
791789 dependencies:
792790 effect:
793 specifier: 4.0.0-beta.102
794 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
791 specifier: 4.0.0-beta.103
792 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
795793 devDependencies:
796794 '@effect/openapi-generator':
797795 specifier: 'catalog:'
798 version: 4.0.0-beta.102(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
796 version: 4.0.0-beta.103(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
799797 '@effect/platform-node':
800 specifier: 4.0.0-beta.102
801 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
798 specifier: 4.0.0-beta.103
799 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
802800 '@effect/vitest':
803 specifier: 4.0.0-beta.102
804 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
801 specifier: 4.0.0-beta.103
802 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
805803 '@types/node':
806804 specifier: 24.12.4
807805 version: 24.12.4
......@@ -821,8 +819,8 @@ importers:
821819 specifier: workspace:*
822820 version: link:../contracts
823821 effect:
824 specifier: 4.0.0-beta.102
825 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
822 specifier: 4.0.0-beta.103
823 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
826824 jose:
827825 specifier: 'catalog:'
828826 version: 6.2.2
......@@ -831,11 +829,11 @@ importers:
831829 version: 2.9.0
832830 devDependencies:
833831 '@effect/platform-node':
834 specifier: 4.0.0-beta.102
835 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
832 specifier: 4.0.0-beta.103
833 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
836834 '@effect/vitest':
837 specifier: 4.0.0-beta.102
838 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
835 specifier: 4.0.0-beta.103
836 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
839837 '@types/node':
840838 specifier: 24.12.4
841839 version: 24.12.4
......@@ -852,15 +850,15 @@ importers:
852850 specifier: workspace:*
853851 version: link:../shared
854852 effect:
855 specifier: 4.0.0-beta.102
856 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
853 specifier: 4.0.0-beta.103
854 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
857855 devDependencies:
858856 '@effect/platform-node':
859 specifier: 4.0.0-beta.102
860 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
857 specifier: 4.0.0-beta.103
858 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
861859 '@effect/vitest':
862 specifier: 4.0.0-beta.102
863 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
860 specifier: 4.0.0-beta.103
861 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
864862 '@types/node':
865863 specifier: 24.12.4
866864 version: 24.12.4
......@@ -871,18 +869,18 @@ importers:
871869 packages/tailscale:
872870 dependencies:
873871 '@effect/platform-node':
874 specifier: 4.0.0-beta.102
875 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
872 specifier: 4.0.0-beta.103
873 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
876874 '@t3tools/shared':
877875 specifier: workspace:*
878876 version: link:../shared
879877 effect:
880 specifier: 4.0.0-beta.102
881 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
878 specifier: 4.0.0-beta.103
879 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
882880 devDependencies:
883881 '@effect/vitest':
884 specifier: 4.0.0-beta.102
885 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
882 specifier: 4.0.0-beta.103
883 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
886884 '@types/node':
887885 specifier: 24.12.4
888886 version: 24.12.4
......@@ -893,8 +891,8 @@ importers:
893891 scripts:
894892 dependencies:
895893 '@effect/platform-node':
896 specifier: 4.0.0-beta.102
897 version: 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
894 specifier: 4.0.0-beta.103
895 version: 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
898896 '@t3tools/contracts':
899897 specifier: workspace:*
900898 version: link:../packages/contracts
......@@ -905,8 +903,8 @@ importers:
905903 specifier: workspace:*
906904 version: link:../packages/tailscale
907905 effect:
908 specifier: 4.0.0-beta.102
909 version: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
906 specifier: 4.0.0-beta.103
907 version: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
910908 pngjs:
911909 specifier: 7.0.0
912910 version: 7.0.0
......@@ -915,8 +913,8 @@ importers:
915913 version: 2.9.0
916914 devDependencies:
917915 '@effect/vitest':
918 specifier: 4.0.0-beta.102
919 version: 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
916 specifier: 4.0.0-beta.103
917 version: 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
920918 '@types/pngjs':
921919 specifier: 6.0.5
922920 version: 6.0.5
......@@ -1844,12 +1842,12 @@ packages:
18441842 '@distilled.cloud/aws@0.30.2':
18451843 resolution: {integrity: sha512-Uw2yZf7PJ2ienrKG49HN1ajnke65mTtHBUrSb/3ykeZ/8cLaSgwVhPscHxSzGByY0TEtYcYKNNmfUVISgGQl9g==}
18461844 peerDependencies:
1847 effect: 4.0.0-beta.102
1845 effect: 4.0.0-beta.103
18481846
18491847 '@distilled.cloud/axiom@0.30.2':
18501848 resolution: {integrity: sha512-6g7tN/fKdMjnZYswlvwmLPeCqa2/jTsuOG7cSyUldhd6akxwWlMYqqDxwiOjgJfBZIOmcqSs5XVwiGMonZQTBw==}
18511849 peerDependencies:
1852 effect: 4.0.0-beta.102
1850 effect: 4.0.0-beta.103
18531851
18541852 '@distilled.cloud/cloudflare-rolldown-plugin@0.13.10':
18551853 resolution: {integrity: sha512-UO9wjepZWYupWMf/KYKY7LUueHNawdp0qBGc9z3XYxjodrQaMwFQWtIGG1yWOHjTWl1BUx86A69hyB8kHYRAeA==}
......@@ -1866,9 +1864,9 @@ packages:
18661864 resolution: {integrity: sha512-0mtI2rmxKiRcuZVXsQZfPnHWstUTCyPlg4q6EbxdImfiB4CCL2F56orGl9UhuBy+BPgO37wDgMe2GIpAHIUNWA==}
18671865 peerDependencies:
18681866 '@distilled.cloud/cloudflare': ^0.29.0
1869 '@effect/platform-bun': 4.0.0-beta.102
1870 '@effect/platform-node': 4.0.0-beta.102
1871 effect: 4.0.0-beta.102
1867 '@effect/platform-bun': 4.0.0-beta.103
1868 '@effect/platform-node': 4.0.0-beta.103
1869 effect: 4.0.0-beta.103
18721870 peerDependenciesMeta:
18731871 '@effect/platform-bun':
18741872 optional: true
......@@ -1880,9 +1878,9 @@ packages:
18801878 peerDependencies:
18811879 '@distilled.cloud/cloudflare': ^0.29.0
18821880 '@distilled.cloud/cloudflare-runtime': 0.13.10
1883 '@effect/platform-bun': 4.0.0-beta.102
1884 '@effect/platform-node': 4.0.0-beta.102
1885 effect: 4.0.0-beta.102
1881 '@effect/platform-bun': 4.0.0-beta.103
1882 '@effect/platform-node': 4.0.0-beta.103
1883 effect: 4.0.0-beta.103
18861884 vite: ^7.0.0 || ^8.0.0
18871885 peerDependenciesMeta:
18881886 '@effect/platform-bun':
......@@ -1893,22 +1891,22 @@ packages:
18931891 '@distilled.cloud/cloudflare@0.30.2':
18941892 resolution: {integrity: sha512-bY0WAXL7Xw1mbo9twdXcaSCKL1rMi1o4aDzVwhnHASxe416oWvDARUo2/DPhQqN48r3q9BY2AyRAxRf65X6z0g==}
18951893 peerDependencies:
1896 effect: 4.0.0-beta.102
1894 effect: 4.0.0-beta.103
18971895
18981896 '@distilled.cloud/core@0.30.2':
18991897 resolution: {integrity: sha512-7wurt9mk2Z3h0zJ00FAXD9ApSLoiBdjArctc9k706JPwzo6uhSJNkTwVMFdYM6V3m5186cY5C8ukzstrCRkJSw==}
19001898 peerDependencies:
1901 effect: 4.0.0-beta.102
1899 effect: 4.0.0-beta.103
19021900
19031901 '@distilled.cloud/neon@0.30.2':
19041902 resolution: {integrity: sha512-mFNmN4sUGIa7WukCSmU1KQSDZKmByjGY5Neh05IiM4b38UaJ80zYws0ZKLVsM3NNpypwnwcibYv3RwXxfG4f/Q==}
19051903 peerDependencies:
1906 effect: 4.0.0-beta.102
1904 effect: 4.0.0-beta.103
19071905
19081906 '@distilled.cloud/planetscale@0.30.2':
19091907 resolution: {integrity: sha512-Ph4lY6Ds8xC0l8ZDaEsX4E5oPCHqnDHb3RYKbOPeO8fjaXdZHWxn24gxCWpzSU+fVnkmdKy9ntflqxK2l+12rQ==}
19101908 peerDependencies:
1911 effect: 4.0.0-beta.102
1909 effect: 4.0.0-beta.103
19121910
19131911 '@dnd-kit/accessibility@3.1.1':
19141912 resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==}
......@@ -1941,52 +1939,52 @@ packages:
19411939 '@drizzle-team/brocli@0.12.0':
19421940 resolution: {integrity: sha512-mlUE+rZ8CatQekLhnaiN91Iemdd+e2gFKooGlnRB3oPTL3VghLfX24dx7HrzMNeC1JrIB/0kpsfyty3f5HNfxQ==}
19431941
1944 '@effect/atom-react@4.0.0-beta.102':
1945 resolution: {integrity: sha512-6SX11h7OFwje4YhxYUml9qGjBU8hvnEMrLWe3TKI3lEH/W6tkU/BzajC263eXkxM68h+BJNzE81Ipi5DTfEgug==}
1942 '@effect/atom-react@4.0.0-beta.103':
1943 resolution: {integrity: sha512-1HJ+Cyq4ssLnH2UZ8OVnhtMGAySabtzZo7imKC+vEfxOW3lvJYpGZeicxQX5Ii/7AdvlR+19p/6K2a5IPKYAow==}
19461944 peerDependencies:
1947 effect: 4.0.0-beta.102
1945 effect: 4.0.0-beta.103
19481946 react: ^19.2.4
19491947 scheduler: '*'
19501948
1951 '@effect/openapi-generator@4.0.0-beta.102':
1952 resolution: {integrity: sha512-LeUj+Z1J58+Xj1WtyhF/cpFIcTOEAHvcQe++Sh6b/o4tZPaC2UDb0144bOFjTNPgOBKcNb6FvVQXwPGV2wv3ZQ==}
1949 '@effect/openapi-generator@4.0.0-beta.103':
1950 resolution: {integrity: sha512-wWp3n0w9g7edprSue5xLB68Lu3PNdeW1n8girDmV2RKdmVKgrvY0+iIyzYqEMhVGOxc7P0g/ZtMWzaAnJAxbBA==}
19531951 hasBin: true
19541952 peerDependencies:
1955 '@effect/platform-node': 4.0.0-beta.102
1956 effect: 4.0.0-beta.102
1953 '@effect/platform-node': 4.0.0-beta.103
1954 effect: 4.0.0-beta.103
19571955
1958 '@effect/platform-bun@4.0.0-beta.102':
1959 resolution: {integrity: sha512-hTIb0jjTfXhNgnDq2OX5wrigc0OSvTT0VWWb1PLpMM395RJPu8rCIbTlGhy0NS7kZOd8FfgNi9e0sDhgyu+5Ag==}
1956 '@effect/platform-bun@4.0.0-beta.103':
1957 resolution: {integrity: sha512-/ay1/lhE9FUKEiDRQs56463eJ9u9ivtUtOCi2eeqI8Aooau7PupKNtV5zKjoRBCLInZMAX7JezT46NW5AdACBQ==}
19601958 peerDependencies:
1961 effect: 4.0.0-beta.102
1959 effect: 4.0.0-beta.103
19621960
1963 '@effect/platform-node-shared@4.0.0-beta.102':
1964 resolution: {integrity: sha512-gVd793I72MrkX4dXo7eYtRKfNj0RW4eMRfVEKEJI16h2+mBDCzQ+gqMrog2hSTHQnaIbvbYShNQ4TVGuRCYZeQ==}
1961 '@effect/platform-node-shared@4.0.0-beta.103':
1962 resolution: {integrity: sha512-0aCZMBid5ifqmY55TkfCDLaGTIM8qu3bNFUW7qL9vh/7jFOkaIAMX2MA8muG4deqW17XWxawddWu4v0fK+UW3g==}
19651963 engines: {node: '>=18.0.0'}
19661964 peerDependencies:
1967 effect: 4.0.0-beta.102
1965 effect: 4.0.0-beta.103
19681966
1969 '@effect/platform-node@4.0.0-beta.102':
1970 resolution: {integrity: sha512-wYVAU9jAePT+gouMr/EVz1CaW6yDLjPAgXYeEFLz7wugT5iZhFRag6mqajV/wwN3bzWP2fzZHokLuPmqD/rqeA==}
1967 '@effect/platform-node@4.0.0-beta.103':
1968 resolution: {integrity: sha512-VD8fbpendwFokMwzC7/MxazjhEVDihPC5NZtomYEyZwGaA1LXMvwP1y8pfXwfshUkG56TN4EMQqzu72c0B9FhA==}
19711969 engines: {node: '>=18.0.0'}
19721970 peerDependencies:
1973 effect: 4.0.0-beta.102
1971 effect: 4.0.0-beta.103
19741972 ioredis: ^5.7.0
19751973
19761974 '@effect/sql-d1@4.0.0-beta.101':
19771975 resolution: {integrity: sha512-4M/2lm7y1M1Fg1fCc31BTtU3p8lK0jHUlPGqIiJ97pOSXZJrlv21087VVLbJ/1i4svuSUshnShDsce9ZwZKsOQ==}
19781976 peerDependencies:
1979 effect: 4.0.0-beta.102
1977 effect: 4.0.0-beta.103
19801978
1981 '@effect/sql-pg@4.0.0-beta.102':
1982 resolution: {integrity: sha512-02a+fNfECWCZIZcgHl7OLQN2jZj42gq90EdwdnvR3KA6GLGypY02swABS4zFtaW9H80rTa0ukqVnTdcO/DT5GQ==}
1979 '@effect/sql-pg@4.0.0-beta.103':
1980 resolution: {integrity: sha512-jzlTFtFaaoOmT87rQMKUBhkFeIQQwDKtlB+MOYn1jIPssLvXZVnMqo9GahCjsNcXVlB6QGBkUgD1HCA6+tJvBw==}
19831981 peerDependencies:
1984 effect: 4.0.0-beta.102
1982 effect: 4.0.0-beta.103
19851983
1986 '@effect/sql-sqlite-bun@4.0.0-beta.102':
1987 resolution: {integrity: sha512-pBO6FBJ+a21j2qHmzJDK1DeJsxm7HpUQBgucw6prHQXLMUBkhOsfZofhw1FKEdGRDEhO0sGTjffa2KP7iOuDIg==}
1984 '@effect/sql-sqlite-bun@4.0.0-beta.103':
1985 resolution: {integrity: sha512-u10I6SEWgUc1sKrlT0luxOBNzlUXunzxCChrD75pK5khIN1baKlPn2DD3f7bkh20NxwSzOfxF3hWsrO4VktvNg==}
19881986 peerDependencies:
1989 effect: 4.0.0-beta.102
1987 effect: 4.0.0-beta.103
19901988
19911989 '@effect/tsgo-darwin-arm64@0.13.2':
19921990 resolution: {integrity: sha512-AlYlxU2sD3urNCmNCQWtatPJS/+m2r3CvgZdDTs9KEz2YcyQc2GV1g2RWFkoMwmgzYBx69DBLu1oscqJO2qAog==}
......@@ -2027,10 +2025,10 @@ packages:
20272025 resolution: {integrity: sha512-zPQMHBdCN1k7Jbxjxq0HVAbzsZd+LAoRPzBEZ3F4y/uxNK0K/XGvFXUUw/CUAsD6rhUtC2VahZY1tp0owb5lgg==}
20282026 hasBin: true
20292027
2030 '@effect/vitest@4.0.0-beta.102':
2031 resolution: {integrity: sha512-4dipFAYG6imOzrY3zy3BgzCJkbb9xESyzUef0WSx8bsK0/SpITqbJpdwKeOyDWLZ+rimjua8IbTFMAde865pIQ==}
2028 '@effect/vitest@4.0.0-beta.103':
2029 resolution: {integrity: sha512-Kz3gemVuJNAZ3e4V6A7BwAP87x2Av8LyHOlCjy9jbZzlncwJXO7Olk1Sje3hdKaet3wEl51A/0/89xJ2IYSgNg==}
20322030 peerDependencies:
2033 effect: 4.0.0-beta.102
2031 effect: 4.0.0-beta.103
20342032
20352033 '@egjs/hammerjs@2.0.17':
20362034 resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==}
......@@ -5295,12 +5293,12 @@ packages:
52955293 hasBin: true
52965294 peerDependencies:
52975295 '@aws/durable-execution-sdk-js': ^2.1.0
5298 '@effect/platform-bun': 4.0.0-beta.102
5299 '@effect/platform-node': 4.0.0-beta.102
5300 '@effect/sql-pg': 4.0.0-beta.102
5296 '@effect/platform-bun': 4.0.0-beta.103
5297 '@effect/platform-node': 4.0.0-beta.103
5298 '@effect/sql-pg': 4.0.0-beta.103
53015299 drizzle-kit: 1.0.0-rc.4
53025300 drizzle-orm: 1.0.0-rc.4
5303 effect: 4.0.0-beta.102
5301 effect: 4.0.0-beta.103
53045302 vite: ^8.0.7
53055303 ws: ^8.20.0
53065304 peerDependenciesMeta:
......@@ -6160,9 +6158,9 @@ packages:
61606158 '@effect/sql-d1': '>=4.0.0-beta.83 || >=4.0.0'
61616159 '@effect/sql-libsql': '>=4.0.0-beta.83 || >=4.0.0'
61626160 '@effect/sql-mysql2': '>=4.0.0-beta.83 || >=4.0.0'
6163 '@effect/sql-pg': 4.0.0-beta.102
6161 '@effect/sql-pg': 4.0.0-beta.103
61646162 '@effect/sql-pglite': '>=4.0.0-beta.83 || >=4.0.0'
6165 '@effect/sql-sqlite-bun': 4.0.0-beta.102
6163 '@effect/sql-sqlite-bun': 4.0.0-beta.103
61666164 '@effect/sql-sqlite-do': '>=4.0.0-beta.83 || >=4.0.0'
61676165 '@effect/sql-sqlite-node': '>=4.0.0-beta.83 || >=4.0.0'
61686166 '@effect/sql-sqlite-wasm': '>=4.0.0-beta.83 || >=4.0.0'
......@@ -6191,7 +6189,7 @@ packages:
61916189 arktype: '>=2.0.0'
61926190 better-sqlite3: '>=9.3.0'
61936191 bun-types: '*'
6194 effect: 4.0.0-beta.102
6192 effect: 4.0.0-beta.103
61956193 expo-sqlite: '>=14.0.0'
61966194 mssql: ^11.0.1
61976195 mysql2: '>=2'
......@@ -6312,8 +6310,8 @@ packages:
63126310 ee-first@1.1.1:
63136311 resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
63146312
6315 effect@4.0.0-beta.102:
6316 resolution: {integrity: sha512-z8Y+Q76Hh/kjLFZrXu8tGn6e+tDsg45R+UHhxd190pXxD53OGwf/G/zDxXTkse4HJ5mobNZfitLfUCp4fMvu6w==}
6313 effect@4.0.0-beta.103:
6314 resolution: {integrity: sha512-pE8TxF4m2tQzVI+77dIlm3s+81TACV1AiX1JEkvY+zVuxgQQ8aGSkqXNJF6b/ST+coCSk5cUdbULpQ7sm4oHyw==}
63176315
63186316 ejs@3.1.10:
63196317 resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
......@@ -8610,9 +8608,6 @@ packages:
86108608 pg-cloudflare@1.4.0:
86118609 resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==}
86128610
8613 pg-connection-string@2.13.0:
8614 resolution: {integrity: sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==}
8615
86168611 pg-connection-string@2.14.0:
86178612 resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==}
86188613
......@@ -11657,24 +11652,24 @@ snapshots:
1165711652
1165811653 '@cloudflare/workers-types@5.20260726.1': {}
1165911654
11660 '@distilled.cloud/aws@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11655 '@distilled.cloud/aws@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1166111656 dependencies:
1166211657 '@aws-crypto/crc32': 5.2.0
1166311658 '@aws-crypto/util': 5.2.0
1166411659 '@aws-sdk/credential-providers': 3.1062.0
1166511660 '@aws-sdk/types': 3.973.10
11666 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11661 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1166711662 '@smithy/shared-ini-file-loader': 4.5.6
1166811663 '@smithy/types': 4.14.3
1166911664 '@smithy/util-base64': 4.4.6
1167011665 aws4fetch: 1.0.20
11671 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11666 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1167211667 fast-xml-parser: 5.8.0
1167311668
11674 '@distilled.cloud/axiom@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11669 '@distilled.cloud/axiom@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1167511670 dependencies:
11676 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11677 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11671 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11672 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1167811673
1167911674 '@distilled.cloud/cloudflare-rolldown-plugin@0.13.10(@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.1.5)(workerd@1.20260704.1)':
1168011675 dependencies:
......@@ -11687,48 +11682,48 @@ snapshots:
1168711682 transitivePeerDependencies:
1168811683 - workerd
1168911684
11690 '@distilled.cloud/cloudflare-runtime@0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/platform-bun@4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11685 '@distilled.cloud/cloudflare-runtime@0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/platform-bun@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1169111686 dependencies:
1169211687 '@alchemy.run/node-utils': 0.0.5
11693 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11694 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11688 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11689 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1169511690 workerd: 1.20260704.1
1169611691 optionalDependencies:
11697 '@effect/platform-bun': 4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
11698 '@effect/platform-node': 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
11692 '@effect/platform-bun': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
11693 '@effect/platform-node': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
1169911694
11700 '@distilled.cloud/cloudflare-vite-plugin@0.13.10(554b80dcfb9268a9eeb72fedc0ae62a5)':
11695 '@distilled.cloud/cloudflare-vite-plugin@0.13.10(8bf551e378e9cbc11f8bf1003fbc14a8)':
1170111696 dependencies:
11702 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11697 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1170311698 '@distilled.cloud/cloudflare-rolldown-plugin': 0.13.10(@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.1.5)(workerd@1.20260704.1)
11704 '@distilled.cloud/cloudflare-runtime': 0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/platform-bun@4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11705 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11699 '@distilled.cloud/cloudflare-runtime': 0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/platform-bun@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11700 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1170611701 vite: '@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0)'
1170711702 optionalDependencies:
11708 '@effect/platform-bun': 4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
11709 '@effect/platform-node': 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
11703 '@effect/platform-bun': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
11704 '@effect/platform-node': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
1171011705 transitivePeerDependencies:
1171111706 - rolldown
1171211707 - workerd
1171311708
11714 '@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11709 '@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1171511710 dependencies:
11716 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11717 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11711 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11712 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1171811713
11719 '@distilled.cloud/core@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11714 '@distilled.cloud/core@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1172011715 dependencies:
11721 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11716 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1172211717
11723 '@distilled.cloud/neon@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11718 '@distilled.cloud/neon@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1172411719 dependencies:
11725 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11726 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11720 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11721 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1172711722
11728 '@distilled.cloud/planetscale@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11723 '@distilled.cloud/planetscale@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1172911724 dependencies:
11730 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
11731 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11725 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
11726 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1173211727
1173311728 '@dnd-kit/accessibility@3.1.1(react@19.2.6)':
1173411729 dependencies:
......@@ -11764,47 +11759,47 @@ snapshots:
1176411759
1176511760 '@drizzle-team/brocli@0.12.0': {}
1176611761
11767 '@effect/atom-react@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(react@19.2.3)(scheduler@0.27.0)':
11762 '@effect/atom-react@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(react@19.2.3)(scheduler@0.27.0)':
1176811763 dependencies:
11769 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11764 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1177011765 react: 19.2.3
1177111766 scheduler: 0.27.0
1177211767
11773 '@effect/atom-react@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(react@19.2.6)(scheduler@0.27.0)':
11768 '@effect/atom-react@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(react@19.2.6)(scheduler@0.27.0)':
1177411769 dependencies:
11775 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11770 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1177611771 react: 19.2.6
1177711772 scheduler: 0.27.0
1177811773
11779 '@effect/openapi-generator@4.0.0-beta.102(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11774 '@effect/openapi-generator@4.0.0-beta.103(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1178011775 dependencies:
11781 '@effect/platform-node': 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
11782 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11776 '@effect/platform-node': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
11777 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1178311778 swagger2openapi: 7.0.8
1178411779 transitivePeerDependencies:
1178511780 - encoding
1178611781
11787 '@effect/platform-bun@4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)':
11782 '@effect/platform-bun@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)':
1178811783 dependencies:
11789 '@effect/platform-node-shared': 4.0.0-beta.102(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
11790 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11784 '@effect/platform-node-shared': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
11785 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1179111786 transitivePeerDependencies:
1179211787 - bufferutil
1179311788 - utf-8-validate
1179411789
11795 '@effect/platform-node-shared@4.0.0-beta.102(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)':
11790 '@effect/platform-node-shared@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)':
1179611791 dependencies:
1179711792 '@types/ws': 8.18.1
11798 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11793 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1179911794 ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1180011795 transitivePeerDependencies:
1180111796 - bufferutil
1180211797 - utf-8-validate
1180311798
11804 '@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)':
11799 '@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)':
1180511800 dependencies:
11806 '@effect/platform-node-shared': 4.0.0-beta.102(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
11807 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11801 '@effect/platform-node-shared': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
11802 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1180811803 ioredis: 5.11.0
1180911804 mime: 4.1.0
1181011805 undici: 8.9.0
......@@ -11812,14 +11807,14 @@ snapshots:
1181211807 - bufferutil
1181311808 - utf-8-validate
1181411809
11815 '@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11810 '@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1181611811 dependencies:
1181711812 '@cloudflare/workers-types': 5.20260726.1
11818 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11813 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1181911814
11820 '@effect/sql-pg@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11815 '@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1182111816 dependencies:
11822 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11817 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1182311818 pg: 8.22.0
1182411819 pg-connection-string: 2.14.0
1182511820 pg-cursor: 2.21.0(pg@8.22.0)
......@@ -11828,9 +11823,9 @@ snapshots:
1182811823 transitivePeerDependencies:
1182911824 - pg-native
1183011825
11831 '@effect/sql-sqlite-bun@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11826 '@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1183211827 dependencies:
11833 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11828 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1183411829
1183511830 '@effect/tsgo-darwin-arm64@0.13.2':
1183611831 optional: true
......@@ -11863,9 +11858,9 @@ snapshots:
1186311858 '@effect/tsgo-win32-arm64': 0.13.2
1186411859 '@effect/tsgo-win32-x64': 0.13.2
1186511860
11866 '@effect/vitest@4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))':
11861 '@effect/vitest@4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))':
1186711862 dependencies:
11868 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
11863 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1186911864
1187011865 '@egjs/hammerjs@2.0.17':
1187111866 dependencies:
......@@ -15371,22 +15366,22 @@ snapshots:
1537115366 json-schema-traverse: 1.0.0
1537215367 require-from-string: 2.0.2
1537315368
15374 alchemy@2.0.0-beta.65(249551d75ad3792c0b22cd2754b25266):
15369 alchemy@2.0.0-beta.65(a455401069e1fee89f31a277c51247f6):
1537515370 dependencies:
1537615371 '@alchemy.run/node-utils': 0.0.5
1537715372 '@aws-sdk/credential-providers': 3.1062.0
1537815373 '@clack/prompts': 0.11.0
15379 '@distilled.cloud/aws': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15380 '@distilled.cloud/axiom': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15381 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15374 '@distilled.cloud/aws': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15375 '@distilled.cloud/axiom': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15376 '@distilled.cloud/cloudflare': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1538215377 '@distilled.cloud/cloudflare-rolldown-plugin': 0.13.10(@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.1.5)(workerd@1.20260704.1)
15383 '@distilled.cloud/cloudflare-runtime': 0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/platform-bun@4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15384 '@distilled.cloud/cloudflare-vite-plugin': 0.13.10(554b80dcfb9268a9eeb72fedc0ae62a5)
15385 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15386 '@distilled.cloud/neon': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15387 '@distilled.cloud/planetscale': 0.30.2(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15388 '@effect/sql-d1': 4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15389 '@effect/vitest': 4.0.0-beta.102(patch_hash=a607339aab944136a084a05f159aa0f5a69776934d4b835dab8f9992f1c13425)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15378 '@distilled.cloud/cloudflare-runtime': 0.13.10(@distilled.cloud/cloudflare@0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/platform-bun@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6))(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15379 '@distilled.cloud/cloudflare-vite-plugin': 0.13.10(8bf551e378e9cbc11f8bf1003fbc14a8)
15380 '@distilled.cloud/core': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15381 '@distilled.cloud/neon': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15382 '@distilled.cloud/planetscale': 0.30.2(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15383 '@effect/sql-d1': 4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
15384 '@effect/vitest': 4.0.0-beta.103(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1539015385 '@libsql/client': 0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1539115386 '@octokit/rest': 22.0.1
1539215387 '@octokit/webhooks': 14.2.0
......@@ -15396,7 +15391,7 @@ snapshots:
1539615391 '@types/aws-lambda': 8.10.161
1539715392 aws4fetch: 1.0.20
1539815393 capnweb: 0.6.1
15399 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
15394 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1540015395 fast-glob: 3.3.3
1540115396 fast-xml-parser: 5.8.0
1540215397 ink: 6.8.0(@types/react@19.2.16)(bufferutil@4.1.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react@19.2.6)(utf-8-validate@6.0.6)
......@@ -15412,11 +15407,11 @@ snapshots:
1541215407 undici: 7.27.1
1541315408 yaml: 2.9.0
1541415409 optionalDependencies:
15415 '@effect/platform-bun': 4.0.0-beta.102(patch_hash=9f7cfa69ef19b624ac7704fe505a6775dc272d734208883f3decc7e5201a3d23)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(utf-8-validate@6.0.6)
15416 '@effect/platform-node': 4.0.0-beta.102(patch_hash=cae7efcda6fd29f4db2efd357cb7dc6c41cb6adc957901d437e13ed1f3c017f0)(bufferutil@4.1.0)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(ioredis@5.11.0)(utf-8-validate@6.0.6)
15417 '@effect/sql-pg': 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
15410 '@effect/platform-bun': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(utf-8-validate@6.0.6)
15411 '@effect/platform-node': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(ioredis@5.11.0)(utf-8-validate@6.0.6)
15412 '@effect/sql-pg': 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1541815413 drizzle-kit: 1.0.0-rc.4
15419 drizzle-orm: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-pg@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-sqlite-bun@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3)
15414 drizzle-orm: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3)
1542015415 vite: '@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0)'
1542115416 ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1542215417 transitivePeerDependencies:
......@@ -16439,15 +16434,15 @@ snapshots:
1643916434 get-tsconfig: 4.14.0
1644016435 jiti: 2.7.0
1644116436
16442 drizzle-orm@1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-pg@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@effect/sql-sqlite-bun@4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3):
16437 drizzle-orm@1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3):
1644316438 optionalDependencies:
1644416439 '@cloudflare/workers-types': 4.20260604.1
16445 '@effect/sql-d1': 4.0.0-beta.101(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
16446 '@effect/sql-pg': 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
16447 '@effect/sql-sqlite-bun': 4.0.0-beta.102(effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488))
16440 '@effect/sql-d1': 4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
16441 '@effect/sql-pg': 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
16442 '@effect/sql-sqlite-bun': 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9))
1644816443 '@libsql/client': 0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1644916444 bun-types: 1.3.14
16450 effect: 4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488)
16445 effect: 4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9)
1645116446 expo-sqlite: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)
1645216447 mysql2: 3.22.4(@types/node@24.12.4)
1645316448 pg: 8.21.0
......@@ -16467,7 +16462,7 @@ snapshots:
1646716462
1646816463 ee-first@1.1.1: {}
1646916464
16470 effect@4.0.0-beta.102(patch_hash=71215759e1ac0a7f65d7b75d816986687ae6c3a6cba02d928d184ca71790d488):
16465 effect@4.0.0-beta.103(patch_hash=a18f963109656ddbeb2a99ca45f942ecf54830986259eb01ce6a970421c9c6a9):
1647116466 dependencies:
1647216467 '@standard-schema/spec': 1.1.0
1647316468 fast-check: 4.9.0
......@@ -19487,8 +19482,6 @@ snapshots:
1948719482 pg-cloudflare@1.4.0:
1948819483 optional: true
1948919484
19490 pg-connection-string@2.13.0: {}
19491
1949219485 pg-connection-string@2.14.0: {}
1949319486
1949419487 pg-cursor@2.21.0(pg@8.22.0):
......@@ -19531,7 +19524,7 @@ snapshots:
1953119524
1953219525 pg@8.21.0:
1953319526 dependencies:
19534 pg-connection-string: 2.13.0
19527 pg-connection-string: 2.14.0
1953519528 pg-pool: 3.14.0(pg@8.21.0)
1953619529 pg-protocol: 1.14.0
1953719530 pg-types: 2.2.0
pnpm-workspace.yaml+20-22
......@@ -30,21 +30,21 @@ catalog:
3030 "@clerk/expo": 4.1.2
3131 "@clerk/react": 6.12.9
3232 "@clerk/shared": 4.25.9
33 "@effect/atom-react": 4.0.0-beta.102
34 "@effect/openapi-generator": 4.0.0-beta.102
35 "@effect/platform-bun": 4.0.0-beta.102
36 "@effect/platform-node": 4.0.0-beta.102
37 "@effect/platform-node-shared": 4.0.0-beta.102
38 "@effect/sql-pg": 4.0.0-beta.102
39 "@effect/sql-sqlite-bun": 4.0.0-beta.102
33 "@effect/atom-react": 4.0.0-beta.103
34 "@effect/openapi-generator": 4.0.0-beta.103
35 "@effect/platform-bun": 4.0.0-beta.103
36 "@effect/platform-node": 4.0.0-beta.103
37 "@effect/platform-node-shared": 4.0.0-beta.103
38 "@effect/sql-pg": 4.0.0-beta.103
39 "@effect/sql-sqlite-bun": 4.0.0-beta.103
4040 "@effect/tsgo": 0.13.2
41 "@effect/vitest": 4.0.0-beta.102
41 "@effect/vitest": 4.0.0-beta.103
4242 "@noble/curves": 1.9.1
4343 "@noble/hashes": 1.8.0
4444 "@pierre/diffs": 1.3.0-beta.10
4545 "@types/node": 24.12.4
4646 "@typescript/native-preview": 7.0.0-dev.20260604.1
47 effect: 4.0.0-beta.102
47 effect: 4.0.0-beta.103
4848 jose: 6.2.2
4949 typescript: ~6.0.3
5050 vite: npm:@voidzero-dev/vite-plus-core@0.2.2
......@@ -64,16 +64,16 @@ minimumReleaseAgeExclude:
6464 - "@distilled.cloud/core@0.30.2"
6565 - "@distilled.cloud/neon@0.30.2"
6666 - "@distilled.cloud/planetscale@0.30.2"
67 - "@effect/atom-react@4.0.0-beta.102"
68 - "@effect/openapi-generator@4.0.0-beta.102"
69 - "@effect/platform-bun@4.0.0-beta.102"
70 - "@effect/platform-node-shared@4.0.0-beta.102"
71 - "@effect/platform-node@4.0.0-beta.102"
72 - "@effect/sql-pg@4.0.0-beta.102"
73 - "@effect/sql-sqlite-bun@4.0.0-beta.102"
74 - "@effect/vitest@4.0.0-beta.102"
67 - "@effect/atom-react@4.0.0-beta.103"
68 - "@effect/openapi-generator@4.0.0-beta.103"
69 - "@effect/platform-bun@4.0.0-beta.103"
70 - "@effect/platform-node-shared@4.0.0-beta.103"
71 - "@effect/platform-node@4.0.0-beta.103"
72 - "@effect/sql-pg@4.0.0-beta.103"
73 - "@effect/sql-sqlite-bun@4.0.0-beta.103"
74 - "@effect/vitest@4.0.0-beta.103"
7575 - alchemy@2.0.0-beta.65
76 - effect@4.0.0-beta.102
76 - effect@4.0.0-beta.103
7777
7878overrides:
7979 "@clerk/backend": "catalog:"
......@@ -122,16 +122,14 @@ packageExtensions:
122122 vite: "catalog:"
123123
124124patchedDependencies:
125 "@effect/platform-bun@4.0.0-beta.102": patches/@effect__platform-bun@4.0.0-beta.102.patch
126 "@effect/platform-node@4.0.0-beta.102": patches/@effect__platform-node@4.0.0-beta.102.patch
127 "@effect/vitest@4.0.0-beta.102": patches/@effect__vitest@4.0.0-beta.102.patch
125 "@effect/vitest@4.0.0-beta.103": patches/@effect__vitest@4.0.0-beta.103.patch
128126 "@expo/metro-config@56.0.14": patches/@expo%2Fmetro-config@56.0.14.patch
129127 "@ff-labs/fff-node@0.9.4": patches/@ff-labs__fff-node@0.9.4.patch
130128 "@legendapp/list@3.3.3": patches/@legendapp__list@3.3.3.patch
131129 "@pierre/diffs@1.3.0-beta.10": patches/@pierre%2Fdiffs@1.3.0-beta.10.patch
132130 "@react-native-menu/menu@2.0.0": patches/@react-native-menu__menu@2.0.0.patch
133131 "@react-navigation/native-stack@7.17.6": patches/@react-navigation%2Fnative-stack@7.17.6.patch
134 effect@4.0.0-beta.102: patches/effect@4.0.0-beta.102.patch
132 effect@4.0.0-beta.103: patches/effect@4.0.0-beta.103.patch
135133 expo-modules-jsi@56.0.10: patches/expo-modules-jsi@56.0.10.patch
136134 react-native-gesture-handler@2.31.2: patches/react-native-gesture-handler@2.31.2.patch
137135 react-native-keyboard-controller@1.21.13: patches/react-native-keyboard-controller@1.21.13.patch
scripts/build-desktop-artifact.ts+1-1
......@@ -67,7 +67,7 @@ type StageWorkspaceConfig = typeof StageWorkspaceConfig.Type;
6767const RepoRoot = Effect.service(Path.Path).pipe(
6868 Effect.flatMap((path) => path.fromFileUrl(new URL("..", import.meta.url))),
6969);
70const encodeJsonString = Schema.encodeEffect(Schema.UnknownFromJsonString);
70const encodeJsonString = Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown));
7171const decodeWorkspaceConfig = Schema.decodeEffect(fromYaml(WorkspaceConfig));
7272const decodeNodePtyManifest = Schema.decodeUnknownEffect(
7373 Schema.fromJsonString(Schema.Struct({ version: Schema.String })),
scripts/sync-reference-repos.ts+1-1
......@@ -100,7 +100,7 @@ export const ReferenceRepoSyncError = Schema.Union([
100100export type ReferenceRepoSyncError = typeof ReferenceRepoSyncError.Type;
101101export const isReferenceRepoSyncError = Schema.is(ReferenceRepoSyncError);
102102
103const decodeJsonSource = Schema.decodeUnknownEffect(Schema.UnknownFromJsonString);
103const decodeJsonSource = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown));
104104const decodeYamlSource = Schema.decodeEffect(fromYaml(Schema.Unknown));
105105
106106const collectStreamAsString = <E>(stream: Stream.Stream<Uint8Array, E>): Effect.Effect<string, E> =>