eve 0.6.0-beta.11 → 0.6.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/docs/evals-v2-plan.md +45 -8
- package/dist/docs/public/advanced/default-harness.md +2 -2
- package/dist/docs/public/advanced/evals.md +43 -4
- package/dist/docs/public/frontend/nextjs.mdx +9 -0
- package/dist/docs/public/getting-started.mdx +2 -2
- package/dist/docs/public/tools.mdx +0 -4
- package/dist/src/chunks/{use-eve-agent-DT2A6VJb.js → use-eve-agent-q1isCIFv.js} +42 -8
- package/dist/src/chunks/{use-eve-agent-BD79SFqg.js → use-eve-agent-tFYnZx_b.js} +42 -8
- package/dist/src/cli/commands/setup.d.ts +6 -3
- package/dist/src/cli/commands/setup.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +2 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +2 -2
- package/dist/src/cli/run.d.ts +4 -0
- package/dist/src/cli/run.js +1 -1
- package/dist/src/client/client.d.ts +8 -0
- package/dist/src/client/client.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/client/types.d.ts +4 -1
- package/dist/src/compiled/.vendor-stamp.json +7 -7
- package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +56 -31
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -2
- package/dist/src/compiled/@ai-sdk/google/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.d.ts +16 -9
- package/dist/src/compiled/@ai-sdk/openai/index.js +2 -2
- package/dist/src/compiled/@ai-sdk/otel/index.js +2 -2
- package/dist/src/compiled/@vercel/sandbox/index.js +1 -1
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +4 -2
- package/dist/src/compiled/@workflow/core/runtime/wait-until.d.ts +18 -0
- package/dist/src/compiled/@workflow/core/runtime.d.ts +3 -1
- package/dist/src/compiled/@workflow/core/runtime.js +28 -28
- package/dist/src/compiled/@workflow/core/serialization.d.ts +41 -0
- package/dist/src/compiled/@workflow/core/util.d.ts +0 -5
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
- package/dist/src/compiled/@workflow/world/queue.d.ts +28 -2
- package/dist/src/compiled/_chunks/workflow/{dist-gEXVSMPU.js → dist-CkMRLaRV.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/functions-DuPjIvMH.js +1 -0
- package/dist/src/compiled/_chunks/workflow/resume-hook-CEAS3opc.js +12 -0
- package/dist/src/compiled/_chunks/workflow/sleep-Cup6vPoA.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{symbols-BWCAoPHE.js → symbols-BUTtwS7j.js} +1 -1
- package/dist/src/evals/cli/eval.d.ts +4 -0
- package/dist/src/evals/cli/eval.js +1 -1
- package/dist/src/evals/define-eval.js +1 -1
- package/dist/src/evals/index.d.ts +2 -1
- package/dist/src/evals/index.js +1 -1
- package/dist/src/evals/reporters/index.d.ts +1 -0
- package/dist/src/evals/reporters/index.js +1 -1
- package/dist/src/evals/requirements.d.ts +4 -0
- package/dist/src/evals/requirements.js +1 -0
- package/dist/src/evals/runner/artifacts.js +1 -1
- package/dist/src/evals/runner/execute-case.d.ts +5 -2
- package/dist/src/evals/runner/execute-case.js +1 -1
- package/dist/src/evals/runner/execute-eval.d.ts +5 -2
- package/dist/src/evals/runner/execute-eval.js +1 -1
- package/dist/src/evals/runner/reporters/junit.d.ts +9 -0
- package/dist/src/evals/runner/reporters/junit.js +8 -0
- package/dist/src/evals/session.d.ts +6 -0
- package/dist/src/evals/session.js +1 -1
- package/dist/src/evals/target.d.ts +23 -0
- package/dist/src/evals/target.js +1 -0
- package/dist/src/evals/types.d.ts +39 -2
- package/dist/src/execution/compaction.d.ts +14 -0
- package/dist/src/execution/compaction.js +1 -0
- package/dist/src/execution/delegated-parent-notification.js +1 -1
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/sandbox/glob-tool.js +3 -3
- package/dist/src/execution/sandbox/grep-tool.js +3 -3
- package/dist/src/execution/sandbox/read-file-tool.js +1 -1
- package/dist/src/execution/subagent-adapter.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/model-call-error.d.ts +23 -6
- package/dist/src/harness/model-call-error.js +1 -1
- package/dist/src/harness/step-hooks.d.ts +6 -0
- package/dist/src/harness/tool-loop.js +1 -1
- package/dist/src/harness/types.d.ts +4 -15
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +2 -2
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
- package/dist/src/internal/nitro/host/start-production-server.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.d.ts +5 -0
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -0
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +31 -2
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.d.ts +13 -0
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
- package/dist/src/internal/nitro/routes/info.d.ts +2 -2
- package/dist/src/internal/nitro/routes/info.js +1 -1
- package/dist/src/internal/workflow/queue-namespace.d.ts +5 -0
- package/dist/src/internal/workflow/queue-namespace.js +1 -0
- package/dist/src/internal/workflow-bundle/builder-support.js +2 -2
- package/dist/src/internal/workflow-bundle/builder.js +3 -5
- package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
- package/dist/src/public/definitions/tool.d.ts +0 -33
- package/dist/src/public/next/index.d.ts +6 -0
- package/dist/src/public/next/index.js +1 -1
- package/dist/src/public/next/server.d.ts +1 -0
- package/dist/src/public/next/server.js +1 -1
- package/dist/src/public/tools/defaults.d.ts +2 -4
- package/dist/src/public/tools/defaults.js +1 -1
- package/dist/src/public/tools/define-read-file-tool.d.ts +0 -6
- package/dist/src/public/tools/define-read-file-tool.js +1 -1
- package/dist/src/public/tools/index.d.ts +1 -1
- package/dist/src/public/tools/internal.js +1 -1
- package/dist/src/runtime/connections/callback-route.js +1 -1
- package/dist/src/runtime/framework-tools/connection-search-dynamic.d.ts +1 -1
- package/dist/src/runtime/framework-tools/file-state.d.ts +3 -3
- package/dist/src/runtime/framework-tools/index.js +1 -1
- package/dist/src/runtime/framework-tools/read-file.js +2 -2
- package/dist/src/runtime/framework-tools/todo.d.ts +7 -0
- package/dist/src/runtime/framework-tools/todo.js +2 -2
- package/dist/src/runtime/resolve-tool.d.ts +2 -2
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/session-callback-route.js +1 -1
- package/dist/src/runtime/types.d.ts +1 -7
- package/dist/src/services/dev-client.d.ts +13 -0
- package/dist/src/services/dev-client.js +1 -1
- package/dist/src/setup/ask.d.ts +7 -0
- package/dist/src/setup/ask.js +1 -1
- package/dist/src/setup/boxes/add-channels.d.ts +11 -2
- package/dist/src/setup/boxes/add-channels.js +1 -1
- package/dist/src/setup/boxes/add-connections.d.ts +8 -58
- package/dist/src/setup/boxes/add-connections.js +1 -1
- package/dist/src/setup/boxes/deploy-project.js +1 -1
- package/dist/src/setup/boxes/one-shot-next-steps.d.ts +15 -0
- package/dist/src/setup/boxes/one-shot-next-steps.js +2 -0
- package/dist/src/setup/boxes/preflight.d.ts +6 -5
- package/dist/src/setup/boxes/preflight.js +1 -1
- package/dist/src/setup/boxes/resolve-provisioning.d.ts +20 -7
- package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
- package/dist/src/setup/boxes/select-channels.d.ts +16 -9
- package/dist/src/setup/boxes/select-channels.js +1 -1
- package/dist/src/setup/boxes/select-chat.d.ts +1 -1
- package/dist/src/setup/boxes/select-connections.d.ts +30 -0
- package/dist/src/setup/boxes/select-connections.js +1 -0
- package/dist/src/setup/boxes/select-model.d.ts +7 -7
- package/dist/src/setup/boxes/select-model.js +1 -1
- package/dist/src/setup/boxes/select-setup-mode.d.ts +32 -0
- package/dist/src/setup/boxes/select-setup-mode.js +1 -0
- package/dist/src/setup/cli/index.d.ts +1 -0
- package/dist/src/setup/cli/index.js +1 -1
- package/dist/src/setup/cli/prompt-ui.d.ts +39 -15
- package/dist/src/setup/cli/prompt-ui.js +1 -1
- package/dist/src/setup/cli/select-component.d.ts +16 -1
- package/dist/src/setup/cli/select-component.js +1 -1
- package/dist/src/setup/cli/select-state.d.ts +13 -1
- package/dist/src/setup/cli/select-state.js +1 -1
- package/dist/src/setup/cli/whimsy.d.ts +16 -0
- package/dist/src/setup/cli/whimsy.js +1 -0
- package/dist/src/setup/connection-connector.js +1 -1
- package/dist/src/setup/index.d.ts +2 -2
- package/dist/src/setup/onboarding.d.ts +6 -3
- package/dist/src/setup/onboarding.js +1 -1
- package/dist/src/setup/primitives/run-vercel.d.ts +7 -0
- package/dist/src/setup/primitives/run-vercel.js +1 -1
- package/dist/src/setup/prompter.d.ts +20 -3
- package/dist/src/setup/prompter.js +1 -1
- package/dist/src/setup/scaffold/channels-catalog.d.ts +1 -1
- package/dist/src/setup/scaffold/create/project.d.ts +16 -0
- package/dist/src/setup/scaffold/create/project.js +3 -3
- package/dist/src/setup/scaffold/index.d.ts +1 -1
- package/dist/src/setup/scaffold/index.js +1 -1
- package/dist/src/setup/scaffold/update/channels.js +1 -1
- package/dist/src/setup/slackbot.js +1 -1
- package/dist/src/setup/state.d.ts +44 -9
- package/dist/src/setup/state.js +1 -1
- package/dist/src/setup/vercel-project.d.ts +12 -0
- package/dist/src/setup/vercel-project.js +1 -1
- package/dist/src/source-change/apply-model-name.d.ts +25 -0
- package/dist/src/source-change/apply-model-name.js +2 -0
- package/dist/src/source-change/static-source-change.d.ts +36 -0
- package/dist/src/source-change/static-source-change.js +1 -0
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/package.json +13 -12
- package/dist/src/compiled/_chunks/workflow/resume-hook-0Zk0zSvq.js +0 -12
- package/dist/src/compiled/_chunks/workflow/sleep-DXZr2BgM.js +0 -1
- package/dist/src/execution/tool-compaction.d.ts +0 -9
- package/dist/src/execution/tool-compaction.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{summarizeToolArgs,summarizeToolResult}from"./tool-format.js";import{buildAgentHeader}from"./agent-header.js";import{sliceVisible,stripAnsi,visibleLength}from"./terminal-text.js";import{renderBlockLines}from"./blocks.js";import{interruptedError}from"./errors.js";import{EMPTY_LINE,PromptHistory,backspace,deleteForward,deleteWord,insert,killToEnd,killToStart,lineOf,moveEnd,moveHome,moveLeft,moveRight,visibleLine}from"./line-editor.js";import{LiveRegion}from"./live-region.js";import{createTheme,detectUnicode}from"./theme.js";import{formatAssistantResponseStats,formatTokenCount,nextKey,takeUntil}from"./stream-format.js";import{toErrorMessage}from"#shared/errors.js";const STATUS={processing:`Working…`,toolResults:`Reading results…`,streaming:`Responding…`,executingTools:`Running tools…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f=[];#p=new Map;#m=new Set;#h=new Set;#g=new Map;#_=new Set;#v;#y=0;#b=``;#x=0;#S=new PromptHistory;#C=!1;#w=!1;#T=STATUS.processing;#E=`Eve`;#D=!1;#O=!1;#k=!0;#A=0;#j;#M;#N;#P=``;#F;#I;#L;#R=!1;#z=!1;#B;#V;#H;#U;#W;#G;#K=``;#q=``;#J;constructor(e){this.#e=e?.input??process.stdin,this.#t=e?.output??process.stdout,this.#n=new LiveRegion(this.#t),this.#r=createTheme({color:e?.color??!0,unicode:e?.unicode??detectUnicode()}),this.#i=e?.tools??`auto-collapsed`,this.#a=e?.reasoning??`full`,this.#o=e?.subagents??`auto-collapsed`,this.#s=e?.connectionAuth??`full`,this.#c=e?.assistantResponseStats??`tokensPerSecond`,this.#l=e?.contextSize,this.#V=e?.contextSize,this.#u=e?.captureForeignOutput??this.#t===process.stdout,this.#d=e?.logs??`all`}renderAgentHeader(e){this.#E=e.name,this.#Z(),this.#n.clearAll();let t=buildAgentHeader({name:e.name,serverUrl:e.serverUrl,info:e.info,theme:this.#r,width:this.#Ae()});this.#n.flush(t,[])}async readPrompt(e){this.#Z(e),this.#C=!0,this.#w=!1,this.#T=``;let t=lineOf(``);return this.#S.begin(t.text),this.#Y(t),this.#ae(),this.#we(),await new Promise((e,n)=>{let apply=e=>{t=e,this.#se(),this.#Y(t),this.#we()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#oe(),this.#Q(),n(interruptedError())};this.#N=n=>{switch(n.type){case`character`:apply(insert(t,n.value));break;case`backspace`:apply(backspace(t));break;case`delete`:apply(deleteForward(t));break;case`left`:apply(moveLeft(t));break;case`right`:apply(moveRight(t));break;case`home`:case`ctrl-a`:apply(moveHome(t));break;case`end`:case`ctrl-e`:apply(moveEnd(t));break;case`ctrl-k`:apply(killToEnd(t));break;case`ctrl-u`:apply(killToStart(t));break;case`ctrl-w`:apply(deleteWord(t));break;case`up`:recall(this.#S.previous(t.text));break;case`down`:recall(this.#S.next());break;case`enter`:{let n=t.text;this.#S.add(n),this.#C=!1,this.#oe(),this.#T=STATUS.processing,isPromptControlCommand(n)||(this.#de(n),this.#J=n),this.#Y(EMPTY_LINE),this.#we(),this.#ee(),e(n);break}case`ctrl-d`:t.text.length===0?interrupt():apply(deleteForward(t));break;case`ctrl-l`:case`ctrl-r`:this.#we();break;case`ctrl-c`:interrupt();break;default:break}},this.#$()})}#Y(e){this.#b=e.text,this.#x=e.cursor}async renderStream(e,t){this.#Z(t),this.#m.clear(),this.#C=!1,this.#w=!0,this.#T=STATUS.processing,this.#fe(t?.submittedPrompt),this.#O=!1,this.#B=void 0,this.#H=void 0,this.#U=void 0,this.#W=Date.now();let n={tools:t?.tools??this.#i,reasoning:t?.reasoning??this.#a,assistantResponseStats:t?.assistantResponseStats??this.#c};this.#ce(),this.#we();let r=new Promise(e=>{this.#L=e});this.#N=e=>this.#ie(e),this.#$();let i={text:new Map,reasoning:new Map,tools:new Map,hasPendingToolResults:!1};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#O)break;this.#ve(t,n,i)}}catch(e){this.#pe(`Error`,toErrorMessage(e))}finally{this.#L=void 0,this.#O&&e.abort?.(),this.#ee(),this.#le(),this.#w=!1,this.#T=this.#O?`Interrupted`:t?.continueSession?`Ready`:`Done`,this.#_e(),this.#we(),(this.#O||!t?.continueSession)&&this.#Q()}if(this.#O)throw interruptedError()}async readToolApproval(e,t){return this.#Z(t),this.#C=!1,this.#w=!1,this.#T=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#O=!1,this.#we(),await new Promise((t,n)=>{this.#N=r=>{switch(r.type){case`character`:{let n=r.value.toLowerCase();n===`y`?(this.#T=STATUS.processing,this.#ee(),this.#we(),t({approved:!0})):n===`n`&&(this.#T=STATUS.processing,this.#X(e.toolCallId),this.#ee(),this.#we(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#we();break;case`ctrl-c`:this.#O=!0,this.#Q(),n(interruptedError());break;default:break}},this.#$()})}async readInputQuestion(e,t){this.#Z(t),this.#C=!1,this.#w=!1,this.#O=!1;let n=e.options??[],r=n.length>0,i=(e.allowFreeform===!0||!r)&&r,a=n.length+ +!!i,o=questionSectionId(e.requestId),c=r?`select`:`text`,l=0,u=``,isOnFreeformRow=()=>i&&l===n.length,renderSection=()=>{this.#he({id:o,kind:`question`,title:e.prompt,body:formatQuestionContent(e,l,this.#r),preformatted:!0,live:!0})},repaintStatus=()=>{if(c===`select`){let e=isOnFreeformRow()?`type`:`select`;this.#T=`↑/↓ move · enter ${e} · Ctrl+C quit`,this.#C=!1}else this.#C=!0,this.#Y(lineOf(u)),this.#T=``;this.#we()};renderSection(),c===`text`&&this.#ae(),repaintStatus();let finalize=t=>{this.#he({id:o,kind:`question`,title:e.prompt,body:` ${this.#r.colors.green(this.#r.glyph.success)} ${t.label}`,preformatted:!0,live:!1}),this.#C=!1,this.#T=STATUS.processing,this.#oe(),this.#ee(),this.#we();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n};return await new Promise((t,i)=>{this.#N=o=>{if(o.type===`ctrl-c`){this.#O=!0,this.#oe(),this.#Q(),i(interruptedError());return}if(o.type===`ctrl-r`){this.#we();return}if(c===`select`){switch(o.type){case`up`:a>0&&(l=(l-1+a)%a,renderSection(),repaintStatus());break;case`down`:a>0&&(l=(l+1)%a,renderSection(),repaintStatus());break;case`enter`:{if(isOnFreeformRow()){c=`text`,u=``,this.#ae(),repaintStatus();break}let e=n[l];e&&t(finalize({optionId:e.id,label:e.label}));break}default:break}return}switch(o.type){case`character`:u+=o.value,this.#se(),repaintStatus();break;case`backspace`:u=u.slice(0,-1),this.#se(),repaintStatus();break;case`enter`:{let n=resolveQuestionText(u,e);if(n===void 0)break;t(finalize(n));break}case`escape`:if(r){if(u.length>0){u=``,this.#se(),repaintStatus();break}c=`select`,u=``,this.#C=!1,this.#oe(),repaintStatus();break}u=``,this.#se(),repaintStatus();break;default:break}},this.#$()})}upsertSubagentStep(e){if(this.#o===`hidden`)return;let t=e.reasoning?.trim()??``,n=e.message?.trim()??``;if(!(t.length===0&&n.length===0)){if(this.#me(e.callId,e.subagentName),this.#o===`collapsed`){this.#we();return}this.#he({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,depth:1,reasoning:t,body:n,live:!e.finalized}),this.#we()}}upsertSubagentTool(n){if(this.#o===`hidden`)return;if(this.#me(n.callId,n.subagentName),this.#o===`collapsed`){this.#we();return}let r=subagentToolStatus(n.status),i={id:subagentToolSectionId(n.callId,n.childCallId),kind:`subagent-tool`,depth:1,title:n.toolName,subtitle:summarizeToolArgs(n.input),status:r,live:r===`running`||r===`approval`,expanded:this.#o===`full`,toolInput:n.input};n.output===void 0?n.errorText!==void 0&&(i.result=n.errorText):(i.result=summarizeToolResult(n.output),i.toolOutput=n.output),this.#he(i),this.#we()}markChildToolCallId(e){this.#h.add(e);let t=this.#g.get(e);t!==void 0&&(this.#ge(t),this.#g.delete(e),this.#we())}#X(e){let t=this.#p.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#s===`hidden`)return;let t=e.state===`authorized`||e.state===`declined`||e.state===`failed`||e.state===`timed-out`;this.#he({id:connectionAuthSectionId(e.name),kind:`connection-auth`,title:`${e.name} · authorization · ${e.state}`,body:formatConnectionAuthContent(e),preformatted:!0,live:!t}),this.#we()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#y)return;let n=this.#y>0;this.#y=t,t>0?(this.#T=STATUS.connectionAuth,this.#we()):n&&(this.#T=STATUS.processing,this.#we())}reset(){this.#f=[],this.#p.clear(),this.#m.clear(),this.#v=void 0,this.#h.clear(),this.#g.clear(),this.#_.clear(),this.#J=void 0,this.#y=0,this.#B=void 0,this.#H=void 0,this.#U=void 0,this.#W=void 0,this.#D&&(this.#n.clearAll(),this.#we())}renderNotice(e){e.trim().length!==0&&(this.#Z(),this.#ue({kind:`notice`,body:e,live:!1}),this.#we())}shutdown(){this.#Q()}#Z(e){this.#E=e?.title??this.#E,this.#V=e?.contextSize??this.#l,!this.#D&&(this.#D=!0,this.#n.reset(),this.#n.hideCursor(),this.#Me(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume()),this.#I=()=>this.#we(),this.#t.on(`resize`,this.#I))}#Q(){this.#ee(),this.#oe(),this.#le(),this.#D&&=(this.#we(),this.#n.clear(),this.#n.showCursor(),this.#Ne(),this.#n.newline(),this.#e.isTTY&&(this.#e.setRawMode?.(!1),this.#e.pause()),this.#I&&=(this.#t.off(`resize`,this.#I),void 0),!1)}#$(){this.#e.on(`data`,this.#te)}#ee(){this.#e.off(`data`,this.#te),this.#re(),this.#P=``,this.#N=void 0}#te=e=>{this.#re(),this.#P+=e.toString(`utf8`),this.#ne(),this.#P===`\x1B`&&(this.#F=setTimeout(()=>{this.#P===`\x1B`&&(this.#P=``,this.#N?.({type:`escape`}))},30),this.#F.unref?.())};#ne(){for(;this.#P.length>0;){let e=nextKey(this.#P);if(e.incomplete)return;this.#P=this.#P.slice(e.consumed),e.key&&e.key.type!==`ignore`&&this.#N?.(e.key)}}#re(){this.#F&&=(clearTimeout(this.#F),void 0)}#ie(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#we();break;case`ctrl-c`:this.#O=!0,this.#L?.();break;default:break}}#ae(){this.#oe(),this.#se(),this.#j=setInterval(()=>{this.#k=!this.#k,this.#we()},500),this.#j.unref?.()}#oe(){this.#j&&=(clearInterval(this.#j),void 0),this.#k=!0}#se(){this.#k=!0}#ce(){this.#le(),this.#M=setInterval(()=>{this.#A+=1,this.#we()},90),this.#M.unref?.()}#le(){this.#M&&=(clearInterval(this.#M),void 0)}#ue(e){this.#f.push(e),e.id&&this.#p.set(e.id,e)}#de(e){this.#ue({kind:`user`,body:e,live:!1}),this.#we()}#fe(e){if(e!=null){if(this.#J===e){this.#J=void 0;return}this.#ue({kind:`user`,body:e,live:!1})}}#pe(e,t,n){let r={kind:`error`,title:e,body:t,live:!1};n!==void 0&&(r.detail=n),this.#ue(r),this.#we()}#me(e,t){this.#_.has(e)||(this.#_.add(e),this.#ue({id:subagentHeaderId(e),kind:`subagent`,title:t,live:!1}))}#he(e){if(e.id&&this.#m.has(e.id))return;let t=e.id?this.#p.get(e.id):void 0;if(t){Object.assign(t,e);return}this.#ue(e)}#ge(e){this.#f=this.#f.filter(t=>t.id!==e),this.#p.delete(e)}#_e(){for(let e of this.#f)e.status!==`approval`&&(e.live=!1)}#ve(e,t,n){switch(e.type){case`step-start`:this.#ye(n.hasPendingToolResults?STATUS.toolResults:STATUS.processing),n.hasPendingToolResults=!1;break;case`step-finish`:this.#Ce(e.usage),this.#we();break;case`assistant-delta`:{this.#ye(STATUS.streaming);let t=(n.text.get(e.id)??``)+e.delta;n.text.set(e.id,t),this.#be(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?e.text??``:t;n.text.set(e.id,r),this.#be(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;this.#ye(STATUS.streaming);let r=(n.reasoning.get(e.id)??``)+e.delta;n.reasoning.set(e.id,r),this.#xe(e.id,r,!0,t);break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;this.#xe(e.id,r,!1,t);break}case`tool-call`:if(t.tools===`hidden`)break;this.#ye(STATUS.executingTools),this.#Se({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.#Se({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;n.hasPendingToolResults=!0,this.#ye(STATUS.toolResults),this.#Se({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;n.hasPendingToolResults=!0,this.#ye(STATUS.toolResults),this.#Se({...r,errorText:e.errorText,status:`error`},t,n);break}case`error`:this.#pe(`Error`,e.errorText,e.detail);break;case`finish`:this.#Ce(e.usage),this.#we();break}}#ye(e){let t=this.#y>0?STATUS.connectionAuth:e;this.#T!==t&&(this.#T=t,this.#we())}#be(e,t,n){let r=t.trim();r.length!==0&&(this.#he({id:e,kind:`assistant`,body:r,live:n}),this.#we())}#xe(e,t,n,r){let i=t.trim();i.length!==0&&(this.#he({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#we())}#Se(e,t,n){if(n.tools.set(e.toolCallId,e),this.#h.has(e.toolCallId))return;let r=toolSectionId(e.toolCallId);this.#g.set(e.toolCallId,r),this.#he(renderNativeToolBlock(e,r,t.tools===`full`)),this.#we()}#Ce(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#B=(t??0)+(n??0)),this.#H=n??this.#H,this.#H!=null&&this.#W!==void 0){let e=(Date.now()-this.#W)/1e3;e>0&&(this.#U=this.#H/e)}}#we(){if(this.#D){if(this.#R){this.#z=!0;return}this.#R=!0;try{do this.#z=!1,this.#Te();while(this.#z)}finally{this.#R=!1}}}#Te(){if(!this.#D)return;let e=this.#Ae(),t=this.#Oe(e),n=Math.max(1,this.#je()-t.length),r=[],i=this.#v;for(;this.#f.length>0&&this.#f[0].live===!1;){let t=this.#f.shift(),n=this.#Ee(t,e,i);i=previousBlockOf(t),this.#v=i,r.push(...n),t.id&&(this.#m.add(t.id),this.#p.delete(t.id))}let a=[];for(let t of this.#f){let n=this.#Ee(t,e,i);i=previousBlockOf(t);for(let e=0;e<n.length;e+=1)a.push({block:t,row:n[e]})}let o=[...clipLiveRows(a.map(e=>e.row),n,e,this.#r),...t];r.length>0?this.#n.flush(r,o):this.#n.update(o)}#Ee(e,t,n){let r={spinner:this.#De()};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#r,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#De(){return this.#r.spinner[this.#A%this.#r.spinner.length]??``}#Oe(e){let t=this.#r.colors,n=[``];if(this.#C){let r=Math.max(4,e-3),{before:i,after:a}=visibleLine({text:this.#b,cursor:this.#x},r,this.#r.glyph.ellipsis),o=this.#k?t.cyan(this.#r.glyph.caret):` `;return n.push(`${t.cyan(this.#r.glyph.prompt)} ${i}${o}${a}`),n}let r=this.#w?t.yellow(this.#De()):t.dim(this.#r.glyph.dot),i=this.#T.length>0?this.#T:`Ready`,a=this.#w?t.dim(i):i,o=this.#ke(),s=o?`${r} ${a} ${t.dim(this.#r.glyph.dot)} ${o}`:`${r} ${a}`;return n.push(clip(s,e)),n}#ke(){let e=this.#r.colors,t=[],n=formatTokenCount(this.#B,this.#V);n&&t.push(n);let r=formatAssistantResponseStats({totalTokens:this.#B,outputTokens:this.#H,tokensPerSecond:this.#U},this.#c);return r&&t.push(r),this.#w&&t.push(`Ctrl+C to interrupt`),t.length>0?e.dim(t.join(` ${this.#r.glyph.dot} `)):``}#Ae(){return Math.max(20,this.#t.columns||80)}#je(){return Math.max(8,this.#t.rows||24)}#Me(){if(this.#G!==void 0||!this.#u)return;this.#K=``,this.#q=``;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.#Pe(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#G=()=>{e(),t()}}#Ne(){let e=this.#G;e!==void 0&&(this.#G=void 0,e(),this.#K.length>0&&(this.#Fe(`stdout`)&&process.stdout.write(`${this.#K}\n`),this.#K=``),this.#q.length>0&&(this.#Fe(`stderr`)&&process.stderr.write(`${this.#q}\n`),this.#q=``))}#Pe(e,t){let n=(e===`stdout`?this.#K:this.#q)+t,r=n.lastIndexOf(`
|
|
2
|
-
`),a=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#
|
|
1
|
+
import{summarizeToolArgs,summarizeToolResult}from"./tool-format.js";import{buildAgentHeader}from"./agent-header.js";import{sliceVisible,stripAnsi,visibleLength}from"./terminal-text.js";import{renderBlockLines}from"./blocks.js";import{interruptedError}from"./errors.js";import{EMPTY_LINE,PromptHistory,backspace,deleteForward,deleteWord,insert,killToEnd,killToStart,lineOf,moveEnd,moveHome,moveLeft,moveRight,visibleLine}from"./line-editor.js";import{LiveRegion}from"./live-region.js";import{createTheme,detectUnicode}from"./theme.js";import{formatAssistantResponseStats,formatTokenCount,nextKey,takeUntil}from"./stream-format.js";import{toErrorMessage}from"#shared/errors.js";const STATUS={processing:`Working…`,toolResults:`Reading results…`,streaming:`Responding…`,executingTools:`Running tools…`,connectionAuth:`Waiting for connection authorization…`};var TerminalRenderer=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f=[];#p=new Map;#m=new Set;#h=new Set;#g=new Map;#_=new Set;#v;#y=!1;#b=[];#x;#S=0;#C=``;#w=0;#T=new PromptHistory;#E=!1;#D=!1;#O=STATUS.processing;#k=`Eve`;#A=!1;#j=!1;#M=!0;#N=0;#P;#F;#I;#L=``;#R;#z;#B;#V=!1;#H=!1;#U;#W;#G;#K;#q;#J;#Y=``;#X=``;#Z;constructor(e){this.#e=e?.input??process.stdin,this.#t=e?.output??process.stdout,this.#n=new LiveRegion(this.#t),this.#r=createTheme({color:e?.color??!0,unicode:e?.unicode??detectUnicode()}),this.#i=e?.tools??`auto-collapsed`,this.#a=e?.reasoning??`full`,this.#o=e?.subagents??`auto-collapsed`,this.#s=e?.connectionAuth??`full`,this.#c=e?.assistantResponseStats??`tokensPerSecond`,this.#l=e?.contextSize,this.#W=e?.contextSize,this.#u=e?.captureForeignOutput??this.#t===process.stdout,this.#d=e?.logs??`all`}renderAgentHeader(e){if(this.#k=e.name,this.#v=e,this.#ee(),this.#y){this.#ke();return}this.#y=!0,this.#n.clearAll(),this.#n.flush(this.#Ae(),[])}async readPrompt(e){this.#ee(e),this.#E=!0,this.#D=!1,this.#O=``;let t=lineOf(``);return this.#T.begin(t.text),this.#Q(t),this.#ce(),this.#De(),await new Promise((e,n)=>{let apply=e=>{t=e,this.#ue(),this.#Q(t),this.#De()},recall=e=>{e!==void 0&&apply(lineOf(e))},interrupt=()=>{this.#le(),this.#te(),n(interruptedError())};this.#I=n=>{switch(n.type){case`character`:apply(insert(t,n.value));break;case`backspace`:apply(backspace(t));break;case`delete`:apply(deleteForward(t));break;case`left`:apply(moveLeft(t));break;case`right`:apply(moveRight(t));break;case`home`:case`ctrl-a`:apply(moveHome(t));break;case`end`:case`ctrl-e`:apply(moveEnd(t));break;case`ctrl-k`:apply(killToEnd(t));break;case`ctrl-u`:apply(killToStart(t));break;case`ctrl-w`:apply(deleteWord(t));break;case`up`:recall(this.#T.previous(t.text));break;case`down`:recall(this.#T.next());break;case`enter`:{let n=t.text;this.#T.add(n),this.#E=!1,this.#le(),this.#O=STATUS.processing,isPromptControlCommand(n)||(this.#me(n),this.#Z=n),this.#Q(EMPTY_LINE),this.#De(),this.#re(),e(n);break}case`ctrl-d`:t.text.length===0?interrupt():apply(deleteForward(t));break;case`ctrl-l`:case`ctrl-r`:this.#De();break;case`ctrl-c`:interrupt();break;default:break}},this.#ne()})}#Q(e){this.#C=e.text,this.#w=e.cursor}async renderStream(e,t){this.#ee(t),this.#m.clear(),this.#E=!1,this.#D=!0,this.#O=STATUS.processing,this.#he(t?.submittedPrompt),this.#j=!1,this.#U=void 0,this.#G=void 0,this.#K=void 0,this.#q=Date.now();let n={tools:t?.tools??this.#i,reasoning:t?.reasoning??this.#a,assistantResponseStats:t?.assistantResponseStats??this.#c};this.#de(),this.#De();let r=new Promise(e=>{this.#B=e});this.#I=e=>this.#se(e),this.#ne();let i={text:new Map,reasoning:new Map,tools:new Map,hasPendingToolResults:!1};try{for await(let t of takeUntil(iterateTUIStream(e.events),r)){if(this.#j)break;this.#xe(t,n,i)}}catch(e){this.#ge(`Error`,toErrorMessage(e))}finally{this.#B=void 0,this.#j&&e.abort?.(),this.#re(),this.#fe(),this.#D=!1,this.#O=this.#j?`Interrupted`:t?.continueSession?`Ready`:`Done`,this.#be(),this.#De(),(this.#j||!t?.continueSession)&&this.#te()}if(this.#j)throw interruptedError()}async readToolApproval(e,t){return this.#ee(t),this.#E=!1,this.#D=!1,this.#O=`Approve ${formatToolApprovalTitle(e)}? (y/n)`,this.#j=!1,this.#De(),await new Promise((t,n)=>{this.#I=r=>{switch(r.type){case`character`:{let n=r.value.toLowerCase();n===`y`?(this.#O=STATUS.processing,this.#re(),this.#De(),t({approved:!0})):n===`n`&&(this.#O=STATUS.processing,this.#$(e.toolCallId),this.#re(),this.#De(),t({approved:!1,reason:`Denied by user.`}));break}case`ctrl-r`:this.#De();break;case`ctrl-c`:this.#j=!0,this.#te(),n(interruptedError());break;default:break}},this.#ne()})}async readInputQuestion(e,t){this.#ee(t),this.#E=!1,this.#D=!1,this.#j=!1;let n=e.options??[],r=n.length>0,i=(e.allowFreeform===!0||!r)&&r,a=n.length+ +!!i,o=questionSectionId(e.requestId),c=r?`select`:`text`,l=0,u=``,isOnFreeformRow=()=>i&&l===n.length,renderSection=()=>{this.#ve({id:o,kind:`question`,title:e.prompt,body:formatQuestionContent(e,l,this.#r),preformatted:!0,live:!0})},repaintStatus=()=>{if(c===`select`){let e=isOnFreeformRow()?`type`:`select`;this.#O=`↑/↓ move · enter ${e} · Ctrl+C quit`,this.#E=!1}else this.#E=!0,this.#Q(lineOf(u)),this.#O=``;this.#De()};renderSection(),c===`text`&&this.#ce(),repaintStatus();let finalize=t=>{this.#ve({id:o,kind:`question`,title:e.prompt,body:` ${this.#r.colors.green(this.#r.glyph.success)} ${t.label}`,preformatted:!0,live:!1}),this.#E=!1,this.#O=STATUS.processing,this.#le(),this.#re(),this.#De();let n={};return t.optionId!==void 0&&(n.optionId=t.optionId),t.text!==void 0&&(n.text=t.text),n};return await new Promise((t,i)=>{this.#I=o=>{if(o.type===`ctrl-c`){this.#j=!0,this.#le(),this.#te(),i(interruptedError());return}if(o.type===`ctrl-r`){this.#De();return}if(c===`select`){switch(o.type){case`up`:a>0&&(l=(l-1+a)%a,renderSection(),repaintStatus());break;case`down`:a>0&&(l=(l+1)%a,renderSection(),repaintStatus());break;case`enter`:{if(isOnFreeformRow()){c=`text`,u=``,this.#ce(),repaintStatus();break}let e=n[l];e&&t(finalize({optionId:e.id,label:e.label}));break}default:break}return}switch(o.type){case`character`:u+=o.value,this.#ue(),repaintStatus();break;case`backspace`:u=u.slice(0,-1),this.#ue(),repaintStatus();break;case`enter`:{let n=resolveQuestionText(u,e);if(n===void 0)break;t(finalize(n));break}case`escape`:if(r){if(u.length>0){u=``,this.#ue(),repaintStatus();break}c=`select`,u=``,this.#E=!1,this.#le(),repaintStatus();break}u=``,this.#ue(),repaintStatus();break;default:break}},this.#ne()})}upsertSubagentStep(e){if(this.#o===`hidden`)return;let t=e.reasoning?.trim()??``,n=e.message?.trim()??``;if(!(t.length===0&&n.length===0)){if(this.#_e(e.callId,e.subagentName),this.#o===`collapsed`){this.#De();return}this.#ve({id:subagentStepSectionId(e.callId,e.sectionKey),kind:`subagent-step`,depth:1,reasoning:t,body:n,live:!e.finalized}),this.#De()}}upsertSubagentTool(n){if(this.#o===`hidden`)return;if(this.#_e(n.callId,n.subagentName),this.#o===`collapsed`){this.#De();return}let r=subagentToolStatus(n.status),i={id:subagentToolSectionId(n.callId,n.childCallId),kind:`subagent-tool`,depth:1,title:n.toolName,subtitle:summarizeToolArgs(n.input),status:r,live:r===`running`||r===`approval`,expanded:this.#o===`full`,toolInput:n.input};n.output===void 0?n.errorText!==void 0&&(i.result=n.errorText):(i.result=summarizeToolResult(n.output),i.toolOutput=n.output),this.#ve(i),this.#De()}markChildToolCallId(e){this.#h.add(e);let t=this.#g.get(e);t!==void 0&&(this.#ye(t),this.#g.delete(e),this.#De())}#$(e){let t=this.#p.get(toolSectionId(e));t!==void 0&&(t.status=`denied`,t.live=!1)}upsertConnectionAuth(e){if(this.#s===`hidden`)return;let t=e.state===`authorized`||e.state===`declined`||e.state===`failed`||e.state===`timed-out`;this.#ve({id:connectionAuthSectionId(e.name),kind:`connection-auth`,title:`${e.name} · authorization · ${e.state}`,body:formatConnectionAuthContent(e),preformatted:!0,live:!t}),this.#De()}setConnectionAuthPendingCount(e){let t=Math.max(0,e);if(t===this.#S)return;let n=this.#S>0;this.#S=t,t>0?(this.#O=STATUS.connectionAuth,this.#De()):n&&(this.#O=STATUS.processing,this.#De())}reset(){this.#f=[],this.#p.clear(),this.#m.clear(),this.#x=void 0,this.#b.length=0,this.#v=void 0,this.#y=!1,this.#h.clear(),this.#g.clear(),this.#_.clear(),this.#Z=void 0,this.#S=0,this.#U=void 0,this.#G=void 0,this.#K=void 0,this.#q=void 0,this.#A&&(this.#n.clearAll(),this.#De())}renderNotice(e){e.trim().length!==0&&(this.#ee(),this.#pe({kind:`notice`,body:e,live:!1}),this.#De())}shutdown(){this.#te()}#ee(e){this.#k=e?.title??this.#k,this.#W=e?.contextSize??this.#l,!this.#A&&(this.#A=!0,this.#n.reset(),this.#n.hideCursor(),this.#Le(),this.#e.isTTY&&(this.#e.setRawMode?.(!0),this.#e.resume()),this.#z=()=>this.#De(),this.#t.on(`resize`,this.#z))}#te(){this.#re(),this.#le(),this.#fe(),this.#A&&=(this.#De(),this.#n.clear(),this.#n.showCursor(),this.#Re(),this.#n.newline(),this.#e.isTTY&&(this.#e.setRawMode?.(!1),this.#e.pause()),this.#z&&=(this.#t.off(`resize`,this.#z),void 0),!1)}#ne(){this.#e.on(`data`,this.#ie)}#re(){this.#e.off(`data`,this.#ie),this.#oe(),this.#L=``,this.#I=void 0}#ie=e=>{this.#oe(),this.#L+=e.toString(`utf8`),this.#ae(),this.#L===`\x1B`&&(this.#R=setTimeout(()=>{this.#L===`\x1B`&&(this.#L=``,this.#I?.({type:`escape`}))},30),this.#R.unref?.())};#ae(){for(;this.#L.length>0;){let e=nextKey(this.#L);if(e.incomplete)return;this.#L=this.#L.slice(e.consumed),e.key&&e.key.type!==`ignore`&&this.#I?.(e.key)}}#oe(){this.#R&&=(clearTimeout(this.#R),void 0)}#se(e){switch(e.type){case`ctrl-l`:case`ctrl-r`:this.#De();break;case`ctrl-c`:this.#j=!0,this.#B?.();break;default:break}}#ce(){this.#le(),this.#ue(),this.#P=setInterval(()=>{this.#M=!this.#M,this.#De()},500),this.#P.unref?.()}#le(){this.#P&&=(clearInterval(this.#P),void 0),this.#M=!0}#ue(){this.#M=!0}#de(){this.#fe(),this.#F=setInterval(()=>{this.#N+=1,this.#De()},90),this.#F.unref?.()}#fe(){this.#F&&=(clearInterval(this.#F),void 0)}#pe(e){this.#f.push(e),e.id&&this.#p.set(e.id,e)}#me(e){this.#pe({kind:`user`,body:e,live:!1}),this.#De()}#he(e){if(e!=null){if(this.#Z===e){this.#Z=void 0;return}this.#pe({kind:`user`,body:e,live:!1})}}#ge(e,t,n){let r={kind:`error`,title:e,body:t,live:!1};n!==void 0&&(r.detail=n),this.#pe(r),this.#De()}#_e(e,t){this.#_.has(e)||(this.#_.add(e),this.#pe({id:subagentHeaderId(e),kind:`subagent`,title:t,live:!1}))}#ve(e){if(e.id&&this.#m.has(e.id))return;let t=e.id?this.#p.get(e.id):void 0;if(t){Object.assign(t,e);return}this.#pe(e)}#ye(e){this.#f=this.#f.filter(t=>t.id!==e),this.#p.delete(e)}#be(){for(let e of this.#f)e.status!==`approval`&&(e.live=!1)}#xe(e,t,n){switch(e.type){case`step-start`:this.#Se(n.hasPendingToolResults?STATUS.toolResults:STATUS.processing),n.hasPendingToolResults=!1;break;case`step-finish`:this.#Ee(e.usage),this.#De();break;case`assistant-delta`:{this.#Se(STATUS.streaming);let t=(n.text.get(e.id)??``)+e.delta;n.text.set(e.id,t),this.#Ce(e.id,t,!0);break}case`assistant-complete`:{let t=n.text.get(e.id)??``,r=e.text!==void 0&&t.length===0?e.text??``:t;n.text.set(e.id,r),this.#Ce(e.id,r,!1);break}case`reasoning-delta`:{if(t.reasoning===`hidden`)break;this.#Se(STATUS.streaming);let r=(n.reasoning.get(e.id)??``)+e.delta;n.reasoning.set(e.id,r),this.#we(e.id,r,!0,t);break}case`reasoning-complete`:{if(t.reasoning===`hidden`)break;let r=n.reasoning.get(e.id)??``;this.#we(e.id,r,!1,t);break}case`tool-call`:if(t.tools===`hidden`)break;this.#Se(STATUS.executingTools),this.#Te({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.#Te({...r,status:`approval`},t,n);break}case`tool-result`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;n.hasPendingToolResults=!0,this.#Se(STATUS.toolResults),this.#Te({...r,output:e.output,status:`done`},t,n);break}case`tool-error`:{if(t.tools===`hidden`)break;let r=n.tools.get(e.toolCallId);if(r===void 0)break;n.hasPendingToolResults=!0,this.#Se(STATUS.toolResults),this.#Te({...r,errorText:e.errorText,status:`error`},t,n);break}case`error`:this.#ge(`Error`,e.errorText,e.detail);break;case`finish`:this.#Ee(e.usage),this.#De();break}}#Se(e){let t=this.#S>0?STATUS.connectionAuth:e;this.#O!==t&&(this.#O=t,this.#De())}#Ce(e,t,n){let r=t.trim();r.length!==0&&(this.#ve({id:e,kind:`assistant`,body:r,live:n}),this.#De())}#we(e,t,n,r){let i=t.trim();i.length!==0&&(this.#ve({id:e,kind:`reasoning`,body:i,collapsed:collapseReasoning(r.reasoning,n),live:n}),this.#De())}#Te(e,t,n){if(n.tools.set(e.toolCallId,e),this.#h.has(e.toolCallId))return;let r=toolSectionId(e.toolCallId);this.#g.set(e.toolCallId,r),this.#ve(renderNativeToolBlock(e,r,t.tools===`full`)),this.#De()}#Ee(e){if(e===void 0)return;let{inputTokens:t,outputTokens:n}=e;if((t!=null||n!=null)&&(this.#U=(t??0)+(n??0)),this.#G=n??this.#G,this.#G!=null&&this.#q!==void 0){let e=(Date.now()-this.#q)/1e3;e>0&&(this.#K=this.#G/e)}}#De(){if(this.#A){if(this.#V){this.#H=!0;return}this.#V=!0;try{do this.#H=!1,this.#Oe();while(this.#H)}finally{this.#V=!1}}}#Oe(){if(!this.#A)return;let e=this.#Fe(),t=this.#Ne(e),n=Math.max(1,this.#Ie()-t.length),r=[],i=this.#x;for(;this.#f.length>0&&this.#f[0].live===!1;){let t=this.#f.shift(),n=this.#je(t,e,i);i=previousBlockOf(t),this.#x=i,r.push(...n),this.#b.push(...n),t.id&&(this.#m.add(t.id),this.#p.delete(t.id))}let a=[];for(let t of this.#f){let n=this.#je(t,e,i);i=previousBlockOf(t);for(let e=0;e<n.length;e+=1)a.push({block:t,row:n[e]})}let o=[...clipLiveRows(a.map(e=>e.row),n,e,this.#r),...t];r.length>0?this.#n.flush(r,o):this.#n.update(o)}#ke(){if(!this.#A)return;let e=this.#Fe(),t=this.#Ne(e),n=Math.max(1,this.#Ie()-t.length),r=this.#x,i=[];for(let t of this.#f){let n=this.#je(t,e,r);r=previousBlockOf(t),i.push(...n)}let a=[...clipLiveRows(i,n,e,this.#r),...t];this.#n.clearAll(),this.#n.flush([...this.#Ae(),...this.#b],a)}#Ae(){let e=this.#v;if(e===void 0)return[];let t={name:e.name,serverUrl:e.serverUrl,theme:this.#r,width:this.#Fe()};return e.info!==void 0&&(t.info=e.info),buildAgentHeader(t)}#je(e,t,n){let r={spinner:this.#Me()};n!==void 0&&(r.previous=n);let i=renderBlockLines(e,t,this.#r,r);return(e.depth??0)===0&&leadsWithGap(e,n)?[``,...i]:i}#Me(){return this.#r.spinner[this.#N%this.#r.spinner.length]??``}#Ne(e){let t=this.#r.colors,n=[``];if(this.#E){let r=Math.max(4,e-3),{before:i,after:a}=visibleLine({text:this.#C,cursor:this.#w},r,this.#r.glyph.ellipsis),o=this.#M?t.cyan(this.#r.glyph.caret):` `;return n.push(`${t.cyan(this.#r.glyph.prompt)} ${i}${o}${a}`),n}let r=this.#D?t.yellow(this.#Me()):t.dim(this.#r.glyph.dot),i=this.#O.length>0?this.#O:`Ready`,a=this.#D?t.dim(i):i,o=this.#Pe(),s=o?`${r} ${a} ${t.dim(this.#r.glyph.dot)} ${o}`:`${r} ${a}`;return n.push(clip(s,e)),n}#Pe(){let e=this.#r.colors,t=[],n=formatTokenCount(this.#U,this.#W);n&&t.push(n);let r=formatAssistantResponseStats({totalTokens:this.#U,outputTokens:this.#G,tokensPerSecond:this.#K},this.#c);return r&&t.push(r),this.#D&&t.push(`Ctrl+C to interrupt`),t.length>0?e.dim(t.join(` ${this.#r.glyph.dot} `)):``}#Fe(){return Math.max(20,this.#t.columns||80)}#Ie(){return Math.max(8,this.#t.rows||24)}#Le(){if(this.#J!==void 0||!this.#u)return;this.#Y=``,this.#X=``;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.#ze(t,chunkToString(e,i)),a?.(),!0}),()=>{e.write=n}},e=capture(process.stdout,`stdout`),t=capture(process.stderr,`stderr`);this.#J=()=>{e(),t()}}#Re(){let e=this.#J;e!==void 0&&(this.#J=void 0,e(),this.#Y.length>0&&(this.#Be(`stdout`)&&process.stdout.write(`${this.#Y}\n`),this.#Y=``),this.#X.length>0&&(this.#Be(`stderr`)&&process.stderr.write(`${this.#X}\n`),this.#X=``))}#ze(e,t){let n=(e===`stdout`?this.#Y:this.#X)+t,r=n.lastIndexOf(`
|
|
2
|
+
`),a=r===-1?n:n.slice(r+1);if(e===`stdout`?this.#Y=a:this.#X=a,r===-1||!this.#Be(e))return;let o=stripAnsi(n.slice(0,r)).replace(/\s+$/u,``);o.trim().length!==0&&(this.#pe({kind:`log`,title:e,body:o,live:!1}),this.#De())}#Be(e){switch(this.#d){case`none`:return!1;case`stderr`:return e===`stderr`;case`all`:return!0}}};function chunkToString(e,t){return typeof e==`string`?e:Buffer.from(e).toString(t)}async function*iterateTUIStream(e){if(e instanceof ReadableStream){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;yield n}}finally{t.releaseLock()}return}yield*e}function clip(e,t){return visibleLength(e)>t?sliceVisible(e,t):e}function previousBlockOf(e){let t={kind:e.kind};return e.title!==void 0&&(t.title=e.title),t}function leadsWithGap(e,t){if(e.kind===`log`&&t?.kind===`log`)return t.title!==e.title;if(t?.kind===`log`&&e.kind!==`log`)return!0;switch(e.kind){case`user`:case`assistant`:case`reasoning`:case`subagent`:case`error`:case`notice`:case`question`:case`connection-auth`:case`log`:return!0;default:return!1}}function clipLiveRows(e,t,n,r){if(e.length<=t)return[...e];if(t<=1)return[clip(hiddenRowsMarker(e.length,r),n)];let i=t-1;return[clip(hiddenRowsMarker(e.length-i,r),n),...e.slice(e.length-i)]}function hiddenRowsMarker(e,t){let n=e.toLocaleString(),r=e===1?`row`:`rows`;return t.colors.dim(`${t.glyph.dot} ${t.glyph.ellipsis} ${n} earlier ${r} hidden while streaming`)}function isPromptControlCommand(e){let t=e.trim();return t===`/new`||t===`/exit`||t===`/quit`}function collapseReasoning(e,t){switch(e){case`collapsed`:return!0;case`auto-collapsed`:return!t;default:return!1}}function renderNativeToolBlock(n,r,i){let a={id:r,kind:`tool`,title:n.toolName,subtitle:summarizeToolArgs(n.input),status:n.status,live:n.status===`running`||n.status===`approval`,expanded:i,toolInput:n.input};return n.output===void 0?n.errorText!==void 0&&(a.result=n.errorText):(a.result=summarizeToolResult(n.output),a.toolOutput=n.output),a}function subagentToolStatus(e){switch(e){case`approval-requested`:return`approval`;case`executing`:return`running`;case`done`:return`done`;case`failed`:return`error`}}function formatToolApprovalTitle(e){return e.title??e.toolName}function toolSectionId(e){return`tool:${e}`}function questionSectionId(e){return`question:${e}`}function subagentHeaderId(e){return`subagent:${e}:header`}function subagentStepSectionId(e,t){return`subagent:${e}:step:${t}`}function subagentToolSectionId(e,t){return`subagent:${e}:tool:${t}`}function connectionAuthSectionId(e){return`connection-auth:${e}`}function formatConnectionAuthContent(e){let t=[];e.description.length>0&&t.push(e.description);let n=e.challenge;return n?.url&&t.push(`URL: ${n.url}`),n?.userCode&&t.push(`Code: ${n.userCode}`),n?.expiresAt&&t.push(`Expires: ${n.expiresAt}`),n?.instructions&&t.push(n.instructions),e.reason!==void 0&&e.reason.length>0&&t.push(`Reason: ${e.reason}`),t.join(`
|
|
3
3
|
`)}function formatQuestionContent(e,t,n){let r=n.colors,i=[],a=e.options??[];if(a.length>0){for(let[e,o]of a.entries()){let a=o.description?` ${r.dim(`— ${o.description}`)}`:``,s=t===e,c=s?`${r.cyan(n.glyph.pointer)} `:` `,l=s?r.cyan(o.label):o.label;i.push(`${c}${l}${a}`)}if(e.allowFreeform===!0){let e=t===a.length,o=e?`${r.cyan(n.glyph.pointer)} `:` `,s=`Type your own answer`;i.push(`${o}${e?r.cyan(s):r.dim(s)}`)}}else i.push(r.dim(` (type your answer)`));return i.join(`
|
|
4
4
|
`)}function resolveQuestionText(e,t){let n=e.trim();if(n.length===0)return;let r=n.toLowerCase(),i=t.options??[];if(i.length>0){let e=matchQuestionOption(r,i);if(e!==void 0)return{optionId:e.id,label:e.label}}if(t.allowFreeform===!0||i.length===0)return{text:n,label:n}}function matchQuestionOption(e,t){let n=t.find(t=>t.id.toLowerCase()===e);if(n!==void 0)return n;let r=t.find(t=>t.label.toLowerCase()===e);if(r!==void 0)return r;let i=Number(e);if(Number.isInteger(i)&&i>0&&i<=t.length)return t[i-1]}export{TerminalRenderer};
|
package/dist/src/cli/run.d.ts
CHANGED
|
@@ -52,13 +52,17 @@ type CliRuntimeOverrides = Partial<CliRuntimeDependencies>;
|
|
|
52
52
|
interface EvalCliOptions {
|
|
53
53
|
case?: string[];
|
|
54
54
|
json?: boolean;
|
|
55
|
+
junit?: string;
|
|
55
56
|
list?: boolean;
|
|
56
57
|
maxConcurrency?: string;
|
|
58
|
+
mockModels?: boolean;
|
|
59
|
+
noSkips?: boolean;
|
|
57
60
|
skipReport?: boolean;
|
|
58
61
|
strict?: boolean;
|
|
59
62
|
tag?: string[];
|
|
60
63
|
timeout?: string;
|
|
61
64
|
url?: string;
|
|
65
|
+
verbose?: boolean;
|
|
62
66
|
}
|
|
63
67
|
/**
|
|
64
68
|
* The interactive UI `eve dev` runs against a server.
|
package/dist/src/cli/run.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import{basename}from"node:path";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";async function loadBuildHost(){return(await import(`#internal/nitro/host.js`)).buildApplication}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentRepl(){return(await import(`#cli/dev/repl/repl.js`)).runDevelopmentRepl}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#internal/nitro/host.js`)).startDevelopmentServer}async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function shouldPrintCliBootBanner(e){return e.name()===`info`||e.name()===`dev`}async function waitForShutdownSignal(e){await new Promise((t,n)=>{let r=!1,cleanup=()=>{process.off(`SIGINT`,handleSignal),process.off(`SIGTERM`,handleSignal)},handleSignal=()=>{r||(r=!0,cleanup(),e.close().then(t,n))};process.once(`SIGINT`,handleSignal),process.once(`SIGTERM`,handleSignal)})}async function waitForProductionServer(e){await Promise.race([e.wait(),waitForShutdownSignal({close:()=>e.close()})])}function parsePortOption(e){if(!/^-?\d+$/.test(e))throw new InvalidArgumentError(`Expected a numeric port, received "${e}".`);let t=Number(e);if(t<0||t>65535)throw new InvalidArgumentError(`Expected a port between 0 and 65535, received "${e}".`);return t}const DISPLAY_MODES=new Set([`full`,`collapsed`,`auto-collapsed`,`hidden`]),STATS_MODES=new Set([`tokens`,`tokensPerSecond`]),LOG_MODES=new Set([`all`,`stderr`,`none`]);function parseDisplayMode(e){if(!DISPLAY_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...DISPLAY_MODES].join(`, `)}, received "${e}".`);return e}function parseStatsMode(e){if(!STATS_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...STATS_MODES].join(`, `)}, received "${e}".`);return e}function parseLogsMode(e){if(!LOG_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...LOG_MODES].join(`, `)}, received "${e}".`);return e}function parseContextSizeOption(e){let t=Number(e);if(!Number.isFinite(t)||t<=0)throw new InvalidArgumentError(`Expected a positive number, received "${e}".`);return t}function resolveDevUiMode(e){return e.options.ui===!1||!e.interactive?`headless`:e.options.repl===!0?`repl`:`tui`}function resolveTuiTitle(t){if(t.name!==void 0&&t.name.length>0)return t.name;if(t.remoteServerUrl!==void 0)try{return new URL(t.remoteServerUrl).host}catch{return}let n=humanizeProjectName(basename(t.appRoot));return n.length>0?n:void 0}function humanizeProjectName(e){return e.replace(/[-_.]+/gu,` `).trim().split(/\s+/u).filter(e=>e.length>0).map(e=>e[0].toUpperCase()+e.slice(1)).join(` `)}function resolveTuiDisplayOptions(e){let t={reasoning:e.reasoning??`full`,tools:e.tools??`auto-collapsed`};return e.subagents!==void 0&&(t.subagents=e.subagents),e.connectionAuth!==void 0&&(t.connectionAuth=e.connectionAuth),e.assistantResponseStats!==void 0&&(t.assistantResponseStats=e.assistantResponseStats),e.contextSize!==void 0&&(t.contextSize=e.contextSize),e.logs!==void 0&&(t.logs=e.logs),t}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function rewriteDeprecatedReplFlag(e){return e[0]===`dev`?e.map(e=>e===`--no-repl`?`--no-ui`:e):[...e]}function rewriteDevelopmentUrlShorthand(e){let t=e[1];return e[0]!==`dev`||e.length!==2||t===void 0||t.startsWith(`-`)?[...e]:[`dev`,`--url`,t]}function resolveRemoteDevelopmentServerUrl(e){if(e.url){if(e.host!==void 0)throw new InvalidArgumentError(`The --host option cannot be used with --url.`);if(e.port!==void 0)throw new InvalidArgumentError(`The --port option cannot be used with --url.`);if(e.ui===!1)throw new InvalidArgumentError(`The --no-ui option cannot be used with --url.`);return e.url}}function createCliProgram(e,i){let a=resolveApplicationRoot(),l=resolveInstalledPackageInfo().version,u=new Command,d=createCliTheme();u.name(`eve`).description(`Build and run an Eve application.`).version(l).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{shouldPrintCliBootBanner(n)&&e.log(`Eve (v${l})`)}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}});let f=u.command(`channels`).description(`Manage user-authored channels in the current project.`);return f.command(`add [kind]`).description(`Add channels interactively, or scaffold a channel kind (slack | web).`).option(`-f, --force`,`Overwrite existing channel files`).option(`-y, --yes`,`Assume yes for confirmations; requires an explicit channel kind`).action(async(t,n)=>{let{runChannelsAddCommand:r}=await import(`#cli/commands/channels.js`);await r(e,a,{kind:t,options:n})}),f.command(`list`).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,a,t)}),u.command(`setup`).description(`Create or set up an Eve agent in the current directory (unified flow).`).action(async()=>{let{runSetupCommand:t}=await import(`#cli/commands/setup.js`);await t(e,a,{})}),u.command(`build`).description(`Build the current Eve application.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(a);let r=await(i.buildHost??await loadBuildHost())(a);e.log(renderCliTaggedLine(d,{message:`built output at ${r}`,tag:`build`,tone:`success`}))}),u.command(`start`).description(`Start a built Eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:r}=await import(`#cli/dev/environment.js`);r(a);let o=await(i.startProductionHost??await loadStartProductionHost())(a,{host:t.host,port:t.port});e.log(renderCliTaggedLine(d,{message:`server listening at ${o.url}`,tag:`start`,tone:`success`})),await waitForProductionServer(o)}),u.command(`dev`).description(`Start the Eve development server or connect to an existing URL.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--repl`,`Use the classic line-based REPL instead of the default terminal UI`).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | none`,parseLogsMode).addHelpText(`after`,`
|
|
2
2
|
You can also pass a bare URL as the only argument, for example: eve dev https://example.com
|
|
3
|
-
`).action(async t=>{let r=resolveRemoteDevelopmentServerUrl(t),{loadDevelopmentEnvironmentFiles:o}=await import(`#cli/dev/environment.js`);o(a);let runInteractiveUi=async(n,o)=>{if(e.log(``),o===`repl`){await(i.runDevelopmentRepl??await loadRunDevelopmentRepl())({serverUrl:n});return}let s=i.runDevelopmentTui??await loadRunDevelopmentTui(),c=resolveTuiDisplayOptions(t),l=resolveTuiTitle({name:t.name,remoteServerUrl:r,appRoot:a});l!==void 0&&(c.name=l),await s({serverUrl:n,...c})};if(r){e.log(renderCliTaggedLine(d,{message:`connecting to ${r}`,tag:`dev`,tone:`info`}));let i=resolveDevUiMode({options:t,interactive:hasInteractiveTerminal()});if(i===`headless`){e.log(renderCliTaggedLine(d,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}await runInteractiveUi(r,i);return}let s=await(i.startHost??await loadStartHost())(a,{host:t.host,port:t.port}),c=!1,closeServer=async()=>{c||(c=!0,await s.close())};try{e.log(renderCliTaggedLine(d,{message:`server listening at ${s.url}`,tag:`dev`,tone:`success`}));let r=hasInteractiveTerminal(),i=resolveDevUiMode({options:t,interactive:r});if(i===`headless`)return t.ui!==!1&&!r&&e.log(renderCliTaggedLine(d,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForShutdownSignal({close:closeServer});await runInteractiveUi(s.url,i)}finally{await closeServer()}}),u.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,a,t)}),u.command(`eval`).description(`Run evals against an Eve agent.`).argument(`[evalIds...]`,`Eval ids to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`).option(`--tag <tag...>`,`Run only cases (or evals) carrying a tag`).option(`--case <id...>`,`Run only specific case ids`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals and cases without running them`).option(`--timeout <ms>`,`Per-case timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent case executions per eval`).option(`--json`,`Output results as JSON`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),u}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:rewriteDevelopmentUrlShorthand(rewriteDeprecatedReplFlag(e));try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,resolveTuiTitle,rewriteDeprecatedReplFlag,runCli};
|
|
3
|
+
`).action(async t=>{let r=resolveRemoteDevelopmentServerUrl(t),{loadDevelopmentEnvironmentFiles:o}=await import(`#cli/dev/environment.js`);o(a);let runInteractiveUi=async(n,o)=>{if(e.log(``),o===`repl`){await(i.runDevelopmentRepl??await loadRunDevelopmentRepl())({serverUrl:n});return}let s=i.runDevelopmentTui??await loadRunDevelopmentTui(),c=resolveTuiDisplayOptions(t),l=resolveTuiTitle({name:t.name,remoteServerUrl:r,appRoot:a});l!==void 0&&(c.name=l),await s({serverUrl:n,...c})};if(r){e.log(renderCliTaggedLine(d,{message:`connecting to ${r}`,tag:`dev`,tone:`info`}));let i=resolveDevUiMode({options:t,interactive:hasInteractiveTerminal()});if(i===`headless`){e.log(renderCliTaggedLine(d,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}await runInteractiveUi(r,i);return}let s=await(i.startHost??await loadStartHost())(a,{host:t.host,port:t.port}),c=!1,closeServer=async()=>{c||(c=!0,await s.close())};try{e.log(renderCliTaggedLine(d,{message:`server listening at ${s.url}`,tag:`dev`,tone:`success`}));let r=hasInteractiveTerminal(),i=resolveDevUiMode({options:t,interactive:r});if(i===`headless`)return t.ui!==!1&&!r&&e.log(renderCliTaggedLine(d,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForShutdownSignal({close:closeServer});await runInteractiveUi(s.url,i)}finally{await closeServer()}}),u.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,a,t)}),u.command(`eval`).description(`Run evals against an Eve agent.`).argument(`[evalIds...]`,`Eval ids to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`).option(`--mock-models`,`Boot the local dev target with deterministic mock models`).option(`--tag <tag...>`,`Run only cases (or evals) carrying a tag`).option(`--case <id...>`,`Run only specific case ids`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--no-skips`,`Treat unmet eval requirements as failures`).option(`--list`,`Print discovered evals and cases without running them`).option(`--timeout <ms>`,`Per-case timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent case executions per eval`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-case ctx.log lines to stdout`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),u}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:rewriteDevelopmentUrlShorthand(rewriteDeprecatedReplFlag(e));try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,resolveTuiTitle,rewriteDeprecatedReplFlag,runCli};
|
|
@@ -26,6 +26,14 @@ export declare class Client {
|
|
|
26
26
|
* @throws {ClientError} If the server returns a non-successful status.
|
|
27
27
|
*/
|
|
28
28
|
info(): Promise<AgentInfoResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Performs an authenticated fetch against a path on this Eve target.
|
|
31
|
+
*
|
|
32
|
+
* This is the raw escape hatch for framework-owned routes (for example
|
|
33
|
+
* channel ingress or dev-only schedule dispatch) while preserving the same
|
|
34
|
+
* auth/header cascade used by {@link health}, {@link info}, and sessions.
|
|
35
|
+
*/
|
|
36
|
+
fetch(path: string, init?: RequestInit): Promise<Response>;
|
|
29
37
|
/**
|
|
30
38
|
* Creates a {@link ClientSession} handle for one conversation.
|
|
31
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH}from"#protocol/routes.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{createInitialSessionState}from"#client/session-utils.js";import{createClientUrl}from"#client/url.js";var Client=class{#e;#t;#n;#r;constructor(e){this.#n=e.host,this.#e=e.auth,this.#t=e.headers,this.#r=e.maxReconnectAttempts??3}async health(){let t=createClientUrl(this.#n,EVE_HEALTH_ROUTE_PATH),r=await this.#i(),i=await fetch(t,{headers:r});if(!i.ok){let e=await i.text();throw new ClientError(i.status,e)}return await i.json()}async info(){let e=createClientUrl(this.#n,EVE_INFO_ROUTE_PATH),r=await this.#i(),i=await fetch(e,{headers:r});if(!i.ok){let e=await i.text();throw new ClientError(i.status,e)}return await i.json()}session(e){let t;return t=typeof e==`string`?{continuationToken:e,streamIndex:0}:e||createInitialSessionState(),new ClientSession({host:this.#n,maxReconnectAttempts:this.#r,resolveHeaders:e=>this.#i(e)},t)}async#i(e){let t=new Headers,n=await resolveHeadersValue(this.#t);for(let[e,r]of Object.entries(n))t.set(e,r);if(e)for(let[n,r]of Object.entries(e))t.set(n,r);let r=await this.#a();return r&&t.set(`authorization`,r),t}async#a(){let e=this.#e;if(e){if(`bearer`in e){let t=(await resolveTokenValue(e.bearer)).trim();return t.length===0?void 0:`Bearer ${t}`}if(`basic`in e){let t=await resolveTokenValue(e.basic.password);return`Basic ${encodeBasicCredentials(e.basic.username,t)}`}}}};async function resolveTokenValue(e){return typeof e==`function`?e():e}async function resolveHeadersValue(e){return e===void 0?{}:typeof e==`function`?await e():e}function encodeBasicCredentials(e,t){let n=new TextEncoder().encode(`${e}:${t}`),r=Array.from(n,e=>String.fromCodePoint(e)).join(``);return btoa(r)}export{Client};
|
|
1
|
+
import{EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH}from"#protocol/routes.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{createInitialSessionState}from"#client/session-utils.js";import{createClientUrl}from"#client/url.js";var Client=class{#e;#t;#n;#r;constructor(e){this.#n=e.host,this.#e=e.auth,this.#t=e.headers,this.#r=e.maxReconnectAttempts??3}async health(){let t=createClientUrl(this.#n,EVE_HEALTH_ROUTE_PATH),r=await this.#i(),i=await fetch(t,{headers:r});if(!i.ok){let e=await i.text();throw new ClientError(i.status,e)}return await i.json()}async info(){let e=createClientUrl(this.#n,EVE_INFO_ROUTE_PATH),r=await this.#i(),i=await fetch(e,{headers:r});if(!i.ok){let e=await i.text();throw new ClientError(i.status,e)}return await i.json()}async fetch(e,t={}){let n=createClientUrl(this.#n,e),r=await this.#i(headersInitToRecord(t.headers));return await fetch(n,{...t,headers:r})}session(e){let t;return t=typeof e==`string`?{continuationToken:e,streamIndex:0}:e||createInitialSessionState(),new ClientSession({host:this.#n,maxReconnectAttempts:this.#r,resolveHeaders:e=>this.#i(e)},t)}async#i(e){let t=new Headers,n=await resolveHeadersValue(this.#t);for(let[e,r]of Object.entries(n))t.set(e,r);if(e)for(let[n,r]of Object.entries(e))t.set(n,r);let r=await this.#a();return r&&t.set(`authorization`,r),t}async#a(){let e=this.#e;if(e){if(`bearer`in e){let t=(await resolveTokenValue(e.bearer)).trim();return t.length===0?void 0:`Bearer ${t}`}if(`basic`in e){let t=await resolveTokenValue(e.basic.password);return`Basic ${encodeBasicCredentials(e.basic.username,t)}`}}}};async function resolveTokenValue(e){return typeof e==`function`?e():e}async function resolveHeadersValue(e){return e===void 0?{}:typeof e==`function`?await e():e}function headersInitToRecord(e){return e===void 0?{}:Object.fromEntries(new Headers(e).entries())}function encodeBasicCredentials(e,t){let n=new TextEncoder().encode(`${e}:${t}`),r=Array.from(n,e=>String.fromCodePoint(e)).join(``);return btoa(r)}export{Client};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EVE_CREATE_SESSION_ROUTE_PATH,createEveContinueSessionRoutePath}from"#protocol/routes.js";import{openStreamBody,openStreamIterable}from"#client/open-stream.js";import{EVE_SESSION_ID_HEADER,isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{ClientError}from"#client/client-error.js";import{advanceSession}from"#client/session-utils.js";import{createClientUrl}from"#client/url.js";import{MessageResponse}from"#client/message-response.js";import{normalizeOutputSchemaForRequest}from"#client/output-schema.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";var ClientSession=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get state(){return this.#t}async send(e){let t=normalizeSendTurnInput(e),n=this.#t,{continuationToken:r,sessionId:i}=await this.#n(t,n);return new MessageResponse({continuationToken:r,createStream:()=>this.#r(i,r,n,t),sessionId:i})}stream(e){let t=this.#t.sessionId;if(!t)throw Error(`Session has no session ID. Send a message first.`);return
|
|
1
|
+
import{EVE_CREATE_SESSION_ROUTE_PATH,createEveContinueSessionRoutePath}from"#protocol/routes.js";import{openStreamBody,openStreamIterable}from"#client/open-stream.js";import{EVE_SESSION_ID_HEADER,isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{ClientError}from"#client/client-error.js";import{advanceSession}from"#client/session-utils.js";import{createClientUrl}from"#client/url.js";import{MessageResponse}from"#client/message-response.js";import{normalizeOutputSchemaForRequest}from"#client/output-schema.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";var ClientSession=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}get state(){return this.#t}async send(e){let t=normalizeSendTurnInput(e),n=this.#t,{continuationToken:r,sessionId:i}=await this.#n(t,n);return new MessageResponse({continuationToken:r,createStream:()=>this.#r(i,r,n,t),sessionId:i})}stream(e){let t=this.#t.sessionId;if(!t)throw Error(`Session has no session ID. Send a message first.`);return this.#a(t,e)}async#n(n,r){let a=r.sessionId?createEveContinueSessionRoutePath(r.sessionId):EVE_CREATE_SESSION_ROUTE_PATH,o=createClientUrl(this.#e.host,a),s=await this.#e.resolveHeaders(n.headers);s.set(`content-type`,`application/json`);let c=createHandleMessageBody({input:n,outputSchema:normalizeOutputSchemaForRequest(n.outputSchema),session:r});if(c===null)throw Error(`Session.send requires a non-empty message, inputResponses, or both.`);let l=await postTurnWithRetry({body:JSON.stringify(c),headers:s,mustDeliver:(n.inputResponses?.length??0)>0,signal:n.signal,url:o}),u=await l.json(),d=(typeof u.sessionId==`string`?u.sessionId:void 0)??l.headers.get(EVE_SESSION_ID_HEADER)?.trim()??r.sessionId;if(!d)throw Error(`Message route did not return a session id.`);return{continuationToken:typeof u.continuationToken==`string`?u.continuationToken:void 0,sessionId:d}}async*#r(e,t,n,r){let i=[];try{let t=n.sessionId===e?n.streamIndex:0,o=this.#e.maxReconnectAttempts;for(;;){let n=await this.#i(e,t,r.signal,r.headers),s=!1;try{for await(let e of readNdjsonStream(n))if(i.push(e),t+=1,yield e,isCurrentTurnBoundaryEvent(e)){s=!0;break}}catch(e){if(!isStreamDisconnectError(e))throw e}if(s||o<=0)break;--o}}finally{this.#t=advanceSession({continuationToken:t,events:i,sessionId:e,session:n})}}async#i(e,t,r,i){return await openStreamBody({host:this.#e.host,resolveHeaders:()=>this.#e.resolveHeaders(i),sessionId:e,signal:r,startIndex:t})}async*#a(e,t){let n=this.#t,i=t?.startIndex??n.streamIndex,a=[];try{for await(let n of openStreamIterable({host:this.#e.host,maxReconnectAttempts:this.#e.maxReconnectAttempts,resolveHeaders:()=>this.#e.resolveHeaders(),sessionId:e,signal:t?.signal,startIndex:i}))a.push(n),yield n}finally{this.#t=advanceSession({continuationToken:n.continuationToken,events:a,session:{...n,sessionId:e,streamIndex:i},sessionId:e})}}};async function postTurnWithRetry(e){let t=e.mustDeliver?10:1,n,r;for(let i=0;i<t;i+=1){let a=await fetch(e.url,{body:e.body,headers:e.headers,method:`POST`,signal:e.signal??null});if(a.ok)return a;if(n=a.status,r=await a.text(),!isRetryableDeliveryFailure(a.status,r))throw new ClientError(a.status,r);i<t-1&&await sleep(200)}throw new ClientError(n??0,r??`Failed to deliver session turn.`)}function isRetryableDeliveryFailure(e,t){return e===500&&/target session was not found/i.test(t)}async function sleep(e){await new Promise(t=>setTimeout(t,e))}function normalizeSendTurnInput(e){return typeof e==`string`?{message:e}:e}function createHandleMessageBody(e){let t={};return e.input.message!==void 0&&(t.message=e.input.message),e.input.inputResponses!==void 0&&e.input.inputResponses.length>0&&(t.inputResponses=e.input.inputResponses),e.input.clientContext!==void 0&&(t.clientContext=e.input.clientContext),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.session.continuationToken!==void 0&&(t.continuationToken=e.session.continuationToken),Object.keys(t).length===0||e.session.continuationToken===void 0&&t.message===void 0||e.session.continuationToken!==void 0&&t.message===void 0&&t.inputResponses===void 0?null:t}export{ClientSession};
|
|
@@ -173,7 +173,6 @@ export interface AgentInfoEntry extends AgentInfoSource {
|
|
|
173
173
|
export interface AgentInfoToolEntry extends AgentInfoEntry {
|
|
174
174
|
readonly description: string;
|
|
175
175
|
readonly hasAuth: boolean;
|
|
176
|
-
readonly hasCompactionHook: boolean;
|
|
177
176
|
readonly hasExecute: boolean;
|
|
178
177
|
readonly hasModelOutputProjection: boolean;
|
|
179
178
|
readonly hasOutputSchema: boolean;
|
|
@@ -288,6 +287,10 @@ export interface AgentInfoResult {
|
|
|
288
287
|
readonly name: string;
|
|
289
288
|
readonly outputSchema?: unknown;
|
|
290
289
|
};
|
|
290
|
+
readonly capabilities: {
|
|
291
|
+
readonly devRoutes: boolean;
|
|
292
|
+
readonly mockModels: boolean;
|
|
293
|
+
};
|
|
291
294
|
readonly channels: AgentInfoChannels;
|
|
292
295
|
readonly connections: readonly AgentInfoConnectionEntry[];
|
|
293
296
|
readonly diagnostics: {
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"moduleVersions": {
|
|
3
|
-
"@ai-sdk/anthropic": "4.0.0-canary.
|
|
3
|
+
"@ai-sdk/anthropic": "4.0.0-canary.65",
|
|
4
4
|
"chat": "4.29.0",
|
|
5
5
|
"@chat-adapter/slack": "4.29.0",
|
|
6
6
|
"@chat-adapter/state-memory": "4.29.0",
|
|
7
7
|
"chokidar": "5.0.0",
|
|
8
8
|
"commander": "14.0.3",
|
|
9
9
|
"experimental-ai-sdk-code-mode": "1.0.14",
|
|
10
|
-
"@ai-sdk/google": "4.0.0-canary.
|
|
10
|
+
"@ai-sdk/google": "4.0.0-canary.80",
|
|
11
11
|
"gray-matter": "4.0.3",
|
|
12
12
|
"jose": "6.2.3",
|
|
13
13
|
"just-bash": "3.0.1",
|
|
14
14
|
"jsonc-parser": "3.3.1",
|
|
15
|
-
"@ai-sdk/mcp": "2.0.0-canary.
|
|
16
|
-
"@ai-sdk/openai": "4.0.0-canary.
|
|
15
|
+
"@ai-sdk/mcp": "2.0.0-canary.62",
|
|
16
|
+
"@ai-sdk/openai": "4.0.0-canary.72",
|
|
17
17
|
"@opentelemetry/api": "1.9.1",
|
|
18
|
-
"@ai-sdk/otel": "1.0.0-canary.
|
|
18
|
+
"@ai-sdk/otel": "1.0.0-canary.117",
|
|
19
19
|
"picocolors": "1.1.1",
|
|
20
20
|
"@ai-sdk/provider": "4.0.0-canary.18",
|
|
21
21
|
"@standard-schema/spec": "1.1.0",
|
|
22
22
|
"turndown": "7.2.4",
|
|
23
23
|
"@vercel/oidc": "3.5.0",
|
|
24
24
|
"@vercel/sandbox": "2.1.0",
|
|
25
|
-
"@workflow/core": "5.0.0-beta.
|
|
25
|
+
"@workflow/core": "5.0.0-beta.14",
|
|
26
26
|
"@workflow/errors": "5.0.0-beta.7",
|
|
27
|
-
"@workflow/world": "5.0.0-beta.
|
|
27
|
+
"@workflow/world": "5.0.0-beta.8",
|
|
28
28
|
"zod": "4.4.3",
|
|
29
29
|
"zod-validation-error": "5.0.0"
|
|
30
30
|
},
|
|
@@ -11,34 +11,21 @@ import { ToolExecuteFunction, Tool, Experimental_SandboxSession, ProviderDefined
|
|
|
11
11
|
* - `compaction`: a context compaction step (billed at executor rates).
|
|
12
12
|
* - `message`: an executor sampling iteration (billed at executor rates).
|
|
13
13
|
* - `advisor_message`: an advisor sub-inference (billed at the advisor
|
|
14
|
-
* model's rates
|
|
15
|
-
* usage
|
|
16
|
-
*
|
|
14
|
+
* model's rates). Advisor token usage is NOT rolled into the top-level
|
|
15
|
+
* usage totals because it bills at a different rate; inspect this array
|
|
16
|
+
* directly for advisor billing.
|
|
17
|
+
* - `fallback_message`: a server-side fallback attempt that served the turn.
|
|
18
|
+
* Inspect this array for exact per-model attribution on a turn that fell
|
|
19
|
+
* back.
|
|
17
20
|
*/
|
|
18
21
|
type AnthropicUsageIteration = {
|
|
19
|
-
type: 'compaction' | 'message';
|
|
22
|
+
type: 'compaction' | 'message' | 'advisor_message' | 'fallback_message';
|
|
20
23
|
/**
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Number of output tokens generated in this iteration.
|
|
26
|
-
*/
|
|
27
|
-
outputTokens: number;
|
|
28
|
-
/**
|
|
29
|
-
* Number of cache-creation input tokens consumed in this iteration.
|
|
30
|
-
*/
|
|
31
|
-
cacheCreationInputTokens?: number;
|
|
32
|
-
/**
|
|
33
|
-
* Number of cache-read input tokens consumed in this iteration.
|
|
34
|
-
*/
|
|
35
|
-
cacheReadInputTokens?: number;
|
|
36
|
-
} | {
|
|
37
|
-
type: 'advisor_message';
|
|
38
|
-
/**
|
|
39
|
-
* The advisor model that produced this iteration.
|
|
24
|
+
* The model that produced this iteration. Populated for the per-model
|
|
25
|
+
* attribution cases (the fallback chain and advisor sub-inferences) and
|
|
26
|
+
* absent otherwise.
|
|
40
27
|
*/
|
|
41
|
-
model
|
|
28
|
+
model?: string;
|
|
42
29
|
/**
|
|
43
30
|
* Number of input tokens consumed in this iteration.
|
|
44
31
|
*/
|
|
@@ -48,21 +35,49 @@ type AnthropicUsageIteration = {
|
|
|
48
35
|
*/
|
|
49
36
|
outputTokens: number;
|
|
50
37
|
/**
|
|
51
|
-
* Number of cache-creation input tokens consumed
|
|
52
|
-
* sub-inference. Nonzero when advisor-side caching is enabled and
|
|
53
|
-
* the advisor writes a fresh cache entry.
|
|
38
|
+
* Number of cache-creation input tokens consumed in this iteration.
|
|
54
39
|
*/
|
|
55
40
|
cacheCreationInputTokens?: number;
|
|
56
41
|
/**
|
|
57
|
-
* Number of cache-read input tokens consumed
|
|
58
|
-
* sub-inference. Nonzero on the second and later advisor calls
|
|
59
|
-
* when advisor-side caching is enabled.
|
|
42
|
+
* Number of cache-read input tokens consumed in this iteration.
|
|
60
43
|
*/
|
|
61
44
|
cacheReadInputTokens?: number;
|
|
62
45
|
};
|
|
63
46
|
interface AnthropicMessageMetadata {
|
|
64
47
|
usage: JSONObject;
|
|
65
48
|
stopSequence: string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Details about why the request stopped. Present only when the API returns
|
|
51
|
+
* a `refusal` stop reason together with a `stop_details` object (a
|
|
52
|
+
* classifier block or a model refusal).
|
|
53
|
+
*
|
|
54
|
+
* Branch on the finish reason (`content-filter`), not on this object: the
|
|
55
|
+
* API may return a refusal with no details at all, so this field can be
|
|
56
|
+
* absent even on a refusal and should not be relied upon being present.
|
|
57
|
+
*/
|
|
58
|
+
stopDetails?: {
|
|
59
|
+
/**
|
|
60
|
+
* The kind of stop detail. `'refusal'` for classifier blocks and model
|
|
61
|
+
* refusals.
|
|
62
|
+
*/
|
|
63
|
+
type: string;
|
|
64
|
+
/**
|
|
65
|
+
* The classifier category that triggered the block, e.g. `'cyber'` or
|
|
66
|
+
* `'bio'`. Absent for model refusals and other cases.
|
|
67
|
+
*/
|
|
68
|
+
category?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Human-readable explanation of why the request was blocked. May be
|
|
71
|
+
* absent even on a refusal.
|
|
72
|
+
*/
|
|
73
|
+
explanation?: string;
|
|
74
|
+
/**
|
|
75
|
+
* The canonical id of a model to retry directly. Populated only when the
|
|
76
|
+
* request included fallbacks and the fallback attempt could not be made
|
|
77
|
+
* (e.g. the fallback model was rate limited or overloaded).
|
|
78
|
+
*/
|
|
79
|
+
recommendedModel?: string;
|
|
80
|
+
};
|
|
66
81
|
/**
|
|
67
82
|
* Usage breakdown by iteration when compaction is triggered.
|
|
68
83
|
*
|
|
@@ -168,7 +183,7 @@ interface AnthropicMessageMetadata {
|
|
|
168
183
|
} | null;
|
|
169
184
|
}
|
|
170
185
|
|
|
171
|
-
type AnthropicModelId = 'claude-3-haiku-20240307' | 'claude-haiku-4-5-20251001' | 'claude-haiku-4-5' | 'claude-opus-4-0' | 'claude-opus-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-opus-4-1' | 'claude-opus-4-5' | 'claude-opus-4-5-20251101' | 'claude-sonnet-4-0' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-5' | 'claude-sonnet-4-6' | 'claude-opus-4-6' | 'claude-opus-4-7' | 'claude-opus-4-8' | (string & {});
|
|
186
|
+
type AnthropicModelId = 'claude-3-haiku-20240307' | 'claude-haiku-4-5-20251001' | 'claude-haiku-4-5' | 'claude-opus-4-0' | 'claude-opus-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-opus-4-1' | 'claude-opus-4-5' | 'claude-opus-4-5-20251101' | 'claude-sonnet-4-0' | 'claude-sonnet-4-20250514' | 'claude-sonnet-4-5-20250929' | 'claude-sonnet-4-5' | 'claude-sonnet-4-6' | 'claude-opus-4-6' | 'claude-opus-4-7' | 'claude-opus-4-8' | 'claude-fable-5' | (string & {});
|
|
172
187
|
declare const anthropicLanguageModelOptions: z.ZodObject<{
|
|
173
188
|
sendReasoning: z.ZodOptional<z.ZodBoolean>;
|
|
174
189
|
structuredOutputMode: z.ZodOptional<z.ZodEnum<{
|
|
@@ -239,6 +254,16 @@ declare const anthropicLanguageModelOptions: z.ZodObject<{
|
|
|
239
254
|
us: "us";
|
|
240
255
|
global: "global";
|
|
241
256
|
}>>;
|
|
257
|
+
fallbacks: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
258
|
+
model: z.ZodString;
|
|
259
|
+
max_tokens: z.ZodOptional<z.ZodNumber>;
|
|
260
|
+
thinking: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
261
|
+
output_config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
262
|
+
speed: z.ZodOptional<z.ZodEnum<{
|
|
263
|
+
fast: "fast";
|
|
264
|
+
standard: "standard";
|
|
265
|
+
}>>;
|
|
266
|
+
}, z.core.$strip>>>;
|
|
242
267
|
anthropicBeta: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
243
268
|
contextManagement: z.ZodOptional<z.ZodObject<{
|
|
244
269
|
edits: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|