goatchain-cli 0.0.4-beta.22 → 0.0.4-beta.23
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 +4 -4
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -634,7 +634,7 @@ user: Where are errors from the client handled?
|
|
|
634
634
|
assistant: Clients are marked as failed in the \`connectToServer\` function in src/services/process.ts:712.
|
|
635
635
|
</example>`,model:$,tools:F,stateStore:B});_.use(J),_.use(dE({maxTokens:128000,protectedTurns:2,model:$,stateStore:B})),_0("Agent initialized with tools:",Array.from(F.list().map((C)=>C.name))),_0("Agent initialized with middlewares:",_.middlewareNames.join(", "));let Y=new FB(_,{debug:xN,maxIterations:1e4}),X=new Xf(Y),Q=Ks.toWeb(PF.stdin),V=Vs.toWeb(PF.stdout),Z=iR(V,Q);_0("Creating AgentSideConnection...");let O=new SN((C)=>{return _0("Agent connection established"),X.setConnection(C),X},Z);_0("ACP Server ready and listening on stdio"),await O.closed,_0("Connection closed"),Y.destroy()}var js=import.meta.url===`file://${PF.argv[1]}`||PF.argv[1]?.endsWith("acp-server.ts")||PF.argv[1]?.endsWith("acp-server.js");if(js)Qf().catch((D)=>{console.error("[ACP Server] Fatal error:",D),PF.exit(1)});function ws(){let D=globalThis.process;return!!D&&typeof D?.versions?.node==="string"}function gN(){return globalThis.process?.env??{}}var Kf="plan-mode";function F$(D){return String(D??"").trim()||void 0}function Vf(D){let F=String(D??"").trim();if(!F)return;let $=Number.parseFloat(F);return Number.isFinite($)?$:void 0}function Ps(D){if(typeof D==="string")return D;if(Array.isArray(D))return D.map((F)=>{if(typeof F==="object"&&F&&"text"in F)return String(F.text??"");return JSON.stringify(F)}).join(`
|
|
636
636
|
`);try{return JSON.stringify(D,null,2)}catch{return String(D)}}function Rs(D,F){if(!F||typeof D?.cancel!=="function")return()=>{};if(F.aborted){try{D.cancel()}catch{}return()=>{}}let $=()=>{try{D.cancel()}catch{}};return F.addEventListener("abort",$,{once:!0}),()=>{try{F.removeEventListener("abort",$)}catch{}}}function fs(D){return{id:String(D?.id??""),type:"function",function:{name:String(D?.function?.name??""),arguments:D?.function?.arguments}}}function zs(D){let F={};for(let $ of D){if($.role!=="tool"||!$.tool_call_id)continue;let B=typeof $.content==="string"?$.content:$.content?JSON.stringify($.content):"";try{let E=JSON.parse(B);if(E&&typeof E==="object"&&E.answers&&typeof E.answers==="object")F[$.tool_call_id]=E.answers}catch{}}return F}function hN(D){if(!D)return"";if(typeof D==="string")return D;if(Array.isArray(D))return D.map((F)=>String(F?.text??"")).join("");return String(D)}function mN(D){if(!D||typeof D!=="object")return null;let F=D.usage;if(F&&typeof F==="object")return F;let $=D.stats?.usage;if($&&typeof $==="object")return $;try{let E=(typeof D.toSnapshot==="function"?D.toSnapshot():null)?.stats?.usage;if(E&&typeof E==="object")return E}catch{}return null}function Zf(D){if(!ws())throw Error("GoatChain embedded agent is Node-only");let F=D.debug===!0,$=D.cliTools!==!1,B=D.planMode===!0,E=D.subagents===!0,u=F$(D.stateDir||gN().GOATCHAIN_STATE_DIR||gN().GOATCHAIN_STATE_DIR),U=null,J=B?"plan":"agent",G=null,_=null,Y=null,X=null;function Q(W,L){let z=W.filter((y)=>y.role!=="system"),S=(()=>{for(let y=z.length-1;y>=0;y--)if(z[y]?.role==="user")return y;return-1})(),w=String(L??"").trim(),I=S===z.length-1&&w.length>0,k=[];for(let y=0;y<z.length;y++){if(I&&y===S)continue;let b=z[y];if(!b)continue;if(b.role==="user")k.push({role:"user",content:hN(b.content)});else if(b.role==="assistant"){let s={role:"assistant",content:hN(b.content)};if(Array.isArray(b.tool_calls)&&b.tool_calls.length)s.tool_calls=b.tool_calls;k.push(s)}else if(b.role==="tool")k.push({role:"tool",tool_call_id:String(b.tool_call_id??""),content:hN(b.content),...b.metadata?.error===!0?{isError:!0}:{}})}return k}function V(W,L,z){try{if(!W||!Array.isArray(W.messages))return;let S=Q(L,z);if(S.length===0)return;if(W.messages.length>=S.length)return;W.messages=S}catch{}}function Z(W){let L=W?.env;if(!L||typeof L!=="object")return;let z=globalThis.process;if(!z?.env)return;for(let[S,w]of Object.entries(L)){let I=String(S??"").trim();if(!I)continue;let k=w==null?"":String(w);if(!k)delete z.env[I];else z.env[I]=k}}let O=new Map;async function C(){if(U)return U;if(u&&typeof T$==="function")try{return U=new T$({dir:u,deleteOnComplete:!1}),U}catch(W){if(F)console.warn("[goatchain-node] Failed to init FileStateStore:",W);U=null}if(!U&&typeof S$==="function")try{U=new S$({deleteOnComplete:!1})}catch(W){if(F)console.warn("[goatchain-node] Failed to init InMemoryStateStore:",W);U=null}return U}function H(W,L){return{id:W,createdAt:L,state:{status:"active",updatedAt:L,lastActiveAt:L},context:{messages:[],messageCount:0,toolCallCount:0},stats:{usage:{promptTokens:0,completionTokens:0,totalTokens:0},responseCount:0}}}function N(W){if(!Array.isArray(W)||W.length===0)return;for(let L=W.length-1;L>=0;L--){let z=W[L],S=String(z?.role??"");if(S!=="user"&&S!=="assistant"&&S!=="system"&&S!=="tool")continue;let w=z?.content;if(typeof w==="string"){let I=w.replace(/\s+/g," ").trim();if(I)return I.slice(0,200)}if(Array.isArray(w)){let I=w.filter((k)=>k&&typeof k==="object"&&k.type==="text"&&typeof k.text==="string").map((k)=>k.text).join(" ").replace(/\s+/g," ").trim();if(I)return I.slice(0,200)}}return}async function R(){let W=jF?.SESSION;return typeof W==="string"&&W.trim()?W:"session"}function T(){let W=gN();return{modelId:String(W.GOATCHAIN_MODEL||D.modelId),baseUrl:F$(W.GOATCHAIN_OPENAI_BASE_URL||W.OPENAI_BASE_URL||D.baseUrl),apiKey:F$(W.OPENAI_API_KEY||D.apiKey),temperature:Vf(W.GOATCHAIN_TEMPERATURE),topP:Vf(W.GOATCHAIN_TOP_P)}}function M(W){return JSON.stringify({modelId:W.modelId,baseUrl:W.baseUrl??null,apiKey:W.apiKey?"***":null,temperature:W.temperature??null,topP:W.topP??null})}async function A(W){await C();let L=new s6,z=(y)=>{if(!y)return;try{L.register(new y)}catch(b){if(F)console.warn("[goatchain-node] Failed to register tool:",y?.name??"(unknown)",b)}};if(z(b$),z(d$),z(l$),z(g$),z(I$),z(n$),z(r$),$)z(a$),z(x$),z(y$),z(k$),z(i$);let S=xH(Y8,W),w=b4({adapter:S}),I=[];if(typeof W8==="function"){if(G=W8({insertEveryIteration:!0}),J==="plan")I.push(G)}if(E&&typeof O8==="function"&&o$)try{I.push(O8({subagents:[o$],globalToolRegistry:L,model:w}))}catch(y){if(F)console.warn("[goatchain-node] Failed to init subagent middleware:",y)}return{agent:new V6({name:"GoatChain",systemPrompt:D.systemPrompt,model:w,tools:L,...U?{stateStore:U}:{},...I.length?{middleware:I}:{}}),tools:L}}async function f(){let W=T(),L=M(W);if(L!==X){let{agent:z,tools:S}=await A(W);_=z,Y=S,X=L,O.clear()}}async function j(W,L){let z=F$(W),S=z?O.get(z):void 0;if(S&&L?.resumeOnly)return{sessionId:z,session:S.session};if(await f(),S)return{sessionId:z,session:S.session};let w=T(),I={...typeof w.temperature==="number"?{temperature:w.temperature}:{},...typeof w.topP==="number"?{topP:w.topP}:{}},k;if(z&&U&&typeof _?.resumeSession==="function")try{k=await _.resumeSession(z,{requestParams:I})}catch{k=await _.createSession({sessionId:z,requestParams:I})}else if(z)k=await _.createSession({sessionId:z,requestParams:I});else k=await _.createSession({requestParams:I});let y=F$(k?.id)??F$(k?.sessionId)??z;if(!y)throw Error("GoatChain session id is missing");return O.set(y,{session:k}),{sessionId:y,session:k}}async function*P(W){for await(let L of W){if(L?.type==="subagent_event"){let w=L?.nestedEvent,I=q(w),k=F$(w?.sessionId);for(let y of I)yield{...y,metadata:{...y.metadata??{},...k?{session_id:k}:{},subagent:!0,subagentId:L?.subagentId,subagentType:L?.subagentType,taskDescription:L?.taskDescription,originalEventType:w?.type}};continue}let z=q(L),S=F$(L?.sessionId);for(let w of z)yield S?{...w,metadata:{...w.metadata??{},session_id:S}}:w}}function q(W){if(!W||typeof W!=="object")return[];switch(W.type){case"session_created":return[{role:"assistant",content:"",metadata:{originalEventType:"session_created"}}];case"iteration_start":return[{role:"assistant",content:"",metadata:{originalEventType:"iteration_start"}}];case"text_delta":return[{role:"assistant",content:String(W.delta??""),metadata:{originalEventType:"text_delta"}}];case"thinking_start":return[{role:"assistant",content:"",metadata:{thinking:!0,originalEventType:"thinking_start"}}];case"tool_call_delta":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_call_delta",callId:String(W.callId??""),toolName:W.toolName,argsTextDelta:W.argsTextDelta}}];case"tool_call_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_call_start",callId:String(W.callId??""),toolName:W.toolName}}];case"tool_call_end":return[{role:"assistant",content:"",tool_calls:[fs(W.toolCall)],metadata:{originalEventType:"tool_call_end"}}];case"tool_output_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_output_start",tool_call_id:String(W.tool_call_id??""),tool_name:String(W.toolName??W.tool_name??"")}}];case"tool_output_delta":return[{role:"assistant",content:String(W.delta??""),metadata:{originalEventType:"tool_output_delta",tool_call_id:String(W.tool_call_id??""),isStderr:W.isStderr}}];case"tool_result":let L=Boolean(W.isError||W.result?.isError===!0);return[{role:"tool",tool_call_id:String(W.tool_call_id??""),content:Array.isArray(W.result?.content)?W.result.content:Ps(W.result),metadata:{...L?{error:!0}:null,originalEventType:"tool_result",structuredContent:W.result?.structuredContent,rawResult:F?W.result:void 0}}];case"tool_skipped":return[{role:"assistant",content:`Tool skipped: ${String(W.toolName??"")} - ${String(W.reason??"")}`,metadata:{originalEventType:"tool_skipped"}}];case"tool_approval_requested":return[{role:"assistant",content:`Tool approval requested: ${String(W.toolName??"")}`,metadata:{approval_requested:!0,tool_call_id:String(W.tool_call_id??""),tool_name:String(W.toolName??""),risk_level:W.riskLevel,approval_args:W.args,originalEventType:"tool_approval_requested"}}];case"requires_action":{let z={requires_action:!0,kind:W.kind,tool_call_id:W.toolCallId,originalEventType:"requires_action"};if(W.kind==="ask_user"&&W.questions)z.questions=W.questions;return[{role:"assistant",content:`Action required: ${String(W.kind??"")}`,metadata:z}]}case"thinking_delta":return[{role:"assistant",content:String(W.delta??""),metadata:{thinking:!0,originalEventType:"thinking_delta"}}];case"thinking_end":return[{role:"assistant",content:"",metadata:{originalEventType:"thinking_end"}}];case"iteration_end":return[{role:"assistant",content:"",metadata:{originalEventType:"iteration_end",usage:W.usage}}];case"done":return[{role:"assistant",content:"",metadata:{done:!0,stopReason:W.stopReason,modelStopReason:W.modelStopReason,usage:W.usage,error:W.error,originalEventType:"done"}}];case"error":return[{role:"assistant",content:"",metadata:{done:!0,error:W.error??W.message??W,stopReason:"error",originalEventType:"error"}}];default:if(F)console.warn("[goatchain-node] Unhandled event:",W.type);return[]}}return{async*receiveMessage(W,L){try{Z(L);let z=L?.signal,S=F$(L?.session_id),w=L?.resume===!0;if(!S&&w)throw Error("Cannot resume without a session id");let I=await j(S,{resumeOnly:w}),k=I.sessionId,y=I.session,b=Rs(y,z);try{let s=String(L?.cwd??"").trim();if(s&&Y){for(let a of Y?.list?.()??[])if(typeof a?.setCwd==="function")try{a.setCwd(s)}catch(l){if(F)console.warn("[goatchain-node] Failed to setCwd on tool:",a?.name,l)}}let uD=L?.toolContext,lD=zs(W),bD={};if(uD&&typeof uD==="object")Object.assign(bD,uD);if(Object.keys(lD).length>0)bD.askUser=bD.askUser??{},bD.askUser.answers={...bD.askUser.answers??{},...lD};let nD=[...W].reverse().find((a)=>a.role==="user"),VD=typeof nD?.content==="string"?nD.content:"";if(!U)V(y,W,VD);if(w&&Object.keys(bD).length){yield*bH({session:y,toolContext:bD,signal:z,convertEventStream:P});let a=mN(y);if(a)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:a,...k?{session_id:k}:{}}};return}if(VD.trim()){y.send(VD,Object.keys(bD).length?{toolContext:bD,...z?{signal:z}:null}:z?{signal:z}:void 0),yield*P(y.receive(z?{signal:z}:void 0));let a=mN(y);if(a)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:a,...k?{session_id:k}:{}}};return}yield*P(y.receive(Object.keys(bD).length?{toolContext:bD,...z?{signal:z}:null}:z?{signal:z}:void 0));let d=mN(y);if(d)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:d,...k?{session_id:k}:{}}}}finally{b()}}catch(z){yield{role:"assistant",content:["# GoatChain error","","```text",z instanceof Error?z.stack||z.message:String(z),"```"].join(`
|
|
637
|
-
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:gH({ensureSharedStateStore:C,sessionStorageKey:R,createEmptySessionSnapshot:H,createId:()=>Ls(),applyMessagesToSnapshot:(W,L,z)=>{W.context.messages=L,W.context.messageCount=L.length;let S=N(L);if(S)W.context.lastMessagePreview=S;W.state.updatedAt=z,W.state.lastActiveAt=z}}),setMode(W){if(J===W)return;if(J=W,!G||!_)return;let z=_.middlewares.filter((S)=>S.name!==Kf);if(_.clearMiddlewares(),W==="plan")_.use(G,Kf);for(let S of z)_.use(S.fn,S.name);O.clear()},getMode(){return J}}}function Nf(D){let F=D.processEnv;try{return Zf({systemPrompt:D.context.system,modelId:String(F.GOATCHAIN_MODEL||D.context.env.GOATCHAIN_MODEL||"gpt-4.1-mini"),baseUrl:F.GOATCHAIN_OPENAI_BASE_URL||F.OPENAI_BASE_URL||D.context.env.GOATCHAIN_OPENAI_BASE_URL||D.context.env.OPENAI_BASE_URL,apiKey:F.OPENAI_API_KEY||D.context.env.OPENAI_API_KEY,cliTools:!0,stateDir:D.stateDir})}catch($){return console.warn("[goatchain] Failed to start GoatChain agent:",$),yH($)}}async function Of(D){let F=A0("0.0.4-beta.
|
|
637
|
+
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:gH({ensureSharedStateStore:C,sessionStorageKey:R,createEmptySessionSnapshot:H,createId:()=>Ls(),applyMessagesToSnapshot:(W,L,z)=>{W.context.messages=L,W.context.messageCount=L.length;let S=N(L);if(S)W.context.lastMessagePreview=S;W.state.updatedAt=z,W.state.lastActiveAt=z}}),setMode(W){if(J===W)return;if(J=W,!G||!_)return;let z=_.middlewares.filter((S)=>S.name!==Kf);if(_.clearMiddlewares(),W==="plan")_.use(G,Kf);for(let S of z)_.use(S.fn,S.name);O.clear()},getMode(){return J}}}function Nf(D){let F=D.processEnv;try{return Zf({systemPrompt:D.context.system,modelId:String(F.GOATCHAIN_MODEL||D.context.env.GOATCHAIN_MODEL||"gpt-4.1-mini"),baseUrl:F.GOATCHAIN_OPENAI_BASE_URL||F.OPENAI_BASE_URL||D.context.env.GOATCHAIN_OPENAI_BASE_URL||D.context.env.OPENAI_BASE_URL,apiKey:F.OPENAI_API_KEY||D.context.env.OPENAI_API_KEY,cliTools:!0,stateDir:D.stateDir})}catch($){return console.warn("[goatchain] Failed to start GoatChain agent:",$),yH($)}}async function Of(D){let F=A0("0.0.4-beta.23")??await Is(D.cwd),$=await cN(D.env),B=$.cache,E=B.settings??{},u=A0(E.cwd),U=Array.isArray(E.focusFiles)?E.focusFiles.map((G)=>String(G??"")).filter(Boolean):void 0,J={GOATCHAIN_VERSION:F??"dev",...D.env.GOATCHAIN_MODEL?{GOATCHAIN_MODEL:D.env.GOATCHAIN_MODEL}:{},...D.env.GOATCHAIN_CONTEXT_WINDOW?{GOATCHAIN_CONTEXT_WINDOW:D.env.GOATCHAIN_CONTEXT_WINDOW}:{},...D.env.GOATCHAIN_TEMPERATURE?{GOATCHAIN_TEMPERATURE:D.env.GOATCHAIN_TEMPERATURE}:{},...D.env.GOATCHAIN_TOP_P?{GOATCHAIN_TOP_P:D.env.GOATCHAIN_TOP_P}:{},...D.env.GOATCHAIN_TOOL_APPROVALS?{GOATCHAIN_TOOL_APPROVALS:D.env.GOATCHAIN_TOOL_APPROVALS}:{},...D.env.GOATCHAIN_SKIP_APPROVAL?{GOATCHAIN_SKIP_APPROVAL:D.env.GOATCHAIN_SKIP_APPROVAL}:{},...D.env.GOATCHAIN_STARTUP_TOAST?{GOATCHAIN_STARTUP_TOAST:D.env.GOATCHAIN_STARTUP_TOAST}:{},...D.env.GOATCHAIN_STARTUP_UPGRADE_TOAST?{GOATCHAIN_STARTUP_UPGRADE_TOAST:D.env.GOATCHAIN_STARTUP_UPGRADE_TOAST}:{},...D.env.GOATCHAIN_OPENAI_BASE_URL?{GOATCHAIN_OPENAI_BASE_URL:D.env.GOATCHAIN_OPENAI_BASE_URL}:{},...D.env.OPENAI_BASE_URL?{OPENAI_BASE_URL:D.env.OPENAI_BASE_URL}:{},...D.env.OPENAI_API_KEY?{OPENAI_API_KEY:D.env.OPENAI_API_KEY}:{}};if(!J.GOATCHAIN_MODEL&&A0(E.model))J.GOATCHAIN_MODEL=String(E.model);if(!J.GOATCHAIN_CONTEXT_WINDOW&&$$(E.contextWindow)!=null)J.GOATCHAIN_CONTEXT_WINDOW=String(E.contextWindow);if(!J.GOATCHAIN_TEMPERATURE&&$$(E.temperature)!=null)J.GOATCHAIN_TEMPERATURE=String(E.temperature);if(!J.GOATCHAIN_TOP_P&&$$(E.topP)!=null)J.GOATCHAIN_TOP_P=String(E.topP);if(!J.GOATCHAIN_TOOL_APPROVALS&&E.toolApprovals==="auto")J.GOATCHAIN_TOOL_APPROVALS="auto";if(!J.GOATCHAIN_TOOL_APPROVALS&&E.toolApprovals==="all")J.GOATCHAIN_TOOL_APPROVALS="all";if(!J.GOATCHAIN_TOOL_APPROVALS&&E.toolApprovals==="manual")J.GOATCHAIN_TOOL_APPROVALS="auto";if(!J.GOATCHAIN_OPENAI_BASE_URL&&A0(E.baseUrl))J.GOATCHAIN_OPENAI_BASE_URL=String(E.baseUrl);if(!J.OPENAI_API_KEY&&A0(E.apiKey))J.OPENAI_API_KEY=String(E.apiKey);return{context:{system:["You are GoatChain.","Use GoatChain tools when needed and stream progress.","If a tool requires approval, wait for the user and then continue."].join(`
|
|
638
638
|
`),cwd:u||".",env:J,...U?.length?{focusFiles:U}:{}},cacheDir:$.dir,cacheFile:$.filePath,cache:B}}async function Is(D){try{let[{readFile:F},$]=await Promise.all([import("node:fs/promises"),import("node:path")]),B=await F($.join(D,"package.json"),"utf8"),E=JSON.parse(B),u=typeof E?.version==="string"?E.version:null;return u&&u.trim()?u.trim():null}catch{return null}}import{watch as iu}from"vue";function e8(D,F){let $=String(D??"").replace(/\s+/g," ").trim();if($.length<=F)return $;return`${$.slice(0,Math.max(0,F-1))}…`}function vs(D){if(typeof D==="string")return D;if(Array.isArray(D))return D.filter(($)=>$&&typeof $==="object"&&$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join(" ");if(D&&typeof D==="object"){let F=D.text;if(typeof F==="string")return F}return""}function s8(D){if(!D||typeof D!=="object")return"";let F=String(D.role??"");if(F==="user")return vs(D.content);if(F==="tool")return String(D.result?.output??"");if(F==="assistant"){let $=Array.isArray(D.parts)?D.parts:[],B=$.filter((u)=>u?.type==="markdown").map((u)=>String(u.markdown??"")).join(`
|
|
639
639
|
`);if(B.trim())return B;let E=$.find((u)=>u?.type==="status");return E?String(E.text??""):""}return""}function Hf(D){let $=(Array.isArray(D)?D:[]).find((E)=>E&&typeof E==="object"&&E.role==="user"&&e8(s8(E),999).length>0),B=$?s8($):"";return e8(B||"New session",60)||"New session"}function qf(D){let $=(Array.isArray(D)?D:[]).find((E)=>E&&typeof E==="object"&&E.role==="user"&&e8(s8(E),999).length>0),B=$?s8($):"";return e8(B||"New session",120)||"New session"}function Cf(D){let $=[...Array.isArray(D)?D:[]].reverse().find((B)=>{if(!B||typeof B!=="object"||B.role!=="user")return!1;return e8(s8(B),999).length>0});return e8($?s8($):"",180)}function du(D){return`${D}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function lN(D){return D!=null&&typeof D==="object"&&!Array.isArray(D)}function lu(D){if(D==null)return"";if(typeof D==="string")return D;if(Array.isArray(D))return D.map(lu).join("");if(lN(D)){if(typeof D.text==="string")return String(D.text);if(String(D.type??"")==="image")return"[image]";try{return JSON.stringify(D)}catch{return String(D)}}return String(D)}function ks(D){if(lN(D))return D;if(typeof D==="string"){let F=D.trim();if(!F)return{};try{let $=JSON.parse(F);return lN($)?$:{_raw:D}}catch{return{_raw:D}}}return{}}function Mf(D){let F=D?.context?.messages,$=Array.isArray(F)?F:[],B=[],E=new Map;for(let u of $){let U=String(u?.role??"");if(U==="user"){B.push({id:du("m"),role:"user",content:lu(u?.content)});continue}if(U==="assistant"){let J=[],G=lu(u?.content);if(G)J.push({type:"markdown",markdown:G});let _=Array.isArray(u?.tool_calls)?u.tool_calls:[];for(let Y of _){let X=String(Y?.id??"").trim(),Q=String(Y?.function?.name??"tool"),V=ks(Y?.function?.arguments);if(!X)continue;let Z={id:X,name:Q,arguments:V};J.push({type:"tool_call",call:Z}),E.set(X,B.length)}B.push({id:du("m"),role:"assistant",parts:[{type:"status",text:""},...J]});continue}if(U==="tool"){let J=String(u?.tool_call_id??"").trim(),G=lu(u?.content),_=u?.isError?"error":"success",Y={id:J||du("tool"),output:G,status:_};B.push({id:du("m"),role:"tool",result:Y});let X=J?E.get(J):void 0;if(X==null)continue;let Q=B[X];if(!Q||Q.role!=="assistant")continue;B[X]={...Q,parts:[...Q.parts,{type:"tool_result",result:Y}]};continue}}return B}function Af(D){let F=[];for(let $ of D){if($.role==="user"){F.push({role:"user",content:String($.content??"")});continue}if($.role==="assistant"){let B=$.parts.filter((U)=>U.type==="markdown").map((U)=>String(U.markdown??"")).join(""),E=$.parts.flatMap((U)=>U.type==="tool_call"?[U.call]:[]),u=E.length?E.map((U)=>({id:U.id,type:"function",function:{name:U.name,arguments:U.arguments}})):void 0;F.push({role:"assistant",content:B,...u?{tool_calls:u}:{}});continue}if($.role==="tool")F.push({role:"tool",tool_call_id:String($.result.id??""),content:String($.result.output??""),...$.result.status==="error"?{isError:!0}:{}})}return F}function jf(D){return String(D?.id??"").trim()}function ys(D){return Number(D?.state?.updatedAt??D?.state?.lastActiveAt??0)||0}function Lf(D){let F=D?.context?.messages;return Array.isArray(F)?F:[]}function bs(D){let F=Number(D?.context?.messageCount??0);if(Number.isFinite(F)&&F>=0)return F;return Lf(D).length}function xs(D){let F=D?.stats?.usage;return F&&typeof F==="object"?F:null}function wf(D){let F=jf(D);if(!F)return null;let $=ys(D),B=Lf(D),E=A0(D?.state?.title)??Hf(B),u=qf(B),U=A0(D?.context?.lastMessagePreview)??Cf(B),J=bs(D);return{id:F,updatedAt:$,title:E,summary:u,messageCount:J,lastMessage:U}}function D3(D,F){let $=jf(F);if($)D.state.sessionId=$;let B=Mf(F);D.state.messages.splice(0,D.state.messages.length,...B),D.state.revertedMessages.splice(0,D.state.revertedMessages.length),D.state.selectedToolCallId=null,D.state.runningToolCallId=null,D.state.paused=null,D.state.approval.active=null,D.state.approval.pendingAutoRun=null,D.state.approval.queue=[],D.state.approval.decisions={};let E=xs(F);if(E){let u=Number(E.promptTokens),U=Number(E.completionTokens);if(Number.isFinite(u))D.state.usage.prompt_tokens=u;if(Number.isFinite(U))D.state.usage.completion_tokens=U;if(Number.isFinite(u)&&Number.isFinite(U))D.state.usage.total_tokens=u+U;else{let J=Number(E.totalTokens);if(Number.isFinite(J))D.state.usage.total_tokens=J}}}function Pf(D){let F=Array.isArray(D)?D:[];return Af(F)}function Rf(D){let F=D.store,$=F?.state?.context?.env??{},B=A0($.GOATCHAIN_OPENAI_BASE_URL||$.OPENAI_BASE_URL),E=A0($.OPENAI_API_KEY);return{version:1,updatedAt:Date.now(),settings:{cwd:A0(F?.state?.context?.cwd),focusFiles:F?.state?.context?.focusFiles??void 0,model:A0(F?.state?.config?.model),contextWindow:$$(F?.state?.config?.context_window),temperature:$$(F?.state?.config?.temperature),topP:$$(F?.state?.config?.top_p),baseUrl:B,apiKey:E,toolApprovals:F?.state?.approval?.mode==="all"?"all":"auto"},lastSessionId:A0(F?.state?.sessionId)||D.prev.lastSessionId}}function ff(D,F){let $=null,B=!1,E=!1,u=async()=>{if(B){E=!0;return}B=!0,E=!1;try{await D()}finally{if(B=!1,E)U()}},U=()=>{if(E=!0,$)clearTimeout($);$=setTimeout(u,Math.max(0,F||0))};return{schedule:U}}function gs(D){return String(D?.id??"").trim()}function zf(D){let F=null,$=D.sessionsBackend??null;return{sessions:$?{async list(){return(await $.list()).map(wf).filter(Boolean)},async use(u){let U=String(u??"").trim();if(!U||!F)return;if(String(F.state.sessionId??"")===U)return;let J=await $.get(U);if(!J)return;D3(F,J)},async createNew(){if(!F)return;let u=await $.create();if(!u)return;D3(F,u)},async delete(u){let U=String(u??"").trim();if(!U)return;if(await $.destroy(U),F&&String(F.state.sessionId??"")===U){let J=await $.create();if(J)D3(F,J)}},async fork(u){if(!F)return;let U=Array.isArray(u?.messages)?u.messages:[];if(typeof $.createWithMessages!=="function"){let G=await $.create();if(G)F.state.sessionId=gs(G);F.state.messages.splice(0,F.state.messages.length,...U),F.state.revertedMessages.splice(0,F.state.revertedMessages.length),F.state.selectedToolCallId=null,F.state.usage.prompt_tokens=0,F.state.usage.completion_tokens=0,F.state.usage.total_tokens=0;return}let J=await $.createWithMessages(Pf(U));if(!J)return;D3(F,J)}}:void 0,onStoreCreated:(u)=>{if(F=u,$){let J=String(u.state.sessionId??"").trim();if(J)$.get(J).then((G)=>{if(G&&F)D3(F,G)}).catch(()=>{})}let U=ff(async()=>{try{let J=Rf({prev:D.cache,store:u});await dN(D.cacheFile,J)}catch(J){console.warn("[goatchain] Failed to persist cache:",J)}},300);iu(()=>u.state.sessionId,U.schedule),iu(()=>u.state.config,U.schedule,{deep:!0}),iu(()=>u.state.context,U.schedule,{deep:!0}),iu(()=>u.state.approval.mode,U.schedule),U.schedule()}}}async function iN(D){let F=D.sessionsBackend,$=A0(D.envSessionId);if(F&&$){if(await F.get($))return $}return $}function Tf(){return async(D)=>{let F=String(D?.name??"tool");return{id:String(D?.id??"tool"),status:"error",output:["Tool execution is handled by the GoatChain agent.",`This UI cannot run tool "${F}" locally.`].join(`
|
|
640
640
|
`)}}}import*as Sf from"node:path";function hs(D){return Sf.join(D,"state")}function ms(D){D.env.GOATCHAIN_STATE_DIR=D.stateDir,D.context.env.GOATCHAIN_STATE_DIR=D.stateDir}async function nN(D){let{context:F,cacheDir:$,cacheFile:B,cache:E}=await Of({cwd:D.cwd,env:D.env}),u=hs($);ms({env:D.env,context:F,stateDir:u});let U=Nf({context:F,processEnv:D.env,stateDir:u}),J=U?.__sessions??null,G=await iN({sessionsBackend:J,envSessionId:D.env.GOATCHAIN_SESSION_ID});if(G)D.env.GOATCHAIN_SESSION_ID=G,F.env.GOATCHAIN_SESSION_ID=G;let{sessions:_,onStoreCreated:Y}=zf({cacheFile:B,cache:E,sessionsBackend:J});return{toolRunner:Tf(),context:F,agent:U,onStoreCreated:Y,sessions:_}}import{writeFile as cs}from"node:fs/promises";async function If(D,F){let $=await fetch(D,{headers:{accept:"application/octet-stream"}});if(!$.ok)throw Error(`Download failed: ${$.status} ${$.statusText}`);let B=await $.arrayBuffer();await cs(F,new Uint8Array(B))}async function vf(D){let{chmod:F}=await import("node:fs/promises");try{await F(D,493)}catch{}}async function kf(D,F){let{rename:$,unlink:B}=await import("node:fs/promises"),E=`${D}.old`;try{await $(D,E)}catch{}await $(F,D);try{await B(E)}catch{}}function d9(D){let F=String(D??"").trim();if(!F)return!1;let $=F.split(/[/\\]/).filter(Boolean).pop()??F;if(!$||$==="node"||$==="bun")return!1;return $==="goatchain"||$.startsWith("goatchain-bun-")}function yf(D,F){let $=String(D??"").trim(),B=String(F??"").trim();if($==="darwin"&&B==="arm64")return"goatchain-bun-darwin-arm64";if($==="darwin"&&B==="x64")return"goatchain-bun-darwin-x64";if($==="linux"&&B==="x64")return"goatchain-bun-linux-x64";if($==="linux"&&B==="arm64")return"goatchain-bun-linux-arm64";if($==="win32"&&B==="x64")return"goatchain-bun-windows-x64.exe";return null}function bf(D){let F=String(D??"").trim().replace(/^v/i,""),[$,B]=F.split("-",2),[E,u,U]=($??"").split(".",3),J=Number.parseInt(E??"",10),G=Number.parseInt(u??"",10),_=Number.parseInt(U??"",10);if(![J,G,_].every((X)=>Number.isFinite(X)&&X>=0))return null;let Y=B?B.split(".").filter(Boolean):[];return{major:J,minor:G,patch:_,pre:Y}}function rN(D,F){let $=bf(D),B=bf(F);if(!$||!B)return String(D).localeCompare(String(F));if($.major!==B.major)return $.major-B.major;if($.minor!==B.minor)return $.minor-B.minor;if($.patch!==B.patch)return $.patch-B.patch;let E=$.pre,u=B.pre;if(E.length===0&&u.length===0)return 0;if(E.length===0)return 1;if(u.length===0)return-1;let U=Math.max(E.length,u.length);for(let J=0;J<U;J++){let G=E[J],_=u[J];if(G==null&&_==null)return 0;if(G==null)return-1;if(_==null)return 1;let Y=Number(G),X=Number(_),Q=Number.isFinite(Y)&&String(Y)===G,V=Number.isFinite(X)&&String(X)===_;if(Q&&V){if(Y!==X)return Y-X}else if(Q)return-1;else if(V)return 1;else if(G!==_)return G.localeCompare(_)}return 0}function F3(D){let F=A0(D);if(!F)return;return F.replace(/^v/i,"").trim()||void 0}async function ds(D,F){let $={accept:"application/vnd.github+json","user-agent":"goatchain-cli"};if(!F){let U=`https://api.github.com/repos/${D}/releases/latest`,J=await fetch(U,{headers:$});if(!J.ok)throw Error(`release check failed: ${J.status}`);return await J.json()}let B=F3(F)??"",E=[`https://api.github.com/repos/${D}/releases/tags/v${B}`,`https://api.github.com/repos/${D}/releases/tags/${B}`],u=null;for(let U of E)try{let J=await fetch(U,{headers:$});if(!J.ok)throw Error(`release check failed: ${J.status}`);return await J.json()}catch(J){u=J}throw u??Error("release check failed")}async function xf(D){let F=yf(D.platform,D.arch);if(!F)return null;let $=await ds(D.repo,D.targetVersion),B=A0($?.tag_name)??"",E=F3(B)??"";if(!E)return null;let U=(Array.isArray($?.assets)?$.assets:[]).find((G)=>String(G?.name??"")===F)??null,J=A0(U?.browser_download_url);if(!J)return null;return{latestVersion:E,assetName:F,url:J}}async function gf(D){try{let F=A0(D.repo);if(!F)return{kind:"skipped",reason:"missing repo"};let $=F3(D.currentVersion);if(!$)return{kind:"skipped",reason:"missing current version"};let B=A0(D.execPath);if(!B||!d9(B))return{kind:"skipped",reason:"not a compiled goatchain binary"};let E=String(globalThis?.process?.platform??"").trim(),u=String(globalThis?.process?.arch??"").trim(),U=F3(D.targetVersion),J=await xf({repo:F,targetVersion:U,platform:E,arch:u});if(!J)return{kind:"skipped",reason:"unsupported platform/arch or missing release asset"};let G=U??J.latestVersion;if(!G)return{kind:"skipped",reason:"missing release tag"};if(G===$)return{kind:"up_to_date"};if(!U&&rN(G,$)<=0)return{kind:"up_to_date"};return{kind:"update_available",latestVersion:G}}catch(F){return{kind:"failed",error:F}}}async function pN(D){try{let F=A0(D.repo);if(!F)return{kind:"skipped",reason:"missing repo"};let $=F3(D.currentVersion);if(!$)return{kind:"skipped",reason:"missing current version"};let B=A0(D.execPath);if(!B||!d9(B))return{kind:"skipped",reason:"not a compiled goatchain binary"};let E=String(globalThis?.process?.platform??"").trim(),u=String(globalThis?.process?.arch??"").trim(),U=F3(D.targetVersion),J=await xf({repo:F,targetVersion:U,platform:E,arch:u});if(!J)return{kind:"skipped",reason:"unsupported platform/arch or missing release asset"};let G=U??J.latestVersion;if(!G)return{kind:"skipped",reason:"missing release tag"};if(G===$)return{kind:"up_to_date"};if(!U&&rN(G,$)<=0)return{kind:"up_to_date"};let _=await import("node:path"),Y=_.join(_.dirname(B),`.${_.basename(B)}.${G}.tmp`);await If(J.url,Y),await vf(Y),await kf(B,Y);let{spawn:X}=await import("node:child_process");return X(B,[...D.argv],{stdio:"inherit",env:{...D.env,GOATCHAIN_STARTUP_TOAST:`Upgraded to goatchain@${G}`}}).on("exit",(V)=>{globalThis?.process?.exit?.(typeof V==="number"?V:0)}),{kind:"restarted",toVersion:G}}catch(F){return{kind:"failed",error:F}}}import _FD from"node:fs";import{nextTick as qU}from"vue";var hf=(D=0)=>(F)=>`\x1B[${F+D}m`,mf=(D=0)=>(F)=>`\x1B[${38+D};5;${F}m`,cf=(D=0)=>(F,$,B)=>`\x1B[${38+D};2;${F};${$};${B}m`,x0={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]}},YOD=Object.keys(x0.modifier),ls=Object.keys(x0.color),is=Object.keys(x0.bgColor),XOD=[...ls,...is];function ns(){let D=new Map;for(let[F,$]of Object.entries(x0)){for(let[B,E]of Object.entries($))x0[B]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},$[B]=x0[B],D.set(E[0],E[1]);Object.defineProperty(x0,F,{value:$,enumerable:!1})}return Object.defineProperty(x0,"codes",{value:D,enumerable:!1}),x0.color.close="\x1B[39m",x0.bgColor.close="\x1B[49m",x0.color.ansi=hf(),x0.color.ansi256=mf(),x0.color.ansi16m=cf(),x0.bgColor.ansi=hf(10),x0.bgColor.ansi256=mf(10),x0.bgColor.ansi16m=cf(10),Object.defineProperties(x0,{rgbToAnsi256:{value(F,$,B){if(F===$&&$===B){if(F<8)return 16;if(F>248)return 231;return Math.round((F-8)/247*24)+232}return 16+36*Math.round(F/255*5)+6*Math.round($/255*5)+Math.round(B/255*5)},enumerable:!1},hexToRgb:{value(F){let $=/[a-f\d]{6}|[a-f\d]{3}/i.exec(F.toString(16));if(!$)return[0,0,0];let[B]=$;if(B.length===3)B=[...B].map((u)=>u+u).join("");let E=Number.parseInt(B,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(F)=>x0.rgbToAnsi256(...x0.hexToRgb(F)),enumerable:!1},ansi256ToAnsi:{value(F){if(F<8)return 30+F;if(F<16)return 90+(F-8);let $,B,E;if(F>=232)$=((F-232)*10+8)/255,B=$,E=$;else{F-=16;let J=F%36;$=Math.floor(F/36)/5,B=Math.floor(J/6)/5,E=J%6/5}let u=Math.max($,B,E)*2;if(u===0)return 30;let U=30+(Math.round(E)<<2|Math.round(B)<<1|Math.round($));if(u===2)U+=60;return U},enumerable:!1},rgbToAnsi:{value:(F,$,B)=>x0.ansi256ToAnsi(x0.rgbToAnsi256(F,$,B)),enumerable:!1},hexToAnsi:{value:(F)=>x0.ansi256ToAnsi(x0.hexToAnsi256(F)),enumerable:!1}}),x0}var rs=ns(),$F=rs;function $3(D){return D.replace(/\r\n/g,`
|
|
@@ -683,9 +683,9 @@ ${yFD}
|
|
|
683
683
|
Try running with %s or get access `,nF.cyan("sudo"))+`
|
|
684
684
|
to the local update config store via
|
|
685
685
|
`+nF.cyan(iO(" sudo chown -R $USER:$(id -gn $USER) %s ",Z3));A4.on("exit",()=>{console.error(OJ(F,{textAlignment:"center"}))})}}check(){if(!this.config||this.config.get("optOut")||this.#E)return;if(this.update=this.config.get("update"),this.update)this.update.current=this.#$,this.config.delete("update");if(Date.now()-this.config.get("lastUpdateCheck")<this.#B)return;G8D(A4.execPath,[Hy.join(Y8D,"check.js"),JSON.stringify(this.#F)],{detached:!0,stdio:"ignore"}).unref()}async fetchInfo(){let{distTag:D}=this.#F,F=await PO(this._packageName,{version:D});return{latest:F,current:this.#$,type:qy.default(this.#$,F)??D,name:this._packageName}}notify(D){let F=!this._shouldNotifyInNpmScript&&Mk;if(!A4.stdout.isTTY||F||!this.update||!Cy.default(this.update.latest,this.update.current))return this;D={isGlobal:Ik,...D};let $=D.isGlobal?`npm i -g ${this._packageName}`:`npm i ${this._packageName}`,B="Update available "+nF.dim("{currentVersion}")+nF.reset(" → ")+nF.green("{latestVersion}")+`
|
|
686
|
-
Run `+nF.cyan("{updateCommand}")+" to update",E=D.message||B;D.boxenOptions??={padding:1,margin:1,textAlignment:"center",borderColor:"yellow",borderStyle:"round"};let u=OJ(lO(E,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:$}),D.boxenOptions);if(D.defer===!1)console.error(u);else A4.on("exit",()=>{console.error(u)});return this}}function nO(D){let F=new HJ(D);return F.check(),F}var N8D=5000,W8D="upgrade-toast.json",O8D="upgrade-check.log",Ay=process.env.GOATCHAIN_DEBUG_LOG||"./goatchain-debug.log";async function jy(){if(await P2("start",{disableAutoUpdate:process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1",autoUpdate:process.env.GOATCHAIN_AUTOUPDATE
|
|
686
|
+
Run `+nF.cyan("{updateCommand}")+" to update",E=D.message||B;D.boxenOptions??={padding:1,margin:1,textAlignment:"center",borderColor:"yellow",borderStyle:"round"};let u=OJ(lO(E,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:$}),D.boxenOptions);if(D.defer===!1)console.error(u);else A4.on("exit",()=>{console.error(u)});return this}}function nO(D){let F=new HJ(D);return F.check(),F}var N8D=5000,W8D="upgrade-toast.json",O8D="upgrade-check.log",Ay=process.env.GOATCHAIN_DEBUG_LOG||"./goatchain-debug.log";async function jy(){if(await P2("start",{disableAutoUpdate:process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1",autoUpdate:process.env.GOATCHAIN_AUTOUPDATE!=="0",cwd:A8D(),argv:j8D(),debugLogPath:Ay}),process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1")return await P2("skip-disabled"),null;let D=L8D();if(!D?.version)return await P2("skip-missing-version"),null;let F=D.source==="injected",$={name:"goatchain-cli",version:D.version},B=nO({pkg:$,updateCheckInterval:N8D});try{let E=null,u="none";if(typeof B.fetchInfo==="function")u="fetchInfo",E=await B.fetchInfo();else if(typeof B.check==="function")u="check",E=await B.check();let U=E?.update??E??B.update;if(await P2("check-result",{checkMethod:u,update:C8D(U),pkgVersion:$.version,hasInjectedVersion:F}),U?.latest){let J=U.current??$.version,G=U.latest;if(J===G)return await P2("no-update",{current:J}),`Version ${J} is up to date.`;if(process.env.GOATCHAIN_AUTOUPDATE!=="0"&&F)return await P2("update-available",{current:J,latest:G,autoUpdate:!0}),H8D(G),`Update available: goatchain-cli@${G} (current: ${J}). Installing in background. Restart terminal after it finishes.`;return await P2("update-available",{current:J,latest:G,autoUpdate:!1}),`Update available: goatchain-cli@${G} (current: ${J}). Run: npm install -g goatchain-cli`}return await P2("no-update",{current:$.version}),null}catch(E){return await P2("error",{message:E instanceof Error?E.message:String(E)}),"Update check failed. Please try again later."}}function H8D(D){try{P2("autoupdate-start",{version:D});let F=Q8D("npm",["install","-g",`goatchain-cli@${D}`],{stdio:"ignore",detached:!0});F.unref();let $=!1,B=(E)=>{if($)return;$=!0,P2("autoupdate-finish",{version:D,message:E}),My(E)};F.on("close",(E)=>{if(E===0)B(`Update installed: goatchain-cli@${D}. Restart terminal to use the new version.`);else B("Auto-update failed. Run: npm install -g goatchain-cli")}),F.on("error",()=>{P2("autoupdate-error",{version:D,reason:"process-error"}),B("Auto-update failed. Run: npm install -g goatchain-cli")})}catch{P2("autoupdate-error",{version:D,reason:"spawn-throw"}),My("Auto-update failed. Run: npm install -g goatchain-cli")}}function My(D){let F=globalThis?.__GOATCHAIN_UPGRADE_TOAST__;if(typeof F==="function")try{F(D);return}catch{}q8D(D)}async function q8D(D){try{let{getGoatChainUserDir:F}=await Promise.resolve().then(() => cu),[{mkdir:$,writeFile:B},E]=await Promise.all([import("node:fs/promises"),import("node:path")]),u=await F(process.env);await $(u,{recursive:!0});let U=E.join(u,W8D),J=JSON.stringify({message:D,createdAt:Date.now()});await B(U,J,"utf8")}catch{}}function C8D(D){if(!D||typeof D!=="object")return;return{current:D.current,latest:D.latest,type:D.type,name:D.name}}async function P2(D,F){try{let{getGoatChainUserDir:$}=await Promise.resolve().then(() => cu),[{mkdir:B,appendFile:E},u]=await Promise.all([import("node:fs/promises"),import("node:path")]),U=await $(process.env);await B(U,{recursive:!0});let J=u.join(U,O8D),G={ts:new Date().toISOString(),event:D,...F};await E(J,`${JSON.stringify(G)}
|
|
687
687
|
`,{encoding:"utf8",mode:384}),await M8D(G)}catch{}}async function M8D(D){try{let{appendFile:F}=await import("node:fs/promises"),B=`[${String(D.ts??new Date().toISOString())}] upgrade_check ${JSON.stringify(D)}
|
|
688
|
-
`;await F(Ay,B,{encoding:"utf8"})}catch{}}function A8D(){try{return process.cwd()}catch{return}}function j8D(){try{return process.argv}catch{return}}function L8D(){let D="0.0.4-beta.
|
|
688
|
+
`;await F(Ay,B,{encoding:"utf8"})}catch{}}function A8D(){try{return process.cwd()}catch{return}}function j8D(){try{return process.argv}catch{return}}function L8D(){let D="0.0.4-beta.23".trim();if(D)return{version:D,source:"injected"};let F=w8D();if(F)return{version:F,source:"package"};return null}function w8D(){try{let D=rO.dirname(Z8D(import.meta.url));for(let F=0;F<6;F++){let $=rO.join(D,"package.json");if(K8D($)){let E=V8D($,"utf8"),u=JSON.parse(E),U=typeof u?.version==="string"?u.version.trim():"";if(U)return U}let B=rO.dirname(D);if(B===D)break;D=B}}catch{}return null}import{computed as oF,defineComponent as y3D,h as R4,inject as b3D,nextTick as x3D,provide as g3D,ref as Z$,watch as SE}from"vue";var j4=Symbol("GoatChainBridge");var Ly=["user","assistant","tool"];var wy=["status","thinking","markdown","tool_call","tool_output","tool_result","approve","todo","plan"];var f3=[...Ly,...wy];var qJ=["black","red","green","yellow","blue","magenta","cyan","white","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright"];function pO(D,F){let $={};for(let B of f3)$[B]={fg:D,bg:F};return $}var Py=Object.freeze({goatchain:{...pO("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:{...pO("white","black"),user:{fg:"white",bg:"black"},assistant:{fg:"white",bg:"black"},tool:{fg:"white",bg:"black"},thinking:{fg:"white",bg:"black"}},contrast:{...pO("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 T6(D,F){let $=Py[D.preset]??Py.goatchain,B=$[F]??$.assistant??{fg:"white",bg:"black"},E=D.overrides?.[F]??{};return{...B,...E}}import aO from"node:fs";function P8D(D){let $="";for(let B=0;B<D.length;B++){if(D[B]!=="\x1B"||D[B+1]!=="["){$+=D[B];continue}let E=B+2;while(E<D.length){let u=D.charCodeAt(E);if(u>=48&&u<=57||u===59){E++;continue}break}if(E<D.length&&D[E]==="m"){B=E;continue}$+=D[B]}return $}function Ry(D){D=P8D(D);let F="";for(let $ of D){let B=$.codePointAt(0);if(B<=31&&B!==10&&B!==9||B===127)continue;F+=$}return F}function z3(D){let F=0;for(let $ of D)F+=P0($);return F}function CJ(D,F){if(F=Math.max(0,Math.floor(F)),F<=0)return{chunk:"",rest:D};let $=0,B=0;for(;B<D.length;){let E=D.codePointAt(B)??0,u=String.fromCodePoint(E),U=P0(u);if($+U>F)break;if($+=U,B+=u.length,$>=F)break}return{chunk:D.slice(0,B),rest:D.slice(B)}}function MJ(D,F){return CJ(D,F).chunk}function fy(D,F){F=Math.max(0,Math.floor(F));let $=z3(D);if($>=F)return MJ(D,F);return`${D}${" ".repeat(F-$)}`}function zy(D,F){if(F=Math.max(1,Math.floor(F)),!D)return[""];let $=[],B=D;while(!0){let{chunk:E,rest:u}=CJ(B,F);if($.push(E),!u)break;B=u}return $}var L4=new Map,R8D=100,f8D=60000;function z8D(D,F){let $=0,B=`${D}|${F}`;for(let E=0;E<B.length;E++){let u=B.charCodeAt(E);$=($<<5)-$+u,$=$&$}return $.toString(36)}function T8D(){let D=Date.now();for(let[F,$]of L4.entries())if(D-$.timestamp>f8D)L4.delete(F)}if(typeof setInterval<"u")setInterval(T8D,1e4);function AJ(D){let F=(G)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let Y=new Date().toISOString().split("T")[1].slice(0,-1);aO.appendFileSync("/tmp/goatchain-debug.log",`[${Y}] [PARSE-INLINE] ${G}
|
|
689
689
|
`)}}catch{}},$=[],B="",E=0;F(`START: text length=${D.length}`);function u(){if(!B)return;$.push({kind:"text",text:B}),B=""}let U=0,J=D.length*10+1000;while(E<D.length){if(U++,U>J){F(`ERROR: Infinite loop detected! i=${E}, text.length=${D.length}, iterations=${U}`);break}if(U%100===0)F(` Progress: i=${E}/${D.length}, iterations=${U}`);let G=D[E];if(G==="`"){let _=D.indexOf("`",E+1);if(_>E+1){u(),$.push({kind:"code",text:D.slice(E+1,_)}),E=_+1;continue}}if(G==="*"&&D[E+1]==="*"){let _=D.indexOf("**",E+2);if(_>E+2){u(),$.push({kind:"bold",text:D.slice(E+2,_)}),E=_+2;continue}}B+=G,E++}return u(),F(`END: ${$.length} spans, iterations=${U}`),$}function jJ(D,F){let $=(X)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let V=new Date().toISOString().split("T")[1].slice(0,-1);aO.appendFileSync("/tmp/goatchain-debug.log",`[${V}] [WRAP-SPANS] ${X}
|
|
690
690
|
`)}}catch{}};if(F<=0)return[[{kind:"text",text:""}]];$(`START: spans=${D.length}, width=${F}`);function B(X){let Q=[],V=/\s+/g,Z=0;for(let O=V.exec(X.text);O;O=V.exec(X.text)){if(O.index>Z)Q.push({kind:X.kind,text:X.text.slice(Z,O.index)});Q.push({kind:X.kind,text:O[0]}),Z=O.index+O[0].length}if(Z<X.text.length)Q.push({kind:X.kind,text:X.text.slice(Z)});return Q}let E=[],u=[],U=0;function J(X){if(!X.text)return 0;if(/^\s+$/.test(X.text))return X.text.length;return z3(X.text)}function G(X){let Q=u[u.length-1];if(Q&&Q.kind===X.kind){Q.text+=X.text;return}u.push({...X})}function _(){E.push(u),u=[],U=0}let Y=0;for(let X of D){Y++;let Q=B(X),V=0;for(let Z of Q){if(V++,!Z.text)continue;if(/^\s+$/.test(Z.text)&&U===0)continue;let O=J(Z);if(O<=F-U){G(Z),U+=O;continue}if(!/^\s+$/.test(Z.text)&&U>0&&O<=F){_(),G(Z),U+=O;continue}let C=Z.text,H=0,N=Z.text.length*10+100;while(C){if(H++,H>N){$(`ERROR: Infinite loop in chunking! span=${Y}, token=${V}, iterations=${H}, remaining="${C.slice(0,50)}", col=${U}, width=${F}`);break}let R=F-U;if(R<=0){_();continue}if(/^\s+$/.test(C)){_(),C="";continue}let T=CJ(C,R),M=T.chunk;if(C=T.rest,G({kind:Z.kind,text:M}),U+=z3(M),U>=F)_()}}}if(u.length===0)return E.length?E:[[{kind:"text",text:""}]];return E.push(u),$(`END: ${E.length} lines`),E}function Ty(D,F){let $=(R)=>{try{if(globalThis.process?.env?.GOATCHAIN_DEBUG==="1"){let M=new Date().toISOString().split("T")[1].slice(0,-1);aO.appendFileSync("/tmp/goatchain-debug.log",`[${M}] [MARKDOWN-PARSE] ${R}
|
|
691
691
|
`)}}catch{}},B=Date.now();$(`START: markdown length=${D.length}, width=${F}`);let E=z8D(D,F),u=L4.get(E);if(u)return $(`CACHE HIT: returning ${u.lines.length} cached lines`),u.timestamp=Date.now(),u.lines;$("CACHE MISS: parsing markdown");let U=Ry(D).split(`
|
|
@@ -782,4 +782,4 @@ Bun: ${typeof globalThis.Bun<"u"}
|
|
|
782
782
|
Debug log written to: ${FG}`),process.exit(1)}),process.on("unhandledRejection",(D,F)=>{let $=D instanceof Error?D:Error(String(D));c2("UNHANDLED REJECTION",{error:$.message,stack:$.stack}),console.error(`
|
|
783
783
|
|
|
784
784
|
=== CRASH: Unhandled Promise Rejection ===`),console.error("Reason:",$.message),console.error("Stack:",$.stack),console.error(`
|
|
785
|
-
Debug log written to: ${FG}`)}),process.on("SIGINT",()=>{c2("Received SIGINT")}),process.on("SIGTERM",()=>{c2("Received SIGTERM")}),c2("Crash handlers installed")}function H7D(D){let F=String(D??"").trim();if(!F)return;let $=globalThis.__GOATCHAIN_UPGRADE_TOAST__;if(typeof $==="function"){$(F);return}if(!process.env.GOATCHAIN_STARTUP_UPGRADE_TOAST)process.env.GOATCHAIN_STARTUP_UPGRADE_TOAST=F}async function q7D(D,F){return await Promise.race([D,new Promise(($)=>setTimeout(()=>$(null),F))])}async function C7D(D){let F=globalThis.process;if(!F)throw Error("runCli is only supported in Node");let $=D??F.argv?.slice(2)??[];if(IH($)){console.log(vH());return}let B=kH($,{stdout:F.stdout});if(B.debug){if(F.env.GOATCHAIN_DEBUG="1",!$G)$G=!0,Xx()}if(c2("[CLI] runCli() called"),c2("[CLI] args",{app:B.app,cols:B.cols,rows:B.rows}),B.approvals)F.env.GOATCHAIN_TOOL_APPROVALS=B.approvals;let E=B.app==="goatchain"?(U)=>{let J=CH({initialRoute:B.initialRoute||"home"});U.use(J)}:void 0;c2("[CLI] Before createGoatChainShellProps");let u=B.app==="goatchain"?await nN({cwd:String(F.cwd?.()??"."),env:F.env}):{cols:B.cols,rows:B.rows};c2("[CLI] After createGoatChainShellProps"),c2("[CLI] About to call runTerminalUi"),await $T({proc:F,cols:B.cols,rows:B.rows,sizeLocked:B.sizeLocked,component:MH,props:u,install:E,defaultStyle:B.app==="goatchain"?{fg:"whiteBright",bg:"black"}:void 0,palette:B.app==="goatchain"?{blackBright:"#262626"}:void 0,defaultBg:B.app==="goatchain"?"black":void 0,altScreen:B.altScreen,enableMouse:B.enableMouse,recordPath:B.recordPath,replayPath:B.replayPath,snapshotPath:B.snapshotPath})}async function M7D(){Xx();let D=process.argv.slice(2).filter((B)=>B!=="--debug"),F=D[0]??"",$="0.0.4-beta.
|
|
785
|
+
Debug log written to: ${FG}`)}),process.on("SIGINT",()=>{c2("Received SIGINT")}),process.on("SIGTERM",()=>{c2("Received SIGTERM")}),c2("Crash handlers installed")}function H7D(D){let F=String(D??"").trim();if(!F)return;let $=globalThis.__GOATCHAIN_UPGRADE_TOAST__;if(typeof $==="function"){$(F);return}if(!process.env.GOATCHAIN_STARTUP_UPGRADE_TOAST)process.env.GOATCHAIN_STARTUP_UPGRADE_TOAST=F}async function q7D(D,F){return await Promise.race([D,new Promise(($)=>setTimeout(()=>$(null),F))])}async function C7D(D){let F=globalThis.process;if(!F)throw Error("runCli is only supported in Node");let $=D??F.argv?.slice(2)??[];if(IH($)){console.log(vH());return}let B=kH($,{stdout:F.stdout});if(B.debug){if(F.env.GOATCHAIN_DEBUG="1",!$G)$G=!0,Xx()}if(c2("[CLI] runCli() called"),c2("[CLI] args",{app:B.app,cols:B.cols,rows:B.rows}),B.approvals)F.env.GOATCHAIN_TOOL_APPROVALS=B.approvals;let E=B.app==="goatchain"?(U)=>{let J=CH({initialRoute:B.initialRoute||"home"});U.use(J)}:void 0;c2("[CLI] Before createGoatChainShellProps");let u=B.app==="goatchain"?await nN({cwd:String(F.cwd?.()??"."),env:F.env}):{cols:B.cols,rows:B.rows};c2("[CLI] After createGoatChainShellProps"),c2("[CLI] About to call runTerminalUi"),await $T({proc:F,cols:B.cols,rows:B.rows,sizeLocked:B.sizeLocked,component:MH,props:u,install:E,defaultStyle:B.app==="goatchain"?{fg:"whiteBright",bg:"black"}:void 0,palette:B.app==="goatchain"?{blackBright:"#262626"}:void 0,defaultBg:B.app==="goatchain"?"black":void 0,altScreen:B.altScreen,enableMouse:B.enableMouse,recordPath:B.recordPath,replayPath:B.replayPath,snapshotPath:B.snapshotPath})}async function M7D(){Xx();let D=process.argv.slice(2).filter((B)=>B!=="--debug"),F=D[0]??"",$="0.0.4-beta.23";if(F==="upgrade"){let B=D[1]??void 0,E=await pN({repo:process.env.GOATCHAIN_UPDATE_REPO||"zjywill/GoatChain",currentVersion:$,execPath:process.execPath,argv:process.argv.slice(1),env:process.env,targetVersion:B});if(E.kind==="restarted")process.exit(0);if(E.kind==="up_to_date")console.log("goatchain is already up to date."),process.exit(0);if(E.kind==="skipped")console.log(`goatchain upgrade skipped: ${E.reason}`),process.exit(0);console.error("goatchain upgrade failed:",E.error),process.exit(1)}if(d9(process.execPath)){let B=process.env.GOATCHAIN_DISABLE_AUTOUPDATE==="1",E=String(process.env.GOATCHAIN_AUTOUPDATE??"").trim().toLowerCase(),u=B?"off":E==="notify"?"notify":E==="off"||E==="0"||E==="false"||E==="no"?"off":"auto";if(u==="auto"){if((await pN({repo:process.env.GOATCHAIN_UPDATE_REPO||"zjywill/GoatChain",currentVersion:$,execPath:process.execPath,argv:process.argv.slice(1),env:process.env})).kind==="restarted")process.exit(0)}else if(u==="notify"&&!process.env.GOATCHAIN_STARTUP_TOAST){let U=await gf({repo:process.env.GOATCHAIN_UPDATE_REPO||"zjywill/GoatChain",currentVersion:$,execPath:process.execPath});if(U.kind==="update_available")process.env.GOATCHAIN_STARTUP_TOAST=`Update available: goatchain@${U.latestVersion} (run: goatchain upgrade)`}}else{let B=!1,E=(J)=>{if(B||!J)return;B=!0,H7D(J)},u=jy();u.then(E).catch((J)=>{c2("[CLI] npm upgrade check failed",{error:J instanceof Error?J.message:String(J)})});let U=await q7D(u,Yx);if(U===null)c2("[CLI] npm upgrade check timed out",{timeoutMs:Yx});E(U)}await C7D()}if(GD.main==GD.module||import.meta.url===`file://${process.argv[1]}`)M7D().catch((D)=>{console.error("Fatal error during setup:",D),process.exit(1)});export{C7D as runCli};
|