eve 0.28.0 → 0.29.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 (221) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/channel/types.d.ts +6 -0
  3. package/dist/src/chunks/{use-eve-agent-hdPX68_i.js → use-eve-agent-CyDt3Lny.js} +2 -0
  4. package/dist/src/chunks/{use-eve-agent-CZkX_ZTT.js → use-eve-agent-DaH3cf8K.js} +2 -0
  5. package/dist/src/cli/commands/agent-prompt/collect-intent.md +1 -1
  6. package/dist/src/cli/commands/channels.d.ts +0 -17
  7. package/dist/src/cli/commands/channels.js +1 -1
  8. package/dist/src/cli/commands/deploy.js +1 -1
  9. package/dist/src/cli/commands/extension-init.js +1 -1
  10. package/dist/src/cli/commands/init.js +1 -1
  11. package/dist/src/cli/commands/integration-connect.d.ts +29 -0
  12. package/dist/src/cli/commands/integration-connect.js +1 -0
  13. package/dist/src/cli/commands/integration-setup.d.ts +2 -3
  14. package/dist/src/cli/commands/integration-setup.js +1 -1
  15. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  16. package/dist/src/cli/commands/registry-setup-command.d.ts +13 -3
  17. package/dist/src/cli/commands/registry-setup-command.js +2 -1
  18. package/dist/src/cli/commands/registry.d.ts +35 -1
  19. package/dist/src/cli/commands/registry.js +1 -1
  20. package/dist/src/cli/commands/trace.js +1 -1
  21. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  22. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  23. package/dist/src/cli/dev/tui/prompt-commands.d.ts +1 -1
  24. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  25. package/dist/src/cli/dev/tui/remote-auth-command.js +1 -1
  26. package/dist/src/cli/dev/tui/runner.d.ts +8 -7
  27. package/dist/src/cli/dev/tui/runner.js +1 -1
  28. package/dist/src/cli/dev/tui/setup-commands.d.ts +8 -13
  29. package/dist/src/cli/dev/tui/setup-commands.js +3 -2
  30. package/dist/src/cli/dev/tui/setup-flow.d.ts +14 -5
  31. package/dist/src/cli/dev/tui/setup-panel.d.ts +5 -1
  32. package/dist/src/cli/dev/tui/setup-panel.js +2 -2
  33. package/dist/src/cli/dev/tui/status-line.d.ts +1 -1
  34. package/dist/src/cli/dev/tui/status-line.js +1 -1
  35. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +2 -5
  36. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  37. package/dist/src/cli/dev/tui/test/fake-setup-flow-renderer.js +1 -1
  38. package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
  39. package/dist/src/cli/dev/tui/tui.d.ts +2 -0
  40. package/dist/src/cli/dev/tui/tui.js +1 -1
  41. package/dist/src/cli/dev/tui/vercel-status.d.ts +1 -6
  42. package/dist/src/cli/dev/tui/vercel-status.js +1 -1
  43. package/dist/src/cli/option-parsers.d.ts +11 -0
  44. package/dist/src/cli/option-parsers.js +1 -0
  45. package/dist/src/cli/run.d.ts +1 -12
  46. package/dist/src/cli/run.js +3 -3
  47. package/dist/src/cli/shutdown.d.ts +2 -0
  48. package/dist/src/cli/shutdown.js +1 -1
  49. package/dist/src/compiled/.vendor-stamp.json +5 -5
  50. package/dist/src/compiled/@workflow/core/index.js +1 -1
  51. package/dist/src/compiled/@workflow/core/private.d.ts +21 -5
  52. package/dist/src/compiled/@workflow/core/private.js +1 -1
  53. package/dist/src/compiled/@workflow/core/runtime/world.d.ts +10 -5
  54. package/dist/src/compiled/@workflow/core/runtime.js +3 -3
  55. package/dist/src/compiled/@workflow/core/telemetry/semantic-conventions.d.ts +2 -2
  56. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  57. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  58. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  59. package/dist/src/compiled/@workflow/world-vercel/index.js +13 -13
  60. package/dist/src/compiled/_chunks/workflow/{attribute-changes-DeZc2RZz.js → attribute-changes-1LmTKuTT.js} +1 -1
  61. package/dist/src/compiled/_chunks/workflow/{private-Cre8uYkA.js → private-BcwCGTV5.js} +1 -1
  62. package/dist/src/compiled/_chunks/workflow/{resume-hook-ip1hbn1b.js → resume-hook-D1_5NCZ6.js} +1 -1
  63. package/dist/src/compiled/_chunks/workflow/{run-CWytxfIp.js → run-C240Ctf4.js} +1 -1
  64. package/dist/src/compiled/_chunks/workflow/sleep-De802yfX.js +1 -0
  65. package/dist/src/compiled/_chunks/workflow/{wait-until-De9yESQN.js → wait-until-z48sPUjU.js} +2 -2
  66. package/dist/src/compiled/shadcn-registry/index.d.ts +1 -0
  67. package/dist/src/evals/assertions/collector.d.ts +2 -10
  68. package/dist/src/evals/assertions/collector.js +1 -1
  69. package/dist/src/evals/cli/eval.d.ts +6 -2
  70. package/dist/src/evals/cli/eval.js +2 -2
  71. package/dist/src/evals/cli/filter.d.ts +14 -0
  72. package/dist/src/evals/cli/filter.js +1 -0
  73. package/dist/src/evals/context.js +1 -1
  74. package/dist/src/evals/diagnostics.d.ts +8 -0
  75. package/dist/src/evals/diagnostics.js +1 -0
  76. package/dist/src/evals/expect/index.d.ts +1 -1
  77. package/dist/src/evals/expect/index.js +1 -1
  78. package/dist/src/evals/index.d.ts +1 -1
  79. package/dist/src/evals/judge.js +2 -1
  80. package/dist/src/evals/runner/artifacts.js +1 -1
  81. package/dist/src/evals/runner/reporters/assertion-diagnostics.d.ts +3 -0
  82. package/dist/src/evals/runner/reporters/assertion-diagnostics.js +3 -0
  83. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  84. package/dist/src/evals/runner/reporters/console.js +1 -1
  85. package/dist/src/evals/runner/reporters/junit.js +2 -2
  86. package/dist/src/evals/types.d.ts +21 -5
  87. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  88. package/dist/src/execution/turn-cancellation-control.js +1 -1
  89. package/dist/src/execution/turn-workflow.js +1 -1
  90. package/dist/src/execution/workflow-runtime.js +1 -1
  91. package/dist/src/execution/workflow-steps.d.ts +7 -0
  92. package/dist/src/execution/workflow-steps.js +1 -1
  93. package/dist/src/harness/turn-sleep.d.ts +12 -0
  94. package/dist/src/harness/turn-sleep.js +1 -0
  95. package/dist/src/internal/application/compiled-artifacts.js +7 -7
  96. package/dist/src/internal/application/package.js +1 -1
  97. package/dist/src/internal/nitro/host/dev-authored-source-watcher.d.ts +4 -0
  98. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  99. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  100. package/dist/src/internal/workflow/development-world-protocol.js +1 -1
  101. package/dist/src/internal/workflow/world-target.d.ts +7 -0
  102. package/dist/src/internal/workflow/world-target.js +1 -0
  103. package/dist/src/protocol/routes.d.ts +4 -0
  104. package/dist/src/protocol/routes.js +1 -1
  105. package/dist/src/public/tools/sleep/index.d.ts +18 -0
  106. package/dist/src/public/tools/sleep/index.js +1 -0
  107. package/dist/src/runtime/framework-tools/sleep.d.ts +15 -0
  108. package/dist/src/runtime/framework-tools/sleep.js +1 -0
  109. package/dist/src/services/dev-client/runtime-artifacts.d.ts +7 -0
  110. package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
  111. package/dist/src/setup/boxes/apply-ai-gateway-credential.js +1 -1
  112. package/dist/src/setup/boxes/deploy-project.d.ts +3 -3
  113. package/dist/src/setup/flows/deploy.js +1 -1
  114. package/dist/src/setup/flows/ensure-vercel-project.d.ts +17 -0
  115. package/dist/src/setup/flows/ensure-vercel-project.js +1 -0
  116. package/dist/src/setup/flows/in-project.d.ts +1 -1
  117. package/dist/src/setup/flows/link.js +1 -1
  118. package/dist/src/setup/flows/model.js +1 -1
  119. package/dist/src/setup/flows/provider.js +1 -1
  120. package/dist/src/setup/flows/registry.d.ts +20 -0
  121. package/dist/src/setup/flows/registry.js +1 -0
  122. package/dist/src/setup/index.d.ts +0 -1
  123. package/dist/src/setup/index.js +1 -1
  124. package/dist/src/setup/{channel-setup-environment.d.ts → integrations/channels/environment.d.ts} +2 -2
  125. package/dist/src/setup/integrations/channels/environment.js +1 -0
  126. package/dist/src/setup/{channel-setup-integrations.d.ts → integrations/channels/index.d.ts} +3 -3
  127. package/dist/src/setup/integrations/channels/index.js +1 -0
  128. package/dist/src/setup/{channel-setup-runner.d.ts → integrations/channels/runner.d.ts} +1 -1
  129. package/dist/src/setup/integrations/channels/runner.js +1 -0
  130. package/dist/src/setup/{boxes/add-channels.d.ts → integrations/channels/setup.d.ts} +32 -22
  131. package/dist/src/setup/integrations/channels/setup.js +2 -0
  132. package/dist/src/setup/{channel-setup-slack.d.ts → integrations/channels/slack.d.ts} +1 -1
  133. package/dist/src/setup/integrations/channels/slack.js +1 -0
  134. package/dist/src/setup/{channel-setup-integration.d.ts → integrations/channels/types.d.ts} +23 -7
  135. package/dist/src/setup/{channel-setup-ui.d.ts → integrations/channels/ui.d.ts} +2 -2
  136. package/dist/src/setup/integrations/channels/ui.js +2 -0
  137. package/dist/src/setup/{channel-setup-web.d.ts → integrations/channels/web.d.ts} +1 -1
  138. package/dist/src/setup/integrations/channels/web.js +1 -0
  139. package/dist/src/setup/primitives/run-vercel.d.ts +1 -0
  140. package/dist/src/setup/primitives/run-vercel.js +1 -1
  141. package/dist/src/setup/prompter.d.ts +16 -3
  142. package/dist/src/setup/prompter.js +1 -1
  143. package/dist/src/setup/registry-setup-client.d.ts +18 -0
  144. package/dist/src/setup/registry-setup-client.js +2 -0
  145. package/dist/src/setup/registry-setup-protocol.d.ts +93 -0
  146. package/dist/src/setup/registry-setup-protocol.js +1 -0
  147. package/dist/src/setup/scaffold/channels-catalog.d.ts +1 -1
  148. package/dist/src/setup/scaffold/create/extension.js +2 -2
  149. package/dist/src/setup/scaffold/create/project.js +2 -2
  150. package/dist/src/setup/scaffold/create-in-place.d.ts +1 -0
  151. package/dist/src/setup/scaffold/create-in-place.js +1 -0
  152. package/dist/src/setup/scaffold/index.js +1 -1
  153. package/dist/src/setup/scaffold/update/connections.js +3 -3
  154. package/dist/src/setup/scaffold/update/update-connection-connector.js +1 -1
  155. package/dist/src/setup/vercel-project-framework.d.ts +1 -1
  156. package/dist/src/setup/vercel-project-framework.js +1 -1
  157. package/dist/src/setup/vercel-project.d.ts +17 -2
  158. package/dist/src/setup/vercel-project.js +0 -0
  159. package/dist/src/svelte/index.js +1 -1
  160. package/dist/src/svelte/use-eve-agent.js +1 -1
  161. package/dist/src/vue/index.js +1 -1
  162. package/dist/src/vue/use-eve-agent.js +1 -1
  163. package/docs/channels/overview.mdx +1 -1
  164. package/docs/channels/slack.mdx +2 -2
  165. package/docs/concepts/default-harness.md +12 -0
  166. package/docs/evals/assertions.mdx +8 -1
  167. package/docs/evals/judge.mdx +11 -1
  168. package/docs/evals/reporters.mdx +1 -1
  169. package/docs/evals/running.mdx +3 -0
  170. package/docs/guides/dev-tui.md +9 -14
  171. package/docs/guides/instrumentation.md +1 -1
  172. package/docs/reference/cli.md +25 -38
  173. package/docs/reference/typescript-api.md +2 -1
  174. package/docs/tutorial/ship-it.mdx +2 -2
  175. package/package.json +11 -6
  176. package/dist/src/compiled/@workflow/core/runtime/world-target.d.ts +0 -11
  177. package/dist/src/compiled/_chunks/workflow/sleep-BjrUxUcs.js +0 -1
  178. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/index.js +0 -1
  179. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/parse-name.js +0 -1
  180. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/promise.js +0 -1
  181. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/time.js +0 -1
  182. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/workflow-routes.js +0 -1
  183. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/world-target.js +0 -1
  184. package/dist/src/node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js +0 -1
  185. package/dist/src/setup/boxes/add-channels.js +0 -2
  186. package/dist/src/setup/boxes/add-connections.d.ts +0 -26
  187. package/dist/src/setup/boxes/add-connections.js +0 -1
  188. package/dist/src/setup/boxes/install-channel-registry-items.d.ts +0 -8
  189. package/dist/src/setup/boxes/install-channel-registry-items.js +0 -1
  190. package/dist/src/setup/boxes/one-shot-next-steps.d.ts +0 -18
  191. package/dist/src/setup/boxes/one-shot-next-steps.js +0 -2
  192. package/dist/src/setup/boxes/preflight.d.ts +0 -37
  193. package/dist/src/setup/boxes/preflight.js +0 -1
  194. package/dist/src/setup/boxes/resolve-target.d.ts +0 -58
  195. package/dist/src/setup/boxes/resolve-target.js +0 -1
  196. package/dist/src/setup/boxes/scaffold.d.ts +0 -40
  197. package/dist/src/setup/boxes/scaffold.js +0 -1
  198. package/dist/src/setup/boxes/select-channels.d.ts +0 -49
  199. package/dist/src/setup/boxes/select-channels.js +0 -1
  200. package/dist/src/setup/boxes/select-chat.d.ts +0 -38
  201. package/dist/src/setup/boxes/select-chat.js +0 -1
  202. package/dist/src/setup/boxes/select-connections.d.ts +0 -30
  203. package/dist/src/setup/boxes/select-connections.js +0 -1
  204. package/dist/src/setup/boxes/select-setup-mode.d.ts +0 -32
  205. package/dist/src/setup/boxes/select-setup-mode.js +0 -1
  206. package/dist/src/setup/channel-setup-deployment.d.ts +0 -11
  207. package/dist/src/setup/channel-setup-deployment.js +0 -1
  208. package/dist/src/setup/channel-setup-environment.js +0 -1
  209. package/dist/src/setup/channel-setup-integration.js +0 -1
  210. package/dist/src/setup/channel-setup-integrations.js +0 -1
  211. package/dist/src/setup/channel-setup-runner.js +0 -1
  212. package/dist/src/setup/channel-setup-slack.js +0 -1
  213. package/dist/src/setup/channel-setup-ui.js +0 -2
  214. package/dist/src/setup/channel-setup-web.js +0 -1
  215. package/dist/src/setup/flows/channels.d.ts +0 -57
  216. package/dist/src/setup/flows/channels.js +0 -1
  217. package/dist/src/setup/flows/connections.d.ts +0 -37
  218. package/dist/src/setup/flows/connections.js +0 -3
  219. package/dist/src/setup/onboarding.d.ts +0 -60
  220. package/dist/src/setup/onboarding.js +0 -1
  221. /package/dist/src/{node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/pluralize.js → setup/integrations/channels/types.js} +0 -0
@@ -1,15 +1,15 @@
1
- import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-commands.js";import{buildAgentHeader}from"./agent-header.js";import{renderAttentionRows,renderBlockLines}from"./blocks.js";import{dismissTypeahead,inlineCommandHint,isTypeaheadOpen,moveTypeaheadSelection,renderCommandSuggestions,selectedTypeaheadCommand,typeaheadCompletion,typeaheadFor}from"./command-typeahead.js";import{formatDevRebuildStatus,summarizeChangedFiles}from"./dev-rebuild-status.js";import{formatStoredDiagnostic,presentDiagnostic}from"./diagnostic-presentation.js";import{interruptedError}from"./errors.js";import{FileContentCache}from"./file-content-cache.js";import{EMPTY_LINE,PromptHistory,applyLineEditorKey,deleteForward,layoutPromptInput,lineOf,movePromptLine,visibleLine}from"./line-editor.js";import{nextLogDisplayMode}from"./log-display-mode.js";import{MessageQueue,renderMessageQueueRows}from"./message-queue.js";import{initialModelEditorState,transitionModelEditor}from"./model-editor.js";import{promptPlaceholder}from"./prompt-placeholder.js";import{initialProviderPickerState,transitionProviderPicker}from"./provider-picker.js";import{renderQuestionPanel}from"./question-panel.js";import{enterBadge,renderAcknowledgeQuestion,renderFlowPanel,renderModelEditorQuestion,renderSelectQuestion,renderTextQuestion}from"./setup-panel.js";import{buildStatusLine}from"./status-line.js";import{createTheme,detectUnicode}from"./theme.js";import{isPanelRoutedTool,presentPreparingTool,presentTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{groupToolBlocksForDisplay}from"./tool-block-groups.js";import{TurnClock}from"./turn-clock.js";import{allTodoItemsSettled,readTodoToolItems,renderFinishedTodoRows,renderTodoPanelRows}from"./todo-panel.js";import{reduceSetupSelectInput,setupSelectionIntent}from"./setup-selection-input.js";import{formatAssistantResponseStats,formatTokenFlow,formatTurnDuration,isIncompletePaste,nextKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil,typewriterText}from"./stream-format.js";import{inspectError}from"#internal/logging.js";import{eveVersionTag}from"#cli/banner.js";import{clipVisible,renderInputText,renderInputWithBlockCursor,stripAnsi,stripTerminalControls}from"#cli/ui/terminal-text.js";import{renderCursorRow}from"#setup/cli/option-row.js";import{initialSelectState,reduceSelect,searchActionQuery,selectValueAtCursor}from"#setup/cli/select-state.js";import{toErrorMessage}from"#shared/errors.js";import{StringDecoder}from"node:string_decoder";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{parseDevRebuildLogLine}from"#internal/nitro/host/dev-watcher-log.js";import{LiveRegion}from"#cli/ui/live-region.js";import{PROGRESS_PULSE_ASCII_GLYPH,PROGRESS_PULSE_GLYPH,isProgressPulseVisible}from"#cli/ui/progress-pulse.js";import{readGatewayServiceTier}from"#shared/gateway-service-tier.js";function isMultiSelectRequest(e){return e.kind===`multi`||e.kind===`searchable-multi`}function moveActionCursor(e,t,n){return n===0?void 0:e===void 0?t===`down`?0:n-1:(e+(t===`down`?1:-1)+n)%n}function completedTurnStatus(e){return e.interrupted?`Interrupted`:e.cancelled?`Cancelled`:e.continueSession?`Ready`:`Done`}const STATUS={processing:`Working…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p=[];#m=new Map;#h=new Set;#g=[];#_=new Set;#v=new Map;#y=0;#b=new Map;#x=new FileContentCache;#S=new Set;#C;#w=!1;#T;#E=[];#D;#O=0;#k;#A;#j=``;#M=0;#N=new PromptHistory;#P=!1;#F;#I=!1;#L=Date.now();#R=!1;#z=new TurnClock;#B=EMPTY_LINE;#V=!1;#H={kind:`idle`};#U;#W=STATUS.processing;#G;#K=`eve`;#q=!1;#J=!1;#Y=!1;#X=!1;#Z=!1;#Q;#$=!0;#ee=0;#te=Date.now();#ne;#re;#ie;#ae=!1;#oe;#se=``;#ce=new StringDecoder(`utf8`);#le;#ue;#de;#fe=!1;#pe=!1;#me;#he;#ge;#_e;#ve;#ye;#be;#xe=``;#Se=``;#Ce;#we;#Te=0;#Ee;#De;#Oe;#ke;#Ae;#je;#Me=new MessageQueue;#Ne;#Pe=!1;#Fe;#Ie;#Le=!1;#Re;#ze;#Be;setupFlow={begin:(e,t)=>this.#Ke(e,t),end:e=>this.#qe(e?.preserveDiagnostics??!0),readSelect:e=>this.#Je(e),readEditableSelect:e=>this.#Xe(e),readProviderPicker:e=>this.#Ze(e),readModelEditor:e=>this.#Qe(e),readText:e=>this.#$e(e),readAcknowledge:e=>this.#et(e),readChoice:e=>this.#Ye(e),setStatus:e=>this.#ct(e),renderLine:(e,t)=>this.#lt(e,t),renderOutput:e=>this.#ut(e),waitForInterrupt:()=>this.#at()};constructor(t){this.#e=t?.input??process.stdin,this.#t=t?.output??process.stdout,this.#n=new LiveRegion(this.#t),this.#r=createTheme({color:t?.color??!0,unicode:t?.unicode??detectUnicode()}),this.#i=t?.tools??`auto-collapsed`,this.#a=t?.reasoning??`auto-collapsed`,this.#o=t?.subagents??`auto-collapsed`,this.#s=t?.connectionAuth??`full`,this.#c=t?.assistantResponseStats??`tokensPerSecond`,this.#ge=t?.contextSize,this.#l=t?.captureForeignOutput??this.#t===process.stdout,this.#u=t?.diagnostics,this.#Q=t?.onExitRequest,this.#f=t?.logs??`none`,this.#d=t?.availablePromptCommands??PROMPT_COMMANDS}renderAgentHeader(e){this.#K=e.name,this.#C=e,this.#ft();let t=this.#en().join(`
2
- `);if(this.#w){t!==this.#T&&(this.#T=t,this.#Ot({kind:`agent-header`,body:t,live:!1})),this.#Yt();return}this.#w=!0,this.#T=t,this.#n.flush(this.#en(),[])}async readPrompt(e){this.#ft(e),this.#Dt(),this.#At(),this.#P=!0,this.#I=!0,this.#H={kind:`idle`},this.#W=``;let r=this.#Me.restoreDraft()?.split(`
1
+ import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-commands.js";import{buildAgentHeader}from"./agent-header.js";import{renderAttentionRows,renderBlockLines}from"./blocks.js";import{dismissTypeahead,inlineCommandHint,isTypeaheadOpen,moveTypeaheadSelection,renderCommandSuggestions,selectedTypeaheadCommand,typeaheadCompletion,typeaheadFor}from"./command-typeahead.js";import{formatDevRebuildStatus,summarizeChangedFiles}from"./dev-rebuild-status.js";import{formatStoredDiagnostic,presentDiagnostic}from"./diagnostic-presentation.js";import{interruptedError}from"./errors.js";import{FileContentCache}from"./file-content-cache.js";import{EMPTY_LINE,PromptHistory,applyLineEditorKey,deleteForward,layoutPromptInput,lineOf,movePromptLine,visibleLine}from"./line-editor.js";import{nextLogDisplayMode}from"./log-display-mode.js";import{MessageQueue,renderMessageQueueRows}from"./message-queue.js";import{initialModelEditorState,transitionModelEditor}from"./model-editor.js";import{promptPlaceholder}from"./prompt-placeholder.js";import{initialProviderPickerState,transitionProviderPicker}from"./provider-picker.js";import{renderQuestionPanel}from"./question-panel.js";import{enterBadge,renderAcknowledgeQuestion,renderFlowPanel,renderModelEditorQuestion,renderSelectQuestion,renderTextQuestion}from"./setup-panel.js";import{buildStatusLine}from"./status-line.js";import{createTheme,detectUnicode}from"./theme.js";import{isPanelRoutedTool,presentPreparingTool,presentTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{groupToolBlocksForDisplay}from"./tool-block-groups.js";import{TurnClock}from"./turn-clock.js";import{allTodoItemsSettled,readTodoToolItems,renderFinishedTodoRows,renderTodoPanelRows}from"./todo-panel.js";import{reduceSetupSelectInput,setupSelectionIntent}from"./setup-selection-input.js";import{formatAssistantResponseStats,formatTokenFlow,formatTurnDuration,isIncompletePaste,nextKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil,typewriterText}from"./stream-format.js";import{inspectError}from"#internal/logging.js";import{eveVersionTag}from"#cli/banner.js";import{clipVisible,renderInputText,renderInputWithBlockCursor,stripAnsi,stripTerminalControls}from"#cli/ui/terminal-text.js";import{renderCursorRow}from"#setup/cli/option-row.js";import{initialSelectState,reduceSelect,searchActionQuery,selectValueAtCursor}from"#setup/cli/select-state.js";import{toErrorMessage}from"#shared/errors.js";import{StringDecoder}from"node:string_decoder";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{parseDevRebuildLogLine}from"#internal/nitro/host/dev-watcher-log.js";import{LiveRegion}from"#cli/ui/live-region.js";import{PROGRESS_PULSE_ASCII_GLYPH,PROGRESS_PULSE_GLYPH,isProgressPulseVisible}from"#cli/ui/progress-pulse.js";import{readGatewayServiceTier}from"#shared/gateway-service-tier.js";function isMultiSelectRequest(e){return e.kind===`multi`||e.kind===`searchable-multi`}function moveActionCursor(e,t,n){return n===0?void 0:e===void 0?t===`down`?0:n-1:(e+(t===`down`?1:-1)+n)%n}function completedTurnStatus(e){return e.interrupted?`Interrupted`:e.cancelled?`Cancelled`:e.continueSession?`Ready`:`Done`}const STATUS={processing:`Working…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p=[];#m=new Map;#h=new Set;#g=[];#_=new Set;#v=new Map;#y=0;#b=new Map;#x=new FileContentCache;#S=new Set;#C;#w=!1;#T;#E=[];#D;#O=0;#k;#A;#j=``;#M=0;#N=new PromptHistory;#P=!1;#F;#I=!1;#L=Date.now();#R=!1;#z=new TurnClock;#B=EMPTY_LINE;#V=!1;#H={kind:`idle`};#U;#W=STATUS.processing;#G;#K=`eve`;#q=!1;#J=!1;#Y=!1;#X=!1;#Z=!1;#Q;#$=!0;#ee=0;#te=Date.now();#ne;#re;#ie;#ae=!1;#oe;#se=``;#ce=new StringDecoder(`utf8`);#le;#ue;#de;#fe=!1;#pe=!1;#me;#he;#ge;#_e;#ve;#ye;#be;#xe=``;#Se=``;#Ce;#we;#Te=0;#Ee;#De;#Oe;#ke;#Ae;#je;#Me=new MessageQueue;#Ne;#Pe=!1;#Fe;#Ie;#Le=!1;#Re;#ze;#Be;setupFlow={begin:(e,t)=>this.#Ke(e,t),end:e=>this.#qe(e?.preserveDiagnostics??!0),readSelect:e=>this.#Je(e),readEditableSelect:e=>this.#Xe(e),readProviderPicker:e=>this.#Ze(e),readModelEditor:e=>this.#Qe(e),readText:e=>this.#$e(e),readAcknowledge:e=>this.#et(e),readChoice:e=>this.#Ye(e),setStatus:e=>this.#ct(e),renderLine:(e,t)=>this.#lt(e,t),renderOutput:e=>this.#ut(e),withInheritedStdio:e=>this.#dt(e),withExclusiveTerminal:e=>this.#dt(e),waitForInterrupt:e=>this.#at(e)};constructor(t){this.#e=t?.input??process.stdin,this.#t=t?.output??process.stdout,this.#n=new LiveRegion(this.#t),this.#r=createTheme({color:t?.color??!0,unicode:t?.unicode??detectUnicode()}),this.#i=t?.tools??`auto-collapsed`,this.#a=t?.reasoning??`auto-collapsed`,this.#o=t?.subagents??`auto-collapsed`,this.#s=t?.connectionAuth??`full`,this.#c=t?.assistantResponseStats??`tokensPerSecond`,this.#ge=t?.contextSize,this.#l=t?.captureForeignOutput??this.#t===process.stdout,this.#u=t?.diagnostics,this.#Q=t?.onExitRequest,this.#f=t?.logs??`none`,this.#d=t?.availablePromptCommands??PROMPT_COMMANDS}renderAgentHeader(e){this.#K=e.name,this.#C=e,this.#pt();let t=this.#tn().join(`
2
+ `);if(this.#w){t!==this.#T&&(this.#T=t,this.#kt({kind:`agent-header`,body:t,live:!1})),this.#Xt();return}this.#w=!0,this.#T=t,this.#n.flush(this.#tn(),[])}async readPrompt(e){this.#pt(e),this.#Ot(),this.#jt(),this.#P=!0,this.#I=!0,this.#H={kind:`idle`},this.#W=``;let r=this.#Me.restoreDraft()?.split(`
3
3
  `).map(stripPromptControlCharacters).join(`
4
- `),i=stripPromptControlCharacters(e?.initialDraft??this.#B.text),a=lineOf(r===void 0?i:i.length===0?r:`${r}\n\n${i}`);return this.#B=EMPTY_LINE,this.#N.begin(a.text),this.#Ve(a),this.#F=typeaheadFor(this.#d,a.text),this.#St(),this.#Yt(),await new Promise((e,r)=>{this.#U=r;let apply=e=>{a=e,this.#wt(),this.#Ve(a),this.#F=typeaheadFor(this.#d,e.text,this.#F),this.#Yt()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#F=void 0,this.#Ct(),this.#mt(),r(interruptedError())},suggestions=()=>this.#F!==void 0&&isTypeaheadOpen(this.#F)?this.#F:void 0,highlighted=()=>{let e=suggestions();return e===void 0?void 0:selectedTypeaheadCommand(e)};this.#oe=r=>{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.#F=moveTypeaheadSelection(e,-1),this.#Yt();break}let t=movePromptLine(a,`up`);t===void 0?recall(this.#N.previous(a.text)):apply(t);break}case`down`:case`ctrl-n`:{let e=suggestions();if(e!==void 0){this.#F=moveTypeaheadSelection(e,1),this.#Yt();break}let t=movePromptLine(a,`down`);t===void 0?recall(this.#N.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.#F=dismissTypeahead(e),this.#Yt());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.#F=void 0,this.#N.add(i),this.#P=!1,this.#Ct(),this.#W=STATUS.processing,isPromptControlCommand(i)?this.#Ot({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#Et(),this.#kt(i),this.#Ee=i,this.#z.arm()),this.#Ve(EMPTY_LINE),this.#Yt(),this.#gt(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#dt(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#Qt();break;case`ctrl-r`:this.#Yt();break;case`ctrl-c`:a.text.length===0?(this.#dt(),interrupt()):apply(EMPTY_LINE);break;default:break}},this.#ht()})}#Ve(e){this.#j=e.text,this.#M=e.cursor}takeQueuedPrompt(){let e=this.#Me.view().steering,t=this.#Me.takePrompt();return t!==void 0&&(this.#Ie=e?`steer`:`queue`),t}async renderStream(e,t){this.#ft(t),this.#h.clear(),this.#P=!1,this.#H.kind!==`waiting`&&(this.#H={kind:`waiting`,startedAtMs:Date.now()}),this.#W=this.#O>0?STATUS.connectionAuth:STATUS.processing,this.#jt(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#u?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#z.armed&&this.#z.arm(),this.#X=!1,this.#Pe=!1,this.#Le=!1,this.#Re=t?.submittedPrompt,this.#Me.beginTurn(),this.#Ne=e.cancel,this.#me=void 0,this.#he=void 0,this.#_e=void 0,this.#ve=void 0,this.#ye=Date.now();let n={tools:t?.tools??this.#i,reasoning:t?.reasoning??this.#a,assistantResponseStats:t?.assistantResponseStats??this.#c};this.#Tt(),this.#V=!0,this.#Yt();let r=new Promise(e=>{this.#de=e});this.#oe=e=>this.#xt(e),this.#ht();let i={text:new Map,reasoning:new Map,tools:new Map};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#X)break;this.#Lt(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Mt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Mt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#de=void 0,this.#X&&e.abort?.(),this.#Ne=void 0,this.#gt(),this.#Dt(),this.#V=!1,this.#H.kind===`waiting`&&(this.#H={kind:`idle`}),this.#W=completedTurnStatus({interrupted:this.#X,cancelled:this.#Pe,continueSession:t?.continueSession===!0}),this.#Wt(i),(this.#X||this.#Pe)&&this.#Ut(),this.#It(),this.#u?.reportStats(),this.#Yt(),t?.continueSession||this.#mt()}}async readToolApproval(e,t){return this.#ft(t),this.#Dt(),this.#P=!1,this.#H={kind:`idle`},this.#W=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#X=!1,this.#Yt(),await new Promise((t,n)=>{this.#U=n,this.#oe=r=>{switch(r.type){case`text`:{if(r.framing!==`unframed`)break;let n=r.value.toLowerCase();n===`y`?(this.#Et(),this.#W=STATUS.processing,this.#gt(),this.#Yt(),t({approved:!0})):n===`n`&&(this.#Et(),this.#W=STATUS.processing,this.#Ue(e.toolCallId),this.#gt(),this.#Yt(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#Yt();break;case`ctrl-c`:this.#X=!0,this.#mt(),n(interruptedError());break;default:break}},this.#ht()})}async readInputQuestion(e,t){this.#ft(t),this.#Dt(),this.#P=!1,this.#I=!1,this.#H={kind:`idle`},this.#X=!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.#$},this.#r,t),renderTextSection=()=>{this.#Pt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#r),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#St():(this.#Ct(),this.#wt())};s===`overlay`?(s=`overlay`,this.#P=!1,this.#Ft(o),this.#De=overlayPanel,this.#W=``,syncFreeformCaret(),this.#Yt()):(s=`text`,this.#De=void 0,renderTextSection(),this.#P=!0,this.#Ve(l),this.#W=``,this.#St(),this.#Yt());let finalize=t=>{this.#De=void 0,this.#Pt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#r.colors.dim(this.#r.glyph.elbow)} ${stripTerminalControls(t.label)}`,preformatted:!0,live:!1}),this.#P=!1,this.#Et(),this.#W=STATUS.processing,this.#Ct(),this.#gt(),this.#Yt();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#De=void 0,this.#Pt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#r.colors.dim(this.#r.glyph.elbow)} ${this.#r.colors.dim(`Dismissed.`)}`,preformatted:!0,live:!1}),this.#P=!1,this.#W=``,this.#Ct(),this.#gt(),this.#Yt(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#Yt())},selectOptionAt=e=>{let t=n[e];t&&u(finalize({optionId:t.id,label:t.label}))},u;return await new Promise((t,r)=>{this.#U=r,u=t,this.#oe=t=>{if(t.type===`ctrl-c`){if((s===`text`||isOnFreeformRow())&&l.text.length>0){l=EMPTY_LINE,this.#wt(),s===`text`&&this.#Ve(l),this.#Yt();return}this.#X=!0,this.#De=void 0,this.#Ct(),this.#mt(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#Yt();return}if(s===`overlay`){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.#wt(),this.#Yt();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#wt(),this.#Yt());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.#Yt())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#wt(),this.#Ve(l),this.#Yt();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#wt(),this.#Ve(l),this.#Yt());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.#wt(),this.#Ve(l),this.#Yt();break}dismiss();break;default:break}},this.#ht()})}upsertSubagentStep(e){if(this.#u?.recordSubagentDispatch(e.callId),this.#o===`hidden`)return;let t=stripTerminalControls(e.reasoning??``).trim(),n=stripTerminalControls(e.message??``).trim();if(!(t.length===0&&n.length===0)){if(this.#Nt(e.callId,e.subagentName),this.#o===`collapsed`){this.#Yt();return}this.#Pt({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,subagentCallId:e.callId,depth:1,reasoning:t,body:n,collapsed:this.#o!==`full`,live:!e.finalized}),this.#Yt()}}upsertSubagentTool(e){if(this.#u?.recordSubagentDispatch(e.callId),e.status===`failed`&&e.errorText!==void 0&&this.#u?.append({source:`tool`,summary:`${e.toolName} failed (subagent ${e.subagentName})`,detail:e.errorText}),this.#o===`hidden`)return;if(this.#Nt(e.callId,e.subagentName),this.#o===`collapsed`){this.#Yt();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#Vt({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.#o===`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.#Pt(r),this.#He(e.callId),this.#Yt()}#He(e){applyCohortLiveness(this.#p.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#Ft(subagentToolSectionId(e.callId,e.childCallId)),this.#Yt()}subagents={begin:e=>this.beginSubagent(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.#o===`hidden`)return;this.#Nt(e.callId,e.name);let t=this.#m.get(subagentHeaderId(e.callId));t?.status===`done`&&delete t.status,this.#Yt()}completeSubagent(e){let t=this.#m.get(subagentHeaderId(e.callId));t!==void 0&&(t.status=`done`,this.#Yt())}markChildToolCallId(e){this.#_.add(e);let t=this.#v.get(e);t!==void 0&&(this.#Ft(t),this.#v.delete(e),this.#Yt())}#Ue(e){let t=this.#m.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#s===`hidden`)return;let t=connectionAuthTerminalMessage(e.state);this.#Pt({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.#Yt()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#O)return;let n=this.#O>0;this.#O=t,t>0?(this.#W=STATUS.connectionAuth,this.#Yt()):n&&(this.#W=STATUS.processing,this.#Yt())}setVercelStatus(e){this.#k=e,this.#Yt()}setRemoteConnectionStatus(e){this.#A=e,this.#Yt()}reset(){this.#p=[],this.#m.clear(),this.#h.clear(),this.#D=void 0,this.#E.length=0,this.#g.length=0,this.#w=!1,this.#T=void 0,this.#We(),this.#R=!1,this.#Ee=void 0,this.#we=void 0,this.#O=0,this.#me=void 0,this.#he=void 0,this.#_e=void 0,this.#ve=void 0,this.#ye=void 0,this.#q&&(this.#n.clearAll(),this.#Yt())}renderSessionBoundary(){this.#At(),this.#We();let e=this.#r.colors,t=this.#r.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#Ot({kind:`session-boundary`,body:n,live:!1}),this.#Yt()}#We(){this.#_.clear(),this.#v.clear(),this.#S.clear(),this.#b.clear(),this.#Ae=void 0,this.#je=void 0,this.#Me.reset(),this.#Ie=void 0,this.#x.clear(),this.#z.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#ft(),this.#Ot({kind:`notice`,body:t,live:!1}),this.#Yt())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#u?.append({source:`sandbox`,detail:t}),this.#ft(),this.#Ot({kind:`sandbox`,body:t,live:!1}),this.#Yt())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#Ge();return}this.#ft(),this.#ke=t,this.#Yt()}clearSetupWarning(){this.#Ge()}#Ge(){this.#ke!==void 0&&(this.#ke=void 0,this.#Yt())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#ft();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#Ot(r),this.#Yt()}renderCommandResult(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#ft(),this.#Ot({kind:`result`,body:t,live:!1}),this.#Yt())}#Ke(e,t=`spinner`){this.#ft(),this.#P=!1,this.#H={kind:`idle`},this.#W=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Oe={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Tt(),this.#Yt()}#qe(e){this.#ze=void 0,this.#st();let t=this.#Oe;if(t!==void 0){if(this.#Oe=void 0,this.#Dt(),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.#Ot({kind:`flow`,title:`info`,body:e.join(`
5
- `),live:!1}),this.#Ot({kind:`flow`,title:n.tone,body:n.text,live:!1})),e=[]}}this.#Yt()}}async#Je(e){let t=this.#tt(),n=isMultiSelectRequest(e),r=e.kind===`search`?e.searchAction:void 0,i=e.options,a={options:i,searchAction:r,submitRow:n};`initialValue`in e&&e.initialValue!==void 0&&(a.defaultValue=e.initialValue),`initialValues`in e&&e.initialValues!==void 0&&(a.initialValues=e.initialValues);let o=initialSelectState(a),s,c=!1,l=0,isCurrentSearch=e=>e===l,clearSearch=()=>{l+=1,c=!1,o=reduceSelect(o,{type:`clear`},{options:i,searchAction:r,submitRow:n}),this.#Yt()},loadSearch=async(e,t)=>{c=!0,s=void 0;let a=++l;this.#Yt();try{let s=await t(e);if(!isCurrentSearch(a))return;let c=o.filter;i=s,o={...initialSelectState({options:s,searchAction:r,submitRow:n}),filter:c}}catch(e){isCurrentSearch(a)&&(s=toErrorMessage(e))}finally{isCurrentSearch(a)&&(c=!1,this.#Yt())}},u=e.notices;if(e.kind===`task-list`||e.kind===`search`&&e.layout===`task-list`){let n=t.taskListLineStart??t.lines.length,r=t.lines.slice(n).filter(e=>e.tone===`success`||e.tone===`warning`||e.tone===`error`).map(e=>({tone:e.tone,text:e.text}));u=[...e.notices??[],...r],t.taskListLineStart=t.lines.length,t.hideLinesWhileQuestion=!0}let panelState=()=>{let t={...e,options:i,select:o};return u!==void 0&&u.length>0&&(t.notices=u),s!==void 0&&(t.error=s),c&&(t.loadingFrame=this.#nn()),t};return t.question=e=>renderSelectQuestion(panelState(),this.#r,e),this.#Yt(),await this.#it((t,a)=>{let close=e=>{l+=1,a(e)};if(c){t.type===`ctrl-c`?close(void 0):t.type===`escape`?clearSearch():t.type===`ctrl-r`&&this.#Yt();return}let u={key:t,options:i,searchAction:r,select:o},d=reduceSetupSelectInput(n?{...u,kind:e.kind,required:e.required}:{...u,kind:e.kind});switch(d.kind){case`cancel`:close(void 0);return;case`repaint`:this.#Yt();return;case`update`:o=d.select,s=void 0,this.#Yt();return;case`submit`:{let e=searchActionQuery(d.values[0]??``),t=r?.load;if(e===void 0||t===void 0){close(d.values);return}loadSearch(e,t);return}case`error`:s=d.message,this.#Yt();return;case`ignore`:return}}).promise}#Ye(e){this.#ft();let t=this.#nt();t.status={kind:`progress`,text:stripTerminalControls(e.status)};let n;t.question=t=>renderSelectQuestion({kind:`actions`,context:e.context,actions:e.actions,cursor:n},this.#r,t),this.#Yt();let r=this.#it((t,r)=>{let i=setupSelectionIntent(t);switch(i?.kind){case`cancel`:r(void 0);return;case`move`:n=moveActionCursor(n,i.direction,e.actions.length),this.#Yt();return;case`repaint`:this.#Yt();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#Xe(e){let t=this.#tt(),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.#$,editor:{kind:`rename`,editor:i,defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint}}};return a!==void 0&&(n.error=a),renderSelectQuestion(n,this.#r,t)};let onEditableRow=()=>selectValueAtCursor([...e.options],r.cursor)===e.editable.value,syncEditableRow=()=>{onEditableRow()?this.#St():(i=lineOf(``),this.#Ct())};return syncEditableRow(),this.#Yt(),await this.#it((t,n)=>{let applyEditor=e=>{i=e,a=void 0,this.#wt(),this.#Yt()},applySelect=t=>{r=reduceSelect(r,t,{options:e.options}),a=void 0,syncEditableRow(),this.#Yt()},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.#Yt();return}n(o===e.editable.defaultValue?{kind:`selected`,value:t}:{kind:`edited`,value:t,text:o})},o=setupSelectionIntent(t);switch(o?.kind){case`cancel`:n(void 0);return;case`move`:applySelect({type:o.direction});return;case`submit`:submit();return;case`repaint`:this.#Yt();return;case void 0:break}if(!onEditableRow())return;let s=applyLineEditorKey(i,t);s!==void 0&&applyEditor(s)},()=>this.#Ct()).promise}async#Ze(e){let t=this.#tt(),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.#r,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:`own-key`,caretVisible:this.#$,editor:{kind:`key`,phase:n.phase}}};return r!==void 0&&(i.cursorBadge=r),renderSelectQuestion(i,this.#r,t)};let syncCaret=()=>{n.phase.kind===`editing`||n.phase.kind===`invalid`?this.#St():this.#Ct()};return syncCaret(),this.#Yt(),await this.#it((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.#Yt();return;case`cancel`:i(void 0);return;case`render`:n=o.state,syncCaret(),this.#Yt();return;case`validate`:{n=o.state,syncCaret(),this.#Yt();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);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.#Yt();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.#wt(),dispatch({type:`edit`,editor:s}))},()=>{r?.abort(),r=void 0,this.#Ct()}).promise}async#Qe(e){let t=this.#tt(),n=initialModelEditorState(e);return t.question=t=>renderModelEditorQuestion({request:e,state:n},this.#r,t),this.#Yt(),await this.#it((t,r)=>{let dispatch=t=>{let i=transitionModelEditor(n,t,e);switch(i.kind){case`ignore`:return;case`render`:n=i.state,this.#Yt();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.#Yt();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#$e(e){let t=this.#tt(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder!==void 0&&(i.placeholder=e.placeholder),e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#r,t,this.#$)},this.#St(),this.#Yt(),await this.#it((t,i)=>{let apply=e=>{n=e,r=void 0,this.#wt(),this.#Yt()},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.#Yt();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#Yt();return}i(t);return}default:return}},()=>this.#Ct()).promise}async#et(e){let t=this.#tt();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#r,t),this.#Yt(),await this.#it((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#Yt();return;default:return}}).promise}#tt(){return this.#ft(),this.#P=!1,this.#H={kind:`idle`},this.#W=``,this.#nt()}#nt(){return this.#Oe===void 0&&(this.#Oe={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Oe}#rt(){this.#Oe?.implicit===!0?this.#Oe=void 0:this.#Oe!==void 0&&(this.#Oe.question=void 0,this.#Oe.hideLinesWhileQuestion=!1),this.#oe=void 0,this.#gt(),this.#Oe!==void 0&&this.#ot(),this.#Yt()}#it(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#rt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#rt(),i(e))};return this.#bt(),this.#oe=t=>{t.type===`ctrl-c`&&this.#dt(),e(t,settle,reject)},this.#ht(),{promise:a,settle}}#at(){let e,t=new Promise(t=>{e=t});return this.#ze=e,this.#ot(),{promise:t,dispose:()=>{this.#ze===e&&(this.#ze=void 0,this.#st())}}}#ot(){if(this.#ze===void 0)return;let consumer=e=>{if(e.type===`ctrl-c`||e.type===`escape`){e.type===`ctrl-c`&&this.#dt();let t=this.#ze;this.#ze=void 0,this.#st(),t?.();return}e.type===`ctrl-r`&&this.#Yt()};this.#Be=consumer,this.#bt(),this.#oe=consumer,this.#ht()}#st(){this.#Be!==void 0&&(this.#oe===this.#Be&&this.#gt(),this.#Be=void 0)}#ct(e){let t=e===void 0?void 0:typeof e==`string`?{kind:`progress`,text:stripTerminalControls(e)}:{kind:`external-action`,text:stripTerminalControls(e.text),emphasis:stripTerminalControls(e.emphasis)};if(this.#Oe!==void 0){this.#Oe.status=t,t===void 0&&(this.#Oe.preview=void 0),this.#Yt();return}if(!(this.#P||this.#V)){if(t===void 0){this.#H={kind:`idle`},this.#G=void 0,this.#Dt(),this.#Yt();return}this.#ft(),this.#Et(),this.#G=t.text,this.#Yt()}}#lt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Oe;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.#Yt();return}this.#ft(),this.#Ot({kind:`flow`,title:t,body:n,live:!1}),this.#Yt()}#ut(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Oe;if(n===void 0){this.#lt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#Yt()}setSessionId(e){this.#Fe=e}shutdown(){if(this.#mt(),this.#J&&!this.#Y){this.#Y=!0;let e=this.#Fe===void 0?``:` ${this.#r.glyph.dot} session ${this.#Fe}`;this.#t.write(`${this.#r.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}requestInterrupt(){this.#X=!0,this.#Oe!==void 0&&this.#oe?.({type:`ctrl-c`}),this.#de?.(),this.#mt()}exitRequested(){return this.#Z}#dt(){this.#Z=!0,this.#Q?.()}#ft(e){this.#K=e?.title??this.#K,e?.contextSize!==void 0&&(this.#ge=e.contextSize),!this.#q&&(this.#q=!0,this.#J=!0,this.#n.reset(),this.#n.hideCursor(),this.#gn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#ue=()=>this.#Yt(),this.#t.on(`resize`,this.#ue),process.on(`exit`,this.#pt))}#pt=()=>{this.#q&&(this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#mt(){let e=this.#U;if(this.#U=void 0,e?.(interruptedError()),this.#gt(),this.#Ct(),this.#Dt(),this.#ie!==void 0&&(clearTimeout(this.#ie),this.#ie=void 0),this.#ae=!1,this.#q){this.#Tn();for(let e of this.#p)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#Yt(),this.#n.clear(),this.#n.showCursor(),this.#_n(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#ue&&=(this.#t.off(`resize`,this.#ue),void 0),process.off(`exit`,this.#pt),this.#q=!1}}#ht(){this.#e.off(`data`,this.#_t),this.#e.on(`data`,this.#_t),this.#se.length>0&&queueMicrotask(()=>{this.#oe!==void 0&&this.#se.length>0&&(this.#yt(),this.#vt())})}#gt(){this.#e.off(`data`,this.#_t),this.#bt(),this.#oe=void 0}#_t=e=>{this.#bt(),this.#se+=this.#ce.write(e),this.#yt(),this.#vt()};#vt(){if(this.#se===`\x1B`){this.#le=setTimeout(()=>{this.#se===`\x1B`&&(this.#se=``,this.#oe?.({type:`escape`}))},30),this.#le.unref?.();return}if(isIncompletePaste(this.#se)){let e=this.#se;this.#le=setTimeout(()=>{if(this.#se!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#se=``,t.length>0&&this.#oe?.({type:`text`,value:t,framing:`bracketed-paste`})},1e3),this.#le.unref?.()}}#yt(){for(;this.#se.length>0;){let e=nextKey(this.#se);if(e.incomplete)return;this.#se=this.#se.slice(e.consumed),e.key&&e.key.type!==`ignore`&&this.#oe?.(e.key)}}#bt(){this.#le&&=(clearTimeout(this.#le),void 0)}#xt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#Yt();break;case`ctrl-c`:this.#X||(this.#X=!0,this.#H={kind:`idle`},this.#W=`Interrupted`,this.#de?.(),this.#Yt());break;case`enter`:{let e=this.#B.text;if(e.trim().length===0)break;this.#Me.enqueue(e)&&(this.#B=EMPTY_LINE),this.#Yt();break}case`escape`:{if(this.#Me.idle&&this.#Ne===void 0)break;let e=this.#Me.handleEscape();(e===`steer`||e===`cancel`)&&(this.#Le=!0,this.#Ne?.()),this.#Yt();break}default:{this.#Me.disarm();let t=applyLineEditorKey(this.#B,e,{multiline:!0});t!==void 0&&(this.#B=t,this.#Yt());break}}}#St(){this.#Ct(),this.#wt(),this.#ne=setInterval(()=>{this.#$=!this.#$,this.#Yt()},500),this.#ne.unref?.()}#Ct(){this.#ne&&=(clearInterval(this.#ne),void 0),this.#$=!0}#wt(){this.#$=!0}#Tt(){this.#Dt(),this.#re=setInterval(()=>{this.#ee+=1,this.#Yt()},90),this.#re.unref?.()}#Et(){let e=Date.now();this.#te=e,this.#H={kind:`waiting`,startedAtMs:e},this.#Tt()}#Dt(){this.#re&&=(clearInterval(this.#re),void 0)}#Ot(e){e.id!==this.#we?.id&&this.#Tn(),e.updateSeq=++this.#y,this.#p.push(e),e.id&&this.#m.set(e.id,e)}#kt(e){this.#R=!0,this.#Ot({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#Yt()}#At(){let e=this.#z.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#sn(e.elapsedMs)}`,n=this.#he??0;if(this.#ge!==void 0&&this.#ge>0&&n>0){let e=Math.round(n/this.#ge*100);t+=` ${this.#r.glyph.dot} ${e}% context`}this.#Ot({kind:`turn-stats`,body:t,live:!1})}#jt(e){if(e==null)return;let t=this.#Ie;if(this.#Ie=void 0,this.#Ee===e){this.#Ee=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Ot(n)}#Mt(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.#u?.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.#u===void 0?a:`details: ${this.#u.displayPath}`),this.#Ot(c),this.#Yt()}#Nt(e,t){if(this.#S.has(e))return;this.#S.add(e);let n=stripTerminalControls(t),r=this.#b.get(n)??[];if(r.push(e),this.#b.set(n,r),r.length===2){let e=this.#m.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.#Ot(i)}#Pt(e){if(e.id&&this.#h.has(e.id))return;let t=e.id?this.#m.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#y;return}this.#Ot(e)}#Ft(e){this.#p=this.#p.filter(t=>t.id!==e),this.#m.delete(e)}#It(){for(let e of this.#p)e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#Lt(e,t,n){switch(e.type){case`step-finish`:this.#u?.recordStepUsage(e.usage),e.usage!==void 0&&this.#z.addUsage(e.usage),this.#Wt(n),this.#Jt(e.usage),this.#Yt();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#Rt(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.#Rt(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.#zt(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.#zt(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#Bt({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#u?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#Bt({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.#Bt({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#qt(e.toolCallId,n);if(r===void 0)break;this.#Bt({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#qt(e.toolCallId,n);if(this.#u?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#Bt({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#qt(e.toolCallId,n);if(r===void 0)break;this.#Bt({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Mt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:this.#Pe=!0,!this.#Le&&this.#Re!==void 0&&this.#B.text.length===0&&(this.#B=lineOf(this.#Re),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#Jt(e.usage),this.#Yt();break}}#Rt(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Pt({id:e,kind:`assistant`,body:r,live:n}),this.#Yt())}#zt(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Pt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#Yt())}#Bt(e,t,n){if(n.tools.set(e.toolCallId,e),this.#_.has(e.toolCallId)||this.#Gt(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#v.set(e.toolCallId,r);let i=this.#Vt(e);this.#Pt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#Kt(n),this.#Yt()}#Vt(e){e.output!==void 0&&this.#x.observeRead(e.output);let t={};this.#Ht(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.#x.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}#Ht(e){let t=this.#C?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#Ut(){for(let e of this.#p)e.kind!==`tool`&&e.kind!==`subagent-tool`||e.status===`running`&&(e.status=`error`,e.result=`interrupted`,e.live=!1)}#Wt(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#v.get(t)??toolSectionId(t);this.#Ft(r),this.#v.delete(t)}}#Gt(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.#je!==e&&(this.#je=e,this.#Ot({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#mn(),this.#r).join(`
7
- `),live:!1})),this.#Ae=void 0}else this.#Ae=t.length>0?t:void 0,this.#je=void 0;return this.#Yt(),!0}#Kt(e){let t=[];for(let n of e.tools.values()){if(this.#_.has(n.toolCallId))continue;let e=this.#v.get(n.toolCallId)??toolSectionId(n.toolCallId),r=this.#m.get(e);r?.kind===`tool`&&t.push({block:r,active:isActiveToolStatus(n.status)})}applyCohortLiveness(t)}#qt(e,t){let n=t.tools.get(e);if(n!==void 0)return n;let r=this.#v.get(e)??toolSectionId(e),i=this.#m.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`}}#Jt(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#me=(t??0)+(n??0)),this.#he=t??this.#he,this.#_e=n??this.#_e,this.#_e!=null&&this.#ye!==void 0){let e=(Date.now()-this.#ye)/1e3;e>0&&(this.#ve=this.#_e/e)}}#Yt(){if(this.#q){if(this.#fe){this.#pe=!0;return}this.#fe=!0;try{do this.#pe=!1,this.#Xt();while(this.#pe)}finally{this.#fe=!1}}}#Xt(){if(!this.#q)return;let e=this.#mn(),t=this.#an(e),n=Math.max(1,this.#hn()-t.length),r=[],i=this.#D,a=groupToolBlocksForDisplay(this.#p),o=0;for(;o<a.length&&a[o].display.live===!1;)o+=1;if(o>0){let e=new Set(a.slice(0,o).flatMap(e=>e.members));for(let t=this.#p.length-1;t>=0;--t)e.has(this.#p[t])&&this.#p.splice(t,1)}for(let t of a.slice(0,o)){for(let e of t.members)this.#g.push(e),e.id&&(this.#h.add(e.id),this.#m.delete(e.id));if(this.#Dn(t.display))continue;let n=this.#tn(t.display,e,i);i=previousBlockOf(t.display),this.#D=i,r.push(...n),this.#E.push(...n)}let s=[];for(let{display:t}of a.slice(o)){if(this.#Dn(t))continue;let n=this.#tn(t,e,i);i=previousBlockOf(t);for(let e=0;e<n.length;e+=1)s.push({block:t,row:n[e]})}let c=[...clipLiveRows(s.map(e=>e.row),n,e,this.#r),...t];r.length>0?this.#n.flush(r,c):this.#n.update(c)}#Zt(){if(!this.#q)return;let e=this.#mn(),t=this.#an(e),n=Math.max(1,this.#hn()-t.length),r=this.#D,i=[];for(let{display:t}of groupToolBlocksForDisplay(this.#p)){if(this.#Dn(t))continue;let n=this.#tn(t,e,r);r=previousBlockOf(t),i.push(...n)}let a=[...clipLiveRows(i,n,e,this.#r),...t];this.#n.clearAll(),this.#n.flush([...this.#en(),...this.#E],a)}logDisplayMode(){return this.#f}setLogDisplayMode(e){e!==this.#f&&(this.#f=e,e===`all`&&this.flushDelayedDevBuildErrors(),this.#$t(),this.#q&&this.#Zt())}flushDelayedDevBuildErrors(){let e=this.#Ce;e!==void 0&&(this.#Ce=void 0,this.#Ot({kind:`log`,title:`stderr`,body:e,live:!0}),this.#Yt())}#Qt(){this.#ae=!0,this.#ie!==void 0&&clearTimeout(this.#ie),this.#ie=setTimeout(()=>{this.#ae=!1,this.#ie=void 0,this.#Yt()},5e3),this.setLogDisplayMode(nextLogDisplayMode(this.#f)),this.#Yt()}#$t(){let e=this.#mn();this.#E.length=0;let t;for(let{display:n}of groupToolBlocksForDisplay(this.#g,{logCoalescing:`runs`})){if(this.#Dn(n))continue;let r=this.#tn(n,e,t);t=previousBlockOf(n),this.#E.push(...r)}this.#D=t}#en(){let e=this.#C;if(e===void 0)return[];let t={name:e.name,theme:this.#r,width:this.#mn()};return e.info!==void 0&&(t.info=e.info),e.tip!==void 0&&(t.tip=e.tip),buildAgentHeader(t)}#tn(e,t,n){let r={activityPulse:this.#rn(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#r,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#nn(){return this.#r.spinner[this.#ee%this.#r.spinner.length]??``}#rn(e,t){return isProgressPulseVisible(Date.now()-e)?t:` `}#in(e,t){return e.indicator.kind===`spinner`?{glyph:this.#nn(),color:`yellow`}:{glyph:this.#rn(e.indicator.startedAtMs,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),color:t?.kind===`external-action`?`yellow`:`green`}}#an(e){let n=this.#r.colors,r=[``];if(this.#De!==void 0)return r.push(...this.#De(e),``),this.#dn(r,e),r;let a=this.#Oe;if(a!==void 0){let t=this.#in(a,a.status),n=a.status===void 0?void 0:{...a.status,indicator:t},i;if(a.question!==void 0){let t=a.question(e);i={kind:`question`,rows:t},n!==void 0&&(i={kind:`question`,rows:t,status:n})}else n===void 0?i=a.preview===void 0?{kind:`idle`,indicator:t}:{kind:`preview`,text:a.preview,indicator:t}:(i={kind:`status`,status:n},a.preview!==void 0&&(i={kind:`status`,status:n,preview:a.preview}));let o={title:a.title,lines:a.hideLinesWhileQuestion===!0?[]:a.lines,content:i};return r.push(...renderFlowPanel(o,this.#r,e)),this.#fn(r,e),r}this.#ke!==void 0&&r.push(...renderAttentionRows(this.#ke,e,this.#r),``),this.#Ae!==void 0&&r.push(...renderTodoPanelRows({items:this.#Ae,width:e,theme:this.#r,working:this.#V||this.#H.kind===`waiting`,pulse:this.#rn(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)}),``);let o=renderMessageQueueRows({view:this.#Me.view(),width:e,theme:this.#r,working:this.#V});if(o.length>0&&r.push(...o,``),this.#P){let i=this.#F===void 0?void 0:inlineCommandHint(this.#F);i===void 0&&this.#F!==void 0&&isTypeaheadOpen(this.#F)&&r.push(...renderCommandSuggestions(this.#F,this.#r,e));let a=isPromptControlCommand(this.#j),o=i?n.dim(` ${i}`):``,l=[];this.#dn(l,e);let d=Math.max(1,this.#hn()-1-r.length-1-l.length),f={text:this.#j,cursor:this.#M,width:e,theme:this.#r,caretVisible:this.#$,isCommand:a,ghost:o,maxRows:d};return this.#I&&this.#j.length===0&&(f.placeholder=this.#R?``:promptPlaceholder(Date.now()-this.#L)),r.push(...promptInputRows(f)),r.push(...l),r}let l=this.#H.kind===`waiting`&&this.#G===void 0;if(this.#V||l){r.push(this.#on(e)),this.#ln(r,e);let t=[];return this.#dn(t,e),!this.#V&&t.length>0&&r.push(``),r.push(...t),r}if(this.#B.text.length>0)return this.#un(r,e,{inert:!1}),this.#dn(r,e),r;let d=this.#G??(this.#W.length>0?this.#W:`Ready`),f=this.#pn(),p=n.dim(this.#r.glyph.dot),m=f?`${p} ${d} ${n.dim(this.#r.glyph.dot)} ${f}`:`${p} ${d}`;return r.push(clip(m,e)),this.#dn(r,e),r}#on(e){let t=this.#r.colors,n=this.#rn(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),r=this.#H,i=this.#z.startedAtMs??this.#ye??(r.kind===`waiting`?r.startedAtMs:Date.now()),a=Date.now()-i,o=`${typewriterText(`Working for`,a,80)} ${this.#sn(a)}`;return clip(`${t.yellow(n)} ${t.dim(o)}`,e)}#sn(e){return`${formatTurnDuration(e)}${this.#cn()}`}#cn(){let{inputTokens:e,outputTokens:t}=this.#z.usage;return e===0&&t===0?``:` ${this.#r.glyph.dash.repeat(2)} ${formatTokenFlow({inputTokens:e,outputTokens:t},this.#r.glyph)}`}#ln(e,t){this.#V&&this.#un(e,t,{inert:!0})}#un(e,t,n){e.push(``);let r={text:this.#B.text,cursor:this.#B.cursor,width:t,theme:this.#r,caretVisible:!0,isCommand:!1,ghost:``,maxRows:4,inert:n.inert};n.inert&&this.#B.text.length===0&&(r.placeholder=``),e.push(...promptInputRows(r))}#dn(e,t){let n=this.#A===void 0?``:` `,r=Math.max(1,t-n.length),i={theme:this.#r,width:r};this.#ae&&(i.logLevel=this.#f);let a=this.#C?.serverUrl;if(a!==void 0&&this.#A===void 0){let e=new URL(a).port;e.length>0&&(i.serverPort=e)}let o=this.#C?.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.#k!==void 0&&(i.vercel=this.#k),this.#A!==void 0&&(i.remote=this.#A);let c=buildStatusLine(i);c!==void 0&&e.push(clip(`${n}${c}`,t))}#fn(e,t){if(this.#A===void 0)return;let n=Math.max(1,t-2),r=buildStatusLine({remote:this.#A,theme:this.#r,width:n});r!==void 0&&e.push(``,clip(` ${r}`,t))}#pn(){let e=this.#r.colors,t=[],n=formatAssistantResponseStats({totalTokens:this.#me,outputTokens:this.#_e,tokensPerSecond:this.#ve},this.#c);return n&&t.push(n),t.length>0?e.dim(t.join(` ${this.#r.glyph.dot} `)):``}#mn(){return Math.max(20,this.#t.columns||80)}#hn(){return Math.max(8,this.#t.rows||24)}#gn(){if(this.#be!==void 0||!this.#l)return;this.#xe=``,this.#Se=``;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.#yn(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#u?.subscribeLogRecords(e=>this.#vn(e)),this.#be=()=>{this.#u?.unsubscribeLogRecords(),e(),t()}}#_n(){let e=this.#be;e!==void 0&&(this.#be=void 0,e(),this.#xe.length>0&&(this.#u?.append({source:`stdout`,detail:this.#xe}),this.#En(`stdout`)&&process.stdout.write(`${this.#xe}\n`),this.#xe=``),this.#Se.length>0&&(this.#u?.append({source:`stderr`,detail:this.#Se}),this.#En(`stderr`)&&process.stderr.write(`${this.#Se}\n`),this.#Se=``))}#vn(e){let t=e.fields===void 0?``:` ${JSON.stringify(e.fields)}`;this.#xn(`[eve:${e.namespace}] ${e.message}${t}`),this.#Yt()}#yn(e,t){let n=(e===`stdout`?this.#xe:this.#Se)+t,r=n.lastIndexOf(`
8
- `),i=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#xe=i:this.#Se=i,r===-1)return;let a=stripAnsi(n.slice(0,r)).replace(/\s+$/u,``);a.trim().length!==0&&(this.#u?.append({source:e,detail:a}),e===`stdout`?this.#bn(a):this.#xn(a),this.#Yt())}#bn(e){let t=[],flushPending=()=>{if(t.length===0)return;let e=t.join(`
9
- `);t=[],e.trim().length!==0&&this.#Ot({kind:`log`,title:`stdout`,body:e,live:!0})};for(let n of e.split(`
10
- `)){let e=parseSandboxLogLine(n.trimEnd());if(e!==void 0){flushPending(),this.#Ot({kind:`sandbox`,body:e,live:!1});continue}let r=parseDevRebuildLogLine(n.trimEnd());if(r===void 0){t.push(n);continue}flushPending(),this.#Cn(r,n.trimEnd())}flushPending()}#xn(e){let t=e.split(`
11
- `),n=t.findIndex(e=>parseDevRebuildLogLine(e.trimEnd())?.kind===`failed`);if(n===-1){if(this.#u===void 0){this.#Ot({kind:`log`,title:`stderr`,body:e,live:!0});return}let t=presentDiagnostic(e,this.#u.displayPath);if(t.kind===`inline`){this.#Ot({kind:`log`,title:`stderr`,body:t.text,live:!0});return}this.#Ot({kind:`log`,title:`stderr`,body:formatStoredDiagnostic(t),logVisibility:`stderr-only`,live:!0}),this.#Ot({kind:`log`,title:`stderr`,body:e,logVisibility:`all-only`,live:!0});return}let r=t.slice(0,n).join(`
12
- `);r.trim().length>0&&this.#Ot({kind:`log`,title:`stderr`,body:r,live:!0});let i=t.slice(n).join(`
13
- `);this.#Sn(i)}#Sn(e){if(this.#f===`all`){if(e.trim().length===0)return;this.#Ot({kind:`log`,title:`stderr`,body:e,live:!0});return}this.#Ce=e}#Cn(e,t){let n=this.#wn();if(e.kind===`failed`){this.#Sn(t);return}if(e.kind===`rebuilding`){let t=summarizeChangedFiles(e.events,e.more);if(n!==void 0){n.state.summary=t,n.block.body=formatDevRebuildStatus(t,`rebuilding`);return}let r=`dev-rebuild:${this.#Te}`;this.#Te+=1,this.#we={id:r,summary:t},this.#Ot({kind:`log`,id:r,title:`stdout`,body:formatDevRebuildStatus(t,`rebuilding`),live:!0});return}if(n!==void 0){n.block.body=formatDevRebuildStatus(n.state.summary,e.kind),e.kind===`rebuilt`&&(this.#Ce=void 0);return}e.kind===`rebuilt`&&(this.#Ce=void 0),this.#Ot({kind:`log`,title:`stdout`,body:t,live:!0})}#wn(){let e=this.#we;if(e===void 0)return;let t=this.#m.get(e.id);if(!(t===void 0||t.live!==!0))return{state:e,block:t}}#Tn(){let e=this.#we;if(e===void 0)return;this.#we=void 0;let t=this.#m.get(e.id);t!==void 0&&(t.live=!1)}#En(e){switch(this.#f){case`none`:return!1;case`stderr`:return e===`stderr`;case`sandbox`:return e===`sandbox`;case`all`:return!0}}#Dn(e){return e.kind===`sandbox`?!this.#En(`sandbox`):e.kind===`log`?e.logVisibility===`stderr-only`?this.#f!==`stderr`:e.logVisibility===`all-only`?this.#f!==`all`:!this.#En(e.title===`stderr`?`stderr`:`stdout`):!1}};function chunkToString(e,t){return typeof e==`string`?e:Buffer.from(e).toString(t)}async function*iterateTUIStream(e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}return}yield*e}function clip(e,t){return clipVisible(e,t)}function promptInputRows({text:e,cursor:t,width:n,theme:r,caretVisible:i,isCommand:a,ghost:o,maxRows:s,placeholder:c,inert:l}){let u=r.colors;if(e.length===0&&c!==void 0){let e=renderInputWithBlockCursor({...visibleLine({text:c,cursor:0},Math.max(1,n-3),r.glyph.ellipsis),visible:i,inverse:u.inverse,render:e=>u.dim(renderInputText(e))});return[clip(`${u.dim(r.glyph.promptIdle)} ${e}`,n),``]}let style=e=>{let t=renderInputText(e);return a&&t.length>0?u.blue(t):t},d=layoutPromptInput({text:e,cursor:t}),f=Math.min(Math.max(1,s),d.rows.length),p=Math.max(0,Math.min(d.caretRow-f+1,d.rows.length-f)),m=l===!0?u.dim(r.glyph.prompt):u.cyan(r.glyph.prompt),h=u.dim(r.glyph.ellipsis),g=Math.max(1,n-3),_=[];for(let e=p;e<p+f;e+=1){let t=d.rows[e],a=e===0?m:` `;(e===p&&p>0||e===p+f-1&&p+f<d.rows.length)&&(a=h);let s;if(e===d.caretRow){let{before:e,under:n,after:a}=visibleLine({text:t.text,cursor:d.caretOffset},g,r.glyph.ellipsis);s=renderInputWithBlockCursor({before:e,under:n,after:a,visible:i,inverse:u.inverse,render:style}),o.length>0&&d.rows.length===1&&(s+=o)}else s=style(t.text);_.push(clip(`${a} ${s}`,n))}return _.push(``),_}function previousBlockOf(e){let t={kind:e.kind};return e.title!==void 0&&(t.title=e.title),t}function isActiveToolStatus(e){return e===`running`||e===`approval`}function applyCohortLiveness(e){let t=e.some(e=>e.active);for(let n of e)n.block.live=t||n.active}function leadsWithGap(e,t){if(e.kind===`tool`&&(t?.kind===`user`||t?.kind===`assistant`||t?.kind===`question`))return!0;if(e.kind===`sandbox`&&t?.kind===`sandbox`)return!1;if(t?.kind===`sandbox`&&e.kind!==`sandbox`||t?.kind===`log`)return!0;switch(e.kind){case`user`:case`assistant`:case`reasoning`:case`subagent`:case`error`:case`notice`:case`question`:case`connection-auth`:case`sandbox`:case`log`:case`command`:case`warning`:case`flow`:case`turn-stats`:case`session-boundary`:case`todo-list`:case`agent-header`:return!0;default:return!1}}function parseSandboxLogLine(e){let t=e.trim();if(!t.startsWith(`eve: `))return;let n=t.slice(5);return/\bsandbox\b/i.test(n)&&!isLowValueSandboxLogLine(n)?n:void 0}function isLowValueSandboxLogLine(e){return/^initializing (?:\d+ )?sandbox templates?\b/i.test(e)||/^initialized \d+ sandbox\b/i.test(e)||/^reused cached sandbox template\b/i.test(e)||/^sandbox template "[^"]+" \([^)]+\): (checking|reusing|loading microsandbox runtime|microsandbox runtime ready)\b/i.test(e)}function clipLiveRows(e,t,n,r){if(e.length<=t)return[...e];if(t<=1)return[clip(hiddenRowsMarker(e.length,r),n)];let i=t-1;return[clip(hiddenRowsMarker(e.length-i,r),n),...e.slice(e.length-i)]}function hiddenRowsMarker(e,t){let n=e.toLocaleString(),r=e===1?`row`:`rows`;return t.colors.dim(`${t.glyph.dot} ${t.glyph.ellipsis} ${n} earlier ${r} hidden while streaming`)}function collapseReasoning(e,t){switch(e){case`collapsed`:return!0;case`auto-collapsed`:return!t;default:return!1}}function renderNativeToolBlock(e,t,n,r){let i=e.preparing===!0?presentPreparingTool(e.toolName,r):presentTool(e.toolName,e.input,r),a={id:t,kind:`tool`,title:stripTerminalControls(i.title),subtitle:stripTerminalControls(i.subtitle),status:e.status,live:e.status===`running`||e.status===`approval`,expanded:n,toolInput:e.input,toolName:e.toolName,toolGroup:i.group};return i.doneTitle!==void 0&&(a.doneTitle=stripTerminalControls(i.doneTitle)),i.detail!==void 0&&(a.detailLines=i.detail,a.keepDetailWhenDone=i.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(a.result=stripTerminalControls(e.errorText)):(a.result=i.summarizeResult(e.output),a.toolOutput=e.output),a}function writeExistedFlag(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e.existed;return typeof t==`boolean`?t:void 0}function subagentToolStatus(e){switch(e){case`preparing`:return`running`;case`approval-requested`:return`approval`;case`executing`:return`running`;case`done`:return`done`;case`failed`:return`error`;case`rejected`:return`denied`}}function formatToolApprovalTitle(e){return stripTerminalControls(e.title??e.toolName)}function toolSectionId(e){return`tool:${e}`}function questionSectionId(e){return`question:${e}`}function subagentHeaderId(e){return`subagent:${e}:header`}function subagentStepSectionId(e,t){return`subagent:${e}:step:${t}`}function subagentToolSectionId(e,t){return`subagent:${e}:tool:${t}`}function connectionAuthSectionId(e){return`connection-auth:${e}`}function connectionAuthTerminalMessage(e){switch(e){case`authorized`:return`Authorization complete`;case`declined`:return`Authorization declined`;case`failed`:return`Authorization failed`;case`timed-out`:return`Authorization timed out`;case`required`:case`pending`:return}}function formatConnectionAuthContent(e,t){let n=[];if(t!==void 0)n.push(t);else{let t=stripTerminalControls(e.description);t.length>0&&n.push(t);let r=e.challenge;r?.url&&n.push(`URL: ${stripTerminalControls(r.url)}`),r?.userCode&&n.push(`Code: ${stripTerminalControls(r.userCode)}`),r?.expiresAt&&n.push(`Expires: ${stripTerminalControls(r.expiresAt)}`),r?.instructions&&n.push(stripTerminalControls(r.instructions))}if(e.reason!==void 0){let t=stripTerminalControls(e.reason);t.length>0&&n.push(`Reason: ${t}`)}return n.join(`
4
+ `),i=stripPromptControlCharacters(e?.initialDraft??this.#B.text),a=lineOf(r===void 0?i:i.length===0?r:`${r}\n\n${i}`);return this.#B=EMPTY_LINE,this.#N.begin(a.text),this.#Ve(a),this.#F=typeaheadFor(this.#d,a.text),this.#Ct(),this.#Xt(),await new Promise((e,r)=>{this.#U=r;let apply=e=>{a=e,this.#Tt(),this.#Ve(a),this.#F=typeaheadFor(this.#d,e.text,this.#F),this.#Xt()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#F=void 0,this.#wt(),this.#ht(),r(interruptedError())},suggestions=()=>this.#F!==void 0&&isTypeaheadOpen(this.#F)?this.#F:void 0,highlighted=()=>{let e=suggestions();return e===void 0?void 0:selectedTypeaheadCommand(e)};this.#oe=r=>{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.#F=moveTypeaheadSelection(e,-1),this.#Xt();break}let t=movePromptLine(a,`up`);t===void 0?recall(this.#N.previous(a.text)):apply(t);break}case`down`:case`ctrl-n`:{let e=suggestions();if(e!==void 0){this.#F=moveTypeaheadSelection(e,1),this.#Xt();break}let t=movePromptLine(a,`down`);t===void 0?recall(this.#N.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.#F=dismissTypeahead(e),this.#Xt());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.#F=void 0,this.#N.add(i),this.#P=!1,this.#wt(),this.#W=STATUS.processing,isPromptControlCommand(i)?this.#kt({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#Dt(),this.#At(i),this.#Ee=i,this.#z.arm()),this.#Ve(EMPTY_LINE),this.#Xt(),this.#_t(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#ft(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#$t();break;case`ctrl-r`:this.#Xt();break;case`ctrl-c`:a.text.length===0?(this.#ft(),interrupt()):apply(EMPTY_LINE);break;default:break}},this.#gt()})}#Ve(e){this.#j=e.text,this.#M=e.cursor}takeQueuedPrompt(){let e=this.#Me.view().steering,t=this.#Me.takePrompt();return t!==void 0&&(this.#Ie=e?`steer`:`queue`),t}async renderStream(e,t){this.#pt(t),this.#h.clear(),this.#P=!1,this.#H.kind!==`waiting`&&(this.#H={kind:`waiting`,startedAtMs:Date.now()}),this.#W=this.#O>0?STATUS.connectionAuth:STATUS.processing,this.#Mt(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#u?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#z.armed&&this.#z.arm(),this.#X=!1,this.#Pe=!1,this.#Le=!1,this.#Re=t?.submittedPrompt,this.#Me.beginTurn(),this.#Ne=e.cancel,this.#me=void 0,this.#he=void 0,this.#_e=void 0,this.#ve=void 0,this.#ye=Date.now();let n={tools:t?.tools??this.#i,reasoning:t?.reasoning??this.#a,assistantResponseStats:t?.assistantResponseStats??this.#c};this.#Et(),this.#V=!0,this.#Xt();let r=new Promise(e=>{this.#de=e});this.#oe=e=>this.#St(e),this.#gt();let i={text:new Map,reasoning:new Map,tools:new Map};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#X)break;this.#Rt(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Nt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Nt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#de=void 0,this.#X&&e.abort?.(),this.#Ne=void 0,this.#_t(),this.#Ot(),this.#V=!1,this.#H.kind===`waiting`&&(this.#H={kind:`idle`}),this.#W=completedTurnStatus({interrupted:this.#X,cancelled:this.#Pe,continueSession:t?.continueSession===!0}),this.#Gt(i),(this.#X||this.#Pe)&&this.#Wt(),this.#Lt(),this.#u?.reportStats(),this.#Xt(),t?.continueSession||this.#ht()}}async readToolApproval(e,t){return this.#pt(t),this.#Ot(),this.#P=!1,this.#H={kind:`idle`},this.#W=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#X=!1,this.#Xt(),await new Promise((t,n)=>{this.#U=n,this.#oe=r=>{switch(r.type){case`text`:{if(r.framing!==`unframed`)break;let n=r.value.toLowerCase();n===`y`?(this.#Dt(),this.#W=STATUS.processing,this.#_t(),this.#Xt(),t({approved:!0})):n===`n`&&(this.#Dt(),this.#W=STATUS.processing,this.#Ue(e.toolCallId),this.#_t(),this.#Xt(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#Xt();break;case`ctrl-c`:this.#X=!0,this.#ht(),n(interruptedError());break;default:break}},this.#gt()})}async readInputQuestion(e,t){this.#pt(t),this.#Ot(),this.#P=!1,this.#I=!1,this.#H={kind:`idle`},this.#X=!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.#$},this.#r,t),renderTextSection=()=>{this.#Ft({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#r),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#Ct():(this.#wt(),this.#Tt())};s===`overlay`?(s=`overlay`,this.#P=!1,this.#It(o),this.#De=overlayPanel,this.#W=``,syncFreeformCaret(),this.#Xt()):(s=`text`,this.#De=void 0,renderTextSection(),this.#P=!0,this.#Ve(l),this.#W=``,this.#Ct(),this.#Xt());let finalize=t=>{this.#De=void 0,this.#Ft({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#r.colors.dim(this.#r.glyph.elbow)} ${stripTerminalControls(t.label)}`,preformatted:!0,live:!1}),this.#P=!1,this.#Dt(),this.#W=STATUS.processing,this.#wt(),this.#_t(),this.#Xt();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#De=void 0,this.#Ft({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#r.colors.dim(this.#r.glyph.elbow)} ${this.#r.colors.dim(`Dismissed.`)}`,preformatted:!0,live:!1}),this.#P=!1,this.#W=``,this.#wt(),this.#_t(),this.#Xt(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#Xt())},selectOptionAt=e=>{let t=n[e];t&&u(finalize({optionId:t.id,label:t.label}))},u;return await new Promise((t,r)=>{this.#U=r,u=t,this.#oe=t=>{if(t.type===`ctrl-c`){if((s===`text`||isOnFreeformRow())&&l.text.length>0){l=EMPTY_LINE,this.#Tt(),s===`text`&&this.#Ve(l),this.#Xt();return}this.#X=!0,this.#De=void 0,this.#wt(),this.#ht(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#Xt();return}if(s===`overlay`){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.#Tt(),this.#Xt();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#Tt(),this.#Xt());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.#Xt())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#Tt(),this.#Ve(l),this.#Xt();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#Tt(),this.#Ve(l),this.#Xt());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.#Tt(),this.#Ve(l),this.#Xt();break}dismiss();break;default:break}},this.#gt()})}upsertSubagentStep(e){if(this.#u?.recordSubagentDispatch(e.callId),this.#o===`hidden`)return;let t=stripTerminalControls(e.reasoning??``).trim(),n=stripTerminalControls(e.message??``).trim();if(!(t.length===0&&n.length===0)){if(this.#Pt(e.callId,e.subagentName),this.#o===`collapsed`){this.#Xt();return}this.#Ft({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,subagentCallId:e.callId,depth:1,reasoning:t,body:n,collapsed:this.#o!==`full`,live:!e.finalized}),this.#Xt()}}upsertSubagentTool(e){if(this.#u?.recordSubagentDispatch(e.callId),e.status===`failed`&&e.errorText!==void 0&&this.#u?.append({source:`tool`,summary:`${e.toolName} failed (subagent ${e.subagentName})`,detail:e.errorText}),this.#o===`hidden`)return;if(this.#Pt(e.callId,e.subagentName),this.#o===`collapsed`){this.#Xt();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#Ht({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.#o===`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.#Ft(r),this.#He(e.callId),this.#Xt()}#He(e){applyCohortLiveness(this.#p.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#It(subagentToolSectionId(e.callId,e.childCallId)),this.#Xt()}subagents={begin:e=>this.beginSubagent(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.#o===`hidden`)return;this.#Pt(e.callId,e.name);let t=this.#m.get(subagentHeaderId(e.callId));t?.status===`done`&&delete t.status,this.#Xt()}completeSubagent(e){let t=this.#m.get(subagentHeaderId(e.callId));t!==void 0&&(t.status=`done`,this.#Xt())}markChildToolCallId(e){this.#_.add(e);let t=this.#v.get(e);t!==void 0&&(this.#It(t),this.#v.delete(e),this.#Xt())}#Ue(e){let t=this.#m.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#s===`hidden`)return;let t=connectionAuthTerminalMessage(e.state);this.#Ft({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.#Xt()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#O)return;let n=this.#O>0;this.#O=t,t>0?(this.#W=STATUS.connectionAuth,this.#Xt()):n&&(this.#W=STATUS.processing,this.#Xt())}setVercelStatus(e){this.#k=e,this.#Xt()}setRemoteConnectionStatus(e){this.#A=e,this.#Xt()}reset(){this.#p=[],this.#m.clear(),this.#h.clear(),this.#D=void 0,this.#E.length=0,this.#g.length=0,this.#w=!1,this.#T=void 0,this.#We(),this.#R=!1,this.#Ee=void 0,this.#we=void 0,this.#O=0,this.#me=void 0,this.#he=void 0,this.#_e=void 0,this.#ve=void 0,this.#ye=void 0,this.#q&&(this.#n.clearAll(),this.#Xt())}renderSessionBoundary(){this.#jt(),this.#We();let e=this.#r.colors,t=this.#r.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#kt({kind:`session-boundary`,body:n,live:!1}),this.#Xt()}#We(){this.#_.clear(),this.#v.clear(),this.#S.clear(),this.#b.clear(),this.#Ae=void 0,this.#je=void 0,this.#Me.reset(),this.#Ie=void 0,this.#x.clear(),this.#z.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#pt(),this.#kt({kind:`notice`,body:t,live:!1}),this.#Xt())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#u?.append({source:`sandbox`,detail:t}),this.#pt(),this.#kt({kind:`sandbox`,body:t,live:!1}),this.#Xt())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#Ge();return}this.#pt(),this.#ke=t,this.#Xt()}clearSetupWarning(){this.#Ge()}#Ge(){this.#ke!==void 0&&(this.#ke=void 0,this.#Xt())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#pt();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#kt(r),this.#Xt()}renderCommandResult(e,t){let n=stripTerminalControls(e);n.trim().length!==0&&(this.#pt(),this.#kt(t===void 0?{kind:`result`,body:n,live:!1}:{kind:`flow`,title:t,body:n,live:!1}),this.#Xt())}#Ke(e,t=`spinner`){this.#pt(),this.#P=!1,this.#H={kind:`idle`},this.#W=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Oe={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Et(),this.#Xt()}#qe(e){this.#ze=void 0,this.#st();let t=this.#Oe;if(t!==void 0){if(this.#Oe=void 0,this.#Ot(),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.#kt({kind:`flow`,title:`info`,body:e.join(`
5
+ `),live:!1}),this.#kt({kind:`flow`,title:n.tone,body:n.text,live:!1})),e=[]}}this.#Xt()}}async#Je(e){let t=this.#tt(),n=isMultiSelectRequest(e),r=e.kind===`search`?e.searchAction:void 0,i=e.options,a={options:i,searchAction:r,submitRow:n};`initialValue`in e&&e.initialValue!==void 0&&(a.defaultValue=e.initialValue),`initialValues`in e&&e.initialValues!==void 0&&(a.initialValues=e.initialValues);let o=initialSelectState(a),s,c=!1,l=0,isCurrentSearch=e=>e===l,clearSearch=()=>{l+=1,c=!1,o=reduceSelect(o,{type:`clear`},{options:i,searchAction:r,submitRow:n}),this.#Xt()},loadSearch=async(e,t)=>{c=!0,s=void 0;let a=++l;this.#Xt();try{let s=await t(e);if(!isCurrentSearch(a))return;let c=o.filter;i=s,o={...initialSelectState({options:s,searchAction:r,submitRow:n}),filter:c}}catch(e){isCurrentSearch(a)&&(s=toErrorMessage(e))}finally{isCurrentSearch(a)&&(c=!1,this.#Xt())}},u=e.notices;if(e.kind===`task-list`||e.kind===`search`&&e.layout===`task-list`){let n=t.taskListLineStart??t.lines.length,r=t.lines.slice(n).filter(e=>e.tone===`success`||e.tone===`warning`||e.tone===`error`).map(e=>({tone:e.tone,text:e.text}));u=[...e.notices??[],...r],t.taskListLineStart=t.lines.length,t.hideLinesWhileQuestion=!0}let panelState=()=>{let t={...e,options:i,select:o};return u!==void 0&&u.length>0&&(t.notices=u),s!==void 0&&(t.error=s),c&&(t.loadingFrame=this.#rn()),t};return t.question=e=>renderSelectQuestion(panelState(),this.#r,e),this.#Xt(),await this.#it((t,a)=>{let close=e=>{l+=1,a(e)};if(c){t.type===`ctrl-c`?close(void 0):t.type===`escape`?clearSearch():t.type===`ctrl-r`&&this.#Xt();return}let u={key:t,options:i,searchAction:r,select:o},d=reduceSetupSelectInput(n?{...u,kind:e.kind,required:e.required}:{...u,kind:e.kind});switch(d.kind){case`cancel`:close(void 0);return;case`repaint`:this.#Xt();return;case`update`:o=d.select,s=void 0,this.#Xt();return;case`submit`:{let e=searchActionQuery(d.values[0]??``),t=r?.load;if(e===void 0||t===void 0){close(d.values);return}loadSearch(e,t);return}case`error`:s=d.message,this.#Xt();return;case`ignore`:return}}).promise}#Ye(e){this.#pt();let t=this.#nt();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.#r,t),this.#Xt();let r=this.#it((t,r)=>{let i=setupSelectionIntent(t);switch(i?.kind){case`cancel`:r(void 0);return;case`move`:n=moveActionCursor(n,i.direction,e.actions.length),this.#Xt();return;case`repaint`:this.#Xt();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#Xe(e){let t=this.#tt(),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.#$,editor:{kind:`rename`,editor:i,defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint}}};return a!==void 0&&(n.error=a),renderSelectQuestion(n,this.#r,t)};let onEditableRow=()=>selectValueAtCursor([...e.options],r.cursor)===e.editable.value,syncEditableRow=()=>{onEditableRow()?this.#Ct():(i=lineOf(``),this.#wt())};return syncEditableRow(),this.#Xt(),await this.#it((t,n)=>{let applyEditor=e=>{i=e,a=void 0,this.#Tt(),this.#Xt()},applySelect=t=>{r=reduceSelect(r,t,{options:e.options}),a=void 0,syncEditableRow(),this.#Xt()},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.#Xt();return}n(o===e.editable.defaultValue?{kind:`selected`,value:t}:{kind:`edited`,value:t,text:o})},o=setupSelectionIntent(t);switch(o?.kind){case`cancel`:n(void 0);return;case`move`:applySelect({type:o.direction});return;case`submit`:submit();return;case`repaint`:this.#Xt();return;case void 0:break}if(!onEditableRow())return;let s=applyLineEditorKey(i,t);s!==void 0&&applyEditor(s)},()=>this.#wt()).promise}async#Ze(e){let t=this.#tt(),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.#r,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:`own-key`,caretVisible:this.#$,editor:{kind:`key`,phase:n.phase}}};return r!==void 0&&(i.cursorBadge=r),renderSelectQuestion(i,this.#r,t)};let syncCaret=()=>{n.phase.kind===`editing`||n.phase.kind===`invalid`?this.#Ct():this.#wt()};return syncCaret(),this.#Xt(),await this.#it((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.#Xt();return;case`cancel`:i(void 0);return;case`render`:n=o.state,syncCaret(),this.#Xt();return;case`validate`:{n=o.state,syncCaret(),this.#Xt();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);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.#Xt();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.#Tt(),dispatch({type:`edit`,editor:s}))},()=>{r?.abort(),r=void 0,this.#wt()}).promise}async#Qe(e){let t=this.#tt(),n=initialModelEditorState(e);return t.question=t=>renderModelEditorQuestion({request:e,state:n},this.#r,t),this.#Xt(),await this.#it((t,r)=>{let dispatch=t=>{let i=transitionModelEditor(n,t,e);switch(i.kind){case`ignore`:return;case`render`:n=i.state,this.#Xt();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.#Xt();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#$e(e){let t=this.#tt(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder!==void 0&&(i.placeholder=e.placeholder),e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#r,t,this.#$)},this.#Ct(),this.#Xt(),await this.#it((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Tt(),this.#Xt()},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.#Xt();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#Xt();return}i(t);return}default:return}},()=>this.#wt()).promise}async#et(e){let t=this.#tt();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#r,t),this.#Xt(),await this.#it((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#Xt();return;default:return}}).promise}#tt(){return this.#pt(),this.#P=!1,this.#H={kind:`idle`},this.#W=``,this.#nt()}#nt(){return this.#Oe===void 0&&(this.#Oe={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Oe}#rt(){this.#Oe?.implicit===!0?this.#Oe=void 0:this.#Oe!==void 0&&(this.#Oe.question=void 0,this.#Oe.hideLinesWhileQuestion=!1),this.#oe=void 0,this.#_t(),this.#Oe!==void 0&&this.#ot(),this.#Xt()}#it(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#rt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#rt(),i(e))};return this.#xt(),this.#oe=t=>{t.type===`ctrl-c`&&this.#ft(),e(t,settle,reject)},this.#gt(),{promise:a,settle}}#at(e){let t,n=new Promise(e=>{t=e});return this.#ze=t,this.#ot(e?.interruptible??!0),{promise:n,dispose:()=>{this.#ze===t&&(this.#ze=void 0,this.#st())}}}#ot(e=!0){if(this.#ze===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#ft();let e=this.#ze;this.#ze=void 0,this.#st(),e?.();return}t.type===`ctrl-r`&&this.#Xt()};this.#Be=consumer,this.#xt(),this.#oe=consumer,this.#gt()}#st(){this.#Be!==void 0&&(this.#oe===this.#Be&&this.#_t(),this.#Be=void 0)}#ct(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.#Oe!==void 0){this.#Oe.status=t,t===void 0&&(this.#Oe.preview=void 0),this.#Xt();return}if(!(this.#P||this.#V)){if(t===void 0){this.#H={kind:`idle`},this.#G=void 0,this.#Ot(),this.#Xt();return}this.#pt(),this.#Dt(),this.#G=t.text,this.#Xt()}}#lt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Oe;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.#Xt();return}this.#pt(),this.#kt({kind:`flow`,title:t,body:n,live:!1}),this.#Xt()}#ut(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Oe;if(n===void 0){this.#lt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#Xt()}async#dt(e){this.#se=``,this.#xt(),this.#ze=void 0,this.#st(),this.#_t(),this.#Ot(),this.#n.clear(),this.#n.showCursor(),this.#vn(),this.#e.isTTY&&this.#e.setRawMode?.(!1),this.#e.pause();try{return await e()}finally{this.#e.isTTY&&this.#e.setRawMode?.(!0),this.#e.resume(),this.#se=``,this.#xt(),this.#n.hideCursor(),this.#_n(),this.#Oe!==void 0&&(this.#Et(),this.#ot()),this.#n.reset(),this.#Xt()}}setSessionId(e){this.#Fe=e}shutdown(){if(this.#ht(),this.#J&&!this.#Y){this.#Y=!0;let e=this.#Fe===void 0?``:` ${this.#r.glyph.dot} session ${this.#Fe}`;this.#t.write(`${this.#r.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}requestInterrupt(){this.#X=!0,this.#Oe!==void 0&&this.#oe?.({type:`ctrl-c`}),this.#de?.(),this.#ht()}exitRequested(){return this.#Z}#ft(){this.#Z=!0,this.#Q?.()}#pt(e){this.#K=e?.title??this.#K,e?.contextSize!==void 0&&(this.#ge=e.contextSize),!this.#q&&(this.#q=!0,this.#J=!0,this.#n.reset(),this.#n.hideCursor(),this.#_n(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#ue=()=>this.#Xt(),this.#t.on(`resize`,this.#ue),process.on(`exit`,this.#mt))}#mt=()=>{this.#q&&(this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#ht(){let e=this.#U;if(this.#U=void 0,e?.(interruptedError()),this.#_t(),this.#wt(),this.#Ot(),this.#ie!==void 0&&(clearTimeout(this.#ie),this.#ie=void 0),this.#ae=!1,this.#q){this.#En();for(let e of this.#p)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#Xt(),this.#n.clear(),this.#n.showCursor(),this.#vn(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#ue&&=(this.#t.off(`resize`,this.#ue),void 0),process.off(`exit`,this.#mt),this.#q=!1}}#gt(){this.#e.off(`data`,this.#vt),this.#e.on(`data`,this.#vt),this.#se.length>0&&queueMicrotask(()=>{this.#oe!==void 0&&this.#se.length>0&&(this.#bt(),this.#yt())})}#_t(){this.#e.off(`data`,this.#vt),this.#xt(),this.#oe=void 0}#vt=e=>{this.#xt(),this.#se+=this.#ce.write(e),this.#bt(),this.#yt()};#yt(){if(this.#se===`\x1B`){this.#le=setTimeout(()=>{this.#se===`\x1B`&&(this.#se=``,this.#oe?.({type:`escape`}))},30),this.#le.unref?.();return}if(isIncompletePaste(this.#se)){let e=this.#se;this.#le=setTimeout(()=>{if(this.#se!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#se=``,t.length>0&&this.#oe?.({type:`text`,value:t,framing:`bracketed-paste`})},1e3),this.#le.unref?.()}}#bt(){for(;this.#se.length>0;){let e=nextKey(this.#se);if(e.incomplete)return;this.#se=this.#se.slice(e.consumed),e.key&&e.key.type!==`ignore`&&this.#oe?.(e.key)}}#xt(){this.#le&&=(clearTimeout(this.#le),void 0)}#St(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#Xt();break;case`ctrl-c`:this.#X||(this.#X=!0,this.#H={kind:`idle`},this.#W=`Interrupted`,this.#de?.(),this.#Xt());break;case`enter`:{let e=this.#B.text;if(e.trim().length===0)break;this.#Me.enqueue(e)&&(this.#B=EMPTY_LINE),this.#Xt();break}case`escape`:{if(this.#Me.idle&&this.#Ne===void 0)break;let e=this.#Me.handleEscape();(e===`steer`||e===`cancel`)&&(this.#Le=!0,this.#Ne?.()),this.#Xt();break}default:{this.#Me.disarm();let t=applyLineEditorKey(this.#B,e,{multiline:!0});t!==void 0&&(this.#B=t,this.#Xt());break}}}#Ct(){this.#wt(),this.#Tt(),this.#ne=setInterval(()=>{this.#$=!this.#$,this.#Xt()},500),this.#ne.unref?.()}#wt(){this.#ne&&=(clearInterval(this.#ne),void 0),this.#$=!0}#Tt(){this.#$=!0}#Et(){this.#Ot(),this.#re=setInterval(()=>{this.#ee+=1,this.#Xt()},90),this.#re.unref?.()}#Dt(){let e=Date.now();this.#te=e,this.#H={kind:`waiting`,startedAtMs:e},this.#Et()}#Ot(){this.#re&&=(clearInterval(this.#re),void 0)}#kt(e){e.id!==this.#we?.id&&this.#En(),e.updateSeq=++this.#y,this.#p.push(e),e.id&&this.#m.set(e.id,e)}#At(e){this.#R=!0,this.#kt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#Xt()}#jt(){let e=this.#z.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#cn(e.elapsedMs)}`,n=this.#he??0;if(this.#ge!==void 0&&this.#ge>0&&n>0){let e=Math.round(n/this.#ge*100);t+=` ${this.#r.glyph.dot} ${e}% context`}this.#kt({kind:`turn-stats`,body:t,live:!1})}#Mt(e){if(e==null)return;let t=this.#Ie;if(this.#Ie=void 0,this.#Ee===e){this.#Ee=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#kt(n)}#Nt(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.#u?.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.#u===void 0?a:`details: ${this.#u.displayPath}`),this.#kt(c),this.#Xt()}#Pt(e,t){if(this.#S.has(e))return;this.#S.add(e);let n=stripTerminalControls(t),r=this.#b.get(n)??[];if(r.push(e),this.#b.set(n,r),r.length===2){let e=this.#m.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.#kt(i)}#Ft(e){if(e.id&&this.#h.has(e.id))return;let t=e.id?this.#m.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#y;return}this.#kt(e)}#It(e){this.#p=this.#p.filter(t=>t.id!==e),this.#m.delete(e)}#Lt(){for(let e of this.#p)e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#Rt(e,t,n){switch(e.type){case`step-finish`:this.#u?.recordStepUsage(e.usage),e.usage!==void 0&&this.#z.addUsage(e.usage),this.#Gt(n),this.#Yt(e.usage),this.#Xt();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#zt(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?stripTerminalControls(e.text??``):t;n.text.set(e.id,r),this.#zt(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;let r=(n.reasoning.get(e.id)??``)+stripTerminalControls(e.delta);if(n.reasoning.set(e.id,r),t.reasoning===`full`){this.#Bt(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.#Bt(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#Vt({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#u?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#Vt({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.#Vt({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#Jt(e.toolCallId,n);if(r===void 0)break;this.#Vt({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#Jt(e.toolCallId,n);if(this.#u?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#Vt({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#Jt(e.toolCallId,n);if(r===void 0)break;this.#Vt({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Nt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:this.#Pe=!0,!this.#Le&&this.#Re!==void 0&&this.#B.text.length===0&&(this.#B=lineOf(this.#Re),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#Yt(e.usage),this.#Xt();break}}#zt(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Ft({id:e,kind:`assistant`,body:r,live:n}),this.#Xt())}#Bt(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Ft({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#Xt())}#Vt(e,t,n){if(n.tools.set(e.toolCallId,e),this.#_.has(e.toolCallId)||this.#Kt(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#v.set(e.toolCallId,r);let i=this.#Ht(e);this.#Ft(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#qt(n),this.#Xt()}#Ht(e){e.output!==void 0&&this.#x.observeRead(e.output);let t={};this.#Ut(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.#x.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}#Ut(e){let t=this.#C?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#Wt(){for(let e of this.#p)e.kind!==`tool`&&e.kind!==`subagent-tool`||e.status===`running`&&(e.status=`error`,e.result=`interrupted`,e.live=!1)}#Gt(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#v.get(t)??toolSectionId(t);this.#It(r),this.#v.delete(t)}}#Kt(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.#je!==e&&(this.#je=e,this.#kt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#hn(),this.#r).join(`
7
+ `),live:!1})),this.#Ae=void 0}else this.#Ae=t.length>0?t:void 0,this.#je=void 0;return this.#Xt(),!0}#qt(e){let t=[];for(let n of e.tools.values()){if(this.#_.has(n.toolCallId))continue;let e=this.#v.get(n.toolCallId)??toolSectionId(n.toolCallId),r=this.#m.get(e);r?.kind===`tool`&&t.push({block:r,active:isActiveToolStatus(n.status)})}applyCohortLiveness(t)}#Jt(e,t){let n=t.tools.get(e);if(n!==void 0)return n;let r=this.#v.get(e)??toolSectionId(e),i=this.#m.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`}}#Yt(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#me=(t??0)+(n??0)),this.#he=t??this.#he,this.#_e=n??this.#_e,this.#_e!=null&&this.#ye!==void 0){let e=(Date.now()-this.#ye)/1e3;e>0&&(this.#ve=this.#_e/e)}}#Xt(){if(this.#q){if(this.#fe){this.#pe=!0;return}this.#fe=!0;try{do this.#pe=!1,this.#Zt();while(this.#pe)}finally{this.#fe=!1}}}#Zt(){if(!this.#q)return;let e=this.#hn(),t=this.#on(e),n=Math.max(1,this.#gn()-t.length),r=[],i=this.#D,a=groupToolBlocksForDisplay(this.#p),o=0;for(;o<a.length&&a[o].display.live===!1;)o+=1;if(o>0){let e=new Set(a.slice(0,o).flatMap(e=>e.members));for(let t=this.#p.length-1;t>=0;--t)e.has(this.#p[t])&&this.#p.splice(t,1)}for(let t of a.slice(0,o)){for(let e of t.members)this.#g.push(e),e.id&&(this.#h.add(e.id),this.#m.delete(e.id));if(this.#On(t.display))continue;let n=this.#nn(t.display,e,i);i=previousBlockOf(t.display),this.#D=i,r.push(...n),this.#E.push(...n)}let s=[];for(let{display:t}of a.slice(o)){if(this.#On(t))continue;let n=this.#nn(t,e,i);i=previousBlockOf(t);for(let e=0;e<n.length;e+=1)s.push({block:t,row:n[e]})}let c=[...clipLiveRows(s.map(e=>e.row),n,e,this.#r),...t];r.length>0?this.#n.flush(r,c):this.#n.update(c)}#Qt(){if(!this.#q)return;let e=this.#hn(),t=this.#on(e),n=Math.max(1,this.#gn()-t.length),r=this.#D,i=[];for(let{display:t}of groupToolBlocksForDisplay(this.#p)){if(this.#On(t))continue;let n=this.#nn(t,e,r);r=previousBlockOf(t),i.push(...n)}let a=[...clipLiveRows(i,n,e,this.#r),...t];this.#n.clearAll(),this.#n.flush([...this.#tn(),...this.#E],a)}logDisplayMode(){return this.#f}setLogDisplayMode(e){e!==this.#f&&(this.#f=e,e===`all`&&this.flushDelayedDevBuildErrors(),this.#en(),this.#q&&this.#Qt())}flushDelayedDevBuildErrors(){let e=this.#Ce;e!==void 0&&(this.#Ce=void 0,this.#kt({kind:`log`,title:`stderr`,body:e,live:!0}),this.#Xt())}#$t(){this.#ae=!0,this.#ie!==void 0&&clearTimeout(this.#ie),this.#ie=setTimeout(()=>{this.#ae=!1,this.#ie=void 0,this.#Xt()},5e3),this.setLogDisplayMode(nextLogDisplayMode(this.#f)),this.#Xt()}#en(){let e=this.#hn();this.#E.length=0;let t;for(let{display:n}of groupToolBlocksForDisplay(this.#g,{logCoalescing:`runs`})){if(this.#On(n))continue;let r=this.#nn(n,e,t);t=previousBlockOf(n),this.#E.push(...r)}this.#D=t}#tn(){let e=this.#C;if(e===void 0)return[];let t={name:e.name,theme:this.#r,width:this.#hn()};return e.info!==void 0&&(t.info=e.info),e.tip!==void 0&&(t.tip=e.tip),buildAgentHeader(t)}#nn(e,t,n){let r={activityPulse:this.#in(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#r,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#rn(){return this.#r.spinner[this.#ee%this.#r.spinner.length]??``}#in(e,t){return isProgressPulseVisible(Date.now()-e)?t:` `}#an(e,t){return e.indicator.kind===`spinner`?{glyph:this.#rn(),color:`yellow`}:{glyph:this.#in(e.indicator.startedAtMs,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),color:t?.kind===`external-action`?`yellow`:`green`}}#on(e){let n=this.#r.colors,r=[``];if(this.#De!==void 0)return r.push(...this.#De(e),``),this.#fn(r,e),r;let a=this.#Oe;if(a!==void 0){let t=this.#an(a,a.status),n;if(a.status!==void 0){let{startedAtMs:e,...r}=a.status,i=Date.now()-e,o=i>=5e3?` ${formatTurnDuration(i)}`:``;n={...r,text:`${r.text}${o}`,indicator:t}}let i;if(a.question!==void 0){let t=a.question(e);i={kind:`question`,rows:t},n!==void 0&&(i={kind:`question`,rows:t,status:n})}else n===void 0?i=a.preview===void 0?{kind:`idle`,indicator:t}:{kind:`preview`,text:a.preview,indicator:t}:(i={kind:`status`,status:n},a.preview!==void 0&&(i={kind:`status`,status:n,preview:a.preview}));let o={title:a.title,lines:a.hideLinesWhileQuestion===!0?[]:a.lines,content:i};return r.push(...renderFlowPanel(o,this.#r,e)),this.#pn(r,e),r}this.#ke!==void 0&&r.push(...renderAttentionRows(this.#ke,e,this.#r),``),this.#Ae!==void 0&&r.push(...renderTodoPanelRows({items:this.#Ae,width:e,theme:this.#r,working:this.#V||this.#H.kind===`waiting`,pulse:this.#in(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)}),``);let o=renderMessageQueueRows({view:this.#Me.view(),width:e,theme:this.#r,working:this.#V});if(o.length>0&&r.push(...o,``),this.#P){let i=this.#F===void 0?void 0:inlineCommandHint(this.#F);i===void 0&&this.#F!==void 0&&isTypeaheadOpen(this.#F)&&r.push(...renderCommandSuggestions(this.#F,this.#r,e));let a=isPromptControlCommand(this.#j),o=i?n.dim(` ${i}`):``,l=[];this.#fn(l,e);let d=Math.max(1,this.#gn()-1-r.length-1-l.length),f={text:this.#j,cursor:this.#M,width:e,theme:this.#r,caretVisible:this.#$,isCommand:a,ghost:o,maxRows:d};return this.#I&&this.#j.length===0&&(f.placeholder=this.#R?``:promptPlaceholder(Date.now()-this.#L)),r.push(...promptInputRows(f)),r.push(...l),r}let l=this.#H.kind===`waiting`&&this.#G===void 0;if(this.#V||l){r.push(this.#sn(e)),this.#un(r,e);let t=[];return this.#fn(t,e),!this.#V&&t.length>0&&r.push(``),r.push(...t),r}if(this.#B.text.length>0)return this.#dn(r,e,{inert:!1}),this.#fn(r,e),r;let d=this.#G??(this.#W.length>0?this.#W:`Ready`),f=this.#mn(),p=n.dim(this.#r.glyph.dot),m=f?`${p} ${d} ${n.dim(this.#r.glyph.dot)} ${f}`:`${p} ${d}`;return r.push(clip(m,e)),this.#fn(r,e),r}#sn(e){let t=this.#r.colors,n=this.#in(this.#te,this.#r.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),r=this.#H,i=this.#z.startedAtMs??this.#ye??(r.kind===`waiting`?r.startedAtMs:Date.now()),a=Date.now()-i,o=`${typewriterText(`Working for`,a,80)} ${this.#cn(a)}`;return clip(`${t.yellow(n)} ${t.dim(o)}`,e)}#cn(e){return`${formatTurnDuration(e)}${this.#ln()}`}#ln(){let{inputTokens:e,outputTokens:t}=this.#z.usage;return e===0&&t===0?``:` ${this.#r.glyph.dash.repeat(2)} ${formatTokenFlow({inputTokens:e,outputTokens:t},this.#r.glyph)}`}#un(e,t){this.#V&&this.#dn(e,t,{inert:!0})}#dn(e,t,n){e.push(``);let r={text:this.#B.text,cursor:this.#B.cursor,width:t,theme:this.#r,caretVisible:!0,isCommand:!1,ghost:``,maxRows:4,inert:n.inert};n.inert&&this.#B.text.length===0&&(r.placeholder=``),e.push(...promptInputRows(r))}#fn(e,t){let n=this.#A===void 0?``:` `,r=Math.max(1,t-n.length),i={theme:this.#r,width:r};this.#ae&&(i.logLevel=this.#f);let a=this.#C?.serverUrl;if(a!==void 0&&this.#A===void 0){let e=new URL(a).port;e.length>0&&(i.serverPort=e)}let o=this.#C?.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.#k!==void 0&&(i.vercel=this.#k),this.#A!==void 0&&(i.remote=this.#A);let c=buildStatusLine(i);c!==void 0&&e.push(clip(`${n}${c}`,t))}#pn(e,t){if(this.#A===void 0)return;let n=Math.max(1,t-2),r=buildStatusLine({remote:this.#A,theme:this.#r,width:n});r!==void 0&&e.push(``,clip(` ${r}`,t))}#mn(){let e=this.#r.colors,t=[],n=formatAssistantResponseStats({totalTokens:this.#me,outputTokens:this.#_e,tokensPerSecond:this.#ve},this.#c);return n&&t.push(n),t.length>0?e.dim(t.join(` ${this.#r.glyph.dot} `)):``}#hn(){return Math.max(20,this.#t.columns||80)}#gn(){return Math.max(8,this.#t.rows||24)}#_n(){if(this.#be!==void 0||!this.#l)return;this.#xe=``,this.#Se=``;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.#bn(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#u?.subscribeLogRecords(e=>this.#yn(e)),this.#be=()=>{this.#u?.unsubscribeLogRecords(),e(),t()}}#vn(){let e=this.#be;e!==void 0&&(this.#be=void 0,e(),this.#xe.length>0&&(this.#u?.append({source:`stdout`,detail:this.#xe}),this.#Dn(`stdout`)&&process.stdout.write(`${this.#xe}\n`),this.#xe=``),this.#Se.length>0&&(this.#u?.append({source:`stderr`,detail:this.#Se}),this.#Dn(`stderr`)&&process.stderr.write(`${this.#Se}\n`),this.#Se=``))}#yn(e){let t=e.fields===void 0?``:` ${JSON.stringify(e.fields)}`;this.#Sn(`[eve:${e.namespace}] ${e.message}${t}`),this.#Xt()}#bn(e,t){let n=(e===`stdout`?this.#xe:this.#Se)+t;if(e===`stdout`&&parseDevRebuildLogLine(n.trimEnd())!==void 0){this.#xe=``,this.#u?.append({source:e,detail:n.trimEnd()}),this.#xn(n.trimEnd()),this.#Xt();return}let r=n.lastIndexOf(`
8
+ `),i=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#xe=i:this.#Se=i,r===-1)return;let a=stripAnsi(n.slice(0,r)).replace(/\s+$/u,``);a.trim().length!==0&&(this.#u?.append({source:e,detail:a}),e===`stdout`?this.#xn(a):this.#Sn(a),this.#Xt())}#xn(e){let t=[],flushPending=()=>{if(t.length===0)return;let e=t.join(`
9
+ `);t=[],e.trim().length!==0&&this.#kt({kind:`log`,title:`stdout`,body:e,live:!0})};for(let n of e.split(`
10
+ `)){let e=parseSandboxLogLine(n.trimEnd());if(e!==void 0){flushPending(),this.#kt({kind:`sandbox`,body:e,live:!1});continue}let r=parseDevRebuildLogLine(n.trimEnd());if(r===void 0){t.push(n);continue}flushPending(),this.#wn(r,n.trimEnd())}flushPending()}#Sn(e){let t=e.split(`
11
+ `),n=t.findIndex(e=>parseDevRebuildLogLine(e.trimEnd())?.kind===`failed`);if(n===-1){if(this.#u===void 0){this.#kt({kind:`log`,title:`stderr`,body:e,live:!0});return}let t=presentDiagnostic(e,this.#u.displayPath);if(t.kind===`inline`){this.#kt({kind:`log`,title:`stderr`,body:t.text,live:!0});return}this.#kt({kind:`log`,title:`stderr`,body:formatStoredDiagnostic(t),logVisibility:`stderr-only`,live:!0}),this.#kt({kind:`log`,title:`stderr`,body:e,logVisibility:`all-only`,live:!0});return}let r=t.slice(0,n).join(`
12
+ `);r.trim().length>0&&this.#kt({kind:`log`,title:`stderr`,body:r,live:!0});let i=t.slice(n).join(`
13
+ `);this.#Cn(i)}#Cn(e){if(this.#f===`all`){if(e.trim().length===0)return;this.#kt({kind:`log`,title:`stderr`,body:e,live:!0});return}this.#Ce=e}#wn(e,t){let n=this.#Tn();if(e.kind===`failed`){this.#Cn(t);return}if(e.kind===`rebuilding`){let t=summarizeChangedFiles(e.events,e.more);if(n!==void 0){n.state.summary=t,n.block.body=formatDevRebuildStatus(t,`rebuilding`);return}let r=`dev-rebuild:${this.#Te}`;this.#Te+=1,this.#we={id:r,summary:t},this.#kt({kind:`log`,id:r,title:`stdout`,body:formatDevRebuildStatus(t,`rebuilding`),live:!0});return}if(n!==void 0){n.block.body=formatDevRebuildStatus(n.state.summary,e.kind),e.kind===`rebuilt`&&(this.#Ce=void 0);return}e.kind===`rebuilt`&&(this.#Ce=void 0),this.#kt({kind:`log`,title:`stdout`,body:t,live:!0})}#Tn(){let e=this.#we;if(e===void 0)return;let t=this.#m.get(e.id);if(!(t===void 0||t.live!==!0))return{state:e,block:t}}#En(){let e=this.#we;if(e===void 0)return;this.#we=void 0;let t=this.#m.get(e.id);t!==void 0&&(t.live=!1)}#Dn(e){switch(this.#f){case`none`:return!1;case`stderr`:return e===`stderr`;case`sandbox`:return e===`sandbox`;case`all`:return!0}}#On(e){return e.kind===`sandbox`?!this.#Dn(`sandbox`):e.kind===`log`?e.logVisibility===`stderr-only`?this.#f!==`stderr`:e.logVisibility===`all-only`?this.#f!==`all`:!this.#Dn(e.title===`stderr`?`stderr`:`stdout`):!1}};function chunkToString(e,t){return typeof e==`string`?e:Buffer.from(e).toString(t)}async function*iterateTUIStream(e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}return}yield*e}function clip(e,t){return clipVisible(e,t)}function promptInputRows({text:e,cursor:t,width:n,theme:r,caretVisible:i,isCommand:a,ghost:o,maxRows:s,placeholder:c,inert:l}){let u=r.colors;if(e.length===0&&c!==void 0){let e=renderInputWithBlockCursor({...visibleLine({text:c,cursor:0},Math.max(1,n-3),r.glyph.ellipsis),visible:i,inverse:u.inverse,render:e=>u.dim(renderInputText(e))});return[clip(`${u.dim(r.glyph.promptIdle)} ${e}`,n),``]}let style=e=>{let t=renderInputText(e);return a&&t.length>0?u.blue(t):t},d=layoutPromptInput({text:e,cursor:t}),f=Math.min(Math.max(1,s),d.rows.length),p=Math.max(0,Math.min(d.caretRow-f+1,d.rows.length-f)),m=l===!0?u.dim(r.glyph.prompt):u.cyan(r.glyph.prompt),h=u.dim(r.glyph.ellipsis),g=Math.max(1,n-3),_=[];for(let e=p;e<p+f;e+=1){let t=d.rows[e],a=e===0?m:` `;(e===p&&p>0||e===p+f-1&&p+f<d.rows.length)&&(a=h);let s;if(e===d.caretRow){let{before:e,under:n,after:a}=visibleLine({text:t.text,cursor:d.caretOffset},g,r.glyph.ellipsis);s=renderInputWithBlockCursor({before:e,under:n,after:a,visible:i,inverse:u.inverse,render:style}),o.length>0&&d.rows.length===1&&(s+=o)}else s=style(t.text);_.push(clip(`${a} ${s}`,n))}return _.push(``),_}function previousBlockOf(e){let t={kind:e.kind};return e.title!==void 0&&(t.title=e.title),t}function isActiveToolStatus(e){return e===`running`||e===`approval`}function applyCohortLiveness(e){let t=e.some(e=>e.active);for(let n of e)n.block.live=t||n.active}function leadsWithGap(e,t){if(e.kind===`tool`&&(t?.kind===`user`||t?.kind===`assistant`||t?.kind===`question`))return!0;if(e.kind===`sandbox`&&t?.kind===`sandbox`)return!1;if(t?.kind===`sandbox`&&e.kind!==`sandbox`||t?.kind===`log`)return!0;switch(e.kind){case`user`:case`assistant`:case`reasoning`:case`subagent`:case`error`:case`notice`:case`question`:case`connection-auth`:case`sandbox`:case`log`:case`command`:case`warning`:case`flow`:case`turn-stats`:case`session-boundary`:case`todo-list`:case`agent-header`:return!0;default:return!1}}function parseSandboxLogLine(e){let t=e.trim();if(!t.startsWith(`eve: `))return;let n=t.slice(5);return/\bsandbox\b/i.test(n)&&!isLowValueSandboxLogLine(n)?n:void 0}function isLowValueSandboxLogLine(e){return/^initializing (?:\d+ )?sandbox templates?\b/i.test(e)||/^initialized \d+ sandbox\b/i.test(e)||/^reused cached sandbox template\b/i.test(e)||/^sandbox template "[^"]+" \([^)]+\): (checking|reusing|loading microsandbox runtime|microsandbox runtime ready)\b/i.test(e)}function clipLiveRows(e,t,n,r){if(e.length<=t)return[...e];if(t<=1)return[clip(hiddenRowsMarker(e.length,r),n)];let i=t-1;return[clip(hiddenRowsMarker(e.length-i,r),n),...e.slice(e.length-i)]}function hiddenRowsMarker(e,t){let n=e.toLocaleString(),r=e===1?`row`:`rows`;return t.colors.dim(`${t.glyph.dot} ${t.glyph.ellipsis} ${n} earlier ${r} hidden while streaming`)}function collapseReasoning(e,t){switch(e){case`collapsed`:return!0;case`auto-collapsed`:return!t;default:return!1}}function renderNativeToolBlock(e,t,n,r){let i=e.preparing===!0?presentPreparingTool(e.toolName,r):presentTool(e.toolName,e.input,r),a={id:t,kind:`tool`,title:stripTerminalControls(i.title),subtitle:stripTerminalControls(i.subtitle),status:e.status,live:e.status===`running`||e.status===`approval`,expanded:n,toolInput:e.input,toolName:e.toolName,toolGroup:i.group};return i.doneTitle!==void 0&&(a.doneTitle=stripTerminalControls(i.doneTitle)),i.detail!==void 0&&(a.detailLines=i.detail,a.keepDetailWhenDone=i.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(a.result=stripTerminalControls(e.errorText)):(a.result=i.summarizeResult(e.output),a.toolOutput=e.output),a}function writeExistedFlag(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e.existed;return typeof t==`boolean`?t:void 0}function subagentToolStatus(e){switch(e){case`preparing`:return`running`;case`approval-requested`:return`approval`;case`executing`:return`running`;case`done`:return`done`;case`failed`:return`error`;case`rejected`:return`denied`}}function formatToolApprovalTitle(e){return stripTerminalControls(e.title??e.toolName)}function toolSectionId(e){return`tool:${e}`}function questionSectionId(e){return`question:${e}`}function subagentHeaderId(e){return`subagent:${e}:header`}function subagentStepSectionId(e,t){return`subagent:${e}:step:${t}`}function subagentToolSectionId(e,t){return`subagent:${e}:tool:${t}`}function connectionAuthSectionId(e){return`connection-auth:${e}`}function connectionAuthTerminalMessage(e){switch(e){case`authorized`:return`Authorization complete`;case`declined`:return`Authorization declined`;case`failed`:return`Authorization failed`;case`timed-out`:return`Authorization timed out`;case`required`:case`pending`:return}}function formatConnectionAuthContent(e,t){let n=[];if(t!==void 0)n.push(t);else{let t=stripTerminalControls(e.description);t.length>0&&n.push(t);let r=e.challenge;r?.url&&n.push(`URL: ${stripTerminalControls(r.url)}`),r?.userCode&&n.push(`Code: ${stripTerminalControls(r.userCode)}`),r?.expiresAt&&n.push(`Expires: ${stripTerminalControls(r.expiresAt)}`),r?.instructions&&n.push(stripTerminalControls(r.instructions))}if(e.reason!==void 0){let t=stripTerminalControls(e.reason);t.length>0&&n.push(`Reason: ${t}`)}return n.join(`
14
14
  `)}function formatQuestionContent(e,t,n){let r=n.colors,i=[],a=e.options??[];if(a.length>0){for(let[e,o]of a.entries()){let a=stripTerminalControls(o.label),s=o.description===void 0?``:stripTerminalControls(o.description),c=t===e,l=s.length>0?`${c?` `:` `}${r.dim(`— ${s}`)}`:``,u=renderCursorRow(c?`${n.glyph.selectedPointer} ${a}`:` ${a}`,c,r);i.push(`${u}${l}`)}if(e.allowFreeform===!0){let e=t===a.length,o=`Type your own answer`,s=e?`${n.glyph.selectedPointer} ${o}`:` ${r.dim(o)}`;i.push(renderCursorRow(s,e,r))}}else i.push(r.dim(` (type your answer)`));return i.join(`
15
15
  `)}function resolveQuestionText(e,t){let n=e.trim();if(n.length===0)return;let r=n.toLowerCase(),i=t.options??[];if(i.length>0){let e=matchQuestionOption(r,i);if(e!==void 0)return{optionId:e.id,label:e.label}}if(t.allowFreeform===!0||i.length===0)return{text:n,label:n}}function matchQuestionOption(e,t){let n=t.find(t=>t.id.toLowerCase()===e);if(n!==void 0)return n;let r=t.find(t=>t.label.toLowerCase()===e);if(r!==void 0)return r;let i=Number(e);if(Number.isInteger(i)&&i>0&&i<=t.length)return t[i-1]}export{TerminalRenderer};
@@ -1 +1 @@
1
- function createFakeSetupFlowRenderer(e={}){let{readProviderPicker=async()=>void 0,readModelEditor=async()=>void 0,...t}=e;return{begin:()=>{},end:()=>{},readSelect:async()=>void 0,readEditableSelect:async()=>void 0,readProviderPicker,readModelEditor,readText:async()=>void 0,readAcknowledge:async()=>{},readChoice:()=>({choice:Promise.resolve(void 0),close:()=>{}}),setStatus:()=>{},renderLine:()=>{},renderOutput:()=>{},waitForInterrupt:()=>({promise:new Promise(()=>{}),dispose:()=>{}}),...t}}export{createFakeSetupFlowRenderer};
1
+ function createFakeSetupFlowRenderer(e={}){let{readProviderPicker=async()=>void 0,readModelEditor=async()=>void 0,...t}=e;return{begin:()=>{},end:()=>{},readSelect:async()=>void 0,readEditableSelect:async()=>void 0,readProviderPicker,readModelEditor,readText:async()=>void 0,readAcknowledge:async()=>{},readChoice:()=>({choice:Promise.resolve(void 0),close:()=>{}}),setStatus:()=>{},renderLine:()=>{},renderOutput:()=>{},withInheritedStdio:e=>e(),waitForInterrupt:()=>({promise:new Promise(()=>{}),dispose:()=>{}}),...t}}export{createFakeSetupFlowRenderer};
@@ -1 +1 @@
1
- import{WizardCancelledError}from"#setup/step.js";import{searchActionQuery}from"#setup/cli/select-state.js";import{createSelectOptionCodec}from"#setup/cli/select-option-codec.js";function setupSelectRequest(e,t,n,r){let i={message:e.message,options:t},withNotices=t=>(e.notices!==void 0&&(t.notices=e.notices),t);if(e.multiple===!0){if(e.hintLayout!==void 0)throw Error(`Multi-select setup questions do not support a hint layout.`);let t;return e.search===!0?(t={...i,kind:`searchable-multi`,required:e.required??!1},e.placeholder!==void 0&&(t.placeholder=e.placeholder)):t={...i,kind:`multi`,required:e.required??!1},e.initialValues!==void 0&&(t.initialValues=e.initialValues.map(n)),withNotices(t)}if(e.search===!0&&e.hintLayout===`stacked`)throw Error(`Searchable setup questions do not support a stacked hint layout.`);let a;if(e.search===!0){if(a={...i,kind:`search`},e.hintLayout===`inline`&&(a.layout=`task-list`),e.placeholder!==void 0&&(a.placeholder=e.placeholder),e.searchAction!==void 0){a.searchAction={label:e.searchAction.label};let t=e.searchAction.load;t!==void 0&&(a.searchAction.load=async e=>r(await t(e)))}}else{let t=e.hintLayout===`inline`?`task-list`:e.hintLayout??`single`;a={...i,kind:t}}return e.initialValue!==void 0&&(a.initialValue=n(e.initialValue)),withNotices(a)}function createTuiPrompter(r){function guardCancel(t){if(t===void 0)throw new WizardCancelledError;return t}async function select(e){let i=createSelectOptionCodec(e.options),a=setupSelectRequest(e,i.options,i.encode,i.encodeOptions),o=guardCancel(await r.readSelect(a)).map(n=>{let r=searchActionQuery(n);return r!==void 0&&e.multiple!==!0&&e.searchAction!==void 0?e.searchAction.value(r):i.decode(n)});if(e.multiple===!0)return o;let s=o[0];if(s===void 0)throw Error(`Single-select returned no option.`);return s}function line(e){return t=>r.renderLine(t,e)}return{async text(e){let t={message:e.message};return e.placeholder!==void 0&&(t.placeholder=e.placeholder),e.defaultValue!==void 0&&(t.defaultValue=e.defaultValue),e.validate!==void 0&&(t.validate=e.validate),e.notices!==void 0&&(t.notices=e.notices),guardCancel(await r.readText(t))},async password(e){let t={message:e.message,mask:!0};return e.validate!==void 0&&(t.validate=e.validate),guardCancel(await r.readText(t))},select,async selectEditable(e){let t=createSelectOptionCodec(e.options),i={value:t.encode(e.editable.value),defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint};e.editable.validate!==void 0&&(i.validate=e.editable.validate);let a={message:e.message,options:t.options,editable:i};e.initialValue!==void 0&&(a.initialValue=t.encode(e.initialValue));let o=guardCancel(await r.readEditableSelect(a)),s=t.decode(o.value);return o.kind===`edited`?{kind:`edited`,value:s,text:o.text}:{kind:`selected`,value:s}},async acknowledge(e){await r.readAcknowledge({message:e.message,lines:e.lines??[]})},awaitChoice(e){return r.readChoice(e)},note(e,t,n){let i=n?.tone===`success`?`success`:`warning`;t&&r.renderLine(t,i),r.renderLine(e,i)},intro(){},outro(){},log:{message:line(`info`),info:line(`info`),success:line(`success`),warning:line(`warning`),error:line(`error`),commandOutput:e=>r.renderOutput(e),section(e,t){r.renderLine(e,`info`);for(let e of t)r.renderLine(` ${e}`,`info`)},spinner(e,t){r.setStatus(t?.kind===`external-action`?{kind:`external-action`,text:e,emphasis:t.emphasis}:e);let n=!1;return{stop(){n||(n=!0,r.setStatus(void 0))}}}}}}export{createTuiPrompter};
1
+ import{WizardCancelledError}from"#setup/step.js";import{searchActionQuery}from"#setup/cli/select-state.js";import{createSelectOptionCodec}from"#setup/cli/select-option-codec.js";function setupSelectRequest(e,t,n,r){let i={message:e.message,options:t};e.description!==void 0&&(i.description=e.description),e.metadata!==void 0&&(i.metadata=e.metadata);let withNotices=t=>(e.notices!==void 0&&(t.notices=e.notices),t);if(e.multiple===!0){if(e.hintLayout!==void 0)throw Error(`Multi-select setup questions do not support a hint layout.`);let t;return e.search===!0?(t={...i,kind:`searchable-multi`,required:e.required??!1},e.placeholder!==void 0&&(t.placeholder=e.placeholder)):t={...i,kind:`multi`,required:e.required??!1},e.initialValues!==void 0&&(t.initialValues=e.initialValues.map(n)),withNotices(t)}if(e.search===!0&&e.hintLayout===`stacked`)throw Error(`Searchable setup questions do not support a stacked hint layout.`);let a;if(e.search===!0){if(a={...i,kind:`search`},e.hintLayout===`inline`&&(a.layout=`task-list`),e.placeholder!==void 0&&(a.placeholder=e.placeholder),e.searchAction!==void 0){a.searchAction={label:e.searchAction.label};let t=e.searchAction.load;t!==void 0&&(a.searchAction.load=async e=>r(await t(e)))}}else{let t=e.hintLayout===`inline`?`task-list`:e.hintLayout??`single`;a={...i,kind:t}}return e.initialValue!==void 0&&(a.initialValue=n(e.initialValue)),withNotices(a)}function createTuiPrompter(r){function guardCancel(t){if(t===void 0)throw new WizardCancelledError;return t}async function select(e){let i=createSelectOptionCodec(e.options),a=setupSelectRequest(e,i.options,i.encode,i.encodeOptions),o=guardCancel(await r.readSelect(a)).map(n=>{let r=searchActionQuery(n);return r!==void 0&&e.multiple!==!0&&e.searchAction!==void 0?e.searchAction.value(r):i.decode(n)});if(e.multiple===!0)return o;let s=o[0];if(s===void 0)throw Error(`Single-select returned no option.`);return s}function line(e){return t=>r.renderLine(t,e)}return{async text(e){let t={message:e.message};return e.placeholder!==void 0&&(t.placeholder=e.placeholder),e.defaultValue!==void 0&&(t.defaultValue=e.defaultValue),e.validate!==void 0&&(t.validate=e.validate),e.notices!==void 0&&(t.notices=e.notices),guardCancel(await r.readText(t))},async password(e){let t={message:e.message,mask:!0};return e.validate!==void 0&&(t.validate=e.validate),guardCancel(await r.readText(t))},select,async selectEditable(e){let t=createSelectOptionCodec(e.options),i={value:t.encode(e.editable.value),defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint};e.editable.validate!==void 0&&(i.validate=e.editable.validate);let a={message:e.message,options:t.options,editable:i};e.initialValue!==void 0&&(a.initialValue=t.encode(e.initialValue));let o=guardCancel(await r.readEditableSelect(a)),s=t.decode(o.value);return o.kind===`edited`?{kind:`edited`,value:s,text:o.text}:{kind:`selected`,value:s}},async acknowledge(e){await r.readAcknowledge({message:e.message,lines:e.lines??[]})},awaitChoice(e){return r.readChoice(e)},note(e,t,n){let i=n?.tone===`success`?`success`:`warning`;t&&r.renderLine(t,i),r.renderLine(e,i)},intro(){},outro(){},withInheritedStdio:e=>r.withInheritedStdio(e),log:{message:line(`info`),info:line(`info`),success:line(`success`),warning:line(`warning`),error:line(`error`),commandOutput:e=>r.renderOutput(e),section(e,t){r.renderLine(e,`info`);for(let e of t)r.renderLine(` ${e}`,`info`)},spinner(e,t){r.setStatus(t?.kind===`external-action`?{kind:`external-action`,text:e,emphasis:t.emphasis}:e);let n=!1;return{stop(){n||(n=!0,r.setStatus(void 0))}}}}}}export{createTuiPrompter};
@@ -15,6 +15,8 @@ export interface RunDevelopmentTuiInput extends TuiDisplayOptions {
15
15
  readonly initialInput?: string;
16
16
  /** Reports local CLI boot phases. Omitted for remote and programmatic TUI runs. */
17
17
  readonly onBootProgress?: DevBootProgressReporter;
18
+ /** Gives setup subprocesses exclusive terminal and development-host ownership. */
19
+ withExclusiveTerminal?: <T>(task: () => Promise<T>) => Promise<T>;
18
20
  readonly lifecycle?: CommandLifecycle;
19
21
  }
20
22
  /**
@@ -1 +1 @@
1
- import{createDevDiagnostics}from"../diagnostics.js";import{promptCommandsFor}from"./prompt-commands.js";import{probeMcpConnection}from"./mcp-connection-status.js";import{createPromptCommandHandler}from"./prompt-command-handler.js";import{formatRemoteAuthChallengeMessage}from"./remote-auth-result.js";import{remoteHost}from"./target.js";import{EveTUIRunner}from"./runner.js";import{toErrorMessage}from"#shared/errors.js";import{resolveDevelopmentOidcToken,resolveLinkedDevelopmentOidcToken}from"#services/dev-client/request-headers.js";import{isVercelAuthChallenge}from"#services/dev-client/vercel-auth-error.js";import{resolveVercelDeployment}from"#setup/vercel-deployment.js";import{Client}from"#client/index.js";import{resolveLocalDevelopmentClientOptions,resolveRemoteDevelopmentClientOptions}from"#services/dev-client/client-options.js";import{createDevelopmentCredentialGate}from"#services/dev-client/credential-gate.js";function prepareRemoteTarget(e){return{target:e,credentials:createDevelopmentCredentialGate(e.serverUrl),resolveOidcToken:resolveDevelopmentOidcToken,resolveDeployment:t=>resolveVercelDeployment({workspaceRoot:e.workspaceRoot,host:remoteHost(e),signal:t})}}function prepareDevelopmentTarget(e){return e.kind===`local`?{kind:`local`,target:e}:{kind:`remote`,target:e,remote:prepareRemoteTarget(e)}}async function runDevelopmentTui(n){let{target:r,headers:i,initialInput:a,onBootProgress:o,lifecycle:s,...c}=n,l=prepareDevelopmentTarget(r),{serverUrl:u}=r,d=i===void 0?{}:{headers:i},f=new Client(l.kind===`local`?resolveLocalDevelopmentClientOptions({...d,serverUrl:u,token:()=>resolveLinkedDevelopmentOidcToken(l.target.workspaceRoot)}):resolveRemoteDevelopmentClientOptions({...d,serverUrl:u,credentials:l.remote.credentials})),p={...c,session:f.session(),client:f,serverUrl:u,promptCommandHandler:createPromptCommandHandler({target:r}),availablePromptCommands:promptCommandsFor(r.kind),formatTransportError:e=>isVercelAuthChallenge(e)?formatRemoteAuthChallengeMessage(u):toErrorMessage(e)};l.kind===`local`?(p.appRoot=l.target.workspaceRoot,p.probeMcpConnection=probeMcpConnection):p.remote=l.remote,a!==void 0&&(p.initialInput=a),o!==void 0&&(p.onBootProgress=o),s!==void 0&&(p.lifecycle=s);let m=l.kind===`local`?await createDevDiagnostics(l.target.workspaceRoot).catch(()=>void 0):void 0;m!==void 0&&(p.diagnostics=m);try{await new EveTUIRunner(p).run()}finally{await m?.close()}}export{runDevelopmentTui};
1
+ import{createDevDiagnostics}from"../diagnostics.js";import{promptCommandsFor}from"./prompt-commands.js";import{probeMcpConnection}from"./mcp-connection-status.js";import{createPromptCommandHandler}from"./prompt-command-handler.js";import{formatRemoteAuthChallengeMessage}from"./remote-auth-result.js";import{remoteHost}from"./target.js";import{EveTUIRunner}from"./runner.js";import{toErrorMessage}from"#shared/errors.js";import{resolveDevelopmentOidcToken,resolveLinkedDevelopmentOidcToken}from"#services/dev-client/request-headers.js";import{isVercelAuthChallenge}from"#services/dev-client/vercel-auth-error.js";import{resolveVercelDeployment}from"#setup/vercel-deployment.js";import{Client}from"#client/index.js";import{resolveLocalDevelopmentClientOptions,resolveRemoteDevelopmentClientOptions}from"#services/dev-client/client-options.js";import{createDevelopmentCredentialGate}from"#services/dev-client/credential-gate.js";function prepareRemoteTarget(e){return{target:e,credentials:createDevelopmentCredentialGate(e.serverUrl),resolveOidcToken:resolveDevelopmentOidcToken,resolveDeployment:t=>resolveVercelDeployment({workspaceRoot:e.workspaceRoot,host:remoteHost(e),signal:t})}}function prepareDevelopmentTarget(e){return e.kind===`local`?{kind:`local`,target:e}:{kind:`remote`,target:e,remote:prepareRemoteTarget(e)}}async function runDevelopmentTui(n){let{target:r,headers:i,initialInput:a,onBootProgress:o,lifecycle:s,withExclusiveTerminal:c,...l}=n,u=prepareDevelopmentTarget(r),{serverUrl:d}=r,f=i===void 0?{}:{headers:i},p=new Client(u.kind===`local`?resolveLocalDevelopmentClientOptions({...f,serverUrl:d,token:()=>resolveLinkedDevelopmentOidcToken(u.target.workspaceRoot)}):resolveRemoteDevelopmentClientOptions({...f,serverUrl:d,credentials:u.remote.credentials})),m={...l,session:p.session(),client:p,serverUrl:d,promptCommandHandler:createPromptCommandHandler({target:r}),availablePromptCommands:promptCommandsFor(r.kind),formatTransportError:e=>isVercelAuthChallenge(e)?formatRemoteAuthChallengeMessage(d):toErrorMessage(e)};u.kind===`local`?(m.appRoot=u.target.workspaceRoot,m.probeMcpConnection=probeMcpConnection):m.remote=u.remote,a!==void 0&&(m.initialInput=a),o!==void 0&&(m.onBootProgress=o),s!==void 0&&(m.lifecycle=s),c!==void 0&&(m.withExclusiveTerminal=c);let h=u.kind===`local`?await createDevDiagnostics(u.target.workspaceRoot).catch(()=>void 0):void 0;h!==void 0&&(m.diagnostics=h);try{await new EveTUIRunner(m).run()}finally{await h?.close()}}export{runDevelopmentTui};
@@ -3,8 +3,6 @@ import { detectProjectIdentity, type ProjectIdentity } from "#setup/project-reso
3
3
  export interface VercelStatusSnapshot {
4
4
  /** Resolved link identity; absent while unlinked or while a probe is in flight. */
5
5
  identity?: ProjectIdentity;
6
- /** A /channels run added ≥1 channel this session and no /deploy has shipped since. */
7
- pendingDeploy: boolean;
8
6
  }
9
7
  /**
10
8
  * Status-line effect a completed setup command reports back to the runner.
@@ -12,8 +10,6 @@ export interface VercelStatusSnapshot {
12
10
  * before this session escape it — accepted v1 limits.
13
11
  */
14
12
  export type VercelStatusEffect = {
15
- kind: "channels-added";
16
- } | {
17
13
  kind: "deployed";
18
14
  } | {
19
15
  kind: "refresh-identity";
@@ -28,8 +24,7 @@ export interface VercelStatusTrackerOptions {
28
24
  }
29
25
  /**
30
26
  * Owns the Vercel segment of the dev TUI status line: one cached link
31
- * identity and the session-scoped pending-deploy flag. The identity probe is
32
- * network-bound (it shells `vercel api`), so it runs only at startup and
27
+ * identity. The identity probe is network-bound (it shells `vercel api`), so it runs only at startup and
33
28
  * after provider setup or a /deploy — never on a poll. A linked directory
34
29
  * whose `vercel` CLI call fails resolves to the raw project id as the name
35
30
  * (see {@link detectProjectIdentity}); an unlinked one resolves to no identity,
@@ -1 +1 @@
1
- import{detectProjectIdentity}from"#setup/project-resolution.js";function createVercelStatusTracker(t){let n=t.detectIdentity??detectProjectIdentity,r,i=!1,a=0,o=!1,s,snapshot=()=>{let e={pendingDeploy:i};return r!==void 0&&(e.identity=r),e},emit=()=>{o||t.onChange(snapshot())},refreshIdentity=()=>{if(o)return;s?.abort();let e=new AbortController;s=e,a+=1;let i=a;(async()=>{let c;try{c=await n(t.appRoot,{signal:e.signal})}catch{return}finally{s===e&&(s=void 0)}o||i!==a||(r=c,emit())})()};return{refreshIdentity,applyEffect(e){if(!o)switch(e.kind){case`channels-added`:i=!0,emit();return;case`deployed`:i=!1,emit(),refreshIdentity();return;case`refresh-identity`:refreshIdentity();return}},current:snapshot,dispose(){o||(o=!0,a+=1,s?.abort(),s=void 0)}}}export{createVercelStatusTracker};
1
+ import{detectProjectIdentity}from"#setup/project-resolution.js";function createVercelStatusTracker(t){let n=t.detectIdentity??detectProjectIdentity,r,i=0,a=!1,o,snapshot=()=>r===void 0?{}:{identity:r},emit=()=>{a||t.onChange(snapshot())},refreshIdentity=()=>{if(a)return;o?.abort();let e=new AbortController;o=e,i+=1;let s=i;(async()=>{let c;try{c=await n(t.appRoot,{signal:e.signal})}catch{return}finally{o===e&&(o=void 0)}a||s!==i||(r=c,emit())})()};return{refreshIdentity,applyEffect(e){if(!a)switch(e.kind){case`deployed`:emit(),refreshIdentity();return;case`refresh-identity`:refreshIdentity();return}},current:snapshot,dispose(){a||(a=!0,i+=1,o?.abort(),o=void 0)}}}export{createVercelStatusTracker};
@@ -0,0 +1,11 @@
1
+ import type { AssistantResponseStatsMode, LogDisplayMode, TerminalPartDisplayMode } from "#cli/dev/tui/types.js";
2
+ /** Parses a TCP port accepted by the CLI. */
3
+ export declare function parsePortOption(value: string): number;
4
+ /** Parses a terminal part display mode. */
5
+ export declare function parseDisplayMode(value: string): TerminalPartDisplayMode;
6
+ /** Parses an assistant response statistics mode. */
7
+ export declare function parseStatsMode(value: string): AssistantResponseStatsMode;
8
+ /** Parses a server log display mode. */
9
+ export declare function parseLogsMode(value: string): LogDisplayMode;
10
+ /** Parses a positive model context-window size. */
11
+ export declare function parseContextSizeOption(value: string): number;
@@ -0,0 +1 @@
1
+ import{InvalidArgumentError}from"#compiled/commander/index.js";import{LOG_DISPLAY_MODES,parseLogDisplayMode}from"#cli/dev/tui/log-display-mode.js";function parsePortOption(e){if(!/^-?\d+$/.test(e))throw new InvalidArgumentError(`Expected a numeric port, received "${e}".`);let t=Number(e);if(t<0||t>65535)throw new InvalidArgumentError(`Expected a port between 0 and 65535, received "${e}".`);return t}const DISPLAY_MODES=new Set([`full`,`collapsed`,`auto-collapsed`,`hidden`]),STATS_MODES=new Set([`tokens`,`tokensPerSecond`]);function parseDisplayMode(e){if(!DISPLAY_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...DISPLAY_MODES].join(`, `)}, received "${e}".`);return e}function parseStatsMode(e){if(!STATS_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...STATS_MODES].join(`, `)}, received "${e}".`);return e}function parseLogsMode(n){let r=parseLogDisplayMode(n);if(r===void 0)throw new InvalidArgumentError(`Expected one of ${LOG_DISPLAY_MODES.join(`, `)}, received "${n}".`);return r}function parseContextSizeOption(e){let t=Number(e);if(!Number.isFinite(t)||t<=0)throw new InvalidArgumentError(`Expected a positive number, received "${e}".`);return t}export{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseStatsMode};
@@ -1,6 +1,7 @@
1
1
  import { type BuildHost } from "#cli/commands/build.js";
2
2
  import { resolveDevUiMode, resolveTuiDisplayOptions } from "#cli/dev/ui-options.js";
3
3
  import type { RunDevelopmentTuiInput } from "#cli/dev/tui/tui.js";
4
+ import type { EvalCliOptions } from "#evals/cli/eval.js";
4
5
  import { type InvokeCliRuntimeDependencies } from "#cli/invoke/command.js";
5
6
  import type { DevelopmentServer, DevelopmentServerOptions, ProductionServerHandle } from "#internal/nitro/host/types.js";
6
7
  export { resolveDevUiMode, resolveTuiDisplayOptions };
@@ -28,18 +29,6 @@ interface CliRuntimeDependencies {
28
29
  }): Promise<ProductionServerHandle>;
29
30
  }
30
31
  type CliRuntimeOverrides = Partial<CliRuntimeDependencies>;
31
- interface EvalCliOptions {
32
- json?: boolean;
33
- junit?: string;
34
- list?: boolean;
35
- maxConcurrency?: string;
36
- skipReport?: boolean;
37
- strict?: boolean;
38
- tag?: string[];
39
- timeout?: string;
40
- url?: string;
41
- verbose?: boolean;
42
- }
43
32
  /**
44
33
  * Runs the eve CLI entrypoint.
45
34
  */
@@ -1,4 +1,4 @@
1
- import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{LOG_DISPLAY_MODES,parseLogDisplayMode}from"#cli/dev/tui/log-display-mode.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function parsePortOption(e){if(!/^-?\d+$/.test(e))throw new InvalidArgumentError(`Expected a numeric port, received "${e}".`);let t=Number(e);if(t<0||t>65535)throw new InvalidArgumentError(`Expected a port between 0 and 65535, received "${e}".`);return t}const DISPLAY_MODES=new Set([`full`,`collapsed`,`auto-collapsed`,`hidden`]),STATS_MODES=new Set([`tokens`,`tokensPerSecond`]);function parseDisplayMode(e){if(!DISPLAY_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...DISPLAY_MODES].join(`, `)}, received "${e}".`);return e}function parseStatsMode(e){if(!STATS_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...STATS_MODES].join(`, `)}, received "${e}".`);return e}function parseLogsMode(e){let t=parseLogDisplayMode(e);if(t===void 0)throw new InvalidArgumentError(`Expected one of ${LOG_DISPLAY_MODES.join(`, `)}, received "${e}".`);return t}function parseContextSizeOption(e){let t=Number(e);if(!Number.isFinite(t)||t<=0)throw new InvalidArgumentError(`Expected a positive number, received "${e}".`);return t}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,i){let c=resolveApplicationRoot(),y=resolveInstalledPackageInfo().version,b=new Command,x=createCliTheme();b.name(`eve`).description(`Build and run an eve application.`).version(y).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{[`info`,`dev`,`init`].includes(n.name())&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}});let S=b.command(`channels`).description(`Manage user-authored channels in the current project.`);S.command(`add [kind]`).description(`Add channels interactively, or scaffold a channel kind (slack | web).`).option(`-f, --force`,`Overwrite existing channel files`).option(`-y, --yes`,`Assume yes for confirmations; requires an explicit channel kind`).action(async(t,n)=>{let{runChannelsAddCompatibilityCommand:r}=await import(`#cli/commands/channels.js`);await r(e,c,{kind:t,options:n})}),S.command(`list`).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,c,t)}),registerIntegrationCommands({program:b,logger:e,appRoot:c});let C=b.command(`extension`).description(`Create and build reusable eve extension packages.`);C.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,c,t)}),C.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(c);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,c)}),registerRegistryCommands({program:b,logger:e,appRoot:c}),b.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,c,t,{channelWebNextjs:n.channelWebNextjs})}),registerProjectCommands({program:b,logger:e,appRoot:c}),registerBuildCommand({appRoot:c,buildHost:i.buildHost,logger:e,program:b}),b.command(`start`).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:n}=await import(`#cli/dev/environment.js`);n(c);let a=await(i.startProductionHost??await loadStartProductionHost())(c,{host:t.host,port:t.port});e.log(renderCliTaggedLine(x,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({appRoot:c,logger:e,program:b,runtime:i}),b.command(`dev`).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input, or start onboarding with /model`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
1
+ import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseStatsMode}from"#cli/option-parsers.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";import{resumeDevelopmentRuntimeArtifacts,suspendDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,i){let c=resolveApplicationRoot(),y=resolveInstalledPackageInfo().version,b=new Command,x=createCliTheme();b.name(`eve`).description(`Build and run an eve application.`).version(y).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{[`info`,`dev`,`init`].includes(n.name())&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),b.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,c,t)}),registerIntegrationCommands({program:b,logger:e,appRoot:c});let S=b.command(`extension`).description(`Create and build reusable eve extension packages.`);S.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,c,t)}),S.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(c);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,c)}),registerRegistryCommands({program:b,logger:e,appRoot:c}),b.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,c,t,{channelWebNextjs:n.channelWebNextjs})}),registerProjectCommands({program:b,logger:e,appRoot:c}),registerBuildCommand({appRoot:c,buildHost:i.buildHost,logger:e,program:b}),b.command(`start`).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:n}=await import(`#cli/dev/environment.js`);n(c);let a=await(i.startProductionHost??await loadStartProductionHost())(c,{host:t.host,port:t.port});e.log(renderCliTaggedLine(x,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({appRoot:c,logger:e,program:b,runtime:i}),b.command(`dev`).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input, or start onboarding with /model`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
2
2
  You can also pass a bare URL, for example: eve dev https://example.com
3
- `).action(async(t,n)=>{let a=resolveDevelopmentUrlTarget(n,t),s=a?.serverUrl,u=hasInteractiveTerminal(),f=resolveDevUiMode({options:n,interactive:u});if(n.input!==void 0&&f===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let p=!1;s!==void 0&&(p=await(i.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:c,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>i.runDevelopmentTui??await loadRunDevelopmentTui(),t),l=resolveTuiDisplayOptions(n),u=s===void 0||p?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??c}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:c},d=resolveTuiTitle({name:n.name,target:u});d!==void 0&&(l.name=d);let f={target:u,initialInput:n.input,onBootProgress:t,lifecycle:r,...l};a?.headers===void 0?await o(f):await o({...f,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(c),e.log(`↗ ${p?`local`:`remote`} mode targeting ${x.info(new URL(s).host)}`),f===`headless`){e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveUi({serverUrl:s},void 0,n)}finally{n.dispose()}return}f===`tui`&&e.log(``);let m=f===`tui`?startCliLiveRow(e):void 0,h=createDevBootProgressReporter(m);m?.update(`Building your agent`);let g,_,closeServer=()=>g===void 0?Promise.resolve():(_??=g.close(),_.catch(()=>void 0),_),v=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}});try{g=(i.startHost??await loadStartHost())(c,{existing:f===`tui`?`attach-if-unconfigured`:`reject`,host:n.host,onBootProgress:h,port:n.port});let t=(await Promise.race([g.start().then(e=>({handle:e})),v.stopped.then(()=>({handle:void 0}))])).handle;if(t===void 0)return;if(f!==`tui`&&e.log(renderCliTaggedLine(x,{message:`server listening at ${t.url}`,tag:`dev`,tone:`success`})),f===`headless`){n.ui!==!1&&!u&&e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,v);return}await waitForUiOrServer({handle:t,lifecycle:v,server:g,runUi:async()=>await runInteractiveUi({appRoot:t.appRoot,serverUrl:t.url},h,v)})}finally{m?.stop(),await closeServer(),v.dispose()}});let w=b.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return w.command(`show [logid]`,{isDefault:!0}).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,c,t,n)}),w.command(`ls`).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,c,t)}),b.command(`trace [trace]`).usage(`[options] [trace]
4
- eve trace ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").action(async t=>{let{runTraceShowCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}),b.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,c,t)}),b.command(`eval`).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),b}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:e;try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let r=await(n.isCodingAgentLaunch??isCodingAgentLaunch)();if(a[0]===`init`&&r){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
3
+ `).action(async(t,n)=>{let a=resolveDevelopmentUrlTarget(n,t),s=a?.serverUrl,u=hasInteractiveTerminal(),f=resolveDevUiMode({options:n,interactive:u});if(n.input!==void 0&&f===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let p=!1;s!==void 0&&(p=await(i.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:c,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>i.runDevelopmentTui??await loadRunDevelopmentTui(),t),l=resolveTuiDisplayOptions(n),u=s===void 0||p?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??c}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:c},d=resolveTuiTitle({name:n.name,target:u});d!==void 0&&(l.name=d);let f={target:u,initialInput:n.input,onBootProgress:t,lifecycle:r,...l};u.kind===`local`&&(f.withExclusiveTerminal=async t=>await(async()=>{if(!await suspendDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl}))throw Error(`Could not pause the development server for integration setup.`);try{return await t()}finally{await resumeDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl,silent:!0})}})()),a?.headers===void 0?await o(f):await o({...f,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(c),e.log(`↗ ${p?`local`:`remote`} mode targeting ${x.info(new URL(s).host)}`),f===`headless`){e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveUi({serverUrl:s},void 0,n)}finally{n.dispose()}return}f===`tui`&&e.log(``);let m=f===`tui`?startCliLiveRow(e):void 0,h=createDevBootProgressReporter(m);m?.update(`Building your agent`);let g,_,closeServer=()=>g===void 0?Promise.resolve():(_??=g.close(),_.catch(()=>void 0),_),v=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}});try{g=(i.startHost??await loadStartHost())(c,{existing:f===`tui`?`attach-if-unconfigured`:`reject`,host:n.host,onBootProgress:h,port:n.port});let t=(await Promise.race([g.start().then(e=>({handle:e})),v.stopped.then(()=>({handle:void 0}))])).handle;if(t===void 0)return;if(f!==`tui`&&e.log(renderCliTaggedLine(x,{message:`server listening at ${t.url}`,tag:`dev`,tone:`success`})),f===`headless`){n.ui!==!1&&!u&&e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,v);return}await waitForUiOrServer({handle:t,lifecycle:v,server:g,runUi:async()=>await runInteractiveUi({appRoot:t.appRoot,serverUrl:t.url},h,v)})}finally{m?.stop(),await closeServer(),v.dispose()}});let C=b.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return C.command(`show [logid]`,{isDefault:!0}).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,c,t,n)}),C.command(`ls`).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,c,t)}),b.command(`traces [trace]`).usage(`[options] [trace]
4
+ eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").action(async t=>{let{runTraceShowCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}),b.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,c,t)}),b.command(`eval`).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),b}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:e;try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let r=await(n.isCodingAgentLaunch??isCodingAgentLaunch)();if(a[0]===`init`&&r){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
@@ -8,6 +8,8 @@ export declare const FORCED_EXIT_BACKSTOP_MS = 900;
8
8
  export interface CommandLifecycle {
9
9
  readonly signal: AbortSignal;
10
10
  readonly stopped: Promise<NodeJS.Signals | undefined>;
11
+ /** Temporarily gives SIGINT and SIGTERM to an inherited-stdio subprocess. */
12
+ withTerminalLease?<T>(task: () => Promise<T>): Promise<T>;
11
13
  requestStop(): void;
12
14
  dispose(): void;
13
15
  }
@@ -1 +1 @@
1
- const FORCED_EXIT_BACKSTOP_MS=900;function installShutdownSignal(e={}){let t=new AbortController,n=Promise.withResolvers(),r=!1,i=0,a,stop=i=>{r||(r=!0,e.onStop?.(),t.abort(i),n.resolve(i),e.exitAfterMs!==void 0&&(a=setTimeout(()=>process.exit(i===void 0?0:i===`SIGINT`?130:143),e.exitAfterMs)))},handleSignal=e=>{i+=1,i>1&&process.exit(e===`SIGINT`?130:143),stop(e)},onSigint=()=>handleSignal(`SIGINT`),onSigterm=()=>handleSignal(`SIGTERM`);return process.on(`SIGINT`,onSigint),process.on(`SIGTERM`,onSigterm),{signal:t.signal,stopped:n.promise,requestStop:()=>stop(),dispose(){a!==void 0&&clearTimeout(a),process.off(`SIGINT`,onSigint),process.off(`SIGTERM`,onSigterm)}}}async function waitForShutdownSignal(e){let t=installShutdownSignal();try{await Promise.race([t.stopped.then(()=>`signal`),e.wait?.().then(()=>`stopped`)??new Promise(()=>{})])===`signal`&&await e.close()}finally{t.dispose()}}export{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal};
1
+ const FORCED_EXIT_BACKSTOP_MS=900;function installShutdownSignal(e={}){let t=new AbortController,n=Promise.withResolvers(),r=!1,i=0,a=0,o,stop=i=>{r||(r=!0,e.onStop?.(),t.abort(i),n.resolve(i),e.exitAfterMs!==void 0&&(o=setTimeout(()=>process.exit(i===void 0?0:i===`SIGINT`?130:143),e.exitAfterMs)))},handleSignal=e=>{a>0||(i+=1,i>1&&process.exit(e===`SIGINT`?130:143),stop(e))},onSigint=()=>handleSignal(`SIGINT`),onSigterm=()=>handleSignal(`SIGTERM`);return process.on(`SIGINT`,onSigint),process.on(`SIGTERM`,onSigterm),{signal:t.signal,stopped:n.promise,async withTerminalLease(e){a+=1;try{return await e()}finally{--a}},requestStop:()=>stop(),dispose(){o!==void 0&&clearTimeout(o),process.off(`SIGINT`,onSigint),process.off(`SIGTERM`,onSigterm)}}}async function waitForShutdownSignal(e){let t=installShutdownSignal();try{await Promise.race([t.stopped.then(()=>`signal`),e.wait?.().then(()=>`stopped`)??new Promise(()=>{})])===`signal`&&await e.close()}finally{t.dispose()}}export{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal};
@@ -32,14 +32,14 @@
32
32
  "@vercel/oidc": "3.8.0",
33
33
  "@vercel/otel": "2.1.3",
34
34
  "@vercel/sandbox": "2.8.0",
35
- "@workflow/core": "5.0.0-beta.37",
36
- "@workflow/errors": "5.0.0-beta.13",
35
+ "@workflow/core": "5.0.0-beta.38",
36
+ "@workflow/errors": "5.0.0-beta.14",
37
37
  "@workflow/serde": "5.0.0-beta.2",
38
38
  "@workflow/world": "5.0.0-beta.23",
39
- "@workflow/world-local": "5.0.0-beta.31",
40
- "@workflow/world-vercel": "5.0.0-beta.33",
39
+ "@workflow/world-local": "5.0.0-beta.32",
40
+ "@workflow/world-vercel": "5.0.0-beta.34",
41
41
  "zod": "4.4.3",
42
42
  "zod-validation-error": "5.0.0"
43
43
  },
44
- "scriptHash": "5dc33521af35100df1ef83b58d53cbec67de90d4ba05d5e5c72b928cdeb213f1"
44
+ "scriptHash": "29a1968ff7313d674cfe2e39d93daf6b5a526f8803ab44faf27ddf0a73707d48"
45
45
  }
@@ -1,2 +1,2 @@
1
- import{An as e,Cn as t,E as n,H as r,O as i,On as a,Rn as o,Tn as s,U as c,jn as l,kn as u,pn as d,v as f,wn as p,xn as m}from"../../_chunks/workflow/wait-until-De9yESQN.js";import{i as h,u as g}from"../../_chunks/workflow/dist-BeQ_csYA.js";import{a as _,i as v,r as y,t as b}from"../../_chunks/workflow/attribute-changes-DeZc2RZz.js";import"../../_chunks/workflow/dist-WjtNsOyf.js";import{n as x}from"../../_chunks/workflow/resume-hook-ip1hbn1b.js";import{t as S}from"../../_chunks/workflow/sleep-BjrUxUcs.js";function C(e){v(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,C)}function w(e){v(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,w)}function T({schema:e}={}){function t(e){v(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await x(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
1
+ import{An as e,Cn as t,E as n,H as r,O as i,On as a,Rn as o,Tn as s,U as c,jn as l,kn as u,pn as d,v as f,wn as p,xn as m}from"../../_chunks/workflow/wait-until-z48sPUjU.js";import{i as h,u as g}from"../../_chunks/workflow/dist-BeQ_csYA.js";import{a as _,i as v,r as y,t as b}from"../../_chunks/workflow/attribute-changes-1LmTKuTT.js";import"../../_chunks/workflow/dist-WjtNsOyf.js";import{n as x}from"../../_chunks/workflow/resume-hook-D1_5NCZ6.js";import{t as S}from"../../_chunks/workflow/sleep-De802yfX.js";function C(e){v(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,C)}function w(e){v(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,w)}function T({schema:e}={}){function t(e){v(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await x(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
2
2
  `)}`)}return await x(t,r.value)}}}async function E(e,t={}){let n=c.getStore(),r=n?.workflowMetadata?.workflowRunId;if(!r)throw new h(`setAttributes() must be called from a 'use workflow' or 'use step' function. Calling it from plain host code is not supported.`);let i=b(e,t);if(i.length!==0){if(n.runReadyBarrier)try{await n.runReadyBarrier}catch{}await(await m()).events.create(r,{eventType:`attr_set`,specVersion:5,eventData:{changes:i,writer:{type:`step`,stepId:n.stepMetadata.stepId,attempt:n.stepMetadata.attempt},...t.allowReservedAttributes===!0?{allowReservedAttributes:!0}:{}}})}}function D(){let e=c.getStore();return e||y(`getStepMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-step-metadata`,D),e.stepMetadata}function O(){let e=c.getStore();return e||_(`getWorkflowMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-workflow-metadata`,O),e.workflowMetadata}function k(m={}){let h=c.getStore();h||_(`getWritable()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-writable`,k);let{namespace:g}=m,v=h.workflowMetadata.workflowRunId,y=r(v,g),b=h.writables??=new Map,x=b.get(y);if(x)return x.writable;let S=i(n(globalThis,h.ops,v,h.encryptionKey,!0,h.runReadyBarrier),h.encryptionKey),C=new f(v,y,h.runReadyBarrier),w=t();return h.ops.push(w.promise),p(S.readable,C,w).catch(()=>{}),s(S.writable,w),Object.defineProperty(S.writable,a,{value:y,writable:!1}),Object.defineProperty(S.writable,l,{value:v,writable:!1}),h.workflowDeploymentId&&Object.defineProperty(S.writable,u,{value:h.workflowDeploymentId,writable:!1}),d(h.encryptionKey)&&Object.defineProperty(S.writable,e,{value:o(h.encryptionKey.keyPair.publicKey),writable:!1}),b.set(y,{writable:S.writable,state:w}),S.writable}export{h as FatalError,g as RetryableError,C as createHook,w as createWebhook,T as defineHook,D as getStepMetadata,O as getWorkflowMetadata,k as getWritable,E as setAttributes,S as sleep};