Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .changeset/eve-044-upgrade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
"@upstash/agentkit-eve-extension": minor
"@upstash/agentkit-eve": minor
---

feat!: rebuild against eve 0.44 so the extension loads on current eve (fixes #22)

`@upstash/agentkit-eve-extension@0.6.0` was built with eve 0.32.0, stamping hook
contract v9 in its `dist/extension/_manifest.json` — a contract eve 0.33.0
dropped, so the extension failed `eve build` on every eve released after 0.32.0.

- The extension is now built with **eve 0.44.3** (manifest: formatVersion 2,
tool 17 / dynamicTool 18 / hook 14 / instructions 2) and loads on
**eve ≥ 0.43.0**.
- The extension's `eve` peer dependency is tightened from `"*"` to
`">=0.43.0"`, so an incompatible eve now fails at install time with an
actionable message instead of at `eve build`.
- `@upstash/agentkit-eve`'s `eve` peer is corrected from `>=0.24.0` to
`>=0.32.0` — the Upstash Box sandbox backend implements the `stop()` handle
contract eve requires since 0.32.

No runtime behavior changed; all sources compile and pass unmodified against
eve 0.44.3.
42 changes: 34 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ and `eve-extension-demo` (a minimal eve scaffold that mounts the extension).
- Built with `eve extension build` (not tsup), on eve ≥0.25's **dist packaging format**: `package.json`
has `"eve": { "extension": { "source": "./extension", "dist": "./dist/extension" } }`, `files` ships
**`dist/` only** (compiled `.mjs` + `.d.ts` per contribution, plus `_manifest.json` with
`builtWithEve`; eve validates compatibility from the manifest), and `eve` is a **wildcard peer**
(`"*"`, per the 0.25 scaffold — the manifest, not the range, is the compatibility tie). The old 0.24
`builtWithEve`; eve validates compatibility from the manifest), and `eve` is a **floored peer**
(`">=0.43.0"` — was the scaffold's `"*"` until issue #22; see **Consumer eve version** below). The old 0.24
format (`"eve": { "extension": "./extension" }`, ships source the consumer recompiles) is rejected by
eve ≥0.25 with "must declare `eve.extension.dist`" — don't regress to it. **No `prepare` script** (an
install-time build broke CI: sdk isn't built yet at install; `pnpm build` handles topological order).
Expand All @@ -111,8 +111,15 @@ and `eve-extension-demo` (a minimal eve scaffold that mounts the extension).
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 — so a dist built with eve 0.32 (tool 11 / dynamicTool 12 / hook 9) needs consumers
on **eve ≥0.32**. The wildcard peer stays `"*"`; the manifest is the real compatibility tie.
supported list — a dist built with eve 0.44.3 (formatVersion 2; tool 17 / dynamicTool 18 / hook 14 /
instructions 2) needs consumers on **eve ≥0.43** (tool 17 is the binding contract; hook 14 landed in
0.40). The `eve` peer is **`">=0.43.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
`dist/extension/_manifest.json` stamps, find the oldest eve whose `EXTENSION_CAPABILITY_CONTRACTS`
(in eve's `dist/src/compiler/extension-compatibility.js`) supports them all, and move the peer floor
to match.**
- `extension/extension.ts` = `defineExtension({ config: zod })`; the default export is the mount factory.
Config knobs: `userId` (string or `(ctx: SessionContext) => string` — eve's public base of tool+hook
ctx, imported from `eve/tools`), `redis` (defaults `Redis.fromEnv()`), `memory{topK,minScore}`,
Expand Down Expand Up @@ -215,7 +222,7 @@ and `eve-extension-demo` (a minimal eve scaffold that mounts the extension).
`new Ratelimit()`.

## AI SDK version strategy — IMPORTANT
- **AI SDK v7 stable everywhere.** Every package + demo pins `ai` to exactly **`7.0.58`**. `eve` (0.32)
- **AI SDK v7 stable everywhere.** Every package + demo pins `ai` to exactly **`7.0.58`**. `eve` (0.44)
declares `ai` as a **peer** (`^7.0.58`), so the apps/packages provide the single copy. Providers:
`@ai-sdk/openai` `^4.0.37`, `@ai-sdk/provider` `^4.0.7`, `@ai-sdk/react` `^4.0.62` (all stable ranges;
bump them with `pnpm -r update "@ai-sdk/*"` when eve moves — a stale `@ai-sdk/react` range can pin a
Expand Down Expand Up @@ -265,8 +272,9 @@ and `eve-extension-demo` (a minimal eve scaffold that mounts the extension).
`$count`, `$histogram`, `$percentiles`, `$cardinality`.

## Eve framework facts
- The repo is on **`eve@0.32.0`** (peer `>=0.24.0` in `packages/eve`; wildcard peer in the extension,
but the built dist needs consumers on ≥0.32 — see the eve-extension section). Subpath exports:
- The repo is on **`eve@0.44.3`** (peer `>=0.32.0` in `packages/eve` — 0.32 is where the sandbox
`stop()` contract our backend implements landed; peer `>=0.43.0` in the extension, matching the
built dist's manifest — see the eve-extension section). Subpath exports:
`eve/tools`, `eve/hooks`, `eve/extension`, `eve/context`, `eve/instructions`, `eve/sandbox`,
`eve/sandbox/vercel`, `eve/channels/*`, `eve/next`, `eve/react`, …
- **Breaking changes absorbed on the 0.25 → 0.32 jump:** (a) 0.31 replaced continuation-token session
Expand All @@ -280,6 +288,23 @@ and `eve-extension-demo` (a minimal eve scaffold that mounts the extension).
values differ in local dev; our sanitizing `resolveUserId` is unaffected); (e) eve 0.32's `ai` peer is
`^7.0.58` (drove the repo-wide exact-pin bump). Durable sessions now **complete after 30 days** by
default (0.28) — strengthens Redis `ChatHistory` as the long-term transcript store.
- **The 0.32 → 0.44.3 jump (issue #22) needed no source changes** — everything compiled and passed
as-is. Why each headline break missed us: hook contract v10 (0.33, "model identity moved from
`session.started` runtime metadata to `step.started` call attribution") — our `chat_history` hook
only reads `message.received`/`message.completed`, whose shapes (incl. `data.finishReason`) are
unchanged; 0.33's `defineDynamic` narrowing ("accepts only `events`") — our dynamic tools already
used the events-only form; 0.38 renamed frontend binding `stop()` → `cancel()` — eve-demo never
called it (`agent.send(message)` positional survives); 0.44.1 reruns session-scoped dynamic
resolvers on resume ("keep them idempotent") — ours are pure factories. The real fix was
rebuild + re-stamp the manifest + tighten the peers. `ai` stayed exact-pinned at `7.0.58`
(eve 0.44's peer is still `^7.0.58`). **One live-dev gotcha:** a demo's `.eve/` dir holding local
workflow state written by ≤0.37 fails to replay on ≥0.38 ("Event id is not slot-numbered" retry
loops that wedge new turns — 0.38.2 moved the dev world to slot-numbered event ids). `.eve/` is
gitignored dev scratch: after an eve bump, `rm -rf examples/*/.eve` before `eve dev`/`next dev`.
Both demos were verified with live turns on 0.44.3 (memory save + fresh-session recall, search
count matching seed data, cached weather tool, and the extension's dynamic search + chat-history
hook/tools writing and reading real `agentkit:chat:demo-user:*` docs); `gpt-5.4-mini` does exist
and responds — the "may 404" caveat in Known issues didn't materialize.
- **Extension packaging changed 0.24 → 0.25**: 0.24 shipped source the consumer recompiles; 0.25 ships
prebuilt `dist/extension` + `_manifest.json` (see the eve-extension section). 0.25 rejects
0.24-format packages at discovery.
Expand Down Expand Up @@ -398,5 +423,6 @@ pnpm -r --filter "./examples/*" build # build both demo apps
paused and runs until deleted). **Path bridge:** Eve roots its tools at `/workspace` but Box sessions live in `/workspace/home`,
so the backend remaps both `resolvePath` (file ops) and raw commands (`find /workspace …` →
`/workspace/home`, URL-safe via lookbehind) through the exported `toBoxPath`/`rewriteWorkspacePaths`.
- `gpt-5.4-mini` (demo model) may not exist → demos build fine but can 404 at runtime. Swap if needed.
- ~~`gpt-5.4-mini` (demo model) may not exist~~ — verified live (2026-08): it exists and responds in
both demos. No swap needed.
- The `19.2.17` `@types/react` may linger as an unpruned orphan in `.pnpm`; harmless (nothing links it).
2 changes: 1 addition & 1 deletion examples/eve-demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
"eve": "^0.32.0",
"eve": "^0.44.3",
"lucide-react": "1.16.0",
"motion": "12.40.0",
"nanoid": "5.1.11",
Expand Down
2 changes: 1 addition & 1 deletion examples/eve-extension-demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"@upstash/redis": "^1.38.0",
"@vercel/connect": "0.2.2",
"ai": "7.0.58",
"eve": "^0.32.0",
"eve": "^0.44.3",
"zod": "4.4.3"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/eve-extension/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ no repeated schemas; upgrades come through the package manager.

`<ns>` is the mount file's basename — the examples below use `agentkit`.

Start from an eve project (eve ≥ 0.32 — the prebuilt extension's compatibility manifest requires 0.32's contribution formats), then:
Start from an eve project (eve ≥ 0.43 — the prebuilt extension's compatibility manifest requires 0.43's contribution formats; the package declares this as its `eve` peer range), then:

```bash
pnpm add @upstash/agentkit-eve-extension
Expand Down
4 changes: 2 additions & 2 deletions packages/eve-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@
},
"devDependencies": {
"@types/node": "24.x",
"eve": "^0.32.0",
"eve": "^0.44.3",
"typescript": "7.0.2"
},
"peerDependencies": {
"eve": "*"
"eve": ">=0.43.0"
}
}
4 changes: 2 additions & 2 deletions packages/eve/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@
"@upstash/redis": "^1.38.0",
"ai": "7.0.58",
"dotenv": "^16.4.5",
"eve": "^0.32.0"
"eve": "^0.44.3"
},
"peerDependencies": {
"@upstash/box": ">=0.5.0",
"@upstash/redis": ">=1.38.0",
"eve": ">=0.24.0"
"eve": ">=0.32.0"
},
"peerDependenciesMeta": {
"@upstash/box": {
Expand Down
32 changes: 16 additions & 16 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading