Skip to content

feat(eve): memory - add first-class provider lifecycle - #2534

Merged
AndrewBarba merged 7 commits into
mainfrom
barba/memory-core
Aug 26, 2026
Merged

feat(eve): memory - add first-class provider lifecycle#2534
AndrewBarba merged 7 commits into
mainfrom
barba/memory-core

Conversation

@AndrewBarba

@AndrewBarba AndrewBarba commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Part of #1510 and implements the M1 core specified by the proposal merged in #1581.

This adds first-class, path-authored memory to eve. An agent can define memory.ts or named memory/<slot>.ts providers with nested recall handlers, optional nested capture handlers, and optional provider-owned tools. The lifecycle keys live under the operation they perform—recall["turn.started"], recall["compaction.completed"], capture["compaction.requested"], and capture["turn.completed"]—so recall and capture remain distinct provider responsibilities without a phase discriminator or top-level event map.

Memory participates in the existing source graph, durable session history, dynamic-tool lifecycle, compaction, subagent compilation, and agent inspection surfaces. Each selected memory source instantiates its tools/<slot>.ts wrapper from a registered programmatic template anchored to that source. The wrapper inherits the anchor's node and layer, records the memory binding as a dependency, and yields to a direct tool in the same slot. There is no memory-specific source layer, registration mode, source-ID convention, or post-resolution tool merge.

Definition factories are materialized once per module-map load. That generic rule lets a direct slot and any derived slots share one definition/provider instance while keeping compile, generated, bundled, and hydrated module maps isolated from one another; it does not introduce a global provider registry.

Behavior

  • Discovers mutually exclusive flat and named memory slots, including subagent-owned slots, with path-derived identities and application override semantics.
  • Exposes defineMemory, defineMemoryProvider, defaultNamespace, phase-specific lifecycle contexts, and the byPrincipal scope helper through eve/memory and eve/memory/scope.
  • Resolves and locks namespace/scope before recall; null disables the slot for the operation.
  • Attributes recalled user-role records in durable history, projects only records visible to the current locks, and supports keyed supersession and idempotent replay.
  • Dispatches provider handlers by their nested lifecycle keys: recall at turn start and optionally after compaction; capture optionally before compaction and after a completed turn.
  • Canonicalizes memory records outside ordinary summarization when compaction runs or the raw record log crosses its maintenance trigger.
  • Exposes provider tools through the ordinary dynamic-tool lifecycle, including approvals, callback metadata, and cold-resume rebinding.
  • Adds agent-info v4 memory inspection, published documentation, a changeset, unit/integration/scenario coverage, extension-contract fixtures, and a deterministic E2E fixture.

Scope

This is the provider-neutral core only. It intentionally does not add storage or a bundled file provider. The completed fileMemory() follow-up is #2580, stacked directly on this branch; its old stack-locked PR record #2144 and the earlier core/E2E attempts #2142 and #2145 are superseded.

Extensions cannot contribute memory slots at their root because the consuming application owns scope and lifecycle state. Extension-owned subagents can define their own memory like any other declared subagent.

Validation

  • pnpm typecheck
  • pnpm docs:check
  • pnpm lint (three pre-existing warnings)
  • pnpm guard:invariants
  • Focused memory unit and authored-definition tests
  • Focused compile-agent scenario (25 tests)
  • Full unit run: 7,127 passed, one skipped; two unrelated five-second timeouts passed together on immediate focused rerun

CI is the official merge gate for pushed head b15d8bbba.

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 for the published eve package
  • Every commit is cryptographically signed and includes the DCO trailer

Diff size

Docs — 14 files · +501 / -225

Adds the memory guide, updates related concept and pattern docs, records the research contract, and includes the package changeset.

Implementation — 51 files · +2,167 / -87

Adds provider-neutral memory discovery, compilation, lifecycle, durable projection, compaction, inspection, and the registered provider-tool wrapper. Module maps share zero-argument definition-factory results within one load; provider tools otherwise use the existing dynamic-tool machinery.

Tests — 28 files · +1,545 / -13

Covers provider validation, lifecycle dispatch, projection, state, source precedence, generated/bundled/hydrated module maps, extension contracts, fresh-process compilation, cold rebinding, and a fixture-owned E2E eval.

@vercel

vercel Bot commented Aug 25, 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, v0 Aug 26, 2026 1:35pm
eve-docs-4759 Ready Ready Preview, v0 Aug 26, 2026 1:35pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
eve-pkg Skipped Skipped v0 Aug 26, 2026 1:35pm

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs main (eb2727d).

Delta vs main (eb2727d)

Area Metric Baseline Current Delta
Package Packed tarball 8.23 MB 8.24 MB +14.0 kB ⚠️
Package Unpacked publish size 31.01 MB 31.09 MB +76.7 kB ⚠️
Package Installed footprint 74.65 MB 74.72 MB +76.7 kB ⚠️
Package Published files 3507 3534 +27
Package Installed files 7222 7249 +27
Package Installed package instances 35 35 0
Package Distinct installed package names 34 34 0
Package Installed dependency edges 53 53 0
Package Installed optional peer edges 47 47 0
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 18.37 MB 18.45 MB +72.8 kB ⚠️
Runtime Public routes 16 16 0
Changed function payloads vs main (eb2727d) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 9.19 MB 9.22 MB +36.4 kB ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 9.19 MB 9.22 MB +36.4 kB ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 113.08 MB 113.16 MB +76.7 kB ⚠️
Installed packages 120 120 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 45.62 MB 45.69 MB +76.7 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-26T13:37:07.744Z
  • Route aliases: 16 public, 1 internal (17 total aliases)
  • Vercel routes in config: 19
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.45.0
  • Package directory: packages/eve
  • Tarball: 8.24 MB (eve-0.45.0.tgz)
  • Unpacked payload: 31.09 MB across 3534 published files
  • Installed footprint: 74.72 MB across 7249 installed files
  • Installed root package: 29.73 MB
  • Installed dependencies: 44.99 MB
  • Installed package instances: 35
  • Distinct installed package names: 34
  • Installed dependency edges: 53
  • Installed optional peer edges: 47
  • Runtime dependencies: 2
  • Peer dependencies: 5 (4 optional)

Installed footprint is measured from an isolated temporary npm install of the packed tarball.
Graph metrics read only package.json files in package directories directly beneath a node_modules boundary, including nested boundaries. Each directory is one package instance; distinct names come from those manifests. Dependency edges count each unique name in dependencies or optionalDependencies per instance; optional peer edges count peerDependencies marked optional.

Heavy installed dependencies

  • eve: 29.73 MB (39.8%)
  • @rolldown/binding-linux-x64-gnu: 19.33 MB (25.9%)
  • ai: 6.77 MB (9.1%)
  • zod: 5.07 MB (6.8%)
  • undici: 3.50 MB (4.7%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [##############..........] 9.76 MB 31.4%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.44 MB 7.9%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [##......................] 1.51 MB 4.8%
🟡 dist/src/compiled/_chunks/workflow/undici-Dzn... [#.......................] 512.7 kB 1.6%
🟡 dist/src/compiled/_chunks/node/undici-CUIybhQ... [#.......................] 508.8 kB 1.6%
🔴 Other published files                            [########################] 16.36 MB 52.6%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 29.73 MB 39.8%
🔴 @rolldown/binding-linux-x64-gnu [################........] 19.33 MB 25.9%
🔴 ai                              [#####...................] 6.77 MB 9.1%
🔴 zod                             [####....................] 5.07 MB 6.8%
🟠 undici                          [###.....................] 3.50 MB 4.7%
🟠 nitro                           [##......................] 2.41 MB 3.2%
🔴 Other installed packages        [######..................] 7.92 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.1.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: 113.16 MB across 9145 installed files
  • Installed packages: 120 total (114 transitive-only)
  • dependencies: 4 direct packages totaling 45.69 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.43 MB

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

Heavy installed dependencies

  • eve: 29.73 MB (26.3%)
  • @typescript/typescript-linux-x64: 27.95 MB (24.7%)
  • @rolldown/binding-linux-x64-gnu: 19.33 MB (17.1%)
  • zod: 9.02 MB (8.0%)
  • ai: 6.77 MB (6.0%)
Installed footprint breakdown
Installed package size
🔴 eve                              [########################] 29.73 MB 26.3%
🔴 @typescript/typescript-linux-x64 [#######################.] 27.95 MB 24.7%
🔴 @rolldown/binding-linux-x64-gnu  [################........] 19.33 MB 17.1%
🔴 zod                              [#######.................] 9.02 MB 8.0%
🔴 ai                               [#####...................] 6.77 MB 6.0%
🟠 undici                           [###.....................] 3.50 MB 3.1%
🔴 Other installed packages         [##############..........] 16.86 MB 14.9%
dependencies (4)
Package Range Installed size Share
@vercel/connect 1.0.0 167.9 kB 0.1%
ai ^7.0.58 6.77 MB 6.0%
eve file:eve-0.45.0.tgz 29.73 MB 26.3%
zod 4.4.3 9.02 MB 8.0%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.2%
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     [########################] 9.22 MB 50.0%
🔴 functions/__server.func                         [########################] 9.22 MB 50.0%

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                   [##########..............] 1.82 MB 19.7%
🟡 _libs/undici.mjs            [#####...................] 980.5 kB 10.6%
🟡 _chunks/sandbox.mjs         [####....................] 781.9 kB 8.5%
🟡 _chunks/frames-Dl2Hcma4.mjs [####....................] 678.7 kB 7.4%
🟡 _chunks/chatgpt-model.mjs   [####....................] 665.1 kB 7.2%
🔴 Other bundled files         [########################] 4.30 MB 46.6%

🧾 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 • 15 public routes, 1 internal alias • 9.22 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/[parentSessionId]/subagents/[callId]/[childSessionId]/stream
/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
/eve/v1/task-input/[token]
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 9.22 MB
Function files 9.22 MB across 107 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 1.82 MB (19.7%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                   [##########..............] 1.82 MB 19.7%
🟡 _libs/undici.mjs            [#####...................] 980.5 kB 10.6%
🟡 _chunks/sandbox.mjs         [####....................] 781.9 kB 8.5%
🟡 _chunks/frames-Dl2Hcma4.mjs [####....................] 678.7 kB 7.4%
🟡 _chunks/chatgpt-model.mjs   [####....................] 665.1 kB 7.2%
🔴 Other bundled files         [########################] 4.30 MB 46.6%

🧾 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.46 s -> 2.36 s (-96.2 ms) vs main (eb2727d).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `main (eb2727d)`
Phase Baseline Current Delta
extension.check 1.2 ms 1.2 ms 0.0 ms
project.resolve 0.3 ms 0.3 ms 0.0 ms
workspace.create 0.7 ms 0.7 ms 0.0 ms
host.prepare 385.2 ms 343.4 ms -41.8 ms
vercel.service-prefix.resolve 2.4 ms 2.4 ms 0.0 ms
nitro.create 279.7 ms 272.1 ms -7.6 ms
sandbox.prewarm 204.5 ms 172.8 ms -31.7 ms
nitro.cache.prepare 0.3 ms 0.3 ms 0.0 ms
nitro.prepare 0.7 ms 0.8 ms +0.1 ms
nitro.public-assets 0.8 ms 0.8 ms 0.0 ms
nitro.prerender 0.5 ms 0.5 ms 0.0 ms
nitro.bundle 1.53 s 1.52 s -16.9 ms
nitro.cache.write 0.5 ms 0.4 ms -0.1 ms
vercel.workflow-function.materialize 43.2 ms 45.8 ms +2.6 ms
agent-summary.emit 0.8 ms 0.7 ms -0.1 ms
nitro.close 0.1 ms 0.2 ms +0.1 ms
output.publish 3.8 ms 3.4 ms -0.4 ms
workspace.remove 2.1 ms 2.1 ms 0.0 ms

@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 August 25, 2026 13:53 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-pkg August 25, 2026 13:53 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-pkg August 25, 2026 14:00 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-pkg August 25, 2026 14:07 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-pkg August 25, 2026 16:37 Inactive
Comment thread docs/patterns/multi-tenant-memory.md Outdated
Comment thread docs/memory.md Outdated
@AndrewBarba

Copy link
Copy Markdown
Collaborator Author

Implemented the nested lifecycle-key shape Casey and Andrew agreed on in 1f6f632c3: required recall["turn.started"], optional recall["compaction.completed"], optional capture handlers under capture, and tools unchanged. The public phase discriminator, union recall/capture contexts, and old handler code paths are gone; runtime dispatch and authored-definition validation now use the nested keys directly. The file-provider follow-up is stacked on this exact API in #2580.

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>
Signed-off-by: Andrew Barba <barba@hey.com>
Signed-off-by: Andrew Barba <barba@hey.com>
Signed-off-by: Andrew Barba <barba@hey.com>
@vercel
vercel Bot temporarily deployed to Preview – eve-pkg August 26, 2026 13:33 Inactive
@AndrewBarba
AndrewBarba merged commit 5664cc0 into main Aug 26, 2026
109 checks passed
@AndrewBarba
AndrewBarba deleted the barba/memory-core branch August 26, 2026 13:44
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.

2 participants