eve 0.49.1 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/src/chunks/{use-eve-agent-BZnOzAVd.js → use-eve-agent-B5I-k6Ek.js} +173 -41
  3. package/dist/src/chunks/{use-eve-agent-Bgp6INfi.js → use-eve-agent-DUMU6dap.js} +173 -41
  4. package/dist/src/cli/dev/tui/runner.js +1 -1
  5. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  6. package/dist/src/cli/dev/tui/terminal-renderer.js +1 -1
  7. package/dist/src/client/message-reducer-primitives.d.ts +0 -1
  8. package/dist/src/client/message-reducer-primitives.js +1 -1
  9. package/dist/src/client/message-reducer.js +1 -1
  10. package/dist/src/client/message-run-parts.d.ts +18 -0
  11. package/dist/src/client/message-run-parts.js +1 -0
  12. package/dist/src/client/ndjson.d.ts +4 -2
  13. package/dist/src/client/ndjson.js +3 -3
  14. package/dist/src/client/open-stream.d.ts +2 -0
  15. package/dist/src/client/open-stream.js +1 -1
  16. package/dist/src/client/stream-version.d.ts +3 -0
  17. package/dist/src/client/stream-version.js +1 -0
  18. package/dist/src/compiled/.vendor-stamp.json +7 -2
  19. package/dist/src/compiled/@eve/catalog/index.d.ts +87 -0
  20. package/dist/src/compiled/@eve/catalog/index.js +1 -0
  21. package/dist/src/compiler/extension-compatibility.d.ts +34 -21
  22. package/dist/src/compiler/extension-compatibility.js +1 -1
  23. package/dist/src/execution/ndjson-stream.d.ts +1 -1
  24. package/dist/src/execution/ndjson-stream.js +3 -3
  25. package/dist/src/execution/workflow-runtime.js +1 -1
  26. package/dist/src/harness/current-messages.d.ts +2 -0
  27. package/dist/src/harness/current-messages.js +1 -1
  28. package/dist/src/harness/emission.js +1 -1
  29. package/dist/src/harness/hitl/approval-input-requests.d.ts +2 -2
  30. package/dist/src/harness/hitl/approval-input-requests.js +1 -1
  31. package/dist/src/harness/input-requests.js +1 -1
  32. package/dist/src/harness/ordered-stream-emitter.js +1 -1
  33. package/dist/src/harness/tool-loop.js +2 -2
  34. package/dist/src/internal/application/package.js +1 -1
  35. package/dist/src/protocol/message-version.d.ts +52 -0
  36. package/dist/src/protocol/message-version.js +1 -0
  37. package/dist/src/protocol/message.d.ts +1 -8
  38. package/dist/src/protocol/message.js +2 -2
  39. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +0 -1
  40. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  41. package/dist/src/public/channels/slack/defaults.js +2 -2
  42. package/dist/src/setup/scaffold/channels-catalog.js +1 -1
  43. package/dist/src/setup/scaffold/connections/catalog.d.ts +1 -1
  44. package/dist/src/setup/scaffold/connections/catalog.js +1 -1
  45. package/dist/src/setup/scaffold/create/project.js +1 -1
  46. package/dist/src/svelte/index.js +1 -1
  47. package/dist/src/svelte/use-eve-agent.js +1 -1
  48. package/dist/src/vue/index.js +1 -1
  49. package/dist/src/vue/use-eve-agent.js +1 -1
  50. package/docs/concepts/sessions-runs-and-streaming.md +12 -6
  51. package/docs/guides/client/streaming.mdx +18 -2
  52. package/docs/tools/human-in-the-loop.md +2 -0
  53. package/package.json +1 -1
  54. package/dist/src/packages/eve-catalog/src/index.js +0 -1
@@ -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{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;#_=!1;#v;#y;#b;#x;#S;#C;#w;#T;#E=!1;#D=new AbortController;#O=!1;#k=[];#A;#j;#M;#N;#P;#F=new Map;#I;#L=[];#R;#z=!1;#B;#V=new Map;#H=new Set;#U;#W;#G;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#G=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),t.appRoot!==void 0&&(n.onToolCompleted=async(e,t)=>{let n=registryHandoffAddress(e,t);n!==void 0&&this.#oe(n)}),this.#B=new SubagentPump(n),this.#r=t.name??`eve`,this.#N=t.startup?.headerTip??pickAgentHeaderTip(),this.#b=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),this.#g=t.onboard===!0,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.#j=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#M=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#v=t.promptCommandHandler),this.#y=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#x=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.#S=t.bootDetections??BOOT_DETECTIONS,this.#C=t.getVercelAuthStatus??getVercelAuthStatus,this.#w=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#T=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#K(){if(this.#f===void 0)return this.#J(),this.#g||await this.#ce(void 0),this.#h?.finish()??this.#m;let e;if(this.#x!==void 0){let t=await this.#x.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.#T);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}let t=this.#h?.finish()??this.#m;this.#J();let n=this.#q(e);return this.#g||await this.#ce(n),t}#q(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#P=t;let n=this.#f;if(n===void 0||this.#_)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#N),this.#n.renderAgentHeader?.(r),t}#J(){let e=this.#T;this.#T=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#G?.signal.aborted===!0?onStop():this.#G?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#Y()}finally{this.#G?.signal.removeEventListener(`abort`,onStop),this.#E=!0,this.#D.abort(),this.#B.abortAll(),this.#W?.(),this.#W=void 0,this.#n.shutdown?.(),this.#j?.dispose(),this.#M?.dispose(),this.#x?.dispose()}}async#Y(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=await this.#K();if(this.#x?.current().connection.state===`auth-required`&&await this.#_e({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#fe(),this.#j?.refreshIdentity(),this.#M?.refresh(),this.#g&&this.#p!==void 0&&this.#v!==void 0&&this.#n.setupFlow!==void 0){l=void 0,this.#_=!0;try{await this.#ye(e)}finally{this.#_=!1}}for(;;){if(this.#G?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;let u=this.#L[0];if(u!==void 0&&i===void 0&&this.#I===void 0){this.#L.shift(),this.#R=u;try{await this.#se(u)}finally{this.#R=void 0}o=!1,s=!1,r=void 0;continue}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{this.#z=!0,r=await this.#ee(t)}catch(e){if(isInterruptedError(e)){if(this.#I===void 0&&this.#L.length===0)return;s=!0,r=``}else throw e}finally{this.#z=!1}if(this.#L.length>0&&this.#I===void 0){r=void 0;continue}if(r==null&&this.#I===void 0)return}let u=this.#I===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#G?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#pe(`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.#pe(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.#pe(`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.#pe(`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.#pe(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.#pe(`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.#pe(`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.#pe(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.#pe(`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.#pe(formatPromptCommandHelp(this.#y)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#Se(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#pe(this.#Ce(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#xe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#_e(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let d=this.#I;this.#I=void 0;let f=d??(o?this.#ie():await(async()=>(this.#Z(),await this.#ne({prompt:s?void 0:r,inputResponses:i})))()),p=this.#e?.state.sessionId;p!==void 0&&this.#n.setSessionId?.(p);let m=r,h=!1;try{for(;;){await this.#n.renderStream(f,{title:e,submittedPrompt:m,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=f.turnState?.pendingApprovals??[],n=f.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.#F.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.#F.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,h=!0;break}if(this.#Oe(f)){f=this.#ie(),m=void 0;continue}if(f.turnState&&f.turnState.boundaryEvent===void 0&&!f.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(h)continue;o=!1,s=!1,i=void 0,r=void 0;let g=f.turnState?.boundaryEvent;this.#U!==this.#e&&(g===`session.waiting`||g===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#Z(f.turnState?.aborted===!0)}}#X(){this.#B.abortAll(),this.#F.clear(),this.#V.clear(),this.#H.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#Z(e=!1){let t=this.#U;t!==void 0&&(this.#U=void 0,this.#e===t&&(this.#X(),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.#X(),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.#X(),this.#n.reset?.(),!0}async#$(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.#Ee()});let e=this.#P?.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.#Te();e!==void 0&&this.#q(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#ee(e){let t=this.#$(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#te(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#te(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.#ae(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#Oe(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#I={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#ne(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.#Ee()}),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.#x?.reportFailure(e),this.#U=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#ae(r,()=>t.abort(),this.#e)}async#re(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}}}#ie(){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.#ae(t.stream({signal:e.signal}),()=>e.abort(),t)}#ae(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#U=n,t()},cancel:()=>{this.#re(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#F,turnState:r,onSubagentCalled:e=>this.#B.begin(e),onSubagentBackgrounded:e=>this.#B.background(e),onSubagentCompleted:e=>this.#B.settle(e),onTurnCancelled:e=>this.#B.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#De(e),onConnectionAuthCompleted:e=>this.#ke(e),onRegistryHandoff:this.#p===void 0?void 0:async e=>this.#oe(e),onTerminalFailure:()=>{this.#U=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}#oe(e){this.#R===e||this.#L.includes(e)||(this.#L.push(e),this.#z&&this.#n.suspendPromptForInput?.())}async#se(e){await this.#_e({type:`extension`,name:`add`,argument:e},`Add to your agent`,{trigger:`command`})}async#ce(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#k=await detectSetupIssues(t,this.#S),this.#n.renderSetupWarning!==void 0&&(this.#le(),this.#ue())}#le(){let e=orderedSetupIssues(this.#k,this.#A);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#ue(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#C(e,{signal:this.#D.signal})}catch{return}this.#E||this.#O||(this.#A=authIssueForStatus(t),this.#le())}async#de(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.#k=await detectSetupIssues(n,this.#S);let e=await this.#C(t,{signal:this.#D.signal});this.#A=authIssueForStatus(e)}catch{return}this.#E||this.#le()}#fe(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#W===void 0&&(this.#W=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#pe(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#me(e,t){let n=this.#v;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#P?.agent.model.endpoint,i={...t,renderer:this.#n,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#x,withExclusiveTerminal:this.#b},a=this.#M?.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)}#he(e,t,n){if(t!==`startup`)return;let r=this.#x?.current().connection.state,i=n===`error`||r===`auth-failed`||r===`unavailable`?`failed`:void 0,a=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${a}`,i)}async#ge(e){if(e?.kind===`model-access-changed`){this.#j?.applyEffect({kind:`refresh-identity`}),this.#O=!0,await this.#we();return}e!==void 0&&(this.#j?.applyEffect(e),this.#O=!0,this.#de(this.#P))}async#_e(e,t,n){let r=await this.#me(e,{...n,title:t}),i=n.suppressSuccessfulTranscript===!0&&r?.tone!==`error`||n.suppressCancelledTranscript===!0&&r?.cancelled===!0;return i||this.#he(e,n.trigger,r?.tone),i||this.#pe(r?.message,r?.tone),await this.#ge(r?.effect),this.#be(),r}#ve(e){return{kind:`planner`,activeStep:e,firstNavigableStep:1,steps:[{label:`Model`,complete:e>0},{label:`Channels`},{label:`Integrations`},{label:`Review`}]}}async#ye(e){let t={keepSetupFlowOpen:!0,setupFlowTitle:`Set up ${e}`,trigger:`startup`},n=await this.#_e({type:`extension`,name:`model`,argument:``},e,{...t,suppressSuccessfulTranscript:!0,initialModelStep:`provider`,setupFlowNavigation:this.#ve(0)});if(n?.tone===`error`||n?.cancelled===!0){this.#n.setupFlow?.end({preserveDiagnostics:n.tone===`error`});return}let r;try{r=await this.#_e({type:`extension`,name:`add`,argument:``},e,{...t,registryPlannerContext:{prefixSteps:[{label:`Model`,complete:!0}],reviewMessage:`Review your agent`,primaryActionLabel:`Install and finish setup`,emptyActionLabel:`Finish setup`}})}finally{this.#n.setupFlow?.end({preserveDiagnostics:r?.tone===`error`})}}#be(){if(this.#_)return;let e=this.#x?.current().connection;e?.state!==`ready`||e.info===this.#P||(this.#P=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#xe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#pe(`/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#Se(){let e=this.#p;if(e===void 0){this.#pe(`/info is only available in local dev sessions.`);return}try{this.#pe(renderApplicationInfo(await this.#w(e)))}catch(e){this.#pe(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#Ce(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#we(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#q(await this.#Te());this.#de(t)}async#Te(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#Ee(){let e=this.#P,t=await this.#Te();t!==void 0&&this.#q(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#De(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.#V.set(e.data.name,t),this.#Ae(t)}#Oe(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#V.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#H.add(e.name),this.#Ae(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#H.size),this.#H.size>0}#ke(e){let t=this.#V.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.#V.set(e.data.name,t),this.#H.delete(e.data.name),this.#Ae(t),this.#n.setConnectionAuthPendingCount?.(this.#H.size)}#Ae(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.`}function registryHandoffAddress(e,t){if(e!==`selfmod__registry_add`||typeof t!=`object`||!t)return;let n=t;return n.status===`needs-terminal`&&typeof n.address==`string`?n.address:void 0}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onRegistryHandoff:u,onTerminalFailure:d,failureHintOverride:f}=e,p=new Map,m=new Map,h=new Map,g=createEventDeduper(),_=0,v=new Set,y=new Set,b=new Set,x=!1,S=!1,C;for await(let e of t)if(g.admit(e)&&!(S&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:_+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;C=t.data.usage,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),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(p,n),i=t.data.messageSoFar;if(r.completed){if(_<=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(p,t),r=e.data.message;if(n.completed){if(r===null||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_,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=_,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=_,yield{type:`assistant-complete`,id:i}}}else n.text.length>0&&(n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(m,n),i=t.data.reasoningSoFar;if(r.completed){if(_<=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(m,t),r=e.data.reasoning;if(n.completed){if(r.length===0||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_;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=_,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)h.set(e.callId,e.toolName),!v.has(e.callId)&&(v.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(h.set(t,e.action.toolName),e.kind!==`session-limit`&&!v.has(t)&&(v.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!y.has(e.requestId)){if(y.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(!v.has(n))break;switch(t.data.status){case`completed`:{let e=t.data.result.output;yield{type:`tool-result`,toolCallId:n,output:e};let r=registryHandoffAddress(h.get(n),e);r!==void 0&&await u?.(r);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,b,f);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,d?.(e);let t=toFailureEvent(e,b,f);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return;case`turn.completed`:S=!0,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),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}x||(yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C})}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,registryHandoffAddress};
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;#_=!1;#v;#y;#b;#x;#S;#C;#w;#T;#E=!1;#D=new AbortController;#O=!1;#k=[];#A;#j;#M;#N;#P;#F=new Map;#I;#L=[];#R;#z=!1;#B;#V=new Map;#H=new Set;#U;#W;#G;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#G=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),t.appRoot!==void 0&&(n.onToolCompleted=async(e,t)=>{let n=registryHandoffAddress(e,t);n!==void 0&&this.#oe(n)}),this.#B=new SubagentPump(n),this.#r=t.name??`eve`,this.#N=t.startup?.headerTip??pickAgentHeaderTip(),this.#b=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),this.#g=t.onboard===!0,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.#j=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#M=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#v=t.promptCommandHandler),this.#y=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#x=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.#S=t.bootDetections??BOOT_DETECTIONS,this.#C=t.getVercelAuthStatus??getVercelAuthStatus,this.#w=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#T=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#K(){if(this.#f===void 0)return this.#J(),this.#g||await this.#ce(void 0),this.#h?.finish()??this.#m;let e;if(this.#x!==void 0){let t=await this.#x.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.#T);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}let t=this.#h?.finish()??this.#m;this.#J();let n=this.#q(e);return this.#g||await this.#ce(n),t}#q(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#P=t;let n=this.#f;if(n===void 0||this.#_)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#N),this.#n.renderAgentHeader?.(r),t}#J(){let e=this.#T;this.#T=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#G?.signal.aborted===!0?onStop():this.#G?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#Y()}finally{this.#G?.signal.removeEventListener(`abort`,onStop),this.#E=!0,this.#D.abort(),this.#B.abortAll(),this.#W?.(),this.#W=void 0,this.#n.shutdown?.(),this.#j?.dispose(),this.#M?.dispose(),this.#x?.dispose()}}async#Y(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=await this.#K();if(this.#x?.current().connection.state===`auth-required`&&await this.#_e({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#fe(),this.#j?.refreshIdentity(),this.#M?.refresh(),this.#g&&this.#p!==void 0&&this.#v!==void 0&&this.#n.setupFlow!==void 0){l=void 0,this.#_=!0;try{await this.#ye(e)}finally{this.#_=!1}}for(;;){if(this.#G?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;let u=this.#L[0];if(u!==void 0&&i===void 0&&this.#I===void 0){this.#L.shift(),this.#R=u;try{await this.#se(u)}finally{this.#R=void 0}o=!1,s=!1,r=void 0;continue}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{this.#z=!0,r=await this.#ee(t)}catch(e){if(isInterruptedError(e)){if(this.#I===void 0&&this.#L.length===0)return;s=!0,r=``}else throw e}finally{this.#z=!1}if(this.#L.length>0&&this.#I===void 0){r=void 0;continue}if(r==null&&this.#I===void 0)return}let u=this.#I===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#G?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#pe(`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.#pe(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.#pe(`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.#pe(`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.#pe(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.#pe(`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.#pe(`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.#pe(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.#pe(`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.#pe(formatPromptCommandHelp(this.#y)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#Se(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#pe(this.#Ce(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#xe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#_e(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let d=this.#I;this.#I=void 0;let f=d??(o?this.#ie():await(async()=>(this.#Z(),await this.#ne({prompt:s?void 0:r,inputResponses:i})))()),p=this.#e?.state.sessionId;p!==void 0&&this.#n.setSessionId?.(p);let m=r,h=!1;try{for(;;){await this.#n.renderStream(f,{title:e,submittedPrompt:m,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=f.turnState?.pendingApprovals??[],n=f.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.#F.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.#F.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,h=!0;break}if(this.#Oe(f)){f=this.#ie(),m=void 0;continue}if(f.turnState&&f.turnState.boundaryEvent===void 0&&!f.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(h)continue;o=!1,s=!1,i=void 0,r=void 0;let g=f.turnState?.boundaryEvent;this.#U!==this.#e&&(g===`session.waiting`||g===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#Z(f.turnState?.aborted===!0)}}#X(){this.#B.abortAll(),this.#F.clear(),this.#V.clear(),this.#H.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#Z(e=!1){let t=this.#U;t!==void 0&&(this.#U=void 0,this.#e===t&&(this.#X(),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.#X(),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.#X(),this.#n.reset?.(),!0}async#$(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.#Ee()});let e=this.#P?.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.#Te();e!==void 0&&this.#q(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#ee(e){let t=this.#$(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#te(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#te(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.#ae(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#Oe(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#I={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#ne(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.#Ee()}),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.#x?.reportFailure(e),this.#U=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#ae(r,()=>t.abort(),this.#e)}async#re(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}}}#ie(){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.#ae(t.stream({signal:e.signal}),()=>e.abort(),t)}#ae(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#U=n,t()},cancel:()=>{this.#re(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#F,turnState:r,onSubagentCalled:e=>this.#B.begin(e),onSubagentBackgrounded:e=>this.#B.background(e),onSubagentCompleted:e=>this.#B.settle(e),onTurnCancelled:e=>this.#B.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#De(e),onConnectionAuthCompleted:e=>this.#ke(e),onRegistryHandoff:this.#p===void 0?void 0:async e=>this.#oe(e),onTerminalFailure:()=>{this.#U=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}#oe(e){this.#R===e||this.#L.includes(e)||(this.#L.push(e),this.#z&&this.#n.suspendPromptForInput?.())}async#se(e){await this.#_e({type:`extension`,name:`add`,argument:e},`Add to your agent`,{trigger:`command`})}async#ce(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#k=await detectSetupIssues(t,this.#S),this.#n.renderSetupWarning!==void 0&&(this.#le(),this.#ue())}#le(){let e=orderedSetupIssues(this.#k,this.#A);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#ue(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#C(e,{signal:this.#D.signal})}catch{return}this.#E||this.#O||(this.#A=authIssueForStatus(t),this.#le())}async#de(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.#k=await detectSetupIssues(n,this.#S);let e=await this.#C(t,{signal:this.#D.signal});this.#A=authIssueForStatus(e)}catch{return}this.#E||this.#le()}#fe(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#W===void 0&&(this.#W=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#pe(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#me(e,t){let n=this.#v;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#P?.agent.model.endpoint,i={...t,renderer:this.#n,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#x,withExclusiveTerminal:this.#b},a=this.#M?.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)}#he(e,t,n){if(t!==`startup`)return;let r=this.#x?.current().connection.state,i=n===`error`||r===`auth-failed`||r===`unavailable`?`failed`:void 0,a=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${a}`,i)}async#ge(e){if(e?.kind===`model-access-changed`){this.#j?.applyEffect({kind:`refresh-identity`}),this.#O=!0,await this.#we();return}e!==void 0&&(this.#j?.applyEffect(e),this.#O=!0,this.#de(this.#P))}async#_e(e,t,n){let r=await this.#me(e,{...n,title:t}),i=n.suppressSuccessfulTranscript===!0&&r?.tone!==`error`||n.suppressCancelledTranscript===!0&&r?.cancelled===!0;return i||this.#he(e,n.trigger,r?.tone),i||this.#pe(r?.message,r?.tone),await this.#ge(r?.effect),this.#be(),r}#ve(e){return{kind:`planner`,activeStep:e,firstNavigableStep:1,steps:[{label:`Model`,complete:e>0},{label:`Channels`},{label:`Integrations`},{label:`Review`}]}}async#ye(e){let t={keepSetupFlowOpen:!0,setupFlowTitle:`Set up ${e}`,trigger:`startup`},n=await this.#_e({type:`extension`,name:`model`,argument:``},e,{...t,suppressSuccessfulTranscript:!0,initialModelStep:`provider`,setupFlowNavigation:this.#ve(0)});if(n?.tone===`error`||n?.cancelled===!0){this.#n.setupFlow?.end({preserveDiagnostics:n.tone===`error`});return}let r;try{r=await this.#_e({type:`extension`,name:`add`,argument:``},e,{...t,registryPlannerContext:{prefixSteps:[{label:`Model`,complete:!0}],reviewMessage:`Review your agent`,primaryActionLabel:`Install and finish setup`,emptyActionLabel:`Finish setup`}})}finally{this.#n.setupFlow?.end({preserveDiagnostics:r?.tone===`error`})}}#be(){if(this.#_)return;let e=this.#x?.current().connection;e?.state!==`ready`||e.info===this.#P||(this.#P=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#xe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#pe(`/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#Se(){let e=this.#p;if(e===void 0){this.#pe(`/info is only available in local dev sessions.`);return}try{this.#pe(renderApplicationInfo(await this.#w(e)))}catch(e){this.#pe(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#Ce(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#we(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#q(await this.#Te());this.#de(t)}async#Te(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#Ee(){let e=this.#P,t=await this.#Te();t!==void 0&&this.#q(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#De(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.#V.set(e.data.name,t),this.#Ae(t)}#Oe(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#V.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#H.add(e.name),this.#Ae(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#H.size),this.#H.size>0}#ke(e){let t=this.#V.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.#V.set(e.data.name,t),this.#H.delete(e.data.name),this.#Ae(t),this.#n.setConnectionAuthPendingCount?.(this.#H.size)}#Ae(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.`}function registryHandoffAddress(e,t){if(e!==`selfmod__registry_add`||typeof t!=`object`||!t)return;let n=t;return n.status===`needs-terminal`&&typeof n.address==`string`?n.address:void 0}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onRegistryHandoff:u,onTerminalFailure:d,failureHintOverride:f}=e,p=new Map,m=new Map,h=new Map,g=createEventDeduper(),_=0,v=new Set,y=new Set,b=new Set,x=!1,S=!1,C;for await(let e of t)if(g.admit(e)&&!(S&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:_+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;C=t.data.usage,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),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(p,n);if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}let i=t.data.messageDelta;if(i.length===0)break;r.text+=i,yield{type:`assistant-delta`,id:partGenerationId(n,r.generation),delta:i};break}case`message.completed`:{let t=textPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(p,t),r=e.data.message;if(n.completed){if(r===null||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_,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=_,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=_,yield{type:`assistant-complete`,id:i}}else n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i,text:r};else n.text.length>0&&(n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(m,n);if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}let i=t.data.reasoningDelta;if(i.length===0)break;r.text+=i,yield{type:`reasoning-delta`,id:partGenerationId(n,r.generation),delta:i};break}case`reasoning.completed`:{let t=reasoningPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(m,t),r=e.data.reasoning;if(n.completed){if(r.length===0||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_;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)){yield{type:`reasoning-complete`,id:i},n.generation+=1,n.text=r,n.completed=!0,n.completedEpoch=_;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}n.completed=!0,n.completedEpoch=_,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)h.set(e.callId,e.toolName),!v.has(e.callId)&&(v.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(h.set(t,e.action.toolName),e.kind!==`session-limit`&&!v.has(t)&&(v.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!y.has(e.requestId)){if(y.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(!v.has(n))break;switch(t.data.status){case`completed`:{let e=t.data.result.output;yield{type:`tool-result`,toolCallId:n,output:e};let r=registryHandoffAddress(h.get(n),e);r!==void 0&&await u?.(r);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,b,f);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,d?.(e);let t=toFailureEvent(e,b,f);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return;case`turn.completed`:S=!0,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),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}x||(yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C})}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,registryHandoffAddress};
@@ -1 +1 @@
1
- import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{readNdjsonStream}from"#client/ndjson.js";var SubagentPump=class{#e;#t;#n;#r;#i=new Map;#a=new Map;#o=new Map;#s=new Map;#c=new Map;constructor(e){this.#e=e.client,this.#t=e.view,this.#n=e.formatActionResultError,this.#r=e.onToolCompleted}begin(t){let n=t.data.callId,r=this.#i.get(n);r===void 0?this.#i.set(n,{name:t.data.name,childSessionId:t.data.childSessionId,parentTurnId:t.data.turnId,background:!1,status:`open`,childStreamPath:t.data.childStreamPath,childStreamIndex:this.#o.get(t.data.childSessionId)??0,steps:new Map,currentSectionKey:null,nextSectionKey:0,tools:new Map,seenChildEvents:createEventDeduper()}):r.name=t.data.name,this.#t?.markChildToolCallId(n),!(r!==void 0&&r.status!==`open`)&&(this.#t?.begin({callId:n,name:t.data.name}),r===void 0&&this.#l(n))}settle(e){this.#f(e,!1)}background(e){let t=this.#i.get(e);t!==void 0&&(t.background=!0,t.status!==`authoritative`&&this.#t?.background({callId:e}))}abortAll(){for(let e of this.#a.values())e.abort();this.#a.clear(),this.#i.clear(),this.#o.clear(),this.#s.clear(),this.#c.clear()}settleCancelledTurn(e){for(let[t,n]of this.#i)n.parentTurnId!==e||n.background||(this.#f(t,!0),this.#a.get(t)?.abort(),this.#a.delete(t))}#l(e){let t=this.#i.get(e);if(t===void 0||t.status===`authoritative`)return;let n=this.#s.get(t.childSessionId);if(n===void 0){t.childStreamIndex=this.#o.get(t.childSessionId)??0,this.#s.set(t.childSessionId,e),this.#u(e);return}if(n===e)return;let r=this.#c.get(t.childSessionId)??[];r.includes(e)||r.push(e),this.#c.set(t.childSessionId,r)}#u(e){if(this.#a.has(e))return;let r=this.#e;if(!r)return;let i=this.#i.get(e);if(i===void 0||i.status===`authoritative`)return;let a=new AbortController;this.#a.set(e,a),(async()=>{let o=100;try{for(;!a.signal.aborted&&i.status!==`authoritative`;){let s=!1;try{let o=await r.fetch(streamPathAt(i.childStreamPath,i.childStreamIndex),{cache:`no-store`,signal:a.signal});if(!o.ok||o.body===null)throw await o.body?.cancel().catch(()=>{}),Error(`Child stream returned ${o.status}.`);for await(let r of readNdjsonStream(o.body)){if(a.signal.aborted)return;s=!0,i.childStreamIndex+=1,this.#o.set(i.childSessionId,i.childStreamIndex);let n=this.#h(e,r);if(n!==void 0&&await n,isCurrentTurnBoundaryEvent(r)){if(r.type===`session.waiting`&&hasPendingChildApproval(i))continue;this.#f(e,!0);return}}}catch{if(a.signal.aborted)return}o=s?100:Math.min(o*2,2e3),await abortableDelay(o,a.signal)}}finally{this.#a.get(e)===a&&this.#a.delete(e)}})()}#d(e,t,n){let r=t.tools.get(n.childCallId),i=r??{toolName:n.toolName,input:n.input,status:n.status};if(r){let e=r.status===`done`||r.status===`failed`||r.status===`rejected`;if(n.status===`approval-requested`&&!e)r.status=n.status;else{let e={preparing:0,"approval-requested":1,executing:2,done:3,failed:3,rejected:3};e[n.status]>e[r.status]&&(r.status=n.status)}n.input!==void 0&&(r.input=n.input)}else t.tools.set(n.childCallId,i);this.#t?.markChildToolCallId(n.childCallId),this.#t?.upsertTool({callId:e,subagentName:t.name,childCallId:n.childCallId,toolName:i.toolName,input:i.input,status:i.status})}#f(e,t){let n=this.#i.get(e);if(!(!n||n.status===`authoritative`)&&!(!t&&n.status===`provisional`)){n.status=t?`authoritative`:`provisional`;for(let[t,r]of n.steps)r.finalized||(r.finalized=!0,this.#t?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:r.reasoning,message:r.message,finalized:!0}));n.currentSectionKey=null,this.#m(e,n),this.#t?.complete({authoritative:t,callId:e}),t&&this.#p(e,n.childSessionId)}}#p(e,t){let n=(this.#c.get(t)??[]).filter(t=>t!==e);if(this.#s.get(t)!==e){n.length===0?this.#c.delete(t):this.#c.set(t,n);return}for(this.#s.delete(t);n.length>0;){let e=n.shift(),r=this.#i.get(e);if(!(r===void 0||r.status===`authoritative`)){n.length===0?this.#c.delete(t):this.#c.set(t,n),r.childStreamIndex=this.#o.get(t)??0,this.#s.set(t,e),this.#u(e);return}}this.#c.delete(t)}#m(e,t){for(let[n,r]of t.tools)r.status===`preparing`&&(t.tools.delete(n),this.#t?.removeTool({callId:e,childCallId:n}))}#h(e,t){let n=this.#i.get(e);if(!n||!n.seenChildEvents.admit(t))return;n.status===`provisional`&&(n.status=`open`,this.#t?.begin({callId:e,name:n.name}));let r=this.#t,emit=(t,i)=>{r?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:i.reasoning,message:i.message,finalized:i.finalized})},finalizeCurrent=()=>{if(n.currentSectionKey===null)return;let e=n.steps.get(n.currentSectionKey);e&&(e.finalized=!0,emit(n.currentSectionKey,e)),n.currentSectionKey=null};switch(t.type){case`reasoning.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.reasoning+=t.data.reasoningDelta,emit(e,r);break}case`reasoning.completed`:break;case`message.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.message+=t.data.messageDelta,emit(e,r);break}case`message.completed`:{let{key:e,step:r}=openCurrentSubagentSection(n);t.data.message!==null&&r.message.length===0&&(r.message=t.data.message),r.finalized=!0,emit(e,r),n.currentSectionKey=null;break}case`step.completed`:finalizeCurrent(),this.#m(e,n);break;case`actions.requested`:finalizeCurrent();for(let r of t.data.actions)r.kind===`tool-call`&&this.#d(e,n,{childCallId:r.callId,toolName:r.toolName,input:r.input,status:`executing`});break;case`input.requested`:finalizeCurrent();for(let r of t.data.requests)r.action.kind===`tool-call`&&this.#d(e,n,{childCallId:r.action.callId,toolName:r.action.toolName,input:r.action.input,status:`approval-requested`});break;case`action.result`:{let i=t.data.result;if(i.kind!==`tool-result`)break;let a=n.tools.get(i.callId);if(!a)break;switch(t.data.status){case`completed`:a.status=`done`,a.output=i.output;break;case`failed`:a.status=`failed`,a.errorText=this.#n(t);break;case`rejected`:a.status=`rejected`,a.errorText=this.#n(t);break}let o={callId:e,subagentName:n.name,childCallId:i.callId,toolName:a.toolName,input:a.input,status:a.status};if(a.output!==void 0&&(o.output=a.output),a.errorText!==void 0&&(o.errorText=a.errorText),r?.upsertTool(o),t.data.status===`completed`)return this.#r?.(a.toolName,i.output);break}default:break}}};function hasPendingChildApproval(e){return[...e.tools.values()].some(e=>e.status===`approval-requested`)}function streamPathAt(e,t){return t===0?e:`${e}${e.includes(`?`)?`&`:`?`}startIndex=${t}`}async function abortableDelay(e,t){t.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t.removeEventListener(`abort`,onAbort),n()},e);r.unref?.(),t.addEventListener(`abort`,onAbort,{once:!0})})}function openCurrentSubagentSection(e){e.currentSectionKey===null&&(e.currentSectionKey=e.nextSectionKey++,e.steps.set(e.currentSectionKey,{reasoning:``,message:``,finalized:!1}));let t=e.steps.get(e.currentSectionKey);if(!t)throw Error(`invariant: subagent section state missing for current key`);return{key:e.currentSectionKey,step:t}}export{SubagentPump};
1
+ import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{readNdjsonStream}from"#client/ndjson.js";import{readMessageStreamVersion}from"#client/stream-version.js";var SubagentPump=class{#e;#t;#n;#r;#i=new Map;#a=new Map;#o=new Map;#s=new Map;#c=new Map;constructor(e){this.#e=e.client,this.#t=e.view,this.#n=e.formatActionResultError,this.#r=e.onToolCompleted}begin(t){let n=t.data.callId,r=this.#i.get(n);r===void 0?this.#i.set(n,{name:t.data.name,childSessionId:t.data.childSessionId,parentTurnId:t.data.turnId,background:!1,status:`open`,childStreamPath:t.data.childStreamPath,childStreamIndex:this.#o.get(t.data.childSessionId)??0,steps:new Map,currentSectionKey:null,nextSectionKey:0,tools:new Map,seenChildEvents:createEventDeduper()}):r.name=t.data.name,this.#t?.markChildToolCallId(n),!(r!==void 0&&r.status!==`open`)&&(this.#t?.begin({callId:n,name:t.data.name}),r===void 0&&this.#l(n))}settle(e){this.#f(e,!1)}background(e){let t=this.#i.get(e);t!==void 0&&(t.background=!0,t.status!==`authoritative`&&this.#t?.background({callId:e}))}abortAll(){for(let e of this.#a.values())e.abort();this.#a.clear(),this.#i.clear(),this.#o.clear(),this.#s.clear(),this.#c.clear()}settleCancelledTurn(e){for(let[t,n]of this.#i)n.parentTurnId!==e||n.background||(this.#f(t,!0),this.#a.get(t)?.abort(),this.#a.delete(t))}#l(e){let t=this.#i.get(e);if(t===void 0||t.status===`authoritative`)return;let n=this.#s.get(t.childSessionId);if(n===void 0){t.childStreamIndex=this.#o.get(t.childSessionId)??0,this.#s.set(t.childSessionId,e),this.#u(e);return}if(n===e)return;let r=this.#c.get(t.childSessionId)??[];r.includes(e)||r.push(e),this.#c.set(t.childSessionId,r)}#u(e){if(this.#a.has(e))return;let i=this.#e;if(!i)return;let a=this.#i.get(e);if(a===void 0||a.status===`authoritative`)return;let o=new AbortController;this.#a.set(e,o),(async()=>{let s=100;try{for(;!o.signal.aborted&&a.status!==`authoritative`;){let c=!1;try{let s=await i.fetch(streamPathAt(a.childStreamPath,a.childStreamIndex),{cache:`no-store`,signal:o.signal});if(!s.ok||s.body===null)throw await s.body?.cancel().catch(()=>{}),Error(`Child stream returned ${s.status}.`);for await(let i of readNdjsonStream(s.body,{streamVersion:readMessageStreamVersion(s.headers)})){if(o.signal.aborted)return;c=!0,a.childStreamIndex+=1,this.#o.set(a.childSessionId,a.childStreamIndex);let n=this.#h(e,i);if(n!==void 0&&await n,isCurrentTurnBoundaryEvent(i)){if(i.type===`session.waiting`&&hasPendingChildApproval(a))continue;this.#f(e,!0);return}}}catch{if(o.signal.aborted)return}s=c?100:Math.min(s*2,2e3),await abortableDelay(s,o.signal)}}finally{this.#a.get(e)===o&&this.#a.delete(e)}})()}#d(e,t,n){let r=t.tools.get(n.childCallId),i=r??{toolName:n.toolName,input:n.input,status:n.status};if(r){let e=r.status===`done`||r.status===`failed`||r.status===`rejected`;if(n.status===`approval-requested`&&!e)r.status=n.status;else{let e={preparing:0,"approval-requested":1,executing:2,done:3,failed:3,rejected:3};e[n.status]>e[r.status]&&(r.status=n.status)}n.input!==void 0&&(r.input=n.input)}else t.tools.set(n.childCallId,i);this.#t?.markChildToolCallId(n.childCallId),this.#t?.upsertTool({callId:e,subagentName:t.name,childCallId:n.childCallId,toolName:i.toolName,input:i.input,status:i.status})}#f(e,t){let n=this.#i.get(e);if(!(!n||n.status===`authoritative`)&&!(!t&&n.status===`provisional`)){n.status=t?`authoritative`:`provisional`;for(let[t,r]of n.steps)r.finalized||(r.finalized=!0,this.#t?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:r.reasoning,message:r.message,finalized:!0}));n.currentSectionKey=null,this.#m(e,n),this.#t?.complete({authoritative:t,callId:e}),t&&this.#p(e,n.childSessionId)}}#p(e,t){let n=(this.#c.get(t)??[]).filter(t=>t!==e);if(this.#s.get(t)!==e){n.length===0?this.#c.delete(t):this.#c.set(t,n);return}for(this.#s.delete(t);n.length>0;){let e=n.shift(),r=this.#i.get(e);if(!(r===void 0||r.status===`authoritative`)){n.length===0?this.#c.delete(t):this.#c.set(t,n),r.childStreamIndex=this.#o.get(t)??0,this.#s.set(t,e),this.#u(e);return}}this.#c.delete(t)}#m(e,t){for(let[n,r]of t.tools)r.status===`preparing`&&(t.tools.delete(n),this.#t?.removeTool({callId:e,childCallId:n}))}#h(e,t){let n=this.#i.get(e);if(!n||!n.seenChildEvents.admit(t))return;n.status===`provisional`&&(n.status=`open`,this.#t?.begin({callId:e,name:n.name}));let r=this.#t,emit=(t,i)=>{r?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:i.reasoning,message:i.message,finalized:i.finalized})},finalizeCurrent=()=>{if(n.currentSectionKey===null)return;let e=n.steps.get(n.currentSectionKey);e&&(e.finalized=!0,emit(n.currentSectionKey,e)),n.currentSectionKey=null};switch(t.type){case`reasoning.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.reasoning+=t.data.reasoningDelta,emit(e,r);break}case`reasoning.completed`:break;case`message.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.message+=t.data.messageDelta,emit(e,r);break}case`message.completed`:{let{key:e,step:r}=openCurrentSubagentSection(n);t.data.message!==null&&r.message.length===0&&(r.message=t.data.message),r.finalized=!0,emit(e,r),n.currentSectionKey=null;break}case`step.completed`:finalizeCurrent(),this.#m(e,n);break;case`actions.requested`:finalizeCurrent();for(let r of t.data.actions)r.kind===`tool-call`&&this.#d(e,n,{childCallId:r.callId,toolName:r.toolName,input:r.input,status:`executing`});break;case`input.requested`:finalizeCurrent();for(let r of t.data.requests)r.action.kind===`tool-call`&&this.#d(e,n,{childCallId:r.action.callId,toolName:r.action.toolName,input:r.action.input,status:`approval-requested`});break;case`action.result`:{let i=t.data.result;if(i.kind!==`tool-result`)break;let a=n.tools.get(i.callId);if(!a)break;switch(t.data.status){case`completed`:a.status=`done`,a.output=i.output;break;case`failed`:a.status=`failed`,a.errorText=this.#n(t);break;case`rejected`:a.status=`rejected`,a.errorText=this.#n(t);break}let o={callId:e,subagentName:n.name,childCallId:i.callId,toolName:a.toolName,input:a.input,status:a.status};if(a.output!==void 0&&(o.output=a.output),a.errorText!==void 0&&(o.errorText=a.errorText),r?.upsertTool(o),t.data.status===`completed`)return this.#r?.(a.toolName,i.output);break}default:break}}};function hasPendingChildApproval(e){return[...e.tools.values()].some(e=>e.status===`approval-requested`)}function streamPathAt(e,t){return t===0?e:`${e}${e.includes(`?`)?`&`:`?`}startIndex=${t}`}async function abortableDelay(e,t){t.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t.removeEventListener(`abort`,onAbort),n()},e);r.unref?.(),t.addEventListener(`abort`,onAbort,{once:!0})})}function openCurrentSubagentSection(e){e.currentSectionKey===null&&(e.currentSectionKey=e.nextSectionKey++,e.steps.set(e.currentSectionKey,{reasoning:``,message:``,finalized:!1}));let t=e.steps.get(e.currentSectionKey);if(!t)throw Error(`invariant: subagent section state missing for current key`);return{key:e.currentSectionKey,step:t}}export{SubagentPump};
@@ -3,7 +3,7 @@ import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-c
3
3
  `).map(stripPromptControlCharacters).join(`
4
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.#Ze(a),this.#z=typeaheadFor(this.#f,a.text),this.#zt(),this.#pn(),await new Promise((e,r)=>{this.#q=r;let apply=e=>{a=e,this.#Vt(),this.#Ze(a),this.#z=typeaheadFor(this.#f,e.text,this.#z),this.#pn()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#z=void 0,this.#Bt(),this.#At(),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.#pn());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.#pn();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.#pn();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.#pn());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.#Bt(),this.#J=STATUS.processing,isPromptControlCommand(i)?this.#Gt({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#Ut(),this.#Kt(i),this.#Pe=i,this.#U.arm()),this.#Ze(EMPTY_LINE),this.#pn(),this.#Mt(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#wt(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#gn();break;case`ctrl-r`:this.#pn();break;case`ctrl-c`:if(this.#ne){this.#wt(),interrupt();break}this.#ne=!0,apply(EMPTY_LINE);break;default:break}},this.#jt()})}#Ze(e){this.#F=e.text,this.#I=e.cursor}takeQueuedPrompt(){let e=this.#Be.view().steering,t=this.#Be.takePrompt();return t!==void 0&&(this.#We=e?`steer`:`queue`),t}async renderStream(e,t){this.#Ot(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.#Jt(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#d?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#U.armed&&this.#U.arm(),this.#ee=!1,this.#He=!1,this.#Ge=!1,this.#Ke=t?.submittedPrompt,this.#Be.beginTurn(),this.#Ve=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.#Ht(),this.#G=!0,this.#pn();let r=new Promise(e=>{this.#ge=e});this.#de=e=>this.#Rt(e),this.#jt();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.#tn(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Yt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Yt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#ge=void 0,this.#ee&&e.abort?.(),this.#Ve=void 0,this.#Mt(),this.#Wt(),this.#G=!1,this.#K.kind===`waiting`&&(this.#K={kind:`idle`}),this.#J=completedTurnStatus({interrupted:this.#ee,cancelled:this.#He,continueSession:t?.continueSession===!0}),this.#cn(i),(this.#ee||i.cancelled)&&this.#sn(i),this.#en(),this.#d?.reportStats(),this.#pn(),t?.continueSession||this.#At()}}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.#tn(t,n,r)}catch(e){let t=summarizeKnownError(e);t===null?this.#Yt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Yt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#cn(r),r.cancelled&&this.#sn(r),this.#en(),this.#d?.reportStats(),this.#pn()}}async readToolApproval(e,t){return this.#Ot(t),this.#Wt(),this.#R=!1,this.#K={kind:`idle`},this.#J=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#ee=!1,this.#pn(),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.#Ut(),this.#J=STATUS.processing,this.#Mt(),this.#pn(),t({approved:!0})):n===`n`&&(this.#Ut(),this.#J=STATUS.processing,this.#$e(e.toolCallId),this.#Mt(),this.#pn(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#pn();break;case`ctrl-c`:this.#ee=!0,this.#At(),n(interruptedError());break;default:break}},this.#jt()})}async readInputQuestion(e,t){this.#Ot(t),this.#Wt(),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.#Zt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#i),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#zt():(this.#Bt(),this.#Vt())};s===`overlay`?(s=`overlay`,this.#R=!1,this.#$t(o),this.#Fe=overlayPanel,this.#J=``,syncFreeformCaret(),this.#pn()):(s=`text`,this.#Fe=void 0,renderTextSection(),this.#R=!0,this.#Ze(l),this.#J=``,this.#zt(),this.#pn());let finalize=t=>{this.#Fe=void 0,this.#Zt({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.#Ut(),this.#J=STATUS.processing,this.#Bt(),this.#Mt(),this.#pn();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#Fe=void 0,this.#Zt({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.#Bt(),this.#Mt(),this.#pn(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#pn())},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.#Vt(),s===`text`&&this.#Ze(l),this.#pn();return}this.#ee=!0,this.#Fe=void 0,this.#Bt(),this.#At(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#pn();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.#Vt(),this.#pn();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#Vt(),this.#pn());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.#pn())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#Vt(),this.#Ze(l),this.#pn();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#Vt(),this.#Ze(l),this.#pn());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.#Vt(),this.#Ze(l),this.#pn();break}dismiss();break;default:break}},this.#jt()})}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.#Xt(e.callId,e.subagentName),this.#s===`collapsed`){this.#pn();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.#pn()}}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.#Xt(e.callId,e.subagentName),this.#s===`collapsed`){this.#pn();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#an({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.#Qe(e.callId),this.#pn()}#Qe(e){applyCohortLiveness(this.#m.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#$t(subagentToolSectionId(e.callId,e.childCallId)),this.#pn()}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.#Xt(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.#pn()}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.#pn())}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.#pn()}}markChildToolCallId(e){this.#v.add(e);let t=this.#y.get(e);t!==void 0&&(this.#$t(t),this.#y.delete(e),this.#pn())}#$e(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.#Zt({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.#pn()}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.#pn()):n&&(this.#J=STATUS.processing,this.#pn())}setVercelStatus(e){this.#N=e,this.#pn()}setRemoteConnectionStatus(e){this.#P=e,this.#pn()}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.#et(),this.#H=!1,this.#Pe=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.#pn())}renderSessionBoundary(){this.#qt(),this.#et();let e=this.#i.colors,t=this.#i.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#Gt({kind:`session-boundary`,body:n,live:!1}),this.#pn()}#et(){this.#v.clear(),this.#y.clear(),this.#T.clear(),this.#S.clear(),this.#C.clear(),this.#x.clear(),this.#Re=void 0,this.#ze=void 0,this.#Be.reset(),this.#We=void 0,this.#w.clear(),this.#U.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#Ot(),this.#Gt({kind:`notice`,body:t,live:!1}),this.#pn())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#d?.append({source:`sandbox`,detail:t}),this.#Ot(),this.#Gt({kind:`sandbox`,body:t,live:!1}),this.#pn())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#tt();return}this.#Ot(),this.#Le=t,this.#pn()}clearSetupWarning(){this.#tt()}#tt(){this.#Le!==void 0&&(this.#Le=void 0,this.#pn())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#Ot();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#Gt(r),this.#pn()}renderCommandResult(e,t){let n=stripAnsi(e);n.trim().length!==0&&(this.#Ot(),this.#Gt({kind:`result`,body:n,live:!1,status:t===`success`?`done`:void 0}),this.#pn())}#nt(e,t=`spinner`){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Ie={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Ht(),this.#pn()}#rt(e){this.#Ie!==void 0&&(this.#Ie.navigation=e,this.#pn())}#it(e){this.#qe=void 0,this.#vt();let t=this.#Ie;if(t!==void 0){if(this.#Ie=void 0,this.#Wt(),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.#Gt({kind:`flow`,title:`info`,body:e.join(`
5
5
  `),live:!1}),this.#Gt({kind:`flow`,title:n.tone,body:n.text,live:!1})),e=[]}}this.#pn()}}async#at(e){let t=this.#ft(),n=isMultiSelectRequest(e),r=e.kind===`search`?e.searchAction:void 0,i=e.options,a=e.navigation?.kind===`planner`,o={options:i,searchAction:r,submitRow:n&&!a};`initialValue`in e&&e.initialValue!==void 0&&(o.defaultValue=e.initialValue),`initialValues`in e&&e.initialValues!==void 0&&(o.initialValues=e.initialValues);let s=initialSelectState(o),c,l=!1,u=0,isCurrentSearch=e=>e===u,clearSearch=()=>{u+=1,l=!1,s=reduceSelect(s,{type:`clear`},{options:i,searchAction:r,submitRow:n&&!a}),this.#pn()},loadSearch=async(e,t)=>{l=!0,c=void 0;let o=++u;this.#pn();try{let c=await t(e);if(!isCurrentSearch(o))return;let l=s.filter;i=c,s={...initialSelectState({options:c,searchAction:r,submitRow:n&&!a}),filter:l}}catch(e){isCurrentSearch(o)&&(c=toErrorMessage(e))}finally{isCurrentSearch(o)&&(l=!1,this.#pn())}},d=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}));d=e.notices??r,t.taskListLineStart=t.lines.length,t.hideLinesWhileQuestion=!0}let panelState=()=>{let t={...e,options:i,select:s};return d!==void 0&&d.length>0&&(t.notices=d),c!==void 0&&(t.error=c),l&&(t.loadingFrame=this.#bn()),t};return t.question=e=>renderSelectQuestion(panelState(),this.#i,e),this.#pn(),await this.#ht((t,o)=>{let close=e=>{u+=1,o(e)};if(l){t.type===`ctrl-c`?close(void 0):t.type===`escape`?clearSearch():t.type===`ctrl-r`&&this.#pn();return}let d=e.navigation?.kind===`planner`?e.navigation:void 0,f=t.type===`left`&&(d?.activeStep??0)>(d?.firstNavigableStep??0)?`back`:t.type===`right`&&d!==void 0&&d.activeStep>=(d.firstNavigableStep??0)&&d.activeStep<d.steps.length-1?`forward`:void 0;if(f!==void 0){close({kind:`navigate`,direction:f,values:n?orderedSelection(i,s.selected):[]});return}let p={key:t,options:i,searchAction:r,select:s},m=reduceSetupSelectInput(n?{...p,kind:e.kind,required:e.required,plannerNavigation:a||void 0}:{...p,kind:e.kind});switch(m.kind){case`cancel`:close(void 0);return;case`repaint`:this.#pn();return;case`update`:s=m.select,c=void 0,this.#pn();return;case`submit`:{let e=searchActionQuery(m.values[0]??``),t=r?.load;if(e===void 0||t===void 0){close(m.values);return}loadSearch(e,t);return}case`error`:c=m.message,this.#pn();return;case`ignore`:return}}).promise}#ot(e){this.#Ot();let t=this.#pt();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.#pn();let r=this.#ht((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.#pn();return;case`repaint`:this.#pn();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#st(e){let t=this.#ft(),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.#zt():(i=lineOf(``),this.#Bt())};return syncEditableRow(),this.#pn(),await this.#ht((t,n)=>{let applyEditor=e=>{i=e,a=void 0,this.#Vt(),this.#pn()},applySelect=t=>{r=reduceSelect(r,t,{options:e.options}),a=void 0,syncEditableRow(),this.#pn()},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.#pn();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.#pn();return;case void 0:break}if(!onEditableRow())return;let s=applyLineEditorKey(i,t);s!==void 0&&applyEditor(s)},()=>this.#Bt()).promise}async#ct(e){let t=this.#ft(),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.#zt():this.#Bt()};return syncCaret(),this.#pn(),await this.#ht((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.#pn();return;case`cancel`:i(void 0);return;case`render`:n=o.state,syncCaret(),this.#pn();return;case`validate`:{n=o.state,syncCaret(),this.#pn();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.#pn();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.#Vt(),dispatch({type:`edit`,editor:s}))},()=>{r?.abort(),r=void 0,this.#Bt()}).promise}async#lt(e){let t=this.#ft(),n=initialModelEditorState(e);return t.question=t=>renderModelEditorQuestion({request:e,state:n},this.#i,t),this.#pn(),await this.#ht((t,r)=>{let dispatch=t=>{let i=transitionModelEditor(n,t,e);switch(i.kind){case`ignore`:return;case`render`:n=i.state,this.#pn();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.#pn();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#ut(e){let t=this.#ft(),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.#zt(),this.#pn(),await this.#ht((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Vt(),this.#pn()},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.#pn();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#pn();return}i(t);return}default:return}},()=>this.#Bt()).promise}async#dt(e){let t=this.#ft();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#pn(),await this.#ht((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#pn();return;default:return}}).promise}#ft(){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let e=this.#pt();return e.status!==void 0&&(e.status=void 0,e.summary=void 0,e.preview=void 0),e}#pt(){return this.#Ie===void 0&&(this.#Ie={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Ie}#mt(){this.#Ie?.implicit===!0?this.#Ie=void 0:this.#Ie!==void 0&&(this.#Ie.question=void 0,this.#Ie.hideLinesWhileQuestion=!1),this.#de=void 0,this.#Mt(),this.#Ie!==void 0&&this.#_t(),this.#pn()}#ht(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#mt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#mt(),i(e))};return this.#Lt(),this.#de=t=>{t.type===`ctrl-c`&&this.#wt(),e(t,settle,reject)},this.#jt(),{promise:a,settle}}#gt(e){let t,n=new Promise(e=>{t=e});return this.#qe=t,this.#_t(e?.interruptible??!0),{promise:n,dispose:()=>{this.#qe===t&&(this.#qe=void 0,this.#vt())}}}#_t(e=!0){if(this.#qe===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#wt();let e=this.#qe;this.#qe=void 0,this.#vt(),e?.(t.type===`ctrl-c`?`ctrl-c`:`escape`);return}t.type===`ctrl-r`&&this.#pn()};this.#Je=consumer,this.#Lt(),this.#de=consumer,this.#jt()}#vt(){this.#Je!==void 0&&(this.#de===this.#Je&&this.#Mt(),this.#Je=void 0)}#yt(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.#Ie!==void 0){this.#Ie.status=t,t===void 0&&(this.#Ie.preview=void 0),this.#pn();return}if(!(this.#R||this.#G)){if(t===void 0){this.#K={kind:`idle`},this.#Y=void 0,this.#Wt(),this.#pn();return}this.#Ot(),this.#Ut(),this.#Y=t.text,this.#pn()}}#bt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Ie;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.#pn();return}this.#Ot(),this.#Gt({kind:`flow`,title:t,body:n,live:!1}),this.#pn()}#xt(e){let t=this.#Ie;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.status=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.#pn())}#St(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Ie;if(n===void 0){this.#bt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#pn()}async#Ct(e){this.#fe=``,this.#Lt(),this.#qe=void 0,this.#vt(),this.#Mt(),this.#Wt(),this.#n.clear(),this.#Fn(),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.#Lt(),this.#n.hideCursor(),this.#Pn(),this.#Ie!==void 0&&(this.#Ht(),this.#_t()),this.#n.reset(),this.#pn()}}setSessionId(e){this.#Ue=e}shutdown(){if(this.#At(),this.#Q&&!this.#$){this.#$=!0;let e=this.#Ue===void 0?``:` ${this.#i.glyph.dot} session ${this.#Ue}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#W={cursor:this.#I,text:this.#F},this.#At()}requestInterrupt(){this.#ee=!0,this.#Ie!==void 0&&this.#de?.({type:`ctrl-c`}),this.#ge?.(),this.#At()}exitRequested(){return this.#te}#wt(){this.#te=!0,this.#re?.()}async#Tt(e){if(this.#Ye!==void 0||!this.#Z)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#Mn(),height:this.#Nn()}),paint:e=>this.#r.paint(e,this.#Nn()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#Xe});this.#Ye=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#Dt=e,this.#de=e=>{t.handleKey(e)===`close`&&this.#Et()},this.#jt(),t.start()})}#Et(){let e=this.#Ye;if(e===void 0)return;this.#Ye=void 0,e.dispose(),this.#Mt(),this.#r.exit(),this.#n.hideCursor(),this.#pn(),this.#n.showCursor();let t=this.#Dt;this.#Dt=void 0,t?.()}#Dt;#Ot(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.#Pn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#he=()=>this.#pn(),this.#t.on(`resize`,this.#he),process.on(`exit`,this.#kt))}#kt=()=>{this.#Z&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#At(){this.#Et();let e=this.#q;if(this.#q=void 0,e?.(interruptedError()),this.#Mt(),this.#Bt(),this.#Wt(),this.#le!==void 0&&(clearTimeout(this.#le),this.#le=void 0),this.#ue=!1,this.#Un(),this.#Z){this.#Gn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#pn(),this.#n.clear(),this.#n.showCursor(),this.#Fn(),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.#kt),this.#Z=!1}}#jt(){this.#e.off(`data`,this.#Nt),this.#e.on(`data`,this.#Nt),this.#fe.length>0&&queueMicrotask(()=>{this.#de!==void 0&&this.#fe.length>0&&(this.#Ft(),this.#Pt())})}#Mt(){this.#e.off(`data`,this.#Nt),this.#Lt(),this.#de=void 0}#Nt=e=>{this.#Lt(),this.#fe+=this.#pe.write(e),this.#Ft(),this.#Pt()};#Pt(){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?.()}}#Ft(){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.#It(e.key.value);continue}this.#de?.(e.key)}}}#It(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#Xe=t,this.#Ye?.setTerminalBackground(t))}#Lt(){this.#me&&=(clearTimeout(this.#me),void 0)}#Rt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#pn();break;case`enter`:{let e=this.#W.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Ve!==void 0){this.#W=EMPTY_LINE,this.#Be.requestCancellation(),this.#Ge=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Ve(),this.#pn();break}this.#Be.enqueue(e)&&(this.#W=EMPTY_LINE),this.#pn();break}case`ctrl-c`:case`escape`:if(this.#Be.idle&&this.#Ve===void 0)break;this.#Be.handleEscape(),this.#Ge=!0,this.#Ve?.(),this.#pn();break;default:{let t=applyLineEditorKey(this.#W,e,{multiline:!0});t!==void 0&&(this.#W=t,this.#pn());break}}}#zt(){this.#Bt(),this.#Vt(),this.#se=setInterval(()=>{this.#ie=!this.#ie,this.#pn()},500),this.#se.unref?.()}#Bt(){this.#se&&=(clearInterval(this.#se),void 0),this.#ie=!0}#Vt(){this.#ie=!0}#Ht(){this.#Wt(),this.#ce=setInterval(()=>{this.#ae+=1,this.#pn()},90),this.#ce.unref?.()}#Ut(){let e=Date.now();this.#oe=e,this.#K={kind:`waiting`,startedAtMs:e},this.#Ht()}#Wt(){this.#ce&&=(clearInterval(this.#ce),void 0)}#Gt(e){e.id!==this.#ke?.id&&this.#Gn(),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)}#Kt(e){this.#H=!0,this.#Gt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#pn()}#qt(){let e=this.#U.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#Tn(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.#Gt({kind:`turn-stats`,body:t,live:!1})}#Jt(e){if(e==null)return;let t=this.#We;if(this.#We=void 0,this.#Pe===e){this.#Pe=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Gt(n)}#Yt(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.#Gt(c),this.#pn()}#Xt(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.#Gt(i)}#Zt(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.#Gt(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.#Gt(e);return}e.id!==this.#ke?.id&&this.#Gn(),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)}#$t(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#en(){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)}#tn(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#U.addUsage(e.usage),this.#cn(n),this.#fn(e.usage),this.#pn();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#nn(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.#nn(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.#rn(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.#rn(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#in({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.#in({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.#in({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#dn(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.#in({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Yt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#He=!0,!this.#Ge&&this.#Ke!==void 0&&this.#W.text.length===0&&(this.#W=lineOf(this.#Ke),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#fn(e.usage),this.#pn();break}}#nn(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Zt({id:e,kind:`assistant`,body:r,live:n}),this.#pn())}#rn(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Zt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#pn())}#in(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#ln(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#an(e);this.#Zt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#un(n),this.#pn()}#an(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#on(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}#on(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)}#sn(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)}}#cn(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.#$t(r),this.#y.delete(t)}}#ln(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.#ze!==e&&(this.#ze=e,this.#Gt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#Mn(),this.#i).join(`
6
+ `,` `))e>=` `&&e!==``&&dispatch({type:`char`,char:e})}).promise}async#ut(e){let t=this.#ft(),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.#zt(),this.#pn(),await this.#ht((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Vt(),this.#pn()},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.#pn();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#pn();return}i(t);return}default:return}},()=>this.#Bt()).promise}async#dt(e){let t=this.#ft();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#pn(),await this.#ht((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#pn();return;default:return}}).promise}#ft(){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let e=this.#pt();return e.status!==void 0&&(e.status=void 0,e.summary=void 0,e.preview=void 0),e}#pt(){return this.#Ie===void 0&&(this.#Ie={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Ie}#mt(){this.#Ie?.implicit===!0?this.#Ie=void 0:this.#Ie!==void 0&&(this.#Ie.question=void 0,this.#Ie.hideLinesWhileQuestion=!1),this.#de=void 0,this.#Mt(),this.#Ie!==void 0&&this.#_t(),this.#pn()}#ht(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#mt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#mt(),i(e))};return this.#Lt(),this.#de=t=>{t.type===`ctrl-c`&&this.#wt(),e(t,settle,reject)},this.#jt(),{promise:a,settle}}#gt(e){let t,n=new Promise(e=>{t=e});return this.#qe=t,this.#_t(e?.interruptible??!0),{promise:n,dispose:()=>{this.#qe===t&&(this.#qe=void 0,this.#vt())}}}#_t(e=!0){if(this.#qe===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#wt();let e=this.#qe;this.#qe=void 0,this.#vt(),e?.(t.type===`ctrl-c`?`ctrl-c`:`escape`);return}t.type===`ctrl-r`&&this.#pn()};this.#Je=consumer,this.#Lt(),this.#de=consumer,this.#jt()}#vt(){this.#Je!==void 0&&(this.#de===this.#Je&&this.#Mt(),this.#Je=void 0)}#yt(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.#Ie!==void 0){this.#Ie.status=t,t===void 0&&(this.#Ie.preview=void 0),this.#pn();return}if(!(this.#R||this.#G)){if(t===void 0){this.#K={kind:`idle`},this.#Y=void 0,this.#Wt(),this.#pn();return}this.#Ot(),this.#Ut(),this.#Y=t.text,this.#pn()}}#bt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Ie;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.#pn();return}this.#Ot(),this.#Gt({kind:`flow`,title:t,body:n,live:!1}),this.#pn()}#xt(e){let t=this.#Ie;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.status=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.#pn())}#St(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Ie;if(n===void 0){this.#bt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#pn()}async#Ct(e){this.#fe=``,this.#Lt(),this.#qe=void 0,this.#vt(),this.#Mt(),this.#Wt(),this.#n.clear(),this.#Fn(),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.#Lt(),this.#n.hideCursor(),this.#Pn(),this.#Ie!==void 0&&(this.#Ht(),this.#_t()),this.#n.reset(),this.#pn()}}setSessionId(e){this.#Ue=e}shutdown(){if(this.#At(),this.#Q&&!this.#$){this.#$=!0;let e=this.#Ue===void 0?``:` ${this.#i.glyph.dot} session ${this.#Ue}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#W={cursor:this.#I,text:this.#F},this.#At()}requestInterrupt(){this.#ee=!0,this.#Ie!==void 0&&this.#de?.({type:`ctrl-c`}),this.#ge?.(),this.#At()}exitRequested(){return this.#te}#wt(){this.#te=!0,this.#re?.()}async#Tt(e){if(this.#Ye!==void 0||!this.#Z)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#Mn(),height:this.#Nn()}),paint:e=>this.#r.paint(e,this.#Nn()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#Xe});this.#Ye=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#Dt=e,this.#de=e=>{t.handleKey(e)===`close`&&this.#Et()},this.#jt(),t.start()})}#Et(){let e=this.#Ye;if(e===void 0)return;this.#Ye=void 0,e.dispose(),this.#Mt(),this.#r.exit(),this.#n.hideCursor(),this.#pn(),this.#n.showCursor();let t=this.#Dt;this.#Dt=void 0,t?.()}#Dt;#Ot(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.#Pn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#he=()=>this.#pn(),this.#t.on(`resize`,this.#he),process.on(`exit`,this.#kt))}#kt=()=>{this.#Z&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#At(){this.#Et();let e=this.#q;if(this.#q=void 0,e?.(interruptedError()),this.#Mt(),this.#Bt(),this.#Wt(),this.#le!==void 0&&(clearTimeout(this.#le),this.#le=void 0),this.#ue=!1,this.#Un(),this.#Z){this.#Gn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#pn(),this.#n.clear(),this.#n.showCursor(),this.#Fn(),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.#kt),this.#Z=!1}}#jt(){this.#e.off(`data`,this.#Nt),this.#e.on(`data`,this.#Nt),this.#fe.length>0&&queueMicrotask(()=>{this.#de!==void 0&&this.#fe.length>0&&(this.#Ft(),this.#Pt())})}#Mt(){this.#e.off(`data`,this.#Nt),this.#Lt(),this.#de=void 0}#Nt=e=>{this.#Lt(),this.#fe+=this.#pe.write(e),this.#Ft(),this.#Pt()};#Pt(){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?.()}}#Ft(){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.#It(e.key.value);continue}this.#de?.(e.key)}}}#It(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#Xe=t,this.#Ye?.setTerminalBackground(t))}#Lt(){this.#me&&=(clearTimeout(this.#me),void 0)}#Rt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#pn();break;case`enter`:{let e=this.#W.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Ve!==void 0){this.#W=EMPTY_LINE,this.#Be.requestCancellation(),this.#Ge=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Ve(),this.#pn();break}this.#Be.enqueue(e)&&(this.#W=EMPTY_LINE),this.#pn();break}case`ctrl-c`:case`escape`:if(this.#Be.idle&&this.#Ve===void 0)break;this.#Be.handleEscape(),this.#Ge=!0,this.#Ve?.(),this.#pn();break;default:{let t=applyLineEditorKey(this.#W,e,{multiline:!0});t!==void 0&&(this.#W=t,this.#pn());break}}}#zt(){this.#Bt(),this.#Vt(),this.#se=setInterval(()=>{this.#ie=!this.#ie,this.#pn()},500),this.#se.unref?.()}#Bt(){this.#se&&=(clearInterval(this.#se),void 0),this.#ie=!0}#Vt(){this.#ie=!0}#Ht(){this.#Wt(),this.#ce=setInterval(()=>{this.#ae+=1,this.#pn()},90),this.#ce.unref?.()}#Ut(){let e=Date.now();this.#oe=e,this.#K={kind:`waiting`,startedAtMs:e},this.#Ht()}#Wt(){this.#ce&&=(clearInterval(this.#ce),void 0)}#Gt(e){e.id!==this.#ke?.id&&this.#Gn(),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)}#Kt(e){this.#H=!0,this.#Gt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#pn()}#qt(){let e=this.#U.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#Tn(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.#Gt({kind:`turn-stats`,body:t,live:!1})}#Jt(e){if(e==null)return;let t=this.#We;if(this.#We=void 0,this.#Pe===e){this.#Pe=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Gt(n)}#Yt(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.#Gt(c),this.#pn()}#Xt(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.#Gt(i)}#Zt(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.#Gt(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.#Gt(e);return}e.id!==this.#ke?.id&&this.#Gn(),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)}#$t(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#en(){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)}#tn(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#U.addUsage(e.usage),this.#cn(n),this.#fn(e.usage),this.#pn();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#nn(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=typeof e.text==`string`?stripTerminalControls(e.text):t;n.text.set(e.id,r),this.#nn(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.#rn(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.#rn(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#in({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.#in({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.#in({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#dn(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.#in({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Yt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#He=!0,!this.#Ge&&this.#Ke!==void 0&&this.#W.text.length===0&&(this.#W=lineOf(this.#Ke),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#fn(e.usage),this.#pn();break}}#nn(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Zt({id:e,kind:`assistant`,body:r,live:n}),this.#pn())}#rn(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Zt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#pn())}#in(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#ln(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#an(e);this.#Zt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#un(n),this.#pn()}#an(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#on(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}#on(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)}#sn(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)}}#cn(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.#$t(r),this.#y.delete(t)}}#ln(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.#ze!==e&&(this.#ze=e,this.#Gt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#Mn(),this.#i).join(`
7
7
  `),live:!1})),this.#Re=void 0}else this.#Re=t.length>0?t:void 0,this.#ze=void 0;return this.#pn(),!0}#un(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)}#dn(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`}}#fn(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)}}#pn(){if(this.#Z){if(this.#_e){this.#ve=!0;return}this.#_e=!0;try{do this.#ve=!1,this.#mn();while(this.#ve)}finally{this.#_e=!1}}}#mn(){if(!this.#Z)return;if(this.#Ye!==void 0){this.#Ye.repaint();return}let e=this.#Mn(),t=this.#Cn(e),n=this.#D===void 0?[]:this.#vn(),r=Math.max(1,this.#Nn()-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.#qn(t.display))continue;let n=this.#yn(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.#qn(t))continue;let n=this.#yn(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)}#hn(){if(!this.#Z)return;let e=this.#Mn(),t=this.#Cn(e),n=Math.max(1,this.#Nn()-t.length),r=this.#j,i=[];for(let{display:t}of groupToolBlocksForDisplay(this.#m)){if(this.#qn(t))continue;let n=this.#yn(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.#vn(),...this.#A],a)}logDisplayMode(){return this.#p}setLogDisplayMode(e){e!==this.#p&&(this.#p=e,e===`all`&&this.flushDelayedDevBuildErrors(),this.#_n(),this.#Z&&this.#hn())}flushDelayedDevBuildErrors(){let e=this.#Oe;e!==void 0&&(this.#Oe=void 0,this.#Gt({kind:`log`,title:`stderr`,body:e,live:!0}),this.#pn())}#gn(){this.#ue=!0,this.#le!==void 0&&clearTimeout(this.#le),this.#le=setTimeout(()=>{this.#ue=!1,this.#le=void 0,this.#pn()},5e3),this.setLogDisplayMode(nextLogDisplayMode(this.#p)),this.#pn()}#_n(){let e=this.#Mn();this.#A.length=0;let t;for(let{display:n}of groupToolBlocksForDisplay(this.#_,{logCoalescing:`runs`})){if(this.#qn(n))continue;let r=this.#yn(n,e,t);t=previousBlockOf(n),this.#A.push(...r)}this.#j=t}#vn(){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.#Mn()};e?.info!==void 0&&(n.info=e.info);let i=e?.tip??t?.tip;return i!==void 0&&(n.tip=i),buildAgentHeader(n)}#yn(e,t,n){let r={activityPulse:this.#xn(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}#bn(){return this.#i.spinner[this.#ae%this.#i.spinner.length]??``}#xn(e,t){return isProgressPulseVisible(Date.now()-e)?t:` `}#Sn(e,t){return e.indicator.kind===`spinner`?{glyph:this.#bn(),color:`yellow`}:{glyph:this.#xn(e.indicator.startedAtMs,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),color:t?.kind===`external-action`?`yellow`:`green`}}#Cn(e){let n=this.#i.colors,r=[``];if(this.#Fe!==void 0)return r.push(...this.#Fe(e),``),this.#kn(r,e),r;let a=this.#Ie;if(a!==void 0){let t=this.#Sn(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,navigation:a.navigation,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.#An(r,e),r}this.#Le!==void 0&&r.push(...renderAttentionRows(this.#Le,e,this.#i),``),this.#Re!==void 0&&r.push(...renderTodoPanelRows({items:this.#Re,width:e,theme:this.#i,working:this.#G||this.#K.kind===`waiting`,pulse:this.#xn(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)}),``);let o=renderMessageQueueRows({view:this.#Be.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.#kn(s,e);let u=Math.max(1,this.#Nn()-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.#wn(e)),this.#Dn(r,e);let t=[];return this.#kn(t,e),!this.#G&&t.length>0&&r.push(``),r.push(...t),r}if(this.#W.text.length>0)return this.#On(r,e,{inert:!1}),this.#kn(r,e),r;let u=this.#Y??(this.#J.length>0?this.#J:`Ready`),f=this.#jn(),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.#kn(r,e),r}#wn(e){let t=this.#i.colors,n=this.#xn(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.#Tn(a)}`;return clip(`${t.yellow(n)} ${t.dim(o)}`,e)}#Tn(e){return`${formatTurnDuration(e)}${this.#En()}`}#En(){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)}`}#Dn(e,t){this.#G&&this.#On(e,t,{inert:!0})}#On(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))}#kn(e,t){let n=this.#P===void 0?``:` `,r=Math.max(1,t-n.length),i={theme:this.#i,width:r};this.#je&&this.#Ae!==void 0&&(i.devBuild=this.#Ae),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))}#An(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))}#jn(){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} `)):``}#Mn(){return Math.max(20,this.#t.columns||80)}#Nn(){return Math.max(8,this.#t.rows||24)}#Pn(){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.#Ln(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#d?.subscribeLogRecords(e=>this.#In(e)),this.#Te=()=>{this.#d?.unsubscribeLogRecords(),e(),t()}}#Fn(){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.#Kn(`stdout`)&&process.stdout.write(`${this.#Ee}\n`),this.#Ee=``),this.#De.length>0&&(this.#d?.append({source:`stderr`,detail:this.#De}),this.#Kn(`stderr`)&&process.stderr.write(`${this.#De}\n`),this.#De=``))}#In(e){let t=e.fields===void 0?``:` ${JSON.stringify(e.fields)}`;this.#zn(`[eve:${e.namespace}] ${e.message}${t}`),this.#pn()}#Ln(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.#Rn(n.trimEnd()),this.#pn();return}let r=n.lastIndexOf(`
8
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.#Rn(a):this.#zn(a),this.#pn())}#Rn(e){let t=[],flushPending=()=>{if(t.length===0)return;let e=t.join(`
9
9
  `);t=[],e.trim().length!==0&&this.#Gt({kind:`log`,title:`stdout`,body:e,live:!0})};for(let n of e.split(`
@@ -5,4 +5,3 @@ export declare function partKey(part: EveMessagePart): string;
5
5
  export declare function upsertMessage(data: EveMessageData, next: EveMessage): EveMessageData;
6
6
  export declare function removeStreamingToolPartsForTurn(data: EveMessageData, turnId: string): EveMessageData;
7
7
  export declare function optimisticUserMessageId(submissionId: string): string;
8
- export declare function appendToolInputDelta(inputText: string | undefined, offset: number, delta: string): string | undefined;
@@ -1 +1 @@
1
- function projectReceivedParts(e,t){return e?.map(e=>e.type===`text`?{state:`done`,text:e.text,type:`text`}:{filename:e.filename,mediaType:e.mediaType,size:e.size,type:`file`,url:e.url})??[{state:`done`,text:t,type:`text`}]}function partKey(e){switch(e.type){case`text`:return`text:${e.stepIndex??0}`;case`reasoning`:return`reasoning:${e.stepIndex??0}`;case`file`:return`file:${e.stepIndex??0}:${e.filename??e.url??e.mediaType}`;case`step-start`:return`step-start`;case`authorization`:return`authorization:${e.turnId}:${e.stepIndex}:${e.name}`;case`dynamic-tool`:return`dynamic-tool:${e.toolCallId}`}}function upsertMessage(e,t){let n=e.messages.findIndex(e=>e.id===t.id);return n===-1?{messages:[...e.messages,t]}:{messages:[...e.messages.slice(0,n),t,...e.messages.slice(n+1)]}}function removeStreamingToolPartsForTurn(e,t){let n=e.messages.findIndex(e=>e.role===`assistant`&&e.metadata?.turnId===t),r=e.messages[n];return r===void 0?e:upsertMessage(e,{...r,parts:r.parts.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)})}function optimisticUserMessageId(e){return`optimistic:${e}:user`}function appendToolInputDelta(e,t,n){if(t===0)return n;if(e?.length===t)return e+n}export{appendToolInputDelta,optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage};
1
+ function projectReceivedParts(e,t){return e?.map(e=>e.type===`text`?{state:`done`,text:e.text,type:`text`}:{filename:e.filename,mediaType:e.mediaType,size:e.size,type:`file`,url:e.url})??[{state:`done`,text:t,type:`text`}]}function partKey(e){switch(e.type){case`text`:return`text:${e.stepIndex??0}`;case`reasoning`:return`reasoning:${e.stepIndex??0}`;case`file`:return`file:${e.stepIndex??0}:${e.filename??e.url??e.mediaType}`;case`step-start`:return`step-start`;case`authorization`:return`authorization:${e.turnId}:${e.stepIndex}:${e.name}`;case`dynamic-tool`:return`dynamic-tool:${e.toolCallId}`}}function upsertMessage(e,t){let n=e.messages.findIndex(e=>e.id===t.id);return n===-1?{messages:[...e.messages,t]}:{messages:[...e.messages.slice(0,n),t,...e.messages.slice(n+1)]}}function removeStreamingToolPartsForTurn(e,t){let n=e.messages.findIndex(e=>e.role===`assistant`&&e.metadata?.turnId===t),r=e.messages[n];return r===void 0?e:upsertMessage(e,{...r,parts:r.parts.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)})}function optimisticUserMessageId(e){return`optimistic:${e}:user`}export{optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage};
@@ -1 +1 @@
1
- import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{appendToolInputDelta,optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage}from"#client/message-reducer-primitives.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,u){switch(u.type){case`client.message.submitted`:return upsertMessage(e,{id:optimisticUserMessageId(u.data.submissionId),metadata:{optimistic:!0,status:`submitted`},parts:[{type:`text`,text:u.data.message}],role:`user`});case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(u.data.submissionId),metadata:{optimistic:!0,status:`failed`},parts:[{type:`text`,text:u.data.message}],role:`user`});case`client.input.responded`:{let t=e;for(let e of u.data.responses)t=respondToInputRequest(t,e);return t}case`input.resolved`:{let t=e;for(let e of u.data.resolutions)t=resolveInputRequest(t,e);return t}case`message.received`:return upsertMessage(e,{id:`${u.data.turnId}:user`,metadata:{status:`complete`,turnId:u.data.turnId},parts:projectReceivedParts(u.data.parts,u.data.message),role:`user`});case`step.started`:return updateAssistantMessage(e,u.data.turnId,e=>ensureStepStartPart(e,u.data.stepIndex));case`reasoning.appended`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`streaming`,stepIndex:u.data.stepIndex,text:u.data.reasoningSoFar,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`done`,stepIndex:u.data.stepIndex,text:u.data.reasoning,type:`reasoning`}));case`action.input.appended`:{let t=findToolPart(e,u.data.callId);if(t!==void 0&&t.state!==`input-streaming`)return e;let n=appendToolInputDelta(t?.state===`input-streaming`?t.inputText:void 0,u.data.inputTextOffset,u.data.inputTextDelta);if(n===void 0)return e;let r={input:void 0,inputText:n,state:`input-streaming`,stepIndex:u.data.stepIndex,toolCallId:u.data.callId,toolMetadata:t?.toolMetadata??{eve:{kind:`unknown`,name:u.data.toolName}},toolName:u.data.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),r)):updateToolPart(e,u.data.callId,r)}case`actions.requested`:{let t=e;for(let e of u.data.actions){let n=normalizeActionRequest(e);t=updateAssistantMessage(t,u.data.turnId,t=>upsertPart(ensureStepStartPart(t,u.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:u.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(n),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`input.requested`:{let t=e;for(let e of u.data.requests){let n=normalizeActionRequest(e.action);t=updateAssistantMessage(t,u.data.turnId,t=>upsertPart(ensureStepStartPart(t,u.data.stepIndex),{approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:u.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(n,{inputRequest:toMessageInputRequest(e)}),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`approval.candidate`:return e;case`approval.settled`:{let t=findToolPartByApprovalId(e,u.data.requestId);return t===void 0?e:u.data.outcome===`approved`?updateToolPart(e,t.toolCallId,{approval:{approved:!0,id:u.data.requestId,reason:void 0},input:t.input,state:`approval-responded`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`}):updateToolPart(e,t.toolCallId,{approval:{approved:!1,id:u.data.requestId,reason:`Tool execution was cancelled.`},input:t.input,state:`output-denied`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`})}case`action.result`:{let t=normalizeActionResult(u.data.result),a=findToolPart(e,u.data.result.callId),s=u.data.error?.code===`TOOL_EXECUTION_DENIED`,c=u.data.status===`failed`&&!s,l=a?.approval?.id??u.data.result.callId,d=mergeToolMetadata(a?.toolMetadata,createToolMetadata(t)),f={input:a?.input,stepIndex:u.data.stepIndex,toolCallId:u.data.result.callId,toolMetadata:d,toolName:a?.toolName??t.toolName,type:`dynamic-tool`},p;return p=s?{...f,approval:{approved:!1,id:l,reason:u.data.error?.message},state:`output-denied`}:c?{...f,approval:approvedApproval(a),errorText:u.data.error?.message??stringifyUnknown(u.data.result.output),state:`output-error`}:{...f,approval:approvedApproval(a),output:u.data.result.output,state:`output-available`},a===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),p)):updateToolPart(e,u.data.result.callId,p)}case`action.partial`:{let t=findToolPart(e,u.data.result.callId);if(t!==void 0&&isSettledToolPart(t))return e;let a=normalizeActionResult(u.data.result),o={approval:approvedApproval(t),input:t?.input,output:u.data.result.output,partial:!0,state:`output-available`,stepIndex:u.data.stepIndex,toolCallId:u.data.result.callId,toolMetadata:mergeToolMetadata(t?.toolMetadata,createToolMetadata(a)),toolName:t?.toolName??a.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),o)):updateToolPart(e,u.data.result.callId,o)}case`authorization.required`:return updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),createAuthorizationRequiredPart(u)));case`authorization.completed`:return completeAuthorization(e,u);case`message.appended`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`streaming`,stepIndex:u.data.stepIndex,text:u.data.messageSoFar,type:`text`}));case`message.completed`:return updateAssistantMessage(e,u.data.turnId,e=>u.data.message===null?removeTextPart(e,u.data.stepIndex):upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`done`,stepIndex:u.data.stepIndex,text:u.data.message,type:`text`}));case`result.completed`:return updateAssistantMetadata(e,u.data.turnId,{result:u.data.result});case`turn.completed`:return updateAssistantMessage(e,u.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts)}));case`turn.cancelled`:return updateAssistantMessage(e,u.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`?{...e,state:`done`}:e))}));case`turn.failed`:return removeStreamingToolPartsForTurn(e,u.data.turnId);case`session.failed`:return e;default:return e}}function removeStreamingToolParts(e){return e.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)}function respondToInputRequest(e,t){let n=findToolPartByApprovalId(e,t.requestId);if(!n)return e;let r={id:t.requestId};return t.text!==void 0&&(r.reason=t.text),updateToolPart(e,n.toolCallId,{approval:r,input:n.input,state:`approval-responded`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:mergeToolMetadata(n.toolMetadata,{eve:{inputResponse:t,kind:n.toolMetadata?.eve?.kind??`unknown`,name:n.toolMetadata?.eve?.name??n.toolName}}),toolName:n.toolName,type:`dynamic-tool`})}function resolveInputRequest(e,t){if(t.response!==void 0)return respondToInputRequest(e,t.response);let n=findToolPartByApprovalId(e,t.requestId);return n?updateToolPart(e,n.toolCallId,{input:n.input,output:{status:t.outcome},state:`output-available`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:n.toolMetadata,toolName:n.toolName,type:`dynamic-tool`}):e}function updateAssistantMessage(e,t,n){return upsertMessage(e,n(e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t)))}function updateAssistantMetadata(e,t,n){return updateAssistantMessage(e,t,e=>({...e,metadata:{...e.metadata,...n}}))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function upsertRun(e,t){let n=-1;for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t.type&&i.stepIndex===t.stepIndex){n=r;break}}let r=n!==-1&&e.parts[n].state===`streaming`?[...e.parts.slice(0,n),t,...e.parts.slice(n+1)]:[...e.parts,t];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function removeTextPart(e,t){let n=e.parts.filter(e=>e.type!==`text`||e.stepIndex!==t);return n.length===e.parts.length?e:{...e,metadata:{...e.metadata,status:`complete`},parts:n}}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function completeAuthorization(t,n){let r=findLatestPendingAuthorizationPart(t,n.data.name),i=createAuthorizationCompletedPart(n,r);return r===void 0?updateAssistantMessage(t,n.data.turnId,e=>upsertPart(ensureStepStartPart(e,n.data.stepIndex),i)):updateAuthorizationPart(t,r,i)}function updateAuthorizationPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e===t));return r?upsertMessage(e,upsertPart(r,n)):e}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findLatestPendingAuthorizationPart(e,t){for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n];if(r?.role===`assistant`)for(let e=r.parts.length-1;e>=0;--e){let n=r.parts[e];if(n?.type===`authorization`&&n.state===`required`&&n.name===t)return n}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
1
+ import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage}from"#client/message-reducer-primitives.js";import{messageRun}from"#client/message-run-parts.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,l){switch(l.type){case`client.message.submitted`:return upsertMessage(e,{id:optimisticUserMessageId(l.data.submissionId),metadata:{optimistic:!0,status:`submitted`},parts:[{type:`text`,text:l.data.message}],role:`user`});case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(l.data.submissionId),metadata:{optimistic:!0,status:`failed`},parts:[{type:`text`,text:l.data.message}],role:`user`});case`client.input.responded`:{let t=e;for(let e of l.data.responses)t=respondToInputRequest(t,e);return t}case`input.resolved`:{let t=e;for(let e of l.data.resolutions)t=resolveInputRequest(t,e);return t}case`message.received`:return upsertMessage(e,{id:`${l.data.turnId}:user`,metadata:{status:`complete`,turnId:l.data.turnId},parts:projectReceivedParts(l.data.parts,l.data.message),role:`user`});case`step.started`:return updateAssistantMessage(e,l.data.turnId,e=>ensureStepStartPart(e,l.data.stepIndex));case`reasoning.appended`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.append(ensureStepStartPart(e,l.data.stepIndex),{delta:l.data.reasoningDelta,stepIndex:l.data.stepIndex,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.upsert(ensureStepStartPart(e,l.data.stepIndex),{state:`done`,stepIndex:l.data.stepIndex,text:l.data.reasoning,type:`reasoning`}));case`action.input.appended`:{let t=findToolPart(e,l.data.callId);if(t!==void 0&&t.state!==`input-streaming`)return e;let n={input:void 0,inputText:(t?.state===`input-streaming`?t.inputText:``)+l.data.inputTextDelta,state:`input-streaming`,stepIndex:l.data.stepIndex,toolCallId:l.data.callId,toolMetadata:t?.toolMetadata??{eve:{kind:`unknown`,name:l.data.toolName}},toolName:l.data.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),n)):updateToolPart(e,l.data.callId,n)}case`actions.requested`:{let t=e;for(let e of l.data.actions){let n=normalizeActionRequest(e);t=updateAssistantMessage(t,l.data.turnId,t=>upsertPart(ensureStepStartPart(t,l.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:l.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(n),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`input.requested`:{let t=e;for(let e of l.data.requests){let n=normalizeActionRequest(e.action);t=updateAssistantMessage(t,l.data.turnId,t=>upsertPart(ensureStepStartPart(t,l.data.stepIndex),{approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:l.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(n,{inputRequest:toMessageInputRequest(e)}),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`approval.candidate`:return e;case`approval.settled`:{let t=findToolPartByApprovalId(e,l.data.requestId);return t===void 0?e:l.data.outcome===`approved`?updateToolPart(e,t.toolCallId,{approval:{approved:!0,id:l.data.requestId,reason:void 0},input:t.input,state:`approval-responded`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`}):updateToolPart(e,t.toolCallId,{approval:{approved:!1,id:l.data.requestId,reason:`Tool execution was cancelled.`},input:t.input,state:`output-denied`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`})}case`action.result`:{let t=normalizeActionResult(l.data.result),a=findToolPart(e,l.data.result.callId),s=l.data.error?.code===`TOOL_EXECUTION_DENIED`,c=l.data.status===`failed`&&!s,u=a?.approval?.id??l.data.result.callId,d=mergeToolMetadata(a?.toolMetadata,createToolMetadata(t)),f={input:a?.input,stepIndex:l.data.stepIndex,toolCallId:l.data.result.callId,toolMetadata:d,toolName:a?.toolName??t.toolName,type:`dynamic-tool`},p;return p=s?{...f,approval:{approved:!1,id:u,reason:l.data.error?.message},state:`output-denied`}:c?{...f,approval:approvedApproval(a),errorText:l.data.error?.message??stringifyUnknown(l.data.result.output),state:`output-error`}:{...f,approval:approvedApproval(a),output:l.data.result.output,state:`output-available`},a===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),p)):updateToolPart(e,l.data.result.callId,p)}case`action.partial`:{let t=findToolPart(e,l.data.result.callId);if(t!==void 0&&isSettledToolPart(t))return e;let a=normalizeActionResult(l.data.result),o={approval:approvedApproval(t),input:t?.input,output:l.data.result.output,partial:!0,state:`output-available`,stepIndex:l.data.stepIndex,toolCallId:l.data.result.callId,toolMetadata:mergeToolMetadata(t?.toolMetadata,createToolMetadata(a)),toolName:t?.toolName??a.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),o)):updateToolPart(e,l.data.result.callId,o)}case`authorization.required`:return updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),createAuthorizationRequiredPart(l)));case`authorization.completed`:return completeAuthorization(e,l);case`message.appended`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.append(ensureStepStartPart(e,l.data.stepIndex),{delta:l.data.messageDelta,stepIndex:l.data.stepIndex,type:`text`}));case`message.completed`:return updateAssistantMessage(e,l.data.turnId,e=>l.data.message===null?removeTextPart(e,l.data.stepIndex):messageRun.upsert(ensureStepStartPart(e,l.data.stepIndex),{state:`done`,stepIndex:l.data.stepIndex,text:l.data.message,type:`text`}));case`result.completed`:return updateAssistantMetadata(e,l.data.turnId,{result:l.data.result});case`turn.completed`:return updateAssistantMessage(e,l.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts)}));case`turn.cancelled`:return updateAssistantMessage(e,l.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`?{...e,state:`done`}:e))}));case`turn.failed`:return removeStreamingToolPartsForTurn(e,l.data.turnId);case`session.failed`:return e;default:return e}}function removeStreamingToolParts(e){return e.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)}function respondToInputRequest(e,t){let n=findToolPartByApprovalId(e,t.requestId);if(!n)return e;let r={id:t.requestId};return t.text!==void 0&&(r.reason=t.text),updateToolPart(e,n.toolCallId,{approval:r,input:n.input,state:`approval-responded`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:mergeToolMetadata(n.toolMetadata,{eve:{inputResponse:t,kind:n.toolMetadata?.eve?.kind??`unknown`,name:n.toolMetadata?.eve?.name??n.toolName}}),toolName:n.toolName,type:`dynamic-tool`})}function resolveInputRequest(e,t){if(t.response!==void 0)return respondToInputRequest(e,t.response);let n=findToolPartByApprovalId(e,t.requestId);return n?updateToolPart(e,n.toolCallId,{input:n.input,output:{status:t.outcome},state:`output-available`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:n.toolMetadata,toolName:n.toolName,type:`dynamic-tool`}):e}function updateAssistantMessage(e,t,n){return upsertMessage(e,n(e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t)))}function updateAssistantMetadata(e,t,n){return updateAssistantMessage(e,t,e=>({...e,metadata:{...e.metadata,...n}}))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function removeTextPart(e,t){let n=e.parts.filter(e=>e.type!==`text`||e.stepIndex!==t);return n.length===e.parts.length?e:{...e,metadata:{...e.metadata,status:`complete`},parts:n}}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function completeAuthorization(t,n){let r=findLatestPendingAuthorizationPart(t,n.data.name),i=createAuthorizationCompletedPart(n,r);return r===void 0?updateAssistantMessage(t,n.data.turnId,e=>upsertPart(ensureStepStartPart(e,n.data.stepIndex),i)):updateAuthorizationPart(t,r,i)}function updateAuthorizationPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e===t));return r?upsertMessage(e,upsertPart(r,n)):e}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findLatestPendingAuthorizationPart(e,t){for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n];if(r?.role===`assistant`)for(let e=r.parts.length-1;e>=0;--e){let n=r.parts[e];if(n?.type===`authorization`&&n.state===`required`&&n.name===t)return n}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
@@ -0,0 +1,18 @@
1
+ import type { EveMessage, EveMessagePart } from "#client/message-reducer-types.js";
2
+ type EveAssistantMessage = EveMessage & {
3
+ readonly role: "assistant";
4
+ };
5
+ type EveRunPart = Extract<EveMessagePart, {
6
+ readonly type: "text" | "reasoning";
7
+ }>;
8
+ declare function append(message: EveAssistantMessage, append: {
9
+ readonly delta: string;
10
+ readonly stepIndex: number;
11
+ readonly type: EveRunPart["type"];
12
+ }): EveAssistantMessage;
13
+ declare function upsert(message: EveAssistantMessage, next: EveRunPart): EveAssistantMessage;
14
+ export declare const messageRun: {
15
+ readonly append: typeof append;
16
+ readonly upsert: typeof upsert;
17
+ };
18
+ export {};
@@ -0,0 +1 @@
1
+ function append(e,t){let n=latestStreamingRun(e,t.type,t.stepIndex);return upsert(e,{state:`streaming`,stepIndex:t.stepIndex,text:(n?.text??``)+t.delta,type:t.type})}function latestStreamingRun(e,t,n){for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t&&i.stepIndex===n)return i.state===`streaming`?i:void 0}}function upsert(e,t){let n=-1;for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t.type&&i.stepIndex===t.stepIndex){n=r;break}}let r=n!==-1&&e.parts[n].state===`streaming`?[...e.parts.slice(0,n),t,...e.parts.slice(n+1)]:[...e.parts,t];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}const messageRun={append,upsert};export{messageRun};
@@ -1,4 +1,5 @@
1
- import type { MessageStreamEvent } from "#protocol/message.js";
1
+ import { type MessageStreamEvent } from "#protocol/message.js";
2
+ import { type MessageStreamVersion } from "#protocol/message-version.js";
2
3
  /**
3
4
  * Returns true when an error looks like a stream socket disconnection that
4
5
  * can be recovered via reconnection.
@@ -13,6 +14,7 @@ export declare function isStreamDisconnectError(error: unknown): boolean;
13
14
  * All read errors — including socket disconnections — propagate to the caller.
14
15
  * Use {@link isStreamDisconnectError} to classify them.
15
16
  */
16
- export declare function readNdjsonStream(body: ReadableStream<Uint8Array>, options?: {
17
+ export declare function readNdjsonStream(body: ReadableStream<Uint8Array>, options: {
17
18
  readonly idleTimeoutMs?: number;
19
+ readonly streamVersion: MessageStreamVersion;
18
20
  }): AsyncGenerator<MessageStreamEvent>;
@@ -1,3 +1,3 @@
1
- function isStreamDisconnectError(e){if(e instanceof DOMException)return e.name===`AbortError`;if(!(e instanceof Error))return!1;let t=`code`in e&&typeof e.code==`string`?e.code:void 0;return e.name===`AbortError`||e.message===`terminated`||t===`UND_ERR_SOCKET`||e instanceof TypeError&&/^(?:failed to fetch|fetch failed)$/i.test(e.message)||/abort|cancel|disconnect|premature close|socket|terminated/i.test(e.message)}async function*readNdjsonStream(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=!1;try{for(;;){let e=await readWithIdleTimeout(n,t?.idleTimeoutMs);if(e.done){a=!0,i+=r.decode();break}e.value&&(i+=r.decode(e.value,{stream:!0}));let o=i.indexOf(`
2
- `);for(;o!==-1;){let e=i.slice(0,o).trim();i=i.slice(o+1),e.length>0&&(yield JSON.parse(e)),o=i.indexOf(`
3
- `)}}let e=i.trim();e.length>0&&(yield JSON.parse(e))}finally{a||await n.cancel().catch(()=>{}),n.releaseLock()}}async function readWithIdleTimeout(e,t){if(t===void 0)return await e.read();let n;try{return await Promise.race([e.read(),new Promise((e,r)=>{n=setTimeout(()=>r(new DOMException(`Session stream was idle.`,`AbortError`)),t)})])}finally{n!==void 0&&clearTimeout(n)}}export{isStreamDisconnectError,readNdjsonStream};
1
+ import"#protocol/message.js";import{normalizeMessageStreamEvent}from"#protocol/message-version.js";function isStreamDisconnectError(e){if(e instanceof DOMException)return e.name===`AbortError`;if(!(e instanceof Error))return!1;let t=`code`in e&&typeof e.code==`string`?e.code:void 0;return e.name===`AbortError`||e.message===`terminated`||t===`UND_ERR_SOCKET`||e instanceof TypeError&&/^(?:failed to fetch|fetch failed)$/i.test(e.message)||/abort|cancel|disconnect|premature close|socket|terminated/i.test(e.message)}async function*readNdjsonStream(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=!1;try{for(;;){let e=await readWithIdleTimeout(n,t?.idleTimeoutMs);if(e.done){a=!0,i+=r.decode();break}e.value&&(i+=r.decode(e.value,{stream:!0}));let o=i.indexOf(`
2
+ `);for(;o!==-1;){let e=i.slice(0,o).trim();i=i.slice(o+1),e.length>0&&(yield parseMessageStreamEvent(e,t.streamVersion)),o=i.indexOf(`
3
+ `)}}let e=i.trim();e.length>0&&(yield parseMessageStreamEvent(e,t.streamVersion))}finally{a||await n.cancel().catch(()=>{}),n.releaseLock()}}function parseMessageStreamEvent(t,n){return normalizeMessageStreamEvent(n,JSON.parse(t))}async function readWithIdleTimeout(e,t){if(t===void 0)return await e.read();let n;try{return await Promise.race([e.read(),new Promise((e,r)=>{n=setTimeout(()=>r(new DOMException(`Session stream was idle.`,`AbortError`)),t)})])}finally{n!==void 0&&clearTimeout(n)}}export{isStreamDisconnectError,readNdjsonStream};
@@ -1,4 +1,5 @@
1
1
  import type { MessageStreamEvent } from "#protocol/message.js";
2
+ import type { MessageStreamVersion } from "#protocol/message-version.js";
2
3
  import type { ClientRedirectPolicy, StreamReconnectPolicy } from "#client/types.js";
3
4
  interface RetryPolicy {
4
5
  readonly baseDelayMs: number;
@@ -50,6 +51,7 @@ export declare function followStreamIterable(input: FollowStreamInput): AsyncGen
50
51
  interface OpenedStream {
51
52
  readonly body: ReadableStream<Uint8Array>;
52
53
  close(): void;
54
+ readonly streamVersion: MessageStreamVersion;
53
55
  readonly tailIndex: number | undefined;
54
56
  }
55
57
  /**
@@ -1 +1 @@
1
- import{createEveSessionStreamRoutePath}from"#protocol/routes.js";import{EVE_STREAM_TAIL_INDEX_HEADER}from"#protocol/message.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";const DEFAULT_STREAM_RECONNECT_POLICY={retryableErrorStatuses:new Set([404,409,425,500,502,503,504]),streamIdleReconnectPolicy:{baseDelayMs:250,maxAttempts:5,maxDelayMs:4e3},streamOpenReconnectPolicy:{baseDelayMs:250,maxAttempts:12,maxDelayMs:5e3}},NO_STREAM_RECONNECT_POLICY={...DEFAULT_STREAM_RECONNECT_POLICY,streamIdleReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy,maxAttempts:0},streamOpenReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy,maxAttempts:1}};function resolveRetryPolicy(e,t){return{...t,...e}}function resolveStreamReconnectPolicy(e){if(e&&`reconnect`in e&&e.reconnect===!1)return NO_STREAM_RECONNECT_POLICY;let t=e;return{retryableErrorStatuses:t?.retryableErrorStatuses?new Set(t.retryableErrorStatuses):DEFAULT_STREAM_RECONNECT_POLICY.retryableErrorStatuses,streamIdleReconnectPolicy:resolveRetryPolicy(t?.streamIdleReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy),streamOpenReconnectPolicy:resolveRetryPolicy(t?.streamOpenReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy)}}async function*followStreamIterable(e){if(e.follow===!1&&e.startIndex<0)throw Error(`stream({ follow: false }) requires a nonnegative startIndex; a tail-relative cursor cannot be bounded.`);let i=resolveStreamReconnectPolicy(e.streamReconnectPolicy),a=i.streamIdleReconnectPolicy,o=e.startIndex,s=a.baseDelayMs,c=0,l=!0,u;for(;;){let d;try{d=await openStreamBody({...e,retryPolicy:i,startIndex:o,requestTailIndex:e.follow===!1&&u===void 0})}catch(t){if(e.signal?.aborted)return;throw t}if(e.follow===!1&&u===void 0&&(u=d.tailIndex,u===void 0))throw d.close(),Error(`stream({ follow: false }) requires the server to report the ${EVE_STREAM_TAIL_INDEX_HEADER} header. The agent may be running an older eve version.`);if(u!==void 0&&o>u){d.close();return}let f=!1;try{for await(let t of readNdjsonStream(d.body,{idleTimeoutMs:e.streamReadIdleTimeoutMs??15e3}))if(o+=1,f=!0,s=a.baseDelayMs,c=0,yield t,u!==void 0&&o>u)return}catch(e){if(!isStreamDisconnectError(e))throw e}finally{d.close()}if(e.signal?.aborted||e.startIndex<0||a.maxAttempts===0||e.keepAlive!==!0&&!f&&!l&&(c+=1)>=a.maxAttempts||(l=!1,await sleep(s,e.signal),e.signal?.aborted))return;s=Math.min(s*2,a.maxDelayMs)}}async function openStreamBody(t){let r=t.retryPolicy??DEFAULT_STREAM_RECONNECT_POLICY,s=r.streamOpenReconnectPolicy,c,l,u,d=s.baseDelayMs,f={};t.startIndex!==0&&(f.startIndex=String(t.startIndex)),t.requestTailIndex===!0&&(f.includeTailIndex=`1`);for(let o=0;o<s.maxAttempts;o+=1){let p=createClientUrl(t.host,createEveSessionStreamRoutePath(t.sessionId),Object.keys(f).length>0?f:void 0),m=await t.resolveHeaders(),h=new AbortController,g=t.signal?AbortSignal.any([t.signal,h.signal]):h.signal,_;try{_=await fetch(p,{cache:`no-store`,headers:m,redirect:t.redirect,signal:g})}catch(e){if(t.signal?.aborted||!isStreamDisconnectError(e)||o===s.maxAttempts-1)throw e;await sleep(d,t.signal),d=Math.min(d*2,s.maxDelayMs);continue}if(_.ok){if(!_.body)throw new ClientError(_.status,`Response body is null.`,_.headers);return{body:_.body,close:()=>h.abort(),tailIndex:parseTailIndexHeader(_.headers)}}if(c=_.status,l=await _.text(),u=_.headers,!r.retryableErrorStatuses.has(_.status))throw new ClientError(_.status,l,_.headers);o<s.maxAttempts-1&&(await sleep(d,t.signal),d=Math.min(d*2,s.maxDelayMs))}throw new ClientError(c??0,l??`Failed to open message stream.`,u)}function parseTailIndexHeader(e){let n=e.get(EVE_STREAM_TAIL_INDEX_HEADER);if(n===null||!/^-?\d+$/.test(n))return;let r=Number(n);return Number.isSafeInteger(r)?r:void 0}async function sleep(e,t){t?.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t?.removeEventListener(`abort`,onAbort),n()},e);t?.addEventListener(`abort`,onAbort,{once:!0})})}export{followStreamIterable,openStreamBody,sleep};
1
+ import{createEveSessionStreamRoutePath}from"#protocol/routes.js";import{EVE_STREAM_TAIL_INDEX_HEADER}from"#protocol/message.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";import{readMessageStreamVersion}from"#client/stream-version.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";const DEFAULT_STREAM_RECONNECT_POLICY={retryableErrorStatuses:new Set([404,409,425,500,502,503,504]),streamIdleReconnectPolicy:{baseDelayMs:250,maxAttempts:5,maxDelayMs:4e3},streamOpenReconnectPolicy:{baseDelayMs:250,maxAttempts:12,maxDelayMs:5e3}},NO_STREAM_RECONNECT_POLICY={...DEFAULT_STREAM_RECONNECT_POLICY,streamIdleReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy,maxAttempts:0},streamOpenReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy,maxAttempts:1}};function resolveRetryPolicy(e,t){return{...t,...e}}function resolveStreamReconnectPolicy(e){if(e&&`reconnect`in e&&e.reconnect===!1)return NO_STREAM_RECONNECT_POLICY;let t=e;return{retryableErrorStatuses:t?.retryableErrorStatuses?new Set(t.retryableErrorStatuses):DEFAULT_STREAM_RECONNECT_POLICY.retryableErrorStatuses,streamIdleReconnectPolicy:resolveRetryPolicy(t?.streamIdleReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy),streamOpenReconnectPolicy:resolveRetryPolicy(t?.streamOpenReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy)}}async function*followStreamIterable(e){if(e.follow===!1&&e.startIndex<0)throw Error(`stream({ follow: false }) requires a nonnegative startIndex; a tail-relative cursor cannot be bounded.`);let i=resolveStreamReconnectPolicy(e.streamReconnectPolicy),a=i.streamIdleReconnectPolicy,o=e.startIndex,s=a.baseDelayMs,c=0,l=!0,u;for(;;){let d;try{d=await openStreamBody({...e,retryPolicy:i,startIndex:o,requestTailIndex:e.follow===!1&&u===void 0})}catch(t){if(e.signal?.aborted)return;throw t}if(e.follow===!1&&u===void 0&&(u=d.tailIndex,u===void 0))throw d.close(),Error(`stream({ follow: false }) requires the server to report the ${EVE_STREAM_TAIL_INDEX_HEADER} header. The agent may be running an older eve version.`);if(u!==void 0&&o>u){d.close();return}let f=!1;try{for await(let t of readNdjsonStream(d.body,{idleTimeoutMs:e.streamReadIdleTimeoutMs??15e3,streamVersion:d.streamVersion}))if(o+=1,f=!0,s=a.baseDelayMs,c=0,yield t,u!==void 0&&o>u)return}catch(e){if(!isStreamDisconnectError(e))throw e}finally{d.close()}if(e.signal?.aborted||e.startIndex<0||a.maxAttempts===0||e.keepAlive!==!0&&!f&&!l&&(c+=1)>=a.maxAttempts||(l=!1,await sleep(s,e.signal),e.signal?.aborted))return;s=Math.min(s*2,a.maxDelayMs)}}async function openStreamBody(t){let r=t.retryPolicy??DEFAULT_STREAM_RECONNECT_POLICY,c=r.streamOpenReconnectPolicy,l,u,d,f=c.baseDelayMs,p={};t.startIndex!==0&&(p.startIndex=String(t.startIndex)),t.requestTailIndex===!0&&(p.includeTailIndex=`1`);for(let s=0;s<c.maxAttempts;s+=1){let m=createClientUrl(t.host,createEveSessionStreamRoutePath(t.sessionId),Object.keys(p).length>0?p:void 0),h=await t.resolveHeaders(),g=new AbortController,_=t.signal?AbortSignal.any([t.signal,g.signal]):g.signal,v;try{v=await fetch(m,{cache:`no-store`,headers:h,redirect:t.redirect,signal:_})}catch(e){if(t.signal?.aborted||!isStreamDisconnectError(e)||s===c.maxAttempts-1)throw e;await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs);continue}if(v.ok){if(!v.body)throw new ClientError(v.status,`Response body is null.`,v.headers);return{body:v.body,close:()=>g.abort(),streamVersion:readMessageStreamVersion(v.headers),tailIndex:parseTailIndexHeader(v.headers)}}if(l=v.status,u=await v.text(),d=v.headers,!r.retryableErrorStatuses.has(v.status))throw new ClientError(v.status,u,v.headers);s<c.maxAttempts-1&&(await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs))}throw new ClientError(l??0,u??`Failed to open message stream.`,d)}function parseTailIndexHeader(e){let n=e.get(EVE_STREAM_TAIL_INDEX_HEADER);if(n===null||!/^-?\d+$/.test(n))return;let r=Number(n);return Number.isSafeInteger(r)?r:void 0}async function sleep(e,t){t?.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t?.removeEventListener(`abort`,onAbort),n()},e);t?.addEventListener(`abort`,onAbort,{once:!0})})}export{followStreamIterable,openStreamBody,sleep};
@@ -0,0 +1,3 @@
1
+ import type { MessageStreamVersion } from "#protocol/message-version.js";
2
+ /** Reads and validates the schema version declared by a message stream response. */
3
+ export declare function readMessageStreamVersion(headers: Headers): MessageStreamVersion;
@@ -0,0 +1 @@
1
+ import{EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";const supportedMessageStreamVersions={21:!0,22:!0,23:!0,24:!0,25:!0};function readMessageStreamVersion(e){let t=e.get(EVE_STREAM_VERSION_HEADER);if(t!==null&&Object.hasOwn(supportedMessageStreamVersions,t))return t;throw TypeError(t===null?`Missing ${EVE_STREAM_VERSION_HEADER} response header.`:`Unsupported message stream version: ${t}.`)}export{readMessageStreamVersion};
@@ -1,4 +1,7 @@
1
1
  {
2
+ "moduleFingerprints": {
3
+ "@eve/catalog": "fe08e23d317a6a20f28cac1bdcea85674f91b29f74e4f0e2bf041ec81966b432"
4
+ },
2
5
  "moduleVersions": {
3
6
  "@agentclientprotocol/sdk": "1.3.0",
4
7
  "@ai-sdk/anthropic": "4.0.36",
@@ -11,6 +14,7 @@
11
14
  "commander": "14.0.3",
12
15
  "eventsource-parser": "3.1.0",
13
16
  "env-runner": "0.1.16",
17
+ "@eve/catalog": "0.0.1",
14
18
  "@ai-sdk/google": "4.0.39",
15
19
  "gray-matter": "4.0.3",
16
20
  "jose": "6.2.3",
@@ -49,8 +53,9 @@
49
53
  "zod": "4.5.4",
50
54
  "zod-validation-error": "5.0.0"
51
55
  },
52
- "scriptHash": "0718ea0dd9b4cc3ce00ca3de9c27fc0181f5875881bee87cd3dc0b66e5641604",
56
+ "scriptHash": "caa2afd6437fbe0c231ede38aee3577865d9d505f76853ae580c7eac46fad9c4",
53
57
  "toolVersions": {
54
- "rolldown": "1.1.5"
58
+ "rolldown": "1.1.5",
59
+ "typescript": "7.0.2"
55
60
  }
56
61
  }