Skip to content

feat(eve): source-free extension distribution#885

Closed
ctgowrie wants to merge 4 commits into
mainfrom
cgowrie/source-free-extensions
Closed

feat(eve): source-free extension distribution#885
ctgowrie wants to merge 4 commits into
mainfrom
cgowrie/source-free-extensions

Conversation

@ctgowrie

@ctgowrie ctgowrie commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Extensions can now be published without shipping TypeScript source. eve extension build compiles the whole package into dist/ — runnable modules, type declarations, skill resources, and a contribution manifest (dist/_ext-manifest.json) — and files: ["dist"] is all you publish. A consuming agent composes the extension from that artifact without recompiling or executing its source, which also makes closed-source extensions possible.

Nothing changes while authoring: when the extension/ source directory exists, the consumer compiles live source as before, so eve dev keeps hot-reloading an in-progress extension. The artifact path only applies to installed, dist-only packages.

What the build guarantees:

  • Contributions compile as one code-split graph. Source shared by several tools (extension/lib/…) is emitted once under dist/_chunks/, so module-level state — caches, clients — behaves the same in the published package as in the workspace.
  • The build typechecks the source against the installed eve and stamps that version into the artifact. A consumer on an older eve fails its build with a clear message instead of crashing mid-session when a tool calls an API its eve doesn't have. Per-capability contract versions cover the other direction (a newer eve that moved a contract tells the consumer to ask for a rebuild). Practical consequence for authors: build releases with the oldest eve you want to support, since the build eve becomes the package's minimum.
  • Only the extension's own source compiles in; every bare package import stays external and must be declared in dependencies/optionalDependencies/peerDependencies (including #-alias targets). An undeclared-but-hoisted package fails the author's build instead of every consumer's install.
  • Declarations are emitted into dist/_types/ using the author's tsconfig (or defaults), so the mount factory and pkg/tools imports stay fully typed with no .ts on npm. Declaration errors fail the build, and a failed build leaves the previous dist/ and package.json untouched.

Namespacing (<ns>__<name>), consumer overrides and disableTool(), package-scoped durable state, and config binding are identical between the artifact and source paths — research/source-free-extensions.md walks every mechanism. Covered by unit and integration suites, artifact-level scenario tests (including pack-and-npm-install and shared-module-state runtime checks), a new dist-only consumer scenario, and the toolkit-extension e2e fixture now built and consumed source-free in CI while gizmo-extension keeps exercising the workspace path.

🤖 Generated with Claude Code

`eve extension build` emits a source-free artifact: every contribution as a pre-scoped .mjs, emitted type declarations, and a dist/_ext-manifest.json describing the contributions plus the eve capability versions it built against. A consuming agent composes an extension that ships one without recompiling or executing its source, validating the stamped capability versions and failing with a clear rebuild message on mismatch; unbuilt/workspace extensions still compile from source. Package deps stay external and no .ts source ships (files: ["dist"]).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Casey Gowrie <ctgowrie@gmail.com>
@vercel

vercel Bot commented Jul 16, 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 16, 2026 11:48pm
eve-docs-1644 Ready Ready Preview, Comment, Open in v0 Jul 16, 2026 11:48pm
eve-docs-4759 Ready Ready Preview, Comment, Open in v0 Jul 16, 2026 11:48pm

@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs main (d375db7).

Delta vs main (d375db7)

Area Metric Baseline Current Delta
Package Packed tarball 3.72 MB 3.73 MB +9.1 kB ⚠️
Package Unpacked publish size 13.50 MB 13.54 MB +34.8 kB ⚠️
Package Installed footprint 52.61 MB 52.64 MB +34.8 kB ⚠️
Package Published files 2638 2644 +6
Package Installed files 5878 5884 +6
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 9.42 MB 9.42 MB +2.7 kB ⚠️
Runtime Public routes 10 10 0
Changed function payloads vs main (d375db7) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 3.50 MB 3.50 MB +1.6 kB ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 5.92 MB 5.92 MB +1.1 kB ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 90.87 MB 90.91 MB +34.8 kB ⚠️
Installed packages 122 122 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 27.71 MB 27.74 MB +34.8 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-16T22:12:57.069Z
  • 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.24.6
  • Package directory: packages/eve
  • Tarball: 3.73 MB (eve-0.24.6.tgz)
  • Unpacked payload: 13.54 MB across 2644 published files
  • Installed footprint: 52.64 MB across 5884 installed files
  • Installed root package: 12.26 MB
  • Installed dependencies: 40.39 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 (36.0%)
  • eve: 12.26 MB (23.3%)
  • ai: 6.39 MB (12.1%)
  • zod: 5.04 MB (9.6%)
  • nitro: 2.41 MB (4.6%)
Publish payload breakdown
Published file size
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [####....................] 1.51 MB 11.1%
🟡 dist/src/compiled/@vercel/sandbox/index.js       [#.......................] 622.2 kB 4.6%
🟡 dist/src/compiled/_chunks/workflow/undici-fb5... [#.......................] 502.4 kB 3.7%
🟡 dist/src/compiled/@chat-adapter/slack/index.js   [#.......................] 433.8 kB 3.2%
🟡 dist/src/compiled/_chunks/workflow/dist-CSfKN... [#.......................] 277.8 kB 2.1%
🔴 Other published files                            [########################] 10.19 MB 75.3%
Installed footprint breakdown
Installed package size
🔴 @rolldown/binding-linux-x64-gnu [########################] 18.96 MB 36.0%
🔴 eve                             [################........] 12.26 MB 23.3%
🔴 ai                              [########................] 6.39 MB 12.1%
🔴 zod                             [######..................] 5.04 MB 9.6%
🟠 nitro                           [###.....................] 2.41 MB 4.6%
🟡 @ai-sdk/provider-utils          [#.......................] 847.4 kB 1.6%
🔴 Other installed packages        [#########...............] 6.74 MB 12.8%
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: 90.91 MB across 7702 installed files
  • Installed packages: 122 total (116 transitive-only)
  • dependencies: 4 direct packages totaling 27.74 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 58.12 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.7%)
  • @rolldown/binding-linux-x64-gnu: 18.96 MB (20.9%)
  • eve: 12.26 MB (13.5%)
  • zod: 9.00 MB (9.9%)
  • ai: 6.39 MB (7.0%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 30.7%
🔴 @rolldown/binding-linux-x64-gnu  [################........] 18.96 MB 20.9%
🔴 eve                              [###########.............] 12.26 MB 13.5%
🔴 zod                              [########................] 9.00 MB 9.9%
🔴 ai                               [#####...................] 6.39 MB 7.0%
🟠 @types/node                      [##......................] 2.54 MB 2.8%
🔴 Other installed packages         [############............] 13.82 MB 15.2%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.2.2 98.6 kB 0.1%
ai ^7.0.26 6.39 MB 7.0%
eve file:eve-0.24.6.tgz 12.26 MB 13.5%
zod 4.4.3 9.00 MB 9.9%
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     [########################] 5.92 MB 62.8%
🟠 functions/__server.func                         [##############..........] 3.50 MB 37.2%

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 __eve_nitro_handler__.mjs       [########################] 2.23 MB 37.6%
🟡 _chunks/world-vercel.mjs        [#########...............] 826.9 kB 14.0%
🟡 _chunks/sandbox.mjs             [########................] 754.9 kB 12.7%
🟡 _libs/@ai-sdk/gateway+[...].mjs [#####...................] 430.4 kB 7.3%
🟡 _chunks/dist-CSfKNxQW.mjs       [####....................] 349.5 kB 5.9%
🟠 Other bundled files             [##############..........] 1.33 MB 22.5%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "environment": {
    "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 • 3.50 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 3.50 MB
Function files 3.50 MB across 28 files
Traced dependencies 0 B
Signal 🟠 Bundled file _chunks/runtime-artifacts.mjs is 949.3 kB (27.1%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 _chunks/runtime-artifacts.mjs [########################] 949.3 kB 27.1%
🟠 _chunks/world-vercel.mjs      [#####################...] 823.9 kB 23.5%
🟠 _chunks/sandbox.mjs           [###################.....] 754.9 kB 21.6%
🟡 _chunks/dist-CSfKNxQW.mjs     [#########...............] 348.5 kB 10.0%
⚪ index.mjs                     [###.....................] 115.0 kB 3.3%
🟡 Other bundled files           [#############...........] 509.9 kB 14.6%

🧾 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.29 s -> 2.26 s (-31.8 ms) vs main (d375db7).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `main (d375db7)`
Phase Baseline Current Delta
extension.check 5.2 ms 8.4 ms +3.2 ms
project.resolve 2.8 ms 1.1 ms -1.7 ms
workspace.create 1.5 ms 9.9 ms +8.4 ms
host.prepare 170.3 ms 160.1 ms -10.2 ms
vercel.service-prefix.resolve 2.5 ms 1.8 ms -0.7 ms
nitro.app.create 26.8 ms 25.3 ms -1.5 ms
nitro.app.cache.prepare 0.3 ms 0.3 ms 0.0 ms
nitro.app.prepare 0.9 ms 1.0 ms +0.1 ms
nitro.app.public-assets 0.7 ms 0.7 ms 0.0 ms
nitro.app.prerender 0.5 ms 0.5 ms 0.0 ms
nitro.app.bundle 556.0 ms 549.3 ms -6.7 ms
nitro.app.cache.write 0.4 ms 0.4 ms 0.0 ms
sandbox.prewarm 248.6 ms 232.6 ms -16.0 ms
nitro.flow.create 189.2 ms 193.9 ms +4.7 ms
nitro.flow.cache.prepare 0.2 ms 0.2 ms 0.0 ms
nitro.flow.prepare 0.9 ms 1.0 ms +0.1 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 844.5 ms 891.0 ms +46.5 ms
nitro.flow.cache.write 0.3 ms 0.3 ms 0.0 ms
nitro.flow.close 0.2 ms 0.1 ms -0.1 ms
workflow.emit 231.5 ms 174.2 ms -57.3 ms
agent-summary.emit 0.5 ms 0.6 ms +0.1 ms
nitro.app.close 0.1 ms 0.0 ms -0.1 ms
output.publish 3.8 ms 3.8 ms 0.0 ms
workspace.remove 5.9 ms 5.4 ms -0.5 ms

@ctgowrie
ctgowrie force-pushed the cgowrie/source-free-extensions branch from bdb8bc5 to a31d193 Compare July 16, 2026 21:48
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-4759 July 16, 2026 21:48 Inactive
@vercel
vercel Bot temporarily deployed to Preview – eve-docs-1644 July 16, 2026 21:48 Inactive
…loor

Compile the extension dist as one code-split graph so source shared by
several contributions is emitted once under dist/_chunks/ — module-level
in-memory state now behaves identically in the published artifact and the
workspace source path. Enforce the artifact's stamped build eve as a
consumer version floor (the build typechecks against exactly that eve),
closing the gap where an extension using newer eve runtime APIs would
crash mid-session on an older consumer. Also: reserve tools/index.*
against the generated barrel, hold #-alias imports to the dependency
declaration boundary, name the building eve in artifact skew errors, and
swap dist before touching package.json exports.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Casey Gowrie <ctgowrie@gmail.com>
…oth extension paths

Both consumer scenarios (source-free artifact and recompile-from-source)
now assert module-backed defineSkill, defineSkill with inline files,
markdown skill packages with references, and defineDynamic tools, skills,
and instructions — including config binding through a dynamically
produced tool and workspace materialization of namespaced skill files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Casey Gowrie <ctgowrie@gmail.com>
@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Deployment failed with the following error:

Creating the Deployment Timed Out.

@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Deployment failed with the following error:

The provided GitHub repository does not contain the requested branch or commit reference. Please ensure the repository is not empty.

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