feat(eve): source-free extension distribution#885
Conversation
`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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Bundle + Package Summary:
|
| 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 |
bdb8bc5 to
a31d193
Compare
…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>
a31d193 to
d2f259a
Compare
…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>
|
Deployment failed with the following error: |
|
Deployment failed with the following error: |
Extensions can now be published without shipping TypeScript source.
eve extension buildcompiles the whole package intodist/— runnable modules, type declarations, skill resources, and a contribution manifest (dist/_ext-manifest.json) — andfiles: ["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, soeve devkeeps hot-reloading an in-progress extension. The artifact path only applies to installed, dist-only packages.What the build guarantees:
extension/lib/…) is emitted once underdist/_chunks/, so module-level state — caches, clients — behaves the same in the published package as in the workspace.dependencies/optionalDependencies/peerDependencies(including#-alias targets). An undeclared-but-hoisted package fails the author's build instead of every consumer's install.dist/_types/using the author's tsconfig (or defaults), so the mount factory andpkg/toolsimports stay fully typed with no.tson npm. Declaration errors fail the build, and a failed build leaves the previousdist/andpackage.jsonuntouched.Namespacing (
<ns>__<name>), consumer overrides anddisableTool(), package-scoped durable state, and config binding are identical between the artifact and source paths —research/source-free-extensions.mdwalks 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 thetoolkit-extensione2e fixture now built and consumed source-free in CI whilegizmo-extensionkeeps exercising the workspace path.🤖 Generated with Claude Code