goatchain-cli 0.0.4-beta.31 → 0.0.4-beta.32
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/dist/cli.mjs +3 -3
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -784,7 +784,7 @@ When referencing specific functions or pieces of code include the pattern \`file
|
|
|
784
784
|
user: Where are errors from the client handled?
|
|
785
785
|
assistant: Clients are marked as failed in the \`connectToServer\` function in src/services/process.ts:712.
|
|
786
786
|
</example>
|
|
787
|
-
`;async function yA($){let U=_1("0.0.4-beta.
|
|
787
|
+
`;async function yA($){let U=_1("0.0.4-beta.32")??await nn($.cwd),_=await sF($.env),G=_.cache,J=G.settings??{},Q=_1(J.cwd),Y=Array.isArray(J.focusFiles)?J.focusFiles.map((V)=>String(V??"")).filter(Boolean):void 0,K=$.cwd||Q||".",X={GOATCHAIN_VERSION:U??"dev",...$.env.GOATCHAIN_MODEL?{GOATCHAIN_MODEL:$.env.GOATCHAIN_MODEL}:{},...$.env.GOATCHAIN_CONTEXT_WINDOW?{GOATCHAIN_CONTEXT_WINDOW:$.env.GOATCHAIN_CONTEXT_WINDOW}:{},...$.env.GOATCHAIN_TEMPERATURE?{GOATCHAIN_TEMPERATURE:$.env.GOATCHAIN_TEMPERATURE}:{},...$.env.GOATCHAIN_TOOL_APPROVALS?{GOATCHAIN_TOOL_APPROVALS:$.env.GOATCHAIN_TOOL_APPROVALS}:{},...$.env.GOATCHAIN_SKIP_APPROVAL?{GOATCHAIN_SKIP_APPROVAL:$.env.GOATCHAIN_SKIP_APPROVAL}:{},...$.env.GOATCHAIN_STARTUP_TOAST?{GOATCHAIN_STARTUP_TOAST:$.env.GOATCHAIN_STARTUP_TOAST}:{},...$.env.GOATCHAIN_STARTUP_UPGRADE_TOAST?{GOATCHAIN_STARTUP_UPGRADE_TOAST:$.env.GOATCHAIN_STARTUP_UPGRADE_TOAST}:{},...$.env.GOATCHAIN_OPENAI_BASE_URL?{GOATCHAIN_OPENAI_BASE_URL:$.env.GOATCHAIN_OPENAI_BASE_URL}:{},...$.env.OPENAI_BASE_URL?{OPENAI_BASE_URL:$.env.OPENAI_BASE_URL}:{},...$.env.OPENAI_API_KEY?{OPENAI_API_KEY:$.env.OPENAI_API_KEY}:{}};if(!X.GOATCHAIN_MODEL&&_1(J.model))X.GOATCHAIN_MODEL=String(J.model);if(!X.GOATCHAIN_CONTEXT_WINDOW&&hU(J.contextWindow)!=null)X.GOATCHAIN_CONTEXT_WINDOW=String(J.contextWindow);if(!X.GOATCHAIN_TEMPERATURE&&hU(J.temperature)!=null)X.GOATCHAIN_TEMPERATURE=String(J.temperature);if(!X.GOATCHAIN_TOOL_APPROVALS&&J.toolApprovals==="auto")X.GOATCHAIN_TOOL_APPROVALS="auto";if(!X.GOATCHAIN_TOOL_APPROVALS&&J.toolApprovals==="all")X.GOATCHAIN_TOOL_APPROVALS="all";if(!X.GOATCHAIN_TOOL_APPROVALS&&J.toolApprovals==="manual")X.GOATCHAIN_TOOL_APPROVALS="auto";if(!X.GOATCHAIN_OPENAI_BASE_URL&&_1(J.baseUrl))X.GOATCHAIN_OPENAI_BASE_URL=String(J.baseUrl);if(!X.OPENAI_API_KEY&&_1(J.apiKey))X.OPENAI_API_KEY=String(J.apiKey);return{context:{system:vA,cwd:K,env:X,...Y?.length?{focusFiles:Y}:{}},cacheDir:_.dir,cacheFile:_.filePath,cache:G}}async function nn($){try{let[{readFile:U},_]=await Promise.all([import("node:fs/promises"),import("node:path")]),G=await U(_.join($,"package.json"),"utf8"),J=JSON.parse(G),Q=typeof J?.version==="string"?J.version:null;return Q&&Q.trim()?Q.trim():null}catch{return null}}import{watch as g3}from"vue";function qJ($,U){let _=String($??"").replace(/\s+/g," ").trim();if(_.length<=U)return _;return`${_.slice(0,Math.max(0,U-1))}…`}function pn($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter((_)=>_&&typeof _==="object"&&_.type==="text"&&typeof _.text==="string").map((_)=>_.text).join(" ");if($&&typeof $==="object"){let U=$.text;if(typeof U==="string")return U}return""}function DJ($){if(!$||typeof $!=="object")return"";let U=String($.role??"");if(U==="user")return pn($.content);if(U==="tool")return String($.result?.output??"");if(U==="assistant"){let _=Array.isArray($.parts)?$.parts:[],G=_.filter((Q)=>Q?.type==="markdown").map((Q)=>String(Q.markdown??"")).join(`
|
|
788
788
|
`);if(G.trim())return G;let J=_.find((Q)=>Q?.type==="status");return J?String(J.text??""):""}return""}function bA($){let _=(Array.isArray($)?$:[]).find((J)=>J&&typeof J==="object"&&J.role==="user"&&qJ(DJ(J),999).length>0),G=_?DJ(_):"";return qJ(G||"New session",60)||"New session"}function gA($){let _=(Array.isArray($)?$:[]).find((J)=>J&&typeof J==="object"&&J.role==="user"&&qJ(DJ(J),999).length>0),G=_?DJ(_):"";return qJ(G||"New session",120)||"New session"}function xA($){let _=[...Array.isArray($)?$:[]].reverse().find((G)=>{if(!G||typeof G!=="object"||G.role!=="user")return!1;return qJ(DJ(G),999).length>0});return qJ(_?DJ(_):"",180)}function y3($){return`${$}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function UH($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function b3($){if($==null)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map(b3).join("");if(UH($)){if(typeof $.text==="string")return String($.text);if(String($.type??"")==="image")return"[image]";try{return JSON.stringify($)}catch{return String($)}}return String($)}function on($){if(UH($))return $;if(typeof $==="string"){let U=$.trim();if(!U)return{};try{let _=JSON.parse(U);return UH(_)?_:{_raw:$}}catch{return{_raw:$}}}return{}}function uA($){let U=$?.context?.messages,_=Array.isArray(U)?U:[],G=[],J=new Map;for(let Q of _){let Y=String(Q?.role??"");if(Y==="user"){G.push({id:y3("m"),role:"user",content:b3(Q?.content)});continue}if(Y==="assistant"){let K=[],X=b3(Q?.content);if(X)K.push({type:"markdown",markdown:X});let V=Array.isArray(Q?.tool_calls)?Q.tool_calls:[];for(let Z of V){let W=String(Z?.id??"").trim(),N=String(Z?.function?.name??"tool"),H=on(Z?.function?.arguments);if(!W)continue;let F={id:W,name:N,arguments:H};K.push({type:"tool_call",call:F}),J.set(W,G.length)}G.push({id:y3("m"),role:"assistant",parts:[{type:"status",text:""},...K]});continue}if(Y==="tool"){let K=String(Q?.tool_call_id??"").trim(),X=b3(Q?.content),V=Q?.isError?"error":"success",Z={id:K||y3("tool"),output:X,status:V};G.push({id:y3("m"),role:"tool",result:Z});let W=K?J.get(K):void 0;if(W==null)continue;let N=G[W];if(!N||N.role!=="assistant")continue;G[W]={...N,parts:[...N.parts,{type:"tool_result",result:Z}]};continue}}return G}function hA($){let U=[];for(let _ of $){if(_.role==="user"){U.push({role:"user",content:String(_.content??"")});continue}if(_.role==="assistant"){let G=_.parts.filter((Y)=>Y.type==="markdown").map((Y)=>String(Y.markdown??"")).join(""),J=_.parts.flatMap((Y)=>Y.type==="tool_call"?[Y.call]:[]),Q=J.length?J.map((Y)=>({id:Y.id,type:"function",function:{name:Y.name,arguments:Y.arguments}})):void 0;U.push({role:"assistant",content:G,...Q?{tool_calls:Q}:{}});continue}if(_.role==="tool")U.push({role:"tool",tool_call_id:String(_.result.id??""),content:String(_.result.output??""),..._.result.status==="error"?{isError:!0}:{}})}return U}function mA($){return String($?.id??"").trim()}function an($){return Number($?.state?.updatedAt??$?.state?.lastActiveAt??0)||0}function cA($){let U=$?.context?.messages;return Array.isArray(U)?U:[]}function tn($){let U=Number($?.context?.messageCount??0);if(Number.isFinite(U)&&U>=0)return U;return cA($).length}function en($){let U=$?.stats?.usage;return U&&typeof U==="object"?U:null}function dA($){let U=mA($);if(!U)return null;let _=an($),G=cA($),J=_1($?.state?.title)??bA(G),Q=gA(G),Y=_1($?.context?.lastMessagePreview)??xA(G),K=tn($);return{id:U,updatedAt:_,title:J,summary:Q,messageCount:K,lastMessage:Y}}function p9($,U){let _=mA(U);if(_)$.state.sessionId=_;let G=uA(U);$.state.messages.splice(0,$.state.messages.length,...G),$.state.revertedMessages.splice(0,$.state.revertedMessages.length),$.state.selectedToolCallId=null,$.state.runningToolCallId=null,$.state.paused=null,$.state.approval.active=null,$.state.approval.pendingAutoRun=null,$.state.approval.queue=[],$.state.approval.decisions={};let J=en(U);if(J){let Q=Number(J.promptTokens),Y=Number(J.completionTokens);if(Number.isFinite(Q))$.state.usage.prompt_tokens=Q;if(Number.isFinite(Y))$.state.usage.completion_tokens=Y;if(Number.isFinite(Q)&&Number.isFinite(Y))$.state.usage.total_tokens=Q+Y;else{let K=Number(J.totalTokens);if(Number.isFinite(K))$.state.usage.total_tokens=K}}}function lA($){let U=Array.isArray($)?$:[];return hA(U)}function iA($){let U=$.store,_=U?.state?.context?.env??{},G=_1(_.GOATCHAIN_OPENAI_BASE_URL||_.OPENAI_BASE_URL),J=_1(_.OPENAI_API_KEY);return{version:1,updatedAt:Date.now(),settings:{cwd:_1(U?.state?.context?.cwd),focusFiles:U?.state?.context?.focusFiles??void 0,model:_1(U?.state?.config?.model),contextWindow:hU(U?.state?.config?.context_window),temperature:hU(U?.state?.config?.temperature),baseUrl:G,apiKey:J,toolApprovals:U?.state?.approval?.mode==="all"?"all":"auto"},lastSessionId:_1(U?.state?.sessionId)||$.prev.lastSessionId}}function rA($,U){let _=null,G=!1,J=!1,Q=async()=>{if(G){J=!0;return}G=!0,J=!1;try{await $()}finally{if(G=!1,J)Y()}},Y=()=>{if(J=!0,_)clearTimeout(_);_=setTimeout(Q,Math.max(0,U||0))};return{schedule:Y}}function sn($){return String($?.id??"").trim()}function nA($){let U=null,_=$.sessionsBackend??null;return{sessions:_?{async list(){return(await _.list()).map(dA).filter(Boolean)},async use(Q){let Y=String(Q??"").trim();if(!Y||!U)return;if(String(U.state.sessionId??"")===Y)return;let K=await _.get(Y);if(!K)return;p9(U,K)},async createNew(){if(!U)return;let Q=await _.create();if(!Q)return;p9(U,Q)},async delete(Q){let Y=String(Q??"").trim();if(!Y)return;if(await _.destroy(Y),U&&String(U.state.sessionId??"")===Y)U.state.sessionId=""},async fork(Q){if(!U)return;let Y=Array.isArray(Q?.messages)?Q.messages:[];if(typeof _.createWithMessages!=="function"){let X=await _.create();if(X)U.state.sessionId=sn(X);U.state.messages.splice(0,U.state.messages.length,...Y),U.state.revertedMessages.splice(0,U.state.revertedMessages.length),U.state.selectedToolCallId=null,U.state.usage.prompt_tokens=0,U.state.usage.completion_tokens=0,U.state.usage.total_tokens=0;return}let K=await _.createWithMessages(lA(Y));if(!K)return;p9(U,K)}}:void 0,onStoreCreated:(Q)=>{if(U=Q,_){let K=String(Q.state.sessionId??"").trim();if(K)_.get(K).then((X)=>{if(X&&U)p9(U,X)}).catch(()=>{})}let Y=rA(async()=>{try{let K=iA({prev:$.cache,store:Q});await $H($.cacheFile,K)}catch(K){console.warn("[goatchain] Failed to persist cache:",K)}},300);g3(()=>Q.state.sessionId,Y.schedule),g3(()=>Q.state.config,Y.schedule,{deep:!0}),g3(()=>Q.state.context,Y.schedule,{deep:!0}),g3(()=>Q.state.approval.mode,Y.schedule),Y.schedule()}}}async function _H($){let U=$.sessionsBackend,_=_1($.envSessionId);if(U&&_){if(await U.get(_))return _}return _}function pA(){return async($)=>{let U=String($?.name??"tool");return{id:String($?.id??"tool"),status:"error",output:["Tool execution is handled by the GoatChain agent.",`This UI cannot run tool "${U}" locally.`].join(`
|
|
789
789
|
`)}}}import*as oA from"node:path";function $p($){return oA.join($,"state")}function Up($){$.env.GOATCHAIN_STATE_DIR=$.stateDir,$.context.env.GOATCHAIN_STATE_DIR=$.stateDir}async function JH($){let{context:U,cacheDir:_,cacheFile:G,cache:J}=await yA({cwd:$.cwd,env:$.env}),Q=$p(_);Up({env:$.env,context:U,stateDir:Q});let Y=IA({context:U,processEnv:$.env,stateDir:Q}),K=Y?.__sessions??null,X=await _H({sessionsBackend:K,envSessionId:$.env.GOATCHAIN_SESSION_ID});$.env.GOATCHAIN_SESSION_ID=X??"",U.env.GOATCHAIN_SESSION_ID=X??"";let{sessions:V,onStoreCreated:Z}=nA({cacheFile:G,cache:J,sessionsBackend:K});return{toolRunner:pA(),context:U,agent:Y,onStoreCreated:Z,sessions:V}}import Ta from"node:fs";import{nextTick as WQ}from"vue";var aA=($=0)=>(U)=>`\x1B[${U+$}m`,tA=($=0)=>(U)=>`\x1B[${38+$};5;${U}m`,eA=($=0)=>(U,_,G)=>`\x1B[${38+$};2;${U};${_};${G}m`,g0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},pV$=Object.keys(g0.modifier),_p=Object.keys(g0.color),Jp=Object.keys(g0.bgColor),oV$=[..._p,...Jp];function Gp(){let $=new Map;for(let[U,_]of Object.entries(g0)){for(let[G,J]of Object.entries(_))g0[G]={open:`\x1B[${J[0]}m`,close:`\x1B[${J[1]}m`},_[G]=g0[G],$.set(J[0],J[1]);Object.defineProperty(g0,U,{value:_,enumerable:!1})}return Object.defineProperty(g0,"codes",{value:$,enumerable:!1}),g0.color.close="\x1B[39m",g0.bgColor.close="\x1B[49m",g0.color.ansi=aA(),g0.color.ansi256=tA(),g0.color.ansi16m=eA(),g0.bgColor.ansi=aA(10),g0.bgColor.ansi256=tA(10),g0.bgColor.ansi16m=eA(10),Object.defineProperties(g0,{rgbToAnsi256:{value(U,_,G){if(U===_&&_===G){if(U<8)return 16;if(U>248)return 231;return Math.round((U-8)/247*24)+232}return 16+36*Math.round(U/255*5)+6*Math.round(_/255*5)+Math.round(G/255*5)},enumerable:!1},hexToRgb:{value(U){let _=/[a-f\d]{6}|[a-f\d]{3}/i.exec(U.toString(16));if(!_)return[0,0,0];let[G]=_;if(G.length===3)G=[...G].map((Q)=>Q+Q).join("");let J=Number.parseInt(G,16);return[J>>16&255,J>>8&255,J&255]},enumerable:!1},hexToAnsi256:{value:(U)=>g0.rgbToAnsi256(...g0.hexToRgb(U)),enumerable:!1},ansi256ToAnsi:{value(U){if(U<8)return 30+U;if(U<16)return 90+(U-8);let _,G,J;if(U>=232)_=((U-232)*10+8)/255,G=_,J=_;else{U-=16;let K=U%36;_=Math.floor(U/36)/5,G=Math.floor(K/6)/5,J=K%6/5}let Q=Math.max(_,G,J)*2;if(Q===0)return 30;let Y=30+(Math.round(J)<<2|Math.round(G)<<1|Math.round(_));if(Q===2)Y+=60;return Y},enumerable:!1},rgbToAnsi:{value:(U,_,G)=>g0.ansi256ToAnsi(g0.rgbToAnsi256(U,_,G)),enumerable:!1},hexToAnsi:{value:(U)=>g0.ansi256ToAnsi(g0.hexToAnsi256(U)),enumerable:!1}}),g0}var Qp=Gp(),Z1=Qp;function u2($){return $.replace(/\r\n/g,`
|
|
790
790
|
`).replace(/\r/g,`
|
|
@@ -817,7 +817,7 @@ assistant: Clients are marked as failed in the \`connectToServer\` function in s
|
|
|
817
817
|
`)}),F=TJ(()=>0);function q(O){if(O.preventDefault(),O.stopPropagation(),O.key==="Escape")U("close"),G.invalidate()}let E=N4(()=>({rect:W.value?{x:0,y:0,w:_.snapshot().cols,h:_.snapshot().rows}:{x:0,y:0,w:0,h:0},zIndex:Z.value,visible:W.value,focusable:!0,handlers:{click:(O)=>{O.preventDefault(),O.stopPropagation(),U("close"),G.invalidate()},keydown:q}})),P=N4(()=>({rect:W.value?N.value:{x:0,y:0,w:0,h:0},zIndex:Z.value+1,visible:W.value,focusable:!0,handlers:{click:(O)=>{O.preventDefault(),O.stopPropagation();let w=Q.value,S=P.id.value;if(w&&S)w.focus(S)},keydown:q}}));return Fa(()=>{if(!W.value)return;let O=Q.value,w=P.id.value||E.id.value;if(!O||!w)return;O.focus(w)}),B4(()=>({zIndex:$.zIndex,rect:W.value?{x:0,y:0,w:_.snapshot().cols,h:_.snapshot().rows}:{x:0,y:0,w:0,h:0},deps:[W.value,N.value,$.content,$.title,$.style,J.value],paint:()=>{if(!W.value)return;let O=_.snapshot(),w=$.style??J.value,S={...w,bg:"black",dim:!0};for(let T$=0;T$<O.rows;T$++)_.write(" ".repeat(O.cols),{x:0,y:T$,style:S});let D=N.value,j=w.fg??J.value.fg??"whiteBright",L=w.bg??J.value.bg??"black",M={...w,fg:"white"},k={...w,fg:j,bg:L},A={...w,dim:!0};_.put(D.x,D.y,l6.tl,M),_.put(D.x+D.w-1,D.y,l6.tr,M),_.put(D.x,D.y+D.h-1,l6.bl,M),_.put(D.x+D.w-1,D.y+D.h-1,l6.br,M);let R=Math.max(0,D.w-2),f=` ${M1($.title)} `,T=Math.min(f.length,R),I=D.x+1;_.write(f.slice(0,T),{x:I,y:D.y,style:M});let z=R-T;if(z>0)_.write(l6.h.repeat(z),{x:I+T,y:D.y,style:M});let v=" Press ESC to close ",b=Math.min(v.length,R),y=D.x+Math.floor((D.w-b)/2),g=y-D.x-1,r=R-g-b;if(g>0)_.write(l6.h.repeat(g),{x:D.x+1,y:D.y+D.h-1,style:M});if(_.write(v,{x:y,y:D.y+D.h-1,style:A}),r>0)_.write(l6.h.repeat(r),{x:y+b,y:D.y+D.h-1,style:M});for(let T$=1;T$<D.h-1;T$++)_.put(D.x,D.y+T$,l6.v,M),_.put(D.x+D.w-1,D.y+T$,l6.v,M);let U$=Math.max(0,D.h-2),C$=H.value,t$=F.value;for(let T$=0;T$<U$;T$++){let D$=t$+T$,h=C$[D$]??"",a=l0(h,R),d=a+" ".repeat(Math.max(0,R-a.length));_.write(d,{x:D.x+1,y:D.y+1+T$,style:k})}}})),()=>Na("span",X)}});import{computed as G7,defineComponent as Ha,h as Uz,inject as Oa,ref as JQ,watch as qa,watchEffect as Da}from"vue";function SJ($,U,_){return Math.max(U,Math.min(_,$))}function _z($){return Boolean($.ctrlKey||$.metaKey)}var GQ=Ha({name:"TPathPicker",props:{x:{type:Number,required:!0},y:{type:Number,required:!0},w:{type:Number,required:!0},h:{type:Number,required:!0},zIndex:{type:Number,default:0},workspace:{type:String,required:!0},mode:{type:String,default:"any"},modelValue:{type:String,required:!0},placeholder:{type:String,default:""},style:{type:Object,default:void 0},autoFocus:{type:Boolean,default:!1},showHidden:{type:Boolean,default:!1},maxSuggestions:{type:Number,default:50},provider:{type:Object,default:void 0}},emits:["update:modelValue","select","invalid","keydown","focus","blur"],setup($,{emit:U}){let{terminal:_,scheduler:G,defaultStyle:J}=H0(),Q=x0(),{visible:Y,rootProps:K}=b1(),X=Oa(W4,G7(()=>0)),V=G7(()=>(X.value??0)+($.zIndex??0)),Z=G7(()=>$.provider??mU()),W=JQ([]),N=JQ(0),H=JQ(0),F=JQ(null),q=1,E=G7(()=>Math.max(0,Math.floor($.h)-1)),P=G7(()=>{let f={x:$.x,y:$.y+1,w:$.w,h:E.value},T=g1(f,Q.originX,Q.originY);if(!Q.clipRect)return T;return a1(T,Q.clipRect)??{x:0,y:0,w:0,h:0}});function O(){let f=Math.max(0,E.value);if(f<=0){H.value=0;return}let T=Math.max(0,W.value.length-f);if(H.value=SJ(H.value,0,T),N.value<H.value)H.value=N.value;else if(N.value>=H.value+f)H.value=SJ(N.value-(f-1),0,T)}qa([()=>N.value,()=>W.value.length,()=>E.value],()=>{O()});async function w(){let f=Math.max(0,Math.floor($.maxSuggestions)),T=await a9({workspaceAbs:$.workspace,input:$.modelValue,mode:$.mode,max:f,showHidden:$.showHidden,listDir:Z.value.listDir});W.value=T.suggestions,N.value=SJ(N.value,0,Math.max(0,W.value.length-1)),O(),G.invalidate()}let S=0;Da(()=>{if(!Y.value)return;$.workspace,$.mode,$.showHidden,$.modelValue,E.value,F.value=null;let f=++S;w().catch((T)=>{if(f!==S)return;W.value=[],F.value=T instanceof Error?T.message:String(T),G.invalidate()})});function D(f){let T=f.replace(/\r/g,"").replace(/\n/g," ");U("update:modelValue",T)}function j(f){let T=W.value.length;if(T<=0)return;let I=SJ(N.value+f,0,T-1);if(I!==N.value)N.value=I,O(),G.invalidate()}function L(){let f=W.value[N.value];if(!f)return;D(f.completion)}async function M(f){let T=await Z.value.stat(f);if(!T.exists){F.value="Not found",U("invalid",{reason:"not_found",absPath:f}),G.invalidate();return}if($.mode==="file"&&T.kind==="directory"){let I=f4(f),z=f4($.workspace),v=I===z?"":I.startsWith(`${z}/`)?I.slice(z.length+1):I;D(v?`${v}/`:""),F.value=null,G.invalidate();return}if($.mode==="file"&&T.kind!=="file"){F.value="Not a file",U("invalid",{reason:"not_file",absPath:f}),G.invalidate();return}if($.mode==="directory"&&T.kind!=="directory"){F.value="Not a directory",U("invalid",{reason:"not_directory",absPath:f}),G.invalidate();return}U("select",KR(f))}async function k(){let f=c6($.workspace,$.modelValue),T=await Z.value.stat(f);if(T.exists){if($.mode==="file"&&T.kind==="directory"){let z=$.modelValue.replace(/\r/g,"").replace(/\\/g,"/"),v=z.endsWith("/")?z:`${z}/`;D(v),F.value=null,G.invalidate();return}await M(f);return}let I=W.value[N.value];if(I){if($.mode==="file"&&I.kind==="directory"){D(I.completion),F.value=null,G.invalidate();return}await M(I.absPath);return}F.value="Not found",U("invalid",{reason:"not_found",absPath:f}),G.invalidate()}function A(f){if(U("keydown",f),f.key==="Tab"){f.preventDefault(),L();return}if(f.key==="ArrowUp"){f.preventDefault(),j(-1);return}if(f.key==="ArrowDown"){f.preventDefault(),j(1);return}if(_z(f)&&(f.key==="p"||f.key==="P")){f.preventDefault(),j(-1);return}if(_z(f)&&(f.key==="n"||f.key==="N"))f.preventDefault(),j(1)}let R=sR();return N4(()=>({rect:P.value,zIndex:V.value,visible:Y.value,focusable:!1,handlers:{click:(f)=>{let T=P.value,I=H.value+(f.cellY-T.y);if(I>=0&&I<W.value.length)N.value=I,O(),G.invalidate()},dblclick:async(f)=>{let T=P.value,I=H.value+(f.cellY-T.y),z=W.value[I];if(!z)return;if($.mode==="file"&&z.kind==="directory"){D(z.completion),F.value=null,G.invalidate();return}await M(z.absPath)},wheel:(f)=>{let T=f.deltaY??0;if(!T)return;let I=Math.max(0,E.value),z=Math.max(0,W.value.length-I),{nextTop:v,dir:b}=$z(R,T,H.value,z);if(!b||v===H.value)return;H.value=v;let y=v,g=v+I-1;if(N.value<y||N.value>g){let r=b>0?g:y;N.value=SJ(r,0,Math.max(0,W.value.length-1))}G.invalidate()}}})),B4(()=>({zIndex:$.zIndex,rect:Y.value?P.value:{x:0,y:0,w:0,h:0},deps:[Y.value,P.value,$.w,E.value,$.style,J.value,W.value,N.value,H.value,F.value],paint:()=>{if(!Y.value)return;let f=P.value;if(f.w<=0||f.h<=0)return;let T=$.style??J.value,I=SJ(H.value,0,Math.max(0,W.value.length-f.h));for(let z=0;z<f.h;z++){let v=I+z,b=W.value[v],y=b?M1(b.display):"",g=u4(l0(y,f.w),f.w),r=v===N.value?{...T,inverse:!0}:T;_.write(g,{x:f.x,y:f.y+z,style:r})}if(W.value.length===0&&f.h>0){let z=F.value?`(${M1(F.value)})`:"(no matches)";_.write(u4(l0(z,f.w),f.w),{x:f.x,y:f.y,style:{...T,dim:!0}})}}})),()=>Uz("span",K,[Uz(B1,{x:$.x,y:$.y,w:$.w,h:1,zIndex:$.zIndex,modelValue:$.modelValue,"onUpdate:modelValue":(f)=>D(f),cursorToEndOnExternalUpdate:!0,placeholder:$.placeholder,style:$.style,autoFocus:$.autoFocus,onKeydown:(f)=>A(f),onChange:()=>void k(),onFocus:()=>U("focus"),onBlur:()=>U("blur")})])}});import{computed as SH,defineComponent as ja,h as Ea,inject as fa,ref as Jz,watchEffect as Gz}from"vue";function i6($,U,_){return Math.max(U,Math.min(_,$))}var e1=ja({name:"TSelect",props:{x:{type:Number,required:!0},y:{type:Number,required:!0},w:{type:Number,required:!0},h:{type:Number,required:!0},zIndex:{type:Number,default:0},options:{type:Array,required:!0},modelValue:{type:[Number,Array],default:0},multiple:{type:Boolean,default:!1},multipleEmit:{type:String,default:"value"},style:{type:Object,default:void 0},highlightStyle:{type:Object,default:void 0},autoFocus:{type:Boolean,default:!1},closeOnBlur:{type:Boolean,default:!1}},emits:["update:modelValue","change","confirm","close","focus","blur","keydown"],setup($,{emit:U}){let{terminal:_,scheduler:G,defaultStyle:J,events:Q}=H0(),Y=x0(),{visible:K,rootProps:X}=b1(),V=fa(W4,SH(()=>0)),Z=SH(()=>(V.value??0)+($.zIndex??0)),W=Jz(!1),N=(()=>{let A=Math.max(0,$.options.length-1);if(!$.multiple){let T=typeof $.modelValue==="number"?$.modelValue:0;return i6(T,0,A)}let f=(Array.isArray($.modelValue)?$.modelValue:[])[0]??0;return i6(f,0,A)})(),H=Jz(N),F=SH(()=>{let A={x:$.x,y:$.y,w:$.w,h:$.h},R=g1(A,Y.originX,Y.originY);if(!Y.clipRect)return R;return a1(R,Y.clipRect)??{x:0,y:0,w:0,h:0}});Gz(()=>{let A=Math.max(0,$.options.length-1);if(!$.multiple){let R=typeof $.modelValue==="number"?$.modelValue:0;H.value=i6(R,0,A);return}H.value=i6(H.value,0,A)});function q(A){return typeof A==="string"?A:A.label}function E(A){return typeof A==="string"?void 0:A.detail}function P(A){let R=i6(A,0,Math.max(0,$.options.length-1));H.value=R,U("update:modelValue",R);let f=$.options[R];U("change",f?q(f):null)}function O(){if(!$.multiple)return[];let A=Math.max(0,$.options.length-1),R=Array.isArray($.modelValue)?$.modelValue:[],f=new Set;for(let T of R){if(typeof T!=="number"||!Number.isFinite(T))continue;f.add(i6(Math.trunc(T),0,A))}return[...f].sort((T,I)=>T-I)}function w(A){let R=A.map((f)=>$.options[f]).filter(Boolean).map((f)=>q(f));return{indices:A,values:R}}function S(A,R){let f=w(R);if($.multipleEmit==="index"){U(A,f.indices);return}if($.multipleEmit==="both"){U(A,f);return}U(A,f.values)}function D(A){let R=i6(A,0,Math.max(0,$.options.length-1));H.value=R;let f=new Set(O());if(f.has(R))f.delete(R);else f.add(R);let T=[...f].sort((I,z)=>I-z);U("update:modelValue",T),S("change",T)}function j(){let A=O();S("confirm",A)}function L(A){if($.multiple)D(A);else P(A)}function M(A){if(U("keydown",A),A.defaultPrevented)return;if(A.key==="ArrowUp"){if(A.preventDefault(),H.value=i6(H.value-1,0,Math.max(0,$.options.length-1)),!$.multiple)U("update:modelValue",H.value);G.invalidate();return}if(A.key==="ArrowDown"){if(A.preventDefault(),H.value=i6(H.value+1,0,Math.max(0,$.options.length-1)),!$.multiple)U("update:modelValue",H.value);G.invalidate();return}if($.multiple&&(A.code==="Space"||A.key===" "||A.key==="Spacebar")){A.preventDefault(),D(H.value);return}if(A.key==="Enter"){if($.multiple){A.preventDefault(),j();return}L(H.value);return}if(A.key==="Escape")A.preventDefault(),U("close")}let{id:k}=N4(()=>({rect:F.value,zIndex:Z.value,visible:K.value,focusable:!0,handlers:{click:(A)=>{let R=F.value,f=A.cellY-R.y;if(f>=0&&f<$.options.length)L(f);else U("close")},focus:()=>{W.value=!0,U("focus"),G.invalidate()},blur:()=>{if(W.value=!1,U("blur"),$.closeOnBlur)U("close");G.invalidate()},keydown:M}}));return Gz(()=>{if(!$.autoFocus)return;if(!K.value)return;let A=Q.value,R=k.value;if(!A||!R)return;if(A.getFocused()===R)return;A.focus(R)}),B4(()=>({zIndex:$.zIndex,rect:K.value?F.value:{x:0,y:0,w:0,h:0},deps:[K.value,F.value,$.w,$.h,$.options,$.modelValue,$.multiple,$.multipleEmit,$.style,$.highlightStyle,W.value,H.value,J.value],paint:(A)=>{if(!K.value)return;let R=F.value;if(R.w<=0||R.h<=0)return;let f=$.style??J.value,T=$.highlightStyle??{...f,bg:"yellow",fg:"black"},I={...f,dim:!0},z={...T,dim:!0},v=$.multiple?new Set(O()):null,b=(y)=>{if(!A)return!0;let g=Math.floor(R.y+y);return A.includes(g)};for(let y=0;y<R.h;y++){if(!b(y))continue;let g=$.options[y];if(!g){_.write(" ".repeat(R.w),{x:R.x,y:R.y+y,style:f});continue}let r=y===H.value,U$=$.multiple?v.has(y):r,C$=$.multiple?W.value&&r:r,t$=$.multiple?U$?"[x] ":"[ ] ":"",T$=M1(q(g)),D$=E(g),h=D$?M1(D$):"",a=`${t$}${T$}`,d=m$(a),m=1,i=Math.max(0,R.w-d-m);if(h&&i>=4){let u=C$?T:f;_.write(a,{x:R.x,y:R.y+y,style:u});let $$=l0(h,i),M$=m$($$),P$=Math.max(0,R.w-d-M$),j$=C$?T:f;_.write(" ".repeat(P$),{x:R.x+d,y:R.y+y,style:j$});let r$=C$?z:I;_.write($$,{x:R.x+d+P$,y:R.y+y,style:r$})}else{let u=u4(l0(a,R.w),R.w),$$=C$?T:f;_.write(u,{x:R.x,y:R.y+y,style:$$})}}}})),()=>Ea("span",X)}});import{computed as Ma,inject as Qz}from"vue";var IJ=Symbol("TerminalRouter"),QQ=Symbol("TerminalRoute");function vJ(){let $=Qz(IJ,null);if(!$)throw Error("TerminalRouter is missing");return $}function YQ(){let $=Qz(QQ,null);if(!$)throw Error("TerminalRoute is missing");return Ma(()=>$.value)}import{ref as Pa}from"vue";function Yz($,U){let _=typeof $==="string"?{name:$}:$,G=U.get(_.name);return{name:_.name,params:_.params,meta:G?.meta}}function Q7($){return typeof $==="string"||typeof $==="object"&&$!=null&&"name"in $}function KQ($){let U=new Map($.routes.map((W)=>[W.name,W])),_=Pa(Yz($.initialRoute,U)),G=[_.value],J=0,Q=[],Y=[],K=[];async function X(W,N,H){for(let F of W){let q=await F(N,H);if(q===!1)return!1;if(Q7(q))return q}return!0}async function V(W,N){let H=_.value,F=Yz(W,U),q=U.get(H.name)??null,E=U.get(F.name)??null,P=await X(Q,F,H);if(P===!1)return;if(Q7(P))return V(P,N);let O=await X(Y,F,H);if(O===!1)return;if(Q7(O))return V(O,N);if(q?.onLeave)await q.onLeave(F,H);if(_.value=F,N==="replace")G[J]=F;else if(N==="push")G.splice(J+1),G.push(F),J=G.length-1;if(E?.onEnter)await E.onEnter(F,H);for(let w of K)w(F,H)}let Z={currentRoute:_,async push(W){await V(W,"push")},async replace(W){await V(W,"replace")},async back(){if(J<=0)return;let W=_.value,N=G[J-1],H=U.get(W.name)??null,F=U.get(N.name)??null,q=await X(Q,N,W);if(q===!1)return;if(Q7(q))return V(q,"push");let E=await X(Y,N,W);if(E===!1)return;if(Q7(E))return V(E,"push");if(H?.onLeave)await H.onLeave(N,W);if(J-=1,_.value=N,F?.onEnter)await F.onEnter(N,W);for(let P of K)P(N,W)},beforeEach(W){return Q.push(W),()=>{let N=Q.indexOf(W);if(N>=0)Q.splice(N,1)}},beforeResolve(W){return Y.push(W),()=>{let N=Y.indexOf(W);if(N>=0)Y.splice(N,1)}},afterEach(W){return K.push(W),()=>{let N=K.indexOf(W);if(N>=0)K.splice(N,1)}},install(W){W.provide(IJ,Z),W.provide(QQ,_)}};return Z}function Kz($,U){let _=$.currentRoute.value;return U.find((J)=>J.name===_.name)?.component??null}import{computed as wa,defineComponent as La,h as Aa,inject as Ra,ref as za,watch as ka}from"vue";var XQ=La({name:"TRouterView",props:{routes:{type:Array,required:!0},forceRemount:{type:Boolean,default:!0}},setup($){let U=Ra(IJ,null);if(!U)throw Error("TerminalRouter is missing (did you forget to app.use(router)?)");let _=za(0);ka(()=>U.currentRoute.value,()=>{if($.forceRemount)_.value++},{deep:!0});let G=wa(()=>Kz(U,$.routes));return()=>{let J=G.value;return J?Aa(J,{key:$.forceRemount?_.value:void 0}):null}}});var IH=null,VQ=null;function Xz($){IH=$}function Vz($){return VQ=$,()=>{if(VQ===$)VQ=null}}function ZQ(){let $=VQ;if($&&$.isBusy()){$.showConfirm();return}IH?.()}function Zz(){IH?.()}function vH(){return typeof performance<"u"?performance.now():Date.now()}async function CH($){await new Promise((U)=>setTimeout(U,$))}var Wz=null;function i2($){if(Wz?.GOATCHAIN_DEBUG==="1")try{let U=new Date().toISOString().split("T")[1].slice(0,-1);Ta.appendFileSync("/tmp/goatchain-debug.log",`[${U}] [GHOSTTY-KEEPALIVE] ${$}
|
|
818
818
|
`)}catch{}}function Sa($){let U=jH({cols:$.cols,rows:$.rows,component:$.component,props:$.props,defaultStyle:$.defaultStyle});return $.install?.(U.app),U.mount(),{app:U.app,terminal:U.terminal,events:U.events,scheduler:U.scheduler,getImeAnchor:U.getImeAnchor,dispose:U.dispose}}async function Ia($,U,_){let G=null;for(let J of _){let Q=typeof J?.time==="number"?J.time:null;if(Q!=null&&G!=null){let Y=Math.max(0,Q-G);await CH(Math.min(Y,5000))}if(Q!=null)G=Q;$.dispatch(J),await WQ(),U.flush()}}async function Nz($){Wz=$.proc.env,i2("runTerminalUi() called");let U=Sa({cols:$.cols,rows:$.rows,component:$.component,props:$.props,install:$.install,defaultStyle:$.defaultStyle}),_=a3(U.terminal,{output:$.proc.stdout,altScreen:$.altScreen,palette:$.palette,trackResize:!$.sizeLocked,hideCursor:!0,defaultBg:$.defaultBg,getImeAnchor:U.getImeAnchor}),G=[],J=vH(),Q=(Z)=>{let W=Z.time==null?{...Z,time:vH()-J}:Z;G.push(W),U.events.dispatch(W)};U.scheduler.flush();let Y=null,K="GHOSTTY_RESOURCES_DIR"in($.proc.env??{});i2(`BEFORE exit setup - Ghostty detection: ${K}`);let X=null;if(Xz(()=>{(async()=>{if(X)clearInterval(X),X=null;if(Y?.dispose(),_.dispose(),$.recordPath)await VH($.recordPath,G);if($.snapshotPath)await h3($.snapshotPath,U.terminal.snapshot().lines);U.dispose(),$.proc.exit(0)})()}),$.replayPath){await WQ(),await WQ(),U.scheduler.flush();let Z=await ZH($.replayPath);if(await Ia(U.events,U.scheduler,Z),await CH(800),await WQ(),U.scheduler.flush(),$.snapshotPath)await h3($.snapshotPath,U.terminal.snapshot().lines);_.dispose(),U.dispose();return}if(Y=YH({dispatch:Q,enableMouse:$.enableMouse,onExit:()=>ZQ()}),K)i2("Starting keep-alive interval (100ms)"),X=setInterval(()=>{i2("Keep-alive tick - calling flush()"),U.scheduler.flush(),i2("Keep-alive tick - flush() returned")},100),i2("Keep-alive interval created successfully");if($.proc.on("SIGINT",()=>ZQ()),$.proc.on("SIGTERM",()=>ZQ()),K)i2("Entering ghostty keep-alive loop (waiting forever)"),await new Promise(()=>{}),i2("Keep-alive loop exited (this should never happen)")}var LQ=q0(_T(),1);import{spawn as Ls}from"node:child_process";import{existsSync as As,readFileSync as Rs}from"node:fs";import aH from"node:path";import{fileURLToPath as zs}from"node:url";var AQ="goatchain-cli",ks="upgrade-toast.json",Ts="upgrade-check.log",GT=process.env.GOATCHAIN_DEBUG_LOG||"./goatchain-debug.log",Ss=`https://registry.npmjs.org/${AQ}`,Is=5000;async function vs(){try{let $=new AbortController,U=setTimeout(()=>$.abort(),Is),_=await fetch(Ss,{signal:$.signal,headers:{Accept:"application/json"}});if(clearTimeout(U),!_.ok)throw Error(`npm registry returned ${_.status}`);let J=(await _.json())["dist-tags"]?.latest;if(!J||typeof J!=="string")throw Error("No latest version found in registry response");return J}catch($){if($ instanceof Error&&$.name==="AbortError")throw Error("npm registry request timed out");throw $}}async function QT(){if(await h1("start",{disableAutoUpdate:process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1",autoUpdate:process.env.GOATCHAIN_AUTOUPDATE!=="0",cwd:gs(),argv:xs(),debugLogPath:GT}),process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1")return await h1("skip-disabled"),null;let $=us();if(!$?.version)return await h1("skip-missing-version"),null;let U=$.version,_=$.source==="injected";try{let G=await vs();if(await h1("check-result",{current:U,latest:G,hasInjectedVersion:_}),!G)return await h1("error",{message:"Failed to fetch latest version"}),null;if(LQ.default.valid(U)&&LQ.default.valid(G)){if(LQ.default.gte(U,G))return await h1("no-update",{current:U,latest:G}),null;if(process.env.GOATCHAIN_AUTOUPDATE!=="0"&&_)return await h1("update-available",{current:U,latest:G,autoUpdate:!0}),Cs(G),`Update available: ${AQ}@${G} (current: ${U}). Installing in background. Restart terminal after it finishes.`;return await h1("update-available",{current:U,latest:G,autoUpdate:!1}),`Update available: ${AQ}@${G} (current: ${U})`}if(U===G)return await h1("no-update",{current:U,latest:G}),null;return await h1("update-available",{current:U,latest:G,autoUpdate:!1}),`Update available: ${AQ}@${G} (current: ${U})`}catch(G){return await h1("error",{message:G instanceof Error?G.message:String(G)}),null}}function Cs($){try{h1("autoupdate-start",{version:$});let U=Ls("npm",["install","-g",`goatchain-cli@${$}`],{stdio:"ignore",detached:!0});U.unref();let _=!1,G=(J)=>{if(_)return;_=!0,h1("autoupdate-finish",{version:$,message:J}),JT(J)};U.on("close",(J)=>{if(J===0)G(`Update installed: goatchain-cli@${$}. Restart terminal to use the new version.`);else G("Auto-update failed. Run: npm install -g goatchain-cli")}),U.on("error",()=>{h1("autoupdate-error",{version:$,reason:"process-error"}),G("Auto-update failed. Run: npm install -g goatchain-cli")})}catch{h1("autoupdate-error",{version:$,reason:"spawn-throw"}),JT("Auto-update failed. Run: npm install -g goatchain-cli")}}function JT($){let U=globalThis?.__GOATCHAIN_UPGRADE_TOAST__;if(typeof U==="function")try{U($);return}catch{}ys($)}async function ys($){try{let{getGoatChainUserDir:U}=await Promise.resolve().then(() => C3),[{mkdir:_,writeFile:G},J]=await Promise.all([import("node:fs/promises"),import("node:path")]),Q=await U(process.env);await _(Q,{recursive:!0});let Y=J.join(Q,ks),K=JSON.stringify({message:$,createdAt:Date.now()});await G(Y,K,"utf8")}catch{}}async function h1($,U){try{let{getGoatChainUserDir:_}=await Promise.resolve().then(() => C3),[{mkdir:G,appendFile:J},Q]=await Promise.all([import("node:fs/promises"),import("node:path")]),Y=await _(process.env);await G(Y,{recursive:!0});let K=Q.join(Y,Ts),X={ts:new Date().toISOString(),event:$,...U};await J(K,`${JSON.stringify(X)}
|
|
819
819
|
`,{encoding:"utf8",mode:384}),await bs(X)}catch{}}async function bs($){try{let{appendFile:U}=await import("node:fs/promises"),G=`[${String($.ts??new Date().toISOString())}] upgrade_check ${JSON.stringify($)}
|
|
820
|
-
`;await U(GT,G,{encoding:"utf8"})}catch{}}function gs(){try{return process.cwd()}catch{return}}function xs(){try{return process.argv}catch{return}}function us(){let $="0.0.4-beta.
|
|
820
|
+
`;await U(GT,G,{encoding:"utf8"})}catch{}}function gs(){try{return process.cwd()}catch{return}}function xs(){try{return process.argv}catch{return}}function us(){let $="0.0.4-beta.32".trim();if($)return{version:$,source:"injected"};let U=hs();if(U)return{version:U,source:"package"};return null}function hs(){try{let $=aH.dirname(zs(import.meta.url));for(let U=0;U<6;U++){let _=aH.join($,"package.json");if(As(_)){let J=Rs(_,"utf8"),Q=JSON.parse(J),Y=typeof Q?.version==="string"?Q.version.trim():"";if(Y)return Y}let G=aH.dirname($);if(G===$)break;$=G}}catch{}return null}import{computed as m1,defineComponent as s$$,h as pU,inject as $0$,nextTick as U0$,provide as _0$,ref as o6,watch as cJ}from"vue";var lU=Symbol("GoatChainBridge");var YT=["user","assistant","tool"];var KT=["status","thinking","markdown","tool_call","tool_output","tool_result","approve","todo","plan"];var yJ=[...YT,...KT];var RQ=["black","red","green","yellow","blue","magenta","cyan","white","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright"];function tH($,U){let _={};for(let G of yJ)_[G]={fg:$,bg:U};return _}var XT=Object.freeze({goatchain:{...tH("white","black"),user:{fg:"whiteBright",bg:"blackBright"},assistant:{fg:"white",bg:"black"},tool:{fg:"white",bg:"black"},markdown:{fg:"white",bg:"black"},status:{fg:"white",bg:"black"},thinking:{fg:"cyanBright",bg:"black"},tool_call:{fg:"white",bg:"black"},tool_output:{fg:"white",bg:"black"},tool_result:{fg:"white",bg:"black"},approve:{fg:"white",bg:"black"},todo:{fg:"whiteBright",bg:"black"},plan:{fg:"whiteBright",bg:"black"}},mono:{...tH("white","black"),user:{fg:"white",bg:"black"},assistant:{fg:"white",bg:"black"},tool:{fg:"white",bg:"black"},thinking:{fg:"white",bg:"black"}},contrast:{...tH("whiteBright","black"),user:{fg:"whiteBright",bg:"blackBright"},assistant:{fg:"whiteBright",bg:"black"},tool:{fg:"whiteBright",bg:"black"},thinking:{fg:"blueBright",bg:"black"},tool_call:{fg:"yellowBright",bg:"black"},tool_output:{fg:"cyanBright",bg:"black"},tool_result:{fg:"cyanBright",bg:"black"},todo:{fg:"greenBright",bg:"black"},plan:{fg:"magentaBright",bg:"black"}}});function W6($,U){let _=XT[$.preset]??XT.goatchain,G=_[U]??_.assistant??{fg:"white",bg:"black"},J=$.overrides?.[U]??{};return{...G,...J}}import eH from"node:fs";function ms($){let _="";for(let G=0;G<$.length;G++){if($[G]!=="\x1B"||$[G+1]!=="["){_+=$[G];continue}let J=G+2;while(J<$.length){let Q=$.charCodeAt(J);if(Q>=48&&Q<=57||Q===59){J++;continue}break}if(J<$.length&&$[J]==="m"){G=J;continue}_+=$[G]}return _}function VT($){$=ms($);let U="";for(let _ of $){let G=_.codePointAt(0);if(G<=31&&G!==10&&G!==9||G===127)continue;U+=_}return U}function bJ($){let U=0;for(let _ of $)U+=k0(_);return U}function zQ($,U){if(U=Math.max(0,Math.floor(U)),U<=0)return{chunk:"",rest:$};let _=0,G=0;for(;G<$.length;){let J=$.codePointAt(G)??0,Q=String.fromCodePoint(J),Y=k0(Q);if(_+Y>U)break;if(_+=Y,G+=Q.length,_>=U)break}return{chunk:$.slice(0,G),rest:$.slice(G)}}function kQ($,U){return zQ($,U).chunk}function ZT($,U){U=Math.max(0,Math.floor(U));let _=bJ($);if(_>=U)return kQ($,U);return`${$}${" ".repeat(U-_)}`}function WT($,U){if(U=Math.max(1,Math.floor(U)),!$)return[""];let _=[],G=$;while(!0){let{chunk:J,rest:Q}=zQ(G,U);if(_.push(J),!Q)break;G=Q}return _}var iU=new Map,cs=100,ds=60000;function ls($,U){let _=0,G=`${$}|${U}`;for(let J=0;J<G.length;J++){let Q=G.charCodeAt(J);_=(_<<5)-_+Q,_=_&_}return _.toString(36)}function is(){let $=Date.now();for(let[U,_]of iU.entries())if($-_.timestamp>ds)iU.delete(U)}if(typeof setInterval<"u")setInterval(is,1e4);function TQ($){let U=(X)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let Z=new Date().toISOString().split("T")[1].slice(0,-1);eH.appendFileSync("/tmp/goatchain-debug.log",`[${Z}] [PARSE-INLINE] ${X}
|
|
821
821
|
`)}}catch{}},_=[],G="",J=0;U(`START: text length=${$.length}`);function Q(){if(!G)return;_.push({kind:"text",text:G}),G=""}let Y=0,K=$.length*10+1000;while(J<$.length){if(Y++,Y>K){U(`ERROR: Infinite loop detected! i=${J}, text.length=${$.length}, iterations=${Y}`);break}if(Y%100===0)U(` Progress: i=${J}/${$.length}, iterations=${Y}`);let X=$[J];if(X==="`"){let V=$.indexOf("`",J+1);if(V>J+1){Q(),_.push({kind:"code",text:$.slice(J+1,V)}),J=V+1;continue}}if(X==="*"&&$[J+1]==="*"){let V=$.indexOf("**",J+2);if(V>J+2){Q(),_.push({kind:"bold",text:$.slice(J+2,V)}),J=V+2;continue}}G+=X,J++}return Q(),U(`END: ${_.length} spans, iterations=${Y}`),_}function SQ($,U){let _=(W)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let H=new Date().toISOString().split("T")[1].slice(0,-1);eH.appendFileSync("/tmp/goatchain-debug.log",`[${H}] [WRAP-SPANS] ${W}
|
|
822
822
|
`)}}catch{}};if(U<=0)return[[{kind:"text",text:""}]];_(`START: spans=${$.length}, width=${U}`);function G(W){let N=[],H=/\s+/g,F=0;for(let q=H.exec(W.text);q;q=H.exec(W.text)){if(q.index>F)N.push({kind:W.kind,text:W.text.slice(F,q.index)});N.push({kind:W.kind,text:q[0]}),F=q.index+q[0].length}if(F<W.text.length)N.push({kind:W.kind,text:W.text.slice(F)});return N}let J=[],Q=[],Y=0;function K(W){if(!W.text)return 0;if(/^\s+$/.test(W.text))return W.text.length;return bJ(W.text)}function X(W){let N=Q[Q.length-1];if(N&&N.kind===W.kind){N.text+=W.text;return}Q.push({...W})}function V(){J.push(Q),Q=[],Y=0}let Z=0;for(let W of $){Z++;let N=G(W),H=0;for(let F of N){if(H++,!F.text)continue;if(/^\s+$/.test(F.text)&&Y===0)continue;let q=K(F);if(q<=U-Y){X(F),Y+=q;continue}if(!/^\s+$/.test(F.text)&&Y>0&&q<=U){V(),X(F),Y+=q;continue}let E=F.text,P=0,O=F.text.length*10+100;while(E){if(P++,P>O){_(`ERROR: Infinite loop in chunking! span=${Z}, token=${H}, iterations=${P}, remaining="${E.slice(0,50)}", col=${Y}, width=${U}`);break}let w=U-Y;if(w<=0){V();continue}if(/^\s+$/.test(E)){V(),E="";continue}let S=zQ(E,w),D=S.chunk;if(E=S.rest,X({kind:F.kind,text:D}),Y+=bJ(D),Y>=U)V()}}}if(Q.length===0)return J.length?J:[[{kind:"text",text:""}]];return J.push(Q),_(`END: ${J.length} lines`),J}function NT($,U){let _=(w)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let D=new Date().toISOString().split("T")[1].slice(0,-1);eH.appendFileSync("/tmp/goatchain-debug.log",`[${D}] [MARKDOWN-PARSE] ${w}
|
|
823
823
|
`)}}catch{}},G=Date.now();_(`START: markdown length=${$.length}, width=${U}`);let J=ls($,U),Q=iU.get(J);if(Q)return _(`CACHE HIT: returning ${Q.lines.length} cached lines`),Q.timestamp=Date.now(),Q.lines;_("CACHE MISS: parsing markdown");let Y=VT($).split(`
|
|
@@ -848,7 +848,7 @@ assistant: Clients are marked as failed in the \`connectToServer\` function in s
|
|
|
848
848
|
`)){if(G.length===0){_+=1;continue}let J=0;for(let Q of G){let Y=k0(Q);if(J+Y>U)_+=1,J=Y;else J+=Y}_+=1}return Math.max(1,_)}function FS($){let U=q1(()=>Math.max(0,$.cols.value??0)),_=q1(()=>Math.max(0,$.rows.value??0)),G=q1(()=>Math.max(0,U.value)),J=3,Q=1,Y=4,K=1,X=2,V=4,Z=1,W=2,N=2,H=q1(()=>{return Math.max(1,Math.max(0,G.value-4)-4-2)}),F=q1(()=>BO($.input.value,H.value)),q=q1(()=>{return Q0(F.value+1,2,4)}),E=q1(()=>F.value+1>4?1:0),P=q1(()=>$.hasRevertedMessages.value?3:1),O=q1(()=>q.value+E.value+1),w=q1(()=>O.value+2),S=q1(()=>Math.max(0,_.value-4-w.value-2-P.value)),D=4,j=q1(()=>4+S.value+P.value+1),L=q1(()=>Math.max(0,G.value-4)),M=q1(()=>2),k=q1(()=>M.value+1+1),A=q1(()=>Math.max(1,L.value-4-2));return{contentW:U,contentH:_,mainW:G,mainH:S,mainY:4,panelW:L,panelX:M,panelTopY:j,panelH:O,inputX:k,inputInnerW:A,inputLines:q,modelRowGap:E,inputWrapWidth:H,footerH:2,contentPadX:1}}function HS($){let U=BS(0),_=BS(!0),G=q1(()=>Math.max(0,$.lines.value.length-$.mainH.value));u$$([()=>$.lines.value.length,()=>$.mainH.value],()=>{if(_.value)U.value=G.value;else U.value=Q0(U.value,0,G.value)},{immediate:!0});let J=q1(()=>{return $.lines.value.slice(U.value,U.value+$.mainH.value)}),Q="GHOSTTY_RESOURCES_DIR"in globalThis.process?.env||!1,Y=Q?4:4,K=Q?2:2.5,X=0,V=0,Z=0;function W(N){let H=N.deltaY??0;if(!H)return;let F=Date.now(),q=F-X,E=H>0?1:-1;if(Z!==0&&E!==Z)V=0;if(Z=E,V+=Math.abs(H),q<Y)return;X=F;let P=E,O=U.value<=0,w=U.value>=G.value;if(P<0&&O||P>0&&w){N.preventDefault?.(),V=0;return}let S=Math.max(1,Math.floor(V/K)),D=Q0(U.value+P*S,0,G.value);if(D!==U.value){if(P<0&&_.value)_.value=!1;if(U.value=D,P>0&&D===G.value&&!_.value)_.value=!0}V=0}return{scrollTop:U,stickToBottom:_,maxScroll:G,visibleLines:J,onWheel:W}}import{computed as d4,ref as mJ,watch as oQ}from"vue";function FO($){let U=$.permission,_=String($.riskLevel??"").trim().toLowerCase();if(U==="require_action")return!0;if(!_)return!0;return _==="high"||_==="critical"}function hJ($,U){return $==="all"||$==="auto"&&!FO(U)}function OS($,U){if($==="all")return!0;return U==="require_action"}function qS($){let U=mJ(!1),_=mJ(0),G=mJ(!1),J=mJ(!1),Q=mJ(!1),Y=mJ(!1),K=d4(()=>$.store.state.approval.active),X=d4(()=>{let D=Math.min(86,Math.max(1,$.contentW.value)),j=Math.min(46,D),L=Math.floor($.contentW.value*0.5);return Q0(L,j,D)}),V=d4(()=>Q0(11,9,Math.max(9,$.rows.value-6))),Z=d4(()=>$.store.state.paused?.kind==="ask_user"?$.store.state.paused:null),W=d4(()=>Q0(Math.floor($.contentW.value*0.62),40,90)),N=d4(()=>Q0(18,14,Math.max(14,$.rows.value-4))),H=d4(()=>Q0(Math.floor($.contentW.value*0.78),56,84)),F=d4(()=>Q0(24,18,Math.max(18,$.rows.value-4))),q=d4(()=>Q0(Math.floor($.contentW.value*0.62),46,86)),E=d4(()=>Q0(14,11,Math.max(11,$.rows.value-6)));function P(D){if(String($.store.state.approval.mode??"auto")==="all")return!1;return FO(D)}oQ(()=>K.value?.id??null,()=>{let D=K.value;if(D&&D.status==="pending"&&P(D))J.value=!0;else J.value=!1},{immediate:!0}),oQ(()=>$.store.state.approval.mode,()=>{let D=K.value;if(!D||D.status!=="pending"||!P(D))J.value=!1}),oQ(()=>Z.value?.toolCallId??null,(D)=>{Q.value=Boolean(D)});let O=d4(()=>U.value||G.value||$.showSessions.value||$.showSwitchConfirm.value||$.showMessageActions.value||$.showRedoConfirm.value||$.showConfig.value||$.showToolApprovals.value||J.value||$.showPathPicker.value||Q.value||Y.value);oQ(O,(D)=>{if(!D)$.focusMode.value="input"});function w(){U.value=!0,_.value=0}function S(){U.value=!1}return{showCommands:U,commandIndex:_,showTheme:G,showApproval:J,showAskUser:Q,showExitConfirm:Y,activeApproval:K,approvalW:X,approvalH:V,activeAskUser:Z,askUserW:W,askUserH:N,configW:H,configH:F,toolApprovalsW:q,toolApprovalsH:E,anyDialogOpen:O,openCommandPalette:w,closeCommandPalette:S}}function DS($){function U(X){let V=X?.currentTarget?.id;if(typeof V==="string"&&V)$.events.value?.focus?.(V)}function _(){return $.focusMode.value==="messages"||Boolean($.selectedToolCallId.value)}function G(X,V){let Z=Boolean(V?.allowAlt),W=Boolean((X.metaKey||X.ctrlKey)&&!X.altKey),N=Boolean(X.altKey&&!X.metaKey&&!X.ctrlKey);if(!(X.key==="c"||X.key==="C"))return!1;if(!$.hasMessageSelection.value)return!1;if(!W&&!(Z&&N))return!1;let q=$.getSelectedMessageText();if(!q)return!1;return X.stopPropagation?.(),X.preventDefault?.(),$.copyTextToClipboard(q),!0}function J(X){if($.anyDialogOpen.value)return;if(G(X,{allowAlt:!1}),X.key==="ArrowUp"){X.preventDefault?.(),$.moveToolSelection(-1),U(X);return}if(X.key==="ArrowDown"){X.preventDefault?.(),$.moveToolSelection(1),U(X);return}if(X.key==="Enter"){if(!$.selectedToolCallId.value)return;X.preventDefault?.(),$.runSelected().finally(()=>U(X))}}function Q(X){if($.showExitConfirm.value){if(X.key==="Escape"){X.preventDefault?.(),$.showExitConfirm.value=!1;return}if(X.key==="Enter"){X.preventDefault?.(),$.showExitConfirm.value=!1,$.exitSessionToHome();return}if(typeof X?.key==="string"&&X.key.length===1&&!X.ctrlKey&&!X.metaKey&&!X.altKey){X.preventDefault?.(),X.stopPropagation?.();return}}if($.showApproval.value&&X.key==="Enter"){X.preventDefault?.(),X.stopPropagation?.(),$.store.approve();return}if(X.defaultPrevented)return;if((X.ctrlKey||X.metaKey)&&(X.key==="p"||X.key==="P")){X.preventDefault?.(),$.openCommandPalette();return}if(X.key==="Tab"&&!X.metaKey&&!X.ctrlKey&&!X.altKey){X.preventDefault?.(),$.cycleUiMode(X.shiftKey?-1:1);return}if((X.ctrlKey||X.metaKey)&&(X.key==="k"||X.key==="K")){X.preventDefault?.(),$.openConfig();return}if(_()&&!$.anyDialogOpen.value){if(X.key==="ArrowUp"){X.preventDefault?.(),$.moveToolSelection(-1);return}if(X.key==="ArrowDown"){X.preventDefault?.(),$.moveToolSelection(1);return}if(X.key==="Enter"){if(!$.selectedToolCallId.value)return;X.preventDefault?.(),$.runSelected();return}}if(X.defaultPrevented)return;let V=BO($.input.value,$.inputWrapWidth.value);if(X.key==="ArrowUp"){if(V>1)return;if($.history.value.length===0)return;X.preventDefault?.(),$.historyIndex.value=Q0($.historyIndex.value-1,0,$.history.value.length-1),$.input.value=$.history.value[$.historyIndex.value]??"";return}if(X.key==="ArrowDown"){if(V>1)return;if($.history.value.length===0)return;if(X.preventDefault?.(),$.historyIndex.value>=$.history.value.length-1){$.historyIndex.value=$.history.value.length,$.input.value="";return}$.historyIndex.value=Q0($.historyIndex.value+1,0,$.history.value.length-1),$.input.value=$.history.value[$.historyIndex.value]??""}if(X.key==="Escape"&&!$.input.value){if(X.preventDefault?.(),$.isLoading.value){$.store.interrupt();return}$.showExitConfirm.value=!0}}function Y(X){if(G(X,{allowAlt:$.nodeLike}))return;if($.showApproval.value&&X.key==="Enter"){if(X?.__goatchainApprovalDialogHandled)return;if(X.defaultPrevented)return;X.stopPropagation?.(),X.preventDefault?.(),$.store.approve();return}if($.showExitConfirm.value&&X.key==="Enter"){X.stopPropagation?.(),X.preventDefault?.(),$.showExitConfirm.value=!1,$.exitSessionToHome();return}if(X.defaultPrevented)return;if(!$.anyDialogOpen.value){if((X.ctrlKey||X.metaKey)&&!X.altKey&&(X.key==="k"||X.key==="K")){X.stopPropagation?.(),X.preventDefault?.(),$.openConfig();return}if((X.ctrlKey||X.metaKey)&&!X.altKey&&(X.key==="p"||X.key==="P")){X.stopPropagation?.(),X.preventDefault?.(),$.openCommandPalette();return}if(X.key==="Tab"&&!X.metaKey&&!X.ctrlKey&&!X.altKey){X.stopPropagation?.(),X.preventDefault?.(),$.cycleUiMode(X.shiftKey?-1:1);return}}if((X.ctrlKey||X.metaKey)&&!X.altKey&&(X.key==="r"||X.key==="R")){if($.store.hasRevertedMessages.value){X.stopPropagation?.(),X.preventDefault?.(),$.showRedoConfirm.value=!0;return}}if(X.key!=="Escape")return;if(X.stopPropagation?.(),X.preventDefault?.(),$.showRedoConfirm.value)$.showRedoConfirm.value=!1;else if($.showCommands.value)$.closeCommandPalette();else if($.showTheme.value)$.showTheme.value=!1;else if($.showSessions.value)$.showSessions.value=!1;else if($.showMessageActions.value)$.showMessageActions.value=!1;else if($.showConfig.value)$.closeConfig();else if($.showToolApprovals.value)$.showToolApprovals.value=!1;else if($.showApproval.value)$.showApproval.value=!1;else if($.showAskUser.value)$.showAskUser.value=!1;else if($.showPathPicker.value)$.closePathPicker();else if($.showExitConfirm.value)$.showExitConfirm.value=!1;else if($.isLoading.value)$.store.interrupt();else if($.hasMessageSelection.value)$.clearMessageSelection();else $.showExitConfirm.value=!0}function K(X){if($.anyDialogOpen.value)return;if(X.key==="Tab"&&!X.metaKey&&!X.ctrlKey&&!X.altKey){X.stopPropagation?.(),X.preventDefault?.(),$.cycleUiMode(X.shiftKey?-1:1);return}if(!_())return;if(X.key==="ArrowUp"){X.stopPropagation?.(),X.preventDefault?.(),$.moveToolSelection(-1);return}if(X.key==="ArrowDown"){X.stopPropagation?.(),X.preventDefault?.(),$.moveToolSelection(1);return}if(X.key==="Enter"&&$.selectedToolCallId.value&&!$.input.value.trim())X.stopPropagation?.(),X.preventDefault?.(),$.runSelected()}return{onInputKeydown:Q,onSelectionKeydown:J,onGlobalKeydown:Y,onGlobalKeydownCapture:K}}function jS($){if($.role==="user")return String($.content??"");if($.role==="tool")return String($.result.output??"");return $.parts.map((U)=>{if(U.type==="markdown")return String(U.markdown??"");if(U.type==="thinking")return String(U.content??"");if(U.type==="status")return String(U.text??"");return""}).filter(Boolean).join(`
|
|
849
849
|
`)}function h$$($){if($.role!=="assistant")return $;let U=$.parts.filter((_)=>_.type!=="status"&&_.type!=="thinking"&&_.type!=="tool_output");return{...$,parts:U}}function ES($,U){let _=$.findIndex((G)=>G.id===U);if(_<0)return null;return $.slice(0,_).map(h$$)}async function fS($){let U=$.sessionsApi;if(U&&typeof U.fork==="function"){await U.fork({messages:$.seed});return}if($.sessionsApi){await $.sessionsApi.createNew(),$.store.state.messages.splice(0,$.store.state.messages.length,...$.seed),$.store.state.revertedMessages.splice(0,$.store.state.revertedMessages.length),$.store.state.selectedToolCallId=null;return}$.store.state.sessionId="",$.store.state.messages.splice(0,$.store.state.messages.length,...$.seed),$.store.state.revertedMessages.splice(0,$.store.state.revertedMessages.length),$.store.state.selectedToolCallId=null,$.store.state.usage.prompt_tokens=0,$.store.state.usage.completion_tokens=0,$.store.state.usage.total_tokens=0}import{computed as m$$,ref as HO}from"vue";function MS($,U,_){if(!U||!_)return"";let G=Math.min(U.row,_.row),J=Math.max(U.row,_.row),Q=U.row<_.row?U.col:U.row>_.row?_.col:Math.min(U.col,_.col),Y=U.row<_.row?_.col:U.row>_.row?U.col:Math.max(U.col,_.col),K=[];for(let X=G;X<=J&&X<$.length;X++){let V=$[X]?.text??"";if(G===J)K.push(V.slice(Q,Y));else if(X===G)K.push(V.slice(Q));else if(X===J)K.push(V.slice(0,Y));else K.push(V)}return K.join(`
|
|
850
850
|
`).trim()}function PS($){let U=HO(null),_=HO(null),G=HO(!1),J=m$$(()=>{let F=U.value,q=_.value;return Boolean(F&&q&&(F.row!==q.row||F.col!==q.col))});function Q(){return MS($.lines.value,U.value,_.value)}function Y(){let F=globalThis.getSelection?.();return typeof F?.toString==="function"?String(F.toString()):""}function K(){if($.nodeLike)return;try{globalThis.document?.querySelector?.("[data-vt-host] textarea")?.focus?.()}catch{}}function X(){U.value=null,_.value=null,G.value=!1}function V(F){if($.focusMode.value="messages",K(),!$.nodeLike&&!F?.altKey)return;let q=(F.cellY??0)-$.mainY,E=(F.cellX??0)-2,P=$.scrollTop.value+q;U.value={row:P,col:Math.max(0,E)},_.value={row:P,col:Math.max(0,E)},G.value=!0}function Z(F){if(!G.value)return;let q=(F.cellY??0)-$.mainY,E=(F.cellX??0)-2,P=$.scrollTop.value+q;_.value={row:P,col:Math.max(0,E)};let O=$.mainH.value,w=Math.max(0,$.lines.value.length-O);if(q>=O-1&&$.scrollTop.value<w)$.scrollTop.value=Math.min($.scrollTop.value+1,w);else if(q<0&&$.scrollTop.value>0)$.scrollTop.value=Math.max($.scrollTop.value-1,0)}function W(F){if(!G.value)return;G.value=!1;let q=U.value,E=_.value,P=q&&E&&(q.row!==E.row||Math.abs(q.col-E.col)>1);if(!$.nodeLike)return;if(P){let O=Q();if(O)$.copyTextToClipboard(O).then((w)=>{$.showCopyToast(w?"Copied":"Copy failed")});return}if(!P&&q){if(F.target&&F.currentTarget&&F.target!==F.currentTarget)return;let O=$.lines.value[q.row];if(!O?.messageId)return;if($.store.state.messages.find((S)=>S.id===O.messageId)?.role!=="user")return;$.messageActionsTargetId.value=O.messageId,$.showMessageActions.value=!0}}function N(F){if($.nodeLike)return;if(K(),$.focusMode.value="messages",Y().trim())return;if(!F?.shiftKey)return;if(F.target&&F.currentTarget&&F.target!==F.currentTarget)return;let q=(F.cellY??0)-$.mainY,E=$.scrollTop.value+q,P=$.lines.value[E];if(!P?.messageId)return;if($.store.state.messages.find((w)=>w.id===P.messageId)?.role!=="user")return;$.messageActionsTargetId.value=P.messageId,$.showMessageActions.value=!0}function H(F){if(Y().trim())return;F.preventDefault?.();let q=(F.cellY??0)-$.mainY,E=$.scrollTop.value+q,P=$.lines.value[E];if(!P?.messageId)return;if($.store.state.messages.find((w)=>w.id===P.messageId)?.role!=="user")return;$.messageActionsTargetId.value=P.messageId,$.showMessageActions.value=!0}return{messageSelectStart:U,messageSelectEnd:_,isSelecting:G,hasMessageSelection:J,focusBrowserTextarea:K,getSelectedMessageText:Q,getNativeSelectionText:Y,clearMessageSelection:X,onMessageClick:N,onMessagePointerDown:V,onMessagePointerMove:Z,onMessagePointerUp:W,onMessageContextMenu:H}}import{computed as l4,onBeforeUnmount as c$$,ref as d$$,watch as l$$}from"vue";function wS($){let U=l4(()=>{let w=$.store.state.messages.length,S=Math.max(0,Number($.store.state.usage.prompt_tokens)||0),D=Math.max(0,Number($.store.state.usage.completion_tokens)||0),j=S+D,L=`${w.toLocaleString()} msgs · ${j.toLocaleString()} tok`;return $.copyToastVisible.value&&$.copyToastText.value?`${L} ${$.copyToastText.value}`:L});function _(w){if(w>=88)return"●";if(w>=63)return"◕";if(w>=38)return"◑";if(w>=13)return"◔";return"○"}let G=l4(()=>{let w=Math.max(0,Number($.store.state.usage.prompt_tokens)||0),S=Math.max(0,Number($.store.state.usage.completion_tokens)||0),D=w+S,j=Math.max(1,Number($.store.state.config.context_window)||128000),L=Q0(Math.round(D/j*100),0,100);return`${_(L)} ${L}%`}),J=l4(()=>{return{build:"■",label:String($.store.state.config.model??"model")}}),Q=l4(()=>$.uiMode.value),Y=-1,K="",X=l4(()=>{let w=$.store.state.messages.length;if(w===Y&&K!==void 0)return K;for(let S=$.store.state.messages.length-1;S>=0;S--){let D=$.store.state.messages[S];if(!D||D.role!=="assistant")continue;let j=D.parts.find((M)=>M.type==="status"),L=String(j?.text??"").trim();return Y=w,K=!L||L==="Done."?"":L,K}return Y=w,K="",""}),V=l4(()=>{return{fg:W6($.store.state.ui.theme,"status").fg??"white",bg:"blackBright",dim:!0}}),Z=l4(()=>Boolean($.store.state.runningToolCallId)||Boolean($.store.state.runningAgentRound)),W=d$$(0),N=10,H=3,F=null,q=l4(()=>{if(Z.value)return!0;return/^thinking\b/i.test(X.value)});l$$(q,(w)=>{if(w&&!F)F=setInterval(()=>{W.value=(W.value+1)%N},100);else if(!w&&F)clearInterval(F),F=null,W.value=0},{immediate:!0}),c$$(()=>{if(F)clearInterval(F);F=null});let E=l4(()=>{let w=X.value;if(!w)return"";return w}),P=l4(()=>{let w=[];for(let S=0;S<N;S++){let D=(S-W.value+N)%N;w.push(D>=N-H?"■":"·")}return w.join("")}),O=l4(()=>"Ctrl+K: config Tab: mode Ctrl+P: commands");return{headerStatsDisplay:U,ctxPctChip:G,modelInfo:J,modeLabel:Q,assistantStatusDisplay:E,assistantStatusStyle:V,isLoading:Z,loadingDots:P,footerRight:O}}function n2(){if(typeof globalThis.window<"u")return!1;let $=globalThis.process;return!!$&&typeof $?.versions?.node==="string"&&typeof $?.cwd==="function"}function LS(){try{let $=globalThis.process;return(typeof $?.cwd==="function"?String($.cwd()):"")||"/"}catch{return"/"}}async function aQ($){let U=String($??"");if(!U)return!1;let _=globalThis.navigator;if(_?.clipboard?.writeText)try{return await _.clipboard.writeText(U),!0}catch{}if(n2())try{let Q=globalThis.process,Y=String(Q?.platform||""),{spawn:K}=await import("node:child_process"),X=(V,Z)=>new Promise((W)=>{try{let N=K(V,Z,{stdio:["pipe","ignore","ignore"],windowsHide:!0});N.on("error",()=>W(!1)),N.on("close",(H)=>W(H===0)),N.stdin?.write(U,"utf8"),N.stdin?.end()}catch{W(!1)}});if(Y==="darwin"){if(await X("pbcopy",[]))return!0}else if(Y==="win32"){if(await X("cmd",["/c","clip"]))return!0}else{if(await X("wl-copy",[]))return!0;if(await X("xclip",["-selection","clipboard"]))return!0;if(await X("xsel",["--clipboard","--input"]))return!0}}catch{}let G=globalThis.process;if(G?.stdout?.write&&G?.stdout?.isTTY)try{let Q=n2()?(await import("node:buffer")).Buffer.from(U,"utf-8").toString("base64"):btoa(unescape(encodeURIComponent(U)));return G.stdout.write(`\x1B]52;c;${Q}\x07`),!0}catch{}let J=globalThis.document;if(!J?.createElement||!J?.body?.appendChild||typeof J.execCommand!=="function")return!1;try{let Q=J.activeElement,Y=J.createElement("textarea");Y.value=U,Y.setAttribute("readonly","true"),Y.setAttribute("aria-hidden","true"),Y.style.position="fixed",Y.style.left="-9999px",Y.style.top="-9999px",Y.style.opacity="0",J.body.appendChild(Y),Y.focus(),Y.select(),Y.setSelectionRange(0,Y.value.length);let K=Boolean(J.execCommand("copy"));Y.remove();try{Q?.focus?.({preventScroll:!0})}catch{Q?.focus?.()}return K}catch{return!1}}function tQ($){let U=String($??"").trim();if(!U.startsWith("/"))return{kind:"none"};if(U==="/approvals"||U==="/approval")return{kind:"approvals"};if(U.startsWith("/approvals ")||U.startsWith("/approval "))return{kind:"approvals_invalid_args"};if(U==="/settings"||U==="/config")return{kind:"settings"};if(U==="/sessions")return{kind:"sessions"};if(U==="/new")return{kind:"new"};if(U==="/redo")return{kind:"redo"};return{kind:"none"}}function eQ($){return[{label:"Sessions",detail:"Pick or create a session (/sessions)",run:$.openSessionsDialog},{label:"New Session",detail:"Start a new session (/new)",run:$.createNewSession},{label:"Settings",detail:"Model + API (/settings, Ctrl+K)",run:$.openConfig},{label:"Tool Approvals",detail:"Configure approvals (/approvals)",run:$.openToolApprovals}]}import{computed as j7,ref as sQ}from"vue";function $Y($){let U=sQ(!1),_=sQ("directory"),G=sQ(""),J=sQ(null),Q=j7(()=>{let N=String($.store.state.context?.cwd??".");if(!$.nodeLike)return N;return c6(LS(),N)}),Y=j7(()=>_.value==="directory"?"Select Workspace":"Select File"),K=j7(()=>_.value==="directory"?"Type a path (../ etc). Tab to complete. Enter selects a directory.":"Type a path (../ etc). Tab to complete. Enter selects a file."),X=j7(()=>Q0(Math.min(72,Math.max(32,Math.floor($.cols.value*0.72))),32,Math.max(32,$.cols.value-4))),V=j7(()=>Q0(Math.min(18,Math.max(8,Math.floor($.rows.value*0.55))),8,Math.max(8,$.rows.value-6)));function Z(N,H=""){if(!$.nodeLike){J.value="node-only";return}U.value=!0,_.value=N,G.value=String(H??""),J.value=null}function W(){U.value=!1,G.value="",J.value=null}return{showPathPicker:U,pathPickerMode:_,pathPickerQuery:G,pathPickerError:J,pickerWorkspace:Q,pickerW:X,pickerH:V,pathPickerTitle:Y,pathPickerPlaceholder:K,openPathPicker:Z,closePathPicker:W}}import{appendFileSync as i$$}from"node:fs";function r$$(){let $=globalThis.process;return Boolean($&&typeof $?.versions?.node==="string")}function n$$(){if(!r$$())return!1;let $=globalThis.process?.env??{},U=String($.GOATCHAIN_DEBUG??"").trim().toLowerCase();return U==="1"||U==="true"||U==="yes"||U==="on"}function p$$(){let $=globalThis.process?.env??{};return String($.GOATCHAIN_DEBUG_LOG??"").trim()||"./goatchain-debug.log"}function w0($,U){if(!n$$())return;let _=String($??"").trim()||"event",J=`[${new Date().toISOString()}] ${_}`;if(U!==void 0)try{J+=` ${JSON.stringify(U)}`}catch{}J+=`
|
|
851
|
-
`;try{i$$(p$$(),J)}catch{}}import{ref as F6,watch as o$$}from"vue";function UY($){let U=F6(!1),_=F6(!1),G=F6("Switch Session"),J=F6(""),Q=F6(""),Y=F6(!1),K=F6(!1),X=F6([]),V=F6(0),Z=F6(null);function W(){let D=$.store.state;if(D.runningAgentRound)return"Agent is still responding";if(D.paused?.kind==="ask_user")return"Awaiting AskUser answers";if(D.paused?.kind==="tool_approval")return"Awaiting tool approval";if(D.approval?.active?.status==="pending")return"Pending approval";return""}function N(){let D=$.store.state;if(D.runningAgentRound)return!0;if(D.paused)return!0;return Boolean(D.approval?.active&&D.approval.active.status==="pending")}async function H(D){if(!$.sessionsApi){$.showToast?.("Sessions are only available in Node/CLI mode."),w0("session_switch_unavailable",{title:D.title,target:D.targetLabel});return}if(!N()){w0("session_switch",{title:D.title,target:D.targetLabel,busy:!1}),await D.run(),_.value=!1,Z.value=null,G.value="Switch Session",J.value="",Q.value="",U.value=!1,K.value=!1;return}Z.value={run:D.run},G.value=D.title,J.value=D.targetLabel,Q.value=W(),_.value=!0,w0("session_switch_prompt",{title:D.title,target:D.targetLabel,reason:Q.value})}async function F(D={}){let j=$.sessionsApi;if(!j){X.value=[],V.value=0;return}Y.value=!0;try{let L=await j.list();X.value=L.slice().sort((A,R)=>Number(R?.updatedAt??0)-Number(A?.updatedAt??0));let M=Math.max(0,X.value.length-1),k=-1;if(D.preferId)k=X.value.findIndex((A)=>A.id===D.preferId);if(k<0&&typeof D.preferIndex==="number")k=Q0(D.preferIndex,0,M);if(k<0){let A=String($.store.state.sessionId??"");k=X.value.findIndex((R)=>R.id===A)}V.value=k>=0?k:0}catch{X.value=[],V.value=0}finally{Y.value=!1}}async function q(){if(!$.sessionsApi){$.showToast?.("Sessions are only available in Node/CLI mode.");return}K.value=!1,U.value=!0,await F()}async function E(D){let j=$.sessionsApi,L=X.value[V.value];if(!j||!L)return;await H({title:"Switch Session",targetLabel:String(L.title||L.id),run:async()=>{let M=String($.store.state.sessionId??"");await j.use(L.id),w0("session_switch_run",{from:M,to:String(L.id),kind:"use"}),await D?.after?.()}})}async function P(D){let j=$.sessionsApi;if(!j){$.showToast?.("Sessions are only available in Node/CLI mode.");return}await H({title:"New Session",targetLabel:"a new session",run:async()=>{let L=String($.store.state.sessionId??"");await j.createNew(),w0("session_switch_run",{from:L,to:String($.store.state.sessionId??""),kind:"new"}),await D?.after?.()}})}async function O(){let D=Z.value;if(!D)return;_.value=!1,Z.value=null,$.store.interrupt(),w0("session_switch_confirm",{title:G.value,target:J.value,reason:Q.value}),await D.run(),U.value=!1,K.value=!1,G.value="Switch Session",J.value="",Q.value=""}function w(){_.value=!1,Z.value=null,w0("session_switch_cancel",{title:G.value,target:J.value,reason:Q.value}),G.value="Switch Session",J.value="",Q.value=""}return o$$([U,()=>String($.store.state.sessionId??"").trim()],([D,j])=>{if(!D)return;if(!$.sessionsApi||!j)return;F({preferId:j})}),{showSessions:U,showSwitchConfirm:_,switchConfirmTitle:G,switchConfirmTargetLabel:J,switchConfirmReason:Q,sessionsLoading:Y,sessionsDeleteArmed:K,sessionsList:X,sessionsIndex:V,refreshSessions:F,openSessionsDialog:q,openSelectedSession:E,createNewSession:P,confirmSwitch:O,cancelSwitch:w}}import{computed as a$$,ref as nU}from"vue";function AS($){let U=String($??"").trim();if(!U)return"";return`***${U.slice(-4)||"****"}`}function _Y($){let U=nU(!1),_=nU(!1),G=nU(""),J=nU(""),Q=nU(""),Y=nU(""),K=nU(""),X=a$$(()=>{let q=$.store.state.context?.env??{};return AS(q.OPENAI_API_KEY)});function V(){return $.store.state.paused?.kind==="tool_approval"||$.store.state.approval.active?.status==="pending"}function Z(){G.value="",J.value="",Q.value="",Y.value="",K.value="",U.value=!0,queueMicrotask(()=>{G.value=String($.store.state.config.model??"").trim()||"deepseek-v3.1",J.value=String($.store.state.config.context_window??128000),Q.value=String($.store.state.config.temperature??"");let q=$.store.state.context?.env??{};Y.value=String(q.GOATCHAIN_OPENAI_BASE_URL||q.OPENAI_BASE_URL||""),K.value=""})}function W(){U.value=!1}function N(){if($.guardPendingApprovals!==!1&&V()){$.showToast("Resolve the pending approval before changing settings.");return}let q=G.value.trim();if(q)$.store.state.config.model=q;$.store.state.config.context_window=Q0(Number.parseInt(J.value||"0",10)||$.store.state.config.context_window,1000,2000000);let E=Number.parseFloat(Q.value);$.store.state.config.temperature=Number.isFinite(E)?E:$.store.state.config.temperature,$.store.setEnvVar("GOATCHAIN_MODEL",$.store.state.config.model),$.store.setEnvVar("GOATCHAIN_CONTEXT_WINDOW",String($.store.state.config.context_window)),$.store.setEnvVar("GOATCHAIN_TEMPERATURE",String($.store.state.config.temperature??"")),$.store.setEnvVar("GOATCHAIN_OPENAI_BASE_URL",Y.value.trim()||void 0);let P=K.value.trim();if(P)$.store.setEnvVar("OPENAI_API_KEY",P);if($.nodeLike){let O=globalThis.process;if(O?.env){O.env.GOATCHAIN_MODEL=$.store.state.config.model,O.env.GOATCHAIN_CONTEXT_WINDOW=String($.store.state.config.context_window),O.env.GOATCHAIN_TEMPERATURE=String($.store.state.config.temperature??"");let w=Y.value.trim();if(w)O.env.GOATCHAIN_OPENAI_BASE_URL=w;else delete O.env.GOATCHAIN_OPENAI_BASE_URL;if(P)O.env.OPENAI_API_KEY=P}}K.value="",W()}function H(){if(V()){$.showToast("Resolve the pending approval before changing settings.");return}_.value=!0}function F(q){if($.store.state.approval.mode=q,$.store.setEnvVar("GOATCHAIN_TOOL_APPROVALS",q),$.nodeLike){let E=globalThis.process;if(E?.env)E.env.GOATCHAIN_TOOL_APPROVALS=q}$.showToast(`Tool approvals: ${q}`)}return{showConfig:U,showToolApprovals:_,modelId:G,contextWindow:J,temperature:Q,baseUrl:Y,apiKeyDraft:K,apiKeyMasked:X,openConfig:Z,closeConfig:W,applyConfig:N,openToolApprovals:H,applyToolApprovals:F}}function JY($){let U=$.store.state.context?.env??{},_=(Y)=>{if(typeof $.store.showUpgradeNotification==="function")$.store.showUpgradeNotification(Y);else $.showToast(Y)};if($.nodeLike)globalThis.__GOATCHAIN_UPGRADE_TOAST__=_;let G=String(U.GOATCHAIN_STARTUP_UPGRADE_TOAST??"").trim();if(G){if(_(G),$.store.setEnvVar("GOATCHAIN_STARTUP_UPGRADE_TOAST",void 0),$.nodeLike){let Y=globalThis.process;if(Y?.env)delete Y.env.GOATCHAIN_STARTUP_UPGRADE_TOAST}}if($.nodeLike)t$$(U,_);let J=String(U.GOATCHAIN_STARTUP_TOAST??"").trim();if(!J)return;if($.showToast(J),$.store.setEnvVar("GOATCHAIN_STARTUP_TOAST",void 0),!$.nodeLike)return;let Q=globalThis.process;if(Q?.env)delete Q.env.GOATCHAIN_STARTUP_TOAST}async function t$$($,U){try{let{getGoatChainUserDir:_}=await Promise.resolve().then(() => C3),[{readFile:G,unlink:J},Q]=await Promise.all([import("node:fs/promises"),import("node:path")]),Y=await _($),K=Q.join(Y,"upgrade-toast.json"),X=await G(K,"utf8"),V=JSON.parse(X),Z=String(V?.message??"").trim();if(await J(K),Z)U(Z)}catch{}}import{onBeforeUnmount as e$$,ref as RS}from"vue";function GY($=1200){let U=RS(!1),_=RS(""),G=null,J=(Q)=>{if(_.value=String(Q??""),U.value=!0,G)clearTimeout(G);G=setTimeout(()=>{U.value=!1,G=null},Math.max(0,$))};return e$$(()=>{if(G)clearTimeout(G);G=null}),{visible:U,text:_,show:J}}var OO=s$$({name:"GoatChainChatPage",setup(){let $=n2(),U=vJ(),_=YQ(),G=x0(),{events:J,scheduler:Q}=H0(),Y=$0$(lU,null);if(!Y)throw Error("GoatChainBridge is missing (did you forget to wrap with <GoatChainProvider />?)");let{store:K,sessions:X}=Y,V=m1(()=>G.clipRect?.w??0),Z=m1(()=>G.clipRect?.h??0),W=o6(""),N=m1(()=>{let f$=[];for(let l$ of K.state.messages){if(!l$||l$.role!=="user")continue;let F0=String(l$.content??""),h0=u2(F0).trim();if(!h0)continue;f$.push(h0)}return f$}),H=o6(N.value.length),F=o6([]),q=o6("input"),E=o6(K.getMode?.()??"agent");function P(f$=1){let l$=["plan","agent"],F0=E.value,H1=(l$.indexOf(F0)+f$+l$.length)%l$.length,L1=l$[H1]??"agent";E.value=L1,K.setMode?.(L1)}let O=FS({cols:V,rows:Z,input:W,hasRevertedMessages:K.hasRevertedMessages}),{contentW:w,mainW:S,mainH:D,mainY:j,panelW:L,panelX:M,panelTopY:k,panelH:A,inputX:R,inputInnerW:f,inputLines:T,modelRowGap:I,inputWrapWidth:z,footerH:v}=O,b=GY(1200),y=b.visible,g=b.text,r=b.show,U$=wS({store:K,uiMode:E,copyToastVisible:y,copyToastText:g}),{headerStatsDisplay:C$,ctxPctChip:t$,modelInfo:T$,modeLabel:D$,assistantStatusDisplay:h,assistantStatusStyle:a,isLoading:d,loadingDots:m,footerRight:i}=U$,u=_Y({store:K,nodeLike:$,showToast:r}),{showConfig:$$,showToolApprovals:M$,modelId:P$,contextWindow:j$,temperature:r$,baseUrl:Y0,apiKeyDraft:z0,apiKeyMasked:o$,openConfig:u0,closeConfig:e$,applyConfig:E0,openToolApprovals:c0,applyToolApprovals:U0}=u,V0=UY({store:K,sessionsApi:X,showToast:r}),{showSessions:O0,showSwitchConfirm:J1,switchConfirmTitle:F1,switchConfirmTargetLabel:s1,switchConfirmReason:S1,openSelectedSession:C,createNewSession:l,confirmSwitch:J$,cancelSwitch:Q$,sessionsLoading:Y$,sessionsDeleteArmed:A$,sessionsList:L$,sessionsIndex:y$,refreshSessions:K$,openSessionsDialog:B$}=V0,b$=$Y({store:K,cols:V,rows:Z,nodeLike:$}),{showPathPicker:p,pathPickerMode:X$,pathPickerQuery:G$,pathPickerError:F$,pickerWorkspace:R$,pickerW:V$,pickerH:O$,pathPickerTitle:k$,pathPickerPlaceholder:w$,closePathPicker:h$}=b$;JY({store:K,nodeLike:$,showToast:r});let E$=[{value:"/new",detail:"Start a new session",onSelect:()=>{l({after:async()=>U.push("home")}),W.value=""}},{value:"/sessions",detail:"List/pick sessions",onSelect:()=>{B$(),W.value=""}},{value:"/settings",detail:"Configure model + API",onSelect:()=>{u0(),W.value=""}},{value:"/approvals",detail:"Configure tool approvals (auto/all)",onSelect:()=>LO("/approvals")}],d$=o6(!1),i$=o6(0),N0=o6(!1),K0=o6(null),i0=qS({store:K,rows:Z,contentW:w,focusMode:q,showSessions:O0,showSwitchConfirm:J1,showConfig:$$,showToolApprovals:M$,showPathPicker:p,showMessageActions:d$,showRedoConfirm:N0}),{showCommands:y0,commandIndex:I0,showTheme:b0,showApproval:L0,showAskUser:a0,showExitConfirm:i4,activeApproval:q4,approvalW:O6,approvalH:r4,activeAskUser:E7,askUserW:f7,askUserH:M7,configW:ZY,configH:iJ,toolApprovalsW:o2,toolApprovalsH:aU,anyDialogOpen:a2,openCommandPalette:P7,closeCommandPalette:t2}=i0;cJ(F,(f$)=>{K.setFocusFiles(f$)});let T4=m1(()=>String(K.state.sessionId??"").trim());cJ(T4,(f$)=>{if(!X||!f$)return;K$({preferId:f$})},{immediate:!0}),cJ(()=>[T4.value,N.value.length],([f$,l$],F0)=>{let[h0,H1]=F0??[void 0,0];if(f$!==h0){H.value=l$;return}if(l$!==H1&&H.value>=H1)H.value=l$;else if(H.value>l$)H.value=l$},{immediate:!0});let q6=m1(()=>{let f$=T4.value;if(!f$)return null;return L$.value.find((l$)=>l$.id===f$)??null}),WY=m1(()=>{return`# ${T4.value||"new"}`}),NY=m1(()=>{let f$=String(q6.value?.summary??"").trim();if(f$)return f$;let l$=K.state.messages.find((h0)=>h0.role==="user");return String(l$?.content??"").trim()||"New session"}),tU=m1(()=>[...eQ({openSessionsDialog:()=>void B$(),createNewSession:()=>void l(),openConfig:u0,openToolApprovals:c0}),{label:"Theme",detail:"Message colors",run:()=>b0.value=!0}]),w7=m1(()=>tU.value.map((f$)=>({label:f$.label,detail:f$.detail})));function BY(f$){if(t2(),!f$)return;tU.value.find((F0)=>F0.label===f$)?.run()}let L7=LT(),FY=m1(()=>{let f$=Math.max(0,S.value-4);return L7({messages:K.state.messages,width:f$,selectedToolCallId:K.state.selectedToolCallId,expandedBashOutputs:K.state.expandedBashOutputs,theme:K.state.ui.theme})}),e2={get value(){return FY.value}},A7=-1,rJ=new Map,HY=m1(()=>{let f$=K.state.messages.length;if(f$===A7&&rJ.size>0)return rJ;let l$=new Map;for(let F0 of K.state.messages){let h0=String(F0?.id??"").trim(),H1=String(F0?.role??"").trim();if(!h0)continue;if(H1==="user"||H1==="assistant"||H1==="tool")l$.set(h0,H1)}return A7=f$,rJ=l$,l$}),o=m1(()=>{let f$=Array.from(e2.value.toolLineById.entries());return f$.sort((l$,F0)=>l$[1]-F0[1]),f$.map(([l$])=>l$)}),X0=HS({lines:m1(()=>e2.value.lines),mainH:D}),{scrollTop:B0,stickToBottom:G1,maxScroll:D6,visibleLines:j6,onWheel:nJ}=X0,E6=PS({nodeLike:$,store:K,mainY:j,mainH:D,scrollTop:B0,lines:m1(()=>e2.value.lines),focusMode:q,messageActionsTargetId:K0,showMessageActions:d$,copyTextToClipboard:aQ,showCopyToast:r}),{messageSelectStart:s2,messageSelectEnd:f6,hasMessageSelection:a6,focusBrowserTextarea:w1,getSelectedMessageText:t0,clearMessageSelection:eU,onMessageClick:R7,onMessagePointerDown:z7,onMessagePointerMove:k7,onMessagePointerUp:UI,onMessageContextMenu:_I}=E6;function JI(f$){if(!f$||f$.type==="none")return;if(w1(),f$.type==="selectToolCall"){q.value="messages",K.selectToolCall(K.state.selectedToolCallId===f$.callId?null:f$.callId);return}if(f$.type==="openApproval"){if(q4.value)L0.value=!0;return}if(f$.type==="toggleItem"){K.toggleChecklist(f$.messageId,f$.part,f$.itemId);return}if(f$.type==="toggleCollapse"){K.toggleBlockCollapsed(f$.messageId,f$.part,f$.partIndex);return}if(f$.type==="toggleBashOutput"){K.toggleBashOutput(f$.toolCallId);return}if(f$.type==="showMessageActions")K0.value=f$.messageId,d$.value=!0}function GI(){let f$=K0.value;if(!f$)return;K.revertFromMessage(f$),d$.value=!1,K0.value=null,G1.value=!0}function QI(){let f$=K0.value;if(!f$)return;let l$=K.state.messages.find((h0)=>h0.id===f$);if(!l$)return;let F0=jS(l$);if(F0)aQ(F0);d$.value=!1,K0.value=null}function YI(){K.restoreRevertedMessages(),N0.value=!1,G1.value=!0}function KI(){N0.value=!1}async function XI(){let f$=K0.value;if(!f$)return;let l$=ES(K.state.messages,f$);if(!l$)return;d$.value=!1,K0.value=null,i$.value=0;try{await fS({sessionsApi:X,store:K,seed:l$})}catch{r("Failed to fork session.")}G1.value=!0,W.value="",F.value=[]}let T7=m1(()=>K.state.selectedToolCallId);async function VI(){if(!T7.value||K.state.runningToolCallId)return;await K.runToolCall(T7.value)}function ZI(f$){let l$=e2.value.toolLineById.get(f$);if(l$==null)return;let F0=Math.max(0,l$);if(F0<B0.value){B0.value=Q0(F0,0,D6.value);return}let h0=B0.value+Math.max(1,D.value)-1;if(l$>h0)B0.value=Q0(l$-Math.max(1,D.value)+1,0,D6.value)}function WI(f$){let l$=o.value;if(l$.length===0)return;let F0=T7.value,h0=F0?l$.indexOf(F0):-1,H1=(()=>{if(h0<0)return l$.length-1;let sU=h0+f$;if(sU<0)return l$.length-1;if(sU>=l$.length)return 0;return sU})(),L1=l$[H1];if(!L1)return;K.selectToolCall(L1),ZI(L1)}function LO(f$){let l$=Boolean(K.state.approval.pendingAutoRun)||Boolean(K.state.approval.active&&K.state.approval.active.status==="pending")||K.state.approval.queue.length>0;if(d.value&&!K.state.paused&&!l$){r("Wait for the current response to finish.");return}let F0=u2(f$),h0=F0.trimEnd(),H1=F.value;if(!h0&&H1.length===0)return;let L1=tQ(h0);if(L1.kind==="approvals"){c0(),W.value="";return}if(L1.kind==="approvals_invalid_args"){r("Use /approvals (no on/off)."),W.value="";return}if(L1.kind==="settings"){u0(),W.value="";return}if(L1.kind==="sessions"){B$(),W.value="";return}if(L1.kind==="new"){l({after:async()=>U.push("home")}),W.value="";return}if(L1.kind==="redo"){if(K.hasRevertedMessages.value)N0.value=!0;W.value="";return}if(G1.value=!0,H1.length>0)F0=F0.replace(/^[\s\u200B]*\]+/u,""),K.sendUserInput({content:F0,focusFiles:H1});else K.send(F0);F.value=[],H.value=N.value.length,W.value=""}async function AO(){if(K.interrupt(),K.state.sessionId="",K.setEnvVar("GOATCHAIN_SESSION_ID",void 0),n2()){let f$=globalThis.process;if(f$?.env)delete f$.env.GOATCHAIN_SESSION_ID}K.state.messages.splice(0,K.state.messages.length),K.state.revertedMessages.splice(0,K.state.revertedMessages.length),K.state.selectedToolCallId=null,K.state.runningToolCallId=null,K.state.paused=null,K.state.approval.active=null,K.state.approval.pendingAutoRun=null,K.state.approval.queue=[],K.state.approval.decisions={},K.state.approval.approvedToolCalls={},K.state.usage.prompt_tokens=0,K.state.usage.completion_tokens=0,K.state.usage.total_tokens=0,await U.push("home")}cJ(()=>_.value.params,(f$)=>{if(f$?.open==="settings")u0(),U.replace("chat")},{immediate:!0});function NI(f$){K.setCwd(f$)}let BI=DS({nodeLike:$,store:K,events:J,input:W,inputWrapWidth:z,history:N,historyIndex:H,focusMode:q,toolCallIds:o,selectedToolCallId:T7,moveToolSelection:WI,runSelected:VI,anyDialogOpen:a2,showCommands:y0,showTheme:b0,showSessions:O0,showMessageActions:d$,showRedoConfirm:N0,showConfig:$$,showToolApprovals:M$,showApproval:L0,showAskUser:a0,showPathPicker:p,showExitConfirm:i4,openCommandPalette:P7,closeCommandPalette:t2,openConfig:u0,closeConfig:e$,closePathPicker:h$,cycleUiMode:P,isLoading:d,hasMessageSelection:a6,clearMessageSelection:eU,getSelectedMessageText:t0,copyTextToClipboard:aQ,exitSessionToHome:AO}),{onInputKeydown:FI,onSelectionKeydown:HI,onGlobalKeydown:OI,onGlobalKeydownCapture:qI}=BI;function DI(){let f$=J.value;if(!f$||typeof f$.debugNodes!=="function"||typeof f$.focus!=="function")return;let l$=Math.floor(R.value),F0=Math.floor(k.value),h0=Math.floor(f.value),H1=Math.floor(T.value),L1=(f$.debugNodes?.()??[]).filter((M6)=>M6?.visible&&M6?.focusable),sU=L1.find((M6)=>{let A1=M6?.rect;return A1&&A1.x===l$&&A1.y===F0&&A1.w===h0&&A1.h===H1});if(sU?.id){f$.focus(sU.id);return}let zO=l$+Math.floor(Math.max(0,h0-1)/2),kO=F0+Math.floor(Math.max(0,H1-1)/2),TO=L1.filter((M6)=>{let A1=M6?.rect;return A1&&zO>=A1.x&&kO>=A1.y&&zO<A1.x+A1.w&&kO<A1.y+A1.h});TO.sort((M6,A1)=>{let IO=M6?.zIndex??0,vO=A1?.zIndex??0;if(vO!==IO)return vO-IO;let CO=M6?.rect??{w:0,h:0},yO=A1?.rect??{w:0,h:0};return CO.w*CO.h-yO.w*yO.h});let SO=TO[0];if(SO?.id)f$.focus(SO.id),Q.invalidate()}async function RO(){await U0$(),queueMicrotask(()=>{queueMicrotask(()=>{setTimeout(()=>{w1(),DI()},0)})})}return cJ(a2,(f$)=>{if(f$)return;RO()}),cJ(d,(f$,l$)=>{if(f$||!l$)return;if(a2.value||a6.value)return;q.value="input",RO()}),_0$(L4,{nodeLike:$,router:U,store:K,sessionsApi:X,cols:V,rows:Z,contentW:w,mainY:j,mainW:S,mainH:D,scrollTop:B0,visibleLines:j6,messageRoleById:HY,messageSelectStart:s2,messageSelectEnd:f6,focusMode:q,onWheel:nJ,onSelectionKeydown:HI,onMessageClick:R7,onMessagePointerDown:z7,onMessagePointerMove:k7,onMessagePointerUp:UI,onMessageContextMenu:_I,onLineClick:JI,focusBrowserTextarea:w1,showCopyToast:r,sessionHeaderTitle:WY,sessionHeaderSummary:NY,headerStatsDisplay:C$,panelW:L,panelX:M,panelTopY:k,panelH:A,inputX:R,inputInnerW:f,inputLines:T,modelRowGap:I,input:W,focusFiles:F,pickerWorkspace:R$,promptSuggestions:E$,showCommands:y0,showTheme:b0,showSessions:O0,showMessageActions:d$,showRedoConfirm:N0,showConfig:$$,showToolApprovals:M$,showApproval:L0,showPathPicker:p,pathPickerMode:X$,pathPickerQuery:G$,pathPickerError:F$,send:LO,onInputKeydown:FI,setContextCwd:NI,ctxPctChip:t$,modelInfo:T$,modeLabel:D$,assistantStatusDisplay:h,assistantStatusStyle:a,footerH:v,footerRight:i,isLoading:d,loadingDots:m,commandOptions:w7,commandIndex:I0,onCommandSelect:BY,closeCommandPalette:t2,refreshSessions:K$,sessionsLoading:Y$,sessionsDeleteArmed:A$,sessionsList:L$,sessionsIndex:y$,showSwitchConfirm:J1,switchConfirmTitle:F1,switchConfirmTargetLabel:s1,switchConfirmReason:S1,openSelectedSession:C,createNewSession:l,confirmSwitch:J$,cancelSwitch:Q$,messageActionsIndex:i$,messageActionsTargetId:K0,handleRevertMessage:GI,handleCopyMessage:QI,handleForkSession:XI,confirmRestore:YI,cancelRestore:KI,pickerW:V$,pickerH:O$,pathPickerTitle:k$,pathPickerPlaceholder:w$,configW:ZY,configH:iJ,modelId:P$,contextWindow:j$,temperature:r$,baseUrl:Y0,apiKeyDraft:z0,apiKeyMasked:o$,applyConfig:E0,closeConfig:e$,toolApprovalsW:o2,toolApprovalsH:aU,applyToolApprovals:U0,activeApproval:q4,approvalW:O6,approvalH:r4,activeAskUser:E7,showAskUser:a0,askUserW:f7,askUserH:M7,showExitConfirm:i4,exitSessionToHome:AO}),()=>pU(T0,{x:0,y:0,w:V.value,h:Z.value,zIndex:0,focusable:!1,onKeydownCapture:qI,onKeydown:OI},()=>[pU(s,{key:"bg",x:0,y:0,w:V.value,h:Z.value,value:"",style:vQ,zIndex:-100}),pU(TT),pU(ST),pU(zT),pU(kT),pU(NS)])}});import{computed as a$,defineComponent as G0$,h as S0,inject as Q0$,ref as H6,watch as TS}from"vue";var zS=7,J0$=["________ ________ ________ _________ ________ ___ ___ ________ ___ ________","|\\ ____\\|\\ __ \\|\\ __ \\|\\___ ___\\ |\\ ____\\|\\ \\|\\ \\|\\ __ \\|\\ \\|\\ ___ \\","\\ \\ \\___|\\ \\ \\|\\ \\ \\ \\|\\ \\|___ \\ \\_| \\ \\ \\___|\\ \\ \\\\\\ \\ \\ \\|\\ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\ \\ __\\ \\ \\\\\\ \\ \\ __ \\ \\ \\ \\ \\ \\ \\ \\ \\ __ \\ \\ __ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\ \\|\\ \\ \\ \\\\\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\____\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\_______\\ \\_______\\ \\__\\ \\__\\ \\ \\__\\ \\ \\_______\\ \\__\\ \\__\\ \\__\\ \\__\\ \\__\\ \\__\\\\ \\__\\"," \\|_______|\\|_______|\\|__|\\|__| \\|__| \\|_______|\\|__|\\|__|\\|__|\\|__|\\|__|\\|__| \\|__|"];function kS($,U=1){return J0$}var SS="";function Y0$($){return`[... ${($.match(/\n/g)||[]).length+1} lines]`}function K0$($,U){if(!$)return"";let _="",G=0;for(let J=0;J<$.length;){if($[J]===SS){_+=U[G]??"",G++,J+=1;continue}let Y=$.codePointAt(J)??0,K=String.fromCodePoint(Y);_+=K,J+=K.length}return _}function X0$($,U){if(!$)return"";let _="",G=0;for(let J=0;J<$.length;){if($[J]===SS){let X=U[G]??"";_+=Y0$(X),G++,J+=1;continue}let Y=$.codePointAt(J)??0,K=String.fromCodePoint(Y);_+=K,J+=K.length}return _}var qO=G0$({name:"GoatChainHomePage",setup(){let $=vJ(),U=x0(),{events:_}=H0(),G=a$(()=>U.clipRect?.w??0),J=a$(()=>U.clipRect?.h??0),Q=Q0$(lU,null);if(!Q)throw Error("GoatChainBridge is missing (did you forget to wrap with <GoatChainProvider />?)");let{store:Y,sessions:K}=Q,X=n2(),V=H6(""),Z=H6(!1),W=H6(!1),N=H6(0),H=H6([]),F=H6([]),q=H6(!1),E=H6(""),P=H6("Multiline Text"),O=H6(Y.getMode?.()??"agent");function w(o=1){let X0=["plan","agent"],B0=O.value,D6=(X0.indexOf(B0)+o+X0.length)%X0.length,j6=X0[D6]??"agent";O.value=j6,Y.setMode?.(j6)}function S(o){let X0=F.value[o];if(X0){E.value=X0;let B0=(X0.match(/\n/g)||[]).length+1;P.value=`Multiline Text (${B0} lines)`,q.value=!0}}function D(){q.value=!1}let j=GY(1200),L=j.visible,M=j.text,k=j.show,A=_Y({store:Y,nodeLike:X,showToast:k,guardPendingApprovals:!1}),{showConfig:R,showToolApprovals:f,modelId:T,contextWindow:I,temperature:z,baseUrl:v,apiKeyDraft:b,apiKeyMasked:y,openConfig:g,closeConfig:r,applyConfig:U$,openToolApprovals:C$,applyToolApprovals:t$}=A,T$=UY({store:Y,sessionsApi:K,showToast:k}),{showSessions:D$,showSwitchConfirm:h,switchConfirmTitle:a,switchConfirmTargetLabel:d,switchConfirmReason:m,confirmSwitch:i,cancelSwitch:u,sessionsLoading:$$,sessionsDeleteArmed:M$,sessionsList:P$,sessionsIndex:j$,refreshSessions:r$,openSessionsDialog:Y0,openSelectedSession:z0,createNewSession:o$}=T$,u0=$Y({store:Y,cols:G,rows:J,nodeLike:X}),{showPathPicker:e$,pathPickerMode:E0,pathPickerQuery:c0,pathPickerError:U0,pickerWorkspace:V0,pickerW:O0,pickerH:J1,pathPickerTitle:F1,pathPickerPlaceholder:s1,openPathPicker:S1,closePathPicker:C}=u0;JY({store:Y,nodeLike:X,showToast:k});let l=[{value:"/sessions",detail:"List/pick sessions",onSelect:()=>{Y0(),V.value="",F.value=[]}},{value:"/settings",detail:"Configure model + API",onSelect:()=>{g(),V.value="",F.value=[]}},{value:"/new",detail:"Start a new session",onSelect:()=>{o$(),V.value="",F.value=[]}},{value:"/approvals",detail:"Configure tool approvals (auto/all)",onSelect:()=>{V.value="/approvals",L7()}}];TS(H,(o)=>{Y.setFocusFiles(o)});let J$=a$(()=>{return[...eQ({openSessionsDialog:()=>void Y0(),createNewSession:()=>void o$(),openConfig:g,openToolApprovals:C$})]}),Q$=a$(()=>J$.value.map((o)=>({label:o.label,detail:o.detail}))),Y$=a$(()=>({fg:"whiteBright",bg:"black"})),A$=a$(()=>({fg:"white",dim:!0,bg:"black"})),L$=a$(()=>({fg:"whiteBright",bg:"blackBright"})),y$=a$(()=>({fg:"whiteBright",bg:"blackBright"})),K$=a$(()=>({fg:"blueBright",bg:"blackBright"})),B$=a$(()=>G.value>=70&&J.value>=26),b$=a$(()=>B$.value?1:0),p=a$(()=>B$.value?2:1),X$=a$(()=>B$.value?kS("goat",b$.value):["goat"]),G$=a$(()=>B$.value?zS:1),F$=a$(()=>m$(X$.value[0]??"")),R$=a$(()=>F$.value+p.value),V$=a$(()=>Math.max(0,Math.floor((G.value-R$.value)/2))),O$=a$(()=>{let o=Math.max(0,Math.floor(G.value));if(o<=0)return 0;let X0=Math.min(44,o),B0=Math.max(X0,o-8);return Q0(Math.floor(o*0.72),X0,B0)}),k$=a$(()=>Math.max(0,Math.floor((G.value-O$.value)/2))),w$=2,h$=a$(()=>k$.value+1+w$),E$=a$(()=>Math.max(0,O$.value-1-w$)),d$=a$(()=>Math.max(1,E$.value)),i$=a$(()=>{if(!V.value)return 1;let o=d$.value;if(o<=0)return 1;let X0=X0$(V.value,F.value);return Math.max(1,M4(X0,o).length)}),N0=a$(()=>Q0(i$.value,1,7)),K0=1,i0=1,y0=a$(()=>K0+N0.value+i0+1+K0),I0=2,b0=a$(()=>{let o=Math.max(1,J.value-I0-G$.value-y0.value-3);return Q0(Math.floor(J.value*0.32),1,o)}),L0=a$(()=>b0.value+G$.value+4),a0=a$(()=>L0.value+y0.value-1),i4=a$(()=>L0.value+K0),q4=a$(()=>i4.value+N0.value+i0),O6=a$(()=>Array.from({length:Math.max(0,y0.value)},()=>"┃").join(`
|
|
851
|
+
`;try{i$$(p$$(),J)}catch{}}import{ref as F6,watch as o$$}from"vue";function UY($){let U=F6(!1),_=F6(!1),G=F6("Switch Session"),J=F6(""),Q=F6(""),Y=F6(!1),K=F6(!1),X=F6([]),V=F6(0),Z=F6(null);function W(){let D=$.store.state;if(D.runningAgentRound)return"Agent is still responding";if(D.paused?.kind==="ask_user")return"Awaiting AskUser answers";if(D.paused?.kind==="tool_approval")return"Awaiting tool approval";if(D.approval?.active?.status==="pending")return"Pending approval";return""}function N(){let D=$.store.state;if(D.runningAgentRound)return!0;if(D.paused)return!0;return Boolean(D.approval?.active&&D.approval.active.status==="pending")}async function H(D){if(!$.sessionsApi){$.showToast?.("Sessions are only available in Node/CLI mode."),w0("session_switch_unavailable",{title:D.title,target:D.targetLabel});return}if(!N()){w0("session_switch",{title:D.title,target:D.targetLabel,busy:!1}),await D.run(),_.value=!1,Z.value=null,G.value="Switch Session",J.value="",Q.value="",U.value=!1,K.value=!1;return}Z.value={run:D.run},G.value=D.title,J.value=D.targetLabel,Q.value=W(),_.value=!0,w0("session_switch_prompt",{title:D.title,target:D.targetLabel,reason:Q.value})}async function F(D={}){let j=$.sessionsApi;if(!j){X.value=[],V.value=0;return}Y.value=!0;try{let L=await j.list();X.value=L.slice().sort((A,R)=>Number(R?.updatedAt??0)-Number(A?.updatedAt??0));let M=Math.max(0,X.value.length-1),k=-1;if(D.preferId)k=X.value.findIndex((A)=>A.id===D.preferId);if(k<0&&typeof D.preferIndex==="number")k=Q0(D.preferIndex,0,M);if(k<0){let A=String($.store.state.sessionId??"");k=X.value.findIndex((R)=>R.id===A)}V.value=k>=0?k:0}catch{X.value=[],V.value=0}finally{Y.value=!1}}async function q(){if(!$.sessionsApi){$.showToast?.("Sessions are only available in Node/CLI mode.");return}K.value=!1,U.value=!0,await F()}async function E(D){let j=$.sessionsApi,L=X.value[V.value];if(!j||!L)return;await H({title:"Switch Session",targetLabel:String(L.title||L.id),run:async()=>{let M=String($.store.state.sessionId??"");await j.use(L.id),w0("session_switch_run",{from:M,to:String(L.id),kind:"use"}),await D?.after?.()}})}async function P(D){let j=$.sessionsApi;if(!j){$.showToast?.("Sessions are only available in Node/CLI mode.");return}await H({title:"New Session",targetLabel:"a new session",run:async()=>{let L=String($.store.state.sessionId??"");await j.createNew(),w0("session_switch_run",{from:L,to:String($.store.state.sessionId??""),kind:"new"}),await D?.after?.()}})}async function O(){let D=Z.value;if(!D)return;_.value=!1,Z.value=null,$.store.interrupt(),w0("session_switch_confirm",{title:G.value,target:J.value,reason:Q.value}),await D.run(),U.value=!1,K.value=!1,G.value="Switch Session",J.value="",Q.value=""}function w(){_.value=!1,Z.value=null,w0("session_switch_cancel",{title:G.value,target:J.value,reason:Q.value}),G.value="Switch Session",J.value="",Q.value=""}return o$$([U,()=>String($.store.state.sessionId??"").trim()],([D,j])=>{if(!D)return;if(!$.sessionsApi||!j)return;F({preferId:j})}),{showSessions:U,showSwitchConfirm:_,switchConfirmTitle:G,switchConfirmTargetLabel:J,switchConfirmReason:Q,sessionsLoading:Y,sessionsDeleteArmed:K,sessionsList:X,sessionsIndex:V,refreshSessions:F,openSessionsDialog:q,openSelectedSession:E,createNewSession:P,confirmSwitch:O,cancelSwitch:w}}import{computed as a$$,ref as nU}from"vue";function AS($){let U=String($??"").trim();if(!U)return"";return`***${U.slice(-4)||"****"}`}function _Y($){let U=nU(!1),_=nU(!1),G=nU(""),J=nU(""),Q=nU(""),Y=nU(""),K=nU(""),X=a$$(()=>{let q=$.store.state.context?.env??{};return AS(q.OPENAI_API_KEY)});function V(){return $.store.state.paused?.kind==="tool_approval"||$.store.state.approval.active?.status==="pending"}function Z(){G.value="",J.value="",Q.value="",Y.value="",K.value="",U.value=!0,queueMicrotask(()=>{G.value=String($.store.state.config.model??"").trim()||"deepseek-v3.1",J.value=String($.store.state.config.context_window??128000),Q.value=String($.store.state.config.temperature??"");let q=$.store.state.context?.env??{};Y.value=String(q.GOATCHAIN_OPENAI_BASE_URL||q.OPENAI_BASE_URL||""),K.value=""})}function W(){U.value=!1}function N(){if($.guardPendingApprovals!==!1&&V()){$.showToast("Resolve the pending approval before changing settings.");return}let q=G.value.trim();if(q)$.store.state.config.model=q;$.store.state.config.context_window=Q0(Number.parseInt(J.value||"0",10)||$.store.state.config.context_window,1000,2000000);let E=Number.parseFloat(Q.value);$.store.state.config.temperature=Number.isFinite(E)?E:$.store.state.config.temperature,$.store.setEnvVar("GOATCHAIN_MODEL",$.store.state.config.model),$.store.setEnvVar("GOATCHAIN_CONTEXT_WINDOW",String($.store.state.config.context_window)),$.store.setEnvVar("GOATCHAIN_TEMPERATURE",String($.store.state.config.temperature??"")),$.store.setEnvVar("GOATCHAIN_OPENAI_BASE_URL",Y.value.trim()||void 0);let P=K.value.trim();if(P)$.store.setEnvVar("OPENAI_API_KEY",P);if($.nodeLike){let O=globalThis.process;if(O?.env){O.env.GOATCHAIN_MODEL=$.store.state.config.model,O.env.GOATCHAIN_CONTEXT_WINDOW=String($.store.state.config.context_window),O.env.GOATCHAIN_TEMPERATURE=String($.store.state.config.temperature??"");let w=Y.value.trim();if(w)O.env.GOATCHAIN_OPENAI_BASE_URL=w;else delete O.env.GOATCHAIN_OPENAI_BASE_URL;if(P)O.env.OPENAI_API_KEY=P}}K.value="",W()}function H(){if(V()){$.showToast("Resolve the pending approval before changing settings.");return}_.value=!0}function F(q){if($.store.state.approval.mode=q,$.store.setEnvVar("GOATCHAIN_TOOL_APPROVALS",q),$.nodeLike){let E=globalThis.process;if(E?.env)E.env.GOATCHAIN_TOOL_APPROVALS=q}$.showToast(`Tool approvals: ${q}`)}return{showConfig:U,showToolApprovals:_,modelId:G,contextWindow:J,temperature:Q,baseUrl:Y,apiKeyDraft:K,apiKeyMasked:X,openConfig:Z,closeConfig:W,applyConfig:N,openToolApprovals:H,applyToolApprovals:F}}function JY($){let U=$.store.state.context?.env??{},_=(Y)=>{if(typeof $.store.showUpgradeNotification==="function")$.store.showUpgradeNotification(Y);else $.showToast(Y)};if($.nodeLike)globalThis.__GOATCHAIN_UPGRADE_TOAST__=_;let G=String(U.GOATCHAIN_STARTUP_UPGRADE_TOAST??"").trim();if(G){if(_(G),$.store.setEnvVar("GOATCHAIN_STARTUP_UPGRADE_TOAST",void 0),$.nodeLike){let Y=globalThis.process;if(Y?.env)delete Y.env.GOATCHAIN_STARTUP_UPGRADE_TOAST}}if($.nodeLike)t$$(U,_);let J=String(U.GOATCHAIN_STARTUP_TOAST??"").trim();if(!J)return;if($.showToast(J),$.store.setEnvVar("GOATCHAIN_STARTUP_TOAST",void 0),!$.nodeLike)return;let Q=globalThis.process;if(Q?.env)delete Q.env.GOATCHAIN_STARTUP_TOAST}async function t$$($,U){try{let{getGoatChainUserDir:_}=await Promise.resolve().then(() => C3),[{readFile:G,unlink:J},Q]=await Promise.all([import("node:fs/promises"),import("node:path")]),Y=await _($),K=Q.join(Y,"upgrade-toast.json"),X=await G(K,"utf8"),V=JSON.parse(X),Z=String(V?.message??"").trim();if(await J(K),Z)U(Z)}catch{}}import{onBeforeUnmount as e$$,ref as RS}from"vue";function GY($=1200){let U=RS(!1),_=RS(""),G=null,J=(Q)=>{if(_.value=String(Q??""),U.value=!0,G)clearTimeout(G);G=setTimeout(()=>{U.value=!1,G=null},Math.max(0,$))};return e$$(()=>{if(G)clearTimeout(G);G=null}),{visible:U,text:_,show:J}}var OO=s$$({name:"GoatChainChatPage",setup(){let $=n2(),U=vJ(),_=YQ(),G=x0(),{events:J,scheduler:Q}=H0(),Y=$0$(lU,null);if(!Y)throw Error("GoatChainBridge is missing (did you forget to wrap with <GoatChainProvider />?)");let{store:K,sessions:X}=Y,V=m1(()=>G.clipRect?.w??0),Z=m1(()=>G.clipRect?.h??0),W=o6(""),N=m1(()=>{let f$=[];for(let l$ of K.state.messages){if(!l$||l$.role!=="user")continue;let F0=String(l$.content??""),h0=u2(F0).trim();if(!h0)continue;f$.push(h0)}return f$}),H=o6(N.value.length),F=o6([]),q=o6("input"),E=o6(K.getMode?.()??"agent");function P(f$=1){let l$=["plan","agent"],F0=E.value,H1=(l$.indexOf(F0)+f$+l$.length)%l$.length,L1=l$[H1]??"agent";E.value=L1,K.setMode?.(L1)}let O=FS({cols:V,rows:Z,input:W,hasRevertedMessages:K.hasRevertedMessages}),{contentW:w,mainW:S,mainH:D,mainY:j,panelW:L,panelX:M,panelTopY:k,panelH:A,inputX:R,inputInnerW:f,inputLines:T,modelRowGap:I,inputWrapWidth:z,footerH:v}=O,b=GY(1200),y=b.visible,g=b.text,r=b.show,U$=wS({store:K,uiMode:E,copyToastVisible:y,copyToastText:g}),{headerStatsDisplay:C$,ctxPctChip:t$,modelInfo:T$,modeLabel:D$,assistantStatusDisplay:h,assistantStatusStyle:a,isLoading:d,loadingDots:m,footerRight:i}=U$,u=_Y({store:K,nodeLike:$,showToast:r}),{showConfig:$$,showToolApprovals:M$,modelId:P$,contextWindow:j$,temperature:r$,baseUrl:Y0,apiKeyDraft:z0,apiKeyMasked:o$,openConfig:u0,closeConfig:e$,applyConfig:E0,openToolApprovals:c0,applyToolApprovals:U0}=u,V0=UY({store:K,sessionsApi:X,showToast:r}),{showSessions:O0,showSwitchConfirm:J1,switchConfirmTitle:F1,switchConfirmTargetLabel:s1,switchConfirmReason:S1,openSelectedSession:C,createNewSession:l,confirmSwitch:J$,cancelSwitch:Q$,sessionsLoading:Y$,sessionsDeleteArmed:A$,sessionsList:L$,sessionsIndex:y$,refreshSessions:K$,openSessionsDialog:B$}=V0,b$=$Y({store:K,cols:V,rows:Z,nodeLike:$}),{showPathPicker:p,pathPickerMode:X$,pathPickerQuery:G$,pathPickerError:F$,pickerWorkspace:R$,pickerW:V$,pickerH:O$,pathPickerTitle:k$,pathPickerPlaceholder:w$,closePathPicker:h$}=b$;JY({store:K,nodeLike:$,showToast:r});let E$=[{value:"/new",detail:"Start a new session",onSelect:()=>{l({after:async()=>U.push("home")}),W.value=""}},{value:"/sessions",detail:"List/pick sessions",onSelect:()=>{B$(),W.value=""}},{value:"/settings",detail:"Configure model + API",onSelect:()=>{u0(),W.value=""}},{value:"/approvals",detail:"Configure tool approvals (auto/all)",onSelect:()=>LO("/approvals")}],d$=o6(!1),i$=o6(0),N0=o6(!1),K0=o6(null),i0=qS({store:K,rows:Z,contentW:w,focusMode:q,showSessions:O0,showSwitchConfirm:J1,showConfig:$$,showToolApprovals:M$,showPathPicker:p,showMessageActions:d$,showRedoConfirm:N0}),{showCommands:y0,commandIndex:I0,showTheme:b0,showApproval:L0,showAskUser:a0,showExitConfirm:i4,activeApproval:q4,approvalW:O6,approvalH:r4,activeAskUser:E7,askUserW:f7,askUserH:M7,configW:ZY,configH:iJ,toolApprovalsW:o2,toolApprovalsH:aU,anyDialogOpen:a2,openCommandPalette:P7,closeCommandPalette:t2}=i0;cJ(F,(f$)=>{K.setFocusFiles(f$)});let T4=m1(()=>String(K.state.sessionId??"").trim());cJ(T4,(f$)=>{if(!X||!f$)return;K$({preferId:f$})},{immediate:!0}),cJ(()=>[T4.value,N.value.length],([f$,l$],F0)=>{let[h0,H1]=F0??[void 0,0];if(f$!==h0){H.value=l$;return}if(l$!==H1&&H.value>=H1)H.value=l$;else if(H.value>l$)H.value=l$},{immediate:!0});let q6=m1(()=>{let f$=T4.value;if(!f$)return null;return L$.value.find((l$)=>l$.id===f$)??null}),WY=m1(()=>{return`# ${T4.value||"new"}`}),NY=m1(()=>{let f$=String(q6.value?.summary??"").trim();if(f$)return f$;let l$=K.state.messages.find((h0)=>h0.role==="user");return String(l$?.content??"").trim()||"New session"}),tU=m1(()=>[...eQ({openSessionsDialog:()=>void B$(),createNewSession:()=>void l(),openConfig:u0,openToolApprovals:c0}),{label:"Theme",detail:"Message colors",run:()=>b0.value=!0}]),w7=m1(()=>tU.value.map((f$)=>({label:f$.label,detail:f$.detail})));function BY(f$){if(t2(),!f$)return;tU.value.find((F0)=>F0.label===f$)?.run()}let L7=LT(),FY=m1(()=>{let f$=Math.max(0,S.value-4);return L7({messages:K.state.messages,width:f$,selectedToolCallId:K.state.selectedToolCallId,expandedBashOutputs:K.state.expandedBashOutputs,theme:K.state.ui.theme})}),e2={get value(){return FY.value}},A7=-1,rJ=new Map,HY=m1(()=>{let f$=K.state.messages.length;if(f$===A7&&rJ.size>0)return rJ;let l$=new Map;for(let F0 of K.state.messages){let h0=String(F0?.id??"").trim(),H1=String(F0?.role??"").trim();if(!h0)continue;if(H1==="user"||H1==="assistant"||H1==="tool")l$.set(h0,H1)}return A7=f$,rJ=l$,l$}),o=m1(()=>{let f$=Array.from(e2.value.toolLineById.entries());return f$.sort((l$,F0)=>l$[1]-F0[1]),f$.map(([l$])=>l$)}),X0=HS({lines:m1(()=>e2.value.lines),mainH:D}),{scrollTop:B0,stickToBottom:G1,maxScroll:D6,visibleLines:j6,onWheel:nJ}=X0,E6=PS({nodeLike:$,store:K,mainY:j,mainH:D,scrollTop:B0,lines:m1(()=>e2.value.lines),focusMode:q,messageActionsTargetId:K0,showMessageActions:d$,copyTextToClipboard:aQ,showCopyToast:r}),{messageSelectStart:s2,messageSelectEnd:f6,hasMessageSelection:a6,focusBrowserTextarea:w1,getSelectedMessageText:t0,clearMessageSelection:eU,onMessageClick:R7,onMessagePointerDown:z7,onMessagePointerMove:k7,onMessagePointerUp:UI,onMessageContextMenu:_I}=E6;function JI(f$){if(!f$||f$.type==="none")return;if(w1(),f$.type==="selectToolCall"){q.value="messages",K.selectToolCall(K.state.selectedToolCallId===f$.callId?null:f$.callId);return}if(f$.type==="openApproval"){if(q4.value)L0.value=!0;return}if(f$.type==="toggleItem"){K.toggleChecklist(f$.messageId,f$.part,f$.itemId);return}if(f$.type==="toggleCollapse"){K.toggleBlockCollapsed(f$.messageId,f$.part,f$.partIndex);return}if(f$.type==="toggleBashOutput"){K.toggleBashOutput(f$.toolCallId);return}if(f$.type==="showMessageActions")K0.value=f$.messageId,d$.value=!0}function GI(){let f$=K0.value;if(!f$)return;K.revertFromMessage(f$),d$.value=!1,K0.value=null,G1.value=!0}function QI(){let f$=K0.value;if(!f$)return;let l$=K.state.messages.find((h0)=>h0.id===f$);if(!l$)return;let F0=jS(l$);if(F0)aQ(F0);d$.value=!1,K0.value=null}function YI(){K.restoreRevertedMessages(),N0.value=!1,G1.value=!0}function KI(){N0.value=!1}async function XI(){let f$=K0.value;if(!f$)return;let l$=ES(K.state.messages,f$);if(!l$)return;d$.value=!1,K0.value=null,i$.value=0;try{await fS({sessionsApi:X,store:K,seed:l$})}catch{r("Failed to fork session.")}G1.value=!0,W.value="",F.value=[]}let T7=m1(()=>K.state.selectedToolCallId);async function VI(){if(!T7.value||K.state.runningToolCallId)return;await K.runToolCall(T7.value)}function ZI(f$){let l$=e2.value.toolLineById.get(f$);if(l$==null)return;let F0=Math.max(0,l$);if(F0<B0.value){B0.value=Q0(F0,0,D6.value);return}let h0=B0.value+Math.max(1,D.value)-1;if(l$>h0)B0.value=Q0(l$-Math.max(1,D.value)+1,0,D6.value)}function WI(f$){let l$=o.value;if(l$.length===0)return;let F0=T7.value,h0=F0?l$.indexOf(F0):-1,H1=(()=>{if(h0<0)return l$.length-1;let sU=h0+f$;if(sU<0)return l$.length-1;if(sU>=l$.length)return 0;return sU})(),L1=l$[H1];if(!L1)return;K.selectToolCall(L1),ZI(L1)}function LO(f$){let l$=Boolean(K.state.approval.pendingAutoRun)||Boolean(K.state.approval.active&&K.state.approval.active.status==="pending")||K.state.approval.queue.length>0;if(d.value&&!K.state.paused&&!l$)r("Interrupting current response..."),K.interrupt();let F0=u2(f$),h0=F0.trimEnd(),H1=F.value;if(!h0&&H1.length===0)return;let L1=tQ(h0);if(L1.kind==="approvals"){c0(),W.value="";return}if(L1.kind==="approvals_invalid_args"){r("Use /approvals (no on/off)."),W.value="";return}if(L1.kind==="settings"){u0(),W.value="";return}if(L1.kind==="sessions"){B$(),W.value="";return}if(L1.kind==="new"){l({after:async()=>U.push("home")}),W.value="";return}if(L1.kind==="redo"){if(K.hasRevertedMessages.value)N0.value=!0;W.value="";return}if(G1.value=!0,H1.length>0)F0=F0.replace(/^[\s\u200B]*\]+/u,""),K.sendUserInput({content:F0,focusFiles:H1});else K.send(F0);F.value=[],H.value=N.value.length,W.value=""}async function AO(){if(K.interrupt(),K.state.sessionId="",K.setEnvVar("GOATCHAIN_SESSION_ID",void 0),n2()){let f$=globalThis.process;if(f$?.env)delete f$.env.GOATCHAIN_SESSION_ID}K.state.messages.splice(0,K.state.messages.length),K.state.revertedMessages.splice(0,K.state.revertedMessages.length),K.state.selectedToolCallId=null,K.state.runningToolCallId=null,K.state.paused=null,K.state.approval.active=null,K.state.approval.pendingAutoRun=null,K.state.approval.queue=[],K.state.approval.decisions={},K.state.approval.approvedToolCalls={},K.state.usage.prompt_tokens=0,K.state.usage.completion_tokens=0,K.state.usage.total_tokens=0,await U.push("home")}cJ(()=>_.value.params,(f$)=>{if(f$?.open==="settings")u0(),U.replace("chat")},{immediate:!0});function NI(f$){K.setCwd(f$)}let BI=DS({nodeLike:$,store:K,events:J,input:W,inputWrapWidth:z,history:N,historyIndex:H,focusMode:q,toolCallIds:o,selectedToolCallId:T7,moveToolSelection:WI,runSelected:VI,anyDialogOpen:a2,showCommands:y0,showTheme:b0,showSessions:O0,showMessageActions:d$,showRedoConfirm:N0,showConfig:$$,showToolApprovals:M$,showApproval:L0,showAskUser:a0,showPathPicker:p,showExitConfirm:i4,openCommandPalette:P7,closeCommandPalette:t2,openConfig:u0,closeConfig:e$,closePathPicker:h$,cycleUiMode:P,isLoading:d,hasMessageSelection:a6,clearMessageSelection:eU,getSelectedMessageText:t0,copyTextToClipboard:aQ,exitSessionToHome:AO}),{onInputKeydown:FI,onSelectionKeydown:HI,onGlobalKeydown:OI,onGlobalKeydownCapture:qI}=BI;function DI(){let f$=J.value;if(!f$||typeof f$.debugNodes!=="function"||typeof f$.focus!=="function")return;let l$=Math.floor(R.value),F0=Math.floor(k.value),h0=Math.floor(f.value),H1=Math.floor(T.value),L1=(f$.debugNodes?.()??[]).filter((M6)=>M6?.visible&&M6?.focusable),sU=L1.find((M6)=>{let A1=M6?.rect;return A1&&A1.x===l$&&A1.y===F0&&A1.w===h0&&A1.h===H1});if(sU?.id){f$.focus(sU.id);return}let zO=l$+Math.floor(Math.max(0,h0-1)/2),kO=F0+Math.floor(Math.max(0,H1-1)/2),TO=L1.filter((M6)=>{let A1=M6?.rect;return A1&&zO>=A1.x&&kO>=A1.y&&zO<A1.x+A1.w&&kO<A1.y+A1.h});TO.sort((M6,A1)=>{let IO=M6?.zIndex??0,vO=A1?.zIndex??0;if(vO!==IO)return vO-IO;let CO=M6?.rect??{w:0,h:0},yO=A1?.rect??{w:0,h:0};return CO.w*CO.h-yO.w*yO.h});let SO=TO[0];if(SO?.id)f$.focus(SO.id),Q.invalidate()}async function RO(){await U0$(),queueMicrotask(()=>{queueMicrotask(()=>{setTimeout(()=>{w1(),DI()},0)})})}return cJ(a2,(f$)=>{if(f$)return;RO()}),cJ(d,(f$,l$)=>{if(f$||!l$)return;if(a2.value||a6.value)return;q.value="input",RO()}),_0$(L4,{nodeLike:$,router:U,store:K,sessionsApi:X,cols:V,rows:Z,contentW:w,mainY:j,mainW:S,mainH:D,scrollTop:B0,visibleLines:j6,messageRoleById:HY,messageSelectStart:s2,messageSelectEnd:f6,focusMode:q,onWheel:nJ,onSelectionKeydown:HI,onMessageClick:R7,onMessagePointerDown:z7,onMessagePointerMove:k7,onMessagePointerUp:UI,onMessageContextMenu:_I,onLineClick:JI,focusBrowserTextarea:w1,showCopyToast:r,sessionHeaderTitle:WY,sessionHeaderSummary:NY,headerStatsDisplay:C$,panelW:L,panelX:M,panelTopY:k,panelH:A,inputX:R,inputInnerW:f,inputLines:T,modelRowGap:I,input:W,focusFiles:F,pickerWorkspace:R$,promptSuggestions:E$,showCommands:y0,showTheme:b0,showSessions:O0,showMessageActions:d$,showRedoConfirm:N0,showConfig:$$,showToolApprovals:M$,showApproval:L0,showPathPicker:p,pathPickerMode:X$,pathPickerQuery:G$,pathPickerError:F$,send:LO,onInputKeydown:FI,setContextCwd:NI,ctxPctChip:t$,modelInfo:T$,modeLabel:D$,assistantStatusDisplay:h,assistantStatusStyle:a,footerH:v,footerRight:i,isLoading:d,loadingDots:m,commandOptions:w7,commandIndex:I0,onCommandSelect:BY,closeCommandPalette:t2,refreshSessions:K$,sessionsLoading:Y$,sessionsDeleteArmed:A$,sessionsList:L$,sessionsIndex:y$,showSwitchConfirm:J1,switchConfirmTitle:F1,switchConfirmTargetLabel:s1,switchConfirmReason:S1,openSelectedSession:C,createNewSession:l,confirmSwitch:J$,cancelSwitch:Q$,messageActionsIndex:i$,messageActionsTargetId:K0,handleRevertMessage:GI,handleCopyMessage:QI,handleForkSession:XI,confirmRestore:YI,cancelRestore:KI,pickerW:V$,pickerH:O$,pathPickerTitle:k$,pathPickerPlaceholder:w$,configW:ZY,configH:iJ,modelId:P$,contextWindow:j$,temperature:r$,baseUrl:Y0,apiKeyDraft:z0,apiKeyMasked:o$,applyConfig:E0,closeConfig:e$,toolApprovalsW:o2,toolApprovalsH:aU,applyToolApprovals:U0,activeApproval:q4,approvalW:O6,approvalH:r4,activeAskUser:E7,showAskUser:a0,askUserW:f7,askUserH:M7,showExitConfirm:i4,exitSessionToHome:AO}),()=>pU(T0,{x:0,y:0,w:V.value,h:Z.value,zIndex:0,focusable:!1,onKeydownCapture:qI,onKeydown:OI},()=>[pU(s,{key:"bg",x:0,y:0,w:V.value,h:Z.value,value:"",style:vQ,zIndex:-100}),pU(TT),pU(ST),pU(zT),pU(kT),pU(NS)])}});import{computed as a$,defineComponent as G0$,h as S0,inject as Q0$,ref as H6,watch as TS}from"vue";var zS=7,J0$=["________ ________ ________ _________ ________ ___ ___ ________ ___ ________","|\\ ____\\|\\ __ \\|\\ __ \\|\\___ ___\\ |\\ ____\\|\\ \\|\\ \\|\\ __ \\|\\ \\|\\ ___ \\","\\ \\ \\___|\\ \\ \\|\\ \\ \\ \\|\\ \\|___ \\ \\_| \\ \\ \\___|\\ \\ \\\\\\ \\ \\ \\|\\ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\ \\ __\\ \\ \\\\\\ \\ \\ __ \\ \\ \\ \\ \\ \\ \\ \\ \\ __ \\ \\ __ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\ \\|\\ \\ \\ \\\\\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\____\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\\\ \\ \\"," \\ \\_______\\ \\_______\\ \\__\\ \\__\\ \\ \\__\\ \\ \\_______\\ \\__\\ \\__\\ \\__\\ \\__\\ \\__\\ \\__\\\\ \\__\\"," \\|_______|\\|_______|\\|__|\\|__| \\|__| \\|_______|\\|__|\\|__|\\|__|\\|__|\\|__|\\|__| \\|__|"];function kS($,U=1){return J0$}var SS="";function Y0$($){return`[... ${($.match(/\n/g)||[]).length+1} lines]`}function K0$($,U){if(!$)return"";let _="",G=0;for(let J=0;J<$.length;){if($[J]===SS){_+=U[G]??"",G++,J+=1;continue}let Y=$.codePointAt(J)??0,K=String.fromCodePoint(Y);_+=K,J+=K.length}return _}function X0$($,U){if(!$)return"";let _="",G=0;for(let J=0;J<$.length;){if($[J]===SS){let X=U[G]??"";_+=Y0$(X),G++,J+=1;continue}let Y=$.codePointAt(J)??0,K=String.fromCodePoint(Y);_+=K,J+=K.length}return _}var qO=G0$({name:"GoatChainHomePage",setup(){let $=vJ(),U=x0(),{events:_}=H0(),G=a$(()=>U.clipRect?.w??0),J=a$(()=>U.clipRect?.h??0),Q=Q0$(lU,null);if(!Q)throw Error("GoatChainBridge is missing (did you forget to wrap with <GoatChainProvider />?)");let{store:Y,sessions:K}=Q,X=n2(),V=H6(""),Z=H6(!1),W=H6(!1),N=H6(0),H=H6([]),F=H6([]),q=H6(!1),E=H6(""),P=H6("Multiline Text"),O=H6(Y.getMode?.()??"agent");function w(o=1){let X0=["plan","agent"],B0=O.value,D6=(X0.indexOf(B0)+o+X0.length)%X0.length,j6=X0[D6]??"agent";O.value=j6,Y.setMode?.(j6)}function S(o){let X0=F.value[o];if(X0){E.value=X0;let B0=(X0.match(/\n/g)||[]).length+1;P.value=`Multiline Text (${B0} lines)`,q.value=!0}}function D(){q.value=!1}let j=GY(1200),L=j.visible,M=j.text,k=j.show,A=_Y({store:Y,nodeLike:X,showToast:k,guardPendingApprovals:!1}),{showConfig:R,showToolApprovals:f,modelId:T,contextWindow:I,temperature:z,baseUrl:v,apiKeyDraft:b,apiKeyMasked:y,openConfig:g,closeConfig:r,applyConfig:U$,openToolApprovals:C$,applyToolApprovals:t$}=A,T$=UY({store:Y,sessionsApi:K,showToast:k}),{showSessions:D$,showSwitchConfirm:h,switchConfirmTitle:a,switchConfirmTargetLabel:d,switchConfirmReason:m,confirmSwitch:i,cancelSwitch:u,sessionsLoading:$$,sessionsDeleteArmed:M$,sessionsList:P$,sessionsIndex:j$,refreshSessions:r$,openSessionsDialog:Y0,openSelectedSession:z0,createNewSession:o$}=T$,u0=$Y({store:Y,cols:G,rows:J,nodeLike:X}),{showPathPicker:e$,pathPickerMode:E0,pathPickerQuery:c0,pathPickerError:U0,pickerWorkspace:V0,pickerW:O0,pickerH:J1,pathPickerTitle:F1,pathPickerPlaceholder:s1,openPathPicker:S1,closePathPicker:C}=u0;JY({store:Y,nodeLike:X,showToast:k});let l=[{value:"/sessions",detail:"List/pick sessions",onSelect:()=>{Y0(),V.value="",F.value=[]}},{value:"/settings",detail:"Configure model + API",onSelect:()=>{g(),V.value="",F.value=[]}},{value:"/new",detail:"Start a new session",onSelect:()=>{o$(),V.value="",F.value=[]}},{value:"/approvals",detail:"Configure tool approvals (auto/all)",onSelect:()=>{V.value="/approvals",L7()}}];TS(H,(o)=>{Y.setFocusFiles(o)});let J$=a$(()=>{return[...eQ({openSessionsDialog:()=>void Y0(),createNewSession:()=>void o$(),openConfig:g,openToolApprovals:C$})]}),Q$=a$(()=>J$.value.map((o)=>({label:o.label,detail:o.detail}))),Y$=a$(()=>({fg:"whiteBright",bg:"black"})),A$=a$(()=>({fg:"white",dim:!0,bg:"black"})),L$=a$(()=>({fg:"whiteBright",bg:"blackBright"})),y$=a$(()=>({fg:"whiteBright",bg:"blackBright"})),K$=a$(()=>({fg:"blueBright",bg:"blackBright"})),B$=a$(()=>G.value>=70&&J.value>=26),b$=a$(()=>B$.value?1:0),p=a$(()=>B$.value?2:1),X$=a$(()=>B$.value?kS("goat",b$.value):["goat"]),G$=a$(()=>B$.value?zS:1),F$=a$(()=>m$(X$.value[0]??"")),R$=a$(()=>F$.value+p.value),V$=a$(()=>Math.max(0,Math.floor((G.value-R$.value)/2))),O$=a$(()=>{let o=Math.max(0,Math.floor(G.value));if(o<=0)return 0;let X0=Math.min(44,o),B0=Math.max(X0,o-8);return Q0(Math.floor(o*0.72),X0,B0)}),k$=a$(()=>Math.max(0,Math.floor((G.value-O$.value)/2))),w$=2,h$=a$(()=>k$.value+1+w$),E$=a$(()=>Math.max(0,O$.value-1-w$)),d$=a$(()=>Math.max(1,E$.value)),i$=a$(()=>{if(!V.value)return 1;let o=d$.value;if(o<=0)return 1;let X0=X0$(V.value,F.value);return Math.max(1,M4(X0,o).length)}),N0=a$(()=>Q0(i$.value,1,7)),K0=1,i0=1,y0=a$(()=>K0+N0.value+i0+1+K0),I0=2,b0=a$(()=>{let o=Math.max(1,J.value-I0-G$.value-y0.value-3);return Q0(Math.floor(J.value*0.32),1,o)}),L0=a$(()=>b0.value+G$.value+4),a0=a$(()=>L0.value+y0.value-1),i4=a$(()=>L0.value+K0),q4=a$(()=>i4.value+N0.value+i0),O6=a$(()=>Array.from({length:Math.max(0,y0.value)},()=>"┃").join(`
|
|
852
852
|
`)),r4=a$(()=>W.value||e$.value||D$.value||R.value||f.value||q.value);function E7(){if(X)return;try{globalThis.document?.querySelector?.("[data-vt-host] textarea")?.focus?.()}catch{}}function f7(){let o=_.value;if(!o||typeof o.debugNodes!=="function"||typeof o.focus!=="function")return;let X0=Math.floor(h$.value),B0=Math.floor(i4.value),G1=Math.floor(E$.value),D6=Math.floor(N0.value),j6=(o.debugNodes?.()??[]).filter((w1)=>w1?.visible&&w1?.focusable),nJ=j6.find((w1)=>{let t0=w1?.rect;return t0&&t0.x===X0&&t0.y===B0&&t0.w===G1&&t0.h===D6});if(nJ?.id){o.focus(nJ.id);return}let E6=X0+Math.floor(Math.max(0,G1-1)/2),s2=B0+Math.floor(Math.max(0,D6-1)/2),f6=j6.filter((w1)=>{let t0=w1?.rect;return t0&&E6>=t0.x&&s2>=t0.y&&E6<t0.x+t0.w&&s2<t0.y+t0.h});f6.sort((w1,t0)=>{let eU=w1?.zIndex??0,R7=t0?.zIndex??0;if(R7!==eU)return R7-eU;let z7=w1?.rect??{w:0,h:0},k7=t0?.rect??{w:0,h:0};return z7.w*z7.h-k7.w*k7.h});let a6=f6[0];if(a6?.id)o.focus(a6.id)}TS(r4,(o)=>{if(o)return;setTimeout(()=>{E7(),f7()},0)});let M7=a$(()=>{return{build:"■",label:String(Y.state.config.model??"model")}}),ZY=a$(()=>O.value),iJ=" ",o2=a$(()=>"tab"),aU=a$(()=>"mode"),a2=a$(()=>"ctrl+p"),P7=a$(()=>"commands"),t2=a$(()=>{return m$(o2.value)+1+m$(aU.value)+m$(iJ)+m$(a2.value)+1+m$(P7.value)}),T4=a$(()=>{let o=t2.value;if(o<=0)return 0;let X0=k$.value+O$.value-o,B0=Math.max(0,G.value-o);return Q0(X0,0,B0)}),q6=a$(()=>a0.value+2),WY=a$(()=>q6.value>=0&&q6.value<=J.value-I0-1&&T4.value+t2.value<=G.value),NY=a$(()=>{return V0.value}),tU=a$(()=>{let o=Y.state.context?.env??{},X0=o.GOATCHAIN_VERSION||o.VUE_TERMINAL_VERSION,B0=X0?`v${X0}`:"";return L.value&&M.value?`${B0} ${M.value}`:B0});function w7(o){$.push(o)}function BY(o){Y.setCwd(o)}async function L7(){let X0=K0$(V.value,F.value).trim(),B0=H.value;if(!X0&&B0.length===0)return;let G1=tQ(X0);if(G1.kind==="approvals"){C$(),V.value="",F.value=[];return}if(G1.kind==="approvals_invalid_args"){k("Use /approvals (no on/off)."),V.value="",F.value=[];return}if(G1.kind==="settings"){g(),V.value="",F.value=[];return}if(G1.kind==="sessions"){await Y0(),V.value="",F.value=[];return}if(G1.kind==="new"){await o$(),V.value="",F.value=[];return}if(G1.kind==="redo"){k("Redo is only available in the chat view."),V.value="",F.value=[];return}if(V.value="",F.value=[],w7("chat"),B0.length>0)Y.sendUserInput({content:X0,focusFiles:B0});else Y.sendUser(X0);H.value=[]}function FY(){W.value=!0,N.value=0}function e2(){W.value=!1}function A7(o){if(r4.value)return;if(o?.key==="Tab"&&!o?.metaKey&&!o?.ctrlKey&&!o?.altKey)o?.stopPropagation?.(),o?.preventDefault?.(),w(o.shiftKey?-1:1)}function rJ(o){if(o?.defaultPrevented)return;if((o?.ctrlKey||o?.metaKey)&&(o?.key==="p"||o?.key==="P")){o?.preventDefault?.(),FY();return}if((o?.ctrlKey||o?.metaKey)&&(o?.key==="k"||o?.key==="K")){o?.preventDefault?.(),g();return}if(o?.key==="Tab"&&!o?.metaKey&&!o?.ctrlKey&&!o?.altKey){o?.preventDefault?.(),w(o.shiftKey?-1:1);return}if(o?.key==="Escape")o?.preventDefault?.(),V.value="",F.value=[]}function HY(o){if(e2(),!o)return;J$.value.find((B0)=>B0.label===o)?.run()}return()=>S0(T0,{x:0,y:0,w:G.value,h:J.value,zIndex:0,focusable:!1,onKeydownCapture:A7},()=>[S0(s,{key:"bg",x:0,y:0,w:G.value,h:J.value,value:"",style:Y$.value,zIndex:-100}),S0(s,{key:"logo-shadow-open",x:V$.value+1,y:b0.value+1,value:X$.value.join(`
|
|
853
853
|
`),style:{fg:"blackBright",dim:!0,bg:"black"},zIndex:-70}),S0(s,{key:"logo-open",x:V$.value,y:b0.value,value:X$.value.join(`
|
|
854
854
|
`),style:{fg:"white",dim:!0,bold:!0,bg:"black"},zIndex:-60}),S0(s,{key:"panel-fill",x:k$.value,y:L0.value,w:O$.value,h:y0.value,value:"",style:L$.value,zIndex:-20}),S0(s,{key:"panel-accent",x:k$.value,y:L0.value,w:1,h:y0.value,value:O6.value,style:K$.value,zIndex:-19}),S0(T0,{key:"panel-hit",x:k$.value,y:L0.value,w:O$.value,h:y0.value,zIndex:-11,focusable:!1,onPointerdownCapture:()=>{E7(),f7()}}),S0(B1,{key:"prompt-input",x:h$.value,y:i4.value,w:E$.value,h:N0.value,modelValue:V.value,"onUpdate:modelValue":(o)=>V.value=o,autoFocus:!r4.value&&!Z.value,cursorShape:"bar",cursorBlink:!1,placeholder:'Ask anything... "Fix broken tests" (newline: Shift+Enter or Ctrl+J)',placeholderWhenFocused:!0,style:y$.value,promptSuggestions:l,mentionWorkspace:X?V0.value:"",mentionMode:"any",collectMentions:!0,mentions:H.value,"onUpdate:mentions":(o)=>H.value=[...o],onMentionClick:(o)=>{S1("file",o)},collapseMultiline:!0,multilineTexts:F.value,"onUpdate:multilineTexts":(o)=>F.value=[...o],onMultilineClick:S,onChange:()=>void L7(),onKeydown:(o)=>rJ(o),onFocus:()=>{Z.value=!0},onBlur:()=>Z.value=!1,zIndex:-10}),(()=>{let o=q4.value,X0=M7.value.build,B0=M7.value.label,G1=m$(X0),D6=m$(B0),j6=G1+1+D6,nJ=2,E6=h$.value+Math.max(0,d$.value-j6-2),s2=Math.max(0,E6-h$.value-1),f6=[];if(s2>0){let a6=ZY.value,w1=` ${a6.toUpperCase()} `,t0=a6==="plan"?"magentaBright":"greenBright",eU=Math.min(s2,m$(w1));f6.push(S0(s,{key:"panel-mode",x:h$.value,y:o,w:eU,value:w1,style:{fg:"black",bg:t0,bold:!0},zIndex:-18}))}return f6.push(S0(s,{key:"model-chip",x:E6,y:o,value:X0,style:{fg:"blueBright",bold:!0,bg:"blackBright"},zIndex:-18})),f6.push(S0(s,{key:"model-label",x:E6+G1+1,y:o,w:Math.max(0,h$.value+d$.value-(E6+G1+1)),value:B0,style:{fg:"whiteBright",dim:!0,bg:"blackBright"},zIndex:-18})),f6})(),WY.value?[S0(s,{key:"hints-bg",x:T4.value,y:q6.value,w:t2.value,value:"",style:{bg:"black"},zIndex:4}),S0(s,{key:"hints-key1",x:T4.value,y:q6.value,value:o2.value,style:{fg:"whiteBright",bold:!0,bg:"black"},clear:!1,zIndex:5}),S0(s,{key:"hints-label1",x:T4.value+m$(o2.value)+1,y:q6.value,value:aU.value,style:{fg:"white",dim:!0,bg:"black"},clear:!1,zIndex:5}),S0(s,{key:"hints-key2",x:T4.value+m$(o2.value)+1+m$(aU.value)+m$(iJ),y:q6.value,value:a2.value,style:{fg:"whiteBright",bold:!0,bg:"black"},clear:!1,zIndex:5}),S0(s,{key:"hints-label2",x:T4.value+m$(o2.value)+1+m$(aU.value)+m$(iJ)+m$(a2.value)+1,y:q6.value,value:P7.value,style:{fg:"white",dim:!0,bg:"black"},clear:!1,zIndex:5})]:null,J.value>0?S0(s,{key:"footer-bg",x:0,y:J.value-I0,w:G.value,value:"",style:Y$.value,zIndex:20}):null,J.value>0?S0(s,{key:"footer-left",x:2,y:J.value-I0,w:Math.max(0,G.value-4),value:`cwd ${NY.value}`,style:A$.value,clear:!1,zIndex:21}):null,J.value>0&&tU.value?S0(s,{key:"footer-right",x:Math.max(2,G.value-2-m$(tU.value)),y:J.value-I0,value:tU.value,style:A$.value,clear:!1,zIndex:21}):null,S0(gQ,{modelValue:W.value,"onUpdate:modelValue":(o)=>W.value=o,title:"Commands",options:Q$.value,selectedIndex:N.value,"onUpdate:selectedIndex":(o)=>N.value=o,onSelect:(o)=>HY(o),onClose:e2}),S0(uQ,{modelValue:e$.value,"onUpdate:modelValue":(o)=>{if(!o)C();else e$.value=!0},w:O0.value,h:J1.value,title:F1.value,workspace:V0.value,mode:E0.value,query:c0.value,"onUpdate:query":(o)=>c0.value=o,placeholder:s1.value,onInvalid:(o)=>U0.value=o,onSelect:(o)=>{if(E0.value==="directory")BY(o);else if(!H.value.includes(o))H.value=[...H.value,o];C()},onClose:C}),S0(hQ,{modelValue:D$.value,"onUpdate:modelValue":(o)=>{if(D$.value=o,!o)M$.value=!1},loading:$$.value,deleteArmed:M$.value,sessions:P$.value,selectedIndex:j$.value,"onUpdate:selectedIndex":(o)=>{j$.value=o,M$.value=!1},onOpen:async()=>{await z0({after:async()=>w7("chat")})},onNew:async()=>{await o$()},onDelete:async()=>{let o=K,X0=P$.value[j$.value];if(!o||!X0)return;let B0=j$.value;if(!M$.value){M$.value=!0,k("Press Delete again to confirm.");return}M$.value=!1,await o.delete(X0.id),await r$({preferIndex:B0})},onRefresh:async()=>{M$.value=!1,await r$()}}),S0(cQ,{modelValue:h.value,"onUpdate:modelValue":(o)=>{if(h.value=o,!o)u()},title:a.value,targetLabel:d.value,reason:m.value,onConfirm:()=>void i()}),S0(dQ,{modelValue:R.value,"onUpdate:modelValue":(o)=>R.value=o,w:Q0(Math.floor(G.value*0.78),56,84),h:Q0(24,18,Math.max(18,J.value-4)),modelId:T.value,"onUpdate:modelId":(o)=>T.value=o,contextWindow:I.value,"onUpdate:contextWindow":(o)=>I.value=o,temperature:z.value,"onUpdate:temperature":(o)=>z.value=o,baseUrl:v.value,"onUpdate:baseUrl":(o)=>v.value=o,apiKeyDraft:b.value,"onUpdate:apiKeyDraft":(o)=>b.value=o,apiKeyMasked:y.value,onApply:U$,onCancel:r}),S0(rQ,{modelValue:f.value,"onUpdate:modelValue":(o)=>f.value=o,mode:String(Y.state.approval.mode??"auto"),w:Q0(Math.floor(G.value*0.62),46,86),h:Q0(14,11,Math.max(11,J.value-6)),onSelect:(o)=>{t$(o),f.value=!1}}),...pQ({notification:Y.upgradeNotification?.value,cols:G.value,onDismiss:()=>{Y.dismissUpgradeNotification?.()}}),S0(_Q,{visible:q.value,content:E.value,title:P.value,onClose:D,zIndex:2000})])}});import{defineComponent as S0$,h as aS,inject as I0$,onUnmounted as v0$,provide as C0$,ref as tS}from"vue";import{computed as QY,reactive as k0$,watch as nS}from"vue";function V0$($){let U=($??[]).map((G)=>String(G??"")).filter(Boolean);if(!U.length)return"";return`[focus_files]
|