goatchain-cli 0.0.4-beta.2 → 0.0.4-beta.3
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 +2 -2
package/dist/cli.mjs
CHANGED
|
@@ -595,7 +595,7 @@ assistant: Clients are marked as failed in the \`connectToServer\` function in s
|
|
|
595
595
|
</example>`,model:J,tools:U,stateStore:_});V.use(Y),V.use(Q7({maxTokens:128000,protectedTurns:2,model:J,stateStore:_})),K0("Agent initialized with tools:",Array.from(U.list().map((R)=>R.name))),K0("Agent initialized with middlewares:",V.middlewareNames.join(", "));let N=new O5(V,{debug:$W,maxIterations:1e4}),B=new Kw(N),Z=nl.toWeb(Z6.stdin),F=rl.toWeb(Z6.stdout),W=xP(F,Z);K0("Creating AgentSideConnection...");let H=new pB((R)=>{return K0("Agent connection established"),B.setConnection(R),B},W);K0("ACP Server ready and listening on stdio"),await H.closed,K0("Connection closed"),N.destroy()}var Gd=import.meta.url===`file://${Z6.argv[1]}`||Z6.argv[1]?.endsWith("acp-server.ts")||Z6.argv[1]?.endsWith("acp-server.js");if(Gd)Qw().catch(($)=>{console.error("[ACP Server] Fatal error:",$),Z6.exit(1)});function Kd(){let $=globalThis.process;return!!$&&typeof $?.versions?.node==="string"}function UW(){return globalThis.process?.env??{}}var Yw="plan-mode";function E1($){return String($??"").trim()||void 0}function Xw($){let U=String($??"").trim();if(!U)return;let J=Number.parseFloat(U);return Number.isFinite(J)?J:void 0}function Qd($){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(`
|
|
596
596
|
`);try{return JSON.stringify($,null,2)}catch{return String($)}}function Yd($,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 Xd($){return{id:String($?.id??""),type:"function",function:{name:String($?.function?.name??""),arguments:$?.function?.arguments}}}function Vd($){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 JW($){if(!$)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map((U)=>String(U?.text??"")).join("");return String($)}function GW($){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 Vw($){if(!Kd())throw Error("GoatChain embedded agent is Node-only");let U=$.debug===!0,J=$.cliTools!==!1,_=$.planMode===!0,G=$.subagents===!0,K=E1($.stateDir||UW().GOATCHAIN_STATE_DIR||UW().GOATCHAIN_STATE_DIR),Q=null,Y=_?"plan":"agent",X=null,V=null,N=null,B=null;function Z(O,w){let z=O.filter((C)=>C.role!=="system"),v=(()=>{for(let C=z.length-1;C>=0;C--)if(z[C]?.role==="user")return C;return-1})(),k=String(w??"").trim(),I=v===z.length-1&&k.length>0,y=[];for(let C=0;C<z.length;C++){if(I&&C===v)continue;let u=z[C];if(!u)continue;if(u.role==="user")y.push({role:"user",content:JW(u.content)});else if(u.role==="assistant"){let x={role:"assistant",content:JW(u.content)};if(Array.isArray(u.tool_calls)&&u.tool_calls.length)x.tool_calls=u.tool_calls;y.push(x)}else if(u.role==="tool")y.push({role:"tool",tool_call_id:String(u.tool_call_id??""),content:JW(u.content),...u.metadata?.error===!0?{isError:!0}:{}})}return y}function F(O,w,z){try{if(!O||!Array.isArray(O.messages))return;let v=Z(w,z);if(v.length===0)return;if(O.messages.length>=v.length)return;O.messages=v}catch{}}function W(O){let w=O?.env;if(!w||typeof w!=="object")return;let z=globalThis.process;if(!z?.env)return;for(let[v,k]of Object.entries(w)){let I=String(v??"").trim();if(!I)continue;let y=k==null?"":String(k);if(!y)delete z.env[I];else z.env[I]=y}}let H=new Map;async function R(){if(Q)return Q;if(K&&typeof i1==="function")try{return Q=new i1({dir:K,deleteOnComplete:!1}),Q}catch(O){if(U)console.warn("[goatchain-node] Failed to init FileStateStore:",O);Q=null}if(!Q&&typeof n1==="function")try{Q=new n1({deleteOnComplete:!1})}catch(O){if(U)console.warn("[goatchain-node] Failed to init InMemoryStateStore:",O);Q=null}return Q}function M(O,w){return{id:O,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 D(O){if(!Array.isArray(O)||O.length===0)return;for(let w=O.length-1;w>=0;w--){let z=O[w],v=String(z?.role??"");if(v!=="user"&&v!=="assistant"&&v!=="system"&&v!=="tool")continue;let k=z?.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 O=V6?.SESSION;return typeof O==="string"&&O.trim()?O:"session"}function T(){let O=UW();return{modelId:String(O.GOATCHAIN_MODEL||$.modelId),baseUrl:E1(O.GOATCHAIN_OPENAI_BASE_URL||O.OPENAI_BASE_URL||$.baseUrl),apiKey:E1(O.OPENAI_API_KEY||$.apiKey),temperature:Xw(O.GOATCHAIN_TEMPERATURE),topP:Xw(O.GOATCHAIN_TOP_P)}}function P(O){return JSON.stringify({modelId:O.modelId,baseUrl:O.baseUrl??null,apiKey:O.apiKey?"***":null,temperature:O.temperature??null,topP:O.topP??null})}async function j(O){await R();let w=new O1,z=(C)=>{if(!C)return;try{w.register(new C)}catch(u){if(U)console.warn("[goatchain-node] Failed to register tool:",C?.name??"(unknown)",u)}};if(z(t1),z(G2),z(_2),z(s1),z(r1),z(Q2),z(Y2),J)z(V2),z(e1),z(a1),z(o1),z(K2);let v=PF(NJ,O),k=gU({adapter:v}),I=[];if(typeof HJ==="function"){if(X=HJ({insertEveryIteration:!0}),Y==="plan")I.push(X)}if(G&&typeof OJ==="function"&&N2)try{I.push(OJ({subagents:[N2],globalToolRegistry:w,model:k}))}catch(C){if(U)console.warn("[goatchain-node] Failed to init subagent middleware:",C)}return{agent:new y4({name:"GoatChain",systemPrompt:$.systemPrompt,model:k,tools:w,...Q?{stateStore:Q}:{},...I.length?{middleware:I}:{}}),tools:w}}async function q(){let O=T(),w=P(O);if(w!==B){let{agent:z,tools:v}=await j(O);V=z,N=v,B=w,H.clear()}}async function E(O,w){let z=E1(O),v=z?H.get(z):void 0;if(v&&w?.resumeOnly)return{sessionId:z,session:v.session};if(await q(),v)return{sessionId:z,session:v.session};let k=T(),I={...typeof k.temperature==="number"?{temperature:k.temperature}:{},...typeof k.topP==="number"?{topP:k.topP}:{}},y;if(z&&Q&&typeof V?.resumeSession==="function")try{y=await V.resumeSession(z,{requestParams:I})}catch{y=await V.createSession({sessionId:z,requestParams:I})}else if(z)y=await V.createSession({sessionId:z,requestParams:I});else y=await V.createSession({requestParams:I});let C=E1(y?.id)??E1(y?.sessionId)??z;if(!C)throw Error("GoatChain session id is missing");return H.set(C,{session:y}),{sessionId:C,session:y}}async function*S(O){for await(let w of O){if(w?.type==="subagent_event"){let k=w?.nestedEvent,I=L(k),y=E1(k?.sessionId);for(let C of I)yield{...C,metadata:{...C.metadata??{},...y?{session_id:y}:{},subagent:!0,subagentId:w?.subagentId,subagentType:w?.subagentType,taskDescription:w?.taskDescription,originalEventType:k?.type}};continue}let z=L(w),v=E1(w?.sessionId);for(let k of z)yield v?{...k,metadata:{...k.metadata??{},session_id:v}}:k}}function L(O){if(!O||typeof O!=="object")return[];switch(O.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(O.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(O.callId??""),toolName:O.toolName,argsTextDelta:O.argsTextDelta}}];case"tool_call_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_call_start",callId:String(O.callId??""),toolName:O.toolName}}];case"tool_call_end":return[{role:"assistant",content:"",tool_calls:[Xd(O.toolCall)],metadata:{originalEventType:"tool_call_end"}}];case"tool_output_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_output_start",tool_call_id:String(O.tool_call_id??""),tool_name:String(O.toolName??O.tool_name??"")}}];case"tool_output_delta":return[{role:"assistant",content:String(O.delta??""),metadata:{originalEventType:"tool_output_delta",tool_call_id:String(O.tool_call_id??""),isStderr:O.isStderr}}];case"tool_result":let w=Boolean(O.isError||O.result?.isError===!0);return[{role:"tool",tool_call_id:String(O.tool_call_id??""),content:Array.isArray(O.result?.content)?O.result.content:Qd(O.result),metadata:{...w?{error:!0}:null,originalEventType:"tool_result",structuredContent:O.result?.structuredContent,rawResult:U?O.result:void 0}}];case"tool_skipped":return[{role:"assistant",content:`Tool skipped: ${String(O.toolName??"")} - ${String(O.reason??"")}`,metadata:{originalEventType:"tool_skipped"}}];case"tool_approval_requested":return[{role:"assistant",content:`Tool approval requested: ${String(O.toolName??"")}`,metadata:{approval_requested:!0,tool_call_id:String(O.tool_call_id??""),tool_name:String(O.toolName??""),risk_level:O.riskLevel,approval_args:O.args,originalEventType:"tool_approval_requested"}}];case"requires_action":{let z={requires_action:!0,kind:O.kind,tool_call_id:O.toolCallId,originalEventType:"requires_action"};if(O.kind==="ask_user"&&O.questions)z.questions=O.questions;return[{role:"assistant",content:`Action required: ${String(O.kind??"")}`,metadata:z}]}case"thinking_delta":return[{role:"assistant",content:String(O.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:O.usage}}];case"done":return[{role:"assistant",content:"",metadata:{done:!0,stopReason:O.stopReason,modelStopReason:O.modelStopReason,usage:O.usage,error:O.error,originalEventType:"done"}}];case"error":return[{role:"assistant",content:"",metadata:{done:!0,error:O.error??O.message??O,stopReason:"error",originalEventType:"error"}}];default:if(U)console.warn("[goatchain-node] Unhandled event:",O.type);return[]}}return{async*receiveMessage(O,w){try{W(w);let z=w?.signal,v=E1(w?.session_id),k=w?.resume===!0;if(!v&&k)throw Error("Cannot resume without a session id");let I=await E(v,{resumeOnly:k}),y=I.sessionId,C=I.session,u=Yd(C,z);try{let x=String(w?.cwd??"").trim();if(x&&N){for(let V$ of N?.list?.()??[])if(typeof V$?.setCwd==="function")try{V$.setCwd(x)}catch(t){if(U)console.warn("[goatchain-node] Failed to setCwd on tool:",V$?.name,t)}}let c=w?.toolContext,A$=Vd(O),R$={};if(c&&typeof c==="object")Object.assign(R$,c);if(Object.keys(A$).length>0)R$.askUser=R$.askUser??{},R$.askUser.answers={...R$.askUser.answers??{},...A$};let M$=[...O].reverse().find((V$)=>V$.role==="user"),Z$=typeof M$?.content==="string"?M$.content:"";if(!Q)F(C,O,Z$);if(k&&Object.keys(R$).length){yield*LF({session:C,toolContext:R$,signal:z,convertEventStream:S});let V$=GW(C);if(V$)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:V$,...y?{session_id:y}:{}}};return}if(Z$.trim()){C.send(Z$,Object.keys(R$).length?{toolContext:R$,...z?{signal:z}:null}:z?{signal:z}:void 0),yield*S(C.receive(z?{signal:z}:void 0));let V$=GW(C);if(V$)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:V$,...y?{session_id:y}:{}}};return}yield*S(C.receive(Object.keys(R$).length?{toolContext:R$,...z?{signal:z}:null}:z?{signal:z}:void 0));let w$=GW(C);if(w$)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:w$,...y?{session_id:y}:{}}}}finally{u()}}catch(z){yield{role:"assistant",content:["# GoatChain error","","```text",z instanceof Error?z.stack||z.message:String(z),"```"].join(`
|
|
597
597
|
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:wF({ensureSharedStateStore:R,sessionStorageKey:A,createEmptySessionSnapshot:M,createId:()=>_d(),applyMessagesToSnapshot:(O,w,z)=>{O.context.messages=w,O.context.messageCount=w.length;let v=D(w);if(v)O.context.lastMessagePreview=v;O.state.updatedAt=z,O.state.lastActiveAt=z}}),setMode(O){if(Y===O)return;if(Y=O,!X||!V)return;let z=V.middlewares.filter((v)=>v.name!==Yw);if(V.clearMiddlewares(),O==="plan")V.use(X,Yw);for(let v of z)V.use(v.fn,v.name);H.clear()},getMode(){return Y}}}function Nw($){let U=$.processEnv;try{return Vw({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),MF(J)}}function a0($){return String($??"").trim()||void 0}function E2($){if(typeof $==="number"&&Number.isFinite($))return $;let U=String($??"").trim();if(!U)return;let J=Number(U);return Number.isFinite(J)?J:void 0}async function Nd($){let[{homedir:U},J]=await Promise.all([import("node:os"),import("node:path")]),_=a0($.GOATCHAIN_HOME);if(_)return J.resolve(_,"goatchain");let G=a0($.XDG_CONFIG_HOME);if(G)return J.resolve(G,"goatchain","goatchain");return J.resolve(U(),".goatchain","goatchain")}async function fw($){let U=await Nd($),[{readFile:J},_]=await Promise.all([import("node:fs/promises"),import("node:path")]),G=_.join(U,"cache.json");try{let K=await J(G,"utf8"),Q=JSON.parse(K);if(Q&&typeof Q==="object"&&Q.version===1)return{dir:U,filePath:G,cache:Q}}catch{}return{dir:U,filePath:G,cache:{version:1,updatedAt:0}}}async function Zw($,U){let[{mkdir:J,writeFile:_,rename:G,chmod:K},Q]=await Promise.all([import("node:fs/promises"),import("node:path")]),Y=Q.dirname($);await J(Y,{recursive:!0});let X=globalThis.process?.pid??"p",V=`${Date.now()}-${Math.random().toString(16).slice(2)}`,N=`${$}.${X}.${V}.tmp`,B=`${JSON.stringify(U,null,2)}
|
|
598
|
-
`;await _(N,B,{encoding:"utf8",mode:384}),await G(N,$);try{await K($,384)}catch{}}async function Bw($){let U=a0("0.0.4-beta.
|
|
598
|
+
`;await _(N,B,{encoding:"utf8",mode:384}),await G(N,$);try{await K($,384)}catch{}}async function Bw($){let U=a0("0.0.4-beta.3")??await fd($.cwd),J=await fw($.env),_=J.cache,G=_.settings??{},K=a0(G.cwd),Q=Array.isArray(G.focusFiles)?G.focusFiles.map((X)=>String(X??"")).filter(Boolean):void 0,Y={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_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(!Y.GOATCHAIN_MODEL&&a0(G.model))Y.GOATCHAIN_MODEL=String(G.model);if(!Y.GOATCHAIN_CONTEXT_WINDOW&&E2(G.contextWindow)!=null)Y.GOATCHAIN_CONTEXT_WINDOW=String(G.contextWindow);if(!Y.GOATCHAIN_TEMPERATURE&&E2(G.temperature)!=null)Y.GOATCHAIN_TEMPERATURE=String(G.temperature);if(!Y.GOATCHAIN_TOP_P&&E2(G.topP)!=null)Y.GOATCHAIN_TOP_P=String(G.topP);if(!Y.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="auto")Y.GOATCHAIN_TOOL_APPROVALS="auto";if(!Y.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="all")Y.GOATCHAIN_TOOL_APPROVALS="all";if(!Y.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="manual")Y.GOATCHAIN_TOOL_APPROVALS="auto";if(!Y.GOATCHAIN_OPENAI_BASE_URL&&a0(G.baseUrl))Y.GOATCHAIN_OPENAI_BASE_URL=String(G.baseUrl);if(!Y.OPENAI_API_KEY&&a0(G.apiKey))Y.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:K||".",env:Y,...Q?.length?{focusFiles:Q}:{}},cacheDir:J.dir,cacheFile:J.filePath,cache:_}}async function fd($){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(_),K=typeof G?.version==="string"?G.version:null;return K&&K.trim()?K.trim():null}catch{return null}}import{watch as YK}from"vue";function eJ($,U){let J=String($??"").replace(/\s+/g," ").trim();if(J.length<=U)return J;return`${J.slice(0,Math.max(0,U-1))}…`}function Zd($){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 sJ($){if(!$||typeof $!=="object")return"";let U=String($.role??"");if(U==="user")return Zd($.content);if(U==="tool")return String($.result?.output??"");if(U==="assistant"){let J=Array.isArray($.parts)?$.parts:[],_=J.filter((K)=>K?.type==="markdown").map((K)=>String(K.markdown??"")).join(`
|
|
600
600
|
`);if(_.trim())return _;let G=J.find((K)=>K?.type==="status");return G?String(G.text??""):""}return""}function Ww($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&eJ(sJ(G),999).length>0),_=J?sJ(J):"";return eJ(_||"New session",60)||"New session"}function Fw($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&eJ(sJ(G),999).length>0),_=J?sJ(J):"";return eJ(_||"New session",120)||"New session"}function Dw($){let J=[...Array.isArray($)?$:[]].reverse().find((_)=>{if(!_||typeof _!=="object"||_.role!=="user")return!1;return eJ(sJ(_),999).length>0});return eJ(J?sJ(J):"",180)}function KK($){return`${$}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function _W($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function QK($){if($==null)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map(QK).join("");if(_W($)){if(typeof $.text==="string")return String($.text);if(String($.type??"")==="image")return"[image]";try{return JSON.stringify($)}catch{return String($)}}return String($)}function Bd($){if(_W($))return $;if(typeof $==="string"){let U=$.trim();if(!U)return{};try{let J=JSON.parse(U);return _W(J)?J:{_raw:$}}catch{return{_raw:$}}}return{}}function Hw($){let U=$?.context?.messages,J=Array.isArray(U)?U:[],_=[],G=new Map;for(let K of J){let Q=String(K?.role??"");if(Q==="user"){_.push({id:KK("m"),role:"user",content:QK(K?.content)});continue}if(Q==="assistant"){let Y=[],X=QK(K?.content);if(X)Y.push({type:"markdown",markdown:X});let V=Array.isArray(K?.tool_calls)?K.tool_calls:[];for(let N of V){let B=String(N?.id??"").trim(),Z=String(N?.function?.name??"tool"),F=Bd(N?.function?.arguments);if(!B)continue;let W={id:B,name:Z,arguments:F};Y.push({type:"tool_call",call:W}),G.set(B,_.length)}_.push({id:KK("m"),role:"assistant",parts:[{type:"status",text:""},...Y]});continue}if(Q==="tool"){let Y=String(K?.tool_call_id??"").trim(),X=QK(K?.content),V=K?.isError?"error":"success",N={id:Y||KK("tool"),output:X,status:V};_.push({id:KK("m"),role:"tool",result:N});let B=Y?G.get(Y):void 0;if(B==null)continue;let Z=_[B];if(!Z||Z.role!=="assistant")continue;_[B]={...Z,parts:[...Z.parts,{type:"tool_result",result:N}]};continue}}return _}function Ow($){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((Q)=>Q.type==="markdown").map((Q)=>String(Q.markdown??"")).join(""),G=J.parts.flatMap((Q)=>Q.type==="tool_call"?[Q.call]:[]),K=G.length?G.map((Q)=>({id:Q.id,type:"function",function:{name:Q.name,arguments:Q.arguments}})):void 0;U.push({role:"assistant",content:_,...K?{tool_calls:K}:{}});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 qw($){return String($?.id??"").trim()}function Wd($){return Number($?.state?.updatedAt??$?.state?.lastActiveAt??0)||0}function Ew($){let U=$?.context?.messages;return Array.isArray(U)?U:[]}function Fd($){let U=Number($?.context?.messageCount??0);if(Number.isFinite(U)&&U>=0)return U;return Ew($).length}function Dd($){let U=$?.stats?.usage;return U&&typeof U==="object"?U:null}function jw($){let U=qw($);if(!U)return null;let J=Wd($),_=Ew($),G=a0($?.state?.title)??Ww(_),K=Fw(_),Q=a0($?.context?.lastMessagePreview)??Dw(_),Y=Fd($);return{id:U,updatedAt:J,title:G,summary:K,messageCount:Y,lastMessage:Q}}function $8($,U){let J=qw(U);if(J)$.state.sessionId=J;let _=Hw(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=Dd(U);if(G){let K=Number(G.promptTokens),Q=Number(G.completionTokens);if(Number.isFinite(K))$.state.usage.prompt_tokens=K;if(Number.isFinite(Q))$.state.usage.completion_tokens=Q;if(Number.isFinite(K)&&Number.isFinite(Q))$.state.usage.total_tokens=K+Q;else{let Y=Number(G.totalTokens);if(Number.isFinite(Y))$.state.usage.total_tokens=Y}}}function Mw($){let U=Array.isArray($)?$:[];return Ow(U)}function Lw($){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:E2(U?.state?.config?.context_window),temperature:E2(U?.state?.config?.temperature),topP:E2(U?.state?.config?.top_p),baseUrl:_,apiKey:G,toolApprovals:U?.state?.approval?.mode==="all"?"all":"auto"},lastSessionId:a0(U?.state?.sessionId)||$.prev.lastSessionId}}function Pw($,U){let J=null,_=!1,G=!1,K=async()=>{if(_){G=!0;return}_=!0,G=!1;try{await $()}finally{if(_=!1,G)Q()}},Q=()=>{if(G=!0,J)clearTimeout(J);J=setTimeout(K,Math.max(0,U||0))};return{schedule:Q}}function Hd($){return String($?.id??"").trim()}function ww($){let U=null,J=$.sessionsBackend??null;return{sessions:J?{async list(){return(await J.list()).map(jw).filter(Boolean)},async use(K){let Q=String(K??"").trim();if(!Q||!U)return;if(String(U.state.sessionId??"")===Q)return;let Y=await J.get(Q);if(!Y)return;$8(U,Y)},async createNew(){if(!U)return;let K=await J.create();if(!K)return;$8(U,K)},async delete(K){let Q=String(K??"").trim();if(!Q)return;if(await J.destroy(Q),U&&String(U.state.sessionId??"")===Q){let Y=await J.create();if(Y)$8(U,Y)}},async fork(K){if(!U)return;let Q=Array.isArray(K?.messages)?K.messages:[];if(typeof J.createWithMessages!=="function"){let X=await J.create();if(X)U.state.sessionId=Hd(X);U.state.messages.splice(0,U.state.messages.length,...Q),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 Y=await J.createWithMessages(Mw(Q));if(!Y)return;$8(U,Y)}}:void 0,onStoreCreated:(K)=>{if(U=K,J){let Y=String(K.state.sessionId??"").trim();if(Y)J.get(Y).then((X)=>{if(X&&U)$8(U,X)}).catch(()=>{})}let Q=Pw(async()=>{try{let Y=Lw({prev:$.cache,store:K});await Zw($.cacheFile,Y)}catch(Y){console.warn("[goatchain] Failed to persist cache:",Y)}},300);YK(()=>K.state.sessionId,Q.schedule),YK(()=>K.state.config,Q.schedule,{deep:!0}),YK(()=>K.state.context,Q.schedule,{deep:!0}),YK(()=>K.state.approval.mode,Q.schedule),Q.schedule()}}}async function KW($){let U=$.sessionsBackend,J=a0($.envSessionId);if(U&&J){if(await U.get(J))return J}if(U){let _=await U.create();return a0(_?.id)}return J}function Rw(){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 kw from"node:path";function Od($){return kw.join($,"state")}function qd($){$.env.GOATCHAIN_STATE_DIR=$.stateDir,$.context.env.GOATCHAIN_STATE_DIR=$.stateDir}async function QW($){let{context:U,cacheDir:J,cacheFile:_,cache:G}=await Bw({cwd:$.cwd,env:$.env}),K=Od(J);qd({env:$.env,context:U,stateDir:K});let Q=Nw({context:U,processEnv:$.env,stateDir:K}),Y=Q?.__sessions??null,X=await KW({sessionsBackend:Y,envSessionId:$.env.GOATCHAIN_SESSION_ID});if(X)$.env.GOATCHAIN_SESSION_ID=X,U.env.GOATCHAIN_SESSION_ID=X;let{sessions:V,onStoreCreated:N}=ww({cacheFile:_,cache:G,sessionsBackend:Y});return{toolRunner:Rw(),context:U,agent:Q,onStoreCreated:N,sessions:V}}import{nextTick as CK}from"vue";var Aw=($=0)=>(U)=>`\x1B[${U+$}m`,Sw=($=0)=>(U)=>`\x1B[${38+$};5;${U}m`,zw=($=0)=>(U,J,_)=>`\x1B[${38+$};2;${U};${J};${_}m`,A0={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]}},_5$=Object.keys(A0.modifier),Ed=Object.keys(A0.color),jd=Object.keys(A0.bgColor),K5$=[...Ed,...jd];function Md(){let $=new Map;for(let[U,J]of Object.entries(A0)){for(let[_,G]of Object.entries(J))A0[_]={open:`\x1B[${G[0]}m`,close:`\x1B[${G[1]}m`},J[_]=A0[_],$.set(G[0],G[1]);Object.defineProperty(A0,U,{value:J,enumerable:!1})}return Object.defineProperty(A0,"codes",{value:$,enumerable:!1}),A0.color.close="\x1B[39m",A0.bgColor.close="\x1B[49m",A0.color.ansi=Aw(),A0.color.ansi256=Sw(),A0.color.ansi16m=zw(),A0.bgColor.ansi=Aw(10),A0.bgColor.ansi256=Sw(10),A0.bgColor.ansi16m=zw(10),Object.defineProperties(A0,{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((K)=>K+K).join("");let G=Number.parseInt(_,16);return[G>>16&255,G>>8&255,G&255]},enumerable:!1},hexToAnsi256:{value:(U)=>A0.rgbToAnsi256(...A0.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 Y=U%36;J=Math.floor(U/36)/5,_=Math.floor(Y/6)/5,G=Y%6/5}let K=Math.max(J,_,G)*2;if(K===0)return 30;let Q=30+(Math.round(G)<<2|Math.round(_)<<1|Math.round(J));if(K===2)Q+=60;return Q},enumerable:!1},rgbToAnsi:{value:(U,J,_)=>A0.ansi256ToAnsi(A0.rgbToAnsi256(U,J,_)),enumerable:!1},hexToAnsi:{value:(U)=>A0.ansi256ToAnsi(A0.hexToAnsi256(U)),enumerable:!1}}),A0}var Ld=Md(),J6=Ld;function U8($){return $.replace(/\r\n/g,`
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goatchain-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.4-beta.
|
|
4
|
+
"version": "0.0.4-beta.3",
|
|
5
5
|
"description": "GoatChain CLI built on @simon_he/vue-tui",
|
|
6
6
|
"bin": {
|
|
7
7
|
"goatchain": "./cli.mjs"
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"fix-package": "bun run fix-package.mjs",
|
|
41
41
|
"restore-package": "bun run restore-package.mjs",
|
|
42
42
|
"release": "bumpp --commit --no-tag --no-push && bun run build && bun publish",
|
|
43
|
-
"release:npm": "bumpp --commit --no-tag --no-push &&
|
|
43
|
+
"release:npm": "bumpp --commit --no-tag --no-push && bun run build:npm && bun publish"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"semver": "^7.7.3",
|