eve 0.47.0 → 0.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/src/cli/dev/run-interactive-ui.d.ts +19 -0
- package/dist/src/cli/dev/run-interactive-ui.js +1 -0
- package/dist/src/cli/dev/tui/agent-header.js +1 -1
- package/dist/src/cli/dev/tui/remote-auth-command.js +1 -1
- package/dist/src/cli/dev/tui/remote-connection.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +6 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +6 -0
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/dev/tui/tui.d.ts +16 -0
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/run.js +3 -3
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +1 -1
- package/dist/src/services/dev-client.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.47.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 624d07d: Show the agent card and an editing-only prompt while `eve dev` builds the local agent, and simplify the card to branding, agent name, and a Tip. Text typed during startup is preserved for the initialized terminal UI, while submission remains disabled until startup completes.
|
|
8
|
+
|
|
3
9
|
## 0.47.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type DevBootProgressReporter } from "#internal/dev-boot-progress.js";
|
|
2
|
+
import type { DevelopmentCliOptions } from "./command-options.js";
|
|
3
|
+
import type { DevelopmentTuiStartup, RunDevelopmentTuiInput } from "./tui/tui.js";
|
|
4
|
+
import type { DevelopmentUrlTarget } from "./url-target.js";
|
|
5
|
+
import type { CommandLifecycle } from "../shutdown.js";
|
|
6
|
+
export declare function runInteractiveDevelopmentUi(input: {
|
|
7
|
+
readonly applicationRoot: string;
|
|
8
|
+
readonly existingLocalServer: boolean;
|
|
9
|
+
readonly lifecycle?: CommandLifecycle;
|
|
10
|
+
readonly options: DevelopmentCliOptions;
|
|
11
|
+
readonly remoteTarget?: DevelopmentUrlTarget;
|
|
12
|
+
readonly report?: DevBootProgressReporter;
|
|
13
|
+
readonly runDevelopmentTui?: (input: RunDevelopmentTuiInput) => Promise<void>;
|
|
14
|
+
readonly server: {
|
|
15
|
+
readonly appRoot?: string;
|
|
16
|
+
readonly serverUrl: string;
|
|
17
|
+
};
|
|
18
|
+
readonly startup?: DevelopmentTuiStartup;
|
|
19
|
+
}): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveTuiDisplayOptions}from"./ui-options.js";import{resolveTuiTitle}from"./tui/target.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{resumeDevelopmentRuntimeArtifacts,suspendDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";async function runInteractiveDevelopmentUi(t){let n=await devBootPhase(`loading interactive UI`,async()=>t.runDevelopmentTui??(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui,t.report),r=t.remoteTarget===void 0||t.existingLocalServer?{kind:`local`,serverUrl:t.server.serverUrl,workspaceRoot:t.server.appRoot??t.applicationRoot}:{kind:`remote`,serverUrl:t.server.serverUrl,workspaceRoot:t.applicationRoot},i=resolveTuiDisplayOptions(t.options),a=resolveTuiTitle({name:t.options.name,target:r});a!==void 0&&(i.name=a);let o={target:r,initialInput:t.options.input,onBootProgress:t.report,lifecycle:t.lifecycle,...i};t.startup!==void 0&&(o.startup=t.startup),r.kind===`local`&&(o.withExclusiveTerminal=async e=>{if(!await suspendDevelopmentRuntimeArtifacts({serverUrl:t.server.serverUrl}))throw Error(`Could not pause the development server for integration setup.`);try{return await e()}finally{await resumeDevelopmentRuntimeArtifacts({serverUrl:t.server.serverUrl,silent:!0})}}),t.remoteTarget?.headers===void 0?await n(o):await n({...o,headers:t.remoteTarget.headers})}export{runInteractiveDevelopmentUi};
|
|
@@ -1 +1 @@
|
|
|
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.`]
|
|
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.`];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:r,info:i,width:a}=e,o=r.colors,s=resolveInstalledPackageInfo().version,c=Math.min(68,Math.max(0,a-1)),l=`${o.dim(`☰`)}${o.bold(`eve`)} ${o.dim(`(v${s})`)}`;if(c<4)return[clipVisible(l,a)];let u=r.unicode?`─`:`-`,d=r.unicode?`│`:`|`,f=r.unicode?`╭`:`+`,p=r.unicode?`╮`:`+`,m=r.unicode?`╰`:`+`,h=r.unicode?`╯`:`+`,g=c-2,_=u.repeat(g),row=(e=``,t=0)=>{let r=Math.max(0,g-2),i=clipVisible(e,r),a=Math.max(0,r-visibleLength(i)-t);return`${o.dim(d)} ${i}${` `.repeat(a)} ${o.dim(d)}`},v=i?.agent.name??e.name,y=v===void 0?l:spreadRow(l,o.bold(v),g-2,1),b=[o.dim(`${f}${_}${p}`)];if(b.push(row(y,1)),b.push(row()),e.tip!==void 0&&b.push(row(`${o.bold(`Tip:`)} ${renderTip(e.tip,g-7,r)}`)),b.push(o.dim(`${m}${_}${h}`)),i&&(i.diagnostics.discoveryErrors>0||i.diagnostics.discoveryWarnings>0)){let e=[];i.diagnostics.discoveryErrors>0&&e.push(o.red(`${i.diagnostics.discoveryErrors} error${plural(i.diagnostics.discoveryErrors)}`)),i.diagnostics.discoveryWarnings>0&&e.push(o.yellow(`${i.diagnostics.discoveryWarnings} warning${plural(i.diagnostics.discoveryWarnings)}`)),b.push(``,` ${o.dim(r.glyph.warning)} ${e.join(o.dim(` · `))}`)}return b}function spreadRow(e,t,r,i){let a=Math.max(1,r-i),o=clipVisible(e,Math.max(1,a-visibleLength(t)-1)),s=clipVisible(t,Math.max(1,a-visibleLength(o)-1)),c=Math.max(1,a-visibleLength(o)-visibleLength(s));return`${o}${` `.repeat(c)}${s}`}function renderTip(t,n,r){return clipVisible(t.split(/(\/[a-z:-]+)/u).map(t=>isPromptControlCommand(t)?r.colors.blue(t):r.colors.dim(t)).join(``),n)}function plural(e){return e===1?``:`s`}export{AGENT_HEADER_TIPS,buildAgentHeader,pickAgentHeaderTip};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createTuiPrompter}from"./tui-prompter.js";import{describeRemoteAuthCompletedMutations}from"./remote-auth-result.js";import{runRemoteAuthFlow}from"./remote-auth.js";import{
|
|
1
|
+
import{remoteHost}from"./target.js";import{createTuiPrompter}from"./tui-prompter.js";import{describeRemoteAuthCompletedMutations}from"./remote-auth-result.js";import{runRemoteAuthFlow}from"./remote-auth.js";import{WizardCancelledError}from"#setup/step.js";function shouldConfigureTrustedSources(e){switch(e.state){case`auth-required`:case`auth-failed`:return e.challenge.kind===`vercel-deployment-protection`;case`unavailable`:return e.failure.code===`TRUSTED_SOURCES_ENVIRONMENT_MISMATCH`;case`checking`:case`authenticating`:case`ready`:return!1}}function unavailableAfterAuthentication(e,t){let[n=t,...r]=t.split(/\n\s*\n/u);return[`Authentication was refreshed, but ${e} is unavailable: ${/[.!?]$/u.test(n.trim())?n.trim():`${n.trim()}.`}`,...r.map(e=>e.trim()).filter(e=>e.length>0)].join(`
|
|
2
2
|
|
|
3
3
|
`)}function mutedRenderer(e,t){return{readSelect:n=>t()?Promise.resolve(void 0):e.readSelect(n),readEditableSelect:n=>t()?Promise.resolve(void 0):e.readEditableSelect(n),readText:n=>t()?Promise.resolve(void 0):e.readText(n),readAcknowledge:n=>t()?Promise.resolve():e.readAcknowledge(n),readChoice:n=>t()?{choice:Promise.resolve(void 0),close:()=>{}}:e.readChoice(n),setStatus:n=>{t()||e.setStatus(n)},renderLine:(n,r)=>{(!t()||r===`warning`||r===`error`)&&e.renderLine(n,r)},renderOutput:n=>{t()||e.renderOutput(n)},withInheritedStdio:t=>e.withInheritedStdio(t),withExclusiveTerminal:t=>e.withExclusiveTerminal?.(t)??e.withInheritedStdio(t)}}async function runRemoteAuthCommand(i){i.renderer.begin(`Authenticate via Vercel OIDC`,`pulse`);let a=!0,o=!1,s=new AbortController,c=i.renderer.waitForInterrupt(),l=i.connection.current().target;try{let u=i.flow??runRemoteAuthFlow,d=shouldConfigureTrustedSources(i.connection.current().connection),f=createTuiPrompter(mutedRenderer(i.renderer,()=>o)),p=i.connection.authenticate(async e=>{let t=await u({workspaceRoot:l.workspaceRoot,serverUrl:l.serverUrl,configureTrustedSources:d,prompter:f,signal:e});return a=t.kind===`failed`,t},s.signal),m=await Promise.race([p.then(e=>({kind:`completed`,outcome:e})),c.promise.then(()=>({kind:`interrupted`}))]);m.kind===`interrupted`&&(o=!0,a=!0,s.abort(new WizardCancelledError));let h=m.kind===`completed`?m.outcome:await p;switch(h.kind){case`authenticated`:return`Authenticated ${remoteHost(l)} via Vercel OIDC.`;case`cancelled`:if(o){let e=describeRemoteAuthCompletedMutations(h.completedMutations);return e.length===0?`/vc:login interrupted.`:`/vc:login interrupted. Completed before interruption: ${e.join(`, `)}.`}return h.completedMutations.some(e=>e.kind===`vercel-login`)?`/vc:login dismissed after logging in to Vercel.`:`/vc:login dismissed.`;case`failed`:return h.message;case`unavailable`:return unavailableAfterAuthentication(remoteHost(l),h.failure.message)}}finally{c.dispose(),i.renderer.setStatus(void 0),i.renderer.end({preserveDiagnostics:a})}}export{runRemoteAuthCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{remoteHost}from"./target.js";import{appendRemoteAuthMutationSummary}from"./remote-auth-result.js";import{classifyRemoteError,probeRemoteInfo}from"./remote-connection-probe.js";import{toErrorMessage}from"#shared/errors.js";function challengeFor(e){switch(e.state){case`auth-required`:case`authenticating`:case`auth-failed`:return e.challenge;case`checking`:case`ready`:return{kind:`eve-oidc`};case`unavailable`:return e.failure.code===`TRUSTED_SOURCES_ENVIRONMENT_MISMATCH`?{kind:`vercel-deployment-protection`}:{kind:`eve-oidc`}}}function createRemoteConnectionController(i){let a={state:`checking`},o,s,restoreActiveCredentials,c=0,l=!1,snapshot=()=>o===void 0?{target:i.target,connection:a}:{target:i.target,connection:a,deployment:o},update=e=>(a=e,l||i.onChange(snapshot()),e),beginOperation=e=>{s?.abort();let t=new AbortController;s=t;let n=e===void 0?t.signal:AbortSignal.any([t.signal,e]);return{generation:++c,signal:n}},isCurrent=e=>!l&&e===c,publishTarget=e=>{o=e.deployment,l||i.onChange(snapshot())},authorizeResolvedTarget=async(e,t)=>{let n=i.resolveDeployment;if(n!==void 0)try{let r=await n(e);return!isCurrent(t)||e.aborted||r.kind!==`resolved`?void 0:(publishTarget(r.target),i.credentials.authorize({target:r.target,resolveToken:async()=>await i.resolveOidcToken?.(r.target.deployment)??``}))}catch{}};return i.onChange(snapshot()),{current:snapshot,async check(){let e=beginOperation();restoreActiveCredentials?.(),restoreActiveCredentials=void 0,o=void 0,update({state:`checking`});let t=await authorizeResolvedTarget(e.signal,e.generation);if(!isCurrent(e.generation))return t?.(),a;restoreActiveCredentials=t;let n=await probeRemoteInfo({client:i.client,phase:`connection-check`});return isCurrent(e.generation)?update(n):a},async authenticate(n,o){let s=beginOperation(o),c=a,l=challengeFor(a);update({state:`authenticating`,challenge:l});let u;try{u=await n(s.signal)}catch(e){u={kind:`failed`,message:toErrorMessage(e),completedMutations:[]}}if(!isCurrent(s.generation))return{kind:`cancelled`,completedMutations:u.completedMutations};if(u.kind===`cancelled`)return update(c),{kind:`cancelled`,completedMutations:u.completedMutations};if(u.kind===`failed`)return update(c.state===`ready`?c:{state:`auth-failed`,challenge:l}),{kind:`failed`,message:u.message};if(s.signal.aborted)return update(c),{kind:`cancelled`,completedMutations:u.completedMutations};let d=restoreActiveCredentials,f;try{f=i.credentials.authorize({target:u.target,resolveToken:u.resolveToken})}catch(e){let n=appendRemoteAuthMutationSummary(toErrorMessage(e),u.completedMutations);return update({state:`auth-failed`,challenge:l}),{kind:`failed`,message:n}}let p=await probeRemoteInfo({client:i.client,phase:`authentication-verification`});if(!isCurrent(s.generation))return f(),{kind:`cancelled`,completedMutations:u.completedMutations};if(s.signal.aborted)return f(),update(c),{kind:`cancelled`,completedMutations:u.completedMutations};if(p.state===`ready`)return publishTarget(u.target),restoreActiveCredentials=()=>{f(),d?.()},update(p),{kind:`authenticated`};if(f(),p.state===`auth-required`){let n=appendRemoteAuthMutationSummary(`The selected Vercel project did not authorize ${remoteHost(i.target)}.`,u.completedMutations);return update({state:`auth-failed`,challenge:p.challenge}),{kind:`failed`,message:n}}let m={...p.failure,message:appendRemoteAuthMutationSummary(p.failure.message,u.completedMutations)};return update({state:`unavailable`,failure:m}),{kind:`unavailable`,failure:m}},reportFailure(e){return s?.abort(),c+=1,update(classifyRemoteError(e,`connection-check`))},dispose(){l=!0,c+=1,s?.abort(),s=void 0,restoreActiveCredentials?.(),restoreActiveCredentials=void 0}}}export{createRemoteConnectionController};
|
|
@@ -316,6 +316,10 @@ export interface PromptCommandHandler {
|
|
|
316
316
|
type: "extension";
|
|
317
317
|
}>, context: PromptCommandHandlerContext): Promise<PromptCommandOutcome | undefined>;
|
|
318
318
|
}
|
|
319
|
+
type TuiStartup = {
|
|
320
|
+
readonly headerTip: string;
|
|
321
|
+
finish(): string;
|
|
322
|
+
};
|
|
319
323
|
export type EveTUIRunnerOptions = TuiDisplayOptions & {
|
|
320
324
|
session?: ClientSession;
|
|
321
325
|
/** Production TUI probe injected by the launcher; omitted in hermetic runners. */
|
|
@@ -379,6 +383,8 @@ export type EveTUIRunnerOptions = TuiDisplayOptions & {
|
|
|
379
383
|
/** Parent-owned diagnostics recorder; omitted for remote and test renderers. */
|
|
380
384
|
diagnostics?: DevDiagnostics;
|
|
381
385
|
lifecycle?: CommandLifecycle;
|
|
386
|
+
/** Editing-only startup state retained until the final agent header is ready to paint. */
|
|
387
|
+
startup?: TuiStartup;
|
|
382
388
|
};
|
|
383
389
|
export declare class EveTUIRunner {
|
|
384
390
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{PROMPT_COMMANDS,formatPromptCommandHelp,parsePromptCommand}from"./prompt-commands.js";import{pickAgentHeaderTip}from"./agent-header.js";import{failureKey,formatFailureDetail,formatFailureHint,formatFailureMessage,isInterruptedError,localFailureHint}from"./errors.js";import{parseLogDisplayMode}from"./log-display-mode.js";import{createMcpConnectionStatusTracker}from"./mcp-connection-status.js";import{createRemoteConnectionController}from"./remote-connection.js";import{SubagentPump}from"./subagent-pump.js";import{BOOT_DETECTIONS,CLI_MISSING_SETUP_ISSUE,LOGIN_SETUP_ISSUE,detectSetupIssues,formatSetupIssuesLine,normalizeLocalModelEndpoint,orderedSetupIssues}from"./setup-issues.js";import{TerminalRenderer}from"./terminal-renderer.js";import{createVercelStatusTracker}from"./vercel-status.js";import"#client/index.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{inspectApplication}from"#services/inspect-application.js";import{toErrorMessage}from"#shared/errors.js";import{getVercelAuthStatus}from"#setup/vercel-project.js";import{probeAgentInfo}from"#services/dev-client/agent-info-probe.js";import{renderApplicationInfo}from"#cli/commands/info.js";import{subscribeDevelopmentSandboxPrewarmLogs}from"#execution/sandbox/development-prewarm.js";import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{createDevelopmentRuntimeArtifactRefresher}from"#services/dev-client.js";import{devBootPhase}from"#internal/dev-boot-progress.js";async function delayMs(e){await new Promise(t=>{setTimeout(t,e).unref?.()})}function authIssueForStatus(e){if(e===`logged-out`)return LOGIN_SETUP_ISSUE;if(e===`cli-missing`)return CLI_MISSING_SETUP_ISSUE}var EveTUIRunner=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;#y;#b;#x;#S;#C=!1;#w=new AbortController;#T=!1;#E=[];#D;#O;#k;#A=pickAgentHeaderTip();#j;#M=new Map;#N;#P;#F=new Map;#I=new Set;#L;#R;#z;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#z=t.lifecycle),this.#n=createRenderer(t);let n={formatActionResultError};if(this.#t!==void 0&&(n.client=this.#t),this.#n.subagents!==void 0&&(n.view=this.#n.subagents),this.#P=new SubagentPump(n),this.#r=t.name??`eve`,this.#_=t.withExclusiveTerminal,this.#i=t.tools??`full`,this.#a=t.reasoning??`full`,this.#o=t.subagents??`full`,this.#s=t.connectionAuth??`full`,this.#c=t.assistantResponseStats??`tokensPerSecond`,this.#l=t.contextSize,this.#u=t.formatTransportError??toErrorMessage,t.initialInput!==void 0&&(this.#m=t.initialInput),t.appRoot!==void 0){this.#p=t.appRoot;let e={appRoot:t.appRoot,onChange:e=>this.#n.setVercelStatus?.(e)};t.detectProjectIdentity!==void 0&&(e.detectIdentity=t.detectProjectIdentity),this.#O=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#k=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#h=t.promptCommandHandler),this.#g=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#v=createRemoteConnectionController({client:this.#t,credentials:t.remote.credentials,target:t.remote.target,onChange:e=>this.#n.setRemoteConnectionStatus?.(e),resolveOidcToken:t.remote.resolveOidcToken,resolveDeployment:t.remote.resolveDeployment})}this.#y=t.bootDetections??BOOT_DETECTIONS,this.#b=t.getVercelAuthStatus??getVercelAuthStatus,this.#x=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#S=t.onBootProgress),t.serverUrl!==void 0&&(this.#f=t.serverUrl),t.serverUrl!==void 0&&t.remote===void 0&&(this.#d=createDevelopmentRuntimeArtifactRefresher({serverUrl:t.serverUrl}))}async#B(){if(this.#f===void 0){this.#H(),await this.#ee(void 0);return}let e;if(this.#v!==void 0){let t=await this.#v.check();t.state===`ready`&&(e=t.info)}else{let t=this.#t;if(t!==void 0)try{let n=await devBootPhase(`connecting to agent`,()=>probeAgentInfo({client:t}),this.#S);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}this.#H();let t=this.#V(e);await this.#ee(t)}#V(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#j=t;let n=this.#f;if(n===void 0)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#A),this.#n.renderAgentHeader?.(r),t}#H(){let e=this.#S;this.#S=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#z?.signal.aborted===!0?onStop():this.#z?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#U()}finally{this.#z?.signal.removeEventListener(`abort`,onStop),this.#C=!0,this.#w.abort(),this.#P.abortAll(),this.#R?.(),this.#R=void 0,this.#n.shutdown?.(),this.#O?.dispose(),this.#k?.dispose(),this.#v?.dispose()}}async#U(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=this.#m;await this.#B(),this.#v?.current().connection.state===`auth-required`&&await this.#le({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#ie(),this.#O?.refreshIdentity(),this.#k?.refresh();let u=this.#m===void 0?void 0:parsePromptCommand(this.#m);for(u?.type===`extension`&&u.name===`model`&&u.argument===``&&this.#p!==void 0&&this.#h!==void 0&&this.#n.setupFlow!==void 0&&(l=void 0,await this.#ue(e));;){if(this.#z?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;if(!s){if(r==null){if(!this.#n.readPrompt){if(a)return;throw Error(`No prompt was provided and the renderer does not support prompt input.`)}let t={title:e};l!==void 0&&(t.initialDraft=l,l=void 0);try{r=await this.#J(t)}catch(e){if(isInterruptedError(e)){if(this.#N===void 0)return;s=!0,r=``}else throw e}if(r==null&&this.#N===void 0)return}let u=this.#N===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#z?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#ae(`No active turn to cancel.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.cancel();if(this.#ae(e.status===`accepted`?`Turn cancellation requested.`:`No active turn to cancel.`),e.status===`no_active_turn`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#ae(`Couldn't cancel the turn: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`reset`){if(!await this.#K()){i=void 0,s=!1,r=void 0;continue}i=void 0,s=!1,r=void 0;continue}if(u?.type===`compact`){if(this.#e===void 0){this.#ae(`No active session to compact.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.compact();if(this.#ae(e.status===`accepted`?`Compaction requested.`:`No active session to compact.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#ae(`Couldn't compact the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`clear`){if(this.#e===void 0){this.#ae(`No active session to clear.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.clear();if(this.#ae(e.status===`accepted`?`Context clear requested.`:`No active session to clear.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#ae(`Couldn't clear the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`help`){this.#ae(formatPromptCommandHelp(this.#g)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#pe(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#ae(this.#me(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#fe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#le(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let u=this.#N;this.#N=void 0;let d=u??(o?this.#Q():await(async()=>(this.#G(),await this.#X({prompt:s?void 0:r,inputResponses:i})))()),f=this.#e?.state.sessionId;f!==void 0&&this.#n.setSessionId?.(f);let p=r,m=!1;try{for(;;){await this.#n.renderStream(d,{title:e,submittedPrompt:p,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=d.turnState?.pendingApprovals??[],n=d.turnState?.pendingQuestions??[];if(t.length>0||n.length>0){let a=[];if(t.length>0){if(!this.#n.readToolApproval)throw Error(`Tool approval was requested, but the renderer does not support tool approval input.`);for(let n of t){let t=await this.#n.readToolApproval(n,{title:e});a.push({requestId:n.approvalId,optionId:t.approved?`approve`:`cancel`}),this.#M.delete(n.approvalId)}}if(n.length>0){if(!this.#n.readInputQuestion)throw Error(`An interactive question was requested, but the renderer does not support input questions.`);for(let t of n){let n=toAgentTUIInputQuestion(t),r=await this.#n.readInputQuestion(n,{title:e});if(r===void 0)continue;let i={requestId:t.requestId};r.optionId!==void 0&&(i.optionId=r.optionId),r.text!==void 0&&(i.text=r.text),a.push(i),this.#M.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,m=!0;break}if(this.#ye(d)){d=this.#Q(),p=void 0;continue}if(d.turnState&&d.turnState.boundaryEvent===void 0&&!d.turnState.aborted){let e=this.#e?.state.sessionId;this.#n.renderNotice?.(e?`Lost the event stream — the turn may still be running on the server (session ${e}). Your next message resumes this session; use /cancel to stop the turn.`:`Lost the connection to the running turn.`)}break}}catch(e){if(isInterruptedError(e))return;throw e}if(m)continue;o=!1,s=!1,i=void 0,r=void 0;let h=d.turnState?.boundaryEvent;this.#L!==this.#e&&(h===`session.waiting`||h===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#G(d.turnState?.aborted===!0)}}#W(){this.#P.abortAll(),this.#M.clear(),this.#F.clear(),this.#I.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#G(e=!1){let t=this.#L;t!==void 0&&(this.#L=void 0,this.#e===t&&(this.#W(),e?this.#n.renderNotice?.(`Stopped following the turn and started a new session. Earlier context was cleared; the interrupted turn may still be running on the server.`):this.#n.renderSessionBoundary===void 0?this.#n.renderNotice?.(`Session ended — started a new session. Earlier context was cleared.`):this.#n.renderSessionBoundary()))}async#K(){if(this.#e===void 0)return this.#W(),this.#n.reset?.(),!0;try{await this.#e.reset()}catch(e){return this.#n.renderNotice?.(`Couldn't reset the session: ${toErrorMessage(e)}`),!1}return this.#W(),this.#n.reset?.(),!0}async#q(e){if(!this.#n.readPrompt)return;let t=this.#n.readPrompt(e),n=this.#d;if(n===void 0)return await t;let r=!1,i=!1,a,o=0,refresh=async()=>{if(!(r||i)){i=!0;try{await n.refreshIdle({onRuntimeArtifactsChanged:()=>this.#_e()});let e=this.#j?.agent.model.endpoint,t=e?.kind===`chatgpt`&&(e.state===`signed-out`||e.state===`reauth-required`),r=Date.now();if(t&&r-o>=5e3){o=r;let e=await this.#ge();e!==void 0&&this.#V(e)}}finally{i=!1}}},startRefresh=()=>{if(r||i)return;let e=refresh().finally(()=>{a===e&&(a=void 0)});a=e};startRefresh();let s=setInterval(()=>{startRefresh()},500);s.unref?.();try{return await t}finally{r=!0,clearInterval(s),await a}}async#J(e){let t=this.#q(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#Y(n.signal,e).catch(e=>{n.signal.aborted||this.#n.renderNotice?.(`Stopped following session updates: ${toErrorMessage(e)}`)});try{return await t}finally{n.abort(),await r}}async#Y(e,t){let n=this.#e;if(n===void 0)return;let r=n.stream({signal:e})[Symbol.asyncIterator]();try{for(;!e.aborted;){let i=!1,a={async*[Symbol.asyncIterator](){for(;!e.aborted;){let e=await r.next();if(e.done===!0||(i=!0,yield e.value,isCurrentTurnBoundaryEvent(e.value)))return}}},o=this.#$(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#ye(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#N={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#X(e){let t=new AbortController,n={signal:t.signal};e.prompt!==void 0&&(n.message=e.prompt),e.inputResponses!==void 0&&e.inputResponses.length>0&&(n.inputResponses=e.inputResponses);let r,i=this.#e;try{if(this.#d!==void 0&&await this.#d.refresh({inputResponses:n.inputResponses,message:n.message,onRuntimeArtifactsChanged:()=>this.#_e()}),n.message!==void 0&&(n.inputResponses?.length??0)===0&&this.#n.flushDelayedDevBuildErrors?.(),this.#e===void 0){if(this.#t===void 0)throw Error(`Cannot create a session without an eve client.`);if(n.message===void 0)throw Error(`Cannot answer an input request before the session starts.`);let e=await this.#t.sessions.create({...n,message:n.message});this.#e=e.session,r=e.response}else r=n.inputResponses===void 0?await this.#e.send(n.message,{signal:n.signal,turnPolicy:`queue`}):await this.#e.respond(n.inputResponses,{signal:n.signal})}catch(e){if(isInterruptedError(e))throw e;return this.#v?.reportFailure(e),this.#L=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#$(r,()=>t.abort(),this.#e)}async#Z(e,t){if(e.cancelInFlight!==!0){e.cancelInFlight=!0;try{for(let n=0;n<8;n+=1){if(e.boundaryEvent!==void 0||e.aborted===!0)return;let n=e.turnId;try{if((await t?.cancel(n===void 0?void 0:{turnId:n}))?.status===`accepted`)return}catch{}await delayMs(250)}}finally{e.cancelInFlight=!1}}}#Q(){if(this.#e===void 0)throw Error(`Cannot stream a session before its first turn is accepted.`);let e=new AbortController,t=this.#e;return this.#$(t.stream({signal:e.signal}),()=>e.abort(),t)}#$(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#L=n,t()},cancel:()=>{this.#Z(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#M,turnState:r,onSubagentCalled:e=>this.#P.begin(e),onSubagentBackgrounded:e=>this.#P.background(e),onSubagentCompleted:e=>this.#P.settle(e),onTurnCancelled:e=>this.#P.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#ve(e),onConnectionAuthCompleted:e=>this.#be(e),onTerminalFailure:()=>{this.#L=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}async#ee(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#E=await detectSetupIssues(t,this.#y),this.#n.renderSetupWarning!==void 0&&(this.#te(),this.#ne())}#te(){let e=orderedSetupIssues(this.#E,this.#D);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#ne(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#b(e,{signal:this.#w.signal})}catch{return}this.#C||this.#T||(this.#D=authIssueForStatus(t),this.#te())}async#re(e){let t=this.#p;if(t===void 0||this.#n.renderSetupWarning===void 0)return;let n={appRoot:t,env:process.env};e!==void 0&&(n.info=e);try{this.#E=await detectSetupIssues(n,this.#y);let e=await this.#b(t,{signal:this.#w.signal});this.#D=authIssueForStatus(e)}catch{return}this.#C||this.#te()}#ie(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#R===void 0&&(this.#R=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#ae(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#oe(e,t){let n=this.#h;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#j?.agent.model.endpoint,i={renderer:this.#n,title:t.title,initialModelStep:t.initialModelStep,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#v,withExclusiveTerminal:this.#_},a=this.#k?.current(),o=a!==void 0&&Object.keys(a).length>0?{...i,disabledConnectionReasons:a}:i;return t.keepSetupFlowOpen===!0?await n.handle(e,{...o,keepSetupFlowOpen:!0}):await n.handle(e,o)}#se(e,t){if(t!==`startup`)return;let n=this.#v?.current().connection.state,r=n===`auth-failed`||n===`unavailable`?`failed`:void 0,i=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${i}`,r)}async#ce(e){if(e?.kind===`model-access-changed`){this.#O?.applyEffect({kind:`refresh-identity`}),this.#T=!0,await this.#he();return}e!==void 0&&(this.#O?.applyEffect(e),this.#T=!0,this.#re(this.#j))}async#le(e,t,n){let r=await this.#oe(e,{initialModelStep:n.initialModelStep,keepSetupFlowOpen:n.keepSetupFlowOpen,title:t});this.#se(e,n.trigger),this.#ae(r?.message,r?.tone),await this.#ce(r?.effect),this.#de()}async#ue(e){let t=this.#p;if(t===void 0)return;let authStatus=async()=>{try{return await this.#b(t,{signal:this.#w.signal})}catch{return}},n=await authStatus();if(n===`cli-missing`&&(await this.#le({type:`extension`,name:`vc:install`,argument:``},e,{trigger:`startup`,keepSetupFlowOpen:!0}),n=await authStatus(),n===`cli-missing`)){this.#n.setupFlow?.end();return}if(n===`logged-out`&&(await this.#le({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`,keepSetupFlowOpen:!0}),n=await authStatus(),n===`cli-missing`||n===`logged-out`)){this.#n.setupFlow?.end();return}await this.#le({type:`extension`,name:`model`,argument:``},e,{trigger:`startup`,initialModelStep:`provider`}),await this.#le({type:`extension`,name:`add`,argument:``},e,{trigger:`startup`})}#de(){let e=this.#v?.current().connection;e?.state!==`ready`||e.info===this.#j||(this.#j=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#fe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#ae(`/traces is only available in local dev sessions.`);return}try{await this.#n.traceViewer.open({appRoot:this.#p,sessionId:this.#e?.state.sessionId,reference:e===``?void 0:e})}catch(e){if(isInterruptedError(e))return;throw e}}async#pe(){let e=this.#p;if(e===void 0){this.#ae(`/info is only available in local dev sessions.`);return}try{this.#ae(renderApplicationInfo(await this.#x(e)))}catch(e){this.#ae(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#me(e){let t=this.#n;if(t.logDisplayMode===void 0||t.setLogDisplayMode===void 0)return`/loglevel is not available in this session.`;if(e===``)return`Logs: ${t.logDisplayMode()}. Use /loglevel all|stderr|sandbox|none — logs stay buffered, so switching also hides or restores past lines.`;let n=parseLogDisplayMode(e);if(n===void 0)return`Unknown log level "${e}". Use all, stderr, sandbox, or none.`;if(n===t.logDisplayMode())return`Logs already set to ${n}.`;switch(t.setLogDisplayMode(n),n){case`none`:return`Logs hidden. Output stays buffered — /loglevel all restores it.`;case`stderr`:return`Showing stderr logs only.`;case`sandbox`:return`Showing sandbox logs only.`;case`all`:return`Showing all logs.`}}async#he(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#V(await this.#ge());this.#re(t)}async#ge(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#_e(){let e=this.#j,t=await this.#ge();t!==void 0&&this.#V(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#ve(e){let t={name:e.data.name,description:e.data.description,state:`required`};e.data.authorization!==void 0&&(t.challenge=e.data.authorization),e.data.webhookUrl!==void 0&&(t.webhookUrl=e.data.webhookUrl),this.#F.set(e.data.name,t),this.#xe(t)}#ye(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#F.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#I.add(e.name),this.#xe(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#I.size),this.#I.size>0}#be(e){let t=this.#F.get(e.data.name)??{name:e.data.name,description:``,state:e.data.outcome};t.state=e.data.outcome,e.data.reason!==void 0&&(t.reason=e.data.reason),this.#F.set(e.data.name,t),this.#I.delete(e.data.name),this.#xe(t),this.#n.setConnectionAuthPendingCount?.(this.#I.size)}#xe(e){let t={name:e.name,description:e.description,state:e.state};e.challenge!==void 0&&(t.challenge=e.challenge),e.reason!==void 0&&(t.reason=e.reason),this.#n.upsertConnectionAuth?.(t)}};function createRenderer(e){return e.renderer?e.renderer:new TerminalRenderer({tools:e.tools,reasoning:e.reasoning,subagents:e.subagents,connectionAuth:e.connectionAuth,assistantResponseStats:e.assistantResponseStats,contextSize:e.contextSize,logs:e.logs,availablePromptCommands:e.availablePromptCommands,input:e.userInput,output:e.screen,diagnostics:e.diagnostics,onExitRequest:e.lifecycle?.requestStop})}function formatAgentUpdateNotice(e,t){let n=e?.agent.model.id,r=t?.agent.model.id;return n!==void 0&&r!==void 0&&n!==r?`Agent updated: Model ${n} -> ${r}`:`Agent updated.`}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onTerminalFailure:u,failureHintOverride:d}=e,f=new Map,p=new Map,m=createEventDeduper(),h=0,g=new Set,_=new Set,v=new Set,y=!1,b=!1,x;for await(let e of t)if(m.admit(e)&&!(b&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:h+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;x=t.data.usage,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`step-finish`,usage:t.data.usage};break}case`message.appended`:{let t=e,n=textPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(f,n),i=t.data.messageSoFar;if(r.completed){if(h<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`assistant-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`message.completed`:{let t=textPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(f,t),r=e.data.message;if(n.completed){if(r===null||h<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=h,yield{type:`assistant-complete`,id:partGenerationId(t,n.generation),text:r};break}let i=partGenerationId(t,n.generation);if(r!==null){if(n.text.length===0)n.text=r,n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i,text:r};else if(r.startsWith(n.text)){let e=r.slice(n.text.length);e.length>0&&(yield{type:`assistant-delta`,id:i,delta:e}),n.text=r,n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i}}}else n.text.length>0&&(n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(p,n),i=t.data.reasoningSoFar;if(r.completed){if(h<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`reasoning-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`reasoning.completed`:{let t=reasoningPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(p,t),r=e.data.reasoning;if(n.completed){if(r.length===0||h<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=h;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}let i=partGenerationId(t,n.generation);if(n.text.length===0&&r.length>0)n.text=r,yield{type:`reasoning-delta`,id:i,delta:r};else if(r.length>0&&!r.startsWith(n.text))break;n.completed=!0,n.completedEpoch=h,yield{type:`reasoning-complete`,id:i};break}case`actions.requested`:{let t=e.data.actions.filter(e=>e.kind===`tool-call`);if(t.length===0)break;for(let e of t)g.has(e.callId)||(g.add(e.callId),yield{type:`tool-call`,toolCallId:e.callId,toolName:e.toolName,input:e.input});break}case`input.requested`:{let t=e.data.requests.filter(e=>e.action.kind===`tool-call`);if(t.length===0)break;for(let e of t){let t=e.action.callId;if(e.kind!==`session-limit`&&!g.has(t)&&(g.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!_.has(e.requestId)){if(_.add(e.requestId),n.set(e.requestId,e),e.kind!==`tool-approval`){upsertPendingQuestion(r,e);continue}upsertPendingApproval(r,e),yield{type:`tool-approval-request`,approvalId:e.requestId,toolCallId:t}}}break}case`action.result`:{let t=e;if(t.data.result.kind!==`tool-result`)break;let n=t.data.result.callId;if(!g.has(n))break;switch(t.data.status){case`completed`:yield{type:`tool-result`,toolCallId:n,output:t.data.result.output};break;case`failed`:yield{type:`tool-error`,toolCallId:n,errorText:formatActionResultError(t)};break;case`rejected`:yield{type:`tool-rejected`,toolCallId:n,reason:formatActionResultError(t)};break}break}case`step.failed`:case`turn.failed`:{let t=toFailureEvent(e,v,d);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,u?.(e);let t=toFailureEvent(e,v,d);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x},y=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x},y=!0;return;case`turn.completed`:b=!0,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`turn-cancelled`};break;case`subagent.called`:i?.(e);break;case`subagent.started`:case`subagent.event`:break;case`subagent.completed`:{let t=e;t.data.backgroundTask===void 0?o?.(t.data.callId):a?.(t.data.callId);break}case`authorization.required`:c?.(e);break;case`authorization.completed`:l?.(e);break;default:break}y||(yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x})}async function*errorOnlyTUIStream(e){yield{type:`error`,errorText:e.errorText},yield{type:`finish`}}function createTurnState(){return{aborted:!1,pendingApprovals:[],pendingQuestions:[],sawSessionFailure:!1}}function upsertPendingApproval(e,t){let n=toAgentTUIToolApprovalRequest(t),r=e.pendingApprovals.findIndex(e=>e.approvalId===n.approvalId);r===-1?e.pendingApprovals.push(n):e.pendingApprovals[r]=n}function toAgentTUIToolApprovalRequest(e){return{approvalId:e.requestId,toolCallId:e.action.callId,toolName:e.action.toolName,input:e.action.input}}function upsertPendingQuestion(e,t){let n=e.pendingQuestions.findIndex(e=>e.requestId===t.requestId);n===-1?e.pendingQuestions.push(t):e.pendingQuestions[n]=t}function textPartId(e,t){return`text:${e}:${t}`}function reasoningPartId(e,t){return`reasoning:${e}:${t}`}function partStateFor(e,t){let n=e.get(t);return n===void 0&&(n={generation:0,text:``,completed:!1,completedEpoch:0},e.set(t,n)),n}function partGenerationId(e,t){return t===0?e:`${e}#${t}`}function*closeOpenParts(e,t,n){for(let[r,i]of e)i.completed||i.text.length===0||(i.completed=!0,i.completedEpoch=n,yield{type:t,id:partGenerationId(r,i.generation)})}function isPostTurnVisibleEvent(e){switch(e.type){case`actions.requested`:case`authorization.completed`:case`authorization.required`:case`input.requested`:case`message.appended`:case`message.completed`:case`reasoning.appended`:case`reasoning.completed`:case`result.completed`:case`step.completed`:case`step.failed`:case`step.started`:case`subagent.called`:case`subagent.completed`:case`subagent.event`:case`subagent.started`:case`turn.completed`:case`turn.failed`:return!0;default:return!1}}function formatActionResultError(e){if(e.data.error?.message)return e.data.error.message;let t=e.data.result.output;if(typeof t==`string`)return t;try{return JSON.stringify(t)}catch{return`Tool execution failed.`}}function toFailureEvent(e,t,n){let r=failureKey(e);if(t.has(r))return;t.add(r);let c={type:`error`,errorText:formatFailureMessage(e)},l=n?.(e)??formatFailureHint(e);l!==void 0&&(c.hint=l);let u=formatFailureDetail(e);return u!==void 0&&(c.detail=u),c}function toAgentTUIInputQuestion(e){let t=e.display===`text`?`text`:e.display===`select`||e.options!==void 0&&e.options.length>0?`select`:`text`,n={requestId:e.requestId,prompt:e.prompt,display:t};return e.options!==void 0&&(n.options=e.options.map(e=>{let t={id:e.id,label:e.label};return e.description!==void 0&&(t.description=e.description),e.style!==void 0&&(t.style=e.style),t})),e.allowFreeform!==void 0&&(n.allowFreeform=e.allowFreeform),n}export{EveTUIRunner,parsePromptCommand};
|
|
1
|
+
import{PROMPT_COMMANDS,formatPromptCommandHelp,parsePromptCommand}from"./prompt-commands.js";import{pickAgentHeaderTip}from"./agent-header.js";import{failureKey,formatFailureDetail,formatFailureHint,formatFailureMessage,isInterruptedError,localFailureHint}from"./errors.js";import{parseLogDisplayMode}from"./log-display-mode.js";import{createMcpConnectionStatusTracker}from"./mcp-connection-status.js";import{createRemoteConnectionController}from"./remote-connection.js";import{SubagentPump}from"./subagent-pump.js";import{BOOT_DETECTIONS,CLI_MISSING_SETUP_ISSUE,LOGIN_SETUP_ISSUE,detectSetupIssues,formatSetupIssuesLine,normalizeLocalModelEndpoint,orderedSetupIssues}from"./setup-issues.js";import{TerminalRenderer}from"./terminal-renderer.js";import{createVercelStatusTracker}from"./vercel-status.js";import"#client/index.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{inspectApplication}from"#services/inspect-application.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{toErrorMessage}from"#shared/errors.js";import{getVercelAuthStatus}from"#setup/vercel-project.js";import{probeAgentInfo}from"#services/dev-client/agent-info-probe.js";import{renderApplicationInfo}from"#cli/commands/info.js";import{subscribeDevelopmentSandboxPrewarmLogs}from"#execution/sandbox/development-prewarm.js";import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{createDevelopmentRuntimeArtifactRefresher}from"#services/dev-client.js";async function delayMs(e){await new Promise(t=>{setTimeout(t,e).unref?.()})}function authIssueForStatus(e){if(e===`logged-out`)return LOGIN_SETUP_ISSUE;if(e===`cli-missing`)return CLI_MISSING_SETUP_ISSUE}var EveTUIRunner=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;#y;#b;#x;#S;#C;#w=!1;#T=new AbortController;#E=!1;#D=[];#O;#k;#A;#j;#M;#N=new Map;#P;#F;#I=new Map;#L=new Set;#R;#z;#B;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#B=t.lifecycle),this.#n=createRenderer(t);let n={formatActionResultError};if(this.#t!==void 0&&(n.client=this.#t),this.#n.subagents!==void 0&&(n.view=this.#n.subagents),this.#F=new SubagentPump(n),this.#r=t.name??`eve`,this.#j=t.startup?.headerTip??pickAgentHeaderTip(),this.#v=t.withExclusiveTerminal,this.#i=t.tools??`full`,this.#a=t.reasoning??`full`,this.#o=t.subagents??`full`,this.#s=t.connectionAuth??`full`,this.#c=t.assistantResponseStats??`tokensPerSecond`,this.#l=t.contextSize,this.#u=t.formatTransportError??toErrorMessage,t.initialInput!==void 0&&(this.#m=t.initialInput),t.startup!==void 0&&(this.#h=t.startup),t.appRoot!==void 0){this.#p=t.appRoot;let e={appRoot:t.appRoot,onChange:e=>this.#n.setVercelStatus?.(e)};t.detectProjectIdentity!==void 0&&(e.detectIdentity=t.detectProjectIdentity),this.#k=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#A=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#g=t.promptCommandHandler),this.#_=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#y=createRemoteConnectionController({client:this.#t,credentials:t.remote.credentials,target:t.remote.target,onChange:e=>this.#n.setRemoteConnectionStatus?.(e),resolveOidcToken:t.remote.resolveOidcToken,resolveDeployment:t.remote.resolveDeployment})}this.#b=t.bootDetections??BOOT_DETECTIONS,this.#x=t.getVercelAuthStatus??getVercelAuthStatus,this.#S=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#C=t.onBootProgress),t.serverUrl!==void 0&&(this.#f=t.serverUrl),t.serverUrl!==void 0&&t.remote===void 0&&(this.#d=createDevelopmentRuntimeArtifactRefresher({serverUrl:t.serverUrl}))}async#V(){if(this.#f===void 0)return this.#U(),await this.#te(void 0),this.#h?.finish()??this.#m;let e;if(this.#y!==void 0){let t=await this.#y.check();t.state===`ready`&&(e=t.info)}else{let t=this.#t;if(t!==void 0)try{let n=await devBootPhase(`connecting to agent`,()=>probeAgentInfo({client:t}),this.#C);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}let t=this.#h?.finish()??this.#m;this.#U();let n=this.#H(e);return await this.#te(n),t}#H(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#M=t;let n=this.#f;if(n===void 0)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#j),this.#n.renderAgentHeader?.(r),t}#U(){let e=this.#C;this.#C=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#B?.signal.aborted===!0?onStop():this.#B?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#W()}finally{this.#B?.signal.removeEventListener(`abort`,onStop),this.#w=!0,this.#T.abort(),this.#F.abortAll(),this.#z?.(),this.#z=void 0,this.#n.shutdown?.(),this.#k?.dispose(),this.#A?.dispose(),this.#y?.dispose()}}async#W(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=await this.#V();this.#y?.current().connection.state===`auth-required`&&await this.#ue({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#ae(),this.#k?.refreshIdentity(),this.#A?.refresh();let u=this.#m===void 0?void 0:parsePromptCommand(this.#m);for(u?.type===`extension`&&u.name===`model`&&u.argument===``&&this.#p!==void 0&&this.#g!==void 0&&this.#n.setupFlow!==void 0&&(l=void 0,await this.#de(e));;){if(this.#B?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;if(!s){if(r==null){if(!this.#n.readPrompt){if(a)return;throw Error(`No prompt was provided and the renderer does not support prompt input.`)}let t={title:e};l!==void 0&&(t.initialDraft=l,l=void 0);try{r=await this.#Y(t)}catch(e){if(isInterruptedError(e)){if(this.#P===void 0)return;s=!0,r=``}else throw e}if(r==null&&this.#P===void 0)return}let u=this.#P===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#B?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#oe(`No active turn to cancel.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.cancel();if(this.#oe(e.status===`accepted`?`Turn cancellation requested.`:`No active turn to cancel.`),e.status===`no_active_turn`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#oe(`Couldn't cancel the turn: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`reset`){if(!await this.#q()){i=void 0,s=!1,r=void 0;continue}i=void 0,s=!1,r=void 0;continue}if(u?.type===`compact`){if(this.#e===void 0){this.#oe(`No active session to compact.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.compact();if(this.#oe(e.status===`accepted`?`Compaction requested.`:`No active session to compact.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#oe(`Couldn't compact the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`clear`){if(this.#e===void 0){this.#oe(`No active session to clear.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.clear();if(this.#oe(e.status===`accepted`?`Context clear requested.`:`No active session to clear.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#oe(`Couldn't clear the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`help`){this.#oe(formatPromptCommandHelp(this.#_)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#me(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#oe(this.#he(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#pe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#ue(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let u=this.#P;this.#P=void 0;let d=u??(o?this.#$():await(async()=>(this.#K(),await this.#Z({prompt:s?void 0:r,inputResponses:i})))()),f=this.#e?.state.sessionId;f!==void 0&&this.#n.setSessionId?.(f);let p=r,m=!1;try{for(;;){await this.#n.renderStream(d,{title:e,submittedPrompt:p,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=d.turnState?.pendingApprovals??[],n=d.turnState?.pendingQuestions??[];if(t.length>0||n.length>0){let a=[];if(t.length>0){if(!this.#n.readToolApproval)throw Error(`Tool approval was requested, but the renderer does not support tool approval input.`);for(let n of t){let t=await this.#n.readToolApproval(n,{title:e});a.push({requestId:n.approvalId,optionId:t.approved?`approve`:`cancel`}),this.#N.delete(n.approvalId)}}if(n.length>0){if(!this.#n.readInputQuestion)throw Error(`An interactive question was requested, but the renderer does not support input questions.`);for(let t of n){let n=toAgentTUIInputQuestion(t),r=await this.#n.readInputQuestion(n,{title:e});if(r===void 0)continue;let i={requestId:t.requestId};r.optionId!==void 0&&(i.optionId=r.optionId),r.text!==void 0&&(i.text=r.text),a.push(i),this.#N.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,m=!0;break}if(this.#be(d)){d=this.#$(),p=void 0;continue}if(d.turnState&&d.turnState.boundaryEvent===void 0&&!d.turnState.aborted){let e=this.#e?.state.sessionId;this.#n.renderNotice?.(e?`Lost the event stream — the turn may still be running on the server (session ${e}). Your next message resumes this session; use /cancel to stop the turn.`:`Lost the connection to the running turn.`)}break}}catch(e){if(isInterruptedError(e))return;throw e}if(m)continue;o=!1,s=!1,i=void 0,r=void 0;let h=d.turnState?.boundaryEvent;this.#R!==this.#e&&(h===`session.waiting`||h===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#K(d.turnState?.aborted===!0)}}#G(){this.#F.abortAll(),this.#N.clear(),this.#I.clear(),this.#L.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#K(e=!1){let t=this.#R;t!==void 0&&(this.#R=void 0,this.#e===t&&(this.#G(),e?this.#n.renderNotice?.(`Stopped following the turn and started a new session. Earlier context was cleared; the interrupted turn may still be running on the server.`):this.#n.renderSessionBoundary===void 0?this.#n.renderNotice?.(`Session ended — started a new session. Earlier context was cleared.`):this.#n.renderSessionBoundary()))}async#q(){if(this.#e===void 0)return this.#G(),this.#n.reset?.(),!0;try{await this.#e.reset()}catch(e){return this.#n.renderNotice?.(`Couldn't reset the session: ${toErrorMessage(e)}`),!1}return this.#G(),this.#n.reset?.(),!0}async#J(e){if(!this.#n.readPrompt)return;let t=this.#n.readPrompt(e),n=this.#d;if(n===void 0)return await t;let r=!1,i=!1,a,o=0,refresh=async()=>{if(!(r||i)){i=!0;try{await n.refreshIdle({onRuntimeArtifactsChanged:()=>this.#ve()});let e=this.#M?.agent.model.endpoint,t=e?.kind===`chatgpt`&&(e.state===`signed-out`||e.state===`reauth-required`),r=Date.now();if(t&&r-o>=5e3){o=r;let e=await this.#_e();e!==void 0&&this.#H(e)}}finally{i=!1}}},startRefresh=()=>{if(r||i)return;let e=refresh().finally(()=>{a===e&&(a=void 0)});a=e};startRefresh();let s=setInterval(()=>{startRefresh()},500);s.unref?.();try{return await t}finally{r=!0,clearInterval(s),await a}}async#Y(e){let t=this.#J(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#X(n.signal,e).catch(e=>{n.signal.aborted||this.#n.renderNotice?.(`Stopped following session updates: ${toErrorMessage(e)}`)});try{return await t}finally{n.abort(),await r}}async#X(e,t){let n=this.#e;if(n===void 0)return;let r=n.stream({signal:e})[Symbol.asyncIterator]();try{for(;!e.aborted;){let i=!1,a={async*[Symbol.asyncIterator](){for(;!e.aborted;){let e=await r.next();if(e.done===!0||(i=!0,yield e.value,isCurrentTurnBoundaryEvent(e.value)))return}}},o=this.#ee(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#be(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#P={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#Z(e){let t=new AbortController,n={signal:t.signal};e.prompt!==void 0&&(n.message=e.prompt),e.inputResponses!==void 0&&e.inputResponses.length>0&&(n.inputResponses=e.inputResponses);let r,i=this.#e;try{if(this.#d!==void 0&&await this.#d.refresh({inputResponses:n.inputResponses,message:n.message,onRuntimeArtifactsChanged:()=>this.#ve()}),n.message!==void 0&&(n.inputResponses?.length??0)===0&&this.#n.flushDelayedDevBuildErrors?.(),this.#e===void 0){if(this.#t===void 0)throw Error(`Cannot create a session without an eve client.`);if(n.message===void 0)throw Error(`Cannot answer an input request before the session starts.`);let e=await this.#t.sessions.create({...n,message:n.message});this.#e=e.session,r=e.response}else r=n.inputResponses===void 0?await this.#e.send(n.message,{signal:n.signal,turnPolicy:`queue`}):await this.#e.respond(n.inputResponses,{signal:n.signal})}catch(e){if(isInterruptedError(e))throw e;return this.#y?.reportFailure(e),this.#R=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#ee(r,()=>t.abort(),this.#e)}async#Q(e,t){if(e.cancelInFlight!==!0){e.cancelInFlight=!0;try{for(let n=0;n<8;n+=1){if(e.boundaryEvent!==void 0||e.aborted===!0)return;let n=e.turnId;try{if((await t?.cancel(n===void 0?void 0:{turnId:n}))?.status===`accepted`)return}catch{}await delayMs(250)}}finally{e.cancelInFlight=!1}}}#$(){if(this.#e===void 0)throw Error(`Cannot stream a session before its first turn is accepted.`);let e=new AbortController,t=this.#e;return this.#ee(t.stream({signal:e.signal}),()=>e.abort(),t)}#ee(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#R=n,t()},cancel:()=>{this.#Q(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#N,turnState:r,onSubagentCalled:e=>this.#F.begin(e),onSubagentBackgrounded:e=>this.#F.background(e),onSubagentCompleted:e=>this.#F.settle(e),onTurnCancelled:e=>this.#F.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#ye(e),onConnectionAuthCompleted:e=>this.#xe(e),onTerminalFailure:()=>{this.#R=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}async#te(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#D=await detectSetupIssues(t,this.#b),this.#n.renderSetupWarning!==void 0&&(this.#ne(),this.#re())}#ne(){let e=orderedSetupIssues(this.#D,this.#O);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#re(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#x(e,{signal:this.#T.signal})}catch{return}this.#w||this.#E||(this.#O=authIssueForStatus(t),this.#ne())}async#ie(e){let t=this.#p;if(t===void 0||this.#n.renderSetupWarning===void 0)return;let n={appRoot:t,env:process.env};e!==void 0&&(n.info=e);try{this.#D=await detectSetupIssues(n,this.#b);let e=await this.#x(t,{signal:this.#T.signal});this.#O=authIssueForStatus(e)}catch{return}this.#w||this.#ne()}#ae(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#z===void 0&&(this.#z=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#oe(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#se(e,t){let n=this.#g;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#M?.agent.model.endpoint,i={renderer:this.#n,title:t.title,initialModelStep:t.initialModelStep,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#y,withExclusiveTerminal:this.#v},a=this.#A?.current(),o=a!==void 0&&Object.keys(a).length>0?{...i,disabledConnectionReasons:a}:i;return t.keepSetupFlowOpen===!0?await n.handle(e,{...o,keepSetupFlowOpen:!0}):await n.handle(e,o)}#ce(e,t){if(t!==`startup`)return;let n=this.#y?.current().connection.state,r=n===`auth-failed`||n===`unavailable`?`failed`:void 0,i=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${i}`,r)}async#le(e){if(e?.kind===`model-access-changed`){this.#k?.applyEffect({kind:`refresh-identity`}),this.#E=!0,await this.#ge();return}e!==void 0&&(this.#k?.applyEffect(e),this.#E=!0,this.#ie(this.#M))}async#ue(e,t,n){let r=await this.#se(e,{initialModelStep:n.initialModelStep,keepSetupFlowOpen:n.keepSetupFlowOpen,title:t});this.#ce(e,n.trigger),this.#oe(r?.message,r?.tone),await this.#le(r?.effect),this.#fe()}async#de(e){let t=this.#p;if(t===void 0)return;let authStatus=async()=>{try{return await this.#x(t,{signal:this.#T.signal})}catch{return}},n=await authStatus();if(n===`cli-missing`&&(await this.#ue({type:`extension`,name:`vc:install`,argument:``},e,{trigger:`startup`,keepSetupFlowOpen:!0}),n=await authStatus(),n===`cli-missing`)){this.#n.setupFlow?.end();return}if(n===`logged-out`&&(await this.#ue({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`,keepSetupFlowOpen:!0}),n=await authStatus(),n===`cli-missing`||n===`logged-out`)){this.#n.setupFlow?.end();return}await this.#ue({type:`extension`,name:`model`,argument:``},e,{trigger:`startup`,initialModelStep:`provider`}),await this.#ue({type:`extension`,name:`add`,argument:``},e,{trigger:`startup`})}#fe(){let e=this.#y?.current().connection;e?.state!==`ready`||e.info===this.#M||(this.#M=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#pe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#oe(`/traces is only available in local dev sessions.`);return}try{await this.#n.traceViewer.open({appRoot:this.#p,sessionId:this.#e?.state.sessionId,reference:e===``?void 0:e})}catch(e){if(isInterruptedError(e))return;throw e}}async#me(){let e=this.#p;if(e===void 0){this.#oe(`/info is only available in local dev sessions.`);return}try{this.#oe(renderApplicationInfo(await this.#S(e)))}catch(e){this.#oe(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#he(e){let t=this.#n;if(t.logDisplayMode===void 0||t.setLogDisplayMode===void 0)return`/loglevel is not available in this session.`;if(e===``)return`Logs: ${t.logDisplayMode()}. Use /loglevel all|stderr|sandbox|none — logs stay buffered, so switching also hides or restores past lines.`;let n=parseLogDisplayMode(e);if(n===void 0)return`Unknown log level "${e}". Use all, stderr, sandbox, or none.`;if(n===t.logDisplayMode())return`Logs already set to ${n}.`;switch(t.setLogDisplayMode(n),n){case`none`:return`Logs hidden. Output stays buffered — /loglevel all restores it.`;case`stderr`:return`Showing stderr logs only.`;case`sandbox`:return`Showing sandbox logs only.`;case`all`:return`Showing all logs.`}}async#ge(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#H(await this.#_e());this.#ie(t)}async#_e(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#ve(){let e=this.#M,t=await this.#_e();t!==void 0&&this.#H(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#ye(e){let t={name:e.data.name,description:e.data.description,state:`required`};e.data.authorization!==void 0&&(t.challenge=e.data.authorization),e.data.webhookUrl!==void 0&&(t.webhookUrl=e.data.webhookUrl),this.#I.set(e.data.name,t),this.#Se(t)}#be(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#I.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#L.add(e.name),this.#Se(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#L.size),this.#L.size>0}#xe(e){let t=this.#I.get(e.data.name)??{name:e.data.name,description:``,state:e.data.outcome};t.state=e.data.outcome,e.data.reason!==void 0&&(t.reason=e.data.reason),this.#I.set(e.data.name,t),this.#L.delete(e.data.name),this.#Se(t),this.#n.setConnectionAuthPendingCount?.(this.#L.size)}#Se(e){let t={name:e.name,description:e.description,state:e.state};e.challenge!==void 0&&(t.challenge=e.challenge),e.reason!==void 0&&(t.reason=e.reason),this.#n.upsertConnectionAuth?.(t)}};function createRenderer(e){return e.renderer?e.renderer:new TerminalRenderer({tools:e.tools,reasoning:e.reasoning,subagents:e.subagents,connectionAuth:e.connectionAuth,assistantResponseStats:e.assistantResponseStats,contextSize:e.contextSize,logs:e.logs,availablePromptCommands:e.availablePromptCommands,input:e.userInput,output:e.screen,diagnostics:e.diagnostics,onExitRequest:e.lifecycle?.requestStop})}function formatAgentUpdateNotice(e,t){let n=e?.agent.model.id,r=t?.agent.model.id;return n!==void 0&&r!==void 0&&n!==r?`Agent updated: Model ${n} -> ${r}`:`Agent updated.`}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onTerminalFailure:u,failureHintOverride:d}=e,f=new Map,p=new Map,m=createEventDeduper(),h=0,g=new Set,_=new Set,v=new Set,y=!1,b=!1,x;for await(let e of t)if(m.admit(e)&&!(b&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:h+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;x=t.data.usage,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`step-finish`,usage:t.data.usage};break}case`message.appended`:{let t=e,n=textPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(f,n),i=t.data.messageSoFar;if(r.completed){if(h<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`assistant-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`message.completed`:{let t=textPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(f,t),r=e.data.message;if(n.completed){if(r===null||h<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=h,yield{type:`assistant-complete`,id:partGenerationId(t,n.generation),text:r};break}let i=partGenerationId(t,n.generation);if(r!==null){if(n.text.length===0)n.text=r,n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i,text:r};else if(r.startsWith(n.text)){let e=r.slice(n.text.length);e.length>0&&(yield{type:`assistant-delta`,id:i,delta:e}),n.text=r,n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i}}}else n.text.length>0&&(n.completed=!0,n.completedEpoch=h,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(p,n),i=t.data.reasoningSoFar;if(r.completed){if(h<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`reasoning-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`reasoning.completed`:{let t=reasoningPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(p,t),r=e.data.reasoning;if(n.completed){if(r.length===0||h<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=h;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}let i=partGenerationId(t,n.generation);if(n.text.length===0&&r.length>0)n.text=r,yield{type:`reasoning-delta`,id:i,delta:r};else if(r.length>0&&!r.startsWith(n.text))break;n.completed=!0,n.completedEpoch=h,yield{type:`reasoning-complete`,id:i};break}case`actions.requested`:{let t=e.data.actions.filter(e=>e.kind===`tool-call`);if(t.length===0)break;for(let e of t)g.has(e.callId)||(g.add(e.callId),yield{type:`tool-call`,toolCallId:e.callId,toolName:e.toolName,input:e.input});break}case`input.requested`:{let t=e.data.requests.filter(e=>e.action.kind===`tool-call`);if(t.length===0)break;for(let e of t){let t=e.action.callId;if(e.kind!==`session-limit`&&!g.has(t)&&(g.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!_.has(e.requestId)){if(_.add(e.requestId),n.set(e.requestId,e),e.kind!==`tool-approval`){upsertPendingQuestion(r,e);continue}upsertPendingApproval(r,e),yield{type:`tool-approval-request`,approvalId:e.requestId,toolCallId:t}}}break}case`action.result`:{let t=e;if(t.data.result.kind!==`tool-result`)break;let n=t.data.result.callId;if(!g.has(n))break;switch(t.data.status){case`completed`:yield{type:`tool-result`,toolCallId:n,output:t.data.result.output};break;case`failed`:yield{type:`tool-error`,toolCallId:n,errorText:formatActionResultError(t)};break;case`rejected`:yield{type:`tool-rejected`,toolCallId:n,reason:formatActionResultError(t)};break}break}case`step.failed`:case`turn.failed`:{let t=toFailureEvent(e,v,d);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,u?.(e);let t=toFailureEvent(e,v,d);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x},y=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x},y=!0;return;case`turn.completed`:b=!0,yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`turn-cancelled`};break;case`subagent.called`:i?.(e);break;case`subagent.started`:case`subagent.event`:break;case`subagent.completed`:{let t=e;t.data.backgroundTask===void 0?o?.(t.data.callId):a?.(t.data.callId);break}case`authorization.required`:c?.(e);break;case`authorization.completed`:l?.(e);break;default:break}y||(yield*closeOpenParts(f,`assistant-complete`,h),yield*closeOpenParts(p,`reasoning-complete`,h),yield{type:`finish`,usage:x})}async function*errorOnlyTUIStream(e){yield{type:`error`,errorText:e.errorText},yield{type:`finish`}}function createTurnState(){return{aborted:!1,pendingApprovals:[],pendingQuestions:[],sawSessionFailure:!1}}function upsertPendingApproval(e,t){let n=toAgentTUIToolApprovalRequest(t),r=e.pendingApprovals.findIndex(e=>e.approvalId===n.approvalId);r===-1?e.pendingApprovals.push(n):e.pendingApprovals[r]=n}function toAgentTUIToolApprovalRequest(e){return{approvalId:e.requestId,toolCallId:e.action.callId,toolName:e.action.toolName,input:e.action.input}}function upsertPendingQuestion(e,t){let n=e.pendingQuestions.findIndex(e=>e.requestId===t.requestId);n===-1?e.pendingQuestions.push(t):e.pendingQuestions[n]=t}function textPartId(e,t){return`text:${e}:${t}`}function reasoningPartId(e,t){return`reasoning:${e}:${t}`}function partStateFor(e,t){let n=e.get(t);return n===void 0&&(n={generation:0,text:``,completed:!1,completedEpoch:0},e.set(t,n)),n}function partGenerationId(e,t){return t===0?e:`${e}#${t}`}function*closeOpenParts(e,t,n){for(let[r,i]of e)i.completed||i.text.length===0||(i.completed=!0,i.completedEpoch=n,yield{type:t,id:partGenerationId(r,i.generation)})}function isPostTurnVisibleEvent(e){switch(e.type){case`actions.requested`:case`authorization.completed`:case`authorization.required`:case`input.requested`:case`message.appended`:case`message.completed`:case`reasoning.appended`:case`reasoning.completed`:case`result.completed`:case`step.completed`:case`step.failed`:case`step.started`:case`subagent.called`:case`subagent.completed`:case`subagent.event`:case`subagent.started`:case`turn.completed`:case`turn.failed`:return!0;default:return!1}}function formatActionResultError(e){if(e.data.error?.message)return e.data.error.message;let t=e.data.result.output;if(typeof t==`string`)return t;try{return JSON.stringify(t)}catch{return`Tool execution failed.`}}function toFailureEvent(e,t,n){let r=failureKey(e);if(t.has(r))return;t.add(r);let c={type:`error`,errorText:formatFailureMessage(e)},l=n?.(e)??formatFailureHint(e);l!==void 0&&(c.hint=l);let u=formatFailureDetail(e);return u!==void 0&&(c.detail=u),c}function toAgentTUIInputQuestion(e){let t=e.display===`text`?`text`:e.display===`select`||e.options!==void 0&&e.options.length>0?`select`:`text`,n={requestId:e.requestId,prompt:e.prompt,display:t};return e.options!==void 0&&(n.options=e.options.map(e=>{let t={id:e.id,label:e.label};return e.description!==void 0&&(t.description=e.description),e.style!==void 0&&(t.style=e.style),t})),e.allowFreeform!==void 0&&(n.allowFreeform=e.allowFreeform),n}export{EveTUIRunner,parsePromptCommand};
|
|
@@ -64,6 +64,12 @@ export declare class TerminalRenderer implements AgentTUIRenderer {
|
|
|
64
64
|
* Committed scrollback is never cleared or replayed.
|
|
65
65
|
*/
|
|
66
66
|
renderAgentHeader(options: AgentHeaderOptions): void;
|
|
67
|
+
beginStartupDraft(options: {
|
|
68
|
+
initialDraft?: string;
|
|
69
|
+
tip: string;
|
|
70
|
+
title: string;
|
|
71
|
+
}): void;
|
|
72
|
+
finishStartupDraft(): string;
|
|
67
73
|
readPrompt(options?: AgentTUISessionOptions): Promise<string>;
|
|
68
74
|
/**
|
|
69
75
|
* Consumes the next prompt produced by mid-turn input — the staged Esc
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-commands.js";import{buildAgentHeader}from"./agent-header.js";import{renderAttentionRows,renderBlockLines}from"./blocks.js";import{copyTextToClipboard}from"./clipboard.js";import{dismissTypeahead,inlineCommandHint,isTypeaheadOpen,moveTypeaheadSelection,renderCommandSuggestions,selectedTypeaheadCommand,typeaheadCompletion,typeaheadFor}from"./command-typeahead.js";import{formatDevRebuildStatus,summarizeChangedFiles}from"./dev-rebuild-status.js";import{formatStoredDiagnostic,presentDiagnostic}from"./diagnostic-presentation.js";import{interruptedError}from"./errors.js";import{FileContentCache}from"./file-content-cache.js";import{EMPTY_LINE,PromptHistory,applyLineEditorKey,deleteForward,layoutPromptInput,lineOf,movePromptLine,visibleLine}from"./line-editor.js";import{nextLogDisplayMode}from"./log-display-mode.js";import{MessageQueue,renderMessageQueueRows}from"./message-queue.js";import{initialModelEditorState,transitionModelEditor}from"./model-editor.js";import{promptPlaceholder}from"./prompt-placeholder.js";import{initialProviderPickerState,transitionProviderPicker}from"./provider-picker.js";import{renderQuestionPanel}from"./question-panel.js";import{enterBadge,renderAcknowledgeQuestion,renderFlowPanel,renderModelEditorQuestion,renderSelectQuestion,renderTextQuestion}from"./setup-panel.js";import{formatAssistantResponseStats,formatTokenFlow,formatTurnDuration,isIncompleteOsc,isIncompletePaste,nextKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil,typewriterText}from"./stream-format.js";import{TraceViewerSession}from"./traces/trace-viewer-session.js";import{buildStatusLine}from"./status-line.js";import{createTheme,detectUnicode}from"./theme.js";import{isPanelRoutedTool,presentPreparingTool,presentTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{groupToolBlocksForDisplay}from"./tool-block-groups.js";import{TurnClock}from"./turn-clock.js";import{allTodoItemsSettled,readTodoToolItems,renderFinishedTodoRows,renderTodoPanelRows}from"./todo-panel.js";import{reduceSetupSelectInput,setupSelectionIntent}from"./setup-selection-input.js";import{BACKGROUND_COLOR_QUERY,parseBackgroundColorReply}from"./terminal-background.js";import{inspectError}from"#internal/logging.js";import{eveVersionTag}from"#cli/banner.js";import{clipVisible,renderInputText,renderInputWithBlockCursor,stripAnsi,stripTerminalControls}from"#cli/ui/terminal-text.js";import{renderCursorRow}from"#setup/cli/option-row.js";import{initialSelectState,reduceSelect,searchActionQuery,selectValueAtCursor}from"#setup/cli/select-state.js";import{toErrorMessage}from"#shared/errors.js";import{StringDecoder}from"node:string_decoder";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{parseDevRebuildLogLine}from"#internal/nitro/host/dev-watcher-log.js";import{LiveRegion}from"#cli/ui/live-region.js";import{AltScreen}from"#cli/ui/alt-screen.js";import{PROGRESS_PULSE_ASCII_GLYPH,PROGRESS_PULSE_GLYPH,isProgressPulseVisible}from"#cli/ui/progress-pulse.js";import{readGatewayServiceTier}from"#shared/gateway-service-tier.js";function isMultiSelectRequest(e){return e.kind===`multi`||e.kind===`searchable-multi`}function moveActionCursor(e,t,n){return n===0?void 0:e===void 0?t===`down`?0:n-1:(e+(t===`down`?1:-1)+n)%n}function completedTurnStatus(e){return e.interrupted?`Interrupted`:e.cancelled?`Cancelled`:e.continueSession?`Ready`:`Done`}const incompletePasteFlushMs=1e3,STATUS={processing:`Working…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=[];#h=new Map;#g=new Set;#_=[];#v=new Set;#y=new Map;#b=0;#x=new Map;#S=new Set;#C=new Set;#w=new FileContentCache;#T=new Set;#E;#D=!1;#
|
|
2
|
-
`);if(this.#
|
|
1
|
+
import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-commands.js";import{buildAgentHeader}from"./agent-header.js";import{renderAttentionRows,renderBlockLines}from"./blocks.js";import{copyTextToClipboard}from"./clipboard.js";import{dismissTypeahead,inlineCommandHint,isTypeaheadOpen,moveTypeaheadSelection,renderCommandSuggestions,selectedTypeaheadCommand,typeaheadCompletion,typeaheadFor}from"./command-typeahead.js";import{formatDevRebuildStatus,summarizeChangedFiles}from"./dev-rebuild-status.js";import{formatStoredDiagnostic,presentDiagnostic}from"./diagnostic-presentation.js";import{interruptedError}from"./errors.js";import{FileContentCache}from"./file-content-cache.js";import{EMPTY_LINE,PromptHistory,applyLineEditorKey,deleteForward,layoutPromptInput,lineOf,movePromptLine,visibleLine}from"./line-editor.js";import{nextLogDisplayMode}from"./log-display-mode.js";import{MessageQueue,renderMessageQueueRows}from"./message-queue.js";import{initialModelEditorState,transitionModelEditor}from"./model-editor.js";import{promptPlaceholder}from"./prompt-placeholder.js";import{initialProviderPickerState,transitionProviderPicker}from"./provider-picker.js";import{renderQuestionPanel}from"./question-panel.js";import{enterBadge,renderAcknowledgeQuestion,renderFlowPanel,renderModelEditorQuestion,renderSelectQuestion,renderTextQuestion}from"./setup-panel.js";import{formatAssistantResponseStats,formatTokenFlow,formatTurnDuration,isIncompleteOsc,isIncompletePaste,nextKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil,typewriterText}from"./stream-format.js";import{TraceViewerSession}from"./traces/trace-viewer-session.js";import{buildStatusLine}from"./status-line.js";import{createTheme,detectUnicode}from"./theme.js";import{isPanelRoutedTool,presentPreparingTool,presentTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{groupToolBlocksForDisplay}from"./tool-block-groups.js";import{TurnClock}from"./turn-clock.js";import{allTodoItemsSettled,readTodoToolItems,renderFinishedTodoRows,renderTodoPanelRows}from"./todo-panel.js";import{reduceSetupSelectInput,setupSelectionIntent}from"./setup-selection-input.js";import{BACKGROUND_COLOR_QUERY,parseBackgroundColorReply}from"./terminal-background.js";import{inspectError}from"#internal/logging.js";import{eveVersionTag}from"#cli/banner.js";import{clipVisible,renderInputText,renderInputWithBlockCursor,stripAnsi,stripTerminalControls}from"#cli/ui/terminal-text.js";import{renderCursorRow}from"#setup/cli/option-row.js";import{initialSelectState,reduceSelect,searchActionQuery,selectValueAtCursor}from"#setup/cli/select-state.js";import{toErrorMessage}from"#shared/errors.js";import{StringDecoder}from"node:string_decoder";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{parseDevRebuildLogLine}from"#internal/nitro/host/dev-watcher-log.js";import{LiveRegion}from"#cli/ui/live-region.js";import{AltScreen}from"#cli/ui/alt-screen.js";import{PROGRESS_PULSE_ASCII_GLYPH,PROGRESS_PULSE_GLYPH,isProgressPulseVisible}from"#cli/ui/progress-pulse.js";import{readGatewayServiceTier}from"#shared/gateway-service-tier.js";function isMultiSelectRequest(e){return e.kind===`multi`||e.kind===`searchable-multi`}function moveActionCursor(e,t,n){return n===0?void 0:e===void 0?t===`down`?0:n-1:(e+(t===`down`?1:-1)+n)%n}function completedTurnStatus(e){return e.interrupted?`Interrupted`:e.cancelled?`Cancelled`:e.continueSession?`Ready`:`Done`}const incompletePasteFlushMs=1e3,STATUS={processing:`Working…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=[];#h=new Map;#g=new Set;#_=[];#v=new Set;#y=new Map;#b=0;#x=new Map;#S=new Set;#C=new Set;#w=new FileContentCache;#T=new Set;#E;#D;#O=!1;#k;#A=[];#j;#M=0;#N;#P;#F=``;#I=0;#L=new PromptHistory;#R=!1;#z;#B=!1;#V=Date.now();#H=!1;#U=new TurnClock;#W=EMPTY_LINE;#G=!1;#K={kind:`idle`};#q;#J=STATUS.processing;#Y;#X=`eve`;#Z=!1;#Q=!1;#$=!1;#ee=!1;#te=!1;#ne=!1;#re;#ie=!0;#ae=0;#oe=Date.now();#se;#ce;#le;#ue=!1;#de;#fe=``;#pe=new StringDecoder(`utf8`);#me;#he;#ge;#_e=!1;#ve=!1;#ye;#be;#xe;#Se;#Ce;#we;#Te;#Ee=``;#De=``;#Oe;#ke;#Ae=0;#je;#Me;#Ne;#Pe;#Fe;#Ie;#Le=new MessageQueue;#Re;#ze=!1;#Be;#Ve;#He=!1;#Ue;#We;#Ge;#Ke;#qe;setupFlow={begin:(e,t)=>this.#$e(e,t),end:e=>this.#et(e?.preserveDiagnostics??!0),readSelect:e=>this.#tt(e),readEditableSelect:e=>this.#rt(e),readProviderPicker:e=>this.#it(e),readModelEditor:e=>this.#at(e),readText:e=>this.#ot(e),readAcknowledge:e=>this.#st(e),readChoice:e=>this.#nt(e),setStatus:e=>this.#ht(e),renderLine:(e,t)=>this.#gt(e,t),replaceContent:e=>this.#_t(e),renderOutput:e=>this.#vt(e),withInheritedStdio:e=>this.#yt(e),withExclusiveTerminal:e=>this.#yt(e),waitForInterrupt:e=>this.#ft(e)};traceViewer={open:e=>this.#xt(e)};constructor(t){this.#e=t?.input??process.stdin,this.#t=t?.output??process.stdout,this.#n=new LiveRegion(this.#t),this.#r=new AltScreen(this.#t),this.#i=createTheme({color:t?.color??!0,unicode:t?.unicode??detectUnicode()}),this.#a=t?.tools??`auto-collapsed`,this.#o=t?.reasoning??`auto-collapsed`,this.#s=t?.subagents??`auto-collapsed`,this.#c=t?.connectionAuth??`full`,this.#l=t?.assistantResponseStats??`tokensPerSecond`,this.#xe=t?.contextSize,this.#u=t?.captureForeignOutput??this.#t===process.stdout,this.#d=t?.diagnostics,this.#re=t?.onExitRequest,this.#p=t?.logs??`none`,this.#f=t?.availablePromptCommands??PROMPT_COMMANDS}renderAgentHeader(e){this.#X=e.name,this.#E=e,this.#wt();let t=this.#mn().join(`
|
|
2
|
+
`);if(this.#O){t!==this.#k&&(this.#k=t,this.#Vt({kind:`agent-header`,body:t,live:!1})),this.#ln();return}this.#O=!0,this.#k=t,this.#n.flush(this.#mn(),[])}beginStartupDraft(e){this.#wt({title:e.title}),this.#R=!0,this.#B=!0,this.#D={name:e.title,tip:e.tip};let t=lineOf(stripPromptControlCharacters(e.initialDraft??``));this.#Je(t),this.#Ft(),this.#ln();let apply=e=>{t=e,this.#Lt(),this.#Je(t),this.#ln()};this.#de=e=>{let n=applyLineEditorKey(t,e,{multiline:!0});if(n!==void 0){apply(n);return}e.type===`ctrl-c`&&this.#re?.()},this.#Dt()}finishStartupDraft(){let e=this.#F;return this.#Ot(),this.#It(),this.#R=!1,this.#D=void 0,this.#B=!1,e}async readPrompt(e){this.#wt(e),this.#Bt(),this.#Ut(),this.#R=!0,this.#B=!0,this.#K={kind:`idle`},this.#J=``,this.#ne=!1;let r=this.#Le.restoreDraft()?.split(`
|
|
3
3
|
`).map(stripPromptControlCharacters).join(`
|
|
4
|
-
`),i=stripPromptControlCharacters(e?.initialDraft??this.#U.text),a=lineOf(r===void 0?i:i.length===0?r:`${r}\n\n${i}`);return this.#U=EMPTY_LINE,this.#I.begin(a.text),this.#qe(a),this.#R=typeaheadFor(this.#f,a.text),this.#Pt(),this.#cn(),await new Promise((e,r)=>{this.#K=r;let apply=e=>{a=e,this.#It(),this.#qe(a),this.#R=typeaheadFor(this.#f,e.text,this.#R),this.#cn()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#R=void 0,this.#Ft(),this.#Tt(),r(interruptedError())},suggestions=()=>this.#R!==void 0&&isTypeaheadOpen(this.#R)?this.#R:void 0,highlighted=()=>{let e=suggestions();return e===void 0?void 0:selectedTypeaheadCommand(e)};this.#ue=r=>{r.type!==`ctrl-c`&&this.#te&&(this.#te=!1,this.#cn());let i=applyLineEditorKey(a,r,{multiline:!0});if(i!==void 0){apply(i);return}switch(r.type){case`up`:case`ctrl-p`:{let e=suggestions();if(e!==void 0){this.#R=moveTypeaheadSelection(e,-1),this.#cn();break}let t=movePromptLine(a,`up`);t===void 0?recall(this.#I.previous(a.text)):apply(t);break}case`down`:case`ctrl-n`:{let e=suggestions();if(e!==void 0){this.#R=moveTypeaheadSelection(e,1),this.#cn();break}let t=movePromptLine(a,`down`);t===void 0?recall(this.#I.next()):apply(t);break}case`tab`:{let e=highlighted();e!==void 0&&apply(lineOf(typeaheadCompletion(e)));break}case`escape`:{let e=suggestions();e!==void 0&&(this.#R=dismissTypeahead(e),this.#cn());break}case`enter`:{let r=highlighted(),i=r!==void 0&&parsePromptCommand(a.text)===null?typeaheadCompletion(r).trimEnd():a.text;if(i.trim().length===0)break;this.#R=void 0,this.#I.add(i),this.#L=!1,this.#Ft(),this.#q=STATUS.processing,isPromptControlCommand(i)?this.#Bt({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#Rt(),this.#Vt(i),this.#Ae=i,this.#H.arm()),this.#qe(EMPTY_LINE),this.#cn(),this.#Dt(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#yt(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#dn();break;case`ctrl-r`:this.#cn();break;case`ctrl-c`:if(this.#te){this.#yt(),interrupt();break}this.#te=!0,apply(EMPTY_LINE);break;default:break}},this.#Et()})}#qe(e){this.#P=e.text,this.#F=e.cursor}takeQueuedPrompt(){let e=this.#Ie.view().steering,t=this.#Ie.takePrompt();return t!==void 0&&(this.#Be=e?`steer`:`queue`),t}async renderStream(e,t){this.#Ct(t),this.#g.clear(),this.#L=!1,this.#G.kind!==`waiting`&&(this.#G={kind:`waiting`,startedAtMs:Date.now()}),this.#q=this.#j>0?STATUS.connectionAuth:STATUS.processing,this.#Ut(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#d?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#H.armed&&this.#H.arm(),this.#$=!1,this.#Re=!1,this.#Ve=!1,this.#He=t?.submittedPrompt,this.#Ie.beginTurn(),this.#Le=e.cancel,this.#ve=void 0,this.#ye=void 0,this.#xe=void 0,this.#Se=void 0,this.#Ce=Date.now();let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l};this.#Lt(),this.#W=!0,this.#cn();let r=new Promise(e=>{this.#he=e});this.#ue=e=>this.#Nt(e),this.#Et();let i={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!0};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#$)break;this.#Xt(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Wt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Wt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#he=void 0,this.#$&&e.abort?.(),this.#Le=void 0,this.#Dt(),this.#zt(),this.#W=!1,this.#G.kind===`waiting`&&(this.#G={kind:`idle`}),this.#q=completedTurnStatus({interrupted:this.#$,cancelled:this.#Re,continueSession:t?.continueSession===!0}),this.#rn(i),(this.#$||i.cancelled)&&this.#nn(i),this.#Yt(),this.#d?.reportStats(),this.#cn(),t?.continueSession||this.#Tt()}}async renderIdleStream(e,t){let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l},r={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!1};try{for await(let t of iterateTUIStream(e.events))this.#Xt(t,n,r)}catch(e){let t=summarizeKnownError(e);t===null?this.#Wt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Wt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#rn(r),r.cancelled&&this.#nn(r),this.#Yt(),this.#d?.reportStats(),this.#cn()}}async readToolApproval(e,t){return this.#Ct(t),this.#zt(),this.#L=!1,this.#G={kind:`idle`},this.#q=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#$=!1,this.#cn(),await new Promise((t,n)=>{this.#K=n,this.#ue=r=>{switch(r.type){case`text`:{if(r.framing!==`unframed`)break;let n=r.value.toLowerCase();n===`y`?(this.#Rt(),this.#q=STATUS.processing,this.#Dt(),this.#cn(),t({approved:!0})):n===`n`&&(this.#Rt(),this.#q=STATUS.processing,this.#Ye(e.toolCallId),this.#Dt(),this.#cn(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#cn();break;case`ctrl-c`:this.#$=!0,this.#Tt(),n(interruptedError());break;default:break}},this.#Et()})}async readInputQuestion(e,t){this.#Ct(t),this.#zt(),this.#L=!1,this.#z=!1,this.#G={kind:`idle`},this.#$=!1;let n=e.options??[],r=n.length>0,i=(e.allowFreeform===!0||!r)&&r,a=n.length+ +!!i,o=questionSectionId(e.requestId),s=r?`overlay`:`text`,c=0,l=EMPTY_LINE,isOnFreeformRow=()=>i&&c===n.length,overlayPanel=t=>renderQuestionPanel({prompt:stripTerminalControls(e.prompt),options:n,cursor:c,allowFreeform:i,editor:l,caretVisible:this.#re},this.#i,t),renderTextSection=()=>{this.#Kt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#i),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#Pt():(this.#Ft(),this.#It())};s===`overlay`?(s=`overlay`,this.#L=!1,this.#Jt(o),this.#je=overlayPanel,this.#q=``,syncFreeformCaret(),this.#cn()):(s=`text`,this.#je=void 0,renderTextSection(),this.#L=!0,this.#qe(l),this.#q=``,this.#Pt(),this.#cn());let finalize=t=>{this.#je=void 0,this.#Kt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${stripTerminalControls(t.label)}`,preformatted:!0,live:!1}),this.#L=!1,this.#Rt(),this.#q=STATUS.processing,this.#Ft(),this.#Dt(),this.#cn();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#je=void 0,this.#Kt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${this.#i.colors.dim(`Dismissed.`)}`,preformatted:!0,live:!1}),this.#L=!1,this.#q=``,this.#Ft(),this.#Dt(),this.#cn(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#cn())},selectOptionAt=e=>{let t=n[e];t&&u(finalize({optionId:t.id,label:t.label}))},u;return await new Promise((t,r)=>{this.#K=r,u=t,this.#ue=t=>{if(t.type===`ctrl-c`){if((s===`text`||isOnFreeformRow())&&l.text.length>0){l=EMPTY_LINE,this.#It(),s===`text`&&this.#qe(l),this.#cn();return}this.#$=!0,this.#je=void 0,this.#Ft(),this.#Tt(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#cn();return}if(s===`overlay`){let r=setupSelectionIntent(t,{textNavigation:!isOnFreeformRow()});if(r?.kind===`move`){moveCursor(r.direction===`up`?-1:1);return}switch(t.type){case`up`:case`ctrl-p`:moveCursor(-1);break;case`down`:case`ctrl-n`:moveCursor(1);break;case`enter`:if(isOnFreeformRow()){let t=resolveQuestionText(l.text,e);t!==void 0&&u(finalize(t));break}selectOptionAt(c);break;case`escape`:if(isOnFreeformRow()&&l.text.length>0){l=EMPTY_LINE,this.#It(),this.#cn();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#It(),this.#cn());break}if(t.type===`text`&&/^[1-9]$/u.test(t.value)){let e=Number(t.value)-1;e<n.length?selectOptionAt(e):e===n.length&&i&&(c=e,syncFreeformCaret(),this.#cn())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#It(),this.#qe(l),this.#cn();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#It(),this.#qe(l),this.#cn());break}case`enter`:{let t=resolveQuestionText(l.text,e);if(t===void 0)break;u(finalize(t));break}case`escape`:if(l.text.length>0){l=EMPTY_LINE,this.#It(),this.#qe(l),this.#cn();break}dismiss();break;default:break}},this.#Et()})}upsertSubagentStep(e){if(this.#d?.recordSubagentDispatch(e.callId),this.#s===`hidden`)return;let t=stripTerminalControls(e.reasoning??``).trim(),n=stripTerminalControls(e.message??``).trim();if(!(t.length===0&&n.length===0)){if(this.#Gt(e.callId,e.subagentName),this.#s===`collapsed`){this.#cn();return}this.#qt({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,subagentCallId:e.callId,depth:1,reasoning:t,body:n,collapsed:this.#s!==`full`,live:!e.finalized}),this.#cn()}}upsertSubagentTool(e){if(this.#d?.recordSubagentDispatch(e.callId),e.status===`failed`&&e.errorText!==void 0&&this.#d?.append({source:`tool`,summary:`${e.toolName} failed (subagent ${e.subagentName})`,detail:e.errorText}),this.#s===`hidden`)return;if(this.#Gt(e.callId,e.subagentName),this.#s===`collapsed`){this.#cn();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#en({input:e.input,output:e.output,toolCallId:e.childCallId,toolName:e.toolName})),r={id:subagentToolSectionId(e.callId,e.childCallId),kind:`subagent-tool`,subagentCallId:e.callId,depth:1,title:stripTerminalControls(n.title),subtitle:stripTerminalControls(n.subtitle),status:t,live:t===`running`||t===`approval`,expanded:this.#s===`full`,toolName:e.toolName,toolGroup:n.group,toolInput:e.input};n.doneTitle!==void 0&&(r.doneTitle=stripTerminalControls(n.doneTitle)),n.detail!==void 0&&(r.detailLines=n.detail,r.keepDetailWhenDone=n.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(r.result=stripTerminalControls(e.errorText)):(r.result=n.summarizeResult(e.output),r.toolOutput=e.output),this.#qt(r),this.#Je(e.callId),this.#cn()}#Je(e){applyCohortLiveness(this.#m.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#Jt(subagentToolSectionId(e.callId,e.childCallId)),this.#cn()}subagents={begin:e=>this.beginSubagent(e),background:e=>this.backgroundSubagent(e),upsertStep:e=>this.upsertSubagentStep(e),upsertTool:e=>this.upsertSubagentTool(e),removeTool:e=>this.removeSubagentTool(e),complete:e=>this.completeSubagent(e),markChildToolCallId:e=>this.markChildToolCallId(e)};beginSubagent(e){if(this.#s===`hidden`)return;this.#Gt(e.callId,e.name);let t=this.#h.get(subagentHeaderId(e.callId));t!==void 0&&(t.status===`done`&&delete t.status,t.live=!0),this.#C.delete(e.callId),this.#cn()}backgroundSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));t===void 0||this.#g.has(subagentHeaderId(e.callId))||(t.status=`running`,t.live=!0,t.updateSeq=++this.#b,this.#S.add(e.callId),this.#cn())}completeSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));if(t!==void 0){if(t.status=`done`,e.authoritative){this.#S.delete(e.callId),this.#C.delete(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!1)}else{this.#C.add(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!0)}this.#cn()}}markChildToolCallId(e){this.#v.add(e);let t=this.#y.get(e);t!==void 0&&(this.#Jt(t),this.#y.delete(e),this.#cn())}#Ye(e){let t=this.#h.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#c===`hidden`)return;let t=connectionAuthTerminalMessage(e.state);this.#Kt({id:connectionAuthSectionId(e.name),kind:`connection-auth`,title:`${stripTerminalControls(e.name)} · authorization · ${e.state}`,body:formatConnectionAuthContent(e,t),preformatted:!0,live:t===void 0}),this.#cn()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#j)return;let n=this.#j>0;this.#j=t,t>0?(this.#q=STATUS.connectionAuth,this.#cn()):n&&(this.#q=STATUS.processing,this.#cn())}setVercelStatus(e){this.#M=e,this.#cn()}setRemoteConnectionStatus(e){this.#N=e,this.#cn()}reset(){this.#m=[],this.#h.clear(),this.#g.clear(),this.#A=void 0,this.#k.length=0,this.#_.length=0,this.#D=!1,this.#O=void 0,this.#Xe(),this.#V=!1,this.#Ae=void 0,this.#Oe=void 0,this.#j=0,this.#ve=void 0,this.#ye=void 0,this.#xe=void 0,this.#Se=void 0,this.#Ce=void 0,this.#X&&(this.#n.clearAll(),this.#cn())}renderSessionBoundary(){this.#Ht(),this.#Xe();let e=this.#i.colors,t=this.#i.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#Bt({kind:`session-boundary`,body:n,live:!1}),this.#cn()}#Xe(){this.#v.clear(),this.#y.clear(),this.#T.clear(),this.#S.clear(),this.#C.clear(),this.#x.clear(),this.#Pe=void 0,this.#Fe=void 0,this.#Ie.reset(),this.#Be=void 0,this.#w.clear(),this.#H.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#Ct(),this.#Bt({kind:`notice`,body:t,live:!1}),this.#cn())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#d?.append({source:`sandbox`,detail:t}),this.#Ct(),this.#Bt({kind:`sandbox`,body:t,live:!1}),this.#cn())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#Ze();return}this.#Ct(),this.#Ne=t,this.#cn()}clearSetupWarning(){this.#Ze()}#Ze(){this.#Ne!==void 0&&(this.#Ne=void 0,this.#cn())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#Ct();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#Bt(r),this.#cn()}renderCommandResult(e,t){let n=stripAnsi(e);n.trim().length!==0&&(this.#Ct(),this.#Bt(t===`success`?{kind:`result`,body:n,live:!1,status:`done`}:t===`error`?{kind:`flow`,title:t,body:n,live:!1}:{kind:`result`,body:n,live:!1}),this.#cn())}#Qe(e,t=`spinner`){this.#Ct(),this.#L=!1,this.#G={kind:`idle`},this.#q=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Me={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Lt(),this.#cn()}#$e(e){this.#Ue=void 0,this.#pt();let t=this.#Me;if(t!==void 0){if(this.#Me=void 0,this.#zt(),e){let e=[];for(let n of t.lines){if(n.evidence===!0){e.push(n.text);continue}(n.tone===`warning`||n.tone===`error`)&&(e.length>0&&this.#Bt({kind:`flow`,title:`info`,body:e.join(`
|
|
5
|
-
`),live:!1}),this.#
|
|
6
|
-
`,` `))e>=` `&&e!==``&&dispatch({type:`char`,char:e})}).promise}async#at(e){let t=this.#st(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder===void 0?e.defaultValue!==void 0&&(i.placeholder=e.defaultValue):i.placeholder=e.placeholder,e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#i,t,this.#re)},this.#Pt(),this.#cn(),await this.#ut((t,i)=>{let apply=e=>{n=e,r=void 0,this.#It(),this.#cn()},a=applyLineEditorKey(n,t);if(a!==void 0){apply(a);return}switch(t.type){case`ctrl-c`:case`escape`:i(void 0);return;case`ctrl-r`:this.#cn();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#cn();return}i(t);return}default:return}},()=>this.#Ft()).promise}async#ot(e){let t=this.#st();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#cn(),await this.#ut((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#cn();return;default:return}}).promise}#st(){return this.#Ct(),this.#L=!1,this.#G={kind:`idle`},this.#q=``,this.#ct()}#ct(){return this.#Me===void 0&&(this.#Me={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Me}#lt(){this.#Me?.implicit===!0?this.#Me=void 0:this.#Me!==void 0&&(this.#Me.question=void 0,this.#Me.hideLinesWhileQuestion=!1),this.#ue=void 0,this.#Dt(),this.#Me!==void 0&&this.#ft(),this.#cn()}#ut(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#lt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#lt(),i(e))};return this.#Mt(),this.#ue=t=>{t.type===`ctrl-c`&&this.#yt(),e(t,settle,reject)},this.#Et(),{promise:a,settle}}#dt(e){let t,n=new Promise(e=>{t=e});return this.#Ue=t,this.#ft(e?.interruptible??!0),{promise:n,dispose:()=>{this.#Ue===t&&(this.#Ue=void 0,this.#pt())}}}#ft(e=!0){if(this.#Ue===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#yt();let e=this.#Ue;this.#Ue=void 0,this.#pt(),e?.();return}t.type===`ctrl-r`&&this.#cn()};this.#We=consumer,this.#Mt(),this.#ue=consumer,this.#Et()}#pt(){this.#We!==void 0&&(this.#ue===this.#We&&this.#Dt(),this.#We=void 0)}#mt(e){let t=e===void 0?void 0:typeof e==`string`?{kind:`progress`,text:stripTerminalControls(e),startedAtMs:Date.now()}:{kind:`external-action`,text:stripTerminalControls(e.text),emphasis:stripTerminalControls(e.emphasis),startedAtMs:Date.now()};if(this.#Me!==void 0){this.#Me.status=t,t===void 0&&(this.#Me.preview=void 0),this.#cn();return}if(!(this.#L||this.#W)){if(t===void 0){this.#G={kind:`idle`},this.#J=void 0,this.#zt(),this.#cn();return}this.#Ct(),this.#Rt(),this.#J=t.text,this.#cn()}}#ht(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Me;if(r!==void 0){if(r.preview=void 0,t===`warning`||t===`error`)for(let e of r.outputBuffer)r.lines.push({text:e,tone:`info`,evidence:!0});r.outputBuffer=[],r.lines.push({text:n,tone:t}),this.#cn();return}this.#Ct(),this.#Bt({kind:`flow`,title:t,body:n,live:!1}),this.#cn()}#gt(e){let t=this.#Me;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.summary=e===void 0?void 0:{headline:stripTerminalControls(e.headline),facts:e.facts.map(e=>({label:stripTerminalControls(e.label),value:stripTerminalControls(e.value)}))},this.#cn())}#_t(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Me;if(n===void 0){this.#ht(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#cn()}async#vt(e){this.#de=``,this.#Mt(),this.#Ue=void 0,this.#pt(),this.#Dt(),this.#zt(),this.#n.clear(),this.#An(),this.#r.enter({cursor:`visible`,mouse:!1}),this.#e.isTTY&&this.#e.setRawMode?.(!1),this.#e.pause();try{return await e()}finally{this.#r.exit(),this.#e.isTTY&&this.#e.setRawMode?.(!0),this.#e.resume(),this.#de=``,this.#Mt(),this.#n.hideCursor(),this.#kn(),this.#Me!==void 0&&(this.#Lt(),this.#ft()),this.#n.reset(),this.#cn()}}setSessionId(e){this.#ze=e}shutdown(){if(this.#Tt(),this.#Z&&!this.#Q){this.#Q=!0;let e=this.#ze===void 0?``:` ${this.#i.glyph.dot} session ${this.#ze}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#U={cursor:this.#F,text:this.#P},this.#Tt()}requestInterrupt(){this.#$=!0,this.#Me!==void 0&&this.#ue?.({type:`ctrl-c`}),this.#he?.(),this.#Tt()}exitRequested(){return this.#ee}#yt(){this.#ee=!0,this.#ne?.()}async#bt(e){if(this.#Ge!==void 0||!this.#X)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#Dn(),height:this.#On()}),paint:e=>this.#r.paint(e,this.#On()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#Ke});this.#Ge=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#St=e,this.#ue=e=>{t.handleKey(e)===`close`&&this.#xt()},this.#Et(),t.start()})}#xt(){let e=this.#Ge;if(e===void 0)return;this.#Ge=void 0,e.dispose(),this.#Dt(),this.#r.exit(),this.#n.hideCursor(),this.#cn(),this.#n.showCursor();let t=this.#St;this.#St=void 0,t?.()}#St;#Ct(e){this.#Y=e?.title??this.#Y,e?.contextSize!==void 0&&(this.#be=e.contextSize),!this.#X&&(this.#X=!0,this.#Z=!0,this.#n.reset(),this.#n.hideCursor(),this.#kn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#me=()=>this.#cn(),this.#t.on(`resize`,this.#me),process.on(`exit`,this.#wt))}#wt=()=>{this.#X&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#Tt(){this.#xt();let e=this.#K;if(this.#K=void 0,e?.(interruptedError()),this.#Dt(),this.#Ft(),this.#zt(),this.#ce!==void 0&&(clearTimeout(this.#ce),this.#ce=void 0),this.#le=!1,this.#X){this.#Rn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#cn(),this.#n.clear(),this.#n.showCursor(),this.#An(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#me&&=(this.#t.off(`resize`,this.#me),void 0),process.off(`exit`,this.#wt),this.#X=!1}}#Et(){this.#e.off(`data`,this.#Ot),this.#e.on(`data`,this.#Ot),this.#de.length>0&&queueMicrotask(()=>{this.#ue!==void 0&&this.#de.length>0&&(this.#At(),this.#kt())})}#Dt(){this.#e.off(`data`,this.#Ot),this.#Mt(),this.#ue=void 0}#Ot=e=>{this.#Mt(),this.#de+=this.#fe.write(e),this.#At(),this.#kt()};#kt(){if(this.#de===`\x1B`){this.#pe=setTimeout(()=>{this.#de===`\x1B`&&(this.#de=``,this.#ue?.({type:`escape`}))},30),this.#pe.unref?.();return}if(isIncompletePaste(this.#de)){let e=this.#de;this.#pe=setTimeout(()=>{if(this.#de!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#de=``,t.length>0&&this.#ue?.({type:`text`,value:t,framing:`bracketed-paste`})},incompletePasteFlushMs),this.#pe.unref?.();return}if(isIncompleteOsc(this.#de)){let e=this.#de;this.#pe=setTimeout(()=>{this.#de===e&&(this.#de=``)},incompletePasteFlushMs),this.#pe.unref?.()}}#At(){for(;this.#de.length>0;){let e=nextKey(this.#de);if(e.incomplete)return;if(this.#de=this.#de.slice(e.consumed),!(e.key===void 0||e.key.type===`ignore`)){if(e.key.type===`osc`){this.#jt(e.key.value);continue}this.#ue?.(e.key)}}}#jt(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#Ke=t,this.#Ge?.setTerminalBackground(t))}#Mt(){this.#pe&&=(clearTimeout(this.#pe),void 0)}#Nt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#cn();break;case`enter`:{let e=this.#U.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Le!==void 0){this.#U=EMPTY_LINE,this.#Ie.requestCancellation(),this.#Ve=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Le(),this.#cn();break}this.#Ie.enqueue(e)&&(this.#U=EMPTY_LINE),this.#cn();break}case`ctrl-c`:case`escape`:if(this.#Ie.idle&&this.#Le===void 0)break;this.#Ie.handleEscape(),this.#Ve=!0,this.#Le?.(),this.#cn();break;default:{let t=applyLineEditorKey(this.#U,e,{multiline:!0});t!==void 0&&(this.#U=t,this.#cn());break}}}#Pt(){this.#Ft(),this.#It(),this.#oe=setInterval(()=>{this.#re=!this.#re,this.#cn()},500),this.#oe.unref?.()}#Ft(){this.#oe&&=(clearInterval(this.#oe),void 0),this.#re=!0}#It(){this.#re=!0}#Lt(){this.#zt(),this.#se=setInterval(()=>{this.#ie+=1,this.#cn()},90),this.#se.unref?.()}#Rt(){let e=Date.now();this.#ae=e,this.#G={kind:`waiting`,startedAtMs:e},this.#Lt()}#zt(){this.#se&&=(clearInterval(this.#se),void 0)}#Bt(e){e.id!==this.#Oe?.id&&this.#Rn(),e.updateSeq=++this.#b;let t=e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId)?-1:this.#m.findIndex(e=>e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId));t<0?this.#m.push(e):this.#m.splice(t,0,e),e.id&&this.#h.set(e.id,e)}#Vt(e){this.#V=!0,this.#Bt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#cn()}#Ht(){let e=this.#H.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#bn(e.elapsedMs)}`,n=this.#ye??0;if(this.#be!==void 0&&this.#be>0&&n>0){let e=Math.round(n/this.#be*100);t+=` ${this.#i.glyph.dot} ${e}% context`}this.#Bt({kind:`turn-stats`,body:t,live:!1})}#Ut(e){if(e==null)return;let t=this.#Be;if(this.#Be=void 0,this.#Ae===e){this.#Ae=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Bt(n)}#Wt(e,t,n={}){let r=stripTerminalControls(e),i=stripTerminalControls(t),a=n.detail===void 0?void 0:stripTerminalControls(n.detail),o=n.hint===void 0?void 0:stripTerminalControls(n.hint),s={source:`workflow`,summary:`${r}: ${i}`,detail:a??i};this.#d?.append(o===void 0?s:{...s,hint:o});let c={kind:`error`,title:r,body:i,live:!1};o!==void 0&&(c.hint=o),a!==void 0&&(c.detail=this.#d===void 0?a:`details: ${this.#d.displayPath}`),this.#Bt(c),this.#cn()}#Gt(e,t){if(this.#T.has(e))return;this.#T.add(e);let n=stripTerminalControls(t),r=this.#x.get(n)??[];if(r.push(e),this.#x.set(n,r),r.length===2){let e=this.#h.get(subagentHeaderId(r[0]));e!==void 0&&(e.subtitle=`#1`)}let i={id:subagentHeaderId(e),kind:`subagent`,subagentCallId:e,title:n,live:!0};r.length>1&&(i.subtitle=`#${r.length}`),this.#Bt(i)}#Kt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#b;return}this.#Bt(e)}#qt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t!==void 0){Object.assign(t,e),t.updateSeq=++this.#b;return}let n=e.subagentCallId;if(n===void 0){this.#Bt(e);return}e.id!==this.#Oe?.id&&this.#Rn(),e.updateSeq=++this.#b;let r=-1;for(let e=0;e<this.#m.length;e+=1)this.#m[e]?.subagentCallId===n&&(r=e);this.#m.splice(r<0?this.#m.length:r+1,0,e),e.id!==void 0&&this.#h.set(e.id,e)}#Jt(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#Yt(){for(let e of this.#m)e.subagentCallId!==void 0&&this.#C.has(e.subagentCallId)||e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#Xt(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#H.addUsage(e.usage),this.#rn(n),this.#sn(e.usage),this.#cn();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#Zt(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?stripTerminalControls(e.text??``):t;n.text.set(e.id,r),this.#Zt(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;let r=(n.reasoning.get(e.id)??``)+stripTerminalControls(e.delta);if(n.reasoning.set(e.id,r),t.reasoning===`full`){this.#Qt(e.id,r,!0,t);break}break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;if(t.reasoning===`full`){this.#Qt(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#$t({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#d?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#$t({input:e.input,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-approval-request`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;this.#$t({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#on(e.toolCallId,n);if(r===void 0)break;this.#$t({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#on(e.toolCallId,n);if(this.#d?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#$t({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#on(e.toolCallId,n);if(r===void 0)break;this.#$t({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Wt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#Re=!0,!this.#Ve&&this.#He!==void 0&&this.#U.text.length===0&&(this.#U=lineOf(this.#He),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#sn(e.usage),this.#cn();break}}#Zt(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Kt({id:e,kind:`assistant`,body:r,live:n}),this.#cn())}#Qt(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Kt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#cn())}#$t(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#in(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#en(e);this.#Kt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#an(n),this.#cn()}#en(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#tn(e.toolName)&&(t.isSubagent=!0);let n=readWriteFileInput(e.toolName,e.input);if(n===void 0)return t.isSubagent===!0?t:void 0;let r=this.#w.observeWrite({path:n.path,content:n.content,callId:e.toolCallId});r!==void 0&&(t.previousContent=r);let i=writeExistedFlag(e.output);return i!==void 0&&(t.existed=i),t}#tn(e){let t=this.#E?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#nn(e){for(let t of e.tools.keys()){if(this.#v.has(t))continue;let e=this.#y.get(t)??toolSectionId(t),n=this.#h.get(e);n?.kind===`tool`&&n.status===`running`&&(n.status=`error`,n.result=`interrupted`,n.live=!1)}}#rn(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#y.get(t)??toolSectionId(t);this.#Jt(r),this.#y.delete(t)}}#in(e){let t=readTodoToolItems(e.toolName,e.input);if(t===void 0)return!1;if(t.length>0&&allTodoItemsSettled(t)){let e=JSON.stringify(t);this.#Fe!==e&&(this.#Fe=e,this.#Bt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#Dn(),this.#i).join(`
|
|
7
|
-
`),live:!1})),this.#
|
|
8
|
-
`),i=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#
|
|
9
|
-
`);t=[],e.trim().length!==0&&this.#
|
|
10
|
-
`)){let e=parseSandboxLogLine(n.trimEnd());if(e!==void 0){flushPending(),this.#
|
|
11
|
-
`),n=t.findIndex(e=>parseDevRebuildLogLine(e.trimEnd())?.kind===`failed`);if(n===-1){if(this.#d===void 0){this.#
|
|
12
|
-
`);r.trim().length>0&&this.#
|
|
13
|
-
`);this.#
|
|
4
|
+
`),i=stripPromptControlCharacters(e?.initialDraft??this.#W.text),a=lineOf(r===void 0?i:i.length===0?r:`${r}\n\n${i}`);return this.#W=EMPTY_LINE,this.#L.begin(a.text),this.#Je(a),this.#z=typeaheadFor(this.#f,a.text),this.#Ft(),this.#ln(),await new Promise((e,r)=>{this.#q=r;let apply=e=>{a=e,this.#Lt(),this.#Je(a),this.#z=typeaheadFor(this.#f,e.text,this.#z),this.#ln()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#z=void 0,this.#It(),this.#Et(),r(interruptedError())},suggestions=()=>this.#z!==void 0&&isTypeaheadOpen(this.#z)?this.#z:void 0,highlighted=()=>{let e=suggestions();return e===void 0?void 0:selectedTypeaheadCommand(e)};this.#de=r=>{r.type!==`ctrl-c`&&this.#ne&&(this.#ne=!1,this.#ln());let i=applyLineEditorKey(a,r,{multiline:!0});if(i!==void 0){apply(i);return}switch(r.type){case`up`:case`ctrl-p`:{let e=suggestions();if(e!==void 0){this.#z=moveTypeaheadSelection(e,-1),this.#ln();break}let t=movePromptLine(a,`up`);t===void 0?recall(this.#L.previous(a.text)):apply(t);break}case`down`:case`ctrl-n`:{let e=suggestions();if(e!==void 0){this.#z=moveTypeaheadSelection(e,1),this.#ln();break}let t=movePromptLine(a,`down`);t===void 0?recall(this.#L.next()):apply(t);break}case`tab`:{let e=highlighted();e!==void 0&&apply(lineOf(typeaheadCompletion(e)));break}case`escape`:{let e=suggestions();e!==void 0&&(this.#z=dismissTypeahead(e),this.#ln());break}case`enter`:{let r=highlighted(),i=r!==void 0&&parsePromptCommand(a.text)===null?typeaheadCompletion(r).trimEnd():a.text;if(i.trim().length===0)break;this.#z=void 0,this.#L.add(i),this.#R=!1,this.#It(),this.#J=STATUS.processing,isPromptControlCommand(i)?this.#Vt({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#zt(),this.#Ht(i),this.#je=i,this.#U.arm()),this.#Je(EMPTY_LINE),this.#ln(),this.#Ot(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#bt(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#fn();break;case`ctrl-r`:this.#ln();break;case`ctrl-c`:if(this.#ne){this.#bt(),interrupt();break}this.#ne=!0,apply(EMPTY_LINE);break;default:break}},this.#Dt()})}#Je(e){this.#F=e.text,this.#I=e.cursor}takeQueuedPrompt(){let e=this.#Le.view().steering,t=this.#Le.takePrompt();return t!==void 0&&(this.#Ve=e?`steer`:`queue`),t}async renderStream(e,t){this.#wt(t),this.#g.clear(),this.#R=!1,this.#K.kind!==`waiting`&&(this.#K={kind:`waiting`,startedAtMs:Date.now()}),this.#J=this.#M>0?STATUS.connectionAuth:STATUS.processing,this.#Wt(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#d?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#U.armed&&this.#U.arm(),this.#ee=!1,this.#ze=!1,this.#He=!1,this.#Ue=t?.submittedPrompt,this.#Le.beginTurn(),this.#Re=e.cancel,this.#ye=void 0,this.#be=void 0,this.#Se=void 0,this.#Ce=void 0,this.#we=Date.now();let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l};this.#Rt(),this.#G=!0,this.#ln();let r=new Promise(e=>{this.#ge=e});this.#de=e=>this.#Pt(e),this.#Dt();let i={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!0};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#ee)break;this.#Zt(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Gt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Gt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#ge=void 0,this.#ee&&e.abort?.(),this.#Re=void 0,this.#Ot(),this.#Bt(),this.#G=!1,this.#K.kind===`waiting`&&(this.#K={kind:`idle`}),this.#J=completedTurnStatus({interrupted:this.#ee,cancelled:this.#ze,continueSession:t?.continueSession===!0}),this.#in(i),(this.#ee||i.cancelled)&&this.#rn(i),this.#Xt(),this.#d?.reportStats(),this.#ln(),t?.continueSession||this.#Et()}}async renderIdleStream(e,t){let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l},r={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!1};try{for await(let t of iterateTUIStream(e.events))this.#Zt(t,n,r)}catch(e){let t=summarizeKnownError(e);t===null?this.#Gt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Gt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#in(r),r.cancelled&&this.#rn(r),this.#Xt(),this.#d?.reportStats(),this.#ln()}}async readToolApproval(e,t){return this.#wt(t),this.#Bt(),this.#R=!1,this.#K={kind:`idle`},this.#J=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#ee=!1,this.#ln(),await new Promise((t,n)=>{this.#q=n,this.#de=r=>{switch(r.type){case`text`:{if(r.framing!==`unframed`)break;let n=r.value.toLowerCase();n===`y`?(this.#zt(),this.#J=STATUS.processing,this.#Ot(),this.#ln(),t({approved:!0})):n===`n`&&(this.#zt(),this.#J=STATUS.processing,this.#Xe(e.toolCallId),this.#Ot(),this.#ln(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#ln();break;case`ctrl-c`:this.#ee=!0,this.#Et(),n(interruptedError());break;default:break}},this.#Dt()})}async readInputQuestion(e,t){this.#wt(t),this.#Bt(),this.#R=!1,this.#B=!1,this.#K={kind:`idle`},this.#ee=!1;let n=e.options??[],r=n.length>0,i=(e.allowFreeform===!0||!r)&&r,a=n.length+ +!!i,o=questionSectionId(e.requestId),s=r?`overlay`:`text`,c=0,l=EMPTY_LINE,isOnFreeformRow=()=>i&&c===n.length,overlayPanel=t=>renderQuestionPanel({prompt:stripTerminalControls(e.prompt),options:n,cursor:c,allowFreeform:i,editor:l,caretVisible:this.#ie},this.#i,t),renderTextSection=()=>{this.#qt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#i),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#Ft():(this.#It(),this.#Lt())};s===`overlay`?(s=`overlay`,this.#R=!1,this.#Yt(o),this.#Me=overlayPanel,this.#J=``,syncFreeformCaret(),this.#ln()):(s=`text`,this.#Me=void 0,renderTextSection(),this.#R=!0,this.#Je(l),this.#J=``,this.#Ft(),this.#ln());let finalize=t=>{this.#Me=void 0,this.#qt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${stripTerminalControls(t.label)}`,preformatted:!0,live:!1}),this.#R=!1,this.#zt(),this.#J=STATUS.processing,this.#It(),this.#Ot(),this.#ln();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#Me=void 0,this.#qt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${this.#i.colors.dim(`Dismissed.`)}`,preformatted:!0,live:!1}),this.#R=!1,this.#J=``,this.#It(),this.#Ot(),this.#ln(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#ln())},selectOptionAt=e=>{let t=n[e];t&&u(finalize({optionId:t.id,label:t.label}))},u;return await new Promise((t,r)=>{this.#q=r,u=t,this.#de=t=>{if(t.type===`ctrl-c`){if((s===`text`||isOnFreeformRow())&&l.text.length>0){l=EMPTY_LINE,this.#Lt(),s===`text`&&this.#Je(l),this.#ln();return}this.#ee=!0,this.#Me=void 0,this.#It(),this.#Et(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#ln();return}if(s===`overlay`){let r=setupSelectionIntent(t,{textNavigation:!isOnFreeformRow()});if(r?.kind===`move`){moveCursor(r.direction===`up`?-1:1);return}switch(t.type){case`up`:case`ctrl-p`:moveCursor(-1);break;case`down`:case`ctrl-n`:moveCursor(1);break;case`enter`:if(isOnFreeformRow()){let t=resolveQuestionText(l.text,e);t!==void 0&&u(finalize(t));break}selectOptionAt(c);break;case`escape`:if(isOnFreeformRow()&&l.text.length>0){l=EMPTY_LINE,this.#Lt(),this.#ln();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#Lt(),this.#ln());break}if(t.type===`text`&&/^[1-9]$/u.test(t.value)){let e=Number(t.value)-1;e<n.length?selectOptionAt(e):e===n.length&&i&&(c=e,syncFreeformCaret(),this.#ln())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#Lt(),this.#Je(l),this.#ln();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#Lt(),this.#Je(l),this.#ln());break}case`enter`:{let t=resolveQuestionText(l.text,e);if(t===void 0)break;u(finalize(t));break}case`escape`:if(l.text.length>0){l=EMPTY_LINE,this.#Lt(),this.#Je(l),this.#ln();break}dismiss();break;default:break}},this.#Dt()})}upsertSubagentStep(e){if(this.#d?.recordSubagentDispatch(e.callId),this.#s===`hidden`)return;let t=stripTerminalControls(e.reasoning??``).trim(),n=stripTerminalControls(e.message??``).trim();if(!(t.length===0&&n.length===0)){if(this.#Kt(e.callId,e.subagentName),this.#s===`collapsed`){this.#ln();return}this.#Jt({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,subagentCallId:e.callId,depth:1,reasoning:t,body:n,collapsed:this.#s!==`full`,live:!e.finalized}),this.#ln()}}upsertSubagentTool(e){if(this.#d?.recordSubagentDispatch(e.callId),e.status===`failed`&&e.errorText!==void 0&&this.#d?.append({source:`tool`,summary:`${e.toolName} failed (subagent ${e.subagentName})`,detail:e.errorText}),this.#s===`hidden`)return;if(this.#Kt(e.callId,e.subagentName),this.#s===`collapsed`){this.#ln();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#tn({input:e.input,output:e.output,toolCallId:e.childCallId,toolName:e.toolName})),r={id:subagentToolSectionId(e.callId,e.childCallId),kind:`subagent-tool`,subagentCallId:e.callId,depth:1,title:stripTerminalControls(n.title),subtitle:stripTerminalControls(n.subtitle),status:t,live:t===`running`||t===`approval`,expanded:this.#s===`full`,toolName:e.toolName,toolGroup:n.group,toolInput:e.input};n.doneTitle!==void 0&&(r.doneTitle=stripTerminalControls(n.doneTitle)),n.detail!==void 0&&(r.detailLines=n.detail,r.keepDetailWhenDone=n.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(r.result=stripTerminalControls(e.errorText)):(r.result=n.summarizeResult(e.output),r.toolOutput=e.output),this.#Jt(r),this.#Ye(e.callId),this.#ln()}#Ye(e){applyCohortLiveness(this.#m.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#Yt(subagentToolSectionId(e.callId,e.childCallId)),this.#ln()}subagents={begin:e=>this.beginSubagent(e),background:e=>this.backgroundSubagent(e),upsertStep:e=>this.upsertSubagentStep(e),upsertTool:e=>this.upsertSubagentTool(e),removeTool:e=>this.removeSubagentTool(e),complete:e=>this.completeSubagent(e),markChildToolCallId:e=>this.markChildToolCallId(e)};beginSubagent(e){if(this.#s===`hidden`)return;this.#Kt(e.callId,e.name);let t=this.#h.get(subagentHeaderId(e.callId));t!==void 0&&(t.status===`done`&&delete t.status,t.live=!0),this.#C.delete(e.callId),this.#ln()}backgroundSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));t===void 0||this.#g.has(subagentHeaderId(e.callId))||(t.status=`running`,t.live=!0,t.updateSeq=++this.#b,this.#S.add(e.callId),this.#ln())}completeSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));if(t!==void 0){if(t.status=`done`,e.authoritative){this.#S.delete(e.callId),this.#C.delete(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!1)}else{this.#C.add(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!0)}this.#ln()}}markChildToolCallId(e){this.#v.add(e);let t=this.#y.get(e);t!==void 0&&(this.#Yt(t),this.#y.delete(e),this.#ln())}#Xe(e){let t=this.#h.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#c===`hidden`)return;let t=connectionAuthTerminalMessage(e.state);this.#qt({id:connectionAuthSectionId(e.name),kind:`connection-auth`,title:`${stripTerminalControls(e.name)} · authorization · ${e.state}`,body:formatConnectionAuthContent(e,t),preformatted:!0,live:t===void 0}),this.#ln()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#M)return;let n=this.#M>0;this.#M=t,t>0?(this.#J=STATUS.connectionAuth,this.#ln()):n&&(this.#J=STATUS.processing,this.#ln())}setVercelStatus(e){this.#N=e,this.#ln()}setRemoteConnectionStatus(e){this.#P=e,this.#ln()}reset(){this.#m=[],this.#h.clear(),this.#g.clear(),this.#j=void 0,this.#A.length=0,this.#_.length=0,this.#O=!1,this.#k=void 0,this.#Ze(),this.#H=!1,this.#je=void 0,this.#ke=void 0,this.#M=0,this.#ye=void 0,this.#be=void 0,this.#Se=void 0,this.#Ce=void 0,this.#we=void 0,this.#Z&&(this.#n.clearAll(),this.#ln())}renderSessionBoundary(){this.#Ut(),this.#Ze();let e=this.#i.colors,t=this.#i.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#Vt({kind:`session-boundary`,body:n,live:!1}),this.#ln()}#Ze(){this.#v.clear(),this.#y.clear(),this.#T.clear(),this.#S.clear(),this.#C.clear(),this.#x.clear(),this.#Fe=void 0,this.#Ie=void 0,this.#Le.reset(),this.#Ve=void 0,this.#w.clear(),this.#U.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#wt(),this.#Vt({kind:`notice`,body:t,live:!1}),this.#ln())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#d?.append({source:`sandbox`,detail:t}),this.#wt(),this.#Vt({kind:`sandbox`,body:t,live:!1}),this.#ln())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#Qe();return}this.#wt(),this.#Pe=t,this.#ln()}clearSetupWarning(){this.#Qe()}#Qe(){this.#Pe!==void 0&&(this.#Pe=void 0,this.#ln())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#wt();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#Vt(r),this.#ln()}renderCommandResult(e,t){let n=stripAnsi(e);n.trim().length!==0&&(this.#wt(),this.#Vt(t===`success`?{kind:`result`,body:n,live:!1,status:`done`}:t===`error`?{kind:`flow`,title:t,body:n,live:!1}:{kind:`result`,body:n,live:!1}),this.#ln())}#$e(e,t=`spinner`){this.#wt(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Ne={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Rt(),this.#ln()}#et(e){this.#We=void 0,this.#mt();let t=this.#Ne;if(t!==void 0){if(this.#Ne=void 0,this.#Bt(),e){let e=[];for(let n of t.lines){if(n.evidence===!0){e.push(n.text);continue}(n.tone===`warning`||n.tone===`error`)&&(e.length>0&&this.#Vt({kind:`flow`,title:`info`,body:e.join(`
|
|
5
|
+
`),live:!1}),this.#Vt({kind:`flow`,title:n.tone,body:n.text,live:!1})),e=[]}}this.#ln()}}async#tt(e){let t=this.#ct(),n=isMultiSelectRequest(e),r=e.kind===`search`?e.searchAction:void 0,i=e.options,a={options:i,searchAction:r,submitRow:n};`initialValue`in e&&e.initialValue!==void 0&&(a.defaultValue=e.initialValue),`initialValues`in e&&e.initialValues!==void 0&&(a.initialValues=e.initialValues);let o=initialSelectState(a),s,c=!1,l=0,isCurrentSearch=e=>e===l,clearSearch=()=>{l+=1,c=!1,o=reduceSelect(o,{type:`clear`},{options:i,searchAction:r,submitRow:n}),this.#ln()},loadSearch=async(e,t)=>{c=!0,s=void 0;let a=++l;this.#ln();try{let s=await t(e);if(!isCurrentSearch(a))return;let c=o.filter;i=s,o={...initialSelectState({options:s,searchAction:r,submitRow:n}),filter:c}}catch(e){isCurrentSearch(a)&&(s=toErrorMessage(e))}finally{isCurrentSearch(a)&&(c=!1,this.#ln())}},u=e.notices;if(e.kind===`task-list`||e.kind===`search`&&e.layout===`task-list`){let n=t.taskListLineStart??t.lines.length,r=t.lines.slice(n).filter(e=>e.tone===`success`||e.tone===`warning`||e.tone===`error`).map(e=>({tone:e.tone,text:e.text}));u=e.notices??r,t.taskListLineStart=t.lines.length,t.hideLinesWhileQuestion=!0}let panelState=()=>{let t={...e,options:i,select:o};return u!==void 0&&u.length>0&&(t.notices=u),s!==void 0&&(t.error=s),c&&(t.loadingFrame=this.#gn()),t};return t.question=e=>renderSelectQuestion(panelState(),this.#i,e),this.#ln(),await this.#dt((t,a)=>{let close=e=>{l+=1,a(e)};if(c){t.type===`ctrl-c`?close(void 0):t.type===`escape`?clearSearch():t.type===`ctrl-r`&&this.#ln();return}let u={key:t,options:i,searchAction:r,select:o},d=reduceSetupSelectInput(n?{...u,kind:e.kind,required:e.required}:{...u,kind:e.kind});switch(d.kind){case`cancel`:close(void 0);return;case`repaint`:this.#ln();return;case`update`:o=d.select,s=void 0,this.#ln();return;case`submit`:{let e=searchActionQuery(d.values[0]??``),t=r?.load;if(e===void 0||t===void 0){close(d.values);return}loadSearch(e,t);return}case`error`:s=d.message,this.#ln();return;case`ignore`:return}}).promise}#nt(e){this.#wt();let t=this.#lt();t.status={kind:`progress`,text:stripTerminalControls(e.status),startedAtMs:Date.now()};let n;t.question=t=>renderSelectQuestion({kind:`actions`,context:e.context,actions:e.actions,cursor:n},this.#i,t),this.#ln();let r=this.#dt((t,r)=>{let i=setupSelectionIntent(t,{textNavigation:!0});switch(i?.kind){case`cancel`:r(void 0);return;case`move`:n=moveActionCursor(n,i.direction,e.actions.length),this.#ln();return;case`repaint`:this.#ln();return;case`submit`:n!==void 0&&r(e.actions[n].value);return;case void 0:return}},()=>{t.status=void 0});return{choice:r.promise,close:()=>r.settle(void 0)}}async#rt(e){let t=this.#ct(),n={options:e.options};e.initialValue!==void 0&&(n.defaultValue=e.initialValue);let r=initialSelectState(n),i=lineOf(``),a;t.question=t=>{let n={kind:`inline-edit`,layout:`task-list`,message:e.message,options:e.options,select:r,edit:{optionValue:e.editable.value,caretVisible:this.#ie,editor:{kind:`rename`,editor:i,defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint}}};return a!==void 0&&(n.error=a),renderSelectQuestion(n,this.#i,t)};let onEditableRow=()=>selectValueAtCursor([...e.options],r.cursor)===e.editable.value,syncEditableRow=()=>{onEditableRow()?this.#Ft():(i=lineOf(``),this.#It())};return syncEditableRow(),this.#ln(),await this.#dt((t,n)=>{let applyEditor=e=>{i=e,a=void 0,this.#Lt(),this.#ln()},applySelect=t=>{r=reduceSelect(r,t,{options:e.options}),a=void 0,syncEditableRow(),this.#ln()},submit=()=>{let t=selectValueAtCursor([...e.options],r.cursor);if(t===void 0)return;if(t!==e.editable.value){n({kind:`selected`,value:t});return}let o=(i.text||e.editable.defaultValue).trim(),s=e.editable.validate?.(o);if(s!==void 0){a=s,this.#ln();return}n(o===e.editable.defaultValue?{kind:`selected`,value:t}:{kind:`edited`,value:t,text:o})},o=setupSelectionIntent(t,{textNavigation:!onEditableRow()});switch(o?.kind){case`cancel`:n(void 0);return;case`move`:applySelect({type:o.direction});return;case`submit`:submit();return;case`repaint`:this.#ln();return;case void 0:break}if(!onEditableRow())return;let s=applyLineEditorKey(i,t);s!==void 0&&applyEditor(s)},()=>this.#It()).promise}async#it(e){let t=this.#ct(),n=initialProviderPickerState(e.options,e.initialValue),r,cursorBadge=()=>{if(n.phase.kind!==`inactive`)return;let t=selectValueAtCursor([...e.options],n.select.cursor),r=e.options.find(e=>e.value===t);if(r!==void 0)return enterBadge(this.#i,r.checked===!0?`change`:void 0)};t.question=t=>{let r=cursorBadge(),i={kind:`inline-edit`,layout:`stacked`,message:e.message,options:e.options,select:n.select,edit:{optionValue:`ai-gateway-key`,caretVisible:this.#ie,editor:{kind:`key`,phase:n.phase}}};return r!==void 0&&(i.cursorBadge=r),renderSelectQuestion(i,this.#i,t)};let syncCaret=()=>{n.phase.kind===`editing`||n.phase.kind===`invalid`?this.#Ft():this.#It()};return syncCaret(),this.#ln(),await this.#dt((t,i,a)=>{let dispatch=t=>{let o=transitionProviderPicker(n,t,e.options);switch(o.kind){case`ignore`:return;case`clear`:r?.abort(),r=void 0,n=o.state,syncCaret(),this.#ln();return;case`cancel`:i(void 0);return;case`render`:n=o.state,syncCaret(),this.#ln();return;case`validate`:{n=o.state,syncCaret(),this.#ln();let t=new AbortController;r=t;let i;try{i=e.validateInlineKey(o.key,t.signal)}catch(e){a(e);return}i.then(e=>{r!==t||t.signal.aborted||(r=void 0,dispatch({type:`validated`,validation:e}))},e=>{r!==t||t.signal.aborted||(r=void 0,a(e))});return}case`settle`:i(o.result);return}},o=setupSelectionIntent(t,{textNavigation:n.phase.kind===`inactive`});switch(o?.kind){case`cancel`:dispatch({type:`cancel`});return;case`move`:dispatch({type:`move`,direction:o.direction});return;case`submit`:dispatch({type:`submit`});return;case`repaint`:this.#ln();return;case void 0:break}if(n.phase.kind!==`editing`&&n.phase.kind!==`invalid`)return;let s=applyLineEditorKey(n.phase.editor,t);s!==void 0&&(this.#Lt(),dispatch({type:`edit`,editor:s}))},()=>{r?.abort(),r=void 0,this.#It()}).promise}async#at(e){let t=this.#ct(),n=initialModelEditorState(e);return t.question=t=>renderModelEditorQuestion({request:e,state:n},this.#i,t),this.#ln(),await this.#dt((t,r)=>{let dispatch=t=>{let i=transitionModelEditor(n,t,e);switch(i.kind){case`ignore`:return;case`render`:n=i.state,this.#ln();return;case`cancel`:r(void 0);return;case`settle`:r(i.result);return}},i=setupSelectionIntent(t);switch(i?.kind){case`cancel`:dispatch({type:`cancel`});return;case`move`:dispatch({type:`move`,direction:i.direction});return;case`submit`:dispatch({type:`submit`});return;case`repaint`:this.#ln();return;case void 0:break}if(t.type===`left`||t.type===`right`){dispatch({type:`adjust`,direction:t.type});return}if(t.type===`tab`){dispatch({type:`adjust`,direction:`right`});return}if(t.type===`backspace`){dispatch({type:`backspace`});return}if(t.type===`text`)for(let e of t.value.replaceAll(`
|
|
6
|
+
`,` `))e>=` `&&e!==``&&dispatch({type:`char`,char:e})}).promise}async#ot(e){let t=this.#ct(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder===void 0?e.defaultValue!==void 0&&(i.placeholder=e.defaultValue):i.placeholder=e.placeholder,e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#i,t,this.#ie)},this.#Ft(),this.#ln(),await this.#dt((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Lt(),this.#ln()},a=applyLineEditorKey(n,t);if(a!==void 0){apply(a);return}switch(t.type){case`ctrl-c`:case`escape`:i(void 0);return;case`ctrl-r`:this.#ln();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#ln();return}i(t);return}default:return}},()=>this.#It()).promise}async#st(e){let t=this.#ct();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#ln(),await this.#dt((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#ln();return;default:return}}).promise}#ct(){return this.#wt(),this.#R=!1,this.#K={kind:`idle`},this.#J=``,this.#lt()}#lt(){return this.#Ne===void 0&&(this.#Ne={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Ne}#ut(){this.#Ne?.implicit===!0?this.#Ne=void 0:this.#Ne!==void 0&&(this.#Ne.question=void 0,this.#Ne.hideLinesWhileQuestion=!1),this.#de=void 0,this.#Ot(),this.#Ne!==void 0&&this.#pt(),this.#ln()}#dt(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#ut(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#ut(),i(e))};return this.#Nt(),this.#de=t=>{t.type===`ctrl-c`&&this.#bt(),e(t,settle,reject)},this.#Dt(),{promise:a,settle}}#ft(e){let t,n=new Promise(e=>{t=e});return this.#We=t,this.#pt(e?.interruptible??!0),{promise:n,dispose:()=>{this.#We===t&&(this.#We=void 0,this.#mt())}}}#pt(e=!0){if(this.#We===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#bt();let e=this.#We;this.#We=void 0,this.#mt(),e?.();return}t.type===`ctrl-r`&&this.#ln()};this.#Ge=consumer,this.#Nt(),this.#de=consumer,this.#Dt()}#mt(){this.#Ge!==void 0&&(this.#de===this.#Ge&&this.#Ot(),this.#Ge=void 0)}#ht(e){let t=e===void 0?void 0:typeof e==`string`?{kind:`progress`,text:stripTerminalControls(e),startedAtMs:Date.now()}:{kind:`external-action`,text:stripTerminalControls(e.text),emphasis:stripTerminalControls(e.emphasis),startedAtMs:Date.now()};if(this.#Ne!==void 0){this.#Ne.status=t,t===void 0&&(this.#Ne.preview=void 0),this.#ln();return}if(!(this.#R||this.#G)){if(t===void 0){this.#K={kind:`idle`},this.#Y=void 0,this.#Bt(),this.#ln();return}this.#wt(),this.#zt(),this.#Y=t.text,this.#ln()}}#gt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Ne;if(r!==void 0){if(r.preview=void 0,t===`warning`||t===`error`)for(let e of r.outputBuffer)r.lines.push({text:e,tone:`info`,evidence:!0});r.outputBuffer=[],r.lines.push({text:n,tone:t}),this.#ln();return}this.#wt(),this.#Vt({kind:`flow`,title:t,body:n,live:!1}),this.#ln()}#_t(e){let t=this.#Ne;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.summary=e===void 0?void 0:{headline:stripTerminalControls(e.headline),facts:e.facts.map(e=>({label:stripTerminalControls(e.label),value:stripTerminalControls(e.value)}))},this.#ln())}#vt(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Ne;if(n===void 0){this.#gt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#ln()}async#yt(e){this.#fe=``,this.#Nt(),this.#We=void 0,this.#mt(),this.#Ot(),this.#Bt(),this.#n.clear(),this.#jn(),this.#r.enter({cursor:`visible`,mouse:!1}),this.#e.isTTY&&this.#e.setRawMode?.(!1),this.#e.pause();try{return await e()}finally{this.#r.exit(),this.#e.isTTY&&this.#e.setRawMode?.(!0),this.#e.resume(),this.#fe=``,this.#Nt(),this.#n.hideCursor(),this.#An(),this.#Ne!==void 0&&(this.#Rt(),this.#pt()),this.#n.reset(),this.#ln()}}setSessionId(e){this.#Be=e}shutdown(){if(this.#Et(),this.#Q&&!this.#$){this.#$=!0;let e=this.#Be===void 0?``:` ${this.#i.glyph.dot} session ${this.#Be}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#W={cursor:this.#I,text:this.#F},this.#Et()}requestInterrupt(){this.#ee=!0,this.#Ne!==void 0&&this.#de?.({type:`ctrl-c`}),this.#ge?.(),this.#Et()}exitRequested(){return this.#te}#bt(){this.#te=!0,this.#re?.()}async#xt(e){if(this.#Ke!==void 0||!this.#Z)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#On(),height:this.#kn()}),paint:e=>this.#r.paint(e,this.#kn()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#qe});this.#Ke=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#Ct=e,this.#de=e=>{t.handleKey(e)===`close`&&this.#St()},this.#Dt(),t.start()})}#St(){let e=this.#Ke;if(e===void 0)return;this.#Ke=void 0,e.dispose(),this.#Ot(),this.#r.exit(),this.#n.hideCursor(),this.#ln(),this.#n.showCursor();let t=this.#Ct;this.#Ct=void 0,t?.()}#Ct;#wt(e){this.#X=e?.title??this.#X,e?.contextSize!==void 0&&(this.#xe=e.contextSize),!this.#Z&&(this.#Z=!0,this.#Q=!0,this.#n.reset(),this.#n.hideCursor(),this.#An(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#he=()=>this.#ln(),this.#t.on(`resize`,this.#he),process.on(`exit`,this.#Tt))}#Tt=()=>{this.#Z&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#Et(){this.#St();let e=this.#q;if(this.#q=void 0,e?.(interruptedError()),this.#Ot(),this.#It(),this.#Bt(),this.#le!==void 0&&(clearTimeout(this.#le),this.#le=void 0),this.#ue=!1,this.#Z){this.#zn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#ln(),this.#n.clear(),this.#n.showCursor(),this.#jn(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#he&&=(this.#t.off(`resize`,this.#he),void 0),process.off(`exit`,this.#Tt),this.#Z=!1}}#Dt(){this.#e.off(`data`,this.#kt),this.#e.on(`data`,this.#kt),this.#fe.length>0&&queueMicrotask(()=>{this.#de!==void 0&&this.#fe.length>0&&(this.#jt(),this.#At())})}#Ot(){this.#e.off(`data`,this.#kt),this.#Nt(),this.#de=void 0}#kt=e=>{this.#Nt(),this.#fe+=this.#pe.write(e),this.#jt(),this.#At()};#At(){if(this.#fe===`\x1B`){this.#me=setTimeout(()=>{this.#fe===`\x1B`&&(this.#fe=``,this.#de?.({type:`escape`}))},30),this.#me.unref?.();return}if(isIncompletePaste(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{if(this.#fe!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#fe=``,t.length>0&&this.#de?.({type:`text`,value:t,framing:`bracketed-paste`})},incompletePasteFlushMs),this.#me.unref?.();return}if(isIncompleteOsc(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{this.#fe===e&&(this.#fe=``)},incompletePasteFlushMs),this.#me.unref?.()}}#jt(){for(;this.#fe.length>0;){let e=nextKey(this.#fe);if(e.incomplete)return;if(this.#fe=this.#fe.slice(e.consumed),!(e.key===void 0||e.key.type===`ignore`)){if(e.key.type===`osc`){this.#Mt(e.key.value);continue}this.#de?.(e.key)}}}#Mt(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#qe=t,this.#Ke?.setTerminalBackground(t))}#Nt(){this.#me&&=(clearTimeout(this.#me),void 0)}#Pt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#ln();break;case`enter`:{let e=this.#W.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Re!==void 0){this.#W=EMPTY_LINE,this.#Le.requestCancellation(),this.#He=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Re(),this.#ln();break}this.#Le.enqueue(e)&&(this.#W=EMPTY_LINE),this.#ln();break}case`ctrl-c`:case`escape`:if(this.#Le.idle&&this.#Re===void 0)break;this.#Le.handleEscape(),this.#He=!0,this.#Re?.(),this.#ln();break;default:{let t=applyLineEditorKey(this.#W,e,{multiline:!0});t!==void 0&&(this.#W=t,this.#ln());break}}}#Ft(){this.#It(),this.#Lt(),this.#se=setInterval(()=>{this.#ie=!this.#ie,this.#ln()},500),this.#se.unref?.()}#It(){this.#se&&=(clearInterval(this.#se),void 0),this.#ie=!0}#Lt(){this.#ie=!0}#Rt(){this.#Bt(),this.#ce=setInterval(()=>{this.#ae+=1,this.#ln()},90),this.#ce.unref?.()}#zt(){let e=Date.now();this.#oe=e,this.#K={kind:`waiting`,startedAtMs:e},this.#Rt()}#Bt(){this.#ce&&=(clearInterval(this.#ce),void 0)}#Vt(e){e.id!==this.#ke?.id&&this.#zn(),e.updateSeq=++this.#b;let t=e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId)?-1:this.#m.findIndex(e=>e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId));t<0?this.#m.push(e):this.#m.splice(t,0,e),e.id&&this.#h.set(e.id,e)}#Ht(e){this.#H=!0,this.#Vt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#ln()}#Ut(){let e=this.#U.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#xn(e.elapsedMs)}`,n=this.#be??0;if(this.#xe!==void 0&&this.#xe>0&&n>0){let e=Math.round(n/this.#xe*100);t+=` ${this.#i.glyph.dot} ${e}% context`}this.#Vt({kind:`turn-stats`,body:t,live:!1})}#Wt(e){if(e==null)return;let t=this.#Ve;if(this.#Ve=void 0,this.#je===e){this.#je=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Vt(n)}#Gt(e,t,n={}){let r=stripTerminalControls(e),i=stripTerminalControls(t),a=n.detail===void 0?void 0:stripTerminalControls(n.detail),o=n.hint===void 0?void 0:stripTerminalControls(n.hint),s={source:`workflow`,summary:`${r}: ${i}`,detail:a??i};this.#d?.append(o===void 0?s:{...s,hint:o});let c={kind:`error`,title:r,body:i,live:!1};o!==void 0&&(c.hint=o),a!==void 0&&(c.detail=this.#d===void 0?a:`details: ${this.#d.displayPath}`),this.#Vt(c),this.#ln()}#Kt(e,t){if(this.#T.has(e))return;this.#T.add(e);let n=stripTerminalControls(t),r=this.#x.get(n)??[];if(r.push(e),this.#x.set(n,r),r.length===2){let e=this.#h.get(subagentHeaderId(r[0]));e!==void 0&&(e.subtitle=`#1`)}let i={id:subagentHeaderId(e),kind:`subagent`,subagentCallId:e,title:n,live:!0};r.length>1&&(i.subtitle=`#${r.length}`),this.#Vt(i)}#qt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#b;return}this.#Vt(e)}#Jt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t!==void 0){Object.assign(t,e),t.updateSeq=++this.#b;return}let n=e.subagentCallId;if(n===void 0){this.#Vt(e);return}e.id!==this.#ke?.id&&this.#zn(),e.updateSeq=++this.#b;let r=-1;for(let e=0;e<this.#m.length;e+=1)this.#m[e]?.subagentCallId===n&&(r=e);this.#m.splice(r<0?this.#m.length:r+1,0,e),e.id!==void 0&&this.#h.set(e.id,e)}#Yt(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#Xt(){for(let e of this.#m)e.subagentCallId!==void 0&&this.#C.has(e.subagentCallId)||e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#Zt(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#U.addUsage(e.usage),this.#in(n),this.#cn(e.usage),this.#ln();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#Qt(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?stripTerminalControls(e.text??``):t;n.text.set(e.id,r),this.#Qt(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;let r=(n.reasoning.get(e.id)??``)+stripTerminalControls(e.delta);if(n.reasoning.set(e.id,r),t.reasoning===`full`){this.#$t(e.id,r,!0,t);break}break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;if(t.reasoning===`full`){this.#$t(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#en({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#d?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#en({input:e.input,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-approval-request`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;this.#en({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#sn(e.toolCallId,n);if(r===void 0)break;this.#en({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#sn(e.toolCallId,n);if(this.#d?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#en({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#sn(e.toolCallId,n);if(r===void 0)break;this.#en({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Gt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#ze=!0,!this.#He&&this.#Ue!==void 0&&this.#W.text.length===0&&(this.#W=lineOf(this.#Ue),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#cn(e.usage),this.#ln();break}}#Qt(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#qt({id:e,kind:`assistant`,body:r,live:n}),this.#ln())}#$t(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#qt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#ln())}#en(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#an(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#tn(e);this.#qt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#on(n),this.#ln()}#tn(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#nn(e.toolName)&&(t.isSubagent=!0);let n=readWriteFileInput(e.toolName,e.input);if(n===void 0)return t.isSubagent===!0?t:void 0;let r=this.#w.observeWrite({path:n.path,content:n.content,callId:e.toolCallId});r!==void 0&&(t.previousContent=r);let i=writeExistedFlag(e.output);return i!==void 0&&(t.existed=i),t}#nn(e){let t=this.#E?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#rn(e){for(let t of e.tools.keys()){if(this.#v.has(t))continue;let e=this.#y.get(t)??toolSectionId(t),n=this.#h.get(e);n?.kind===`tool`&&n.status===`running`&&(n.status=`error`,n.result=`interrupted`,n.live=!1)}}#in(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#y.get(t)??toolSectionId(t);this.#Yt(r),this.#y.delete(t)}}#an(e){let t=readTodoToolItems(e.toolName,e.input);if(t===void 0)return!1;if(t.length>0&&allTodoItemsSettled(t)){let e=JSON.stringify(t);this.#Ie!==e&&(this.#Ie=e,this.#Vt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#On(),this.#i).join(`
|
|
7
|
+
`),live:!1})),this.#Fe=void 0}else this.#Fe=t.length>0?t:void 0,this.#Ie=void 0;return this.#ln(),!0}#on(e){let t=[];for(let n of e.tools.values()){if(this.#v.has(n.toolCallId))continue;let e=this.#y.get(n.toolCallId)??toolSectionId(n.toolCallId),r=this.#h.get(e);r?.kind===`tool`&&t.push({block:r,active:isActiveToolStatus(n.status)})}applyCohortLiveness(t)}#sn(e,t){let n=t.tools.get(e);if(n!==void 0)return n;let r=this.#y.get(e)??toolSectionId(e),i=this.#h.get(r);if(!(i===void 0||i.kind!==`tool`))return{errorText:i.status===`error`&&typeof i.result==`string`?i.result:void 0,input:i.toolInput,output:i.toolOutput,status:i.status??`running`,toolCallId:e,toolName:i.toolName??i.title??`tool`}}#cn(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#ye=(t??0)+(n??0)),this.#be=t??this.#be,this.#Se=n??this.#Se,this.#Se!=null&&this.#we!==void 0){let e=(Date.now()-this.#we)/1e3;e>0&&(this.#Ce=this.#Se/e)}}#ln(){if(this.#Z){if(this.#_e){this.#ve=!0;return}this.#_e=!0;try{do this.#ve=!1,this.#un();while(this.#ve)}finally{this.#_e=!1}}}#un(){if(!this.#Z)return;if(this.#Ke!==void 0){this.#Ke.repaint();return}let e=this.#On(),t=this.#yn(e),n=this.#D===void 0?[]:this.#mn(),r=Math.max(1,this.#kn()-n.length-t.length),i=[],a=this.#j,o=groupToolBlocksForDisplay(this.#m),s=0;for(;s<o.length&&o[s].display.live===!1;)s+=1;if(s>0){let e=new Set(o.slice(0,s).flatMap(e=>e.members));for(let t=this.#m.length-1;t>=0;--t)e.has(this.#m[t])&&this.#m.splice(t,1)}for(let t of o.slice(0,s)){for(let e of t.members)this.#_.push(e),e.id&&(this.#g.add(e.id),this.#h.delete(e.id));if(this.#Vn(t.display))continue;let n=this.#hn(t.display,e,a);a=previousBlockOf(t.display),this.#j=a,i.push(...n),this.#A.push(...n)}let c=[];for(let{display:t}of o.slice(s)){if(this.#Vn(t))continue;let n=this.#hn(t,e,a);a=previousBlockOf(t);for(let e=0;e<n.length;e+=1)c.push({block:t,row:n[e]})}let l=[...n,...clipLiveRows(c.map(e=>e.row),r,e,this.#i),...t];i.length>0?this.#n.flush(i,l):this.#n.update(l)}#dn(){if(!this.#Z)return;let e=this.#On(),t=this.#yn(e),n=Math.max(1,this.#kn()-t.length),r=this.#j,i=[];for(let{display:t}of groupToolBlocksForDisplay(this.#m)){if(this.#Vn(t))continue;let n=this.#hn(t,e,r);r=previousBlockOf(t),i.push(...n)}let a=[...clipLiveRows(i,n,e,this.#i),...t];this.#n.clearAll(),this.#n.flush([...this.#mn(),...this.#A],a)}logDisplayMode(){return this.#p}setLogDisplayMode(e){e!==this.#p&&(this.#p=e,e===`all`&&this.flushDelayedDevBuildErrors(),this.#pn(),this.#Z&&this.#dn())}flushDelayedDevBuildErrors(){let e=this.#Oe;e!==void 0&&(this.#Oe=void 0,this.#Vt({kind:`log`,title:`stderr`,body:e,live:!0}),this.#ln())}#fn(){this.#ue=!0,this.#le!==void 0&&clearTimeout(this.#le),this.#le=setTimeout(()=>{this.#ue=!1,this.#le=void 0,this.#ln()},5e3),this.setLogDisplayMode(nextLogDisplayMode(this.#p)),this.#ln()}#pn(){let e=this.#On();this.#A.length=0;let t;for(let{display:n}of groupToolBlocksForDisplay(this.#_,{logCoalescing:`runs`})){if(this.#Vn(n))continue;let r=this.#hn(n,e,t);t=previousBlockOf(n),this.#A.push(...r)}this.#j=t}#mn(){let e=this.#E,t=this.#D;if(e===void 0&&t===void 0)return[];let n={name:e?.name??t?.name,theme:this.#i,width:this.#On()};e?.info!==void 0&&(n.info=e.info);let i=e?.tip??t?.tip;return i!==void 0&&(n.tip=i),buildAgentHeader(n)}#hn(e,t,n){let r={activityPulse:this.#_n(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#i,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#gn(){return this.#i.spinner[this.#ae%this.#i.spinner.length]??``}#_n(e,t){return isProgressPulseVisible(Date.now()-e)?t:` `}#vn(e,t){return e.indicator.kind===`spinner`?{glyph:this.#gn(),color:`yellow`}:{glyph:this.#_n(e.indicator.startedAtMs,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),color:t?.kind===`external-action`?`yellow`:`green`}}#yn(e){let n=this.#i.colors,r=[``];if(this.#Me!==void 0)return r.push(...this.#Me(e),``),this.#Tn(r,e),r;let a=this.#Ne;if(a!==void 0){let t=this.#vn(a,a.status),n;if(a.status!==void 0){let{startedAtMs:e,...r}=a.status,i=Date.now()-e,o=i>=5e3?` ${formatTurnDuration(i)}`:``;n={...r,text:`${r.text}${o}`,indicator:t}}let i;if(a.question!==void 0){let t=a.question(e);i={kind:`question`,rows:t},n!==void 0&&(i={kind:`question`,rows:t,status:n})}else n===void 0?i=a.preview===void 0?{kind:`idle`,indicator:t}:{kind:`preview`,text:a.preview,indicator:t}:(i={kind:`status`,status:n},a.preview!==void 0&&(i={kind:`status`,status:n,preview:a.preview}));let o={title:a.title,lines:a.summary===void 0?a.hideLinesWhileQuestion===!0?[]:a.lines:[{text:a.summary.headline,tone:`success`},...a.summary.facts.map(e=>({text:`${e.label}: ${e.value}`,tone:`info`}))],content:i};return r.push(...renderFlowPanel(o,this.#i,e)),this.#En(r,e),r}this.#Pe!==void 0&&r.push(...renderAttentionRows(this.#Pe,e,this.#i),``),this.#Fe!==void 0&&r.push(...renderTodoPanelRows({items:this.#Fe,width:e,theme:this.#i,working:this.#G||this.#K.kind===`waiting`,pulse:this.#_n(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)}),``);let o=renderMessageQueueRows({view:this.#Le.view(),width:e,theme:this.#i,working:this.#G});if(o.length>0&&r.push(...o,``),this.#R){let i=this.#z===void 0?void 0:inlineCommandHint(this.#z);i===void 0&&this.#z!==void 0&&isTypeaheadOpen(this.#z)&&r.push(...renderCommandSuggestions(this.#z,this.#i,e)),this.#ne&&r.push(clip(n.dim(`Press Ctrl+C again to exit`),e),``);let a=isPromptControlCommand(this.#F),o=i?n.dim(` ${i}`):``,s=[];this.#D!==void 0&&s.push(clip(n.dim(`${this.#i.glyph.dot} Building your agent…`),e)),this.#Tn(s,e);let u=Math.max(1,this.#kn()-1-r.length-1-s.length),f={text:this.#F,cursor:this.#I,width:e,theme:this.#i,caretVisible:this.#ie,isCommand:a,ghost:o,maxRows:u};return this.#B&&this.#F.length===0&&(f.placeholder=this.#H?``:promptPlaceholder(Date.now()-this.#V)),r.push(...promptInputRows(f)),r.push(...s),r}let s=this.#K.kind===`waiting`&&this.#Y===void 0;if(this.#G||s){r.push(this.#bn(e)),this.#Cn(r,e);let t=[];return this.#Tn(t,e),!this.#G&&t.length>0&&r.push(``),r.push(...t),r}if(this.#W.text.length>0)return this.#wn(r,e,{inert:!1}),this.#Tn(r,e),r;let u=this.#Y??(this.#J.length>0?this.#J:`Ready`),f=this.#Dn(),p=n.dim(this.#i.glyph.dot),m=f?`${p} ${u} ${n.dim(this.#i.glyph.dot)} ${f}`:`${p} ${u}`;return r.push(clip(m,e)),this.#Tn(r,e),r}#bn(e){let t=this.#i.colors,n=this.#_n(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),r=this.#K,i=this.#U.startedAtMs??this.#we??(r.kind===`waiting`?r.startedAtMs:Date.now()),a=Date.now()-i,o=`${typewriterText(`Working for`,a,80)} ${this.#xn(a)}`;return clip(`${t.yellow(n)} ${t.dim(o)}`,e)}#xn(e){return`${formatTurnDuration(e)}${this.#Sn()}`}#Sn(){let{inputTokens:e,outputTokens:t}=this.#U.usage;return e===0&&t===0?``:` ${this.#i.glyph.dash.repeat(2)} ${formatTokenFlow({inputTokens:e,outputTokens:t},this.#i.glyph)}`}#Cn(e,t){this.#G&&this.#wn(e,t,{inert:!0})}#wn(e,t,n){e.push(``);let r={text:this.#W.text,cursor:this.#W.cursor,width:t,theme:this.#i,caretVisible:!0,isCommand:!1,ghost:``,maxRows:4,inert:n.inert};n.inert&&this.#W.text.length===0&&(r.placeholder=``),e.push(...promptInputRows(r))}#Tn(e,t){let n=this.#P===void 0?``:` `,r=Math.max(1,t-n.length),i={theme:this.#i,width:r};this.#ue&&(i.logLevel=this.#p);let a=this.#E?.serverUrl;if(a!==void 0&&this.#P===void 0){let e=new URL(a).port;e.length>0&&(i.serverPort=e)}let o=this.#E?.info?.agent.model;o?.id!==void 0&&(i.model=o.id),o?.reasoning!==void 0&&o.reasoning!==`provider-default`&&(i.reasoning=o.reasoning),readGatewayServiceTier(o?.providerOptions).kind===`priority`&&(i.fastMode=!0);let s=o?.endpoint;s!==void 0&&(i.endpoint=s),this.#N!==void 0&&(i.vercel=this.#N),this.#P!==void 0&&(i.remote=this.#P);let c=buildStatusLine(i);c!==void 0&&e.push(clip(`${n}${c}`,t))}#En(e,t){if(this.#P===void 0)return;let n=Math.max(1,t-2),r=buildStatusLine({remote:this.#P,theme:this.#i,width:n});r!==void 0&&e.push(``,clip(` ${r}`,t))}#Dn(){let e=this.#i.colors,t=[],n=formatAssistantResponseStats({totalTokens:this.#ye,outputTokens:this.#Se,tokensPerSecond:this.#Ce},this.#l);return n&&t.push(n),t.length>0?e.dim(t.join(` ${this.#i.glyph.dot} `)):``}#On(){return Math.max(20,this.#t.columns||80)}#kn(){return Math.max(8,this.#t.rows||24)}#An(){if(this.#Te!==void 0||!this.#u)return;this.#Ee=``,this.#De=``;let capture=(e,t)=>{let n=e.write.bind(e);return e.write=((e,n,r)=>{let i=typeof n==`string`?n:void 0,a=typeof n==`function`?n:r;return this.#Nn(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#d?.subscribeLogRecords(e=>this.#Mn(e)),this.#Te=()=>{this.#d?.unsubscribeLogRecords(),e(),t()}}#jn(){let e=this.#Te;e!==void 0&&(this.#Te=void 0,e(),this.#Ee.length>0&&(this.#d?.append({source:`stdout`,detail:this.#Ee}),this.#Bn(`stdout`)&&process.stdout.write(`${this.#Ee}\n`),this.#Ee=``),this.#De.length>0&&(this.#d?.append({source:`stderr`,detail:this.#De}),this.#Bn(`stderr`)&&process.stderr.write(`${this.#De}\n`),this.#De=``))}#Mn(e){let t=e.fields===void 0?``:` ${JSON.stringify(e.fields)}`;this.#Fn(`[eve:${e.namespace}] ${e.message}${t}`),this.#ln()}#Nn(e,t){let n=(e===`stdout`?this.#Ee:this.#De)+t;if(e===`stdout`&&parseDevRebuildLogLine(n.trimEnd())!==void 0){this.#Ee=``,this.#d?.append({source:e,detail:n.trimEnd()}),this.#Pn(n.trimEnd()),this.#ln();return}let r=n.lastIndexOf(`
|
|
8
|
+
`),i=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#Ee=i:this.#De=i,r===-1)return;let a=stripAnsi(n.slice(0,r)).replace(/\s+$/u,``);a.trim().length!==0&&(this.#d?.append({source:e,detail:a}),e===`stdout`?this.#Pn(a):this.#Fn(a),this.#ln())}#Pn(e){let t=[],flushPending=()=>{if(t.length===0)return;let e=t.join(`
|
|
9
|
+
`);t=[],e.trim().length!==0&&this.#Vt({kind:`log`,title:`stdout`,body:e,live:!0})};for(let n of e.split(`
|
|
10
|
+
`)){let e=parseSandboxLogLine(n.trimEnd());if(e!==void 0){flushPending(),this.#Vt({kind:`sandbox`,body:e,live:!1});continue}let r=parseDevRebuildLogLine(n.trimEnd());if(r===void 0){t.push(n);continue}flushPending(),this.#Ln(r,n.trimEnd())}flushPending()}#Fn(e){let t=e.split(`
|
|
11
|
+
`),n=t.findIndex(e=>parseDevRebuildLogLine(e.trimEnd())?.kind===`failed`);if(n===-1){if(this.#d===void 0){this.#Vt({kind:`log`,title:`stderr`,body:e,live:!0});return}let t=presentDiagnostic(e,this.#d.displayPath);if(t.kind===`inline`){this.#Vt({kind:`log`,title:`stderr`,body:t.text,live:!0});return}this.#Vt({kind:`log`,title:`stderr`,body:formatStoredDiagnostic(t),logVisibility:`stderr-only`,live:!0}),this.#Vt({kind:`log`,title:`stderr`,body:e,logVisibility:`all-only`,live:!0});return}let r=t.slice(0,n).join(`
|
|
12
|
+
`);r.trim().length>0&&this.#Vt({kind:`log`,title:`stderr`,body:r,live:!0});let i=t.slice(n).join(`
|
|
13
|
+
`);this.#In(i)}#In(e){if(this.#p===`all`){if(e.trim().length===0)return;this.#Vt({kind:`log`,title:`stderr`,body:e,live:!0});return}this.#Oe=e}#Ln(e,t){let n=this.#Rn();if(e.kind===`failed`){this.#In(t);return}if(e.kind===`rebuilding`){let t=summarizeChangedFiles(e.events,e.more);if(n!==void 0){n.state.summary=t,n.block.body=formatDevRebuildStatus(t,`rebuilding`);return}let r=`dev-rebuild:${this.#Ae}`;this.#Ae+=1,this.#ke={id:r,summary:t},this.#Vt({kind:`log`,id:r,title:`stdout`,body:formatDevRebuildStatus(t,`rebuilding`),live:!0});return}if(n!==void 0){n.block.body=formatDevRebuildStatus(n.state.summary,e.kind),e.kind===`rebuilt`&&(this.#Oe=void 0);return}e.kind===`rebuilt`&&(this.#Oe=void 0),this.#Vt({kind:`log`,title:`stdout`,body:t,live:!0})}#Rn(){let e=this.#ke;if(e===void 0)return;let t=this.#h.get(e.id);if(!(t===void 0||t.live!==!0))return{state:e,block:t}}#zn(){let e=this.#ke;if(e===void 0)return;this.#ke=void 0;let t=this.#h.get(e.id);t!==void 0&&(t.live=!1)}#Bn(e){switch(this.#p){case`none`:return!1;case`stderr`:return e===`stderr`;case`sandbox`:return e===`sandbox`;case`all`:return!0}}#Vn(e){return e.kind===`sandbox`?!this.#Bn(`sandbox`):e.kind===`log`?e.logVisibility===`stderr-only`?this.#p!==`stderr`:e.logVisibility===`all-only`?this.#p!==`all`:!this.#Bn(e.title===`stderr`?`stderr`:`stdout`):!1}};function chunkToString(e,t){return typeof e==`string`?e:Buffer.from(e).toString(t)}async function*iterateTUIStream(e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}return}yield*e}function clip(e,t){return clipVisible(e,t)}function promptInputRows({text:e,cursor:t,width:n,theme:r,caretVisible:i,isCommand:a,ghost:o,maxRows:s,placeholder:c,inert:l}){let u=r.colors;if(e.length===0&&c!==void 0){let e=renderInputWithBlockCursor({...visibleLine({text:c,cursor:0},Math.max(1,n-3),r.glyph.ellipsis),visible:i,inverse:u.inverse,render:e=>u.dim(renderInputText(e))});return[clip(`${u.dim(r.glyph.promptIdle)} ${e}`,n),``]}let style=e=>{let t=renderInputText(e);return a&&t.length>0?u.blue(t):t},d=layoutPromptInput({text:e,cursor:t}),f=Math.min(Math.max(1,s),d.rows.length),p=Math.max(0,Math.min(d.caretRow-f+1,d.rows.length-f)),m=l===!0?u.dim(r.glyph.prompt):u.cyan(r.glyph.prompt),h=u.dim(r.glyph.ellipsis),g=Math.max(1,n-3),_=[];for(let e=p;e<p+f;e+=1){let t=d.rows[e],a=e===0?m:` `;(e===p&&p>0||e===p+f-1&&p+f<d.rows.length)&&(a=h);let s;if(e===d.caretRow){let{before:e,under:n,after:a}=visibleLine({text:t.text,cursor:d.caretOffset},g,r.glyph.ellipsis);s=renderInputWithBlockCursor({before:e,under:n,after:a,visible:i,inverse:u.inverse,render:style}),o.length>0&&d.rows.length===1&&(s+=o)}else s=style(t.text);_.push(clip(`${a} ${s}`,n))}return _.push(``),_}function previousBlockOf(e){let t={kind:e.kind};return e.title!==void 0&&(t.title=e.title),t}function isActiveToolStatus(e){return e===`running`||e===`approval`}function applyCohortLiveness(e){let t=e.some(e=>e.active);for(let n of e)n.block.live=t||n.active}function leadsWithGap(e,t){if(e.kind===`tool`&&(t?.kind===`user`||t?.kind===`assistant`||t?.kind===`question`))return!0;if(e.kind===`sandbox`&&t?.kind===`sandbox`)return!1;if(t?.kind===`sandbox`&&e.kind!==`sandbox`||t?.kind===`log`)return!0;switch(e.kind){case`user`:case`assistant`:case`reasoning`:case`subagent`:case`error`:case`notice`:case`question`:case`connection-auth`:case`sandbox`:case`log`:case`command`:case`warning`:case`flow`:case`turn-stats`:case`session-boundary`:case`todo-list`:case`agent-header`:return!0;default:return!1}}function parseSandboxLogLine(e){let t=e.trim();if(!t.startsWith(`eve: `))return;let n=t.slice(5);return/\bsandbox\b/i.test(n)&&!isLowValueSandboxLogLine(n)?n:void 0}function isLowValueSandboxLogLine(e){return/^initializing (?:\d+ )?sandbox templates?\b/i.test(e)||/^initialized \d+ sandbox\b/i.test(e)||/^reused cached sandbox template\b/i.test(e)||/^sandbox template "[^"]+" \([^)]+\): (checking|reusing|loading microsandbox runtime|microsandbox runtime ready)\b/i.test(e)}function clipLiveRows(e,t,n,r){if(e.length<=t)return[...e];if(t<=1)return[clip(hiddenRowsMarker(e.length,r),n)];let i=t-1;return[clip(hiddenRowsMarker(e.length-i,r),n),...e.slice(e.length-i)]}function hiddenRowsMarker(e,t){let n=e.toLocaleString(),r=e===1?`row`:`rows`;return t.colors.dim(`${t.glyph.dot} ${t.glyph.ellipsis} ${n} earlier ${r} hidden while streaming`)}function collapseReasoning(e,t){switch(e){case`collapsed`:return!0;case`auto-collapsed`:return!t;default:return!1}}function renderNativeToolBlock(e,t,n,r){let i=e.preparing===!0?presentPreparingTool(e.toolName,r):presentTool(e.toolName,e.input,r),a={id:t,kind:`tool`,title:stripTerminalControls(i.title),subtitle:stripTerminalControls(i.subtitle),status:e.status,live:e.status===`running`||e.status===`approval`,expanded:n,toolInput:e.input,toolName:e.toolName,toolGroup:i.group};return i.doneTitle!==void 0&&(a.doneTitle=stripTerminalControls(i.doneTitle)),i.detail!==void 0&&(a.detailLines=i.detail,a.keepDetailWhenDone=i.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(a.result=stripTerminalControls(e.errorText)):(a.result=i.summarizeResult(e.output),a.toolOutput=e.output),a}function writeExistedFlag(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e.existed;return typeof t==`boolean`?t:void 0}function subagentToolStatus(e){switch(e){case`preparing`:return`running`;case`approval-requested`:return`approval`;case`executing`:return`running`;case`done`:return`done`;case`failed`:return`error`;case`rejected`:return`denied`}}function formatToolApprovalTitle(e){return stripTerminalControls(e.title??e.toolName)}function toolSectionId(e){return`tool:${e}`}function questionSectionId(e){return`question:${e}`}function subagentHeaderId(e){return`subagent:${e}:header`}function subagentStepSectionId(e,t){return`subagent:${e}:step:${t}`}function subagentToolSectionId(e,t){return`subagent:${e}:tool:${t}`}function connectionAuthSectionId(e){return`connection-auth:${e}`}function connectionAuthTerminalMessage(e){switch(e){case`authorized`:return`Authorization complete`;case`declined`:return`Authorization declined`;case`failed`:return`Authorization failed`;case`timed-out`:return`Authorization timed out`;case`required`:case`pending`:return}}function formatConnectionAuthContent(e,t){let n=[];if(t!==void 0)n.push(t);else{let t=stripTerminalControls(e.description);t.length>0&&n.push(t);let r=e.challenge;r?.url&&n.push(`URL: ${stripTerminalControls(r.url)}`),r?.userCode&&n.push(`Code: ${stripTerminalControls(r.userCode)}`),r?.expiresAt&&n.push(`Expires: ${stripTerminalControls(r.expiresAt)}`),r?.instructions&&n.push(stripTerminalControls(r.instructions))}if(e.reason!==void 0){let t=stripTerminalControls(e.reason);t.length>0&&n.push(`Reason: ${t}`)}return n.join(`
|
|
14
14
|
`)}function formatQuestionContent(e,t,n){let r=n.colors,i=[],a=e.options??[];if(a.length>0){for(let[e,o]of a.entries()){let a=stripTerminalControls(o.label),s=o.description===void 0?``:stripTerminalControls(o.description),c=t===e,l=s.length>0?`${c?` `:` `}${r.dim(`— ${s}`)}`:``,u=renderCursorRow(c?`${n.glyph.selectedPointer} ${a}`:` ${a}`,c,r);i.push(`${u}${l}`)}if(e.allowFreeform===!0){let e=t===a.length,o=`Type your own answer`,s=e?`${n.glyph.selectedPointer} ${o}`:` ${r.dim(o)}`;i.push(renderCursorRow(s,e,r))}}else i.push(r.dim(` (type your answer)`));return i.join(`
|
|
15
15
|
`)}function resolveQuestionText(e,t){let n=e.trim();if(n.length===0)return;let r=n.toLowerCase(),i=t.options??[];if(i.length>0){let e=matchQuestionOption(r,i);if(e!==void 0)return{optionId:e.id,label:e.label}}if(t.allowFreeform===!0||i.length===0)return{text:n,label:n}}function matchQuestionOption(e,t){let n=t.find(t=>t.id.toLowerCase()===e);if(n!==void 0)return n;let r=t.find(t=>t.label.toLowerCase()===e);if(r!==void 0)return r;let i=Number(e);if(Number.isInteger(i)&&i>0&&i<=t.length)return t[i-1]}export{TerminalRenderer};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { DevBootProgressReporter } from "#internal/dev-boot-progress.js";
|
|
2
2
|
import type { CommandLifecycle } from "#cli/shutdown.js";
|
|
3
|
+
import { type DevDiagnostics } from "../diagnostics.js";
|
|
4
|
+
import { TerminalRenderer } from "./terminal-renderer.js";
|
|
3
5
|
import { type DevelopmentTuiTarget } from "./target.js";
|
|
4
6
|
import type { TuiDisplayOptions } from "./types.js";
|
|
5
7
|
export type { DevelopmentTuiTarget } from "./target.js";
|
|
@@ -18,7 +20,21 @@ export interface RunDevelopmentTuiInput extends TuiDisplayOptions {
|
|
|
18
20
|
/** Gives setup subprocesses exclusive terminal and development-host ownership. */
|
|
19
21
|
withExclusiveTerminal?: <T>(task: () => Promise<T>) => Promise<T>;
|
|
20
22
|
readonly lifecycle?: CommandLifecycle;
|
|
23
|
+
/** Prepared editing-only startup UI reused by the initialized local runner. */
|
|
24
|
+
startup?: DevelopmentTuiStartup;
|
|
21
25
|
}
|
|
26
|
+
export interface DevelopmentTuiStartup {
|
|
27
|
+
readonly diagnostics: DevDiagnostics | undefined;
|
|
28
|
+
readonly headerTip: string;
|
|
29
|
+
readonly renderer: TerminalRenderer;
|
|
30
|
+
finish(): string;
|
|
31
|
+
shutdown(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare function startDevelopmentTuiStartup(input: TuiDisplayOptions & {
|
|
34
|
+
readonly appRoot: string;
|
|
35
|
+
readonly initialInput?: string;
|
|
36
|
+
readonly onExitRequest: () => void;
|
|
37
|
+
}): Promise<DevelopmentTuiStartup>;
|
|
22
38
|
/**
|
|
23
39
|
* Runs the `eve dev` terminal UI against the given server URL until the
|
|
24
40
|
* user exits.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDevDiagnostics}from"../diagnostics.js";import{promptCommandsFor}from"./prompt-commands.js";import{probeMcpConnection}from"./mcp-connection-status.js";import{createPromptCommandHandler}from"./prompt-command-handler.js";import{formatRemoteAuthChallengeMessage}from"./remote-auth-result.js";import{
|
|
1
|
+
import{createDevDiagnostics}from"../diagnostics.js";import{remoteHost}from"./target.js";import{promptCommandsFor}from"./prompt-commands.js";import{pickAgentHeaderTip}from"./agent-header.js";import{probeMcpConnection}from"./mcp-connection-status.js";import{createPromptCommandHandler}from"./prompt-command-handler.js";import{formatRemoteAuthChallengeMessage}from"./remote-auth-result.js";import{TerminalRenderer}from"./terminal-renderer.js";import{EveTUIRunner}from"./runner.js";import{Client}from"#client/index.js";import{toErrorMessage}from"#shared/errors.js";import{resolveDevelopmentOidcToken,resolveLinkedDevelopmentOidcToken}from"#services/dev-client/request-headers.js";import{isVercelAuthChallenge}from"#services/dev-client/vercel-auth-error.js";import{resolveVercelDeployment}from"#setup/vercel-deployment.js";import{resolveLocalDevelopmentClientOptions,resolveRemoteDevelopmentClientOptions}from"#services/dev-client/client-options.js";import{createDevelopmentCredentialGate}from"#services/dev-client/credential-gate.js";async function startDevelopmentTuiStartup(t){let n=await createDevDiagnostics(t.appRoot).catch(()=>void 0),i=pickAgentHeaderTip(),a=new TerminalRenderer({...t,diagnostics:n,onExitRequest:t.onExitRequest});return a.beginStartupDraft({initialDraft:t.initialInput,tip:i,title:t.name??`eve`}),{diagnostics:n,headerTip:i,renderer:a,finish:()=>a.finishStartupDraft(),async shutdown(){a.shutdown(),await n?.close()}}}function prepareRemoteTarget(e){return{target:e,credentials:createDevelopmentCredentialGate(e.serverUrl),resolveOidcToken:resolveDevelopmentOidcToken,resolveDeployment:n=>resolveVercelDeployment({workspaceRoot:e.workspaceRoot,host:remoteHost(e),signal:n})}}function prepareDevelopmentTarget(e){return e.kind===`local`?{kind:`local`,target:e}:{kind:`remote`,target:e,remote:prepareRemoteTarget(e)}}async function runDevelopmentTui(t){let{target:r,headers:o,initialInput:s,onBootProgress:c,lifecycle:l,startup:u,withExclusiveTerminal:d,...f}=t,p=prepareDevelopmentTarget(r),{serverUrl:m}=r,h=o===void 0?{}:{headers:o},g=new Client(p.kind===`local`?resolveLocalDevelopmentClientOptions({...h,serverUrl:m,token:()=>resolveLinkedDevelopmentOidcToken(p.target.workspaceRoot)}):resolveRemoteDevelopmentClientOptions({...h,serverUrl:m,credentials:p.remote.credentials})),_={...f,client:g,serverUrl:m,promptCommandHandler:createPromptCommandHandler({target:r}),availablePromptCommands:promptCommandsFor(r.kind),formatTransportError:e=>isVercelAuthChallenge(e)?formatRemoteAuthChallengeMessage(m):toErrorMessage(e)};p.kind===`local`?(_.appRoot=p.target.workspaceRoot,_.probeMcpConnection=probeMcpConnection):_.remote=p.remote,s!==void 0&&(_.initialInput=s),u!==void 0&&(_.renderer=u.renderer,_.startup=u),c!==void 0&&(_.onBootProgress=c),l!==void 0&&(_.lifecycle=l),d!==void 0&&(_.withExclusiveTerminal=d);let v=u?.diagnostics??(p.kind===`local`?await createDevDiagnostics(p.target.workspaceRoot).catch(()=>void 0):void 0);v!==void 0&&(_.diagnostics=v);try{await new EveTUIRunner(_).run()}finally{await v?.close()}}export{runDevelopmentTui,startDevelopmentTuiStartup};
|
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{
|
|
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{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{runInteractiveDevelopmentUi}from"#cli/dev/run-interactive-ui.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";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 loadDevelopmentTuiModule(){return await import(`#cli/dev/tui/tui.js`)}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,d){let p=resolveInstalledPackageInfo().version,m=new Command,h=createCliTheme();m.name(`eve`).description(`Build and run an eve application.`).version(p).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(m.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),d).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,d.project,t)}),registerIntegrationCommands({program:m,logger:e,applicationContext:d});let b=m.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,d.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(d.root);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,d.root)}),registerRegistryCommands({program:m,logger:e,applicationContext:d}),m.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,d.root,t,{channelWebNextjs:n.channelWebNextjs,model:n.model,reasoning:n.reasoning})}),applicationCommand(m.command(`set`),d).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,d.root,t)}),registerProjectCommands({program:m,logger:e,applicationContext:d}),registerBuildCommand({applicationContext:d,buildHost:n.buildHost,logger:e,program:m}),applicationCommand(m.command(`start`),d).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(d.root);let i=await(n.startProductionHost??await loadStartProductionHost())(d.root,{host:t.host,port:t.port});e.log(renderCliTaggedLine(h,{message:`server listening at ${i.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>i.close(),wait:()=>i.wait()})}),registerRuntimeInvokeCommand({applicationContext:d,logger:e,program:m,runtime:n}),registerAcpCommand({applicationContext:d,eveVersion:p,program:m,resolveVerifiedRemoteDevelopmentClient:n.resolveVerifiedRemoteDevelopmentClient,runAcpServer:n.runAcpServer,startHost:n.startHost}),applicationCommand(m.command(`dev`),d,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,
|
|
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,
|
|
3
|
+
`).action(async(t,i)=>{let a=resolveDevelopmentUrlTarget(i,t),s=a?.serverUrl,c=hasInteractiveTerminal(),l=resolveDevUiMode({options:i,interactive:c});if(l===`headless`&&e.log(eveCliBanner()),i.input!==void 0&&l===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let u=!1;if(s!==void 0&&(u=await(n.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:d.root,serverUrl:s})),s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(d.root),e.log(`↗ ${u?`local`:`remote`} mode targeting ${h.info(new URL(s).host)}`),l===`headless`){e.log(renderCliTaggedLine(h,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let r=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveDevelopmentUi({applicationRoot:d.root,existingLocalServer:u,lifecycle:r,options:i,remoteTarget:a,runDevelopmentTui:n.runDevelopmentTui,server:{serverUrl:s}})}finally{r.dispose()}return}let f=l===`tui`?startCliLiveRow(e):void 0,p=createDevBootProgressReporter(f);f?.update(`Building your agent`);let m,g,closeServer=()=>m===void 0?Promise.resolve():(g??=m.close(),g.catch(()=>void 0),g),_=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}}),v,y=l===`tui`&&n.runDevelopmentTui===void 0?loadDevelopmentTuiModule().then(e=>(p({type:`before-first-paint`}),e.startDevelopmentTuiStartup({appRoot:d.root,initialInput:i.input,onExitRequest:_.requestStop,...resolveTuiDisplayOptions(i)}))):void 0;try{m=(n.startHost??await loadStartHost())(d.root,{existing:l===`tui`?`attach-if-unconfigured`:`reject`,host:i.host,onBootProgress:p,port:i.port});let[t,r]=await Promise.all([Promise.race([m.start().then(e=>({handle:e})),_.stopped.then(()=>({handle:void 0}))]),y]),a=t.handle;if(a===void 0){v=r,await v?.shutdown();return}if(v=r,l!==`tui`&&e.log(renderCliTaggedLine(h,{message:`server listening at ${a.url}`,tag:`dev`,tone:`success`})),l===`headless`){i.ui!==!1&&!c&&e.log(renderCliTaggedLine(h,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(m,_);return}await waitForUiOrServer({handle:a,lifecycle:_,server:m,runUi:async()=>await runInteractiveDevelopmentUi({applicationRoot:d.root,existingLocalServer:!1,lifecycle:_,options:i,report:p,runDevelopmentTui:n.runDevelopmentTui,server:{appRoot:a.appRoot,serverUrl:a.url},startup:v})})}finally{f?.stop(),v===void 0&&(v=await y?.catch(()=>void 0),await v?.shutdown()),await closeServer(),_.dispose()}});let x=m.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return applicationCommand(x.command(`show [logid]`,{isDefault:!0}),d).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,d.root,t,n)}),applicationCommand(x.command(`ls`),d).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,d.root,t)}),applicationCommand(m.command(`traces [trace]`),d).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,d.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,d.root,t)}),applicationCommand(m.command(`info`),d).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(n.printApplicationInfo??await loadPrintApplicationInfo())(e,d.root,t)}),applicationCommand(m.command(`eval`),d).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,d.root)}),m}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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.47.
|
|
1
|
+
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.47.1`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let i=dirname(t);if(i===t)return;t=i}}function tryResolveDirectBuildLocation(e){let i=dirname(e);for(;;){if(basename(i)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(i),`package.json`));if(e!==void 0)return{packageBuildRoot:i,packageRoot:e}}let e=dirname(i);if(e===i)return;i=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let r=realpathSync.native(e),i=tryResolveDirectBuildLocation(r);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(r));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(r)),n=e===void 0?void 0:tryCreatePackageLocation(e);if(n!==void 0)return n}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
|
|
@@ -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{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{
|
|
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{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{devBootPhase}from"#internal/dev-boot-progress.js";import{readDevelopmentRuntimeArtifactsRevision}from"#services/dev-client/runtime-artifacts.js";import{toErrorMessage}from"#shared/errors.js";import{startDevelopmentSandboxPrewarmInBackground}from"#execution/sandbox/development-prewarm.js";import{createDevelopmentApplicationNitro}from"#internal/nitro/host/create-application-nitro.js";import{prepareDevelopmentApplicationHost}from"#internal/nitro/host/prepare-application-host.js";import{createDevelopmentNitroArtifactsConfig}from"#internal/nitro/host/artifacts-config.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{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{DEFAULT_DEVELOPMENT_SERVER_HOST,normalizeDevelopmentServerClientUrl}from"#internal/nitro/host/dev-server-url.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{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 new DevelopmentServerState(await resolveDiscoveryProject(e.appRoot)).read();return t===void 0||!isLoopbackServerUrl(t)||!await isDevelopmentServerReady(t)?!1:new URL(t).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
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 a=>{let o=await e.workflowWorld?.handleRequest(a);if(o!==void 0)return o;let s=new URL(a.url);if(s.pathname===EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH&&a.method===`GET`)return handleDevRuntimeArtifactsRequest({appRoot:e.appRoot});let c=s.pathname===EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH&&a.method===`POST`,l=s.pathname===EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH&&a.method===`POST`,u=s.pathname===EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH&&(a.method===`GET`||a.method===`POST`);if(!c&&!l&&!u)return;let d=e.getWatcher();return d===void 0?Response.json({error:`The development server is still starting.`},{status:503}):c?(await d.suspend(),Response.json({suspended:!0})):l?(await d.resume({silent:s.searchParams.get(`silent`)===`1`}),handleDevRuntimeArtifactsRequest({appRoot:e.appRoot})):(s.searchParams.get(`force`)===`1`?await d.rebuild():await d.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(t,n){process.env[EVE_DEV_ENV_FLAG]??=`1`;let r=await resolveDiscoveryProject(t);loadDevelopmentEnvironmentFiles(r.appRoot);let i=readEnvironmentPort(),c=n.port??i,l=n.host!==void 0||n.port!==void 0||i!==void 0,f=new DevelopmentServerState(r),m=await f.read();if(m!==void 0&&isLoopbackServerUrl(m)&&await isDevelopmentServerReady(m)){if(n.existing===`attach-if-unconfigured`&&!l)return{handle:{kind:`existing`,appRoot:r.appRoot,url:m},close:void 0};throw await createDevelopmentServerAlreadyRunningError(r.appRoot,m)}let h=process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV],v=createDevelopmentSandboxRunId();process.env[EVE_DEVELOPMENT_SANDBOX_RUN_ID_ENV]=v;let y,b,x,S,C,w,T,E=!1,D=!1;try{let t=await devBootPhase(`compiling agent`,()=>prepareDevelopmentApplicationHost(r.appRoot),n.onBootProgress);T=t;let i=resolveNitroCompiledArtifactsSource(createDevelopmentNitroArtifactsConfig({appRoot:t.appRoot,configuredWorld:t.compileResult.manifest.config.experimental?.workflow?.world}));pruneLocalSandboxTemplatesInBackground(t.appRoot);let a=await devBootPhase(`creating dev server`,()=>createDevelopmentApplicationNitro(t),n.onBootProgress);y=a,b=new DrainedNitroDevServer(a.logger);let o=b,s=randomBytes(32).toString(`base64url`);o.setClientAddressSecret(s),S=installWorkflowTransportEnvironment(r.appRoot,s),C=createDevelopmentWorkflowWorld({appRoot:r.appRoot,preparedHost:t,transportSecret:s}),addDevelopmentControlHandler({appRoot:r.appRoot,devServer:o,getWatcher:()=>w,workflowWorld:C});let l=n.host??a.options.devServer.hostname??DEFAULT_DEVELOPMENT_SERVER_HOST,u=c===void 0,d=await devBootPhase(`binding port`,()=>listenForDevelopmentServer({devServer:o,host:l,port:c,retryOnAddressInUse:u}),n.onBootProgress);if(!d.url)throw Error(`Nitro dev server did not expose a URL.`);let p=normalizeDevelopmentServerClientUrl(d.url);x=installWorkflowLocalQueueEnvironment(p),await devBootPhase(`building dev bundle`,async()=>{let e=await buildDevelopmentHostCandidate({host:t,nitro:a});y=void 0;let n=t.workspace;D=!0,await o.replaceWorker({dispose:async()=>await removeDevelopmentHostWorkspace(n),entry:e.entry,workerData:e.workerData}),await activateDevelopmentGeneration({appRoot:t.appRoot,generation:t.generation}),E=!0},n.onBootProgress),await C?.start(),startDevelopmentSandboxPrewarmInBackground({appRoot:t.appRoot,compiledArtifactsSource:i});let m=await createDevelopmentAuthoredRebuildCoordinator({devServer:o,initialHost:t});w=await devBootPhase(`starting file watcher`,async()=>{let{startAuthoredSourceWatcher:e}=await import(`#internal/nitro/host/dev-authored-source-watcher.js`);return e({coordinator:m,preparedHost:t})},n.onBootProgress),await f.write(p);let g=x;if(g===void 0)throw Error(`Workflow local queue environment was not initialized.`);let _=w,O=b,k=C,A=S,j;return{handle:{kind:`started`,appRoot:r.appRoot,url:p},close:()=>(j??=(async()=>{let e=await closeDevelopmentServerResources({appRoot:r.appRoot,authoredSourceWatcher:_,devServer:O,developmentSandboxRunId:v,nitro:void 0,workflowWorld:k});e.listenerClosed&&await f.remove().catch(()=>{});try{let t=createDevelopmentServerCleanupError(e.errors);if(t!==void 0)throw t}finally{g(),A?.(),restoreDevelopmentSandboxRunId(h)}})(),j)}}catch(e){let t=await closeDevelopmentServerResources({appRoot:r.appRoot,authoredSourceWatcher:w,devServer:b,developmentSandboxRunId:v,nitro:y,workflowWorld:C}),n=[...t.errors];throw T!==void 0&&!E&&await discardDevelopmentGeneration(T.generation).catch(e=>{n.push(e)}),T!==void 0&&!D&&await removeDevelopmentHostWorkspace(T.workspace).catch(e=>{n.push(e)}),x?.(),S?.(),t.listenerClosed&&await f.remove().catch(()=>{}),restoreDevelopmentSandboxRunId(h),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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{readDevelopmentRuntimeArtifactsRevision,rebuildDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";import{isLocalDevelopmentServerUrl}from"#services/dev-client/local-host.js";var LocalDevelopmentRuntimeArtifactRefresher=class{#e;#t;#n;constructor(e){this.#e=isLocalDevelopmentServerUrl(e.serverUrl),this.#t=e.serverUrl}clear(){this.#n=void 0}async refresh(e){shouldRefreshRuntimeArtifactsForTurn(e)&&await this.#r({...e,rebuild:!0})}async refreshIdle(e){await this.#r({...e,rebuild:!1})}async refreshAfterSourceChange(e){await this.#r({...e,force:!0,rebuild:!0})}async#r(t){if(!this.#e)return;let n=(t.rebuild?await rebuildDevelopmentRuntimeArtifacts({force:t.force,serverUrl:this.#t}):void 0)??await readDevelopmentRuntimeArtifactsRevision({serverUrl:this.#t});if(n===void 0)return;let r=this.#n;r!==void 0&&r!==n&&await t.onRuntimeArtifactsChanged?.({previousRevision:r,revision:n}),this.#n=n}};function shouldRefreshRuntimeArtifactsForTurn(e){return e.message!==void 0&&(e.inputResponses?.length??0)===0}function createDevelopmentRuntimeArtifactRefresher(e){return new LocalDevelopmentRuntimeArtifactRefresher(e)}export{createDevelopmentRuntimeArtifactRefresher};
|
|
@@ -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{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.58`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.4.3`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.47.
|
|
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{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.58`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.4.3`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.47.1`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{"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,n){let r=parseChatGptModelSelection(e);return r===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(n)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(r)}),\n${reasoningTemplateLine(n)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,n){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(n.model)!==void 0?renderAgentTemplate(n.model,n.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,n.appName).replaceAll(`__EVE_INIT_MODEL__`,n.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(n.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(n.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(n.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(n.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,n.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,n.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,n.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,n.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,n.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,n.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__",
|