eve 0.45.1 → 0.46.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 +24 -0
- package/dist/src/channel/types.d.ts +2 -0
- package/dist/src/cli/dev/tui/agent-header.d.ts +5 -14
- package/dist/src/cli/dev/tui/agent-header.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +4 -5
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -3
- package/dist/src/cli/run.js +3 -3
- package/dist/src/compiled/.vendor-stamp.json +2 -1
- package/dist/src/compiled/@vercel/blob/client.d.ts +487 -0
- package/dist/src/compiled/@vercel/blob/create-folder-BM6BTlko.d.ts +471 -0
- package/dist/src/compiled/@vercel/blob/index.d.ts +573 -0
- package/dist/src/compiled/@vercel/blob/index.js +43 -0
- package/dist/src/compiled/@vercel/blob/license.md +201 -0
- package/dist/src/compiler/channel-route-plan.d.ts +2 -2
- package/dist/src/compiler/instrumentation-layout-config.d.ts +3 -0
- package/dist/src/compiler/instrumentation-layout-config.js +1 -0
- package/dist/src/compiler/load-binding-namespace.d.ts +5 -3
- package/dist/src/compiler/load-binding-namespace.js +1 -1
- package/dist/src/compiler/manifest.d.ts +2 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/model-catalog.d.ts +1 -1
- package/dist/src/compiler/model-catalog.js +1 -1
- package/dist/src/compiler/module-lifecycle.d.ts +14 -0
- package/dist/src/compiler/module-lifecycle.js +1 -0
- package/dist/src/compiler/module-map.d.ts +2 -2
- package/dist/src/compiler/module-map.js +2 -2
- package/dist/src/compiler/node-source-state.d.ts +6 -3
- package/dist/src/compiler/node-source-state.js +1 -1
- package/dist/src/compiler/normalize-agent-config.d.ts +2 -2
- package/dist/src/compiler/normalize-helpers.d.ts +4 -4
- package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/remote-agent-node.js +1 -1
- package/dist/src/compiler/source-graph.d.ts +12 -2
- package/dist/src/compiler/source-graph.js +1 -1
- package/dist/src/compiler/validate-artifact.js +1 -1
- package/dist/src/context/keys.d.ts +2 -0
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/channel-delivery-instrumentation.js +1 -1
- package/dist/src/harness/hitl/approval-prompt.d.ts +2 -0
- package/dist/src/harness/hitl/approval-prompt.js +3 -2
- package/dist/src/harness/instrumentation/content-policy.d.ts +3 -2
- package/dist/src/harness/instrumentation/content-policy.js +1 -1
- package/dist/src/harness/instrumentation/content.d.ts +11 -0
- package/dist/src/harness/instrumentation/content.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/internal/application/compiled-artifacts.d.ts +7 -7
- package/dist/src/internal/application/compiled-artifacts.js +6 -5
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-asset-import-plugin.d.ts +6 -2
- package/dist/src/internal/authored-asset-import-plugin.js +1 -1
- package/dist/src/internal/authored-module-loader.js +3 -3
- package/dist/src/internal/authored-module-map-loader.js +1 -1
- package/dist/src/internal/authored-runtime-modules.d.ts +15 -0
- package/dist/src/internal/authored-runtime-modules.js +1 -0
- package/dist/src/internal/materialized-authored-modules.d.ts +2 -18
- package/dist/src/internal/materialized-authored-modules.js +1 -1
- package/dist/src/internal/nitro/development-generation.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/workflow/development-world-server.js +1 -1
- package/dist/src/internal/workflow/local-world-delivery-timeouts.d.ts +7 -0
- package/dist/src/internal/workflow/local-world-delivery-timeouts.js +1 -0
- package/dist/src/public/channels/slack/inbound-content.js +2 -2
- package/dist/src/public/instrumentation/otel.d.ts +1 -1
- package/dist/src/public/memory/file/backend.d.ts +37 -0
- package/dist/src/public/memory/file/backend.js +1 -0
- package/dist/src/public/memory/file/backends/default.d.ts +7 -0
- package/dist/src/public/memory/file/backends/default.js +1 -0
- package/dist/src/public/memory/file/backends/in-memory.d.ts +6 -0
- package/dist/src/public/memory/file/backends/in-memory.js +1 -0
- package/dist/src/public/memory/file/backends/lazy.d.ts +3 -0
- package/dist/src/public/memory/file/backends/lazy.js +1 -0
- package/dist/src/public/memory/file/backends/vercel-blob.d.ts +14 -0
- package/dist/src/public/memory/file/backends/vercel-blob.js +1 -0
- package/dist/src/public/memory/file/index.d.ts +3 -0
- package/dist/src/public/memory/file/index.js +1 -0
- package/dist/src/public/memory/file/provider.d.ts +14 -0
- package/dist/src/public/memory/file/provider.js +6 -0
- package/dist/src/public/memory/file/vercel.d.ts +1 -0
- package/dist/src/public/memory/file/vercel.js +1 -0
- package/dist/src/setup/integrations/linq/connect.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/instrumentation-content.d.ts +6 -0
- package/dist/src/shared/instrumentation-content.js +1 -0
- package/dist/src/shared/instrumentation-decision.d.ts +8 -0
- package/dist/src/shared/instrumentation-decision.js +1 -0
- package/dist/src/tracing/agent-trace-context-store.d.ts +3 -3
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/otel-declaration.d.ts +14 -3
- package/dist/src/tracing/sampled-trace.d.ts +8 -1
- package/dist/src/tracing/sampled-trace.js +1 -1
- package/docs/agent-config.md +2 -0
- package/docs/channels/slack.mdx +2 -0
- package/docs/guides/dynamic-capabilities.md +2 -0
- package/docs/instructions.mdx +3 -1
- package/docs/memory.md +69 -4
- package/docs/reference/typescript-api.md +30 -0
- package/docs/schedules.mdx +2 -0
- package/docs/skills.mdx +2 -0
- package/package.json +12 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.46.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 1d79217: Emit traces for every audience by default while recording content only for public conversations. `tracePolicy` can explicitly disable emission or select directional content capture, and existing boolean policies retain their current behavior.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 47b3e48: Static authored definitions now remain build-only, while runtime entries and their assets use the same bundling semantics in development and production.
|
|
12
|
+
- 9c0a138: Replace the eve TUI's separate banner and text header with a startup card showing the installed version, active model, and the instructions, tools, skills, subagents, and schedules loaded by the agent.
|
|
13
|
+
- 7acb4ec: Include the original message body when Slack users share a message into an eve conversation. Agents now receive Slack crosspost content alongside distinct top-level comments without repeating content already present in the comment.
|
|
14
|
+
|
|
15
|
+
## 0.45.2
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 295e534: Add a bounded `fileMemory()` provider with scope-partitioned indexed documents, a 4,000-character recalled-context budget by default, and model-facing save and remove tools. `eve dev` uses shared process-local storage, configured Vercel deployments use Blob, and every other environment requires an explicit backend.
|
|
20
|
+
- 5934d69: Prevent long local Workflow deliveries from timing out and replaying an in-flight turn. Explicit local delivery timeout overrides continue to take precedence.
|
|
21
|
+
- 8d2d91e: GitHub, Linear Agent, and Linq registry items now install Vercel CLI 58.5.1 or newer for guided setup. Linq setup no longer tries to infer CLI compatibility from connector creation errors.
|
|
22
|
+
- 295e534: Upgrade the vendored Vercel Blob SDK to 2.8.0 and copy its upstream TypeScript declarations so blob-backed file memory stays aligned with the installed SDK.
|
|
23
|
+
- 79c5514: Cache AI Gateway model metadata for five minutes and refresh immediately on a cache miss, while continuing to fall back to cached metadata when refreshes fail.
|
|
24
|
+
- 17e37f1: Stop producing AI SDK telemetry spans when `tracePolicy` rejects an agent trace.
|
|
25
|
+
- a5917cd: Identify pending tool approvals as trusted runtime state so newer user messages can revise or supersede them without being mistaken for injected approval text.
|
|
26
|
+
|
|
3
27
|
## 0.45.1
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -7,6 +7,7 @@ import type { InputRequest, InputResponse } from "#shared/input.js";
|
|
|
7
7
|
import type { ChannelAdapter } from "#channel/adapter.js";
|
|
8
8
|
import type { AgentLimitsDefinition } from "#shared/agent-definition.js";
|
|
9
9
|
import type { JsonObject } from "#shared/json.js";
|
|
10
|
+
import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
|
|
10
11
|
import type { TaskView } from "#tasks/types.js";
|
|
11
12
|
export type { ContextAccessor } from "#context/key.js";
|
|
12
13
|
export type { ChannelInstrumentationProjection } from "#channel/instrumentation.js";
|
|
@@ -71,6 +72,7 @@ export interface SessionParent {
|
|
|
71
72
|
* free of tracing dependencies.
|
|
72
73
|
*/
|
|
73
74
|
export interface SessionTraceContext {
|
|
75
|
+
readonly decision?: InstrumentationDecision;
|
|
74
76
|
readonly spanId: string;
|
|
75
77
|
readonly traceFlags: number;
|
|
76
78
|
readonly traceId: string;
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Builds the startup header the dev TUI commits to scrollback before the
|
|
3
|
-
* first prompt: one `eve <agent name>` brand line, a discovery-diagnostics
|
|
4
|
-
* line when the compiler reported problems, and a rotating tip for local
|
|
5
|
-
* sessions. The resolved model is not repeated here — it lives on the
|
|
6
|
-
* persistent status line at the bottom.
|
|
7
|
-
*/
|
|
1
|
+
/** Builds the startup card the dev TUI commits before the first prompt. */
|
|
8
2
|
import type { AgentInfoResult } from "#client/index.js";
|
|
9
3
|
import type { Theme } from "./theme.js";
|
|
10
4
|
export interface AgentHeaderInput {
|
|
11
|
-
/** Resolved display name
|
|
12
|
-
name
|
|
5
|
+
/** Resolved display name used when agent inspection is unavailable. */
|
|
6
|
+
name?: string;
|
|
13
7
|
/** Agent inspection payload, or `undefined` when it could not be fetched. */
|
|
14
8
|
info?: AgentInfoResult;
|
|
15
9
|
theme: Theme;
|
|
16
10
|
/** Available terminal width. */
|
|
17
11
|
width: number;
|
|
18
|
-
/** Message-of-the-day line rendered
|
|
12
|
+
/** Message-of-the-day line rendered below the startup card, when present. */
|
|
19
13
|
tip?: string;
|
|
20
14
|
}
|
|
21
15
|
/**
|
|
@@ -25,8 +19,5 @@ export interface AgentHeaderInput {
|
|
|
25
19
|
export declare const AGENT_HEADER_TIPS: readonly string[];
|
|
26
20
|
/** Picks one tip; `random` is a test seam over Math.random. */
|
|
27
21
|
export declare function pickAgentHeaderTip(random?: () => number): string;
|
|
28
|
-
/**
|
|
29
|
-
* Returns the styled rows of the startup header (no trailing blank line is
|
|
30
|
-
* added by callers other than the one separating it from the transcript).
|
|
31
|
-
*/
|
|
22
|
+
/** Returns the styled rows of the startup card and optional tip. */
|
|
32
23
|
export declare function buildAgentHeader(input: AgentHeaderInput): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isPromptControlCommand}from"./prompt-commands.js";import{
|
|
1
|
+
import{isPromptControlCommand}from"./prompt-commands.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{clipVisible,visibleLength}from"#cli/ui/terminal-text.js";const AGENT_HEADER_TIPS=[`Use the /add command to install an integration.`,`Use the /deploy command to deploy your agent.`,`Use the /help command to see every command.`],EVE_LOGO=[`⣿⣿⣿⣿⣿⣿⣿⣿⣿ ⠏⣿⣿⣿⣿⣿⣿⣿⣿⣿`,` ⠇⣿⠏`,`⣿⣿⣿⣿⣿⣿⠇ ⠇⣿⠏ ⠇⣿⣿⣿⣿⣿`,` ⠃⣿⠏`,`⣿⣿⣿⣿⣿⣿⠏ ⠃⣿⠏ ⠇⣿⣿⣿⣿⣿⣿⣿`];function pickAgentHeaderTip(e=Math.random){let t=Math.min(AGENT_HEADER_TIPS.length-1,Math.floor(e()*AGENT_HEADER_TIPS.length));return AGENT_HEADER_TIPS[t]}function buildAgentHeader(e){let{theme:i,info:o,width:s}=e,c=i.colors,l=resolveInstalledPackageInfo().version,u=Math.min(68,Math.max(0,s-1)),d=`${c.dim(`☰`)}${c.bold(`eve`)} ${c.dim(`(v${l})`)}`;if(u<4)return[clipVisible(d,s)];let f=i.unicode?`─`:`-`,p=i.unicode?`│`:`|`,m=i.unicode?`╭`:`+`,h=i.unicode?`╮`:`+`,g=i.unicode?`╰`:`+`,_=i.unicode?`╯`:`+`,v=u-2,y=f.repeat(v),row=(e=``,t=0)=>{let i=Math.max(0,v-2),a=clipVisible(e,i),o=Math.max(0,i-visibleLength(a)-t);return`${c.dim(p)} ${a}${` `.repeat(o)} ${c.dim(p)}`},b=o?.agent.name??e.name,x=b===void 0?d:spreadRow(d,c.bold(b),v-2,1),S=[c.dim(`${m}${y}${h}`)];S.push(row(x,1),row());let C=Math.max(...EVE_LOGO.map(e=>visibleLength(e)));i.unicode&&v-2>=C&&S.push(...EVE_LOGO.map(e=>row(centerLogoLine(e,C,v-2,i))),row());let detail=(e,t)=>row(`${c.dim(e.padEnd(14))}${t}`),w=formatHeaderModel(o?.agent.model,i);if(w!==void 0&&S.push(detail(`model`,w)),o!==void 0){S.push(detail(`instructions`,formatInstructions(o,v-18))),S.push(row());let e=groupTools(o);if(e.length===0)S.push(detail(`tools`,`none`));else{S.push(detail(`tools`,``));for(let t of e.slice(0,4))S.push(detail(` ${t.label}`,fitNames(t.names,v-18)));let t=e.length-4;t>0&&S.push(detail(` +${t} ${pluralize(t,`group`)}`,``))}S.push(detail(`skills`,fitNames(skillNames(o),v-18))),S.push(detail(`subagents`,fitNames(subagentNames(o),v-18))),S.push(detail(`schedules`,fitNames(o.schedules.map(e=>e.name),v-18)))}if(S.push(c.dim(`${g}${y}${_}`)),o&&(o.diagnostics.discoveryErrors>0||o.diagnostics.discoveryWarnings>0)){let e=[];o.diagnostics.discoveryErrors>0&&e.push(c.red(`${o.diagnostics.discoveryErrors} error${plural(o.diagnostics.discoveryErrors)}`)),o.diagnostics.discoveryWarnings>0&&e.push(c.yellow(`${o.diagnostics.discoveryWarnings} warning${plural(o.diagnostics.discoveryWarnings)}`)),S.push(``,` ${c.dim(i.glyph.warning)} ${e.join(c.dim(` · `))}`)}return e.tip!==void 0&&S.push(``,` ${c.bold(`Tip:`)} ${renderTip(e.tip,Math.max(8,s-7),i)}`),S}function centerLogoLine(e,t,n,r){let i=Math.max(0,Math.floor((n-t)/2));return`${` `.repeat(i)}${r.colors.cyan(e)}`}function spreadRow(e,t,i,a){let o=Math.max(1,i-a),s=clipVisible(e,Math.max(1,o-visibleLength(t)-1)),c=clipVisible(t,Math.max(1,o-visibleLength(s)-1)),l=Math.max(1,o-visibleLength(s)-visibleLength(c));return`${s}${` `.repeat(l)}${c}`}function groupTools(e){let t=new Map;for(let n of e.tools.static){let e=n.owner.kind===`application`?`agent`:n.owner.kind===`framework`?`eve`:n.owner.namespace,r=t.get(e)??[];r.push(n.name),t.set(e,r)}e.tools.dynamic.length>0&&t.set(`dynamic`,e.tools.dynamic.map(e=>e.slug));let priority=e=>e===`agent`?0:e===`dynamic`?2:e===`eve`?3:1;return[...t].map(([e,t])=>({label:e,names:t.sort()})).sort((e,t)=>priority(e.label)-priority(t.label)||e.label.localeCompare(t.label))}function skillNames(e){return[...e.skills.static.map(e=>e.name),...e.skills.dynamic.map(e=>`${e.slug} (dynamic)`)].sort()}function subagentNames(e){return[...e.subagents.local,...e.remoteAgents.entries].map(e=>e.name).sort()}function formatInstructions(e,t){return fitNames([...e.instructions.static.map(e=>`${e.logicalPath} (${e.role})`),...e.instructions.dynamic.map(e=>`${e.slug} (dynamic)`)],t)}function fitNames(e,t){if(e.length===0)return`none`;for(let n=e.length;n>0;--n){let i=e.length-n,a=`${e.slice(0,n).join(`, `)}${i>0?`, +${i} more`:``}`;if(visibleLength(a)<=t)return a}return clipVisible(e[0],t)}function formatHeaderModel(e,t){if(e?.id===void 0)return;let n=e.endpoint;if(n===void 0)return e.id;let r=t.colors.dim(`via `);switch(n.kind){case`external`:return`${e.id} ${r}${n.provider}`;case`chatgpt`:return`${e.id} ${r}chatgpt-sub`;case`gateway`:return n.connected?`${e.id} ${r}ai-gateway(${n.credential})`:`${e.id} ${r}ai-gateway(not connected)`}}function renderTip(t,r,i){return clipVisible(t.split(/(\/[a-z:-]+)/u).map(t=>isPromptControlCommand(t)?i.colors.blue(t):i.colors.dim(t)).join(``),r)}function plural(e){return e===1?``:`s`}function pluralize(e,t){return`${t}${plural(e)}`}export{AGENT_HEADER_TIPS,buildAgentHeader,pickAgentHeaderTip};
|
|
@@ -151,15 +151,14 @@ export type AgentTUIAgentHeader = {
|
|
|
151
151
|
name: string;
|
|
152
152
|
serverUrl: string;
|
|
153
153
|
info?: AgentInfoResult;
|
|
154
|
-
/** Message-of-the-day line shown
|
|
154
|
+
/** Message-of-the-day line shown below the startup card (local sessions only). */
|
|
155
155
|
tip?: string;
|
|
156
156
|
};
|
|
157
157
|
export type AgentTUIRenderer = {
|
|
158
158
|
/**
|
|
159
|
-
* Commits
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* Optional — renderers without a header simply skip it.
|
|
159
|
+
* Commits the startup card to the transcript before the first prompt and
|
|
160
|
+
* refreshes it after local dev artifact changes. Optional — renderers
|
|
161
|
+
* without a header simply skip it.
|
|
163
162
|
*/
|
|
164
163
|
renderAgentHeader?(header: AgentTUIAgentHeader): void;
|
|
165
164
|
/**
|
|
@@ -46,7 +46,7 @@ export type AgentHeaderOptions = {
|
|
|
46
46
|
name: string;
|
|
47
47
|
serverUrl: string;
|
|
48
48
|
info?: AgentInfoResult;
|
|
49
|
-
/** Message-of-the-day line
|
|
49
|
+
/** Message-of-the-day line below the startup card (local sessions only). */
|
|
50
50
|
tip?: string;
|
|
51
51
|
};
|
|
52
52
|
export declare class TerminalRenderer implements AgentTUIRenderer {
|
|
@@ -58,8 +58,8 @@ export declare class TerminalRenderer implements AgentTUIRenderer {
|
|
|
58
58
|
/**
|
|
59
59
|
* Commits the startup agent header (brand mark + resolved configuration) to
|
|
60
60
|
* scrollback before the first prompt. Later calls (dev HMR refreshing fields
|
|
61
|
-
* such as the
|
|
62
|
-
*
|
|
61
|
+
* such as the model) commit a fresh header beneath the existing transcript
|
|
62
|
+
* only when the rendered header actually changed — every source
|
|
63
63
|
* reload re-sends it, and an identical banner repeated per reload is noise.
|
|
64
64
|
* Committed scrollback is never cleared or replayed.
|
|
65
65
|
*/
|
package/dist/src/cli/run.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";import{resumeDevelopmentRuntimeArtifacts,suspendDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,n,p){let
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";import{resumeDevelopmentRuntimeArtifacts,suspendDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,n,p){let h=resolveInstalledPackageInfo().version,g=new Command,_=createCliTheme();g.name(`eve`).description(`Build and run an eve application.`).version(h).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{let{json:r}=n.opts();[`info`,`init`].includes(n.name())&&!r&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),applicationCommand(g.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),p).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,p.project,t)}),registerIntegrationCommands({program:g,logger:e,applicationContext:p});let b=g.command(`extension`).description(`Create and build reusable eve extension packages.`);b.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,p.root,t)}),b.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(p.root);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,p.root)}),registerRegistryCommands({program:g,logger:e,applicationContext:p}),g.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,p.root,t,{channelWebNextjs:n.channelWebNextjs,model:n.model,reasoning:n.reasoning})}),applicationCommand(g.command(`set`),p).description(`Change root agent model settings.`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).action(async t=>{let{runSetCommand:n}=await import(`#cli/commands/set.js`);await n(e,p.root,t)}),registerProjectCommands({program:g,logger:e,applicationContext:p}),registerBuildCommand({applicationContext:p,buildHost:n.buildHost,logger:e,program:g}),applicationCommand(g.command(`start`),p).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:r}=await import(`#cli/dev/environment.js`);r(p.root);let i=await(n.startProductionHost??await loadStartProductionHost())(p.root,{host:t.host,port:t.port});e.log(renderCliTaggedLine(_,{message:`server listening at ${i.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>i.close(),wait:()=>i.wait()})}),registerRuntimeInvokeCommand({applicationContext:p,logger:e,program:g,runtime:n}),registerAcpCommand({applicationContext:p,eveVersion:h,program:g,resolveVerifiedRemoteDevelopmentClient:n.resolveVerifiedRemoteDevelopmentClient,runAcpServer:n.runAcpServer,startHost:n.startHost}),applicationCommand(g.command(`dev`),p,e=>resolveDevelopmentUrlTarget(e.opts(),e.processedArgs[0])===void 0).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input, or start onboarding with /model`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
|
|
2
2
|
You can also pass a bare URL, for example: eve dev https://example.com
|
|
3
|
-
`).action(async(t,i)=>{let a=resolveDevelopmentUrlTarget(i,t),s=a?.serverUrl,u=hasInteractiveTerminal(),d=resolveDevUiMode({options:i,interactive:u});if(i.input!==void 0&&d===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let f=!1;s!==void 0&&(f=await(n.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:p.root,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>n.runDevelopmentTui??await loadRunDevelopmentTui(),t),c=resolveTuiDisplayOptions(i),l=s===void 0||f?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??p.root}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:p.root},u=resolveTuiTitle({name:i.name,target:l});u!==void 0&&(c.name=u);let d={target:l,initialInput:i.input,onBootProgress:t,lifecycle:r,...c};l.kind===`local`&&(d.withExclusiveTerminal=async t=>await(async()=>{if(!await suspendDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl}))throw Error(`Could not pause the development server for integration setup.`);try{return await t()}finally{await resumeDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl,silent:!0})}})()),a?.headers===void 0?await o(d):await o({...d,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(p.root),e.log(`↗ ${f?`local`:`remote`} mode targeting ${
|
|
4
|
-
eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(t,n)=>{let{runTraceShowCommand:r}=await import(`#cli/commands/trace.js`);await r(e,p.root,t,n)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,p.root,t)}),applicationCommand(
|
|
3
|
+
`).action(async(t,i)=>{let a=resolveDevelopmentUrlTarget(i,t),s=a?.serverUrl,u=hasInteractiveTerminal(),d=resolveDevUiMode({options:i,interactive:u});if(d===`headless`&&e.log(eveCliBanner()),i.input!==void 0&&d===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let f=!1;s!==void 0&&(f=await(n.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:p.root,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>n.runDevelopmentTui??await loadRunDevelopmentTui(),t),c=resolveTuiDisplayOptions(i),l=s===void 0||f?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??p.root}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:p.root},u=resolveTuiTitle({name:i.name,target:l});u!==void 0&&(c.name=u);let d={target:l,initialInput:i.input,onBootProgress:t,lifecycle:r,...c};l.kind===`local`&&(d.withExclusiveTerminal=async t=>await(async()=>{if(!await suspendDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl}))throw Error(`Could not pause the development server for integration setup.`);try{return await t()}finally{await resumeDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl,silent:!0})}})()),a?.headers===void 0?await o(d):await o({...d,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(p.root),e.log(`↗ ${f?`local`:`remote`} mode targeting ${_.info(new URL(s).host)}`),d===`headless`){e.log(renderCliTaggedLine(_,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveUi({serverUrl:s},void 0,n)}finally{n.dispose()}return}let m=d===`tui`?startCliLiveRow(e):void 0,h=createDevBootProgressReporter(m);m?.update(`Building your agent`);let g,v,closeServer=()=>g===void 0?Promise.resolve():(v??=g.close(),v.catch(()=>void 0),v),y=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}});try{g=(n.startHost??await loadStartHost())(p.root,{existing:d===`tui`?`attach-if-unconfigured`:`reject`,host:i.host,onBootProgress:h,port:i.port});let t=(await Promise.race([g.start().then(e=>({handle:e})),y.stopped.then(()=>({handle:void 0}))])).handle;if(t===void 0)return;if(d!==`tui`&&e.log(renderCliTaggedLine(_,{message:`server listening at ${t.url}`,tag:`dev`,tone:`success`})),d===`headless`){i.ui!==!1&&!u&&e.log(renderCliTaggedLine(_,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,y);return}await waitForUiOrServer({handle:t,lifecycle:y,server:g,runUi:async()=>await runInteractiveUi({appRoot:t.appRoot,serverUrl:t.url},h,y)})}finally{m?.stop(),await closeServer(),y.dispose()}});let x=g.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return applicationCommand(x.command(`show [logid]`,{isDefault:!0}),p).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,p.root,t,n)}),applicationCommand(x.command(`ls`),p).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,p.root,t)}),applicationCommand(g.command(`traces [trace]`),p).usage(`[options] [trace]
|
|
4
|
+
eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(t,n)=>{let{runTraceShowCommand:r}=await import(`#cli/commands/trace.js`);await r(e,p.root,t,n)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,p.root,t)}),applicationCommand(g.command(`info`),p).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(n.printApplicationInfo??await loadPrintApplicationInfo())(e,p.root,t)}),applicationCommand(g.command(`eval`),p).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,r)=>{await(n.runEvalCommand??await loadRunEvalCommand())(t,r,e,p.root)}),g}async function runCli(e=process.argv.slice(2),t=console,r={}){let i={root:resolveApplicationRoot(),async resolve(){let e=await(r.resolveApplicationProject??resolveCliApplicationProject)(i.root);i.project=e,i.root=e.appRoot}},a=createCliProgram(t,r,i),o=e;if(o.length===0){let e=await(r.findApplicationRoot??findCliApplicationRoot)(i.root);e===void 0?o=[`init`]:(i.root=e,o=[`dev`])}try{await a.parseAsync(o,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let n=await(r.isCodingAgentLaunch??isCodingAgentLaunch)();if(o[0]===`init`&&n){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"shadcn": "4.18.0",
|
|
33
33
|
"@standard-schema/spec": "1.1.0",
|
|
34
34
|
"turndown": "7.2.4",
|
|
35
|
+
"@vercel/blob": "2.8.0",
|
|
35
36
|
"@vercel/detect-agent": "1.2.3",
|
|
36
37
|
"@vercel/oidc": "3.8.0",
|
|
37
38
|
"@vercel/otel": "2.1.3",
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
"zod": "4.4.3",
|
|
47
48
|
"zod-validation-error": "5.0.0"
|
|
48
49
|
},
|
|
49
|
-
"scriptHash": "
|
|
50
|
+
"scriptHash": "c2549e7c825b1fee74b0de1d2e796161ab02867c3f9c486d9d32c8723c42b605",
|
|
50
51
|
"toolVersions": {
|
|
51
52
|
"rolldown": "1.1.5"
|
|
52
53
|
}
|