eve 0.49.0 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/src/chunks/{use-eve-agent-BZnOzAVd.js → use-eve-agent-B5I-k6Ek.js} +173 -41
  3. package/dist/src/chunks/{use-eve-agent-Bgp6INfi.js → use-eve-agent-DUMU6dap.js} +173 -41
  4. package/dist/src/cli/commands/integration-setup.d.ts +1 -0
  5. package/dist/src/cli/commands/integration-setup.js +1 -1
  6. package/dist/src/cli/commands/register-integration-commands.d.ts +1 -1
  7. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  8. package/dist/src/cli/commands/registry-declared-setups.d.ts +1 -0
  9. package/dist/src/cli/commands/registry-declared-setups.js +1 -1
  10. package/dist/src/cli/commands/registry.js +1 -1
  11. package/dist/src/cli/dev/tui/runner.js +1 -1
  12. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  13. package/dist/src/cli/dev/tui/terminal-renderer.js +1 -1
  14. package/dist/src/client/message-reducer-primitives.d.ts +0 -1
  15. package/dist/src/client/message-reducer-primitives.js +1 -1
  16. package/dist/src/client/message-reducer.js +1 -1
  17. package/dist/src/client/message-run-parts.d.ts +18 -0
  18. package/dist/src/client/message-run-parts.js +1 -0
  19. package/dist/src/client/ndjson.d.ts +4 -2
  20. package/dist/src/client/ndjson.js +3 -3
  21. package/dist/src/client/open-stream.d.ts +2 -0
  22. package/dist/src/client/open-stream.js +1 -1
  23. package/dist/src/client/stream-version.d.ts +3 -0
  24. package/dist/src/client/stream-version.js +1 -0
  25. package/dist/src/compiled/.vendor-stamp.json +7 -2
  26. package/dist/src/compiled/@eve/catalog/index.d.ts +87 -0
  27. package/dist/src/compiled/@eve/catalog/index.js +1 -0
  28. package/dist/src/compiler/extension-compatibility.d.ts +34 -21
  29. package/dist/src/compiler/extension-compatibility.js +1 -1
  30. package/dist/src/execution/ndjson-stream.d.ts +1 -1
  31. package/dist/src/execution/ndjson-stream.js +3 -3
  32. package/dist/src/execution/sandbox/bindings/docker-options.d.ts +1 -1
  33. package/dist/src/execution/sandbox/bindings/docker-options.js +1 -1
  34. package/dist/src/execution/sandbox/bindings/eve-image.d.ts +4 -0
  35. package/dist/src/execution/sandbox/bindings/eve-image.js +1 -0
  36. package/dist/src/execution/sandbox/bindings/microsandbox-options.d.ts +1 -1
  37. package/dist/src/execution/sandbox/bindings/microsandbox-options.js +1 -1
  38. package/dist/src/execution/sandbox/bindings/vercel-create-sdk.js +1 -1
  39. package/dist/src/execution/workflow-runtime.js +1 -1
  40. package/dist/src/harness/current-messages.d.ts +2 -0
  41. package/dist/src/harness/current-messages.js +1 -1
  42. package/dist/src/harness/emission.js +1 -1
  43. package/dist/src/harness/hitl/approval-input-requests.d.ts +2 -2
  44. package/dist/src/harness/hitl/approval-input-requests.js +1 -1
  45. package/dist/src/harness/input-requests.js +1 -1
  46. package/dist/src/harness/ordered-stream-emitter.js +1 -1
  47. package/dist/src/harness/tool-loop.js +2 -2
  48. package/dist/src/internal/application/package.js +1 -1
  49. package/dist/src/protocol/message-version.d.ts +52 -0
  50. package/dist/src/protocol/message-version.js +1 -0
  51. package/dist/src/protocol/message.d.ts +1 -8
  52. package/dist/src/protocol/message.js +2 -2
  53. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +0 -1
  54. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  55. package/dist/src/public/channels/slack/activity.d.ts +18 -0
  56. package/dist/src/public/channels/slack/activity.js +1 -0
  57. package/dist/src/public/channels/slack/api.js +1 -1
  58. package/dist/src/public/channels/slack/defaults.js +2 -2
  59. package/dist/src/public/channels/slack/index.d.ts +1 -0
  60. package/dist/src/public/channels/slack/index.js +1 -1
  61. package/dist/src/public/channels/slack/interaction-cards.js +1 -1
  62. package/dist/src/public/channels/slack/interactions.js +1 -1
  63. package/dist/src/public/channels/slack/slackChannel.d.ts +5 -0
  64. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  65. package/dist/src/public/memory/file/backends/default.js +1 -1
  66. package/dist/src/public/sandbox/docker-sandbox.d.ts +5 -4
  67. package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +1 -1
  68. package/dist/src/public/sandbox/vercel-sandbox.d.ts +3 -1
  69. package/dist/src/setup/integrations/file-memory/setup.d.ts +15 -0
  70. package/dist/src/setup/integrations/file-memory/setup.js +2 -0
  71. package/dist/src/setup/integrations/file-memory/vercel.d.ts +103 -0
  72. package/dist/src/setup/integrations/file-memory/vercel.js +1 -0
  73. package/dist/src/setup/integrations/registry.js +1 -1
  74. package/dist/src/setup/integrations/shared/vercel-project.js +1 -1
  75. package/dist/src/setup/scaffold/channels-catalog.js +1 -1
  76. package/dist/src/setup/scaffold/connections/catalog.d.ts +1 -1
  77. package/dist/src/setup/scaffold/connections/catalog.js +1 -1
  78. package/dist/src/setup/scaffold/create/project.js +1 -1
  79. package/dist/src/svelte/index.js +1 -1
  80. package/dist/src/svelte/use-eve-agent.js +1 -1
  81. package/dist/src/vue/index.js +1 -1
  82. package/dist/src/vue/use-eve-agent.js +1 -1
  83. package/docs/channels/slack.mdx +1 -1
  84. package/docs/concepts/sessions-runs-and-streaming.md +12 -6
  85. package/docs/guides/client/streaming.mdx +18 -2
  86. package/docs/install-integrations.mdx +3 -0
  87. package/docs/memory/file.md +49 -10
  88. package/docs/reference/cli.md +28 -23
  89. package/docs/sandbox.mdx +5 -3
  90. package/docs/tools/human-in-the-loop.md +2 -0
  91. package/package.json +1 -1
  92. package/dist/src/packages/eve-catalog/src/index.js +0 -1
@@ -6,7 +6,7 @@ interface IntegrationCommandLogger {
6
6
  log(message: string): void;
7
7
  }
8
8
  export declare function parseConnectPrincipalType(value: string): ConnectPrincipalType;
9
- /** Registers hidden built-in integration setup commands used by trusted registry items. */
9
+ /** Registers built-in integration setup commands used by trusted registry items. */
10
10
  export declare function registerIntegrationCommands(input: {
11
11
  program: Command;
12
12
  logger: IntegrationCommandLogger;
@@ -1 +1 @@
1
- import{parseSetupAnswer}from"./setup-answers.js";import{InvalidArgumentError}from"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";function parseConnectPrincipalType(e){if(e===`app`||e===`user`)return e;throw new InvalidArgumentError(`Expected principal type "app" or "user".`)}function registerIntegrationCommands(t){let{applicationContext:r,logger:i,program:a}=t,o=a.command(`integration`,{hidden:!0});applicationCommand(o.command(`setup <kind>`),r).option(`-y, --yes`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question; requires --non-interactive.`,parseSetupAnswer,{}).action(async(e,t)=>{let{runIntegrationSetupCommand:n}=await import(`./integration-setup.js`);await n(i,r.root,e,{yes:t.yes,nonInteractive:t.nonInteractive,answers:t.answer})}),applicationCommand(o.command(`connect <slug> <service> [canonical-name]`),r).option(`-y, --yes`).option(`--creation-type <type>`,`Select the Vercel Connect creation type.`).option(`--connection-method <method>`,`Select the Vercel Connect connection method.`).option(`--principal-type <type>`,`Require app- or user-scoped Vercel Connect credentials.`,parseConnectPrincipalType).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).action(async(e,t,n,a)=>{let{runIntegrationConnectCommand:o}=await import(`./integration-connect.js`);await o(i,r.root,e,t,n,a)})}export{parseConnectPrincipalType,registerIntegrationCommands};
1
+ import{parseSetupAnswer}from"./setup-answers.js";import{InvalidArgumentError}from"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";function parseConnectPrincipalType(e){if(e===`app`||e===`user`)return e;throw new InvalidArgumentError(`Expected principal type "app" or "user".`)}function registerIntegrationCommands(t){let{applicationContext:r,logger:i,program:a}=t,o=a.command(`integration`).description(`Set up an eve integration`);applicationCommand(o.command(`setup <kind>`),r).description(`Run a built-in integration setup flow`).option(`-y, --yes`).option(`--force`,`Overwrite files created by setup.`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question; requires --non-interactive.`,parseSetupAnswer,{}).action(async(e,t)=>{let{runIntegrationSetupCommand:n}=await import(`./integration-setup.js`);await n(i,r.root,e,{yes:t.yes,force:t.force,nonInteractive:t.nonInteractive,answers:t.answer})}),applicationCommand(o.command(`connect <slug> <service> [canonical-name]`,{hidden:!0}),r).option(`-y, --yes`).option(`--creation-type <type>`,`Select the Vercel Connect creation type.`).option(`--connection-method <method>`,`Select the Vercel Connect connection method.`).option(`--principal-type <type>`,`Require app- or user-scoped Vercel Connect credentials.`,parseConnectPrincipalType).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).action(async(e,t,n,a)=>{let{runIntegrationConnectCommand:o}=await import(`./integration-connect.js`);await o(i,r.root,e,t,n,a)})}export{parseConnectPrincipalType,registerIntegrationCommands};
@@ -4,6 +4,7 @@ import type { RegistryCommandLogger, RegistrySetupDependencies } from "./registr
4
4
  import type { RegistrySetupCommand } from "./registry-setup-command.js";
5
5
  export interface DeclaredSetupOptions {
6
6
  yes?: boolean;
7
+ force?: boolean;
7
8
  nonInteractive?: boolean;
8
9
  answers?: Record<string, unknown>;
9
10
  silent?: boolean;
@@ -1 +1 @@
1
- import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{createPrompter}from"#setup/prompter.js";import{createHeadlessPrompter}from"#setup/headless.js";import{mergeRegistrySetupCompletions}from"#setup/registry-setup-completion.js";async function runDeclaredSetups(i){let a={facts:[]};if(i.setups===void 0)return a;let o=await i.dependencies.loadSetupCommandRunner(),s=i.options.prompter??(i.options.nonInteractive?createHeadlessPrompter(i.logger.log):createPrompter());try{for(let n of i.setups){let r=await o(i.appRoot,{...n,args:[...n.args,...i.options.yes?[`--yes`]:[],...i.options.nonInteractive?[`--non-interactive`]:[],...Object.entries(i.options.answers??{}).flatMap(([e,t])=>[`--answer`,`${e}=${JSON.stringify(t)}`])]},i.item,{prompter:s,signal:i.options.signal});if(r.kind===`cancelled`)return i.logger.log(i.cancelledReminder),!1;if(r.kind===`blocked`){if(!i.options.nonInteractive)throw Error(`Setup requires more input.`);return i.logger.error(serializeHeadlessSetupEvent({version:1,type:`blocked`,item:i.item,installed:!0,completedItems:[],...r.blocker,next:headlessSetupContinuation({item:i.item,installed:!0,answers:i.options.answers,question:r.blocker.status===`input_required`?r.blocker.question:void 0})})),process.exitCode=2,!1}if(i.options.silent!==!0)for(let e of r.facts)i.logger.log(`${e.label}: ${e.value}`);a=mergeRegistrySetupCompletions(a,r)}return a}catch(n){let r=n instanceof Error?n.message:String(n);if(i.options.nonInteractive)return i.logger.error(serializeHeadlessSetupEvent({version:1,type:`failed`,item:i.item,completedItems:[],message:r,next:headlessSetupContinuation({item:i.item,installed:!0,answers:i.options.answers})})),process.exitCode=1,!1;throw Error(`${r} Try again with \`${i.resumeCommand}\`.`)}}export{runDeclaredSetups};
1
+ import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{createPrompter}from"#setup/prompter.js";import{createHeadlessPrompter}from"#setup/headless.js";import{mergeRegistrySetupCompletions}from"#setup/registry-setup-completion.js";async function runDeclaredSetups(i){let a={facts:[]};if(i.setups===void 0)return a;let o=await i.dependencies.loadSetupCommandRunner(),s=i.options.prompter??(i.options.nonInteractive?createHeadlessPrompter(i.logger.log):createPrompter());try{for(let n of i.setups){let r=await o(i.appRoot,{...n,args:[...n.args,...i.options.yes?[`--yes`]:[],...i.options.force&&n.package===`eve`&&n.bin===`eve`&&n.args[0]===`integration`&&n.args[1]===`setup`?[`--force`]:[],...i.options.nonInteractive?[`--non-interactive`]:[],...Object.entries(i.options.answers??{}).flatMap(([e,t])=>[`--answer`,`${e}=${JSON.stringify(t)}`])]},i.item,{prompter:s,signal:i.options.signal});if(r.kind===`cancelled`)return i.logger.log(i.cancelledReminder),!1;if(r.kind===`blocked`){if(!i.options.nonInteractive)throw Error(`Setup requires more input.`);return i.logger.error(serializeHeadlessSetupEvent({version:1,type:`blocked`,item:i.item,installed:!0,completedItems:[],...r.blocker,next:headlessSetupContinuation({item:i.item,installed:!0,answers:i.options.answers,question:r.blocker.status===`input_required`?r.blocker.question:void 0})})),process.exitCode=2,!1}if(i.options.silent!==!0)for(let e of r.facts)i.logger.log(`${e.label}: ${e.value}`);a=mergeRegistrySetupCompletions(a,r)}return a}catch(n){let r=n instanceof Error?n.message:String(n);if(i.options.nonInteractive)return i.logger.error(serializeHeadlessSetupEvent({version:1,type:`failed`,item:i.item,completedItems:[],message:r,next:headlessSetupContinuation({item:i.item,installed:!0,answers:i.options.answers})})),process.exitCode=1,!1;throw Error(`${r} Try again with \`${i.resumeCommand}\`.`)}}export{runDeclaredSetups};
@@ -1 +1 @@
1
- import{hasInteractiveTerminal}from"./preconditions.js";import{serializeHeadlessSetupEvent}from"./setup-headless.js";import{runDeclaredSetups}from"./registry-declared-setups.js";import{installRegistryItemTransaction}from"./registry-install-transaction.js";import{prepareDeclaredPnpmBuildPolicy}from"./registry-pnpm-build-policy-flow.js";import{runRegistryPackage}from"./registry-package.js";import{eveMetadataFromRegistryItem,parseOfficialRegistrySearchMetadata}from"./registry-metadata.js";import{printRegistrySearchResults,registryViewText}from"./registry-presentation.js";import{addRegistryMappings,prepareWebRegistryProject,readRegistryConfig}from"./registry-project.js";import{errorMessage,reportRegistryCompletion,resolveRegistryItemForAdd,runRegistryAction,setupReminder,setupResumeCommand}from"./registry-recovery.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createPrompter}from"#setup/prompter.js";import{WizardCancelledError}from"#setup/step.js";import{addRegistryItems,getRegistryItems,searchRegistries}from"#compiled/shadcn-registry/index.js";import semver from"#compiled/semver/index.js";const defaultAddCommandDependencies={createPrompter,hasInteractiveTerminal,loadSetupCommandRunner:async()=>(await import(`./registry-setup-command.js`)).runRegistrySetupCommand,prepareWebRegistryProject};function resolveOfficialRegistryUrl(e=process.env.EVE_DEV_OFFICIAL_REGISTRY_URL){if(e===void 0)return`https://eve.dev/r`;let t;try{t=new URL(e)}catch{throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must be an HTTP(S) URL.`)}if(t.protocol!==`http:`&&t.protocol!==`https:`)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must be an HTTP(S) URL.`);if(t.username!==``||t.password!==``)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must not include credentials.`);if(t.search!==``||t.hash!==``)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must not include a query or fragment.`);return t.pathname=t.pathname.replace(/\/+$/,``),t.toString().replace(/\/$/,``)}const OFFICIAL_REGISTRY=resolveOfficialRegistryUrl(),OFFICIAL_CATALOG=`${OFFICIAL_REGISTRY}/registry.json`,SKILLS_REGISTRY=`@skills`;function isRegistryAddress(e){return e.startsWith(`@`)||/^https?:\/\//.test(e)}function itemAddress(e){return isRegistryAddress(e)?e:`${OFFICIAL_REGISTRY}/${e}.json`}async function installOfficialRegistryItem(e,t,n={}){let r=await readEveRegistryConfig(e);await addRegistryItems([itemAddress(t)],{config:r,cwd:e,overwrite:n.overwrite})}function assertCompatibleEveVersion(e){if(e===void 0)return;let t=resolveInstalledPackageInfo().version;if(semver.validRange(e)===null)throw Error(`Registry item has an invalid eve version requirement: ${e}.`);if(!semver.subset(t,e))throw Error(`This registry item requires eve ${e}, but this project is using eve ${t}. Upgrade eve and run the command again.`)}function isOfficialItemAddress(e){return e.startsWith(`${OFFICIAL_REGISTRY}/`)}function withBuiltInRegistries(e){return{...e,registries:{[SKILLS_REGISTRY]:`https://www.skills.sh/r/{name}?agent=eve`,...e.registries}}}async function readEveRegistryConfig(e){return withBuiltInRegistries(await readRegistryConfig(e))}function configuredRegistrySources(e){return Object.keys(e.registries??{})}function validateRegistrySource(e){if(e!==void 0&&!isRegistryAddress(e))throw Error(`Registry sources must be a namespace or URL: ${e}`)}async function loadOfficialSearchMetadata(){let e=await fetch(OFFICIAL_CATALOG);if(!e.ok)throw Error(`Could not read the eve registry (${e.status}).`);return parseOfficialRegistrySearchMetadata(await e.json())}function searchItemAddress(e){return e.registry===OFFICIAL_CATALOG?e.name:e.addCommandArgument}function enrichSearchItem(e,t){let n=searchItemAddress(e);return{item:e,address:n,...t.get(n)}}function registrySourceLabel(e){return e===OFFICIAL_CATALOG?`eve`:e===SKILLS_REGISTRY?`skills.sh`:e}function searchPresentationSections(e,t,n){return e.flatMap(e=>{let r=t.get(e);return r===void 0?[]:[{label:registrySourceLabel(e),items:r.items.map(e=>enrichSearchItem(e,n)),total:r.pagination.total}]})}async function printAddSuggestions(e,t,n){try{let r=n.split(`/`).at(-1)||n,{resultsBySource:i,sources:a,metadataByAddress:o}=await searchRegistryCatalog(t,{limit:5,query:r}),s=searchPresentationSections(a,i,o);if(s.every(e=>e.items.length===0))return;e.log(`Did you mean?`),printRegistrySearchResults(e,{query:r,sections:s})}catch{}}async function searchRegistryCatalog(e,t){validateRegistrySource(t.source);let n=await readEveRegistryConfig(e),r=t.source?[t.source]:[OFFICIAL_CATALOG,...configuredRegistrySources(n).filter(e=>t.query!==void 0||e!==SKILLS_REGISTRY)],i=await Promise.all(r.map(async e=>{try{return{result:await searchRegistries([e],{config:n,limit:t.limit??100,query:t.query}),source:e}}catch(t){return{error:t,source:e}}})),a=[],o=new Map;for(let e of i)if(`error`in e)a.push({message:errorMessage(e.error),registry:e.source});else{let t=e.result.errors??[];if(a.push(...t),t.length===0){let t=e.result.items.filter(t=>t.registry===e.source);o.set(e.source,{...e.result,items:t,pagination:{...e.result.pagination,total:e.result.items.length===t.length?e.result.pagination.total:0}})}}let s=new Map(a.map(e=>[`${e.registry}\0${e.message}`,e])),c=o.has(OFFICIAL_CATALOG)?await loadOfficialSearchMetadata():new Map,l=o.get(OFFICIAL_CATALOG);l!==void 0&&l.items.sort((e,t)=>{let rank=e=>c.get(searchItemAddress(e))?.implementation===`native`?0:1;return rank(e)-rank(t)});let u=[...o.values()];return{config:n,result:{items:u.flatMap(e=>e.items),pagination:{hasMore:u.some(e=>e.pagination.hasMore),limit:t.limit??100,offset:0,total:u.reduce((e,t)=>e+t.pagination.total,0)},...s.size>0?{errors:[...s.values()]}:{}},resultsBySource:o,sources:r,metadataByAddress:c}}async function browseRegistryCatalog(e,t={}){let{result:n}=await searchRegistryCatalog(e,t);return{items:n.items.map(e=>{let t={address:e.registry===OFFICIAL_CATALOG?e.name:e.addCommandArgument,name:e.name,source:e.registry===OFFICIAL_CATALOG?`Vercel`:e.registry};return e.title!==void 0&&(t.title=e.title),e.type!==void 0&&(t.type=e.type),e.description!==void 0&&(t.description=e.description),t}),total:n.pagination.total,errors:n.errors??[]}}async function browseRegistryItems(e,t,n,r,i={}){let{result:a,resultsBySource:o,sources:s,metadataByAddress:l}=await searchRegistryCatalog(t,{limit:i.limit,query:n,source:r}),u=a.errors??[];if(i.json||o.size>0){let t=a.items.map(e=>({...e,...l.get(searchItemAddress(e))})),r={query:n,sections:searchPresentationSections(s,o,l)};i.json&&(r.json={...a,items:t}),printRegistrySearchResults(e,r)}for(let t of u)e.error(`${t.registry}: ${t.message}`);u.length>0&&(process.exitCode=1)}async function getRegistryItemManifest(e,t){let n=await readEveRegistryConfig(e),r=await getRegistryItems([itemAddress(t)],{config:n});return r.length===1?r[0]:r}async function installRegistryItem(e,t,n={},r=defaultAddCommandDependencies){let i,a=[],o={error:e=>{i=e},log:e=>a.push(e)},s=process.exitCode,c=await runAddCommand(o,e,t,{...n,yes:n.prompter===void 0||n.yes,setupAuthorized:n.prompter!==void 0},r);if(process.exitCode=s,i!==void 0)throw Error(i);if(c===!1)throw new WizardCancelledError;let l={output:a};return c!==void 0&&(l.setup=c),l}async function runAddCommand(e,s,c,l,u=defaultAddCommandDependencies){return runRegistryAction(e,s,async()=>{let d=await readEveRegistryConfig(s),f=itemAddress(c);if(l.skipInstall===!0){if(l.overwrite===!0)throw Error(`--overwrite cannot be used with --skip-install.`);if(l.skipSetup===!0)throw Error(`--skip-install cannot be used with --skip-setup.`);if(!isOfficialItemAddress(f))throw Error(`Setup flows are currently supported only for official eve registry items.`)}let p=await resolveRegistryItemForAdd(e,async()=>(await getRegistryItems([f],{config:d}))[0],()=>printAddSuggestions(e,s,c));if(!p.found)return;let m=p.item,h=isOfficialItemAddress(f)?eveMetadataFromRegistryItem(m):void 0;if(assertCompatibleEveVersion(h?.requires),h?.components!==void 0){if(!isOfficialItemAddress(f))throw Error(`Registry packages require the official eve registry.`);return reportRegistryCompletion(e,c,await runRegistryPackage({logger:e,appRoot:s,item:c,components:h.components,config:d,options:l,dependencies:u,operations:{itemAddress,metadata:eveMetadataFromRegistryItem,assertCompatibleVersion:assertCompatibleEveVersion,runSetups:({item:t,setups:r,prompter:i})=>runDeclaredSetups({logger:e,appRoot:s,item:t,setups:r,options:{yes:l.yes,nonInteractive:l.nonInteractive,answers:l.answers,prompter:i,signal:l.signal},dependencies:u,cancelledReminder:setupReminder(t,`cancelled`),resumeCommand:setupResumeCommand(t)}),setupReminder:e=>setupReminder(e,`skipped`)}}),l)}if(l.skipInstall===!0){if(h?.setup===void 0)throw Error(`Registry item "${c}" does not declare a setup flow.`);return reportRegistryCompletion(e,c,await runDeclaredSetups({logger:e,appRoot:s,item:c,setups:h.setup,options:l,dependencies:u,cancelledReminder:setupReminder(c,`cancelled`),resumeCommand:setupResumeCommand(c)}),l)}if(!await prepareDeclaredPnpmBuildPolicy({logger:e,appRoot:s,item:c,policies:h?.install?.pnpm?.buildScripts,options:l}))return!1;if(f===itemAddress(`channel/web`)&&await(u.prepareWebRegistryProject??prepareWebRegistryProject)(s),await installRegistryItemTransaction({appRoot:s,item:c,registryItem:m,nonInteractive:l.nonInteractive,logger:e,install:async()=>{await addRegistryItems([f],{config:d,cwd:s,overwrite:l.overwrite,silent:l.silent})}}),h?.setup===void 0)return reportRegistryCompletion(e,c,{facts:[]},l);let g=u.hasInteractiveTerminal?.()??defaultAddCommandDependencies.hasInteractiveTerminal();if(l.nonInteractive&&e.log(serializeHeadlessSetupEvent({version:1,type:`progress`,message:l.skipInstall?`Setup ${c}`:`Installed ${c}`})),l.skipSetup===!0){if(l.nonInteractive)return reportRegistryCompletion(e,c,{facts:[]},l);e.log(setupReminder(c,`skipped`));return}if(!l.nonInteractive&&!l.yes&&!g&&l.setupAuthorized!==!0){e.log(setupReminder(c,`skipped`));return}if(!l.nonInteractive&&!l.yes&&l.setupAuthorized!==!0)try{if(await(l.prompter??u.createPrompter?.()??defaultAddCommandDependencies.createPrompter()).select({message:`Set up ${c} now?`,initialValue:`yes`,options:[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}]})===`no`){e.log(setupReminder(c,`skipped`));return}}catch(t){if(!(t instanceof WizardCancelledError))throw t;e.log(setupReminder(c,`cancelled`));return}return reportRegistryCompletion(e,c,await runDeclaredSetups({logger:e,appRoot:s,item:c,setups:h.setup,options:l,dependencies:u,cancelledReminder:setupReminder(c,`cancelled`),resumeCommand:setupResumeCommand(c)}),l)})}async function runRegistryAddCommand(e,t,n){await runRegistryAction(e,t,async()=>{let r=await addRegistryMappings(t,n);for(let t of r.skippedBuiltIn)e.log(`Skipped ${t} because it is built in.`);for(let t of r.skippedExisting)e.log(`Skipped ${t} because it is already configured.`);r.added.length>0&&e.log(`Added ${r.added.join(`, `)} to package.json.`)})}async function runRegistryListCommand(e,t,n,r={}){await runRegistryAction(e,t,()=>browseRegistryItems(e,t,void 0,n,r))}async function runRegistrySearchCommand(e,t,n,r,i={}){await runRegistryAction(e,t,()=>browseRegistryItems(e,t,n,r,{...i,limit:i.limit??10}))}async function runRegistryViewCommand(e,t,n,r={}){await runRegistryAction(e,t,async()=>{let i=await readEveRegistryConfig(t),a=await getRegistryItems([itemAddress(n)],{config:i}),o=a.length===1?a[0]:a;e.log(r.json?JSON.stringify(o,null,2):registryViewText(n,o))})}export{browseRegistryCatalog,getRegistryItemManifest,installOfficialRegistryItem,installRegistryItem,resolveOfficialRegistryUrl,runAddCommand,runRegistryAddCommand,runRegistryListCommand,runRegistrySearchCommand,runRegistryViewCommand};
1
+ import{hasInteractiveTerminal}from"./preconditions.js";import{serializeHeadlessSetupEvent}from"./setup-headless.js";import{runDeclaredSetups}from"./registry-declared-setups.js";import{installRegistryItemTransaction}from"./registry-install-transaction.js";import{prepareDeclaredPnpmBuildPolicy}from"./registry-pnpm-build-policy-flow.js";import{runRegistryPackage}from"./registry-package.js";import{eveMetadataFromRegistryItem,parseOfficialRegistrySearchMetadata}from"./registry-metadata.js";import{printRegistrySearchResults,registryViewText}from"./registry-presentation.js";import{addRegistryMappings,prepareWebRegistryProject,readRegistryConfig}from"./registry-project.js";import{errorMessage,reportRegistryCompletion,resolveRegistryItemForAdd,runRegistryAction,setupReminder,setupResumeCommand}from"./registry-recovery.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createPrompter}from"#setup/prompter.js";import{WizardCancelledError}from"#setup/step.js";import{addRegistryItems,getRegistryItems,searchRegistries}from"#compiled/shadcn-registry/index.js";import semver from"#compiled/semver/index.js";const defaultAddCommandDependencies={createPrompter,hasInteractiveTerminal,loadSetupCommandRunner:async()=>(await import(`./registry-setup-command.js`)).runRegistrySetupCommand,prepareWebRegistryProject};function resolveOfficialRegistryUrl(e=process.env.EVE_DEV_OFFICIAL_REGISTRY_URL){if(e===void 0)return`https://eve.dev/r`;let t;try{t=new URL(e)}catch{throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must be an HTTP(S) URL.`)}if(t.protocol!==`http:`&&t.protocol!==`https:`)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must be an HTTP(S) URL.`);if(t.username!==``||t.password!==``)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must not include credentials.`);if(t.search!==``||t.hash!==``)throw Error(`EVE_DEV_OFFICIAL_REGISTRY_URL must not include a query or fragment.`);return t.pathname=t.pathname.replace(/\/+$/,``),t.toString().replace(/\/$/,``)}const OFFICIAL_REGISTRY=resolveOfficialRegistryUrl(),OFFICIAL_CATALOG=`${OFFICIAL_REGISTRY}/registry.json`,SKILLS_REGISTRY=`@skills`;function isRegistryAddress(e){return e.startsWith(`@`)||/^https?:\/\//.test(e)}function itemAddress(e){return isRegistryAddress(e)?e:`${OFFICIAL_REGISTRY}/${e}.json`}async function installOfficialRegistryItem(e,t,n={}){let r=await readEveRegistryConfig(e);await addRegistryItems([itemAddress(t)],{config:r,cwd:e,overwrite:n.overwrite})}function assertCompatibleEveVersion(e){if(e===void 0)return;let t=resolveInstalledPackageInfo().version;if(semver.validRange(e)===null)throw Error(`Registry item has an invalid eve version requirement: ${e}.`);if(!semver.subset(t,e))throw Error(`This registry item requires eve ${e}, but this project is using eve ${t}. Upgrade eve and run the command again.`)}function isOfficialItemAddress(e){return e.startsWith(`${OFFICIAL_REGISTRY}/`)}function withBuiltInRegistries(e){return{...e,registries:{[SKILLS_REGISTRY]:`https://www.skills.sh/r/{name}?agent=eve`,...e.registries}}}async function readEveRegistryConfig(e){return withBuiltInRegistries(await readRegistryConfig(e))}function configuredRegistrySources(e){return Object.keys(e.registries??{})}function validateRegistrySource(e){if(e!==void 0&&!isRegistryAddress(e))throw Error(`Registry sources must be a namespace or URL: ${e}`)}async function loadOfficialSearchMetadata(){let e=await fetch(OFFICIAL_CATALOG);if(!e.ok)throw Error(`Could not read the eve registry (${e.status}).`);return parseOfficialRegistrySearchMetadata(await e.json())}function searchItemAddress(e){return e.registry===OFFICIAL_CATALOG?e.name:e.addCommandArgument}function enrichSearchItem(e,t){let n=searchItemAddress(e);return{item:e,address:n,...t.get(n)}}function registrySourceLabel(e){return e===OFFICIAL_CATALOG?`eve`:e===SKILLS_REGISTRY?`skills.sh`:e}function searchPresentationSections(e,t,n){return e.flatMap(e=>{let r=t.get(e);return r===void 0?[]:[{label:registrySourceLabel(e),items:r.items.map(e=>enrichSearchItem(e,n)),total:r.pagination.total}]})}async function printAddSuggestions(e,t,n){try{let r=n.split(`/`).at(-1)||n,{resultsBySource:i,sources:a,metadataByAddress:o}=await searchRegistryCatalog(t,{limit:5,query:r}),s=searchPresentationSections(a,i,o);if(s.every(e=>e.items.length===0))return;e.log(`Did you mean?`),printRegistrySearchResults(e,{query:r,sections:s})}catch{}}async function searchRegistryCatalog(e,t){validateRegistrySource(t.source);let n=await readEveRegistryConfig(e),r=t.source?[t.source]:[OFFICIAL_CATALOG,...configuredRegistrySources(n).filter(e=>t.query!==void 0||e!==SKILLS_REGISTRY)],i=await Promise.all(r.map(async e=>{try{return{result:await searchRegistries([e],{config:n,limit:t.limit??100,query:t.query}),source:e}}catch(t){return{error:t,source:e}}})),a=[],o=new Map;for(let e of i)if(`error`in e)a.push({message:errorMessage(e.error),registry:e.source});else{let t=e.result.errors??[];if(a.push(...t),t.length===0){let t=e.result.items.filter(t=>t.registry===e.source);o.set(e.source,{...e.result,items:t,pagination:{...e.result.pagination,total:e.result.items.length===t.length?e.result.pagination.total:0}})}}let s=new Map(a.map(e=>[`${e.registry}\0${e.message}`,e])),c=o.has(OFFICIAL_CATALOG)?await loadOfficialSearchMetadata():new Map,l=o.get(OFFICIAL_CATALOG);l!==void 0&&l.items.sort((e,t)=>{let rank=e=>c.get(searchItemAddress(e))?.implementation===`native`?0:1;return rank(e)-rank(t)});let u=[...o.values()];return{config:n,result:{items:u.flatMap(e=>e.items),pagination:{hasMore:u.some(e=>e.pagination.hasMore),limit:t.limit??100,offset:0,total:u.reduce((e,t)=>e+t.pagination.total,0)},...s.size>0?{errors:[...s.values()]}:{}},resultsBySource:o,sources:r,metadataByAddress:c}}async function browseRegistryCatalog(e,t={}){let{result:n}=await searchRegistryCatalog(e,t);return{items:n.items.map(e=>{let t={address:e.registry===OFFICIAL_CATALOG?e.name:e.addCommandArgument,name:e.name,source:e.registry===OFFICIAL_CATALOG?`Vercel`:e.registry};return e.title!==void 0&&(t.title=e.title),e.type!==void 0&&(t.type=e.type),e.description!==void 0&&(t.description=e.description),t}),total:n.pagination.total,errors:n.errors??[]}}async function browseRegistryItems(e,t,n,r,i={}){let{result:a,resultsBySource:o,sources:s,metadataByAddress:l}=await searchRegistryCatalog(t,{limit:i.limit,query:n,source:r}),u=a.errors??[];if(i.json||o.size>0){let t=a.items.map(e=>({...e,...l.get(searchItemAddress(e))})),r={query:n,sections:searchPresentationSections(s,o,l)};i.json&&(r.json={...a,items:t}),printRegistrySearchResults(e,r)}for(let t of u)e.error(`${t.registry}: ${t.message}`);u.length>0&&(process.exitCode=1)}async function getRegistryItemManifest(e,t){let n=await readEveRegistryConfig(e),r=await getRegistryItems([itemAddress(t)],{config:n});return r.length===1?r[0]:r}async function installRegistryItem(e,t,n={},r=defaultAddCommandDependencies){let i,a=[],o={error:e=>{i=e},log:e=>a.push(e)},s=process.exitCode,c=await runAddCommand(o,e,t,{...n,yes:n.prompter===void 0||n.yes,setupAuthorized:n.prompter!==void 0},r);if(process.exitCode=s,i!==void 0)throw Error(i);if(c===!1)throw new WizardCancelledError;let l={output:a};return c!==void 0&&(l.setup=c),l}async function runAddCommand(e,s,c,l,u=defaultAddCommandDependencies){return runRegistryAction(e,s,async()=>{let d=await readEveRegistryConfig(s),f=itemAddress(c);if(l.skipInstall===!0){if(l.overwrite===!0)throw Error(`--overwrite cannot be used with --skip-install.`);if(l.skipSetup===!0)throw Error(`--skip-install cannot be used with --skip-setup.`);if(!isOfficialItemAddress(f))throw Error(`Setup flows are currently supported only for official eve registry items.`)}let p=await resolveRegistryItemForAdd(e,async()=>(await getRegistryItems([f],{config:d}))[0],()=>printAddSuggestions(e,s,c));if(!p.found)return;let m=p.item,h=isOfficialItemAddress(f)?eveMetadataFromRegistryItem(m):void 0;if(assertCompatibleEveVersion(h?.requires),h?.components!==void 0){if(!isOfficialItemAddress(f))throw Error(`Registry packages require the official eve registry.`);return reportRegistryCompletion(e,c,await runRegistryPackage({logger:e,appRoot:s,item:c,components:h.components,config:d,options:l,dependencies:u,operations:{itemAddress,metadata:eveMetadataFromRegistryItem,assertCompatibleVersion:assertCompatibleEveVersion,runSetups:({item:t,setups:r,prompter:i})=>runDeclaredSetups({logger:e,appRoot:s,item:t,setups:r,options:{yes:l.yes,force:l.overwrite,nonInteractive:l.nonInteractive,answers:l.answers,prompter:i,signal:l.signal},dependencies:u,cancelledReminder:setupReminder(t,`cancelled`),resumeCommand:setupResumeCommand(t)}),setupReminder:e=>setupReminder(e,`skipped`)}}),l)}if(l.skipInstall===!0){if(h?.setup===void 0)throw Error(`Registry item "${c}" does not declare a setup flow.`);return reportRegistryCompletion(e,c,await runDeclaredSetups({logger:e,appRoot:s,item:c,setups:h.setup,options:l,dependencies:u,cancelledReminder:setupReminder(c,`cancelled`),resumeCommand:setupResumeCommand(c)}),l)}if(!await prepareDeclaredPnpmBuildPolicy({logger:e,appRoot:s,item:c,policies:h?.install?.pnpm?.buildScripts,options:l}))return!1;if(f===itemAddress(`channel/web`)&&await(u.prepareWebRegistryProject??prepareWebRegistryProject)(s),await installRegistryItemTransaction({appRoot:s,item:c,registryItem:m,nonInteractive:l.nonInteractive,logger:e,install:async()=>{await addRegistryItems([f],{config:d,cwd:s,overwrite:l.overwrite,silent:l.silent})}}),h?.setup===void 0)return reportRegistryCompletion(e,c,{facts:[]},l);let g=u.hasInteractiveTerminal?.()??defaultAddCommandDependencies.hasInteractiveTerminal();if(l.nonInteractive&&e.log(serializeHeadlessSetupEvent({version:1,type:`progress`,message:l.skipInstall?`Setup ${c}`:`Installed ${c}`})),l.skipSetup===!0){if(l.nonInteractive)return reportRegistryCompletion(e,c,{facts:[]},l);e.log(setupReminder(c,`skipped`));return}if(!l.nonInteractive&&!l.yes&&!g&&l.setupAuthorized!==!0){e.log(setupReminder(c,`skipped`));return}if(!l.nonInteractive&&!l.yes&&l.setupAuthorized!==!0)try{if(await(l.prompter??u.createPrompter?.()??defaultAddCommandDependencies.createPrompter()).select({message:`Set up ${c} now?`,initialValue:`yes`,options:[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}]})===`no`){e.log(setupReminder(c,`skipped`));return}}catch(t){if(!(t instanceof WizardCancelledError))throw t;e.log(setupReminder(c,`cancelled`));return}return reportRegistryCompletion(e,c,await runDeclaredSetups({logger:e,appRoot:s,item:c,setups:h.setup,options:{...l,force:l.overwrite},dependencies:u,cancelledReminder:setupReminder(c,`cancelled`),resumeCommand:setupResumeCommand(c)}),l)})}async function runRegistryAddCommand(e,t,n){await runRegistryAction(e,t,async()=>{let r=await addRegistryMappings(t,n);for(let t of r.skippedBuiltIn)e.log(`Skipped ${t} because it is built in.`);for(let t of r.skippedExisting)e.log(`Skipped ${t} because it is already configured.`);r.added.length>0&&e.log(`Added ${r.added.join(`, `)} to package.json.`)})}async function runRegistryListCommand(e,t,n,r={}){await runRegistryAction(e,t,()=>browseRegistryItems(e,t,void 0,n,r))}async function runRegistrySearchCommand(e,t,n,r,i={}){await runRegistryAction(e,t,()=>browseRegistryItems(e,t,n,r,{...i,limit:i.limit??10}))}async function runRegistryViewCommand(e,t,n,r={}){await runRegistryAction(e,t,async()=>{let i=await readEveRegistryConfig(t),a=await getRegistryItems([itemAddress(n)],{config:i}),o=a.length===1?a[0]:a;e.log(r.json?JSON.stringify(o,null,2):registryViewText(n,o))})}export{browseRegistryCatalog,getRegistryItemManifest,installOfficialRegistryItem,installRegistryItem,resolveOfficialRegistryUrl,runAddCommand,runRegistryAddCommand,runRegistryListCommand,runRegistrySearchCommand,runRegistryViewCommand};
@@ -1 +1 @@
1
- import{PROMPT_COMMANDS,formatPromptCommandHelp,parsePromptCommand}from"./prompt-commands.js";import{pickAgentHeaderTip}from"./agent-header.js";import{failureKey,formatFailureDetail,formatFailureHint,formatFailureMessage,isInterruptedError,localFailureHint}from"./errors.js";import{parseLogDisplayMode}from"./log-display-mode.js";import{createMcpConnectionStatusTracker}from"./mcp-connection-status.js";import{createRemoteConnectionController}from"./remote-connection.js";import{SubagentPump}from"./subagent-pump.js";import{BOOT_DETECTIONS,CLI_MISSING_SETUP_ISSUE,LOGIN_SETUP_ISSUE,detectSetupIssues,formatSetupIssuesLine,normalizeLocalModelEndpoint,orderedSetupIssues}from"./setup-issues.js";import{TerminalRenderer}from"./terminal-renderer.js";import{createVercelStatusTracker}from"./vercel-status.js";import"#client/index.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{inspectApplication}from"#services/inspect-application.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{toErrorMessage}from"#shared/errors.js";import{getVercelAuthStatus}from"#setup/vercel-project.js";import{probeAgentInfo}from"#services/dev-client/agent-info-probe.js";import{renderApplicationInfo}from"#cli/commands/info.js";import{subscribeDevelopmentSandboxPrewarmLogs}from"#execution/sandbox/development-prewarm.js";import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{createDevelopmentRuntimeArtifactRefresher}from"#services/dev-client.js";async function delayMs(e){await new Promise(t=>{setTimeout(t,e).unref?.()})}function authIssueForStatus(e){if(e===`logged-out`)return LOGIN_SETUP_ISSUE;if(e===`cli-missing`)return CLI_MISSING_SETUP_ISSUE}var EveTUIRunner=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_=!1;#v;#y;#b;#x;#S;#C;#w;#T;#E=!1;#D=new AbortController;#O=!1;#k=[];#A;#j;#M;#N;#P;#F=new Map;#I;#L=[];#R;#z=!1;#B;#V=new Map;#H=new Set;#U;#W;#G;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#G=t.lifecycle),this.#n=createRenderer(t);let n={formatActionResultError};if(this.#t!==void 0&&(n.client=this.#t),this.#n.subagents!==void 0&&(n.view=this.#n.subagents),t.appRoot!==void 0&&(n.onToolCompleted=async(e,t)=>{let n=registryHandoffAddress(e,t);n!==void 0&&this.#oe(n)}),this.#B=new SubagentPump(n),this.#r=t.name??`eve`,this.#N=t.startup?.headerTip??pickAgentHeaderTip(),this.#b=t.withExclusiveTerminal,this.#i=t.tools??`full`,this.#a=t.reasoning??`full`,this.#o=t.subagents??`full`,this.#s=t.connectionAuth??`full`,this.#c=t.assistantResponseStats??`tokensPerSecond`,this.#l=t.contextSize,this.#u=t.formatTransportError??toErrorMessage,t.initialInput!==void 0&&(this.#m=t.initialInput),t.startup!==void 0&&(this.#h=t.startup),this.#g=t.onboard===!0,t.appRoot!==void 0){this.#p=t.appRoot;let e={appRoot:t.appRoot,onChange:e=>this.#n.setVercelStatus?.(e)};t.detectProjectIdentity!==void 0&&(e.detectIdentity=t.detectProjectIdentity),this.#j=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#M=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#v=t.promptCommandHandler),this.#y=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#x=createRemoteConnectionController({client:this.#t,credentials:t.remote.credentials,target:t.remote.target,onChange:e=>this.#n.setRemoteConnectionStatus?.(e),resolveOidcToken:t.remote.resolveOidcToken,resolveDeployment:t.remote.resolveDeployment})}this.#S=t.bootDetections??BOOT_DETECTIONS,this.#C=t.getVercelAuthStatus??getVercelAuthStatus,this.#w=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#T=t.onBootProgress),t.serverUrl!==void 0&&(this.#f=t.serverUrl),t.serverUrl!==void 0&&t.remote===void 0&&(this.#d=createDevelopmentRuntimeArtifactRefresher({serverUrl:t.serverUrl}))}async#K(){if(this.#f===void 0)return this.#J(),this.#g||await this.#ce(void 0),this.#h?.finish()??this.#m;let e;if(this.#x!==void 0){let t=await this.#x.check();t.state===`ready`&&(e=t.info)}else{let t=this.#t;if(t!==void 0)try{let n=await devBootPhase(`connecting to agent`,()=>probeAgentInfo({client:t}),this.#T);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}let t=this.#h?.finish()??this.#m;this.#J();let n=this.#q(e);return this.#g||await this.#ce(n),t}#q(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#P=t;let n=this.#f;if(n===void 0||this.#_)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#N),this.#n.renderAgentHeader?.(r),t}#J(){let e=this.#T;this.#T=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#G?.signal.aborted===!0?onStop():this.#G?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#Y()}finally{this.#G?.signal.removeEventListener(`abort`,onStop),this.#E=!0,this.#D.abort(),this.#B.abortAll(),this.#W?.(),this.#W=void 0,this.#n.shutdown?.(),this.#j?.dispose(),this.#M?.dispose(),this.#x?.dispose()}}async#Y(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=await this.#K();if(this.#x?.current().connection.state===`auth-required`&&await this.#_e({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#fe(),this.#j?.refreshIdentity(),this.#M?.refresh(),this.#g&&this.#p!==void 0&&this.#v!==void 0&&this.#n.setupFlow!==void 0){l=void 0,this.#_=!0;try{await this.#ye(e)}finally{this.#_=!1}}for(;;){if(this.#G?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;let u=this.#L[0];if(u!==void 0&&i===void 0&&this.#I===void 0){this.#L.shift(),this.#R=u;try{await this.#se(u)}finally{this.#R=void 0}o=!1,s=!1,r=void 0;continue}if(!s){if(r==null){if(!this.#n.readPrompt){if(a)return;throw Error(`No prompt was provided and the renderer does not support prompt input.`)}let t={title:e};l!==void 0&&(t.initialDraft=l,l=void 0);try{this.#z=!0,r=await this.#ee(t)}catch(e){if(isInterruptedError(e)){if(this.#I===void 0&&this.#L.length===0)return;s=!0,r=``}else throw e}finally{this.#z=!1}if(this.#L.length>0&&this.#I===void 0){r=void 0;continue}if(r==null&&this.#I===void 0)return}let u=this.#I===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#G?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#pe(`No active turn to cancel.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.cancel();if(this.#pe(e.status===`accepted`?`Turn cancellation requested.`:`No active turn to cancel.`),e.status===`no_active_turn`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't cancel the turn: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`reset`){if(!await this.#Q()){i=void 0,s=!1,r=void 0;continue}i=void 0,s=!1,r=void 0;continue}if(u?.type===`compact`){if(this.#e===void 0){this.#pe(`No active session to compact.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.compact();if(this.#pe(e.status===`accepted`?`Compaction requested.`:`No active session to compact.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't compact the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`clear`){if(this.#e===void 0){this.#pe(`No active session to clear.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.clear();if(this.#pe(e.status===`accepted`?`Context clear requested.`:`No active session to clear.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't clear the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`help`){this.#pe(formatPromptCommandHelp(this.#y)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#Se(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#pe(this.#Ce(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#xe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#_e(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let d=this.#I;this.#I=void 0;let f=d??(o?this.#ie():await(async()=>(this.#Z(),await this.#ne({prompt:s?void 0:r,inputResponses:i})))()),p=this.#e?.state.sessionId;p!==void 0&&this.#n.setSessionId?.(p);let m=r,h=!1;try{for(;;){await this.#n.renderStream(f,{title:e,submittedPrompt:m,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=f.turnState?.pendingApprovals??[],n=f.turnState?.pendingQuestions??[];if(t.length>0||n.length>0){let a=[];if(t.length>0){if(!this.#n.readToolApproval)throw Error(`Tool approval was requested, but the renderer does not support tool approval input.`);for(let n of t){let t=await this.#n.readToolApproval(n,{title:e});a.push({requestId:n.approvalId,optionId:t.approved?`approve`:`cancel`}),this.#F.delete(n.approvalId)}}if(n.length>0){if(!this.#n.readInputQuestion)throw Error(`An interactive question was requested, but the renderer does not support input questions.`);for(let t of n){let n=toAgentTUIInputQuestion(t),r=await this.#n.readInputQuestion(n,{title:e});if(r===void 0)continue;let i={requestId:t.requestId};r.optionId!==void 0&&(i.optionId=r.optionId),r.text!==void 0&&(i.text=r.text),a.push(i),this.#F.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,h=!0;break}if(this.#Oe(f)){f=this.#ie(),m=void 0;continue}if(f.turnState&&f.turnState.boundaryEvent===void 0&&!f.turnState.aborted){let e=this.#e?.state.sessionId;this.#n.renderNotice?.(e?`Lost the event stream — the turn may still be running on the server (session ${e}). Your next message resumes this session; use /cancel to stop the turn.`:`Lost the connection to the running turn.`)}break}}catch(e){if(isInterruptedError(e))return;throw e}if(h)continue;o=!1,s=!1,i=void 0,r=void 0;let g=f.turnState?.boundaryEvent;this.#U!==this.#e&&(g===`session.waiting`||g===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#Z(f.turnState?.aborted===!0)}}#X(){this.#B.abortAll(),this.#F.clear(),this.#V.clear(),this.#H.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#Z(e=!1){let t=this.#U;t!==void 0&&(this.#U=void 0,this.#e===t&&(this.#X(),e?this.#n.renderNotice?.(`Stopped following the turn and started a new session. Earlier context was cleared; the interrupted turn may still be running on the server.`):this.#n.renderSessionBoundary===void 0?this.#n.renderNotice?.(`Session ended — started a new session. Earlier context was cleared.`):this.#n.renderSessionBoundary()))}async#Q(){if(this.#e===void 0)return this.#X(),this.#n.reset?.(),!0;try{await this.#e.reset()}catch(e){return this.#n.renderNotice?.(`Couldn't reset the session: ${toErrorMessage(e)}`),!1}return this.#X(),this.#n.reset?.(),!0}async#$(e){if(!this.#n.readPrompt)return;let t=this.#n.readPrompt(e),n=this.#d;if(n===void 0)return await t;let r=!1,i=!1,a,o=0,refresh=async()=>{if(!(r||i)){i=!0;try{await n.refreshIdle({onRuntimeArtifactsChanged:()=>this.#Ee()});let e=this.#P?.agent.model.endpoint,t=e?.kind===`chatgpt`&&(e.state===`signed-out`||e.state===`reauth-required`),r=Date.now();if(t&&r-o>=5e3){o=r;let e=await this.#Te();e!==void 0&&this.#q(e)}}finally{i=!1}}},startRefresh=()=>{if(r||i)return;let e=refresh().finally(()=>{a===e&&(a=void 0)});a=e};startRefresh();let s=setInterval(()=>{startRefresh()},500);s.unref?.();try{return await t}finally{r=!0,clearInterval(s),await a}}async#ee(e){let t=this.#$(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#te(n.signal,e).catch(e=>{n.signal.aborted||this.#n.renderNotice?.(`Stopped following session updates: ${toErrorMessage(e)}`)});try{return await t}finally{n.abort(),await r}}async#te(e,t){let n=this.#e;if(n===void 0)return;let r=n.stream({signal:e})[Symbol.asyncIterator]();try{for(;!e.aborted;){let i=!1,a={async*[Symbol.asyncIterator](){for(;!e.aborted;){let e=await r.next();if(e.done===!0||(i=!0,yield e.value,isCurrentTurnBoundaryEvent(e.value)))return}}},o=this.#ae(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#Oe(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#I={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#ne(e){let t=new AbortController,n={signal:t.signal};e.prompt!==void 0&&(n.message=e.prompt),e.inputResponses!==void 0&&e.inputResponses.length>0&&(n.inputResponses=e.inputResponses);let r,i=this.#e;try{if(this.#d!==void 0&&await this.#d.refresh({inputResponses:n.inputResponses,message:n.message,onRuntimeArtifactsChanged:()=>this.#Ee()}),n.message!==void 0&&(n.inputResponses?.length??0)===0&&this.#n.flushDelayedDevBuildErrors?.(),this.#e===void 0){if(this.#t===void 0)throw Error(`Cannot create a session without an eve client.`);if(n.message===void 0)throw Error(`Cannot answer an input request before the session starts.`);let e=await this.#t.sessions.create({...n,message:n.message});this.#e=e.session,r=e.response}else r=n.inputResponses===void 0?await this.#e.send(n.message,{signal:n.signal,turnPolicy:`queue`}):await this.#e.respond(n.inputResponses,{signal:n.signal})}catch(e){if(isInterruptedError(e))throw e;return this.#x?.reportFailure(e),this.#U=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#ae(r,()=>t.abort(),this.#e)}async#re(e,t){if(e.cancelInFlight!==!0){e.cancelInFlight=!0;try{for(let n=0;n<8;n+=1){if(e.boundaryEvent!==void 0||e.aborted===!0)return;let n=e.turnId;try{if((await t?.cancel(n===void 0?void 0:{turnId:n}))?.status===`accepted`)return}catch{}await delayMs(250)}}finally{e.cancelInFlight=!1}}}#ie(){if(this.#e===void 0)throw Error(`Cannot stream a session before its first turn is accepted.`);let e=new AbortController,t=this.#e;return this.#ae(t.stream({signal:e.signal}),()=>e.abort(),t)}#ae(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#U=n,t()},cancel:()=>{this.#re(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#F,turnState:r,onSubagentCalled:e=>this.#B.begin(e),onSubagentBackgrounded:e=>this.#B.background(e),onSubagentCompleted:e=>this.#B.settle(e),onTurnCancelled:e=>this.#B.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#De(e),onConnectionAuthCompleted:e=>this.#ke(e),onRegistryHandoff:this.#p===void 0?void 0:async e=>this.#oe(e),onTerminalFailure:()=>{this.#U=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}#oe(e){this.#R===e||this.#L.includes(e)||(this.#L.push(e),this.#z&&this.#n.suspendPromptForInput?.())}async#se(e){await this.#_e({type:`extension`,name:`add`,argument:e},`Add to your agent`,{trigger:`command`})}async#ce(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#k=await detectSetupIssues(t,this.#S),this.#n.renderSetupWarning!==void 0&&(this.#le(),this.#ue())}#le(){let e=orderedSetupIssues(this.#k,this.#A);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#ue(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#C(e,{signal:this.#D.signal})}catch{return}this.#E||this.#O||(this.#A=authIssueForStatus(t),this.#le())}async#de(e){let t=this.#p;if(t===void 0||this.#n.renderSetupWarning===void 0)return;let n={appRoot:t,env:process.env};e!==void 0&&(n.info=e);try{this.#k=await detectSetupIssues(n,this.#S);let e=await this.#C(t,{signal:this.#D.signal});this.#A=authIssueForStatus(e)}catch{return}this.#E||this.#le()}#fe(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#W===void 0&&(this.#W=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#pe(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#me(e,t){let n=this.#v;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#P?.agent.model.endpoint,i={...t,renderer:this.#n,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#x,withExclusiveTerminal:this.#b},a=this.#M?.current(),o=a!==void 0&&Object.keys(a).length>0?{...i,disabledConnectionReasons:a}:i;return t.keepSetupFlowOpen===!0?await n.handle(e,{...o,keepSetupFlowOpen:!0}):await n.handle(e,o)}#he(e,t,n){if(t!==`startup`)return;let r=this.#x?.current().connection.state,i=n===`error`||r===`auth-failed`||r===`unavailable`?`failed`:void 0,a=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${a}`,i)}async#ge(e){if(e?.kind===`model-access-changed`){this.#j?.applyEffect({kind:`refresh-identity`}),this.#O=!0,await this.#we();return}e!==void 0&&(this.#j?.applyEffect(e),this.#O=!0,this.#de(this.#P))}async#_e(e,t,n){let r=await this.#me(e,{...n,title:t}),i=n.suppressSuccessfulTranscript===!0&&r?.tone!==`error`||n.suppressCancelledTranscript===!0&&r?.cancelled===!0;return i||this.#he(e,n.trigger,r?.tone),i||this.#pe(r?.message,r?.tone),await this.#ge(r?.effect),this.#be(),r}#ve(e){return{kind:`planner`,activeStep:e,firstNavigableStep:1,steps:[{label:`Model`,complete:e>0},{label:`Channels`},{label:`Integrations`},{label:`Review`}]}}async#ye(e){let t={keepSetupFlowOpen:!0,setupFlowTitle:`Set up ${e}`,trigger:`startup`},n=await this.#_e({type:`extension`,name:`model`,argument:``},e,{...t,suppressSuccessfulTranscript:!0,initialModelStep:`provider`,setupFlowNavigation:this.#ve(0)});if(n?.tone===`error`||n?.cancelled===!0){this.#n.setupFlow?.end({preserveDiagnostics:n.tone===`error`});return}let r;try{r=await this.#_e({type:`extension`,name:`add`,argument:``},e,{...t,registryPlannerContext:{prefixSteps:[{label:`Model`,complete:!0}],reviewMessage:`Review your agent`,primaryActionLabel:`Install and finish setup`,emptyActionLabel:`Finish setup`}})}finally{this.#n.setupFlow?.end({preserveDiagnostics:r?.tone===`error`})}}#be(){if(this.#_)return;let e=this.#x?.current().connection;e?.state!==`ready`||e.info===this.#P||(this.#P=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#xe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#pe(`/traces is only available in local dev sessions.`);return}try{await this.#n.traceViewer.open({appRoot:this.#p,sessionId:this.#e?.state.sessionId,reference:e===``?void 0:e})}catch(e){if(isInterruptedError(e))return;throw e}}async#Se(){let e=this.#p;if(e===void 0){this.#pe(`/info is only available in local dev sessions.`);return}try{this.#pe(renderApplicationInfo(await this.#w(e)))}catch(e){this.#pe(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#Ce(e){let t=this.#n;if(t.logDisplayMode===void 0||t.setLogDisplayMode===void 0)return`/loglevel is not available in this session.`;if(e===``)return`Logs: ${t.logDisplayMode()}. Use /loglevel all|stderr|sandbox|none — logs stay buffered, so switching also hides or restores past lines.`;let n=parseLogDisplayMode(e);if(n===void 0)return`Unknown log level "${e}". Use all, stderr, sandbox, or none.`;if(n===t.logDisplayMode())return`Logs already set to ${n}.`;switch(t.setLogDisplayMode(n),n){case`none`:return`Logs hidden. Output stays buffered — /loglevel all restores it.`;case`stderr`:return`Showing stderr logs only.`;case`sandbox`:return`Showing sandbox logs only.`;case`all`:return`Showing all logs.`}}async#we(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#q(await this.#Te());this.#de(t)}async#Te(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#Ee(){let e=this.#P,t=await this.#Te();t!==void 0&&this.#q(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#De(e){let t={name:e.data.name,description:e.data.description,state:`required`};e.data.authorization!==void 0&&(t.challenge=e.data.authorization),e.data.webhookUrl!==void 0&&(t.webhookUrl=e.data.webhookUrl),this.#V.set(e.data.name,t),this.#Ae(t)}#Oe(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#V.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#H.add(e.name),this.#Ae(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#H.size),this.#H.size>0}#ke(e){let t=this.#V.get(e.data.name)??{name:e.data.name,description:``,state:e.data.outcome};t.state=e.data.outcome,e.data.reason!==void 0&&(t.reason=e.data.reason),this.#V.set(e.data.name,t),this.#H.delete(e.data.name),this.#Ae(t),this.#n.setConnectionAuthPendingCount?.(this.#H.size)}#Ae(e){let t={name:e.name,description:e.description,state:e.state};e.challenge!==void 0&&(t.challenge=e.challenge),e.reason!==void 0&&(t.reason=e.reason),this.#n.upsertConnectionAuth?.(t)}};function createRenderer(e){return e.renderer?e.renderer:new TerminalRenderer({tools:e.tools,reasoning:e.reasoning,subagents:e.subagents,connectionAuth:e.connectionAuth,assistantResponseStats:e.assistantResponseStats,contextSize:e.contextSize,logs:e.logs,availablePromptCommands:e.availablePromptCommands,input:e.userInput,output:e.screen,diagnostics:e.diagnostics,onExitRequest:e.lifecycle?.requestStop})}function formatAgentUpdateNotice(e,t){let n=e?.agent.model.id,r=t?.agent.model.id;return n!==void 0&&r!==void 0&&n!==r?`Agent updated: Model ${n} -> ${r}`:`Agent updated.`}function registryHandoffAddress(e,t){if(e!==`selfmod__registry_add`||typeof t!=`object`||!t)return;let n=t;return n.status===`needs-terminal`&&typeof n.address==`string`?n.address:void 0}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onRegistryHandoff:u,onTerminalFailure:d,failureHintOverride:f}=e,p=new Map,m=new Map,h=new Map,g=createEventDeduper(),_=0,v=new Set,y=new Set,b=new Set,x=!1,S=!1,C;for await(let e of t)if(g.admit(e)&&!(S&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:_+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;C=t.data.usage,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`step-finish`,usage:t.data.usage};break}case`message.appended`:{let t=e,n=textPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(p,n),i=t.data.messageSoFar;if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`assistant-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`message.completed`:{let t=textPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(p,t),r=e.data.message;if(n.completed){if(r===null||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_,yield{type:`assistant-complete`,id:partGenerationId(t,n.generation),text:r};break}let i=partGenerationId(t,n.generation);if(r!==null){if(n.text.length===0)n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i,text:r};else if(r.startsWith(n.text)){let e=r.slice(n.text.length);e.length>0&&(yield{type:`assistant-delta`,id:i,delta:e}),n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i}}}else n.text.length>0&&(n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(m,n),i=t.data.reasoningSoFar;if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}if(!i.startsWith(r.text)||i.length<=r.text.length)break;let a=i.slice(r.text.length);r.text=i,yield{type:`reasoning-delta`,id:partGenerationId(n,r.generation),delta:a};break}case`reasoning.completed`:{let t=reasoningPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(m,t),r=e.data.reasoning;if(n.completed){if(r.length===0||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}let i=partGenerationId(t,n.generation);if(n.text.length===0&&r.length>0)n.text=r,yield{type:`reasoning-delta`,id:i,delta:r};else if(r.length>0&&!r.startsWith(n.text))break;n.completed=!0,n.completedEpoch=_,yield{type:`reasoning-complete`,id:i};break}case`actions.requested`:{let t=e.data.actions.filter(e=>e.kind===`tool-call`);if(t.length===0)break;for(let e of t)h.set(e.callId,e.toolName),!v.has(e.callId)&&(v.add(e.callId),yield{type:`tool-call`,toolCallId:e.callId,toolName:e.toolName,input:e.input});break}case`input.requested`:{let t=e.data.requests.filter(e=>e.action.kind===`tool-call`);if(t.length===0)break;for(let e of t){let t=e.action.callId;if(h.set(t,e.action.toolName),e.kind!==`session-limit`&&!v.has(t)&&(v.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!y.has(e.requestId)){if(y.add(e.requestId),n.set(e.requestId,e),e.kind!==`tool-approval`){upsertPendingQuestion(r,e);continue}upsertPendingApproval(r,e),yield{type:`tool-approval-request`,approvalId:e.requestId,toolCallId:t}}}break}case`action.result`:{let t=e;if(t.data.result.kind!==`tool-result`)break;let n=t.data.result.callId;if(!v.has(n))break;switch(t.data.status){case`completed`:{let e=t.data.result.output;yield{type:`tool-result`,toolCallId:n,output:e};let r=registryHandoffAddress(h.get(n),e);r!==void 0&&await u?.(r);break}case`failed`:yield{type:`tool-error`,toolCallId:n,errorText:formatActionResultError(t)};break;case`rejected`:yield{type:`tool-rejected`,toolCallId:n,reason:formatActionResultError(t)};break}break}case`step.failed`:case`turn.failed`:{let t=toFailureEvent(e,b,f);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,d?.(e);let t=toFailureEvent(e,b,f);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return;case`turn.completed`:S=!0,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`turn-cancelled`};break;case`subagent.called`:i?.(e);break;case`subagent.started`:case`subagent.event`:break;case`subagent.completed`:{let t=e;t.data.backgroundTask===void 0?o?.(t.data.callId):a?.(t.data.callId);break}case`authorization.required`:c?.(e);break;case`authorization.completed`:l?.(e);break;default:break}x||(yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C})}async function*errorOnlyTUIStream(e){yield{type:`error`,errorText:e.errorText},yield{type:`finish`}}function createTurnState(){return{aborted:!1,pendingApprovals:[],pendingQuestions:[],sawSessionFailure:!1}}function upsertPendingApproval(e,t){let n=toAgentTUIToolApprovalRequest(t),r=e.pendingApprovals.findIndex(e=>e.approvalId===n.approvalId);r===-1?e.pendingApprovals.push(n):e.pendingApprovals[r]=n}function toAgentTUIToolApprovalRequest(e){return{approvalId:e.requestId,toolCallId:e.action.callId,toolName:e.action.toolName,input:e.action.input}}function upsertPendingQuestion(e,t){let n=e.pendingQuestions.findIndex(e=>e.requestId===t.requestId);n===-1?e.pendingQuestions.push(t):e.pendingQuestions[n]=t}function textPartId(e,t){return`text:${e}:${t}`}function reasoningPartId(e,t){return`reasoning:${e}:${t}`}function partStateFor(e,t){let n=e.get(t);return n===void 0&&(n={generation:0,text:``,completed:!1,completedEpoch:0},e.set(t,n)),n}function partGenerationId(e,t){return t===0?e:`${e}#${t}`}function*closeOpenParts(e,t,n){for(let[r,i]of e)i.completed||i.text.length===0||(i.completed=!0,i.completedEpoch=n,yield{type:t,id:partGenerationId(r,i.generation)})}function isPostTurnVisibleEvent(e){switch(e.type){case`actions.requested`:case`authorization.completed`:case`authorization.required`:case`input.requested`:case`message.appended`:case`message.completed`:case`reasoning.appended`:case`reasoning.completed`:case`result.completed`:case`step.completed`:case`step.failed`:case`step.started`:case`subagent.called`:case`subagent.completed`:case`subagent.event`:case`subagent.started`:case`turn.completed`:case`turn.failed`:return!0;default:return!1}}function formatActionResultError(e){if(e.data.error?.message)return e.data.error.message;let t=e.data.result.output;if(typeof t==`string`)return t;try{return JSON.stringify(t)}catch{return`Tool execution failed.`}}function toFailureEvent(e,t,n){let r=failureKey(e);if(t.has(r))return;t.add(r);let c={type:`error`,errorText:formatFailureMessage(e)},l=n?.(e)??formatFailureHint(e);l!==void 0&&(c.hint=l);let u=formatFailureDetail(e);return u!==void 0&&(c.detail=u),c}function toAgentTUIInputQuestion(e){let t=e.display===`text`?`text`:e.display===`select`||e.options!==void 0&&e.options.length>0?`select`:`text`,n={requestId:e.requestId,prompt:e.prompt,display:t};return e.options!==void 0&&(n.options=e.options.map(e=>{let t={id:e.id,label:e.label};return e.description!==void 0&&(t.description=e.description),e.style!==void 0&&(t.style=e.style),t})),e.allowFreeform!==void 0&&(n.allowFreeform=e.allowFreeform),n}export{EveTUIRunner,parsePromptCommand,registryHandoffAddress};
1
+ import{PROMPT_COMMANDS,formatPromptCommandHelp,parsePromptCommand}from"./prompt-commands.js";import{pickAgentHeaderTip}from"./agent-header.js";import{failureKey,formatFailureDetail,formatFailureHint,formatFailureMessage,isInterruptedError,localFailureHint}from"./errors.js";import{parseLogDisplayMode}from"./log-display-mode.js";import{createMcpConnectionStatusTracker}from"./mcp-connection-status.js";import{createRemoteConnectionController}from"./remote-connection.js";import{SubagentPump}from"./subagent-pump.js";import{BOOT_DETECTIONS,CLI_MISSING_SETUP_ISSUE,LOGIN_SETUP_ISSUE,detectSetupIssues,formatSetupIssuesLine,normalizeLocalModelEndpoint,orderedSetupIssues}from"./setup-issues.js";import{TerminalRenderer}from"./terminal-renderer.js";import{createVercelStatusTracker}from"./vercel-status.js";import"#client/index.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{inspectApplication}from"#services/inspect-application.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{toErrorMessage}from"#shared/errors.js";import{getVercelAuthStatus}from"#setup/vercel-project.js";import{probeAgentInfo}from"#services/dev-client/agent-info-probe.js";import{renderApplicationInfo}from"#cli/commands/info.js";import{subscribeDevelopmentSandboxPrewarmLogs}from"#execution/sandbox/development-prewarm.js";import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{createDevelopmentRuntimeArtifactRefresher}from"#services/dev-client.js";async function delayMs(e){await new Promise(t=>{setTimeout(t,e).unref?.()})}function authIssueForStatus(e){if(e===`logged-out`)return LOGIN_SETUP_ISSUE;if(e===`cli-missing`)return CLI_MISSING_SETUP_ISSUE}var EveTUIRunner=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_=!1;#v;#y;#b;#x;#S;#C;#w;#T;#E=!1;#D=new AbortController;#O=!1;#k=[];#A;#j;#M;#N;#P;#F=new Map;#I;#L=[];#R;#z=!1;#B;#V=new Map;#H=new Set;#U;#W;#G;constructor(t){this.#e=t.session,t.client!==void 0&&(this.#t=t.client),t.lifecycle!==void 0&&(this.#G=t.lifecycle),this.#n=createRenderer(t);let n={formatActionResultError};if(this.#t!==void 0&&(n.client=this.#t),this.#n.subagents!==void 0&&(n.view=this.#n.subagents),t.appRoot!==void 0&&(n.onToolCompleted=async(e,t)=>{let n=registryHandoffAddress(e,t);n!==void 0&&this.#oe(n)}),this.#B=new SubagentPump(n),this.#r=t.name??`eve`,this.#N=t.startup?.headerTip??pickAgentHeaderTip(),this.#b=t.withExclusiveTerminal,this.#i=t.tools??`full`,this.#a=t.reasoning??`full`,this.#o=t.subagents??`full`,this.#s=t.connectionAuth??`full`,this.#c=t.assistantResponseStats??`tokensPerSecond`,this.#l=t.contextSize,this.#u=t.formatTransportError??toErrorMessage,t.initialInput!==void 0&&(this.#m=t.initialInput),t.startup!==void 0&&(this.#h=t.startup),this.#g=t.onboard===!0,t.appRoot!==void 0){this.#p=t.appRoot;let e={appRoot:t.appRoot,onChange:e=>this.#n.setVercelStatus?.(e)};t.detectProjectIdentity!==void 0&&(e.detectIdentity=t.detectProjectIdentity),this.#j=createVercelStatusTracker(e),t.probeMcpConnection!==void 0&&(this.#M=createMcpConnectionStatusTracker({onChange:()=>{},probe:t.probeMcpConnection}))}if(t.promptCommandHandler!==void 0&&(this.#v=t.promptCommandHandler),this.#y=t.availablePromptCommands??PROMPT_COMMANDS,t.remote!==void 0){if(this.#t===void 0)throw Error(`A remote TUI requires a configured development client.`);this.#x=createRemoteConnectionController({client:this.#t,credentials:t.remote.credentials,target:t.remote.target,onChange:e=>this.#n.setRemoteConnectionStatus?.(e),resolveOidcToken:t.remote.resolveOidcToken,resolveDeployment:t.remote.resolveDeployment})}this.#S=t.bootDetections??BOOT_DETECTIONS,this.#C=t.getVercelAuthStatus??getVercelAuthStatus,this.#w=t.inspectApplication??inspectApplication,t.onBootProgress!==void 0&&(this.#T=t.onBootProgress),t.serverUrl!==void 0&&(this.#f=t.serverUrl),t.serverUrl!==void 0&&t.remote===void 0&&(this.#d=createDevelopmentRuntimeArtifactRefresher({serverUrl:t.serverUrl}))}async#K(){if(this.#f===void 0)return this.#J(),this.#g||await this.#ce(void 0),this.#h?.finish()??this.#m;let e;if(this.#x!==void 0){let t=await this.#x.check();t.state===`ready`&&(e=t.info)}else{let t=this.#t;if(t!==void 0)try{let n=await devBootPhase(`connecting to agent`,()=>probeAgentInfo({client:t}),this.#T);n.kind===`ready`&&(e=n.info)}catch{e=void 0}}let t=this.#h?.finish()??this.#m;this.#J();let n=this.#q(e);return this.#g||await this.#ce(n),t}#q(e){let t=this.#p===void 0?e:normalizeLocalModelEndpoint(e,process.env);this.#P=t;let n=this.#f;if(n===void 0||this.#_)return t;let r={name:this.#r,serverUrl:n};return t!==void 0&&(r.info=t),this.#p!==void 0&&(r.tip=this.#N),this.#n.renderAgentHeader?.(r),t}#J(){let e=this.#T;this.#T=void 0,e?.({type:`before-first-paint`})}async run(){let onStop=()=>this.#n.requestInterrupt?.();this.#G?.signal.aborted===!0?onStop():this.#G?.signal.addEventListener(`abort`,onStop,{once:!0});try{await this.#Y()}finally{this.#G?.signal.removeEventListener(`abort`,onStop),this.#E=!0,this.#D.abort(),this.#B.abortAll(),this.#W?.(),this.#W=void 0,this.#n.shutdown?.(),this.#j?.dispose(),this.#M?.dispose(),this.#x?.dispose()}}async#Y(){let e=this.#r,r,i,a=!1,o=!1,s=!1,l=await this.#K();if(this.#x?.current().connection.state===`auth-required`&&await this.#_e({type:`extension`,name:`vc:login`,argument:``},e,{trigger:`startup`}),this.#fe(),this.#j?.refreshIdentity(),this.#M?.refresh(),this.#g&&this.#p!==void 0&&this.#v!==void 0&&this.#n.setupFlow!==void 0){l=void 0,this.#_=!0;try{await this.#ye(e)}finally{this.#_=!1}}for(;;){if(this.#G?.signal.aborted===!0||this.#n.exitRequested?.()===!0)return;let u=this.#L[0];if(u!==void 0&&i===void 0&&this.#I===void 0){this.#L.shift(),this.#R=u;try{await this.#se(u)}finally{this.#R=void 0}o=!1,s=!1,r=void 0;continue}if(!s){if(r==null){if(!this.#n.readPrompt){if(a)return;throw Error(`No prompt was provided and the renderer does not support prompt input.`)}let t={title:e};l!==void 0&&(t.initialDraft=l,l=void 0);try{this.#z=!0,r=await this.#ee(t)}catch(e){if(isInterruptedError(e)){if(this.#I===void 0&&this.#L.length===0)return;s=!0,r=``}else throw e}finally{this.#z=!1}if(this.#L.length>0&&this.#I===void 0){r=void 0;continue}if(r==null&&this.#I===void 0)return}let u=this.#I===void 0?parsePromptCommand(r):null;if(u?.type===`exit`){this.#G?.requestStop();return}if(u?.type===`cancel`){if(this.#e===void 0){this.#pe(`No active turn to cancel.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.cancel();if(this.#pe(e.status===`accepted`?`Turn cancellation requested.`:`No active turn to cancel.`),e.status===`no_active_turn`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't cancel the turn: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`reset`){if(!await this.#Q()){i=void 0,s=!1,r=void 0;continue}i=void 0,s=!1,r=void 0;continue}if(u?.type===`compact`){if(this.#e===void 0){this.#pe(`No active session to compact.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.compact();if(this.#pe(e.status===`accepted`?`Compaction requested.`:`No active session to compact.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't compact the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`clear`){if(this.#e===void 0){this.#pe(`No active session to clear.`),i=void 0,o=!1,s=!1,r=void 0;continue}try{let e=await this.#e.clear();if(this.#pe(e.status===`accepted`?`Context clear requested.`:`No active session to clear.`),e.status===`no_active_session`){i=void 0,o=!1,s=!1,r=void 0;continue}}catch(e){this.#pe(`Couldn't clear the session: ${toErrorMessage(e)}`),i=void 0,o=!1,s=!1,r=void 0;continue}i=void 0,o=!0,s=!1,r=void 0}if(u?.type===`help`){this.#pe(formatPromptCommandHelp(this.#y)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`info`){await this.#Se(),i=void 0,s=!1,r=void 0;continue}if(u?.type===`loglevel`){this.#pe(this.#Ce(u.argument)),i=void 0,s=!1,r=void 0;continue}if(u?.type===`traces`){await this.#xe(u.argument),i=void 0,s=!1,r=void 0;continue}if(u?.type===`extension`){try{await this.#_e(u,e,{trigger:`command`})}catch(e){if(isInterruptedError(e))return;throw e}i=void 0,r=void 0,s=!1;continue}a=!0}let d=this.#I;this.#I=void 0;let f=d??(o?this.#ie():await(async()=>(this.#Z(),await this.#ne({prompt:s?void 0:r,inputResponses:i})))()),p=this.#e?.state.sessionId;p!==void 0&&this.#n.setSessionId?.(p);let m=r,h=!1;try{for(;;){await this.#n.renderStream(f,{title:e,submittedPrompt:m,continueSession:!!this.#n.readPrompt,tools:this.#i,reasoning:this.#a,subagents:this.#o,connectionAuth:this.#s,assistantResponseStats:this.#c,contextSize:this.#l});let t=f.turnState?.pendingApprovals??[],n=f.turnState?.pendingQuestions??[];if(t.length>0||n.length>0){let a=[];if(t.length>0){if(!this.#n.readToolApproval)throw Error(`Tool approval was requested, but the renderer does not support tool approval input.`);for(let n of t){let t=await this.#n.readToolApproval(n,{title:e});a.push({requestId:n.approvalId,optionId:t.approved?`approve`:`cancel`}),this.#F.delete(n.approvalId)}}if(n.length>0){if(!this.#n.readInputQuestion)throw Error(`An interactive question was requested, but the renderer does not support input questions.`);for(let t of n){let n=toAgentTUIInputQuestion(t),r=await this.#n.readInputQuestion(n,{title:e});if(r===void 0)continue;let i={requestId:t.requestId};r.optionId!==void 0&&(i.optionId=r.optionId),r.text!==void 0&&(i.text=r.text),a.push(i),this.#F.delete(t.requestId)}}if(a.length===0)break;s=!0,i=a,r=void 0,h=!0;break}if(this.#Oe(f)){f=this.#ie(),m=void 0;continue}if(f.turnState&&f.turnState.boundaryEvent===void 0&&!f.turnState.aborted){let e=this.#e?.state.sessionId;this.#n.renderNotice?.(e?`Lost the event stream — the turn may still be running on the server (session ${e}). Your next message resumes this session; use /cancel to stop the turn.`:`Lost the connection to the running turn.`)}break}}catch(e){if(isInterruptedError(e))return;throw e}if(h)continue;o=!1,s=!1,i=void 0,r=void 0;let g=f.turnState?.boundaryEvent;this.#U!==this.#e&&(g===`session.waiting`||g===`session.completed`)&&(r=this.#n.takeQueuedPrompt?.()),this.#Z(f.turnState?.aborted===!0)}}#X(){this.#B.abortAll(),this.#F.clear(),this.#V.clear(),this.#H.clear(),this.#n.setConnectionAuthPendingCount?.(0),this.#e=void 0,this.#d?.clear()}#Z(e=!1){let t=this.#U;t!==void 0&&(this.#U=void 0,this.#e===t&&(this.#X(),e?this.#n.renderNotice?.(`Stopped following the turn and started a new session. Earlier context was cleared; the interrupted turn may still be running on the server.`):this.#n.renderSessionBoundary===void 0?this.#n.renderNotice?.(`Session ended — started a new session. Earlier context was cleared.`):this.#n.renderSessionBoundary()))}async#Q(){if(this.#e===void 0)return this.#X(),this.#n.reset?.(),!0;try{await this.#e.reset()}catch(e){return this.#n.renderNotice?.(`Couldn't reset the session: ${toErrorMessage(e)}`),!1}return this.#X(),this.#n.reset?.(),!0}async#$(e){if(!this.#n.readPrompt)return;let t=this.#n.readPrompt(e),n=this.#d;if(n===void 0)return await t;let r=!1,i=!1,a,o=0,refresh=async()=>{if(!(r||i)){i=!0;try{await n.refreshIdle({onRuntimeArtifactsChanged:()=>this.#Ee()});let e=this.#P?.agent.model.endpoint,t=e?.kind===`chatgpt`&&(e.state===`signed-out`||e.state===`reauth-required`),r=Date.now();if(t&&r-o>=5e3){o=r;let e=await this.#Te();e!==void 0&&this.#q(e)}}finally{i=!1}}},startRefresh=()=>{if(r||i)return;let e=refresh().finally(()=>{a===e&&(a=void 0)});a=e};startRefresh();let s=setInterval(()=>{startRefresh()},500);s.unref?.();try{return await t}finally{r=!0,clearInterval(s),await a}}async#ee(e){let t=this.#$(e);if(this.#n.renderIdleStream===void 0||this.#e?.state.sessionId===void 0)return await t;let n=new AbortController,r=this.#te(n.signal,e).catch(e=>{n.signal.aborted||this.#n.renderNotice?.(`Stopped following session updates: ${toErrorMessage(e)}`)});try{return await t}finally{n.abort(),await r}}async#te(e,t){let n=this.#e;if(n===void 0)return;let r=n.stream({signal:e})[Symbol.asyncIterator]();try{for(;!e.aborted;){let i=!1,a={async*[Symbol.asyncIterator](){for(;!e.aborted;){let e=await r.next();if(e.done===!0||(i=!0,yield e.value,isCurrentTurnBoundaryEvent(e.value)))return}}},o=this.#ae(a,()=>{},n);if(await this.#n.renderIdleStream(o,{...t,continueSession:!0}),this.#Oe(o),(o.turnState?.pendingApprovals.length??0)>0||(o.turnState?.pendingQuestions.length??0)>0){this.#I={events:(async function*(){})(),turnState:o.turnState},this.#n.suspendPromptForInput?.();return}if(!i)return}}finally{await r.return?.()}}async#ne(e){let t=new AbortController,n={signal:t.signal};e.prompt!==void 0&&(n.message=e.prompt),e.inputResponses!==void 0&&e.inputResponses.length>0&&(n.inputResponses=e.inputResponses);let r,i=this.#e;try{if(this.#d!==void 0&&await this.#d.refresh({inputResponses:n.inputResponses,message:n.message,onRuntimeArtifactsChanged:()=>this.#Ee()}),n.message!==void 0&&(n.inputResponses?.length??0)===0&&this.#n.flushDelayedDevBuildErrors?.(),this.#e===void 0){if(this.#t===void 0)throw Error(`Cannot create a session without an eve client.`);if(n.message===void 0)throw Error(`Cannot answer an input request before the session starts.`);let e=await this.#t.sessions.create({...n,message:n.message});this.#e=e.session,r=e.response}else r=n.inputResponses===void 0?await this.#e.send(n.message,{signal:n.signal,turnPolicy:`queue`}):await this.#e.respond(n.inputResponses,{signal:n.signal})}catch(e){if(isInterruptedError(e))throw e;return this.#x?.reportFailure(e),this.#U=i,{events:errorOnlyTUIStream({errorText:this.#u(e)}),turnState:createTurnState()}}return this.#ae(r,()=>t.abort(),this.#e)}async#re(e,t){if(e.cancelInFlight!==!0){e.cancelInFlight=!0;try{for(let n=0;n<8;n+=1){if(e.boundaryEvent!==void 0||e.aborted===!0)return;let n=e.turnId;try{if((await t?.cancel(n===void 0?void 0:{turnId:n}))?.status===`accepted`)return}catch{}await delayMs(250)}}finally{e.cancelInFlight=!1}}}#ie(){if(this.#e===void 0)throw Error(`Cannot stream a session before its first turn is accepted.`);let e=new AbortController,t=this.#e;return this.#ae(t.stream({signal:e.signal}),()=>e.abort(),t)}#ae(e,t,n){let r=createTurnState();return{abort:()=>{r.aborted=!0,this.#U=n,t()},cancel:()=>{this.#re(r,n)},events:eveEventsToTUIStream({events:e,pendingInputRequests:this.#F,turnState:r,onSubagentCalled:e=>this.#B.begin(e),onSubagentBackgrounded:e=>this.#B.background(e),onSubagentCompleted:e=>this.#B.settle(e),onTurnCancelled:e=>this.#B.settleCancelledTurn(e),onConnectionAuthRequired:e=>this.#De(e),onConnectionAuthCompleted:e=>this.#ke(e),onRegistryHandoff:this.#p===void 0?void 0:async e=>this.#oe(e),onTerminalFailure:()=>{this.#U=n},failureHintOverride:this.#p===void 0?void 0:localFailureHint}),turnState:r}}#oe(e){this.#R===e||this.#L.includes(e)||(this.#L.push(e),this.#z&&this.#n.suspendPromptForInput?.())}async#se(e){await this.#_e({type:`extension`,name:`add`,argument:e},`Add to your agent`,{trigger:`command`})}async#ce(e){if(this.#p===void 0)return;let t={appRoot:this.#p,env:process.env};e!==void 0&&(t.info=e),this.#k=await detectSetupIssues(t,this.#S),this.#n.renderSetupWarning!==void 0&&(this.#le(),this.#ue())}#le(){let e=orderedSetupIssues(this.#k,this.#A);e.length>0?this.#n.renderSetupWarning?.(formatSetupIssuesLine(e)):this.#n.clearSetupWarning?.()}async#ue(){let e=this.#p;if(e===void 0)return;let t;try{t=await this.#C(e,{signal:this.#D.signal})}catch{return}this.#E||this.#O||(this.#A=authIssueForStatus(t),this.#le())}async#de(e){let t=this.#p;if(t===void 0||this.#n.renderSetupWarning===void 0)return;let n={appRoot:t,env:process.env};e!==void 0&&(n.info=e);try{this.#k=await detectSetupIssues(n,this.#S);let e=await this.#C(t,{signal:this.#D.signal});this.#A=authIssueForStatus(e)}catch{return}this.#E||this.#le()}#fe(){this.#p===void 0||this.#n.renderSandboxLog===void 0||this.#W===void 0&&(this.#W=subscribeDevelopmentSandboxPrewarmLogs({appRoot:this.#p,log:e=>this.#n.renderSandboxLog?.(e)}))}#pe(e,t){if(e!==void 0){if(this.#n.renderCommandResult!==void 0){this.#n.renderCommandResult(e,t);return}this.#n.renderNotice?.(e)}}async#me(e,t){let n=this.#v;if(n===void 0)return{message:`/${e.name} is not available in this session.`};let r=this.#P?.agent.model.endpoint,i={...t,renderer:this.#n,chatGptAccountLabel:r?.kind===`chatgpt`&&r.state===`ready`?r.accountLabel:void 0,remoteConnection:this.#x,withExclusiveTerminal:this.#b},a=this.#M?.current(),o=a!==void 0&&Object.keys(a).length>0?{...i,disabledConnectionReasons:a}:i;return t.keepSetupFlowOpen===!0?await n.handle(e,{...o,keepSetupFlowOpen:!0}):await n.handle(e,o)}#he(e,t,n){if(t!==`startup`)return;let r=this.#x?.current().connection.state,i=n===`error`||r===`auth-failed`||r===`unavailable`?`failed`:void 0,a=e.argument.length===0?``:` ${e.argument}`;this.#n.renderCommandInvocation?.(`/${e.name}${a}`,i)}async#ge(e){if(e?.kind===`model-access-changed`){this.#j?.applyEffect({kind:`refresh-identity`}),this.#O=!0,await this.#we();return}e!==void 0&&(this.#j?.applyEffect(e),this.#O=!0,this.#de(this.#P))}async#_e(e,t,n){let r=await this.#me(e,{...n,title:t}),i=n.suppressSuccessfulTranscript===!0&&r?.tone!==`error`||n.suppressCancelledTranscript===!0&&r?.cancelled===!0;return i||this.#he(e,n.trigger,r?.tone),i||this.#pe(r?.message,r?.tone),await this.#ge(r?.effect),this.#be(),r}#ve(e){return{kind:`planner`,activeStep:e,firstNavigableStep:1,steps:[{label:`Model`,complete:e>0},{label:`Channels`},{label:`Integrations`},{label:`Review`}]}}async#ye(e){let t={keepSetupFlowOpen:!0,setupFlowTitle:`Set up ${e}`,trigger:`startup`},n=await this.#_e({type:`extension`,name:`model`,argument:``},e,{...t,suppressSuccessfulTranscript:!0,initialModelStep:`provider`,setupFlowNavigation:this.#ve(0)});if(n?.tone===`error`||n?.cancelled===!0){this.#n.setupFlow?.end({preserveDiagnostics:n.tone===`error`});return}let r;try{r=await this.#_e({type:`extension`,name:`add`,argument:``},e,{...t,registryPlannerContext:{prefixSteps:[{label:`Model`,complete:!0}],reviewMessage:`Review your agent`,primaryActionLabel:`Install and finish setup`,emptyActionLabel:`Finish setup`}})}finally{this.#n.setupFlow?.end({preserveDiagnostics:r?.tone===`error`})}}#be(){if(this.#_)return;let e=this.#x?.current().connection;e?.state!==`ready`||e.info===this.#P||(this.#P=e.info,this.#f!==void 0&&this.#n.renderAgentHeader?.({info:e.info,name:this.#r,serverUrl:this.#f}))}async#xe(e){if(this.#p===void 0||this.#n.traceViewer===void 0){this.#pe(`/traces is only available in local dev sessions.`);return}try{await this.#n.traceViewer.open({appRoot:this.#p,sessionId:this.#e?.state.sessionId,reference:e===``?void 0:e})}catch(e){if(isInterruptedError(e))return;throw e}}async#Se(){let e=this.#p;if(e===void 0){this.#pe(`/info is only available in local dev sessions.`);return}try{this.#pe(renderApplicationInfo(await this.#w(e)))}catch(e){this.#pe(`Couldn't inspect the application: ${toErrorMessage(e)}`,`error`)}}#Ce(e){let t=this.#n;if(t.logDisplayMode===void 0||t.setLogDisplayMode===void 0)return`/loglevel is not available in this session.`;if(e===``)return`Logs: ${t.logDisplayMode()}. Use /loglevel all|stderr|sandbox|none — logs stay buffered, so switching also hides or restores past lines.`;let n=parseLogDisplayMode(e);if(n===void 0)return`Unknown log level "${e}". Use all, stderr, sandbox, or none.`;if(n===t.logDisplayMode())return`Logs already set to ${n}.`;switch(t.setLogDisplayMode(n),n){case`none`:return`Logs hidden. Output stays buffered — /loglevel all restores it.`;case`stderr`:return`Showing stderr logs only.`;case`sandbox`:return`Showing sandbox logs only.`;case`all`:return`Showing all logs.`}}async#we(){let e=this.#p;if(e===void 0)return;loadDevelopmentEnvironmentFiles(e),await this.#d?.refreshAfterSourceChange({});let t=this.#q(await this.#Te());this.#de(t)}async#Te(){let e=this.#t;if(e===void 0)return;let t=await probeAgentInfo({client:e});return t.kind===`ready`?t.info:void 0}async#Ee(){let e=this.#P,t=await this.#Te();t!==void 0&&this.#q(t),(!this.#n.renderAgentHeader||t===void 0)&&this.#n.renderNotice?.(formatAgentUpdateNotice(e,t))}#De(e){let t={name:e.data.name,description:e.data.description,state:`required`};e.data.authorization!==void 0&&(t.challenge=e.data.authorization),e.data.webhookUrl!==void 0&&(t.webhookUrl=e.data.webhookUrl),this.#V.set(e.data.name,t),this.#Ae(t)}#Oe(e){if(e.turnState?.boundaryEvent!==`session.waiting`)return!1;let t=!1;for(let e of this.#V.values())e.state!==`required`||e.webhookUrl===void 0||(e.state=`pending`,this.#H.add(e.name),this.#Ae(e),t=!0);return t&&this.#n.setConnectionAuthPendingCount?.(this.#H.size),this.#H.size>0}#ke(e){let t=this.#V.get(e.data.name)??{name:e.data.name,description:``,state:e.data.outcome};t.state=e.data.outcome,e.data.reason!==void 0&&(t.reason=e.data.reason),this.#V.set(e.data.name,t),this.#H.delete(e.data.name),this.#Ae(t),this.#n.setConnectionAuthPendingCount?.(this.#H.size)}#Ae(e){let t={name:e.name,description:e.description,state:e.state};e.challenge!==void 0&&(t.challenge=e.challenge),e.reason!==void 0&&(t.reason=e.reason),this.#n.upsertConnectionAuth?.(t)}};function createRenderer(e){return e.renderer?e.renderer:new TerminalRenderer({tools:e.tools,reasoning:e.reasoning,subagents:e.subagents,connectionAuth:e.connectionAuth,assistantResponseStats:e.assistantResponseStats,contextSize:e.contextSize,logs:e.logs,availablePromptCommands:e.availablePromptCommands,input:e.userInput,output:e.screen,diagnostics:e.diagnostics,onExitRequest:e.lifecycle?.requestStop})}function formatAgentUpdateNotice(e,t){let n=e?.agent.model.id,r=t?.agent.model.id;return n!==void 0&&r!==void 0&&n!==r?`Agent updated: Model ${n} -> ${r}`:`Agent updated.`}function registryHandoffAddress(e,t){if(e!==`selfmod__registry_add`||typeof t!=`object`||!t)return;let n=t;return n.status===`needs-terminal`&&typeof n.address==`string`?n.address:void 0}async function*eveEventsToTUIStream(e){let{events:t,pendingInputRequests:n,turnState:r,onSubagentCalled:i,onSubagentBackgrounded:a,onSubagentCompleted:o,onTurnCancelled:s,onConnectionAuthRequired:c,onConnectionAuthCompleted:l,onRegistryHandoff:u,onTerminalFailure:d,failureHintOverride:f}=e,p=new Map,m=new Map,h=new Map,g=createEventDeduper(),_=0,v=new Set,y=new Set,b=new Set,x=!1,S=!1,C;for await(let e of t)if(g.admit(e)&&!(S&&isPostTurnVisibleEvent(e)))switch(e.type){case`session.started`:case`message.received`:break;case`turn.started`:r.turnId=e.data.turnId;break;case`step.started`:_+=1,yield{type:`step-start`};break;case`step.completed`:{let t=e;C=t.data.usage,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`step-finish`,usage:t.data.usage};break}case`message.appended`:{let t=e,n=textPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(p,n);if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}let i=t.data.messageDelta;if(i.length===0)break;r.text+=i,yield{type:`assistant-delta`,id:partGenerationId(n,r.generation),delta:i};break}case`message.completed`:{let t=textPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(p,t),r=e.data.message;if(n.completed){if(r===null||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_,yield{type:`assistant-complete`,id:partGenerationId(t,n.generation),text:r};break}let i=partGenerationId(t,n.generation);if(r!==null)if(n.text.length===0)n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i,text:r};else if(r.startsWith(n.text)){let e=r.slice(n.text.length);e.length>0&&(yield{type:`assistant-delta`,id:i,delta:e}),n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i}}else n.text=r,n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i,text:r};else n.text.length>0&&(n.completed=!0,n.completedEpoch=_,yield{type:`assistant-complete`,id:i});break}case`reasoning.appended`:{let t=e,n=reasoningPartId(t.data.turnId,t.data.stepIndex),r=partStateFor(m,n);if(r.completed){if(_<=r.completedEpoch)break;r.generation+=1,r.text=``,r.completed=!1}let i=t.data.reasoningDelta;if(i.length===0)break;r.text+=i,yield{type:`reasoning-delta`,id:partGenerationId(n,r.generation),delta:i};break}case`reasoning.completed`:{let t=reasoningPartId(e.data.turnId,e.data.stepIndex),n=partStateFor(m,t),r=e.data.reasoning;if(n.completed){if(r.length===0||_<=n.completedEpoch)break;n.generation+=1,n.text=r,n.completedEpoch=_;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}let i=partGenerationId(t,n.generation);if(n.text.length===0&&r.length>0)n.text=r,yield{type:`reasoning-delta`,id:i,delta:r};else if(r.length>0&&!r.startsWith(n.text)){yield{type:`reasoning-complete`,id:i},n.generation+=1,n.text=r,n.completed=!0,n.completedEpoch=_;let e=partGenerationId(t,n.generation);yield{type:`reasoning-delta`,id:e,delta:r},yield{type:`reasoning-complete`,id:e};break}n.completed=!0,n.completedEpoch=_,yield{type:`reasoning-complete`,id:i};break}case`actions.requested`:{let t=e.data.actions.filter(e=>e.kind===`tool-call`);if(t.length===0)break;for(let e of t)h.set(e.callId,e.toolName),!v.has(e.callId)&&(v.add(e.callId),yield{type:`tool-call`,toolCallId:e.callId,toolName:e.toolName,input:e.input});break}case`input.requested`:{let t=e.data.requests.filter(e=>e.action.kind===`tool-call`);if(t.length===0)break;for(let e of t){let t=e.action.callId;if(h.set(t,e.action.toolName),e.kind!==`session-limit`&&!v.has(t)&&(v.add(t),yield{type:`tool-call`,toolCallId:t,toolName:e.action.toolName,input:e.action.input}),!y.has(e.requestId)){if(y.add(e.requestId),n.set(e.requestId,e),e.kind!==`tool-approval`){upsertPendingQuestion(r,e);continue}upsertPendingApproval(r,e),yield{type:`tool-approval-request`,approvalId:e.requestId,toolCallId:t}}}break}case`action.result`:{let t=e;if(t.data.result.kind!==`tool-result`)break;let n=t.data.result.callId;if(!v.has(n))break;switch(t.data.status){case`completed`:{let e=t.data.result.output;yield{type:`tool-result`,toolCallId:n,output:e};let r=registryHandoffAddress(h.get(n),e);r!==void 0&&await u?.(r);break}case`failed`:yield{type:`tool-error`,toolCallId:n,errorText:formatActionResultError(t)};break;case`rejected`:yield{type:`tool-rejected`,toolCallId:n,reason:formatActionResultError(t)};break}break}case`step.failed`:case`turn.failed`:{let t=toFailureEvent(e,b,f);t&&(yield t);break}case`session.failed`:{r.sawSessionFailure=!0,d?.(e);let t=toFailureEvent(e,b,f);t&&(yield t),r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return}case`session.waiting`:case`session.completed`:r.boundaryEvent=e.type,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C},x=!0;return;case`turn.completed`:S=!0,yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_);break;case`turn.cancelled`:s?.(e.data.turnId),yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`turn-cancelled`};break;case`subagent.called`:i?.(e);break;case`subagent.started`:case`subagent.event`:break;case`subagent.completed`:{let t=e;t.data.backgroundTask===void 0?o?.(t.data.callId):a?.(t.data.callId);break}case`authorization.required`:c?.(e);break;case`authorization.completed`:l?.(e);break;default:break}x||(yield*closeOpenParts(p,`assistant-complete`,_),yield*closeOpenParts(m,`reasoning-complete`,_),yield{type:`finish`,usage:C})}async function*errorOnlyTUIStream(e){yield{type:`error`,errorText:e.errorText},yield{type:`finish`}}function createTurnState(){return{aborted:!1,pendingApprovals:[],pendingQuestions:[],sawSessionFailure:!1}}function upsertPendingApproval(e,t){let n=toAgentTUIToolApprovalRequest(t),r=e.pendingApprovals.findIndex(e=>e.approvalId===n.approvalId);r===-1?e.pendingApprovals.push(n):e.pendingApprovals[r]=n}function toAgentTUIToolApprovalRequest(e){return{approvalId:e.requestId,toolCallId:e.action.callId,toolName:e.action.toolName,input:e.action.input}}function upsertPendingQuestion(e,t){let n=e.pendingQuestions.findIndex(e=>e.requestId===t.requestId);n===-1?e.pendingQuestions.push(t):e.pendingQuestions[n]=t}function textPartId(e,t){return`text:${e}:${t}`}function reasoningPartId(e,t){return`reasoning:${e}:${t}`}function partStateFor(e,t){let n=e.get(t);return n===void 0&&(n={generation:0,text:``,completed:!1,completedEpoch:0},e.set(t,n)),n}function partGenerationId(e,t){return t===0?e:`${e}#${t}`}function*closeOpenParts(e,t,n){for(let[r,i]of e)i.completed||i.text.length===0||(i.completed=!0,i.completedEpoch=n,yield{type:t,id:partGenerationId(r,i.generation)})}function isPostTurnVisibleEvent(e){switch(e.type){case`actions.requested`:case`authorization.completed`:case`authorization.required`:case`input.requested`:case`message.appended`:case`message.completed`:case`reasoning.appended`:case`reasoning.completed`:case`result.completed`:case`step.completed`:case`step.failed`:case`step.started`:case`subagent.called`:case`subagent.completed`:case`subagent.event`:case`subagent.started`:case`turn.completed`:case`turn.failed`:return!0;default:return!1}}function formatActionResultError(e){if(e.data.error?.message)return e.data.error.message;let t=e.data.result.output;if(typeof t==`string`)return t;try{return JSON.stringify(t)}catch{return`Tool execution failed.`}}function toFailureEvent(e,t,n){let r=failureKey(e);if(t.has(r))return;t.add(r);let c={type:`error`,errorText:formatFailureMessage(e)},l=n?.(e)??formatFailureHint(e);l!==void 0&&(c.hint=l);let u=formatFailureDetail(e);return u!==void 0&&(c.detail=u),c}function toAgentTUIInputQuestion(e){let t=e.display===`text`?`text`:e.display===`select`||e.options!==void 0&&e.options.length>0?`select`:`text`,n={requestId:e.requestId,prompt:e.prompt,display:t};return e.options!==void 0&&(n.options=e.options.map(e=>{let t={id:e.id,label:e.label};return e.description!==void 0&&(t.description=e.description),e.style!==void 0&&(t.style=e.style),t})),e.allowFreeform!==void 0&&(n.allowFreeform=e.allowFreeform),n}export{EveTUIRunner,parsePromptCommand,registryHandoffAddress};
@@ -1 +1 @@
1
- import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{readNdjsonStream}from"#client/ndjson.js";var SubagentPump=class{#e;#t;#n;#r;#i=new Map;#a=new Map;#o=new Map;#s=new Map;#c=new Map;constructor(e){this.#e=e.client,this.#t=e.view,this.#n=e.formatActionResultError,this.#r=e.onToolCompleted}begin(t){let n=t.data.callId,r=this.#i.get(n);r===void 0?this.#i.set(n,{name:t.data.name,childSessionId:t.data.childSessionId,parentTurnId:t.data.turnId,background:!1,status:`open`,childStreamPath:t.data.childStreamPath,childStreamIndex:this.#o.get(t.data.childSessionId)??0,steps:new Map,currentSectionKey:null,nextSectionKey:0,tools:new Map,seenChildEvents:createEventDeduper()}):r.name=t.data.name,this.#t?.markChildToolCallId(n),!(r!==void 0&&r.status!==`open`)&&(this.#t?.begin({callId:n,name:t.data.name}),r===void 0&&this.#l(n))}settle(e){this.#f(e,!1)}background(e){let t=this.#i.get(e);t!==void 0&&(t.background=!0,t.status!==`authoritative`&&this.#t?.background({callId:e}))}abortAll(){for(let e of this.#a.values())e.abort();this.#a.clear(),this.#i.clear(),this.#o.clear(),this.#s.clear(),this.#c.clear()}settleCancelledTurn(e){for(let[t,n]of this.#i)n.parentTurnId!==e||n.background||(this.#f(t,!0),this.#a.get(t)?.abort(),this.#a.delete(t))}#l(e){let t=this.#i.get(e);if(t===void 0||t.status===`authoritative`)return;let n=this.#s.get(t.childSessionId);if(n===void 0){t.childStreamIndex=this.#o.get(t.childSessionId)??0,this.#s.set(t.childSessionId,e),this.#u(e);return}if(n===e)return;let r=this.#c.get(t.childSessionId)??[];r.includes(e)||r.push(e),this.#c.set(t.childSessionId,r)}#u(e){if(this.#a.has(e))return;let r=this.#e;if(!r)return;let i=this.#i.get(e);if(i===void 0||i.status===`authoritative`)return;let a=new AbortController;this.#a.set(e,a),(async()=>{let o=100;try{for(;!a.signal.aborted&&i.status!==`authoritative`;){let s=!1;try{let o=await r.fetch(streamPathAt(i.childStreamPath,i.childStreamIndex),{cache:`no-store`,signal:a.signal});if(!o.ok||o.body===null)throw await o.body?.cancel().catch(()=>{}),Error(`Child stream returned ${o.status}.`);for await(let r of readNdjsonStream(o.body)){if(a.signal.aborted)return;s=!0,i.childStreamIndex+=1,this.#o.set(i.childSessionId,i.childStreamIndex);let n=this.#h(e,r);if(n!==void 0&&await n,isCurrentTurnBoundaryEvent(r)){if(r.type===`session.waiting`&&hasPendingChildApproval(i))continue;this.#f(e,!0);return}}}catch{if(a.signal.aborted)return}o=s?100:Math.min(o*2,2e3),await abortableDelay(o,a.signal)}}finally{this.#a.get(e)===a&&this.#a.delete(e)}})()}#d(e,t,n){let r=t.tools.get(n.childCallId),i=r??{toolName:n.toolName,input:n.input,status:n.status};if(r){let e=r.status===`done`||r.status===`failed`||r.status===`rejected`;if(n.status===`approval-requested`&&!e)r.status=n.status;else{let e={preparing:0,"approval-requested":1,executing:2,done:3,failed:3,rejected:3};e[n.status]>e[r.status]&&(r.status=n.status)}n.input!==void 0&&(r.input=n.input)}else t.tools.set(n.childCallId,i);this.#t?.markChildToolCallId(n.childCallId),this.#t?.upsertTool({callId:e,subagentName:t.name,childCallId:n.childCallId,toolName:i.toolName,input:i.input,status:i.status})}#f(e,t){let n=this.#i.get(e);if(!(!n||n.status===`authoritative`)&&!(!t&&n.status===`provisional`)){n.status=t?`authoritative`:`provisional`;for(let[t,r]of n.steps)r.finalized||(r.finalized=!0,this.#t?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:r.reasoning,message:r.message,finalized:!0}));n.currentSectionKey=null,this.#m(e,n),this.#t?.complete({authoritative:t,callId:e}),t&&this.#p(e,n.childSessionId)}}#p(e,t){let n=(this.#c.get(t)??[]).filter(t=>t!==e);if(this.#s.get(t)!==e){n.length===0?this.#c.delete(t):this.#c.set(t,n);return}for(this.#s.delete(t);n.length>0;){let e=n.shift(),r=this.#i.get(e);if(!(r===void 0||r.status===`authoritative`)){n.length===0?this.#c.delete(t):this.#c.set(t,n),r.childStreamIndex=this.#o.get(t)??0,this.#s.set(t,e),this.#u(e);return}}this.#c.delete(t)}#m(e,t){for(let[n,r]of t.tools)r.status===`preparing`&&(t.tools.delete(n),this.#t?.removeTool({callId:e,childCallId:n}))}#h(e,t){let n=this.#i.get(e);if(!n||!n.seenChildEvents.admit(t))return;n.status===`provisional`&&(n.status=`open`,this.#t?.begin({callId:e,name:n.name}));let r=this.#t,emit=(t,i)=>{r?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:i.reasoning,message:i.message,finalized:i.finalized})},finalizeCurrent=()=>{if(n.currentSectionKey===null)return;let e=n.steps.get(n.currentSectionKey);e&&(e.finalized=!0,emit(n.currentSectionKey,e)),n.currentSectionKey=null};switch(t.type){case`reasoning.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.reasoning+=t.data.reasoningDelta,emit(e,r);break}case`reasoning.completed`:break;case`message.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.message+=t.data.messageDelta,emit(e,r);break}case`message.completed`:{let{key:e,step:r}=openCurrentSubagentSection(n);t.data.message!==null&&r.message.length===0&&(r.message=t.data.message),r.finalized=!0,emit(e,r),n.currentSectionKey=null;break}case`step.completed`:finalizeCurrent(),this.#m(e,n);break;case`actions.requested`:finalizeCurrent();for(let r of t.data.actions)r.kind===`tool-call`&&this.#d(e,n,{childCallId:r.callId,toolName:r.toolName,input:r.input,status:`executing`});break;case`input.requested`:finalizeCurrent();for(let r of t.data.requests)r.action.kind===`tool-call`&&this.#d(e,n,{childCallId:r.action.callId,toolName:r.action.toolName,input:r.action.input,status:`approval-requested`});break;case`action.result`:{let i=t.data.result;if(i.kind!==`tool-result`)break;let a=n.tools.get(i.callId);if(!a)break;switch(t.data.status){case`completed`:a.status=`done`,a.output=i.output;break;case`failed`:a.status=`failed`,a.errorText=this.#n(t);break;case`rejected`:a.status=`rejected`,a.errorText=this.#n(t);break}let o={callId:e,subagentName:n.name,childCallId:i.callId,toolName:a.toolName,input:a.input,status:a.status};if(a.output!==void 0&&(o.output=a.output),a.errorText!==void 0&&(o.errorText=a.errorText),r?.upsertTool(o),t.data.status===`completed`)return this.#r?.(a.toolName,i.output);break}default:break}}};function hasPendingChildApproval(e){return[...e.tools.values()].some(e=>e.status===`approval-requested`)}function streamPathAt(e,t){return t===0?e:`${e}${e.includes(`?`)?`&`:`?`}startIndex=${t}`}async function abortableDelay(e,t){t.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t.removeEventListener(`abort`,onAbort),n()},e);r.unref?.(),t.addEventListener(`abort`,onAbort,{once:!0})})}function openCurrentSubagentSection(e){e.currentSectionKey===null&&(e.currentSectionKey=e.nextSectionKey++,e.steps.set(e.currentSectionKey,{reasoning:``,message:``,finalized:!1}));let t=e.steps.get(e.currentSectionKey);if(!t)throw Error(`invariant: subagent section state missing for current key`);return{key:e.currentSectionKey,step:t}}export{SubagentPump};
1
+ import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{readNdjsonStream}from"#client/ndjson.js";import{readMessageStreamVersion}from"#client/stream-version.js";var SubagentPump=class{#e;#t;#n;#r;#i=new Map;#a=new Map;#o=new Map;#s=new Map;#c=new Map;constructor(e){this.#e=e.client,this.#t=e.view,this.#n=e.formatActionResultError,this.#r=e.onToolCompleted}begin(t){let n=t.data.callId,r=this.#i.get(n);r===void 0?this.#i.set(n,{name:t.data.name,childSessionId:t.data.childSessionId,parentTurnId:t.data.turnId,background:!1,status:`open`,childStreamPath:t.data.childStreamPath,childStreamIndex:this.#o.get(t.data.childSessionId)??0,steps:new Map,currentSectionKey:null,nextSectionKey:0,tools:new Map,seenChildEvents:createEventDeduper()}):r.name=t.data.name,this.#t?.markChildToolCallId(n),!(r!==void 0&&r.status!==`open`)&&(this.#t?.begin({callId:n,name:t.data.name}),r===void 0&&this.#l(n))}settle(e){this.#f(e,!1)}background(e){let t=this.#i.get(e);t!==void 0&&(t.background=!0,t.status!==`authoritative`&&this.#t?.background({callId:e}))}abortAll(){for(let e of this.#a.values())e.abort();this.#a.clear(),this.#i.clear(),this.#o.clear(),this.#s.clear(),this.#c.clear()}settleCancelledTurn(e){for(let[t,n]of this.#i)n.parentTurnId!==e||n.background||(this.#f(t,!0),this.#a.get(t)?.abort(),this.#a.delete(t))}#l(e){let t=this.#i.get(e);if(t===void 0||t.status===`authoritative`)return;let n=this.#s.get(t.childSessionId);if(n===void 0){t.childStreamIndex=this.#o.get(t.childSessionId)??0,this.#s.set(t.childSessionId,e),this.#u(e);return}if(n===e)return;let r=this.#c.get(t.childSessionId)??[];r.includes(e)||r.push(e),this.#c.set(t.childSessionId,r)}#u(e){if(this.#a.has(e))return;let i=this.#e;if(!i)return;let a=this.#i.get(e);if(a===void 0||a.status===`authoritative`)return;let o=new AbortController;this.#a.set(e,o),(async()=>{let s=100;try{for(;!o.signal.aborted&&a.status!==`authoritative`;){let c=!1;try{let s=await i.fetch(streamPathAt(a.childStreamPath,a.childStreamIndex),{cache:`no-store`,signal:o.signal});if(!s.ok||s.body===null)throw await s.body?.cancel().catch(()=>{}),Error(`Child stream returned ${s.status}.`);for await(let i of readNdjsonStream(s.body,{streamVersion:readMessageStreamVersion(s.headers)})){if(o.signal.aborted)return;c=!0,a.childStreamIndex+=1,this.#o.set(a.childSessionId,a.childStreamIndex);let n=this.#h(e,i);if(n!==void 0&&await n,isCurrentTurnBoundaryEvent(i)){if(i.type===`session.waiting`&&hasPendingChildApproval(a))continue;this.#f(e,!0);return}}}catch{if(o.signal.aborted)return}s=c?100:Math.min(s*2,2e3),await abortableDelay(s,o.signal)}}finally{this.#a.get(e)===o&&this.#a.delete(e)}})()}#d(e,t,n){let r=t.tools.get(n.childCallId),i=r??{toolName:n.toolName,input:n.input,status:n.status};if(r){let e=r.status===`done`||r.status===`failed`||r.status===`rejected`;if(n.status===`approval-requested`&&!e)r.status=n.status;else{let e={preparing:0,"approval-requested":1,executing:2,done:3,failed:3,rejected:3};e[n.status]>e[r.status]&&(r.status=n.status)}n.input!==void 0&&(r.input=n.input)}else t.tools.set(n.childCallId,i);this.#t?.markChildToolCallId(n.childCallId),this.#t?.upsertTool({callId:e,subagentName:t.name,childCallId:n.childCallId,toolName:i.toolName,input:i.input,status:i.status})}#f(e,t){let n=this.#i.get(e);if(!(!n||n.status===`authoritative`)&&!(!t&&n.status===`provisional`)){n.status=t?`authoritative`:`provisional`;for(let[t,r]of n.steps)r.finalized||(r.finalized=!0,this.#t?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:r.reasoning,message:r.message,finalized:!0}));n.currentSectionKey=null,this.#m(e,n),this.#t?.complete({authoritative:t,callId:e}),t&&this.#p(e,n.childSessionId)}}#p(e,t){let n=(this.#c.get(t)??[]).filter(t=>t!==e);if(this.#s.get(t)!==e){n.length===0?this.#c.delete(t):this.#c.set(t,n);return}for(this.#s.delete(t);n.length>0;){let e=n.shift(),r=this.#i.get(e);if(!(r===void 0||r.status===`authoritative`)){n.length===0?this.#c.delete(t):this.#c.set(t,n),r.childStreamIndex=this.#o.get(t)??0,this.#s.set(t,e),this.#u(e);return}}this.#c.delete(t)}#m(e,t){for(let[n,r]of t.tools)r.status===`preparing`&&(t.tools.delete(n),this.#t?.removeTool({callId:e,childCallId:n}))}#h(e,t){let n=this.#i.get(e);if(!n||!n.seenChildEvents.admit(t))return;n.status===`provisional`&&(n.status=`open`,this.#t?.begin({callId:e,name:n.name}));let r=this.#t,emit=(t,i)=>{r?.upsertStep({callId:e,subagentName:n.name,sectionKey:t,reasoning:i.reasoning,message:i.message,finalized:i.finalized})},finalizeCurrent=()=>{if(n.currentSectionKey===null)return;let e=n.steps.get(n.currentSectionKey);e&&(e.finalized=!0,emit(n.currentSectionKey,e)),n.currentSectionKey=null};switch(t.type){case`reasoning.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.reasoning+=t.data.reasoningDelta,emit(e,r);break}case`reasoning.completed`:break;case`message.appended`:{let{key:e,step:r}=openCurrentSubagentSection(n);r.message+=t.data.messageDelta,emit(e,r);break}case`message.completed`:{let{key:e,step:r}=openCurrentSubagentSection(n);t.data.message!==null&&r.message.length===0&&(r.message=t.data.message),r.finalized=!0,emit(e,r),n.currentSectionKey=null;break}case`step.completed`:finalizeCurrent(),this.#m(e,n);break;case`actions.requested`:finalizeCurrent();for(let r of t.data.actions)r.kind===`tool-call`&&this.#d(e,n,{childCallId:r.callId,toolName:r.toolName,input:r.input,status:`executing`});break;case`input.requested`:finalizeCurrent();for(let r of t.data.requests)r.action.kind===`tool-call`&&this.#d(e,n,{childCallId:r.action.callId,toolName:r.action.toolName,input:r.action.input,status:`approval-requested`});break;case`action.result`:{let i=t.data.result;if(i.kind!==`tool-result`)break;let a=n.tools.get(i.callId);if(!a)break;switch(t.data.status){case`completed`:a.status=`done`,a.output=i.output;break;case`failed`:a.status=`failed`,a.errorText=this.#n(t);break;case`rejected`:a.status=`rejected`,a.errorText=this.#n(t);break}let o={callId:e,subagentName:n.name,childCallId:i.callId,toolName:a.toolName,input:a.input,status:a.status};if(a.output!==void 0&&(o.output=a.output),a.errorText!==void 0&&(o.errorText=a.errorText),r?.upsertTool(o),t.data.status===`completed`)return this.#r?.(a.toolName,i.output);break}default:break}}};function hasPendingChildApproval(e){return[...e.tools.values()].some(e=>e.status===`approval-requested`)}function streamPathAt(e,t){return t===0?e:`${e}${e.includes(`?`)?`&`:`?`}startIndex=${t}`}async function abortableDelay(e,t){t.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t.removeEventListener(`abort`,onAbort),n()},e);r.unref?.(),t.addEventListener(`abort`,onAbort,{once:!0})})}function openCurrentSubagentSection(e){e.currentSectionKey===null&&(e.currentSectionKey=e.nextSectionKey++,e.steps.set(e.currentSectionKey,{reasoning:``,message:``,finalized:!1}));let t=e.steps.get(e.currentSectionKey);if(!t)throw Error(`invariant: subagent section state missing for current key`);return{key:e.currentSectionKey,step:t}}export{SubagentPump};
@@ -3,7 +3,7 @@ import{PROMPT_COMMANDS,isPromptControlCommand,parsePromptCommand}from"./prompt-c
3
3
  `).map(stripPromptControlCharacters).join(`
4
4
  `),i=stripPromptControlCharacters(e?.initialDraft??this.#W.text),a=lineOf(r===void 0?i:i.length===0?r:`${r}\n\n${i}`);return this.#W=EMPTY_LINE,this.#L.begin(a.text),this.#Ze(a),this.#z=typeaheadFor(this.#f,a.text),this.#zt(),this.#pn(),await new Promise((e,r)=>{this.#q=r;let apply=e=>{a=e,this.#Vt(),this.#Ze(a),this.#z=typeaheadFor(this.#f,e.text,this.#z),this.#pn()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#z=void 0,this.#Bt(),this.#At(),r(interruptedError())},suggestions=()=>this.#z!==void 0&&isTypeaheadOpen(this.#z)?this.#z:void 0,highlighted=()=>{let e=suggestions();return e===void 0?void 0:selectedTypeaheadCommand(e)};this.#de=r=>{r.type!==`ctrl-c`&&this.#ne&&(this.#ne=!1,this.#pn());let i=applyLineEditorKey(a,r,{multiline:!0});if(i!==void 0){apply(i);return}switch(r.type){case`up`:case`ctrl-p`:{let e=suggestions();if(e!==void 0){this.#z=moveTypeaheadSelection(e,-1),this.#pn();break}let t=movePromptLine(a,`up`);t===void 0?recall(this.#L.previous(a.text)):apply(t);break}case`down`:case`ctrl-n`:{let e=suggestions();if(e!==void 0){this.#z=moveTypeaheadSelection(e,1),this.#pn();break}let t=movePromptLine(a,`down`);t===void 0?recall(this.#L.next()):apply(t);break}case`tab`:{let e=highlighted();e!==void 0&&apply(lineOf(typeaheadCompletion(e)));break}case`escape`:{let e=suggestions();e!==void 0&&(this.#z=dismissTypeahead(e),this.#pn());break}case`enter`:{let r=highlighted(),i=r!==void 0&&parsePromptCommand(a.text)===null?typeaheadCompletion(r).trimEnd():a.text;if(i.trim().length===0)break;this.#z=void 0,this.#L.add(i),this.#R=!1,this.#Bt(),this.#J=STATUS.processing,isPromptControlCommand(i)?this.#Gt({kind:`command`,body:stripTerminalControls(i.trim()),live:!1}):(this.#Ut(),this.#Kt(i),this.#Pe=i,this.#U.arm()),this.#Ze(EMPTY_LINE),this.#pn(),this.#Mt(),e(i);break}case`ctrl-d`:a.text.length===0?(this.#wt(),interrupt()):apply(deleteForward(a));break;case`ctrl-l`:this.#gn();break;case`ctrl-r`:this.#pn();break;case`ctrl-c`:if(this.#ne){this.#wt(),interrupt();break}this.#ne=!0,apply(EMPTY_LINE);break;default:break}},this.#jt()})}#Ze(e){this.#F=e.text,this.#I=e.cursor}takeQueuedPrompt(){let e=this.#Be.view().steering,t=this.#Be.takePrompt();return t!==void 0&&(this.#We=e?`steer`:`queue`),t}async renderStream(e,t){this.#Ot(t),this.#g.clear(),this.#R=!1,this.#K.kind!==`waiting`&&(this.#K={kind:`waiting`,startedAtMs:Date.now()}),this.#J=this.#M>0?STATUS.connectionAuth:STATUS.processing,this.#Jt(t?.submittedPrompt),t?.submittedPrompt!==void 0&&this.#d?.recordPrompt(),t?.submittedPrompt!==void 0&&!this.#U.armed&&this.#U.arm(),this.#ee=!1,this.#He=!1,this.#Ge=!1,this.#Ke=t?.submittedPrompt,this.#Be.beginTurn(),this.#Ve=e.cancel,this.#ye=void 0,this.#be=void 0,this.#Se=void 0,this.#Ce=void 0,this.#we=Date.now();let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l};this.#Ht(),this.#G=!0,this.#pn();let r=new Promise(e=>{this.#ge=e});this.#de=e=>this.#Rt(e),this.#jt();let i={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!0};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#ee)break;this.#tn(t,n,i)}}catch(e){let t=summarizeKnownError(e);t===null?this.#Yt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Yt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#ge=void 0,this.#ee&&e.abort?.(),this.#Ve=void 0,this.#Mt(),this.#Wt(),this.#G=!1,this.#K.kind===`waiting`&&(this.#K={kind:`idle`}),this.#J=completedTurnStatus({interrupted:this.#ee,cancelled:this.#He,continueSession:t?.continueSession===!0}),this.#cn(i),(this.#ee||i.cancelled)&&this.#sn(i),this.#en(),this.#d?.reportStats(),this.#pn(),t?.continueSession||this.#At()}}async renderIdleStream(e,t){let n={tools:t?.tools??this.#a,reasoning:t?.reasoning??this.#o,assistantResponseStats:t?.assistantResponseStats??this.#l},r={text:new Map,reasoning:new Map,tools:new Map,cancelled:!1,restoreCancelledPrompt:!1};try{for await(let t of iterateTUIStream(e.events))this.#tn(t,n,r)}catch(e){let t=summarizeKnownError(e);t===null?this.#Yt(`Error`,toErrorMessage(e),{detail:inspectError(e)}):this.#Yt(t.name,t.message,{detail:inspectError(e),hint:t.hint})}finally{this.#cn(r),r.cancelled&&this.#sn(r),this.#en(),this.#d?.reportStats(),this.#pn()}}async readToolApproval(e,t){return this.#Ot(t),this.#Wt(),this.#R=!1,this.#K={kind:`idle`},this.#J=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#ee=!1,this.#pn(),await new Promise((t,n)=>{this.#q=n,this.#de=r=>{switch(r.type){case`text`:{if(r.framing!==`unframed`)break;let n=r.value.toLowerCase();n===`y`?(this.#Ut(),this.#J=STATUS.processing,this.#Mt(),this.#pn(),t({approved:!0})):n===`n`&&(this.#Ut(),this.#J=STATUS.processing,this.#$e(e.toolCallId),this.#Mt(),this.#pn(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#pn();break;case`ctrl-c`:this.#ee=!0,this.#At(),n(interruptedError());break;default:break}},this.#jt()})}async readInputQuestion(e,t){this.#Ot(t),this.#Wt(),this.#R=!1,this.#B=!1,this.#K={kind:`idle`},this.#ee=!1;let n=e.options??[],r=n.length>0,i=(e.allowFreeform===!0||!r)&&r,a=n.length+ +!!i,o=questionSectionId(e.requestId),s=r?`overlay`:`text`,c=0,l=EMPTY_LINE,isOnFreeformRow=()=>i&&c===n.length,overlayPanel=t=>renderQuestionPanel({prompt:stripTerminalControls(e.prompt),options:n,cursor:c,allowFreeform:i,editor:l,caretVisible:this.#ie},this.#i,t),renderTextSection=()=>{this.#Zt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:formatQuestionContent(e,void 0,this.#i),preformatted:!0,live:!0})},syncFreeformCaret=()=>{isOnFreeformRow()?this.#zt():(this.#Bt(),this.#Vt())};s===`overlay`?(s=`overlay`,this.#R=!1,this.#$t(o),this.#Fe=overlayPanel,this.#J=``,syncFreeformCaret(),this.#pn()):(s=`text`,this.#Fe=void 0,renderTextSection(),this.#R=!0,this.#Ze(l),this.#J=``,this.#zt(),this.#pn());let finalize=t=>{this.#Fe=void 0,this.#Zt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${stripTerminalControls(t.label)}`,preformatted:!0,live:!1}),this.#R=!1,this.#Ut(),this.#J=STATUS.processing,this.#Bt(),this.#Mt(),this.#pn();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n},dismiss=()=>{this.#Fe=void 0,this.#Zt({id:o,kind:`question`,title:stripTerminalControls(e.prompt),body:`${this.#i.colors.dim(this.#i.glyph.elbow)} ${this.#i.colors.dim(`Dismissed.`)}`,preformatted:!0,live:!1}),this.#R=!1,this.#J=``,this.#Bt(),this.#Mt(),this.#pn(),u(void 0)},moveCursor=e=>{a!==0&&(c=(c+e+a)%a,syncFreeformCaret(),this.#pn())},selectOptionAt=e=>{let t=n[e];t&&u(finalize({optionId:t.id,label:t.label}))},u;return await new Promise((t,r)=>{this.#q=r,u=t,this.#de=t=>{if(t.type===`ctrl-c`){if((s===`text`||isOnFreeformRow())&&l.text.length>0){l=EMPTY_LINE,this.#Vt(),s===`text`&&this.#Ze(l),this.#pn();return}this.#ee=!0,this.#Fe=void 0,this.#Bt(),this.#At(),r(interruptedError());return}if(t.type===`ctrl-r`){this.#pn();return}if(s===`overlay`){let r=setupSelectionIntent(t,{textNavigation:!isOnFreeformRow()});if(r?.kind===`move`){moveCursor(r.direction===`up`?-1:1);return}switch(t.type){case`up`:case`ctrl-p`:moveCursor(-1);break;case`down`:case`ctrl-n`:moveCursor(1);break;case`enter`:if(isOnFreeformRow()){let t=resolveQuestionText(l.text,e);t!==void 0&&u(finalize(t));break}selectOptionAt(c);break;case`escape`:if(isOnFreeformRow()&&l.text.length>0){l=EMPTY_LINE,this.#Vt(),this.#pn();break}dismiss();break;default:if(isOnFreeformRow()){let e=applyLineEditorKey(l,t);e!==void 0&&(l=e,this.#Vt(),this.#pn());break}if(t.type===`text`&&/^[1-9]$/u.test(t.value)){let e=Number(t.value)-1;e<n.length?selectOptionAt(e):e===n.length&&i&&(c=e,syncFreeformCaret(),this.#pn())}break}return}let a=applyLineEditorKey(l,t,{multiline:!0});if(a!==void 0){l=a,this.#Vt(),this.#Ze(l),this.#pn();return}switch(t.type){case`up`:case`down`:{let e=movePromptLine(l,t.type);e!==void 0&&(l=e,this.#Vt(),this.#Ze(l),this.#pn());break}case`enter`:{let t=resolveQuestionText(l.text,e);if(t===void 0)break;u(finalize(t));break}case`escape`:if(l.text.length>0){l=EMPTY_LINE,this.#Vt(),this.#Ze(l),this.#pn();break}dismiss();break;default:break}},this.#jt()})}upsertSubagentStep(e){if(this.#d?.recordSubagentDispatch(e.callId),this.#s===`hidden`)return;let t=stripTerminalControls(e.reasoning??``).trim(),n=stripTerminalControls(e.message??``).trim();if(!(t.length===0&&n.length===0)){if(this.#Xt(e.callId,e.subagentName),this.#s===`collapsed`){this.#pn();return}this.#Qt({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,subagentCallId:e.callId,depth:1,reasoning:t,body:n,collapsed:this.#s!==`full`,live:!e.finalized}),this.#pn()}}upsertSubagentTool(e){if(this.#d?.recordSubagentDispatch(e.callId),e.status===`failed`&&e.errorText!==void 0&&this.#d?.append({source:`tool`,summary:`${e.toolName} failed (subagent ${e.subagentName})`,detail:e.errorText}),this.#s===`hidden`)return;if(this.#Xt(e.callId,e.subagentName),this.#s===`collapsed`){this.#pn();return}let t=subagentToolStatus(e.status),n=e.status===`preparing`?presentPreparingTool(e.toolName):presentTool(e.toolName,e.input,this.#an({input:e.input,output:e.output,toolCallId:e.childCallId,toolName:e.toolName})),r={id:subagentToolSectionId(e.callId,e.childCallId),kind:`subagent-tool`,subagentCallId:e.callId,depth:1,title:stripTerminalControls(n.title),subtitle:stripTerminalControls(n.subtitle),status:t,live:t===`running`||t===`approval`,expanded:this.#s===`full`,toolName:e.toolName,toolGroup:n.group,toolInput:e.input};n.doneTitle!==void 0&&(r.doneTitle=stripTerminalControls(n.doneTitle)),n.detail!==void 0&&(r.detailLines=n.detail,r.keepDetailWhenDone=n.keepDetailWhenDone===!0),e.output===void 0?e.errorText!==void 0&&(r.result=stripTerminalControls(e.errorText)):(r.result=n.summarizeResult(e.output),r.toolOutput=e.output),this.#Qt(r),this.#Qe(e.callId),this.#pn()}#Qe(e){applyCohortLiveness(this.#m.filter(t=>t.kind===`subagent-tool`&&t.subagentCallId===e).map(e=>({block:e,active:isActiveToolStatus(e.status)})))}removeSubagentTool(e){this.#$t(subagentToolSectionId(e.callId,e.childCallId)),this.#pn()}subagents={begin:e=>this.beginSubagent(e),background:e=>this.backgroundSubagent(e),upsertStep:e=>this.upsertSubagentStep(e),upsertTool:e=>this.upsertSubagentTool(e),removeTool:e=>this.removeSubagentTool(e),complete:e=>this.completeSubagent(e),markChildToolCallId:e=>this.markChildToolCallId(e)};beginSubagent(e){if(this.#s===`hidden`)return;this.#Xt(e.callId,e.name);let t=this.#h.get(subagentHeaderId(e.callId));t!==void 0&&(t.status===`done`&&delete t.status,t.live=!0),this.#C.delete(e.callId),this.#pn()}backgroundSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));t===void 0||this.#g.has(subagentHeaderId(e.callId))||(t.status=`running`,t.live=!0,t.updateSeq=++this.#b,this.#S.add(e.callId),this.#pn())}completeSubagent(e){let t=this.#h.get(subagentHeaderId(e.callId));if(t!==void 0){if(t.status=`done`,e.authoritative){this.#S.delete(e.callId),this.#C.delete(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!1)}else{this.#C.add(e.callId);for(let t of this.#m)t.subagentCallId===e.callId&&(t.live=!0)}this.#pn()}}markChildToolCallId(e){this.#v.add(e);let t=this.#y.get(e);t!==void 0&&(this.#$t(t),this.#y.delete(e),this.#pn())}#$e(e){let t=this.#h.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#c===`hidden`)return;let t=connectionAuthTerminalMessage(e.state);this.#Zt({id:connectionAuthSectionId(e.name),kind:`connection-auth`,title:`${stripTerminalControls(e.name)} · authorization · ${e.state}`,body:formatConnectionAuthContent(e,t),preformatted:!0,live:t===void 0}),this.#pn()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#M)return;let n=this.#M>0;this.#M=t,t>0?(this.#J=STATUS.connectionAuth,this.#pn()):n&&(this.#J=STATUS.processing,this.#pn())}setVercelStatus(e){this.#N=e,this.#pn()}setRemoteConnectionStatus(e){this.#P=e,this.#pn()}reset(){this.#m=[],this.#h.clear(),this.#g.clear(),this.#j=void 0,this.#A.length=0,this.#_.length=0,this.#O=!1,this.#k=void 0,this.#et(),this.#H=!1,this.#Pe=void 0,this.#ke=void 0,this.#M=0,this.#ye=void 0,this.#be=void 0,this.#Se=void 0,this.#Ce=void 0,this.#we=void 0,this.#Z&&(this.#n.clearAll(),this.#pn())}renderSessionBoundary(){this.#qt(),this.#et();let e=this.#i.colors,t=this.#i.glyph,n=e.dim(`${t.cornerOpen}${t.dash.repeat(2)} Session restarted, clear context.`);this.#Gt({kind:`session-boundary`,body:n,live:!1}),this.#pn()}#et(){this.#v.clear(),this.#y.clear(),this.#T.clear(),this.#S.clear(),this.#C.clear(),this.#x.clear(),this.#Re=void 0,this.#ze=void 0,this.#Be.reset(),this.#We=void 0,this.#w.clear(),this.#U.reset()}renderNotice(e){let t=stripTerminalControls(e);t.trim().length!==0&&(this.#Ot(),this.#Gt({kind:`notice`,body:t,live:!1}),this.#pn())}renderSandboxLog(e){let t=parseSandboxLogLine(stripTerminalControls(e));t!==void 0&&(this.#d?.append({source:`sandbox`,detail:t}),this.#Ot(),this.#Gt({kind:`sandbox`,body:t,live:!1}),this.#pn())}renderSetupWarning(e){let t=stripTerminalControls(e);if(t.trim().length===0){this.#tt();return}this.#Ot(),this.#Le=t,this.#pn()}clearSetupWarning(){this.#tt()}#tt(){this.#Le!==void 0&&(this.#Le=void 0,this.#pn())}renderCommandInvocation(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;this.#Ot();let r={kind:`command`,body:n,live:!1};t===`failed`&&(r.status=`error`),this.#Gt(r),this.#pn()}renderCommandResult(e,t){let n=stripAnsi(e);n.trim().length!==0&&(this.#Ot(),this.#Gt({kind:`result`,body:n,live:!1,status:t===`success`?`done`:void 0}),this.#pn())}#nt(e,t=`spinner`){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let n=t===`pulse`?{kind:`pulse`,startedAtMs:Date.now()}:{kind:`spinner`};this.#Ie={title:stripTerminalControls(e),indicator:n,lines:[],outputBuffer:[]},this.#Ht(),this.#pn()}#rt(e){this.#Ie!==void 0&&(this.#Ie.navigation=e,this.#pn())}#it(e){this.#qe=void 0,this.#vt();let t=this.#Ie;if(t!==void 0){if(this.#Ie=void 0,this.#Wt(),e){let e=[];for(let n of t.lines){if(n.evidence===!0){e.push(n.text);continue}(n.tone===`warning`||n.tone===`error`)&&(e.length>0&&this.#Gt({kind:`flow`,title:`info`,body:e.join(`
5
5
  `),live:!1}),this.#Gt({kind:`flow`,title:n.tone,body:n.text,live:!1})),e=[]}}this.#pn()}}async#at(e){let t=this.#ft(),n=isMultiSelectRequest(e),r=e.kind===`search`?e.searchAction:void 0,i=e.options,a=e.navigation?.kind===`planner`,o={options:i,searchAction:r,submitRow:n&&!a};`initialValue`in e&&e.initialValue!==void 0&&(o.defaultValue=e.initialValue),`initialValues`in e&&e.initialValues!==void 0&&(o.initialValues=e.initialValues);let s=initialSelectState(o),c,l=!1,u=0,isCurrentSearch=e=>e===u,clearSearch=()=>{u+=1,l=!1,s=reduceSelect(s,{type:`clear`},{options:i,searchAction:r,submitRow:n&&!a}),this.#pn()},loadSearch=async(e,t)=>{l=!0,c=void 0;let o=++u;this.#pn();try{let c=await t(e);if(!isCurrentSearch(o))return;let l=s.filter;i=c,s={...initialSelectState({options:c,searchAction:r,submitRow:n&&!a}),filter:l}}catch(e){isCurrentSearch(o)&&(c=toErrorMessage(e))}finally{isCurrentSearch(o)&&(l=!1,this.#pn())}},d=e.notices;if(e.kind===`task-list`||e.kind===`search`&&e.layout===`task-list`){let n=t.taskListLineStart??t.lines.length,r=t.lines.slice(n).filter(e=>e.tone===`success`||e.tone===`warning`||e.tone===`error`).map(e=>({tone:e.tone,text:e.text}));d=e.notices??r,t.taskListLineStart=t.lines.length,t.hideLinesWhileQuestion=!0}let panelState=()=>{let t={...e,options:i,select:s};return d!==void 0&&d.length>0&&(t.notices=d),c!==void 0&&(t.error=c),l&&(t.loadingFrame=this.#bn()),t};return t.question=e=>renderSelectQuestion(panelState(),this.#i,e),this.#pn(),await this.#ht((t,o)=>{let close=e=>{u+=1,o(e)};if(l){t.type===`ctrl-c`?close(void 0):t.type===`escape`?clearSearch():t.type===`ctrl-r`&&this.#pn();return}let d=e.navigation?.kind===`planner`?e.navigation:void 0,f=t.type===`left`&&(d?.activeStep??0)>(d?.firstNavigableStep??0)?`back`:t.type===`right`&&d!==void 0&&d.activeStep>=(d.firstNavigableStep??0)&&d.activeStep<d.steps.length-1?`forward`:void 0;if(f!==void 0){close({kind:`navigate`,direction:f,values:n?orderedSelection(i,s.selected):[]});return}let p={key:t,options:i,searchAction:r,select:s},m=reduceSetupSelectInput(n?{...p,kind:e.kind,required:e.required,plannerNavigation:a||void 0}:{...p,kind:e.kind});switch(m.kind){case`cancel`:close(void 0);return;case`repaint`:this.#pn();return;case`update`:s=m.select,c=void 0,this.#pn();return;case`submit`:{let e=searchActionQuery(m.values[0]??``),t=r?.load;if(e===void 0||t===void 0){close(m.values);return}loadSearch(e,t);return}case`error`:c=m.message,this.#pn();return;case`ignore`:return}}).promise}#ot(e){this.#Ot();let t=this.#pt();t.status={kind:`progress`,text:stripTerminalControls(e.status),startedAtMs:Date.now()};let n;t.question=t=>renderSelectQuestion({kind:`actions`,context:e.context,actions:e.actions,cursor:n},this.#i,t),this.#pn();let r=this.#ht((t,r)=>{let i=setupSelectionIntent(t,{textNavigation:!0});switch(i?.kind){case`cancel`:r(void 0);return;case`move`:n=moveActionCursor(n,i.direction,e.actions.length),this.#pn();return;case`repaint`:this.#pn();return;case`submit`:n!==void 0&&r(e.actions[n].value);return;case void 0:return}},()=>{t.status=void 0});return{choice:r.promise,close:()=>r.settle(void 0)}}async#st(e){let t=this.#ft(),n={options:e.options};e.initialValue!==void 0&&(n.defaultValue=e.initialValue);let r=initialSelectState(n),i=lineOf(``),a;t.question=t=>{let n={kind:`inline-edit`,layout:`task-list`,message:e.message,options:e.options,select:r,edit:{optionValue:e.editable.value,caretVisible:this.#ie,editor:{kind:`rename`,editor:i,defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint}}};return a!==void 0&&(n.error=a),renderSelectQuestion(n,this.#i,t)};let onEditableRow=()=>selectValueAtCursor([...e.options],r.cursor)===e.editable.value,syncEditableRow=()=>{onEditableRow()?this.#zt():(i=lineOf(``),this.#Bt())};return syncEditableRow(),this.#pn(),await this.#ht((t,n)=>{let applyEditor=e=>{i=e,a=void 0,this.#Vt(),this.#pn()},applySelect=t=>{r=reduceSelect(r,t,{options:e.options}),a=void 0,syncEditableRow(),this.#pn()},submit=()=>{let t=selectValueAtCursor([...e.options],r.cursor);if(t===void 0)return;if(t!==e.editable.value){n({kind:`selected`,value:t});return}let o=(i.text||e.editable.defaultValue).trim(),s=e.editable.validate?.(o);if(s!==void 0){a=s,this.#pn();return}n(o===e.editable.defaultValue?{kind:`selected`,value:t}:{kind:`edited`,value:t,text:o})},o=setupSelectionIntent(t,{textNavigation:!onEditableRow()});switch(o?.kind){case`cancel`:n(void 0);return;case`move`:applySelect({type:o.direction});return;case`submit`:submit();return;case`repaint`:this.#pn();return;case void 0:break}if(!onEditableRow())return;let s=applyLineEditorKey(i,t);s!==void 0&&applyEditor(s)},()=>this.#Bt()).promise}async#ct(e){let t=this.#ft(),n=initialProviderPickerState(e.options,e.initialValue),r,cursorBadge=()=>{if(n.phase.kind!==`inactive`)return;let t=selectValueAtCursor([...e.options],n.select.cursor),r=e.options.find(e=>e.value===t);if(r!==void 0)return enterBadge(this.#i,r.checked===!0?`change`:void 0)};t.question=t=>{let r=cursorBadge(),i={kind:`inline-edit`,layout:`stacked`,message:e.message,options:e.options,select:n.select,edit:{optionValue:`ai-gateway-key`,caretVisible:this.#ie,editor:{kind:`key`,phase:n.phase}}};return r!==void 0&&(i.cursorBadge=r),renderSelectQuestion(i,this.#i,t)};let syncCaret=()=>{n.phase.kind===`editing`||n.phase.kind===`invalid`?this.#zt():this.#Bt()};return syncCaret(),this.#pn(),await this.#ht((t,i,a)=>{let dispatch=t=>{let o=transitionProviderPicker(n,t,e.options);switch(o.kind){case`ignore`:return;case`clear`:r?.abort(),r=void 0,n=o.state,syncCaret(),this.#pn();return;case`cancel`:i(void 0);return;case`render`:n=o.state,syncCaret(),this.#pn();return;case`validate`:{n=o.state,syncCaret(),this.#pn();let t=new AbortController;r=t;let i;try{i=e.validateInlineKey(o.key,t.signal)}catch(e){a(e);return}i.then(e=>{r!==t||t.signal.aborted||(r=void 0,dispatch({type:`validated`,validation:e}))},e=>{r!==t||t.signal.aborted||(r=void 0,a(e))});return}case`settle`:i(o.result);return}},o=setupSelectionIntent(t,{textNavigation:n.phase.kind===`inactive`});switch(o?.kind){case`cancel`:dispatch({type:`cancel`});return;case`move`:dispatch({type:`move`,direction:o.direction});return;case`submit`:dispatch({type:`submit`});return;case`repaint`:this.#pn();return;case void 0:break}if(n.phase.kind!==`editing`&&n.phase.kind!==`invalid`)return;let s=applyLineEditorKey(n.phase.editor,t);s!==void 0&&(this.#Vt(),dispatch({type:`edit`,editor:s}))},()=>{r?.abort(),r=void 0,this.#Bt()}).promise}async#lt(e){let t=this.#ft(),n=initialModelEditorState(e);return t.question=t=>renderModelEditorQuestion({request:e,state:n},this.#i,t),this.#pn(),await this.#ht((t,r)=>{let dispatch=t=>{let i=transitionModelEditor(n,t,e);switch(i.kind){case`ignore`:return;case`render`:n=i.state,this.#pn();return;case`cancel`:r(void 0);return;case`settle`:r(i.result);return}},i=setupSelectionIntent(t);switch(i?.kind){case`cancel`:dispatch({type:`cancel`});return;case`move`:dispatch({type:`move`,direction:i.direction});return;case`submit`:dispatch({type:`submit`});return;case`repaint`:this.#pn();return;case void 0:break}if(t.type===`left`||t.type===`right`){dispatch({type:`adjust`,direction:t.type});return}if(t.type===`tab`){dispatch({type:`adjust`,direction:`right`});return}if(t.type===`backspace`){dispatch({type:`backspace`});return}if(t.type===`text`)for(let e of t.value.replaceAll(`
6
- `,` `))e>=` `&&e!==``&&dispatch({type:`char`,char:e})}).promise}async#ut(e){let t=this.#ft(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder===void 0?e.defaultValue!==void 0&&(i.placeholder=e.defaultValue):i.placeholder=e.placeholder,e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#i,t,this.#ie)},this.#zt(),this.#pn(),await this.#ht((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Vt(),this.#pn()},a=applyLineEditorKey(n,t);if(a!==void 0){apply(a);return}switch(t.type){case`ctrl-c`:case`escape`:i(void 0);return;case`ctrl-r`:this.#pn();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#pn();return}i(t);return}default:return}},()=>this.#Bt()).promise}async#dt(e){let t=this.#ft();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#pn(),await this.#ht((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#pn();return;default:return}}).promise}#ft(){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let e=this.#pt();return e.status!==void 0&&(e.status=void 0,e.summary=void 0,e.preview=void 0),e}#pt(){return this.#Ie===void 0&&(this.#Ie={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Ie}#mt(){this.#Ie?.implicit===!0?this.#Ie=void 0:this.#Ie!==void 0&&(this.#Ie.question=void 0,this.#Ie.hideLinesWhileQuestion=!1),this.#de=void 0,this.#Mt(),this.#Ie!==void 0&&this.#_t(),this.#pn()}#ht(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#mt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#mt(),i(e))};return this.#Lt(),this.#de=t=>{t.type===`ctrl-c`&&this.#wt(),e(t,settle,reject)},this.#jt(),{promise:a,settle}}#gt(e){let t,n=new Promise(e=>{t=e});return this.#qe=t,this.#_t(e?.interruptible??!0),{promise:n,dispose:()=>{this.#qe===t&&(this.#qe=void 0,this.#vt())}}}#_t(e=!0){if(this.#qe===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#wt();let e=this.#qe;this.#qe=void 0,this.#vt(),e?.(t.type===`ctrl-c`?`ctrl-c`:`escape`);return}t.type===`ctrl-r`&&this.#pn()};this.#Je=consumer,this.#Lt(),this.#de=consumer,this.#jt()}#vt(){this.#Je!==void 0&&(this.#de===this.#Je&&this.#Mt(),this.#Je=void 0)}#yt(e){let t=e===void 0?void 0:typeof e==`string`?{kind:`progress`,text:stripTerminalControls(e),startedAtMs:Date.now()}:{kind:`external-action`,text:stripTerminalControls(e.text),emphasis:stripTerminalControls(e.emphasis),startedAtMs:Date.now()};if(this.#Ie!==void 0){this.#Ie.status=t,t===void 0&&(this.#Ie.preview=void 0),this.#pn();return}if(!(this.#R||this.#G)){if(t===void 0){this.#K={kind:`idle`},this.#Y=void 0,this.#Wt(),this.#pn();return}this.#Ot(),this.#Ut(),this.#Y=t.text,this.#pn()}}#bt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Ie;if(r!==void 0){if(r.preview=void 0,t===`warning`||t===`error`)for(let e of r.outputBuffer)r.lines.push({text:e,tone:`info`,evidence:!0});r.outputBuffer=[],r.lines.push({text:n,tone:t}),this.#pn();return}this.#Ot(),this.#Gt({kind:`flow`,title:t,body:n,live:!1}),this.#pn()}#xt(e){let t=this.#Ie;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.status=void 0,t.summary=e===void 0?void 0:{headline:stripTerminalControls(e.headline),facts:e.facts.map(e=>({label:stripTerminalControls(e.label),value:stripTerminalControls(e.value)}))},this.#pn())}#St(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Ie;if(n===void 0){this.#bt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#pn()}async#Ct(e){this.#fe=``,this.#Lt(),this.#qe=void 0,this.#vt(),this.#Mt(),this.#Wt(),this.#n.clear(),this.#Fn(),this.#r.enter({cursor:`visible`,mouse:!1}),this.#e.isTTY&&this.#e.setRawMode?.(!1),this.#e.pause();try{return await e()}finally{this.#r.exit(),this.#e.isTTY&&this.#e.setRawMode?.(!0),this.#e.resume(),this.#fe=``,this.#Lt(),this.#n.hideCursor(),this.#Pn(),this.#Ie!==void 0&&(this.#Ht(),this.#_t()),this.#n.reset(),this.#pn()}}setSessionId(e){this.#Ue=e}shutdown(){if(this.#At(),this.#Q&&!this.#$){this.#$=!0;let e=this.#Ue===void 0?``:` ${this.#i.glyph.dot} session ${this.#Ue}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#W={cursor:this.#I,text:this.#F},this.#At()}requestInterrupt(){this.#ee=!0,this.#Ie!==void 0&&this.#de?.({type:`ctrl-c`}),this.#ge?.(),this.#At()}exitRequested(){return this.#te}#wt(){this.#te=!0,this.#re?.()}async#Tt(e){if(this.#Ye!==void 0||!this.#Z)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#Mn(),height:this.#Nn()}),paint:e=>this.#r.paint(e,this.#Nn()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#Xe});this.#Ye=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#Dt=e,this.#de=e=>{t.handleKey(e)===`close`&&this.#Et()},this.#jt(),t.start()})}#Et(){let e=this.#Ye;if(e===void 0)return;this.#Ye=void 0,e.dispose(),this.#Mt(),this.#r.exit(),this.#n.hideCursor(),this.#pn(),this.#n.showCursor();let t=this.#Dt;this.#Dt=void 0,t?.()}#Dt;#Ot(e){this.#X=e?.title??this.#X,e?.contextSize!==void 0&&(this.#xe=e.contextSize),!this.#Z&&(this.#Z=!0,this.#Q=!0,this.#n.reset(),this.#n.hideCursor(),this.#Pn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#he=()=>this.#pn(),this.#t.on(`resize`,this.#he),process.on(`exit`,this.#kt))}#kt=()=>{this.#Z&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#At(){this.#Et();let e=this.#q;if(this.#q=void 0,e?.(interruptedError()),this.#Mt(),this.#Bt(),this.#Wt(),this.#le!==void 0&&(clearTimeout(this.#le),this.#le=void 0),this.#ue=!1,this.#Un(),this.#Z){this.#Gn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#pn(),this.#n.clear(),this.#n.showCursor(),this.#Fn(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#he&&=(this.#t.off(`resize`,this.#he),void 0),process.off(`exit`,this.#kt),this.#Z=!1}}#jt(){this.#e.off(`data`,this.#Nt),this.#e.on(`data`,this.#Nt),this.#fe.length>0&&queueMicrotask(()=>{this.#de!==void 0&&this.#fe.length>0&&(this.#Ft(),this.#Pt())})}#Mt(){this.#e.off(`data`,this.#Nt),this.#Lt(),this.#de=void 0}#Nt=e=>{this.#Lt(),this.#fe+=this.#pe.write(e),this.#Ft(),this.#Pt()};#Pt(){if(this.#fe===`\x1B`){this.#me=setTimeout(()=>{this.#fe===`\x1B`&&(this.#fe=``,this.#de?.({type:`escape`}))},30),this.#me.unref?.();return}if(isIncompletePaste(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{if(this.#fe!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#fe=``,t.length>0&&this.#de?.({type:`text`,value:t,framing:`bracketed-paste`})},incompletePasteFlushMs),this.#me.unref?.();return}if(isIncompleteOsc(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{this.#fe===e&&(this.#fe=``)},incompletePasteFlushMs),this.#me.unref?.()}}#Ft(){for(;this.#fe.length>0;){let e=nextKey(this.#fe);if(e.incomplete)return;if(this.#fe=this.#fe.slice(e.consumed),!(e.key===void 0||e.key.type===`ignore`)){if(e.key.type===`osc`){this.#It(e.key.value);continue}this.#de?.(e.key)}}}#It(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#Xe=t,this.#Ye?.setTerminalBackground(t))}#Lt(){this.#me&&=(clearTimeout(this.#me),void 0)}#Rt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#pn();break;case`enter`:{let e=this.#W.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Ve!==void 0){this.#W=EMPTY_LINE,this.#Be.requestCancellation(),this.#Ge=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Ve(),this.#pn();break}this.#Be.enqueue(e)&&(this.#W=EMPTY_LINE),this.#pn();break}case`ctrl-c`:case`escape`:if(this.#Be.idle&&this.#Ve===void 0)break;this.#Be.handleEscape(),this.#Ge=!0,this.#Ve?.(),this.#pn();break;default:{let t=applyLineEditorKey(this.#W,e,{multiline:!0});t!==void 0&&(this.#W=t,this.#pn());break}}}#zt(){this.#Bt(),this.#Vt(),this.#se=setInterval(()=>{this.#ie=!this.#ie,this.#pn()},500),this.#se.unref?.()}#Bt(){this.#se&&=(clearInterval(this.#se),void 0),this.#ie=!0}#Vt(){this.#ie=!0}#Ht(){this.#Wt(),this.#ce=setInterval(()=>{this.#ae+=1,this.#pn()},90),this.#ce.unref?.()}#Ut(){let e=Date.now();this.#oe=e,this.#K={kind:`waiting`,startedAtMs:e},this.#Ht()}#Wt(){this.#ce&&=(clearInterval(this.#ce),void 0)}#Gt(e){e.id!==this.#ke?.id&&this.#Gn(),e.updateSeq=++this.#b;let t=e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId)?-1:this.#m.findIndex(e=>e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId));t<0?this.#m.push(e):this.#m.splice(t,0,e),e.id&&this.#h.set(e.id,e)}#Kt(e){this.#H=!0,this.#Gt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#pn()}#qt(){let e=this.#U.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#Tn(e.elapsedMs)}`,n=this.#be??0;if(this.#xe!==void 0&&this.#xe>0&&n>0){let e=Math.round(n/this.#xe*100);t+=` ${this.#i.glyph.dot} ${e}% context`}this.#Gt({kind:`turn-stats`,body:t,live:!1})}#Jt(e){if(e==null)return;let t=this.#We;if(this.#We=void 0,this.#Pe===e){this.#Pe=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Gt(n)}#Yt(e,t,n={}){let r=stripTerminalControls(e),i=stripTerminalControls(t),a=n.detail===void 0?void 0:stripTerminalControls(n.detail),o=n.hint===void 0?void 0:stripTerminalControls(n.hint),s={source:`workflow`,summary:`${r}: ${i}`,detail:a??i};this.#d?.append(o===void 0?s:{...s,hint:o});let c={kind:`error`,title:r,body:i,live:!1};o!==void 0&&(c.hint=o),a!==void 0&&(c.detail=this.#d===void 0?a:`details: ${this.#d.displayPath}`),this.#Gt(c),this.#pn()}#Xt(e,t){if(this.#T.has(e))return;this.#T.add(e);let n=stripTerminalControls(t),r=this.#x.get(n)??[];if(r.push(e),this.#x.set(n,r),r.length===2){let e=this.#h.get(subagentHeaderId(r[0]));e!==void 0&&(e.subtitle=`#1`)}let i={id:subagentHeaderId(e),kind:`subagent`,subagentCallId:e,title:n,live:!0};r.length>1&&(i.subtitle=`#${r.length}`),this.#Gt(i)}#Zt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#b;return}this.#Gt(e)}#Qt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t!==void 0){Object.assign(t,e),t.updateSeq=++this.#b;return}let n=e.subagentCallId;if(n===void 0){this.#Gt(e);return}e.id!==this.#ke?.id&&this.#Gn(),e.updateSeq=++this.#b;let r=-1;for(let e=0;e<this.#m.length;e+=1)this.#m[e]?.subagentCallId===n&&(r=e);this.#m.splice(r<0?this.#m.length:r+1,0,e),e.id!==void 0&&this.#h.set(e.id,e)}#$t(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#en(){for(let e of this.#m)e.subagentCallId!==void 0&&this.#C.has(e.subagentCallId)||e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#tn(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#U.addUsage(e.usage),this.#cn(n),this.#fn(e.usage),this.#pn();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#nn(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?stripTerminalControls(e.text??``):t;n.text.set(e.id,r),this.#nn(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;let r=(n.reasoning.get(e.id)??``)+stripTerminalControls(e.delta);if(n.reasoning.set(e.id,r),t.reasoning===`full`){this.#rn(e.id,r,!0,t);break}break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;if(t.reasoning===`full`){this.#rn(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#in({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#d?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#in({input:e.input,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-approval-request`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;this.#in({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#dn(e.toolCallId,n);if(this.#d?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#in({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Yt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#He=!0,!this.#Ge&&this.#Ke!==void 0&&this.#W.text.length===0&&(this.#W=lineOf(this.#Ke),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#fn(e.usage),this.#pn();break}}#nn(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Zt({id:e,kind:`assistant`,body:r,live:n}),this.#pn())}#rn(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Zt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#pn())}#in(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#ln(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#an(e);this.#Zt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#un(n),this.#pn()}#an(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#on(e.toolName)&&(t.isSubagent=!0);let n=readWriteFileInput(e.toolName,e.input);if(n===void 0)return t.isSubagent===!0?t:void 0;let r=this.#w.observeWrite({path:n.path,content:n.content,callId:e.toolCallId});r!==void 0&&(t.previousContent=r);let i=writeExistedFlag(e.output);return i!==void 0&&(t.existed=i),t}#on(e){let t=this.#E?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#sn(e){for(let t of e.tools.keys()){if(this.#v.has(t))continue;let e=this.#y.get(t)??toolSectionId(t),n=this.#h.get(e);n?.kind===`tool`&&n.status===`running`&&(n.status=`error`,n.result=`interrupted`,n.live=!1)}}#cn(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#y.get(t)??toolSectionId(t);this.#$t(r),this.#y.delete(t)}}#ln(e){let t=readTodoToolItems(e.toolName,e.input);if(t===void 0)return!1;if(t.length>0&&allTodoItemsSettled(t)){let e=JSON.stringify(t);this.#ze!==e&&(this.#ze=e,this.#Gt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#Mn(),this.#i).join(`
6
+ `,` `))e>=` `&&e!==``&&dispatch({type:`char`,char:e})}).promise}async#ut(e){let t=this.#ft(),n=lineOf(``),r;return t.question=t=>{let i={message:e.message,editor:n,mask:e.mask===!0};return e.placeholder===void 0?e.defaultValue!==void 0&&(i.placeholder=e.defaultValue):i.placeholder=e.placeholder,e.notices!==void 0&&(i.notices=e.notices),r!==void 0&&(i.error=r),renderTextQuestion(i,this.#i,t,this.#ie)},this.#zt(),this.#pn(),await this.#ht((t,i)=>{let apply=e=>{n=e,r=void 0,this.#Vt(),this.#pn()},a=applyLineEditorKey(n,t);if(a!==void 0){apply(a);return}switch(t.type){case`ctrl-c`:case`escape`:i(void 0);return;case`ctrl-r`:this.#pn();return;case`enter`:{let t=n.text.length>0?n.text:e.defaultValue??``,a=e.validate?.(t);if(a!==void 0){r=a,this.#pn();return}i(t);return}default:return}},()=>this.#Bt()).promise}async#dt(e){let t=this.#ft();return t.question=t=>renderAcknowledgeQuestion({message:e.message,lines:e.lines},this.#i,t),this.#pn(),await this.#ht((e,t)=>{switch(e.type){case`enter`:case`escape`:case`ctrl-c`:t();return;case`ctrl-r`:this.#pn();return;default:return}}).promise}#ft(){this.#Ot(),this.#R=!1,this.#K={kind:`idle`},this.#J=``;let e=this.#pt();return e.status!==void 0&&(e.status=void 0,e.summary=void 0,e.preview=void 0),e}#pt(){return this.#Ie===void 0&&(this.#Ie={title:``,indicator:{kind:`spinner`},lines:[],outputBuffer:[],implicit:!0}),this.#Ie}#mt(){this.#Ie?.implicit===!0?this.#Ie=void 0:this.#Ie!==void 0&&(this.#Ie.question=void 0,this.#Ie.hideLinesWhileQuestion=!1),this.#de=void 0,this.#Mt(),this.#Ie!==void 0&&this.#_t(),this.#pn()}#ht(e,t){let n=!1,r,i,a=new Promise((e,t)=>{r=e,i=t}),settle=e=>{n||(n=!0,t?.(),this.#mt(),r(e))},reject=e=>{n||(n=!0,t?.(),this.#mt(),i(e))};return this.#Lt(),this.#de=t=>{t.type===`ctrl-c`&&this.#wt(),e(t,settle,reject)},this.#jt(),{promise:a,settle}}#gt(e){let t,n=new Promise(e=>{t=e});return this.#qe=t,this.#_t(e?.interruptible??!0),{promise:n,dispose:()=>{this.#qe===t&&(this.#qe=void 0,this.#vt())}}}#_t(e=!0){if(this.#qe===void 0)return;let consumer=t=>{if(e&&(t.type===`ctrl-c`||t.type===`escape`)){t.type===`ctrl-c`&&this.#wt();let e=this.#qe;this.#qe=void 0,this.#vt(),e?.(t.type===`ctrl-c`?`ctrl-c`:`escape`);return}t.type===`ctrl-r`&&this.#pn()};this.#Je=consumer,this.#Lt(),this.#de=consumer,this.#jt()}#vt(){this.#Je!==void 0&&(this.#de===this.#Je&&this.#Mt(),this.#Je=void 0)}#yt(e){let t=e===void 0?void 0:typeof e==`string`?{kind:`progress`,text:stripTerminalControls(e),startedAtMs:Date.now()}:{kind:`external-action`,text:stripTerminalControls(e.text),emphasis:stripTerminalControls(e.emphasis),startedAtMs:Date.now()};if(this.#Ie!==void 0){this.#Ie.status=t,t===void 0&&(this.#Ie.preview=void 0),this.#pn();return}if(!(this.#R||this.#G)){if(t===void 0){this.#K={kind:`idle`},this.#Y=void 0,this.#Wt(),this.#pn();return}this.#Ot(),this.#Ut(),this.#Y=t.text,this.#pn()}}#bt(e,t){let n=stripTerminalControls(e);if(n.trim().length===0)return;let r=this.#Ie;if(r!==void 0){if(r.preview=void 0,t===`warning`||t===`error`)for(let e of r.outputBuffer)r.lines.push({text:e,tone:`info`,evidence:!0});r.outputBuffer=[],r.lines.push({text:n,tone:t}),this.#pn();return}this.#Ot(),this.#Gt({kind:`flow`,title:t,body:n,live:!1}),this.#pn()}#xt(e){let t=this.#Ie;t!==void 0&&(t.lines=[],t.outputBuffer=[],t.preview=void 0,t.status=void 0,t.summary=e===void 0?void 0:{headline:stripTerminalControls(e.headline),facts:e.facts.map(e=>({label:stripTerminalControls(e.label),value:stripTerminalControls(e.value)}))},this.#pn())}#St(e){let t=stripTerminalControls(e);if(t.trim().length===0)return;let n=this.#Ie;if(n===void 0){this.#bt(t,`info`);return}n.preview=t,n.outputBuffer.push(t),n.outputBuffer.length>40&&n.outputBuffer.shift(),this.#pn()}async#Ct(e){this.#fe=``,this.#Lt(),this.#qe=void 0,this.#vt(),this.#Mt(),this.#Wt(),this.#n.clear(),this.#Fn(),this.#r.enter({cursor:`visible`,mouse:!1}),this.#e.isTTY&&this.#e.setRawMode?.(!1),this.#e.pause();try{return await e()}finally{this.#r.exit(),this.#e.isTTY&&this.#e.setRawMode?.(!0),this.#e.resume(),this.#fe=``,this.#Lt(),this.#n.hideCursor(),this.#Pn(),this.#Ie!==void 0&&(this.#Ht(),this.#_t()),this.#n.reset(),this.#pn()}}setSessionId(e){this.#Ue=e}shutdown(){if(this.#At(),this.#Q&&!this.#$){this.#$=!0;let e=this.#Ue===void 0?``:` ${this.#i.glyph.dot} session ${this.#Ue}`;this.#t.write(`${this.#i.colors.dim(`${eveVersionTag()}${e}`)}\n`)}}suspendPromptForInput(){this.#W={cursor:this.#I,text:this.#F},this.#At()}requestInterrupt(){this.#ee=!0,this.#Ie!==void 0&&this.#de?.({type:`ctrl-c`}),this.#ge?.(),this.#At()}exitRequested(){return this.#te}#wt(){this.#te=!0,this.#re?.()}async#Tt(e){if(this.#Ye!==void 0||!this.#Z)return;let t=new TraceViewerSession({...e,theme:this.#i,dimensions:()=>({width:this.#Mn(),height:this.#Nn()}),paint:e=>this.#r.paint(e,this.#Nn()),tracingDisabled:process.env.EVE_TRACES===`off`,copyText:e=>copyTextToClipboard(e,e=>this.#r.writeRaw(e)),terminalBackground:this.#Xe});this.#Ye=t,this.#r.enter(),this.#i.color&&this.#r.writeRaw(BACKGROUND_COLOR_QUERY),await new Promise(e=>{this.#Dt=e,this.#de=e=>{t.handleKey(e)===`close`&&this.#Et()},this.#jt(),t.start()})}#Et(){let e=this.#Ye;if(e===void 0)return;this.#Ye=void 0,e.dispose(),this.#Mt(),this.#r.exit(),this.#n.hideCursor(),this.#pn(),this.#n.showCursor();let t=this.#Dt;this.#Dt=void 0,t?.()}#Dt;#Ot(e){this.#X=e?.title??this.#X,e?.contextSize!==void 0&&(this.#xe=e.contextSize),!this.#Z&&(this.#Z=!0,this.#Q=!0,this.#n.reset(),this.#n.hideCursor(),this.#Pn(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume(),this.#n.emitBracketedPaste(!0)),this.#he=()=>this.#pn(),this.#t.on(`resize`,this.#he),process.on(`exit`,this.#kt))}#kt=()=>{this.#Z&&(this.#r.exit(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1)),this.#n.showCursor())};#At(){this.#Et();let e=this.#q;if(this.#q=void 0,e?.(interruptedError()),this.#Mt(),this.#Bt(),this.#Wt(),this.#le!==void 0&&(clearTimeout(this.#le),this.#le=void 0),this.#ue=!1,this.#Un(),this.#Z){this.#Gn();for(let e of this.#m)e.kind===`log`&&e.id===void 0&&(e.live=!1);this.#pn(),this.#n.clear(),this.#n.showCursor(),this.#Fn(),this.#n.newline(),this.#e.isTTY&&(this.#n.emitBracketedPaste(!1),this.#e.setRawMode?.(!1),this.#e.pause()),this.#he&&=(this.#t.off(`resize`,this.#he),void 0),process.off(`exit`,this.#kt),this.#Z=!1}}#jt(){this.#e.off(`data`,this.#Nt),this.#e.on(`data`,this.#Nt),this.#fe.length>0&&queueMicrotask(()=>{this.#de!==void 0&&this.#fe.length>0&&(this.#Ft(),this.#Pt())})}#Mt(){this.#e.off(`data`,this.#Nt),this.#Lt(),this.#de=void 0}#Nt=e=>{this.#Lt(),this.#fe+=this.#pe.write(e),this.#Ft(),this.#Pt()};#Pt(){if(this.#fe===`\x1B`){this.#me=setTimeout(()=>{this.#fe===`\x1B`&&(this.#fe=``,this.#de?.({type:`escape`}))},30),this.#me.unref?.();return}if(isIncompletePaste(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{if(this.#fe!==e)return;let t=sanitizePastedText(stripPasteStart(e));this.#fe=``,t.length>0&&this.#de?.({type:`text`,value:t,framing:`bracketed-paste`})},incompletePasteFlushMs),this.#me.unref?.();return}if(isIncompleteOsc(this.#fe)){let e=this.#fe;this.#me=setTimeout(()=>{this.#fe===e&&(this.#fe=``)},incompletePasteFlushMs),this.#me.unref?.()}}#Ft(){for(;this.#fe.length>0;){let e=nextKey(this.#fe);if(e.incomplete)return;if(this.#fe=this.#fe.slice(e.consumed),!(e.key===void 0||e.key.type===`ignore`)){if(e.key.type===`osc`){this.#It(e.key.value);continue}this.#de?.(e.key)}}}#It(e){let t=parseBackgroundColorReply(e);t!==void 0&&(this.#Xe=t,this.#Ye?.setTerminalBackground(t))}#Lt(){this.#me&&=(clearTimeout(this.#me),void 0)}#Rt(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#pn();break;case`enter`:{let e=this.#W.text;if(e.trim().length===0)break;if(parsePromptCommand(e)?.type===`cancel`&&this.#Ve!==void 0){this.#W=EMPTY_LINE,this.#Be.requestCancellation(),this.#Ge=!0,this.renderCommandInvocation(e.trim()),this.renderCommandResult(`Turn cancellation requested.`),this.#Ve(),this.#pn();break}this.#Be.enqueue(e)&&(this.#W=EMPTY_LINE),this.#pn();break}case`ctrl-c`:case`escape`:if(this.#Be.idle&&this.#Ve===void 0)break;this.#Be.handleEscape(),this.#Ge=!0,this.#Ve?.(),this.#pn();break;default:{let t=applyLineEditorKey(this.#W,e,{multiline:!0});t!==void 0&&(this.#W=t,this.#pn());break}}}#zt(){this.#Bt(),this.#Vt(),this.#se=setInterval(()=>{this.#ie=!this.#ie,this.#pn()},500),this.#se.unref?.()}#Bt(){this.#se&&=(clearInterval(this.#se),void 0),this.#ie=!0}#Vt(){this.#ie=!0}#Ht(){this.#Wt(),this.#ce=setInterval(()=>{this.#ae+=1,this.#pn()},90),this.#ce.unref?.()}#Ut(){let e=Date.now();this.#oe=e,this.#K={kind:`waiting`,startedAtMs:e},this.#Ht()}#Wt(){this.#ce&&=(clearInterval(this.#ce),void 0)}#Gt(e){e.id!==this.#ke?.id&&this.#Gn(),e.updateSeq=++this.#b;let t=e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId)?-1:this.#m.findIndex(e=>e.subagentCallId!==void 0&&this.#S.has(e.subagentCallId));t<0?this.#m.push(e):this.#m.splice(t,0,e),e.id&&this.#h.set(e.id,e)}#Kt(e){this.#H=!0,this.#Gt({kind:`user`,body:stripTerminalControls(e),live:!1}),this.#pn()}#qt(){let e=this.#U.settle();if(e===void 0||e.elapsedMs<=1e4&&e.inputTokens<=2e4)return;let t=`Done in ${this.#Tn(e.elapsedMs)}`,n=this.#be??0;if(this.#xe!==void 0&&this.#xe>0&&n>0){let e=Math.round(n/this.#xe*100);t+=` ${this.#i.glyph.dot} ${e}% context`}this.#Gt({kind:`turn-stats`,body:t,live:!1})}#Jt(e){if(e==null)return;let t=this.#We;if(this.#We=void 0,this.#Pe===e){this.#Pe=void 0;return}let n={kind:`user`,body:stripTerminalControls(e),live:!1};t!==void 0&&(n.promptOrigin=t),this.#Gt(n)}#Yt(e,t,n={}){let r=stripTerminalControls(e),i=stripTerminalControls(t),a=n.detail===void 0?void 0:stripTerminalControls(n.detail),o=n.hint===void 0?void 0:stripTerminalControls(n.hint),s={source:`workflow`,summary:`${r}: ${i}`,detail:a??i};this.#d?.append(o===void 0?s:{...s,hint:o});let c={kind:`error`,title:r,body:i,live:!1};o!==void 0&&(c.hint=o),a!==void 0&&(c.detail=this.#d===void 0?a:`details: ${this.#d.displayPath}`),this.#Gt(c),this.#pn()}#Xt(e,t){if(this.#T.has(e))return;this.#T.add(e);let n=stripTerminalControls(t),r=this.#x.get(n)??[];if(r.push(e),this.#x.set(n,r),r.length===2){let e=this.#h.get(subagentHeaderId(r[0]));e!==void 0&&(e.subtitle=`#1`)}let i={id:subagentHeaderId(e),kind:`subagent`,subagentCallId:e,title:n,live:!0};r.length>1&&(i.subtitle=`#${r.length}`),this.#Gt(i)}#Zt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t){Object.assign(t,e),t.updateSeq=++this.#b;return}this.#Gt(e)}#Qt(e){if(e.id&&this.#g.has(e.id))return;let t=e.id?this.#h.get(e.id):void 0;if(t!==void 0){Object.assign(t,e),t.updateSeq=++this.#b;return}let n=e.subagentCallId;if(n===void 0){this.#Gt(e);return}e.id!==this.#ke?.id&&this.#Gn(),e.updateSeq=++this.#b;let r=-1;for(let e=0;e<this.#m.length;e+=1)this.#m[e]?.subagentCallId===n&&(r=e);this.#m.splice(r<0?this.#m.length:r+1,0,e),e.id!==void 0&&this.#h.set(e.id,e)}#$t(e){this.#m=this.#m.filter(t=>t.id!==e),this.#h.delete(e)}#en(){for(let e of this.#m)e.subagentCallId!==void 0&&this.#C.has(e.subagentCallId)||e.status===`approval`||e.status===`running`||e.kind===`connection-auth`&&e.live||(e.live=!1)}#tn(e,t,n){switch(e.type){case`step-finish`:this.#d?.recordStepUsage(e.usage),e.usage!==void 0&&this.#U.addUsage(e.usage),this.#cn(n),this.#fn(e.usage),this.#pn();break;case`assistant-delta`:{let t=(n.text.get(e.id)??``)+stripTerminalControls(e.delta);n.text.set(e.id,t),this.#nn(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=typeof e.text==`string`?stripTerminalControls(e.text):t;n.text.set(e.id,r),this.#nn(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;let r=(n.reasoning.get(e.id)??``)+stripTerminalControls(e.delta);if(n.reasoning.set(e.id,r),t.reasoning===`full`){this.#rn(e.id,r,!0,t);break}break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;if(t.reasoning===`full`){this.#rn(e.id,r,!1,t);break}break}case`tool-call-preparing`:if(t.tools===`hidden`||isPanelRoutedTool(e.toolName))break;this.#in({input:void 0,preparing:!0,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-call`:if(this.#d?.recordToolCall(e.toolName),t.tools===`hidden`)break;this.#in({input:e.input,status:`running`,toolCallId:e.toolCallId,toolName:e.toolName},t,n);break;case`tool-approval-request`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;this.#in({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{let r=this.#dn(e.toolCallId,n);if(this.#d?.append({source:`tool`,summary:`${r?.toolName??e.toolCallId} failed`,detail:e.errorText}),t.tools===`hidden`||r===void 0)break;this.#in({...r,errorText:e.errorText,status:`error`},t,n);break}case`tool-rejected`:{if(t.tools===`hidden`)break;let r=this.#dn(e.toolCallId,n);if(r===void 0)break;this.#in({...r,errorText:e.reason,status:`denied`},t,n);break}case`error`:this.#Yt(`Error`,e.errorText,{detail:e.detail,hint:e.hint});break;case`turn-cancelled`:if(n.cancelled=!0,!n.restoreCancelledPrompt)break;this.#He=!0,!this.#Ge&&this.#Ke!==void 0&&this.#W.text.length===0&&(this.#W=lineOf(this.#Ke),this.renderNotice(`The turn was cancelled from outside this prompt — the message was restored to the input.`));break;case`finish`:this.#fn(e.usage),this.#pn();break}}#nn(e,t,n){let r=stripTerminalControls(t).trim();r.length!==0&&(this.#Zt({id:e,kind:`assistant`,body:r,live:n}),this.#pn())}#rn(e,t,n,r){let i=stripTerminalControls(t).trim();i.length!==0&&(this.#Zt({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#pn())}#in(e,t,n){if(n.tools.set(e.toolCallId,e),this.#v.has(e.toolCallId)||this.#ln(e)||toolBaseName(e.toolName)===`ask_question`)return;let r=toolSectionId(e.toolCallId);this.#y.set(e.toolCallId,r);let i=this.#an(e);this.#Zt(renderNativeToolBlock(e,r,t.tools===`full`,i)),this.#un(n),this.#pn()}#an(e){e.output!==void 0&&this.#w.observeRead(e.output);let t={};this.#on(e.toolName)&&(t.isSubagent=!0);let n=readWriteFileInput(e.toolName,e.input);if(n===void 0)return t.isSubagent===!0?t:void 0;let r=this.#w.observeWrite({path:n.path,content:n.content,callId:e.toolCallId});r!==void 0&&(t.previousContent=r);let i=writeExistedFlag(e.output);return i!==void 0&&(t.existed=i),t}#on(e){let t=this.#E?.info?.subagents.local;if(t===void 0||t.length===0)return!1;let n=toolBaseName(e);return t.some(e=>e.name===n)}#sn(e){for(let t of e.tools.keys()){if(this.#v.has(t))continue;let e=this.#y.get(t)??toolSectionId(t),n=this.#h.get(e);n?.kind===`tool`&&n.status===`running`&&(n.status=`error`,n.result=`interrupted`,n.live=!1)}}#cn(e){for(let[t,n]of e.tools){if(n.preparing!==!0)continue;e.tools.delete(t);let r=this.#y.get(t)??toolSectionId(t);this.#$t(r),this.#y.delete(t)}}#ln(e){let t=readTodoToolItems(e.toolName,e.input);if(t===void 0)return!1;if(t.length>0&&allTodoItemsSettled(t)){let e=JSON.stringify(t);this.#ze!==e&&(this.#ze=e,this.#Gt({kind:`todo-list`,body:renderFinishedTodoRows(t,this.#Mn(),this.#i).join(`
7
7
  `),live:!1})),this.#Re=void 0}else this.#Re=t.length>0?t:void 0,this.#ze=void 0;return this.#pn(),!0}#un(e){let t=[];for(let n of e.tools.values()){if(this.#v.has(n.toolCallId))continue;let e=this.#y.get(n.toolCallId)??toolSectionId(n.toolCallId),r=this.#h.get(e);r?.kind===`tool`&&t.push({block:r,active:isActiveToolStatus(n.status)})}applyCohortLiveness(t)}#dn(e,t){let n=t.tools.get(e);if(n!==void 0)return n;let r=this.#y.get(e)??toolSectionId(e),i=this.#h.get(r);if(!(i===void 0||i.kind!==`tool`))return{errorText:i.status===`error`&&typeof i.result==`string`?i.result:void 0,input:i.toolInput,output:i.toolOutput,status:i.status??`running`,toolCallId:e,toolName:i.toolName??i.title??`tool`}}#fn(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#ye=(t??0)+(n??0)),this.#be=t??this.#be,this.#Se=n??this.#Se,this.#Se!=null&&this.#we!==void 0){let e=(Date.now()-this.#we)/1e3;e>0&&(this.#Ce=this.#Se/e)}}#pn(){if(this.#Z){if(this.#_e){this.#ve=!0;return}this.#_e=!0;try{do this.#ve=!1,this.#mn();while(this.#ve)}finally{this.#_e=!1}}}#mn(){if(!this.#Z)return;if(this.#Ye!==void 0){this.#Ye.repaint();return}let e=this.#Mn(),t=this.#Cn(e),n=this.#D===void 0?[]:this.#vn(),r=Math.max(1,this.#Nn()-n.length-t.length),i=[],a=this.#j,o=groupToolBlocksForDisplay(this.#m),s=0;for(;s<o.length&&o[s].display.live===!1;)s+=1;if(s>0){let e=new Set(o.slice(0,s).flatMap(e=>e.members));for(let t=this.#m.length-1;t>=0;--t)e.has(this.#m[t])&&this.#m.splice(t,1)}for(let t of o.slice(0,s)){for(let e of t.members)this.#_.push(e),e.id&&(this.#g.add(e.id),this.#h.delete(e.id));if(this.#qn(t.display))continue;let n=this.#yn(t.display,e,a);a=previousBlockOf(t.display),this.#j=a,i.push(...n),this.#A.push(...n)}let c=[];for(let{display:t}of o.slice(s)){if(this.#qn(t))continue;let n=this.#yn(t,e,a);a=previousBlockOf(t);for(let e=0;e<n.length;e+=1)c.push({block:t,row:n[e]})}let l=[...n,...clipLiveRows(c.map(e=>e.row),r,e,this.#i),...t];i.length>0?this.#n.flush(i,l):this.#n.update(l)}#hn(){if(!this.#Z)return;let e=this.#Mn(),t=this.#Cn(e),n=Math.max(1,this.#Nn()-t.length),r=this.#j,i=[];for(let{display:t}of groupToolBlocksForDisplay(this.#m)){if(this.#qn(t))continue;let n=this.#yn(t,e,r);r=previousBlockOf(t),i.push(...n)}let a=[...clipLiveRows(i,n,e,this.#i),...t];this.#n.clearAll(),this.#n.flush([...this.#vn(),...this.#A],a)}logDisplayMode(){return this.#p}setLogDisplayMode(e){e!==this.#p&&(this.#p=e,e===`all`&&this.flushDelayedDevBuildErrors(),this.#_n(),this.#Z&&this.#hn())}flushDelayedDevBuildErrors(){let e=this.#Oe;e!==void 0&&(this.#Oe=void 0,this.#Gt({kind:`log`,title:`stderr`,body:e,live:!0}),this.#pn())}#gn(){this.#ue=!0,this.#le!==void 0&&clearTimeout(this.#le),this.#le=setTimeout(()=>{this.#ue=!1,this.#le=void 0,this.#pn()},5e3),this.setLogDisplayMode(nextLogDisplayMode(this.#p)),this.#pn()}#_n(){let e=this.#Mn();this.#A.length=0;let t;for(let{display:n}of groupToolBlocksForDisplay(this.#_,{logCoalescing:`runs`})){if(this.#qn(n))continue;let r=this.#yn(n,e,t);t=previousBlockOf(n),this.#A.push(...r)}this.#j=t}#vn(){let e=this.#E,t=this.#D;if(e===void 0&&t===void 0)return[];let n={name:e?.name??t?.name,theme:this.#i,width:this.#Mn()};e?.info!==void 0&&(n.info=e.info);let i=e?.tip??t?.tip;return i!==void 0&&(n.tip=i),buildAgentHeader(n)}#yn(e,t,n){let r={activityPulse:this.#xn(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#i,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#bn(){return this.#i.spinner[this.#ae%this.#i.spinner.length]??``}#xn(e,t){return isProgressPulseVisible(Date.now()-e)?t:` `}#Sn(e,t){return e.indicator.kind===`spinner`?{glyph:this.#bn(),color:`yellow`}:{glyph:this.#xn(e.indicator.startedAtMs,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),color:t?.kind===`external-action`?`yellow`:`green`}}#Cn(e){let n=this.#i.colors,r=[``];if(this.#Fe!==void 0)return r.push(...this.#Fe(e),``),this.#kn(r,e),r;let a=this.#Ie;if(a!==void 0){let t=this.#Sn(a,a.status),n;if(a.status!==void 0){let{startedAtMs:e,...r}=a.status,i=Date.now()-e,o=i>=5e3?` ${formatTurnDuration(i)}`:``;n={...r,text:`${r.text}${o}`,indicator:t}}let i;if(a.question!==void 0){let t=a.question(e);i={kind:`question`,rows:t},n!==void 0&&(i={kind:`question`,rows:t,status:n})}else n===void 0?i=a.preview===void 0?{kind:`idle`,indicator:t}:{kind:`preview`,text:a.preview,indicator:t}:(i={kind:`status`,status:n},a.preview!==void 0&&(i={kind:`status`,status:n,preview:a.preview}));let o={title:a.title,navigation:a.navigation,lines:a.summary===void 0?a.hideLinesWhileQuestion===!0?[]:a.lines:[{text:a.summary.headline,tone:`success`},...a.summary.facts.map(e=>({text:`${e.label}: ${e.value}`,tone:`info`}))],content:i};return r.push(...renderFlowPanel(o,this.#i,e)),this.#An(r,e),r}this.#Le!==void 0&&r.push(...renderAttentionRows(this.#Le,e,this.#i),``),this.#Re!==void 0&&r.push(...renderTodoPanelRows({items:this.#Re,width:e,theme:this.#i,working:this.#G||this.#K.kind===`waiting`,pulse:this.#xn(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH)}),``);let o=renderMessageQueueRows({view:this.#Be.view(),width:e,theme:this.#i,working:this.#G});if(o.length>0&&r.push(...o,``),this.#R){let i=this.#z===void 0?void 0:inlineCommandHint(this.#z);i===void 0&&this.#z!==void 0&&isTypeaheadOpen(this.#z)&&r.push(...renderCommandSuggestions(this.#z,this.#i,e)),this.#ne&&r.push(clip(n.dim(`Press Ctrl+C again to exit`),e),``);let a=isPromptControlCommand(this.#F),o=i?n.dim(` ${i}`):``,s=[];this.#D!==void 0&&s.push(clip(n.dim(`${this.#i.glyph.dot} Building your agent…`),e)),this.#kn(s,e);let u=Math.max(1,this.#Nn()-1-r.length-1-s.length),f={text:this.#F,cursor:this.#I,width:e,theme:this.#i,caretVisible:this.#ie,isCommand:a,ghost:o,maxRows:u};return this.#B&&this.#F.length===0&&(f.placeholder=this.#H?``:promptPlaceholder(Date.now()-this.#V)),r.push(...promptInputRows(f)),r.push(...s),r}let s=this.#K.kind===`waiting`&&this.#Y===void 0;if(this.#G||s){r.push(this.#wn(e)),this.#Dn(r,e);let t=[];return this.#kn(t,e),!this.#G&&t.length>0&&r.push(``),r.push(...t),r}if(this.#W.text.length>0)return this.#On(r,e,{inert:!1}),this.#kn(r,e),r;let u=this.#Y??(this.#J.length>0?this.#J:`Ready`),f=this.#jn(),p=n.dim(this.#i.glyph.dot),m=f?`${p} ${u} ${n.dim(this.#i.glyph.dot)} ${f}`:`${p} ${u}`;return r.push(clip(m,e)),this.#kn(r,e),r}#wn(e){let t=this.#i.colors,n=this.#xn(this.#oe,this.#i.unicode?PROGRESS_PULSE_GLYPH:PROGRESS_PULSE_ASCII_GLYPH),r=this.#K,i=this.#U.startedAtMs??this.#we??(r.kind===`waiting`?r.startedAtMs:Date.now()),a=Date.now()-i,o=`${typewriterText(`Working for`,a,80)} ${this.#Tn(a)}`;return clip(`${t.yellow(n)} ${t.dim(o)}`,e)}#Tn(e){return`${formatTurnDuration(e)}${this.#En()}`}#En(){let{inputTokens:e,outputTokens:t}=this.#U.usage;return e===0&&t===0?``:` ${this.#i.glyph.dash.repeat(2)} ${formatTokenFlow({inputTokens:e,outputTokens:t},this.#i.glyph)}`}#Dn(e,t){this.#G&&this.#On(e,t,{inert:!0})}#On(e,t,n){e.push(``);let r={text:this.#W.text,cursor:this.#W.cursor,width:t,theme:this.#i,caretVisible:!0,isCommand:!1,ghost:``,maxRows:4,inert:n.inert};n.inert&&this.#W.text.length===0&&(r.placeholder=``),e.push(...promptInputRows(r))}#kn(e,t){let n=this.#P===void 0?``:` `,r=Math.max(1,t-n.length),i={theme:this.#i,width:r};this.#je&&this.#Ae!==void 0&&(i.devBuild=this.#Ae),this.#ue&&(i.logLevel=this.#p);let a=this.#E?.serverUrl;if(a!==void 0&&this.#P===void 0){let e=new URL(a).port;e.length>0&&(i.serverPort=e)}let o=this.#E?.info?.agent.model;o?.id!==void 0&&(i.model=o.id),o?.reasoning!==void 0&&o.reasoning!==`provider-default`&&(i.reasoning=o.reasoning),readGatewayServiceTier(o?.providerOptions).kind===`priority`&&(i.fastMode=!0);let s=o?.endpoint;s!==void 0&&(i.endpoint=s),this.#N!==void 0&&(i.vercel=this.#N),this.#P!==void 0&&(i.remote=this.#P);let c=buildStatusLine(i);c!==void 0&&e.push(clip(`${n}${c}`,t))}#An(e,t){if(this.#P===void 0)return;let n=Math.max(1,t-2),r=buildStatusLine({remote:this.#P,theme:this.#i,width:n});r!==void 0&&e.push(``,clip(` ${r}`,t))}#jn(){let e=this.#i.colors,t=[],n=formatAssistantResponseStats({totalTokens:this.#ye,outputTokens:this.#Se,tokensPerSecond:this.#Ce},this.#l);return n&&t.push(n),t.length>0?e.dim(t.join(` ${this.#i.glyph.dot} `)):``}#Mn(){return Math.max(20,this.#t.columns||80)}#Nn(){return Math.max(8,this.#t.rows||24)}#Pn(){if(this.#Te!==void 0||!this.#u)return;this.#Ee=``,this.#De=``;let capture=(e,t)=>{let n=e.write.bind(e);return e.write=((e,n,r)=>{let i=typeof n==`string`?n:void 0,a=typeof n==`function`?n:r;return this.#Ln(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#d?.subscribeLogRecords(e=>this.#In(e)),this.#Te=()=>{this.#d?.unsubscribeLogRecords(),e(),t()}}#Fn(){let e=this.#Te;e!==void 0&&(this.#Te=void 0,e(),this.#Ee.length>0&&(this.#d?.append({source:`stdout`,detail:this.#Ee}),this.#Kn(`stdout`)&&process.stdout.write(`${this.#Ee}\n`),this.#Ee=``),this.#De.length>0&&(this.#d?.append({source:`stderr`,detail:this.#De}),this.#Kn(`stderr`)&&process.stderr.write(`${this.#De}\n`),this.#De=``))}#In(e){let t=e.fields===void 0?``:` ${JSON.stringify(e.fields)}`;this.#zn(`[eve:${e.namespace}] ${e.message}${t}`),this.#pn()}#Ln(e,t){let n=(e===`stdout`?this.#Ee:this.#De)+t;if(e===`stdout`&&parseDevRebuildLogLine(n.trimEnd())!==void 0){this.#Ee=``,this.#d?.append({source:e,detail:n.trimEnd()}),this.#Rn(n.trimEnd()),this.#pn();return}let r=n.lastIndexOf(`
8
8
  `),i=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#Ee=i:this.#De=i,r===-1)return;let a=stripAnsi(n.slice(0,r)).replace(/\s+$/u,``);a.trim().length!==0&&(this.#d?.append({source:e,detail:a}),e===`stdout`?this.#Rn(a):this.#zn(a),this.#pn())}#Rn(e){let t=[],flushPending=()=>{if(t.length===0)return;let e=t.join(`
9
9
  `);t=[],e.trim().length!==0&&this.#Gt({kind:`log`,title:`stdout`,body:e,live:!0})};for(let n of e.split(`
@@ -5,4 +5,3 @@ export declare function partKey(part: EveMessagePart): string;
5
5
  export declare function upsertMessage(data: EveMessageData, next: EveMessage): EveMessageData;
6
6
  export declare function removeStreamingToolPartsForTurn(data: EveMessageData, turnId: string): EveMessageData;
7
7
  export declare function optimisticUserMessageId(submissionId: string): string;
8
- export declare function appendToolInputDelta(inputText: string | undefined, offset: number, delta: string): string | undefined;
@@ -1 +1 @@
1
- function projectReceivedParts(e,t){return e?.map(e=>e.type===`text`?{state:`done`,text:e.text,type:`text`}:{filename:e.filename,mediaType:e.mediaType,size:e.size,type:`file`,url:e.url})??[{state:`done`,text:t,type:`text`}]}function partKey(e){switch(e.type){case`text`:return`text:${e.stepIndex??0}`;case`reasoning`:return`reasoning:${e.stepIndex??0}`;case`file`:return`file:${e.stepIndex??0}:${e.filename??e.url??e.mediaType}`;case`step-start`:return`step-start`;case`authorization`:return`authorization:${e.turnId}:${e.stepIndex}:${e.name}`;case`dynamic-tool`:return`dynamic-tool:${e.toolCallId}`}}function upsertMessage(e,t){let n=e.messages.findIndex(e=>e.id===t.id);return n===-1?{messages:[...e.messages,t]}:{messages:[...e.messages.slice(0,n),t,...e.messages.slice(n+1)]}}function removeStreamingToolPartsForTurn(e,t){let n=e.messages.findIndex(e=>e.role===`assistant`&&e.metadata?.turnId===t),r=e.messages[n];return r===void 0?e:upsertMessage(e,{...r,parts:r.parts.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)})}function optimisticUserMessageId(e){return`optimistic:${e}:user`}function appendToolInputDelta(e,t,n){if(t===0)return n;if(e?.length===t)return e+n}export{appendToolInputDelta,optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage};
1
+ function projectReceivedParts(e,t){return e?.map(e=>e.type===`text`?{state:`done`,text:e.text,type:`text`}:{filename:e.filename,mediaType:e.mediaType,size:e.size,type:`file`,url:e.url})??[{state:`done`,text:t,type:`text`}]}function partKey(e){switch(e.type){case`text`:return`text:${e.stepIndex??0}`;case`reasoning`:return`reasoning:${e.stepIndex??0}`;case`file`:return`file:${e.stepIndex??0}:${e.filename??e.url??e.mediaType}`;case`step-start`:return`step-start`;case`authorization`:return`authorization:${e.turnId}:${e.stepIndex}:${e.name}`;case`dynamic-tool`:return`dynamic-tool:${e.toolCallId}`}}function upsertMessage(e,t){let n=e.messages.findIndex(e=>e.id===t.id);return n===-1?{messages:[...e.messages,t]}:{messages:[...e.messages.slice(0,n),t,...e.messages.slice(n+1)]}}function removeStreamingToolPartsForTurn(e,t){let n=e.messages.findIndex(e=>e.role===`assistant`&&e.metadata?.turnId===t),r=e.messages[n];return r===void 0?e:upsertMessage(e,{...r,parts:r.parts.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)})}function optimisticUserMessageId(e){return`optimistic:${e}:user`}export{optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage};
@@ -1 +1 @@
1
- import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{appendToolInputDelta,optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage}from"#client/message-reducer-primitives.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,u){switch(u.type){case`client.message.submitted`:return upsertMessage(e,{id:optimisticUserMessageId(u.data.submissionId),metadata:{optimistic:!0,status:`submitted`},parts:[{type:`text`,text:u.data.message}],role:`user`});case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(u.data.submissionId),metadata:{optimistic:!0,status:`failed`},parts:[{type:`text`,text:u.data.message}],role:`user`});case`client.input.responded`:{let t=e;for(let e of u.data.responses)t=respondToInputRequest(t,e);return t}case`input.resolved`:{let t=e;for(let e of u.data.resolutions)t=resolveInputRequest(t,e);return t}case`message.received`:return upsertMessage(e,{id:`${u.data.turnId}:user`,metadata:{status:`complete`,turnId:u.data.turnId},parts:projectReceivedParts(u.data.parts,u.data.message),role:`user`});case`step.started`:return updateAssistantMessage(e,u.data.turnId,e=>ensureStepStartPart(e,u.data.stepIndex));case`reasoning.appended`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`streaming`,stepIndex:u.data.stepIndex,text:u.data.reasoningSoFar,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`done`,stepIndex:u.data.stepIndex,text:u.data.reasoning,type:`reasoning`}));case`action.input.appended`:{let t=findToolPart(e,u.data.callId);if(t!==void 0&&t.state!==`input-streaming`)return e;let n=appendToolInputDelta(t?.state===`input-streaming`?t.inputText:void 0,u.data.inputTextOffset,u.data.inputTextDelta);if(n===void 0)return e;let r={input:void 0,inputText:n,state:`input-streaming`,stepIndex:u.data.stepIndex,toolCallId:u.data.callId,toolMetadata:t?.toolMetadata??{eve:{kind:`unknown`,name:u.data.toolName}},toolName:u.data.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),r)):updateToolPart(e,u.data.callId,r)}case`actions.requested`:{let t=e;for(let e of u.data.actions){let n=normalizeActionRequest(e);t=updateAssistantMessage(t,u.data.turnId,t=>upsertPart(ensureStepStartPart(t,u.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:u.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(n),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`input.requested`:{let t=e;for(let e of u.data.requests){let n=normalizeActionRequest(e.action);t=updateAssistantMessage(t,u.data.turnId,t=>upsertPart(ensureStepStartPart(t,u.data.stepIndex),{approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:u.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(n,{inputRequest:toMessageInputRequest(e)}),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`approval.candidate`:return e;case`approval.settled`:{let t=findToolPartByApprovalId(e,u.data.requestId);return t===void 0?e:u.data.outcome===`approved`?updateToolPart(e,t.toolCallId,{approval:{approved:!0,id:u.data.requestId,reason:void 0},input:t.input,state:`approval-responded`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`}):updateToolPart(e,t.toolCallId,{approval:{approved:!1,id:u.data.requestId,reason:`Tool execution was cancelled.`},input:t.input,state:`output-denied`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`})}case`action.result`:{let t=normalizeActionResult(u.data.result),a=findToolPart(e,u.data.result.callId),s=u.data.error?.code===`TOOL_EXECUTION_DENIED`,c=u.data.status===`failed`&&!s,l=a?.approval?.id??u.data.result.callId,d=mergeToolMetadata(a?.toolMetadata,createToolMetadata(t)),f={input:a?.input,stepIndex:u.data.stepIndex,toolCallId:u.data.result.callId,toolMetadata:d,toolName:a?.toolName??t.toolName,type:`dynamic-tool`},p;return p=s?{...f,approval:{approved:!1,id:l,reason:u.data.error?.message},state:`output-denied`}:c?{...f,approval:approvedApproval(a),errorText:u.data.error?.message??stringifyUnknown(u.data.result.output),state:`output-error`}:{...f,approval:approvedApproval(a),output:u.data.result.output,state:`output-available`},a===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),p)):updateToolPart(e,u.data.result.callId,p)}case`action.partial`:{let t=findToolPart(e,u.data.result.callId);if(t!==void 0&&isSettledToolPart(t))return e;let a=normalizeActionResult(u.data.result),o={approval:approvedApproval(t),input:t?.input,output:u.data.result.output,partial:!0,state:`output-available`,stepIndex:u.data.stepIndex,toolCallId:u.data.result.callId,toolMetadata:mergeToolMetadata(t?.toolMetadata,createToolMetadata(a)),toolName:t?.toolName??a.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),o)):updateToolPart(e,u.data.result.callId,o)}case`authorization.required`:return updateAssistantMessage(e,u.data.turnId,e=>upsertPart(ensureStepStartPart(e,u.data.stepIndex),createAuthorizationRequiredPart(u)));case`authorization.completed`:return completeAuthorization(e,u);case`message.appended`:return updateAssistantMessage(e,u.data.turnId,e=>upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`streaming`,stepIndex:u.data.stepIndex,text:u.data.messageSoFar,type:`text`}));case`message.completed`:return updateAssistantMessage(e,u.data.turnId,e=>u.data.message===null?removeTextPart(e,u.data.stepIndex):upsertRun(ensureStepStartPart(e,u.data.stepIndex),{state:`done`,stepIndex:u.data.stepIndex,text:u.data.message,type:`text`}));case`result.completed`:return updateAssistantMetadata(e,u.data.turnId,{result:u.data.result});case`turn.completed`:return updateAssistantMessage(e,u.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts)}));case`turn.cancelled`:return updateAssistantMessage(e,u.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`?{...e,state:`done`}:e))}));case`turn.failed`:return removeStreamingToolPartsForTurn(e,u.data.turnId);case`session.failed`:return e;default:return e}}function removeStreamingToolParts(e){return e.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)}function respondToInputRequest(e,t){let n=findToolPartByApprovalId(e,t.requestId);if(!n)return e;let r={id:t.requestId};return t.text!==void 0&&(r.reason=t.text),updateToolPart(e,n.toolCallId,{approval:r,input:n.input,state:`approval-responded`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:mergeToolMetadata(n.toolMetadata,{eve:{inputResponse:t,kind:n.toolMetadata?.eve?.kind??`unknown`,name:n.toolMetadata?.eve?.name??n.toolName}}),toolName:n.toolName,type:`dynamic-tool`})}function resolveInputRequest(e,t){if(t.response!==void 0)return respondToInputRequest(e,t.response);let n=findToolPartByApprovalId(e,t.requestId);return n?updateToolPart(e,n.toolCallId,{input:n.input,output:{status:t.outcome},state:`output-available`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:n.toolMetadata,toolName:n.toolName,type:`dynamic-tool`}):e}function updateAssistantMessage(e,t,n){return upsertMessage(e,n(e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t)))}function updateAssistantMetadata(e,t,n){return updateAssistantMessage(e,t,e=>({...e,metadata:{...e.metadata,...n}}))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function upsertRun(e,t){let n=-1;for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t.type&&i.stepIndex===t.stepIndex){n=r;break}}let r=n!==-1&&e.parts[n].state===`streaming`?[...e.parts.slice(0,n),t,...e.parts.slice(n+1)]:[...e.parts,t];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function removeTextPart(e,t){let n=e.parts.filter(e=>e.type!==`text`||e.stepIndex!==t);return n.length===e.parts.length?e:{...e,metadata:{...e.metadata,status:`complete`},parts:n}}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function completeAuthorization(t,n){let r=findLatestPendingAuthorizationPart(t,n.data.name),i=createAuthorizationCompletedPart(n,r);return r===void 0?updateAssistantMessage(t,n.data.turnId,e=>upsertPart(ensureStepStartPart(e,n.data.stepIndex),i)):updateAuthorizationPart(t,r,i)}function updateAuthorizationPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e===t));return r?upsertMessage(e,upsertPart(r,n)):e}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findLatestPendingAuthorizationPart(e,t){for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n];if(r?.role===`assistant`)for(let e=r.parts.length-1;e>=0;--e){let n=r.parts[e];if(n?.type===`authorization`&&n.state===`required`&&n.name===t)return n}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
1
+ import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{optimisticUserMessageId,partKey,projectReceivedParts,removeStreamingToolPartsForTurn,upsertMessage}from"#client/message-reducer-primitives.js";import{messageRun}from"#client/message-run-parts.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,l){switch(l.type){case`client.message.submitted`:return upsertMessage(e,{id:optimisticUserMessageId(l.data.submissionId),metadata:{optimistic:!0,status:`submitted`},parts:[{type:`text`,text:l.data.message}],role:`user`});case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(l.data.submissionId),metadata:{optimistic:!0,status:`failed`},parts:[{type:`text`,text:l.data.message}],role:`user`});case`client.input.responded`:{let t=e;for(let e of l.data.responses)t=respondToInputRequest(t,e);return t}case`input.resolved`:{let t=e;for(let e of l.data.resolutions)t=resolveInputRequest(t,e);return t}case`message.received`:return upsertMessage(e,{id:`${l.data.turnId}:user`,metadata:{status:`complete`,turnId:l.data.turnId},parts:projectReceivedParts(l.data.parts,l.data.message),role:`user`});case`step.started`:return updateAssistantMessage(e,l.data.turnId,e=>ensureStepStartPart(e,l.data.stepIndex));case`reasoning.appended`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.append(ensureStepStartPart(e,l.data.stepIndex),{delta:l.data.reasoningDelta,stepIndex:l.data.stepIndex,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.upsert(ensureStepStartPart(e,l.data.stepIndex),{state:`done`,stepIndex:l.data.stepIndex,text:l.data.reasoning,type:`reasoning`}));case`action.input.appended`:{let t=findToolPart(e,l.data.callId);if(t!==void 0&&t.state!==`input-streaming`)return e;let n={input:void 0,inputText:(t?.state===`input-streaming`?t.inputText:``)+l.data.inputTextDelta,state:`input-streaming`,stepIndex:l.data.stepIndex,toolCallId:l.data.callId,toolMetadata:t?.toolMetadata??{eve:{kind:`unknown`,name:l.data.toolName}},toolName:l.data.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),n)):updateToolPart(e,l.data.callId,n)}case`actions.requested`:{let t=e;for(let e of l.data.actions){let n=normalizeActionRequest(e);t=updateAssistantMessage(t,l.data.turnId,t=>upsertPart(ensureStepStartPart(t,l.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:l.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(n),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`input.requested`:{let t=e;for(let e of l.data.requests){let n=normalizeActionRequest(e.action);t=updateAssistantMessage(t,l.data.turnId,t=>upsertPart(ensureStepStartPart(t,l.data.stepIndex),{approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:l.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(n,{inputRequest:toMessageInputRequest(e)}),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`approval.candidate`:return e;case`approval.settled`:{let t=findToolPartByApprovalId(e,l.data.requestId);return t===void 0?e:l.data.outcome===`approved`?updateToolPart(e,t.toolCallId,{approval:{approved:!0,id:l.data.requestId,reason:void 0},input:t.input,state:`approval-responded`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`}):updateToolPart(e,t.toolCallId,{approval:{approved:!1,id:l.data.requestId,reason:`Tool execution was cancelled.`},input:t.input,state:`output-denied`,stepIndex:t.stepIndex,toolCallId:t.toolCallId,toolMetadata:t.toolMetadata,toolName:t.toolName,type:`dynamic-tool`})}case`action.result`:{let t=normalizeActionResult(l.data.result),a=findToolPart(e,l.data.result.callId),s=l.data.error?.code===`TOOL_EXECUTION_DENIED`,c=l.data.status===`failed`&&!s,u=a?.approval?.id??l.data.result.callId,d=mergeToolMetadata(a?.toolMetadata,createToolMetadata(t)),f={input:a?.input,stepIndex:l.data.stepIndex,toolCallId:l.data.result.callId,toolMetadata:d,toolName:a?.toolName??t.toolName,type:`dynamic-tool`},p;return p=s?{...f,approval:{approved:!1,id:u,reason:l.data.error?.message},state:`output-denied`}:c?{...f,approval:approvedApproval(a),errorText:l.data.error?.message??stringifyUnknown(l.data.result.output),state:`output-error`}:{...f,approval:approvedApproval(a),output:l.data.result.output,state:`output-available`},a===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),p)):updateToolPart(e,l.data.result.callId,p)}case`action.partial`:{let t=findToolPart(e,l.data.result.callId);if(t!==void 0&&isSettledToolPart(t))return e;let a=normalizeActionResult(l.data.result),o={approval:approvedApproval(t),input:t?.input,output:l.data.result.output,partial:!0,state:`output-available`,stepIndex:l.data.stepIndex,toolCallId:l.data.result.callId,toolMetadata:mergeToolMetadata(t?.toolMetadata,createToolMetadata(a)),toolName:t?.toolName??a.toolName,type:`dynamic-tool`};return t===void 0?updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),o)):updateToolPart(e,l.data.result.callId,o)}case`authorization.required`:return updateAssistantMessage(e,l.data.turnId,e=>upsertPart(ensureStepStartPart(e,l.data.stepIndex),createAuthorizationRequiredPart(l)));case`authorization.completed`:return completeAuthorization(e,l);case`message.appended`:return updateAssistantMessage(e,l.data.turnId,e=>messageRun.append(ensureStepStartPart(e,l.data.stepIndex),{delta:l.data.messageDelta,stepIndex:l.data.stepIndex,type:`text`}));case`message.completed`:return updateAssistantMessage(e,l.data.turnId,e=>l.data.message===null?removeTextPart(e,l.data.stepIndex):messageRun.upsert(ensureStepStartPart(e,l.data.stepIndex),{state:`done`,stepIndex:l.data.stepIndex,text:l.data.message,type:`text`}));case`result.completed`:return updateAssistantMetadata(e,l.data.turnId,{result:l.data.result});case`turn.completed`:return updateAssistantMessage(e,l.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts)}));case`turn.cancelled`:return updateAssistantMessage(e,l.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(e.parts.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`?{...e,state:`done`}:e))}));case`turn.failed`:return removeStreamingToolPartsForTurn(e,l.data.turnId);case`session.failed`:return e;default:return e}}function removeStreamingToolParts(e){return e.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)}function respondToInputRequest(e,t){let n=findToolPartByApprovalId(e,t.requestId);if(!n)return e;let r={id:t.requestId};return t.text!==void 0&&(r.reason=t.text),updateToolPart(e,n.toolCallId,{approval:r,input:n.input,state:`approval-responded`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:mergeToolMetadata(n.toolMetadata,{eve:{inputResponse:t,kind:n.toolMetadata?.eve?.kind??`unknown`,name:n.toolMetadata?.eve?.name??n.toolName}}),toolName:n.toolName,type:`dynamic-tool`})}function resolveInputRequest(e,t){if(t.response!==void 0)return respondToInputRequest(e,t.response);let n=findToolPartByApprovalId(e,t.requestId);return n?updateToolPart(e,n.toolCallId,{input:n.input,output:{status:t.outcome},state:`output-available`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:n.toolMetadata,toolName:n.toolName,type:`dynamic-tool`}):e}function updateAssistantMessage(e,t,n){return upsertMessage(e,n(e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t)))}function updateAssistantMetadata(e,t,n){return updateAssistantMessage(e,t,e=>({...e,metadata:{...e.metadata,...n}}))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function removeTextPart(e,t){let n=e.parts.filter(e=>e.type!==`text`||e.stepIndex!==t);return n.length===e.parts.length?e:{...e,metadata:{...e.metadata,status:`complete`},parts:n}}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function completeAuthorization(t,n){let r=findLatestPendingAuthorizationPart(t,n.data.name),i=createAuthorizationCompletedPart(n,r);return r===void 0?updateAssistantMessage(t,n.data.turnId,e=>upsertPart(ensureStepStartPart(e,n.data.stepIndex),i)):updateAuthorizationPart(t,r,i)}function updateAuthorizationPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e===t));return r?upsertMessage(e,upsertPart(r,n)):e}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findLatestPendingAuthorizationPart(e,t){for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n];if(r?.role===`assistant`)for(let e=r.parts.length-1;e>=0;--e){let n=r.parts[e];if(n?.type===`authorization`&&n.state===`required`&&n.name===t)return n}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
@@ -0,0 +1,18 @@
1
+ import type { EveMessage, EveMessagePart } from "#client/message-reducer-types.js";
2
+ type EveAssistantMessage = EveMessage & {
3
+ readonly role: "assistant";
4
+ };
5
+ type EveRunPart = Extract<EveMessagePart, {
6
+ readonly type: "text" | "reasoning";
7
+ }>;
8
+ declare function append(message: EveAssistantMessage, append: {
9
+ readonly delta: string;
10
+ readonly stepIndex: number;
11
+ readonly type: EveRunPart["type"];
12
+ }): EveAssistantMessage;
13
+ declare function upsert(message: EveAssistantMessage, next: EveRunPart): EveAssistantMessage;
14
+ export declare const messageRun: {
15
+ readonly append: typeof append;
16
+ readonly upsert: typeof upsert;
17
+ };
18
+ export {};
@@ -0,0 +1 @@
1
+ function append(e,t){let n=latestStreamingRun(e,t.type,t.stepIndex);return upsert(e,{state:`streaming`,stepIndex:t.stepIndex,text:(n?.text??``)+t.delta,type:t.type})}function latestStreamingRun(e,t,n){for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t&&i.stepIndex===n)return i.state===`streaming`?i:void 0}}function upsert(e,t){let n=-1;for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t.type&&i.stepIndex===t.stepIndex){n=r;break}}let r=n!==-1&&e.parts[n].state===`streaming`?[...e.parts.slice(0,n),t,...e.parts.slice(n+1)]:[...e.parts,t];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}const messageRun={append,upsert};export{messageRun};
@@ -1,4 +1,5 @@
1
- import type { MessageStreamEvent } from "#protocol/message.js";
1
+ import { type MessageStreamEvent } from "#protocol/message.js";
2
+ import { type MessageStreamVersion } from "#protocol/message-version.js";
2
3
  /**
3
4
  * Returns true when an error looks like a stream socket disconnection that
4
5
  * can be recovered via reconnection.
@@ -13,6 +14,7 @@ export declare function isStreamDisconnectError(error: unknown): boolean;
13
14
  * All read errors — including socket disconnections — propagate to the caller.
14
15
  * Use {@link isStreamDisconnectError} to classify them.
15
16
  */
16
- export declare function readNdjsonStream(body: ReadableStream<Uint8Array>, options?: {
17
+ export declare function readNdjsonStream(body: ReadableStream<Uint8Array>, options: {
17
18
  readonly idleTimeoutMs?: number;
19
+ readonly streamVersion: MessageStreamVersion;
18
20
  }): AsyncGenerator<MessageStreamEvent>;
@@ -1,3 +1,3 @@
1
- function isStreamDisconnectError(e){if(e instanceof DOMException)return e.name===`AbortError`;if(!(e instanceof Error))return!1;let t=`code`in e&&typeof e.code==`string`?e.code:void 0;return e.name===`AbortError`||e.message===`terminated`||t===`UND_ERR_SOCKET`||e instanceof TypeError&&/^(?:failed to fetch|fetch failed)$/i.test(e.message)||/abort|cancel|disconnect|premature close|socket|terminated/i.test(e.message)}async function*readNdjsonStream(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=!1;try{for(;;){let e=await readWithIdleTimeout(n,t?.idleTimeoutMs);if(e.done){a=!0,i+=r.decode();break}e.value&&(i+=r.decode(e.value,{stream:!0}));let o=i.indexOf(`
2
- `);for(;o!==-1;){let e=i.slice(0,o).trim();i=i.slice(o+1),e.length>0&&(yield JSON.parse(e)),o=i.indexOf(`
3
- `)}}let e=i.trim();e.length>0&&(yield JSON.parse(e))}finally{a||await n.cancel().catch(()=>{}),n.releaseLock()}}async function readWithIdleTimeout(e,t){if(t===void 0)return await e.read();let n;try{return await Promise.race([e.read(),new Promise((e,r)=>{n=setTimeout(()=>r(new DOMException(`Session stream was idle.`,`AbortError`)),t)})])}finally{n!==void 0&&clearTimeout(n)}}export{isStreamDisconnectError,readNdjsonStream};
1
+ import"#protocol/message.js";import{normalizeMessageStreamEvent}from"#protocol/message-version.js";function isStreamDisconnectError(e){if(e instanceof DOMException)return e.name===`AbortError`;if(!(e instanceof Error))return!1;let t=`code`in e&&typeof e.code==`string`?e.code:void 0;return e.name===`AbortError`||e.message===`terminated`||t===`UND_ERR_SOCKET`||e instanceof TypeError&&/^(?:failed to fetch|fetch failed)$/i.test(e.message)||/abort|cancel|disconnect|premature close|socket|terminated/i.test(e.message)}async function*readNdjsonStream(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=!1;try{for(;;){let e=await readWithIdleTimeout(n,t?.idleTimeoutMs);if(e.done){a=!0,i+=r.decode();break}e.value&&(i+=r.decode(e.value,{stream:!0}));let o=i.indexOf(`
2
+ `);for(;o!==-1;){let e=i.slice(0,o).trim();i=i.slice(o+1),e.length>0&&(yield parseMessageStreamEvent(e,t.streamVersion)),o=i.indexOf(`
3
+ `)}}let e=i.trim();e.length>0&&(yield parseMessageStreamEvent(e,t.streamVersion))}finally{a||await n.cancel().catch(()=>{}),n.releaseLock()}}function parseMessageStreamEvent(t,n){return normalizeMessageStreamEvent(n,JSON.parse(t))}async function readWithIdleTimeout(e,t){if(t===void 0)return await e.read();let n;try{return await Promise.race([e.read(),new Promise((e,r)=>{n=setTimeout(()=>r(new DOMException(`Session stream was idle.`,`AbortError`)),t)})])}finally{n!==void 0&&clearTimeout(n)}}export{isStreamDisconnectError,readNdjsonStream};
@@ -1,4 +1,5 @@
1
1
  import type { MessageStreamEvent } from "#protocol/message.js";
2
+ import type { MessageStreamVersion } from "#protocol/message-version.js";
2
3
  import type { ClientRedirectPolicy, StreamReconnectPolicy } from "#client/types.js";
3
4
  interface RetryPolicy {
4
5
  readonly baseDelayMs: number;
@@ -50,6 +51,7 @@ export declare function followStreamIterable(input: FollowStreamInput): AsyncGen
50
51
  interface OpenedStream {
51
52
  readonly body: ReadableStream<Uint8Array>;
52
53
  close(): void;
54
+ readonly streamVersion: MessageStreamVersion;
53
55
  readonly tailIndex: number | undefined;
54
56
  }
55
57
  /**