diff --git a/apps/desktop/src/app/DesktopConfig.ts b/apps/desktop/src/app/DesktopConfig.ts index 924b8ce6e72b6241a2c9c1b6df85b17ce4062c4b..d03dec70ce82aa1265a4d7776894d20a0f4997d0 100644 --- a/apps/desktop/src/app/DesktopConfig.ts +++ b/apps/desktop/src/app/DesktopConfig.ts @@ -9,10 +9,10 @@ const trimNonEmptyOption = (value: string): Option.Option => { }; const trimmedString = (name: string) => - Config.string(name).pipe(Config.option, Config.map(Option.flatMap(trimNonEmptyOption))); + Config.String(name).pipe(Config.option, Config.map(Option.flatMap(trimNonEmptyOption))); const optionalBoolean = (name: string) => - Config.boolean(name).pipe(Config.option, Config.map(Option.getOrElse(() => false))); + Config.Boolean(name).pipe(Config.option, Config.map(Option.getOrElse(() => false))); const commaSeparatedStrings = (name: string) => trimmedString(name).pipe( @@ -38,15 +38,15 @@ export const DesktopConfig = Config.all({ xdgConfigHome: trimmedString("XDG_CONFIG_HOME"), xdgDataHome: trimmedString("XDG_DATA_HOME"), t3Home: trimmedString("T3CODE_HOME"), - devServerUrl: Config.url("VITE_DEV_SERVER_URL").pipe(Config.option), + devServerUrl: Config.URL("VITE_DEV_SERVER_URL").pipe(Config.option), appUserModelIdOverride: trimmedString("T3CODE_DESKTOP_APP_USER_MODEL_ID"), devRemoteT3ServerEntryPath: trimmedString("T3CODE_DEV_REMOTE_T3_SERVER_ENTRY_PATH"), - configuredBackendPort: Config.port("T3CODE_PORT").pipe(Config.option), + configuredBackendPort: Config.Port("T3CODE_PORT").pipe(Config.option), commitHashOverride: trimmedString("T3CODE_COMMIT_HASH"), desktopLanHostOverride: trimmedString("T3CODE_DESKTOP_LAN_HOST"), desktopHttpsEndpointUrls: commaSeparatedStrings("T3CODE_DESKTOP_HTTPS_ENDPOINTS"), otlpTracesUrl: trimmedString("T3CODE_OTLP_TRACES_URL"), - otlpExportIntervalMs: Config.int("T3CODE_OTLP_EXPORT_INTERVAL_MS").pipe( + otlpExportIntervalMs: Config.Int("T3CODE_OTLP_EXPORT_INTERVAL_MS").pipe( Config.withDefault(10_000), ), otlpHeaders: Config.schema(OtlpHeadersFromString, "T3CODE_OTLP_HEADERS").pipe(Config.option), @@ -56,7 +56,7 @@ export const DesktopConfig = Config.all({ appImagePath: trimmedString("APPIMAGE"), disableAutoUpdate: optionalBoolean("T3CODE_DISABLE_AUTO_UPDATE"), mockUpdates: optionalBoolean("T3CODE_DESKTOP_MOCK_UPDATES"), - mockUpdateServerPort: Config.port("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe( + mockUpdateServerPort: Config.Port("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe( Config.withDefault(3000), ), }); diff --git a/apps/desktop/src/electron/ElectronProtocol.ts b/apps/desktop/src/electron/ElectronProtocol.ts index ed35bbc7952fa73e1b14d4d522abb72018c53786..96cd462bd156f7dc7cb68722ab496e16346e3980 100644 --- a/apps/desktop/src/electron/ElectronProtocol.ts +++ b/apps/desktop/src/electron/ElectronProtocol.ts @@ -1,10 +1,11 @@ -import Mime from "@effect/platform-node/Mime"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Layer from "effect/Layer"; +import * as Option from "effect/Option"; import * as NodeTimersPromises from "node:timers/promises"; import * as Path from "effect/Path"; +import * as Mime from "effect/unstable/http/Mime"; import * as Ref from "effect/Ref"; import * as Schema from "effect/Schema"; import * as Scope from "effect/Scope"; @@ -227,7 +228,9 @@ const serveDesktopAsset = Effect.fn("desktop.protocol.serveAsset")(function* ( const contents = yield* fileSystem.readFile(filePath).pipe(Effect.orElseSucceed(() => null)); if (contents === null) return new Response(null, { status: 404 }); return new Response(request.method === "HEAD" ? null : new Uint8Array(contents), { - headers: { "content-type": Mime.getType(filePath) ?? "application/octet-stream" }, + headers: { + "content-type": Option.getOrElse(Mime.getType(filePath), () => "application/octet-stream"), + }, }); }); diff --git a/apps/server/integration/NetworkTransferMeasurement.integration.ts b/apps/server/integration/NetworkTransferMeasurement.integration.ts index fbbdd8fb156b0db4f51bba1232c4128ce3c8206f..c70e50b6852b97460941891ad367fa93f4250cac 100644 --- a/apps/server/integration/NetworkTransferMeasurement.integration.ts +++ b/apps/server/integration/NetworkTransferMeasurement.integration.ts @@ -181,8 +181,9 @@ function countingWsRpcProtocolLayer(input: { readonly cookie: string; readonly recorder: WebSocketTransferRecorder; }) { + // Socket.makeWebSocket only ever passes its `protocols` option here. const webSocketConstructorLayer = Layer.succeed(Socket.WebSocketConstructor, (url, protocols) => - input.recorder.connect(url, protocols, input.cookie), + input.recorder.connect(url, protocols as string | string[] | undefined, input.cookie), ); return RpcClient.layerProtocolSocket().pipe( Layer.provide( diff --git a/apps/server/integration/orphanedProviderSessionStartup.integration.test.ts b/apps/server/integration/orphanedProviderSessionStartup.integration.test.ts index e07681ae153b067c093d158cf273641aecb3dfce..77173af1b377b8aa69cfdf0d10ed5ef93e8cf780 100644 --- a/apps/server/integration/orphanedProviderSessionStartup.integration.test.ts +++ b/apps/server/integration/orphanedProviderSessionStartup.integration.test.ts @@ -21,6 +21,7 @@ import * as Option from "effect/Option"; import * as Stream from "effect/Stream"; import * as SqlClient from "effect/unstable/sql/SqlClient"; import { HttpServer } from "effect/unstable/http"; +import * as NetAddress from "effect/unstable/net/NetAddress"; import * as EnvironmentAuth from "../src/auth/EnvironmentAuth.ts"; import * as ServiceLauncherClient from "../src/cloud/serviceLauncherClient.ts"; @@ -104,7 +105,7 @@ const startupDependencies = Layer.mergeAll( Layer.succeed( HttpServer.HttpServer, HttpServer.HttpServer.of({ - address: { _tag: "TcpAddress", hostname: "127.0.0.1", port: 3773 }, + address: NetAddress.inetAddressFromIpStringUnsafe("127.0.0.1", 3773), serve: (() => Effect.void) as HttpServer.HttpServer["Service"]["serve"], }), ), diff --git a/apps/server/package.json b/apps/server/package.json index cf0dc919e1b75fa893d693e9868f24152762bb0b..6f127599a6a4dac7ba134d8042e16ea6ad8add4d 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -30,7 +30,6 @@ "@opencode-ai/sdk": "^1.3.15", "diff": "8.0.3", "effect": "catalog:", - "msgpackr-extract": "3.0.4", "node-pty": "^1.1.0", "stream-chain": "^4.2.5", "stream-json": "3.6.0", diff --git a/apps/server/scripts/cli.ts b/apps/server/scripts/cli.ts index cc59e47e0a40993df3699f9abe3309ceabbe971c..58c3ad7b3d01312d6ae536f93e2a3db58f6ee0d6 100644 --- a/apps/server/scripts/cli.ts +++ b/apps/server/scripts/cli.ts @@ -70,7 +70,7 @@ const applyDevelopmentIconOverrides = Effect.fn("applyDevelopmentIconOverrides") const buildCmd = Command.make( "build", { - verbose: Flag.boolean("verbose").pipe(Flag.withDefault(false)), + verbose: Flag.Boolean("verbose").pipe(Flag.withDefault(false)), }, (config) => Effect.gen(function* () { @@ -109,8 +109,8 @@ const buildCmd = Command.make( const buildExeCmd = Command.make( "build-exe", { - verbose: Flag.boolean("verbose").pipe(Flag.withDefault(false)), - target: Flag.string("target").pipe( + verbose: Flag.Boolean("verbose").pipe(Flag.withDefault(false)), + target: Flag.String("target").pipe( Flag.withDescription( "Cross-build for - in nodejs.org naming (for example darwin-x64); defaults to the host.", ), @@ -175,14 +175,14 @@ const buildExeCmd = Command.make( const publishCmd = Command.make( "publish", { - packagesDir: Flag.string("packages-dir").pipe( + packagesDir: Flag.String("packages-dir").pipe( Flag.withDescription("Output dir of scripts/build-npm-platform-packages.ts."), ), - tag: Flag.string("tag").pipe(Flag.withDefault("latest")), - access: Flag.string("access").pipe(Flag.withDefault("public")), - provenance: Flag.boolean("provenance").pipe(Flag.withDefault(false)), - dryRun: Flag.boolean("dry-run").pipe(Flag.withDefault(false)), - verbose: Flag.boolean("verbose").pipe(Flag.withDefault(false)), + tag: Flag.String("tag").pipe(Flag.withDefault("latest")), + access: Flag.String("access").pipe(Flag.withDefault("public")), + provenance: Flag.Boolean("provenance").pipe(Flag.withDefault(false)), + dryRun: Flag.Boolean("dry-run").pipe(Flag.withDefault(false)), + verbose: Flag.Boolean("verbose").pipe(Flag.withDefault(false)), }, (config) => Effect.gen(function* () { diff --git a/apps/server/scripts/migrate-dev-db.ts b/apps/server/scripts/migrate-dev-db.ts index fca5e4ac6db1207ad8586bcb033bca9592698ca0..50d1b4e379095919981be3f29c5585dc179609da 100644 --- a/apps/server/scripts/migrate-dev-db.ts +++ b/apps/server/scripts/migrate-dev-db.ts @@ -506,19 +506,19 @@ const formatSize = (bytes: number): string => export const migrateDevDbCommand = Command.make( "migrate-dev-db", { - projects: Flag.integer("projects").pipe( + projects: Flag.Int("projects").pipe( Flag.withDefault(5), Flag.withDescription("How many recently updated projects to keep."), ), - threadsPerProject: Flag.integer("threads-per-project").pipe( + threadsPerProject: Flag.Int("threads-per-project").pipe( Flag.withDefault(10), Flag.withDescription("How many recent stopped threads to keep per project."), ), - baseDir: Flag.string("base-dir").pipe( + baseDir: Flag.String("base-dir").pipe( Flag.optional, Flag.withDescription("Isolated .t3 directory. Defaults to the current worktree's .t3."), ), - source: Flag.string("source").pipe( + source: Flag.String("source").pipe( Flag.optional, Flag.withDescription("Source database. Defaults to ~/.t3/userdata/state.sqlite."), ), diff --git a/apps/server/scripts/t3-sqlite-state.ts b/apps/server/scripts/t3-sqlite-state.ts index aae040470f50bcc4dc2def514154729e68cd3196..5e274588671f8ab8b8604a91c251bac0af437f5f 100644 --- a/apps/server/scripts/t3-sqlite-state.ts +++ b/apps/server/scripts/t3-sqlite-state.ts @@ -248,17 +248,17 @@ export const runSqliteState = Effect.fn("runSqliteState")(function* ( const t3SqliteStateCommand = Command.make( "t3-sqlite-state", { - operation: Argument.choice("operation", SqliteStateOperation.literals).pipe( + operation: Argument.Literals("operation", SqliteStateOperation.literals).pipe( Argument.withDescription("Run a read-only query or a backed-up fixture mutation."), ), - baseDir: Flag.string("base-dir").pipe( + baseDir: Flag.String("base-dir").pipe( Flag.withDescription("Explicit T3 base directory containing userdata/state.sqlite."), ), - sql: Flag.string("sql").pipe( + sql: Flag.String("sql").pipe( Flag.optional, Flag.withDescription("SQL source supplied directly on the command line."), ), - file: Flag.string("file").pipe( + file: Flag.String("file").pipe( Flag.optional, Flag.withDescription("Path to a SQL source file."), ), diff --git a/apps/server/src/assets/GitHubMediaFetch.ts b/apps/server/src/assets/GitHubMediaFetch.ts index fc2bb8c3e6de40631b347bc82742a0f43a26d1c7..495c2fa14c3bf27833a2d3a9a06741678e2badc9 100644 --- a/apps/server/src/assets/GitHubMediaFetch.ts +++ b/apps/server/src/assets/GitHubMediaFetch.ts @@ -1,7 +1,8 @@ -import Mime from "@effect/platform-node/Mime"; +import * as Mime from "effect/unstable/http/Mime"; import { githubMediaFileName } from "@t3tools/shared/githubMedia"; import * as Clock from "effect/Clock"; import * as Effect from "effect/Effect"; +import * as Option from "effect/Option"; import * as Redacted from "effect/Redacted"; import { FetchHttpClient, @@ -176,7 +177,7 @@ export const githubMediaResponse = Effect.fn("GitHubMediaFetch.githubMediaRespon response.headers["content-type"]?.split(";", 1)[0]?.trim().toLowerCase() ?? ""; const contentType = MEDIA_CONTENT_TYPE_PATTERN.test(upstreamType) ? upstreamType - : (Mime.getType(githubMediaFileName(asset.url))?.toLowerCase() ?? ""); + : Option.getOrElse(Mime.getType(githubMediaFileName(asset.url)), () => "").toLowerCase(); if (!MEDIA_CONTENT_TYPE_PATTERN.test(contentType)) { return HttpServerResponse.empty({ status: 415, headers }); } diff --git a/apps/server/src/bin.ts b/apps/server/src/bin.ts index 1ec78ff2e173e98bc90d2d6bf85aa6290f692167..0538b94fcde93c8ce865a1cada582af0db381f9e 100644 --- a/apps/server/src/bin.ts +++ b/apps/server/src/bin.ts @@ -38,7 +38,7 @@ class ConnectPublicConfigMissingError extends CliError.UserError { } const connectUnavailableCommand = Command.make("connect", { - command: Argument.string("command").pipe(Argument.variadic), + command: Argument.String("command").pipe(Argument.variadic), }).pipe( Command.withDescription("T3 Connect is unavailable in builds without public configuration."), Command.unlisted, diff --git a/apps/server/src/cli/app.ts b/apps/server/src/cli/app.ts index 3fc6deedb0ced2071251af386528ad8febe605df..83696e0c9e21f4b40b034e067ff24f6ff01a568a 100644 --- a/apps/server/src/cli/app.ts +++ b/apps/server/src/cli/app.ts @@ -178,9 +178,9 @@ function sendDesktopAppActivationRequest(input: { } const appEnvironment = Config.all({ - t3Home: Config.string("T3CODE_HOME").pipe(Config.option, Config.map(Option.getOrUndefined)), - sshConnection: Config.string("SSH_CONNECTION").pipe(Config.option), - sshTty: Config.string("SSH_TTY").pipe(Config.option), + t3Home: Config.String("T3CODE_HOME").pipe(Config.option, Config.map(Option.getOrUndefined)), + sshConnection: Config.String("SSH_CONNECTION").pipe(Config.option), + sshTty: Config.String("SSH_TTY").pipe(Config.option), }); const runAppCommand = Effect.fn("cli.app")(function* (flags: { @@ -251,7 +251,7 @@ const runAppCommand = Effect.fn("cli.app")(function* (flags: { export const appCommand = Command.make("app", { baseDir: baseDirFlag, - workspaceRoot: Argument.string("path").pipe( + workspaceRoot: Argument.String("path").pipe( Argument.withDescription("Project directory. Default: current directory."), Argument.optional, ), diff --git a/apps/server/src/cli/auth.ts b/apps/server/src/cli/auth.ts index 1b349111811ccc7604b1fdfbbf2716f5818be683..f37c65eac9edf05f05bb4a4f4bac5df0e8d1b05e 100644 --- a/apps/server/src/cli/auth.ts +++ b/apps/server/src/cli/auth.ts @@ -50,33 +50,33 @@ const runWithEnvironmentAuth = ( ); }); -const ttlFlag = Flag.string("ttl").pipe( +const ttlFlag = Flag.String("ttl").pipe( Flag.withSchema(DurationFromString), Flag.withDescription("TTL, for example `5m`, `1h`, `30d`, or `15 minutes`."), Flag.optional, ); -const jsonFlag = Flag.boolean("json").pipe( +const jsonFlag = Flag.Boolean("json").pipe( Flag.withDescription("Emit JSON instead of human-readable output."), Flag.withDefault(false), ); -const labelFlag = Flag.string("label").pipe( +const labelFlag = Flag.String("label").pipe( Flag.withDescription("Optional human-readable label."), Flag.optional, ); -const subjectFlag = Flag.string("subject").pipe( +const subjectFlag = Flag.String("subject").pipe( Flag.withDescription("Optional session subject."), Flag.optional, ); -const baseUrlFlag = Flag.string("base-url").pipe( +const baseUrlFlag = Flag.String("base-url").pipe( Flag.withDescription("Optional public base URL used to print a ready `/pair#token=...` link."), Flag.optional, ); -const tokenOnlyFlag = Flag.boolean("token-only").pipe( +const tokenOnlyFlag = Flag.Boolean("token-only").pipe( Flag.withDescription("Print only the issued bearer token."), Flag.withDefault(false), ); @@ -137,7 +137,7 @@ const pairingListCommand = Command.make("list", { const pairingRevokeCommand = Command.make("revoke", { ...authLocationFlags, - id: Argument.string("id").pipe(Argument.withDescription("Pairing credential id to revoke.")), + id: Argument.String("id").pipe(Argument.withDescription("Pairing credential id to revoke.")), }).pipe( Command.withDescription("Revoke an active client pairing token."), Command.withHandler((flags) => @@ -215,7 +215,7 @@ const sessionListCommand = Command.make("list", { const sessionRevokeCommand = Command.make("revoke", { ...authLocationFlags, - sessionId: Argument.string("session-id").pipe( + sessionId: Argument.String("session-id").pipe( Argument.withDescription("Session id to revoke."), Argument.withSchema(AuthSessionId), ), diff --git a/apps/server/src/cli/claudeHistory.ts b/apps/server/src/cli/claudeHistory.ts index 81bef135970347831476405b42e61f992ad92758..30660223c5f6a4d86c52c0721021e0b29cf94d9d 100644 --- a/apps/server/src/cli/claudeHistory.ts +++ b/apps/server/src/cli/claudeHistory.ts @@ -10,9 +10,9 @@ import { runClaudeHistoryWorker } from "../claudeHistoryWorker.ts"; * this hidden subcommand on its own executable instead. */ export const claudeHistoryCommand = Command.make("__claude-history", { - method: Argument.string("method"), - sessionId: Argument.string("session-id"), - options: Argument.string("options").pipe(Argument.optional), + method: Argument.String("method"), + sessionId: Argument.String("session-id"), + options: Argument.String("options").pipe(Argument.optional), }).pipe( Command.unlisted, Command.withHandler(({ method, sessionId, options }) => diff --git a/apps/server/src/cli/config.ts b/apps/server/src/cli/config.ts index e0ba4e190f139cdedeb61cf5aab33359187877d5..6db6abbcc8a1a4a5c2dec09d96b246c9da859e67 100644 --- a/apps/server/src/cli/config.ts +++ b/apps/server/src/cli/config.ts @@ -19,87 +19,87 @@ import { readBootstrapEnvelope } from "../bootstrap.ts"; import * as ServerConfig from "../config.ts"; import { expandHomePath, resolveBaseDir } from "../os-jank.ts"; -const modeFlag = Flag.choice("mode", ServerConfig.RuntimeMode.literals).pipe( +const modeFlag = Flag.Literals("mode", ServerConfig.RuntimeMode.literals).pipe( Flag.withDescription("Runtime mode. `desktop` keeps loopback defaults unless overridden."), Flag.optional, ); -const portFlag = Flag.integer("port").pipe( +const portFlag = Flag.Int("port").pipe( Flag.withSchema(PortSchema), Flag.withDescription("Port for the HTTP/WebSocket server."), Flag.optional, ); -const hostFlag = Flag.string("host").pipe( +const hostFlag = Flag.String("host").pipe( Flag.withDescription("Host/interface to bind (for example 127.0.0.1, 0.0.0.0, or a Tailnet IP)."), Flag.optional, ); -export const baseDirFlag = Flag.string("base-dir").pipe( +export const baseDirFlag = Flag.String("base-dir").pipe( Flag.withDescription( "Explicit T3 Code data directory; runtime state is stored under userdata (equivalent to T3CODE_HOME).", ), Flag.optional, ); -const devUrlFlag = Flag.string("dev-url").pipe( +const devUrlFlag = Flag.String("dev-url").pipe( Flag.withSchema(Schema.URLFromString), Flag.withDescription("Dev web URL to proxy/redirect to (equivalent to VITE_DEV_SERVER_URL)."), Flag.optional, ); -const noBrowserFlag = Flag.boolean("no-browser").pipe( +const noBrowserFlag = Flag.Boolean("no-browser").pipe( Flag.withDescription("Disable automatic browser opening."), Flag.optional, ); -const bootstrapFdFlag = Flag.integer("bootstrap-fd").pipe( +const bootstrapFdFlag = Flag.Int("bootstrap-fd").pipe( Flag.withSchema(Schema.Int), Flag.withDescription("Read one-time bootstrap secrets from the given file descriptor."), Flag.optional, ); -const autoBootstrapProjectFromCwdFlag = Flag.boolean("auto-bootstrap-project-from-cwd").pipe( +const autoBootstrapProjectFromCwdFlag = Flag.Boolean("auto-bootstrap-project-from-cwd").pipe( Flag.withDescription( "Create a project for the current working directory on startup when missing.", ), Flag.optional, ); -const logWebSocketEventsFlag = Flag.boolean("log-websocket-events").pipe( +const logWebSocketEventsFlag = Flag.Boolean("log-websocket-events").pipe( Flag.withDescription( "Emit server-side logs for outbound WebSocket push traffic (equivalent to T3CODE_LOG_WS_EVENTS).", ), Flag.withAlias("log-ws-events"), Flag.optional, ); -const tailscaleServeFlag = Flag.boolean("tailscale-serve").pipe( +const tailscaleServeFlag = Flag.Boolean("tailscale-serve").pipe( Flag.withDescription( "Configure Tailscale Serve to expose this backend over HTTPS on the Tailnet.", ), Flag.optional, ); -const tailscaleServePortFlag = Flag.integer("tailscale-serve-port").pipe( +const tailscaleServePortFlag = Flag.Int("tailscale-serve-port").pipe( Flag.withSchema(PortSchema), Flag.withDescription("HTTPS port for Tailscale Serve when --tailscale-serve is enabled."), Flag.optional, ); const EnvServerConfig = Config.all({ - logLevel: Config.logLevel("T3CODE_LOG_LEVEL").pipe(Config.withDefault("Info")), - traceMinLevel: Config.logLevel("T3CODE_TRACE_MIN_LEVEL").pipe(Config.withDefault("Info")), - traceTimingEnabled: Config.boolean("T3CODE_TRACE_TIMING_ENABLED").pipe(Config.withDefault(true)), - traceFile: Config.string("T3CODE_TRACE_FILE").pipe( + logLevel: Config.LogLevel("T3CODE_LOG_LEVEL").pipe(Config.withDefault("Info")), + traceMinLevel: Config.LogLevel("T3CODE_TRACE_MIN_LEVEL").pipe(Config.withDefault("Info")), + traceTimingEnabled: Config.Boolean("T3CODE_TRACE_TIMING_ENABLED").pipe(Config.withDefault(true)), + traceFile: Config.String("T3CODE_TRACE_FILE").pipe( Config.option, Config.map(Option.getOrUndefined), ), - traceMaxBytes: Config.int("T3CODE_TRACE_MAX_BYTES").pipe(Config.withDefault(10 * 1024 * 1024)), - traceMaxFiles: Config.int("T3CODE_TRACE_MAX_FILES").pipe(Config.withDefault(10)), - traceBatchWindowMs: Config.int("T3CODE_TRACE_BATCH_WINDOW_MS").pipe(Config.withDefault(1_000)), - otlpTracesUrl: Config.string("T3CODE_OTLP_TRACES_URL").pipe( + traceMaxBytes: Config.Int("T3CODE_TRACE_MAX_BYTES").pipe(Config.withDefault(10 * 1024 * 1024)), + traceMaxFiles: Config.Int("T3CODE_TRACE_MAX_FILES").pipe(Config.withDefault(10)), + traceBatchWindowMs: Config.Int("T3CODE_TRACE_BATCH_WINDOW_MS").pipe(Config.withDefault(1_000)), + otlpTracesUrl: Config.String("T3CODE_OTLP_TRACES_URL").pipe( Config.option, Config.map(Option.getOrUndefined), ), - otlpMetricsUrl: Config.string("T3CODE_OTLP_METRICS_URL").pipe( + otlpMetricsUrl: Config.String("T3CODE_OTLP_METRICS_URL").pipe( Config.option, Config.map(Option.getOrUndefined), ), - otlpExportIntervalMs: Config.int("T3CODE_OTLP_EXPORT_INTERVAL_MS").pipe( + otlpExportIntervalMs: Config.Int("T3CODE_OTLP_EXPORT_INTERVAL_MS").pipe( Config.withDefault(10_000), ), - otlpServiceName: Config.string("T3CODE_OTLP_SERVICE_NAME").pipe(Config.withDefault("t3-server")), + otlpServiceName: Config.String("T3CODE_OTLP_SERVICE_NAME").pipe(Config.withDefault("t3-server")), otlpHeaders: Config.schema(OtlpHeadersFromString, "T3CODE_OTLP_HEADERS").pipe( Config.option, Config.map(Option.getOrUndefined), @@ -111,11 +111,11 @@ const EnvServerConfig = Config.all({ Config.option, Config.map(Option.getOrUndefined), ), - port: Config.port("T3CODE_PORT").pipe(Config.option, Config.map(Option.getOrUndefined)), - host: Config.string("T3CODE_HOST").pipe(Config.option, Config.map(Option.getOrUndefined)), - t3Home: Config.string("T3CODE_HOME").pipe(Config.option, Config.map(Option.getOrUndefined)), - devUrl: Config.url("VITE_DEV_SERVER_URL").pipe(Config.option, Config.map(Option.getOrUndefined)), - devAllowedOrigins: Config.string("T3CODE_DEV_ALLOWED_ORIGINS").pipe( + port: Config.Port("T3CODE_PORT").pipe(Config.option, Config.map(Option.getOrUndefined)), + host: Config.String("T3CODE_HOST").pipe(Config.option, Config.map(Option.getOrUndefined)), + t3Home: Config.String("T3CODE_HOME").pipe(Config.option, Config.map(Option.getOrUndefined)), + devUrl: Config.URL("VITE_DEV_SERVER_URL").pipe(Config.option, Config.map(Option.getOrUndefined)), + devAllowedOrigins: Config.String("T3CODE_DEV_ALLOWED_ORIGINS").pipe( Config.withDefault(""), Config.map((value) => value @@ -124,35 +124,35 @@ const EnvServerConfig = Config.all({ .filter((entry) => entry.length > 0), ), ), - noBrowser: Config.boolean("T3CODE_NO_BROWSER").pipe( + noBrowser: Config.Boolean("T3CODE_NO_BROWSER").pipe( Config.option, Config.map(Option.getOrUndefined), ), - bootstrapFd: Config.int("T3CODE_BOOTSTRAP_FD").pipe( + bootstrapFd: Config.Int("T3CODE_BOOTSTRAP_FD").pipe( Config.option, Config.map(Option.getOrUndefined), ), - autoBootstrapProjectFromCwd: Config.boolean("T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD").pipe( + autoBootstrapProjectFromCwd: Config.Boolean("T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD").pipe( Config.option, Config.map(Option.getOrUndefined), ), - logWebSocketEvents: Config.boolean("T3CODE_LOG_WS_EVENTS").pipe( + logWebSocketEvents: Config.Boolean("T3CODE_LOG_WS_EVENTS").pipe( Config.option, Config.map(Option.getOrUndefined), ), - tailscaleServeEnabled: Config.boolean("T3CODE_TAILSCALE_SERVE").pipe( + tailscaleServeEnabled: Config.Boolean("T3CODE_TAILSCALE_SERVE").pipe( Config.option, Config.map(Option.getOrUndefined), ), - tailscaleServePort: Config.port("T3CODE_TAILSCALE_SERVE_PORT").pipe( + tailscaleServePort: Config.Port("T3CODE_TAILSCALE_SERVE_PORT").pipe( Config.option, Config.map(Option.getOrUndefined), ), }); -const DevAuthTokenConfig = Config.redacted("T3CODE_DEV_AUTH_TOKEN").pipe( +const DevAuthTokenConfig = Config.Redacted("T3CODE_DEV_AUTH_TOKEN").pipe( Config.map((token) => Redacted.make(Redacted.value(token).trim())), - Config.mapOrFail((token) => + Config.mapEffect((token) => Redacted.value(token).length === 0 || Redacted.value(token).length >= 32 ? Effect.succeed(token) : Effect.fail( @@ -204,7 +204,7 @@ export const sharedServerCommandFlags = { port: portFlag, host: hostFlag, baseDir: baseDirFlag, - cwd: Argument.string("cwd").pipe( + cwd: Argument.String("cwd").pipe( Argument.withDescription( "Working directory for provider sessions (defaults to the current directory).", ), @@ -491,7 +491,7 @@ const parseDurationInput = (value: string): Duration.Duration | null => { export const DurationFromString = Schema.String.pipe( Schema.decodeTo( Schema.Duration, - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (value) => { const duration = parseDurationInput(value); if (duration !== null) { diff --git a/apps/server/src/cli/connect.ts b/apps/server/src/cli/connect.ts index e05913eb94ece468287d00c106907ad5266efe01..3427941bedebdbe1427de262db518ec341a96e60 100644 --- a/apps/server/src/cli/connect.ts +++ b/apps/server/src/cli/connect.ts @@ -55,14 +55,14 @@ import { recoverServiceOnboardingOffer, } from "./service.ts"; -const jsonFlag = Flag.boolean("json").pipe( +const jsonFlag = Flag.Boolean("json").pipe( Flag.withDescription("Emit JSON instead of human-readable output."), Flag.withDefault(false), ); const isCloudCliTokenManagerError = Schema.is(CliTokenManager.CloudCliTokenManagerError); -const headlessFlag = Flag.boolean("headless").pipe( +const headlessFlag = Flag.Boolean("headless").pipe( Flag.withDescription("Authorize without a local browser using the OAuth device flow."), Flag.withDefault(false), ); @@ -73,8 +73,8 @@ const headlessFlag = Flag.boolean("headless").pipe( * can work. */ export const headlessSessionConfig = Config.all({ - sshConnection: Config.string("SSH_CONNECTION").pipe(Config.option), - sshTty: Config.string("SSH_TTY").pipe(Config.option), + sshConnection: Config.String("SSH_CONNECTION").pipe(Config.option), + sshTty: Config.String("SSH_TTY").pipe(Config.option), }).pipe( Config.map(({ sshConnection, sshTty }) => Option.isSome(sshConnection) || Option.isSome(sshTty)), ); @@ -214,7 +214,7 @@ const CLOUD_CLI_LIVE_SERVER_TIMEOUT = Duration.seconds(5); const confirmRelayClientInstall = (version: string) => Prompt.run( - Prompt.confirm({ + Prompt.Confirm({ message: `The T3 relay client is required for T3 Connect. Download and install version ${version}?`, initial: false, }), @@ -511,7 +511,7 @@ const connectLoginCommand = Command.make("login", { const connectLinkCommand = Command.make("link", { ...projectLocationFlags, headless: headlessFlag, - publishOnly: Flag.boolean("publish-only").pipe( + publishOnly: Flag.Boolean("publish-only").pipe( Flag.withDescription( "Link to publish agent activity only — no managed tunnel. Reach this environment out of band (e.g. Tailscale).", ), @@ -584,7 +584,7 @@ const connectStatusCommand = Command.make("status", { const connectPublishCommand = Command.make("publish", { ...projectLocationFlags, - disable: Flag.boolean("disable").pipe( + disable: Flag.Boolean("disable").pipe( Flag.withDescription("Stop publishing agent activity to your mobile clients."), Flag.withDefault(false), ), diff --git a/apps/server/src/cli/pair.ts b/apps/server/src/cli/pair.ts index 07a4d5fe7896564229da032d22870411fd62913a..94c88b29477060198d07b1799cf679ade9787be6 100644 --- a/apps/server/src/cli/pair.ts +++ b/apps/server/src/cli/pair.ts @@ -251,7 +251,7 @@ const discoverPairTarget = Effect.fn("pair.discoverPairTarget")(function* ( if (worktreeHome !== undefined) { bases.push(worktreeHome); } - const envHome = yield* Config.string("T3CODE_HOME").pipe(Config.option); + const envHome = yield* Config.String("T3CODE_HOME").pipe(Config.option); bases.push(yield* resolveBaseDir(Option.getOrUndefined(envHome))); } @@ -447,7 +447,7 @@ const mintPairingLink = Effect.fn("pair.mintPairingLink")(function* (input: { ); }); -const ttlFlag = Flag.string("ttl").pipe( +const ttlFlag = Flag.String("ttl").pipe( Flag.withSchema(DurationFromString), Flag.withDescription( "Token TTL, for example `5m`, `1h`, or `15 minutes`. Defaults to 5 minutes.", @@ -455,19 +455,19 @@ const ttlFlag = Flag.string("ttl").pipe( Flag.optional, ); -const labelFlag = Flag.string("label").pipe( +const labelFlag = Flag.String("label").pipe( Flag.withDescription("Optional label shown in the server's connections list."), Flag.optional, ); -const tailscaleFlag = Flag.boolean("tailscale").pipe( +const tailscaleFlag = Flag.Boolean("tailscale").pipe( Flag.withDescription( "Publish the server over Tailscale Serve HTTPS and pair through the tailnet URL.", ), Flag.withDefault(false), ); -const tailscaleServePortFlag = Flag.integer("tailscale-serve-port").pipe( +const tailscaleServePortFlag = Flag.Int("tailscale-serve-port").pipe( Flag.withSchema(PortSchema), Flag.withDescription("HTTPS port for Tailscale Serve when --tailscale is enabled."), Flag.withDefault(DEFAULT_TAILSCALE_SERVE_PORT), diff --git a/apps/server/src/cli/project.ts b/apps/server/src/cli/project.ts index 86f8a15418d173aeca21710c075fd3ffb2601fe4..cef4dc879073da942550c72c5346b053d28ba7ff 100644 --- a/apps/server/src/cli/project.ts +++ b/apps/server/src/cli/project.ts @@ -442,10 +442,10 @@ const runProjectMutation = Effect.fn("runProjectMutation")(function* ( const projectAddCommand = Command.make("add", { ...projectLocationFlags, - workspaceRoot: Argument.string("path").pipe( + workspaceRoot: Argument.String("path").pipe( Argument.withDescription("Workspace root to add as a project."), ), - title: Flag.string("title").pipe(Flag.withDescription("Optional project title."), Flag.optional), + title: Flag.String("title").pipe(Flag.withDescription("Optional project title."), Flag.optional), }).pipe( Command.withDescription("Add a project."), Command.withHandler((flags) => @@ -490,10 +490,10 @@ const projectAddCommand = Command.make("add", { const projectRemoveCommand = Command.make("remove", { ...projectLocationFlags, - project: Argument.string("project").pipe( + project: Argument.String("project").pipe( Argument.withDescription("Project id or workspace root to remove."), ), - force: Flag.boolean("force").pipe( + force: Flag.Boolean("force").pipe( Flag.withDescription("Delete the project and all of its threads."), Flag.withDefault(false), ), @@ -529,10 +529,10 @@ const projectRemoveCommand = Command.make("remove", { const projectRenameCommand = Command.make("rename", { ...projectLocationFlags, - project: Argument.string("project").pipe( + project: Argument.String("project").pipe( Argument.withDescription("Project id or workspace root to rename."), ), - title: Argument.string("title").pipe(Argument.withDescription("New project title.")), + title: Argument.String("title").pipe(Argument.withDescription("New project title.")), }).pipe( Command.withDescription("Rename a project."), Command.withHandler((flags) => diff --git a/apps/server/src/cli/service.ts b/apps/server/src/cli/service.ts index 580938de69d0ba7ac32b8f95eb0be5854fd5a02c..692bf4f3a0997184b4acec32aae4b1fee8724ac8 100644 --- a/apps/server/src/cli/service.ts +++ b/apps/server/src/cli/service.ts @@ -112,7 +112,7 @@ const runServiceCommand = Effect.fn("cli.service.run")(function* ( const serviceReconcileFlags = { ...projectLocationFlags, - allowDowngrade: Flag.boolean("allow-downgrade").pipe( + allowDowngrade: Flag.Boolean("allow-downgrade").pipe( Flag.withDescription("Allow replacing a newer installed service with this older CLI version."), Flag.withDefault(false), ), @@ -243,7 +243,7 @@ export const offerServiceDuringOnboarding = Effect.gen(function* () { // enable-linger equivalent on macOS. Do not promise more than that. const platform = yield* HostProcessPlatform; const wanted = yield* Prompt.run( - Prompt.confirm({ + Prompt.Confirm({ message: installed ? "The installed T3 Code service needs an update or repair. Update it now?" : platform === "darwin" diff --git a/apps/server/src/cli/servicePreflight.ts b/apps/server/src/cli/servicePreflight.ts index c31d84ecf81686ab06968d730cf108a6e0733021..94aea99091e03e621d461c5751edb15e9d557fcd 100644 --- a/apps/server/src/cli/servicePreflight.ts +++ b/apps/server/src/cli/servicePreflight.ts @@ -5,8 +5,8 @@ import { Command, Flag } from "effect/unstable/cli"; import { runServicePreflight } from "../cloud/servicePreflight.ts"; export const servicePreflightCommand = Command.make("__service-preflight", { - databasePath: Flag.string("database-path"), - launcherProtocol: Flag.integer("launcher-protocol"), + databasePath: Flag.String("database-path"), + launcherProtocol: Flag.Int("launcher-protocol"), }).pipe( Command.unlisted, Command.withHandler(({ databasePath, launcherProtocol }) => diff --git a/apps/server/src/cli/sshHelper.ts b/apps/server/src/cli/sshHelper.ts index 55428538bd8dd86bfe8ff1ab8e7e2e907b23511e..58d88fed34a395fa059850884c7a0f2c3f5b933b 100644 --- a/apps/server/src/cli/sshHelper.ts +++ b/apps/server/src/cli/sshHelper.ts @@ -30,9 +30,9 @@ const tryPort = (port: number) => /** Prints the first free loopback port from the preferred one, scanning `window` ports. */ const pickPort = Command.make("pick-port", { - portFile: Argument.string("port-file"), - defaultPort: Argument.integer("default-port"), - scanWindow: Argument.integer("scan-window"), + portFile: Argument.String("port-file"), + defaultPort: Argument.Int("default-port"), + scanWindow: Argument.Int("scan-window"), }).pipe( Command.withHandler(({ portFile, defaultPort, scanWindow }) => Effect.promise(async () => { @@ -71,9 +71,9 @@ const probe = (port: number, probeTimeoutMs: number) => /** Exits 0 once the loopback server answers, 1 when the deadline passes first. */ const waitReady = Command.make("wait-ready", { - port: Argument.integer("port"), - timeoutMs: Argument.integer("timeout-ms"), - probeTimeoutMs: Argument.integer("probe-timeout-ms"), + port: Argument.Int("port"), + timeoutMs: Argument.Int("timeout-ms"), + probeTimeoutMs: Argument.Int("probe-timeout-ms"), }).pipe( Command.withHandler(({ port, timeoutMs, probeTimeoutMs }) => Effect.promise(async () => { @@ -89,7 +89,7 @@ const waitReady = Command.make("wait-ready", { /** Prints ` ` for a live default-home server, or exits 1. */ const runtimePort = Command.make("runtime-port", { - runtimeFile: Argument.string("runtime-file"), + runtimeFile: Argument.String("runtime-file"), }).pipe( Command.withHandler(({ runtimeFile }) => Effect.sync(() => { diff --git a/apps/server/src/cli/theme.ts b/apps/server/src/cli/theme.ts index ca1181d85bbaf272f88b9d82cf4eff552d92603f..26a0c337fb27ba248ef3478bede69c0f1d4d95f8 100644 --- a/apps/server/src/cli/theme.ts +++ b/apps/server/src/cli/theme.ts @@ -178,7 +178,7 @@ export class ThemeTargetMissingError extends Schema.TaggedError) { // Same precedence as the rest of the CLI: --base-dir, then T3CODE_HOME, @@ -463,11 +463,11 @@ const resolvableThemeIds = Effect.fn(function* (themesDir: string) { const themeSetCommand = Command.make("set", { baseDir: baseDirFlag, - id: Flag.string("id").pipe( + id: Flag.String("id").pipe( Flag.withDescription("Theme id to publish a file under, instead of its filename."), Flag.optional, ), - theme: Argument.string("theme").pipe( + theme: Argument.String("theme").pipe( Argument.withDescription( 'A theme id (a built-in, or one this machine publishes — themes/nightfall.json is "nightfall"), or a path to a theme JSON file to publish and set in one step.', ), diff --git a/apps/server/src/cli/triage.ts b/apps/server/src/cli/triage.ts index 7a468c5e13f7676ce830466a35f27ab822e2bcaf..c621d331c404081f7940653501791f8d030fd76f 100644 --- a/apps/server/src/cli/triage.ts +++ b/apps/server/src/cli/triage.ts @@ -142,12 +142,12 @@ const runInteractiveSession = (input: { child.once("exit", (code, signal) => resume(Effect.succeed(code ?? (signal === null ? 0 : 1)))); }); -const agentFlag = Flag.choice("agent", ["claude", "codex"]).pipe( +const agentFlag = Flag.Literals("agent", ["claude", "codex"]).pipe( Flag.withDescription("Agent CLI to use. Default: ask when both are installed."), Flag.optional, ); -const modelFlag = Flag.string("model").pipe( +const modelFlag = Flag.String("model").pipe( Flag.withDescription("Model passed through to the agent CLI. Default: the agent's default."), Flag.optional, ); @@ -169,7 +169,7 @@ export const triageCommand = Command.make("triage", { // --base-dir wins; T3CODE_HOME is its documented env equivalent (same // precedence as `t3 pair`). const explicitBaseDir = Option.getOrUndefined(flags.baseDir); - const envHome = yield* Config.string("T3CODE_HOME").pipe(Config.option); + const envHome = yield* Config.String("T3CODE_HOME").pipe(Config.option); const baseDir = yield* resolveBaseDir(explicitBaseDir ?? Option.getOrUndefined(envHome)); const paths = yield* ServerConfig.deriveServerPaths(baseDir, undefined, {}); diff --git a/apps/server/src/cli/uninstall.ts b/apps/server/src/cli/uninstall.ts index 655f02b8c815e3d07487ce0c5da245c78bb86969..a59d22ffd3b98096c3e1e7b1a9903fef252060f1 100644 --- a/apps/server/src/cli/uninstall.ts +++ b/apps/server/src/cli/uninstall.ts @@ -101,7 +101,7 @@ const planUninstall = Effect.fn("cli.uninstall.plan")(function* (input: { export const uninstallCommand = Command.make("uninstall", { ...projectLocationFlags, - yes: Flag.boolean("yes").pipe( + yes: Flag.Boolean("yes").pipe( Flag.withAlias("y"), Flag.withDescription( "Remove everything without asking. Required from a script, where there is no prompt.", @@ -161,7 +161,7 @@ const runUninstall = Effect.fn("cli.uninstall.run")(function* (input: { }); } const confirmed = yield* Prompt.run( - Prompt.confirm({ message: "Remove t3 from this machine?", initial: false }), + Prompt.Confirm({ message: "Remove t3 from this machine?", initial: false }), ).pipe(Effect.catchTag("QuitError", () => Effect.succeed(false))); if (!confirmed) { yield* Console.log("Left as is."); diff --git a/apps/server/src/cli/update.ts b/apps/server/src/cli/update.ts index 31ecebca378c7a497163b13272e0bffcfe827478..5a67ba267965b500bb12e8fdb109bd6b224d2214 100644 --- a/apps/server/src/cli/update.ts +++ b/apps/server/src/cli/update.ts @@ -225,17 +225,17 @@ export const findWindowsShim = Effect.fn("cli.update.find_windows_shim")(functio const updateFlags = { ...projectLocationFlags, - channel: Flag.choice("channel", CLI_RELEASE_CHANNELS).pipe( + channel: Flag.Literals("channel", CLI_RELEASE_CHANNELS).pipe( Flag.withDescription( "Release channel to follow. Defaults to the channel this t3 was published on.", ), Flag.optional, ), - allowDowngrade: Flag.boolean("allow-downgrade").pipe( + allowDowngrade: Flag.Boolean("allow-downgrade").pipe( Flag.withDescription("Allow moving to an older version than the one running."), Flag.withDefault(false), ), - yes: Flag.boolean("yes").pipe( + yes: Flag.Boolean("yes").pipe( Flag.withAlias("y"), Flag.withDescription( "Restart the background service without asking. Required to restart it from a script, where there is no prompt.", @@ -244,7 +244,7 @@ const updateFlags = { ), }; -const versionArgument = Argument.string("version").pipe( +const versionArgument = Argument.String("version").pipe( Argument.withDescription( "Exact version to install. Defaults to the newest release on the channel.", ), @@ -388,7 +388,7 @@ const runUpdate = Effect.fn("cli.update.run")(function* (input: { }); } const confirmed = yield* Prompt.run( - Prompt.confirm({ message: "Install the preview build anyway?", initial: false }), + Prompt.Confirm({ message: "Install the preview build anyway?", initial: false }), ).pipe(Effect.catchTag("QuitError", () => Effect.succeed(false))); if (!confirmed) { yield* Console.log("Left as is."); @@ -474,7 +474,7 @@ const runUpdate = Effect.fn("cli.update.run")(function* (input: { restartService = true; } else if (process.stdin.isTTY && process.stdout.isTTY) { restartService = yield* Prompt.run( - Prompt.confirm({ + Prompt.Confirm({ message: "Restart the background service once the download is verified?", initial: true, }), diff --git a/apps/server/src/cloud/bootService.ts b/apps/server/src/cloud/bootService.ts index 24495c4c2e8eb2684e198e126e0c517387f08ce1..0a57ed822af44a845ebfc9a5595995ad865c2c49 100644 --- a/apps/server/src/cloud/bootService.ts +++ b/apps/server/src/cloud/bootService.ts @@ -562,10 +562,10 @@ export const make = Effect.fn("cloud.boot_service.make")(function* (input: { const uid = yield* HostProcessUserId; const httpClient = yield* HttpClient.HttpClient; const releaseBaseUrl = Option.getOrUndefined( - yield* Config.string(CLI_RELEASE_BASE_URL_ENV).pipe(Config.option), + yield* Config.String(CLI_RELEASE_BASE_URL_ENV).pipe(Config.option), ); - const homeDir = yield* Config.string("HOME").pipe(Config.withDefault("")); - const installerPath = yield* Config.string("PATH").pipe(Config.withDefault("")); + const homeDir = yield* Config.String("HOME").pipe(Config.withDefault("")); + const installerPath = yield* Config.String("PATH").pipe(Config.withDefault("")); const fs = yield* FileSystem.FileSystem; const path = yield* Path.Path; const runner = yield* ProcessRunner.ProcessRunner; diff --git a/apps/server/src/cloud/publicConfig.ts b/apps/server/src/cloud/publicConfig.ts index 6fcffdf8f5e640bd78aa6f8e2cebf5a49e06712d..903f4a88a1e07ee3ef86e04a4e5758faf87ed98b 100644 --- a/apps/server/src/cloud/publicConfig.ts +++ b/apps/server/src/cloud/publicConfig.ts @@ -96,9 +96,9 @@ export function resolveRelayClientTracingConfig( } export function makeRelayUrlConfig(fallback = buildTimeRelayUrl) { - const runtimeConfig = Config.nonEmptyString("T3CODE_RELAY_URL"); + const runtimeConfig = Config.NonEmptyString("T3CODE_RELAY_URL"); return (fallback ? runtimeConfig.pipe(Config.withDefault(fallback)) : runtimeConfig).pipe( - Config.mapOrFail(validateRelayUrl), + Config.mapEffect(validateRelayUrl), ); } @@ -112,7 +112,7 @@ export const relayUrlConfig = makeRelayUrlConfig(); export const hostedAppUrlConfig = makePublicValueConfig( "T3CODE_HOSTED_APP_URL", DEFAULT_HOSTED_APP_URL, -).pipe(Config.mapOrFail(validateHostedAppUrl)); +).pipe(Config.mapEffect(validateHostedAppUrl)); function validateHostedAppUrl(value: string) { try { @@ -143,7 +143,7 @@ function validateHostedAppUrl(value: string) { } function makePublicValueConfig(name: string, fallback: string) { - const runtimeConfig = Config.nonEmptyString(name); + const runtimeConfig = Config.NonEmptyString(name); return (fallback ? runtimeConfig.pipe(Config.withDefault(fallback)) : runtimeConfig).pipe( Config.map((value) => value.trim()), ); @@ -182,7 +182,7 @@ export function makeCloudCliOAuthConfig({ clerkCliOAuthClientIdFallback, ), }).pipe( - Config.mapOrFail(({ clerkPublishableKey, clientId }) => + Config.mapEffect(({ clerkPublishableKey, clientId }) => Effect.try({ try: () => clerkFrontendApiUrlFromPublishableKey(clerkPublishableKey), catch: (cause) => diff --git a/apps/server/src/cloud/selfUpdate.ts b/apps/server/src/cloud/selfUpdate.ts index a388f8a0b4d73199496af8e6ef2b27600b4eb337..6a6d3d92d5b1f34d88b6ba28de9cddfc95b0d5d1 100644 --- a/apps/server/src/cloud/selfUpdate.ts +++ b/apps/server/src/cloud/selfUpdate.ts @@ -182,7 +182,7 @@ export const make = Effect.fn("cloud.server_self_update.make")(function* () { // optional so callers without one (tests, npm-only hosts) still construct. const httpClient = yield* HttpClient.HttpClient; const releaseBaseUrl = Option.getOrUndefined( - yield* Config.string(CLI_RELEASE_BASE_URL_ENV).pipe(Config.option), + yield* Config.String(CLI_RELEASE_BASE_URL_ENV).pipe(Config.option), ); const inFlight = yield* Ref.make(false); diff --git a/apps/server/src/device/DeviceHubProxy.ts b/apps/server/src/device/DeviceHubProxy.ts index d2cb618fc488c64eb9a9d4ab05a947884e6da34a..dd048480b3ddca8d2aacd1001f855a19cb76bb64 100644 --- a/apps/server/src/device/DeviceHubProxy.ts +++ b/apps/server/src/device/DeviceHubProxy.ts @@ -134,15 +134,25 @@ const proxyWebSocket = Effect.fn("DeviceHubProxy.proxyWebSocket")(function* ( Effect.gen(function* () { const writeToClient = yield* client.writer; const writeToUpstream = yield* upstream.writer; - const downstream = upstream.runRaw((data) => writeToClient(data)); - const upstreamPump = client.runRaw((data) => writeToUpstream(data)); - // Whichever side closes first ends the other via scope teardown. - yield* Effect.raceFirst(downstream, upstreamPump); + // Whichever side closes first ends the other via scope teardown: a close + // fails the pull with a SocketError, which loses the race. + return yield* Effect.raceFirst( + pumpFrames(upstream, writeToClient), + pumpFrames(client, writeToUpstream), + ); }), ).pipe(Effect.catchCause(() => Effect.void)); return HttpServerResponse.empty(); }); +const pumpFrames = (source: Socket.Socket, sink: Socket.Writer) => + Effect.gen(function* () { + const { pull } = yield* source.reader; + while (true) { + yield* sink.writeAll(yield* pull); + } + }); + const proxyHttp = Effect.fn("DeviceHubProxy.proxyHttp")(function* ( request: HttpServerRequest.HttpServerRequest, upstreamUrl: string, diff --git a/apps/server/src/git/GitManager.ts b/apps/server/src/git/GitManager.ts index 33f041fb6cd12be166efaf5e1a6663d5e52a35d9..033cc192ccfed6e13b5d30b8f66de2df1cf76675 100644 --- a/apps/server/src/git/GitManager.ts +++ b/apps/server/src/git/GitManager.ts @@ -2,6 +2,7 @@ import * as Arr from "effect/Array"; import * as Cache from "effect/Cache"; import * as Context from "effect/Context"; import * as Crypto from "effect/Crypto"; +import * as ByteSize from "effect/ByteSize"; import * as DateTime from "effect/DateTime"; import * as Duration from "effect/Duration"; import * as Effect from "effect/Effect"; @@ -707,7 +708,7 @@ export const make = Effect.gen(function* () { return ""; } const info = yield* fileSystem.stat(instructionPath); - if (info.type !== "File" || info.size > FileSystem.Size(20_000)) { + if (info.type !== "File" || info.size > ByteSize.bytes(20_000)) { return ""; } return (yield* fileSystem.readFileString(instructionPath)).trim(); diff --git a/apps/server/src/http.ts b/apps/server/src/http.ts index e5ff8961f5fa9d361314888694f2ac5b9977196f..879ca66ca60a0a9814c8778e1135a84ca7ab467c 100644 --- a/apps/server/src/http.ts +++ b/apps/server/src/http.ts @@ -1,4 +1,4 @@ -import Mime from "@effect/platform-node/Mime"; +import * as Mime from "effect/unstable/http/Mime"; import { AuthOrchestrationOperateScope, AuthOrchestrationReadScope, @@ -203,7 +203,10 @@ export const assetFileResponse = Effect.fn("assetFileResponse")(function* ( } if (mediaFile && mediaInfo) { const size = bytesToRead ?? mediaInfo.size; - headers["Content-Type"] ??= Mime.getType(asset.path) ?? "application/octet-stream"; + headers["Content-Type"] ??= Option.getOrElse( + Mime.getType(asset.path), + () => "application/octet-stream", + ); headers["Content-Length"] = String(size); if (!isMedia) { headers["Last-Modified"] = mediaInfo.mtime.toUTCString(); @@ -507,7 +510,7 @@ const streamStaticFile = (file: FileSystem.File, size: bigint) => Effect.fnUntraced(function* (offset: bigint) { if (offset >= size) return; const remaining = size - offset; - const bytes = yield* file.readAlloc(remaining < 65_536n ? remaining : 65_536n); + const bytes = yield* file.readAlloc(Number(remaining < 65_536n ? remaining : 65_536n)); if (Option.isNone(bytes)) return; return [bytes.value, offset + BigInt(bytes.value.byteLength)] as const; }), @@ -583,7 +586,7 @@ const handleStaticAndDevRequest = Effect.fn("handleStaticAndDevRequest")( } } const fileInfo = opened.info; - const mimeType = Mime.getType(filePath) ?? "application/octet-stream"; + const mimeType = Option.getOrElse(Mime.getType(filePath), () => "application/octet-stream"); const isHtml = mimeType === "text/html"; // A hash-like name is not enough: custom static files can use the same naming pattern. diff --git a/apps/server/src/imageMime.ts b/apps/server/src/imageMime.ts index 1129edfd3ef1678070ff6d755152abb1594412c6..958f004d4ac5c8c6e90042d0b15cb4274fdcf052 100644 --- a/apps/server/src/imageMime.ts +++ b/apps/server/src/imageMime.ts @@ -1,4 +1,5 @@ -import Mime from "@effect/platform-node/Mime"; +import * as Option from "effect/Option"; +import * as Mime from "effect/unstable/http/Mime"; const IMAGE_EXTENSION_BY_MIME_TYPE: Record = { "image/avif": ".avif", @@ -121,9 +122,10 @@ export function inferImageExtension(input: { mimeType: string; fileName?: string return fromMime; } - const fromMimeExtension = Mime.getExtension(input.mimeType); - if (fromMimeExtension && SAFE_IMAGE_FILE_EXTENSIONS.has(fromMimeExtension)) { - return fromMimeExtension; + // The registry returns bare extensions ("png"); the safe list is dotted. + const fromMimeExtension = Option.map(Mime.getExtension(input.mimeType), (ext) => `.${ext}`); + if (Option.isSome(fromMimeExtension) && SAFE_IMAGE_FILE_EXTENSIONS.has(fromMimeExtension.value)) { + return fromMimeExtension.value; } const fileName = input.fileName?.trim() ?? ""; diff --git a/apps/server/src/keybindings.ts b/apps/server/src/keybindings.ts index 08084a94df28a8fb33ccc68f80f43576d4009528..7a1bcd7f356a82698b49c0be2de37b46b4665ed7 100644 --- a/apps/server/src/keybindings.ts +++ b/apps/server/src/keybindings.ts @@ -61,7 +61,7 @@ export { export const ResolvedKeybindingFromConfig = KeybindingRule.pipe( Schema.decodeTo( Schema.toType(ResolvedKeybindingRule), - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (rule) => Effect.succeed(compileResolvedKeybindingRule(rule)).pipe( Effect.filterOrFail( diff --git a/apps/server/src/mcp/McpHttpServer.test.ts b/apps/server/src/mcp/McpHttpServer.test.ts index 9cbc3fde297720b8ae771ca69cec878c795e0362..15518e47a4974461333e50e58e1ecb4c71d230cb 100644 --- a/apps/server/src/mcp/McpHttpServer.test.ts +++ b/apps/server/src/mcp/McpHttpServer.test.ts @@ -681,7 +681,7 @@ it.effect("registers annotated tools and preserves authenticated request context expect(clickTool?.tool.annotations?.openWorldHint).toBe(true); expect(clickTool?.tool.outputSchema).toMatchObject({ type: "object", - additionalProperties: false, + additionalProperties: true, description: "The preview action completed successfully.", }); diff --git a/apps/server/src/mcp/McpSessionRegistry.test.ts b/apps/server/src/mcp/McpSessionRegistry.test.ts index a1e333bd07b07e0d06ce1a0aabf97def48c8f938..9fc482d366d3e44e1fc379c30589231a5c5170a9 100644 --- a/apps/server/src/mcp/McpSessionRegistry.test.ts +++ b/apps/server/src/mcp/McpSessionRegistry.test.ts @@ -3,6 +3,7 @@ import { expect, it } from "@effect/vitest"; import { EnvironmentId, ProviderInstanceId, ThreadId } from "@t3tools/contracts"; import * as Effect from "effect/Effect"; import { HttpServer } from "effect/unstable/http"; +import * as NetAddress from "effect/unstable/net/NetAddress"; import * as ServerEnvironment from "../environment/ServerEnvironment.ts"; import * as McpSessionRegistry from "./McpSessionRegistry.ts"; @@ -10,7 +11,7 @@ import * as McpSessionRegistry from "./McpSessionRegistry.ts"; const environmentId = EnvironmentId.make("environment-1"); const makeFakeHttpServer = (hostname: string, port = 43123) => HttpServer.HttpServer.of({ - address: { _tag: "TcpAddress", hostname, port }, + address: NetAddress.inetAddressFromIpStringUnsafe(hostname, port), serve: (() => Effect.void) as HttpServer.HttpServer["Service"]["serve"], }); const fakeHttpServer = makeFakeHttpServer("127.0.0.1"); @@ -89,7 +90,8 @@ it.effect("builds MCP endpoints from the bound server host", () => const cases = [ ["100.64.0.40", "http://100.64.0.40:43123/mcp"], ["0.0.0.0", "http://127.0.0.1:43123/mcp"], - ["localhost", "http://localhost:43123/mcp"], + ["::", "http://127.0.0.1:43123/mcp"], + ["::1", "http://[::1]:43123/mcp"], ["127.0.0.1", "http://127.0.0.1:43123/mcp"], ] as const; diff --git a/apps/server/src/mcp/McpSessionRegistry.ts b/apps/server/src/mcp/McpSessionRegistry.ts index 383bfbfec39087ea27d59a0eb888ba87e3568382..fa0a17d826f91fb310998a7d23fe8c9804ffd971 100644 --- a/apps/server/src/mcp/McpSessionRegistry.ts +++ b/apps/server/src/mcp/McpSessionRegistry.ts @@ -6,6 +6,7 @@ import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as SynchronizedRef from "effect/SynchronizedRef"; import { HttpServer } from "effect/unstable/http"; +import * as NetAddress from "effect/unstable/net/NetAddress"; import * as ServerEnvironment from "../environment/ServerEnvironment.ts"; import * as McpInvocationContext from "./McpInvocationContext.ts"; @@ -78,16 +79,12 @@ const bytesToHex = (bytes: Uint8Array): string => const tokenFromBytes = (bytes: Uint8Array): string => Buffer.from(bytes).toString("base64url"); -const getHttpMcpEndpointHost = (hostname: string): string => { - const normalized = hostname.toLowerCase(); - const endpointHostname = - normalized === "0.0.0.0" || normalized === "::" || normalized === "[::]" - ? "127.0.0.1" - : hostname; - return endpointHostname.includes(":") && !endpointHostname.startsWith("[") - ? `[${endpointHostname}]` - : endpointHostname; -}; +// A wildcard bind is reachable on loopback, which is where the provider +// subprocesses run; anything else is announced as the address it bound. +const getHttpMcpEndpointHost = (address: NetAddress.IpAddress): string => + NetAddress.isUnspecified(address) + ? "127.0.0.1" + : NetAddress.formatUrlHostString(NetAddress.formatIp(address)); const makeWithOptions = Effect.fn("McpSessionRegistry.make")(function* ( options: McpSessionRegistryOptions = {}, @@ -99,10 +96,9 @@ const makeWithOptions = Effect.fn("McpSessionRegistry.make")(function* ( const state = yield* SynchronizedRef.make({ records: new Map() }); const currentTimeMillis = options.now ? Effect.sync(options.now) : Clock.currentTimeMillis; const livenessWindowMs = options.livenessWindowMs ?? DEFAULT_LIVENESS_WINDOW_MS; - const endpoint = - httpServer.address._tag === "TcpAddress" - ? `http://${getHttpMcpEndpointHost(httpServer.address.hostname)}:${httpServer.address.port}/mcp` - : "http://127.0.0.1/mcp"; + const endpoint = NetAddress.isInetAddress(httpServer.address) + ? `http://${getHttpMcpEndpointHost(httpServer.address.address)}:${httpServer.address.port}/mcp` + : "http://127.0.0.1/mcp"; const hashToken = (token: string) => crypto diff --git a/apps/server/src/mcp/toolkits/preview/tools.test.ts b/apps/server/src/mcp/toolkits/preview/tools.test.ts index 3deef11f671e12d5c140be83afa4248647b0a439..0937fba72c60317857526b95575b101bf0aeb77b 100644 --- a/apps/server/src/mcp/toolkits/preview/tools.test.ts +++ b/apps/server/src/mcp/toolkits/preview/tools.test.ts @@ -65,10 +65,12 @@ it("exports exact object result schemas for preview actions", () => { "preview_wait_for", ] as const; for (const name of actionNames) { + // Effect's tool schemas follow the decoder default since rc.113 and leave + // unmodeled result keys open. expect(Tool.getJsonSchemaFromSchema(PreviewToolkit.tools[name].successSchema)).toEqual({ type: "object", properties: { toolIcon: expect.any(Object) }, - additionalProperties: false, + additionalProperties: true, description: "The preview action completed successfully.", }); } diff --git a/apps/server/src/process/externalLauncher.ts b/apps/server/src/process/externalLauncher.ts index 2b7310051b894f71bf098f89154990aa725b024e..56d729b52fbb57a790fabef0156298696e7e555e 100644 --- a/apps/server/src/process/externalLauncher.ts +++ b/apps/server/src/process/externalLauncher.ts @@ -93,22 +93,22 @@ const compactEnv = (input: Record>): NodeJS.Proces ); const BrowserLaunchEnvConfig = Config.all({ - SYSTEMROOT: Config.string("SYSTEMROOT").pipe(Config.option), - windir: Config.string("windir").pipe(Config.option), - WSL_DISTRO_NAME: Config.string("WSL_DISTRO_NAME").pipe(Config.option), - WSL_INTEROP: Config.string("WSL_INTEROP").pipe(Config.option), - SSH_CONNECTION: Config.string("SSH_CONNECTION").pipe(Config.option), - SSH_TTY: Config.string("SSH_TTY").pipe(Config.option), - container: Config.string("container").pipe(Config.option), - DISPLAY: Config.string("DISPLAY").pipe(Config.option), - WAYLAND_DISPLAY: Config.string("WAYLAND_DISPLAY").pipe(Config.option), + SYSTEMROOT: Config.String("SYSTEMROOT").pipe(Config.option), + windir: Config.String("windir").pipe(Config.option), + WSL_DISTRO_NAME: Config.String("WSL_DISTRO_NAME").pipe(Config.option), + WSL_INTEROP: Config.String("WSL_INTEROP").pipe(Config.option), + SSH_CONNECTION: Config.String("SSH_CONNECTION").pipe(Config.option), + SSH_TTY: Config.String("SSH_TTY").pipe(Config.option), + container: Config.String("container").pipe(Config.option), + DISPLAY: Config.String("DISPLAY").pipe(Config.option), + WAYLAND_DISPLAY: Config.String("WAYLAND_DISPLAY").pipe(Config.option), }).pipe(Config.map(compactEnv)); const CommandLookupEnvConfig = Config.all({ - PATH: Config.string("PATH").pipe(Config.option), - Path: Config.string("Path").pipe(Config.option), - path: Config.string("path").pipe(Config.option), - PATHEXT: Config.string("PATHEXT").pipe(Config.option), + PATH: Config.String("PATH").pipe(Config.option), + Path: Config.String("Path").pipe(Config.option), + path: Config.String("path").pipe(Config.option), + PATHEXT: Config.String("PATHEXT").pipe(Config.option), }).pipe(Config.map(compactEnv)); const readBrowserLaunchEnv = BrowserLaunchEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); diff --git a/apps/server/src/project/AgentSessionScanner.test.ts b/apps/server/src/project/AgentSessionScanner.test.ts index fd383a4074b91986785af01686a6875c08b61e73..792ef92310ff1e618ee5f3d015f70908b1d82366 100644 --- a/apps/server/src/project/AgentSessionScanner.test.ts +++ b/apps/server/src/project/AgentSessionScanner.test.ts @@ -1144,7 +1144,7 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { Effect.map((file) => ({ ...file, stat: file.stat, - readAlloc: (size: FileSystem.SizeInput) => { + readAlloc: (size: number) => { reservedBytes += Number(size); requests.push(Number(size)); return file.readAlloc(size); @@ -1712,7 +1712,7 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { : { ...file, stat: file.stat, - readAlloc: (size: FileSystem.SizeInput) => + readAlloc: (size: number) => file.readAlloc(size).pipe( Effect.tap((chunk) => Effect.sync(() => { @@ -2160,7 +2160,10 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { payload: { type: "user_message", message: "Future work" }, }), ].join("\n"), - mtimeMs: nowMs + 1, + // Node's BigInt stat (which the Effect file system now uses) floors + // sub-millisecond precision, so a one-millisecond offset can round + // back to `nowMs`; use a full second to stay clear of the clock. + mtimeMs: nowMs + 1_000, }); const outcomes = yield* runRecentThreadOutcomes({ @@ -2214,7 +2217,7 @@ it.layer(NodeServices.layer)("AgentSessionScanner", (it) => { Effect.map((file) => ({ ...file, stat: file.stat, - readAlloc: (size: FileSystem.SizeInput) => + readAlloc: (size: number) => file.readAlloc(size).pipe( Effect.tap((chunk) => Effect.gen(function* () { diff --git a/apps/server/src/provider/Drivers/CursorSkills.ts b/apps/server/src/provider/Drivers/CursorSkills.ts index 0562f4d1b729d8bd4d9491d14a60aafac647e152..c8cd561dfea0970285bd1457961a378c8728f122 100644 --- a/apps/server/src/provider/Drivers/CursorSkills.ts +++ b/apps/server/src/provider/Drivers/CursorSkills.ts @@ -11,6 +11,7 @@ import * as NodeOS from "node:os"; import type { ServerProviderSkill } from "@t3tools/contracts"; +import * as ByteSize from "effect/ByteSize"; import * as Effect from "effect/Effect"; import * as FileSystem from "effect/FileSystem"; import * as Path from "effect/Path"; @@ -23,9 +24,9 @@ const SKILL_MENTION_PATTERN = /(^|\s)\p{Sc}(?![0-9][0-9_]*(?:[kKmMbBtT]|[eE][0-9]+)?(?:\s|$))(?=[a-zA-Z0-9:_-]*[a-zA-Z])([a-zA-Z0-9][a-zA-Z0-9:_-]*)(?=\s|$)/gu; const HAS_SKILL_MENTION_PATTERN = new RegExp(SKILL_MENTION_PATTERN.source, "u"); const MAX_SKILL_DEPTH = 10; -const MAX_SKILL_BYTES = FileSystem.Size(1_000_000); +const MAX_SKILL_BYTES = ByteSize.bytes(1_000_000); const MAX_SKILL_SCAN_ENTRIES = 10_000; -const MAX_SKILL_SCAN_BYTES = FileSystem.Size(8_000_000); +const MAX_SKILL_SCAN_BYTES = ByteSize.bytes(8_000_000); interface CursorSkillFrontmatter { readonly description?: string; diff --git a/apps/server/src/provider/providerMaintenance.ts b/apps/server/src/provider/providerMaintenance.ts index 74167a8088402a9f95ff68d77cede5b64ad62990..6a11b22462eef10166742ca2476f66615c4b9274 100644 --- a/apps/server/src/provider/providerMaintenance.ts +++ b/apps/server/src/provider/providerMaintenance.ts @@ -46,10 +46,10 @@ const compactEnv = (input: Record>): NodeJS.Proces ); const CommandLookupEnvConfig = Config.all({ - PATH: Config.string("PATH").pipe(Config.option), - Path: Config.string("Path").pipe(Config.option), - path: Config.string("path").pipe(Config.option), - PATHEXT: Config.string("PATHEXT").pipe(Config.option), + PATH: Config.String("PATH").pipe(Config.option), + Path: Config.String("Path").pipe(Config.option), + path: Config.String("path").pipe(Config.option), + PATHEXT: Config.String("PATHEXT").pipe(Config.option), }).pipe(Config.map(compactEnv)); const readCommandLookupEnv = CommandLookupEnvConfig.pipe(Effect.orElseSucceed(() => ({}))); diff --git a/apps/server/src/server.test.ts b/apps/server/src/server.test.ts index be16a3f7fb5d0c5d13998706622af203aa6fdec9..cb2cf03659ef78921aeca3ac22b65f97b87b8d16 100644 --- a/apps/server/src/server.test.ts +++ b/apps/server/src/server.test.ts @@ -86,6 +86,7 @@ import { } from "effect/unstable/http"; import { OtlpSerialization, OtlpTracer } from "effect/unstable/observability"; import { RpcClient, RpcSerialization } from "effect/unstable/rpc"; +import * as NetAddress from "effect/unstable/net/NetAddress"; import * as Socket from "effect/unstable/socket/Socket"; import { vi } from "vite-plus/test"; @@ -1242,9 +1243,10 @@ const wsRpcProtocolLayer = (wsUrl: string, onMessage?: (message: string) => void const webSocketConstructorLayer = Layer.succeed( Socket.WebSocketConstructor, (socketUrl, protocols) => { + // Socket.makeWebSocket only ever passes its `protocols` option here. const socket = new NodeSocket.NodeWS.WebSocket( socketUrl, - protocols, + protocols as string | string[] | undefined, cookie ? { headers: { cookie } } : undefined, ); if (onMessage) socket.on("message", (data) => onMessage(data.toString())); @@ -1304,7 +1306,7 @@ const appendSessionCookieToWsUrl = (url: string, sessionCookieHeader: string) => const getHttpServerUrl = (pathname = "") => Effect.gen(function* () { const server = yield* HttpServer.HttpServer; - const address = server.address as HttpServer.TcpAddress; + const address = server.address as NetAddress.InetAddress; return `http://127.0.0.1:${address.port}${pathname}`; }); @@ -1664,7 +1666,7 @@ const getWsServerUrl = ( ) => Effect.gen(function* () { const server = yield* HttpServer.HttpServer; - const address = server.address as HttpServer.TcpAddress; + const address = server.address as NetAddress.InetAddress; const baseUrl = `ws://127.0.0.1:${address.port}${pathname}`; if (options?.authenticated === false) { return baseUrl; @@ -2065,7 +2067,7 @@ it.layer(NodeServices.layer)("server router seam", (it) => { return new Proxy(file, { get(target, key) { if (key === "readAlloc") { - return (size: FileSystem.SizeInput) => { + return (size: number) => { bodyReads += 1; return target.readAlloc(size); }; @@ -12629,14 +12631,14 @@ it.live( const report = formatTransferBudgetReport(runs); yield* Effect.logInfo(`\n${report}`); - const reportPath = yield* Config.string("T3CODE_TRANSFER_BUDGET_REPORT_PATH").pipe( + const reportPath = yield* Config.String("T3CODE_TRANSFER_BUDGET_REPORT_PATH").pipe( Config.option, ); if (Option.isSome(reportPath)) { const fileSystem = yield* FileSystem.FileSystem; yield* fileSystem.writeFileString(reportPath.value, report); } - const resultPath = yield* Config.string("T3CODE_TRANSFER_BUDGET_RESULT_PATH").pipe( + const resultPath = yield* Config.String("T3CODE_TRANSFER_BUDGET_RESULT_PATH").pipe( Config.option, ); if (Option.isSome(resultPath)) { diff --git a/apps/server/src/sourceControl/BitbucketApi.ts b/apps/server/src/sourceControl/BitbucketApi.ts index 1223f95f68fd5c3048bb8977c62ea6c0a1227b57..7bac33a30be16c45a317a7896def508914fa98a3 100644 --- a/apps/server/src/sourceControl/BitbucketApi.ts +++ b/apps/server/src/sourceControl/BitbucketApi.ts @@ -39,12 +39,12 @@ const DEFAULT_MAX_RESPONSE_BYTES = 8 * 1024 * 1024; const MAX_REDIRECTS = 3; const BitbucketApiEnvConfig = Config.all({ - baseUrl: Config.string("T3CODE_BITBUCKET_API_BASE_URL").pipe( + baseUrl: Config.String("T3CODE_BITBUCKET_API_BASE_URL").pipe( Config.withDefault(DEFAULT_API_BASE_URL), ), - accessToken: Config.string("T3CODE_BITBUCKET_ACCESS_TOKEN").pipe(Config.option), - email: Config.string("T3CODE_BITBUCKET_EMAIL").pipe(Config.option), - apiToken: Config.string("T3CODE_BITBUCKET_API_TOKEN").pipe(Config.option), + accessToken: Config.String("T3CODE_BITBUCKET_ACCESS_TOKEN").pipe(Config.option), + email: Config.String("T3CODE_BITBUCKET_EMAIL").pipe(Config.option), + apiToken: Config.String("T3CODE_BITBUCKET_API_TOKEN").pipe(Config.option), }); const BitbucketApiOperation = Schema.Literals([ diff --git a/apps/server/src/telemetry/AnalyticsService.ts b/apps/server/src/telemetry/AnalyticsService.ts index b2e737fe95a466e95c93fe81dd2447ba4a076b68..c02c168a8afcf3a1f12e8614c4e2299717e97063 100644 --- a/apps/server/src/telemetry/AnalyticsService.ts +++ b/apps/server/src/telemetry/AnalyticsService.ts @@ -30,18 +30,18 @@ interface BufferedAnalyticsEvent { } const TelemetryEnvConfig = Config.all({ - posthogKey: Config.string("T3CODE_POSTHOG_KEY").pipe( + posthogKey: Config.String("T3CODE_POSTHOG_KEY").pipe( Config.withDefault("phc_XOWci4oZP4VvLiEyrFqkFjP4CZn55mjYYBMREK5Wd6m"), ), - posthogHost: Config.string("T3CODE_POSTHOG_HOST").pipe( + posthogHost: Config.String("T3CODE_POSTHOG_HOST").pipe( Config.withDefault("https://us.i.posthog.com"), ), - enabled: Config.boolean("T3CODE_TELEMETRY_ENABLED").pipe(Config.withDefault(true)), - flushBatchSize: Config.number("T3CODE_TELEMETRY_FLUSH_BATCH_SIZE").pipe(Config.withDefault(20)), - maxBufferedEvents: Config.number("T3CODE_TELEMETRY_MAX_BUFFERED_EVENTS").pipe( + enabled: Config.Boolean("T3CODE_TELEMETRY_ENABLED").pipe(Config.withDefault(true)), + flushBatchSize: Config.Number("T3CODE_TELEMETRY_FLUSH_BATCH_SIZE").pipe(Config.withDefault(20)), + maxBufferedEvents: Config.Number("T3CODE_TELEMETRY_MAX_BUFFERED_EVENTS").pipe( Config.withDefault(1_000), ), - wslDistroName: Config.string("WSL_DISTRO_NAME").pipe(Config.option), + wslDistroName: Config.String("WSL_DISTRO_NAME").pipe(Config.option), }); export class AnalyticsService extends Context.Service< diff --git a/apps/server/src/textGeneration/TextGenerationUtils.ts b/apps/server/src/textGeneration/TextGenerationUtils.ts index e590ac4a244a39807d0563b34e361e393aee20c3..0f0873c5859333bfc795637dc564135382f474b6 100644 --- a/apps/server/src/textGeneration/TextGenerationUtils.ts +++ b/apps/server/src/textGeneration/TextGenerationUtils.ts @@ -9,7 +9,13 @@ const decodeJsonThreadTitle = Schema.decodeOption( /** Convert an Effect Schema to a flat JSON Schema object, inlining `$defs` when present. */ export function toJsonSchemaObject(schema: Schema.Top): unknown { - const document = Schema.toJsonSchemaDocument(Schema.toType(schema)); + // The type side, so decoding defaults do not turn required fields into + // optional ones, and closed objects (`additionalProperties: false`): + // structured-output modes require both, and closed was the generator + // default before effect rc.113. + const document = Schema.toJsonSchemaDocument(Schema.toType(schema), { + onExcessProperty: "error", + }); if (document.definitions && Object.keys(document.definitions).length > 0) { return { ...document.schema, $defs: document.definitions }; } diff --git a/apps/server/vite.config.ts b/apps/server/vite.config.ts index 32a8be7e6daa9c249e3bc62b8830df4d281759a1..14b73d2f0223593268de9e2201307527cce518c2 100644 --- a/apps/server/vite.config.ts +++ b/apps/server/vite.config.ts @@ -100,8 +100,8 @@ export default mergeConfig( // (declared deps are external by default, which is what this change is // undoing). `neverBundle` forces the native packages out: returning // false from `alwaysBundle` only means "no opinion", so a transitive - // dependency would still be bundled — which silently inlined - // msgpackr-extract and its loader, losing native acceleration. + // dependency would still be bundled — which silently inlined native + // loaders such as node-gyp-build, losing native acceleration. alwaysBundle: shouldBundleCliDependency, neverBundle: (id: string) => isExternalCliDependency(id), onlyBundle: false, diff --git a/infra/relay/package.json b/infra/relay/package.json index 94d1d5036a4a394612f4cf12aac9e089887a1389..d00055ac620993ce78fd6ec7b16b07e67154f8e1 100644 --- a/infra/relay/package.json +++ b/infra/relay/package.json @@ -18,7 +18,7 @@ "@t3tools/client-runtime": "workspace:*", "@t3tools/contracts": "workspace:*", "@t3tools/shared": "workspace:*", - "alchemy": "2.0.0-beta.76", + "alchemy": "2.0.0-beta.78", "drizzle-orm": "1.0.0-rc.5-ab785fc", "effect": "catalog:" }, diff --git a/infra/relay/scripts/android-push-watch.ts b/infra/relay/scripts/android-push-watch.ts index 2b902b33f94661b53aff2bd523e57a9054a6cba2..7eedea64edacee57638bd7299f3e5744626f43cb 100644 --- a/infra/relay/scripts/android-push-watch.ts +++ b/infra/relay/scripts/android-push-watch.ts @@ -88,8 +88,9 @@ const main = Effect.gen(function* () { ); const socketConstructor = Layer.succeed( Socket.WebSocketConstructor, + // Socket.makeWebSocket only ever passes its `protocols` option here. (url, protocols) => - new NodeSocket.NodeWS.WebSocket(url, protocols, { + new NodeSocket.NodeWS.WebSocket(url, protocols as string | string[] | undefined, { headers: { authorization: `Bearer ${connection.bearerToken}` }, }) as unknown as globalThis.WebSocket, ); diff --git a/infra/relay/scripts/deploy.ts b/infra/relay/scripts/deploy.ts index c828db1f235075ec33d848f1df52ac1d5c5eeec2..df0a89afa80181e47a9607375d2300de3efb5b15 100644 --- a/infra/relay/scripts/deploy.ts +++ b/infra/relay/scripts/deploy.ts @@ -7,11 +7,12 @@ import * as Apply from "alchemy/Apply"; import { ArtifactStore, createArtifactStore, provideFreshArtifactStore } from "alchemy/Artifacts"; import { AuthProviders } from "alchemy/Auth/AuthProvider"; import { CredentialsStoreLive } from "alchemy/Auth/Credentials"; -import { ProfileLive } from "alchemy/Auth/Profile"; +import { ProfileStoreLive } from "alchemy/Auth/Profile"; import * as Cloudflare from "alchemy/Cloudflare"; -import { Cli } from "alchemy/Cli/Cli"; +import { layerNonInteractive } from "alchemy/Interaction"; import { LoggingCli } from "alchemy/Cli/LoggingCli"; import * as Plan from "alchemy/Plan"; +import { Cli } from "alchemy/Report"; import * as Stage from "alchemy/Stage"; import * as State from "alchemy/State/State"; import { TelemetryLive } from "alchemy/Telemetry/Layer"; @@ -195,7 +196,7 @@ const loadDeployConfigProvider = Effect.fn("relay.deploy.loadConfigProvider")(fu ); }); -const relayDeployStage = Config.nonEmptyString("stage").pipe( +const relayDeployStage = Config.NonEmptyString("stage").pipe( Config.option, Config.map( Option.getOrElse(() => `dev_${process.env.USER ?? process.env.USERNAME ?? "unknown"}`), @@ -219,7 +220,7 @@ const writeGithubOutput = Effect.fn("relay.deploy.writeGithubOutput")(function* outcome: RelayDeployOutcome, ) { const fs = yield* FileSystem.FileSystem; - const githubOutputPath = yield* Config.nonEmptyString("GITHUB_OUTPUT"); + const githubOutputPath = yield* Config.NonEmptyString("GITHUB_OUTPUT"); yield* fs.writeFileString( githubOutputPath, serializeGithubOutput({ @@ -259,11 +260,16 @@ const deployBaseServices = Layer.mergeAll( Layer.succeed(AuthProviders, {}), Layer.succeed(ArtifactStore, createArtifactStore()), Layer.provideMerge(AlchemyContextLive, PlatformServices), - Layer.provide(ProfileLive, PlatformServices), + Layer.provide(ProfileStoreLive, PlatformServices), Layer.provide(CredentialsStoreLive, PlatformServices), FetchHttpClient.layer, TelemetryLive, - LoggingCli, + // LoggingCli captures the prompt environment when it is built. + Layer.provide(LoggingCli, PlatformServices), + // Alchemy's auth providers prompt through this service. None are configured + // here and the apply confirmation is this script's own prompt, so a prompt + // reaching it is a typed failure rather than a hang in CI. + layerNonInteractive(), ); const deployServices = deployBaseServices; @@ -376,7 +382,7 @@ const runRelayDeploy = Effect.fn("relay.deploy.run")( if (!options.yes && changed) { yield* cli.displayPlan(plan); const approved = yield* Prompt.run( - Prompt.confirm({ + Prompt.Confirm({ message: "Apply this relay deployment?", }), ); @@ -445,43 +451,43 @@ export const deploy = Effect.fn("relay.deploy")(function* (options: RelayDeployO export const relayDeployCommand = Command.make( "relay-deploy", { - dryRun: Flag.boolean("dry-run").pipe( + dryRun: Flag.Boolean("dry-run").pipe( Flag.withDescription("Dry run the deployment without applying changes."), Flag.withDefault(false), ), - force: Flag.boolean("force").pipe( + force: Flag.Boolean("force").pipe( Flag.withDescription("Force updates for resources that would otherwise no-op."), Flag.withDefault(false), ), - envFile: Flag.string("env-file").pipe( + envFile: Flag.String("env-file").pipe( Flag.withDescription( "Environment file to load. Defaults to infra/relay/.env with process env fallback.", ), Flag.optional, ), - stage: Flag.string("stage").pipe( + stage: Flag.String("stage").pipe( Flag.withDescription("Stage to deploy. Defaults to dev_${USER}."), Flag.optional, ), - yes: Flag.boolean("yes").pipe( + yes: Flag.Boolean("yes").pipe( Flag.withDescription("Skip the deployment confirmation prompt."), Flag.withDefault(false), ), - adopt: Flag.boolean("adopt").pipe( + adopt: Flag.Boolean("adopt").pipe( Flag.withDescription("Adopt pre-existing cloud resources that conflict with this stack."), Flag.withDefault(false), ), - githubOutput: Flag.boolean("github-output").pipe( + githubOutput: Flag.Boolean("github-output").pipe( Flag.withDescription("Append relay deployment metadata to GITHUB_OUTPUT."), Flag.withDefault(false), ), - githubEnvFile: Flag.string("github-env-file").pipe( + githubEnvFile: Flag.String("github-env-file").pipe( Flag.withDescription( "Write relay client tracing variables to a file suitable for GITHUB_ENV.", ), Flag.optional, ), - readState: Flag.boolean("read-state").pipe( + readState: Flag.Boolean("read-state").pipe( Flag.withDescription("Read the deployed stack output without planning or applying changes."), Flag.withDefault(false), ), diff --git a/infra/relay/src/worker.ts b/infra/relay/src/worker.ts index caa5425b083fdbd024231e89c2a6ecb37b72752d..61020c40f45de247cae32e1b444f9a9b0d40ccd9 100644 --- a/infra/relay/src/worker.ts +++ b/infra/relay/src/worker.ts @@ -141,19 +141,19 @@ export const ApiLive = Api.make( // // 2. Create bindings // - const apnsEnabled = yield* Config.boolean("APNS_ENABLED").pipe(Config.withDefault(true)); + const apnsEnabled = yield* Config.Boolean("APNS_ENABLED").pipe(Config.withDefault(true)); const apnsCredentials = apnsEnabled ? { environment: yield* Config.schema(RelayConfiguration.ApnsEnvironment, "APNS_ENVIRONMENT"), - teamId: yield* Config.string("APNS_TEAM_ID"), - keyId: yield* Config.string("APNS_KEY_ID"), - bundleId: yield* Config.string("APNS_BUNDLE_ID"), - privateKey: yield* Config.redacted("APNS_PRIVATE_KEY"), + teamId: yield* Config.String("APNS_TEAM_ID"), + keyId: yield* Config.String("APNS_KEY_ID"), + bundleId: yield* Config.String("APNS_BUNDLE_ID"), + privateKey: yield* Config.Redacted("APNS_PRIVATE_KEY"), } : null; const fcmServiceAccount = Option.getOrUndefined( Option.filter( - yield* Config.option(Config.redacted("FCM_SERVICE_ACCOUNT")), + yield* Config.option(Config.Redacted("FCM_SERVICE_ACCOUNT")), (value) => Redacted.value(value).trim().length > 0, ), ); @@ -165,9 +165,9 @@ export const ApiLive = Api.make( const axiomIngestToken = yield* observability.workerIngestToken.token; const axiomTracesEndpoint = yield* observability.traces.otelTracesEndpoint; - const clerkSecretKey = yield* Config.redacted("CLERK_SECRET_KEY"); - const clerkPublishableKey = yield* Config.string("CLERK_PUBLISHABLE_KEY"); - const clerkJwtAudience = yield* Config.string("CLERK_JWT_AUDIENCE"); + const clerkSecretKey = yield* Config.Redacted("CLERK_SECRET_KEY"); + const clerkPublishableKey = yield* Config.String("CLERK_PUBLISHABLE_KEY"); + const clerkJwtAudience = yield* Config.String("CLERK_JWT_AUDIENCE"); const cloudMintPrivateKey = yield* cloudMintKeyPair.privateKey; const cloudMintPublicKey = yield* cloudMintKeyPair.publicKey; diff --git a/infra/relay/src/zone.ts b/infra/relay/src/zone.ts index 5d1b60db2c7ee72c49be3ea557af14b7f5768200..93a2cd965c97a2e4b490469d6d1a9d86c956cab0 100644 --- a/infra/relay/src/zone.ts +++ b/infra/relay/src/zone.ts @@ -21,9 +21,9 @@ function withLogicalId(resource: Resource, logicalId: s export const RelayDeploymentConfig = Effect.gen(function* () { const { stage } = yield* Alchemy.Stack; - const relayApiZoneName = yield* Config.nonEmptyString("RELAY_API_ZONE_NAME"); - const managedEndpointZoneName = yield* Config.nonEmptyString("RELAY_TUNNEL_ZONE_NAME"); - const relayPublicDomainOverride = yield* Config.string("RELAY_DOMAIN").pipe( + const relayApiZoneName = yield* Config.NonEmptyString("RELAY_API_ZONE_NAME"); + const managedEndpointZoneName = yield* Config.NonEmptyString("RELAY_TUNNEL_ZONE_NAME"); + const relayPublicDomainOverride = yield* Config.String("RELAY_DOMAIN").pipe( Config.option, Config.map( Option.flatMap((value) => { diff --git a/knip.jsonc b/knip.jsonc index 3365862842b8d403834d8ebe1ecc65c94aa53e6f..0eae85a29acb7927b0f74d4116e3522c426c517e 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -26,8 +26,8 @@ "src/provider/testFixtures/*.mjs", ], // Keep the transitive Effect runtime pinned for standalone npm installs. - // Native msgpack acceleration and the Vite+ web build prerequisite. - "ignoreDependencies": ["@effect/platform-node-shared", "msgpackr-extract", "@t3tools/web"], + // The Vite+ web build prerequisite. + "ignoreDependencies": ["@effect/platform-node-shared", "@t3tools/web"], }, "apps/desktop": { // Electron loads these bundles by filename rather than importing them. diff --git a/packages/contracts/src/baseSchemas.ts b/packages/contracts/src/baseSchemas.ts index e55e0af7ca02bc75c3502080c55f1c2a965e51e5..602515843651c8f9aa3b7a2928626dd05d75ebad 100644 --- a/packages/contracts/src/baseSchemas.ts +++ b/packages/contracts/src/baseSchemas.ts @@ -6,7 +6,7 @@ import * as SchemaTransformation from "effect/SchemaTransformation"; export const TrimmedString = Schema.String.pipe( Schema.decodeTo( Schema.String, - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (value) => Effect.succeed(value.trim()), encode: (value) => Effect.succeed(value.trim()), }), diff --git a/packages/contracts/src/model.ts b/packages/contracts/src/model.ts index 0882aef51d053261e4b9bc95fd986e1abc1c8203..ee69b5ad2aa93f45c8105986ba88f1d5e4728e37 100644 --- a/packages/contracts/src/model.ts +++ b/packages/contracts/src/model.ts @@ -68,7 +68,7 @@ const LegacyProviderOptionSelectionsObject = Schema.Record(Schema.String, Schema const ProviderOptionSelectionsFromLegacyObject = LegacyProviderOptionSelectionsObject.pipe( Schema.decodeTo( Schema.Array(ProviderOptionSelection), - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (record) => Effect.succeed(coerceLegacyOptionsObjectToArray(record)), encode: (selections) => Effect.succeed(canonicalSelectionsToLegacyObject(selections)), }), diff --git a/packages/contracts/src/orchestration.ts b/packages/contracts/src/orchestration.ts index e4a6e1166e854507d19607bea94ab7ce5741cd11..f477efd09c442a50b55890160a4a29f4401802e4 100644 --- a/packages/contracts/src/orchestration.ts +++ b/packages/contracts/src/orchestration.ts @@ -92,7 +92,7 @@ const ModelSelectionSource = Schema.Struct({ export const ModelSelection = ModelSelectionSource.pipe( Schema.decodeTo( ModelSelectionWire, - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (raw) => { // Resolve the routing key: prefer an explicit `instanceId`; fall // back to promoting the legacy `provider` slug (the canonical diff --git a/packages/contracts/src/settings.ts b/packages/contracts/src/settings.ts index 14daf5b3c103b013ee0a216ce311d973620a7809..9de1f5ebb8dc8fe3b39c4771b3223f876a0d8dff 100644 --- a/packages/contracts/src/settings.ts +++ b/packages/contracts/src/settings.ts @@ -503,7 +503,7 @@ const makeBinaryPathSetting = (fallback: string) => TrimmedString.pipe( Schema.decodeTo( Schema.String, - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (value) => Effect.succeed(value || fallback), encode: (value) => Effect.succeed(value), }), diff --git a/packages/effect-acp/scripts/generate.ts b/packages/effect-acp/scripts/generate.ts index 1fe8e2edf8ab012895caf1556b4c0e04ab1084f9..daa40d7ae878cc6b0ee285a58c6b5b39e996dade 100644 --- a/packages/effect-acp/scripts/generate.ts +++ b/packages/effect-acp/scripts/generate.ts @@ -281,7 +281,7 @@ const generateSchemas = Effect.fn("generateSchemas")(function* (skipDownload: bo const generateCommand = Command.make( "generate", { - skipDownload: Flag.boolean("skip-download").pipe(Flag.withDefault(false)), + skipDownload: Flag.Boolean("skip-download").pipe(Flag.withDefault(false)), }, ({ skipDownload }) => generateSchemas(skipDownload), ).pipe(Command.withDescription("Generate Effect ACP schemas from the pinned ACP release assets.")); diff --git a/packages/shared/src/observability.ts b/packages/shared/src/observability.ts index bae865d6537dbf92bb58483a55d121ade96b7c91..62121399853b2c99046e6715185027bbcc873f53 100644 --- a/packages/shared/src/observability.ts +++ b/packages/shared/src/observability.ts @@ -702,7 +702,7 @@ function parseBigInt(input: string): bigint { export const OtlpHeadersFromString = Schema.String.pipe( Schema.decodeTo( Schema.Record(Schema.String, Schema.String), - SchemaTransformation.transformOrFail({ + SchemaTransformation.transformEffect({ decode: (input) => { const headers: Record = {}; for (const pair of input.split(",")) { diff --git a/packages/shared/src/relayClient.ts b/packages/shared/src/relayClient.ts index 4743f12b19d53823671bdcf765a71a4cf9dc1664..b33078fc5548d9aafcd942e769203d343cf47d92 100644 --- a/packages/shared/src/relayClient.ts +++ b/packages/shared/src/relayClient.ts @@ -103,7 +103,7 @@ const INSTALL_LOCK_RETRY_DELAY = "100 millis"; const INSTALL_LOCK_STALE_MS = 5 * 60 * 1_000; const trimmedString = (name: string) => - Config.string(name).pipe( + Config.String(name).pipe( Config.option, Config.map( Option.flatMap((value) => { diff --git a/packages/shared/src/schemaYaml.ts b/packages/shared/src/schemaYaml.ts index 55b5b97122ae0af0f17e28bc6e1dea0728bc6c12..867efdacbe2e03881b4fe4794b85e4701511da3d 100644 --- a/packages/shared/src/schemaYaml.ts +++ b/packages/shared/src/schemaYaml.ts @@ -34,7 +34,7 @@ function formatYamlParseError(error: unknown): string { /** Parses YAML during decoding, reporting parse failures as InvalidValue issues. */ function parseYaml(options?: YamlParseOptions): SchemaGetter.Getter { - return SchemaGetter.transformOrFail((input: E) => + return SchemaGetter.transformEffect((input: E) => Effect.try({ try: () => parseYamlString(input, options) as unknown, catch: (error) => new SchemaIssue.InvalidValue({ message: formatYamlParseError(error) }), @@ -44,7 +44,7 @@ function parseYaml(options?: YamlParseOptions): SchemaGetter.G /** Serializes YAML during encoding, reporting stringify failures as InvalidValue issues. */ function stringifyYaml(options?: YamlStringifyOptions): SchemaGetter.Getter { - return SchemaGetter.transformOrFail((input: unknown) => + return SchemaGetter.transformEffect((input: unknown) => Effect.try({ try: () => stringifyYamlValue(input, options), catch: () => new SchemaIssue.InvalidValue({ message: "Failed to stringify YAML." }), diff --git a/packages/shared/src/t3ProjectFile.ts b/packages/shared/src/t3ProjectFile.ts index b585c125ae7e5fe6bca5a4be41dcbd873f9d732a..8f93dbe6ee6a213b3c3012808bf167c3bcd3d93b 100644 --- a/packages/shared/src/t3ProjectFile.ts +++ b/packages/shared/src/t3ProjectFile.ts @@ -30,7 +30,9 @@ export function parseT3ProjectFile(contents: string): T3ProjectFile | null { * editors get LSP support via a `$schema` reference. */ export function buildT3ProjectFileJsonSchema(): Record { - const document = Schema.toJsonSchemaDocument(T3ProjectFile); + // Closed objects, as before effect rc.113 changed the generator default; + // editors then flag unknown keys in t3.json. + const document = Schema.toJsonSchemaDocument(T3ProjectFile, { onExcessProperty: "error" }); const jsonSchema: Record = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: T3_PROJECT_FILE_SCHEMA_URL, diff --git a/packages/ssh/src/auth.ts b/packages/ssh/src/auth.ts index fca086de3186aa9c15dfc52a3dc6dc394e655f3f..fd4ec9dbc01e14f97e0af96c4321ce9409914d02 100644 --- a/packages/ssh/src/auth.ts +++ b/packages/ssh/src/auth.ts @@ -185,7 +185,7 @@ export const buildSshChildEnvironment = Effect.fn("ssh/auth.buildSshChildEnviron const platform = yield* HostProcessPlatform; const hostDisplay = input.baseEnv ? input.baseEnv.DISPLAY - : yield* Config.string("DISPLAY").pipe( + : yield* Config.String("DISPLAY").pipe( Config.option, Effect.orElseSucceed(() => Option.none()), Effect.map(Option.getOrUndefined), diff --git a/packages/ssh/src/config.ts b/packages/ssh/src/config.ts index 840f161702674c8aad88edbc396167bc688a94d8..77a876d184c061c9bad96c19e37da18726d34b9f 100644 --- a/packages/ssh/src/config.ts +++ b/packages/ssh/src/config.ts @@ -211,8 +211,8 @@ export const discoverSshHosts = Effect.fnUntraced( function* (input: { readonly homeDir?: string }) { const path = yield* Path.Path; const env = yield* Config.all({ - home: Config.string("HOME").pipe(Config.option), - userProfile: Config.string("USERPROFILE").pipe(Config.option), + home: Config.String("HOME").pipe(Config.option), + userProfile: Config.String("USERPROFILE").pipe(Config.option), }); const homeDir = input?.homeDir ?? diff --git a/patches/@effect__vitest@4.0.0-rc.112.patch b/patches/@effect__vitest@4.0.0-rc.112.patch deleted file mode 100644 index f3578570837af279f7e1463c39a96a5d6b83047e..0000000000000000000000000000000000000000 --- a/patches/@effect__vitest@4.0.0-rc.112.patch +++ /dev/null @@ -1,106 +0,0 @@ -diff --git a/dist/index.d.ts b/dist/index.d.ts -index a364638..4ee44c2 100644 ---- a/dist/index.d.ts -+++ b/dist/index.d.ts -@@ -7,11 +7,11 @@ import type * as Layer from "effect/Layer"; - import type * as Schema from "effect/Schema"; - import type * as Scope from "effect/Scope"; - import type * as FC from "effect/testing/FastCheck"; --import * as V from "vitest"; -+import * as V from "vite-plus/test"; - /** - * @since 4.0.0 - */ --export * from "vitest"; -+export * from "vite-plus/test"; - /** - * @since 4.0.0 - */ -diff --git a/dist/index.js b/dist/index.js -index a1a89bd..687df5a 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -1,9 +1,9 @@ --import * as V from "vitest"; -+import * as V from "vite-plus/test"; - import * as internal from "./internal/internal.js"; - /** - * @since 4.0.0 - */ --export * from "vitest"; -+export * from "vite-plus/test"; - /** - * @since 4.0.0 - */ -diff --git a/dist/internal/internal.js b/dist/internal/internal.js -index fe41479..8ae751c 100644 ---- a/dist/internal/internal.js -+++ b/dist/internal/internal.js -@@ -15,7 +15,7 @@ import * as Scope from "effect/Scope"; - import * as fc from "effect/testing/FastCheck"; - import * as TestClock from "effect/testing/TestClock"; - import * as TestConsole from "effect/testing/TestConsole"; --import * as V from "vitest"; -+import * as V from "vite-plus/test"; - const getCurrentSuite = V.TestRunner.getCurrentSuite; - const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) { - const exit = yield* Effect.exit(effect); -diff --git a/dist/utils.js b/dist/utils.js -index 4871215..2c46e2b 100644 ---- a/dist/utils.js -+++ b/dist/utils.js -@@ -4,7 +4,7 @@ import * as Option from "effect/Option"; - import * as Predicate from "effect/Predicate"; - import * as Result from "effect/Result"; - import * as assert from "node:assert"; --import { assert as vassert } from "vitest"; -+import { assert as vassert } from "vite-plus/test"; - // ---------------------------- - // Primitives - // ---------------------------- -diff --git a/src/index.ts b/src/index.ts -index b524786..8d4025d 100644 ---- a/src/index.ts -+++ b/src/index.ts -@@ -7,13 +7,13 @@ import type * as Layer from "effect/Layer" - import type * as Schema from "effect/Schema" - import type * as Scope from "effect/Scope" - import type * as FC from "effect/testing/FastCheck" --import * as V from "vitest" -+import * as V from "vite-plus/test" - import * as internal from "./internal/internal.ts" - - /** - * @since 4.0.0 - */ --export * from "vitest" -+export * from "vite-plus/test" - - /** - * @since 4.0.0 -diff --git a/src/internal/internal.ts b/src/internal/internal.ts -index d4040a0..f02fc9d 100644 ---- a/src/internal/internal.ts -+++ b/src/internal/internal.ts -@@ -16,7 +16,7 @@ import * as Scope from "effect/Scope" - import * as fc from "effect/testing/FastCheck" - import * as TestClock from "effect/testing/TestClock" - import * as TestConsole from "effect/testing/TestConsole" --import * as V from "vitest" -+import * as V from "vite-plus/test" - import type * as Vitest from "../index.ts" - - const getCurrentSuite = V.TestRunner.getCurrentSuite -diff --git a/src/utils.ts b/src/utils.ts -index 4a4612c..846bcc9 100644 ---- a/src/utils.ts -+++ b/src/utils.ts -@@ -16,7 +16,7 @@ import * as Option from "effect/Option" - import * as Predicate from "effect/Predicate" - import * as Result from "effect/Result" - import * as assert from "node:assert" --import { assert as vassert } from "vitest" -+import { assert as vassert } from "vite-plus/test" - - // ---------------------------- - // Primitives diff --git a/patches/@effect__vitest@4.0.0-rc.115.patch b/patches/@effect__vitest@4.0.0-rc.115.patch new file mode 100644 index 0000000000000000000000000000000000000000..7b005596c360170814d3f666f700fceb5419b2b1 --- /dev/null +++ b/patches/@effect__vitest@4.0.0-rc.115.patch @@ -0,0 +1,106 @@ +diff --git a/dist/index.d.ts b/dist/index.d.ts +index f0b2bcc..1b9bc38 100644 +--- a/dist/index.d.ts ++++ b/dist/index.d.ts +@@ -7,11 +7,11 @@ import type * as Layer from "effect/Layer"; + import type * as Schema from "effect/Schema"; + import type * as Scope from "effect/Scope"; + import type * as Arbitrary from "effect/unstable/arbitrary/Arbitrary"; +-import * as V from "vitest"; ++import * as V from "vite-plus/test"; + /** + * @since 4.0.0 + */ +-export * from "vitest"; ++export * from "vite-plus/test"; + /** + * @since 4.0.0 + */ +diff --git a/dist/index.js b/dist/index.js +index d941a25..90e4618 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -1,9 +1,9 @@ +-import * as V from "vitest"; ++import * as V from "vite-plus/test"; + import * as internal from "./internal/internal.js"; + /** + * @since 4.0.0 + */ +-export * from "vitest"; ++export * from "vite-plus/test"; + /** + * @since 4.0.0 + */ +diff --git a/dist/internal/internal.js b/dist/internal/internal.js +index 25ab056..d5cce3a 100644 +--- a/dist/internal/internal.js ++++ b/dist/internal/internal.js +@@ -12,7 +12,7 @@ import * as Scope from "effect/Scope"; + import * as TestClock from "effect/testing/TestClock"; + import * as TestConsole from "effect/testing/TestConsole"; + import * as Arbitrary from "effect/unstable/arbitrary/Arbitrary"; +-import * as V from "vitest"; ++import * as V from "vite-plus/test"; + const getCurrentSuite = V.TestRunner.getCurrentSuite; + const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) { + const exit = yield* Effect.exit(effect); +diff --git a/dist/utils.js b/dist/utils.js +index 4871215..2c46e2b 100644 +--- a/dist/utils.js ++++ b/dist/utils.js +@@ -4,7 +4,7 @@ import * as Option from "effect/Option"; + import * as Predicate from "effect/Predicate"; + import * as Result from "effect/Result"; + import * as assert from "node:assert"; +-import { assert as vassert } from "vitest"; ++import { assert as vassert } from "vite-plus/test"; + // ---------------------------- + // Primitives + // ---------------------------- +diff --git a/src/index.ts b/src/index.ts +index 7726aac..7375f10 100644 +--- a/src/index.ts ++++ b/src/index.ts +@@ -7,13 +7,13 @@ import type * as Layer from "effect/Layer" + import type * as Schema from "effect/Schema" + import type * as Scope from "effect/Scope" + import type * as Arbitrary from "effect/unstable/arbitrary/Arbitrary" +-import * as V from "vitest" ++import * as V from "vite-plus/test" + import * as internal from "./internal/internal.ts" + + /** + * @since 4.0.0 + */ +-export * from "vitest" ++export * from "vite-plus/test" + + /** + * @since 4.0.0 +diff --git a/src/internal/internal.ts b/src/internal/internal.ts +index 3e001b1..5b7aa2a 100644 +--- a/src/internal/internal.ts ++++ b/src/internal/internal.ts +@@ -14,7 +14,7 @@ import * as Scope from "effect/Scope" + import * as TestClock from "effect/testing/TestClock" + import * as TestConsole from "effect/testing/TestConsole" + import * as Arbitrary from "effect/unstable/arbitrary/Arbitrary" +-import * as V from "vitest" ++import * as V from "vite-plus/test" + import type * as Vitest from "../index.ts" + + const getCurrentSuite = V.TestRunner.getCurrentSuite +diff --git a/src/utils.ts b/src/utils.ts +index 4a4612c..846bcc9 100644 +--- a/src/utils.ts ++++ b/src/utils.ts +@@ -16,7 +16,7 @@ import * as Option from "effect/Option" + import * as Predicate from "effect/Predicate" + import * as Result from "effect/Result" + import * as assert from "node:assert" +-import { assert as vassert } from "vitest" ++import { assert as vassert } from "vite-plus/test" + + // ---------------------------- + // Primitives diff --git a/patches/effect@4.0.0-rc.112.patch b/patches/effect@4.0.0-rc.112.patch deleted file mode 100644 index 0b7b7b79326eb43e7cdc555cb538829eedb4795b..0000000000000000000000000000000000000000 --- a/patches/effect@4.0.0-rc.112.patch +++ /dev/null @@ -1,342 +0,0 @@ -diff --git a/dist/unstable/ai/McpServer.js b/dist/unstable/ai/McpServer.js -index ce9dda4..95c38f2 100644 ---- a/dist/unstable/ai/McpServer.js -+++ b/dist/unstable/ai/McpServer.js -@@ -444,6 +444,26 @@ const runWithProtocolState = /*#__PURE__*/Effect.fnUntraced(function* (options, - const defaultLogLevel = yield* CurrentLogLevel; - const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter)); - const sessions = protocolState.sessions; -+ if (isHttp && options.path !== undefined) { -+ const router = yield* HttpRouter.HttpRouter; -+ yield* router.add("DELETE", options.path, Effect.gen(function* () { -+ const request = yield* HttpServerRequest.HttpServerRequest; -+ const sessionId = request.headers[MCP_SESSION_ID_HEADER]; -+ if (sessionId === undefined) { -+ return HttpServerResponse.empty({ -+ status: 400 -+ }); -+ } -+ if (!sessions.bySessionId.delete(sessionId)) { -+ return HttpServerResponse.empty({ -+ status: 404 -+ }); -+ } -+ return HttpServerResponse.empty({ -+ status: 204 -+ }); -+ })); -+ } - const clientProtocols = new Map(); - const activeRequests = new Map(); - const clientProfiles = new Map(); -@@ -942,7 +962,7 @@ export const layerHttp = options => { - const methodNotAllowed = request => isAllowedMcpOrigin(request, options.allowedOrigins) ? Effect.succeed(methodNotAllowedResponse) : Effect.succeed(HttpServerResponse.empty({ - status: 403 - })); -- 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)); -+ 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)); - return Layer.merge(layerWithProtocolState(options), routes).pipe(Layer.provide(layerMcpProtocolHttp(options)), Layer.provide(protocolState), Layer.provide(RpcSerialization.layerJsonRpc())); - }; - const layerMcpProtocolHttp = options => Layer.effect(RpcServer.Protocol)(Effect.gen(function* () { -diff --git a/dist/unstable/rpc/RpcClient.d.ts b/dist/unstable/rpc/RpcClient.d.ts -index 1a471aa..7233784 100644 ---- a/dist/unstable/rpc/RpcClient.d.ts -+++ b/dist/unstable/rpc/RpcClient.d.ts -@@ -2,6 +2,7 @@ import * as Cause from "../../Cause.ts"; - import * as Context from "../../Context.ts"; - import type * as Duration from "../../Duration.ts"; - import * as Effect from "../../Effect.ts"; -+import * as Exit from "../../Exit.ts"; - import * as Layer from "../../Layer.ts"; - import * as Queue from "../../Queue.ts"; - import * as Schedule from "../../Schedule.ts"; -@@ -280,9 +281,40 @@ export declare const layerProtocolWorker: (options: { - readonly targetUtilization?: number | undefined; - readonly timeToLive: Duration.Input; - }) => Layer.Layer; -+declare const RequestHooks_base: Context.ServiceClass Effect.Effect) | undefined; -+ readonly onRequestChunk?: ((info: { -+ readonly id: RequestId; -+ readonly tag: string; -+ readonly chunkCount: number; -+ }) => Effect.Effect) | undefined; -+ readonly onRequestExit?: ((info: { -+ readonly id: RequestId; -+ readonly tag: string; -+ readonly stream: boolean; -+ readonly exit: Exit.Exit; -+ }) => Effect.Effect) | undefined; -+ readonly onRequestInterrupt?: ((info: { -+ readonly id: RequestId; -+ readonly tag?: string | undefined; -+ }) => Effect.Effect) | undefined; -+}>; -+/** -+ * @since 4.0.0 -+ * @category RequestHooks -+ */ -+export declare class RequestHooks extends RequestHooks_base { -+} - declare const ConnectionHooks_base: Context.ServiceClass; - readonly onDisconnect: Effect.Effect; -+ readonly onPing?: Effect.Effect | undefined; -+ readonly onPong?: Effect.Effect | undefined; -+ readonly onPingTimeout?: Effect.Effect | undefined; - }>; - /** - * Represents optional client protocol hooks that run when a transport connects -diff --git a/dist/unstable/rpc/RpcClient.js b/dist/unstable/rpc/RpcClient.js -index ec78917..342f9d7 100644 ---- a/dist/unstable/rpc/RpcClient.js -+++ b/dist/unstable/rpc/RpcClient.js -@@ -49,6 +49,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - const services = yield* Effect.context(); - const scope = Context.get(services, Scope.Scope); - const entries = new Map(); -+ const hooks = yield* Effect.serviceOption(RequestHooks); - let isShutdown = false; - yield* Scope.addFinalizer(scope, Effect.withFiber(parent => { - isShutdown = true; -@@ -86,6 +87,11 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - return Effect.interrupt; - } - const id = generateRequestId(); -+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({ -+ id, -+ tag: rpc._tag, -+ stream: false -+ }) : Effect.void; - const send = middleware(message => options.onFromClient({ - message, - context, -@@ -103,7 +109,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - headers: Headers.merge(parentFiber.getRef(CurrentHeaders), headers) - }); - if (discard) { -- return send; -+ return onStart.pipe(Effect.andThen(send)); - } - let fiber; - return Effect.onInterrupt(Effect.callback(resume => { -@@ -121,7 +127,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - } - }; - entries.set(id, entry); -- fiber = send.pipe(span ? Effect.withParentSpan(span, { -+ fiber = onStart.pipe(Effect.andThen(send), span ? Effect.withParentSpan(span, { - captureStackTrace: false - }) : identity, Effect.runForkWith(parentFiber.context)); - fiber.addObserver(exit => { -@@ -130,8 +136,9 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - } - }); - }), interruptors => { -+ const entry = entries.get(id); - entries.delete(id); -- return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context)); -+ return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context, entry?.rpc._tag)); - }); - }); - const onStreamRequest = Effect.fnUntraced(function* (rpc, middleware, payload, headers, streamBufferSize, context) { -@@ -143,11 +150,17 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - }); - const fiber = Fiber.getCurrent(); - const id = generateRequestId(); -+ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({ -+ id, -+ tag: rpc._tag, -+ stream: true -+ }) : Effect.void; - const scope = Context.getUnsafe(fiber.context, Scope.Scope); - yield* Scope.addFinalizerExit(scope, exit => { -- if (!entries.has(id)) return Effect.void; -+ const entry = entries.get(id); -+ if (!entry) return Effect.void; - entries.delete(id); -- return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context); -+ return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context, entry.rpc._tag); - }); - const queue = yield* Queue.bounded(streamBufferSize); - entries.set(id, { -@@ -155,9 +168,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - rpc, - queue, - scope, -- context -+ context, -+ chunkCount: 0 - }); -- yield* middleware(message => options.onFromClient({ -+ yield* onStart.pipe(Effect.andThen(middleware(message => options.onFromClient({ - message, - context, - discard: false -@@ -172,7 +186,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - sampled: span.sampled - } : {}), - headers: Headers.merge(fiber.getRef(CurrentHeaders), headers) -- }).pipe(span ? Effect.withParentSpan(span, { -+ }))).pipe(span ? Effect.withParentSpan(span, { - captureStackTrace: false - }) : identity, Effect.catchCause(error => Queue.failCause(queue, error)), Effect.interruptible, Effect.forkIn(scope, { - startImmediately: true -@@ -202,7 +216,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - }); - }; - }; -- const sendInterrupt = (requestId, interruptors, context) => Effect.callback(resume => { -+ const sendInterrupt = (requestId, interruptors, context, tag) => (Option.isSome(hooks) && hooks.value.onRequestInterrupt ? hooks.value.onRequestInterrupt({ -+ id: requestId, -+ tag -+ }) : Effect.void).pipe(Effect.andThen(Effect.callback(resume => { - const parentFiber = Fiber.getCurrent(); - const fiber = options.onFromClient({ - message: { -@@ -216,7 +233,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - fiber.addObserver(() => { - resume(Effect.void); - }); -- }); -+ }))); - const write = message => { - switch (message._tag) { - case "Chunk": -@@ -224,7 +241,13 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - const requestId = message.requestId; - const entry = entries.get(requestId); - if (!entry || entry._tag !== "Queue") return Effect.void; -- return Queue.offerAll(entry.queue, message.values).pipe(supportsAck ? Effect.flatMap(() => options.onFromClient({ -+ const chunkCount = entry.chunkCount += message.values.length; -+ const onChunk = Option.isSome(hooks) && hooks.value.onRequestChunk ? hooks.value.onRequestChunk({ -+ id: requestId, -+ tag: entry.rpc._tag, -+ chunkCount -+ }) : Effect.void; -+ return Queue.offerAll(entry.queue, message.values).pipe(Effect.andThen(onChunk), supportsAck ? Effect.flatMap(() => options.onFromClient({ - message: { - _tag: "Ack", - requestId: message.requestId -@@ -239,11 +262,18 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro - const entry = entries.get(requestId); - if (!entry) return Effect.void; - entries.delete(requestId); -+ const onExit = Option.isSome(hooks) && hooks.value.onRequestExit ? hooks.value.onRequestExit({ -+ id: requestId, -+ tag: entry.rpc._tag, -+ stream: entry._tag === "Queue", -+ exit: message.exit -+ }) : Effect.void; - if (entry._tag === "Effect") { -- entry.resume(message.exit); -- return Effect.void; -+ return onExit.pipe(Effect.andThen(Effect.sync(() => { -+ entry.resume(message.exit); -+ }))); - } -- return message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause); -+ return onExit.pipe(Effect.andThen(message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause))); - } - case "Defect": - { -@@ -603,7 +633,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun - // `parser` is replaced on every connect, and a stateful serialization - // encodes against the connection it is writing to, so the ping is encoded - // when it is sent rather than once up front. -- const pinger = yield* makePinger(Effect.suspend(() => write(parser.encode(constPing)))); -+ const pinger = yield* makePinger(Effect.suspend(() => write(parser.encode(constPing))), Option.isSome(hooks) ? hooks.value : undefined); - let currentError; - const onOpen = Effect.suspend(() => { - currentError = undefined; -@@ -630,8 +660,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun - body: () => { - const response = responses[i++]; - if (response._tag === "Pong") { -- pinger.onPong(); -- return Effect.void; -+ return pinger.onPong; - } - if (Object.hasOwn(response, "requestId")) { - const requestId = response.requestId; -@@ -660,12 +689,12 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun - } - }, { - onOpen -- }).pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => Effect.fail(new Socket.SocketError({ -+ }).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({ - reason: new Socket.SocketOpenError({ - kind: "Timeout", - cause: new Error("ping timeout") - }) -- }))))); -+ }))))))); - }).pipe(Effect.flatMap(() => Effect.fail(new Socket.SocketError({ - reason: new Socket.SocketCloseError({ - code: 1000 -@@ -710,20 +739,28 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun - }; - })); - const defaultRetryPolicy = /*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential(500, 1.5), /*#__PURE__*/Schedule.spaced(5000)]); --const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing) { -+const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing, hooks) { - let recievedPong = true; -+ let missedPongs = 0; - const latch = Latch.makeUnsafe(); - const reset = () => { - recievedPong = true; -+ missedPongs = 0; - latch.closeUnsafe(); - }; -- const onPong = () => { -+ const onPong = Effect.sync(() => { - recievedPong = true; -- }; -+ missedPongs = 0; -+ }).pipe(Effect.andThen(hooks?.onPong ?? Effect.void)); - yield* Effect.suspend(() => { -- if (!recievedPong) return latch.open; -+ if (!recievedPong) { -+ missedPongs += 1; -+ if (missedPongs >= 3) return latch.open; -+ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing)); -+ } - recievedPong = false; -- return writePing; -+ missedPongs = 0; -+ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing)); - }).pipe(Effect.delay("5 seconds"), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped); - return { - timeout: latch.await, -@@ -874,6 +911,11 @@ export const makeProtocolWorker = options => Protocol.make(Effect.fnUntraced(fun - * @since 4.0.0 - */ - export const layerProtocolWorker = /*#__PURE__*/flow(makeProtocolWorker, /*#__PURE__*/Layer.effect(Protocol)); -+/** -+ * @since 4.0.0 -+ * @category RequestHooks -+ */ -+export class RequestHooks extends /*#__PURE__*/Context.Service()("effect/rpc/RpcClient/RequestHooks") {} - /** - * Represents optional client protocol hooks that run when a transport connects - * and disconnects. -diff --git a/dist/unstable/http/HttpClientResponse.js b/dist/unstable/http/HttpClientResponse.js ---- a/dist/unstable/http/HttpClientResponse.js -+++ b/dist/unstable/http/HttpClientResponse.js -@@ -177,3 +177,3 @@ - } -- return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie()); -+ return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie?.() ?? []); - } -diff --git a/src/unstable/http/HttpClientResponse.ts b/src/unstable/http/HttpClientResponse.ts ---- a/src/unstable/http/HttpClientResponse.ts -+++ b/src/unstable/http/HttpClientResponse.ts -@@ -309,3 +309,3 @@ - } -- return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie()) -+ return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie?.() ?? []) - } diff --git a/patches/effect@4.0.0-rc.115.patch b/patches/effect@4.0.0-rc.115.patch new file mode 100644 index 0000000000000000000000000000000000000000..6257688206a8556636b55b7bf42009f604299132 --- /dev/null +++ b/patches/effect@4.0.0-rc.115.patch @@ -0,0 +1,352 @@ +diff --git a/dist/unstable/ai/McpServer.js b/dist/unstable/ai/McpServer.js +index e8b9be4..9cffc5c 100644 +--- a/dist/unstable/ai/McpServer.js ++++ b/dist/unstable/ai/McpServer.js +@@ -450,6 +450,26 @@ const runWithProtocolState = /*#__PURE__*/Effect.fnUntraced(function* (options, + const defaultLogLevel = yield* CurrentLogLevel; + const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter)); + const sessions = protocolState.sessions; ++ if (isHttp && options.path !== undefined) { ++ const router = yield* HttpRouter.HttpRouter; ++ yield* router.add("DELETE", options.path, Effect.gen(function* () { ++ const request = yield* HttpServerRequest.HttpServerRequest; ++ const sessionId = request.headers[MCP_SESSION_ID_HEADER]; ++ if (sessionId === undefined) { ++ return HttpServerResponse.empty({ ++ status: 400 ++ }); ++ } ++ if (!sessions.bySessionId.delete(sessionId)) { ++ return HttpServerResponse.empty({ ++ status: 404 ++ }); ++ } ++ return HttpServerResponse.empty({ ++ status: 204 ++ }); ++ })); ++ } + const clientProtocols = new Map(); + const activeRequests = new Map(); + const clientProfiles = new Map(); +@@ -948,7 +968,7 @@ export const layerHttp = options => { + const methodNotAllowed = request => isAllowedMcpOrigin(request, options.allowedOrigins) ? Effect.succeed(methodNotAllowedResponse) : Effect.succeed(HttpServerResponse.empty({ + status: 403 + })); +- 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)); ++ 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)); + return Layer.merge(layerWithProtocolState(options), routes).pipe(Layer.provide(layerMcpProtocolHttp(options)), Layer.provide(protocolState), Layer.provide(RpcSerialization.layerJsonRpc())); + }; + const layerMcpProtocolHttp = options => Layer.effect(RpcServer.Protocol)(Effect.gen(function* () { +diff --git a/dist/unstable/http/HttpClientResponse.js b/dist/unstable/http/HttpClientResponse.js +index 59a2b12..ef54250 100644 +--- a/dist/unstable/http/HttpClientResponse.js ++++ b/dist/unstable/http/HttpClientResponse.js +@@ -180,7 +180,7 @@ class WebHttpClientResponse extends Inspectable.Class { + if (this.cachedCookies) { + return this.cachedCookies; + } +- return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie()); ++ return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie?.() ?? []); + } + get remoteAddress() { + return Option.none(); +diff --git a/dist/unstable/rpc/RpcClient.d.ts b/dist/unstable/rpc/RpcClient.d.ts +index 1a471aa..7233784 100644 +--- a/dist/unstable/rpc/RpcClient.d.ts ++++ b/dist/unstable/rpc/RpcClient.d.ts +@@ -2,6 +2,7 @@ import * as Cause from "../../Cause.ts"; + import * as Context from "../../Context.ts"; + import type * as Duration from "../../Duration.ts"; + import * as Effect from "../../Effect.ts"; ++import * as Exit from "../../Exit.ts"; + import * as Layer from "../../Layer.ts"; + import * as Queue from "../../Queue.ts"; + import * as Schedule from "../../Schedule.ts"; +@@ -280,9 +281,40 @@ export declare const layerProtocolWorker: (options: { + readonly targetUtilization?: number | undefined; + readonly timeToLive: Duration.Input; + }) => Layer.Layer; ++declare const RequestHooks_base: Context.ServiceClass Effect.Effect) | undefined; ++ readonly onRequestChunk?: ((info: { ++ readonly id: RequestId; ++ readonly tag: string; ++ readonly chunkCount: number; ++ }) => Effect.Effect) | undefined; ++ readonly onRequestExit?: ((info: { ++ readonly id: RequestId; ++ readonly tag: string; ++ readonly stream: boolean; ++ readonly exit: Exit.Exit; ++ }) => Effect.Effect) | undefined; ++ readonly onRequestInterrupt?: ((info: { ++ readonly id: RequestId; ++ readonly tag?: string | undefined; ++ }) => Effect.Effect) | undefined; ++}>; ++/** ++ * @since 4.0.0 ++ * @category RequestHooks ++ */ ++export declare class RequestHooks extends RequestHooks_base { ++} + declare const ConnectionHooks_base: Context.ServiceClass; + readonly onDisconnect: Effect.Effect; ++ readonly onPing?: Effect.Effect | undefined; ++ readonly onPong?: Effect.Effect | undefined; ++ readonly onPingTimeout?: Effect.Effect | undefined; + }>; + /** + * Represents optional client protocol hooks that run when a transport connects +diff --git a/dist/unstable/rpc/RpcClient.js b/dist/unstable/rpc/RpcClient.js +index c586c60..49886d8 100644 +--- a/dist/unstable/rpc/RpcClient.js ++++ b/dist/unstable/rpc/RpcClient.js +@@ -49,6 +49,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + const services = yield* Effect.context(); + const scope = Context.get(services, Scope.Scope); + const entries = new Map(); ++ const hooks = yield* Effect.serviceOption(RequestHooks); + let isShutdown = false; + yield* Scope.addFinalizer(scope, Effect.withFiber(parent => { + isShutdown = true; +@@ -86,6 +87,11 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + return Effect.interrupt; + } + const id = generateRequestId(); ++ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({ ++ id, ++ tag: rpc._tag, ++ stream: false ++ }) : Effect.void; + const send = middleware(message => options.onFromClient({ + message, + context, +@@ -103,7 +109,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + headers: Headers.merge(parentFiber.getRef(CurrentHeaders), headers) + }); + if (discard) { +- return send; ++ return onStart.pipe(Effect.andThen(send)); + } + let fiber; + return Effect.onInterrupt(Effect.callback(resume => { +@@ -121,7 +127,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + } + }; + entries.set(id, entry); +- fiber = send.pipe(span ? Effect.withParentSpan(span, { ++ fiber = onStart.pipe(Effect.andThen(send), span ? Effect.withParentSpan(span, { + captureStackTrace: false + }) : identity, Effect.runForkWith(parentFiber.context)); + fiber.addObserver(exit => { +@@ -130,8 +136,9 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + } + }); + }), interruptors => { ++ const entry = entries.get(id); + entries.delete(id); +- return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context)); ++ return Effect.andThen(Fiber.interrupt(fiber), sendInterrupt(id, Array.from(interruptors), context, entry?.rpc._tag)); + }); + }); + const onStreamRequest = Effect.fnUntraced(function* (rpc, middleware, payload, headers, streamBufferSize, context) { +@@ -143,11 +150,17 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + }); + const fiber = Fiber.getCurrent(); + const id = generateRequestId(); ++ const onStart = Option.isSome(hooks) && hooks.value.onRequestStart ? hooks.value.onRequestStart({ ++ id, ++ tag: rpc._tag, ++ stream: true ++ }) : Effect.void; + const scope = Context.getUnsafe(fiber.context, Scope.Scope); + yield* Scope.addFinalizerExit(scope, exit => { +- if (!entries.has(id)) return Effect.void; ++ const entry = entries.get(id); ++ if (!entry) return Effect.void; + entries.delete(id); +- return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context); ++ return sendInterrupt(id, Exit.isFailure(exit) ? Array.from(Cause.interruptors(exit.cause)) : [], context, entry.rpc._tag); + }); + const queue = yield* Queue.bounded(streamBufferSize); + entries.set(id, { +@@ -155,9 +168,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + rpc, + queue, + scope, +- context ++ context, ++ chunkCount: 0 + }); +- yield* middleware(message => options.onFromClient({ ++ yield* onStart.pipe(Effect.andThen(middleware(message => options.onFromClient({ + message, + context, + discard: false +@@ -172,7 +186,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + sampled: span.sampled + } : {}), + headers: Headers.merge(fiber.getRef(CurrentHeaders), headers) +- }).pipe(span ? Effect.withParentSpan(span, { ++ }))).pipe(span ? Effect.withParentSpan(span, { + captureStackTrace: false + }) : identity, Effect.catchCause(error => Queue.failCause(queue, error)), Effect.interruptible, Effect.forkIn(scope, { + startImmediately: true +@@ -202,7 +216,10 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + }); + }; + }; +- const sendInterrupt = (requestId, interruptors, context) => Effect.callback(resume => { ++ const sendInterrupt = (requestId, interruptors, context, tag) => (Option.isSome(hooks) && hooks.value.onRequestInterrupt ? hooks.value.onRequestInterrupt({ ++ id: requestId, ++ tag ++ }) : Effect.void).pipe(Effect.andThen(Effect.callback(resume => { + const parentFiber = Fiber.getCurrent(); + const fiber = options.onFromClient({ + message: { +@@ -216,7 +233,7 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + fiber.addObserver(() => { + resume(Effect.void); + }); +- }); ++ }))); + const write = message => { + switch (message._tag) { + case "Chunk": +@@ -224,7 +241,13 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + const requestId = message.requestId; + const entry = entries.get(requestId); + if (!entry || entry._tag !== "Queue") return Effect.void; +- return Queue.offerAll(entry.queue, message.values).pipe(supportsAck ? Effect.flatMap(() => options.onFromClient({ ++ const chunkCount = entry.chunkCount += message.values.length; ++ const onChunk = Option.isSome(hooks) && hooks.value.onRequestChunk ? hooks.value.onRequestChunk({ ++ id: requestId, ++ tag: entry.rpc._tag, ++ chunkCount ++ }) : Effect.void; ++ return Queue.offerAll(entry.queue, message.values).pipe(Effect.andThen(onChunk), supportsAck ? Effect.flatMap(() => options.onFromClient({ + message: { + _tag: "Ack", + requestId: message.requestId +@@ -239,11 +262,18 @@ export const makeNoSerialization = /*#__PURE__*/Effect.fnUntraced(function* (gro + const entry = entries.get(requestId); + if (!entry) return Effect.void; + entries.delete(requestId); ++ const onExit = Option.isSome(hooks) && hooks.value.onRequestExit ? hooks.value.onRequestExit({ ++ id: requestId, ++ tag: entry.rpc._tag, ++ stream: entry._tag === "Queue", ++ exit: message.exit ++ }) : Effect.void; + if (entry._tag === "Effect") { +- entry.resume(message.exit); +- return Effect.void; ++ return onExit.pipe(Effect.andThen(Effect.sync(() => { ++ entry.resume(message.exit); ++ }))); + } +- return message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause); ++ return onExit.pipe(Effect.andThen(message.exit._tag === "Success" ? Queue.end(entry.queue) : Queue.failCause(entry.queue, message.exit.cause))); + } + case "Defect": + { +@@ -598,7 +628,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun + // `parser` is replaced on every connect, and a stateful serialization + // encodes against the connection it is writing to, so the ping is encoded + // when it is sent rather than once up front. +- const pinger = yield* makePinger(Effect.suspend(() => writer.write(parser.encode(constPing)))); ++ const pinger = yield* makePinger(Effect.suspend(() => writer.write(parser.encode(constPing))), Option.isSome(hooks) ? hooks.value : undefined); + let currentError; + const broadcast = response => Effect.forEach(clientIds, clientId => writeResponse(clientId, response)); + const broadcastError = error => { +@@ -618,8 +648,7 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun + body: () => { + const response = responses[i++]; + if (response._tag === "Pong") { +- pinger.onPong(); +- return Effect.void; ++ return pinger.onPong; + } + if (Object.hasOwn(response, "requestId")) { + const requestId = response.requestId; +@@ -664,12 +693,12 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun + yield* processData(frames[i]); + } + } +- }).pipe(Effect.scoped, Effect.raceFirst(Effect.flatMap(pinger.timeout, () => Effect.fail(new Socket.SocketError({ ++ }).pipe(Effect.scoped, 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({ + reason: new Socket.SocketOpenError({ + kind: "Timeout", + cause: new Error("ping timeout") + }) +- }))))); ++ }))))))); + }).pipe(Option.isSome(hooks) ? Effect.ensuring(hooks.value.onDisconnect) : identity, Effect.tapCause(cause => { + const error = Cause.findError(cause); + const hasError = Result.isSuccess(error); +@@ -710,20 +739,28 @@ export const makeProtocolSocket = options => Protocol.make(Effect.fnUntraced(fun + }; + })); + const defaultRetryPolicy = /*#__PURE__*/Schedule.min([/*#__PURE__*/Schedule.exponential(500, 1.5), /*#__PURE__*/Schedule.spaced(5000)]); +-const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing) { ++const makePinger = /*#__PURE__*/Effect.fnUntraced(function* (writePing, hooks) { + let recievedPong = true; ++ let missedPongs = 0; + const latch = Latch.makeUnsafe(); + const reset = () => { + recievedPong = true; ++ missedPongs = 0; + latch.closeUnsafe(); + }; +- const onPong = () => { ++ const onPong = Effect.sync(() => { + recievedPong = true; +- }; ++ missedPongs = 0; ++ }).pipe(Effect.andThen(hooks?.onPong ?? Effect.void)); + yield* Effect.suspend(() => { +- if (!recievedPong) return latch.open; ++ if (!recievedPong) { ++ missedPongs += 1; ++ if (missedPongs >= 3) return latch.open; ++ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing)); ++ } + recievedPong = false; +- return writePing; ++ missedPongs = 0; ++ return (hooks?.onPing ?? Effect.void).pipe(Effect.andThen(writePing)); + }).pipe(Effect.delay("5 seconds"), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped); + return { + timeout: latch.await, +@@ -874,6 +911,11 @@ export const makeProtocolWorker = options => Protocol.make(Effect.fnUntraced(fun + * @since 4.0.0 + */ + export const layerProtocolWorker = /*#__PURE__*/flow(makeProtocolWorker, /*#__PURE__*/Layer.effect(Protocol)); ++/** ++ * @since 4.0.0 ++ * @category RequestHooks ++ */ ++export class RequestHooks extends /*#__PURE__*/Context.Service()("effect/rpc/RpcClient/RequestHooks") {} + /** + * Represents optional client protocol hooks that run when a transport connects + * and disconnects. +diff --git a/src/unstable/http/HttpClientResponse.ts b/src/unstable/http/HttpClientResponse.ts +index cbf047f..c7d5cc2 100644 +--- a/src/unstable/http/HttpClientResponse.ts ++++ b/src/unstable/http/HttpClientResponse.ts +@@ -321,7 +321,7 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo + if (this.cachedCookies) { + return this.cachedCookies + } +- return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie()) ++ return this.cachedCookies = Cookies.fromSetCookie(this.source.headers.getSetCookie?.() ?? []) + } + + get remoteAddress(): Option.Option { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9cbc23e976e64ffabcd8adb94df74f84e0ea78b..d1d66404ef4483b88a11186c169db2f6bd488b48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: default: '@effect/openapi-generator': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112 + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115 '@effect/tsgo': specifier: 0.41.0 version: 0.41.0 @@ -45,6 +45,9 @@ overrides: '@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-linux-x64-musl': '-' '@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-win32-arm64': '-' '@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-win32-x64': '-' + '@alchemy.run/sigil>react': '-' + '@alchemy.run/sigil>react-reconciler': '-' + '@alchemy.run/sigil>scheduler': '-' '@clerk/backend': 3.18.1 '@clerk/clerk-js': 6.32.1 '@clerk/clerk-js>@base-org/account': '-' @@ -58,11 +61,11 @@ overrides: '@clerk/expo': 4.6.8 '@clerk/react': 6.16.1 '@clerk/shared': 4.33.0 - '@effect/atom-react': 4.0.0-rc.112 - '@effect/platform-node': 4.0.0-rc.112 - '@effect/platform-node-shared': 4.0.0-rc.112 - '@effect/sql-pg': 4.0.0-rc.112 - '@effect/vitest': 4.0.0-rc.112 + '@effect/atom-react': 4.0.0-rc.115 + '@effect/platform-node': 4.0.0-rc.115 + '@effect/platform-node-shared': 4.0.0-rc.115 + '@effect/sql-pg': 4.0.0-rc.115 + '@effect/vitest': 4.0.0-rc.115 '@effect/vitest>vitest': '-' '@expo/dom-webview': 57.0.1 '@expo/metro-config': 57.0.12 @@ -72,7 +75,7 @@ overrides: '@tailwindcss/oxide': 4.3.3 '@tailwindcss/vite': 4.3.3 '@types/node': 24.12.4 - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 expo-router: 57.0.17 expo-sharing>@expo/config-plugins: 57.0.9 expo-sharing>@expo/config-types: 57.0.2 @@ -86,7 +89,7 @@ packageExtensionsChecksum: sha256-k/dT9NFDl5hihRPaoFKeY11hzyutMFs5psfZLFiKJic= patchedDependencies: '@clerk/expo@4.6.8': a82bb41039ee88a290a87d4ab58be7be4c49fa338603b17ea646e1ec140a1cfb - '@effect/vitest@4.0.0-rc.112': a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b + '@effect/vitest@4.0.0-rc.115': 172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902 '@expo/metro-config@57.0.12': 96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2 '@ff-labs/fff-node@0.9.4': c4e3cc2420ceb9dc650f9d189e9c24baf7e83f342998bacda5f459a4ce7927a8 '@legendapp/list@3.3.5': 680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806 @@ -95,7 +98,7 @@ patchedDependencies: '@react-native-menu/menu@2.0.0': f63d256bf6a97a873b5e628eb595bd6ef0075ddd5bdd890fc920f7a6024290dd '@react-navigation/native-stack@7.17.6': e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552 dbus-next@0.10.2: cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4 - effect@4.0.0-rc.112: 8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2 + effect@4.0.0-rc.115: 0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5 expo-audio@57.0.4: fa9a3e0442ed395d4071bb406e08c3a471c9a84700bdfa0b9ad7ff144c96041a expo-sharing@57.0.17: 8d2e3b10eb3f52036a9a086800180ec6cebf3b75bccc5b1775117a7244d4ac45 expo-widgets@57.0.15: 319a9ded5db49c5b5215c511a138b33f44c7ea2972eb418192e8d5342fe75ce6 @@ -138,8 +141,8 @@ importers: specifier: 0.13.0 version: 0.13.0 '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@napi-rs/keyring': specifier: ^1.3.0 version: 1.3.0 @@ -162,8 +165,8 @@ importers: specifier: 0.10.2 version: 0.10.2(patch_hash=cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4) effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) electron: specifier: 44.1.0 version: 44.1.0 @@ -184,8 +187,8 @@ importers: version: 0.1.44(react@19.2.6) devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -233,8 +236,8 @@ importers: specifier: 4.6.8 version: 4.6.8(patch_hash=a82bb41039ee88a290a87d4ab58be7be4c49fa338603b17ea646e1ec140a1cfb)(dbc31631339ce74330e188d5d7a88158) '@effect/atom-react': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(react@19.2.3)(scheduler@0.27.0) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(react@19.2.3)(scheduler@0.27.0) '@expo-google-fonts/dm-sans': specifier: ^0.4.2 version: 0.4.2 @@ -311,8 +314,8 @@ importers: specifier: 8.0.3 version: 8.0.3 effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) expo: specifier: ~57.0.18 version: 57.0.18(41fd11498a34454c91128cdad32f22f8) @@ -474,8 +477,8 @@ importers: version: 1.11.0(patch_hash=17d92be2eec71bb6396b402e8d034968e54b28746876d7977cb3139655f42b90)(@expo/metro-config@57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@7.0.2)(utf-8-validate@6.0.6))(metro-cache@0.84.5)(metro-transform-worker@0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(metro@0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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.3) devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@pierre/trees': specifier: 1.0.0-beta.4 version: 1.0.0-beta.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -501,11 +504,11 @@ importers: specifier: ^0.3.260 version: 0.3.260(@anthropic-ai/sdk@0.93.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3) '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/platform-node-shared': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(utf-8-validate@6.0.6) '@ff-labs/fff-node': specifier: 0.9.4 version: 0.9.4(patch_hash=c4e3cc2420ceb9dc650f9d189e9c24baf7e83f342998bacda5f459a4ce7927a8) @@ -516,11 +519,8 @@ importers: specifier: 8.0.3 version: 8.0.3 effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - msgpackr-extract: - specifier: 3.0.4 - version: 3.0.4 + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) node-pty: specifier: ^1.1.0 version: 1.1.0 @@ -538,8 +538,8 @@ importers: version: 3.4.0 devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@t3tools/contracts': specifier: workspace:* version: link:../../packages/contracts @@ -598,8 +598,8 @@ importers: specifier: ^3.2.2 version: 3.2.2(react@19.2.6) '@effect/atom-react': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(react@19.2.6)(scheduler@0.27.0) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(react@19.2.6)(scheduler@0.27.0) '@formkit/auto-animate': specifier: ^0.9.0 version: 0.9.0 @@ -655,8 +655,8 @@ importers: specifier: ^4.0.2 version: 4.0.2 effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) hast-util-to-html: specifier: ^9.0.5 version: 9.0.5 @@ -707,11 +707,11 @@ importers: version: 5.0.14(@types/react@19.2.16)(react@19.2.6)(use-sync-external-store@1.6.0(react@19.2.6)) devDependencies: '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@rolldown/plugin-babel': specifier: ^0.2.0 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.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.2.5) @@ -776,8 +776,8 @@ importers: specifier: 3.18.1 version: 3.18.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@effect/sql-pg': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@noble/curves': specifier: 'catalog:' version: 1.9.1 @@ -794,24 +794,24 @@ importers: specifier: workspace:* version: link:../../packages/shared alchemy: - specifier: 2.0.0-beta.76 - version: 2.0.0-beta.76(197b68e0d20fdf20cf352009eca17c9f) + specifier: 2.0.0-beta.78 + version: 2.0.0-beta.78(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.2.16)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(04a2b37736bdb04e55e63e86c7865f24))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@6.0.3)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) drizzle-orm: specifier: 1.0.0-rc.5-ab785fc - version: 1.0.0-rc.5-ab785fc(8ab70e2706da13c78d64d8a92fef1884) + version: 1.0.0-rc.5-ab785fc(04a2b37736bdb04e55e63e86c7865f24) effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@cloudflare/workers-types': specifier: ^4.20260601.1 version: 4.20260604.1 '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -823,23 +823,23 @@ importers: version: '@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0)' vite-plus: specifier: 'catalog:' - version: 0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0) + version: 0.3.0(@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) oxlint-plugin-t3code: dependencies: '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@oxlint/plugins': specifier: ^1.63.0 version: 1.68.0 effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) vite-plus: specifier: 'catalog:' version: 0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0) @@ -853,8 +853,8 @@ importers: specifier: workspace:* version: link:../shared effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) mdast-util-directive: specifier: ^3.1.0 version: 3.1.0 @@ -872,8 +872,8 @@ importers: version: 11.0.5 devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) micromark-util-types: specifier: ^2.0.2 version: 2.0.2 @@ -884,12 +884,12 @@ importers: packages/contracts: dependencies: effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) vite-plus: specifier: 'catalog:' version: 0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0) @@ -897,18 +897,18 @@ importers: packages/effect-acp: dependencies: effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/openapi-generator': specifier: 'catalog:' - version: 4.0.0-rc.112(@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(encoding@0.1.13) + version: 4.0.0-rc.115(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(encoding@0.1.13) '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -919,18 +919,18 @@ importers: packages/effect-codex-app-server: dependencies: effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/openapi-generator': specifier: 'catalog:' - version: 4.0.0-rc.112(@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(encoding@0.1.13) + version: 4.0.0-rc.115(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(encoding@0.1.13) '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -950,8 +950,8 @@ importers: specifier: workspace:* version: link:../contracts effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) jose: specifier: 'catalog:' version: 6.2.2 @@ -960,11 +960,11 @@ importers: version: 2.9.0 devDependencies: '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -981,15 +981,15 @@ importers: specifier: workspace:* version: link:../shared effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -1003,12 +1003,12 @@ importers: specifier: workspace:* version: link:../shared effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/node': specifier: 24.12.4 version: 24.12.4 @@ -1019,8 +1019,8 @@ importers: scripts: dependencies: '@effect/platform-node': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) '@electron/asar': specifier: ^3.4.1 version: 3.4.1 @@ -1034,8 +1034,8 @@ importers: specifier: workspace:* version: link:../packages/tailscale effect: - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) pngjs: specifier: 7.0.0 version: 7.0.0 @@ -1044,8 +1044,8 @@ importers: version: 0.34.5 devDependencies: '@effect/vitest': - specifier: 4.0.0-rc.112 - version: 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + specifier: 4.0.0-rc.115 + version: 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@types/pngjs': specifier: 6.0.5 version: 6.0.5 @@ -1071,17 +1071,13 @@ packages: resolution: {integrity: sha512-XeZW1CcDF2GMbH4wejW6xBRI2QCOgnkVYUnxoeDadB1mf85riL2bMUeDoh+6gJ/r4mjNfzUPW8OjLjvwTP0u1Q==} engines: {node: '>=18'} - '@alcalzone/ansi-tokenize@0.2.5': - resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} - engines: {node: '>=18'} - - '@alchemy.run/cloudflare-runtime@2.0.0-beta.76': - resolution: {integrity: sha512-rH5BFh0Xq7aExpSpITyQbC+Jqfc9XgwJXidHVHTi1tNRC6/KAWg4tOzBfwiFIxljFLLYcApzlYFvLa/fTYcEjw==} + '@alchemy.run/cloudflare-runtime@2.0.0-beta.78': + resolution: {integrity: sha512-fsNiicISo7gOFPwrfAbRQAfB8RUSwfsFtgb7n54NSinqARxiULJ4vCyn7RuLrZ9d32S0wt6/QwuNAeliGvulfw==} peerDependencies: - '@distilled.cloud/cloudflare': 1.0.0-rc.8 - '@effect/platform-bun': '>=4.0.0-rc.112 || >=4.0.0' - '@effect/platform-node': 4.0.0-rc.112 - effect: 4.0.0-rc.112 + '@distilled.cloud/cloudflare': 1.0.0-rc.12 + '@effect/platform-bun': '>=4.0.0-rc.115 || >=4.0.0' + '@effect/platform-node': 4.0.0-rc.115 + effect: 4.0.0-rc.115 rolldown: 1.2.5 vite: ^7.0.0 || ^8.0.0 peerDependenciesMeta: @@ -1094,13 +1090,25 @@ packages: vite: optional: true - '@alchemy.run/floci@2.0.0-beta.76': - resolution: {integrity: sha512-UIKd+Hki3t5seDpLfyRBwWiNukKlbAqDCTOYBD+n49b/WQIgEWHhYXzGtnwC7OY/b3KAv5p7gsdn8IpPnRXR8g==} + '@alchemy.run/floci@2.0.0-beta.78': + resolution: {integrity: sha512-f+XDNleOUF/OU2GKMGGz8x674Ejg/cUf+xKeNByrTNok8OYFN8kO1Cev9gFiFB3JZjW6o6hARBb3MDEuYRAyDg==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@alchemy.run/node-utils@2.0.0-beta.76': - resolution: {integrity: sha512-KUAlGdoeWeMEToUP1V3I+mEf6FVzUjU+6Tc8savNvMsXN9t3uwZVqD1FeMzTMzMTJJijjxVljQTCtyoeE9W43w==} + '@alchemy.run/node-utils@2.0.0-beta.78': + resolution: {integrity: sha512-tNp202VlDbN7ONlx7Zv7dDbicZerZUOzyfi1RNtTH/POXe+BaDA+Tl5CvhNCsn3l/adWpqNc/3jkQIh47K1Q0w==} + + '@alchemy.run/sigil@0.0.0-alpha.11': + resolution: {integrity: sha512-JzaCBeRu9kY0qWC8JKkrierstImkrK77dl+7l0RvCTR+7uhOJECL2VxmjhJ1blea+mmbYUVob8OXOH5r8Mqfpw==} + engines: {node: '>=22'} + peerDependencies: + '@types/react': '>=19.2.0' + react-devtools-core: '>=6.1.2' + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true '@anthropic-ai/claude-agent-sdk@0.3.260': resolution: {integrity: sha512-PmABtP4Rwd6l95itQrqzguv6rS9uACqikPB9g8BPeWRKZOpy3xpEOjJLYauof3BFk2wNZnfhr0Ttx8ttcZzq0w==} @@ -1305,6 +1313,10 @@ packages: resolution: {integrity: sha512-992QrTO7G9qCvKD0fx1rMlqcL14plUcRAbwmqqYVsuF3GrqcvlAL9qxR+baMafarEZ+l7DUQ5lCMmt5mbMhF7g==} engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.974.5': + resolution: {integrity: sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-locate-window@3.965.5': resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} @@ -1807,18 +1819,10 @@ packages: resolution: {integrity: sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==} engines: {node: '>= 20.12.0'} - '@clack/core@1.4.3': - resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} - engines: {node: '>= 20.12.0'} - '@clack/prompts@1.6.0': resolution: {integrity: sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==} engines: {node: '>= 20.12.0'} - '@clack/prompts@1.7.0': - resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} - engines: {node: '>= 20.12.0'} - '@clerk/backend@3.18.1': resolution: {integrity: sha512-JjaibgZ9OuYE/tcJUgU7w3c83KdCooHNkt9OBjKznbWUuTXI0lcZQQWyy4ZDw3kB1uszeDfs1WGbsOvVkZA/aQ==} engines: {node: '>=20.9.0'} @@ -1935,32 +1939,32 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260704.1': - resolution: {integrity: sha512-XO+vvdhhTNZSsIWCkZ+JaE/JrFUmQAB0H0y/sVkAf32xa2TYBRvFUMwjSqf6WxtlxcKPQvmbLfpO/UQ0l/q4eQ==} + '@cloudflare/workerd-darwin-64@1.20260901.1': + resolution: {integrity: sha512-5nJCpnclV6cc5v3aZOewu+djFvNvm9A/owQ+WJ2G1450roeFHfZGsyW7vVjSRWx3v2iykfkviyJfGm9ApeFDGg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260704.1': - resolution: {integrity: sha512-6iI7nbOOO8PzEQ6UZVBZB/hv95m8jl0yvyjMuWrF5cJbiLb5zPw3KnpqvGi+aeOs2ZmUkc81i1FWKfXwLXzPRA==} + '@cloudflare/workerd-darwin-arm64@1.20260901.1': + resolution: {integrity: sha512-nLwfUVoYmFNW1Ntp0BfZ2K1UWIll4zTTYP8Ni7NQnyrNkTnFeU/prrllWtnw7OG8Z/jyaEAAFaDFEBobrNTU3A==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260704.1': - resolution: {integrity: sha512-3mT0YHtxT7eLjghu3hKSJDUQoz+AYv8FM43nLPYhM0YiHOxr8OlmvnCb2Lp7v/U3bwd3Gnx7WEqjSppR583mGg==} + '@cloudflare/workerd-linux-64@1.20260901.1': + resolution: {integrity: sha512-wzCO0cMrFLRRs6bG5KXDpLSe70GpzpsxPjxwBzQngQOfyI2cxs5i4Rb5rDB0GG8E19feZEhjGXcHgY9+5Lq8YA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260704.1': - resolution: {integrity: sha512-Opo7cPTPg4x0WwK+eZSDszCyFLKQkOGNCWxF005HRTJ5SJH8h0K9KyrC1k4LBwx3haXSVi+E1eGqo1gZ1Hmhkg==} + '@cloudflare/workerd-linux-arm64@1.20260901.1': + resolution: {integrity: sha512-aBk82+sSphMa6uR6h/CFN/GXmELJ2YOgQKYSsOsCTvbVLvHjclmyoEdLTY5FEImvo1ch1uXpGQgTjI8/suHGEg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260704.1': - resolution: {integrity: sha512-a97Ecnzhy04x3U052VKPCNp863F7Wf00WY7Ga5P0SbtYvaO1PDzylsHrvFMPKeiDFcOwqiredawmJ+v6bhIgeQ==} + '@cloudflare/workerd-windows-64@1.20260901.1': + resolution: {integrity: sha512-3oJnCV7mWwzqmqz+3E+KYLbw1FylH+8n+p84srWv9MEsY9II1QuKiRKVf3CQTIdTDb6rkr5fCuRtkmLgRpAsNg==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -2026,50 +2030,60 @@ packages: '@types/react': optional: true - '@distilled.cloud/aws@1.0.0-rc.8': - resolution: {integrity: sha512-eL4tRACU4TSykk/6+ItwUTZs93r3tRlrBn36ohqaUxqYYOfmssYlt/SLCzos4nlLgCxb+1T6BAstgYC848v1EQ==} + '@distilled.cloud/aws@1.0.0-rc.12': + resolution: {integrity: sha512-L4TTEwMKB1ymXbYUqvYeoy5UWgmJtqQSzry2qWtAvD2ccwVGy0F7cFViEIYQk7boF4ZIP6SfhAls4+y1fVIi/g==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/axiom@1.0.0-rc.8': - resolution: {integrity: sha512-lczeM0FPuF1mLZu7V8vcj8Klm9b1VSo4A75PP2a4km/cjphDl9LKamUwrSGLEY9denmqd1nn4+g2Svw1UmGpEw==} + '@distilled.cloud/axiom@1.0.0-rc.12': + resolution: {integrity: sha512-W/Kx0qKXh/RF5bJeLNr73BTLV51AFf7zsP8pG9wv2yGrA8sPj4Xu2z72sBG+TeQZIhNwA8Rh4J8GotNqH/380g==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/cloudflare@1.0.0-rc.8': - resolution: {integrity: sha512-nhEyGOaupi/JmT0PS1DEMH5Ebwu004pvQv3Emzt9MJz3mF3LTdiuAnxP86rf3jsFtfa826TDokKArVMq55OKRA==} + '@distilled.cloud/cloudflare@1.0.0-rc.12': + resolution: {integrity: sha512-ddcL4RnAx6L8gRWCnE5T1W35ZlerI7SlaRLidX726iG/K/aA+bkU0ND39y7ljJ2Eyx3zR03TfpNrgXAXc9E3ng==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/core@1.0.0-rc.8': - resolution: {integrity: sha512-baZMSaBh9kEyAqdhO+UbkvVDK+wqyI8d0UW0paSp5CqVResOl7ydHU4tCbBUOLoxOrqLRWfmImKrhW9SY1R8qw==} + '@distilled.cloud/core@1.0.0-rc.12': + resolution: {integrity: sha512-YeH/uPohGXp2qIctbqVzBtQV+bUs+K5Zdac8qIid7/t6VlwY964SALme5znRdFu/rQgrloXnaej8iTSK9RIQdA==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/fly-io@1.0.0-rc.8': - resolution: {integrity: sha512-0HqVLIpBxmuvrIrnmziz8iK39F5cBxkHlz43WR2s+tFidbPlCzmnci6gxixxiwMBCzcmiRmv57xQxuQzgfDQMw==} + '@distilled.cloud/fly-io@1.0.0-rc.12': + resolution: {integrity: sha512-ACgR8Kcx/OP8gAF+PnXYneGGZNUqyiQHrcTB3/lRcv5gQdacXhTAvreV/d0t7jclRo5BBdNxnd5TuuHpr9vDLA==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/hetzner@1.0.0-rc.8': - resolution: {integrity: sha512-CAPj912qUQXMetyFvJEc7PJnSG4DR6RBvGXCOfQcJVgGTspt/IdT3iIeIInTUf6rgFRsqoGiRfS4ywTqWoqLFA==} + '@distilled.cloud/hetzner@1.0.0-rc.12': + resolution: {integrity: sha512-G6QzOXTNply63I90IjOtNofs0nHkEd1we/fgXiOjobLZt4+sKjjNBVTAHYHGMDeidbtxw270oF9JakgT11Pzww==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/neon@1.0.0-rc.8': - resolution: {integrity: sha512-xIgxgoDyIs/G5lW8T2r4oyHpOcRzBO1wu7p46lU3ppuJ2rlJR4pmP9dF7KxStAVglr9yK3wmmmnraLoCAtd8Sg==} + '@distilled.cloud/neon@1.0.0-rc.12': + resolution: {integrity: sha512-jiypsVQCcKa9qNgG9HULXNgXj1E4FFO96Hk9p2JX6CEHca7ePldJSJEOf7roogQGC7lrnldBDCiZrxQLOapD3Q==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/planetscale@1.0.0-rc.8': - resolution: {integrity: sha512-D0mnkT2Gnk/SKWoz05rkf7+sngH8+5m5ugjQ1GycsFMfTxUVSIVUIHX9yrO5vFrTsMlNsmrMR+7a9R3ZMGCWkA==} + '@distilled.cloud/planetscale@1.0.0-rc.12': + resolution: {integrity: sha512-YCTB7soZtqzzgcCAUtrNHjAIsq92XS8cpjnbn3VU+sCQ0LnfnFGeMGJxQ/7qLHtx7Hv4+Ms8XNOs2Q5P81Skig==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@distilled.cloud/railway@1.0.0-rc.8': - resolution: {integrity: sha512-VW2YdbblVHhYww5JVtOjFlv3jBFl7xlt6/xTfkNxxgXgzJ5GYVlD3gPgBIpGy9Pcnv9rVRA6CL7QZeYeu47c9Q==} + '@distilled.cloud/prisma@1.0.0-rc.12': + resolution: {integrity: sha512-Z1KyUrhxkUt0KdxmNUd29Dtl9NizKv7HFHUuTcA1j6Ar5apUMvlR0f4lKqpliXW8Om3oVS3Wgvm+gDsxul2Ojg==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 + + '@distilled.cloud/railway@1.0.0-rc.12': + resolution: {integrity: sha512-KOXSpl7r9qTiOYabJ6wUmM418exzv6YE5BVztaqKSGMuNGP/lAqhZm709/p97Zg6vHpxhJLIgmCq00z7hRM3sQ==} + peerDependencies: + effect: 4.0.0-rc.115 + + '@distilled.cloud/stripe@1.0.0-rc.12': + resolution: {integrity: sha512-4OuZF362yU66G1jDFDgRFFv8ZNRPZ6lw8Wrd5R/isRNHpGgvggLNlKg1QXWEQaTcRzn3RBXczqQCVwQV9IRZDQ==} + peerDependencies: + effect: 4.0.0-rc.115 '@dnd-kit/accessibility@3.1.1': resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} @@ -2102,57 +2116,52 @@ packages: '@drizzle-team/brocli@0.12.0': resolution: {integrity: sha512-mlUE+rZ8CatQekLhnaiN91Iemdd+e2gFKooGlnRB3oPTL3VghLfX24dx7HrzMNeC1JrIB/0kpsfyty3f5HNfxQ==} - '@effect/atom-react@4.0.0-rc.112': - resolution: {integrity: sha512-Ksf90KQa6D4UDnMj4M84arlVKNIuwxxF2GvgXBzuaYi2LsgririsUhKQ5SYaK1euf8oIYeamEuthoZSbUQmIhw==} + '@effect/atom-react@4.0.0-rc.115': + resolution: {integrity: sha512-CUPeP6JmiGyFa4t8YSBEydXAL3kCOzs/5st0kanjqj/rqnekydrThx/l2u2HNTkhqSrQi9HLokMd8QTEpWsdDQ==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 react: '>=19.0.0 <20.0.0' scheduler: '>=0.25.0 <0.28.0' - '@effect/openapi-generator@4.0.0-rc.112': - resolution: {integrity: sha512-ZgAkEP2/8qPZKgnI5AqmBgqhrZsdMDKZXJoKn29xgElZUWCvHhdE6eSUfFtkQBRE5kQcATXOZajHl+S/Pg+8Dw==} + '@effect/openapi-generator@4.0.0-rc.115': + resolution: {integrity: sha512-/AkcQ4GdoTTa7CwkybSnKc0U0FhOCA+TAV6E93Ozz4XshgKCC2F75Zik+3EOlTfbENmvAsYNEIVrPfqupoO+ng==} hasBin: true peerDependencies: - '@effect/platform-node': 4.0.0-rc.112 - effect: 4.0.0-rc.112 + '@effect/platform-node': 4.0.0-rc.115 + effect: 4.0.0-rc.115 - '@effect/platform-bun@4.0.0-rc.112': - resolution: {integrity: sha512-Y5n2HhV/vsbrJls9ukX42RL7zqXQxISHegWFsP9njsCyDmGTnq7QYSO82rglwrLPwtTrv5dkSRTuGw4+oXxgMg==} - peerDependencies: - effect: 4.0.0-rc.112 - - '@effect/platform-node-shared@4.0.0-rc.112': - resolution: {integrity: sha512-ttjz0xKamFN7vL8pNDYVwddJLjZvqKePc05djlz2VcdaKbLsnYbtMnL1rbOfHgEnIUSHGh7FkjaN4DM1Ov81sQ==} + '@effect/platform-node-shared@4.0.0-rc.115': + resolution: {integrity: sha512-rcBwhDIfb82akJoTv7Vwh8K5x9vC/XfuePS7JjOr+z+dORXzsmKqI1BUQF27ARCN9fTAbDh7I6YvBlWhLjnqNg==} engines: {node: '>=18.0.0'} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@effect/platform-node@4.0.0-rc.112': - resolution: {integrity: sha512-/BMAcdNGQQskLmI0Zoa95KfTZkr9HV9N4NSxaSrusG6GeW6Ulp9KvZ+Rlaiw8lnOt43CXjFLdfll5/k5rxL4hQ==} + '@effect/platform-node@4.0.0-rc.115': + resolution: {integrity: sha512-mW03Wjq2FiTL5oi9yOkaKpCyUNBaduKgTk7qMHNELvC21Jq2qOAfdsfH+p+s2zmpB9w2RSa+ApODv4WjO9wQfw==} engines: {node: '>=18.0.0'} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 redis: '>=5.0.0 <7.0.0' - '@effect/sql-d1@4.0.0-rc.112': - resolution: {integrity: sha512-Wxdr6aU3pBHqhyBiybzbHmEK7qZ2w4iy0IxBgJHe9BLleYzCxObOaBQI9qq/VZSqEvc0IaOBMpbk2zh3dlPNSQ==} + '@effect/sql-d1@4.0.0-rc.115': + resolution: {integrity: sha512-o2JkGjN02NBMxwDtJbwcC4teyMiOApqN085fdVMid4FUC6ixj/WyKyPpe51QGOMQQTTl2BkXccA/IwDIywGXlA==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@effect/sql-pg@4.0.0-rc.112': - resolution: {integrity: sha512-UYUA3LAGH1Pg88Yau7eTlTLHRrIb/uTdxdPGxVcRdIjjrTzxtA7iKHR4hcmUeq5lQEcGLCopN7E4ffsAKF8vEQ==} + '@effect/sql-pg@4.0.0-rc.115': + resolution: {integrity: sha512-TLdzqBvGF/HwAKpWTw/5ih7JqVkkakVSb4aD6amzMaavFfFl4vsqqeKjSBijwuzbOMANNN0HqnEt/9fgjTsFEA==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 '@effect/sql-sqlite-bun@4.0.0-rc.112': resolution: {integrity: sha512-EqR8pWZo3VzedRvP6qo5HcfqNmFvSa+sQLWQl3oBMx2KY1FCc8NYjep79wYjNkW0qABnffrPUXCMTOncd1A+5g==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 - '@effect/sql-sqlite-do@4.0.0-rc.112': - resolution: {integrity: sha512-PewNVasimmhrdxYbNU91O0YlCcalIHOoF0H5XAWXrmzcEQrKM7kVCyb5h0gmJAZjBM4ZgWRvPY0PUOfbNmWchQ==} + '@effect/sql-sqlite-do@4.0.0-rc.115': + resolution: {integrity: sha512-7lH9h+w4DW2tI+dus4hEac5mSCy1wgiT+uw/VvjR8YhNDemd3zEFY03NkbD81ipfOpnu2QA1YwgM58ExyPlhug==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 '@effect/tsgo-darwin-arm64@0.41.0': resolution: {integrity: sha512-3iEPtcHF72yDjv7T5YpnX+Io1LDLywJb1oGG3Fp/Fth4xmqiT1Vacyz5wnPCfEWGQ6CyrlyCZSSjUxPyJ70+DQ==} @@ -2193,10 +2202,10 @@ packages: resolution: {integrity: sha512-C/U7lFM0AXsfpqRilDOgwu+llBhAo8bcdIlzgbRWf1LWlU4KZKB2UsUvBPL3qPnm+wmbCvQLeTQc4BjV9oJrcg==} hasBin: true - '@effect/vitest@4.0.0-rc.112': - resolution: {integrity: sha512-mEKh/FI64mt8JK1/v9mpOrJYdnp+UFZdRUBMEdZMiKz7klg6NPqVgg/oeAGH6wOOQc2iAPcfc2H9BbAv1KyzMQ==} + '@effect/vitest@4.0.0-rc.115': + resolution: {integrity: sha512-DJR0hfdr3HNXAkzW8AzfvUz6VmrNFLrKk9tZGDURi33faMyxkc7ZewxELMMZwGpOTGN4mfqYVbX2CXgI+ZJBeQ==} peerDependencies: - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 '@egjs/hammerjs@2.0.17': resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} @@ -3401,36 +3410,6 @@ packages: resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} engines: {node: '>=16'} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': - resolution: {integrity: sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==} - cpu: [arm64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': - resolution: {integrity: sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==} - cpu: [x64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': - resolution: {integrity: sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==} - cpu: [arm64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': - resolution: {integrity: sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==} - cpu: [arm] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': - resolution: {integrity: sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==} - cpu: [x64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': - resolution: {integrity: sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==} - cpu: [x64] - os: [win32] - '@mswjs/interceptors@0.41.9': resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} engines: {node: '>=18'} @@ -3544,17 +3523,8 @@ packages: '@nodable/entities@2.1.1': resolution: {integrity: sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} '@nornagon/put@0.0.8': resolution: {integrity: sha512-ugvXJjwF5ldtUpa7D95kruNJ41yFQDEKyF5CW4TgKJnh+W/zmlBzXXeKTyqIgwMFrkePN2JqOBqcF0M0oOunow==} @@ -4990,6 +4960,10 @@ packages: resolution: {integrity: sha512-wBXDRup6UU97VKyaiRo8AssnfStPtG0oAAfpq/bC0a1YYau8pM86YB4kM6ccoVi1mS8l/UHbn9oDM+7uozr/ug==} engines: {node: '>=18.0.0'} + '@smithy/core@3.34.1': + resolution: {integrity: sha512-dLcOUxz8YCv1RZUMKq6GbyUf95pLbrqh34bPvpCZ1+CByFF31BEAFewZjsGCnVsZTKdThNENfGyAgk2TJqVwSw==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.3.8': resolution: {integrity: sha512-5cAM+KZC02sTqDt6NaLXyu50M/GNMd1eTzDVR8Lb0BBsVtu7RWHo47VPPEEv1vt3Yub6uzr+M5FHC+GtoT0USg==} engines: {node: '>=18.0.0'} @@ -5002,16 +4976,12 @@ packages: resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/node-config-provider@4.4.6': - resolution: {integrity: sha512-M+gG6eQ0y073mSmNB+erRXJvwpsqsN72ol2w6vcd8FEKeG7pqYK0JvzfVqONkPj2ElBB2pg+cU13I850b//Wag==} - engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.7.7': resolution: {integrity: sha512-ZAFvHXrEk6K180EVhmZVg8GU5pUH5BSFqRs27JW3j1qEFx9YyYwWFx17x/MHcjALYimGAji7qEOlF1++be+G5A==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.5.6': - resolution: {integrity: sha512-In8gYD2R66EKlGAq9QrNKVrMOGaGBD7LUNp2kUjeQ4V9zNktFIXBPmrCySr4YYo+jVeVL6CnWj26sOamcF0qIg==} + '@smithy/shared-ini-file-loader@4.7.2': + resolution: {integrity: sha512-XsIDj5gVG4YRxGS4n4TiBDAogPWRHXKZyor6JW/sEuaa/7BvKADe9j45jI2dPYCnYbKkLBmbZ4qN9ns0sH+kMQ==} engines: {node: '>=18.0.0'} '@smithy/signature-v4@5.4.6': @@ -5022,8 +4992,12 @@ packages: resolution: {integrity: sha512-YupL0ZWmFtJexUN2cHzkvvF/b9pKrtAIfT1o7/oY/Ppu8IYeZ+lDPM5vZdQJaSeA132dJCqojjGC9NhXeF71VQ==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.4.6': - resolution: {integrity: sha512-V6ApAGvCQnb7Wy1Sy60AQc+7UOEaNQxvAXBLdMi5Zzm66cmX0srvfAxDmg7BGuJ+9H9ez0PPWS/AeFgWxwGavA==} + '@smithy/types@4.18.0': + resolution: {integrity: sha512-CgB6HHWer/vrKps24ulRIbpcpb7K4xAU7SkZ7YHzBPlwHsvsrCJFEXK421s+cJzX+ZrqtA/TuU5w1HzI7k9N8A==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.6.2': + resolution: {integrity: sha512-wTQX1hPfElIqY6AzM/s6c4UgpMxCL4MwJ5u6340ksLPq78lur6Y+keheIDk5gMX4G3KFh4MERcDt6xhRq+ie1Q==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': @@ -6187,25 +6161,25 @@ packages: ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - alchemy@2.0.0-beta.76: - resolution: {integrity: sha512-XpcsXWk38YV9nO0v7s5PPjlMVtF8OQPeP8YqLu1iMzrq33bwViEOqkwQn3cgFiD7/QsnNcCju+hCXyeBwXrdtg==} + alchemy@2.0.0-beta.78: + resolution: {integrity: sha512-Dv3IstS7W5AFPgU4T2PKe/SRrtqfKnMHYEKaWWCjVneE8VTl6Zz7M/oG/jz1YSmzdPaq3YinQlRQK3ZFzhTmkw==} hasBin: true peerDependencies: - '@alchemy.run/frontend-frameworks': 2.0.0-beta.76 + '@alchemy.run/frontend-frameworks': 2.0.0-beta.78 '@aws/durable-execution-sdk-js': ^2.1.0 - '@effect/platform-bun': '>=4.0.0-rc.112 || >=4.0.0' - '@effect/platform-node': 4.0.0-rc.112 - '@effect/sql-mysql2': '>=4.0.0-rc.112 || >=4.0.0' - '@effect/sql-pg': 4.0.0-rc.112 + '@effect/platform-bun': '>=4.0.0-rc.115 || >=4.0.0' + '@effect/platform-node': 4.0.0-rc.115 + '@effect/sql-mysql2': '>=4.0.0-rc.115 || >=4.0.0' + '@effect/sql-pg': 4.0.0-rc.115 '@vercel/nft': ^1.10.2 drizzle-kit: 1.0.0-rc.5-ab785fc drizzle-orm: 1.0.0-rc.5-ab785fc - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 mongodb: ^6.10.0 mysql2: ^3.24.2 pg: ^8.22.0 vite: ^8.0.7 - ws: ^8.20.0 + ws: ^8.21.0 peerDependenciesMeta: '@alchemy.run/frontend-frameworks': optional: true @@ -6250,10 +6224,6 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -6290,6 +6260,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + app-builder-lib@26.15.6: resolution: {integrity: sha512-lN6BliNJLnS2ruBdYd1j1rzd2yl4ZwKqyTtAwVznIkkadOR9cFvRz/tNQ6nd824AobnFZKhcdFrpIGDnr0PRSg==} engines: {node: '>=14.0.0'} @@ -6359,10 +6332,6 @@ packages: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} - auto-bind@5.0.1: - resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - await-lock@2.2.2: resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} @@ -6576,17 +6545,17 @@ packages: caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} - capnp-es@0.0.14: - resolution: {integrity: sha512-8lWj4GJISiqRSlAJGkWpI4Azib7QY5UDIkqxeHcI7aAnXVk9SFuWxl1Fme+2HhzNANV0WTJqwUZvvXvloc3sBA==} + capnp-es@0.0.16: + resolution: {integrity: sha512-pqhhnRqGfDdgHa+rz4JVO9j1jnkyqsHRYrD4RBtIwxCknYSRG7Mjs+x3IRfd20u+ZGS0IhW2L7cDv9ZcIkCYhQ==} hasBin: true peerDependencies: - typescript: ^5.7.3 + typescript: ^5.7.3 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - capnweb@0.6.1: - resolution: {integrity: sha512-fmhV26QPd1ewf5R74h55oVZnGwIcSaRMzbfLQUy8+zOBjuTmT3KXoT8wxHvnp1m9Ht9BoUUS5ZwNLoVLfQTyBg==} + capnweb@0.12.0: + resolution: {integrity: sha512-jgZ/LMtMVTi+RVlooIslH78Gg23XbDTdvcLghWx3oz17D6u5GuJARt+uhZk/wcTo+f81eeabfnow4d3zLBj+JQ==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -6663,18 +6632,10 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -6687,10 +6648,6 @@ packages: resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} engines: {node: '>=18.20'} - cli-truncate@5.2.0: - resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} - engines: {node: '>=20'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -6722,10 +6679,6 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} - code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -6822,10 +6775,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cookie-es@1.2.3: resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} @@ -7074,7 +7023,7 @@ packages: '@effect/sql-d1': '>=4.0.0-beta.105 || >=4.0.0' '@effect/sql-libsql': '>=4.0.0-beta.105 || >=4.0.0' '@effect/sql-mysql2': '>=4.0.0-beta.105 || >=4.0.0' - '@effect/sql-pg': 4.0.0-rc.112 + '@effect/sql-pg': 4.0.0-rc.115 '@effect/sql-pglite': '>=4.0.0-beta.105 || >=4.0.0' '@effect/sql-sqlite-bun': '>=4.0.0-beta.105 || >=4.0.0' '@effect/sql-sqlite-do': '>=4.0.0-beta.105 || >=4.0.0' @@ -7105,7 +7054,7 @@ packages: arktype: '>=2.0.0' better-sqlite3: '>=9.3.0' bun-types: '*' - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 expo-sqlite: '>=14.0.0' minipg: '>=0.2.0' mssql: ^11.0.1 @@ -7232,8 +7181,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@4.0.0-rc.112: - resolution: {integrity: sha512-wXxwuh1Ywnv4cPRM3Wfa0vDwuOHnZ1TsTgHJkG9XgzND6inhBH9n1vBxhg3iIXOia/OrpmvVmd3lrD4vq6bF3A==} + effect@4.0.0-rc.115: + resolution: {integrity: sha512-ogYulZ5ffeOzrJqQrG0XOkDO5lKn2s9KNHhoxJy/6wKUkF0i12dlVXWA9TgsgQ+zV/JzizyG0+XMPepZEQX6vw==} ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} @@ -7312,10 +7261,6 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -7341,9 +7286,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-toolkit@1.47.0: - resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} - es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -7371,10 +7313,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -7750,10 +7688,6 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-check@4.9.0: - resolution: {integrity: sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg==} - engines: {node: '>=12.17.0'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -7761,10 +7695,6 @@ packages: resolution: {integrity: sha512-Ywe6jodPTWOTL9/k0bV7gdfP8twKL5Y8I8CZ933fAY5gBekICZSUQTbyH6ut2NZCNyB05mSUwAuEqdEIaOOlDQ==} engines: {node: '>=6.0.0'} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -7789,21 +7719,18 @@ packages: fast-xml-builder@1.2.0: resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + fast-xml-parser@5.11.1: + resolution: {integrity: sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==} + hasBin: true + fast-xml-parser@5.7.3: resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} hasBin: true - fast-xml-parser@5.8.0: - resolution: {integrity: sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==} - hasBin: true - fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fb-dotslash@0.5.8: resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} engines: {node: '>=20'} @@ -7830,6 +7757,9 @@ packages: ffi-rs@1.3.2: resolution: {integrity: sha512-4s8dX9VbBw/jd5NOuE3EJRqXaIVdjMyiumeeDzrOhtjQRwp6Bz2za7iksWXTnvTQKV/tTdm1s1w7mObe92zPjQ==} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + filelist@1.0.6: resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} @@ -7978,10 +7908,6 @@ packages: github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -8018,6 +7944,10 @@ packages: graphmatch@1.1.1: resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + graphql@16.14.1: resolution: {integrity: sha512-cQOsSMS/IrDz82PVyRDvf/Q1F/bRbBVjJlh+xYOkI1qw2bWRvWGiWc+m2O0d6l4Bt1fyY+8kzJ8JFWGJqNeDBg==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -8195,10 +8125,6 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -8206,19 +8132,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ink@6.8.0: - resolution: {integrity: sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==} - engines: {node: '>=20'} - peerDependencies: - '@types/react': '>=19.0.0' - react: '>=19.0.0' - react-devtools-core: '>=6.1.2' - peerDependenciesMeta: - '@types/react': - optional: true - react-devtools-core: - optional: true - inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -8271,30 +8184,13 @@ packages: engines: {node: '>=20'} hasBin: true - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-in-ci@2.0.0: - resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} - engines: {node: '>=20'} - hasBin: true - is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -8326,6 +8222,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-unsafe@2.0.2: + resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -8771,10 +8670,6 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - metro-babel-transformer@0.84.4: resolution: {integrity: sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} @@ -9008,11 +8903,6 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mime@4.1.0: - resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} - engines: {node: '>=16'} - hasBin: true - mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} @@ -9116,13 +9006,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msgpackr-extract@3.0.4: - resolution: {integrity: sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==} - hasBin: true - - msgpackr@2.1.0: - resolution: {integrity: sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ==} - msw@2.12.11: resolution: {integrity: sha512-dVg20zi2I2EvnwH/+WupzsOC2mCa7qsIhyMAWtfRikn6RKtwL9+7SaF1IQ5LyZry4tlUtf6KyTVhnlQiZXozTQ==} engines: {node: '>=18'} @@ -9197,10 +9080,6 @@ packages: resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} engines: {node: '>= 6.13.0'} - node-gyp-build-optional-packages@5.2.2: - resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} - hasBin: true - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -9285,9 +9164,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - obug@2.1.3: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} @@ -9444,10 +9320,6 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - patch-console@2.0.0: - resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -9459,6 +9331,10 @@ packages: resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} engines: {node: '>=14.0.0'} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -9502,19 +9378,10 @@ packages: pg-connection-string@2.14.0: resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} - pg-cursor@2.22.0: - resolution: {integrity: sha512-knzXLKqarTjOvb3qDSW0JiGsazmxwEKXrqHfWRte7XUsOYccQRafn3BLnQobWwInkzFJSyOej8y8cQRh2z3kGw==} - peerDependencies: - pg: ^8 - pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - pg-pool@3.14.0: resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} peerDependencies: @@ -9527,10 +9394,6 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg-types@4.1.0: - resolution: {integrity: sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg==} - engines: {node: '>=10'} - pg@8.23.0: resolution: {integrity: sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==} engines: {node: '>= 16.0.0'} @@ -9602,37 +9465,18 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - postgres-bytea@1.0.1: resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} engines: {node: '>=0.10.0'} - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - postject@1.0.0-alpha.6: resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} engines: {node: '>=14.0.0'} @@ -9756,9 +9600,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@8.4.0: - resolution: {integrity: sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==} - pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} @@ -9774,9 +9615,6 @@ packages: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} @@ -9968,12 +9806,6 @@ packages: '@types/react': optional: true - react-reconciler@0.33.0: - resolution: {integrity: sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^19.2.0 - react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -10167,10 +9999,6 @@ packages: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -10194,10 +10022,6 @@ packages: rettime@0.10.1: resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -10229,9 +10053,6 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -10418,10 +10239,6 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slice-ansi@8.0.0: - resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} - engines: {node: '>=20'} - slugify@1.6.9: resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} engines: {node: '>=8.0.0'} @@ -10477,10 +10294,6 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -10580,6 +10393,9 @@ packages: strnum@2.3.0: resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + strnum@2.4.2: + resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} + structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} @@ -10651,10 +10467,6 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} - terminal-size@4.0.1: - resolution: {integrity: sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==} - engines: {node: '>=18'} - terser@5.48.0: resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} @@ -11313,12 +11125,8 @@ packages: engines: {node: '>=8'} hasBin: true - widest-line@6.0.0: - resolution: {integrity: sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==} - engines: {node: '>=20'} - - workerd@1.20260704.1: - resolution: {integrity: sha512-GDZ0jzIYDYfN7rCt/oFJv4BG3QJ+4IS2kfRvxEMY9VKIfPhzo63PH69Ir7ug8LfORCgCtmfkiQVXrqbot7pZTQ==} + workerd@1.20260901.1: + resolution: {integrity: sha512-Z5PVprrPRlV70+RzgbFpzoPpjCLGtErhsQ9Ahe96pe7hJGMsmexTU4+rhUPH+2Sguf7vRAxFFsqXpkIleRFSPA==} engines: {node: '>=16'} hasBin: true @@ -11349,18 +11157,6 @@ packages: utf-8-validate: optional: true - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.21.3: resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} @@ -11381,6 +11177,10 @@ packages: resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} engines: {node: '>=16.0.0'} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + xml2js@0.4.23: resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} engines: {node: '>=4.0.0'} @@ -11463,9 +11263,6 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - yoga-layout@3.2.1: - resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - yuku-codegen@0.5.48: resolution: {integrity: sha512-p7HxD5Xl4jzDzqMrGePAOeSHmRY4g58h4HuGq15weQFPxuPWd/W6e7nqp/+Lea6JfpOdBwJOAyXFqIZ/J9Zfnw==} @@ -11526,27 +11323,21 @@ snapshots: dependencies: json-schema: 0.4.0 - '@alcalzone/ansi-tokenize@0.2.5': + '@alchemy.run/cloudflare-runtime@2.0.0-beta.78(@distilled.cloud/cloudflare@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(rolldown@1.2.5)(typescript@6.0.3)': dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - '@alchemy.run/cloudflare-runtime@2.0.0-beta.76(@distilled.cloud/cloudflare@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)))(@effect/platform-bun@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(rolldown@1.2.5)(typescript@7.0.2)': - dependencies: - '@alchemy.run/node-utils': 2.0.0-beta.76 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260704.1) - '@distilled.cloud/cloudflare': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + '@alchemy.run/node-utils': 2.0.0-beta.78 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260901.1) + '@distilled.cloud/cloudflare': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@puppeteer/browsers': 3.2.2(yauzl@3.4.0) - capnp-es: 0.0.14(typescript@7.0.2) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + capnp-es: 0.0.16(typescript@6.0.3) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) magic-string: 0.30.21 sharp: 0.35.4(@types/node@24.12.4) unenv: 2.0.0-rc.24 - workerd: 1.20260704.1 + workerd: 1.20260901.1 yauzl: 3.4.0 optionalDependencies: - '@effect/platform-bun': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6) - '@effect/platform-node': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) + '@effect/platform-node': 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) rolldown: 1.2.5 vite: '@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0)' transitivePeerDependencies: @@ -11554,11 +11345,19 @@ snapshots: - proxy-agent - typescript - '@alchemy.run/floci@2.0.0-beta.76(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@alchemy.run/floci@2.0.0-beta.78(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@alchemy.run/node-utils@2.0.0-beta.76': {} + '@alchemy.run/node-utils@2.0.0-beta.78': + dependencies: + chokidar: 5.0.0 + rolldown: 1.2.5 + + '@alchemy.run/sigil@0.0.0-alpha.11(@types/react@19.2.16)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + optionalDependencies: + '@types/react': 19.2.16 + react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@anthropic-ai/claude-agent-sdk@0.3.260(@anthropic-ai/sdk@0.93.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3)': dependencies: @@ -11923,6 +11722,11 @@ snapshots: '@smithy/types': 4.14.3 tslib: 2.8.1 + '@aws-sdk/types@3.974.5': + dependencies: + '@smithy/types': 4.18.0 + tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.965.5': dependencies: tslib: 2.8.1 @@ -12512,11 +12316,6 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/core@1.4.3': - dependencies: - fast-wrap-ansi: 0.2.2 - sisteransi: 1.0.5 - '@clack/prompts@1.6.0': dependencies: '@clack/core': 1.4.2 @@ -12524,13 +12323,6 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.7.0': - dependencies: - '@clack/core': 1.4.3 - fast-string-width: 3.0.2 - fast-wrap-ansi: 0.2.2 - sisteransi: 1.0.5 - '@clerk/backend@3.18.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@clerk/shared': 4.33.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -12663,25 +12455,25 @@ snapshots: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260704.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260901.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260704.1 + workerd: 1.20260901.1 - '@cloudflare/workerd-darwin-64@1.20260704.1': + '@cloudflare/workerd-darwin-64@1.20260901.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260704.1': + '@cloudflare/workerd-darwin-arm64@1.20260901.1': optional: true - '@cloudflare/workerd-linux-64@1.20260704.1': + '@cloudflare/workerd-linux-64@1.20260901.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260704.1': + '@cloudflare/workerd-linux-arm64@1.20260901.1': optional: true - '@cloudflare/workerd-windows-64@1.20260704.1': + '@cloudflare/workerd-windows-64@1.20260901.1': optional: true '@cloudflare/workers-types@4.20260604.1': {} @@ -12724,58 +12516,65 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@distilled.cloud/aws@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/aws@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/credential-providers': 3.1062.0 - '@aws-sdk/types': 3.973.10 - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@smithy/shared-ini-file-loader': 4.5.6 - '@smithy/types': 4.14.3 - '@smithy/util-base64': 4.4.6 - aws4fetch: 1.0.20 - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - fast-xml-parser: 5.8.0 + '@aws-sdk/types': 3.974.5 + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@smithy/shared-ini-file-loader': 4.7.2 + '@smithy/types': 4.18.0 + '@smithy/util-base64': 4.6.2 + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) + fast-xml-parser: 5.11.1 - '@distilled.cloud/axiom@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/axiom@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/cloudflare@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/cloudflare@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/core@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/core@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) + graphql: 16.11.0 - '@distilled.cloud/fly-io@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/fly-io@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/hetzner@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/hetzner@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/neon@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/neon@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/planetscale@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/planetscale@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@distilled.cloud/railway@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@distilled.cloud/prisma@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) + + '@distilled.cloud/railway@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': + dependencies: + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) + + '@distilled.cloud/stripe@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': + dependencies: + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) '@dnd-kit/accessibility@3.1.1(react@19.2.6)': dependencies: @@ -12811,79 +12610,62 @@ snapshots: '@drizzle-team/brocli@0.12.0': {} - '@effect/atom-react@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(react@19.2.3)(scheduler@0.27.0)': + '@effect/atom-react@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(react@19.2.3)(scheduler@0.27.0)': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) react: 19.2.3 scheduler: 0.27.0 - '@effect/atom-react@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(react@19.2.6)(scheduler@0.27.0)': + '@effect/atom-react@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(react@19.2.6)(scheduler@0.27.0)': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) react: 19.2.6 scheduler: 0.27.0 - '@effect/openapi-generator@4.0.0-rc.112(@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(encoding@0.1.13)': + '@effect/openapi-generator@4.0.0-rc.115(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(encoding@0.1.13)': dependencies: - '@effect/platform-node': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + '@effect/platform-node': 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) swagger2openapi: 7.0.8(encoding@0.1.13) transitivePeerDependencies: - encoding - '@effect/platform-bun@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6)': - dependencies: - '@effect/platform-node-shared': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - optional: true - - '@effect/platform-node-shared@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6)': + '@effect/platform-node-shared@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(utf-8-validate@6.0.6)': dependencies: '@types/ws': 8.18.1 - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6)': + '@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6)': dependencies: - '@effect/platform-node-shared': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6) - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - mime: 4.1.0 + '@effect/platform-node-shared': 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(utf-8-validate@6.0.6) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) redis: 6.2.1 undici: 8.10.2 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/sql-d1@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@effect/sql-d1@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: '@cloudflare/workers-types': 5.20260907.1 - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@effect/sql-pg@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - pg: 8.23.0 - pg-connection-string: 2.14.0 - pg-cursor: 2.22.0(pg@8.23.0) - pg-pool: 3.14.0(pg@8.23.0) - pg-types: 4.1.0 - transitivePeerDependencies: - - pg-native + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) - '@effect/sql-sqlite-bun@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@effect/sql-sqlite-bun@4.0.0-rc.112(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) optional: true - '@effect/sql-sqlite-do@4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@effect/sql-sqlite-do@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) '@effect/tsgo-darwin-arm64@0.41.0': optional: true @@ -12916,9 +12698,9 @@ snapshots: '@effect/tsgo-win32-arm64': 0.41.0 '@effect/tsgo-win32-x64': 0.41.0 - '@effect/vitest@4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))': + '@effect/vitest@4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))': dependencies: - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) '@egjs/hammerjs@2.0.17': dependencies: @@ -13294,7 +13076,7 @@ snapshots: '@expo/router-server': 57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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-server@57.0.3)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 - '@expo/ws-tunnel': 2.0.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@expo/ws-tunnel': 2.0.0(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@expo/xcpretty': 4.4.4 '@react-native/dev-middleware': 0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) accepts: 1.3.8 @@ -13318,7 +13100,7 @@ snapshots: node-forge: 1.4.0 npm-package-arg: 11.0.3 ora: 3.4.0 - picomatch: 4.0.4 + picomatch: 4.0.7 pretty-format: 29.7.0 progress: 2.0.3 prompts: 2.4.2 @@ -13332,7 +13114,7 @@ snapshots: terminal-link: 2.1.1 toqr: 0.1.1 wrap-ansi: 7.0.0 - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 3.25.76 optionalDependencies: react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) @@ -13349,29 +13131,29 @@ snapshots: - typescript - utf-8-validate - '@expo/cli@57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@7.0.2)(utf-8-validate@6.0.6)': + '@expo/cli@57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@6.0.3)(utf-8-validate@6.0.6)': dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/config': 57.0.9(typescript@7.0.2) - '@expo/config-plugins': 57.0.9(typescript@7.0.2) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) '@expo/devcert': 1.2.1 '@expo/env': 2.4.3 - '@expo/image-utils': 0.11.5(typescript@7.0.2) - '@expo/inline-modules': 0.1.7(typescript@7.0.2) + '@expo/image-utils': 0.11.5(typescript@6.0.3) + '@expo/inline-modules': 0.1.7(typescript@6.0.3) '@expo/json-file': 11.0.1 '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@7.0.2)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) '@expo/metro-file-map': 57.0.2 '@expo/osascript': 2.7.1 '@expo/package-manager': 1.13.1 '@expo/plist': 0.8.1 - '@expo/prebuild-config': 57.0.15(typescript@7.0.2) - '@expo/require-utils': 57.0.5(typescript@7.0.2) + '@expo/prebuild-config': 57.0.15(typescript@6.0.3) + '@expo/require-utils': 57.0.5(typescript@6.0.3) '@expo/router-server': 57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 - '@expo/ws-tunnel': 2.0.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@expo/ws-tunnel': 2.0.0(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@expo/xcpretty': 4.4.4 '@react-native/dev-middleware': 0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) accepts: 1.3.8 @@ -13385,7 +13167,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) expo-server: 57.0.3 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -13395,7 +13177,7 @@ snapshots: node-forge: 1.4.0 npm-package-arg: 11.0.3 ora: 3.4.0 - picomatch: 4.0.4 + picomatch: 4.0.7 pretty-format: 29.7.0 progress: 2.0.3 prompts: 2.4.2 @@ -13409,7 +13191,7 @@ snapshots: terminal-link: 2.1.1 toqr: 0.1.1 wrap-ansi: 7.0.0 - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 3.25.76 optionalDependencies: react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) @@ -13431,6 +13213,26 @@ snapshots: dependencies: node-forge: 1.4.0 + '@expo/config-plugins@57.0.9(typescript@6.0.3)': + dependencies: + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/plist': 0.8.1 + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/sdk-runtime-versions': 1.0.0 + chalk: 4.1.2 + debug: 4.4.3 + getenv: 2.0.0 + glob: 13.0.6 + semver: 7.8.5 + slugify: 1.6.9 + xcode: 3.0.1 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/config-plugins@57.0.9(typescript@7.0.2)': dependencies: '@expo/config-types': 57.0.2 @@ -13452,6 +13254,23 @@ snapshots: '@expo/config-types@57.0.2': {} + '@expo/config@57.0.9(typescript@6.0.3)': + dependencies: + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/require-utils': 57.0.5(typescript@6.0.3) + deepmerge: 4.3.1 + getenv: 2.0.0 + glob: 13.0.6 + resolve-workspace-root: 2.0.1 + semver: 7.8.5 + slugify: 1.6.9 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/config@57.0.9(typescript@7.0.2)': dependencies: '@expo/config-plugins': 57.0.9(typescript@7.0.2) @@ -13498,7 +13317,7 @@ snapshots: '@expo/dom-webview@57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)': dependencies: - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) optional: true @@ -13529,6 +13348,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@expo/image-utils@0.11.5(typescript@6.0.3)': + dependencies: + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + chalk: 4.1.2 + getenv: 2.0.0 + jimp-compact: 0.16.1 + parse-png: 2.1.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/image-utils@0.11.5(typescript@7.0.2)': dependencies: '@expo/require-utils': 57.0.5(typescript@7.0.2) @@ -13555,6 +13388,14 @@ snapshots: - supports-color - typescript + '@expo/inline-modules@0.1.7(typescript@6.0.3)': + dependencies: + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/inline-modules@0.1.7(typescript@7.0.2)': dependencies: '@expo/config-plugins': 57.0.9(typescript@7.0.2) @@ -13567,6 +13408,15 @@ snapshots: '@babel/code-frame': 7.29.7 json5: 2.2.3 + '@expo/local-build-cache-provider@57.0.8(typescript@6.0.3)': + dependencies: + '@expo/config': 57.0.9(typescript@6.0.3) + chalk: 4.1.2 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/local-build-cache-provider@57.0.8(typescript@7.0.2)': dependencies: '@expo/config': 57.0.9(typescript@7.0.2) @@ -13588,12 +13438,46 @@ snapshots: dependencies: '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) anser: 1.4.10 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) stacktrace-parser: 0.1.11 optional: true + '@expo/metro-config@57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/env': 2.4.3 + '@expo/json-file': 11.0.1 + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + browserslist: 4.28.2 + chalk: 4.1.2 + debug: 4.4.3 + getenv: 2.0.0 + glob: 13.0.6 + hermes-parser: 0.36.1 + jsc-safe-url: 0.2.4 + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.15 + resolve-from: 5.0.0 + optionalDependencies: + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + optional: true + '@expo/metro-config@57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@7.0.2)(utf-8-validate@6.0.6)': dependencies: '@babel/code-frame': 7.29.7 @@ -13655,7 +13539,7 @@ snapshots: dependencies: '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) anser: 1.4.10 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) pretty-format: 29.7.0 react: 19.2.6 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) @@ -13705,6 +13589,23 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 + '@expo/prebuild-config@57.0.15(typescript@6.0.3)': + dependencies: + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/image-utils': 0.11.5(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@react-native/normalize-colors': 0.86.3 + debug: 4.4.3 + expo-modules-autolinking: 57.0.12(typescript@6.0.3) + resolve-from: 5.0.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + '@expo/prebuild-config@57.0.15(typescript@7.0.2)': dependencies: '@expo/config': 57.0.9(typescript@7.0.2) @@ -13731,6 +13632,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@expo/require-utils@57.0.5(typescript@6.0.3)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + optional: true + '@expo/require-utils@57.0.5(typescript@7.0.2)': dependencies: '@babel/code-frame': 7.29.7 @@ -13758,7 +13670,7 @@ snapshots: '@expo/router-server@57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: debug: 4.4.3 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)) expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) expo-server: 57.0.3 @@ -13795,9 +13707,9 @@ snapshots: - '@types/react' - '@types/react-dom' - '@expo/ws-tunnel@2.0.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@expo/ws-tunnel@2.0.0(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@expo/xcpretty@4.4.4': dependencies: @@ -14274,24 +14186,6 @@ snapshots: chevrotain: 10.5.0 lilconfig: 2.1.0 - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': - optional: true - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': - optional: true - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': - optional: true - '@mswjs/interceptors@0.41.9': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -14388,17 +14282,7 @@ snapshots: '@nodable/entities@2.1.1': {} - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 + '@nodable/entities@3.0.0': {} '@nornagon/put@0.0.8': {} @@ -15384,7 +15268,7 @@ snapshots: dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.7 optionalDependencies: rollup: 4.61.0 @@ -15528,6 +15412,11 @@ snapshots: '@smithy/types': 4.14.3 tslib: 2.8.1 + '@smithy/core@3.34.1': + dependencies: + '@smithy/types': 4.18.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.3.8': dependencies: '@smithy/core': 3.24.6 @@ -15544,20 +15433,15 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/node-config-provider@4.4.6': - dependencies: - '@smithy/core': 3.24.6 - tslib: 2.8.1 - '@smithy/node-http-handler@4.7.7': dependencies: '@smithy/core': 3.24.6 '@smithy/types': 4.14.3 tslib: 2.8.1 - '@smithy/shared-ini-file-loader@4.5.6': + '@smithy/shared-ini-file-loader@4.7.2': dependencies: - '@smithy/core': 3.24.6 + '@smithy/core': 3.34.1 tslib: 2.8.1 '@smithy/signature-v4@5.4.6': @@ -15570,9 +15454,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-base64@4.4.6': + '@smithy/types@4.18.0': dependencies: - '@smithy/core': 3.24.6 + tslib: 2.8.1 + + '@smithy/util-base64@4.6.2': + dependencies: + '@smithy/core': 3.34.1 tslib: 2.8.1 '@smithy/util-buffer-from@2.2.0': @@ -16266,6 +16154,18 @@ snapshots: '@rolldown/plugin-babel': 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.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(rolldown@1.2.5) babel-plugin-react-compiler: 1.0.0 + '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(utf-8-validate@6.0.6)(vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)))': + dependencies: + '@testing-library/dom': 10.4.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(utf-8-validate@6.0.6)(vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))) + vitest: 4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(utf-8-validate@6.0.6)(vitest@4.1.11)': dependencies: '@testing-library/dom': 10.4.1 @@ -16278,6 +16178,23 @@ snapshots: - utf-8-validate - vite + '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(utf-8-validate@6.0.6)(vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)))': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3)) + '@vitest/utils': 4.1.11 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(utf-8-validate@6.0.6)(vitest@4.1.11)': dependencies: '@blazediff/core': 1.9.1 @@ -16288,7 +16205,7 @@ snapshots: sirv: 3.0.2 tinyrainbow: 3.1.0 vitest: 4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)) - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - msw @@ -16304,6 +16221,15 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 + '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))': + dependencies: + '@vitest/spy': 4.1.11 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.11(@types/node@24.12.4)(typescript@6.0.3) + vite: '@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0)' + '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))': dependencies: '@vitest/spy': 4.1.11 @@ -16637,53 +16563,48 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alchemy@2.0.0-beta.76(197b68e0d20fdf20cf352009eca17c9f): + alchemy@2.0.0-beta.78(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.2.16)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(04a2b37736bdb04e55e63e86c7865f24))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@6.0.3)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: - '@alchemy.run/cloudflare-runtime': 2.0.0-beta.76(@distilled.cloud/cloudflare@1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)))(@effect/platform-bun@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6))(@effect/platform-node@4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(rolldown@1.2.5)(typescript@7.0.2) - '@alchemy.run/floci': 2.0.0-beta.76(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@alchemy.run/node-utils': 2.0.0-beta.76 + '@alchemy.run/cloudflare-runtime': 2.0.0-beta.78(@distilled.cloud/cloudflare@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(rolldown@1.2.5)(typescript@6.0.3) + '@alchemy.run/floci': 2.0.0-beta.78(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@alchemy.run/node-utils': 2.0.0-beta.78 + '@alchemy.run/sigil': 0.0.0-alpha.11(@types/react@19.2.16)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@aws-sdk/credential-providers': 3.1062.0 - '@clack/prompts': 1.7.0 - '@distilled.cloud/aws': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/axiom': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/cloudflare': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/core': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/fly-io': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/hetzner': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/neon': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/planetscale': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@distilled.cloud/railway': 1.0.0-rc.8(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/sql-d1': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/sql-sqlite-do': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/vitest': 4.0.0-rc.112(patch_hash=a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + '@distilled.cloud/aws': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/axiom': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/cloudflare': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/core': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/fly-io': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/hetzner': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/neon': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/planetscale': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/prisma': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/railway': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@distilled.cloud/stripe': 1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/sql-d1': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/sql-sqlite-do': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/vitest': 4.0.0-rc.115(patch_hash=172bd95ef73a13d322888984415d5d18d9d2aa8e13fa529eac235efac837e902)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@libsql/client': 0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@octokit/rest': 22.0.1 '@octokit/webhooks': 14.2.0 '@prisma/dev': 0.20.0(typescript@6.0.3) - '@smithy/node-config-provider': 4.4.6 - '@smithy/shared-ini-file-loader': 4.5.6 - '@smithy/types': 4.14.3 '@types/aws-lambda': 8.10.161 aws4fetch: 1.0.20 - capnweb: 0.6.1 - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) - fast-glob: 3.3.3 - fast-xml-parser: 5.8.0 - 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) - jszip: 3.10.1 + capnweb: 0.12.0 + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) + fflate: 0.8.3 libsodium-wrappers: 0.8.4 pathe: 2.0.3 picomatch: 4.0.7 - react: 19.2.6 rolldown: 1.2.5 + tinyglobby: 0.2.17 undici: 7.27.1 yaml: 2.9.0 optionalDependencies: - '@effect/platform-bun': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(utf-8-validate@6.0.6) - '@effect/platform-node': 4.0.0-rc.112(bufferutil@4.1.0)(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2))(redis@6.2.1)(utf-8-validate@6.0.6) - '@effect/sql-pg': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + '@effect/platform-node': 4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6) + '@effect/sql-pg': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) drizzle-kit: 1.0.0-rc.5-ab785fc - drizzle-orm: 1.0.0-rc.5-ab785fc(8ab70e2706da13c78d64d8a92fef1884) + drizzle-orm: 1.0.0-rc.5-ab785fc(04a2b37736bdb04e55e63e86c7865f24) mongodb: 6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9) pg: 8.23.0 vite: '@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0)' @@ -16709,10 +16630,6 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} @@ -16738,6 +16655,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 + anynum@1.0.1: {} + app-builder-lib@26.15.6(dmg-builder@26.15.6)(electron-builder-squirrel-windows@26.15.6): dependencies: '@electron/asar': 3.4.1 @@ -16926,8 +16845,6 @@ snapshots: atomically@1.7.0: {} - auto-bind@5.0.1: {} - await-lock@2.2.2: {} aws4@1.13.2: {} @@ -17218,11 +17135,11 @@ snapshots: caniuse-lite@1.0.30001793: {} - capnp-es@0.0.14(typescript@7.0.2): + capnp-es@0.0.16(typescript@6.0.3): optionalDependencies: - typescript: 7.0.2 + typescript: 6.0.3 - capnweb@0.6.1: {} + capnweb@0.12.0: {} ccount@2.0.1: {} @@ -17301,16 +17218,10 @@ snapshots: dependencies: clsx: 2.1.1 - cli-boxes@3.0.0: {} - cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -17319,11 +17230,6 @@ snapshots: cli-spinners@3.4.0: {} - cli-truncate@5.2.0: - dependencies: - slice-ansi: 8.0.0 - string-width: 8.2.1 - cli-width@4.1.0: optional: true @@ -17352,10 +17258,6 @@ snapshots: cluster-key-slot@1.1.2: {} - code-excerpt@4.0.0: - dependencies: - convert-to-spaces: 2.0.1 - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -17451,8 +17353,6 @@ snapshots: convert-source-map@2.0.0: {} - convert-to-spaces@2.0.1: {} - cookie-es@1.2.3: {} cookie-es@3.1.1: {} @@ -17678,20 +17578,20 @@ snapshots: get-tsconfig: 4.14.3 jiti: 2.7.0 - drizzle-orm@1.0.0-rc.5-ab785fc(8ab70e2706da13c78d64d8a92fef1884): + drizzle-orm@1.0.0-rc.5-ab785fc(04a2b37736bdb04e55e63e86c7865f24): optionalDependencies: '@cloudflare/workers-types': 4.20260604.1 - '@effect/sql-d1': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/sql-pg': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/sql-sqlite-bun': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) - '@effect/sql-sqlite-do': 4.0.0-rc.112(effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2)) + '@effect/sql-d1': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/sql-pg': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/sql-sqlite-bun': 4.0.0-rc.112(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) + '@effect/sql-sqlite-do': 4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) '@electric-sql/pglite': 0.3.15 '@libsql/client': 0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) bun-types: 1.3.14 - effect: 4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2) + effect: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5) expo-sqlite: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) pg: 8.23.0 - valibot: 1.2.0(typescript@7.0.2) + valibot: 1.2.0(typescript@6.0.3) zod: 4.4.3 dset@3.1.4: {} @@ -17710,10 +17610,7 @@ snapshots: ee-first@1.1.1: {} - effect@4.0.0-rc.112(patch_hash=8bef799f35729cf3465eb428196f617b434a7c9f658d56acb2874d74b21b98b2): - dependencies: - fast-check: 4.9.0 - msgpackr: 2.1.0 + effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5): {} ejs@3.1.10: dependencies: @@ -17833,8 +17730,6 @@ snapshots: env-paths@3.0.0: {} - environment@1.1.0: {} - err-code@2.0.3: {} error-stack-parser@2.1.4: @@ -17858,8 +17753,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 - es-toolkit@1.47.0: {} - es6-error@4.1.1: optional: true @@ -17929,8 +17822,6 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -17982,10 +17873,10 @@ snapshots: - supports-color - typescript - expo-asset@57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@7.0.2): + expo-asset@57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.11.5(typescript@7.0.2) - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + '@expo/image-utils': 0.11.5(typescript@6.0.3) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) @@ -18054,7 +17945,7 @@ snapshots: expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)): dependencies: '@expo/env': 2.4.3 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) transitivePeerDependencies: - supports-color @@ -18111,7 +18002,7 @@ snapshots: expo-file-system@57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)): dependencies: - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) optional: true @@ -18124,7 +18015,7 @@ snapshots: expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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): dependencies: - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) fontfaceobserver: 2.3.0 react: 19.2.6 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) @@ -18170,7 +18061,7 @@ snapshots: expo-keep-awake@57.0.2(expo@57.0.18)(react@19.2.6): dependencies: - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 optional: true @@ -18189,6 +18080,17 @@ snapshots: expo: 57.0.18(41fd11498a34454c91128cdad32f22f8) expo-json-utils: 57.0.1 + expo-modules-autolinking@57.0.12(typescript@6.0.3): + dependencies: + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/spawn-async': 1.8.0 + chalk: 4.1.2 + commander: 7.2.0 + transitivePeerDependencies: + - supports-color + - typescript + optional: true + expo-modules-autolinking@57.0.12(typescript@7.0.2): dependencies: '@expo/require-utils': 57.0.5(typescript@7.0.2) @@ -18302,7 +18204,7 @@ snapshots: expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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): dependencies: await-lock: 2.2.2 - expo: 57.0.18(0bf40d5ad6281d8f1e92517b24812edb) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) optional: true @@ -18372,49 +18274,6 @@ snapshots: - react-dom - react-native-worklets - expo@57.0.18(0bf40d5ad6281d8f1e92517b24812edb): - dependencies: - '@babel/runtime': 7.29.7 - '@expo/cli': 57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@7.0.2)(utf-8-validate@6.0.6) - '@expo/config': 57.0.9(typescript@7.0.2) - '@expo/config-plugins': 57.0.9(typescript@7.0.2) - '@expo/devtools': 57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - '@expo/fingerprint': 0.20.11 - '@expo/local-build-cache-provider': 57.0.8(typescript@7.0.2) - '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@7.0.2)(utf-8-validate@6.0.6) - '@ungap/structured-clone': 1.3.1 - babel-preset-expo: 57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2) - expo-asset: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@7.0.2) - expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)) - expo-file-system: 57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)) - expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - expo-keep-awake: 57.0.2(expo@57.0.18)(react@19.2.6) - expo-modules-autolinking: 57.0.12(typescript@7.0.2) - expo-modules-core: 57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - pretty-format: 29.7.0 - react: 19.2.6 - react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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-refresh: 0.14.2 - whatwg-url-minimum: 0.1.2 - optionalDependencies: - '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - react-dom: 19.2.6(react@19.2.6) - react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - expo-router - - expo-widgets - - react-native-worklets - - react-server-dom-webpack - - supports-color - - typescript - - utf-8-validate - optional: true - expo@57.0.18(41fd11498a34454c91128cdad32f22f8): dependencies: '@babel/runtime': 7.29.7 @@ -18457,6 +18316,49 @@ snapshots: - typescript - utf-8-validate + expo@57.0.18(ecb3896f1dbe5154a21ddc585503f306): + dependencies: + '@babel/runtime': 7.29.7 + '@expo/cli': 57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/devtools': 57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + '@expo/fingerprint': 0.20.11 + '@expo/local-build-cache-provider': 57.0.8(typescript@6.0.3) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@ungap/structured-clone': 1.3.1 + babel-preset-expo: 57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2) + expo-asset: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)(typescript@6.0.3) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)) + expo-file-system: 57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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)) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + expo-keep-awake: 57.0.2(expo@57.0.18)(react@19.2.6) + expo-modules-autolinking: 57.0.12(typescript@6.0.3) + expo-modules-core: 57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + pretty-format: 29.7.0 + react: 19.2.6 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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-refresh: 0.14.2 + whatwg-url-minimum: 0.1.2 + optionalDependencies: + '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + react-dom: 19.2.6(react@19.2.6) + react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.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) + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - expo-router + - expo-widgets + - react-native-worklets + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + optional: true + exponential-backoff@3.1.3: {} express-rate-limit@8.5.2(express@5.2.1): @@ -18499,22 +18401,10 @@ snapshots: extend@3.0.2: {} - fast-check@4.9.0: - dependencies: - pure-rand: 8.4.0 - fast-deep-equal@3.1.3: {} fast-equals@5.4.2: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: optional: true @@ -18539,27 +18429,24 @@ snapshots: path-expression-matcher: 1.5.0 xml-naming: 0.1.0 - fast-xml-parser@5.7.3: + fast-xml-parser@5.11.1: dependencies: - '@nodable/entities': 2.1.1 + '@nodable/entities': 3.0.0 fast-xml-builder: 1.2.0 - path-expression-matcher: 1.5.0 - strnum: 2.3.0 + is-unsafe: 2.0.2 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + xml-naming: 0.3.0 - fast-xml-parser@5.8.0: + fast-xml-parser@5.7.3: dependencies: '@nodable/entities': 2.1.1 fast-xml-builder: 1.2.0 path-expression-matcher: 1.5.0 strnum: 2.3.0 - xml-naming: 0.1.0 fastest-levenshtein@1.0.16: {} - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - fb-dotslash@0.5.8: {} fb-watchman@2.0.2: @@ -18594,6 +18481,8 @@ snapshots: '@yuuang/ffi-rs-win32-ia32-msvc': 1.3.2 '@yuuang/ffi-rs-win32-x64-msvc': 1.3.2 + fflate@0.8.3: {} + filelist@1.0.6: dependencies: minimatch: 5.1.9 @@ -18759,10 +18648,6 @@ snapshots: github-slugger@2.0.0: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} glob@13.0.6: @@ -18818,6 +18703,8 @@ snapshots: graphmatch@1.1.1: {} + graphql@16.11.0: {} + graphql@16.14.1: optional: true @@ -19071,8 +18958,6 @@ snapshots: immediate@3.0.6: {} - indent-string@5.0.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -19080,41 +18965,6 @@ snapshots: inherits@2.0.4: {} - 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): - dependencies: - '@alcalzone/ansi-tokenize': 0.2.5 - ansi-escapes: 7.3.0 - ansi-styles: 6.2.3 - auto-bind: 5.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - cli-cursor: 4.0.0 - cli-truncate: 5.2.0 - code-excerpt: 4.0.0 - es-toolkit: 1.47.0 - indent-string: 5.0.0 - is-in-ci: 2.0.0 - patch-console: 2.0.0 - react: 19.2.6 - react-reconciler: 0.33.0(react@19.2.6) - scheduler: 0.27.0 - signal-exit: 3.0.7 - slice-ansi: 8.0.0 - stack-utils: 2.0.6 - string-width: 8.2.1 - terminal-size: 4.0.1 - type-fest: 5.7.0 - widest-line: 6.0.0 - wrap-ansi: 9.0.2 - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - yoga-layout: 3.2.1 - optionalDependencies: - '@types/react': 19.2.16 - react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - inline-style-parser@0.2.7: {} invariant@2.2.4: @@ -19161,22 +19011,10 @@ snapshots: is-docker@4.0.0: {} - is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.6.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - is-hexadecimal@2.0.1: {} - is-in-ci@2.0.0: {} - is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -19196,6 +19034,8 @@ snapshots: is-unicode-supported@2.1.0: {} + is-unsafe@2.0.2: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -19717,8 +19557,6 @@ snapshots: merge-stream@2.0.0: {} - merge2@1.4.1: {} - metro-babel-transformer@0.84.4: dependencies: '@babel/core': 7.29.7 @@ -20288,8 +20126,6 @@ snapshots: mime@2.6.0: {} - mime@4.1.0: {} - mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} @@ -20356,20 +20192,31 @@ snapshots: ms@2.1.3: {} - msgpackr-extract@3.0.4: + msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3): dependencies: - node-gyp-build-optional-packages: 5.2.2 + '@inquirer/confirm': 5.1.21(@types/node@24.12.4) + '@mswjs/interceptors': 0.41.9 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.14.1 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.10.1 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.1 + type-fest: 5.7.0 + until-async: 3.0.2 + yargs: 17.7.2 optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.4 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.4 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.4 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.4 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.4 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.4 - - msgpackr@2.1.0: - optionalDependencies: - msgpackr-extract: 3.0.4 + typescript: 6.0.3 + transitivePeerDependencies: + - '@types/node' + optional: true msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2): dependencies: @@ -20442,10 +20289,6 @@ snapshots: node-forge@1.4.0: {} - node-gyp-build-optional-packages@5.2.2: - dependencies: - detect-libc: 2.1.2 - node-gyp-build@4.8.4: optional: true @@ -20543,8 +20386,6 @@ snapshots: object-keys@1.1.1: optional: true - obuf@1.1.2: {} - obug@2.1.3: {} ofetch@1.5.1: @@ -20665,6 +20506,31 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + oxfmt@0.64.0(vite-plus@0.3.0(@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)): + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.64.0 + '@oxfmt/binding-android-arm64': 0.64.0 + '@oxfmt/binding-darwin-arm64': 0.64.0 + '@oxfmt/binding-darwin-x64': 0.64.0 + '@oxfmt/binding-freebsd-x64': 0.64.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.64.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.64.0 + '@oxfmt/binding-linux-arm64-gnu': 0.64.0 + '@oxfmt/binding-linux-arm64-musl': 0.64.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.64.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.64.0 + '@oxfmt/binding-linux-riscv64-musl': 0.64.0 + '@oxfmt/binding-linux-s390x-gnu': 0.64.0 + '@oxfmt/binding-linux-x64-gnu': 0.64.0 + '@oxfmt/binding-linux-x64-musl': 0.64.0 + '@oxfmt/binding-openharmony-arm64': 0.64.0 + '@oxfmt/binding-win32-arm64-msvc': 0.64.0 + '@oxfmt/binding-win32-ia32-msvc': 0.64.0 + '@oxfmt/binding-win32-x64-msvc': 0.64.0 + vite-plus: 0.3.0(@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) + oxfmt@0.64.0(vite-plus@0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0)): dependencies: tinypool: 2.1.0 @@ -20699,6 +20565,30 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 7.0.2001 '@oxlint-tsgolint/win32-x64': 7.0.2001 + oxlint@1.79.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.0(@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)): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.79.0 + '@oxlint/binding-android-arm64': 1.79.0 + '@oxlint/binding-darwin-arm64': 1.79.0 + '@oxlint/binding-darwin-x64': 1.79.0 + '@oxlint/binding-freebsd-x64': 1.79.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.79.0 + '@oxlint/binding-linux-arm-musleabihf': 1.79.0 + '@oxlint/binding-linux-arm64-gnu': 1.79.0 + '@oxlint/binding-linux-arm64-musl': 1.79.0 + '@oxlint/binding-linux-ppc64-gnu': 1.79.0 + '@oxlint/binding-linux-riscv64-gnu': 1.79.0 + '@oxlint/binding-linux-riscv64-musl': 1.79.0 + '@oxlint/binding-linux-s390x-gnu': 1.79.0 + '@oxlint/binding-linux-x64-gnu': 1.79.0 + '@oxlint/binding-linux-x64-musl': 1.79.0 + '@oxlint/binding-openharmony-arm64': 1.79.0 + '@oxlint/binding-win32-arm64-msvc': 1.79.0 + '@oxlint/binding-win32-ia32-msvc': 1.79.0 + '@oxlint/binding-win32-x64-msvc': 1.79.0 + oxlint-tsgolint: 7.0.2001 + vite-plus: 0.3.0(@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) + oxlint@1.79.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0)): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.79.0 @@ -20786,14 +20676,14 @@ snapshots: parseurl@1.3.3: {} - patch-console@2.0.0: {} - path-browserify@1.0.1: {} path-exists@3.0.0: {} path-expression-matcher@1.5.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -20824,21 +20714,19 @@ snapshots: pg-cloudflare@1.4.0: optional: true - pg-connection-string@2.14.0: {} + pg-connection-string@2.14.0: + optional: true - pg-cursor@2.22.0(pg@8.23.0): - dependencies: - pg: 8.23.0 - - pg-int8@1.0.1: {} - - pg-numeric@1.0.2: {} + pg-int8@1.0.1: + optional: true pg-pool@3.14.0(pg@8.23.0): dependencies: pg: 8.23.0 + optional: true - pg-protocol@1.16.0: {} + pg-protocol@1.16.0: + optional: true pg-types@2.2.0: dependencies: @@ -20847,16 +20735,7 @@ snapshots: postgres-bytea: 1.0.1 postgres-date: 1.0.7 postgres-interval: 1.2.0 - - pg-types@4.1.0: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 + optional: true pg@8.23.0: dependencies: @@ -20867,10 +20746,12 @@ snapshots: pgpass: 1.0.5 optionalDependencies: pg-cloudflare: 1.4.0 + optional: true pgpass@1.0.5: dependencies: split2: 4.2.0 + optional: true piccolore@0.1.3: {} @@ -20921,27 +20802,19 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postgres-array@2.0.0: {} + postgres-array@2.0.0: + optional: true - postgres-array@3.0.4: {} + postgres-bytea@1.0.1: + optional: true - postgres-bytea@1.0.1: {} - - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - - postgres-date@1.0.7: {} - - postgres-date@2.1.0: {} + postgres-date@1.0.7: + optional: true postgres-interval@1.2.0: dependencies: xtend: 4.0.2 - - postgres-interval@3.0.0: {} - - postgres-range@1.1.4: {} + optional: true postject@1.0.0-alpha.6: dependencies: @@ -21095,8 +20968,6 @@ snapshots: punycode@2.3.1: optional: true - pure-rand@8.4.0: {} - pvtsutils@1.3.6: dependencies: tslib: 2.8.1 @@ -21115,8 +20986,6 @@ snapshots: split-on-first: 1.1.0 strict-uri-encode: 2.0.0 - queue-microtask@1.2.3: {} - queue@6.0.2: dependencies: inherits: 2.0.4 @@ -21426,11 +21295,6 @@ snapshots: - utf-8-validate optional: true - react-reconciler@0.33.0(react@19.2.6): - dependencies: - react: 19.2.6 - scheduler: 0.27.0 - react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@19.2.16)(react@19.2.3): @@ -21664,11 +21528,6 @@ snapshots: onetime: 2.0.1 signal-exit: 3.0.7 - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -21707,8 +21566,6 @@ snapshots: rettime@0.10.1: optional: true - reusify@1.1.0: {} - rimraf@2.6.3: dependencies: glob: 7.2.3 @@ -21810,10 +21667,6 @@ snapshots: transitivePeerDependencies: - supports-color - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -22101,11 +21954,6 @@ snapshots: sisteransi@1.0.5: {} - slice-ansi@8.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - slugify@1.6.9: {} smart-buffer@4.2.0: @@ -22141,7 +21989,8 @@ snapshots: split-on-first@1.1.0: {} - split2@4.2.0: {} + split2@4.2.0: + optional: true split@0.3.3: dependencies: @@ -22150,10 +21999,6 @@ snapshots: sprintf-js@1.1.3: optional: true - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackback@0.0.2: {} stackframe@1.3.4: {} @@ -22243,6 +22088,10 @@ snapshots: strnum@2.3.0: {} + strnum@2.4.2: + dependencies: + anynum: 1.0.1 + structured-headers@0.4.1: {} style-to-js@1.1.21: @@ -22335,8 +22184,6 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terminal-size@4.0.1: {} - terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 @@ -22594,7 +22441,7 @@ snapshots: unplugin@3.0.0: dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.7 webpack-virtual-modules: 0.6.2 unrun@0.2.39: @@ -22683,11 +22530,6 @@ snapshots: optionalDependencies: typescript: 6.0.3 - valibot@1.2.0(typescript@7.0.2): - optionalDependencies: - typescript: 7.0.2 - optional: true - validate-npm-package-name@5.0.1: {} vary@1.1.2: {} @@ -22716,6 +22558,64 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite-plus@0.3.0(@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): + dependencies: + '@oxc-project/types': 0.146.0 + '@oxlint/plugins': 1.79.0 + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(utf-8-validate@6.0.6)(vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3))(utf-8-validate@6.0.6)(vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + '@voidzero-dev/vite-plus-core': 0.3.0(@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) + oxfmt: 0.64.0(vite-plus@0.3.0(@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)) + oxlint: 1.79.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.0(@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)) + oxlint-tsgolint: 7.0.2001 + vite: '@voidzero-dev/vite-plus-core@0.3.0(@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)' + vitest: 4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(utf-8-validate@6.0.6)(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3)) + optionalDependencies: + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.0 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.0 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.0 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.0 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.0 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.0 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.0 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.0 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@edge-runtime/vm' + - '@opentelemetry/api' + - '@types/node' + - '@vitejs/devtools' + - '@vitest/coverage-istanbul' + - '@vitest/coverage-v8' + - '@vitest/ui' + - bufferutil + - esbuild + - happy-dom + - jiti + - jsdom + - less + - msw + - publint + - sass + - sass-embedded + - stylus + - sugarss + - svelte + - terser + - tsx + - typescript + - unplugin-unused + - unrun + - utf-8-validate + - yaml + vite-plus@0.3.0(@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@7.0.2))(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(utf-8-validate@6.0.6)(yaml@2.9.0): dependencies: '@oxc-project/types': 0.146.0 @@ -22778,6 +22678,34 @@ snapshots: optionalDependencies: vite: '@voidzero-dev/vite-plus-core@0.3.0(@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)' + vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(utf-8-validate@6.0.6)(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3)): + dependencies: + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@6.0.3)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.1.0 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.7 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: '@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0)' + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.12.4 + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2))(utf-8-validate@6.0.6)(vitest@4.1.11) + transitivePeerDependencies: + - msw + vitest@4.1.11(@types/node@24.12.4)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.0(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(msw@2.12.11(@types/node@24.12.4)(typescript@7.0.2)): dependencies: '@vitest/expect': 4.1.11 @@ -22792,7 +22720,7 @@ snapshots: magic-string: 0.30.21 obug: 2.1.3 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.7 std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.2.4 @@ -22970,17 +22898,13 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - widest-line@6.0.0: - dependencies: - string-width: 8.2.1 - - workerd@1.20260704.1: + workerd@1.20260901.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260704.1 - '@cloudflare/workerd-darwin-arm64': 1.20260704.1 - '@cloudflare/workerd-linux-64': 1.20260704.1 - '@cloudflare/workerd-linux-arm64': 1.20260704.1 - '@cloudflare/workerd-windows-64': 1.20260704.1 + '@cloudflare/workerd-darwin-64': 1.20260901.1 + '@cloudflare/workerd-darwin-arm64': 1.20260901.1 + '@cloudflare/workerd-linux-64': 1.20260901.1 + '@cloudflare/workerd-linux-arm64': 1.20260901.1 + '@cloudflare/workerd-windows-64': 1.20260901.1 wrap-ansi@6.2.0: dependencies: @@ -23008,11 +22932,6 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 - ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): - optionalDependencies: - bufferutil: 4.1.0 - utf-8-validate: 6.0.6 - ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 @@ -23025,6 +22944,8 @@ snapshots: xml-naming@0.1.0: {} + xml-naming@0.3.0: {} + xml2js@0.4.23: dependencies: sax: 1.6.0 @@ -23039,7 +22960,8 @@ snapshots: xmlbuilder@15.1.1: {} - xtend@4.0.2: {} + xtend@4.0.2: + optional: true xxhash-wasm@1.1.0: {} @@ -23103,8 +23025,6 @@ snapshots: yoctocolors@2.1.2: {} - yoga-layout@3.2.1: {} - yuku-codegen@0.5.48: dependencies: '@yuku-toolchain/types': 0.5.43 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a4a6c3f6b069e428c67b2a8ff49ec713e0cf8e9d..4d2357dc774ae9eb539dfeceb8c460a580276580 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,7 +15,7 @@ allowBuilds: electron: true electron-winstaller: false esbuild: true - msgpackr-extract: true + msgpackr-extract: set this to true or false msw: false node-pty: true sharp: true @@ -30,13 +30,13 @@ catalog: "@clerk/expo": 4.6.8 "@clerk/react": 6.16.1 "@clerk/shared": 4.33.0 - "@effect/atom-react": 4.0.0-rc.112 - "@effect/openapi-generator": 4.0.0-rc.112 - "@effect/platform-node": 4.0.0-rc.112 - "@effect/platform-node-shared": 4.0.0-rc.112 - "@effect/sql-pg": 4.0.0-rc.112 + "@effect/atom-react": 4.0.0-rc.115 + "@effect/openapi-generator": 4.0.0-rc.115 + "@effect/platform-node": 4.0.0-rc.115 + "@effect/platform-node-shared": 4.0.0-rc.115 + "@effect/sql-pg": 4.0.0-rc.115 "@effect/tsgo": 0.41.0 - "@effect/vitest": 4.0.0-rc.112 + "@effect/vitest": 4.0.0-rc.115 "@legendapp/list": 3.3.5 "@noble/curves": 1.9.1 "@noble/hashes": 1.8.0 @@ -45,7 +45,7 @@ catalog: "@tailwindcss/oxide": 4.3.3 "@tailwindcss/vite": 4.3.3 "@types/node": 24.12.4 - effect: 4.0.0-rc.112 + effect: 4.0.0-rc.115 jose: 6.2.2 lightningcss: 1.33.0 tailwindcss: 4.3.3 @@ -61,20 +61,20 @@ minimumReleaseAgeExclude: - "@clerk/expo@4.6.8" - "@clerk/react@6.16.1" - "@clerk/shared@4.33.0" - - "@distilled.cloud/aws@0.30.2" - - "@distilled.cloud/axiom@0.30.2" - - "@distilled.cloud/cloudflare@0.30.2" - - "@distilled.cloud/core@0.30.2" - - "@distilled.cloud/neon@0.30.2" - - "@distilled.cloud/planetscale@0.30.2" - - "@effect/atom-react@4.0.0-rc.112" - - "@effect/openapi-generator@4.0.0-rc.112" - - "@effect/platform-node-shared@4.0.0-rc.112" - - "@effect/platform-node@4.0.0-rc.112" - - "@effect/sql-pg@4.0.0-rc.112" - - "@effect/vitest@4.0.0-rc.112" - - alchemy@2.0.0-beta.76 - - effect@4.0.0-rc.112 + - "@distilled.cloud/aws@1.0.0-rc.12" + - "@distilled.cloud/axiom@1.0.0-rc.12" + - "@distilled.cloud/cloudflare@1.0.0-rc.12" + - "@distilled.cloud/core@1.0.0-rc.12" + - "@distilled.cloud/neon@1.0.0-rc.12" + - "@distilled.cloud/planetscale@1.0.0-rc.12" + - "@effect/atom-react@4.0.0-rc.115" + - "@effect/openapi-generator@4.0.0-rc.115" + - "@effect/platform-node-shared@4.0.0-rc.115" + - "@effect/platform-node@4.0.0-rc.115" + - "@effect/sql-pg@4.0.0-rc.115" + - "@effect/vitest@4.0.0-rc.115" + - alchemy@2.0.0-beta.78 + - effect@4.0.0-rc.115 - "@legendapp/list@3.3.5" - "@expo/cli@57.0.20" - "@expo/env@2.4.3" @@ -87,6 +87,14 @@ minimumReleaseAgeExclude: - expo-widgets@57.0.15 - electron@44.1.0 - "@anthropic-ai/claude-agent-sdk@0.3.260" + - "@alchemy.run/cloudflare-runtime@2.0.0-beta.78" + - "@alchemy.run/floci@2.0.0-beta.78" + - "@alchemy.run/node-utils@2.0.0-beta.78" + - "@distilled.cloud/fly-io@1.0.0-rc.12" + - "@distilled.cloud/hetzner@1.0.0-rc.12" + - "@distilled.cloud/prisma@1.0.0-rc.12" + - "@distilled.cloud/railway@1.0.0-rc.12" + - "@distilled.cloud/stripe@1.0.0-rc.12" overrides: # Earlier React Navigation declarations create a circular type alias in TypeScript 7. @@ -103,6 +111,12 @@ overrides: "@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-linux-x64-musl": "-" "@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-win32-arm64": "-" "@anthropic-ai/claude-agent-sdk>@anthropic-ai/claude-agent-sdk-win32-x64": "-" + # Alchemy's Ink fork declares React as a hard dependency, but the relay only + # reaches its terminal-capability helpers; the TUI is never imported, so the + # extra React copy is pure install weight. + "@alchemy.run/sigil>react": "-" + "@alchemy.run/sigil>react-reconciler": "-" + "@alchemy.run/sigil>scheduler": "-" "@clerk/backend": "catalog:" "@clerk/clerk-js": "catalog:" "@clerk/clerk-js>@base-org/account": "-" @@ -158,7 +172,7 @@ packageExtensions: patchedDependencies: "@clerk/expo@4.6.8": patches/@clerk__expo@4.6.8.patch - "@effect/vitest@4.0.0-rc.112": patches/@effect__vitest@4.0.0-rc.112.patch + "@effect/vitest@4.0.0-rc.115": patches/@effect__vitest@4.0.0-rc.115.patch "@expo/metro-config@57.0.12": patches/@expo__metro-config@57.0.12.patch "@ff-labs/fff-node@0.9.4": patches/@ff-labs__fff-node@0.9.4.patch "@legendapp/list@3.3.5": patches/@legendapp__list@3.3.5.patch @@ -167,7 +181,7 @@ patchedDependencies: "@react-native-menu/menu@2.0.0": patches/@react-native-menu__menu@2.0.0.patch "@react-navigation/native-stack@7.17.6": patches/@react-navigation%2Fnative-stack@7.17.6.patch dbus-next@0.10.2: patches/dbus-next@0.10.2.patch - effect@4.0.0-rc.112: patches/effect@4.0.0-rc.112.patch + effect@4.0.0-rc.115: patches/effect@4.0.0-rc.115.patch expo-audio@57.0.4: patches/expo-audio@57.0.4.patch expo-sharing@57.0.17: patches/expo-sharing@57.0.17.patch expo-widgets@57.0.15: patches/expo-widgets@57.0.15.patch diff --git a/scripts/apply-web-brand-assets.ts b/scripts/apply-web-brand-assets.ts index 30e6bc325b6c6a757ef6c13bb84188f9eab7ac31..450af75f37be15fe2c802337af098267538fd455 100644 --- a/scripts/apply-web-brand-assets.ts +++ b/scripts/apply-web-brand-assets.ts @@ -42,15 +42,15 @@ export const applyWebBrandAssets = Effect.fn("applyWebBrandAssets")(function* ( export const applyWebBrandAssetsCommand = Command.make( "apply-web-brand-assets", { - brand: Argument.choice("brand", WEB_ASSET_BRANDS).pipe( + brand: Argument.Literals("brand", WEB_ASSET_BRANDS).pipe( Argument.withDescription("Asset brand to copy into the hosted web output directory."), Argument.optional, ), - channel: Flag.choice("channel", WEB_ASSET_CHANNELS).pipe( + channel: Flag.Literals("channel", WEB_ASSET_CHANNELS).pipe( Flag.withDescription("Hosted release channel to map to a web asset brand."), Flag.optional, ), - targetDirectory: Argument.string("target-directory").pipe( + targetDirectory: Argument.String("target-directory").pipe( Argument.withDescription("Output directory that contains the hosted web build assets."), Argument.optional, ), diff --git a/scripts/build-cli-archive.ts b/scripts/build-cli-archive.ts index c70ffe4e0e085ab75adf77345cb7fe1a4b756459..e5839989efc7261e9598746de7599c14c4f05f6f 100644 --- a/scripts/build-cli-archive.ts +++ b/scripts/build-cli-archive.ts @@ -283,10 +283,10 @@ const stageWebClient = Effect.fn("stageWebClient")(function* (source: string, ta }); const MacSigningConfig = Config.all({ - identity: Config.string("T3CODE_CLI_MAC_SIGN_IDENTITY").pipe(Config.option), - appleApiKey: Config.string("APPLE_API_KEY").pipe(Config.option), - appleApiKeyId: Config.string("APPLE_API_KEY_ID").pipe(Config.option), - appleApiIssuer: Config.string("APPLE_API_ISSUER").pipe(Config.option), + identity: Config.String("T3CODE_CLI_MAC_SIGN_IDENTITY").pipe(Config.option), + appleApiKey: Config.String("APPLE_API_KEY").pipe(Config.option), + appleApiKeyId: Config.String("APPLE_API_KEY_ID").pipe(Config.option), + appleApiIssuer: Config.String("APPLE_API_ISSUER").pipe(Config.option), }); /** @@ -370,9 +370,9 @@ const signMacArchiveContents = Effect.fn("signMacArchiveContents")(function* (in }); const WindowsSigningConfig = Config.all({ - endpoint: Config.string("AZURE_TRUSTED_SIGNING_ENDPOINT").pipe(Config.option), - accountName: Config.string("AZURE_TRUSTED_SIGNING_ACCOUNT_NAME").pipe(Config.option), - certificateProfileName: Config.string("AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME").pipe( + endpoint: Config.String("AZURE_TRUSTED_SIGNING_ENDPOINT").pipe(Config.option), + accountName: Config.String("AZURE_TRUSTED_SIGNING_ACCOUNT_NAME").pipe(Config.option), + certificateProfileName: Config.String("AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME").pipe( Config.option, ), }); @@ -567,13 +567,13 @@ const buildCliArchive = Effect.fn("buildCliArchive")(function* (input: { const command = Command.make( "build-cli-archive", { - platform: Flag.choice("platform", BuildPlatform.literals), - arch: Flag.choice("arch", BuildArch.literals), - version: Flag.string("version").pipe( + platform: Flag.Literals("platform", BuildPlatform.literals), + arch: Flag.Literals("arch", BuildArch.literals), + version: Flag.String("version").pipe( Flag.withDescription("Release version for the archive name."), ), - outputDir: Flag.string("output-dir").pipe(Flag.withDefault("release-cli")), - resourceMonitorDir: Flag.string("resource-monitor-dir").pipe( + outputDir: Flag.String("output-dir").pipe(Flag.withDefault("release-cli")), + resourceMonitorDir: Flag.String("resource-monitor-dir").pipe( Flag.withDescription( "Directory laid out like dist/resource-monitor (defaults to apps/server/dist/resource-monitor).", ), diff --git a/scripts/build-desktop-artifact.test.ts b/scripts/build-desktop-artifact.test.ts index 08d7cf10e1a61bb597cece5622a445bb0fa9d231..05fc0baa45a0daaa8ac321404113cb4fb4868579 100644 --- a/scripts/build-desktop-artifact.test.ts +++ b/scripts/build-desktop-artifact.test.ts @@ -733,7 +733,6 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { "@ff-labs/fff-node": "0.9.4", "@opencode-ai/sdk": "^1.3.15", "@pierre/diffs": "1.3.0", - "msgpackr-extract": "3.0.4", "node-pty": "1.1.0", }, desktopDependencies: { @@ -745,7 +744,6 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { }), { "@ff-labs/fff-node": "0.9.4", - "msgpackr-extract": "3.0.4", "node-pty": "1.1.0", "@napi-rs/keyring": "1.3.0", "playwright-core": "1.60.0", diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index cb47e40b8b11055a364b1696c6c1a37121e322cb..a5355975b456ff4e96dc7b6a793dc2dabc7b4dcd 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -851,11 +851,11 @@ const resolvePythonForNodeGyp = Effect.fn("resolvePythonForNodeGyp")(function* ( const path = yield* Path.Path; const hostPlatform = yield* HostProcessPlatform; const env = yield* Config.all({ - configuredPython: Config.string("npm_config_python").pipe( - Config.orElse(() => Config.string("PYTHON")), + configuredPython: Config.String("npm_config_python").pipe( + Config.orElse(() => Config.String("PYTHON")), Config.option, ), - localAppData: Config.string("LOCALAPPDATA").pipe(Config.option), + localAppData: Config.String("LOCALAPPDATA").pipe(Config.option), }); const isPython3 = (candidate: string) => spawnAndCollectOutput( @@ -1524,35 +1524,35 @@ function getPatchedDependencyPackageName(patchKey: string): string { } const AzureTrustedSigningOptionsConfig = Config.all({ - publisherName: Config.string("AZURE_TRUSTED_SIGNING_PUBLISHER_NAME"), - endpoint: Config.string("AZURE_TRUSTED_SIGNING_ENDPOINT"), - certificateProfileName: Config.string("AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME"), - codeSigningAccountName: Config.string("AZURE_TRUSTED_SIGNING_ACCOUNT_NAME"), - fileDigest: Config.string("AZURE_TRUSTED_SIGNING_FILE_DIGEST").pipe(Config.withDefault("SHA256")), - timestampDigest: Config.string("AZURE_TRUSTED_SIGNING_TIMESTAMP_DIGEST").pipe( + publisherName: Config.String("AZURE_TRUSTED_SIGNING_PUBLISHER_NAME"), + endpoint: Config.String("AZURE_TRUSTED_SIGNING_ENDPOINT"), + certificateProfileName: Config.String("AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME"), + codeSigningAccountName: Config.String("AZURE_TRUSTED_SIGNING_ACCOUNT_NAME"), + fileDigest: Config.String("AZURE_TRUSTED_SIGNING_FILE_DIGEST").pipe(Config.withDefault("SHA256")), + timestampDigest: Config.String("AZURE_TRUSTED_SIGNING_TIMESTAMP_DIGEST").pipe( Config.withDefault("SHA256"), ), - timestampRfc3161: Config.string("AZURE_TRUSTED_SIGNING_TIMESTAMP_RFC3161").pipe( + timestampRfc3161: Config.String("AZURE_TRUSTED_SIGNING_TIMESTAMP_RFC3161").pipe( Config.withDefault("http://timestamp.acs.microsoft.com"), ), }); const BuildEnvConfig = Config.all({ platform: Config.schema(BuildPlatform, "T3CODE_DESKTOP_PLATFORM").pipe(Config.option), - target: Config.string("T3CODE_DESKTOP_TARGET").pipe(Config.option), + target: Config.String("T3CODE_DESKTOP_TARGET").pipe(Config.option), arch: Config.schema(BuildArch, "T3CODE_DESKTOP_ARCH").pipe(Config.option), - version: Config.string("T3CODE_DESKTOP_VERSION").pipe(Config.option), - outputDir: Config.string("T3CODE_DESKTOP_OUTPUT_DIR").pipe(Config.option), - skipBuild: Config.boolean("T3CODE_DESKTOP_SKIP_BUILD").pipe(Config.withDefault(false)), - keepStage: Config.boolean("T3CODE_DESKTOP_KEEP_STAGE").pipe(Config.withDefault(false)), - signed: Config.boolean("T3CODE_DESKTOP_SIGNED").pipe(Config.withDefault(false)), - verbose: Config.boolean("T3CODE_DESKTOP_VERBOSE").pipe(Config.withDefault(false)), - mockUpdates: Config.boolean("T3CODE_DESKTOP_MOCK_UPDATES").pipe(Config.withDefault(false)), - mockUpdateServerPort: Config.string("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe(Config.option), + version: Config.String("T3CODE_DESKTOP_VERSION").pipe(Config.option), + outputDir: Config.String("T3CODE_DESKTOP_OUTPUT_DIR").pipe(Config.option), + skipBuild: Config.Boolean("T3CODE_DESKTOP_SKIP_BUILD").pipe(Config.withDefault(false)), + keepStage: Config.Boolean("T3CODE_DESKTOP_KEEP_STAGE").pipe(Config.withDefault(false)), + signed: Config.Boolean("T3CODE_DESKTOP_SIGNED").pipe(Config.withDefault(false)), + verbose: Config.Boolean("T3CODE_DESKTOP_VERBOSE").pipe(Config.withDefault(false)), + mockUpdates: Config.Boolean("T3CODE_DESKTOP_MOCK_UPDATES").pipe(Config.withDefault(false)), + mockUpdateServerPort: Config.String("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe(Config.option), // Path to the Linux CLI release archive (t3--linux-x64.tar.gz) built // by the build_linux_cli CI job. The Windows build embeds it verbatim as the // WSL runtime. - wslRuntime: Config.string("T3CODE_DESKTOP_WSL_RUNTIME").pipe(Config.option), + wslRuntime: Config.String("T3CODE_DESKTOP_WSL_RUNTIME").pipe(Config.option), }); const MockUpdateServerPortSchema = Schema.NumberFromString.check( @@ -1717,10 +1717,10 @@ const rustTargetIsInstalled = Effect.fn("rustTargetIsInstalled")(function* (targ export const preflightLinuxDesktopBuild = Effect.fn("preflightLinuxDesktopBuild")(function* ( arch: typeof BuildArch.Type = "x64", ) { - const reuseResourceMonitor = yield* Config.boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( + const reuseResourceMonitor = yield* Config.Boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( Config.withDefault(false), ); - const reuseCaptureHelpers = yield* Config.boolean( + const reuseCaptureHelpers = yield* Config.Boolean( "T3CODE_DESKTOP_REUSE_LINUX_CAPTURE_HELPERS", ).pipe(Config.withDefault(false)); // Rust is only optional when every Linux Rust artifact comes from a cache. @@ -1759,7 +1759,7 @@ export const preflightMacDesktopBuild = Effect.fn("preflightMacDesktopBuild")(fu arch: typeof BuildArch.Type, ) { const rustTargets = resolveResourceMonitorRustTargets("mac", arch); - const reuseResourceMonitor = yield* Config.boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( + const reuseResourceMonitor = yield* Config.Boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( Config.withDefault(false), ); const checks = yield* Effect.all( @@ -1816,7 +1816,7 @@ function windowsVswherePrerequisiteScript(arch: typeof BuildArch.Type): string { export const preflightWindowsDesktopBuild = Effect.fn("preflightWindowsDesktopBuild")( function* (input: { readonly arch: typeof BuildArch.Type; readonly bundlesWslRuntime: boolean }) { const rustTarget = resolveResourceMonitorRustTargets("win", input.arch)[0]!; - const reuseResourceMonitor = yield* Config.boolean( + const reuseResourceMonitor = yield* Config.Boolean( "T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR", ).pipe(Config.withDefault(false)); const python = yield* resolvePythonForNodeGyp(); @@ -2134,7 +2134,7 @@ export const stageLinuxCaptureHelper = Effect.fn("stageLinuxCaptureHelper")(func const [rustTarget] = resolveResourceMonitorRustTargets("linux", input.arch); // Release CI restores these binaries from a cache keyed on the crate sources and // skips the Rust toolchain on a hit, so the build must be skippable too. - const reuseHelpers = yield* Config.boolean("T3CODE_DESKTOP_REUSE_LINUX_CAPTURE_HELPERS").pipe( + const reuseHelpers = yield* Config.Boolean("T3CODE_DESKTOP_REUSE_LINUX_CAPTURE_HELPERS").pipe( Config.withDefault(false), ); const binaryPath = path.join( @@ -2197,7 +2197,7 @@ export const stageResourceMonitor = Effect.fn("stageResourceMonitor")(function* const manifestPath = path.join(input.repoRoot, "native/resource-monitor/Cargo.toml"); const executableName = resourceMonitorExecutableName(input.platform); const rustTargets = resolveResourceMonitorRustTargets(input.platform, input.arch); - const reuseResourceMonitor = yield* Config.boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( + const reuseResourceMonitor = yield* Config.Boolean("T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR").pipe( Config.withDefault(false), ); const builtBinaries: string[] = []; @@ -2538,8 +2538,8 @@ export const resolveGitHubPublishConfig = Effect.fn("resolveGitHubPublishConfig" updateChannel: "latest" | "nightly", ) { const env = yield* Config.all({ - updateRepository: Config.string("T3CODE_DESKTOP_UPDATE_REPOSITORY").pipe(Config.option), - githubRepository: Config.string("GITHUB_REPOSITORY").pipe(Config.option), + updateRepository: Config.String("T3CODE_DESKTOP_UPDATE_REPOSITORY").pipe(Config.option), + githubRepository: Config.String("GITHUB_REPOSITORY").pipe(Config.option), }); const rawRepo = ( Option.getOrUndefined(env.updateRepository)?.trim() || @@ -3451,10 +3451,11 @@ const buildDesktopArtifact = Effect.fn("buildDesktopArtifact")(function* ( // Assert against the emitted bundle, not the bundler config. `alwaysBundle` // only forces packages IN, so a transitive dependency of an external package // is bundled by default however the predicate is written — that silently - // inlined msgpackr-extract and its native loader while every list-based test - // still passed. An inlined native loader resolves its prebuilds relative to - // the bundle and quietly falls back to a slower pure-JS path, so this fails - // the build rather than shipping a silent regression. + // inlined a native loader (node-gyp-build-optional-packages) while every + // list-based test still passed. An inlined native loader resolves its + // prebuilds relative to the bundle and quietly falls back to a slower + // pure-JS path, so this fails the build rather than shipping a silent + // regression. { const chunkNames = (yield* fs.readDirectory(distDirs.serverDist)).filter((entry) => entry.endsWith(".mjs"), @@ -3866,58 +3867,58 @@ const buildDesktopArtifact = Effect.fn("buildDesktopArtifact")(function* ( }); const buildDesktopArtifactCli = Command.make("build-desktop-artifact", { - platform: Flag.choice("platform", BuildPlatform.literals).pipe( + platform: Flag.Literals("platform", BuildPlatform.literals).pipe( Flag.withDescription("Build platform (env: T3CODE_DESKTOP_PLATFORM)."), Flag.optional, ), - target: Flag.string("target").pipe( + target: Flag.String("target").pipe( Flag.withDescription( "Artifact target, for example dmg/AppImage/nsis (env: T3CODE_DESKTOP_TARGET).", ), Flag.optional, ), - arch: Flag.choice("arch", BuildArch.literals).pipe( + arch: Flag.Literals("arch", BuildArch.literals).pipe( Flag.withDescription("Build arch, for example arm64/x64/universal (env: T3CODE_DESKTOP_ARCH)."), Flag.optional, ), - buildVersion: Flag.string("build-version").pipe( + buildVersion: Flag.String("build-version").pipe( Flag.withDescription("Artifact version metadata (env: T3CODE_DESKTOP_VERSION)."), Flag.optional, ), - outputDir: Flag.string("output-dir").pipe( + outputDir: Flag.String("output-dir").pipe( Flag.withDescription("Output directory for artifacts (env: T3CODE_DESKTOP_OUTPUT_DIR)."), Flag.optional, ), - skipBuild: Flag.boolean("skip-build").pipe( + skipBuild: Flag.Boolean("skip-build").pipe( Flag.withDescription( "Skip `vp run build:desktop` and use existing dist artifacts (env: T3CODE_DESKTOP_SKIP_BUILD).", ), Flag.optional, ), - keepStage: Flag.boolean("keep-stage").pipe( + keepStage: Flag.Boolean("keep-stage").pipe( Flag.withDescription("Keep temporary staging files (env: T3CODE_DESKTOP_KEEP_STAGE)."), Flag.optional, ), - signed: Flag.boolean("signed").pipe( + signed: Flag.Boolean("signed").pipe( Flag.withDescription( "Enable signing/notarization discovery; Windows uses Azure Trusted Signing (env: T3CODE_DESKTOP_SIGNED).", ), Flag.optional, ), - verbose: Flag.boolean("verbose").pipe( + verbose: Flag.Boolean("verbose").pipe( Flag.withDescription("Stream subprocess stdout (env: T3CODE_DESKTOP_VERBOSE)."), Flag.optional, ), - mockUpdates: Flag.boolean("mock-updates").pipe( + mockUpdates: Flag.Boolean("mock-updates").pipe( Flag.withDescription("Enable mock updates (env: T3CODE_DESKTOP_MOCK_UPDATES)."), Flag.optional, ), - mockUpdateServerPort: Flag.integer("mock-update-server-port").pipe( + mockUpdateServerPort: Flag.Int("mock-update-server-port").pipe( Flag.withSchema(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65535 }))), Flag.withDescription("Mock update server port (env: T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT)."), Flag.optional, ), - wslRuntime: Flag.string("wsl-runtime").pipe( + wslRuntime: Flag.String("wsl-runtime").pipe( Flag.withDescription( "Path to the Linux CLI release archive (t3--linux-x64.tar.gz) to embed as the WSL runtime of a Windows build (env: T3CODE_DESKTOP_WSL_RUNTIME).", ), diff --git a/scripts/build-npm-platform-packages.ts b/scripts/build-npm-platform-packages.ts index d823fc61df40ece7670a6d9ae1c73cac37ab5512..6a134d99e2c51f9fe96cd1eb20a4e19a2df0e55d 100644 --- a/scripts/build-npm-platform-packages.ts +++ b/scripts/build-npm-platform-packages.ts @@ -462,16 +462,16 @@ export const buildNpmPlatformPackages = Effect.fn("buildNpmPlatformPackages")(fu const command = Command.make( "build-npm-platform-packages", { - archivesDir: Flag.string("archives-dir").pipe( + archivesDir: Flag.String("archives-dir").pipe( Flag.withDescription("Directory holding the release's t3-- archives."), ), - version: Flag.string("version").pipe( + version: Flag.String("version").pipe( Flag.withDescription( "Exact release version; selects the archives and versions the packages.", ), ), - outputDir: Flag.string("output-dir").pipe(Flag.withDefault("npm-packages")), - allowMissing: Flag.boolean("allow-missing").pipe( + outputDir: Flag.String("output-dir").pipe(Flag.withDefault("npm-packages")), + allowMissing: Flag.Boolean("allow-missing").pipe( Flag.withDefault(false), Flag.withDescription("Build a launcher that lists only the platforms present."), ), diff --git a/scripts/dev-runner.ts b/scripts/dev-runner.ts index 5b16e9f90079e7e11111963d6997e20e7c836c4c..d11f8244bfeba8b144e08a1f2deaf214be2b7b69 100644 --- a/scripts/dev-runner.ts +++ b/scripts/dev-runner.ts @@ -202,22 +202,22 @@ export type DevRunnerError = typeof DevRunnerError.Type; export const isDevRunnerError = Schema.is(DevRunnerError); const optionalStringConfig = (name: string): Config.Config => - Config.string(name).pipe( + Config.String(name).pipe( Config.option, Config.map((value) => Option.getOrUndefined(value)), ); const optionalBooleanConfig = (name: string): Config.Config => - Config.boolean(name).pipe( + Config.Boolean(name).pipe( Config.option, Config.map((value) => Option.getOrUndefined(value)), ); const optionalPortConfig = (name: string): Config.Config => - Config.port(name).pipe( + Config.Port(name).pipe( Config.option, Config.map((value) => Option.getOrUndefined(value)), ); const optionalIntegerConfig = (name: string): Config.Config => - Config.int(name).pipe( + Config.Int(name).pipe( Config.option, Config.map((value) => Option.getOrUndefined(value)), ); @@ -856,41 +856,41 @@ export function runDevRunnerWithInput(input: DevRunnerCliInput) { } const devRunnerCli = Command.make("dev-runner", { - mode: Argument.choice("mode", DEV_RUNNER_MODES).pipe( + mode: Argument.Literals("mode", DEV_RUNNER_MODES).pipe( Argument.withDescription("Development mode to run."), ), - t3Home: Flag.string("home-dir").pipe( + t3Home: Flag.String("home-dir").pipe( Flag.withDescription( "Explicit T3 Code data directory; runtime state is stored under userdata (equivalent to T3CODE_HOME). Inside a git worktree this defaults to that worktree's own .t3 so dev state stays off the shared home.", ), Flag.optional, Flag.map(Option.getOrUndefined), ), - browser: Flag.boolean("browser").pipe( + browser: Flag.Boolean("browser").pipe( Flag.withDescription("Open a browser automatically (disabled by default for web dev)."), Flag.withDefault(false), ), - autoBootstrapProjectFromCwd: Flag.boolean("auto-bootstrap-project-from-cwd").pipe( + autoBootstrapProjectFromCwd: Flag.Boolean("auto-bootstrap-project-from-cwd").pipe( Flag.withDescription( "Auto-bootstrap toggle (equivalent to T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD).", ), Flag.withFallbackConfig(optionalBooleanConfig("T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD")), ), - logWebSocketEvents: Flag.boolean("log-websocket-events").pipe( + logWebSocketEvents: Flag.Boolean("log-websocket-events").pipe( Flag.withDescription("WebSocket event logging toggle (equivalent to T3CODE_LOG_WS_EVENTS)."), Flag.withAlias("log-ws-events"), Flag.withFallbackConfig(optionalBooleanConfig("T3CODE_LOG_WS_EVENTS")), ), - host: Flag.string("host").pipe( + host: Flag.String("host").pipe( Flag.withDescription("Server host/interface override (forwards to T3CODE_HOST)."), Flag.withFallbackConfig(optionalStringConfig("T3CODE_HOST")), ), - port: Flag.integer("port").pipe( + port: Flag.Int("port").pipe( Flag.withSchema(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65535 }))), Flag.withDescription("Server port override (forwards to T3CODE_PORT)."), Flag.withFallbackConfig(optionalPortConfig("T3CODE_PORT")), ), - devUrl: Flag.string("dev-url").pipe( + devUrl: Flag.String("dev-url").pipe( Flag.withSchema(Schema.URLFromString), Flag.withDescription( "Explicit web dev URL override (forwards to VITE_DEV_SERVER_URL). Ambient VITE_DEV_SERVER_URL values are ignored so a parent dev app cannot redirect the child runner.", @@ -898,17 +898,17 @@ const devRunnerCli = Command.make("dev-runner", { Flag.optional, Flag.map(Option.getOrUndefined), ), - dryRun: Flag.boolean("dry-run").pipe( + dryRun: Flag.Boolean("dry-run").pipe( Flag.withDescription("Resolve mode/ports/env and print, but do not spawn Vite+."), Flag.withDefault(false), ), - share: Flag.boolean("share").pipe( + share: Flag.Boolean("share").pipe( Flag.withDescription( "Publish the web dev server on this machine's tailnet over HTTPS (via `tailscale serve`) and print the pairing URL for it. Removed again on exit.", ), Flag.withDefault(false), ), - runArgs: Argument.string("run-arg").pipe( + runArgs: Argument.String("run-arg").pipe( Argument.withDescription("Additional Vite+ run args (pass after `--`)."), Argument.variadic(), ), diff --git a/scripts/export-brand-icons.ts b/scripts/export-brand-icons.ts index 3150aa2e396afdee975c2c71f4185304b442719d..620a98655367e9d9225ed62661ec98db81ac8296 100644 --- a/scripts/export-brand-icons.ts +++ b/scripts/export-brand-icons.ts @@ -790,7 +790,7 @@ export const exportBrandIcons = Effect.fn("exportBrandIcons")(function* (checkOn export const exportBrandIconsCommand = Command.make( "export-brand-icons", { - check: Flag.boolean("check").pipe( + check: Flag.Boolean("check").pipe( Flag.withDescription("Verify generated icon assets without modifying files."), Flag.withDefault(false), ), diff --git a/scripts/lib/build-target-arch.ts b/scripts/lib/build-target-arch.ts index eb804b226eae5963f68b4e9cf73df30dbe722654..b79c1746f88fcadb24c514d0b545773408b19fcc 100644 --- a/scripts/lib/build-target-arch.ts +++ b/scripts/lib/build-target-arch.ts @@ -11,8 +11,8 @@ interface PlatformConfig { } const WindowsProcessorArchitectureConfig = Config.all({ - processorArchitecture: Config.string("PROCESSOR_ARCHITECTURE").pipe(Config.option), - processorArchitectureW6432: Config.string("PROCESSOR_ARCHITEW6432").pipe(Config.option), + processorArchitecture: Config.String("PROCESSOR_ARCHITECTURE").pipe(Config.option), + processorArchitectureW6432: Config.String("PROCESSOR_ARCHITEW6432").pipe(Config.option), }); function normalizeWindowsArch(value: string | undefined): BuildArch | undefined { diff --git a/scripts/lib/cli-external-packages.test.ts b/scripts/lib/cli-external-packages.test.ts index 775c77fef1d8460cba66a326f2f19bc6c705d3c2..d9954d0eef4a012e00c6ce19e879c9b1d92ee1f8 100644 --- a/scripts/lib/cli-external-packages.test.ts +++ b/scripts/lib/cli-external-packages.test.ts @@ -20,8 +20,8 @@ import { // Only the field this test cares about; decoding ignores everything else. // optionalDependencies matter as much as dependencies here: every native family // in the list declares its actual platform bindings there (ffi-rs -> @yuuang/*, -// msgpackr-extract -> @msgpackr-extract/*, fff-node -> @ff-labs/fff-bin-*), so -// reading only `dependencies` would check nothing for exactly those packages. +// fff-node -> @ff-labs/fff-bin-*), so reading only `dependencies` would check +// nothing for exactly those packages. const PackageManifest = Schema.Struct({ dependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)), optionalDependencies: Schema.optional(Schema.Record(Schema.String, Schema.String)), @@ -49,8 +49,7 @@ describe("shouldBundleCliDependency", () => { "@yuuang/ffi-rs-win32-x64-msvc", "@ff-labs/fff-node", "@clerk/electron-passkeys", - "msgpackr-extract", - "@msgpackr-extract/msgpackr-extract-win32-x64", + "node-addon-api", ]) { assert.strictEqual(shouldBundleCliDependency(id), false, id); } @@ -82,7 +81,7 @@ describe("selectCliRuntimeExternalDependencies", () => { it("selects every external root declared by the server", () => { assert.deepStrictEqual( Object.keys(selectCliRuntimeExternalDependencies(serverPackageJson.dependencies)).sort(), - ["@ff-labs/fff-node", "msgpackr-extract", "node-pty"], + ["@ff-labs/fff-node", "node-pty"], ); }); }); @@ -92,12 +91,13 @@ describe("selectCliRuntimeExternalDependencies", () => { // bundled away instead of left external, that dependency does not follow the // selected root into the sidecar. // -// Found the hard way: node-gyp-build-optional-packages requires detect-libc, -// which was bundled. Windows was fine; WSL got MODULE_NOT_FOUND. +// Found the hard way: msgpackr-extract's node-gyp-build-optional-packages +// required detect-libc, which was bundled. Windows was fine; WSL got +// MODULE_NOT_FOUND. it.layer(NodeServices.layer)("external package dependency closure", (it) => { // Read manifests off disk from the pnpm store rather than resolving them. // `require("/package.json")` cannot do this job: under pnpm isolation a - // transitive package (detect-libc, msgpackr-extract, ffi-rs) is not reachable + // transitive package (node-addon-api, ffi-rs) is not reachable // by name from this file at all, and an `exports` map can refuse the // `/package.json` subpath outright (@ff-labs/fff-node). Both surface as "not // installed", which would let this test skip everything and pass while @@ -158,9 +158,10 @@ it.layer(NodeServices.layer)("external package dependency closure", (it) => { const found = [...installed.keys()].filter(isRuntimeExternal); // Without this the closure check below can pass vacuously: if nothing is - // read, nothing is checked. These are the packages whose closure actually - // broke WSL, so require them by name. - for (const required of ["node-pty", "node-gyp-build-optional-packages", "detect-libc"]) { + // read, nothing is checked. node-pty is the one native root every + // platform ships, and node-addon-api is its transitive runtime + // dependency, so require them by name. + for (const required of ["node-pty", "node-addon-api"]) { assert.ok( found.includes(required), `expected ${required} in the pnpm store; the closure check is only meaningful if it can read these (found ${found.length})`, @@ -220,13 +221,13 @@ var x = 1; it("flags an external package that was inlined", () => { const source = - region("../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/process.js") + + region("../../node_modules/.pnpm/node-addon-api@7.1.1/node_modules/node-addon-api/index.js") + region( - "../../node_modules/.pnpm/msgpackr-extract@3.0.4/node_modules/msgpackr-extract/index.js", + "../../node_modules/.pnpm/node-gyp-build-optional-packages@5.2.2/node_modules/node-gyp-build-optional-packages/index.js", ); const result = findInlinedExternalPackages(source); - assert.deepStrictEqual(result.inlined, ["detect-libc", "msgpackr-extract"]); + assert.deepStrictEqual(result.inlined, ["node-addon-api", "node-gyp-build-optional-packages"]); assert.strictEqual(result.regionCount, 2); }); @@ -271,7 +272,7 @@ var x = 1; }); it("reports no regions when the marker format is absent", () => { - const result = findInlinedExternalPackages("var x = 1; // node_modules/detect-libc/lib.js"); + const result = findInlinedExternalPackages("var x = 1; // node_modules/node-pty/lib.js"); assert.strictEqual(result.regionCount, 0); assert.deepStrictEqual(result.inlined, []); }); diff --git a/scripts/lib/cli-external-packages.ts b/scripts/lib/cli-external-packages.ts index 254ce3dc27194aa6d66e058800afe72b4531f9cf..5acffdfd30032d2d611d6fa4e29cf8c690469cca 100644 --- a/scripts/lib/cli-external-packages.ts +++ b/scripts/lib/cli-external-packages.ts @@ -34,13 +34,8 @@ export const CLI_RUNTIME_EXTERNAL_PREFIXES = [ "@yuuang/", "@ff-labs/", "@clerk/electron-passkeys", - "@msgpackr-extract/", - "msgpackr-extract", "node-gyp-build", "node-addon-api", - // Required by node-gyp-build-optional-packages. Not native, but in the - // closure: without it, WSL gets MODULE_NOT_FOUND while Windows is fine. - "detect-libc", // ws's optional accelerators. Nothing in this repo declares them, so they are // not in the staged production install and the packaged app does not ship // them either way -- ws wraps the require in try/catch and falls back to its @@ -63,9 +58,9 @@ export function isRuntimeExternalCliDependency(id: string): boolean { * This has to be wired to the bundler's `neverBundle`, not just to * `alwaysBundle`. `alwaysBundle` only forces packages IN — returning false from * it means "no opinion", and the default then applies: a declared dependency - * stays external, but a transitive one gets bundled. That is how - * msgpackr-extract, node-gyp-build-optional-packages and detect-libc ended up - * inlined while node-pty (a declared dependency) stayed external. + * stays external, but a transitive one gets bundled. That is how a native + * loader such as node-gyp-build ended up inlined while node-pty (a declared + * dependency) stayed external. */ export function isExternalCliDependency(id: string): boolean { return isRuntimeExternalCliDependency(id); @@ -126,9 +121,10 @@ export function findEsmImportsOfExternalPackages(source: string): ReadonlyArray< * Configuring the bundler is not the same as checking what it produced. The * `alwaysBundle` predicate only forces packages IN; returning false from it * means "no opinion", so a transitive dependency still gets bundled by default. - * msgpackr-extract, node-gyp-build-optional-packages and detect-libc were - * inlined that way while every list-based test passed, which is why this reads - * the artifact instead. + * A native loader and its helper (node-gyp-build-optional-packages and + * detect-libc, when msgpackr-extract was still a dependency) were inlined that + * way while every list-based test passed, which is why this reads the artifact + * instead. * * `regionCount` is reported so the caller can tell "nothing was inlined" apart * from "the marker format changed and this scan no longer sees anything". diff --git a/scripts/merge-update-manifests.ts b/scripts/merge-update-manifests.ts index f7ba30f8a3079151453cf70f0d4c561be5066d4d..a3cb63878b6c7b2ba11631e61e40abc6056e3a3b 100644 --- a/scripts/merge-update-manifests.ts +++ b/scripts/merge-update-manifests.ts @@ -79,18 +79,18 @@ export const mergeUpdateManifestFiles = Effect.fn("mergeUpdateManifestFiles")(fu export const mergeUpdateManifestsCommand = Command.make( "merge-update-manifests", { - platform: Flag.choice("platform", UpdateManifestPlatform.literals).pipe( + platform: Flag.Literals("platform", UpdateManifestPlatform.literals).pipe( Flag.withDescription("Update manifest platform."), ), - primaryPath: Argument.string("primary-path").pipe( + primaryPath: Argument.String("primary-path").pipe( Argument.withDescription("Primary update manifest path. Defaults to the output path."), ), - secondaryPath: Argument.string("secondary-path").pipe( + secondaryPath: Argument.String("secondary-path").pipe( Argument.withDescription( "Secondary update manifest path to merge into the primary manifest.", ), ), - outputPath: Argument.string("output-path").pipe( + outputPath: Argument.String("output-path").pipe( Argument.withDescription("Optional output path for the merged manifest."), Argument.optional, ), diff --git a/scripts/mobile-native-client.ts b/scripts/mobile-native-client.ts index c93a644bc4939acd4654a3a10f0c64c8f996e5b0..a1324c0a2c6da30eee8723c8ef5708d8c83c4a37 100644 --- a/scripts/mobile-native-client.ts +++ b/scripts/mobile-native-client.ts @@ -126,7 +126,7 @@ export const hashBundle = Effect.fn("hashBundle")(function* (root: string) { entries.push(`directory:${key}`); yield* visit(key); } else { - const chunks = yield* fs.stream(absolute, { chunkSize: FileSystem.Size(65536) }).pipe( + const chunks = yield* fs.stream(absolute, { chunkSize: 65536 }).pipe( Stream.mapEffect((chunk) => digest(chunk)), Stream.runCollect, ); @@ -291,9 +291,9 @@ export const installedBinary = Effect.fn("installedBinary")(function* ( const main = Command.make( "mobile-native-client", { - mode: Argument.choice("mode", ["check", "ensure"]), - platform: Argument.choice("platform", ["ios", "android"]), - device: Argument.string("device"), + mode: Argument.Literals("mode", ["check", "ensure"]), + platform: Argument.Literals("platform", ["ios", "android"]), + device: Argument.String("device"), }, Effect.fn("nativeClient.main")(function* ({ mode, platform, device }) { yield* validateDevice(platform, device); diff --git a/scripts/mock-update-server.ts b/scripts/mock-update-server.ts index de50a6c04592b6e08c17e75d7a53b894a6ac11b7..e65d41f0e8725c8fe29bdd60ba7e39bace43b162 100644 --- a/scripts/mock-update-server.ts +++ b/scripts/mock-update-server.ts @@ -18,8 +18,8 @@ const resolveMockUpdateServerConfig = Effect.gen(function* () { const fileSystem = yield* FileSystem.FileSystem; const path = yield* Path.Path; const config = yield* Config.all({ - port: Config.port("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe(Config.withDefault(3000)), - root: Config.string("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_ROOT").pipe( + port: Config.Port("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_PORT").pipe(Config.withDefault(3000)), + root: Config.String("T3CODE_DESKTOP_MOCK_UPDATE_SERVER_ROOT").pipe( Config.withDefault("../release-mock"), ), }); diff --git a/scripts/notify-discord-release.ts b/scripts/notify-discord-release.ts index 431ddfcd45166ec0758199a8a4f59711a66b50ae..8f9f1d7a33b657634bbae1eb50ba986393229501 100644 --- a/scripts/notify-discord-release.ts +++ b/scripts/notify-discord-release.ts @@ -49,7 +49,7 @@ interface DiscordWebhookPayload { const DISCORD_RELEASE_TARGETS = ["prerelease", "latest"] as const; const DiscordRoleIdSchema = Schema.String.check(Schema.isPattern(/^\d+$/)); -const DiscordWebhookUrl = Config.url("DISCORD_WEBHOOK_URL"); +const DiscordWebhookUrl = Config.URL("DISCORD_WEBHOOK_URL"); const discordReleaseErrorContext = { target: Schema.Literals(["prerelease", "latest"]), @@ -221,26 +221,26 @@ export const postDiscordWebhook = Effect.fn("postDiscordWebhook")(function* ( export const notifyDiscordReleaseCommand = Command.make( "notify-discord-release", { - target: Argument.choice("target", DISCORD_RELEASE_TARGETS).pipe( + target: Argument.Literals("target", DISCORD_RELEASE_TARGETS).pipe( Argument.withDescription("Discord announcement target: prerelease or latest."), ), - roleId: Flag.string("role-id").pipe( + roleId: Flag.String("role-id").pipe( Flag.withSchema(DiscordRoleIdSchema), Flag.withDescription("Discord role ID to mention in the release announcement."), ), - releaseName: Flag.string("release-name").pipe( + releaseName: Flag.String("release-name").pipe( Flag.withSchema(Schema.NonEmptyString), Flag.withDescription("Human-readable release name."), ), - releaseVersion: Flag.string("release-version").pipe( + releaseVersion: Flag.String("release-version").pipe( Flag.withSchema(Schema.NonEmptyString), Flag.withDescription("Release version."), ), - tag: Flag.string("tag").pipe( + tag: Flag.String("tag").pipe( Flag.withSchema(Schema.NonEmptyString), Flag.withDescription("Git tag for the release."), ), - releaseUrl: Flag.string("release-url").pipe( + releaseUrl: Flag.String("release-url").pipe( Flag.withSchema(Schema.URLFromString), Flag.withDescription("Public GitHub release URL."), ), diff --git a/scripts/resolve-nightly-release.ts b/scripts/resolve-nightly-release.ts index 08e48550e610a0bc23e775c4a3b53a1fa0e122f1..c2413c23dc4941c28abe06d307f68c41261c55b1 100644 --- a/scripts/resolve-nightly-release.ts +++ b/scripts/resolve-nightly-release.ts @@ -171,7 +171,7 @@ export const writeNightlyReleaseOutput = Effect.fn("writeNightlyReleaseOutput")( ] as const; if (writeGithubOutput) { - const githubOutputPath = yield* Config.nonEmptyString("GITHUB_OUTPUT").pipe( + const githubOutputPath = yield* Config.NonEmptyString("GITHUB_OUTPUT").pipe( Effect.mapError( (cause) => new NightlyReleaseGitHubOutputConfigError({ @@ -199,27 +199,27 @@ export const writeNightlyReleaseOutput = Effect.fn("writeNightlyReleaseOutput")( const command = Command.make( "resolve-nightly-release", { - date: Flag.string("date").pipe( + date: Flag.String("date").pipe( Flag.withSchema(DateSchema), Flag.withDescription("Nightly build date in YYYYMMDD."), ), - runNumber: Flag.string("run-number").pipe( + runNumber: Flag.String("run-number").pipe( Flag.withSchema(RunNumberSchema), Flag.withDescription("GitHub Actions run number."), ), - sha: Flag.string("sha").pipe( + sha: Flag.String("sha").pipe( Flag.withSchema(ShaSchema), Flag.withDescription("Commit sha for the nightly build."), ), - channel: Flag.choice("channel", PrereleaseChannel.literals).pipe( + channel: Flag.Literals("channel", PrereleaseChannel.literals).pipe( Flag.withDescription("Prerelease channel whose identifier the version carries."), Flag.withDefault("nightly" as const), ), - githubOutput: Flag.boolean("github-output").pipe( + githubOutput: Flag.Boolean("github-output").pipe( Flag.withDescription("Write values to GITHUB_OUTPUT instead of stdout."), Flag.withDefault(false), ), - root: Flag.string("root").pipe( + root: Flag.String("root").pipe( Flag.withDescription("Workspace root used to resolve apps/desktop/package.json."), Flag.optional, ), diff --git a/scripts/resolve-previous-release-tag.ts b/scripts/resolve-previous-release-tag.ts index 080d93cf7d6ac34ff06a2306182187d5e65107d2..9dcb656b3955c27ef154fcf74d80857e95e0145c 100644 --- a/scripts/resolve-previous-release-tag.ts +++ b/scripts/resolve-previous-release-tag.ts @@ -320,7 +320,7 @@ export const writePreviousReleaseTagOutput = Effect.fn("writePreviousReleaseTagO if (writeGithubOutput) { const fs = yield* FileSystem.FileSystem; - const githubOutputPath = yield* Config.nonEmptyString("GITHUB_OUTPUT").pipe( + const githubOutputPath = yield* Config.NonEmptyString("GITHUB_OUTPUT").pipe( Effect.mapError( (cause) => new PreviousReleaseTagGitHubOutputConfigError({ @@ -346,13 +346,13 @@ export const writePreviousReleaseTagOutput = Effect.fn("writePreviousReleaseTagO const command = Command.make( "resolve-previous-release-tag", { - channel: Flag.choice("channel", ReleaseChannel.literals).pipe( + channel: Flag.Literals("channel", ReleaseChannel.literals).pipe( Flag.withDescription("Release channel whose previous tag should be resolved."), ), - currentTag: Flag.string("current-tag").pipe( + currentTag: Flag.String("current-tag").pipe( Flag.withDescription("Current release tag to compare against."), ), - githubOutput: Flag.boolean("github-output").pipe( + githubOutput: Flag.Boolean("github-output").pipe( Flag.withDescription("Write values to GITHUB_OUTPUT instead of stdout."), Flag.withDefault(false), ), diff --git a/scripts/smoke-cli-archive.ts b/scripts/smoke-cli-archive.ts index e24aded91314635382bf43692de112daa7207cf5..cce14d5654f186918c8342ff7378705c610b0170 100644 --- a/scripts/smoke-cli-archive.ts +++ b/scripts/smoke-cli-archive.ts @@ -177,8 +177,8 @@ const smokeCliArchive = Effect.fn("smokeCliArchive")(function* (input: { const command = Command.make( "smoke-cli-archive", { - archive: Flag.string("archive"), - expectVersion: Flag.string("expect-version"), + archive: Flag.String("archive"), + expectVersion: Flag.String("expect-version"), }, (input) => smokeCliArchive(input).pipe(Effect.scoped), ).pipe(Command.withDescription("Extract a CLI archive and run its executable.")); diff --git a/scripts/sync-reference-repos.ts b/scripts/sync-reference-repos.ts index f39a8d708a65424ab43c8e597045842a8780eb61..2cb13d42683b49b2a84c1c5c6a0016ac6b5e5d64 100644 --- a/scripts/sync-reference-repos.ts +++ b/scripts/sync-reference-repos.ts @@ -296,21 +296,21 @@ export const syncReferenceRepos = Effect.fn("syncReferenceRepos")(function* ( export const syncReferenceReposCommand = Command.make( "sync-reference-repos", { - repo: Flag.string("repo").pipe( + repo: Flag.String("repo").pipe( Flag.withDescription("Sync only the named reference repo. Defaults to all configured repos."), Flag.optional, ), - latest: Flag.boolean("latest").pipe( + latest: Flag.Boolean("latest").pipe( Flag.withDescription( "Sync each repo from its latest branch instead of the installed version.", ), Flag.withDefault(false), ), - root: Flag.string("root").pipe( + root: Flag.String("root").pipe( Flag.withDescription("Workspace root used to resolve versions and subtree prefixes."), Flag.optional, ), - dryRun: Flag.boolean("dry-run").pipe( + dryRun: Flag.Boolean("dry-run").pipe( Flag.withDescription("Print planned subtree operations without running git."), Flag.withDefault(false), ), diff --git a/scripts/update-release-package-versions.ts b/scripts/update-release-package-versions.ts index 6c1d28c8e384fdbcd73315b4051f8c0a322d3668..ec825d709d683b6eb1198f6178497525413d49ed 100644 --- a/scripts/update-release-package-versions.ts +++ b/scripts/update-release-package-versions.ts @@ -125,7 +125,7 @@ export const updateReleasePackageVersions = Effect.fn("updateReleasePackageVersi const writeGithubOutput = Effect.fn("writeGithubOutput")(function* (changed: boolean) { const fs = yield* FileSystem.FileSystem; - const githubOutputPath = yield* Config.nonEmptyString("GITHUB_OUTPUT").pipe( + const githubOutputPath = yield* Config.NonEmptyString("GITHUB_OUTPUT").pipe( Effect.mapError( (cause) => new ReleaseGitHubOutputConfigurationError({ @@ -147,14 +147,14 @@ const writeGithubOutput = Effect.fn("writeGithubOutput")(function* (changed: boo export const updateReleasePackageVersionsCommand = Command.make( "update-release-package-versions", { - version: Argument.string("version").pipe( + version: Argument.String("version").pipe( Argument.withDescription("Release version to write into each releasable package.json."), ), - root: Flag.string("root").pipe( + root: Flag.String("root").pipe( Flag.withDescription("Workspace root used to resolve the release package manifests."), Flag.optional, ), - githubOutput: Flag.boolean("github-output").pipe( + githubOutput: Flag.Boolean("github-output").pipe( Flag.withDescription("Append changed= to GITHUB_OUTPUT."), Flag.withDefault(false), ),