Skip to content

feat(eve): ingest session notifications inline in the callback route#1196

Merged
ruiconti merged 0 commit into
rui/notification-reactors-researchfrom
rui/notification-consumer-prototype
Jul 25, 2026
Merged

feat(eve): ingest session notifications inline in the callback route#1196
ruiconti merged 0 commit into
rui/notification-reactors-researchfrom
rui/notification-consumer-prototype

Conversation

@ruiconti

@ruiconti ruiconti commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Stacked on #1172 (base: rui/notification-reactors-research) and lands before #1167. Prototype for issue #1170, scoped to the caller-side ingestion of notification-class events — no remote-agent propagation here. #1167 restacks on top and carries the remote lane (callback envelope, callee forwarding, the agent-remote-callbacks fixture and its evals).

What

Notification-class child events (authorization.required/authorization.completed surfaced on a caller's stream) reach the channel and the stream with no run, no hook, and no queue wake — the event arrives as an HTTP callback, so the compute is already paid. POST /eve/v1/callback/<sessionId>:events:

  1. validates the closed notification vocabulary and wraps the event as subagent.event (carrying childSessionId);
  2. loads the session entry run's serialized channel context (world.runs.get, read-only — no dedicated persistence) and runs the channel's existing adapter event handler against it, so push channels render with zero authoring changes;
  3. appends the wrapped event to the session's durable stream (world.streams.write by the run-derived name) for followers (TUI, web, evals).

Both effects are best-effort per the lane's fire-once contract: a finished session logs and drops; nothing retries.

Three commits: two standalone harness fixes (same-step approval + runtime-action drop; live-module OpenAPI baseUrl) and the ingestion itself.

Why inline, not a run

Earlier iterations delivered through a per-session sidecar run (a workflow parked on <sessionId>:events, catching up over the stream by cursor). It works, and the replay-cost argument for it is real — but it over-serves this lane. The notification class is fire-once and drop-ok: it needs neither the sidecar's journaled exactly-once, its ordering, nor its consumer-held state. Inline ingestion in the callback's own compute is the minimal shape that satisfies the contract. The sidecar survives in the research doc as the graduated tier for event classes that genuinely need cursor semantics, ordering, or state (progress, proxied HITL), gated behind the frequency-admission rule.

The load-bearing feasibility questions were verified on disk: world.streams.write and world.runs.get both work from plain route code (no workflow context), and the wrapped subagent.event was observed on the parent's durable stream, written by the HTTP handler.

Known-red / deferred

  • childSessionId on SubagentChildEventStreamEvent trips the rule-36 capability-epoch ceremony on four contracts (additive/compatible; ceremony not run), so guard:invariants fails on this branch.
  • The default stream name (strm_<id>_user) is a vendored-engine naming contract; the engine should eventually expose a resolver or accept name-less default writes.
  • End-to-end validation (the remote fixture + evals) lands with feat(eve): propagate remote-callee authorization events to the caller #1167 once it restacks — the ingestion mechanism is proven here, but the full child→caller→reply loop needs the coherent remote lane, not a hand-spliced mix.

Unit suite green, typecheck clean.

@vercel

vercel Bot commented Jul 24, 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, Comment, Open in v0 Jul 24, 2026 11:57pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
eve-docs-1644 Skipped Skipped Open in v0 Jul 24, 2026 11:57pm
eve-docs-4759 Skipped Skipped Open in v0 Jul 24, 2026 11:57pm

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs rui/notification-reactors-research (7feb447).

Delta vs rui/notification-reactors-research (7feb447)

Area Metric Baseline Current Delta
Package Packed tarball 4.04 MB 4.05 MB +442 B ⚠️
Package Unpacked publish size 14.70 MB 14.71 MB +6.4 kB ⚠️
Package Installed footprint 53.86 MB 53.86 MB +6.4 kB ⚠️
Package Published files 2743 2747 +4
Package Installed files 5983 5987 +4
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 11.66 MB 11.67 MB +10.2 kB ⚠️
Runtime Public routes 10 10 0
Changed function payloads vs rui/notification-reactors-research (7feb447) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 4.40 MB 4.41 MB +5.5 kB ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 7.26 MB 7.27 MB +4.8 kB ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 92.26 MB 92.27 MB +6.4 kB ⚠️
Installed packages 122 122 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 28.98 MB 28.99 MB +6.4 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-07-24T23:57:54.465Z
  • Route aliases: 10 public, 1 internal (11 total aliases)
  • Vercel routes in config: 11
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.27.3
  • Package directory: packages/eve
  • Tarball: 4.05 MB (eve-0.27.3.tgz)
  • Unpacked payload: 14.71 MB across 2747 published files
  • Installed footprint: 53.86 MB across 5987 installed files
  • Installed root package: 13.43 MB
  • Installed dependencies: 40.44 MB
  • Runtime dependencies: 1
  • Peer dependencies: 5 (4 optional)

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

Heavy installed dependencies

  • @rolldown/binding-linux-x64-gnu: 18.96 MB (35.2%)
  • eve: 13.43 MB (24.9%)
  • ai: 6.43 MB (11.9%)
  • zod: 5.04 MB (9.4%)
  • nitro: 2.41 MB (4.5%)
Publish payload breakdown
Published file size
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [###.....................] 1.51 MB 10.2%
🟡 dist/src/compiled/@vercel/sandbox/index.js       [#.......................] 632.4 kB 4.3%
🟡 dist/src/compiled/_chunks/workflow/undici-C2Z... [#.......................] 502.4 kB 3.4%
🟡 dist/src/compiled/@chat-adapter/slack/index.js   [#.......................] 440.5 kB 3.0%
🟡 dist/src/compiled/@vercel/oidc/index.js          [#.......................] 379.5 kB 2.6%
🔴 Other published files                            [########################] 11.25 MB 76.5%
Installed footprint breakdown
Installed package size
🔴 @rolldown/binding-linux-x64-gnu [########################] 18.96 MB 35.2%
🔴 eve                             [#################.......] 13.43 MB 24.9%
🔴 ai                              [########................] 6.43 MB 11.9%
🔴 zod                             [######..................] 5.04 MB 9.4%
🟠 nitro                           [###.....................] 2.41 MB 4.5%
🟡 @ai-sdk/provider-utils          [#.......................] 852.0 kB 1.6%
🔴 Other installed packages        [#########...............] 6.75 MB 12.5%
Runtime dependencies (1)
Package Range Notes
nitro 3.0.260610-beta
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: 92.27 MB across 7855 installed files
  • Installed packages: 122 total (116 transitive-only)
  • dependencies: 4 direct packages totaling 28.99 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 58.24 MB

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

Heavy installed dependencies

  • @typescript/typescript-linux-x64: 27.95 MB (30.3%)
  • @rolldown/binding-linux-x64-gnu: 18.96 MB (20.5%)
  • eve: 13.43 MB (14.6%)
  • zod: 9.00 MB (9.8%)
  • ai: 6.43 MB (7.0%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 30.3%
🔴 @rolldown/binding-linux-x64-gnu  [################........] 18.96 MB 20.5%
🔴 eve                              [############............] 13.43 MB 14.6%
🔴 zod                              [########................] 9.00 MB 9.8%
🔴 ai                               [######..................] 6.43 MB 7.0%
🟠 @types/node                      [##......................] 2.54 MB 2.8%
🔴 Other installed packages         [############............] 13.97 MB 15.1%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.2 135.8 kB 0.1%
ai ^7.0.34 6.43 MB 7.0%
eve file:eve-0.27.3.tgz 13.43 MB 14.6%
zod 4.4.3 9.00 MB 9.8%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.8%
typescript 7.0.2 2.50 MB 2.7%
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 7.27 MB 62.2%
🟠 functions/__server.func                         [###############.........] 4.41 MB 37.8%

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 __eve_nitro_handler__.mjs       [########################] 2.71 MB 37.3%
🟡 _chunks/world-vercel.mjs        [########................] 903.2 kB 12.4%
🟡 _chunks/sandbox.mjs             [#######.................] 767.6 kB 10.6%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.5 kB 6.0%
🟡 _chunks/token-util-B6qBs3-0.mjs [###.....................] 379.1 kB 5.2%
🟠 Other bundled files             [##################......] 2.08 MB 28.6%

🧾 Vercel Config

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

🟠 functions/__server.func • 9 public routes, 1 internal alias • 4.41 MB
Metric Value
Public routes /
/eve/v1/callback/[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]/stream
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 4.41 MB
Function files 4.41 MB across 30 files
Traced dependencies 0 B
Signal 🟠 Bundled file _chunks/runtime-artifacts.mjs is 1.45 MB (32.9%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 _chunks/runtime-artifacts.mjs   [########################] 1.45 MB 32.9%
🟠 _chunks/world-vercel.mjs        [###############.........] 900.3 kB 20.4%
🟠 _chunks/sandbox.mjs             [#############...........] 767.6 kB 17.4%
🟡 _chunks/token-util-B6qBs3-0.mjs [######..................] 379.1 kB 8.6%
🟡 _chunks/dist-BX517Nmz.mjs       [######..................] 348.7 kB 7.9%
🟡 Other bundled files             [#########...............] 561.0 kB 12.7%

🧾 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.80 s -> 2.69 s (-111.2 ms) vs rui/notification-reactors-research (7feb447).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `rui/notification-reactors-research (7feb447)`
Phase Baseline Current Delta
extension.check 12.8 ms 1.1 ms -11.7 ms
project.resolve 10.2 ms 0.7 ms -9.5 ms
workspace.create 1.1 ms 0.9 ms -0.2 ms
host.prepare 241.3 ms 185.0 ms -56.3 ms
vercel.service-prefix.resolve 2.0 ms 2.6 ms +0.6 ms
nitro.app.create 27.0 ms 25.1 ms -1.9 ms
nitro.app.cache.prepare 0.3 ms 0.3 ms 0.0 ms
nitro.app.prepare 0.9 ms 1.1 ms +0.2 ms
nitro.app.public-assets 0.8 ms 0.7 ms -0.1 ms
nitro.app.prerender 0.6 ms 0.5 ms -0.1 ms
nitro.app.bundle 758.6 ms 737.4 ms -21.2 ms
nitro.app.cache.write 0.4 ms 0.5 ms +0.1 ms
sandbox.prewarm 264.1 ms 271.3 ms +7.2 ms
nitro.flow.create 195.4 ms 180.5 ms -14.9 ms
nitro.flow.cache.prepare 0.2 ms 0.2 ms 0.0 ms
nitro.flow.prepare 0.7 ms 0.7 ms 0.0 ms
nitro.flow.public-assets 0.2 ms 0.2 ms 0.0 ms
nitro.flow.prerender 0.0 ms 0.0 ms 0.0 ms
nitro.flow.bundle 1.09 s 1.09 s +3.0 ms
nitro.flow.cache.write 0.3 ms 0.3 ms 0.0 ms
nitro.flow.close 0.2 ms 0.2 ms 0.0 ms
workflow.emit 181.8 ms 175.7 ms -6.1 ms
agent-summary.emit 0.6 ms 0.6 ms 0.0 ms
nitro.app.close 0.1 ms 0.1 ms 0.0 ms
output.publish 3.9 ms 3.9 ms 0.0 ms
workspace.remove 6.0 ms 5.8 ms -0.2 ms

@ruiconti
ruiconti force-pushed the rui/notification-consumer-prototype branch from 80cc51e to de0ada5 Compare July 24, 2026 20:55
@ruiconti
ruiconti force-pushed the rui/notification-consumer-prototype branch from de0ada5 to a103b00 Compare July 24, 2026 21:06
@ruiconti ruiconti changed the title feat(eve): prototype the per-session notification consumer feat(eve): prototype the per-session event consumer Jul 24, 2026
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-1644 July 24, 2026 21:52 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 July 24, 2026 21:52 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-1644 July 24, 2026 22:49 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 July 24, 2026 22:49 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-1644 July 24, 2026 23:08 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 July 24, 2026 23:08 Inactive
@ruiconti
ruiconti force-pushed the rui/notification-consumer-prototype branch from b141926 to e84ca9b Compare July 24, 2026 23:55
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-1644 July 24, 2026 23:55 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 July 24, 2026 23:55 Inactive
@ruiconti ruiconti changed the title feat(eve): prototype the per-session event consumer feat(eve): ingest session notifications inline in the callback route Jul 24, 2026
@ruiconti ruiconti closed this Jul 25, 2026
@ruiconti
ruiconti force-pushed the rui/notification-consumer-prototype branch from e84ca9b to 39173e4 Compare July 25, 2026 01:18
@ruiconti
ruiconti merged commit 39173e4 into rui/notification-reactors-research Jul 25, 2026
@ruiconti
ruiconti force-pushed the rui/notification-reactors-research branch from 7feb447 to 216bdf8 Compare July 25, 2026 01:18
@ruiconti
ruiconti deleted the rui/notification-consumer-prototype branch July 25, 2026 01:18
@ruiconti

Copy link
Copy Markdown
Contributor Author

Superseded — reparenting the stack (now 1202 → 1196 → 1172) tripped GitHub's stacked-branch auto-merge detection and flipped this to MERGED without anything reaching main. Reopened as a fresh PR based on #1202.

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.

1 participant