diff --git a/.changeset/eve-extension-eve-0-69.md b/.changeset/eve-extension-eve-0-69.md new file mode 100644 index 0000000..2292d9d --- /dev/null +++ b/.changeset/eve-extension-eve-0-69.md @@ -0,0 +1,22 @@ +--- +"@upstash/agentkit-eve-extension": minor +--- + +fix!: rebuild the extension against `eve` 0.69.0 and raise the `eve` peer floor to `>=0.69.0` + +eve 0.69.0 dropped tool contract 59, dynamicTool 56 and hook 29, which are the contracts +`@upstash/agentkit-eve-extension@0.14.0` (built with eve 0.68.0) requires. On eve 0.69.0, 0.14.0 +installs cleanly and then fails `eve build` with +`Selected module binding "extensions/agentkit.ts" has no compile or runtime usage.` + +The dist is now built with **eve 0.69.0** and its `dist/extension/_manifest.json` stamps tool +contract **71**, dynamicTool **68** and hook **35** (previously 59 / 56 / 29). 0.69.0 is the first eve +that accepts them (0.65.0–0.68.0 accept none of the three), so the peer range moves `">=0.68.0"` → +**`">=0.69.0"`**: an eve that cannot run this dist is rejected at install (`ERESOLVE`) instead of +failing at `eve build`. + +**Upgrading:** move your app to `eve@^0.69.0` together with this release. If you must stay on eve 0.68, +stay on `@upstash/agentkit-eve-extension@0.14.0` (it does not work on eve 0.69). + +**No behaviour or API changed**: the same extension source recompiled against a newer eve. The mount, +its options, every contributed tool and hook, and everything written to Redis are unchanged. diff --git a/CLAUDE.md b/CLAUDE.md index 43650f7..b4be638 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -124,10 +124,12 @@ implements TanStack AI's own backend contracts (see its section below) — keep npm/yarn hoisted layouts — was fixed upstream in eve 0.25.3; no workaround needed on ≥0.25.3.) **Consumer eve version:** `eve extension build` stamps the manifest's `requires` with the building eve's *current* contribution-format versions, and a consumer rejects any version not in its own - supported list — the current dist, built with **eve 0.68.0**, stamps formatVersion 2; extension 1 / - **tool 59** / **dynamicTool 56** / **hook 29** / instructions 2 / config 1, which needs consumers on - **eve ≥0.68.0** — 0.68.0 is the first release accepting tool 59 and hook 29 (0.67.0–0.67.2 accept - dynamicTool 56 but neither of the others; 0.65.0–0.66.3 accept none of the three). The previous dist, + supported list — the current dist, built with **eve 0.69.0**, stamps formatVersion 2; extension 1 / + **tool 71** / **dynamicTool 68** / **hook 35** / instructions 2 / config 1, which needs consumers on + **eve ≥0.69.0** — 0.69.0 is the first release accepting any of the three (0.65.0–0.68.0 accept none + of them), and 0.69.0 in turn **dropped** tool 59 / dynamicTool 56 / hook 29, the stamps of the 0.68.0 + build (published `0.14.0`). The 0.68.0 build stamped tool 59 / dynamicTool 56 / hook 29 (floor + 0.68.0: 0.67.0–0.67.2 accept dynamicTool 56 but neither of the others). The dist before that, built with 0.65.0, stamped tool 55 / dynamicTool 52 / hook 25 (floor 0.65.0; the 0.64.1 build stamped tool 54), because eve now **drops** mid-range contracts rather than only adding new ones (0.64.0's supported `tool` list is @@ -157,7 +159,7 @@ implements TanStack AI's own backend contracts (see its section below) — keep release's worth of headroom. Since ~0.50 eve also **drops** contracts out of the middle of its supported range, so a *newer* eve is not automatically compatible either: the floor has repeatedly landed on the pinned version itself, with **no back-compat window at all**. - The `eve` peer is **`">=0.68.0"`, not `"*"`** — issue #22 proved the wildcard is a trap: eve + The `eve` peer is **`">=0.69.0"`, not `"*"`** — issue #22 proved the wildcard is a trap: eve 0.33 dropped hook contracts ≤9 *nine hours* after 0.32 shipped, so a wildcard install succeeds and then fails at `eve build` with a manifest error. The manifest is still the real compatibility tie; the peer floor is the install-time guard. **On every eve devDep bump: rebuild, read the new @@ -494,7 +496,7 @@ implements TanStack AI's own backend contracts (see its section below) — keep `new Ratelimit()`. ## AI SDK version strategy — IMPORTANT -- **AI SDK v7 stable everywhere.** Every package + demo pins `ai` to exactly **`7.0.107`**. `eve` (0.63.0 through 0.68.0 alike) +- **AI SDK v7 stable everywhere.** Every package + demo pins `ai` to exactly **`7.0.107`**. `eve` (0.63.0 through 0.69.0 alike) declares `ai` as a **peer** (`^7.0.105` — it sat at `^7.0.82` from 0.47.6 through 0.52.3, moved to `^7.0.93` somewhere in 0.53.0 → 0.55.0 and to `^7.0.105` by 0.61.0, so the 0.52.3 → 0.55.0 bump forced the repo-wide pin `7.0.87` → `7.0.101` and the 0.55.0 → 0.63.0 bump `7.0.101` → `7.0.107`), so the @@ -613,6 +615,11 @@ implements TanStack AI's own backend contracts (see its section below) — keep failures are timeouts rather than assertions is an infrastructure death, not a regression; confirm with `curl … '["PING"]'` before believing it. (`curl -X POST https://upstash.com/start-redis` returns the same kind of database as the CLI.) + **But `start-redis` is rate-limited:** measured 2026-10-01, ~20 provisions inside a few minutes (one per + test file) got `HTTP 429` with an empty body and **no `Retry-After`**, and it stayed 429 for 10+ minutes. + A 429 makes the Endpoint/Token greps come back empty, so a script that doesn't check the status code + silently runs the suite with **no** Redis. Reuse one database and reprovision only when its PING fails; + check for `200` before parsing. On a box where `npm i -g` is not writable, install the CLI to a prefix: `npm i -g @upstash/cli --prefix /tmp/upstash-cli` → `/tmp/upstash-cli/bin/upstash`. - **A brand-new throwaway DB is often DEAD ON ARRIVAL — always `PING` it before writing it to `.env`.** @@ -670,9 +677,10 @@ implements TanStack AI's own backend contracts (see its section below) — keep `$count`, `$histogram`, `$percentiles`, `$cardinality`. ## Eve framework facts -- **The repo is split again (2026-09-30): `packages/eve-extension` + `examples/eve-extension-demo` are - on `eve@0.68.0` (extension peer `>=0.68.0`); `packages/eve` + `examples/eve-demo` stay on - `eve@0.65.0` (peer `>=0.65.0`)** — see the 0.65.0 → 0.68.0 bump note below. Before that (2026-09-23) +- **The repo is split (since 2026-09-30): `packages/eve-extension` + `examples/eve-extension-demo` are + on `eve@0.69.0` (extension peer `>=0.69.0`, since 2026-10-01; 0.68.0 / `>=0.68.0` before that); + `packages/eve` + `examples/eve-demo` stay on `eve@0.65.0` (peer `>=0.65.0`)** — see the 0.68.0 → 0.69.0 + and 0.65.0 → 0.68.0 bump notes below. Before that (2026-09-23) it was one `eve@0.65.0` everywhere, with both packages declaring `eve: ">=0.65.0"`. (For one day the repo was also split earlier: the extension on 0.64.1, `packages/eve` on 0.63.0, because eve 0.64.0 removed the `SandboxBackend*` authoring types that `packages/eve/src/sandbox.ts` implemented.) eve 0.64 @@ -857,6 +865,20 @@ implements TanStack AI's own backend contracts (see its section below) — keep implementation needed **no** new member for 0.55.0 — `pnpm typecheck` is clean across all four packages. Even the extension's compiled output is unchanged: **`_manifest.json` is the only file in `packages/eve-extension/dist` that differs from published `0.10.0`.** +- **The 0.68.0 → 0.69.0 bump (2026-10-01) is EXTENSION-ONLY, for the same reason as 0.68.0.** eve 0.69.0 + **dropped tool 59, dynamicTool 56 and hook 29** — exactly the stamps of published + `@upstash/agentkit-eve-extension@0.14.0` (built with 0.68.0) — one day after it shipped, while its peer + `>=0.68.0` still admitted 0.69.0: a fresh `npm i eve@latest @upstash/agentkit-eve-extension@latest` + installed clean and then failed `eve build` with the obtuse *"Selected module binding + "extensions/agentkit.ts" has no compile or runtime usage."*. eve's `dropped` reasons: tool 59 — "Workflow + tools no longer accept execution or return background task receipts…"; dynamicTool 56 / hook 29 — + "Background task execution was removed…". No source change: the rebuild re-stamps **tool 59→71, + dynamicTool 56→68, hook 29→35**, and the floor moved `>=0.68.0` → **`>=0.69.0`** — read off every + 0.65.0–0.69.0 tarball's `extension-compatibility.js` (only 0.69.0 accepts any of 71/68/35) and proven + with the packed tarball in fresh npm consumers: 0.69.0 builds and mounts every tool + the hook; 0.68.0 + is refused at install (`ERESOLVE … peer eve@">=0.69.0"`) and, forced with `--legacy-peer-deps`, + fails `eve build` with the same obtuse error. eve 0.69.0's `ai` peer is still `^7.0.105`. + `packages/eve` still cannot move: `MutableNetworkSandboxSession` (below) is still imported. - **The 0.65.0 → 0.68.0 bump (2026-09-30) is EXTENSION-ONLY again.** `packages/eve` cannot take it without a source migration: eve **0.66.0** (ee286fe) removed `MutableNetworkSandboxSession` from `eve/sandbox` (network policy became provider-specific; `SandboxSession` lost `setNetworkPolicy`), and diff --git a/examples/eve-extension-demo/package.json b/examples/eve-extension-demo/package.json index e8e6cff..74290ce 100644 --- a/examples/eve-extension-demo/package.json +++ b/examples/eve-extension-demo/package.json @@ -19,7 +19,7 @@ "@upstash/redis": "^1.38.4", "@vercel/connect": "0.2.2", "ai": "7.0.107", - "eve": "^0.68.0", + "eve": "^0.69.0", "zod": "4.4.3" }, "devDependencies": { diff --git a/packages/eve-extension/AGENTS.md b/packages/eve-extension/AGENTS.md index 995461b..7ab3cdb 100644 --- a/packages/eve-extension/AGENTS.md +++ b/packages/eve-extension/AGENTS.md @@ -37,7 +37,7 @@ unavailable, use https://eve.dev/docs/extensions as a fallback. agent-shaped source tree into `dist/extension/`, emits type declarations and a compatibility manifest, and fills the package `exports` map. Ship `dist/` only. `eve` is a required peer so the consumer's eve is the one that runs, but NOT a -wildcard: keep the floor (`>=0.68.0`) in sync with what the built manifest's +wildcard: keep the floor (`>=0.69.0`) in sync with what the built manifest's contracts require, so an incompatible eve fails at install instead of at `eve build` (see issue #22). eve validates the real compatibility from the generated manifest. diff --git a/packages/eve-extension/README.md b/packages/eve-extension/README.md index 52a0d87..5921b6e 100644 --- a/packages/eve-extension/README.md +++ b/packages/eve-extension/README.md @@ -15,7 +15,7 @@ no repeated schemas; upgrades come through the package manager. `` is the mount file's basename — the examples below use `agentkit`. -Start from an eve project (eve ≥ 0.68.0 — the prebuilt extension is built with eve 0.68.0 and its compatibility manifest requires tool contract v59 (dynamicTool v56, hook v29), which eve 0.68.0 is the first release to support; the package declares this as its `eve` peer range), then: +Start from an eve project (eve ≥ 0.69.0 — the prebuilt extension is built with eve 0.69.0 and its compatibility manifest requires tool contract v71 (dynamicTool v68, hook v35), which eve 0.69.0 is the first release to support; the package declares this as its `eve` peer range), then: ```bash pnpm add @upstash/agentkit-eve-extension diff --git a/packages/eve-extension/package.json b/packages/eve-extension/package.json index 14b5bfc..5d4c448 100644 --- a/packages/eve-extension/package.json +++ b/packages/eve-extension/package.json @@ -56,10 +56,10 @@ }, "devDependencies": { "@types/node": "24.x", - "eve": "^0.68.0", + "eve": "^0.69.0", "typescript": "7.0.2" }, "peerDependencies": { - "eve": ">=0.68.0" + "eve": ">=0.69.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0eaba42..48acf17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,13 +216,13 @@ importers: version: 1.38.4 '@vercel/connect': specifier: 0.2.2 - version: 0.2.2(@ai-sdk/mcp@2.0.54(zod@4.4.3))(ai@7.0.107(zod@4.4.3))(eve@0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3))) + version: 0.2.2(@ai-sdk/mcp@2.0.54(zod@4.4.3))(ai@7.0.107(zod@4.4.3))(eve@0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3))) ai: specifier: 7.0.107 version: 7.0.107(zod@4.4.3) eve: - specifier: ^0.68.0 - version: 0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) + specifier: ^0.69.0 + version: 0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) zod: specifier: 4.4.3 version: 4.4.3 @@ -361,8 +361,8 @@ importers: specifier: 24.x version: 24.13.2 eve: - specifier: ^0.68.0 - version: 0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) + specifier: ^0.69.0 + version: 0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) typescript: specifier: 7.0.2 version: 7.0.2 @@ -3544,8 +3544,8 @@ packages: microsandbox: optional: true - eve@0.68.0: - resolution: {integrity: sha512-1cvxOdbfESdhZjAdhjUwFJSx0B6uWkbaEvwmau6vNhHNX9A+SZaathd79acDzQNYbOa+5WjsypOx4wa8KjKtgQ==} + eve@0.69.0: + resolution: {integrity: sha512-UxWzU4C1+MlTvHQsQ2wi75k+lrxX8sNN4Dz0xVtITmDj/+mR47RUyHHXl8ojAkFv7DCG/dmNSXLCKfTcqCj0cQ==} engines: {node: '>=24'} hasBin: true peerDependencies: @@ -5012,6 +5012,10 @@ packages: resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} + undici@8.10.2: + resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==} + engines: {node: '>=22.19.0'} + undici@8.9.0: resolution: {integrity: sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==} engines: {node: '>=22.19.0'} @@ -7510,13 +7514,13 @@ snapshots: ai: 7.0.107(zod@4.4.3) eve: 0.65.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) - '@vercel/connect@0.2.2(@ai-sdk/mcp@2.0.54(zod@4.4.3))(ai@7.0.107(zod@4.4.3))(eve@0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)))': + '@vercel/connect@0.2.2(@ai-sdk/mcp@2.0.54(zod@4.4.3))(ai@7.0.107(zod@4.4.3))(eve@0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)))': dependencies: '@vercel/oidc': 3.6.1 optionalDependencies: '@ai-sdk/mcp': 2.0.54(zod@4.4.3) ai: 7.0.107(zod@4.4.3) - eve: 0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) + eve: 0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)) '@vercel/oidc@3.2.0': {} @@ -8137,11 +8141,11 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - eve@0.68.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)): + eve@0.69.0(@opentelemetry/api@1.9.1)(ai@7.0.107(zod@4.4.3)): dependencies: ai: 7.0.107(zod@4.4.3) nitro: 3.0.260903-beta - undici: 8.9.0 + undici: 8.10.2 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -9949,6 +9953,8 @@ snapshots: undici@7.29.1: {} + undici@8.10.2: {} + undici@8.9.0: {} unenv@2.0.0-rc.24: