Repository navigation
fix(eve): migrate to eve 0.87 (redisMemory, UpstashSandbox) + bump ai 7.0.156 - #84
Merged
Merged
Conversation
devDependency/example-only bump; no published package contents change, so no changeset. eve 0.87.0 and TanStack AI 1.0.0 are not applied; see CLAUDE.md. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CMK4etZKNEc4Rzig1SCPpJ
There was a problem hiding this comment.
🟢 Approval recommended
There are no active review issues blocking the AI SDK dependency updates.
No open issues 🎉
1 file not reviewed
pnpm-lock.yaml: Generated file
What changed in this PR
Updates AI SDK dependencies in the adapter and selected demos while preserving the older versions required by the Eve adapter and its demo.
Changes:
- Bumps
aito7.0.156in three packages and aligns the AI SDK demo’s@ai-sdk/reactto^4.0.160. - Refreshes lockfile resolutions without changing published runtime dependencies or peer ranges.
- Documents compatibility constraints behind deferred Eve and TanStack AI upgrades.
| File | Description |
|---|---|
pnpm-lock.yaml |
Updates AI SDK resolutions and related dependency snapshots. |
packages/ai-sdk/package.json |
Bumps the ai development dependency to 7.0.156. |
examples/eve-extension-demo/package.json |
Bumps the demo’s ai dependency to 7.0.156. |
examples/ai-sdk-demo/package.json |
Updates ai and its React integration together. |
CLAUDE.md |
Records the upstream check and deferred-upgrade constraints. |
Review effort: Balanced
….87.0
- redisMemory() no longer registers the removed compaction.completed recall hook, which made
`eve build` reject the slot ("provider.recall Unknown key compaction.completed"). save_memory takes
its ordering sequence from the turn.started recall (eve's memory tools context has no `turn`).
- UpstashSandbox implements eve's connection-based provider contract: prepare via ctx.populate,
byte-level connection, idempotent start keyed on the session id, SandboxSessionGoneError on resume,
onSessionEnd.
- packages/eve and examples/eve-demo move to eve ^0.87.0 / ai 7.0.156 (demo: turn.reply, new
useEveAgent shape, @vercel/connect 2.5.6, next 16.2.9 so one eve instance is resolved).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMK4etZKNEc4Rzig1SCPpJ
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CMK4etZKNEc4Rzig1SCPpJ
There was a problem hiding this comment.
🟡 Changes recommended
Box API failures are misclassified as missing sandboxes, risking loss of associations to intact boxes and silently skipped cleanup during temporary outages.
4 open issues
1 file not reviewed
pnpm-lock.yaml: Generated file
Review effort: Balanced
Comment on lines
+532
to
+534
| const found = await liveBox(() => Box.get(boxId, connection)); | ||
| if (!found.box) { | ||
| throw new SandboxSessionGoneError( |
| } | ||
| // Box names are account-wide: a lingering deleted record keeps its name, so retry with a | ||
| // suffix. (`onSessionEnd` finds this box through the recorded state.) | ||
| if (errorMessage(err).startsWith(SNAPSHOT_RESTORE_FAILED)) throw err; |
| // Box names are account-wide: a lingering deleted record keeps its name, so retry with a | ||
| // suffix. (`onSessionEnd` finds this box through the recorded state.) | ||
| if (errorMessage(err).startsWith(SNAPSHOT_RESTORE_FAILED)) throw err; | ||
| box = await createBox(`${name}-${randomBytes(3).toString("hex")}`, restoreFrom); |
Comment on lines
+551
to
+554
| } catch { | ||
| return; // nothing exists | ||
| } | ||
| const { status } = await box.getStatus().catch(() => ({ status: "deleted" })); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


What this fixes
Published
@upstash/agentkit-eve@0.16.1is broken on current eve.redisMemory()makeseve buildfail on eve >= 0.84 (including latest 0.87.0) withprovider.recall Unknown key "compaction.completed", andUpstashSandbox(./sandbox) targets a provider contract eve has since replaced. Itsevepeer (>=0.75.0) admits all of those versions. Merging this PR and then the resulting "Version Packages" PR publishes@upstash/agentkit-eve0.17.0 with the fix (a minor changeset is included).Changes
@upstash/agentkit-eve(minor; peer>=0.75.0->>=0.87.0)redisMemory()registers onlyrecall["turn.started"](eve 0.84 removedcompaction.completed). eve 0.84+ gives memory tools noturn, soturn.startedstores the turn sequence in Redis (<replayCachePrefix>:sequence:<scope>:<session>) andsave_memoryreads it to order its record (read_sessionsorts on it); falls back to 0 if no recall ran.UpstashSandboxon eve's connection-based provider contract:preparepopulates a temp box viactx.populate(connection)then snapshots (ctx.isEmpty-> no box);startis an idempotent upsert oneve-<sha256(session.id)[:16]>(suffixed fallback if a deleted record holds the name);resumethrowsSandboxSessionGoneError;onSessionEnddeletes by recorded box id or derived name and no-ops when nothing exists;connection.stop()= Box pause;setNetworkPolicyis a connection extension; a writable-stdin spawn throws.Pins:
packages/eve+examples/eve-demomove to eve^0.87.0/ai7.0.156 (no longer held).eve-demo:turn.reply, newuseEveAgentshape,@vercel/connect2.5.6 andnext16.2.9 (sopackages/eveand the demo resolve one eve instance). Also from the original bump:ai7.0.156 /@ai-sdk/react^4.0.160 elsewhere.Deliberately not applied: eve 0.87 for
@upstash/agentkit-eve-extension(a dist built on 0.87 is refused by eve 0.85/0.86 and would force its peer to>=0.87.0with no contract change; it already builds clean on 0.85-0.87), and TanStack AI 1.0.0 (test-only typecheck/runtime breaks; publishedagentkit-tanstack-ai@0.2.0already works on it).Verification
lint, typecheck,
sync-version --check, build, example builds: pass.eve eval(mocked model) passes for eve-demo (10/10) and eve-extension-demo (4/4); TanStack demo e2e 6/6. All 42packages/evememory tests pass against live Redis.pnpm testshows the same 19 live-Redis failures as unmodified main (the throwaway Redis allows one search index).Not verified: the live Upstash Box suite in
sandbox.test.ts(needsUPSTASH_BOX_API_KEY) was not run, so the newUpstashSandboxlifecycle is covered by offline tests and by the eve-demo eval reachingBox.createfromprepare, but not by a real box round trip. Please run it once with a key before releasing.🤖 Generated with Claude Code
https://claude.ai/code/session_01CMK4etZKNEc4Rzig1SCPpJ