Skip to content

feat(eve): harden the instrumentation bus and wire providers to it - #1817

Draft
chadhietala wants to merge 1 commit into
instr/07-content-redactionfrom
instr/08-bus-hardening
Draft

feat(eve): harden the instrumentation bus and wire providers to it#1817
chadhietala wants to merge 1 commit into
instr/07-content-redactionfrom
instr/08-bus-hardening

Conversation

@chadhietala

Copy link
Copy Markdown
Contributor

Part of the instrumentation providers stack. Stacks on #1814.

The agent/instrumentation/ directory shipped in #1810 registers providers and
then never hears from them again. This PR makes the bus underneath it something
a provider can actually be trusted to sit on, and connects the two.

Four things, in the order they build on each other.

Action events name what they carry. A subagent dispatch and an ordinary tool
call arrived on the bus as the same tool.call.* event, with the difference
recoverable only by inspecting the tool name. They are now action.* with an
explicit kind (remote-agent-call, subagent-call, tool-call), and
toolName is name, because the field no longer only ever holds a tool's.

Every event carries an idempotencyKey. eve's durable execution means a
provider can observe the same operation twice — the second time in a different
process, after a resume. The key is derived from identity eve reconstructs on
replay rather than generated, so both observations agree, and it is prefixed by
class so a turn id that happens to equal a session id cannot collide into one
row. It replaces the old id, which was a fresh value per observation and
therefore useful to nobody.

A handler that will not settle no longer holds the bus. Dispatch is
sequential and awaited, so one hanging handler stalled every provider behind it
and the agent turn with them. A handler now has a deadline. It cannot be
cancelled, only left running, and that is what makes the terminal the hazard:
handing a completion to a handler that may never have opened the operation is
worse than handing it nothing. So the rest of that operation is withheld from
that provider alone, scoped by idempotencyKey and released when the terminal
passes. The provider keeps receiving every other operation.

Authored providers reach the bus. This was the real gap. Producing an
instrumentation plugin is exactly what told the dev host to skip installing the
local tracing runtime, and nothing else installed one — so with the flag on and
a provider directory present, there was no bus, no OTel bridge, and no
runInContext. installInstrumentationRuntime is now the install both layouts
share, so the flagged path cannot drift into being a second runtime. A directory
that declared no OpenTelemetry still gets a bus: its providers see every event,
they just have no spans to hang them on. flush and shutdown are driven by
eve, the latter from Nitro's close hook — the last point a buffered exporter
can still reach the network.

Not in this PR

Two items from the plan for this step are blocked, and are worth naming rather
than quietly dropping:

  • ctx.state needs the provider-state carve-out from step-cancellation
    discard, which lives at the bottom of the stack in refactor(eve): eve-owned instrumentation event payloads #1618 and does not exist
    yet. ProviderContext ships empty so adding it later is additive.
  • evaluation on ProviderSetupContext needs run identity eve eval does
    not have — the research doc names this as an open question, and the eval
    runner is a separate process from the agent server it drives. A field that is
    permanently undefined is a public promise with no implementation, so it
    waits.

Scope

Still entirely behind experimental.instrumentationProviders, still off by
default. The single-config layout is untouched.

Validation

pnpm fmt, pnpm lint, pnpm typecheck, pnpm guard:invariants; the full
unit tier (588 files, 6100 tests) and the integration tier over src/internal
and src/harness. New unit coverage for the key derivation, the handler
timeout's three behaviors, and the provider-to-bus wiring. Not run locally:
scenario and e2e.

@vercel

vercel Bot commented Aug 7, 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 8, 2026 4:11pm
eve-docs-4759 Ready Ready Preview, v0 Aug 8, 2026 4:11pm

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs instr/07-content-redaction (bf943ac).

Delta vs instr/07-content-redaction (bf943ac)

Area Metric Baseline Current Delta
Package Packed tarball 7.86 MB 7.86 MB +2.9 kB ⚠️
Package Unpacked publish size 29.36 MB 29.38 MB +12.2 kB ⚠️
Package Installed footprint 72.80 MB 72.81 MB +12.2 kB ⚠️
Package Published files 3090 3092 +2
Package Installed files 6800 6802 +2
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 17.08 MB 17.09 MB +3.7 kB ⚠️
Runtime Public routes 13 13 0
Changed function payloads vs instr/07-content-redaction (bf943ac) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 8.54 MB 8.54 MB +1.9 kB ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 8.54 MB 8.54 MB +1.9 kB ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 111.21 MB 111.22 MB +12.2 kB ⚠️
Installed packages 121 121 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 43.85 MB 43.86 MB +12.2 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-08T16:12:54.283Z
  • Route aliases: 13 public, 1 internal (14 total aliases)
  • Vercel routes in config: 16
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.31.3
  • Package directory: packages/eve
  • Tarball: 7.86 MB (eve-0.31.3.tgz)
  • Unpacked payload: 29.38 MB across 3092 published files
  • Installed footprint: 72.81 MB across 6802 installed files
  • Installed root package: 28.02 MB
  • Installed dependencies: 44.79 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.02 MB (38.5%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (26.6%)
  • ai: 6.67 MB (9.2%)
  • zod: 5.07 MB (7.0%)
  • undici: 3.50 MB (4.8%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [################........] 9.68 MB 33.0%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [#####...................] 2.92 MB 10.0%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [###.....................] 1.51 MB 5.1%
🟡 dist/src/compiled/@vercel/sandbox/index.js       [#.......................] 638.9 kB 2.2%
🟡 dist/src/compiled/_chunks/workflow/undici-CUI... [#.......................] 508.8 kB 1.7%
🔴 Other published files                            [########################] 14.11 MB 48.0%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 28.02 MB 38.5%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.35 MB 26.6%
🔴 ai                              [######..................] 6.67 MB 9.2%
🔴 zod                             [####....................] 5.07 MB 7.0%
🟠 undici                          [###.....................] 3.50 MB 4.8%
🟠 nitro                           [##......................] 2.41 MB 3.3%
🔴 Other installed packages        [#######.................] 7.79 MB 10.7%
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: 111.22 MB across 8678 installed files
  • Installed packages: 121 total (115 transitive-only)
  • dependencies: 4 direct packages totaling 43.86 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.32 MB

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

Heavy installed dependencies

  • eve: 28.02 MB (25.2%)
  • @typescript/typescript-linux-x64: 27.95 MB (25.1%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (17.4%)
  • zod: 9.02 MB (8.1%)
  • ai: 6.67 MB (6.0%)
Installed footprint breakdown
Installed package size
🔴 eve                              [########################] 28.02 MB 25.2%
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 25.1%
🔴 @rolldown/binding-linux-x64-gnu  [#################.......] 19.35 MB 17.4%
🔴 zod                              [########................] 9.02 MB 8.1%
🔴 ai                               [######..................] 6.67 MB 6.0%
🟠 undici                           [###.....................] 3.50 MB 3.2%
🔴 Other installed packages         [##############..........] 16.71 MB 15.0%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.3 141.0 kB 0.1%
ai ^7.0.38 6.67 MB 6.0%
eve file:eve-0.31.3.tgz 28.02 MB 25.2%
zod 4.4.3 9.02 MB 8.1%
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.54 MB 50.0%
🔴 functions/__server.func                         [########################] 8.54 MB 50.0%

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.34 MB 27.4%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.63 MB 19.1%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs             [########................] 777.1 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.38 MB 27.9%

🧾 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 • 12 public routes, 1 internal alias • 8.54 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]/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.54 MB
Function files 8.54 MB across 44 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.34 MB (27.4%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.34 MB 27.4%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.63 MB 19.1%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs             [########................] 777.1 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.38 MB 27.9%

🧾 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: 3.49 s -> 2.90 s (-593.3 ms) vs instr/07-content-redaction (bf943ac).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `instr/07-content-redaction (bf943ac)`
Phase Baseline Current Delta
extension.check 11.1 ms 12.1 ms +1.0 ms
project.resolve 6.4 ms 1.5 ms -4.9 ms
workspace.create 1.2 ms 1.2 ms 0.0 ms
host.prepare 1.36 s 790.7 ms -572.9 ms
vercel.service-prefix.resolve 2.8 ms 2.3 ms -0.5 ms
nitro.create 211.4 ms 209.4 ms -2.0 ms
sandbox.prewarm 524.0 ms 488.1 ms -35.9 ms
nitro.cache.prepare 0.2 ms 0.3 ms +0.1 ms
nitro.prepare 0.8 ms 0.9 ms +0.1 ms
nitro.public-assets 0.7 ms 0.7 ms 0.0 ms
nitro.prerender 0.5 ms 0.5 ms 0.0 ms
nitro.bundle 1.34 s 1.36 s +21.7 ms
nitro.cache.write 0.3 ms 0.4 ms +0.1 ms
vercel.workflow-function.materialize 23.1 ms 23.0 ms -0.1 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.5 ms 3.6 ms +0.1 ms
workspace.remove 2.2 ms 2.1 ms -0.1 ms

@chadhietala
chadhietala force-pushed the instr/08-bus-hardening branch from 47096ab to 1943c71 Compare August 7, 2026 21:03
@chadhietala
chadhietala force-pushed the instr/08-bus-hardening branch from fce7eb7 to a09661b Compare August 8, 2026 13:04
@chadhietala
chadhietala force-pushed the instr/08-bus-hardening branch from a09661b to dd76715 Compare August 8, 2026 13:14
@chadhietala
chadhietala force-pushed the instr/08-bus-hardening branch from dd76715 to ad15e6a Compare August 8, 2026 13:47
@chadhietala
chadhietala force-pushed the instr/08-bus-hardening branch from ad15e6a to 7b1205d Compare August 8, 2026 14:11
Signed-off-by: Chad Hietala <chadhietala@gmail.com>
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