goatchain-cli 0.0.4-beta.16 → 0.0.4-beta.17
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 +1 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -595,7 +595,7 @@ user: Where are errors from the client handled?
|
|
|
595
595
|
assistant: Clients are marked as failed in the \`connectToServer\` function in src/services/process.ts:712.
|
|
596
596
|
</example>`,model:J,tools:U,stateStore:_});K.use(Q),K.use(rG({maxTokens:128000,protectedTurns:2,model:J,stateStore:_})),V0("Agent initialized with tools:",Array.from(U.list().map((L)=>L.name))),V0("Agent initialized with middlewares:",K.middlewareNames.join(", "));let f=new _7(K,{debug:hZ,maxIterations:1e4}),Z=new cL(f),W=Nl.toWeb(F1.stdin),F=Wl.toWeb(F1.stdout),B=EL(F,W);V0("Creating AgentSideConnection...");let H=new CZ((L)=>{return V0("Agent connection established"),Z.setConnection(L),Z},B);V0("ACP Server ready and listening on stdio"),await H.closed,V0("Connection closed"),f.destroy()}var El=import.meta.url===`file://${F1.argv[1]}`||F1.argv[1]?.endsWith("acp-server.ts")||F1.argv[1]?.endsWith("acp-server.js");if(El)lL().catch(($)=>{console.error("[ACP Server] Fatal error:",$),F1.exit(1)});function Ll(){let $=globalThis.process;return!!$&&typeof $?.versions?.node==="string"}function mZ(){return globalThis.process?.env??{}}var dL="plan-mode";function O6($){return String($??"").trim()||void 0}function iL($){let U=String($??"").trim();if(!U)return;let J=Number.parseFloat(U);return Number.isFinite(J)?J:void 0}function wl($){if(typeof $==="string")return $;if(Array.isArray($))return $.map((U)=>{if(typeof U==="object"&&U&&"text"in U)return String(U.text??"");return JSON.stringify(U)}).join(`
|
|
597
597
|
`);try{return JSON.stringify($,null,2)}catch{return String($)}}function Rl($,U){if(!U||typeof $?.cancel!=="function")return()=>{};if(U.aborted){try{$.cancel()}catch{}return()=>{}}let J=()=>{try{$.cancel()}catch{}};return U.addEventListener("abort",J,{once:!0}),()=>{try{U.removeEventListener("abort",J)}catch{}}}function kl($){return{id:String($?.id??""),type:"function",function:{name:String($?.function?.name??""),arguments:$?.function?.arguments}}}function Al($){let U={};for(let J of $){if(J.role!=="tool"||!J.tool_call_id)continue;let _=typeof J.content==="string"?J.content:J.content?JSON.stringify(J.content):"";try{let G=JSON.parse(_);if(G&&typeof G==="object"&&G.answers&&typeof G.answers==="object")U[J.tool_call_id]=G.answers}catch{}}return U}function cZ($){if(!$)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map((U)=>String(U?.text??"")).join("");return String($)}function lZ($){if(!$||typeof $!=="object")return null;let U=$.usage;if(U&&typeof U==="object")return U;let J=$.stats?.usage;if(J&&typeof J==="object")return J;try{let G=(typeof $.toSnapshot==="function"?$.toSnapshot():null)?.stats?.usage;if(G&&typeof G==="object")return G}catch{}return null}function rL($){if(!Ll())throw Error("GoatChain embedded agent is Node-only");let U=$.debug===!0,J=$.cliTools!==!1,_=$.planMode===!0,G=$.subagents===!0,V=O6($.stateDir||mZ().GOATCHAIN_STATE_DIR||mZ().GOATCHAIN_STATE_DIR),Y=null,Q=_?"plan":"agent",X=null,K=null,f=null,Z=null;function W(D,w){let v=D.filter((b)=>b.role!=="system"),T=(()=>{for(let b=v.length-1;b>=0;b--)if(v[b]?.role==="user")return b;return-1})(),k=String(w??"").trim(),I=T===v.length-1&&k.length>0,y=[];for(let b=0;b<v.length;b++){if(I&&b===T)continue;let x=v[b];if(!x)continue;if(x.role==="user")y.push({role:"user",content:cZ(x.content)});else if(x.role==="assistant"){let e={role:"assistant",content:cZ(x.content)};if(Array.isArray(x.tool_calls)&&x.tool_calls.length)e.tool_calls=x.tool_calls;y.push(e)}else if(x.role==="tool")y.push({role:"tool",tool_call_id:String(x.tool_call_id??""),content:cZ(x.content),...x.metadata?.error===!0?{isError:!0}:{}})}return y}function F(D,w,v){try{if(!D||!Array.isArray(D.messages))return;let T=W(w,v);if(T.length===0)return;if(D.messages.length>=T.length)return;D.messages=T}catch{}}function B(D){let w=D?.env;if(!w||typeof w!=="object")return;let v=globalThis.process;if(!v?.env)return;for(let[T,k]of Object.entries(w)){let I=String(T??"").trim();if(!I)continue;let y=k==null?"":String(k);if(!y)delete v.env[I];else v.env[I]=y}}let H=new Map;async function L(){if(Y)return Y;if(V&&typeof l6==="function")try{return Y=new l6({dir:V,deleteOnComplete:!1}),Y}catch(D){if(U)console.warn("[goatchain-node] Failed to init FileStateStore:",D);Y=null}if(!Y&&typeof d6==="function")try{Y=new d6({deleteOnComplete:!1})}catch(D){if(U)console.warn("[goatchain-node] Failed to init InMemoryStateStore:",D);Y=null}return Y}function P(D,w){return{id:D,createdAt:w,state:{status:"active",updatedAt:w,lastActiveAt:w},context:{messages:[],messageCount:0,toolCallCount:0},stats:{usage:{promptTokens:0,completionTokens:0,totalTokens:0},responseCount:0}}}function O(D){if(!Array.isArray(D)||D.length===0)return;for(let w=D.length-1;w>=0;w--){let v=D[w],T=String(v?.role??"");if(T!=="user"&&T!=="assistant"&&T!=="system"&&T!=="tool")continue;let k=v?.content;if(typeof k==="string"){let I=k.replace(/\s+/g," ").trim();if(I)return I.slice(0,200)}if(Array.isArray(k)){let I=k.filter((y)=>y&&typeof y==="object"&&y.type==="text"&&typeof y.text==="string").map((y)=>y.text).join(" ").replace(/\s+/g," ").trim();if(I)return I.slice(0,200)}}return}async function A(){let D=W1?.SESSION;return typeof D==="string"&&D.trim()?D:"session"}function z(){let D=mZ();return{modelId:String(D.GOATCHAIN_MODEL||$.modelId),baseUrl:O6(D.GOATCHAIN_OPENAI_BASE_URL||D.OPENAI_BASE_URL||$.baseUrl),apiKey:O6(D.OPENAI_API_KEY||$.apiKey),temperature:iL(D.GOATCHAIN_TEMPERATURE),topP:iL(D.GOATCHAIN_TOP_P)}}function q(D){return JSON.stringify({modelId:D.modelId,baseUrl:D.baseUrl??null,apiKey:D.apiKey?"***":null,temperature:D.temperature??null,topP:D.topP??null})}async function M(D){await L();let w=new B6,v=(b)=>{if(!b)return;try{w.register(new b)}catch(x){if(U)console.warn("[goatchain-node] Failed to register tool:",b?.name??"(unknown)",x)}};if(v(o6),v(U2),v(J2),v(t6),v(i6),v(_2),v(V2),J)v(Q2),v(a6),v(p6),v(n6),v(G2);let T=FF(GJ,D),k=SU({adapter:T}),I=[];if(typeof fJ==="function"){if(X=fJ({insertEveryIteration:!0}),Q==="plan")I.push(X)}if(G&&typeof NJ==="function"&&X2)try{I.push(NJ({subagents:[X2],globalToolRegistry:w,model:k}))}catch(b){if(U)console.warn("[goatchain-node] Failed to init subagent middleware:",b)}return{agent:new C4({name:"GoatChain",systemPrompt:$.systemPrompt,model:k,tools:w,...Y?{stateStore:Y}:{},...I.length?{middleware:I}:{}}),tools:w}}async function R(){let D=z(),w=q(D);if(w!==Z){let{agent:v,tools:T}=await M(D);K=v,f=T,Z=w,H.clear()}}async function j(D,w){let v=O6(D),T=v?H.get(v):void 0;if(T&&w?.resumeOnly)return{sessionId:v,session:T.session};if(await R(),T)return{sessionId:v,session:T.session};let k=z(),I={...typeof k.temperature==="number"?{temperature:k.temperature}:{},...typeof k.topP==="number"?{topP:k.topP}:{}},y;if(v&&Y&&typeof K?.resumeSession==="function")try{y=await K.resumeSession(v,{requestParams:I})}catch{y=await K.createSession({sessionId:v,requestParams:I})}else if(v)y=await K.createSession({sessionId:v,requestParams:I});else y=await K.createSession({requestParams:I});let b=O6(y?.id)??O6(y?.sessionId)??v;if(!b)throw Error("GoatChain session id is missing");return H.set(b,{session:y}),{sessionId:b,session:y}}async function*S(D){for await(let w of D){if(w?.type==="subagent_event"){let k=w?.nestedEvent,I=E(k),y=O6(k?.sessionId);for(let b of I)yield{...b,metadata:{...b.metadata??{},...y?{session_id:y}:{},subagent:!0,subagentId:w?.subagentId,subagentType:w?.subagentType,taskDescription:w?.taskDescription,originalEventType:k?.type}};continue}let v=E(w),T=O6(w?.sessionId);for(let k of v)yield T?{...k,metadata:{...k.metadata??{},session_id:T}}:k}}function E(D){if(!D||typeof D!=="object")return[];switch(D.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(D.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(D.callId??""),toolName:D.toolName,argsTextDelta:D.argsTextDelta}}];case"tool_call_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_call_start",callId:String(D.callId??""),toolName:D.toolName}}];case"tool_call_end":return[{role:"assistant",content:"",tool_calls:[kl(D.toolCall)],metadata:{originalEventType:"tool_call_end"}}];case"tool_output_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_output_start",tool_call_id:String(D.tool_call_id??""),tool_name:String(D.toolName??D.tool_name??"")}}];case"tool_output_delta":return[{role:"assistant",content:String(D.delta??""),metadata:{originalEventType:"tool_output_delta",tool_call_id:String(D.tool_call_id??""),isStderr:D.isStderr}}];case"tool_result":let w=Boolean(D.isError||D.result?.isError===!0);return[{role:"tool",tool_call_id:String(D.tool_call_id??""),content:Array.isArray(D.result?.content)?D.result.content:wl(D.result),metadata:{...w?{error:!0}:null,originalEventType:"tool_result",structuredContent:D.result?.structuredContent,rawResult:U?D.result:void 0}}];case"tool_skipped":return[{role:"assistant",content:`Tool skipped: ${String(D.toolName??"")} - ${String(D.reason??"")}`,metadata:{originalEventType:"tool_skipped"}}];case"tool_approval_requested":return[{role:"assistant",content:`Tool approval requested: ${String(D.toolName??"")}`,metadata:{approval_requested:!0,tool_call_id:String(D.tool_call_id??""),tool_name:String(D.toolName??""),risk_level:D.riskLevel,approval_args:D.args,originalEventType:"tool_approval_requested"}}];case"requires_action":{let v={requires_action:!0,kind:D.kind,tool_call_id:D.toolCallId,originalEventType:"requires_action"};if(D.kind==="ask_user"&&D.questions)v.questions=D.questions;return[{role:"assistant",content:`Action required: ${String(D.kind??"")}`,metadata:v}]}case"thinking_delta":return[{role:"assistant",content:String(D.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:D.usage}}];case"done":return[{role:"assistant",content:"",metadata:{done:!0,stopReason:D.stopReason,modelStopReason:D.modelStopReason,usage:D.usage,error:D.error,originalEventType:"done"}}];case"error":return[{role:"assistant",content:"",metadata:{done:!0,error:D.error??D.message??D,stopReason:"error",originalEventType:"error"}}];default:if(U)console.warn("[goatchain-node] Unhandled event:",D.type);return[]}}return{async*receiveMessage(D,w){try{B(w);let v=w?.signal,T=O6(w?.session_id),k=w?.resume===!0;if(!T&&k)throw Error("Cannot resume without a session id");let I=await j(T,{resumeOnly:k}),y=I.sessionId,b=I.session,x=Rl(b,v);try{let e=String(w?.cwd??"").trim();if(e&&f){for(let n of f?.list?.()??[])if(typeof n?.setCwd==="function")try{n.setCwd(e)}catch(l){if(U)console.warn("[goatchain-node] Failed to setCwd on tool:",n?.name,l)}}let J$=w?.toolContext,m$=Al(D),b$={};if(J$&&typeof J$==="object")Object.assign(b$,J$);if(Object.keys(m$).length>0)b$.askUser=b$.askUser??{},b$.askUser.answers={...b$.askUser.answers??{},...m$};let d$=[...D].reverse().find((n)=>n.role==="user"),N$=typeof d$?.content==="string"?d$.content:"";if(!Y)F(b,D,N$);if(k&&Object.keys(b$).length){yield*BF({session:b,toolContext:b$,signal:v,convertEventStream:S});let n=lZ(b);if(n)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:n,...y?{session_id:y}:{}}};return}if(N$.trim()){b.send(N$,Object.keys(b$).length?{toolContext:b$,...v?{signal:v}:null}:v?{signal:v}:void 0),yield*S(b.receive(v?{signal:v}:void 0));let n=lZ(b);if(n)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:n,...y?{session_id:y}:{}}};return}yield*S(b.receive(Object.keys(b$).length?{toolContext:b$,...v?{signal:v}:null}:v?{signal:v}:void 0));let c=lZ(b);if(c)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:c,...y?{session_id:y}:{}}}}finally{x()}}catch(v){yield{role:"assistant",content:["# GoatChain error","","```text",v instanceof Error?v.stack||v.message:String(v),"```"].join(`
|
|
598
|
-
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:OF({ensureSharedStateStore:L,sessionStorageKey:A,createEmptySessionSnapshot:P,createId:()=>Pl(),applyMessagesToSnapshot:(D,w,v)=>{D.context.messages=w,D.context.messageCount=w.length;let T=O(w);if(T)D.context.lastMessagePreview=T;D.state.updatedAt=v,D.state.lastActiveAt=v}}),setMode(D){if(Q===D)return;if(Q=D,!X||!K)return;let v=K.middlewares.filter((T)=>T.name!==dL);if(K.clearMiddlewares(),D==="plan")K.use(X,dL);for(let T of v)K.use(T.fn,T.name);H.clear()},getMode(){return Q}}}function nL($){let U=$.processEnv;try{return rL({systemPrompt:$.context.system,modelId:String(U.GOATCHAIN_MODEL||$.context.env.GOATCHAIN_MODEL||"gpt-4.1-mini"),baseUrl:U.GOATCHAIN_OPENAI_BASE_URL||U.OPENAI_BASE_URL||$.context.env.GOATCHAIN_OPENAI_BASE_URL||$.context.env.OPENAI_BASE_URL,apiKey:U.OPENAI_API_KEY||$.context.env.OPENAI_API_KEY,cliTools:!0,stateDir:$.stateDir})}catch(J){return console.warn("[goatchain] Failed to start GoatChain agent:",J),ZF(J)}}async function aL($){let U=a0("0.0.4-beta.
|
|
598
|
+
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:OF({ensureSharedStateStore:L,sessionStorageKey:A,createEmptySessionSnapshot:P,createId:()=>Pl(),applyMessagesToSnapshot:(D,w,v)=>{D.context.messages=w,D.context.messageCount=w.length;let T=O(w);if(T)D.context.lastMessagePreview=T;D.state.updatedAt=v,D.state.lastActiveAt=v}}),setMode(D){if(Q===D)return;if(Q=D,!X||!K)return;let v=K.middlewares.filter((T)=>T.name!==dL);if(K.clearMiddlewares(),D==="plan")K.use(X,dL);for(let T of v)K.use(T.fn,T.name);H.clear()},getMode(){return Q}}}function nL($){let U=$.processEnv;try{return rL({systemPrompt:$.context.system,modelId:String(U.GOATCHAIN_MODEL||$.context.env.GOATCHAIN_MODEL||"gpt-4.1-mini"),baseUrl:U.GOATCHAIN_OPENAI_BASE_URL||U.OPENAI_BASE_URL||$.context.env.GOATCHAIN_OPENAI_BASE_URL||$.context.env.OPENAI_BASE_URL,apiKey:U.OPENAI_API_KEY||$.context.env.OPENAI_API_KEY,cliTools:!0,stateDir:$.stateDir})}catch(J){return console.warn("[goatchain] Failed to start GoatChain agent:",J),ZF(J)}}async function aL($){let U=a0("0.0.4-beta.17")??await zl($.cwd),J=await dZ($.env),_=J.cache,G=_.settings??{},V=a0(G.cwd),Y=Array.isArray(G.focusFiles)?G.focusFiles.map((X)=>String(X??"")).filter(Boolean):void 0,Q={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_TOP_P?{GOATCHAIN_TOP_P:$.env.GOATCHAIN_TOP_P}:{},...$.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(!Q.GOATCHAIN_MODEL&&a0(G.model))Q.GOATCHAIN_MODEL=String(G.model);if(!Q.GOATCHAIN_CONTEXT_WINDOW&&D6(G.contextWindow)!=null)Q.GOATCHAIN_CONTEXT_WINDOW=String(G.contextWindow);if(!Q.GOATCHAIN_TEMPERATURE&&D6(G.temperature)!=null)Q.GOATCHAIN_TEMPERATURE=String(G.temperature);if(!Q.GOATCHAIN_TOP_P&&D6(G.topP)!=null)Q.GOATCHAIN_TOP_P=String(G.topP);if(!Q.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="auto")Q.GOATCHAIN_TOOL_APPROVALS="auto";if(!Q.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="all")Q.GOATCHAIN_TOOL_APPROVALS="all";if(!Q.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="manual")Q.GOATCHAIN_TOOL_APPROVALS="auto";if(!Q.GOATCHAIN_OPENAI_BASE_URL&&a0(G.baseUrl))Q.GOATCHAIN_OPENAI_BASE_URL=String(G.baseUrl);if(!Q.OPENAI_API_KEY&&a0(G.apiKey))Q.OPENAI_API_KEY=String(G.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(`
|
|
599
599
|
`),cwd:V||".",env:Q,...Y?.length?{focusFiles:Y}:{}},cacheDir:J.dir,cacheFile:J.filePath,cache:_}}async function zl($){try{let[{readFile:U},J]=await Promise.all([import("node:fs/promises"),import("node:path")]),_=await U(J.join($,"package.json"),"utf8"),G=JSON.parse(_),V=typeof G?.version==="string"?G.version:null;return V&&V.trim()?V.trim():null}catch{return null}}import{watch as n5}from"vue";function iJ($,U){let J=String($??"").replace(/\s+/g," ").trim();if(J.length<=U)return J;return`${J.slice(0,Math.max(0,U-1))}…`}function Tl($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter((J)=>J&&typeof J==="object"&&J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join(" ");if($&&typeof $==="object"){let U=$.text;if(typeof U==="string")return U}return""}function rJ($){if(!$||typeof $!=="object")return"";let U=String($.role??"");if(U==="user")return Tl($.content);if(U==="tool")return String($.result?.output??"");if(U==="assistant"){let J=Array.isArray($.parts)?$.parts:[],_=J.filter((V)=>V?.type==="markdown").map((V)=>String(V.markdown??"")).join(`
|
|
600
600
|
`);if(_.trim())return _;let G=J.find((V)=>V?.type==="status");return G?String(G.text??""):""}return""}function tL($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&iJ(rJ(G),999).length>0),_=J?rJ(J):"";return iJ(_||"New session",60)||"New session"}function eL($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&iJ(rJ(G),999).length>0),_=J?rJ(J):"";return iJ(_||"New session",120)||"New session"}function sL($){let J=[...Array.isArray($)?$:[]].reverse().find((_)=>{if(!_||typeof _!=="object"||_.role!=="user")return!1;return iJ(rJ(_),999).length>0});return iJ(J?rJ(J):"",180)}function i5($){return`${$}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function rZ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function r5($){if($==null)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map(r5).join("");if(rZ($)){if(typeof $.text==="string")return String($.text);if(String($.type??"")==="image")return"[image]";try{return JSON.stringify($)}catch{return String($)}}return String($)}function Il($){if(rZ($))return $;if(typeof $==="string"){let U=$.trim();if(!U)return{};try{let J=JSON.parse(U);return rZ(J)?J:{_raw:$}}catch{return{_raw:$}}}return{}}function $w($){let U=$?.context?.messages,J=Array.isArray(U)?U:[],_=[],G=new Map;for(let V of J){let Y=String(V?.role??"");if(Y==="user"){_.push({id:i5("m"),role:"user",content:r5(V?.content)});continue}if(Y==="assistant"){let Q=[],X=r5(V?.content);if(X)Q.push({type:"markdown",markdown:X});let K=Array.isArray(V?.tool_calls)?V.tool_calls:[];for(let f of K){let Z=String(f?.id??"").trim(),W=String(f?.function?.name??"tool"),F=Il(f?.function?.arguments);if(!Z)continue;let B={id:Z,name:W,arguments:F};Q.push({type:"tool_call",call:B}),G.set(Z,_.length)}_.push({id:i5("m"),role:"assistant",parts:[{type:"status",text:""},...Q]});continue}if(Y==="tool"){let Q=String(V?.tool_call_id??"").trim(),X=r5(V?.content),K=V?.isError?"error":"success",f={id:Q||i5("tool"),output:X,status:K};_.push({id:i5("m"),role:"tool",result:f});let Z=Q?G.get(Q):void 0;if(Z==null)continue;let W=_[Z];if(!W||W.role!=="assistant")continue;_[Z]={...W,parts:[...W.parts,{type:"tool_result",result:f}]};continue}}return _}function Uw($){let U=[];for(let J of $){if(J.role==="user"){U.push({role:"user",content:String(J.content??"")});continue}if(J.role==="assistant"){let _=J.parts.filter((Y)=>Y.type==="markdown").map((Y)=>String(Y.markdown??"")).join(""),G=J.parts.flatMap((Y)=>Y.type==="tool_call"?[Y.call]:[]),V=G.length?G.map((Y)=>({id:Y.id,type:"function",function:{name:Y.name,arguments:Y.arguments}})):void 0;U.push({role:"assistant",content:_,...V?{tool_calls:V}:{}});continue}if(J.role==="tool")U.push({role:"tool",tool_call_id:String(J.result.id??""),content:String(J.result.output??""),...J.result.status==="error"?{isError:!0}:{}})}return U}function Jw($){return String($?.id??"").trim()}function Cl($){return Number($?.state?.updatedAt??$?.state?.lastActiveAt??0)||0}function Gw($){let U=$?.context?.messages;return Array.isArray(U)?U:[]}function bl($){let U=Number($?.context?.messageCount??0);if(Number.isFinite(U)&&U>=0)return U;return Gw($).length}function yl($){let U=$?.stats?.usage;return U&&typeof U==="object"?U:null}function _w($){let U=Jw($);if(!U)return null;let J=Cl($),_=Gw($),G=a0($?.state?.title)??tL(_),V=eL(_),Y=a0($?.context?.lastMessagePreview)??sL(_),Q=bl($);return{id:U,updatedAt:J,title:G,summary:V,messageCount:Q,lastMessage:Y}}function nJ($,U){let J=Jw(U);if(J)$.state.sessionId=J;let _=$w(U);$.state.messages.splice(0,$.state.messages.length,..._),$.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 G=yl(U);if(G){let V=Number(G.promptTokens),Y=Number(G.completionTokens);if(Number.isFinite(V))$.state.usage.prompt_tokens=V;if(Number.isFinite(Y))$.state.usage.completion_tokens=Y;if(Number.isFinite(V)&&Number.isFinite(Y))$.state.usage.total_tokens=V+Y;else{let Q=Number(G.totalTokens);if(Number.isFinite(Q))$.state.usage.total_tokens=Q}}}function Vw($){let U=Array.isArray($)?$:[];return Uw(U)}function Yw($){let U=$.store,J=U?.state?.context?.env??{},_=a0(J.GOATCHAIN_OPENAI_BASE_URL||J.OPENAI_BASE_URL),G=a0(J.OPENAI_API_KEY);return{version:1,updatedAt:Date.now(),settings:{cwd:a0(U?.state?.context?.cwd),focusFiles:U?.state?.context?.focusFiles??void 0,model:a0(U?.state?.config?.model),contextWindow:D6(U?.state?.config?.context_window),temperature:D6(U?.state?.config?.temperature),topP:D6(U?.state?.config?.top_p),baseUrl:_,apiKey:G,toolApprovals:U?.state?.approval?.mode==="all"?"all":"auto"},lastSessionId:a0(U?.state?.sessionId)||$.prev.lastSessionId}}function Qw($,U){let J=null,_=!1,G=!1,V=async()=>{if(_){G=!0;return}_=!0,G=!1;try{await $()}finally{if(_=!1,G)Y()}},Y=()=>{if(G=!0,J)clearTimeout(J);J=setTimeout(V,Math.max(0,U||0))};return{schedule:Y}}function gl($){return String($?.id??"").trim()}function Xw($){let U=null,J=$.sessionsBackend??null;return{sessions:J?{async list(){return(await J.list()).map(_w).filter(Boolean)},async use(V){let Y=String(V??"").trim();if(!Y||!U)return;if(String(U.state.sessionId??"")===Y)return;let Q=await J.get(Y);if(!Q)return;nJ(U,Q)},async createNew(){if(!U)return;let V=await J.create();if(!V)return;nJ(U,V)},async delete(V){let Y=String(V??"").trim();if(!Y)return;if(await J.destroy(Y),U&&String(U.state.sessionId??"")===Y){let Q=await J.create();if(Q)nJ(U,Q)}},async fork(V){if(!U)return;let Y=Array.isArray(V?.messages)?V.messages:[];if(typeof J.createWithMessages!=="function"){let X=await J.create();if(X)U.state.sessionId=gl(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 Q=await J.createWithMessages(Vw(Y));if(!Q)return;nJ(U,Q)}}:void 0,onStoreCreated:(V)=>{if(U=V,J){let Q=String(V.state.sessionId??"").trim();if(Q)J.get(Q).then((X)=>{if(X&&U)nJ(U,X)}).catch(()=>{})}let Y=Qw(async()=>{try{let Q=Yw({prev:$.cache,store:V});await iZ($.cacheFile,Q)}catch(Q){console.warn("[goatchain] Failed to persist cache:",Q)}},300);n5(()=>V.state.sessionId,Y.schedule),n5(()=>V.state.config,Y.schedule,{deep:!0}),n5(()=>V.state.context,Y.schedule,{deep:!0}),n5(()=>V.state.approval.mode,Y.schedule),Y.schedule()}}}async function nZ($){let U=$.sessionsBackend,J=a0($.envSessionId);if(U&&J){if(await U.get(J))return J}return J}function Kw(){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(`
|
|
601
601
|
`)}}}import*as fw from"node:path";function ul($){return fw.join($,"state")}function xl($){$.env.GOATCHAIN_STATE_DIR=$.stateDir,$.context.env.GOATCHAIN_STATE_DIR=$.stateDir}async function pZ($){let{context:U,cacheDir:J,cacheFile:_,cache:G}=await aL({cwd:$.cwd,env:$.env}),V=ul(J);xl({env:$.env,context:U,stateDir:V});let Y=nL({context:U,processEnv:$.env,stateDir:V}),Q=Y?.__sessions??null,X=await nZ({sessionsBackend:Q,envSessionId:$.env.GOATCHAIN_SESSION_ID});if(X)$.env.GOATCHAIN_SESSION_ID=X,U.env.GOATCHAIN_SESSION_ID=X;let{sessions:K,onStoreCreated:f}=Xw({cacheFile:_,cache:G,sessionsBackend:Q});return{toolRunner:Kw(),context:U,agent:Y,onStoreCreated:f,sessions:K}}import si from"node:fs";import{nextTick as E3}from"vue";var Nw=($=0)=>(U)=>`\x1B[${U+$}m`,Ww=($=0)=>(U)=>`\x1B[${38+$};5;${U}m`,Zw=($=0)=>(U,J,_)=>`\x1B[${38+$};2;${U};${J};${_}m`,z0={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]}},k_$=Object.keys(z0.modifier),hl=Object.keys(z0.color),ml=Object.keys(z0.bgColor),A_$=[...hl,...ml];function cl(){let $=new Map;for(let[U,J]of Object.entries(z0)){for(let[_,G]of Object.entries(J))z0[_]={open:`\x1B[${G[0]}m`,close:`\x1B[${G[1]}m`},J[_]=z0[_],$.set(G[0],G[1]);Object.defineProperty(z0,U,{value:J,enumerable:!1})}return Object.defineProperty(z0,"codes",{value:$,enumerable:!1}),z0.color.close="\x1B[39m",z0.bgColor.close="\x1B[49m",z0.color.ansi=Nw(),z0.color.ansi256=Ww(),z0.color.ansi16m=Zw(),z0.bgColor.ansi=Nw(10),z0.bgColor.ansi256=Ww(10),z0.bgColor.ansi16m=Zw(10),Object.defineProperties(z0,{rgbToAnsi256:{value(U,J,_){if(U===J&&J===_){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(J/255*5)+Math.round(_/255*5)},enumerable:!1},hexToRgb:{value(U){let J=/[a-f\d]{6}|[a-f\d]{3}/i.exec(U.toString(16));if(!J)return[0,0,0];let[_]=J;if(_.length===3)_=[..._].map((V)=>V+V).join("");let G=Number.parseInt(_,16);return[G>>16&255,G>>8&255,G&255]},enumerable:!1},hexToAnsi256:{value:(U)=>z0.rgbToAnsi256(...z0.hexToRgb(U)),enumerable:!1},ansi256ToAnsi:{value(U){if(U<8)return 30+U;if(U<16)return 90+(U-8);let J,_,G;if(U>=232)J=((U-232)*10+8)/255,_=J,G=J;else{U-=16;let Q=U%36;J=Math.floor(U/36)/5,_=Math.floor(Q/6)/5,G=Q%6/5}let V=Math.max(J,_,G)*2;if(V===0)return 30;let Y=30+(Math.round(G)<<2|Math.round(_)<<1|Math.round(J));if(V===2)Y+=60;return Y},enumerable:!1},rgbToAnsi:{value:(U,J,_)=>z0.ansi256ToAnsi(z0.rgbToAnsi256(U,J,_)),enumerable:!1},hexToAnsi:{value:(U)=>z0.ansi256ToAnsi(z0.hexToAnsi256(U)),enumerable:!1}}),z0}var ll=cl(),G1=ll;function pJ($){return $.replace(/\r\n/g,`
|