diff --git a/apps/ai/package.json b/apps/ai/package.json index 3b580d861e..1aea70f460 100644 --- a/apps/ai/package.json +++ b/apps/ai/package.json @@ -33,15 +33,15 @@ "@maple/query-model": "workspace:*", "@maple/security-audit": "workspace:*", "@maple/widgets": "workspace:*", - "@yielded/agent": "0.1.0-beta.190", - "@yielded/agent-platform-cloudflare": "0.1.0-beta.190", + "@yielded/agent": "0.1.0-beta.191", + "@yielded/agent-platform-cloudflare": "0.1.0-beta.191", "effect": "catalog:effect" }, "devDependencies": { "@cloudflare/workers-types": "catalog:alchemy", "@effect/vitest": "catalog:effect", "@types/node": "catalog:tooling", - "@yielded/agent-testing": "0.1.0-beta.190", + "@yielded/agent-testing": "0.1.0-beta.191", "gpt-tokenizer": "^4.1.0", "typescript": "catalog:tooling", "vitest": "catalog:" diff --git a/apps/ai/src/platform/Llm.test.ts b/apps/ai/src/platform/Llm.test.ts index 5c5bb37555..2b5eabbffa 100644 --- a/apps/ai/src/platform/Llm.test.ts +++ b/apps/ai/src/platform/Llm.test.ts @@ -468,7 +468,7 @@ const sseBody = ( * The one tool the streaming fixtures declare. A `tool-call` part is decoded against the toolkit * the call declared, so a stream that returns one is only readable with the tool in hand. */ -const listServices = Tool.make("list_services", { parameters: Schema.Struct({}) }) +const listServices = Tool.make("list_services") /** * How one streaming fixture is shaped: the wire, plus whether the call declares a tool. Only a diff --git a/apps/local-ui/package.json b/apps/local-ui/package.json index f7d1f5a5ed..46fb60154d 100644 --- a/apps/local-ui/package.json +++ b/apps/local-ui/package.json @@ -11,7 +11,7 @@ "dependencies": { "@alchemy.run/cloudflare": "catalog:alchemy", "@floating-ui/dom": "1.8.0", - "@foldkit/ui": "0.169.0", + "@foldkit/ui": "0.170.0", "@fontsource-variable/geist": "^5.3.0", "@fontsource-variable/geist-mono": "^5.3.0", "@maple/domain": "workspace:*", @@ -22,10 +22,10 @@ "@tanstack/charts": "catalog:charts", "@tanstack/charts-scales": "catalog:charts", "effect": "catalog:effect", - "foldkit": "0.169.0" + "foldkit": "0.170.0" }, "devDependencies": { - "@foldkit/vite-plugin": "0.28.0", + "@foldkit/vite-plugin": "0.29.0", "@tailwindcss/vite": "catalog:tailwind", "@types/node": "catalog:tooling", "tailwindcss": "catalog:tailwind", diff --git a/apps/scraper/src/OtlpIngest.test.ts b/apps/scraper/src/OtlpIngest.test.ts index da5448eb17..d163616710 100644 --- a/apps/scraper/src/OtlpIngest.test.ts +++ b/apps/scraper/src/OtlpIngest.test.ts @@ -24,15 +24,14 @@ const TestLayer = OtlpIngest.layer.pipe( Layer.provide(Layer.mergeAll(FetchHttpClient.layer, Layer.succeed(ScraperEnv, testEnv))), ) -/** Lets the stubbed fetch settle on the real event loop, then moves the test clock past a backoff. */ -const settleAndAdvance = (steps: number, by: Duration.Input = "2 seconds") => - Effect.forEach( - Array.from({ length: steps }), - () => - Effect.promise(() => new Promise((resolve) => setTimeout(resolve, 0))).pipe( - Effect.andThen(TestClock.adjust(by)), - ), - { discard: true }, +/** + * Lets the stubbed fetch settle on the real event loop and moves the test clock past a backoff, + * until `fiber` exits. A fixed tick count races the libuv gzip when the machine is loaded. + */ +const advanceUntilDone = (fiber: Fiber.Fiber, by: Duration.Input = "2 seconds") => + Effect.promise(() => new Promise((resolve) => setTimeout(resolve, 0))).pipe( + Effect.andThen(TestClock.adjust(by)), + Effect.repeat({ until: () => fiber.pollUnsafe() !== undefined, times: 100 }), ) const SAMPLE_REQUEST: OtlpExportRequest = { @@ -172,7 +171,7 @@ describe("OtlpIngest", () => { ), ), ) - yield* settleAndAdvance(2) + yield* advanceUntilDone(fiber) yield* Fiber.join(fiber) assert.lengthOf(recorded, 2) }).pipe(Effect.provide(TestLayer)), @@ -218,7 +217,7 @@ describe("OtlpIngest", () => { { startImmediately: true }, ) // Each of the three attempts times out at 30s, with a backoff between them. - yield* settleAndAdvance(3, "35 seconds") + yield* advanceUntilDone(fiber, "35 seconds") const error = yield* Fiber.join(fiber) assert.strictEqual(error.reason, "scrape_failed") assert.strictEqual(error.statusCode, null) diff --git a/apps/web/package.json b/apps/web/package.json index 7016c7cdbd..db7ccf39fb 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -13,10 +13,10 @@ "dependencies": { "@alchemy.run/cloudflare": "catalog:alchemy", "@clerk/themes": "^2.4.57", - "@effect/platform-browser": "4.0.6", + "@effect/platform-browser": "4.1.0", "@floating-ui/dom": "1.8.0", - "@foldkit/markdown": "0.14.4", - "@foldkit/ui": "0.169.0", + "@foldkit/markdown": "0.15.0", + "@foldkit/ui": "0.170.0", "@fontsource-variable/geist": "^5.3.0", "@fontsource-variable/geist-mono": "^5.3.0", "@maple-dev/effect-sdk": "workspace:*", @@ -46,14 +46,14 @@ "d3-scale": "^4.0.2", "d3-shape": "^3.2.0", "effect": "catalog:effect", - "foldkit": "0.169.0", + "foldkit": "0.170.0", "fuse.js": "7.5.0", "three": "^0.186.1", "uqr": "^0.1.3" }, "devDependencies": { "@e2e-dev/web": "0.15.3", - "@foldkit/vite-plugin": "0.28.0", + "@foldkit/vite-plugin": "0.29.0", "@tailwindcss/vite": "catalog:tailwind", "@types/d3-scale": "^4.0.9", "@types/d3-shape": "^3.2.0", diff --git a/bun.lock b/bun.lock index 111b3cc79c..c9af2953f1 100644 --- a/bun.lock +++ b/bun.lock @@ -17,7 +17,7 @@ "@changesets/cli": "3.0.3", "@cloudflare/workers-types": "catalog:alchemy", "@effect/platform-node": "catalog:effect", - "@effect/sql-pg": "4.0.6", + "@effect/sql-pg": "4.1.0", "@effect/tsgo": "0.57.0", "@effect/vitest": "catalog:effect", "@maple-dev/effect-orm": "0.8.0", @@ -57,15 +57,15 @@ "@maple/query-model": "workspace:*", "@maple/security-audit": "workspace:*", "@maple/widgets": "workspace:*", - "@yielded/agent": "0.1.0-beta.190", - "@yielded/agent-platform-cloudflare": "0.1.0-beta.190", + "@yielded/agent": "0.1.0-beta.191", + "@yielded/agent-platform-cloudflare": "0.1.0-beta.191", "effect": "catalog:effect", }, "devDependencies": { "@cloudflare/workers-types": "catalog:alchemy", "@effect/vitest": "catalog:effect", "@types/node": "catalog:tooling", - "@yielded/agent-testing": "0.1.0-beta.190", + "@yielded/agent-testing": "0.1.0-beta.191", "gpt-tokenizer": "^4.1.0", "typescript": "catalog:tooling", "vitest": "catalog:", @@ -237,7 +237,7 @@ "dependencies": { "@alchemy.run/cloudflare": "catalog:alchemy", "@floating-ui/dom": "1.8.0", - "@foldkit/ui": "0.169.0", + "@foldkit/ui": "0.170.0", "@fontsource-variable/geist": "^5.3.0", "@fontsource-variable/geist-mono": "^5.3.0", "@maple/domain": "workspace:*", @@ -248,10 +248,10 @@ "@tanstack/charts": "catalog:charts", "@tanstack/charts-scales": "catalog:charts", "effect": "catalog:effect", - "foldkit": "0.169.0", + "foldkit": "0.170.0", }, "devDependencies": { - "@foldkit/vite-plugin": "0.28.0", + "@foldkit/vite-plugin": "0.29.0", "@tailwindcss/vite": "catalog:tailwind", "@types/node": "catalog:tooling", "tailwindcss": "catalog:tailwind", @@ -302,10 +302,10 @@ "dependencies": { "@alchemy.run/cloudflare": "catalog:alchemy", "@clerk/themes": "^2.4.57", - "@effect/platform-browser": "4.0.6", + "@effect/platform-browser": "4.1.0", "@floating-ui/dom": "1.8.0", - "@foldkit/markdown": "0.14.4", - "@foldkit/ui": "0.169.0", + "@foldkit/markdown": "0.15.0", + "@foldkit/ui": "0.170.0", "@fontsource-variable/geist": "^5.3.0", "@fontsource-variable/geist-mono": "^5.3.0", "@maple-dev/effect-sdk": "workspace:*", @@ -335,14 +335,14 @@ "d3-scale": "^4.0.2", "d3-shape": "^3.2.0", "effect": "catalog:effect", - "foldkit": "0.169.0", + "foldkit": "0.170.0", "fuse.js": "7.5.0", "three": "^0.186.1", "uqr": "^0.1.3", }, "devDependencies": { "@e2e-dev/web": "0.15.3", - "@foldkit/vite-plugin": "0.28.0", + "@foldkit/vite-plugin": "0.29.0", "@tailwindcss/vite": "catalog:tailwind", "@types/d3-scale": "^4.0.9", "@types/d3-shape": "^3.2.0", @@ -373,7 +373,7 @@ "name": "@maple-examples/effect-todo", "version": "0.0.5", "dependencies": { - "@effect/atom-react": "4.0.6", + "@effect/atom-react": "4.1.0", "@effect/platform-bun": "catalog:effect", "@maple-dev/effect-sdk": "workspace:*", "effect": "catalog:effect", @@ -670,8 +670,8 @@ "packages/db": { "name": "@maple/db", "dependencies": { - "@effect/sql-pg": "4.0.6", - "@effect/sql-pglite": "4.0.6", + "@effect/sql-pg": "4.1.0", + "@effect/sql-pglite": "4.1.0", "@electric-sql/pglite": "^0.5.12", "@maple-dev/effect-orm": "0.8.0", "@maple/domain": "workspace:*", @@ -933,16 +933,17 @@ }, "patchedDependencies": { "@alchemy.run/aws@2.0.0-beta.84": "patches/@alchemy.run%2Faws@2.0.0-beta.84.patch", - "@effect/vitest@4.0.6": "patches/@effect%2Fvitest@4.0.6.patch", - "effect@4.0.6": "patches/effect@4.0.6.patch", + "effect@4.1.0": "patches/effect@4.1.0.patch", + "alchemy@2.0.0-beta.84": "patches/alchemy@2.0.0-beta.84.patch", + "@effect/ai-openrouter@4.1.0": "patches/@effect%2Fai-openrouter@4.1.0.patch", "@cloudflare/workers-types@5.20261005.1": "patches/@cloudflare%2Fworkers-types@5.20261005.1.patch", - "@effect/ai-openrouter@4.0.6": "patches/@effect%2Fai-openrouter@4.0.6.patch", + "@effect/vitest@4.1.0": "patches/@effect%2Fvitest@4.1.0.patch", "@alchemy.run/cloudflare@2.0.0-beta.84": "patches/@alchemy.run%2Fcloudflare@2.0.0-beta.84.patch", }, "overrides": { - "@effect/platform-browser": "4.0.6", - "@effect/sql-d1": "4.0.6", - "@effect/sql-sqlite-do": "4.0.6", + "@effect/platform-browser": "4.1.0", + "@effect/sql-d1": "4.1.0", + "@effect/sql-sqlite-do": "4.1.0", "workerd": "1.20261002.1", }, "catalog": { @@ -967,12 +968,12 @@ "@tanstack/charts-scales": "1.0.0", }, "effect": { - "@effect/ai-openai-compat": "4.0.6", - "@effect/ai-openrouter": "4.0.6", - "@effect/platform-bun": "4.0.6", - "@effect/platform-node": "4.0.6", - "@effect/vitest": "4.0.6", - "effect": "4.0.6", + "@effect/ai-openai-compat": "4.1.0", + "@effect/ai-openrouter": "4.1.0", + "@effect/platform-bun": "4.1.0", + "@effect/platform-node": "4.1.0", + "@effect/vitest": "4.1.0", + "effect": "4.1.0", }, "react": { "@types/react": "^19.3.0", @@ -1222,27 +1223,27 @@ "@e2e-dev/web": ["@e2e-dev/web@0.15.3", "", { "dependencies": { "playwright-core": "1.64.1" }, "peerDependencies": { "e2e": ">=0.18.0 <1" }, "bin": { "e2e-web": "./dist/bin.js" } }, "sha512-S15TxVQsSTvjEd00r/fZs0tX/gvq53EhWMtSCYhydnMA9QdfE83GpgiXeRqrBDzNhfbm6f1TwJeANw+qW/4T4A=="], - "@effect/ai-openai-compat": ["@effect/ai-openai-compat@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6" } }, "sha512-+1g/0M6d8RD1RhBWE6c9MRvuPImNn5YliCKUOg+I0UYc+FSikDE774F0oteoF1zhR/0hTsoWgHiqNDSGvgPe9g=="], + "@effect/ai-openai-compat": ["@effect/ai-openai-compat@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0" } }, "sha512-PD9z2CD1zdLel8qEQUG4NAw+HHvXhy5yRF2pwSN44YiB5iGohrRe5AOTb1VYflJVUjlqyjFzTU3g5JtvAKyLMQ=="], - "@effect/ai-openrouter": ["@effect/ai-openrouter@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6" } }, "sha512-dQ7hd1+Dw0V4/A94anGxYBO1h6xu2Al92GZ8KgrlxuZFnBXjEhdFKPzyd0VYT6KfUrRqRCDGs4uHvuoa7GuSmw=="], + "@effect/ai-openrouter": ["@effect/ai-openrouter@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0" } }, "sha512-nukERW2MOXbaEtQIBQPsEHlbEdSiDP8aOhx7IS+jBZiNofTj1sn9rrquW9PANbb1G6fLMN5bt1IQws/T3KjE3g=="], - "@effect/atom-react": ["@effect/atom-react@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6", "react": ">=19.0.0 <20.0.0", "scheduler": ">=0.25.0 <0.29.0" } }, "sha512-DpbuEdaJl+2/GW4KkrKtRD8YVPT+I29bh/TFE7JCGkB4YNiHWNE5q69EagDeK/QXi4RlSb+iR+rNGkORJ9qB/A=="], + "@effect/atom-react": ["@effect/atom-react@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0", "react": ">=19.0.0 <20.0.0", "scheduler": ">=0.25.0 <0.29.0" } }, "sha512-PeaBDmwqG9BPQfaPHeWCB2NF4NQaFlI6poKxjlBHMrMjKqV+LVBdryhpDNqSZOhqGgT+qnh9gV+19MYjNOQ+bg=="], - "@effect/platform-browser": ["@effect/platform-browser@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6" } }, "sha512-i4bf1+FlUnZypqK0pQ5cq46KhroTgqFGktFn2WorwIk+yc+RuZO6qsF+Sk6lY5uHwdHTOLGMlnlXSJ8u1UG42g=="], + "@effect/platform-browser": ["@effect/platform-browser@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0" } }, "sha512-IEyaPzejKozHDupOUSjQIgQYGv2C0I828up8z7/nvQTHzmQHUS2/tGMEwXX/FwAvnrWZ0H9MhlhTl18ZgCHQiQ=="], - "@effect/platform-bun": ["@effect/platform-bun@4.0.6", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.6" }, "peerDependencies": { "effect": "^4.0.6" } }, "sha512-RAsGcIVcqhV4aBiM07VnMeNWDyewp8WDwTdIUtiklUDBRtddDllYzPsTlsn+0gLdpdz2lGnMEOFzoNaNrcMfSA=="], + "@effect/platform-bun": ["@effect/platform-bun@4.1.0", "", { "dependencies": { "@effect/platform-node-shared": "^4.1.0" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-ZgIV+tV2utcbiopbWSoJuGn3FZuyqhLWIYITFCR8vlwnKicO1q0WgP4BBjDUYUTMRPEU/N1+BcZourAgpiDI/w=="], - "@effect/platform-node": ["@effect/platform-node@4.0.6", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.6", "undici": "^8.12.2" }, "peerDependencies": { "effect": "^4.0.6", "redis": ">=5.0.0 <7.0.0" } }, "sha512-gXvGHAy0/8PZbWvMMguloDUyeSP+rzYEo3FSEqUuGduxo9ORcGioDxPI+GOLCIFfam7VuNkmSUxBOiRMIrMrBw=="], + "@effect/platform-node": ["@effect/platform-node@4.1.0", "", { "dependencies": { "@effect/platform-node-shared": "^4.1.0", "undici": "^8.12.2" }, "peerDependencies": { "effect": "^4.1.0", "redis": ">=5.0.0 <7.0.0" } }, "sha512-v+X7moGVF9k5oMVvz0slA+NgtEod+W+oygeI285MDJgSlUCW3JcqElj+cD3rlijFZtpKhC7RLkU1GuCxjGHTpA=="], - "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.6", "", { "dependencies": { "@types/ws": "^8.18.2", "ws": "^8.22.0" }, "peerDependencies": { "effect": "^4.0.6" } }, "sha512-0PhyC4uG30xGtsajnxjkcBWfTjNRzUh4ZKl1Kvo/MNyCTb+W2O+fBzf7wCRCoqt+nLudiq4V7vX40Q8XIBuMaQ=="], + "@effect/platform-node-shared": ["@effect/platform-node-shared@4.1.0", "", { "dependencies": { "@types/ws": "^8.18.2", "ws": "^8.22.0" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-uYQfFRoxWLo8fIhiSeBcmz/R1ooOfE3HF3cWHFgxz82tZMk2Wn02BGABcdLmaAch9VpDLbtWnuhSxNyBsGMUFg=="], - "@effect/sql-d1": ["@effect/sql-d1@4.0.6", "", { "dependencies": { "@cloudflare/workers-types": "^5.20261016.1" }, "peerDependencies": { "effect": "^4.0.6" } }, "sha512-W149Svo5pR+7eoKtTmMX3aFCJKQmvMdypKhMlFekKvy2UjY6h5Af8d+9YeBeOXkYtDQjxNs4l6iv7EqbF6XBbg=="], + "@effect/sql-d1": ["@effect/sql-d1@4.1.0", "", { "dependencies": { "@cloudflare/workers-types": "^5.20261016.1" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-Sg3UxQGc5yPc9LZ4WmiwHzVv+Wpqntue+4QRYx/XdLLyrZH4w+BkshPzifC7p7uQg9OaiaeQJPlsKZs6Bm9plw=="], - "@effect/sql-pg": ["@effect/sql-pg@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6" } }, "sha512-mh2Z+Hi1/AWtkoGuzub2PPCHN7ZsMAbY8dlv/YbdJ6PoXVdrVAGsr+FeeoeD6f0rdnln4DQm7PvFjv1htAjY9w=="], + "@effect/sql-pg": ["@effect/sql-pg@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0" } }, "sha512-/Q1M2PEuk8eSLEmgjfvix1/WZTuRBxu75ZENbKkIh2J3c50dQb8NMFOGMPocMFlPFh5k4WUOUKZQcgXzBljTFA=="], - "@effect/sql-pglite": ["@effect/sql-pglite@4.0.6", "", { "dependencies": { "@electric-sql/pglite": "^0.5.10" }, "peerDependencies": { "effect": "^4.0.6" } }, "sha512-pAKT7ZyY4Y6Nud3MlHXyFuLlH4pFUYpUeywtGWIcHOJtuA/8A8UvXijxrCkZ1dmLYThOqr7tWx5/mqN+lb8/EA=="], + "@effect/sql-pglite": ["@effect/sql-pglite@4.1.0", "", { "dependencies": { "@electric-sql/pglite": "^0.5.10" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-A96DVuabAR+reNjltGr5OoE06sSXVp7Uth4wHtcffv0vsIyODDBbwkdyAA7Jtgdq8rYYdnKyjrtKd8iPVZcJzw=="], - "@effect/sql-sqlite-do": ["@effect/sql-sqlite-do@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6" } }, "sha512-/s0hoRu0/J3Xdp2PoUAsNEc1AwFb+Y9rldXVkZmtdcOSnrx3Vo9DsZaCSK6+qLbhI10jjJftzmmtFtLrUqAwIw=="], + "@effect/sql-sqlite-do": ["@effect/sql-sqlite-do@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0" } }, "sha512-Jbcsyr5adFzrXhI2vfoIiZ0Y6VT1av6w3+o3jmmvM8SMM+I84KFBe22umnLZDZ6kgvnVQXpEBqjGWKd0IByCfw=="], "@effect/tsgo": ["@effect/tsgo@0.57.0", "", { "optionalDependencies": { "@effect/tsgo-darwin-arm64": "0.57.0", "@effect/tsgo-darwin-x64": "0.57.0", "@effect/tsgo-linux-arm": "0.57.0", "@effect/tsgo-linux-arm64": "0.57.0", "@effect/tsgo-linux-x64": "0.57.0", "@effect/tsgo-win32-arm64": "0.57.0", "@effect/tsgo-win32-x64": "0.57.0" }, "bin": { "effect-tsgo": "dist/effect-tsgo.cjs" } }, "sha512-L6ld3X5urPKLozMngSJK6XflqZhrA+o34Rd0X3qVu3vAK/girV+mt4RE3TxWZqOusfthPnOVIhLsC8Lke+pkMA=="], @@ -1260,7 +1261,7 @@ "@effect/tsgo-win32-x64": ["@effect/tsgo-win32-x64@0.57.0", "", { "os": "win32", "cpu": "x64" }, "sha512-oWU4sdD4XhGTPKm8+Ri34nuS3++snrzsWa3EfJ43K9VZlbWVhTRy+3qR6d/n75cSP9KzAYstmTdGK1wYgvtafQ=="], - "@effect/vitest": ["@effect/vitest@4.0.6", "", { "peerDependencies": { "effect": "^4.0.6", "vitest": ">=5.0.0 <6.0.0" } }, "sha512-oKNbtyUHK5+0o730CXwojULEu7f3+c235pYFD4U5T//o+hHrJbYbZU4bRkcv936tPr5IOnmujeyQiC/LuJJjHw=="], + "@effect/vitest": ["@effect/vitest@4.1.0", "", { "peerDependencies": { "effect": "^4.1.0", "vitest": ">=5.0.0 <6.0.0" } }, "sha512-+APF69oTYgGj5WCewowk1/udepH74xz4ONyH7d+UfcK0SrF3osiSwsWEyODUpJvWd6MIk5F5PcFJiE4evMuG2A=="], "@electric-sql/client": ["@electric-sql/client@1.5.28", "", { "dependencies": { "@microsoft/fetch-event-source": "^2.0.1" }, "optionalDependencies": { "@rollup/rollup-darwin-arm64": "^4.18.1" }, "bin": { "intent": "bin/intent.mjs" } }, "sha512-b0cym3YWXL6PbQmEF0xDRsLt2xgXX46stvOSRAIXRPAP6dLZIHZL0o0HxeTdsZ27L3PbIg6Pw6KnyanRVGtWPA=="], @@ -1334,11 +1335,11 @@ "@floating-ui/vue": ["@floating-ui/vue@1.1.11", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@floating-ui/utils": "^0.2.11", "vue-demi": ">=0.13.0" } }, "sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw=="], - "@foldkit/markdown": ["@foldkit/markdown@0.14.4", "", { "dependencies": { "remark-directive": "^4.0.0", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "unified": "^11.0.5" }, "peerDependencies": { "effect": "4.0.0", "foldkit": ">=0.165.0", "vite": "^8.0.0" } }, "sha512-JXjGhopeMtLfDYvu2txab0reaIoY01eVDM3rM7vSycoEwtv5I3XjVWhYY07XvsUOo4UzG0ELI0J7pMpNBtqwHg=="], + "@foldkit/markdown": ["@foldkit/markdown@0.15.0", "", { "dependencies": { "remark-directive": "^4.0.0", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "unified": "^11.0.5" }, "peerDependencies": { "effect": "~4.1.0", "foldkit": ">=0.165.0", "vite": "^8.0.0" } }, "sha512-jU2jHGrcFyHFJm7MIJeCDfc6fkuzRRhVAxmCGCT0xq3cn/79B3p8cn58RaH6nemgN2hr9qkmbJ8efAEsZzFuBg=="], - "@foldkit/ui": ["@foldkit/ui@0.169.0", "", { "dependencies": { "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "effect": "4.0.0", "foldkit": ">=0.167.0" } }, "sha512-+883P+QgdX0VQp2CGShNKMZ7aXQB+6uLO5GehKJVJWwn2ujzm3JPWZlD8qSCu0h62TrgAa7yD9FNGpEyL6snUA=="], + "@foldkit/ui": ["@foldkit/ui@0.170.0", "", { "dependencies": { "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "effect": "~4.1.0", "foldkit": ">=0.167.0" } }, "sha512-OU6eDVwweFCUA8wsURIBoUptvohD1J7Xs+n+kRJT7h1vmqwajf8h6yu5PljntNrpi6QiRohjqR/sZt3fWSC65A=="], - "@foldkit/vite-plugin": ["@foldkit/vite-plugin@0.28.0", "", { "dependencies": { "@effect/platform-node": "4.0.0", "@effect/platform-node-shared": "4.0.0", "magic-string": "^1.4.2", "vitefu": "^1.1.3", "ws": "^8.21.3" }, "peerDependencies": { "effect": "4.0.0", "foldkit": ">=0.167.0", "vite": "^8.0.0" } }, "sha512-ZGZDZi3wvUp+gkWT8EDPwWOAhbPPTzOnvXi4WSnJWyrJbGPIdRcM4M+6RcF88ZYnI6B0vQUYCHfjU0I4+6bL9w=="], + "@foldkit/vite-plugin": ["@foldkit/vite-plugin@0.29.0", "", { "dependencies": { "@effect/platform-node": "~4.1.0", "@effect/platform-node-shared": "~4.1.0", "magic-string": "^1.4.2", "vitefu": "^1.1.3", "ws": "^8.21.3" }, "peerDependencies": { "effect": "~4.1.0", "foldkit": ">=0.167.0", "vite": "^8.0.0" } }, "sha512-nLRScsxd7qzFI0omrkBsP9HtF+B0qhJ+wBEDhWSix+6yy2pmo8GXInq/Cdwu1OnaNkvo2+K4BOC/ZaV+/U7q0Q=="], "@fontsource-variable/geist": ["@fontsource-variable/geist@5.3.0", "", {}, "sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA=="], @@ -2252,15 +2253,15 @@ "@xyflow/system": ["@xyflow/system@0.0.83", "", { "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", "@types/d3-selection": "^3.0.10", "@types/d3-transition": "^3.0.8", "@types/d3-zoom": "^3.0.8", "d3-drag": "^3.0.0", "d3-interpolate": "^3.0.1", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" } }, "sha512-a//eDjez3WZF47aaPTfVUDD0OINOq+WVwBZCRTqG+m0a5euX8EwlJ4jMY1Wxz0Ocj4xOeekJ70V22Pq0ll8RJw=="], - "@yielded/agent": ["@yielded/agent@0.1.0-beta.190", "", { "dependencies": { "image-dimensions": "2.6.0" }, "peerDependencies": { "effect": "^4.0.3" } }, "sha512-BrJrT/+Uq3zX9f4lxYBUXmHhxknF5bgRZqETvkxG2mppc/Z2JcMVeEgjgLZ2zEB+6ey062oO6drmGkC+ZwvE2A=="], + "@yielded/agent": ["@yielded/agent@0.1.0-beta.191", "", { "dependencies": { "image-dimensions": "2.6.0" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-/qrWb5HT16yaE2pwStncsaEPKXmKPLOsMvXjWlLSHN+Q0zDlAG6GsfnP6AE+kx1P/ID7NUb5EXWTJHN/M6uXCg=="], - "@yielded/agent-platform-cloudflare": ["@yielded/agent-platform-cloudflare@0.1.0-beta.190", "", { "dependencies": { "@effect/platform-browser": "4.0.5", "@effect/sql-sqlite-do": "4.0.5", "@yielded/agent": "0.1.0-beta.190", "@yielded/agent-storage-cloudflare": "0.1.0-beta.190", "@yielded/agent-storage-sql": "0.1.0-beta.190", "puppeteer-core": "24.29.0" }, "peerDependencies": { "effect": "^4.0.3", "effect-cf": "^0.56.7" } }, "sha512-dfQO0eC3hObjasF7fnpO2oW3W7llG+uwWBCSQTlQGHpTwqKsPSRrrengxpidF6uAgU++m2r5tGhYxqtnRoU+EQ=="], + "@yielded/agent-platform-cloudflare": ["@yielded/agent-platform-cloudflare@0.1.0-beta.191", "", { "dependencies": { "@effect/platform-browser": "4.1.0", "@effect/sql-sqlite-do": "4.1.0", "@yielded/agent": "0.1.0-beta.191", "@yielded/agent-storage-cloudflare": "0.1.0-beta.191", "@yielded/agent-storage-sql": "0.1.0-beta.191", "puppeteer-core": "24.29.0" }, "peerDependencies": { "effect": "^4.1.0", "effect-cf": "^0.59.0" } }, "sha512-oHUuxUcDjSEW0weTvbYIn33l28f3QyBXKpux7Pa+GSxGLvfG/BIR+y+MZ+ZlfMG3+h6yTYCwLq++wgiDD1C7uw=="], - "@yielded/agent-storage-cloudflare": ["@yielded/agent-storage-cloudflare@0.1.0-beta.190", "", { "dependencies": { "@effect/platform-browser": "4.0.5", "@effect/sql-sqlite-do": "4.0.5", "@yielded/agent": "0.1.0-beta.190", "@yielded/agent-storage-sql": "0.1.0-beta.190" }, "peerDependencies": { "effect": "^4.0.3" } }, "sha512-7fyNxHvACXtg30vQDDjnzw6aCdS4ZtJ//NOOfNmq7nAf3V006Dj0F9zelYh/YEBYvLa2IlaO9D/prKR7R0grRw=="], + "@yielded/agent-storage-cloudflare": ["@yielded/agent-storage-cloudflare@0.1.0-beta.191", "", { "dependencies": { "@effect/platform-browser": "4.1.0", "@effect/sql-sqlite-do": "4.1.0", "@yielded/agent": "0.1.0-beta.191", "@yielded/agent-storage-sql": "0.1.0-beta.191" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-rco0f5I2YzCt8QtkFee8yaS6gAzsRzqHtl4XvP2iJuMrrRAbcC3I+q65fpJmoCvrm5+7VhnKWumswTDXc8iXmQ=="], - "@yielded/agent-storage-sql": ["@yielded/agent-storage-sql@0.1.0-beta.190", "", { "dependencies": { "@yielded/agent": "0.1.0-beta.190" }, "peerDependencies": { "effect": "^4.0.3" } }, "sha512-awCtwNnP43O07lJwaxm8gII6Jcy94Y33zwn0zWZJFGvGI/nmgpRjDLAJcAmTqNQwEDHA87QUgAGz69WdzBsNlg=="], + "@yielded/agent-storage-sql": ["@yielded/agent-storage-sql@0.1.0-beta.191", "", { "dependencies": { "@yielded/agent": "0.1.0-beta.191" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-hUJoRFLJKrYM8y6oZTIF/SIx22RKs2KN432mQN2GvbyLLcvR8cfbOSwLCMUkojQsno7Lwd4E1jDSNNlr21oN7A=="], - "@yielded/agent-testing": ["@yielded/agent-testing@0.1.0-beta.190", "", { "dependencies": { "@yielded/agent": "0.1.0-beta.190" }, "peerDependencies": { "effect": "^4.0.0" } }, "sha512-fqFmk+E+lZJP4JpG5vJ4JZ+NQaBl4m+37Ag213QJOGdIBRiDE5WgAJkuMTZj71LfMqDHn76G9jcsdv12CCCxvA=="], + "@yielded/agent-testing": ["@yielded/agent-testing@0.1.0-beta.191", "", { "dependencies": { "@yielded/agent": "0.1.0-beta.191" }, "peerDependencies": { "effect": "^4.1.0" } }, "sha512-b41eEd5bPUfJm6vFfwS4kcaOL4GBC7IAAQoinfH+1GwLekTS6KmuCl4794fegMpbd8xvLz2XehV0eQJNBF3jrw=="], "@yuku-codegen/binding-android-arm64": ["@yuku-codegen/binding-android-arm64@0.10.2", "", { "os": "android", "cpu": "arm64" }, "sha512-Oc2KInVkPfUjEB4PeV6X0NvIoyYTzDe/WmqFrTwBqKs6YKnz4A7XwWQvJTb7M0rLz9a6WgpUUiiS5QKaCi4O/g=="], @@ -2654,7 +2655,7 @@ "e2e": ["e2e@0.21.3", "", { "dependencies": { "@ai-sdk/provider": "4.0.28", "@clack/prompts": "1.8.1", "@jridgewell/remapping": "2.3.5", "@modelcontextprotocol/server": "2.3.1", "@oxc-project/runtime": "0.154.0", "@vitest/expect": "5.0.5", "commander": "15.0.0", "fast-png": "8.0.0", "get-tsconfig": "4.14.3", "oxc-parser": "0.154.0", "oxc-transform": "0.154.0", "picocolors": "1.1.1", "pixelmatch": "8.0.0", "zod": "4.6.1" }, "peerDependencies": { "@ai-sdk/anthropic": "^4.0.0", "@ai-sdk/google": "^4.0.0", "@ai-sdk/openai": "^4.0.0", "@ai-sdk/openai-compatible": "^3.0.0", "@ai-sdk/xai": "^5.0.0", "ai": "^7.0.0" }, "optionalPeers": ["@ai-sdk/anthropic", "@ai-sdk/google", "@ai-sdk/openai", "@ai-sdk/openai-compatible", "@ai-sdk/xai", "ai"], "bin": { "e2e": "./dist/cli/bin.js" } }, "sha512-XFnnpJnZVnUqZdxvAsf4fj620hFIYkGRP0klAR1dsPsIfQSwr3/RIUzYWfrkKFX6pXnjdqafd7ROsDauWceTaw=="], - "effect": ["effect@4.0.6", "", {}, "sha512-Tc3mkzuLR6t6P9dhLt0D2GrxYtmU5td4XEJEiXCmILz53IRIfJyHsKZWjTA3xEjiwpNTtXBgI4iqYPxMztBDrw=="], + "effect": ["effect@4.1.0", "", {}, "sha512-lGx2MJJyrXA8RZb2UpQ/0Nkb5Utaimby7oD92+18noBxLPE85IFOvptdzau8dvcxAOwfwHo9iqapbKeFzqQM/Q=="], "effect-cf": ["effect-cf@0.56.7", "", { "peerDependencies": { "@cloudflare/computer": "^0.2.0", "@cloudflare/sandbox": "^0.13.0-next.738.2 || ^1.0.0", "@cloudflare/vitest-plugin": "^1.0.0", "@cloudflare/workers-types": "^5.20260926.1", "@effect/sql-d1": "^4.0.0", "@effect/sql-pg": "^4.0.0", "@effect/sql-sqlite-do": "^4.0.0", "@modelcontextprotocol/server": "^2.0.0", "effect": "^4.0.0" }, "optionalPeers": ["@cloudflare/computer", "@cloudflare/sandbox", "@cloudflare/vitest-plugin", "@cloudflare/workers-types", "@effect/sql-pg", "@modelcontextprotocol/server"] }, "sha512-VHCe1lzaqBX5Wk2y0PL1Vn04pzps9PdIXbrXAAwHOTK3ok7litVBD7YMiZyXsBok+Ie2hzHG40wT6YZS/Pac5A=="], @@ -2788,7 +2789,7 @@ "fnv1a-64": ["fnv1a-64@0.1.2", "", {}, "sha512-mJbcILTPybAR1jdOwt/lVv8N2cffeJFFP+gVbSAwLEx1ujXH27RpPd8Rokec/KX9c76UYIB6Co+H4lQzxPnJfA=="], - "foldkit": ["foldkit@0.169.0", "", { "dependencies": { "parse5": "^8.0.1" }, "peerDependencies": { "@effect/platform-browser": "4.0.0", "effect": "4.0.0" } }, "sha512-7GHWKVJshNM6DLkPfybklfGpSo3wfDHtiywCP3VUmwmVTtpezeLdhwqhd67PtpDid8Ri7aVKtAykjk6m1tK/tw=="], + "foldkit": ["foldkit@0.170.0", "", { "dependencies": { "parse5": "^8.0.1" }, "peerDependencies": { "@effect/platform-browser": "~4.1.0", "effect": "~4.1.0" } }, "sha512-H/MRQe/IZ/LqpgPi+Zy1S1OXQ8o12e2S/6U+phQu3WmoHSm7Vase/dEnOvrq9YZfqxK44/oVq6wE9oqXzEIaig=="], "follow-redirects": ["follow-redirects@1.16.0", "", { "peerDependencies": { "debug": "*" }, "optionalPeers": ["debug"] }, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], @@ -3914,11 +3915,7 @@ "@effect/sql-d1/@cloudflare/workers-types": ["@cloudflare/workers-types@5.20261026.1", "", {}, "sha512-E+KMLXOMip7uzfkFYoSjAF0n0+VFkK2KFU0Md/PM3JkPpC9Km0/YAoDttkmxAoZLGbK1wQRAFg2IJtyZkTBCHg=="], - "@foldkit/vite-plugin/@effect/platform-node": ["@effect/platform-node@4.0.0", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0", "undici": "^8.11.2" }, "peerDependencies": { "effect": "^4.0.0", "redis": ">=5.0.0 <7.0.0" } }, "sha512-/L+4MUbl8FejPKLHLROYSOebvHnfixkP8KiblSD/DE5uH5xENZBHaux4nH6XMnRP+lr8ajpEJFS8sUrmmxFJeQ=="], - - "@foldkit/vite-plugin/@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.22.0" }, "peerDependencies": { "effect": "^4.0.0" } }, "sha512-VBXHJU9UXVZPdQGGDRjGXpo+TpOzRwZuMrdKAtIxi1qwcRftmacZ1zTgIrzBa0Z2RA2KVkoOecQUsTlt/nJZhw=="], - - "@foldkit/vite-plugin/magic-string": ["magic-string@1.4.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g=="], + "@foldkit/vite-plugin/magic-string": ["magic-string@1.4.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w=="], "@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], @@ -4258,10 +4255,6 @@ "@clerk/themes/@clerk/shared/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - "@foldkit/vite-plugin/@effect/platform-node/@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.4", "", { "dependencies": { "@types/ws": "^8.18.2", "ws": "^8.22.0" }, "peerDependencies": { "effect": "^4.0.4" } }, "sha512-gh2KRmqGWrJ0FVL8GqnI1GpB+fCfCUI7sGiUZkxxBHyHj1t94rm6VDJffCfuVZWe6GpvYXtizifVczUrgOce8A=="], - - "@foldkit/vite-plugin/@effect/platform-node/undici": ["undici@8.11.2", "", {}, "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ=="], - "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "@inquirer/core/wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], diff --git a/examples/effect-todo/package.json b/examples/effect-todo/package.json index bbb0f3fc94..50b780bf0c 100644 --- a/examples/effect-todo/package.json +++ b/examples/effect-todo/package.json @@ -12,7 +12,7 @@ "typecheck": "tsrs -p tsconfig.json && tsrs -p web/tsconfig.json" }, "dependencies": { - "@effect/atom-react": "4.0.6", + "@effect/atom-react": "4.1.0", "@effect/platform-bun": "catalog:effect", "@maple-dev/effect-sdk": "workspace:*", "effect": "catalog:effect", diff --git a/package.json b/package.json index 1996f42138..59887b99de 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@changesets/cli": "3.0.3", "@cloudflare/workers-types": "catalog:alchemy", "@effect/platform-node": "catalog:effect", - "@effect/sql-pg": "4.0.6", + "@effect/sql-pg": "4.1.0", "@effect/tsgo": "0.57.0", "@effect/vitest": "catalog:effect", "@maple-dev/effect-orm": "0.8.0", @@ -94,9 +94,9 @@ "vitest": "catalog:" }, "overrides": { - "@effect/platform-browser": "4.0.6", - "@effect/sql-d1": "4.0.6", - "@effect/sql-sqlite-do": "4.0.6", + "@effect/platform-browser": "4.1.0", + "@effect/sql-d1": "4.1.0", + "@effect/sql-sqlite-do": "4.1.0", "workerd": "1.20261002.1" }, "packageManager": "bun@1.4.0", @@ -122,12 +122,12 @@ "@tanstack/charts-scales": "1.0.0" }, "effect": { - "@effect/ai-openai-compat": "4.0.6", - "@effect/ai-openrouter": "4.0.6", - "@effect/platform-bun": "4.0.6", - "@effect/platform-node": "4.0.6", - "@effect/vitest": "4.0.6", - "effect": "4.0.6" + "@effect/ai-openai-compat": "4.1.0", + "@effect/ai-openrouter": "4.1.0", + "@effect/platform-bun": "4.1.0", + "@effect/platform-node": "4.1.0", + "@effect/vitest": "4.1.0", + "effect": "4.1.0" }, "react": { "@types/react": "^19.3.0", @@ -153,11 +153,12 @@ } }, "patchedDependencies": { - "@effect/ai-openrouter@4.0.6": "patches/@effect%2Fai-openrouter@4.0.6.patch", - "@effect/vitest@4.0.6": "patches/@effect%2Fvitest@4.0.6.patch", - "effect@4.0.6": "patches/effect@4.0.6.patch", + "@effect/ai-openrouter@4.1.0": "patches/@effect%2Fai-openrouter@4.1.0.patch", + "@effect/vitest@4.1.0": "patches/@effect%2Fvitest@4.1.0.patch", + "effect@4.1.0": "patches/effect@4.1.0.patch", "@cloudflare/workers-types@5.20261005.1": "patches/@cloudflare%2Fworkers-types@5.20261005.1.patch", "@alchemy.run/aws@2.0.0-beta.84": "patches/@alchemy.run%2Faws@2.0.0-beta.84.patch", + "alchemy@2.0.0-beta.84": "patches/alchemy@2.0.0-beta.84.patch", "@alchemy.run/cloudflare@2.0.0-beta.84": "patches/@alchemy.run%2Fcloudflare@2.0.0-beta.84.patch" } } diff --git a/packages/db/package.json b/packages/db/package.json index 25bf2524bc..cbe9319df8 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -23,8 +23,8 @@ "db:restore-test": "bun scripts/restore-test.ts" }, "dependencies": { - "@effect/sql-pg": "4.0.6", - "@effect/sql-pglite": "4.0.6", + "@effect/sql-pg": "4.1.0", + "@effect/sql-pglite": "4.1.0", "@electric-sql/pglite": "^0.5.12", "@maple-dev/effect-orm": "0.8.0", "@maple/domain": "workspace:*", diff --git a/patches/@effect%2Fai-openrouter@4.0.6.patch b/patches/@effect%2Fai-openrouter@4.1.0.patch similarity index 92% rename from patches/@effect%2Fai-openrouter@4.0.6.patch rename to patches/@effect%2Fai-openrouter@4.1.0.patch index 79e9cd67d2..77384b4075 100644 --- a/patches/@effect%2Fai-openrouter@4.0.6.patch +++ b/patches/@effect%2Fai-openrouter@4.1.0.patch @@ -1,8 +1,8 @@ diff --git a/dist/OpenRouterLanguageModel.js b/dist/OpenRouterLanguageModel.js -index b4ea95b..59ae99f 100644 +index 591840c..49f33eb 100644 --- a/dist/OpenRouterLanguageModel.js +++ b/dist/OpenRouterLanguageModel.js -@@ -745,7 +745,22 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ +@@ -737,7 +737,22 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ reasoning: undefined } }; @@ -26,7 +26,7 @@ index b4ea95b..59ae99f 100644 const parts = []; if (Predicate.isNotUndefined(event.error)) { finishReason = "error"; -@@ -1021,7 +1036,16 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ +@@ -1012,7 +1027,16 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ } // Usage is only emitted by the last part of the stream, so we need to // handle flushing any remaining text / reasoning / tool calls @@ -44,7 +44,7 @@ index b4ea95b..59ae99f 100644 // Fix for Gemini 3 thoughtSignature: when there are tool calls with encrypted // reasoning (thoughtSignature), the model returns 'stop' but expects continuation. // Override to 'tool-calls' so the SDK knows to continue the conversation. -@@ -1099,6 +1123,8 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ +@@ -1090,6 +1114,8 @@ const makeStreamResponse = /*#__PURE__*/Effect.fnUntraced(function* ({ response: buildHttpResponseDetails(response), metadata }); diff --git a/patches/@effect%2Fvitest@4.0.6.patch b/patches/@effect%2Fvitest@4.1.0.patch similarity index 85% rename from patches/@effect%2Fvitest@4.0.6.patch rename to patches/@effect%2Fvitest@4.1.0.patch index 268511d9e7..11f10bfccf 100644 --- a/patches/@effect%2Fvitest@4.0.6.patch +++ b/patches/@effect%2Fvitest@4.1.0.patch @@ -1,5 +1,5 @@ diff --git a/dist/internal/internal.js b/dist/internal/internal.js -index ba15b51..04c40f3 100644 +index 6c1b1c1..5c4c861 100644 --- a/dist/internal/internal.js +++ b/dist/internal/internal.js @@ -14,7 +14,8 @@ import * as Scope from "effect/Scope"; @@ -9,19 +9,19 @@ index ba15b51..04c40f3 100644 -const getCurrentSuite = V.TestRunner.getCurrentSuite; +// Patched (maple): Bun aliases vitest but does not expose TestRunner. Resolve only for layer tests. +const getCurrentSuite = () => V.TestRunner.getCurrentSuite(); - const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) { - const exit = yield* Effect.exit(effect); - if (Exit.isFailure(exit)) { -@@ -28,6 +29,8 @@ const runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) { + const runPromise = (effect, ctx) => Effect.runPromise( + // Only the test is interruptible: once the signal aborts, the fiber stops + // at its next interruptible step, which would skip reporting the defects +@@ -32,6 +33,8 @@ Effect.uninterruptibleMask(restore => Effect.gen(function* () { signal: ctx?.signal - })); + }); const settleOnAbort = (ctx, promise) => { + // Patched (maple): Bun's `bun test` context has no `signal`. + if (!ctx?.signal) return promise; // Vitest stops awaiting the promise once the signal aborts (timeout or // cancellation), so only then add a hook that waits for the finalizers. // Registering it unconditionally would change the teardown of every test. -@@ -141,15 +144,19 @@ const makeTester = (mapEffect, it) => { +@@ -149,15 +152,19 @@ const makeTester = (mapEffect, it) => { const register = test => (name, self, timeout) => test(name, testOptions(timeout), withFixturesOf(self, ctx => run(ctx, [ctx], self))); const each = cases => (name, self, timeout) => it.for(cases)(name, testOptions(timeout), withFixturesOf(self, (args, ctx) => run(ctx, [args, ctx], self).then(constVoid))); const prop = (name, arbitraries, self, timeout) => registerProp(it, name, arbitraries, (values, ctx) => Effect.mapEager(mapEffect(Effect.suspend(() => self(values, ctx))), value => value !== false), timeout); @@ -44,7 +44,7 @@ index ba15b51..04c40f3 100644 const makeProp = it => (name, arbitraries, self, timeout) => registerProp(it, name, arbitraries, (values, ctx) => { const result = self(values, ctx); diff --git a/src/internal/internal.ts b/src/internal/internal.ts -index 356c99e..5252b63 100644 +index e6ab75a..8089779 100644 --- a/src/internal/internal.ts +++ b/src/internal/internal.ts @@ -18,7 +18,8 @@ import * as TestConsole from "effect/testing/TestConsole" @@ -55,10 +55,10 @@ index 356c99e..5252b63 100644 +// Patched (maple): Bun aliases vitest but does not expose TestRunner. Resolve only for layer tests. +const getCurrentSuite = () => V.TestRunner.getCurrentSuite() - const runPromise: ( - _: Effect.Effect, -@@ -38,6 +39,8 @@ const runPromise: ( - }, (effect, _, ctx) => Effect.runPromise(effect, { signal: ctx?.signal })) + const runPromise = ( + effect: Effect.Effect, +@@ -44,6 +45,8 @@ const runPromise = ( + ) const settleOnAbort = (ctx: Vitest.TestContext, promise: Promise) => { + // Patched (maple): Bun's `bun test` context has no `signal`. @@ -66,7 +66,7 @@ index 356c99e..5252b63 100644 // Vitest stops awaiting the promise once the signal aborts (timeout or // cancellation), so only then add a hook that waits for the finalizers. // Registering it unconditionally would change the teardown of every test. -@@ -279,15 +282,19 @@ const makeTester = ( +@@ -290,15 +293,19 @@ const makeTester = ( timeout ) diff --git a/patches/alchemy@2.0.0-beta.84.patch b/patches/alchemy@2.0.0-beta.84.patch new file mode 100644 index 0000000000..17287841f1 --- /dev/null +++ b/patches/alchemy@2.0.0-beta.84.patch @@ -0,0 +1,265 @@ +diff --git a/lib/Auth/OAuthFlow.d.ts b/lib/Auth/OAuthFlow.d.ts +index 37fd00f..276a99d 100644 +--- a/lib/Auth/OAuthFlow.d.ts ++++ b/lib/Auth/OAuthFlow.d.ts +@@ -1,4 +1,5 @@ +-import * as Crypto from "effect/Crypto"; ++import * as Digest from "effect/crypto/Digest"; ++import * as SecureRandom from "effect/crypto/SecureRandom"; + import * as Effect from "effect/Effect"; + import * as Redacted from "effect/Redacted"; + import * as Schema from "effect/Schema"; +@@ -226,7 +227,7 @@ export interface OAuthClient { + * take them per-authorization; omit for providers whose scopes are + * configured on the application. + */ +- readonly authorize: (scopes?: ReadonlyArray) => Effect.Effect; ++ readonly authorize: (scopes?: ReadonlyArray) => Effect.Effect; + /** + * Exchange an authorization code directly. `authorization` supplies the + * PKCE verifier; omit for non-PKCE clients (tests, relay-less flows). +diff --git a/lib/Auth/OAuthFlow.js b/lib/Auth/OAuthFlow.js +index c598780..a73bc3e 100644 +--- a/lib/Auth/OAuthFlow.js ++++ b/lib/Auth/OAuthFlow.js +@@ -1,6 +1,8 @@ + import http from "node:http"; + import * as Clock from "effect/Clock"; +-import * as Crypto from "effect/Crypto"; ++// Patched (maple): effect 4.1 replaced effect/Crypto (alchemy-run/alchemy#2754). ++import * as Digest from "effect/crypto/Digest"; ++import * as SecureRandom from "effect/crypto/SecureRandom"; + import * as Data from "effect/Data"; + import * as Duration from "effect/Duration"; + import * as Effect from "effect/Effect"; +@@ -121,18 +123,13 @@ export const OAuthCredentials = Schema.Struct({ + scopes: Schema.String.pipe(Schema.Array, Schema.mutable), + }); + const randomText = Effect.fn(function* (length) { +- const crypto = yield* Crypto.Crypto; +- const bytes = yield* crypto +- .randomBytes(length) +- .pipe(Effect.mapError((cause) => new OAuthCryptoError({ operation: "Secure random generation", cause }))); +- return Base64Url.encode(bytes); ++ const random = yield* SecureRandom.SecureRandom; ++ return Base64Url.encode(yield* random.randomBytes(length)); + }); + const generatePKCE = Effect.fn(function* (length = 96) { +- const crypto = yield* Crypto.Crypto; ++ const digest = yield* Digest.Digest; + const verifier = yield* randomText(length); +- const challenge = yield* crypto +- .digest("SHA-256", new TextEncoder().encode(verifier)) +- .pipe(Effect.mapError((cause) => new OAuthCryptoError({ operation: "PKCE digest", cause }))); ++ const challenge = yield* digest.digest(Digest.sha256, new TextEncoder().encode(verifier)); + return { verifier, challenge: Base64Url.encode(challenge) }; + }); + const TokenResponse = Schema.Struct({ +diff --git a/lib/Stack.d.ts b/lib/Stack.d.ts +index 1182271..bf90d70 100644 +--- a/lib/Stack.d.ts ++++ b/lib/Stack.d.ts +@@ -1,6 +1,7 @@ + import type { ConfigError } from "effect/Config"; + import * as Context from "effect/Context"; +-import type { Crypto } from "effect/Crypto"; ++import type { Digest } from "effect/crypto/Digest"; ++import type { SecureRandom } from "effect/crypto/SecureRandom"; + import * as Effect from "effect/Effect"; + import { FileSystem } from "effect/FileSystem"; + import type { HttpClient } from "effect/http/HttpClient"; +@@ -23,7 +24,7 @@ import type { SecretsEntry, SecretsOption } from "./Secrets/Provider.ts"; + import { Stage } from "./Stage.ts"; + import type { State } from "./State/State.ts"; + import { PlatformServices } from "./Util/PlatformServices.ts"; +-export type StackServices = Stack | Stage | Scope.Scope | FileSystem | Crypto | Path | AlchemyContext | HttpClient | ChildProcessSpawner | AuthProviders | ProfileStore | ArtifactStore | CredentialsStore | Interaction; ++export type StackServices = Stack | Stage | Scope.Scope | FileSystem | Digest | SecureRandom | Path | AlchemyContext | HttpClient | ChildProcessSpawner | AuthProviders | ProfileStore | ArtifactStore | CredentialsStore | Interaction; + export type ProviderServices = ProviderCollectionLike | Provider | EnvironmentLike | CredentialsLike | DockerLike; + export interface EnvironmentLike { + readonly kind: "Environment"; +@@ -133,7 +134,7 @@ export interface MakeStackProps { + /** @internal */ + stack?: StackSpec; + } +-export declare const make: (options: MakeStackProps) => (effect: Effect.Effect) => Effect.Effect, Err | ConfigError, AlchemyContext | ArtifactStore | AuthProviders | ChildProcessSpawner | CredentialsStore | Crypto | FileSystem | HttpClient | Interaction | Path | ProfileStore | Scope.Scope | Stage | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude>; ++export declare const make: (options: MakeStackProps) => (effect: Effect.Effect) => Effect.Effect, Err | ConfigError, AlchemyContext | ArtifactStore | AuthProviders | ChildProcessSpawner | CredentialsStore | Digest | SecureRandom | FileSystem | HttpClient | Interaction | Path | ProfileStore | Scope.Scope | Stage | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude | Exclude>; + export declare const CurrentStack: Effect.Effect, "output"> | undefined, never, never>; + export declare const evalStack: (effect: StackEffect, StackErr, Stage | AlchemyContext>, fn: (stack: CompiledStack) => Effect.Effect, options: { + stage: string; +diff --git a/lib/Util/PlatformServices.d.ts b/lib/Util/PlatformServices.d.ts +index 533d43c..2831b2f 100644 +--- a/lib/Util/PlatformServices.d.ts ++++ b/lib/Util/PlatformServices.d.ts +@@ -1,4 +1,5 @@ +-import type { Crypto } from "effect/Crypto"; ++import type { Digest } from "effect/crypto/Digest"; ++import type { SecureRandom } from "effect/crypto/SecureRandom"; + import type { Input as DurationInput } from "effect/Duration"; + import * as Effect from "effect/Effect"; + import type { FileSystem } from "effect/FileSystem"; +@@ -18,7 +19,7 @@ export declare const platformLayer: (constructors: { + bun: () => Promise>; + node: () => Promise>; + }) => Layer.Layer; +-export type PlatformServices = ChildProcessSpawner | Crypto | FileSystem | Path | Stdio | Terminal | WebSocketConstructor; ++export type PlatformServices = ChildProcessSpawner | Digest | SecureRandom | FileSystem | Path | Stdio | Terminal | WebSocketConstructor; + export declare const PlatformServices: Layer.Layer; + export declare const runMain: (effect: Effect.Effect, options?: { + readonly disableErrorReporting?: boolean | undefined; +diff --git a/lib/Util/PlatformServices.js b/lib/Util/PlatformServices.js +index 7a31f1e..8aa7a1c 100644 +--- a/lib/Util/PlatformServices.js ++++ b/lib/Util/PlatformServices.js +@@ -1,7 +1,11 @@ ++import * as Digest from "effect/crypto/Digest"; ++import * as SecureRandom from "effect/crypto/SecureRandom"; + import * as Effect from "effect/Effect"; + import * as Layer from "effect/Layer"; + import { defaultTeardown } from "effect/Runtime"; + import { disableCrossSpawnChdir } from "./Node.js"; ++// Patched (maple): effect 4.1 dropped crypto from the platform `*Services` bundles. ++const WebCryptoServices = () => Layer.mergeAll(SecureRandom.layerWebCrypto, Digest.layerWebCrypto); + const isBun = typeof Bun !== "undefined"; + const importPlatformPeer = (peerDependency, load) => load().catch(() => { + console.error([ +@@ -28,14 +32,14 @@ export const PlatformServices = platformLayer({ + importPlatformPeer("@effect/platform-bun", () => import("@effect/platform-bun/BunServices")), + importPlatformPeer("@effect/platform-bun", () => import("@effect/platform-bun/BunSocket")), + ]); +- return Layer.merge(BunServices.layer, BunSocket.layerWebSocketConstructor); ++ return Layer.mergeAll(BunServices.layer, BunSocket.layerWebSocketConstructor, WebCryptoServices()); + }, + node: async () => { + const [NodeServices, NodeSocket] = await Promise.all([ + importPlatformPeer("@effect/platform-node", () => import("@effect/platform-node/NodeServices")), + importPlatformPeer("@effect/platform-node", () => import("@effect/platform-node/NodeSocket")), + ]); +- return Layer.merge(NodeServices.layer, NodeSocket.layerWebSocketConstructor); ++ return Layer.mergeAll(NodeServices.layer, NodeSocket.layerWebSocketConstructor, WebCryptoServices()); + }, + }); + /** +diff --git a/src/Auth/OAuthFlow.ts b/src/Auth/OAuthFlow.ts +index 76e5bc1..edce891 100644 +--- a/src/Auth/OAuthFlow.ts ++++ b/src/Auth/OAuthFlow.ts +@@ -1,6 +1,8 @@ + import http from "node:http"; + import * as Clock from "effect/Clock"; +-import * as Crypto from "effect/Crypto"; ++// Patched (maple): effect 4.1 replaced effect/Crypto (alchemy-run/alchemy#2754). ++import * as Digest from "effect/crypto/Digest"; ++import * as SecureRandom from "effect/crypto/SecureRandom"; + import * as Data from "effect/Data"; + import * as Duration from "effect/Duration"; + import * as Effect from "effect/Effect"; +@@ -245,7 +247,7 @@ export interface OAuthClient { + */ + readonly authorize: ( + scopes?: ReadonlyArray, +- ) => Effect.Effect; ++ ) => Effect.Effect; + /** + * Exchange an authorization code directly. `authorization` supplies the + * PKCE verifier; omit for non-PKCE clients (tests, relay-less flows). +@@ -312,23 +314,14 @@ export interface OAuthClient { + } + + const randomText = Effect.fn(function* (length: number) { +- const crypto = yield* Crypto.Crypto; +- const bytes = yield* crypto +- .randomBytes(length) +- .pipe( +- Effect.mapError( +- (cause) => new OAuthCryptoError({ operation: "Secure random generation", cause }), +- ), +- ); +- return Base64Url.encode(bytes); ++ const random = yield* SecureRandom.SecureRandom; ++ return Base64Url.encode(yield* random.randomBytes(length)); + }); + + const generatePKCE = Effect.fn(function* (length = 96) { +- const crypto = yield* Crypto.Crypto; ++ const digest = yield* Digest.Digest; + const verifier = yield* randomText(length); +- const challenge = yield* crypto +- .digest("SHA-256", new TextEncoder().encode(verifier)) +- .pipe(Effect.mapError((cause) => new OAuthCryptoError({ operation: "PKCE digest", cause }))); ++ const challenge = yield* digest.digest(Digest.sha256, new TextEncoder().encode(verifier)); + return { verifier, challenge: Base64Url.encode(challenge) }; + }); + +diff --git a/src/Stack.ts b/src/Stack.ts +index 09aaf3c..ebb66ee 100644 +--- a/src/Stack.ts ++++ b/src/Stack.ts +@@ -1,7 +1,8 @@ + import type { ConfigError } from "effect/Config"; + import { ConfigProvider } from "effect/ConfigProvider"; + import * as Context from "effect/Context"; +-import type { Crypto } from "effect/Crypto"; ++import type { Digest } from "effect/crypto/Digest"; ++import type { SecureRandom } from "effect/crypto/SecureRandom"; + import * as Effect from "effect/Effect"; + import { FileSystem } from "effect/FileSystem"; + import * as FetchHttpClient from "effect/http/FetchHttpClient"; +@@ -40,7 +41,8 @@ export type StackServices = + | Stage + | Scope.Scope + | FileSystem +- | Crypto ++ | Digest ++ | SecureRandom + | Path + | AlchemyContext + | HttpClient +diff --git a/src/Util/PlatformServices.ts b/src/Util/PlatformServices.ts +index a6daed0..709dee9 100644 +--- a/src/Util/PlatformServices.ts ++++ b/src/Util/PlatformServices.ts +@@ -1,4 +1,5 @@ +-import type { Crypto } from "effect/Crypto"; ++import * as Digest from "effect/crypto/Digest"; ++import * as SecureRandom from "effect/crypto/SecureRandom"; + import type { Input as DurationInput } from "effect/Duration"; + import * as Effect from "effect/Effect"; + import type { FileSystem } from "effect/FileSystem"; +@@ -13,6 +14,9 @@ import type { Stdio } from "effect/Stdio"; + import type { Terminal } from "effect/Terminal"; + import { disableCrossSpawnChdir } from "./Node.ts"; + ++// Patched (maple): effect 4.1 dropped crypto from the platform `*Services` bundles. ++const WebCryptoServices = () => Layer.mergeAll(SecureRandom.layerWebCrypto, Digest.layerWebCrypto); ++ + const isBun = typeof Bun !== "undefined"; + + const importPlatformPeer = ( +@@ -49,7 +53,8 @@ export const platformLayer = (constructors: { + + export type PlatformServices = + | ChildProcessSpawner +- | Crypto ++ | Digest.Digest ++ | SecureRandom.SecureRandom + | FileSystem + | Path + | Stdio +@@ -63,7 +68,7 @@ export const PlatformServices: Layer.Layer = platformLayer({ + importPlatformPeer("@effect/platform-bun", () => import("@effect/platform-bun/BunServices")), + importPlatformPeer("@effect/platform-bun", () => import("@effect/platform-bun/BunSocket")), + ]); +- return Layer.merge(BunServices.layer, BunSocket.layerWebSocketConstructor); ++ return Layer.mergeAll(BunServices.layer, BunSocket.layerWebSocketConstructor, WebCryptoServices()); + }, + node: async () => { + const [NodeServices, NodeSocket] = await Promise.all([ +@@ -73,7 +78,7 @@ export const PlatformServices: Layer.Layer = platformLayer({ + ), + importPlatformPeer("@effect/platform-node", () => import("@effect/platform-node/NodeSocket")), + ]); +- return Layer.merge(NodeServices.layer, NodeSocket.layerWebSocketConstructor); ++ return Layer.mergeAll(NodeServices.layer, NodeSocket.layerWebSocketConstructor, WebCryptoServices()); + }, + }); + diff --git a/patches/effect@4.0.6.patch b/patches/effect@4.1.0.patch similarity index 87% rename from patches/effect@4.0.6.patch rename to patches/effect@4.1.0.patch index 4cc5dcc75b..d1fcd48657 100644 --- a/patches/effect@4.0.6.patch +++ b/patches/effect@4.1.0.patch @@ -1,5 +1,5 @@ diff --git a/dist/ai/LanguageModel.js b/dist/ai/LanguageModel.js -index 2570165..413328e 100644 +index d78ccb5..03ce448 100644 --- a/dist/ai/LanguageModel.js +++ b/dist/ai/LanguageModel.js @@ -339,16 +339,19 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (params) { @@ -111,7 +111,7 @@ index 2570165..413328e 100644 } // Pre-resolve pending tool approvals before calling the LLM let preResolvedStreamParts = []; -@@ -683,14 +709,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (params) { +@@ -684,14 +710,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (params) { // resolving the tool calls that were generated if (options.disableToolCallResolution === true) { const encodedToolkit = deferToolCallValidation ? makeToolkitWithEncodedParameters(toolkit) : undefined; @@ -128,10 +128,10 @@ index 2570165..413328e 100644 // Queue for decoded parts and tool results const queue = yield* Queue.make(); diff --git a/dist/http-api/HttpApiBuilder.js b/dist/http-api/HttpApiBuilder.js -index f6f1477..25ccf33 100644 +index f076d83..70938cd 100644 --- a/dist/http-api/HttpApiBuilder.js +++ b/dist/http-api/HttpApiBuilder.js -@@ -463,7 +463,10 @@ function handlerToHttpEffect(api, group, endpoint, context, handler, isRaw) { +@@ -488,7 +488,10 @@ function handlerToHttpEffect(api, group, endpoint, context, handler, isRaw) { */ export function handlerToRoute(api, group, handler, context) { const endpoint = handler.endpoint; @@ -143,19 +143,6 @@ index f6f1477..25ccf33 100644 uninterruptible: handler.uninterruptible }); } -diff --git a/dist/http-api/HttpApiClient.d.ts b/dist/http-api/HttpApiClient.d.ts -index 349c969..5118f94 100644 ---- a/dist/http-api/HttpApiClient.d.ts -+++ b/dist/http-api/HttpApiClient.d.ts -@@ -118,7 +118,7 @@ export declare namespace Client { - * @category models - * @since 4.0.0 - */ -- type Method = (request: Simplify>) => MethodReturn; -+ type Method = (request: Simplify>) => MethodReturn>; - /** - * Extracts client methods for endpoints in top-level groups so they can be exposed - * directly on the generated client object. diff --git a/dist/internal/redacted.js b/dist/internal/redacted.js index b71c514..6192bda 100644 --- a/dist/internal/redacted.js