fix(eve): compose the bridge with registered telemetry integrations - #1676
fix(eve): compose the bridge with registered telemetry integrations#1676chadhietala wants to merge 1 commit into
Conversation
A per-call `integrations` list replaces the AI SDK's registered integrations rather than adding to them, so attaching eve's instrumentation bridge silently stopped every integration an authored module had installed with `registerTelemetry`. eve hand-recomposed only its own OpenTelemetry integration, which covered eve but nothing else. Read the registered integrations and compose the bridge ahead of them. That is unchanged for both shapes eve produces today — nothing is registered when there is no authored instrumentation, and eve's own OpenTelemetry integration is the only entry when there is — while anything an author registered now survives. `otel-integration.ts` becomes `ai-sdk-telemetry.ts`: it no longer only wraps the OTel integration. Signed-off-by: Chad Hietala <chadhietala@gmail.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Not needed yet. The bridge only exists when This becomes live once #1661 runs structural agent instrumentation alongside authored instrumentation. Branch |
Bundle + Package Summary:
|
| Area | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| Package | Packed tarball | 7.60 MB | 7.60 MB | +53 B |
| Package | Unpacked publish size | 28.51 MB | 28.52 MB | +369 B |
| Package | Installed footprint | 71.84 MB | 71.84 MB | +369 B |
| Package | Published files | 2978 | 2978 | 0 |
| Package | Installed files | 6677 | 6677 | 0 |
| Runtime | Unique function payloads | 2 | 2 | 0 |
| Runtime | Total function bytes | 16.98 MB | 16.98 MB | +22 B |
| Runtime | Public routes | 13 | 13 | 0 |
Changed function payloads vs instr/02-flat-events (725c9e7) (2)
| Function | Status | Baseline | Current | Delta | Route changes |
|---|---|---|---|---|---|
functions/__server.func |
changed | 8.49 MB | 8.49 MB | +11 B |
none |
functions/.well-known/workflow/v1/flow.func |
changed | 8.49 MB | 8.49 MB | +11 B |
none |
eve init install
| Metric | Baseline | Current | Delta |
|---|---|---|---|
| Installed footprint | 110.25 MB | 110.25 MB | +369 B |
| Installed packages | 121 | 121 | 0 |
| dependencies | 4 | 4 | 0 |
| devDependencies | 2 | 2 | 0 |
| Dependency package bytes | 42.93 MB | 42.93 MB | +369 B |
| 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-05T16:44:36.432Z
- 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.29.5 - Package directory:
packages/eve - Tarball: 7.60 MB (
eve-0.29.5.tgz) - Unpacked payload: 28.52 MB across 2978 published files
- Installed footprint: 71.84 MB across 6677 installed files
- Installed root package: 27.16 MB
- Installed dependencies: 44.68 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: 27.16 MB (37.8%)@rolldown/binding-linux-x64-gnu: 19.35 MB (26.9%)ai: 6.60 MB (9.2%)zod: 5.07 MB (7.1%)undici: 3.50 MB (4.9%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js [#################.......] 9.68 MB 34.0%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.42 MB 8.5%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [###.....................] 1.51 MB 5.3%
🟡 dist/src/compiled/_chunks/node/undici-DWL_MYm... [#.......................] 502.4 kB 1.8%
🟡 dist/src/compiled/_chunks/workflow/undici-DWL... [#.......................] 502.4 kB 1.8%
🔴 Other published files [########################] 13.90 MB 48.7%
Installed footprint breakdown
Installed package size
🔴 eve [########################] 27.16 MB 37.8%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.35 MB 26.9%
🔴 ai [######..................] 6.60 MB 9.2%
🔴 zod [####....................] 5.07 MB 7.1%
🟠 undici [###.....................] 3.50 MB 4.9%
🟠 nitro [##......................] 2.41 MB 3.3%
🔴 Other installed packages [#######.................] 7.76 MB 10.8%
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: 110.25 MB across 8553 installed files
- Installed packages: 121 total (115 transitive-only)
- dependencies: 4 direct packages totaling 42.93 MB
- devDependencies: 2 direct packages totaling 5.04 MB
- Other transitive package files: 62.29 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 (25.3%)eve: 27.16 MB (24.6%)@rolldown/binding-linux-x64-gnu: 19.35 MB (17.5%)zod: 9.02 MB (8.2%)ai: 6.60 MB (6.0%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 25.3%
🔴 eve [#######################.] 27.16 MB 24.6%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.35 MB 17.5%
🔴 zod [########................] 9.02 MB 8.2%
🔴 ai [######..................] 6.60 MB 6.0%
🟠 undici [###.....................] 3.50 MB 3.2%
🔴 Other installed packages [##############..........] 16.67 MB 15.1%
dependencies (4)
| Package | Range | Installed size | Share |
|---|---|---|---|
@vercel/connect |
0.4.3 |
141.0 kB | 0.1% |
ai |
^7.0.38 |
6.60 MB | 6.0% |
eve |
file:eve-0.29.5.tgz |
27.16 MB | 24.6% |
zod |
4.4.3 |
9.02 MB | 8.2% |
devDependencies (2)
| Package | Range | Installed size | Share |
|---|---|---|---|
@types/node |
24.x |
2.54 MB | 2.3% |
typescript |
7.0.2 |
2.50 MB | 2.3% |
Function Drill-Down
Payload Size Graph
Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func [########################] 8.49 MB 50.0%
🔴 functions/__server.func [########################] 8.49 MB 50.0%
Top Function Payloads
🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 8.49 MB
| Metric | Value |
|---|---|
| Public routes | /.well-known/workflow/v1/flow |
| Runtime | nodejs24.x |
| Handler | index.mjs |
| Payload | 8.49 MB |
| Function files | 8.49 MB across 43 files |
| Traced dependencies | 0 B |
| Signal | 🟠 Bundled file index.mjs is 2.34 MB (27.6%) |
🟠 🔎 Dependency Analysis
📦 Bundled files:
Bundled file size
🟠 index.mjs [########################] 2.34 MB 27.6%
🟠 _chunks/runtime-artifacts.mjs [################........] 1.60 MB 18.9%
🟡 _libs/undici.mjs [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs [########................] 769.0 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files [########################] 2.37 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.49 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/eve/v1/session/clear/eve/v1/session/compact/eve/v1/session/reset |
| Internal aliases | /__server |
| Runtime | nodejs24.x |
| Handler | index.mjs |
| Payload | 8.49 MB |
| Function files | 8.49 MB across 43 files |
| Traced dependencies | 0 B |
| Signal | 🟠 Bundled file index.mjs is 2.34 MB (27.6%) |
🟠 🔎 Dependency Analysis
📦 Bundled files:
Bundled file size
🟠 index.mjs [########################] 2.34 MB 27.6%
🟠 _chunks/runtime-artifacts.mjs [################........] 1.60 MB 18.9%
🟡 _libs/undici.mjs [##########..............] 980.5 kB 11.5%
🟡 _chunks/sandbox.mjs [########................] 769.0 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files [########################] 2.36 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: 2.35 s -> 2.13 s (-218.5 ms) vs
instr/02-flat-events (725c9e7). - Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `instr/02-flat-events (725c9e7)`
| Phase | Baseline | Current | Delta |
|---|---|---|---|
extension.check |
7.3 ms | 1.3 ms | -6.0 ms |
project.resolve |
8.1 ms | 0.6 ms | -7.5 ms |
workspace.create |
11.8 ms | 0.7 ms | -11.1 ms |
host.prepare |
377.3 ms | 187.5 ms | -189.8 ms |
vercel.service-prefix.resolve |
1.9 ms | 1.8 ms | -0.1 ms |
nitro.create |
272.0 ms | 260.6 ms | -11.4 ms |
sandbox.prewarm |
235.4 ms | 248.0 ms | +12.6 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.7 ms | 0.0 ms |
nitro.prerender |
0.5 ms | 0.5 ms | 0.0 ms |
nitro.bundle |
1.36 s | 1.37 s | +16.8 ms |
nitro.cache.write |
0.5 ms | 0.3 ms | -0.2 ms |
vercel.workflow-function.materialize |
69.9 ms | 48.4 ms | -21.5 ms |
agent-summary.emit |
0.6 ms | 0.6 ms | 0.0 ms |
nitro.close |
0.2 ms | 0.2 ms | 0.0 ms |
output.publish |
3.1 ms | 3.1 ms | 0.0 ms |
workspace.remove |
1.7 ms | 1.7 ms | 0.0 ms |
Third in the instrumentation-provider stack, on top of #1670.
Why
The AI SDK treats a per-call
integrationslist as replacing the globally registered ones, not adding to them:eve passes
integrationswhenever it attaches its instrumentation bridge, so anything an authoredagent/instrumentation.tsinstalled withregisterTelemetrystopped receiving events for exactly the calls it cared about. eve worked around this by hand-recomposingcreateOtelIntegration(), which covered eve's own OpenTelemetry integration and nothing else.That is survivable today only because the bridge is dev-only. It has to be correct before the bridge runs everywhere, which the provider work depends on.
Approach
Read the registered integrations and compose the bridge ahead of them.
Both shapes eve produces today are unchanged. With no authored instrumentation eve never calls
ensureOtelIntegration, so nothing is registered and the list is just the bridge. With authored instrumentation eve's OpenTelemetry integration is registered, so the list is the bridge and that integration — the same pair as before, now the registered instance rather than a fresh one per call. What changes is that an integration eve did not install also survives.otel-integration.tsbecomesai-sdk-telemetry.ts, since it no longer only wraps the OTel integration, andcreateOtelIntegrationstops being exported for per-call composition.Verification
pnpm fmt,pnpm lint,pnpm guard:invariantspnpm --filter eve typecheckpnpm test:unit— 5,893 passedpnpm test:integration— 575 passedenrichTelemetryto[bridgeIntegration]failscomposes the bridge with every registered integration.