eve 0.84.0 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/src/channel/cross-channel-receive.d.ts +4 -1
- package/dist/src/channel/cross-channel-receive.js +1 -1
- package/dist/src/channel/delivery.js +1 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/channel/types.d.ts +2 -0
- package/dist/src/chunks/{use-eve-agent-BbbguIdB.js → use-eve-agent-DMeP0JOF.js} +26 -10
- package/dist/src/chunks/{use-eve-agent-DWjyzplb.js → use-eve-agent-DP5Rso9C.js} +26 -10
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/client/delivery.d.ts +2 -0
- package/dist/src/client/delivery.js +1 -1
- package/dist/src/client/optimistic-message-submissions.js +1 -1
- package/dist/src/client/session-store.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/client/sessions.d.ts +1 -0
- package/dist/src/client/sessions.js +1 -1
- package/dist/src/client/types.d.ts +2 -0
- package/dist/src/compiled/.vendor-stamp.json +2 -2
- package/dist/src/compiled/@chat-adapter/slack/index.js +13 -13
- package/dist/src/compiled/@vercel/sandbox/api-client/api-client.d.ts +75 -0
- package/dist/src/compiled/@vercel/sandbox/api-client/validators.d.ts +4 -0
- package/dist/src/compiled/@vercel/sandbox/command.d.ts +78 -0
- package/dist/src/compiled/@vercel/sandbox/drive.d.ts +41 -1
- package/dist/src/compiled/@vercel/sandbox/index.js +13 -13
- package/dist/src/compiled/@vercel/sandbox/network-policy.d.ts +35 -4
- package/dist/src/compiled/@vercel/sandbox/sandbox.d.ts +18 -4
- package/dist/src/compiled/@vercel/sandbox/session.d.ts +29 -3
- package/dist/src/compiled/@vercel/sandbox/utils/pipe-stdin.d.ts +19 -0
- package/dist/src/compiled/_chunks/client/{core-CspsxXR-.js → core-BsvaaMUJ.js} +1 -1
- package/dist/src/compiled/_chunks/node/{auth-Dztlx9pE.js → auth-v5pS3mLo.js} +1 -1
- package/dist/src/compiled/_chunks/node/is-stream-DsuQX_bd.js +1 -0
- package/dist/src/compiled/_chunks/node/token-DHGH-jVc.js +1 -0
- package/dist/src/compiled/_chunks/node/token-util-BH2pw9Qm.js +25 -0
- package/dist/src/compiled/_chunks/node/token-util-CcvxNv76.js +1 -0
- package/dist/src/compiled/_chunks/node/version-C2PfNyEv.js +1 -0
- package/dist/src/compiled/zod/index.js +1 -1
- package/dist/src/compiled/zod/v4/core.js +1 -1
- package/dist/src/compiled/zod-validation-error/index.js +1 -1
- package/dist/src/compiler/artifacts.d.ts +1 -0
- package/dist/src/compiler/artifacts.js +1 -1
- package/dist/src/compiler/manifest.d.ts +2 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/model-catalog.d.ts +8 -18
- package/dist/src/compiler/model-catalog.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-manifest-types.d.ts +3 -0
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/context/keys.d.ts +0 -8
- package/dist/src/context/keys.js +1 -1
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +1 -0
- package/dist/src/eve-channel/request.js +1 -1
- package/dist/src/eve-channel/support.js +1 -1
- package/dist/src/execution/agent-sessions/steps.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-cli.d.ts +2 -0
- package/dist/src/execution/sandbox/bindings/docker-cli.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-connection.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/multiplexed-command.d.ts +11 -1
- package/dist/src/execution/sandbox/multiplexed-command.js +1 -1
- package/dist/src/execution/sandbox/session.js +1 -1
- package/dist/src/execution/session-inbox/address.d.ts +1 -0
- package/dist/src/execution/session-inbox/handle.d.ts +7 -0
- package/dist/src/execution/session-inbox/handle.js +1 -0
- package/dist/src/execution/session-inbox/owner.d.ts +4 -4
- package/dist/src/execution/session-inbox/owner.js +1 -1
- package/dist/src/execution/session-inbox/resume.d.ts +1 -0
- package/dist/src/execution/session-inbox/resume.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/harness/model-call/call.d.ts +3 -1
- package/dist/src/harness/model-call/call.js +1 -1
- package/dist/src/harness/model-call/run.js +1 -1
- package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
- package/dist/src/internal/application/compiled-artifacts.d.ts +2 -0
- package/dist/src/internal/application/compiled-artifacts.js +2 -2
- package/dist/src/internal/application/optional-package-install.js +1 -1
- package/dist/src/internal/application/stamped-package-version.js +1 -1
- package/dist/src/internal/model-catalog.d.ts +39 -16
- package/dist/src/internal/model-catalog.js +1 -1
- package/dist/src/internal/nitro/host/dev-build-host.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/protocol/delivery.d.ts +1 -0
- package/dist/src/public/nuxt/module.js +1 -1
- package/dist/src/reactions/kinds/model.js +1 -1
- package/dist/src/reactions/kinds/subagent.js +1 -1
- package/dist/src/runtime/agent/resolve-model.d.ts +3 -4
- package/dist/src/runtime/agent/resolve-model.js +1 -1
- package/dist/src/runtime/loaders/artifact-paths.d.ts +1 -0
- package/dist/src/runtime/loaders/artifact-paths.js +1 -1
- package/dist/src/runtime/loaders/bundled-artifacts.d.ts +2 -0
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -1
- package/dist/src/runtime/loaders/model-metadata.d.ts +4 -0
- package/dist/src/runtime/loaders/model-metadata.js +1 -0
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/sessions/compiled-agent-cache.d.ts +3 -0
- package/dist/src/runtime/sessions/compiled-agent-cache.js +1 -1
- package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +2 -2
- package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
- package/dist/src/runtime/subagents/workflow.js +1 -1
- package/dist/src/sandbox/provider.d.ts +2 -0
- package/dist/src/setup/flows/model-source-change.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +0 -1
- package/dist/src/shared/sandbox-session.d.ts +4 -0
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/provided/ask-question-workflow.js +1 -1
- package/dist/src/tools/provided/sleep-workflow.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/agent-config.md +5 -4
- package/docs/concepts/default-harness.md +6 -0
- package/docs/evals/judge.mdx +13 -0
- package/docs/guides/client/overview.mdx +23 -1
- package/docs/reference/cli.md +1 -1
- package/docs/sandbox/custom-providers.mdx +1 -1
- package/docs/sandbox/index.mdx +1 -1
- package/docs/tools/workflows.mdx +4 -0
- package/package.json +2 -2
- package/dist/src/compiled/_chunks/node/token-Bedbhv5z.js +0 -1
- package/dist/src/compiled/_chunks/node/token-util-DpJNusVS.js +0 -1
- package/dist/src/compiled/_chunks/node/token-util-DwHQ2a3c.js +0 -1
- package/dist/src/compiled/_chunks/node/version-C__MqbLM.js +0 -1
- package/dist/src/runtime/agent/model-catalog.d.ts +0 -10
- package/dist/src/runtime/agent/model-catalog.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{copyFile,mkdir,readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{resolvePackageCompiledFilePath,resolvePackageSourceFilePath}from"#internal/application/package.js";import{buildPackageUserAgent}from"#internal/user-agent.js";import{sandboxPreparedArtifactsManifestSchema}from"#shared/sandbox-prepared-artifacts.js";import{stringifyEsmImportSpecifier}from"#internal/application/import-specifier.js";import{usesParentDevelopmentWorkflowWorld}from"#internal/workflow/development-world-protocol.js";import{prepareAuthoredRuntimeModules}from"#internal/authored-runtime-modules.js";import{readMaterializedAuthoredModuleIndex}from"#internal/materialized-authored-modules.js";import"#internal/instrumentation-layout.js";import{resolveWorkflowWorldImport}from"#internal/workflow/world-target.js";import{BUILD_DEPLOYMENT_ID_PLACEHOLDER}from"#internal/nitro/host/build-deployment-id.js";async function writeCompiledArtifactsFiles(e){let t=join(e.outDir,`compiled-artifacts-bootstrap.mjs`),n=join(e.outDir,`compiled-artifacts-module-map.mjs`),r=join(e.outDir,`compiled-artifacts-instrumentation.mjs`),i=join(e.outDir,`compiled-artifacts-workflow-world.mjs`),a=sandboxPreparedArtifactsManifestSchema.parse(JSON.parse(await readFile(e.compileResult.paths.sandboxPreparedArtifactsPath,`utf8`))),o=await prepareAuthoredRuntimeModules({appRoot:e.compileResult.project.appRoot,manifest:e.compileResult.manifest,moduleMapPath:e.compileResult.paths.moduleMapPath});await mkdir(e.outDir,{recursive:!0}),await writeFile(n,
|
|
2
|
-
`)}function createCompiledArtifactsBootstrapSource(e){let t=e.compileResult.manifest.config.name;return[`// Generated by eve. Do not edit by hand.`,`import moduleMap from ${stringifyEsmImportSpecifier(e.moduleMapImportPath)};`,`import { installBundledCompiledArtifacts } from ${stringifyEsmImportSpecifier(e.installModulePath)};`,`import { installEveWorkflowQueueNamespace } from ${stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/queue-namespace.ts`))};`,``,`installEveWorkflowQueueNamespace(${JSON.stringify(t)});`,``,`const metadata = ${JSON.stringify(e.metadata,null,2)};`,``,`const manifest = ${JSON.stringify(e.compileResult.manifest,null,2)};`,``,`const sandboxPreparedArtifacts = ${JSON.stringify(e.sandboxPreparedArtifacts,null,2)};`,``,`export { moduleMap };`,``,`export function installCompiledArtifactsBootstrap() {`,` installBundledCompiledArtifacts({`,` manifest,`,` metadata,`,` moduleMap,`,` sandboxPreparedArtifacts,`,` });`,`}`,``,`installCompiledArtifactsBootstrap();`,``,`// Default export satisfies the Nitro plugin contract so this file`,`// can be used directly as a Nitro plugin without a separate wrapper.`,`export default function installCompiledArtifactsPlugin() {`,` // Already installed on import above.`,`}`,``].join(`
|
|
1
|
+
import{copyFile,mkdir,readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{resolvePackageCompiledFilePath,resolvePackageSourceFilePath}from"#internal/application/package.js";import{buildPackageUserAgent}from"#internal/user-agent.js";import{sandboxPreparedArtifactsManifestSchema}from"#shared/sandbox-prepared-artifacts.js";import{modelMetadataSchema}from"#internal/model-catalog.js";import{stringifyEsmImportSpecifier}from"#internal/application/import-specifier.js";import{usesParentDevelopmentWorkflowWorld}from"#internal/workflow/development-world-protocol.js";import{prepareAuthoredRuntimeModules}from"#internal/authored-runtime-modules.js";import{readMaterializedAuthoredModuleIndex}from"#internal/materialized-authored-modules.js";import"#internal/instrumentation-layout.js";import{resolveWorkflowWorldImport}from"#internal/workflow/world-target.js";import{BUILD_DEPLOYMENT_ID_PLACEHOLDER}from"#internal/nitro/host/build-deployment-id.js";async function writeCompiledArtifactsFiles(e){let t=join(e.outDir,`compiled-artifacts-bootstrap.mjs`),n=join(e.outDir,`compiled-artifacts-module-map.mjs`),r=join(e.outDir,`compiled-artifacts-instrumentation.mjs`),i=join(e.outDir,`compiled-artifacts-workflow-world.mjs`),a=sandboxPreparedArtifactsManifestSchema.parse(JSON.parse(await readFile(e.compileResult.paths.sandboxPreparedArtifactsPath,`utf8`))),o=modelMetadataSchema.parse(JSON.parse(await readFile(e.compileResult.paths.modelMetadataPath,`utf8`))),s=await prepareAuthoredRuntimeModules({appRoot:e.compileResult.project.appRoot,manifest:e.compileResult.manifest,moduleMapPath:e.compileResult.paths.moduleMapPath});await mkdir(e.outDir,{recursive:!0}),await writeFile(n,s.moduleMapCode),await writeFile(t,createCompiledArtifactsBootstrapSource({compileResult:e.compileResult,installModulePath:resolvePackageSourceFilePath(`src/runtime/loaders/bundled-artifacts.ts`),metadata:e.compileResult.metadata,modelMetadata:o,moduleMapImportPath:n,sandboxPreparedArtifacts:a})),await writeFile(i,createWorkflowWorldPluginSource({compiledArtifactsBootstrapPath:t,configuredWorld:e.compileResult.manifest.config.experimental?.workflow?.world,defaultWorld:e.defaultWorkflowWorld}));let c={authoredWorkflowModules:s.authoredWorkflowModules,bootstrapPath:t,workflowWorldPluginPath:i},l=await writePreparedInstrumentation({instrumentation:s.instrumentation,outDir:e.outDir});return await writeFile(r,createInstrumentationPluginSource({agentName:e.compileResult.manifest.config.name,layout:l})),c.instrumentationPluginPath=r,c.instrumentationLayout=generatedInstrumentationLayout(l),c.instrumentationSourcePaths=instrumentationSourcePathsOf(l),c}async function writePreparedInstrumentation(e){let writeOne=async(t,n)=>{let r=join(e.outDir,`compiled-artifacts-instrumentation-${t}.mjs`);return await writeFile(r,n),r},t={};for(let[n,r]of Object.entries(e.instrumentation.moduleCodeBySlot))t[n]=await writeOne(n,r);return{kind:`directory`,modulePathsBySlot:t}}function instrumentationSourcePathsOf(e){return Object.values(e.modulePathsBySlot)}async function writeDevelopmentCompiledArtifactsFiles(e){let t=join(e.outDir,`compiled-artifacts-bootstrap.mjs`),n=join(e.outDir,`compiled-artifacts-instrumentation.mjs`),r=join(e.outDir,`compiled-artifacts-workflow-world.mjs`),i=await readMaterializedAuthoredModuleIndex(e.runtimeAppRoot);if(i===void 0)throw Error(`Development generation at "${e.runtimeAppRoot}" is not materialized.`);await mkdir(e.outDir,{recursive:!0}),await writeFile(t,createDevelopmentCompiledArtifactsBootstrapSource(e.compileResult.manifest.config.name)),await writeFile(r,createDevelopmentWorkflowWorldPluginSource({compiledArtifactsBootstrapPath:t,configuredWorld:e.compileResult.manifest.config.experimental?.workflow?.world}));let a={authoredWorkflowModules:e.authoredWorkflowModules,bootstrapPath:t,workflowWorldPluginPath:r};if(i.instrumentation!==void 0){let t=await copyMaterializedInstrumentation({instrumentation:i.instrumentation,outDir:e.outDir,runtimeAppRoot:e.runtimeAppRoot});await writeFile(n,createInstrumentationPluginSource({agentName:e.compileResult.manifest.config.name,layout:t})),a.instrumentationPluginPath=n,a.instrumentationLayout=generatedInstrumentationLayout(t),a.instrumentationSourcePaths=instrumentationSourcePathsOf(t)}return a}function generatedInstrumentationLayout(e){return{kind:`directory`,slots:Object.keys(e.modulePathsBySlot)}}async function copyMaterializedInstrumentation(e){let t=join(e.runtimeAppRoot,`.eve`,`compile`),copyOne=async(n,r)=>{let i=join(e.outDir,`compiled-artifacts-instrumentation-${n}.mjs`);return await copyFile(join(t,r),i),i},n={};for(let[t,r]of Object.entries(e.instrumentation.modulePathsBySlot))n[t]=await copyOne(t,r);return{kind:`directory`,modulePathsBySlot:n}}function createDevelopmentCompiledArtifactsBootstrapSource(e){return[`// Generated by eve. Do not edit by hand.`,`import { installEveWorkflowQueueNamespace } from ${stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/queue-namespace.ts`))};`,``,`installEveWorkflowQueueNamespace(${JSON.stringify(e)});`,``,`export default function installDevelopmentCompiledArtifactsPlugin() {}`,``].join(`
|
|
2
|
+
`)}function createCompiledArtifactsBootstrapSource(e){let t=e.compileResult.manifest.config.name;return[`// Generated by eve. Do not edit by hand.`,`import moduleMap from ${stringifyEsmImportSpecifier(e.moduleMapImportPath)};`,`import { installBundledCompiledArtifacts } from ${stringifyEsmImportSpecifier(e.installModulePath)};`,`import { installEveWorkflowQueueNamespace } from ${stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/queue-namespace.ts`))};`,``,`installEveWorkflowQueueNamespace(${JSON.stringify(t)});`,``,`const metadata = ${JSON.stringify(e.metadata,null,2)};`,``,`const manifest = ${JSON.stringify(e.compileResult.manifest,null,2)};`,``,`const sandboxPreparedArtifacts = ${JSON.stringify(e.sandboxPreparedArtifacts,null,2)};`,``,`const modelMetadata = ${JSON.stringify(e.modelMetadata)};`,``,`export { moduleMap };`,``,`export function installCompiledArtifactsBootstrap() {`,` installBundledCompiledArtifacts({`,` manifest,`,` metadata,`,` modelMetadata,`,` moduleMap,`,` sandboxPreparedArtifacts,`,` });`,`}`,``,`installCompiledArtifactsBootstrap();`,``,`// Default export satisfies the Nitro plugin contract so this file`,`// can be used directly as a Nitro plugin without a separate wrapper.`,`export default function installCompiledArtifactsPlugin() {`,` // Already installed on import above.`,`}`,``].join(`
|
|
3
3
|
`)}function resolveInstallWorldImportSpecifier(){return resolvePackageSourceFilePath(`src/execution/install-workflow-world.ts`)}function resolveWorkflowWorldWiring(e){if(e===`@workflow/world-local`){let t=stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/local-world-data-directory.ts`)),n=stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/local-world-delivery-timeouts.ts`)),r=stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/local-world-delivery-auth.ts`));return{moduleImportSpecifier:resolvePackageCompiledFilePath(`src/compiled/${e}/index.js`),extraImportLines:`
|
|
4
4
|
import { applyLocalWorkflowWorldDeliveryTimeoutDefaults } from ${n};
|
|
5
5
|
import { authenticateLocalWorkflowDeliveries } from ${r};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{mkdir,rm,stat,writeFile}from"node:fs/promises";import{EVE_DEV_ENV_FLAG,isEveDevEnvironment}from"#internal/application/dev-environment.js";import{existsSync,realpathSync}from"node:fs";import{dirname,join,resolve}from"node:path";import{spawn}from"node:child_process";import{ensurePnpmOptionalDependencyDefaults}from"#setup/primitives/pm/pnpm-build-policy.js";import{importInstalledEnginePackage,importInstalledEnginePackage as importInstalledEnginePackage$1,resolveInstalledEnginePackageEntrypointHref}from"#internal/application/optional-package-import.js";import{Worker}from"node:worker_threads";function detectProjectPackageManager(e){return resolveProjectInstallation(e).packageManager}function resolveProjectInstallation(e){let t=resolve(e);try{t=realpathSync.native(t)}catch{}let n=t;for(;;){if(existsSync(join(t,`pnpm-lock.yaml`))||existsSync(join(t,`pnpm-workspace.yaml`)))return{root:t,packageManager:`pnpm`};if(existsSync(join(t,`yarn.lock`)))return{root:t,packageManager:`yarn`};if(existsSync(join(t,`bun.lock`))||existsSync(join(t,`bun.lockb`)))return{root:t,packageManager:`bun`};if(existsSync(join(t,`package-lock.json`)))return{root:t,packageManager:`npm`};let e=dirname(t);if(e===t)return{root:n,packageManager:`npm`};t=e}}const INSTALL_ARGUMENTS={bun:[`add`,`--dev`],npm:[`install`,`--save-dev`],pnpm:[`add`,`-D`],yarn:[`add`,`-D`]},OPTIONAL_PACKAGE_LOCK_TIMEOUT_MS=6e5,pendingOptionalPackageInstalls=new Map;async function installPackageIntoProject(e){let t=detectProjectPackageManager(e.appRoot);t===`pnpm`&&e.ignoredOptionalDependencies?.length&&await ensurePnpmOptionalDependencyDefaults(e.appRoot,e.ignoredOptionalDependencies);let n=[...INSTALL_ARGUMENTS[t],e.packageName];console.info(`[eve:dev] installing optional dependency "${e.packageName}" via \`${t} ${n.join(` `)}\`...`);let r=spawn(t,n,{cwd:e.appRoot,shell:shouldSpawnPackageManagerWithShell(),stdio:[`ignore`,`pipe`,`pipe`]}),i=[];r.stdout?.on(`data`,e=>i.push(e)),r.stderr?.on(`data`,e=>i.push(e));let a=await new Promise((e,t)=>{r.on(`error`,t),r.on(`close`,t=>e(t??1))});if(a!==0){let n=Buffer.concat(i).toString(`utf8`).trim();throw Error(`Failed to install "${e.packageName}" with ${t} (exit ${a}).`+(n.length>0?`\n${n.slice(-2e3)}`:``))}console.info(`[eve:dev] installed "${e.packageName}".`)}async function loadOptionalEnginePackage(e){try{return await e.importModule()}catch(t){if(!e.autoInstall||!isEveDevEnvironment())throw Error(e.missingMessage,{cause:t});let n=e.importInstalledModule??(async()=>await importInstalledEnginePackage$1({appRoot:e.appRoot,packageName:e.packageName})),r=e.importInstalledModule===void 0?async()=>await isInstalledEnginePackageLoadable(e):async()=>{try{return await n(),!0}catch{return!1}};try{await withOptionalPackageInstallLock(e,async()=>{await r()||await installPackageIntoProject({appRoot:e.appRoot,packageName:e.installPackageName??e.packageName,ignoredOptionalDependencies:e.ignoredOptionalDependencies})})}catch(t){throw Error(`${e.missingMessage} Automatic installation failed: ${toMessage(t)}`,{cause:t})}try{return await n()}catch(t){throw Error(`${e.missingMessage} Automatic installation completed, but "${e.packageName}" still could not be loaded from "${e.appRoot}". This usually means the package manager installed into a different workspace, node_modules is unavailable, or the Node/package-manager environment changed while eve dev was running. Last load error: ${toMessage(t)}`,{cause:t})}}}async function isInstalledEnginePackageLoadable(e){try{return await importEntrypointInWorker(await resolveInstalledEnginePackageEntrypointHref(e)),!0}catch{return!1}}async function importEntrypointInWorker(e){let t=new Worker(`
|
|
1
|
+
import{mkdir,rm,stat,writeFile}from"node:fs/promises";import{EVE_DEV_ENV_FLAG,isEveDevEnvironment}from"#internal/application/dev-environment.js";import{existsSync,realpathSync}from"node:fs";import{dirname,join,resolve}from"node:path";import{spawn}from"node:child_process";import{ensurePnpmOptionalDependencyDefaults}from"#setup/primitives/pm/pnpm-build-policy.js";import{importInstalledEnginePackage,importInstalledEnginePackage as importInstalledEnginePackage$1,resolveInstalledEnginePackageEntrypointHref}from"#internal/application/optional-package-import.js";import{Worker}from"node:worker_threads";function detectProjectPackageManager(e){return resolveProjectInstallation(e).packageManager}function resolveProjectInstallation(e){let t=resolve(e);try{t=realpathSync.native(t)}catch{}let n=t;for(;;){if(existsSync(join(t,`pnpm-lock.yaml`))||existsSync(join(t,`pnpm-workspace.yaml`)))return{root:t,packageManager:`pnpm`};if(existsSync(join(t,`yarn.lock`)))return{root:t,packageManager:`yarn`};if(existsSync(join(t,`bun.lock`))||existsSync(join(t,`bun.lockb`)))return{root:t,packageManager:`bun`};if(existsSync(join(t,`package-lock.json`)))return{root:t,packageManager:`npm`};let e=dirname(t);if(e===t)return{root:n,packageManager:`npm`};t=e}}const INSTALL_ARGUMENTS={bun:[`add`,`--dev`],npm:[`install`,`--save-dev`],pnpm:[`add`,`-D`],yarn:[`add`,`-D`]},OPTIONAL_PACKAGE_LOCK_TIMEOUT_MS=6e5,pendingOptionalPackageInstalls=new Map;async function installPackageIntoProject(e){let t=detectProjectPackageManager(e.appRoot);t===`pnpm`&&e.ignoredOptionalDependencies?.length&&await ensurePnpmOptionalDependencyDefaults(e.appRoot,e.ignoredOptionalDependencies);let n=[...INSTALL_ARGUMENTS[t],e.packageName];console.info(`[eve:dev] installing optional dependency "${e.packageName}" via \`${t} ${n.join(` `)}\`...`);let r=spawn(t,n,{cwd:e.appRoot,shell:shouldSpawnPackageManagerWithShell(),stdio:[`ignore`,`pipe`,`pipe`],windowsHide:!0}),i=[];r.stdout?.on(`data`,e=>i.push(e)),r.stderr?.on(`data`,e=>i.push(e));let a=await new Promise((e,t)=>{r.on(`error`,t),r.on(`close`,t=>e(t??1))});if(a!==0){let n=Buffer.concat(i).toString(`utf8`).trim();throw Error(`Failed to install "${e.packageName}" with ${t} (exit ${a}).`+(n.length>0?`\n${n.slice(-2e3)}`:``))}console.info(`[eve:dev] installed "${e.packageName}".`)}async function loadOptionalEnginePackage(e){try{return await e.importModule()}catch(t){if(!e.autoInstall||!isEveDevEnvironment())throw Error(e.missingMessage,{cause:t});let n=e.importInstalledModule??(async()=>await importInstalledEnginePackage$1({appRoot:e.appRoot,packageName:e.packageName})),r=e.importInstalledModule===void 0?async()=>await isInstalledEnginePackageLoadable(e):async()=>{try{return await n(),!0}catch{return!1}};try{await withOptionalPackageInstallLock(e,async()=>{await r()||await installPackageIntoProject({appRoot:e.appRoot,packageName:e.installPackageName??e.packageName,ignoredOptionalDependencies:e.ignoredOptionalDependencies})})}catch(t){throw Error(`${e.missingMessage} Automatic installation failed: ${toMessage(t)}`,{cause:t})}try{return await n()}catch(t){throw Error(`${e.missingMessage} Automatic installation completed, but "${e.packageName}" still could not be loaded from "${e.appRoot}". This usually means the package manager installed into a different workspace, node_modules is unavailable, or the Node/package-manager environment changed while eve dev was running. Last load error: ${toMessage(t)}`,{cause:t})}}}async function isInstalledEnginePackageLoadable(e){try{return await importEntrypointInWorker(await resolveInstalledEnginePackageEntrypointHref(e)),!0}catch{return!1}}async function importEntrypointInWorker(e){let t=new Worker(`
|
|
2
2
|
const { parentPort, workerData } = require("node:worker_threads");
|
|
3
3
|
|
|
4
4
|
(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const STAMPED_PACKAGE_VERSION=`0.84.
|
|
1
|
+
const STAMPED_PACKAGE_VERSION=`0.84.1`;function readStampedPackageVersion(){return STAMPED_PACKAGE_VERSION.startsWith(`__`)?void 0:STAMPED_PACKAGE_VERSION}export{readStampedPackageVersion};
|
|
@@ -3,7 +3,6 @@ export declare const catalogModelProviderSchema: z.ZodObject<{
|
|
|
3
3
|
provider: z.ZodString;
|
|
4
4
|
providerModelId: z.ZodString;
|
|
5
5
|
contextWindowTokens: z.ZodOptional<z.ZodNumber>;
|
|
6
|
-
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
7
6
|
}, z.core.$loose>;
|
|
8
7
|
export declare const catalogModelSchema: z.ZodObject<{
|
|
9
8
|
slug: z.ZodString;
|
|
@@ -11,7 +10,6 @@ export declare const catalogModelSchema: z.ZodObject<{
|
|
|
11
10
|
provider: z.ZodString;
|
|
12
11
|
providerModelId: z.ZodString;
|
|
13
12
|
contextWindowTokens: z.ZodOptional<z.ZodNumber>;
|
|
14
|
-
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
15
13
|
}, z.core.$loose>>;
|
|
16
14
|
}, z.core.$loose>;
|
|
17
15
|
export declare const modelCatalogResponseSchema: z.ZodObject<{
|
|
@@ -21,27 +19,52 @@ export declare const modelCatalogResponseSchema: z.ZodObject<{
|
|
|
21
19
|
provider: z.ZodString;
|
|
22
20
|
providerModelId: z.ZodString;
|
|
23
21
|
contextWindowTokens: z.ZodOptional<z.ZodNumber>;
|
|
24
|
-
maxOutputTokens: z.ZodOptional<z.ZodNumber>;
|
|
25
22
|
}, z.core.$loose>>;
|
|
26
23
|
}, z.core.$loose>>;
|
|
27
24
|
providerAliases: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
28
25
|
}, z.core.$loose>;
|
|
29
26
|
export type CatalogModelProvider = z.infer<typeof catalogModelProviderSchema>;
|
|
30
27
|
export type CatalogModel = z.infer<typeof catalogModelSchema>;
|
|
31
|
-
|
|
28
|
+
/** The parts of the AI Gateway model catalog that eve's lookups read. */
|
|
29
|
+
export interface ModelCatalog {
|
|
30
|
+
readonly models: readonly CatalogModel[];
|
|
31
|
+
readonly providerAliases: Readonly<Record<string, string>>;
|
|
32
|
+
}
|
|
33
|
+
/** A catalog match: the canonical Gateway slug and the context window eve compacts against. */
|
|
34
|
+
export interface ModelCatalogEntry {
|
|
32
35
|
readonly contextWindowTokens: number;
|
|
33
|
-
readonly
|
|
36
|
+
readonly slug: string;
|
|
34
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* The model metadata one build bakes into its compiled artifacts. Runtime model selections
|
|
40
|
+
* resolve context windows from this snapshot and never call AI Gateway themselves.
|
|
41
|
+
*/
|
|
42
|
+
export declare const modelMetadataSchema: z.ZodObject<{
|
|
43
|
+
fetchedAt: z.ZodNullable<z.ZodString>;
|
|
44
|
+
kind: z.ZodLiteral<"eve-model-metadata">;
|
|
45
|
+
models: z.ZodArray<z.ZodObject<{
|
|
46
|
+
slug: z.ZodString;
|
|
47
|
+
providers: z.ZodArray<z.ZodObject<{
|
|
48
|
+
contextWindowTokens: z.ZodNumber;
|
|
49
|
+
provider: z.ZodString;
|
|
50
|
+
providerModelId: z.ZodString;
|
|
51
|
+
}, z.core.$strict>>;
|
|
52
|
+
}, z.core.$strict>>;
|
|
53
|
+
providerAliases: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
54
|
+
version: z.ZodLiteral<1>;
|
|
55
|
+
}, z.core.$strict>;
|
|
56
|
+
export type ModelMetadata = z.infer<typeof modelMetadataSchema>;
|
|
57
|
+
/**
|
|
58
|
+
* Projects a catalog onto the snapshot a build ships: only providers with a usable context
|
|
59
|
+
* window, and only the fields eve's lookups read.
|
|
60
|
+
*/
|
|
61
|
+
export declare function createModelMetadata(input: {
|
|
62
|
+
readonly catalog: ModelCatalog;
|
|
63
|
+
readonly fetchedAt: string;
|
|
64
|
+
} | null): ModelMetadata;
|
|
35
65
|
export declare function normalizeCatalogModelId(modelId: string): string;
|
|
36
66
|
export declare function findCatalogModelBySlug(models: readonly CatalogModel[], slug: string): CatalogModel | undefined;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
readonly providerModelId: string;
|
|
42
|
-
}): {
|
|
43
|
-
readonly model: CatalogModel;
|
|
44
|
-
readonly provider: CatalogModelProvider;
|
|
45
|
-
} | null;
|
|
46
|
-
export declare function modelCatalogLimitsFromProvider(provider: CatalogModelProvider): ModelCatalogLimits | null;
|
|
47
|
-
export {};
|
|
67
|
+
/** Looks up an AI Gateway model id, such as `anthropic/claude-sonnet-5`. */
|
|
68
|
+
export declare function lookupCatalogModelBySlug(catalog: ModelCatalog, slug: string): ModelCatalogEntry | null;
|
|
69
|
+
/** Looks up an AI SDK provider model, such as `anthropic.messages` and `claude-sonnet-5`. */
|
|
70
|
+
export declare function lookupCatalogModelByProviderModelId(catalog: ModelCatalog, provider: string, providerModelId: string): ModelCatalogEntry | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"#compiled/zod/index.js";const catalogModelProviderSchema=z.object({provider:z.string().min(1),providerModelId:z.string().min(1),contextWindowTokens:z.number().int().nonnegative().optional(),
|
|
1
|
+
import{z}from"#compiled/zod/index.js";const MODEL_METADATA_KIND=`eve-model-metadata`,catalogModelProviderSchema=z.object({provider:z.string().min(1),providerModelId:z.string().min(1),contextWindowTokens:z.number().int().nonnegative().optional()}).passthrough(),catalogModelSchema=z.object({slug:z.string().min(1),providers:z.array(catalogModelProviderSchema).min(1)}).passthrough(),modelCatalogResponseSchema=z.object({models:z.array(catalogModelSchema),providerAliases:z.record(z.string(),z.string())}).passthrough(),modelMetadataSchema=z.object({fetchedAt:z.string().nullable(),kind:z.literal(MODEL_METADATA_KIND),models:z.array(z.object({slug:z.string().min(1),providers:z.array(z.object({contextWindowTokens:z.number().int().positive(),provider:z.string().min(1),providerModelId:z.string().min(1)}).strict()).min(1)}).strict()),providerAliases:z.record(z.string(),z.string()),version:z.literal(1)}).strict();function createModelMetadata(e){let t=[];for(let n of e?.catalog.models??[]){let e=n.providers.flatMap(({contextWindowTokens:e,provider:t,providerModelId:n})=>e===void 0||e<=0?[]:[{contextWindowTokens:e,provider:t,providerModelId:n}]);e.length>0&&t.push({slug:n.slug,providers:e})}return{fetchedAt:e?.fetchedAt??null,kind:MODEL_METADATA_KIND,models:t,providerAliases:{...e?.catalog.providerAliases},version:1}}function normalizeCatalogModelId(e){return e.endsWith(`-thinking`)?e.slice(0,-9):e}function findCatalogModelBySlug(e,t){let n=e.find(e=>e.slug===t);if(n!==void 0)return n;let r=normalizeCatalogModelId(t);return r===t?void 0:e.find(e=>e.slug===r)}function lookupCatalogModelBySlug(e,t){let n=findCatalogModelBySlug(e.models,t);if(n===void 0)return null;for(let e of n.providers){let t=contextWindowOf(e);if(t!==null)return{contextWindowTokens:t,slug:n.slug}}return null}function lookupCatalogModelByProviderModelId(e,t,n){let r=t.split(`.`)[0],i=e.providerAliases[r]??r,a=normalizeCatalogModelId(n);for(let t of e.models)for(let e of t.providers){let n=contextWindowOf(e);if(n!==null&&e.provider===i&&normalizeCatalogModelId(e.providerModelId)===a)return{contextWindowTokens:n,slug:t.slug}}return null}function contextWindowOf(e){return e.contextWindowTokens===void 0||e.contextWindowTokens<=0?null:e.contextWindowTokens}export{catalogModelProviderSchema,catalogModelSchema,createModelMetadata,findCatalogModelBySlug,lookupCatalogModelByProviderModelId,lookupCatalogModelBySlug,modelCatalogResponseSchema,modelMetadataSchema,normalizeCatalogModelId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fork}from"node:child_process";import{fileURLToPath}from"node:url";import{toError}from"#shared/errors.js";import{LINUX_DOCKER_AVAILABILITY_ENV}from"#execution/sandbox/bindings/docker-cli.js";import{createDevelopmentHostWorkspace,removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";const DEVELOPMENT_BUILD_MESSAGE_KIND=`eve:development-build`;let prewarmedProcess,nextRequestId=0;function prewarmDevelopmentBuildProcess(){isSourceCheckout()||(prewarmedProcess??=new DevelopmentBuildProcess)}function createDevelopmentBuilds(){if(isSourceCheckout())return{begin:createInProcessSession,close(){}};let e=prewarmedProcess;prewarmedProcess=void 0;let t=new Set,n=!1;return{begin(){if(n)throw Error(`The dev server is closed, so it cannot start another build.`);let r=e?.alive===!0?e:new DevelopmentBuildProcess;e!==r&&e?.close(),e=void 0,t.add(r);let i=!1;return{async prepare(e){let t=await createDevelopmentHostWorkspace(e.appRoot);try{return await r.request(`prepare`,{...e,workspace:t})}catch(e){throw await removeDevelopmentHostWorkspace(t).catch(()=>void 0),e}},buildHost:async e=>await r.request(`buildHost`,e),close(){i||(i=!0,t.delete(r),r.close(),n||(e??=new DevelopmentBuildProcess))}}},close(){n=!0,e?.close(),e=void 0;for(let e of t)e.close();t.clear()}}}function isSourceCheckout(){return import.meta.url.endsWith(`.ts`)}function createInProcessSession(){let e=import(`#internal/nitro/host/dev-build-operations.js`);return{prepare:async t=>await(await e).prepareDevelopmentBuild(t),buildHost:async t=>await(await e).buildDevelopmentHost(t),close(){}}}var DevelopmentBuildProcess=class{#e;#t;#n=new Map;constructor(){this.#e=fork(fileURLToPath(new URL(`./dev-build-process.js`,import.meta.url)),[],{serialization:`advanced`,stdio:[`ignore`,`inherit`,`inherit`,`ipc`]}),this.#e.on(`message`,e=>{if(e?.kind!==`eve:development-build`||e.id===void 0)return;let t=this.#n.get(e.id);if(t===void 0)return;this.#n.delete(e.id),this.#i(),publishDockerAvailability(e.dockerAvailability);let n=e;n.ok?t.resolve(n.value):t.reject(deserializeError(n.error))}),this.#e.once(`error`,e=>this.#r(e)),this.#e.once(`exit`,(e,t)=>this.#r(createExitError(e,t))),this.#i()}get alive(){return this.#t===void 0&&this.#e.connected}request(e,t){if(this.#t!==void 0)return Promise.reject(this.#t);let n=++nextRequestId,r={environment:{...process.env},id:n,input:t,kind:DEVELOPMENT_BUILD_MESSAGE_KIND,operation:e};return new Promise((e,t)=>{this.#n.set(n,{reject:t,resolve:e}),this.#e.ref(),this.#e.channel?.ref?.(),this.#e.send(r,e=>{e!==null&&this.#r(e)})})}close(){this.#e.connected&&this.#e.disconnect(),this.#e.exitCode===null&&this.#e.signalCode===null&&this.#e.kill()}#r(e){this.#t??=e;for(let e of this.#n.values())e.reject(this.#t);this.#n.clear()}#i(){this.#n.size>0||(this.#e.unref(),this.#e.channel?.unref?.())}};function publishDockerAvailability(e){e!==void 0&&process.env[LINUX_DOCKER_AVAILABILITY_ENV]===void 0&&(process.env[LINUX_DOCKER_AVAILABILITY_ENV]=e?`1`:`0`)}function createExitError(e,t){return Error(e===0?`The agent build stopped before it finished: its process ran out of work to do. This usually means an authored module awaits a promise that never settles at the top level, or calls process.exit().`:t===`SIGABRT`||e===134?`The agent build process aborted, most likely because it ran out of memory. Reduce what authored modules import when they load, or raise the heap limit by starting eve dev with NODE_OPTIONS=--max-old-space-size=<megabytes>.`:t===`SIGKILL`?`The agent build process was killed before it finished. If the system ran low on memory, reduce what authored modules import when they load.`:`The agent build process exited (${t??`code ${String(e)}`}) before finishing.`)}function serializeError(e,t=0){let n=toError(e),r=n.cause,i={message:n.message,name:n.name};return n.stack!==void 0&&(i.stack=n.stack),r!==void 0&&t<8&&(i.cause=serializeError(r,t+1)),i}function deserializeError(e){let t=toError(e);return e.cause!==void 0&&(t.cause=deserializeError(e.cause)),t}export{DEVELOPMENT_BUILD_MESSAGE_KIND,createDevelopmentBuilds,prewarmDevelopmentBuildProcess,serializeError};
|
|
1
|
+
import{fork}from"node:child_process";import{fileURLToPath}from"node:url";import{toError}from"#shared/errors.js";import{LINUX_DOCKER_AVAILABILITY_ENV}from"#execution/sandbox/bindings/docker-cli.js";import{createDevelopmentHostWorkspace,removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";const DEVELOPMENT_BUILD_MESSAGE_KIND=`eve:development-build`;let prewarmedProcess,nextRequestId=0;function prewarmDevelopmentBuildProcess(){isSourceCheckout()||(prewarmedProcess??=new DevelopmentBuildProcess)}function createDevelopmentBuilds(){if(isSourceCheckout())return{begin:createInProcessSession,close(){}};let e=prewarmedProcess;prewarmedProcess=void 0;let t=new Set,n=!1;return{begin(){if(n)throw Error(`The dev server is closed, so it cannot start another build.`);let r=e?.alive===!0?e:new DevelopmentBuildProcess;e!==r&&e?.close(),e=void 0,t.add(r);let i=!1;return{async prepare(e){let t=await createDevelopmentHostWorkspace(e.appRoot);try{return await r.request(`prepare`,{...e,workspace:t})}catch(e){throw await removeDevelopmentHostWorkspace(t).catch(()=>void 0),e}},buildHost:async e=>await r.request(`buildHost`,e),close(){i||(i=!0,t.delete(r),r.close(),n||(e??=new DevelopmentBuildProcess))}}},close(){n=!0,e?.close(),e=void 0;for(let e of t)e.close();t.clear()}}}function isSourceCheckout(){return import.meta.url.endsWith(`.ts`)}function createInProcessSession(){let e=import(`#internal/nitro/host/dev-build-operations.js`);return{prepare:async t=>await(await e).prepareDevelopmentBuild(t),buildHost:async t=>await(await e).buildDevelopmentHost(t),close(){}}}var DevelopmentBuildProcess=class{#e;#t;#n=new Map;constructor(){this.#e=fork(fileURLToPath(new URL(`./dev-build-process.js`,import.meta.url)),[],{serialization:`advanced`,stdio:[`ignore`,`inherit`,`inherit`,`ipc`],windowsHide:!0}),this.#e.on(`message`,e=>{if(e?.kind!==`eve:development-build`||e.id===void 0)return;let t=this.#n.get(e.id);if(t===void 0)return;this.#n.delete(e.id),this.#i(),publishDockerAvailability(e.dockerAvailability);let n=e;n.ok?t.resolve(n.value):t.reject(deserializeError(n.error))}),this.#e.once(`error`,e=>this.#r(e)),this.#e.once(`exit`,(e,t)=>this.#r(createExitError(e,t))),this.#i()}get alive(){return this.#t===void 0&&this.#e.connected}request(e,t){if(this.#t!==void 0)return Promise.reject(this.#t);let n=++nextRequestId,r={environment:{...process.env},id:n,input:t,kind:DEVELOPMENT_BUILD_MESSAGE_KIND,operation:e};return new Promise((e,t)=>{this.#n.set(n,{reject:t,resolve:e}),this.#e.ref(),this.#e.channel?.ref?.(),this.#e.send(r,e=>{e!==null&&this.#r(e)})})}close(){this.#e.connected&&this.#e.disconnect(),this.#e.exitCode===null&&this.#e.signalCode===null&&this.#e.kill()}#r(e){this.#t??=e;for(let e of this.#n.values())e.reject(this.#t);this.#n.clear()}#i(){this.#n.size>0||(this.#e.unref(),this.#e.channel?.unref?.())}};function publishDockerAvailability(e){e!==void 0&&process.env[LINUX_DOCKER_AVAILABILITY_ENV]===void 0&&(process.env[LINUX_DOCKER_AVAILABILITY_ENV]=e?`1`:`0`)}function createExitError(e,t){return Error(e===0?`The agent build stopped before it finished: its process ran out of work to do. This usually means an authored module awaits a promise that never settles at the top level, or calls process.exit().`:t===`SIGABRT`||e===134?`The agent build process aborted, most likely because it ran out of memory. Reduce what authored modules import when they load, or raise the heap limit by starting eve dev with NODE_OPTIONS=--max-old-space-size=<megabytes>.`:t===`SIGKILL`?`The agent build process was killed before it finished. If the system ran low on memory, reduce what authored modules import when they load.`:`The agent build process exited (${t??`code ${String(e)}`}) before finishing.`)}function serializeError(e,t=0){let n=toError(e),r=n.cause,i={message:n.message,name:n.name};return n.stack!==void 0&&(i.stack=n.stack),r!==void 0&&t<8&&(i.cause=serializeError(r,t+1)),i}function deserializeError(e){let t=toError(e);return e.cause!==void 0&&(t.cause=deserializeError(e.cause)),t}export{DEVELOPMENT_BUILD_MESSAGE_KIND,createDevelopmentBuilds,prewarmDevelopmentBuildProcess,serializeError};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{withVercelOidcProjectResolver}from"#channel/auth/vercel-oidc-project.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{sessionCommandErrorResponse}from"#eve-channel/support.js";import{getWorld}from"#internal/workflow/runtime.js";import{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,attachSkillFileSource}from"#internal/nitro/routes/channel-route-context.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{withLocalDevRequestScope}from"#runtime/local-dev-capability.js";import{createAgentDescriptionRouteArgs}from"#channel/agent-description.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{createRouteInvokeTool}from"#internal/nitro/routes/route-invoke-tool.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,n){return await traceChannelRequest({request:e.req,routeKey:t},async r=>{let i=r?.reference??trace.getSpan(context.active())?.spanContext(),a=await resolveNitroChannelRuntimeBundle(n),o=a.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});r?.channel({channelName:o.name});let s=getChannelInstrumentationKind(o.definition)??o.adapter?.kind;s!==void 0&&r?.channel({channelKind:s});let c=await buildRouteArgs(e,a,o.name,s??`channel`,n,i),l;try{l=await withDevelopmentVercelOidcContext(n,e.req,async()=>{if(o.handler)return await o.handler(e.req,c.args);let t={waitUntil:c.args.waitUntil,params:c.args.params,requestIp:c.args.requestIp};return await o.fetch(e.req,t)})}catch(n){let r=sessionCommandErrorResponse(n);if(r!==void 0)return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),r;let i=logError(log,`channel handler threw`,n,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),l})}async function dispatchChannelWebSocketRequest(e,t,n){let r=await resolveNitroChannelRuntimeBundle(n),i=r.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(i===void 0||i.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let a=i.websocket,o=getChannelInstrumentationKind(i.definition)??i.adapter?.kind??`channel`,s=await buildRouteArgs(e,r,i.name,o,n,void 0);try{let r=await withDevelopmentVercelOidcContext(n,e.req,async()=>await a(e.req,s.args));return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),r}catch(n){let r=logError(log,`channel websocket handler threw`,n,{routeKey:t,channel:i.name});return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:r,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withLocalDevRequestScope(t,async()=>await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n)):await n()}async function buildRouteArgs(e,t,n,r,i,a){let o=readVercelRequestId(e.req.headers),s=extractRequestIp(e,i),c=[],l=e.context.params??{},u={};for(let[e,t]of Object.entries(l))u[e]=decodeURIComponent(t);let waitUntil=e=>{c.push(e)},d=t.channels.find(e=>e.name===n),f=d?.adapter??{kind:`channel`},p={acceptedDeploymentId:await resolveAcceptedDeploymentId(i),channelKind:r,channelName:n,requestId:o,requestTraceContext:a===void 0?void 0:{spanId:a.spanId,traceFlags:a.traceFlags,traceId:a.traceId}},m=createChannelOperations({adapter:f,channelName:n,metadata:p,runtime:t.runtime,turnPolicy:d?.turnPolicy}),h=createAttachSessionFn(t.runtime,{...p,turnPolicy:d?.turnPolicy}),g=createCrossChannelToFn(t.runtime,toCrossChannelTargets(t.channels)),_=createAgentDescriptionRouteArgs(()=>resolveNitroCompiledArtifactsSource(i)),v=attachRouteSessionCreator(attachHomeRouteMetadata(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:h,...m,..._.args,invokeTool:createRouteInvokeTool({agentName:t.agentName,config:i,origin:{adapter:f,agentName:t.agentName,channelName:n},requestUrl:e.req.url}),params:u,requestIp:s,to:g,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(i)}),n),{agentName:t.agentName}),async e=>{let{deliveryId:r,...i}=e,a=createChannelDeliveryMetadata(p),s=r===void 0?a:{...a,deliveryId:r};return{...await t.runtime.createSession({...i,adapter:f,channelName:n,continuationToken:e.continuationToken===void 0?void 0:`${n}:${e.continuationToken}`,delivery:s,requestId:o}),deliveryId:s.deliveryId}});return attachSkillFileSource(v,_.skillFiles),t.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(v,t.resolveRemoteAgentStreamHeaders),{args:v,backgroundTasks:c}}async function resolveAcceptedDeploymentId(e){let t=process.env.VERCEL_DEPLOYMENT_ID?.trim();if(t!==void 0&&t.length>0)return validateDeploymentId(t);if(e.kind!==`development`||process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]!==void 0)return validateDeploymentId(await(await getWorld()).getDeploymentId())}function validateDeploymentId(e){if(e.length===0||e===`latest`)throw Error(`Channel ingress could not resolve an exact deployment id.`);return e}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,n,r){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:n,channel:r})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
|
|
1
|
+
import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{withVercelOidcProjectResolver}from"#channel/auth/vercel-oidc-project.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{sessionCommandErrorResponse}from"#eve-channel/support.js";import{getWorld}from"#internal/workflow/runtime.js";import{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,attachSkillFileSource}from"#internal/nitro/routes/channel-route-context.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{withLocalDevRequestScope}from"#runtime/local-dev-capability.js";import{createAgentDescriptionRouteArgs}from"#channel/agent-description.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{createRouteInvokeTool}from"#internal/nitro/routes/route-invoke-tool.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,n){return await traceChannelRequest({request:e.req,routeKey:t},async r=>{let i=r?.reference??trace.getSpan(context.active())?.spanContext(),a=await resolveNitroChannelRuntimeBundle(n),o=a.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});r?.channel({channelName:o.name});let s=getChannelInstrumentationKind(o.definition)??o.adapter?.kind;s!==void 0&&r?.channel({channelKind:s});let c=await buildRouteArgs(e,a,o.name,s??`channel`,n,i),l;try{l=await withDevelopmentVercelOidcContext(n,e.req,async()=>{if(o.handler)return await o.handler(e.req,c.args);let t={waitUntil:c.args.waitUntil,params:c.args.params,requestIp:c.args.requestIp};return await o.fetch(e.req,t)})}catch(n){let r=sessionCommandErrorResponse(n);if(r!==void 0)return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),r;let i=logError(log,`channel handler threw`,n,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),l})}async function dispatchChannelWebSocketRequest(e,t,n){let r=await resolveNitroChannelRuntimeBundle(n),i=r.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(i===void 0||i.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let a=i.websocket,o=getChannelInstrumentationKind(i.definition)??i.adapter?.kind??`channel`,s=await buildRouteArgs(e,r,i.name,o,n,void 0);try{let r=await withDevelopmentVercelOidcContext(n,e.req,async()=>await a(e.req,s.args));return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),r}catch(n){let r=logError(log,`channel websocket handler threw`,n,{routeKey:t,channel:i.name});return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:r,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withLocalDevRequestScope(t,async()=>await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n)):await n()}async function buildRouteArgs(e,t,n,r,i,a){let o=readVercelRequestId(e.req.headers),s=extractRequestIp(e,i),c=[],l=e.context.params??{},u={};for(let[e,t]of Object.entries(l))u[e]=decodeURIComponent(t);let waitUntil=e=>{c.push(e)},d=t.channels.find(e=>e.name===n),f=d?.adapter??{kind:`channel`},p={acceptedDeploymentId:await resolveAcceptedDeploymentId(i),channelKind:r,channelName:n,requestId:o,requestTraceContext:a===void 0?void 0:{spanId:a.spanId,traceFlags:a.traceFlags,traceId:a.traceId}},m=createChannelOperations({adapter:f,channelName:n,metadata:p,runtime:t.runtime,turnPolicy:d?.turnPolicy}),h=createAttachSessionFn(t.runtime,{...p,turnPolicy:d?.turnPolicy}),g=createCrossChannelToFn(t.runtime,toCrossChannelTargets(t.channels),p),_=createAgentDescriptionRouteArgs(()=>resolveNitroCompiledArtifactsSource(i)),v=attachRouteSessionCreator(attachHomeRouteMetadata(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:h,...m,..._.args,invokeTool:createRouteInvokeTool({agentName:t.agentName,config:i,origin:{adapter:f,agentName:t.agentName,channelName:n},requestUrl:e.req.url}),params:u,requestIp:s,to:g,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(i)}),n),{agentName:t.agentName}),async e=>{let{deliveryId:r,...i}=e,a=createChannelDeliveryMetadata(p),s=r===void 0?a:{...a,deliveryId:r};return{...await t.runtime.createSession({...i,adapter:f,channelName:n,continuationToken:e.continuationToken===void 0?void 0:`${n}:${e.continuationToken}`,delivery:s,requestId:o}),deliveryId:s.deliveryId}});return attachSkillFileSource(v,_.skillFiles),t.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(v,t.resolveRemoteAgentStreamHeaders),{args:v,backgroundTasks:c}}async function resolveAcceptedDeploymentId(e){let t=process.env.VERCEL_DEPLOYMENT_ID?.trim();if(t!==void 0&&t.length>0)return validateDeploymentId(t);if(e.kind!==`development`||process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]!==void 0)return validateDeploymentId(await(await getWorld()).getDeploymentId())}function validateDeploymentId(e){if(e.length===0||e===`latest`)throw Error(`Channel ingress could not resolve an exact deployment id.`);return e}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,n,r){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:n,channel:r})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{joinRoutePrefix,normalizeOrigin,resolveProductionTarget}from"./routing.js";import{EVE_ROUTE_PREFIX}from"#protocol/routes.js";import{isAbsolute,resolve}from"node:path";import{resolveDevServerTimeout,resolveSharedEveDevServer}from"#shared/framework-eve-server.js";import{addImports,defineNuxtModule,extendRouteRules}from"@nuxt/kit";import{ensureEveVercelServicesConfig,mergeEveVercelConfig}from"#shared/vercel-services.js";const EVE_NUXT_HOST={label:`Nuxt`,slug:`nuxt`};function resolveApplicationRoot(e,t){return t===void 0||t.length===0?e:isAbsolute(t)?t:resolve(e,t)}async function resolveEveProxyTarget(e){if(!e.dev)return resolveProductionTarget();let t=process.env.EVE_BASE_URL?.trim();if(t&&t.length>0)return joinRoutePrefix(normalizeOrigin(t),EVE_ROUTE_PREFIX);let n=await resolveSharedEveDevServer({appRoot:e.appRoot,host:EVE_NUXT_HOST,timeoutMs:e.devServerTimeoutMs});return n.process!==void 0&&e.onDevServerSpawned?.(n.process),joinRoutePrefix(n.origin,EVE_ROUTE_PREFIX)}const eveNuxtModule=defineNuxtModule({meta:{name:`eve`,configKey:`eve`,compatibility:{nuxt:`>=4.0.0`}},defaults:{},async setup(e,t){let n=t.options.rootDir,r=resolveApplicationRoot(n,e.eveRoot),i=resolveDevServerTimeout(e.devServerTimeoutMs,EVE_NUXT_HOST);if(addImports({name:`useEveAgent`,from:`eve/vue`}),!t.options.dev&&process.env.VERCEL){let i=await ensureEveVercelServicesConfig({appRoot:r,eveBuildCommand:e.eveBuildCommand,frameworkName:`Nuxt`,hostRoot:n});if(i.mode===`generated`){let e=t.options.nitro;e.vercel={...e.vercel,config:mergeEveVercelConfig(e.vercel?.config,i)}}}else t.hook(`modules:done`,async()=>{let e=await resolveEveProxyTarget({appRoot:r,dev:t.options.dev,devServerTimeoutMs:i,onDevServerSpawned:e=>{t.hook(`close`,()=>{e.killed||e.kill()})}});extendRouteRules(`${EVE_ROUTE_PREFIX}/**`,{proxy:`${e}/**`})})}});export{eveNuxtModule as default};
|
|
1
|
+
import{joinRoutePrefix,normalizeOrigin,resolveProductionTarget}from"./routing.js";import{EVE_ROUTE_PREFIX}from"#protocol/routes.js";import{isAbsolute,resolve}from"node:path";import{resolveDevServerTimeout,resolveSharedEveDevServer}from"#shared/framework-eve-server.js";import{addImports,defineNuxtModule,extendRouteRules}from"@nuxt/kit";import{ensureEveVercelServicesConfig,mergeEveVercelConfig}from"#shared/vercel-services.js";const EVE_NUXT_HOST={label:`Nuxt`,slug:`nuxt`};function resolveApplicationRoot(e,t){return t===void 0||t.length===0?e:isAbsolute(t)?t:resolve(e,t)}async function resolveEveProxyTarget(e){if(!e.dev)return resolveProductionTarget();let t=process.env.EVE_BASE_URL?.trim();if(t&&t.length>0)return joinRoutePrefix(normalizeOrigin(t),EVE_ROUTE_PREFIX);let n=await resolveSharedEveDevServer({appRoot:e.appRoot,host:EVE_NUXT_HOST,timeoutMs:e.devServerTimeoutMs});return n.process!==void 0&&e.onDevServerSpawned?.(n.process),joinRoutePrefix(n.origin,EVE_ROUTE_PREFIX)}const eveNuxtModule=defineNuxtModule({meta:{name:`eve`,configKey:`eve`,compatibility:{nuxt:`>=4.0.0`}},defaults:{},async setup(e,t){let n=t.options.rootDir,r=resolveApplicationRoot(n,e.eveRoot),i=resolveDevServerTimeout(e.devServerTimeoutMs,EVE_NUXT_HOST);if(addImports({name:`useEveAgent`,from:`eve/vue`}),t.options.vite.optimizeDeps={...t.options.vite.optimizeDeps,include:[...t.options.vite.optimizeDeps?.include??[],`eve/vue`]},!t.options.dev&&process.env.VERCEL){let i=await ensureEveVercelServicesConfig({appRoot:r,eveBuildCommand:e.eveBuildCommand,frameworkName:`Nuxt`,hostRoot:n});if(i.mode===`generated`){let e=t.options.nitro;e.vercel={...e.vercel,config:mergeEveVercelConfig(e.vercel?.config,i)}}}else t.hook(`modules:done`,async()=>{let e=await resolveEveProxyTarget({appRoot:r,dev:t.options.dev,devServerTimeoutMs:i,onDevServerSpawned:e=>{t.hook(`close`,()=>{e.killed||e.kill()})}});extendRouteRules(`${EVE_ROUTE_PREFIX}/**`,{proxy:`${e}/**`})})}});export{eveNuxtModule as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{authoredEvaluate}from"../reaction.js";import{readLive,readReactionsState,slotValueOf}from"../state.js";import{StaticModelReferenceKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{parseJsonValue}from"#shared/json.js";import{isMockModel}from"#internal/mock-model-identity.js";import{isFrameworkDefinition}from"#dynamic/definition.js";import{loadDynamicRuntimeModelDefinition,resolveRuntimeModelSelection,shouldMockAuthoredRuntimeModels}from"#runtime/agent/resolve-model.js";const MODEL_REACTION_ID=`model:agent`,DYNAMIC_MODEL_SELECTION_ERROR_CODE=`EVE_DYNAMIC_MODEL_SELECTION_FAILED`;var DynamicModelSelectionError=class extends Error{code=DYNAMIC_MODEL_SELECTION_ERROR_CODE;name=`DynamicModelSelectionError`;constructor(e){super(toErrorMessage(e),{cause:e})}};function isDynamicModelSelectionError(e){return e instanceof DynamicModelSelectionError||typeof e==`object`&&!!e&&e.code===DYNAMIC_MODEL_SELECTION_ERROR_CODE}async function loadModelReaction(e){let t=e.turnAgent.dynamicModel;if(t===void 0)return;let n=await loadDynamicRuntimeModelDefinition({dynamicModel:t,scope:{moduleMap:e.moduleMap,nodeId:e.nodeId}}),r=`${t.logicalPath}#model`;return{contribute:async
|
|
1
|
+
import{authoredEvaluate}from"../reaction.js";import{readLive,readReactionsState,slotValueOf}from"../state.js";import{StaticModelReferenceKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{parseJsonValue}from"#shared/json.js";import{isMockModel}from"#internal/mock-model-identity.js";import{isFrameworkDefinition}from"#dynamic/definition.js";import{loadDynamicRuntimeModelDefinition,resolveRuntimeModelSelection,shouldMockAuthoredRuntimeModels}from"#runtime/agent/resolve-model.js";const MODEL_REACTION_ID=`model:agent`,DYNAMIC_MODEL_SELECTION_ERROR_CODE=`EVE_DYNAMIC_MODEL_SELECTION_FAILED`;var DynamicModelSelectionError=class extends Error{code=DYNAMIC_MODEL_SELECTION_ERROR_CODE;name=`DynamicModelSelectionError`;constructor(e){super(toErrorMessage(e),{cause:e})}};function isDynamicModelSelectionError(e){return e instanceof DynamicModelSelectionError||typeof e==`object`&&!!e&&e.code===DYNAMIC_MODEL_SELECTION_ERROR_CODE}async function loadModelReaction(e){let t=e.turnAgent.dynamicModel;if(t===void 0)return;let n=await loadDynamicRuntimeModelDefinition({dynamicModel:t,scope:{moduleMap:e.moduleMap,nodeId:e.nodeId}}),r=`${t.logicalPath}#model`;return{contribute:async t=>{try{return await contributionOf(t,e)}catch(e){throw new DynamicModelSelectionError(e)}},evaluate:authoredEvaluate(n.evaluate,{framework:isFrameworkDefinition(n)}),id:MODEL_REACTION_ID,kind:`model`,label:r}}async function contributionOf(e,t){let n=await resolveRuntimeModelSelection({durability:`live`,modelMetadata:t.modelMetadata,selection:e}),r=n.model===void 0||!isMockModel(n.model)&&shouldMockAuthoredRuntimeModels()?void 0:n,i={reference:n.reference};return{live:r,value:parseJsonValue(i)}}function getEffectiveModelSelection(e){let t=readReactionsState(e).slots[MODEL_REACTION_ID];if(t!==void 0&&t.value!==null)return readLive(e,MODEL_REACTION_ID,t)?.live??{reference:slotValueOf(t.value).reference};let n=e.get(StaticModelReferenceKey);return n==null?null:{reference:n}}function effectiveModelId(e){try{return getEffectiveModelSelection(e)?.reference.id}catch{return}}export{DynamicModelSelectionError,effectiveModelId,getEffectiveModelSelection,isDynamicModelSelectionError,loadModelReaction};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{authoredEvaluate}from"../reaction.js";import{entryVersions,slotValueOf,slotsOf}from"../state.js";import{sessionConnectionNames}from"./connection.js";import{bindingOf}from"../remote.js";import{parseJsonValue}from"#shared/json.js";import{assertNotConnectionOwned}from"#connections/ownership.js";import{eveNamespaceReservation}from"#protocol/runtime-tools.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{normalizeDynamicRemoteAgent}from"#runtime/subagents/dynamic-remote-agent-config.js";import{createPreparedWorkflowToolHarnessDefinition}from"#execution/tools/workflow/harness-definition.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{createPreparedRuntimeSubagentTool}from"#runtime/subagents/registry.js";function subagentReaction(e){return{contribute:async(t,{ctx:n})=>{if(t==null)return{value:null};let{credentials:r,selection:i}=await selectionOf(n,e,t),a=parseJsonValue(JSON.parse(JSON.stringify(i)));return r===void 0?{value:a}:{live:r,value:a}},id:`subagent:${e.nodeId}`,kind:`subagent`,evaluate:authoredEvaluate(e.evaluate,{framework:e.framework}),label:e.logicalPath}}function readDynamicSubagentSelections(e){let t={};for(let{id:n,slot:r}of slotsOf(e,`subagent`)){let i=slotValueOf(r.value);if(i===null)continue;let a=n.slice(9);t[a]=i.kind===`remote`&&i.remoteAgent.credentials===!0?{...i,binding:bindingOf(e,a)}:i}return t}function buildDynamicSubagentTools(e){return slotsOf(e,`subagent`).flatMap(({id:t,slot:n})=>{let r=slotValueOf(n.value);return r===null||(r.kind===`subagent`?r.agentConfig.tool:r.remoteAgent.tool)===!1?[]:[{...createPreparedWorkflowToolHarnessDefinition(r.prepared),version:entryVersions(e,t)(n.value)}]})}async function selectionOf(e,t,n){assertNotConnectionOwned({connectionNames:sessionConnectionNames(e),name:t.name,remedy:`Rename the subagent directory.`,subject:`Dynamic subagent`});let r={logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,sourceId:t.sourceId,sourceKind:t.sourceKind};if(n.kind===`remote`){let{config:i,credentials:a}=await normalizeDynamicRemoteAgent({name:t.name,value:n}),o=t.tool===!1?{...i,tool:!1}:i;assertToolNameAvailable(e,t,o.tool);let s={kind:`remote`,prepared:createPreparedRuntimeSubagentTool({...r,description:o.description,kind:`remote`,path:o.path,tool:o.tool,url:o.url}),remoteAgent:o};return a===void 0?{selection:s}:{credentials:a,selection:s}}let i=await normalizeDynamicSubagentAgentConfig({name:t.name,state:e,value:n}),a=t.tool===!1?{...i,tool:!1}:i;return assertToolNameAvailable(e,t,a.tool),{selection:{agentConfig:a,kind:`subagent`,prepared:createPreparedRuntimeSubagentTool({...r,description:a.description,kind:`subagent`,tool:a.tool})}}}function assertToolNameAvailable(e,t,n){let r=eveNamespaceReservation(t.name);if(r!==void 0)throw Error(`Dynamic subagent "${t.name}" from "${t.logicalPath}" uses the reserved name "${t.name}". ${r}; rename the subagent.`);if(n!==!1&&e.get(BundleKey)?.toolRegistry.toolsByName.has(t.name)===!0)throw Error(`Dynamic subagent "${t.name}" from "${t.logicalPath}" collides with the tool "${t.name}". Set the subagent's tool to false when that tool wraps it.`)}export{buildDynamicSubagentTools,readDynamicSubagentSelections,subagentReaction};
|
|
1
|
+
import{authoredEvaluate}from"../reaction.js";import{entryVersions,slotValueOf,slotsOf}from"../state.js";import{sessionConnectionNames}from"./connection.js";import{bindingOf}from"../remote.js";import{parseJsonValue}from"#shared/json.js";import{assertNotConnectionOwned}from"#connections/ownership.js";import{eveNamespaceReservation}from"#protocol/runtime-tools.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{normalizeDynamicRemoteAgent}from"#runtime/subagents/dynamic-remote-agent-config.js";import{createPreparedWorkflowToolHarnessDefinition}from"#execution/tools/workflow/harness-definition.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{createPreparedRuntimeSubagentTool}from"#runtime/subagents/registry.js";function subagentReaction(e){return{contribute:async(t,{ctx:n})=>{if(t==null)return{value:null};let{credentials:r,selection:i}=await selectionOf(n,e,t),a=parseJsonValue(JSON.parse(JSON.stringify(i)));return r===void 0?{value:a}:{live:r,value:a}},id:`subagent:${e.nodeId}`,kind:`subagent`,evaluate:authoredEvaluate(e.evaluate,{framework:e.framework}),label:e.logicalPath}}function readDynamicSubagentSelections(e){let t={};for(let{id:n,slot:r}of slotsOf(e,`subagent`)){let i=slotValueOf(r.value);if(i===null)continue;let a=n.slice(9);t[a]=i.kind===`remote`&&i.remoteAgent.credentials===!0?{...i,binding:bindingOf(e,a)}:i}return t}function buildDynamicSubagentTools(e){return slotsOf(e,`subagent`).flatMap(({id:t,slot:n})=>{let r=slotValueOf(n.value);return r===null||(r.kind===`subagent`?r.agentConfig.tool:r.remoteAgent.tool)===!1?[]:[{...createPreparedWorkflowToolHarnessDefinition(r.prepared),version:entryVersions(e,t)(n.value)}]})}async function selectionOf(e,t,n){assertNotConnectionOwned({connectionNames:sessionConnectionNames(e),name:t.name,remedy:`Rename the subagent directory.`,subject:`Dynamic subagent`});let r={logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,sourceId:t.sourceId,sourceKind:t.sourceKind};if(n.kind===`remote`){let{config:i,credentials:a}=await normalizeDynamicRemoteAgent({name:t.name,value:n}),o=t.tool===!1?{...i,tool:!1}:i;assertToolNameAvailable(e,t,o.tool);let s={kind:`remote`,prepared:createPreparedRuntimeSubagentTool({...r,description:o.description,kind:`remote`,path:o.path,tool:o.tool,url:o.url}),remoteAgent:o};return a===void 0?{selection:s}:{credentials:a,selection:s}}let i=await normalizeDynamicSubagentAgentConfig({modelMetadata:e.require(BundleKey).modelMetadata,name:t.name,state:e,value:n}),a=t.tool===!1?{...i,tool:!1}:i;return assertToolNameAvailable(e,t,a.tool),{selection:{agentConfig:a,kind:`subagent`,prepared:createPreparedRuntimeSubagentTool({...r,description:a.description,kind:`subagent`,tool:a.tool})}}}function assertToolNameAvailable(e,t,n){let r=eveNamespaceReservation(t.name);if(r!==void 0)throw Error(`Dynamic subagent "${t.name}" from "${t.logicalPath}" uses the reserved name "${t.name}". ${r}; rename the subagent.`);if(n!==!1&&e.get(BundleKey)?.toolRegistry.toolsByName.has(t.name)===!0)throw Error(`Dynamic subagent "${t.name}" from "${t.logicalPath}" collides with the tool "${t.name}". Set the subagent's tool to false when that tool wraps it.`)}export{buildDynamicSubagentTools,readDynamicSubagentSelections,subagentReaction};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { LanguageModel } from "ai";
|
|
2
2
|
import type { CompiledModuleMap } from "#compiler/module-map.js";
|
|
3
|
-
import type { ContextAccessor } from "#context/key.js";
|
|
4
3
|
import type { RuntimeDynamicModelReference, RuntimeModelReference } from "#runtime/agent/bootstrap.js";
|
|
5
4
|
import { shouldMockAuthoredRuntimeModels } from "#runtime/agent/mock-model-adapter.js";
|
|
6
5
|
import { type PublicAgentDynamicModelDefinition, type PublicAgentDynamicModelResult } from "#shared/agent-definition.js";
|
|
7
|
-
import { type
|
|
6
|
+
import { type ModelMetadata } from "#internal/model-catalog.js";
|
|
8
7
|
export { shouldMockAuthoredRuntimeModels };
|
|
9
8
|
/** A deterministic authoring or selection error that retrying cannot repair. */
|
|
10
9
|
export declare class InvalidRuntimeModelSelectionError extends Error {
|
|
@@ -29,8 +28,8 @@ export declare function loadDynamicRuntimeModelDefinition(input: {
|
|
|
29
28
|
readonly scope: RuntimeModelResolutionScope;
|
|
30
29
|
}): Promise<PublicAgentDynamicModelDefinition>;
|
|
31
30
|
export declare function resolveRuntimeModelSelection(input: {
|
|
32
|
-
readonly catalog?: RuntimeModelCatalog;
|
|
33
31
|
readonly durability: "durable" | "live";
|
|
32
|
+
/** The build's model metadata snapshot, read only when the selection omits its context window. */
|
|
33
|
+
readonly modelMetadata: () => Promise<ModelMetadata>;
|
|
34
34
|
readonly selection: PublicAgentDynamicModelResult;
|
|
35
|
-
readonly state: ContextAccessor;
|
|
36
35
|
}): Promise<ResolvedRuntimeModelSelection>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{localGatewayModel}from"#internal/model-auth/transport.js";import{
|
|
1
|
+
import{localGatewayModel}from"#internal/model-auth/transport.js";import{parseJsonObject}from"#shared/json.js";import{isDynamicModelDefinition}from"#shared/agent-definition.js";import{lookupCatalogModelByProviderModelId,lookupCatalogModelBySlug}from"#internal/model-catalog.js";import{normalizeAgentDefinition,normalizeAgentPromptCache}from"#internal/authored-definition/core.js";import{formatLanguageModelGatewayId,isAgentReasoningDefinition,isRuntimeLanguageModel}from"#internal/runtime-model.js";import{loadResolvedModuleExport}from"#runtime/resolve-helpers.js";import{resolveBootstrapRuntimeModel}from"#runtime/agent/bootstrap-model.js";import{resolveMockAuthoredRuntimeModel,shouldMockAuthoredRuntimeModels}from"#runtime/agent/mock-model-adapter.js";var InvalidRuntimeModelSelectionError=class extends Error{constructor(e,t){super(e,t),this.name=`InvalidRuntimeModelSelectionError`}};async function resolveRuntimeModelReference(e,t){let n=resolveBootstrapRuntimeModel(e);if(n!==null)return n;let r=resolveMockAuthoredRuntimeModel(e);return r===null?isSourceBackedRuntimeModelReference(e)?await loadSourceBackedRuntimeModelReference(e,t):localGatewayModel(e.id)??e.id:r}async function loadSourceBackedRuntimeModelReference(e,t){if(t===void 0)throw Error(`Expected a compiled module-map scope to resolve the authored runtime model "${e.id}".`);let n=await loadResolvedModuleExport({definition:e.source,kindLabel:`runtime model "${e.id}"`,moduleMap:t.moduleMap,nodeId:t.nodeId}),r=normalizeAgentDefinition(n,`Expected the authored agent config export "${e.source.exportName??`default`}" from "${e.source.logicalPath}" to match the public eve shape.`),i=e.sourceField===`compaction.model`?r.compaction?.model:r.model;if(i===void 0)throw Error(`Expected the authored agent config export "${e.source.exportName??`default`}" from "${e.source.logicalPath}" to provide a runtime model at "${e.sourceField??`model`}".`);if(isDynamicModelDefinition(i))throw Error(`Expected the authored agent config export "${e.source.exportName??`default`}" from "${e.source.logicalPath}" to provide a static runtime model.`);return i}function isSourceBackedRuntimeModelReference(e){return e.source!==void 0}async function loadDynamicRuntimeModelDefinition(e){let t=await loadResolvedModuleExport({definition:e.dynamicModel,kindLabel:`dynamic runtime model`,moduleMap:e.scope.moduleMap,nodeId:e.scope.nodeId}),n=normalizeAgentDefinition(t,`Expected the authored agent config export "${e.dynamicModel.exportName??`default`}" from "${e.dynamicModel.logicalPath}" to match the public eve shape.`).model;if(!isDynamicModelDefinition(n))throw Error(`Expected the authored agent config export "${e.dynamicModel.exportName??`default`}" from "${e.dynamicModel.logicalPath}" to provide a dynamic model definition.`);return n}async function resolveRuntimeModelSelection(e){if(e.selection===null||e.selection===void 0)throw new InvalidRuntimeModelSelectionError(`The dynamic model returned no model. Return a model ID, a provider model, or { model, reasoning?, modelContextWindowTokens?, modelOptions? }.`);let t,n,r;try{t=normalizeDynamicModelSelection(e.selection),validateDynamicModelSelection(t),n=t.modelOptions?.providerOptions===void 0?void 0:parseProviderOptionsRecord(t.modelOptions.providerOptions),r=t.modelOptions?.promptCache===void 0?void 0:normalizeAgentPromptCache(t.modelOptions.promptCache,`Dynamic model resolver returned an invalid selection.`)}catch(e){throw invalidSelectionError(e)}let i=t.model;if(typeof i==`string`){let a=formatLanguageModelGatewayId(i);if(r!==void 0)throw gatewayPromptCacheError(a);return{reference:{id:a,contextWindowTokens:t.modelContextWindowTokens??(await lookupModelMetadata(e.modelMetadata,a,e=>lookupCatalogModelBySlug(e,a))).contextWindowTokens,providerOptions:n,reasoning:t.reasoning}}}if(validateRuntimeLanguageModel(i),e.durability===`durable`)throw new InvalidRuntimeModelSelectionError(`Dynamic model selection returned a provider object, but durable model selections must be serializable. Return a model id string, or use a "beforeModel" model resolver.`);let a=formatLanguageModelGatewayId(i),o=i.provider.split(`.`)[0]===`gateway`;if(r!==void 0&&o)throw gatewayPromptCacheError(a);let s=o?i.modelId:a,c=t.modelContextWindowTokens;if(c===void 0){let t=await lookupModelMetadata(e.modelMetadata,s,e=>o?lookupCatalogModelBySlug(e,i.modelId):lookupCatalogModelByProviderModelId(e,i.provider,i.modelId));o||(s=t.slug),c=t.contextWindowTokens}return{model:i,reference:{id:s,contextWindowTokens:c,promptCache:r,providerOptions:n,reasoning:t.reasoning}}}function invalidSelectionError(e){return e instanceof InvalidRuntimeModelSelectionError?e:new InvalidRuntimeModelSelectionError(e instanceof Error?e.message:String(e),{cause:e})}function gatewayPromptCacheError(e){return new InvalidRuntimeModelSelectionError(`Dynamic model resolver returned modelOptions.promptCache for "${e}", which routes through AI Gateway. promptCache applies only to models eve calls directly; Gateway manages its own prompt caching through providerOptions.gateway.caching.`)}async function lookupModelMetadata(e,t,n){let r=await e(),i=n(r);if(i!==null)return i;throw new InvalidRuntimeModelSelectionError(r.fetchedAt===null?`Cannot select model "${t}" because this build couldn't read the AI Gateway model catalog, so it has no context window for the model. Return modelContextWindowTokens with this selection, or rebuild with network access to ai-gateway.vercel.sh.`:`Cannot select model "${t}" because the AI Gateway model catalog this build read at ${r.fetchedAt} has no context window for it. Return modelContextWindowTokens with this selection for an unlisted or custom model, or rebuild to pick up a newly published one.`)}const DYNAMIC_MODEL_SELECTION_KEYS=new Set([`model`,`modelContextWindowTokens`,`modelOptions`,`reasoning`]);function validateDynamicModelSelection(e){let t=Object.keys(e).filter(e=>!DYNAMIC_MODEL_SELECTION_KEYS.has(e));if(t.length>0)throw Error(`A dynamic model returns only runtime settings: model, reasoning, modelContextWindowTokens, and modelOptions. It returned ${t.map(e=>`"${e}"`).join(`, `)}, which can't vary per session; declare ${t.length===1?`it`:`them`} on defineAgent() instead.`);if(e.reasoning!==void 0&&!isAgentReasoningDefinition(e.reasoning))throw Error(`Dynamic model resolver returned an invalid reasoning effort. Expected provider-default, none, minimal, low, medium, high, or xhigh.`);let n=e.modelContextWindowTokens;if(n!==void 0&&(!Number.isInteger(n)||n<=0))throw Error(`Dynamic model resolver returned an invalid modelContextWindowTokens value. Expected a positive integer.`);if(typeof e.model==`string`&&e.model.trim()===``)throw Error(`Dynamic model resolver returned an empty model id.`)}function normalizeDynamicModelSelection(e){return isModelSelectionDefinition(e)?e:{model:e}}function isModelSelectionDefinition(e){return typeof e==`object`&&!!e&&`model`in e&&!isRuntimeLanguageModel(e)}function validateRuntimeLanguageModel(e){if(!isRuntimeLanguageModel(e))throw new InvalidRuntimeModelSelectionError(`Dynamic model resolver returned an invalid model. Return an AI Gateway model id string, an AI SDK language model, or { model, modelContextWindowTokens?, modelOptions? }.`)}function parseProviderOptionsRecord(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=parseJsonObject(r);return t}export{InvalidRuntimeModelSelectionError,loadDynamicRuntimeModelDefinition,resolveRuntimeModelReference,resolveRuntimeModelSelection,shouldMockAuthoredRuntimeModels};
|
|
@@ -9,6 +9,7 @@ interface RuntimeCompilerArtifactPaths {
|
|
|
9
9
|
readonly diagnosticsPath: string;
|
|
10
10
|
readonly discoveryManifestPath: string;
|
|
11
11
|
readonly discoveryDirectoryPath: string;
|
|
12
|
+
readonly modelMetadataPath: string;
|
|
12
13
|
readonly moduleMapPath: string;
|
|
13
14
|
readonly sandboxPreparedArtifactsPath: string;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function resolveRuntimeCompilerArtifactPaths(e){let t=normalizeFilesystemPath(e),n=`${t}/.eve/discovery`,r=`${t}/.eve/compile`;return{appRoot:t,compiledManifestPath:`${r}/compiled-agent-manifest.json`,compileDirectoryPath:r,compileMetadataPath:`${r}/compile-metadata.json`,diagnosticsPath:`${n}/diagnostics.json`,discoveryDirectoryPath:n,discoveryManifestPath:`${n}/agent-discovery-manifest.json`,moduleMapPath:`${r}/module-map.mjs`,sandboxPreparedArtifactsPath:`${r}/sandbox-prepared-artifacts.json`}}function normalizeFilesystemPath(e){let t=e.replaceAll(`\\`,`/`);return t===`/`?t:t.replace(/\/+$/,``)}export{resolveRuntimeCompilerArtifactPaths};
|
|
1
|
+
function resolveRuntimeCompilerArtifactPaths(e){let t=normalizeFilesystemPath(e),n=`${t}/.eve/discovery`,r=`${t}/.eve/compile`;return{appRoot:t,compiledManifestPath:`${r}/compiled-agent-manifest.json`,compileDirectoryPath:r,compileMetadataPath:`${r}/compile-metadata.json`,diagnosticsPath:`${n}/diagnostics.json`,discoveryDirectoryPath:n,discoveryManifestPath:`${n}/agent-discovery-manifest.json`,modelMetadataPath:`${r}/model-metadata.json`,moduleMapPath:`${r}/module-map.mjs`,sandboxPreparedArtifactsPath:`${r}/sandbox-prepared-artifacts.json`}}function normalizeFilesystemPath(e){let t=e.replaceAll(`\\`,`/`);return t===`/`?t:t.replace(/\/+$/,``)}export{resolveRuntimeCompilerArtifactPaths};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CompileMetadata } from "#compiler/artifacts.js";
|
|
2
2
|
import type { CompiledAgentManifest } from "#compiler/manifest.js";
|
|
3
3
|
import type { CompiledModuleMap } from "#compiler/module-map.js";
|
|
4
|
+
import type { ModelMetadata } from "#internal/model-catalog.js";
|
|
4
5
|
import type { SandboxPreparedArtifactsManifest } from "#shared/sandbox-prepared-artifacts.js";
|
|
5
6
|
/**
|
|
6
7
|
* Bundled compiled artifacts installed by Nitro when authored runtime state is
|
|
@@ -9,6 +10,7 @@ import type { SandboxPreparedArtifactsManifest } from "#shared/sandbox-prepared-
|
|
|
9
10
|
export interface BundledCompiledArtifacts {
|
|
10
11
|
manifest: CompiledAgentManifest;
|
|
11
12
|
metadata?: CompileMetadata;
|
|
13
|
+
modelMetadata?: ModelMetadata;
|
|
12
14
|
moduleMap: CompiledModuleMap;
|
|
13
15
|
sandboxPreparedArtifacts?: SandboxPreparedArtifactsManifest;
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRuntimeSession,getActiveRuntimeSession,setRuntimeSessionCompiledArtifacts,withRuntimeSession}from"#runtime/sessions/runtime-session.js";function installBundledCompiledArtifacts(e){setRuntimeSessionCompiledArtifacts(getActiveRuntimeSession(),{manifest:e.manifest,metadata:e.metadata,moduleMap:e.moduleMap,sandboxPreparedArtifacts:e.sandboxPreparedArtifacts})}async function withBundledCompiledArtifacts(e,t){let n=createRuntimeSession(e.sessionId??`bundled-compiled-artifacts`);return await withRuntimeSession(n,async()=>(installBundledCompiledArtifacts(e),await t()))}function readBundledCompiledArtifacts(){return getActiveRuntimeSession().compiledArtifacts}export{installBundledCompiledArtifacts,readBundledCompiledArtifacts,withBundledCompiledArtifacts};
|
|
1
|
+
import{createRuntimeSession,getActiveRuntimeSession,setRuntimeSessionCompiledArtifacts,withRuntimeSession}from"#runtime/sessions/runtime-session.js";function installBundledCompiledArtifacts(e){setRuntimeSessionCompiledArtifacts(getActiveRuntimeSession(),{manifest:e.manifest,metadata:e.metadata,modelMetadata:e.modelMetadata,moduleMap:e.moduleMap,sandboxPreparedArtifacts:e.sandboxPreparedArtifacts})}async function withBundledCompiledArtifacts(e,t){let n=createRuntimeSession(e.sessionId??`bundled-compiled-artifacts`);return await withRuntimeSession(n,async()=>(installBundledCompiledArtifacts(e),await t()))}function readBundledCompiledArtifacts(){return getActiveRuntimeSession().compiledArtifacts}export{installBundledCompiledArtifacts,readBundledCompiledArtifacts,withBundledCompiledArtifacts};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ModelMetadata } from "#internal/model-catalog.js";
|
|
2
|
+
import type { RuntimeCompiledArtifactsSource } from "#runtime/compiled-artifacts-source.js";
|
|
3
|
+
/** Loads the model metadata snapshot the build baked into its compiled artifacts. */
|
|
4
|
+
export declare function loadModelMetadata(source: RuntimeCompiledArtifactsSource): Promise<ModelMetadata>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readFile}from"node:fs/promises";import{resolveRuntimeCompilerArtifactPaths}from"#runtime/loaders/artifact-paths.js";import{modelMetadataSchema}from"#internal/model-catalog.js";import{readBundledCompiledArtifacts}from"#runtime/loaders/bundled-artifacts.js";async function loadModelMetadata(e){if(e.kind===`bundled`){let e=readBundledCompiledArtifacts()?.modelMetadata;if(e===void 0)throw Error("The bundled compiled artifacts have no model metadata. Rebuild with `eve build`.");return e}let t=resolveRuntimeCompilerArtifactPaths(e.appRoot).modelMetadataPath;try{return modelMetadataSchema.parse(JSON.parse(await readFile(t,`utf8`)))}catch(e){throw e instanceof Error&&`code`in e&&e.code===`ENOENT`?Error(`The compiled artifacts have no model metadata at "${t}". Rebuild with \`eve build\`, or restart \`eve dev\`.`,{cause:e}):e}}export{loadModelMetadata};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{createResolvedModuleSourceRef,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";import{resolveConnectionDefinition}from"#runtime/resolve-connection.js";import{resolveDynamicDefinition}from"#runtime/resolve-dynamic.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{resolveHookDefinition}from"#runtime/resolve-hook.js";import{resolveSandboxDefinition}from"#runtime/resolve-sandbox.js";import{resolveToolDefinition}from"#runtime/resolve-tool.js";import{resolveMemoryDefinition}from"#runtime/resolve-memory.js";async function resolveAgent(e){let t=e.manifest.skills.map(t=>({...t,owner:requireCompiledSourceOwner(e.manifest,t),metadata:t.metadata===void 0?void 0:{...t.metadata}})),n=await Promise.all(e.manifest.channelRoutes.effective.map(t=>resolveChannelDefinition(t,e.moduleMap,e.nodeId))),r=await Promise.all(e.manifest.tools.map(t=>resolveToolDefinition(t,e.moduleMap,e.nodeId,requireBindingOwner(e.manifest,t.sourceId)))),i={moduleMap:e.moduleMap,nodeId:e.nodeId},a=await Promise.all(e.manifest.dynamicConnections.map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic connection`}))),o=await Promise.all((e.manifest.dynamicInstructions??[]).map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic instructions`}))),s=await Promise.all((e.manifest.dynamicSkills??[]).map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic skill`}))),c=await Promise.all(e.manifest.dynamicTools.map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic tool`}))),l=await Promise.all(e.manifest.hooks.map(t=>resolveHookDefinition(t,e.moduleMap,e.nodeId))),u=await Promise.all(e.manifest.connections.map(t=>resolveConnectionDefinition(t,e.moduleMap,e.nodeId))),d=await Promise.all(e.manifest.memories.map(t=>resolveMemoryDefinition(t,e.moduleMap,e.nodeId))),f=await resolveSandboxDefinition(e.manifest.sandbox,e.moduleMap,e.nodeId),p=e.manifest.instructions.map(t=>createResolvedInstructionsDefinition(e.manifest,t)),m=e.manifest.workspaceResourceRoot,h={channels:n,connections:u,dynamicConnectionResolvers:a,dynamicInstructionsResolvers:o,dynamicSkillResolvers:s,dynamicToolResolvers:c,hooks:l,instructions:p,metadata:{agentRoot:e.manifest.agentRoot,appRoot:e.manifest.appRoot,diagnosticsSummary:e.manifest.diagnosticsSummary},memories:d,sandbox:f,workspaceResourceRoot:m,skills:t,tools:r,workspaceSpec:{rootEntries:[...m.rootEntries]}};return`config`in e.manifest?{...h,config:createResolvedAgentConfig(e.manifest,await loadSessionUsageLimit(e.manifest,e.moduleMap,e.nodeId))}:h}async function loadSessionUsageLimit(e,t,n){let r=e.config.source;if(e.config.limits?.sessionUsage!==!0||r===void 0)return;let i=await loadResolvedModuleExport({definition:r,kindLabel:`agent config`,moduleMap:t,nodeId:n});return normalizeAgentDefinition(i,`Expected the authored agent config export "${r.exportName??`default`}" from "${r.logicalPath}" to match the public eve shape.`).limits?.sessionUsage}function requireBindingOwner(e,t){let n=e.bindings[t];if(n===void 0)throw Error(`Compiled source "${t}" has no binding.`);return n.owner}function createResolvedInstructionsDefinition(e,t){return{content:t.content,name:t.name,owner:requireCompiledSourceOwner(e,t),logicalPath:t.logicalPath,role:t.role,sourceId:t.sourceId,sourceKind:t.sourceKind}}function requireCompiledSourceOwner(e,t){let n=e.bindings[t.sourceId]?.owner??t.owner;if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return n}function createResolvedAgentConfig(e,t){let n={name:e.config.name};if(e.config.defaultTools!==void 0&&(n.defaultTools=e.config.defaultTools),e.config.description!==void 0&&(n.description=e.config.description),e.config.compaction!==void 0){let t={};e.config.compaction.model!==void 0&&(t.model=e.config.compaction.model.source===void 0?{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,
|
|
1
|
+
import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{createResolvedModuleSourceRef,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";import{resolveConnectionDefinition}from"#runtime/resolve-connection.js";import{resolveDynamicDefinition}from"#runtime/resolve-dynamic.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{resolveHookDefinition}from"#runtime/resolve-hook.js";import{resolveSandboxDefinition}from"#runtime/resolve-sandbox.js";import{resolveToolDefinition}from"#runtime/resolve-tool.js";import{resolveMemoryDefinition}from"#runtime/resolve-memory.js";async function resolveAgent(e){let t=e.manifest.skills.map(t=>({...t,owner:requireCompiledSourceOwner(e.manifest,t),metadata:t.metadata===void 0?void 0:{...t.metadata}})),n=await Promise.all(e.manifest.channelRoutes.effective.map(t=>resolveChannelDefinition(t,e.moduleMap,e.nodeId))),r=await Promise.all(e.manifest.tools.map(t=>resolveToolDefinition(t,e.moduleMap,e.nodeId,requireBindingOwner(e.manifest,t.sourceId)))),i={moduleMap:e.moduleMap,nodeId:e.nodeId},a=await Promise.all(e.manifest.dynamicConnections.map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic connection`}))),o=await Promise.all((e.manifest.dynamicInstructions??[]).map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic instructions`}))),s=await Promise.all((e.manifest.dynamicSkills??[]).map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic skill`}))),c=await Promise.all(e.manifest.dynamicTools.map(e=>resolveDynamicDefinition(e,{...i,kindLabel:`dynamic tool`}))),l=await Promise.all(e.manifest.hooks.map(t=>resolveHookDefinition(t,e.moduleMap,e.nodeId))),u=await Promise.all(e.manifest.connections.map(t=>resolveConnectionDefinition(t,e.moduleMap,e.nodeId))),d=await Promise.all(e.manifest.memories.map(t=>resolveMemoryDefinition(t,e.moduleMap,e.nodeId))),f=await resolveSandboxDefinition(e.manifest.sandbox,e.moduleMap,e.nodeId),p=e.manifest.instructions.map(t=>createResolvedInstructionsDefinition(e.manifest,t)),m=e.manifest.workspaceResourceRoot,h={channels:n,connections:u,dynamicConnectionResolvers:a,dynamicInstructionsResolvers:o,dynamicSkillResolvers:s,dynamicToolResolvers:c,hooks:l,instructions:p,metadata:{agentRoot:e.manifest.agentRoot,appRoot:e.manifest.appRoot,diagnosticsSummary:e.manifest.diagnosticsSummary},memories:d,sandbox:f,workspaceResourceRoot:m,skills:t,tools:r,workspaceSpec:{rootEntries:[...m.rootEntries]}};return`config`in e.manifest?{...h,config:createResolvedAgentConfig(e.manifest,await loadSessionUsageLimit(e.manifest,e.moduleMap,e.nodeId))}:h}async function loadSessionUsageLimit(e,t,n){let r=e.config.source;if(e.config.limits?.sessionUsage!==!0||r===void 0)return;let i=await loadResolvedModuleExport({definition:r,kindLabel:`agent config`,moduleMap:t,nodeId:n});return normalizeAgentDefinition(i,`Expected the authored agent config export "${r.exportName??`default`}" from "${r.logicalPath}" to match the public eve shape.`).limits?.sessionUsage}function requireBindingOwner(e,t){let n=e.bindings[t];if(n===void 0)throw Error(`Compiled source "${t}" has no binding.`);return n.owner}function createResolvedInstructionsDefinition(e,t){return{content:t.content,name:t.name,owner:requireCompiledSourceOwner(e,t),logicalPath:t.logicalPath,role:t.role,sourceId:t.sourceId,sourceKind:t.sourceKind}}function requireCompiledSourceOwner(e,t){let n=e.bindings[t.sourceId]?.owner??t.owner;if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return n}function createResolvedAgentConfig(e,t){let n={name:e.config.name};if(e.config.defaultTools!==void 0&&(n.defaultTools=e.config.defaultTools),e.config.description!==void 0&&(n.description=e.config.description),e.config.compaction!==void 0){let t={};e.config.compaction.model!==void 0&&(t.model=e.config.compaction.model.source===void 0?{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,providerOptions:e.config.compaction.model.providerOptions}:{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,providerOptions:e.config.compaction.model.providerOptions,source:{exportName:e.config.compaction.model.source.exportName,sourceKind:`module`,logicalPath:e.config.compaction.model.source.logicalPath,sourceId:e.config.compaction.model.source.sourceId},sourceField:e.config.compaction.model.sourceField}),e.config.compaction.thresholdPercent!==void 0&&(t.thresholdPercent=e.config.compaction.thresholdPercent),n.compaction=t}if(e.config.experimental!==void 0&&(n.experimental={workflow:e.config.experimental.workflow===void 0?void 0:{modelCallsPerStep:e.config.experimental.workflow.modelCallsPerStep,retention:e.config.experimental.workflow.retention,world:e.config.experimental.workflow.world}}),e.config.reasoning!==void 0&&(n.reasoning=e.config.reasoning),e.config.source!==void 0&&(n.source=createResolvedModuleSourceRef(e.config.source)),e.config.tool!==void 0&&(n.tool=e.config.tool),e.config.limits!==void 0&&(n.limits={sessionTimeoutMs:e.config.limits.sessionTimeoutMs,sessionUsage:t}),e.config.dynamicModel!==void 0)return{...n,dynamicModel:createResolvedModuleSourceRef(e.config.dynamicModel)};let r=e.config.model;return{...n,model:r.source===void 0?{id:r.id,contextWindowTokens:r.contextWindowTokens,providerOptions:r.providerOptions}:{contextWindowTokens:r.contextWindowTokens,id:r.id,promptCache:r.promptCache,providerOptions:r.providerOptions,source:{exportName:r.source.exportName,sourceKind:`module`,logicalPath:r.source.logicalPath,sourceId:r.source.sourceId}}}}export{resolveAgent};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CompiledModuleMap } from "#compiler/module-map.js";
|
|
2
|
+
import type { ModelMetadata } from "#internal/model-catalog.js";
|
|
2
3
|
import type { RuntimeTurnAgent } from "#runtime/agent/bootstrap.js";
|
|
3
4
|
import type { RuntimeAdapterRegistry } from "#runtime/channels/registry.js";
|
|
4
5
|
import { type RuntimeCompiledArtifactsSource } from "#runtime/compiled-artifacts-source.js";
|
|
@@ -10,6 +11,8 @@ export interface CompiledRuntimeAgentBundle {
|
|
|
10
11
|
readonly adapterRegistry: RuntimeAdapterRegistry;
|
|
11
12
|
readonly compiledArtifactsSource: RuntimeCompiledArtifactsSource;
|
|
12
13
|
readonly graph: ResolvedAgentGraphBundle;
|
|
14
|
+
/** The build's model metadata snapshot, read on first use; runtime selections resolve from it. */
|
|
15
|
+
readonly modelMetadata: () => Promise<ModelMetadata>;
|
|
13
16
|
readonly moduleMap: CompiledModuleMap;
|
|
14
17
|
/**
|
|
15
18
|
* Id of the active node in the graph. `undefined` for root bundles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveRuntimeCompiledArtifactsVersionedCacheKey}from"#runtime/cache-key.js";import{getRuntimeCompiledArtifactsCacheKey}from"#runtime/compiled-artifacts-source.js";import{loadCompiledManifest}from"#runtime/loaders/manifest.js";import{getActiveRuntimeSession}from"#runtime/sessions/runtime-session.js";import{resolvePackageSourceFilePath}from"#internal/application/package.js";import{pathToFileURL}from"node:url";import{getResolvedRuntimeAgentNode}from"#runtime/graph.js";import{resolveRuntimeAgentGraph}from"#runtime/resolve-agent-graph.js";import{createRuntimeAdapterRegistry}from"#runtime/channels/registry.js";import{loadCompiledModuleMap}from"#runtime/loaders/module-map.js";const isCacheDisabled=process.env.EVE_DISABLE_AGENT_CACHE===`1`,DEVELOPMENT_RUNTIME_SNAPSHOT_SEGMENT=/\/\.eve\/(?:eval-servers\/[^/]+\/)?dev-runtime\/snapshots\//;function isDevelopmentRuntimeSnapshotRoot(e){return DEVELOPMENT_RUNTIME_SNAPSHOT_SEGMENT.test(e.replaceAll(`\\`,`/`))}function normalizeCompiledArtifactsSource(e){return e.kind!==`disk`||e.moduleMapLoaderPath!==void 0||!isDevelopmentRuntimeSnapshotRoot(e.appRoot)?e:{...e,moduleMapLoaderPath:resolvePackageSourceFilePath(`src/internal/authored-module-map-loader.ts`)}}async function loadFullBundle(e){let t=normalizeCompiledArtifactsSource(e),[n,r]=await Promise.all([loadCompiledManifest({compiledArtifactsSource:t}),loadRuntimeCompiledModuleMap(t)]),i=await resolveRuntimeAgentGraph({manifest:n,moduleMap:r}),a=i.root;return{adapterRegistry:createRuntimeAdapterRegistry({channels:collectResolvedChannels(i)}),compiledArtifactsSource:t,graph:i,moduleMap:r,resolvedAgent:a.agent,subagentRegistry:a.subagentRegistry,toolRegistry:a.toolRegistry,turnAgent:a.turnAgent}}async function loadRuntimeCompiledModuleMap(e){return e.kind===`disk`&&e.moduleMapLoaderPath!==void 0?await loadAuthoredSourceCompiledModuleMap(e):await loadCompiledModuleMap({compiledArtifactsSource:e})}async function loadAuthoredSourceCompiledModuleMap(e){if(e.moduleMapLoaderPath===void 0)throw Error(`Authored-source module map loading requires "moduleMapLoaderPath" in the compiled artifacts source.`);return await(await import(pathToFileURL(e.moduleMapLoaderPath).href)).loadCompiledModuleMapFromAuthoredSource({compiledArtifactsSource:e})}async function getOrLoadFullBundle(e){let t=normalizeCompiledArtifactsSource(e);if(isCacheDisabled)return loadFullBundle(t);let n=getActiveRuntimeSession(),r=getRuntimeCompiledArtifactsCacheKey(t),i=await resolveRuntimeCompiledArtifactsVersionedCacheKey(t),a=n.bundleCacheKeyBySourceKey.get(r);a!==void 0&&a!==i&&n.bundleCache.delete(a),n.bundleCacheKeyBySourceKey.set(r,i);let o=n.bundleCache.get(i);if(o!==void 0)return o;let s=loadFullBundle(t).catch(e=>{throw n.bundleCache.delete(i),n.bundleCacheKeyBySourceKey.get(r)===i&&n.bundleCacheKeyBySourceKey.delete(r),e});return n.bundleCache.set(i,s),s}async function getCompiledRuntimeAgentBundle(e){let t=await getOrLoadFullBundle(e.compiledArtifactsSource);if(e.nodeId===void 0)return t;let n=getResolvedRuntimeAgentNode(t.graph,e.nodeId);return{adapterRegistry:t.adapterRegistry,compiledArtifactsSource:t.compiledArtifactsSource,graph:{nodesByNodeId:t.graph.nodesByNodeId,root:n},moduleMap:t.moduleMap,nodeId:e.nodeId,resolvedAgent:n.agent,subagentRegistry:n.subagentRegistry,toolRegistry:n.toolRegistry,turnAgent:n.turnAgent}}function clearCompiledRuntimeAgentBundleCache(){let e=getActiveRuntimeSession();e.bundleCache.clear(),e.bundleCacheKeyBySourceKey.clear()}function collectResolvedChannels(e){let t=new Map;for(let n of e.nodesByNodeId.values())for(let e of n.channels)t.set(`${e.sourceId}:${e.name}`,e);return[...t.values()]}export{clearCompiledRuntimeAgentBundleCache,getCompiledRuntimeAgentBundle};
|
|
1
|
+
import{resolveRuntimeCompiledArtifactsVersionedCacheKey}from"#runtime/cache-key.js";import{getRuntimeCompiledArtifactsCacheKey}from"#runtime/compiled-artifacts-source.js";import{loadCompiledManifest}from"#runtime/loaders/manifest.js";import{getActiveRuntimeSession}from"#runtime/sessions/runtime-session.js";import{resolvePackageSourceFilePath}from"#internal/application/package.js";import{pathToFileURL}from"node:url";import{getResolvedRuntimeAgentNode}from"#runtime/graph.js";import{resolveRuntimeAgentGraph}from"#runtime/resolve-agent-graph.js";import{createRuntimeAdapterRegistry}from"#runtime/channels/registry.js";import{loadModelMetadata}from"#runtime/loaders/model-metadata.js";import{loadCompiledModuleMap}from"#runtime/loaders/module-map.js";const isCacheDisabled=process.env.EVE_DISABLE_AGENT_CACHE===`1`,DEVELOPMENT_RUNTIME_SNAPSHOT_SEGMENT=/\/\.eve\/(?:eval-servers\/[^/]+\/)?dev-runtime\/snapshots\//;function isDevelopmentRuntimeSnapshotRoot(e){return DEVELOPMENT_RUNTIME_SNAPSHOT_SEGMENT.test(e.replaceAll(`\\`,`/`))}function normalizeCompiledArtifactsSource(e){return e.kind!==`disk`||e.moduleMapLoaderPath!==void 0||!isDevelopmentRuntimeSnapshotRoot(e.appRoot)?e:{...e,moduleMapLoaderPath:resolvePackageSourceFilePath(`src/internal/authored-module-map-loader.ts`)}}async function loadFullBundle(e){let t=normalizeCompiledArtifactsSource(e),[n,r]=await Promise.all([loadCompiledManifest({compiledArtifactsSource:t}),loadRuntimeCompiledModuleMap(t)]),i=await resolveRuntimeAgentGraph({manifest:n,moduleMap:r}),a=i.root,o;return{adapterRegistry:createRuntimeAdapterRegistry({channels:collectResolvedChannels(i)}),compiledArtifactsSource:t,graph:i,modelMetadata:()=>(o??=loadModelMetadata(t).catch(e=>{throw o=void 0,e}),o),moduleMap:r,resolvedAgent:a.agent,subagentRegistry:a.subagentRegistry,toolRegistry:a.toolRegistry,turnAgent:a.turnAgent}}async function loadRuntimeCompiledModuleMap(e){return e.kind===`disk`&&e.moduleMapLoaderPath!==void 0?await loadAuthoredSourceCompiledModuleMap(e):await loadCompiledModuleMap({compiledArtifactsSource:e})}async function loadAuthoredSourceCompiledModuleMap(e){if(e.moduleMapLoaderPath===void 0)throw Error(`Authored-source module map loading requires "moduleMapLoaderPath" in the compiled artifacts source.`);return await(await import(pathToFileURL(e.moduleMapLoaderPath).href)).loadCompiledModuleMapFromAuthoredSource({compiledArtifactsSource:e})}async function getOrLoadFullBundle(e){let t=normalizeCompiledArtifactsSource(e);if(isCacheDisabled)return loadFullBundle(t);let n=getActiveRuntimeSession(),r=getRuntimeCompiledArtifactsCacheKey(t),i=await resolveRuntimeCompiledArtifactsVersionedCacheKey(t),a=n.bundleCacheKeyBySourceKey.get(r);a!==void 0&&a!==i&&n.bundleCache.delete(a),n.bundleCacheKeyBySourceKey.set(r,i);let o=n.bundleCache.get(i);if(o!==void 0)return o;let s=loadFullBundle(t).catch(e=>{throw n.bundleCache.delete(i),n.bundleCacheKeyBySourceKey.get(r)===i&&n.bundleCacheKeyBySourceKey.delete(r),e});return n.bundleCache.set(i,s),s}async function getCompiledRuntimeAgentBundle(e){let t=await getOrLoadFullBundle(e.compiledArtifactsSource);if(e.nodeId===void 0)return t;let n=getResolvedRuntimeAgentNode(t.graph,e.nodeId);return{adapterRegistry:t.adapterRegistry,compiledArtifactsSource:t.compiledArtifactsSource,graph:{nodesByNodeId:t.graph.nodesByNodeId,root:n},modelMetadata:t.modelMetadata,moduleMap:t.moduleMap,nodeId:e.nodeId,resolvedAgent:n.agent,subagentRegistry:n.subagentRegistry,toolRegistry:n.toolRegistry,turnAgent:n.turnAgent}}function clearCompiledRuntimeAgentBundleCache(){let e=getActiveRuntimeSession();e.bundleCache.clear(),e.bundleCacheKeyBySourceKey.clear()}function collectResolvedChannels(e){let t=new Map;for(let n of e.nodesByNodeId.values())for(let e of n.channels)t.set(`${e.sourceId}:${e.name}`,e);return[...t.values()]}export{clearCompiledRuntimeAgentBundleCache,getCompiledRuntimeAgentBundle};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ContextAccessor } from "#context/key.js";
|
|
2
2
|
import type { RuntimeModelReference } from "#runtime/agent/bootstrap.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ModelMetadata } from "#internal/model-catalog.js";
|
|
4
4
|
import { type AgentLimitsDefinition, type AgentReasoningDefinition, type AgentToolExposure } from "#shared/agent-definition.js";
|
|
5
5
|
export interface DynamicSubagentAgentConfig {
|
|
6
6
|
readonly compaction?: {
|
|
@@ -16,7 +16,7 @@ export interface DynamicSubagentAgentConfig {
|
|
|
16
16
|
}
|
|
17
17
|
export type DynamicSubagentModelReference = RuntimeModelReference;
|
|
18
18
|
export declare function normalizeDynamicSubagentAgentConfig(input: {
|
|
19
|
-
readonly
|
|
19
|
+
readonly modelMetadata: () => Promise<ModelMetadata>;
|
|
20
20
|
readonly name: string;
|
|
21
21
|
readonly state: ContextAccessor;
|
|
22
22
|
readonly value: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isDynamicModelDefinition}from"#shared/agent-definition.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{resolveRuntimeModelSelection}from"#runtime/agent/resolve-model.js";import{getEffectiveModelSelection}from"#reactions/kinds/model.js";async function normalizeDynamicSubagentAgentConfig(e){let t=`Dynamic subagent "${e.name}" must return defineAgent(...), defineRemoteAgent(...), or null.`,n=normalizeAgentDefinition(e.value,t);if(!n.description)throw Error(`${t} The "description" field is required.`);if(n.build!==void 0)throw Error(`${t} The "build" field cannot be selected at runtime. Declare packaging configuration such as build.externalDependencies on the root agent in agent/agent.ts.`);if(n.defaultTools!==void 0)throw Error(`${t} The "defaultTools" field cannot be selected at runtime.`);if(n.experimental!==void 0)throw Error(`${t} The "experimental" field cannot be selected at runtime.`);if(isDynamicModelDefinition(n.model))throw Error(`${t} The returned "model" must be static.`);if(n.limits?.sessionUsage!==void 0)throw Error(`${t} The "limits.sessionUsage" field cannot be selected at runtime; the root agent's \`sessionUsage\` applies.`);let r={description:n.description,model:await normalizeDurableModelSelection({
|
|
1
|
+
import{isDynamicModelDefinition}from"#shared/agent-definition.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{resolveRuntimeModelSelection}from"#runtime/agent/resolve-model.js";import{getEffectiveModelSelection}from"#reactions/kinds/model.js";async function normalizeDynamicSubagentAgentConfig(e){let t=`Dynamic subagent "${e.name}" must return defineAgent(...), defineRemoteAgent(...), or null.`,n=normalizeAgentDefinition(e.value,t);if(!n.description)throw Error(`${t} The "description" field is required.`);if(n.build!==void 0)throw Error(`${t} The "build" field cannot be selected at runtime. Declare packaging configuration such as build.externalDependencies on the root agent in agent/agent.ts.`);if(n.defaultTools!==void 0)throw Error(`${t} The "defaultTools" field cannot be selected at runtime.`);if(n.experimental!==void 0)throw Error(`${t} The "experimental" field cannot be selected at runtime.`);if(isDynamicModelDefinition(n.model))throw Error(`${t} The returned "model" must be static.`);if(n.limits?.sessionUsage!==void 0)throw Error(`${t} The "limits.sessionUsage" field cannot be selected at runtime; the root agent's \`sessionUsage\` applies.`);let r={description:n.description,model:await normalizeDurableModelSelection({modelMetadata:e.modelMetadata,selection:{model:n.model,modelContextWindowTokens:n.modelContextWindowTokens??parentContextWindow(e.state,n.model),modelOptions:n.modelOptions}})};if(n.compaction!==void 0){let t={};n.compaction.model!==void 0&&(t.model=await normalizeDurableModelSelection({modelMetadata:e.modelMetadata,selection:{model:n.compaction.model,modelContextWindowTokens:n.compaction.modelContextWindowTokens,modelOptions:n.modelOptions}})),n.compaction.thresholdPercent!==void 0&&(t.thresholdPercent=n.compaction.thresholdPercent),r.compaction=t}return n.limits!==void 0&&(r.limits=n.limits),n.reasoning!==void 0&&(r.reasoning=n.reasoning),n.tool!==void 0&&(r.tool=n.tool),r}async function normalizeDurableModelSelection(e){return(await resolveRuntimeModelSelection({durability:`durable`,modelMetadata:e.modelMetadata,selection:e.selection})).reference}function parentContextWindow(e,t){if(typeof t!=`string`)return;let n=getEffectiveModelSelection(e)?.reference;return n?.id===t?n.contextWindowTokens:void 0}export{normalizeDynamicSubagentAgentConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
async function agentToolServeWorkflow(e,t){"use workflow";let n=t.agent(t.toolName),r=sendToAgent(n,await e()),i=e();for(;;){let a=await nextCallOrResult(i,r);if(a.kind===`call`){r=await forwardCall(n,r,a.call),i=e();continue}if(!r.signal.aborted){if(a.result.status===`failed`)throw Error(`The agent's turn failed: ${a.result.error.message}\nThis task has ended; to retry, call ${t.toolName} without taskId.`);let o=e();if(o!==i){r=sendToAgent(n,await i),i=o;continue}t.reply(a.result.reply??``)}r=sendToAgent(n,await i),i=e()}}async function agentWithModelServeWorkflow(e,t){"use workflow";let n=await e(),r=n.input.model.trim();if(r===``)throw TypeError(`agent model must not be empty.`);let i=t.agent(`agent`,{model:r}),a=sendToModelAgent(i,n,r),o=e();for(;;){let n=await nextModelCallOrResult(o,a);if(n.kind===`call`){a=await forwardModelCall(i,a,n.call,r),o=e();continue}if(!a.signal.aborted){if(n.result.status===`failed`)throw Error(`The agent's turn failed: ${n.result.error.message}\nThis task has ended; to retry, call ${t.toolName} without taskId.`);let s=e();if(s!==o){a=sendToModelAgent(i,await o,r),o=s;continue}t.reply(n.result.reply??``)}a=sendToModelAgent(i,await o,r),o=e()}}function sendToAgent(e,t){return{result:e.send(t.input.message,{signal:t.abortSignal}).then(e=>e.result()),signal:t.abortSignal}}function sendToModelAgent(e,t,n){if(t.input.model!==n)throw Error(`An agent task keeps the model it started with. This task has ended; start a new task to use another model.`);return{result:e.send(t.input.message,{signal:t.abortSignal}).then(e=>e.result()),signal:t.abortSignal}}async function nextCallOrResult(e,t){return await Promise.race([t.result.then(e=>({kind:`result`,result:e})),e.then(e=>({call:e,kind:`call`}))])}async function nextModelCallOrResult(e,t){return await Promise.race([t.result.then(e=>({kind:`result`,result:e})),e.then(e=>({call:e,kind:`call`}))])}async function forwardCall(e,t,n){return t.signal.aborted&&await t.result.catch(()=>void 0),sendToAgent(e,n)}async function forwardModelCall(e,t,n,r){return t.signal.aborted&&await t.result.catch(()=>void 0),sendToModelAgent(e,n,r)}agentToolServeWorkflow.workflowId=`workflow//eve//agentToolServeWorkflow`,agentWithModelServeWorkflow.workflowId=`workflow//eve@0.84.
|
|
1
|
+
async function agentToolServeWorkflow(e,t){"use workflow";let n=t.agent(t.toolName),r=sendToAgent(n,await e()),i=e();for(;;){let a=await nextCallOrResult(i,r);if(a.kind===`call`){r=await forwardCall(n,r,a.call),i=e();continue}if(!r.signal.aborted){if(a.result.status===`failed`)throw Error(`The agent's turn failed: ${a.result.error.message}\nThis task has ended; to retry, call ${t.toolName} without taskId.`);let o=e();if(o!==i){r=sendToAgent(n,await i),i=o;continue}t.reply(a.result.reply??``)}r=sendToAgent(n,await i),i=e()}}async function agentWithModelServeWorkflow(e,t){"use workflow";let n=await e(),r=n.input.model.trim();if(r===``)throw TypeError(`agent model must not be empty.`);let i=t.agent(`agent`,{model:r}),a=sendToModelAgent(i,n,r),o=e();for(;;){let n=await nextModelCallOrResult(o,a);if(n.kind===`call`){a=await forwardModelCall(i,a,n.call,r),o=e();continue}if(!a.signal.aborted){if(n.result.status===`failed`)throw Error(`The agent's turn failed: ${n.result.error.message}\nThis task has ended; to retry, call ${t.toolName} without taskId.`);let s=e();if(s!==o){a=sendToModelAgent(i,await o,r),o=s;continue}t.reply(n.result.reply??``)}a=sendToModelAgent(i,await o,r),o=e()}}function sendToAgent(e,t){return{result:e.send(t.input.message,{signal:t.abortSignal}).then(e=>e.result()),signal:t.abortSignal}}function sendToModelAgent(e,t,n){if(t.input.model!==n)throw Error(`An agent task keeps the model it started with. This task has ended; start a new task to use another model.`);return{result:e.send(t.input.message,{signal:t.abortSignal}).then(e=>e.result()),signal:t.abortSignal}}async function nextCallOrResult(e,t){return await Promise.race([t.result.then(e=>({kind:`result`,result:e})),e.then(e=>({call:e,kind:`call`}))])}async function nextModelCallOrResult(e,t){return await Promise.race([t.result.then(e=>({kind:`result`,result:e})),e.then(e=>({call:e,kind:`call`}))])}async function forwardCall(e,t,n){return t.signal.aborted&&await t.result.catch(()=>void 0),sendToAgent(e,n)}async function forwardModelCall(e,t,n,r){return t.signal.aborted&&await t.result.catch(()=>void 0),sendToModelAgent(e,n,r)}agentToolServeWorkflow.workflowId=`workflow//eve//agentToolServeWorkflow`,agentWithModelServeWorkflow.workflowId=`workflow//eve@0.84.1//agentWithModelServeWorkflow`;export{agentToolServeWorkflow,agentWithModelServeWorkflow};
|
|
@@ -23,9 +23,11 @@ export interface SandboxConnection<Extensions extends object = {}> {
|
|
|
23
23
|
* Runs `command` as a Bash login-shell script (`bash -lc`) in
|
|
24
24
|
* `workingDirectory`, with the sandbox's environment plus `env`. `env`
|
|
25
25
|
* holds only the per-call variables. Aborting kills the process tree.
|
|
26
|
+
* With `stdin`, return a process with a writable `stdin` or throw.
|
|
26
27
|
*/
|
|
27
28
|
spawn(options: {
|
|
28
29
|
readonly signal?: AbortSignal;
|
|
30
|
+
readonly stdin?: boolean;
|
|
29
31
|
readonly command: string;
|
|
30
32
|
readonly env: Readonly<Record<string, string>>;
|
|
31
33
|
readonly workingDirectory: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFile}from"node:fs/promises";import{join}from"node:path";import{resolveDiscoveryProject}from"#discover/project.js";import pc from"#compiled/picocolors/index.js";import{parseModelHelper}from"#shared/model-helper.js";import{
|
|
1
|
+
import{readFile}from"node:fs/promises";import{join}from"node:path";import{resolveDiscoveryProject}from"#discover/project.js";import pc from"#compiled/picocolors/index.js";import{parseModelHelper}from"#shared/model-helper.js";import{createCompiledRuntimeModelCatalogLoader}from"#compiler/model-catalog.js";import{discoverAgent}from"#discover/discover-agent.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{CHATGPT_MODEL_SELECTION_PREFIX}from"#shared/chatgpt-model.js";import{readModelSelectionFromSource}from"#source-change/apply-model-selection.js";import{createStaticSourceChange}from"#source-change/static-source-change.js";function formatApplyModelSettingsOutcome(e){return e.kind===`rejected`?e.message:e.kind===`unchanged`?`Model settings are already up to date.`:e.changed.length===1&&e.changed[0]===`model`&&e.model!==void 0?`Model changed to ${pc.bold(e.model)}. Live on your next prompt.`:`Model settings updated: ${e.changed.map(t=>t===`model`?`model ${e.model??`updated`}`:t===`reasoning`?`reasoning ${e.reasoning??`provider default`}`:`Fast mode ${e.fastMode?`on`:`off`}`).join(`, `)}. Live on your next prompt.`}async function changeAgentModelSettings(e){let{appRoot:t,patch:n}=e;if(n.model.kind===`set`){let e=await validateModelSlug(t,n.model.value);if(e!==null)return{kind:`rejected`,message:e}}let r=await resolveDiscoveryProject(t),{manifest:i}=await discoverAgent(r),a=await createStaticSourceChange(i).updateModelSettings(n);if(a.kind===`bail`)return{kind:`rejected`,message:`Couldn't edit ${a.at.logicalPath}: ${a.reason}. Change the model settings by hand.`};if(a.changed.length===0)return{kind:`unchanged`};let o={kind:`changed`,changed:a.changed};return n.model.kind===`set`&&(o.model=n.model.value),n.reasoning.kind!==`keep`&&(o.reasoning=n.reasoning.kind===`set`?n.reasoning.value:null),n.gatewayServiceTier.kind!==`keep`&&(o.fastMode=n.gatewayServiceTier.kind===`set`),o}async function changeAgentModel(e){let{appRoot:t,slug:n}=e,r=await validateModelSlug(t,n);return r===null?changeValidatedAgentModel(e):{kind:`rejected`,message:r}}async function changeValidatedAgentModel(e){let{appRoot:t,slug:n}=e,r=await resolveDiscoveryProject(t),{manifest:i}=await discoverAgent(r),a=await createStaticSourceChange(i).updateModelName(n);return a.kind===`bail`?{kind:`rejected`,message:`Couldn't edit ${a.at.logicalPath}: ${a.reason}. Change \`model\` by hand.`}:a.from===a.to?{kind:`unchanged`,model:a.to}:{kind:`changed`,to:a.to}}async function validateModelSlug(e,t){if(parseModelHelper(t)!==void 0)return null;if(t.startsWith(CHATGPT_MODEL_SELECTION_PREFIX))return"Choose a bare OpenAI model id after `chatgpt/`.";if(!t.includes(`/`))return`\`${t}\` isn't a provider/model id (e.g. anthropic/claude-sonnet-5).`;let n=createCompiledRuntimeModelCatalogLoader(e);try{if(await n.getModelLimits(formatLanguageModelGatewayId(t))===null)return`I couldn't confirm \`${t}\` in the AI Gateway model catalog, so I didn't change agent.ts.`}catch{return null}return null}async function readAuthoredModelSelection(e){let t=await resolveDiscoveryProject(e),{manifest:n}=await discoverAgent(t);if(!n.configModule)return;let r=await readFile(join(t.agentRoot,n.configModule.logicalPath),`utf8`);return readModelSelectionFromSource(r)}export{changeAgentModel,changeAgentModelSettings,changeValidatedAgentModel,formatApplyModelSettingsOutcome,readAuthoredModelSelection,validateModelSlug};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.137`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.84.
|
|
1
|
+
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.137`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.84.1`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{[SCAFFOLDED_AGENT_PATHS.config]:renderAgentTemplate(e,t),[SCAFFOLDED_AGENT_PATHS.channel]:WEB_CHANNEL_TEMPLATES.default,[SCAFFOLDED_AGENT_PATHS.instructions]:AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,t){let n=parseChatGptModelSelection(e);return n===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(n)}),\n${reasoningTemplateLine(t)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,t){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(t.model)!==void 0?renderAgentTemplate(t.model,t.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,t.appName).replaceAll(`__EVE_INIT_MODEL__`,t.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(t.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(t.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(t.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,t.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,t.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,t.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,t.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,t.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,t.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
|
|
2
2
|
|
|
3
3
|
export default defineAgent({
|
|
4
4
|
model: "__EVE_INIT_MODEL__",
|
|
@@ -68,7 +68,6 @@ export type ModelRouting = {
|
|
|
68
68
|
export type InternalAgentModelDefinition = {
|
|
69
69
|
id: string;
|
|
70
70
|
contextWindowTokens?: number;
|
|
71
|
-
maxOutputTokens?: number;
|
|
72
71
|
source?: ModuleSourceRef;
|
|
73
72
|
/** Field of the `source` agent config export that holds this model; absent means `model`. */
|
|
74
73
|
sourceField?: "compaction.model";
|