eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.75 kB
JavaScript
import{mkdir,rm,writeFile}from"node:fs/promises";import{join,relative}from"node:path";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{VERCEL_EVE_AGENT_SUMMARY_OUTPUT_PATH,VERCEL_EVE_MULTI_AGENT_SUMMARY_KIND,VERCEL_EVE_MULTI_AGENT_SUMMARY_VERSION}from"#internal/vercel-agent-summary.js";import{readVercelJsonFile}from"#internal/vercel/vercel-services-config.js";import{assembleEveVercelServices}from"#internal/vercel/assemble-eve-services.js";import{buildMultiAgentLandingPage}from"#internal/vercel/build-multi-agent-landing-page.js";import{quoteVercelShellArgument,toVercelRelativePath}from"#internal/vercel/build-command.js";import{resolveEveBinaryPath}from"#shared/resolve-eve-binary.js";function createMultiAgentSummary(e){return{agents:e.members.map(t=>({name:t.name,routePrefix:`/eve/${t.name}`,summaryPath:relative(e.root,join(t.appRoot,VERCEL_EVE_AGENT_SUMMARY_OUTPUT_PATH)).replaceAll(`\\`,`/`)})),generatorVersion:resolveInstalledPackageInfo().version,kind:VERCEL_EVE_MULTI_AGENT_SUMMARY_KIND,schemaVersion:VERCEL_EVE_MULTI_AGENT_SUMMARY_VERSION}}async function buildAgentWorkspace(e,t={}){let n=await readVercelJsonFile(join(e.root,`vercel.json`));if(n.services!==void 0||n.experimentalServices!==void 0||n.experimentalServicesV2!==void 0)throw Error("This project defines its Vercel service graph in vercel.json. Compose generated workspace agents from a programmatic vercel.ts with `withEve` from `eve/vercel`, manually define every service and run `vercel build`, or run `eve build` from an individual agent directory.");let r=e.members.map(n=>({agent:{appRoot:n.appRoot,buildCommand:`node ${quoteVercelShellArgument(toVercelRelativePath(n.appRoot,resolveEveBinaryPath(n.appRoot)))} build${t.skipSandboxPrewarm===!0?` --skip-sandbox-prewarm`:``}`,devCommand:`node ${quoteVercelShellArgument(toVercelRelativePath(n.appRoot,resolveEveBinaryPath(n.appRoot)))} dev --no-ui`,name:n.name,publicRoutePrefix:`/eve/${n.name}`,workspaceMember:!0},target:{hostOutputDirectory:join(e.root,`.vercel`,`output`),projectRoot:e.root}})),i=assembleEveVercelServices({agents:r}),a=join(e.root,`.vercel`,`output`);await rm(a,{force:!0,recursive:!0}),await mkdir(a,{recursive:!0}),await Promise.all(i.rootDirectories.map(e=>mkdir(e,{recursive:!0}))),await mkdir(join(e.root,`.eve`),{recursive:!0}),await writeFile(join(e.root,VERCEL_EVE_AGENT_SUMMARY_OUTPUT_PATH),`${JSON.stringify(createMultiAgentSummary(e),null,2)}\n`);let o=join(a,`static`);return await mkdir(o,{recursive:!0}),await writeFile(join(o,`index.html`),buildMultiAgentLandingPage(e)),await writeFile(join(a,`config.json`),`${JSON.stringify({version:3,routes:[...i.routes,{handle:`filesystem`}],services:i.services},null,2)}\n`),a}export{buildAgentWorkspace};