Skip to content

feat(eve): memory - add portable file memory - #1703

Closed
AndrewBarba wants to merge 4 commits into
barba/first-class-memoryfrom
barba/user-memory-vercel-blob
Closed

feat(eve): memory - add portable file memory#1703
AndrewBarba wants to merge 4 commits into
barba/first-class-memoryfrom
barba/user-memory-vercel-blob

Conversation

@AndrewBarba

@AndrewBarba AndrewBarba commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

Related to #1510. Stacked on #1700.

Adds the built-in fileMemory() provider behind a portable conditional-document backend. It recalls an indexed file at session.started, refreshes it at compaction.completed, and exposes scoped save_memory(text) and remove_memory(index) tools with stable indexes and conflict retries. Recalled content uses the structured MemoryMessage result contract introduced by #1700.

The portable surface lives on eve/memory/file; the Vercel-specific vercelBlob() backend is isolated to eve/memory/file/vercel. Vercel deployments select private Blob storage only when BLOB_STORE_ID or the legacy BLOB_READ_WRITE_TOKEN signals an attached store. Vercel deployments without a store and non-Vercel production deployments must configure a backend explicitly instead of silently losing memory on restart; development still defaults to process-local storage.

Validation

  • pnpm fmt
  • pnpm lint
  • pnpm typecheck
  • pnpm guard:invariants
  • pnpm docs:check (83 documents compile)
  • pnpm test:unit
  • pnpm test:integration
  • ../../node_modules/.bin/vitest run --config vitest.unit.config.ts src/public/memory/file from packages/eve (22 passed)
  • ../../node_modules/.bin/vitest run --config vitest.integration.config.ts src/execution/file-memory.integration.test.ts from packages/eve (1 passed)
  • ./node_modules/.bin/tsc -p packages/eve/tsconfig.json --noEmit
  • pnpm --filter eve build
  • pnpm --filter eve exec vitest run --config vitest.scenario.config.ts test/scenarios/file-memory-provider.scenario.test.ts (1 passed)

Vercel Blob behavior is covered through its mocked SDK contract; no live Blob credentials were used locally.

Checklist

  • I linked an issue with prior discussion confirming this change is wanted
  • I ran the relevant checks from CONTRIBUTING.md
  • I added tests and documentation where relevant
  • I added a changeset if this touches the published eve package
  • DCO sign-off passes for every commit (git commit --signoff)

@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview Aug 12, 2026 9:32pm
eve-docs-4759 Ready Ready Preview, v0 Aug 12, 2026 9:32pm
eve-package-aritfacts Ready Ready Preview Aug 12, 2026 9:32pm
eve-pkg Ready Ready Preview Aug 12, 2026 9:32pm

@AndrewBarba AndrewBarba changed the title feat(eve): add user memory provider feat(eve): memory - add portable user provider Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Bundle + Package Summary: apps/fixtures/weather-agent

Key takeaways

  • Package delta: install footprint 73.27 MB -> 73.74 MB (+469.8 kB ⚠️).

Delta vs barba/first-class-memory (cd18a36)

Area Metric Baseline Current Delta
Package Packed tarball 7.96 MB 8.11 MB +143.9 kB ⚠️
Package Unpacked publish size 29.76 MB 30.23 MB +469.8 kB ⚠️
Package Installed footprint 73.27 MB 73.74 MB +469.8 kB ⚠️
Package Published files 3182 3201 +19
Package Installed files 6892 6911 +19
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 17.20 MB 17.20 MB -40 B ✅
Runtime Public routes 14 14 0
Changed function payloads vs barba/first-class-memory (cd18a36) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 8.60 MB 8.60 MB -20 B ✅ none
functions/.well-known/workflow/v1/flow.func changed 8.60 MB 8.60 MB -20 B ✅ none

eve init install

Metric Baseline Current Delta
Installed footprint 111.68 MB 112.15 MB +469.8 kB ⚠️
Installed packages 121 121 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 44.25 MB 44.72 MB +469.8 kB ⚠️
devDependency package bytes 5.04 MB 5.04 MB 0 B ➖
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-08-12T21:33:14.917Z
  • Route aliases: 14 public, 1 internal (15 total aliases)
  • Vercel routes in config: 17
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.33.3
  • Package directory: packages/eve
  • Tarball: 8.11 MB (eve-0.33.3.tgz)
  • Unpacked payload: 30.23 MB across 3201 published files
  • Installed footprint: 73.74 MB across 6911 installed files
  • Installed root package: 28.87 MB
  • Installed dependencies: 44.87 MB
  • Runtime dependencies: 2
  • Peer dependencies: 5 (4 optional)

Installed footprint is measured from an isolated temporary npm install of the packed tarball.

Heavy installed dependencies

  • eve: 28.87 MB (39.2%)
  • @rolldown/binding-linux-x64-gnu: 19.41 MB (26.3%)
  • ai: 6.68 MB (9.1%)
  • zod: 5.07 MB (6.9%)
  • undici: 3.50 MB (4.8%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [################........] 10.19 MB 33.7%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.42 MB 8.0%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [##......................] 1.51 MB 5.0%
🟡 dist/src/compiled/_chunks/workflow/undici-BNc... [#.......................] 508.8 kB 1.7%
🟡 dist/src/compiled/_chunks/node/undici-CUIybhQ... [#.......................] 508.8 kB 1.7%
🔴 Other published files                            [########################] 15.09 MB 49.9%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 28.87 MB 39.2%
🔴 @rolldown/binding-linux-x64-gnu [################........] 19.41 MB 26.3%
🔴 ai                              [######..................] 6.68 MB 9.1%
🔴 zod                             [####....................] 5.07 MB 6.9%
🟠 undici                          [###.....................] 3.50 MB 4.8%
🟠 nitro                           [##......................] 2.41 MB 3.3%
🔴 Other installed packages        [######..................] 7.80 MB 10.6%
Runtime dependencies (2)
Package Range Notes
nitro 3.0.260610-beta
undici 8.9.0
Peer dependencies (5)
Package Range Notes
@opentelemetry/api ^1.0.0 optional peer
ai catalog:
braintrust ^3.0.0 optional peer
just-bash ^3.0.0 optional peer
microsandbox ^0.5.0 optional peer
eve init install drill-down

eve init install details

  • Command: eve init my-agent
  • Package manager: npm
  • Installed footprint: 112.15 MB across 8787 installed files
  • Installed packages: 121 total (115 transitive-only)
  • dependencies: 4 direct packages totaling 44.72 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.39 MB

Installed footprint is measured from an isolated temporary eve init my-agent using the current packed eve tarball.

Heavy installed dependencies

  • eve: 28.87 MB (25.7%)
  • @typescript/typescript-linux-x64: 27.95 MB (24.9%)
  • @rolldown/binding-linux-x64-gnu: 19.41 MB (17.3%)
  • zod: 9.02 MB (8.0%)
  • ai: 6.68 MB (6.0%)
Installed footprint breakdown
Installed package size
🔴 eve                              [########################] 28.87 MB 25.7%
🔴 @typescript/typescript-linux-x64 [#######################.] 27.95 MB 24.9%
🔴 @rolldown/binding-linux-x64-gnu  [################........] 19.41 MB 17.3%
🔴 zod                              [########................] 9.02 MB 8.0%
🔴 ai                               [######..................] 6.68 MB 6.0%
🟠 undici                           [###.....................] 3.50 MB 3.1%
🔴 Other installed packages         [##############..........] 16.71 MB 14.9%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.3 141.0 kB 0.1%
ai ^7.0.58 6.68 MB 6.0%
eve file:eve-0.33.3.tgz 28.87 MB 25.7%
zod 4.4.3 9.02 MB 8.0%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.3%
typescript 7.0.2 2.50 MB 2.2%
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 8.60 MB 50.0%
🔴 functions/__server.func                         [########################] 8.60 MB 50.0%

Top Function Payloads

🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 8.60 MB
Metric Value
Public routes /.well-known/workflow/v1/flow
Runtime nodejs24.x
Handler index.mjs
Payload 8.60 MB
Function files 8.60 MB across 46 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.45 MB (28.5%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.45 MB 28.5%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.65 MB 19.2%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.4%
🟡 _chunks/sandbox.mjs             [########................] 777.7 kB 9.0%
🟡 _chunks/token-util-DNwIAn_u.mjs [####....................] 381.0 kB 4.4%
🟠 Other bundled files             [#######################.] 2.36 MB 27.4%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve776561746865722d6167656e74_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ],
  "environment": {
    "WORKFLOW_PRECONDITION_GUARD": "1"
  }
}

🟠 functions/__server.func • 13 public routes, 1 internal alias • 8.60 MB
Metric Value
Public routes /
/eve/v1/callback/[token]
/eve/v1/connections/[name]/callback/[attemptId]/[token]
/eve/v1/connections/[name]/callback/[token]
/eve/v1/health
/eve/v1/info
/eve/v1/session
/eve/v1/session/[sessionId]
/eve/v1/session/[sessionId]/cancel
/eve/v1/session/[sessionId]/clear
/eve/v1/session/[sessionId]/compact
/eve/v1/session/[sessionId]/reset
/eve/v1/session/[sessionId]/stream
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 8.60 MB
Function files 8.60 MB across 46 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.45 MB (28.5%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.45 MB 28.5%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.65 MB 19.2%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.4%
🟡 _chunks/sandbox.mjs             [########................] 777.7 kB 9.0%
🟡 _chunks/token-util-DNwIAn_u.mjs [####....................] 381.0 kB 4.4%
🟠 Other bundled files             [#######################.] 2.36 MB 27.4%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x"
}

Build Timing: e2e/fixtures/agent-tools-sandbox

This is an informational timing measurement inside eve build, from preflight through publication. Output-size measurement and profile writing are excluded.

Build mode: deployable Vercel build with sandbox template prewarm included.

  • Build pipeline: 2.21 s -> 2.21 s (+1.5 ms) vs barba/first-class-memory (cd18a36).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `barba/first-class-memory (cd18a36)`
Phase Baseline Current Delta
extension.check 1.2 ms 1.2 ms 0.0 ms
project.resolve 0.7 ms 0.7 ms 0.0 ms
workspace.create 0.7 ms 0.7 ms 0.0 ms
host.prepare 331.7 ms 273.5 ms -58.2 ms
vercel.service-prefix.resolve 2.1 ms 2.0 ms -0.1 ms
nitro.create 223.3 ms 225.5 ms +2.2 ms
sandbox.prewarm 282.6 ms 318.7 ms +36.1 ms
nitro.cache.prepare 0.2 ms 0.3 ms +0.1 ms
nitro.prepare 0.7 ms 0.7 ms 0.0 ms
nitro.public-assets 0.7 ms 0.8 ms +0.1 ms
nitro.prerender 0.5 ms 0.5 ms 0.0 ms
nitro.bundle 1.34 s 1.36 s +21.4 ms
nitro.cache.write 0.3 ms 0.3 ms 0.0 ms
vercel.workflow-function.materialize 21.1 ms 21.5 ms +0.4 ms
agent-summary.emit 0.5 ms 0.5 ms 0.0 ms
nitro.close 0.1 ms 0.1 ms 0.0 ms
output.publish 3.3 ms 3.0 ms -0.3 ms
workspace.remove 1.9 ms 1.8 ms -0.1 ms

Comment thread docs/memory.md
provider: userMemory({
backend: vercelBlob({
prefix: "my-agent/memory/user",
token: process.env.BLOB_READ_WRITE_TOKEN,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this token? Let's recommend OIDC

Comment thread packages/eve/src/public/memory/file/provider.ts Outdated
const entries = parseMemoryDocument(document?.content ?? "");
const existing = entries.find((entry) => entry.text === text);
if (existing !== undefined) return { index: existing.index };
if (entries.length >= input.memoryLimit) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why number of entries vs length? The latter enforces concise entries as well

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

number of entries felt easier to reason about as opposed to characters. I think in general all memories will be roughly same length but you dont necessarily know what that length is so to go configure a character limit seems nearly impossible to get right

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

character limit constrains verbosity, which is useful


return defineMemoryProvider({
events: {
async "turn.prepared"(_event, context) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not use hook event names? i don't think turn.prepared exists

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was added in earlier pr in stack but agree its a bit of a weird name let me see if we can just slot this into turn.started I forget exactly how materially different started vs prepared is

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer we just have one.

Also are these hooks? Should we call it such?

@ctgowrie

ctgowrie commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

e2e?

@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from 36a476b to 3027fc1 Compare August 6, 2026 18:37
@AndrewBarba AndrewBarba changed the title feat(eve): memory - add portable user provider feat(eve): memory - add portable file memory Aug 6, 2026
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from 3027fc1 to 7c45922 Compare August 10, 2026 17:15
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from 916f77e to cf6c3e9 Compare August 11, 2026 20:14
@AndrewBarba
AndrewBarba requested a review from cmpadden as a code owner August 12, 2026 18:19
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from cf6c3e9 to dd36c11 Compare August 12, 2026 18:19
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from dd36c11 to da19f04 Compare August 12, 2026 18:21
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 August 12, 2026 18:21 Inactive
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from da19f04 to 104239d Compare August 12, 2026 18:38
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from 104239d to c706070 Compare August 12, 2026 19:07
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from c706070 to e98502b Compare August 12, 2026 19:18
@vercel
vercel Bot temporarily deployed to Preview – eve-package-aritfacts August 12, 2026 19:18 Inactive
@AndrewBarba
AndrewBarba force-pushed the barba/user-memory-vercel-blob branch from e98502b to 5df9279 Compare August 12, 2026 20:07
Signed-off-by: Andrew Barba <barba@hey.com>
Signed-off-by: Andrew Barba <barba@hey.com>
Signed-off-by: Andrew Barba <barba@hey.com>
Signed-off-by: Andrew Barba <barba@hey.com>
@AndrewBarba

Copy link
Copy Markdown
Collaborator Author

Superseded by the revised memory contract in #1581 and the replacement core implementation. The portable document backend, storage implementations, and optimistic concurrency work remain useful and will be transplanted into a clean file-memory provider PR using recall and tools directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants