Repository navigation
fix(eve): fill connection call defaults once, when the call runs - #5511
Conversation
A connection call was checked before approval and again at execution, and the second check validated the first one's default-filled output. A default its own schema rejects, such as Pydantic's null for x: str = None, failed that second check. The pre-approval check now returns the model's input without provided arguments, and only the execution check fills defaults. Fixes #5509 Co-authored-by: ruiconti <1834568+ruiconti@users.noreply.github.com>
Bundle + Package Summary:
|
| Area | Metric | Baseline | Current | Delta |
|---|---|---|---|---|
| Package | Packed tarball | 7.93 MB | 7.93 MB | -130 B ✅ |
| Package | Unpacked publish size | 27.69 MB | 27.69 MB | +103 B |
| Package | Installed footprint | 76.09 MB | 76.09 MB | +103 B |
| Package | Published files | 4385 | 4385 | 0 |
| Package | Installed files | 8382 | 8382 | 0 |
| Package | Installed package instances | 34 | 34 | 0 |
| Package | Distinct installed package names | 32 | 32 | 0 |
| Package | Installed dependency edges | 51 | 51 | 0 |
| Package | Installed optional peer edges | 17 | 17 | 0 |
| Runtime | Unique function payloads | 2 | 2 | 0 |
| Runtime | Total function bytes | 22.19 MB | 22.19 MB | +148 B |
| Runtime | Public routes | 18 | 18 | 0 |
Changed function payloads vs triage/5509-null-default-repro (58ebcac) (2)
| Function | Status | Baseline | Current | Delta | Route changes |
|---|---|---|---|---|---|
functions/__server.func |
changed | 11.09 MB | 11.09 MB | +74 B |
none |
functions/.well-known/workflow/v1/flow.func |
changed | 11.10 MB | 11.10 MB | +74 B |
none |
eve init install
| Metric | Baseline | Current | Delta |
|---|---|---|---|
| Installed footprint | 114.47 MB | 114.47 MB | +103 B |
| Installed packages | 97 | 97 | 0 |
| dependencies | 4 | 4 | 0 |
| devDependencies | 2 | 2 | 0 |
| Dependency package bytes | 46.17 MB | 46.17 MB | +103 B |
| devDependency package bytes | 5.11 MB | 5.11 MB | 0 B ➖ |
Build Metadata
- Preset:
vercel - Nitro:
nitro@3.0.260903-beta - Output directory:
apps/fixtures/weather-agent/.vercel/output - Build metadata timestamp: 2026-10-28T13:10:35.387Z
- Route aliases: 18 public, 1 internal (19 total aliases)
- Vercel routes in config: 21
- Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down
Package Details
- Package:
eve@0.85.0 - Package directory:
packages/eve - Tarball: 7.93 MB (
eve-0.85.0.tgz) - Unpacked payload: 27.69 MB across 4385 published files
- Installed footprint: 76.09 MB across 8382 installed files
- Installed root package: 27.69 MB
- Installed dependencies: 48.40 MB
- Installed package instances: 34
- Distinct installed package names: 32
- Installed dependency edges: 51
- Installed optional peer edges: 17
- Runtime dependencies: 2
- Peer dependencies: 15 (14 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: 27.69 MB (36.4%)@rolldown/binding-linux-x64-gnu: 19.89 MB (26.1%)ai: 8.45 MB (11.1%)zod: 6.15 MB (8.1%)undici: 3.58 MB (4.7%)
Publish payload breakdown
Published file size
🟠 dist/src/compiled/shadcn-registry/index.js [#####...................] 3.85 MB 13.9%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [###.....................] 2.29 MB 8.3%
🟠 dist/src/compiled/run/index.js [#.......................] 1.00 MB 3.6%
🟡 dist/src/compiled/@vercel/blob/index.js [#.......................] 604.9 kB 2.2%
🟡 dist/src/compiled/_chunks/workflow/undici-D-I... [#.......................] 521.9 kB 1.9%
🔴 Other published files [########################] 19.42 MB 70.1%
Installed footprint breakdown
Installed package size
🔴 eve [########################] 27.69 MB 36.4%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.89 MB 26.1%
🔴 ai [#######.................] 8.45 MB 11.1%
🔴 zod [#####...................] 6.15 MB 8.1%
🟠 undici [###.....................] 3.58 MB 4.7%
🟠 nitro [##......................] 1.89 MB 2.5%
🔴 Other installed packages [#######.................] 8.45 MB 11.1%
Runtime dependencies (2)
| Package | Range | Notes |
|---|---|---|
nitro |
3.0.260903-beta |
|
undici |
8.10.2 |
Peer dependencies (15)
| Package | Range | Notes |
|---|---|---|
@linqapp/sdk |
^0.47.1 |
optional peer |
@nuxt/kit |
^4.0.0 |
optional peer |
@nuxt/schema |
^4.0.0 |
optional peer |
@opentelemetry/api |
^1.0.0 |
optional peer |
@vercel/connect |
^2.5.2 |
optional peer |
ai |
catalog: |
|
braintrust |
^3.0.0 |
optional peer |
chat |
^4.42.0 |
optional peer |
dd-trace |
^6.13.0 |
optional peer |
just-bash |
^3.6.0 |
optional peer |
next |
^16.0.0 |
optional peer |
react |
^19.0.0 |
optional peer |
svelte |
^5.0.0 |
optional peer |
vite |
^8.3.1 |
optional peer |
vue |
^3.5.0 |
optional peer |
eve init install drill-down
eve init install details
- Command:
eve init my-agent - Package manager:
npm - Installed footprint: 114.47 MB across 10299 installed files
- Installed packages: 97 total (91 transitive-only)
- dependencies: 4 direct packages totaling 46.17 MB
- devDependencies: 2 direct packages totaling 5.11 MB
- Other transitive package files: 63.20 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 (24.4%)eve: 27.69 MB (24.2%)@rolldown/binding-linux-x64-gnu: 19.89 MB (17.4%)zod: 9.76 MB (8.5%)ai: 8.45 MB (7.4%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 24.4%
🔴 eve [########################] 27.69 MB 24.2%
🔴 @rolldown/binding-linux-x64-gnu [#################.......] 19.89 MB 17.4%
🔴 zod [########................] 9.76 MB 8.5%
🔴 ai [#######.................] 8.45 MB 7.4%
🟠 undici [###.....................] 3.58 MB 3.1%
🔴 Other installed packages [###############.........] 17.17 MB 15.0%
dependencies (4)
| Package | Range | Installed size | Share |
|---|---|---|---|
@vercel/connect |
2.5.2 |
276.3 kB | 0.2% |
ai |
^7.0.137 |
8.45 MB | 7.4% |
eve |
file:eve-0.85.0.tgz |
27.69 MB | 24.2% |
zod |
4.5.4 |
9.76 MB | 8.5% |
devDependencies (2)
| Package | Range | Installed size | Share |
|---|---|---|---|
@types/node |
24.x |
2.61 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 [########################] 11.10 MB 50.0%
🔴 functions/__server.func [########################] 11.09 MB 50.0%
Top Function Payloads
🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 11.10 MB
| Metric | Value |
|---|---|
| Public routes | /.well-known/workflow/v1/flow |
| Runtime | nodejs24.x |
| Handler | index.mjs |
| Payload | 11.10 MB |
| Function files | 11.10 MB across 124 files |
| Traced dependencies | 0 B |
| Signal | 🟠 Bundled file _chunks/vercel.web.mjs is 2.76 MB (24.9%) |
🟠 🔎 Dependency Analysis
📦 Bundled files:
Bundled file size
🟠 _chunks/vercel.web.mjs [#############...........] 2.76 MB 24.9%
🟡 _libs/undici.mjs [#####...................] 994.5 kB 9.0%
🟡 _chunks/sandbox2.mjs [#####...................] 937.1 kB 8.4%
🟡 _chunks/compiled-artifacts-instrumentation.mjs [####....................] 730.7 kB 6.6%
🟡 _chunks/token-util-Bla5Z0G9.mjs [###.....................] 704.5 kB 6.3%
🔴 Other bundled files [########################] 4.97 MB 44.8%
🧾 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 • 17 public routes, 1 internal alias • 11.09 MB
| Metric | Value |
|---|---|
| Public routes | //.well-known/workflow/v1/webhook/[token]/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]/descendants/stream/eve/v1/session/[sessionId]/reset/eve/v1/session/[sessionId]/stream/eve/v1/session/[sessionId]/stubs |
| Internal aliases | /__server |
| Runtime | nodejs24.x |
| Handler | index.mjs |
| Payload | 11.09 MB |
| Function files | 11.09 MB across 124 files |
| Traced dependencies | 0 B |
| Signal | 🟠 Bundled file _chunks/vercel.web.mjs is 2.76 MB (24.9%) |
🟠 🔎 Dependency Analysis
📦 Bundled files:
Bundled file size
🟠 _chunks/vercel.web.mjs [#############...........] 2.76 MB 24.9%
🟡 _libs/undici.mjs [#####...................] 994.5 kB 9.0%
🟡 _chunks/sandbox2.mjs [#####...................] 937.1 kB 8.4%
🟡 _chunks/compiled-artifacts-instrumentation.mjs [####....................] 730.7 kB 6.6%
🟡 _chunks/token-util-Bla5Z0G9.mjs [###.....................] 704.5 kB 6.3%
🔴 Other bundled files [########################] 4.97 MB 44.8%
🧾 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.76 s -> 8.97 s (+5.21 s) vs
triage/5509-null-default-repro (58ebcac). - Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `triage/5509-null-default-repro (58ebcac)`
| Phase | Baseline | Current | Delta |
|---|---|---|---|
extension.check |
20.5 ms | 9.3 ms | -11.2 ms |
project.resolve |
6.1 ms | 0.4 ms | -5.7 ms |
workspace.create |
1.1 ms | 0.6 ms | -0.5 ms |
host.prepare |
572.1 ms | 692.8 ms | +120.7 ms |
vercel.service-prefix.resolve |
1.8 ms | 1.8 ms | 0.0 ms |
nitro.create |
463.3 ms | 549.1 ms | +85.8 ms |
sandbox.prewarm |
457.6 ms | 5.33 s | +4.88 s |
nitro.cache.prepare |
0.3 ms | 0.3 ms | 0.0 ms |
nitro.prepare |
0.8 ms | 0.9 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 |
2.08 s | 2.18 s | +99.4 ms |
nitro.cache.write |
0.4 ms | 0.6 ms | +0.2 ms |
vercel.workflow-function.materialize |
64.6 ms | 63.1 ms | -1.5 ms |
agent-summary.emit |
0.7 ms | 0.7 ms | 0.0 ms |
connect-manifest.emit |
0.3 ms | 0.3 ms | 0.0 ms |
nitro.close |
0.1 ms | 0.1 ms | 0.0 ms |
output.publish |
3.7 ms | 3.6 ms | -0.1 ms |
workspace.remove |
2.8 ms | 2.8 ms | 0.0 ms |
The call input now holds the model's arguments, so the eval reads the schema default from the day the fixture server echoes. Co-authored-by: ruiconti <1834568+ruiconti@users.noreply.github.com>
|
CI on 8974bcd failed in three places:
Correction to the PR body: "Before #4400 it did not include them either" is only half true. In |
d72750d
into
triage/5509-null-default-repro
|
Thanks, agreed. In |
Fixes #5509: connection tool calls no longer reject a schema default that eve filled in itself, such as the
nullPydantic publishes forx: str = None.Why
Since #4400 (
eve@0.76.0), a connection call is checked twice: once by the entry's input schema before approval (checkInput), and again when the call runs (checkCallincallConnectionTool). The first check returned the input with schema defaults filled in, and the harness ran the tool on that value.applyDefaultsfills a default even when its own schema rejects it (on purpose, see #3696), so for{ "type": "string", "default": null }the second check rejected thenullthe first check added. The call failed withquery: Instance type "null" is invalid. Expected "string".and never reached the server. Azure Managed Grafana's MCP server and other Pydantic-based servers publish many of these.Approach
Because the pre-approval check returned a transformed value that the call validates again, returning the model's input unchanged from that check (minus provided arguments, as before) should leave the call's check as the only place defaults are filled. That restores what
eve@0.75.1did, which validated connection input once, when the call ran.checkInputstill rejects a bad call before anyone is asked to approve it, but it now returns the model's input instead of the default-filled one.toolCall.providedArgumentskeys moves intowithoutProvidedArguments, which both checks call, so the approval prompt still never shows a model value for a provided key (fix(eve): drop model values for provided connection arguments before validation #4652).checkCallnow only looks up the tool, validates, and fills defaults.The
fillPropertieschange the issue suggests would also fix this case, but it changesdefineJsonSchemafor every JSON Schema tool and drops a documented behavior. It would also leave the double check in place for any other default that does not pass a second validation.Behavior change: the call input that reaches the approval policy and the session history no longer includes schema defaults. Before #4400 it did not include them either.
Validation
it.fails. It asserts that the server receives{ query: null }and that the pre-approval check returns{}.step-catalog.test.ts: theeve__callvalidation case now expects{ team: "core" }from the pre-approval check, while the call still sends{ limit: 20, team: "core" }to the server. The fix(eve): drop model values for provided connection arguments before validation #4652 provided-argument case is unchanged and passes.kennel-mcp-resultseval: thekennel__list_feedingscheck no longer matchesday: "today"in the recorded call input, which now holds the model's{ petId: 4217 }. The fixture server echoes thedayit receives, and the eval's output check still requirestodaythere, so it still proves the default reaches the server. Against a local mock-model build, thelist_feedingsgate passes. The only local failure wasphoto-image-parts, because this environment has no Docker sandbox provider. That gate passed in CI on the previous head.pnpm --filter eve exec vitest run --config vitest.unit.config.ts src/execution/catalog/: 125 passed.tool-stubs/catalog,harness/tools-schema,connections/events): 56 passed.tsc -p packages/eve/tsconfig.json --noEmit,oxfmt --check, andoxlintpass.