Skip to content

[2/3] feat(eve): delegate Connect manifest compilation - #3469

Open
benpankow wants to merge 1 commit into
connect/external-resource-snapshotfrom
connect/manifest-compiler-handoff
Open

benpankow wants to merge 1 commit into
connect/external-resource-snapshotfrom
connect/manifest-compiler-handoff

Conversation

@benpankow

@benpankow benpankow commented Sep 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

Compiles complete external requirements from @vercel/connect/eve helpers into the an eve resource snapshot. This is converted at build time to a Connect manifest, using a thin Connect-owned manifest builder.

compiled eve resources
  → eve-external-resources snapshot
  → vercel-connect-manifest from-eve-resources
  → vercel-connect-manifest.json

Built on #3468. Depends on vercel-internal#988 and vercel-internal#989. Replaces #2496.

Validation

Adds unit coverage for connection/channel snapshot projection and incomplete requirement omission. Adds scenario coverage for project-local converter resolution, successful JSON handoff, failure recovery guidance, and no-resource builds.

@benpankow
benpankow added this pull request to stack #3471 September 17, 2026 16:35
@benpankow benpankow changed the title feat(eve): delegate Connect manifest compilation [2/3] feat(eve): delegate Connect manifest compilation Sep 17, 2026
@benpankow
benpankow force-pushed the connect/manifest-compiler-handoff branch from 594ccae to e7f5a34 Compare September 17, 2026 16:38
@github-actions

github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs connect/external-resource-snapshot (adedf39).

Delta vs connect/external-resource-snapshot (adedf39)

Area Metric Baseline Current Delta
Package Packed tarball 8.72 MB 8.73 MB +3.3 kB ⚠️
Package Unpacked publish size 32.63 MB 32.64 MB +10.5 kB ⚠️
Package Installed footprint 78.70 MB 78.71 MB +10.5 kB ⚠️
Package Published files 4009 4015 +6
Package Installed files 7969 7975 +6
Package Installed package instances 33 33 0
Package Distinct installed package names 32 32 0
Package Installed dependency edges 51 51 0
Package Installed optional peer edges 8 8 0
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 20.26 MB 20.26 MB +2.0 kB ⚠️
Runtime Public routes 18 18 0
Changed function payloads vs connect/external-resource-snapshot (adedf39) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 10.13 MB 10.13 MB +992 B ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 10.13 MB 10.13 MB +992 B ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 116.92 MB 116.93 MB +10.5 kB ⚠️
Installed packages 113 113 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 49.32 MB 49.33 MB +10.5 kB ⚠️
devDependency package bytes 5.04 MB 5.04 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-09-17T19:20:43.683Z
  • 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.58.1
  • Package directory: packages/eve
  • Tarball: 8.73 MB (eve-0.58.1.tgz)
  • Unpacked payload: 32.64 MB across 4015 published files
  • Installed footprint: 78.71 MB across 7975 installed files
  • Installed root package: 31.21 MB
  • Installed dependencies: 47.50 MB
  • Installed package instances: 33
  • Distinct installed package names: 32
  • Installed dependency edges: 51
  • Installed optional peer edges: 8
  • Runtime dependencies: 2
  • Peer dependencies: 6 (5 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: 31.21 MB (39.6%)
  • @rolldown/binding-linux-x64-gnu: 19.10 MB (24.3%)
  • ai: 7.56 MB (9.6%)
  • zod: 6.76 MB (8.6%)
  • undici: 3.51 MB (4.5%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [#############...........] 9.76 MB 29.9%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [###.....................] 2.27 MB 7.0%
🟠 dist/src/compiled/@ai-sdk/code-mode/index.js     [#.......................] 1.03 MB 3.1%
🟡 dist/src/compiled/@vercel/blob/index.js          [#.......................] 901.4 kB 2.8%
🟡 dist/src/compiled/_chunks/workflow/signal-exi... [#.......................] 514.6 kB 1.6%
🔴 Other published files                            [########################] 18.17 MB 55.7%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 31.21 MB 39.6%
🔴 @rolldown/binding-linux-x64-gnu [###############.........] 19.10 MB 24.3%
🔴 ai                              [######..................] 7.56 MB 9.6%
🔴 zod                             [#####...................] 6.76 MB 8.6%
🟠 undici                          [###.....................] 3.51 MB 4.5%
🟠 nitro                           [#.......................] 1.89 MB 2.4%
🔴 Other installed packages        [#######.................] 8.67 MB 11.0%
Runtime dependencies (2)
Package Range Notes
nitro 3.0.260903-beta
undici 8.9.0
Peer dependencies (6)
Package Range Notes
@opentelemetry/api ^1.0.0 optional peer
ai catalog:
braintrust ^3.0.0 optional peer
dd-trace ^6.13.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: 116.93 MB across 9869 installed files
  • Installed packages: 113 total (107 transitive-only)
  • dependencies: 4 direct packages totaling 49.33 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.55 MB

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

Heavy installed dependencies

  • eve: 31.21 MB (26.7%)
  • @typescript/typescript-linux-x64: 27.95 MB (23.9%)
  • @rolldown/binding-linux-x64-gnu: 19.10 MB (16.3%)
  • zod: 10.37 MB (8.9%)
  • ai: 7.56 MB (6.5%)
Installed footprint breakdown
Installed package size
🔴 eve                              [########################] 31.21 MB 26.7%
🔴 @typescript/typescript-linux-x64 [#####################...] 27.95 MB 23.9%
🔴 @rolldown/binding-linux-x64-gnu  [###############.........] 19.10 MB 16.3%
🔴 zod                              [########................] 10.37 MB 8.9%
🔴 ai                               [######..................] 7.56 MB 6.5%
🟠 undici                           [###.....................] 3.51 MB 3.0%
🔴 Other installed packages         [#############...........] 17.22 MB 14.7%
dependencies (4)
Package Range Installed size Share
@vercel/connect 2.2.0 188.7 kB 0.2%
ai ^7.0.105 7.56 MB 6.5%
eve file:eve-0.58.1.tgz 31.21 MB 26.7%
zod 4.5.4 10.37 MB 8.9%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.2%
typescript 7.0.2 2.50 MB 2.1%
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 10.13 MB 50.0%
🔴 functions/__server.func                         [########################] 10.13 MB 50.0%

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                        [##########..............] 2.09 MB 20.6%
🟡 _libs/undici.mjs                 [#####...................] 980.8 kB 9.7%
🟡 _chunks/sandbox.mjs              [####....................] 804.5 kB 7.9%
🟡 _chunks/chatgpt-model.mjs        [###.....................] 699.1 kB 6.9%
🟡 _chunks/signal-exit-Dsy-TT0V.mjs [###.....................] 616.2 kB 6.1%
🔴 Other bundled files              [########################] 4.94 MB 48.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 • 10.13 MB
Metric Value
Public routes /
/.well-known/workflow/v1/webhook/[token]
/eve/v1/activity/[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]/reset
/eve/v1/session/[sessionId]/stream
/eve/v1/task-input/[token]
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 10.13 MB
Function files 10.13 MB across 109 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.09 MB (20.6%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                        [##########..............] 2.09 MB 20.6%
🟡 _libs/undici.mjs                 [#####...................] 980.8 kB 9.7%
🟡 _chunks/sandbox.mjs              [####....................] 804.5 kB 7.9%
🟡 _chunks/chatgpt-model.mjs        [###.....................] 699.1 kB 6.9%
🟡 _chunks/signal-exit-Dsy-TT0V.mjs [###.....................] 616.2 kB 6.1%
🔴 Other bundled files              [########################] 4.94 MB 48.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: 5.84 s -> 5.99 s (+150.4 ms) vs connect/external-resource-snapshot (adedf39).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `connect/external-resource-snapshot (adedf39)`
Phase Baseline Current Delta
extension.check 0.7 ms 0.9 ms +0.2 ms
project.resolve 0.3 ms 0.4 ms +0.1 ms
workspace.create 0.5 ms 0.6 ms +0.1 ms
host.prepare 558.7 ms 537.5 ms -21.2 ms
vercel.service-prefix.resolve 1.7 ms 2.7 ms +1.0 ms
nitro.create 525.6 ms 587.9 ms +62.3 ms
sandbox.prewarm 290.3 ms 307.8 ms +17.5 ms
nitro.cache.prepare 0.2 ms 0.3 ms +0.1 ms
nitro.prepare 0.7 ms 0.8 ms +0.1 ms
nitro.public-assets 0.7 ms 0.8 ms +0.1 ms
nitro.prerender 0.5 ms 0.6 ms +0.1 ms
nitro.bundle 4.41 s 4.49 s +83.9 ms
nitro.cache.write 0.5 ms 0.3 ms -0.2 ms
vercel.workflow-function.materialize 44.0 ms 48.9 ms +4.9 ms
agent-summary.emit 0.7 ms 1.4 ms +0.7 ms
connect-manifest.emit 0.5 ms
nitro.close 0.2 ms 0.1 ms -0.1 ms
output.publish 3.6 ms 3.4 ms -0.2 ms
workspace.remove 1.8 ms 2.3 ms +0.5 ms

@vercel

vercel Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
eve-docs Ready Ready Preview, v0 Sep 17, 2026 7:19pm UTC
eve-pkg Ready Ready Preview, v0 Sep 17, 2026 7:19pm UTC

Comment thread packages/eve/src/internal/external-resources.ts Outdated
if (credentials === undefined) continue;
resources.push({
credentials,
interface: { protocol: connection.protocol, url: connection.url },

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Preserve an endpoint for OpenAPI requirements

OpenAPI baseUrl is optional, and normalization stores "" when it is omitted because the runtime later resolves the endpoint from the document's servers entry. This delegated snapshot carries only that empty URL, not the spec needed to perform the same resolution, so a Connect-backed OpenAPI connection using the documented server fallback emits url: "". Resolve the static endpoint at build time, include the data needed to resolve it, or reject an omitted baseUrl for Connect-backed resources and cover that case.

Comment thread packages/eve/src/internal/external-resources.ts Outdated
Comment thread packages/eve/src/internal/external-resources.ts
if (credentials === undefined) continue;
resources.push({
credentials,
interface: { protocol: connection.protocol, url: connection.url },

@vercel vercel Bot Sep 17, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Connect-backed OpenAPI connections that omit baseUrl are projected into the external-resources snapshot with an empty endpoint URL, so the @vercel/connect manifest compiler receives no usable endpoint.

Fix on Vercel

@benpankow
benpankow force-pushed the connect/manifest-compiler-handoff branch from 080a7e1 to 5b0a40e Compare September 17, 2026 18:51
Signed-off-by: benpankow <ben.pankow@vercel.com>
const credentials = channel.vercelConnect?.requirement;
if (
credentials === undefined ||
channel.adapterKind !== "slack" ||

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we now care that it's not slack but something else?

renderers: activityRenderers,
});
const credentials = config.credentials as { readonly vercelConnect?: unknown } | undefined;
const manifest = defineSlackAppManifest({ botName: config.botName });

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe not for this PR, but we need to redo how we approach slash commands. Instead of onSlashCommand we need something like:

slackChannel({
   slackCommands: {
      '/command1': {
         shortDescription: '...',
          ....
         handler: () => ...
      }
   }
})

This way we can reconstruct the correct manifest for them.

Same is for onShortcut and onInteraction.

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