eve 0.64.1 → 0.65.0
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 +19 -0
- package/dist/src/channel/resolve-text.d.ts +11 -7
- package/dist/src/channel/resolve-text.js +1 -1
- package/dist/src/channel/types.d.ts +4 -5
- package/dist/src/chunks/{use-eve-agent-BdKlQF32.js → use-eve-agent-BIouJCii.js} +2 -10
- package/dist/src/chunks/{use-eve-agent-IIuxkn6y.js → use-eve-agent-BRvEh9sO.js} +2 -10
- package/dist/src/cli/dev/command-options.d.ts +1 -0
- package/dist/src/cli/dev/command.js +2 -2
- package/dist/src/cli/dev/local-server-process.js +1 -1
- package/dist/src/cli/dev/tui/blocks.d.ts +1 -1
- package/dist/src/cli/dev/tui/blocks.js +1 -1
- package/dist/src/cli/dev/tui/question-panel.d.ts +3 -2
- package/dist/src/cli/dev/tui/rail.d.ts +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +11 -12
- package/dist/src/cli/dev/tui/theme.d.ts +1 -1
- package/dist/src/cli/dev/tui/tool-presentation.d.ts +4 -4
- package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
- package/dist/src/client/agent-info-schema.d.ts +0 -2
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +1 -2
- package/dist/src/compiler/artifacts.d.ts +2 -0
- package/dist/src/compiler/artifacts.js +1 -1
- package/dist/src/compiler/bundled-extension.d.ts +17 -0
- package/dist/src/compiler/bundled-extension.js +1 -0
- package/dist/src/compiler/compile-agent.d.ts +4 -0
- package/dist/src/compiler/compile-agent.js +1 -1
- package/dist/src/compiler/compile-from-memory.js +1 -1
- package/dist/src/compiler/development-extensions.d.ts +23 -0
- package/dist/src/compiler/development-extensions.js +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/load-binding-namespace.js +1 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
- package/dist/src/compiler/normalize-manifest-types.d.ts +23 -0
- package/dist/src/compiler/normalize-manifest-types.js +1 -0
- package/dist/src/compiler/normalize-manifest.d.ts +2 -7
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/source-graph-paths.d.ts +2 -0
- package/dist/src/compiler/source-graph-paths.js +1 -0
- package/dist/src/compiler/source-graph.d.ts +4 -1
- package/dist/src/compiler/source-graph.js +1 -1
- package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
- package/dist/src/discover/bundled-extension.d.ts +11 -0
- package/dist/src/discover/bundled-extension.js +1 -0
- package/dist/src/discover/discover-agent.js +1 -1
- package/dist/src/discover/manifest.d.ts +5 -0
- package/dist/src/evals/assertions/collector.js +1 -1
- package/dist/src/evals/cli/eval.js +2 -2
- package/dist/src/evals/runner/artifacts.js +1 -1
- package/dist/src/evals/types.d.ts +2 -0
- package/dist/src/execution/coordination-dispatch-step.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/node-step.d.ts +2 -4
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/sandbox/glob-tool.js +1 -1
- package/dist/src/execution/sandbox/grep-tool.js +1 -1
- package/dist/src/execution/sandbox/read-file.js +1 -1
- package/dist/src/execution/session-workflow-tool-run.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/tools/ask-question-workflow.d.ts +11 -0
- package/dist/src/execution/tools/ask-question-workflow.js +1 -0
- package/dist/src/execution/tools/ask-question.d.ts +20 -0
- package/dist/src/execution/tools/ask-question.js +2 -0
- package/dist/src/execution/tools/file-state.d.ts +1 -7
- package/dist/src/execution/tools/file-state.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/tools/workflow/answer.d.ts +2 -0
- package/dist/src/execution/tools/workflow/answer.js +1 -1
- package/dist/src/execution/tools/workflow/ask.d.ts +3 -2
- package/dist/src/execution/tools/workflow/ask.js +1 -1
- package/dist/src/execution/tools/workflow/body.d.ts +5 -0
- package/dist/src/execution/tools/workflow/body.js +1 -1
- package/dist/src/execution/tools/workflow/cancel.d.ts +0 -4
- package/dist/src/execution/tools/workflow/cancel.js +1 -1
- package/dist/src/execution/tools/workflow/start.d.ts +1 -0
- package/dist/src/execution/tools/workflow/start.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/compaction-prompt.d.ts +0 -6
- package/dist/src/harness/compaction-prompt.js +2 -2
- package/dist/src/harness/compaction.js +1 -1
- package/dist/src/harness/hitl/approval-input-requests.d.ts +0 -2
- package/dist/src/harness/hitl/approval-input-requests.js +1 -1
- package/dist/src/harness/input-extraction.d.ts +4 -15
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-request-class.d.ts +0 -20
- package/dist/src/harness/input-request-class.js +1 -1
- package/dist/src/harness/input-requests.d.ts +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/pending-input-batches.d.ts +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +9 -1
- package/dist/src/harness/proxy-input-requests.js +1 -1
- package/dist/src/harness/stale-input-responses.d.ts +1 -2
- package/dist/src/harness/stale-input-responses.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tools.d.ts +0 -9
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/harness/types.d.ts +2 -9
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/authored-module-loader.js +1 -1
- package/dist/src/internal/development-programmatic-source-loader.d.ts +6 -0
- package/dist/src/internal/development-programmatic-source-loader.js +1 -0
- package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-rebuild-coordinator.d.ts +2 -0
- package/dist/src/internal/nitro/host/dev-authored-rebuild-coordinator.js +1 -1
- package/dist/src/internal/nitro/host/dev-workspace-extensions.js +1 -1
- package/dist/src/internal/nitro/host/prepare-application-host.d.ts +2 -0
- package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/host/types.d.ts +3 -0
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +0 -2
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
- package/dist/src/public/tools/ask-question.d.ts +1 -1
- package/dist/src/public/tools/ask-question.js +1 -1
- package/dist/src/runtime/agent/mock-model-fixtures.js +2 -2
- package/dist/src/self-modification/extension/subagents/agent/instructions.js +6 -2
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/input.d.ts +1 -6
- package/dist/src/subagents/hitl-proxy.d.ts +11 -1
- package/dist/src/subagents/hitl-proxy.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/behavior.d.ts +2 -5
- package/dist/src/tools/definition.d.ts +23 -5
- package/dist/src/tools/provided/ask-question.d.ts +18 -0
- package/dist/src/tools/provided/ask-question.js +1 -0
- package/dist/src/tools/provided/sleep.d.ts +2 -2
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/agent-config.md +11 -11
- package/docs/concepts/built-in-tools.md +16 -66
- package/docs/concepts/default-harness.md +1 -3
- package/docs/concepts/execution-model-and-durability.mdx +1 -1
- package/docs/concepts/sessions-runs-and-streaming.md +2 -2
- package/docs/evals/assertions.mdx +2 -2
- package/docs/evals/judge.mdx +3 -3
- package/docs/getting-started.mdx +1 -1
- package/docs/guides/dev-tui.md +1 -1
- package/docs/guides/evaluate.md +12 -9
- package/docs/guides/frontend/overview.mdx +1 -1
- package/docs/reference/cli.md +10 -7
- package/docs/reference/typescript-api.md +42 -41
- package/docs/skills.mdx +2 -0
- package/docs/subagents/index.mdx +7 -5
- package/docs/tools/human-in-the-loop.md +22 -11
- package/docs/tools/workflows.mdx +44 -19
- package/docs/tutorial/guard-the-spend.mdx +1 -1
- package/package.json +1 -9
- package/dist/src/cli/dev/tui/todo-panel.d.ts +0 -44
- package/dist/src/cli/dev/tui/todo-panel.js +0 -1
- package/dist/src/compiled/@workflow/builders/LICENSE.md +0 -201
- package/dist/src/compiled/@workflow/builders/index.d.ts +0 -62
- package/dist/src/compiled/@workflow/builders/index.js +0 -1
- package/dist/src/execution/compaction.d.ts +0 -14
- package/dist/src/execution/compaction.js +0 -1
- package/dist/src/execution/tools/todo.d.ts +0 -91
- package/dist/src/execution/tools/todo.js +0 -2
- package/dist/src/harness/hitl/question-input-requests.d.ts +0 -15
- package/dist/src/harness/hitl/question-input-requests.js +0 -1
- package/dist/src/harness/request-input-tool.d.ts +0 -4
- package/dist/src/harness/request-input-tool.js +0 -1
- package/dist/src/public/tools/todo.d.ts +0 -3
- package/dist/src/public/tools/todo.js +0 -1
- package/dist/src/tools/framework/ask-question.d.ts +0 -38
- package/dist/src/tools/framework/ask-question.js +0 -1
- package/dist/src/tools/provided/todo.d.ts +0 -8
- package/dist/src/tools/provided/todo.js +0 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DevelopmentExtensionSelection } from "#compiler/development-extensions.js";
|
|
1
2
|
import { DrainedNitroDevServer } from "#internal/nitro/host/drained-nitro-dev-server.js";
|
|
2
3
|
import type { PreparedDevelopmentApplicationHost } from "#internal/nitro/host/types.js";
|
|
3
4
|
export type DevelopmentRebuildKind = "structural" | "unchanged" | "runtime";
|
|
@@ -27,6 +28,7 @@ export interface DevelopmentAuthoredRebuildCoordinator {
|
|
|
27
28
|
}): Promise<DevelopmentRebuildResult>;
|
|
28
29
|
}
|
|
29
30
|
export declare function createDevelopmentAuthoredRebuildCoordinator(input: {
|
|
31
|
+
readonly developmentExtensions?: DevelopmentExtensionSelection;
|
|
30
32
|
readonly devServer: DrainedNitroDevServer;
|
|
31
33
|
readonly initialHost: PreparedDevelopmentApplicationHost;
|
|
32
34
|
}): Promise<DevelopmentAuthoredRebuildCoordinator>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{stageDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{usesParentDevelopmentWorkflowWorld}from"#internal/workflow/development-world-protocol.js";import{createDevelopmentApplicationNitro}from"#internal/nitro/host/create-application-nitro.js";import{prepareDevelopmentApplicationHost}from"#internal/nitro/host/prepare-application-host.js";import{buildDevelopmentHostCandidate}from"#internal/nitro/host/dev-host-candidate.js";import{computeDevelopmentHostFingerprint}from"#internal/nitro/host/dev-host-fingerprint.js";import{removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import"#internal/nitro/host/drained-nitro-dev-server.js";import{activateDevelopmentGeneration,discardDevelopmentGeneration}from"#internal/nitro/development-generation.js";var PostCommitDevelopmentRebuildError=class extends Error{constructor(e){super(`The development worker was replaced but its generation failed to activate. The server keeps serving the previous generation; the next rebuild retries activation.`,{cause:e}),this.name=`PostCommitDevelopmentRebuildError`}},DevelopmentWorkflowWorldChangeRequiresRestartError=class extends Error{constructor(){super(`Changing experimental.workflow.world between the parent-owned local World and a custom World requires restarting eve dev.`),this.name=`DevelopmentWorkflowWorldChangeRequiresRestartError`}};async function createDevelopmentAuthoredRebuildCoordinator(e){return new TransactionalDevelopmentAuthoredRebuildCoordinator({currentHostFingerprint:await computeDevelopmentHostFingerprint(e.initialHost),currentRuntimeFingerprint:e.initialHost.generation.fingerprint,devServer:e.devServer,initialHost:e.initialHost})}var TransactionalDevelopmentAuthoredRebuildCoordinator=class{#e;#t;#n;#r;#i;constructor(e){this.#e=e.initialHost,this.#t=e.currentHostFingerprint,this.#n=e.currentRuntimeFingerprint,this.#
|
|
1
|
+
import{stageDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{usesParentDevelopmentWorkflowWorld}from"#internal/workflow/development-world-protocol.js";import{createDevelopmentApplicationNitro}from"#internal/nitro/host/create-application-nitro.js";import{prepareDevelopmentApplicationHost}from"#internal/nitro/host/prepare-application-host.js";import{buildDevelopmentHostCandidate}from"#internal/nitro/host/dev-host-candidate.js";import{computeDevelopmentHostFingerprint}from"#internal/nitro/host/dev-host-fingerprint.js";import{removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import"#internal/nitro/host/drained-nitro-dev-server.js";import{activateDevelopmentGeneration,discardDevelopmentGeneration}from"#internal/nitro/development-generation.js";var PostCommitDevelopmentRebuildError=class extends Error{constructor(e){super(`The development worker was replaced but its generation failed to activate. The server keeps serving the previous generation; the next rebuild retries activation.`,{cause:e}),this.name=`PostCommitDevelopmentRebuildError`}},DevelopmentWorkflowWorldChangeRequiresRestartError=class extends Error{constructor(){super(`Changing experimental.workflow.world between the parent-owned local World and a custom World requires restarting eve dev.`),this.name=`DevelopmentWorkflowWorldChangeRequiresRestartError`}};async function createDevelopmentAuthoredRebuildCoordinator(e){return new TransactionalDevelopmentAuthoredRebuildCoordinator({currentHostFingerprint:await computeDevelopmentHostFingerprint(e.initialHost),developmentExtensions:e.developmentExtensions,currentRuntimeFingerprint:e.initialHost.generation.fingerprint,devServer:e.devServer,initialHost:e.initialHost})}var TransactionalDevelopmentAuthoredRebuildCoordinator=class{#e;#t;#n;#r;#i;#a;constructor(e){this.#e=e.initialHost,this.#t=e.currentHostFingerprint,this.#r=e.developmentExtensions,this.#n=e.currentRuntimeFingerprint,this.#i=e.devServer,this.#a=usesParentDevelopmentWorkflowWorld(e.initialHost.compileResult.manifest.config.experimental?.workflow?.world)}async rebuild(e){let t=this.#e,n=stageDevelopmentEnvironmentFiles(t.appRoot),r;try{if(r=await prepareDevelopmentApplicationHost(t.appRoot,{changedPaths:e.changedPaths,developmentExtensions:this.#r,previousExtensions:t.workspaceExtensions}),usesParentDevelopmentWorkflowWorld(r.compileResult.manifest.config.experimental?.workflow?.world)!==this.#a)throw new DevelopmentWorkflowWorldChangeRequiresRestartError;let i=await computeDevelopmentHostFingerprint(r),a=r.generation.fingerprint,o=i!==this.#t,s=a!==this.#n;if(!o&&!s){let e={...t,workspaceExtensions:r.workspaceExtensions};return await discardPreparedHost(r),r=void 0,this.#s(e,this.#t,this.#n),n.commit(),{host:e,kind:`unchanged`}}if(!o){await removeDevelopmentHostWorkspace(r.workspace);let e=retainActiveHostWorkspace(t,r);return await activateDevelopmentGeneration({appRoot:e.appRoot,generation:e.generation}),this.#s(e,i,a),r=void 0,n.commit(),{host:e,kind:`runtime`}}let c=await this.#o({hasRuntimeChange:s,nextHost:r,nextHostFingerprint:i,nextRuntimeFingerprint:a});return r=void 0,n.commit(),c}catch(e){throw e instanceof PostCommitDevelopmentRebuildError?(n.commit(),e):(n.rollback(),r===void 0?e:await discardFailedHost(e,r))}}async#o(e){let t=e.nextHost;e.hasRuntimeChange||(await discardDevelopmentGeneration(e.nextHost.generation),t={...e.nextHost,generation:this.#e.generation});let n=await createDevelopmentApplicationNitro(t),r=await buildDevelopmentHostCandidate({host:t,nitro:n}),i=t.workspace;if(await this.#i.replaceWorker({dispose:async()=>await removeDevelopmentHostWorkspace(i),entry:r.entry,workerData:r.workerData}),e.hasRuntimeChange)try{await activateDevelopmentGeneration({appRoot:t.appRoot,generation:t.generation})}catch(n){throw await discardDevelopmentGeneration(t.generation).catch(()=>void 0),this.#s({...t,generation:this.#e.generation},e.nextHostFingerprint,this.#n),new PostCommitDevelopmentRebuildError(n)}return this.#s(t,e.nextHostFingerprint,e.hasRuntimeChange?e.nextRuntimeFingerprint:this.#n),{host:t,kind:`structural`}}#s(e,t,n){this.#e=e,this.#t=t,this.#n=n}};function retainActiveHostWorkspace(e,t){return{...t,compiledArtifacts:e.compiledArtifacts,workflowBuildDir:e.workflowBuildDir,workspace:e.workspace}}async function discardPreparedHost(e){let t=(await Promise.allSettled([discardDevelopmentGeneration(e.generation),removeDevelopmentHostWorkspace(e.workspace)])).flatMap(e=>e.status===`rejected`?[e.reason]:[]);if(t.length>0)throw AggregateError(t,`Failed to discard development host "${e.workspace.rootDir}".`)}async function discardFailedHost(e,t){try{return await discardPreparedHost(t),e}catch(t){return AggregateError([e,t],`Development rebuild rollback failed.`,{cause:e})}}export{DevelopmentWorkflowWorldChangeRequiresRestartError,PostCommitDevelopmentRebuildError,createDevelopmentAuthoredRebuildCoordinator};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{realpath,stat}from"node:fs/promises";import{basename,dirname,join,resolve,sep}from"node:path";import{resolveDiscoveryProject}from"#discover/project.js";import{discoverExtensionMountDeclarations}from"#discover/discover-agent.js";import{buildExtensionPackage,tryReadExtensionBuildConfig}from"#internal/nitro/host/build-extension.js";import{
|
|
1
|
+
import{realpath,stat}from"node:fs/promises";import{basename,dirname,join,resolve,sep}from"node:path";import{resolveDiscoveryProject}from"#discover/project.js";import{discoverExtensionMountDeclarations}from"#discover/discover-agent.js";import{buildExtensionPackage,tryReadExtensionBuildConfig}from"#internal/nitro/host/build-extension.js";import{locateExtensionMountPackage}from"#discover/extensions.js";import{createDiskProjectSource}from"#discover/project-source.js";import{isAuthoredSourcePath,resolveDevelopmentSourceRoot}from"#internal/nitro/dev-runtime-source-snapshot.js";import{resolveTsConfigDependencyPaths}from"#internal/application/tsconfig-dependencies.js";async function prepareDevelopmentWorkspaceExtensions(e){let t=resolve(e.appRoot),n=await resolveDiscoveryProject(t),r=createDiskProjectSource(),i=await discoverExtensionMountGraph({agentRoot:n.agentRoot,source:r}),a=await toCanonicalPath(resolveDevelopmentSourceRoot(t)),o=new Map;for(let e of i){let n=await resolveWorkspaceExtension({appRoot:t,agentRoot:e.agentRoot,mount:e.mount,source:r,workspaceSourceRoot:a});n!==void 0&&o.set(n.packageRoot,n)}let s=[...o.values()].sort((e,t)=>e.packageRoot.localeCompare(t.packageRoot)),c=new Map(e.previousExtensions?.map(e=>[e.packageRoot,e])),l=e.changedPaths===void 0?void 0:await Promise.all(e.changedPaths.map(async e=>await toCanonicalPath(e))),u=e.previousExtensions===void 0||l?.length===0;return await Promise.all(s.map(async e=>{let t=c.get(e.packageRoot);(u===!0||t===void 0||!sameBuildInputs(t,e)||l?.some(t=>affectsExtensionBuild(t,e))===!0)&&await buildExtensionPackage(e.packageRoot,e.config)})),s}async function discoverExtensionMountGraph(e){let t=(await discoverExtensionMountDeclarations(e)).mounts.map(t=>({agentRoot:e.agentRoot,mount:t})),n=join(e.agentRoot,`subagents`);if(await e.source.stat(n)!==`directory`)return t;let r=await e.source.readDirectory(n),i=await Promise.all(r.filter(e=>e.isDirectory()).map(async t=>await discoverExtensionMountGraph({agentRoot:join(n,t.name),source:e.source})));return[...t,...i.flat()]}async function resolveWorkspaceExtension(e){let t=await locateExtensionMountPackage({source:e.source,agentRoot:e.agentRoot,appRoot:e.appRoot,mount:e.mount.mountRef,namespace:e.mount.namespace});if(t.location?.authoredSourceRoot===void 0)return;let n=await realpath(t.location.packageRoot).catch(()=>void 0);if(n===void 0||!isAuthoredSourcePath(n,e.workspaceSourceRoot))return;let r=await tryReadExtensionBuildConfig(n);if(r===null||(await stat(r.sourceRoot).catch(()=>void 0))?.isDirectory()!==!0)return;let i=[join(n,`package.json`),join(n,`tsconfig.json`),...await resolveTsConfigDependencyPaths(n)];return{config:r,packageRoot:n,buildConfigPaths:[...new Set(i.map(e=>resolve(e)))].sort((e,t)=>e.localeCompare(t))}}function affectsExtensionBuild(e,t){return isPathInsideOrEqual(e,t.config.sourceRoot)||t.buildConfigPaths.includes(e)}function sameBuildConfig(e,t){return e.sourceRoot===t.sourceRoot&&e.distRoot===t.distRoot&&e.outDir===t.outDir&&e.packageName===t.packageName&&e.shortName===t.shortName&&e.runtimeDependencies.length===t.runtimeDependencies.length&&e.runtimeDependencies.every((e,n)=>e===t.runtimeDependencies[n])}function sameBuildInputs(e,t){return sameBuildConfig(e.config,t.config)&&e.buildConfigPaths.length===t.buildConfigPaths.length&&e.buildConfigPaths.every((e,n)=>e===t.buildConfigPaths[n])}function isPathInsideOrEqual(e,t){let n=resolve(e),r=resolve(t);return n===r||n.startsWith(`${r}${sep}`)}async function toCanonicalPath(e){let t=resolve(e),n=[];for(;;)try{return join(await realpath(t),...n.reverse())}catch{let r=dirname(t);if(r===t)return resolve(e);n.push(basename(t)),t=r}}export{prepareDevelopmentWorkspaceExtensions};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DevelopmentExtensionSelection } from "#compiler/development-extensions.js";
|
|
1
2
|
import type { ApplicationBuildWorkspace } from "#internal/application/build-workspace.js";
|
|
2
3
|
import { type DevelopmentWorkspaceExtension } from "#internal/nitro/host/dev-workspace-extensions.js";
|
|
3
4
|
import type { PreparedApplicationHost, PreparedDevelopmentApplicationHost } from "#internal/nitro/host/types.js";
|
|
@@ -7,6 +8,7 @@ import type { PreparedApplicationHost, PreparedDevelopmentApplicationHost } from
|
|
|
7
8
|
*/
|
|
8
9
|
export declare function prepareDevelopmentApplicationHost(appRoot: string, options?: {
|
|
9
10
|
readonly changedPaths?: readonly string[];
|
|
11
|
+
readonly developmentExtensions?: DevelopmentExtensionSelection;
|
|
10
12
|
readonly previousExtensions?: readonly DevelopmentWorkspaceExtension[];
|
|
11
13
|
}): Promise<PreparedDevelopmentApplicationHost>;
|
|
12
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{join}from"node:path";import{createDevelopmentHostWorkspace,removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import{discardDevelopmentGeneration,stageDevelopmentGeneration}from"#internal/nitro/development-generation.js";import{createScheduleRegistrations}from"#runtime/schedules/register.js";import{resolveSchedules}from"#runtime/schedules/resolve-schedule.js";import{compileAgentInWorkspace}from"#compiler/compile-agent.js";import{writeCompiledArtifactsFiles,writeDevelopmentCompiledArtifactsFiles}from"#internal/application/compiled-artifacts.js";import{prepareDevelopmentWorkspaceExtensions}from"#internal/nitro/host/dev-workspace-extensions.js";async function prepareDevelopmentApplicationHost(e,t={}){let n={appRoot:e};t.changedPaths!==void 0&&(n.changedPaths=t.changedPaths),t.previousExtensions!==void 0&&(n.previousExtensions=t.previousExtensions);let r=await prepareDevelopmentWorkspaceExtensions(n),i=await createDevelopmentHostWorkspace(e),a;try{let
|
|
1
|
+
import{join}from"node:path";import{createDevelopmentHostWorkspace,removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import{discardDevelopmentGeneration,stageDevelopmentGeneration}from"#internal/nitro/development-generation.js";import{createScheduleRegistrations}from"#runtime/schedules/register.js";import{resolveSchedules}from"#runtime/schedules/resolve-schedule.js";import{compileAgentInWorkspace}from"#compiler/compile-agent.js";import{writeCompiledArtifactsFiles,writeDevelopmentCompiledArtifactsFiles}from"#internal/application/compiled-artifacts.js";import{prepareDevelopmentWorkspaceExtensions}from"#internal/nitro/host/dev-workspace-extensions.js";async function prepareDevelopmentApplicationHost(e,t={}){let n={appRoot:e};t.changedPaths!==void 0&&(n.changedPaths=t.changedPaths),t.previousExtensions!==void 0&&(n.previousExtensions=t.previousExtensions);let r=await prepareDevelopmentWorkspaceExtensions(n),i=await createDevelopmentHostWorkspace(e),a;try{let n=await compileAgentInWorkspace({artifactLocations:{publishedRoot:join(e,`.eve`),writeRoot:i.compilerArtifactsDir},developmentExtensions:t.developmentExtensions,startPath:e}),o=await resolveSchedules({manifest:n.manifest});return a=await stageDevelopmentGeneration(n),{...createPreparedApplicationHost({compileResult:n,compiledArtifacts:await writeDevelopmentCompiledArtifactsFiles({authoredWorkflowModules:a.authoredWorkflowModules,compileResult:n,outDir:i.artifactsDir,runtimeAppRoot:a.runtimeAppRoot}),schedules:o,workflowBuildDir:i.workflowBuildDir}),generation:a,workspaceExtensions:r,workspace:i}}catch(e){let t=[removeDevelopmentHostWorkspace(i)];a!==void 0&&t.push(discardDevelopmentGeneration(a));let n=(await Promise.allSettled(t)).flatMap(e=>e.status===`rejected`?[e.reason]:[]);throw n.length>0?AggregateError([e,...n],`Failed to prepare and discard a development host candidate.`,{cause:e}):e}}async function prepareProductionApplicationHost(e){let t=await compileAgentInWorkspace({artifactLocations:{publishedRoot:join(e.publication.output.finalDir,`.eve`),writeRoot:e.compiler.artifactsDir},startPath:e.appRoot}),n=await resolveSchedules({manifest:t.manifest});return createPreparedApplicationHost({compileResult:t,compiledArtifacts:await writeCompiledArtifactsFiles({compileResult:t,defaultWorkflowWorld:resolveProductionWorkflowWorldTarget(),outDir:e.host.artifactsDir}),schedules:n,workflowBuildDir:e.workflow.buildDir})}async function refreshProductionCompiledArtifacts(e,t){await writeCompiledArtifactsFiles({compileResult:e.compileResult,defaultWorkflowWorld:resolveProductionWorkflowWorldTarget(),outDir:t})}function createPreparedApplicationHost(e){return{appRoot:e.compileResult.project.appRoot,compileResult:e.compileResult,compiledArtifacts:e.compiledArtifacts,scheduleRegistrations:createScheduleRegistrations(e.schedules),schedules:e.schedules,workflowBuildDir:e.workflowBuildDir}}function resolveProductionWorkflowWorldTarget(){return process.env.VERCEL?`vercel`:`local`}export{prepareDevelopmentApplicationHost,prepareProductionApplicationHost,refreshProductionCompiledArtifacts};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{randomBytes}from"node:crypto";import{EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH}from"#protocol/routes.js";import{isLoopbackServerUrl}from"#shared/network-address.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{resolveDiscoveryProject}from"#discover/project.js";import{eveDevArguments}from"#setup/primitives/index.js";import{detectPackageManager}from"#setup/package-manager.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{readDevelopmentRuntimeArtifactsRevision}from"#services/dev-client/runtime-artifacts.js";import{EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV,createDevelopmentSandboxRunId}from"#execution/sandbox/development-run.js";import{pruneLocalSandboxTemplatesInBackground,stopDevelopmentSandboxResources}from"#execution/sandbox/bindings/local.js";import{EVE_DEV_ENV_FLAG}from"#internal/application/optional-package-install.js";import{toErrorMessage}from"#shared/errors.js";import{createDevelopmentApplicationNitro}from"#internal/nitro/host/create-application-nitro.js";import{prepareDevelopmentApplicationHost}from"#internal/nitro/host/prepare-application-host.js";import{buildDevelopmentHostCandidate}from"#internal/nitro/host/dev-host-candidate.js";import{removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import{DrainedNitroDevServer}from"#internal/nitro/host/drained-nitro-dev-server.js";import{activateDevelopmentGeneration,discardDevelopmentGeneration}from"#internal/nitro/development-generation.js";import{DEFAULT_DEVELOPMENT_SERVER_HOST,normalizeDevelopmentServerClientUrl}from"#internal/nitro/host/dev-server-url.js";import{handleDevelopmentModelCredentialRequest}from"#internal/model-auth/development-broker-server.js";import{createDevelopmentAuthoredRebuildCoordinator}from"#internal/nitro/host/dev-authored-rebuild-coordinator.js";import{DevelopmentServerState}from"#internal/nitro/host/dev-server-state.js";import{handleDevRuntimeArtifactsRequest}from"#internal/nitro/routes/dev-runtime-artifacts.js";import{DEFAULT_DEVELOPMENT_SERVER_PORT,MAX_DEVELOPMENT_SERVER_PORT_ATTEMPTS}from"#internal/nitro/host/ports.js";import{installLocalDevCapabilityEnvironment}from"#runtime/local-dev-capability.js";import{createDevelopmentWorkflowWorld,installWorkflowLocalQueueEnvironment,installWorkflowTransportEnvironment}from"#internal/nitro/host/dev-workflow-world-setup.js";const MAX_ALLOWED_DEVELOPMENT_SERVER_PORT=65535,PORT_ENV=`PORT`;async function isActiveDevelopmentServerForApp(e){try{let t=await resolveDiscoveryProject(e.appRoot),n=await new DevelopmentServerState(t).read();return n===void 0||!isLoopbackServerUrl(n)||!await isDevelopmentServerReady(n)?!1:new URL(n).origin===new URL(normalizeDevelopmentServerClientUrl(e.serverUrl)).origin}catch{return!1}}async function isDevelopmentServerReady(e){return await readDevelopmentRuntimeArtifactsRevision({serverUrl:e,timeoutMs:1e3})!==void 0}function isAddressInUseError(e){return e instanceof Error&&`code`in e&&e.code===`EADDRINUSE`}function resolveDevelopmentServerPort(e){let t=typeof e==`string`?Number(e):e??DEFAULT_DEVELOPMENT_SERVER_PORT;if(!Number.isInteger(t)||t<0||t>MAX_ALLOWED_DEVELOPMENT_SERVER_PORT)throw Error(`Invalid development server port "${String(e)}". Expected an integer between 0 and ${MAX_ALLOWED_DEVELOPMENT_SERVER_PORT}.`);return t}function readEnvironmentPort(){let e=process.env[PORT_ENV];if(e===void 0||e.trim()===``)return;let t=Number(e);if(!Number.isInteger(t)||t<0||t>MAX_ALLOWED_DEVELOPMENT_SERVER_PORT)throw Error(`Invalid ${PORT_ENV} environment variable "${e}". Expected an integer between 0 and ${MAX_ALLOWED_DEVELOPMENT_SERVER_PORT}.`);return t}async function detectDevelopmentCommandPackageManager(e){try{return(await detectPackageManager(e)).kind}catch{return`pnpm`}}async function formatDevelopmentServerConnectCommand(e,t){let n=await detectDevelopmentCommandPackageManager(e);return[n,...eveDevArguments(n),t].join(` `)}async function createDevelopmentServerAlreadyRunningError(e,t){let n=await formatDevelopmentServerConnectCommand(e,t);return Error([`A dev server is already running for this eve agent.`,`To connect to the existing instance, run: ${n}`].join(`
|
|
2
|
-
`))}function resolveDevelopmentServerPorts(e){let t=resolveDevelopmentServerPort(e.port);if(t===0||!e.retryOnAddressInUse)return[t];let n=[];for(let e=0;e<MAX_DEVELOPMENT_SERVER_PORT_ATTEMPTS;e+=1){let r=t+e;if(r>65535)break;n.push(r)}return n}function addDevelopmentControlHandler(e){e.devServer.setControlHandler(async t=>{let n=await handleDevelopmentModelCredentialRequest(t,{appRoot:e.appRoot,secret:e.transportSecret});if(n!==void 0)return n;let r=await e.workflowWorld?.handleRequest(t);if(r!==void 0)return r;let i=new URL(t.url);if(i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH&&t.method===`GET`)return handleDevRuntimeArtifactsRequest({appRoot:e.appRoot});let a=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH&&t.method===`POST`,o=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH&&t.method===`POST`,s=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH&&(t.method===`GET`||t.method===`POST`);if(!a&&!o&&!s)return;let c=e.getWatcher();if(c===void 0)return Response.json({error:`The development server is still starting.`},{status:503});let l=i.searchParams.get(`lease`);return(a||o)&&(l===null||l.length===0)?Response.json({error:`A suspension lease is required.`},{status:400}):a?(await c.suspend(l),Response.json({suspended:!0})):o?(await c.resume(l,{silent:i.searchParams.get(`silent`)===`1`}),handleDevRuntimeArtifactsRequest({appRoot:e.appRoot})):(i.searchParams.get(`force`)===`1`?await c.rebuild():await c.flush(),handleDevRuntimeArtifactsRequest({appRoot:e.appRoot}))})}async function closeDevelopmentServerResources(e){let t=[],attempt=async e=>{try{return await e(),!0}catch(e){return t.push(e),!1}},n=e.authoredSourceWatcher;n!==void 0&&await attempt(()=>n.close());let r=e.workflowWorld;r!==void 0&&await attempt(()=>r.close());let i=e.devServer,a=i===void 0||await attempt(()=>i.close()),o=e.nitro;return o!==void 0&&await attempt(()=>o.close()),await attempt(()=>stopDevelopmentSandboxResources({appRoot:e.appRoot,devRunId:e.developmentSandboxRunId,log:e=>console.warn(`[eve:dev] ${e}`)})),{errors:t,listenerClosed:a}}function createDevelopmentServerCleanupError(e){if(e.length!==0){if(e.length===1){let t=e[0];return t instanceof Error?t:Error(`Failed to close the development server: ${toErrorMessage(t)}`,{cause:t})}return AggregateError(e,`Multiple development-server resources failed to close.`)}}function createDevelopmentServerStartupCleanupError(e,t){return AggregateError([e,...t],`${toErrorMessage(e)} Cleanup also failed.`,{cause:e})}async function listenForDevelopmentServer(e){let t=resolveDevelopmentServerPorts({port:e.port,retryOnAddressInUse:e.retryOnAddressInUse}),n;for(let r of t){let t=e.devServer.listen({hostname:e.host,port:r});try{return await t.ready(),t}catch(r){if(n=r,await t.close().catch(()=>{}),!isAddressInUseError(r)||!e.retryOnAddressInUse)throw r}}throw Error(`Failed to start Nitro dev server after ${t.length} attempts. Tried ports ${t.join(`, `)}.`,{cause:n})}async function startNitroDevelopmentServer(e,t){process.env[EVE_DEV_ENV_FLAG]??=`1`;let n=await resolveDiscoveryProject(e);await loadDevelopmentEnvironmentFiles(
|
|
1
|
+
import{randomBytes}from"node:crypto";import{EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH}from"#protocol/routes.js";import{isLoopbackServerUrl}from"#shared/network-address.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{resolveDiscoveryProject}from"#discover/project.js";import{eveDevArguments}from"#setup/primitives/index.js";import{detectPackageManager}from"#setup/package-manager.js";import{defaultDevelopmentExtensions}from"#compiler/development-extensions.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{readDevelopmentRuntimeArtifactsRevision}from"#services/dev-client/runtime-artifacts.js";import{EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV,createDevelopmentSandboxRunId}from"#execution/sandbox/development-run.js";import{pruneLocalSandboxTemplatesInBackground,stopDevelopmentSandboxResources}from"#execution/sandbox/bindings/local.js";import{EVE_DEV_ENV_FLAG}from"#internal/application/optional-package-install.js";import{toErrorMessage}from"#shared/errors.js";import{createDevelopmentApplicationNitro}from"#internal/nitro/host/create-application-nitro.js";import{prepareDevelopmentApplicationHost}from"#internal/nitro/host/prepare-application-host.js";import{buildDevelopmentHostCandidate}from"#internal/nitro/host/dev-host-candidate.js";import{removeDevelopmentHostWorkspace}from"#internal/nitro/host/dev-host-workspace.js";import{DrainedNitroDevServer}from"#internal/nitro/host/drained-nitro-dev-server.js";import{activateDevelopmentGeneration,discardDevelopmentGeneration}from"#internal/nitro/development-generation.js";import{DEFAULT_DEVELOPMENT_SERVER_HOST,normalizeDevelopmentServerClientUrl}from"#internal/nitro/host/dev-server-url.js";import{handleDevelopmentModelCredentialRequest}from"#internal/model-auth/development-broker-server.js";import{createDevelopmentAuthoredRebuildCoordinator}from"#internal/nitro/host/dev-authored-rebuild-coordinator.js";import{DevelopmentServerState}from"#internal/nitro/host/dev-server-state.js";import{handleDevRuntimeArtifactsRequest}from"#internal/nitro/routes/dev-runtime-artifacts.js";import{DEFAULT_DEVELOPMENT_SERVER_PORT,MAX_DEVELOPMENT_SERVER_PORT_ATTEMPTS}from"#internal/nitro/host/ports.js";import{installLocalDevCapabilityEnvironment}from"#runtime/local-dev-capability.js";import{createDevelopmentWorkflowWorld,installWorkflowLocalQueueEnvironment,installWorkflowTransportEnvironment}from"#internal/nitro/host/dev-workflow-world-setup.js";const MAX_ALLOWED_DEVELOPMENT_SERVER_PORT=65535,PORT_ENV=`PORT`;async function isActiveDevelopmentServerForApp(e){try{let t=await resolveDiscoveryProject(e.appRoot),n=await new DevelopmentServerState(t).read();return n===void 0||!isLoopbackServerUrl(n)||!await isDevelopmentServerReady(n)?!1:new URL(n).origin===new URL(normalizeDevelopmentServerClientUrl(e.serverUrl)).origin}catch{return!1}}async function isDevelopmentServerReady(e){return await readDevelopmentRuntimeArtifactsRevision({serverUrl:e,timeoutMs:1e3})!==void 0}function isAddressInUseError(e){return e instanceof Error&&`code`in e&&e.code===`EADDRINUSE`}function resolveDevelopmentServerPort(e){let t=typeof e==`string`?Number(e):e??DEFAULT_DEVELOPMENT_SERVER_PORT;if(!Number.isInteger(t)||t<0||t>MAX_ALLOWED_DEVELOPMENT_SERVER_PORT)throw Error(`Invalid development server port "${String(e)}". Expected an integer between 0 and ${MAX_ALLOWED_DEVELOPMENT_SERVER_PORT}.`);return t}function readEnvironmentPort(){let e=process.env[PORT_ENV];if(e===void 0||e.trim()===``)return;let t=Number(e);if(!Number.isInteger(t)||t<0||t>MAX_ALLOWED_DEVELOPMENT_SERVER_PORT)throw Error(`Invalid ${PORT_ENV} environment variable "${e}". Expected an integer between 0 and ${MAX_ALLOWED_DEVELOPMENT_SERVER_PORT}.`);return t}async function detectDevelopmentCommandPackageManager(e){try{return(await detectPackageManager(e)).kind}catch{return`pnpm`}}async function formatDevelopmentServerConnectCommand(e,t){let n=await detectDevelopmentCommandPackageManager(e);return[n,...eveDevArguments(n),t].join(` `)}async function createDevelopmentServerAlreadyRunningError(e,t){let n=await formatDevelopmentServerConnectCommand(e,t);return Error([`A dev server is already running for this eve agent.`,`To connect to the existing instance, run: ${n}`].join(`
|
|
2
|
+
`))}function resolveDevelopmentServerPorts(e){let t=resolveDevelopmentServerPort(e.port);if(t===0||!e.retryOnAddressInUse)return[t];let n=[];for(let e=0;e<MAX_DEVELOPMENT_SERVER_PORT_ATTEMPTS;e+=1){let r=t+e;if(r>65535)break;n.push(r)}return n}function addDevelopmentControlHandler(e){e.devServer.setControlHandler(async t=>{let n=await handleDevelopmentModelCredentialRequest(t,{appRoot:e.appRoot,secret:e.transportSecret});if(n!==void 0)return n;let r=await e.workflowWorld?.handleRequest(t);if(r!==void 0)return r;let i=new URL(t.url);if(i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH&&t.method===`GET`)return handleDevRuntimeArtifactsRequest({appRoot:e.appRoot});let a=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH&&t.method===`POST`,o=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH&&t.method===`POST`,s=i.pathname===EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH&&(t.method===`GET`||t.method===`POST`);if(!a&&!o&&!s)return;let c=e.getWatcher();if(c===void 0)return Response.json({error:`The development server is still starting.`},{status:503});let l=i.searchParams.get(`lease`);return(a||o)&&(l===null||l.length===0)?Response.json({error:`A suspension lease is required.`},{status:400}):a?(await c.suspend(l),Response.json({suspended:!0})):o?(await c.resume(l,{silent:i.searchParams.get(`silent`)===`1`}),handleDevRuntimeArtifactsRequest({appRoot:e.appRoot})):(i.searchParams.get(`force`)===`1`?await c.rebuild():await c.flush(),handleDevRuntimeArtifactsRequest({appRoot:e.appRoot}))})}async function closeDevelopmentServerResources(e){let t=[],attempt=async e=>{try{return await e(),!0}catch(e){return t.push(e),!1}},n=e.authoredSourceWatcher;n!==void 0&&await attempt(()=>n.close());let r=e.workflowWorld;r!==void 0&&await attempt(()=>r.close());let i=e.devServer,a=i===void 0||await attempt(()=>i.close()),o=e.nitro;return o!==void 0&&await attempt(()=>o.close()),await attempt(()=>stopDevelopmentSandboxResources({appRoot:e.appRoot,devRunId:e.developmentSandboxRunId,log:e=>console.warn(`[eve:dev] ${e}`)})),{errors:t,listenerClosed:a}}function createDevelopmentServerCleanupError(e){if(e.length!==0){if(e.length===1){let t=e[0];return t instanceof Error?t:Error(`Failed to close the development server: ${toErrorMessage(t)}`,{cause:t})}return AggregateError(e,`Multiple development-server resources failed to close.`)}}function createDevelopmentServerStartupCleanupError(e,t){return AggregateError([e,...t],`${toErrorMessage(e)} Cleanup also failed.`,{cause:e})}async function listenForDevelopmentServer(e){let t=resolveDevelopmentServerPorts({port:e.port,retryOnAddressInUse:e.retryOnAddressInUse}),n;for(let r of t){let t=e.devServer.listen({hostname:e.host,port:r});try{return await t.ready(),t}catch(r){if(n=r,await t.close().catch(()=>{}),!isAddressInUseError(r)||!e.retryOnAddressInUse)throw r}}throw Error(`Failed to start Nitro dev server after ${t.length} attempts. Tried ports ${t.join(`, `)}.`,{cause:n})}async function startNitroDevelopmentServer(e,t){process.env[EVE_DEV_ENV_FLAG]??=`1`;let n=t.developmentExtensions??defaultDevelopmentExtensions(),r=await resolveDiscoveryProject(e);await loadDevelopmentEnvironmentFiles(r.appRoot);let i=readEnvironmentPort(),a=t.port??i,o=t.developmentExtensions!==void 0||t.host!==void 0||t.port!==void 0||i!==void 0,s=new DevelopmentServerState(r),c=await s.read();if(c!==void 0&&isLoopbackServerUrl(c)&&await isDevelopmentServerReady(c)){if(t.existing===`attach-if-unconfigured`&&!o)return{handle:{kind:`existing`,appRoot:r.appRoot,url:c},close:void 0};throw await createDevelopmentServerAlreadyRunningError(r.appRoot,c)}let l=process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV],u=createDevelopmentSandboxRunId();process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV]=u;let d,f,p,m,h,g,_,v,y=!1,b=!1;try{let e=await devBootPhase(`compiling agent`,()=>prepareDevelopmentApplicationHost(r.appRoot,{developmentExtensions:n}),t.onBootProgress);v=e,pruneLocalSandboxTemplatesInBackground(e.appRoot);let i=await devBootPhase(`creating dev server`,()=>createDevelopmentApplicationNitro(e),t.onBootProgress);d=i,f=new DrainedNitroDevServer(i.logger);let o=f,c=randomBytes(32).toString(`base64url`);o.setClientAddressSecret(c),h=installWorkflowTransportEnvironment(r.appRoot,c),g=createDevelopmentWorkflowWorld({appRoot:r.appRoot,preparedHost:e,transportSecret:c}),addDevelopmentControlHandler({appRoot:r.appRoot,devServer:o,getWatcher:()=>_,workflowWorld:g,transportSecret:c});let x=t.host??i.options.devServer.hostname??DEFAULT_DEVELOPMENT_SERVER_HOST,S=a===void 0,C=await devBootPhase(`binding port`,()=>listenForDevelopmentServer({devServer:o,host:x,port:a,retryOnAddressInUse:S}),t.onBootProgress);if(!C.url)throw Error(`Nitro dev server did not expose a URL.`);let w=normalizeDevelopmentServerClientUrl(C.url);m=installWorkflowLocalQueueEnvironment(w),p=installLocalDevCapabilityEnvironment({appRoot:r.appRoot,serverUrl:w}),await devBootPhase(`building dev bundle`,async()=>{let t=await buildDevelopmentHostCandidate({host:e,nitro:i});d=void 0;let n=e.workspace;b=!0,await o.replaceWorker({dispose:async()=>await removeDevelopmentHostWorkspace(n),entry:t.entry,workerData:t.workerData}),await activateDevelopmentGeneration({appRoot:e.appRoot,generation:e.generation}),y=!0},t.onBootProgress),await g?.start();let T=await createDevelopmentAuthoredRebuildCoordinator({developmentExtensions:n,devServer:o,initialHost:e});_=await devBootPhase(`starting file watcher`,async()=>{let{startAuthoredSourceWatcher:t}=await import(`#internal/nitro/host/dev-authored-source-watcher.js`);return t({coordinator:T,preparedHost:e})},t.onBootProgress),await s.write(w);let E=m;if(E===void 0)throw Error(`Workflow local queue environment was not initialized.`);let D=_,O=f,k=g,A=h,j=p,M;return{handle:{kind:`started`,appRoot:r.appRoot,url:w},close:()=>(M??=(async()=>{let e=await closeDevelopmentServerResources({appRoot:r.appRoot,authoredSourceWatcher:D,devServer:O,developmentSandboxRunId:u,nitro:void 0,workflowWorld:k});e.listenerClosed&&await s.remove().catch(()=>{});try{let t=createDevelopmentServerCleanupError(e.errors);if(t!==void 0)throw t}finally{E(),A?.(),j?.(),restoreDevelopmentSandboxRunId(l)}})(),M)}}catch(e){let t=await closeDevelopmentServerResources({appRoot:r.appRoot,authoredSourceWatcher:_,devServer:f,developmentSandboxRunId:u,nitro:d,workflowWorld:g}),n=[...t.errors];throw v!==void 0&&!y&&await discardDevelopmentGeneration(v.generation).catch(e=>{n.push(e)}),v!==void 0&&!b&&await removeDevelopmentHostWorkspace(v.workspace).catch(e=>{n.push(e)}),m?.(),h?.(),p?.(),t.listenerClosed&&await s.remove().catch(()=>{}),restoreDevelopmentSandboxRunId(l),n.length>0?createDevelopmentServerStartupCleanupError(e,n):e}}function createDevelopmentServer(e,t={}){let n,r;return{start(){if(n!==void 0)throw Error(`DevelopmentServer.start() was already called.`);return n=startNitroDevelopmentServer(e,t).then(({handle:e,close:t})=>(r=t,e)),n},async close(){n!==void 0&&(await n.catch(()=>void 0),await r?.())}}}function restoreDevelopmentSandboxRunId(e){if(e===void 0){delete process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV];return}process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV]=e}export{createDevelopmentServer,isActiveDevelopmentServerForApp,normalizeDevelopmentServerClientUrl};
|
|
@@ -3,6 +3,7 @@ import type { ScheduleRegistration } from "#runtime/schedules/register.js";
|
|
|
3
3
|
import type { ResolvedScheduleDefinition } from "#runtime/types.js";
|
|
4
4
|
import type { GeneratedCompiledArtifactsFiles } from "#internal/application/compiled-artifacts.js";
|
|
5
5
|
import type { DevBootProgressReporter } from "#internal/dev-boot-progress.js";
|
|
6
|
+
import type { DevelopmentExtensionSelection } from "#compiler/development-extensions.js";
|
|
6
7
|
import type { DevelopmentGeneration } from "#internal/nitro/development-generation.js";
|
|
7
8
|
import type { DevelopmentHostWorkspace } from "#internal/nitro/host/dev-host-workspace.js";
|
|
8
9
|
import type { DevelopmentWorkspaceExtension } from "#internal/nitro/host/dev-workspace-extensions.js";
|
|
@@ -56,6 +57,8 @@ export interface DevelopmentServer<H extends DevelopmentServerHandle = Developme
|
|
|
56
57
|
close(): Promise<void>;
|
|
57
58
|
}
|
|
58
59
|
export interface DevelopmentServerOptions {
|
|
60
|
+
/** Development-only source extensions. Defaults to the framework catalog. */
|
|
61
|
+
readonly developmentExtensions?: DevelopmentExtensionSelection;
|
|
59
62
|
readonly existing?: "attach-if-unconfigured" | "reject";
|
|
60
63
|
readonly host?: string;
|
|
61
64
|
readonly onBootProgress?: DevBootProgressReporter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveModelEndpointStatus}from"#internal/resolve-model-endpoint-status.js";import{ROOT_COMPILED_AGENT_NODE_ID}from"#compiler/manifest.js";function toChatGptEndpoint(e){if(e===void 0)return;let t={state:e.kind};return e.kind===`ready`&&e.accountLabel!==void 0?{...t,accountLabel:e.accountLabel}:t}function buildAgentInfoResponse(e,t){let{manifest:n}=e,r=toModuleSource(n,n.config.source);if(r.binding===void 0)throw Error(`Compiled config source "${n.config.source.sourceId}" has no binding.`);let i=collectCompositionDiagnostics(n),a=collectRemoteAgents(n);return{agent:{agentRoot:n.agentRoot,appRoot:n.appRoot,config:{...r,binding:r.binding},description:n.config.description,model:n.config.dynamicModel===void 0?{contextWindowTokens:n.config.model.contextWindowTokens,endpoint:resolveModelEndpointStatus(n.config.model.routing,t.gatewayCredentials,toChatGptEndpoint(t.chatgptAuth)),id:n.config.model.id,providerOptions:sanitizeProviderOptionsForInfo(n.config.model.providerOptions),reasoning:n.config.reasoning,routing:n.config.model.routing,source:n.config.model.source===void 0?void 0:toModuleSource(n,n.config.model.source)}:{reasoning:n.config.reasoning,routing:{kind:`dynamic`,resolver:renderDynamicResolver(n,{...n.config.dynamicModel,slug:`model`})}},name:n.config.name,nodeId:ROOT_COMPILED_AGENT_NODE_ID,outputSchema:n.config.outputSchema},capabilities:{devRoutes:t.mode===`development`},channels:{routes:n.channelRoutes.effective.map(e=>({...toModuleSource(n,e),adapterKind:e.adapterKind,method:e.method,name:e.name,urlPath:e.urlPath})),shadowed:[...n.channelRoutes.shadowed]},composition:i,connections:n.connections.map(e=>({...toModuleSource(n,e),connectionName:e.connectionName,description:e.description,hasApproval:!1,hasAuthorization:e.vercelConnect!==void 0,hasHeaders:!1,protocol:e.protocol,url:e.url})),diagnostics:{discoveryErrors:n.diagnosticsSummary.errors,discoveryWarnings:n.diagnosticsSummary.warnings},hooks:n.hooks.map(e=>({...toModuleSource(n,e),eventNames:[...e.eventNames],slug:e.slug})),instructions:{dynamic:n.dynamicInstructions.map(e=>renderDynamicResolver(n,e)),static:n.instructions.map(e=>({...toOwnedSource(n,e),content:e.content,name:e.name,role:e.role}))},kernelEffects:projectPreparedKernelEffects(n),kind:`eve-agent-info`,memories:n.memories.map(e=>({...toModuleSource(n,e),description:e.description,slot:e.slot,visibility:e.visibility})),mode:t.mode,remoteAgents:{entries:a,total:a.length},sandbox:{...toModuleSource(n,n.sandbox),provider:n.sandbox.providerName,environmentExportName:n.sandbox.environmentExportName,revisionHash:n.sandbox.revisionHash},schedules:n.schedules.map(e=>({...toOwnedSource(n,e),cron:e.cron,hasRun:e.hasRun,markdown:e.markdown,name:e.name})),skills:{dynamic:n.dynamicSkills.map(e=>renderDynamicResolver(n,e)),static:n.skills.map(e=>({...toOwnedSource(n,e),description:e.description,license:e.license,markdown:e.markdown,metadata:e.metadata,name:e.name}))},subagents:{local:n.subagents.map(e=>{let t={...toOwnedSource(n,e),description:e.description,entryPath:e.entryPath,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,rootPath:e.rootPath,summary:summarizeNode(e.agent)};return e.configResolver===void 0?t:{...t,configResolver:renderDynamicResolver(e.agent,{...e.configResolver,slug:`config`})}}),total:n.subagents.length},tools:{dynamic:n.dynamicTools.map(e=>renderDynamicResolver(n,e)),static:n.tools.map(e=>({...toModuleSource(n,e),description:e.description,hasAuth:!1,hasExecute:e.hasExecute,hasModelOutputProjection:e.hasModelOutputProjection,hasOutputSchema:e.outputSchema!==void 0,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema,requiresApproval:e.requiresApproval}))},version:5,workspace:{resourceRoot:n.workspaceResourceRoot,rootEntries:[...n.workspaceResourceRoot.rootEntries]}}}const CREDENTIAL_OPTION_KEY=/^(api[-_]?key|access[-_]?token|auth|authorization|bearer|client[-_]?secret|credentials?|headers|password|private[-_]?key|secret|token)$/i;function sanitizeProviderOptionsForInfo(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=redactCredentialOptions(r);return t}function redactCredentialOptions(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(n!==`byok`){if(CREDENTIAL_OPTION_KEY.test(n)){t[n]=`[redacted]`;continue}if(typeof r==`object`&&r){t[n]=Array.isArray(r)?r.map(e=>typeof e==`object`&&e&&!Array.isArray(e)?redactCredentialOptions(e):e):redactCredentialOptions(r);continue}t[n]=r}return t}function toModuleSource(e,t){let n=e.bindings[t.sourceId];if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no binding.`);return sourceProjection(t,n.owner,n)}function toOwnedSource(e,t){let n=e.bindings[t.sourceId],r=n?.owner??t.owner;if(r===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return sourceProjection(t,r,n)}function sourceProjection(e,t,n){let r={logicalPath:e.logicalPath,owner:t,sourceId:e.sourceId,sourceKind:toAgentInfoSourceKind(e.sourceKind)},i=n===void 0?void 0:{backing:n.backing,logicalPath:n.logicalPath,owner:n.owner};return n!==void 0&&e.exportName!==void 0?{...r,binding:i,exportName:e.exportName}:n===void 0?e.exportName===void 0?r:{...r,exportName:e.exportName}:{...r,binding:i}}function toAgentInfoSourceKind(e){switch(e){case`markdown`:case`module`:case`skill-package`:return e;default:throw Error(`Unsupported compiled source kind "${e}".`)}}function renderDynamicResolver(e,t){return{...toModuleSource(e,t),eventNames:[...t.eventNames],slug:t.slug}}function summarizeNode(e){return{channels:e.channelRoutes.effective.length,connections:e.connections.length,hooks:e.hooks.length,instructions:e.instructions.length,memories:e.memories.length,schedules:e.schedules.length,skills:e.skills.length,tools:e.tools.length}}function collectRemoteAgents(e){return[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.remoteAgents.map(e=>({...sourceProjection(e,e.owner,e.binding),description:e.description,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,url:e.url})))}function collectCompositionDiagnostics(e){let t=[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.sourceComposition.entries).map(e=>{let t={kind:e.kind,logicalPath:e.source.logicalPath,owner:e.source.owner,sourceId:e.source.sourceId};return e.kind===`shadowed`?{...t,winnerSourceId:e.winnerSourceId}:t});return{disabled:t.filter(e=>e.kind===`disabled`),shadowed:t.filter(e=>e.kind===`shadowed`)}}function projectPreparedKernelEffects(e){let t=[];for(let n of e.tools){let e=n.behavior,r=e?.handling;if(e!==void 0&&r!==void 0)switch(r.kind){case`dispatch`:t.push({action:r.action===`self-agent`?`subagent-call`:r.action,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;case`provider-tool`:t.push({audience:[...e.availability],kind:`provider-tool`,sourceId:n.sourceId});break;case`
|
|
1
|
+
import{resolveModelEndpointStatus}from"#internal/resolve-model-endpoint-status.js";import{ROOT_COMPILED_AGENT_NODE_ID}from"#compiler/manifest.js";function toChatGptEndpoint(e){if(e===void 0)return;let t={state:e.kind};return e.kind===`ready`&&e.accountLabel!==void 0?{...t,accountLabel:e.accountLabel}:t}function buildAgentInfoResponse(e,t){let{manifest:n}=e,r=toModuleSource(n,n.config.source);if(r.binding===void 0)throw Error(`Compiled config source "${n.config.source.sourceId}" has no binding.`);let i=collectCompositionDiagnostics(n),a=collectRemoteAgents(n);return{agent:{agentRoot:n.agentRoot,appRoot:n.appRoot,config:{...r,binding:r.binding},description:n.config.description,model:n.config.dynamicModel===void 0?{contextWindowTokens:n.config.model.contextWindowTokens,endpoint:resolveModelEndpointStatus(n.config.model.routing,t.gatewayCredentials,toChatGptEndpoint(t.chatgptAuth)),id:n.config.model.id,providerOptions:sanitizeProviderOptionsForInfo(n.config.model.providerOptions),reasoning:n.config.reasoning,routing:n.config.model.routing,source:n.config.model.source===void 0?void 0:toModuleSource(n,n.config.model.source)}:{reasoning:n.config.reasoning,routing:{kind:`dynamic`,resolver:renderDynamicResolver(n,{...n.config.dynamicModel,slug:`model`})}},name:n.config.name,nodeId:ROOT_COMPILED_AGENT_NODE_ID,outputSchema:n.config.outputSchema},capabilities:{devRoutes:t.mode===`development`},channels:{routes:n.channelRoutes.effective.map(e=>({...toModuleSource(n,e),adapterKind:e.adapterKind,method:e.method,name:e.name,urlPath:e.urlPath})),shadowed:[...n.channelRoutes.shadowed]},composition:i,connections:n.connections.map(e=>({...toModuleSource(n,e),connectionName:e.connectionName,description:e.description,hasApproval:!1,hasAuthorization:e.vercelConnect!==void 0,hasHeaders:!1,protocol:e.protocol,url:e.url})),diagnostics:{discoveryErrors:n.diagnosticsSummary.errors,discoveryWarnings:n.diagnosticsSummary.warnings},hooks:n.hooks.map(e=>({...toModuleSource(n,e),eventNames:[...e.eventNames],slug:e.slug})),instructions:{dynamic:n.dynamicInstructions.map(e=>renderDynamicResolver(n,e)),static:n.instructions.map(e=>({...toOwnedSource(n,e),content:e.content,name:e.name,role:e.role}))},kernelEffects:projectPreparedKernelEffects(n),kind:`eve-agent-info`,memories:n.memories.map(e=>({...toModuleSource(n,e),description:e.description,slot:e.slot,visibility:e.visibility})),mode:t.mode,remoteAgents:{entries:a,total:a.length},sandbox:{...toModuleSource(n,n.sandbox),provider:n.sandbox.providerName,environmentExportName:n.sandbox.environmentExportName,revisionHash:n.sandbox.revisionHash},schedules:n.schedules.map(e=>({...toOwnedSource(n,e),cron:e.cron,hasRun:e.hasRun,markdown:e.markdown,name:e.name})),skills:{dynamic:n.dynamicSkills.map(e=>renderDynamicResolver(n,e)),static:n.skills.map(e=>({...toOwnedSource(n,e),description:e.description,license:e.license,markdown:e.markdown,metadata:e.metadata,name:e.name}))},subagents:{local:n.subagents.map(e=>{let t={...toOwnedSource(n,e),description:e.description,entryPath:e.entryPath,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,rootPath:e.rootPath,summary:summarizeNode(e.agent)};return e.configResolver===void 0?t:{...t,configResolver:renderDynamicResolver(e.agent,{...e.configResolver,slug:`config`})}}),total:n.subagents.length},tools:{dynamic:n.dynamicTools.map(e=>renderDynamicResolver(n,e)),static:n.tools.map(e=>({...toModuleSource(n,e),description:e.description,hasAuth:!1,hasExecute:e.hasExecute,hasModelOutputProjection:e.hasModelOutputProjection,hasOutputSchema:e.outputSchema!==void 0,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema,requiresApproval:e.requiresApproval}))},version:5,workspace:{resourceRoot:n.workspaceResourceRoot,rootEntries:[...n.workspaceResourceRoot.rootEntries]}}}const CREDENTIAL_OPTION_KEY=/^(api[-_]?key|access[-_]?token|auth|authorization|bearer|client[-_]?secret|credentials?|headers|password|private[-_]?key|secret|token)$/i;function sanitizeProviderOptionsForInfo(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=redactCredentialOptions(r);return t}function redactCredentialOptions(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(n!==`byok`){if(CREDENTIAL_OPTION_KEY.test(n)){t[n]=`[redacted]`;continue}if(typeof r==`object`&&r){t[n]=Array.isArray(r)?r.map(e=>typeof e==`object`&&e&&!Array.isArray(e)?redactCredentialOptions(e):e):redactCredentialOptions(r);continue}t[n]=r}return t}function toModuleSource(e,t){let n=e.bindings[t.sourceId];if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no binding.`);return sourceProjection(t,n.owner,n)}function toOwnedSource(e,t){let n=e.bindings[t.sourceId],r=n?.owner??t.owner;if(r===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return sourceProjection(t,r,n)}function sourceProjection(e,t,n){let r={logicalPath:e.logicalPath,owner:t,sourceId:e.sourceId,sourceKind:toAgentInfoSourceKind(e.sourceKind)},i=n===void 0?void 0:{backing:n.backing,logicalPath:n.logicalPath,owner:n.owner};return n!==void 0&&e.exportName!==void 0?{...r,binding:i,exportName:e.exportName}:n===void 0?e.exportName===void 0?r:{...r,exportName:e.exportName}:{...r,binding:i}}function toAgentInfoSourceKind(e){switch(e){case`markdown`:case`module`:case`skill-package`:return e;default:throw Error(`Unsupported compiled source kind "${e}".`)}}function renderDynamicResolver(e,t){return{...toModuleSource(e,t),eventNames:[...t.eventNames],slug:t.slug}}function summarizeNode(e){return{channels:e.channelRoutes.effective.length,connections:e.connections.length,hooks:e.hooks.length,instructions:e.instructions.length,memories:e.memories.length,schedules:e.schedules.length,skills:e.skills.length,tools:e.tools.length}}function collectRemoteAgents(e){return[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.remoteAgents.map(e=>({...sourceProjection(e,e.owner,e.binding),description:e.description,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,url:e.url})))}function collectCompositionDiagnostics(e){let t=[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.sourceComposition.entries).map(e=>{let t={kind:e.kind,logicalPath:e.source.logicalPath,owner:e.source.owner,sourceId:e.source.sourceId};return e.kind===`shadowed`?{...t,winnerSourceId:e.winnerSourceId}:t});return{disabled:t.filter(e=>e.kind===`disabled`),shadowed:t.filter(e=>e.kind===`shadowed`)}}function projectPreparedKernelEffects(e){let t=[];for(let n of e.tools){let e=n.behavior,r=e?.handling;if(e!==void 0&&r!==void 0)switch(r.kind){case`dispatch`:t.push({action:r.action===`self-agent`?`subagent-call`:r.action,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;case`provider-tool`:t.push({audience:[...e.availability],kind:`provider-tool`,sourceId:n.sourceId});break;case`workflow-tool`:t.push({action:`workflow-tool-call`,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;default:throw Error(`Unsupported compiled tool handling: ${String(r)}`)}}return t}export{buildAgentInfoResponse};
|
|
@@ -26,7 +26,6 @@ export declare function applyWorkflowTransform(filename: string, source: string,
|
|
|
26
26
|
workflowManifest: WorkflowManifest;
|
|
27
27
|
}>;
|
|
28
28
|
export declare function isAuthoredApplicationModule(absolutePath: string, appRoot: string): boolean;
|
|
29
|
-
export declare function isAuthoredApplicationRoot(appRoot: string): boolean;
|
|
30
29
|
export declare function findWorkflowPatterns(filename: string, source: string): Promise<{
|
|
31
30
|
hasSerde: boolean;
|
|
32
31
|
hasUseStep: boolean;
|
|
@@ -36,4 +35,3 @@ export declare function getImportPath(filePath: string, projectRoot: string): {
|
|
|
36
35
|
importPath: string;
|
|
37
36
|
isPackage: boolean;
|
|
38
37
|
};
|
|
39
|
-
export declare function readSourceFile(path: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{dirname,isAbsolute,join,relative,resolve,sep}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";import{STABLE_WORKFLOW_NAMES}from"#execution/stable-workflow-names.js";import{prepareAuthoredWorkflowDirectives}from"#internal/workflow-bundle/authored-workflow-directives.js";import{SUBAGENT_TOOL_EXECUTE_WORKFLOW_NAME}from"#runtime/subagents/workflow-reference.js";import{findWorkflowDirectiveFunctions,stripJavaScriptExtension,transformWorkflowDirectives}from"#internal/workflow-bundle/workflow-transformer.js";const packageJsonCache=new Map,projectDepsCache=new Map;async function applyWorkflowTransform(e,t,n,r,i,a=new Set([...STABLE_WORKFLOW_NAMES,SUBAGENT_TOOL_EXECUTE_WORKFLOW_NAME])){let o=i??process.cwd(),s=r===void 0?isAbsolute(e)?e:join(o,e):r,{moduleSpecifier:c,stableModuleSpecifier:l}=resolveModuleSpecifier(s,o,n===`metadata`);if(r!==void 0&&isAuthoredApplicationModule(r,o)){let e=n===!1?void 0:await prepareAuthoredWorkflowDirectives({filePath:r,source:t});return transformWorkflowDirectives({authored:!0,authorizeSteps:!0,filename:authoredRelativePath(r,o),mode:e?.hasDirectives===!0&&n,moduleSpecifier:authoredModuleIdBase(r,o),source:e?.source??t,stableModuleSpecifier:void 0,stableWorkflowNames:a})}return transformWorkflowDirectives({authorizeSteps:isPackageTestFixtureModule(s),filename:e,mode:n,moduleSpecifier:c,source:t,stableModuleSpecifier:l,stableWorkflowNames:a})}function isPackageTestFixtureModule(e){return e.replace(/\\/g,`/`).includes(`/src/internal/testing/`)}function isAuthoredApplicationModule(e,t){let n=toRealPath(t).replace(/\\/g,`/`).replace(/\/$/,``),r=toRealPath(e).replace(/\\/g,`/`);return!r.startsWith(`${n}/`)||isInNodeModules(r)?!1:findPackageJson(r)?.name!==EVE_PACKAGE_NAME}function authoredRelativePath(e,t){return toRelativeImportPath(toRealPath(e),toRealPath(t)).replace(/^\.\//,``)}function authoredModuleIdBase(e,t){return`./${stripJavaScriptExtension(authoredRelativePath(e,t))}`}function toRealPath(e){try{return realpathSync(e)}catch{return resolve(e)}}async function findWorkflowPatterns(e,t){let n=await findWorkflowDirectiveFunctions(e,t);return{hasSerde:t.includes(`workflow.serde`)||t.includes(`@serde`)||t.includes(`workflowSerde`)||t.includes(`__workflow_serde`),hasUseStep:n.some(e=>e.directive===`use step`),hasUseWorkflow:n.some(e=>e.directive===`use workflow`)}}function getImportPath(e,t){let n=isInNodeModules(e),r=!n&&isWorkspacePackage(e,t);if(n||r){let n=findPackageJson(e);if(n!==null){let i=getProjectDependencies(t).has(n.name);if(!(r||i))return{importPath:toRelativeImportPath(e,t),isPackage:!1};let a=resolveExportSubpath(e,n);return a?{importPath:`${n.name}${a}`,isPackage:!0}:isRootEntrypointFile(e,n)?{importPath:n.name,isPackage:!0}:{importPath:toRelativeImportPath(e,t),isPackage:!1}}}return{importPath:toRelativeImportPath(e,t),isPackage:!1}}function resolveModuleSpecifier(e,t,n=!1){let r=isInNodeModules(e),i=!r&&isWorkspacePackage(e,t),a=findPackageJson(e);if(n&&a!==null)return{moduleSpecifier:`${a.name}@${a.version}`,stableModuleSpecifier:a.name};if(!r&&!i)return{moduleSpecifier:void 0,stableModuleSpecifier:a?.name===EVE_PACKAGE_NAME?EVE_PACKAGE_NAME:void 0};if(a===null)return{moduleSpecifier:void 0,stableModuleSpecifier:void 0};let o=resolveExportSubpath(e,a),s=o?`${a.name}${o}`:a.name;return{moduleSpecifier:`${s}@${a.version}`,stableModuleSpecifier:s}}function findPackageJson(e){let t=dirname(e),n=[];for(;t!==dirname(t);){let e=packageJsonCache.get(t);if(e!==void 0){for(let t of n)packageJsonCache.set(t,e);return e}n.push(t);let r=join(t,`package.json`);if(existsSync(r))try{let e=JSON.parse(readFileSync(r,`utf8`));if(typeof e.name==`string`&&typeof e.version==`string`){let r={dir:t,exports:e.exports,main:e.main,module:e.module,name:e.name,version:e.version};packageJsonCache.set(t,r);for(let e of n)packageJsonCache.set(e,r);return r}}catch{}t=dirname(t)}for(let e of n)packageJsonCache.set(e,null);return null}function resolveExportSubpath(e,t){if(t.exports===null||typeof t.exports!=`object`||Array.isArray(t.exports))return``;let n=e.replace(/\\/g,`/`),r=t.dir.replace(/\\/g,`/`),i=n.startsWith(`${r}/`)?`./${n.substring(r.length+1)}`:null;if(i===null)return``;for(let[e,n]of Object.entries(t.exports)){let t=resolveExportTarget(n);if(t!==null&&normalizeExportPath(t)===i)return e===`.`?``:e.substring(1)}return``}function resolveExportTarget(e){if(typeof e==`string`)return e;if(Array.isArray(e)){for(let t of e){let e=resolveExportTarget(t);if(e!==null)return e}return null}if(typeof e==`object`&&e)for(let t of[`workflow`,`default`,`require`,`import`,`node`]){let n=e[t],r=resolveExportTarget(n);if(r!==null)return r}return null}function normalizeExportPath(e){return e.startsWith(`./`)?e:`./${e}`}function isInNodeModules(e){return e.split(sep).join(`/`).includes(`/node_modules/`)}function getProjectDependencies(e){let t=projectDepsCache.get(e);if(t!==void 0)return t;let n=new Set,r=join(e,`package.json`);if(existsSync(r))try{let e=JSON.parse(readFileSync(r,`utf8`));for(let t of[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`]){let r=e[t];if(typeof r==`object`&&r&&!Array.isArray(r))for(let e of Object.keys(r))n.add(e)}}catch{}return projectDepsCache.set(e,n),n}function isWorkspacePackage(e,t){if(isInNodeModules(e))return!1;let n=findPackageJson(e);return n===null||resolve(n.dir)===resolve(t)?!1:getProjectDependencies(t).has(n.name)}function toRelativeImportPath(e,t){let n=t.replace(/\\/g,`/`),r=e.replace(/\\/g,`/`),i=r.startsWith(`${n}/`)?r.substring(n.length+1):relative(t,e).replace(/\\/g,`/`);return i.startsWith(`.`)||(i=`./${i}`),i}function hasRootExport(e){if(typeof e==`string`||Array.isArray(e))return!0;if(typeof e!=`object`||!e)return!1;let t=Object.keys(e);return t.length>0&&t.every(e=>!e.startsWith(`.`))?!0:`.`in e}function normalizePackageTargetPath(e){let t=e.replace(/\\/g,`/`);return t.startsWith(`./`)?t.substring(2):t.startsWith(`/`)?t.substring(1):t}function isRootEntrypointFile(e,t){let n=e.replace(/\\/g,`/`),r=t.dir.replace(/\\/g,`/`);if(!n.startsWith(`${r}/`))return!1;let i=n.substring(r.length+1);if(t.exports!==void 0){let e;if(t.exports!==null&&typeof t.exports==`object`&&`.`in t.exports)e=t.exports[`.`];else if(hasRootExport(t.exports))e=t.exports;else return!1;let n=resolveExportTarget(e);return n!==null&&normalizePackageTargetPath(n)===i}return[t.module,t.main,`index.js`,`index.mjs`,`index.cjs`,`index.ts`,`index.mts`,`index.cts`].flatMap(e=>typeof e==`string`?[normalizePackageTargetPath(e)]:[]).includes(i)}export{applyWorkflowTransform,findWorkflowPatterns,getImportPath,isAuthoredApplicationModule};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { type AskQuestionInput, type AskQuestionOutput, askQuestion, } from "#tools/provided/ask-question.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{askQuestion
|
|
1
|
+
import{askQuestion}from"#tools/provided/ask-question.js";export{askQuestion};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";import{getPromptContentText,isAgentsAnnouncementText}from"#runtime/agent/bootstrap-model-utils.js";import{createJsonSchemaSample}from"#runtime/agent/mock-structured-output.js";function createMockAuthoredToolInput(e,t,n){let r=getToolInputPropertyNames(e.inputSchema);if(
|
|
1
|
+
import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";import{getPromptContentText,isAgentsAnnouncementText}from"#runtime/agent/bootstrap-model-utils.js";import{createJsonSchemaSample}from"#runtime/agent/mock-structured-output.js";function createMockAuthoredToolInput(e,t,n){let r=getToolInputPropertyNames(e.inputSchema);if(r.includes(`question`))return createQuestionInput(t);if(r.includes(`command`))return{command:resolveShellCommand(t)};if(r.includes(`topic`)||!hasDeclaredInputProperties(e.inputSchema)&&/\btopic\b/u.test(normalizeText(t)))return{topic:resolveLookupTopic(t)};let i=extractAnchoredInputs(r,t);if(Object.keys(i).length>0)return i;if(r.length===1&&r[0]===`message`)return{message:t};if(r.includes(`city`)||!hasDeclaredInputProperties(e.inputSchema))return{city:n};let a=createJsonSchemaSample(e.inputSchema);return isRecord(a)?a:{}}function extractAnchoredInputs(e,t){let n={};for(let r of e){let e=RegExp(`\\b${escapeRegExp(r)}\\b\\s*(?:to|=|:)?\\s*(?:\`([^\`]+)\`|"([^"]+)"|'([^']+)')`,`iu`).exec(t),i=e?.[1]??e?.[2]??e?.[3];i!==void 0&&(n[r]=i.trim())}return n}function escapeRegExp(e){return e.replace(/[$()*+.?[\\\]^{|}]/gu,String.raw`\$&`)}function resolveMockFixtureToken(e){let t=e.filter(e=>e.role===`system`).map(e=>getPromptContentText(e.content)).join(`
|
|
2
2
|
`),n=[...getLoadedSkillResultTexts(e),t,getTrailingUserText(e)];for(let e of n){let t=resolveExactFixtureReply(e);if(t!==null)return t}return null}function resolveWeatherCity(e){let t=/"city"\s*:\s*"([^"]+)"/u.exec(e);return t?.[1]?t[1].trim():(/\b(?:in|for)\s+([A-Za-z][A-Za-z\s.-]*?)(?:[?.!,]|$)/u.exec(e)??/\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)\b/u.exec(e))?.[1]?.trim()||`Brooklyn`}function formatToolOutput(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function getTrailingUserText(e){let t=[];for(let n of[...e].reverse()){if(n.role===`system`)continue;if(n.role!==`user`)break;let e=getPromptContentText(n.content);isAgentsAnnouncementText(e.trim())||t.unshift(e)}return t.join(`
|
|
3
|
-
`)}function getLoadedSkillResultTexts(e){return e.flatMap(e=>e.role!==`tool`&&e.role!==`assistant`?[]:(typeof e.content==`string`?[e.content]:e.content).flatMap(e=>typeof e==`string`||e.type!==`tool-result`||e.toolName!==LOAD_SKILL_TOOL_NAME||e.output.type===`execution-denied`?[]:[formatToolOutput(e.output.value)]))}function resolveExactFixtureReply(e){let t=matchExactValue(/\breply\s+with\s+the\s+exact\s+string\s+(`([^`]+)`|"([^"]+)"|'([^']+)'|([^\s.]+))\s+and\s+nothing\s+else\b/iu,e);if(t!==null)return t;let n=e.split(/\r?\n/u);for(let e=0;e<n.length;e+=1){let t=n[e]?.trim()??``,r=/\breply\s+with\s+exactly(?:\s+the\s+following\s+text\s+and\s+nothing\s+else)?:\s*(.+)$/iu.exec(t);if(r?.[1])return cleanExactValue(r[1]);if(/\breply\s+with\s+exactly\s+the\s+following\s+text\s+and\s+nothing\s+else:\s*$/iu.test(t)||/\breply\s+with\s+exactly:\s*$/iu.test(t)){let t=n.slice(e+1).map(e=>e.trim()).find(e=>e.length>0);if(t!==void 0)return cleanExactValue(t)}}return matchExactValue(/\binclude\s+the\s+exact\s+token\s+(`([^`]+)`|"([^"]+)"|'([^']+)'|([^\s.]+))\s+verbatim\b/iu,e)}function matchExactValue(e,t){let n=e.exec(t);return n===null?null:cleanExactValue(n[2]??n[3]??n[4]??n[5]??n[1]??``)}function cleanExactValue(e){return e.trim()}function getToolInputPropertyNames(e){return!isRecord(e)||!isRecord(e.properties)?[]:Object.keys(e.properties)}function hasDeclaredInputProperties(e){return isRecord(e)&&isRecord(e.properties)}function
|
|
3
|
+
`)}function getLoadedSkillResultTexts(e){return e.flatMap(e=>e.role!==`tool`&&e.role!==`assistant`?[]:(typeof e.content==`string`?[e.content]:e.content).flatMap(e=>typeof e==`string`||e.type!==`tool-result`||e.toolName!==LOAD_SKILL_TOOL_NAME||e.output.type===`execution-denied`?[]:[formatToolOutput(e.output.value)]))}function resolveExactFixtureReply(e){let t=matchExactValue(/\breply\s+with\s+the\s+exact\s+string\s+(`([^`]+)`|"([^"]+)"|'([^']+)'|([^\s.]+))\s+and\s+nothing\s+else\b/iu,e);if(t!==null)return t;let n=e.split(/\r?\n/u);for(let e=0;e<n.length;e+=1){let t=n[e]?.trim()??``,r=/\breply\s+with\s+exactly(?:\s+the\s+following\s+text\s+and\s+nothing\s+else)?:\s*(.+)$/iu.exec(t);if(r?.[1])return cleanExactValue(r[1]);if(/\breply\s+with\s+exactly\s+the\s+following\s+text\s+and\s+nothing\s+else:\s*$/iu.test(t)||/\breply\s+with\s+exactly:\s*$/iu.test(t)){let t=n.slice(e+1).map(e=>e.trim()).find(e=>e.length>0);if(t!==void 0)return cleanExactValue(t)}}return matchExactValue(/\binclude\s+the\s+exact\s+token\s+(`([^`]+)`|"([^"]+)"|'([^']+)'|([^\s.]+))\s+verbatim\b/iu,e)}function matchExactValue(e,t){let n=e.exec(t);return n===null?null:cleanExactValue(n[2]??n[3]??n[4]??n[5]??n[1]??``)}function cleanExactValue(e){return e.trim()}function getToolInputPropertyNames(e){return!isRecord(e)||!isRecord(e.properties)?[]:Object.keys(e.properties)}function hasDeclaredInputProperties(e){return isRecord(e)&&isRecord(e.properties)}function createQuestionInput(e){let t=parseOptionLabels(e);return{question:resolveQuestionPrompt(e),...t.length>=2&&{options:t.map(e=>({description:`Choose ${e}.`,label:e}))}}}function parseOptionLabels(e){return[...e.matchAll(/\blabel\b\s*:?\s*"([^"]+)"/giu)].map(e=>e[1]??``)}function resolveQuestionPrompt(e){let t=/\b(?:set\s+)?question\s+to:\s*'([^']+)'/iu.exec(e)??/\b(?:set\s+)?question\s+to:\s*"([^"]+)"/iu.exec(e);return t?.[1]?t[1].trim():/\bask(?:\s+me)?\s+(?:to\s+)?(.+?)(?:\.|$)/iu.exec(e)?.[1]?.trim()||`Please choose an option.`}function resolveShellCommand(e){let t=/`([^`]+)`/u.exec(e);return t?.[1]?t[1].trim():(/\b(?:run|command)\s+["']([^"']+)["']/iu.exec(e)??/\bcommand\s+(.+?)(?:\.|$)/iu.exec(e))?.[1]?.trim()||`pwd`}function resolveLookupTopic(e){return/\btopic\s+['"]?([A-Za-z0-9_.-]+)['"]?/u.exec(e)?.[1]??`demo`}function normalizeText(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu,` `).trim()}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{createMockAuthoredToolInput,formatToolOutput,resolveMockFixtureToken,resolveWeatherCity};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{resolveSelfModificationConfig}from"../../../config.js";import extension_default from"../../extension.js";import{resolveSelfModificationMode}from"../../../mode.js";import{defineDynamic,defineInstructions}from"eve/instructions";function
|
|
1
|
+
import{resolveSelfModificationConfig}from"../../../config.js";import extension_default from"../../extension.js";import{resolveSelfModificationMode}from"../../../mode.js";import{defineDynamic,defineInstructions}from"eve/instructions";function readTrace(e){return e.data?.trace}function localTraceGuidance(e){let t=readTrace(e);return t===void 0?``:`The invoking trace has ID ${t.traceId}. ${(t.traceFlags&1)==1?`If local segments were captured,`:`This trace was not sampled, so local segments may be absent. If any are present,`} inspect them at /traces/${t.traceId}.`}function renderInstructions(e){return e.filter(e=>e.length>0).join(`
|
|
2
2
|
|
|
3
3
|
`)}var instructions_default=defineDynamic({events:{"session.started":e=>{let t=resolveSelfModificationMode(resolveSelfModificationConfig(extension_default.config));return t!==`local`&&t!==`deployed`?null:defineInstructions({markdown:renderInstructions([`## Role
|
|
4
4
|
|
|
@@ -6,7 +6,11 @@ You are an expert coding assistant operating inside of an eve agent. You help us
|
|
|
6
6
|
|
|
7
7
|
The source code of the eve agent is mounted read-write at /source. /source is the authored agent directory. Locate source files with bash. Read source contents with read_file, not shell commands. Before generating an overwrite, ensure read_file has succeeded for that path. Shell reads do not satisfy write_file's read-before-write requirement. edit_file instead validates exact matches against current contents. Never modify source files with bash, sed, awk, redirection, or scripting.
|
|
8
8
|
|
|
9
|
-
Resolve named tools by filename under /source/tools before searching contents. Tool identifiers derive from filenames and may not occur in the implementation
|
|
9
|
+
Resolve named tools by filename under /source/tools before searching contents. Tool identifiers derive from filenames and may not occur in the implementation.`,`## Configure this subagent
|
|
10
|
+
|
|
11
|
+
Configure this self-modification subagent's model, reasoning, and policy only through its authored mount. Check /source/extensions/self-modification.ts and /source/extensions/self-modification/extension.ts; modify whichever exists. If neither file exists, this subagent is the bundled eve development default and is using the default settings: first call registry_add with the exact address eve/self-modification to scaffold the authored mount. This known scaffold does not require search_registry.
|
|
12
|
+
|
|
13
|
+
After registry_add reports successful installation, try to read /source/extensions/self-modification.ts and /source/extensions/self-modification/extension.ts. If either is available, modify it. If neither is yet available, you may need to wait for the next turn, by asking the requester to confirm.`,`## Implement changes
|
|
10
14
|
|
|
11
15
|
Use edit_file for localized changes; include only the unique matching text. For a complete rewrite, use read_file then write_file; do not encode the whole old file as one replacement. If tool arguments fail argument parsing, retry the same tool with corrected encoding.
|
|
12
16
|
|
|
@@ -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_APP_TEMPLATE_FILES}from"./web-template.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.105`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.
|
|
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_APP_TEMPLATE_FILES}from"./web-template.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.105`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.65.0`,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{"agent/agent.ts":renderAgentTemplate(e,t),"agent/channels/eve.ts":WEB_APP_TEMPLATE_FILES[`agent/channels/eve.ts`],"agent/instructions.md":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__",
|
|
@@ -3,12 +3,7 @@ import { z } from "#compiled/zod/index.js";
|
|
|
3
3
|
* One selectable option presented to the user in an input request.
|
|
4
4
|
*/
|
|
5
5
|
export type InputOption = z.infer<typeof inputOptionSchema>;
|
|
6
|
-
/**
|
|
7
|
-
* Zod schema for one input option.
|
|
8
|
-
*
|
|
9
|
-
* Includes descriptions because the `ask_question` tool input embeds this
|
|
10
|
-
* schema and exposes it directly to the model.
|
|
11
|
-
*/
|
|
6
|
+
/** Zod schema for one input option. */
|
|
12
7
|
export declare const inputOptionSchema: z.ZodObject<{
|
|
13
8
|
description: z.ZodOptional<z.ZodString>;
|
|
14
9
|
id: z.ZodString;
|
|
@@ -24,6 +24,8 @@ export interface RoutedChildDelivery {
|
|
|
24
24
|
readonly childContinuationToken: string;
|
|
25
25
|
readonly childSessionInbox?: SessionInboxAddress;
|
|
26
26
|
readonly childResponseUrl?: string;
|
|
27
|
+
/** Answer-hook requests the user moved past; each hook resumes as `dismissed`. */
|
|
28
|
+
readonly dismissedRequestIds?: readonly string[];
|
|
27
29
|
readonly payload: {
|
|
28
30
|
readonly inputResponses: readonly InputResponse[];
|
|
29
31
|
};
|
|
@@ -44,9 +46,17 @@ export interface RoutedDeliverPayload {
|
|
|
44
46
|
readonly kind: "cancel-turn";
|
|
45
47
|
} | undefined;
|
|
46
48
|
}
|
|
47
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Splits a deliver payload into parent-local and proxied-child buckets.
|
|
51
|
+
*
|
|
52
|
+
* With `resolveMessage`, a plain-text message is also resolved against pending
|
|
53
|
+
* `ctx.ask()` questions: when exactly one question is pending, a matching option or
|
|
54
|
+
* permitted free text answers it and consumes the message. Otherwise the
|
|
55
|
+
* message dismisses every `dismissible` question and stays with the parent.
|
|
56
|
+
*/
|
|
48
57
|
export declare function routeDeliverPayload(input: {
|
|
49
58
|
readonly allowRoute?: (requestId: string, route: ProxyInputRequest) => boolean;
|
|
50
59
|
readonly payload: DeliverPayload;
|
|
60
|
+
readonly resolveMessage?: boolean;
|
|
51
61
|
readonly state: SessionStateMap | undefined;
|
|
52
62
|
}): RoutedDeliverPayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createInputRequestedEvent}from"#protocol/message.js";import{emitTurnEpilogue,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,turnId:e.hookPayload.event.turnId}));let t=e.session;if(e.mode===`conversation`){let n=getHarnessEmissionState(e.session.state),r=await emitTurnEpilogue(e.emit,n,e.mode);t=setHarnessEmissionState(e.session,r)}return{entries:toProxyInputRequestEntries(e.hookPayload),session:t}}function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),
|
|
1
|
+
import{createInputRequestedEvent}from"#protocol/message.js";import{resolveTextToResponse}from"#channel/resolve-text.js";import{emitTurnEpilogue,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,turnId:e.hookPayload.event.turnId}));let t=e.session;if(e.mode===`conversation`){let n=getHarnessEmissionState(e.session.state),r=await emitTurnEpilogue(e.emit,n,e.mode);t=setHarnessEmissionState(e.session,r)}return{entries:toProxyInputRequestEntries(e.hookPayload),session:t}}function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),routable=(t,n)=>n!==void 0&&e.allowRoute?.(t,n)!==!1,n=resolveMessageAgainstQuestions({enabled:e.resolveMessage===!0,entries:t,payload:e.payload,routable}),r=[...e.payload.inputResponses??[],...n.responses],i=new Map,a=[],o,bucketFor=e=>{let t=[e.childContinuationToken,e.childSessionInbox?.sessionId??``,e.childResponseUrl??`local`,e.taskId??``].join(`\0`),n=i.get(t);if(n!==void 0)return n;let r={childContinuationToken:e.childContinuationToken,dismissedRequestIds:[],parentRequestIds:[],responses:[],routes:[],...e.childSessionInbox!==void 0&&{childSessionInbox:e.childSessionInbox},...e.answerHook!==void 0&&{answerHook:e.answerHook},...e.childResponseUrl!==void 0&&{childResponseUrl:e.childResponseUrl},...e.taskId!==void 0&&{taskId:e.taskId}};return i.set(t,r),r},s=new Set;for(let e of r){let n=t.get(e.requestId);if(n===void 0||!routable(e.requestId,n)){a.push(e);continue}if(s.has(e.requestId))continue;s.add(e.requestId),n.kind===`session-limit`&&e.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(o={kind:`cancel-turn`});let r=bucketFor(n);r.parentRequestIds.push(e.requestId),r.responses.push(toChildInputResponse(e,n)),r.routes.push(n)}for(let e of n.dismissedRequestIds){let n=t.get(e);n!==void 0&&bucketFor(n).dismissedRequestIds.push(e)}let c=[...i.values()].map(({answerHook:e,childContinuationToken:n,childSessionInbox:r,childResponseUrl:i,dismissedRequestIds:a,parentRequestIds:o,responses:s,routes:c,taskId:l})=>{let u=new Set(o),d=new Set([...u,...a]);for(let e of c)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:n,entries:t,responseIds:u}))for(let t of e.batch.requestIds)d.add(t);return{childContinuationToken:n,payload:{inputResponses:s},retireRequestIds:[...d],...a.length>0&&{dismissedRequestIds:a},...r!==void 0&&{childSessionInbox:r},...e!==void 0&&{answerHook:e},...i!==void 0&&{childResponseUrl:i},...l!==void 0&&{taskId:l}}}),l={};for(let[t,r]of Object.entries(e.payload))t!==`inputResponses`&&r!==void 0&&(t===`message`&&n.consumed||(l[t]=r));return a.length>0&&(l.inputResponses=a),{forChildren:c,forSelf:Object.keys(l).length>0?l:void 0,parentAction:o}}function resolveMessageAgainstQuestions(e){let t={consumed:!1,dismissedRequestIds:[],responses:[]};if(!e.enabled||(e.payload.inputResponses?.length??0)>0||e.payload.message===void 0)return t;let n=[...e.entries].filter(([t,n])=>n.kind===`question`&&e.routable(t,n)),r=n.flatMap(([e,t])=>{let n=t.answerHook?.question;return n===void 0?[]:[{requestId:e,...n}]});if(r.length===0)return t;let[i]=r,a=n.length===1&&i!==void 0&&typeof e.payload.message==`string`?resolveTextToResponse(e.payload.message,i):void 0;return a===void 0?{consumed:!1,dismissedRequestIds:r.filter(e=>e.dismissible===!0).map(e=>e.requestId),responses:[]}:{consumed:!0,dismissedRequestIds:[],responses:[a]}}function batchResolves(e){return e.batch.approvalRequestIds.length===0||e.batch.approvalRequestIds.every(t=>{let n=e.entries.get(t);return n===void 0||!sameBatch(n,e)||e.responseIds.has(t)})}function sameBatch(e,t){return e.childContinuationToken===t.childContinuationToken&&e.batch?.requestIds.length===t.batch.requestIds.length&&e.batch.requestIds.every((e,n)=>e===t.batch.requestIds[n])}function toChildInputResponse(e,t){return t.childRequestId===void 0?e:{...e,requestId:t.childRequestId}}export{emitProxiedInputRequest,routeDeliverPayload};
|
package/dist/src/svelte/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { WebSearchProvider } from "#shared/web-search.js";
|
|
2
2
|
/** Session facts that can hide a selected tool without changing source composition. */
|
|
3
|
-
export type ToolAvailabilityCondition = "delegated-task-child" | "
|
|
3
|
+
export type ToolAvailabilityCondition = "delegated-task-child" | "root-session";
|
|
4
4
|
/** Native behavior declared by a selected compiled tool. */
|
|
5
5
|
export type CompiledToolHandling = {
|
|
6
6
|
readonly kind: "dispatch";
|
|
@@ -8,9 +8,6 @@ export type CompiledToolHandling = {
|
|
|
8
8
|
} | {
|
|
9
9
|
readonly kind: "provider-tool";
|
|
10
10
|
readonly provider: WebSearchProvider;
|
|
11
|
-
} | {
|
|
12
|
-
readonly kind: "request-input";
|
|
13
|
-
readonly request: "question";
|
|
14
11
|
} | {
|
|
15
12
|
readonly kind: "workflow-tool";
|
|
16
13
|
readonly workflowId: string;
|
|
@@ -50,7 +47,7 @@ export type PreparedToolHandling = {
|
|
|
50
47
|
readonly kind: "dispatch";
|
|
51
48
|
readonly target: PreparedDispatchTarget;
|
|
52
49
|
} | Extract<CompiledToolHandling, {
|
|
53
|
-
readonly kind: "provider-tool"
|
|
50
|
+
readonly kind: "provider-tool";
|
|
54
51
|
}>;
|
|
55
52
|
/** Runtime-prepared behavior carried by one harness-visible tool. */
|
|
56
53
|
export interface PreparedToolBehavior {
|
|
@@ -70,8 +70,8 @@ export interface PublicToolDefinitionWithExecuteFn<TInput = unknown, TOutput = u
|
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* A question a workflow tool asks the human on the session's channel, sent
|
|
73
|
-
* with `ctx.ask` from a `defineWorkflowTool` executor. Channels render it the
|
|
74
|
-
*
|
|
73
|
+
* with `ctx.ask` from a `defineWorkflowTool` executor. Channels render it the
|
|
74
|
+
* way they render tool approvals.
|
|
75
75
|
*/
|
|
76
76
|
export interface ToolInputRequest {
|
|
77
77
|
/**
|
|
@@ -79,19 +79,37 @@ export interface ToolInputRequest {
|
|
|
79
79
|
* {@link options}.
|
|
80
80
|
*/
|
|
81
81
|
readonly allowFreeform?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Whether the user's next message may skip the question. When `true`, a
|
|
84
|
+
* message that does not answer it resolves the request as `dismissed`, and
|
|
85
|
+
* the message reaches the agent as usual.
|
|
86
|
+
*/
|
|
87
|
+
readonly dismissible?: boolean;
|
|
82
88
|
/** Rendering hint: confirmation buttons, a selection list, or a text field. */
|
|
83
89
|
readonly display?: "confirmation" | "select" | "text";
|
|
84
90
|
/** Selectable answers. */
|
|
85
91
|
readonly options?: readonly InputOption[];
|
|
86
92
|
readonly prompt: string;
|
|
87
93
|
}
|
|
88
|
-
/**
|
|
89
|
-
|
|
94
|
+
/**
|
|
95
|
+
* The outcome of a {@link ToolInputRequest}.
|
|
96
|
+
*
|
|
97
|
+
* - `answered`: the user picked an option or typed an answer.
|
|
98
|
+
* - `dismissed`: the user moved on without answering a `dismissible` request.
|
|
99
|
+
* - `unavailable`: the session cannot reach a human, such as a scheduled run,
|
|
100
|
+
* so the request resolved immediately without being shown.
|
|
101
|
+
*/
|
|
102
|
+
export type ToolInputResponse = {
|
|
103
|
+
readonly status: "answered";
|
|
90
104
|
/** The selected option's `id`, when the user picked one. */
|
|
91
105
|
readonly optionId?: string;
|
|
92
106
|
/** Free text, when the user typed an answer. */
|
|
93
107
|
readonly text?: string;
|
|
94
|
-
}
|
|
108
|
+
} | {
|
|
109
|
+
readonly status: "dismissed";
|
|
110
|
+
} | {
|
|
111
|
+
readonly status: "unavailable";
|
|
112
|
+
};
|
|
95
113
|
/**
|
|
96
114
|
* Authored tool context. Passed as the last argument to
|
|
97
115
|
* {@link ToolDefinition.execute}.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type WorkflowToolDefinition } from "#tools/workflow-definition.js";
|
|
2
|
+
import { type AskQuestionInput, type AskQuestionOutput } from "#execution/tools/ask-question.js";
|
|
3
|
+
export type { AskQuestionInput, AskQuestionOutput };
|
|
4
|
+
/**
|
|
5
|
+
* Defines the opt-in `ask_question` tool.
|
|
6
|
+
*
|
|
7
|
+
* Export it from `agent/tools/ask_question.ts`:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { askQuestion } from "eve/tools/ask_question";
|
|
11
|
+
*
|
|
12
|
+
* export default askQuestion();
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Each call runs as a durable workflow that asks through `ctx.ask()`, so the
|
|
16
|
+
* turn waits for the answer without holding an application runtime open.
|
|
17
|
+
*/
|
|
18
|
+
export declare function askQuestion(): WorkflowToolDefinition<AskQuestionInput, AskQuestionOutput>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineWorkflowTool}from"#tools/workflow-definition.js";import{ASK_QUESTION_INPUT_SCHEMA,ASK_QUESTION_OUTPUT_SCHEMA,ASK_QUESTION_TOOL_DESCRIPTION,executeAskQuestionTool}from"#execution/tools/ask-question.js";function askQuestion(){return defineWorkflowTool({description:ASK_QUESTION_TOOL_DESCRIPTION,execute:executeAskQuestionTool,inputSchema:ASK_QUESTION_INPUT_SCHEMA,outputSchema:ASK_QUESTION_OUTPUT_SCHEMA})}export{askQuestion};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type WorkflowToolDefinition } from "#tools/workflow-definition.js";
|
|
2
2
|
import { type SleepToolInput, type SleepToolOutput } from "#execution/tools/sleep.js";
|
|
3
3
|
export type { SleepToolInput, SleepToolOutput };
|
|
4
4
|
/**
|
|
@@ -15,4 +15,4 @@ export type { SleepToolInput, SleepToolOutput };
|
|
|
15
15
|
* Each call runs as a durable workflow, so the wait does not hold an
|
|
16
16
|
* application runtime open.
|
|
17
17
|
*/
|
|
18
|
-
export declare function sleep():
|
|
18
|
+
export declare function sleep(): WorkflowToolDefinition<SleepToolInput, SleepToolOutput>;
|
package/dist/src/vue/index.js
CHANGED