goatchain-cli 0.0.4-beta.7 → 0.0.4-beta.9
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/cli.mjs +1 -1
- package/dist/cli.mjs +2 -2
- package/package.json +11 -10
package/cli.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
await import('./dist/cli.mjs')
|
package/dist/cli.mjs
CHANGED
|
@@ -28,7 +28,7 @@ import{createRequire as Nz}from"node:module";var Yz=Object.create;var{getPrototy
|
|
|
28
28
|
`);let _;while((_=dl.exec(J))!=null){let G=_[1],Q=_[2]||"";Q=Q.trim();let Y=Q[0];if(Q=Q.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),Y==='"')Q=Q.replace(/\\n/g,`
|
|
29
29
|
`),Q=Q.replace(/\\r/g,"\r");U[G]=Q}return U}function nl($){$=$||{};let U=Gw($);$.path=U;let J=Y6.configDotenv($);if(!J.parsed){let Y=Error(`MISSING_DATA: Cannot parse ${U} for an unknown reason`);throw Y.code="MISSING_DATA",Y}let _=Jw($).split(","),G=_.length,Q;for(let Y=0;Y<G;Y++)try{let X=_[Y].trim(),V=pl(J,X);Q=Y6.decrypt(V.ciphertext,V.key);break}catch(X){if(Y+1>=G)throw X}return Y6.parse(Q)}function rl($){console.error(`[dotenv@${QF}][WARN] ${$}`)}function bG($){console.log(`[dotenv@${QF}][DEBUG] ${$}`)}function Uw($){console.log(`[dotenv@${QF}] ${$}`)}function Jw($){if($&&$.DOTENV_KEY&&$.DOTENV_KEY.length>0)return $.DOTENV_KEY;if(process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0)return process.env.DOTENV_KEY;return""}function pl($,U){let J;try{J=new URL(U)}catch(X){if(X.code==="ERR_INVALID_URL"){let V=Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw V.code="INVALID_DOTENV_KEY",V}throw X}let _=J.password;if(!_){let X=Error("INVALID_DOTENV_KEY: Missing key part");throw X.code="INVALID_DOTENV_KEY",X}let G=J.searchParams.get("environment");if(!G){let X=Error("INVALID_DOTENV_KEY: Missing environment part");throw X.code="INVALID_DOTENV_KEY",X}let Q=`DOTENV_VAULT_${G.toUpperCase()}`,Y=$.parsed[Q];if(!Y){let X=Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${Q} in your .env.vault file.`);throw X.code="NOT_FOUND_DOTENV_ENVIRONMENT",X}return{ciphertext:Y,key:_}}function Gw($){let U=null;if($&&$.path&&$.path.length>0)if(Array.isArray($.path)){for(let J of $.path)if(_F.existsSync(J))U=J.endsWith(".vault")?J:`${J}.vault`}else U=$.path.endsWith(".vault")?$.path:`${$.path}.vault`;else U=NQ.resolve(process.cwd(),".env.vault");if(_F.existsSync(U))return U;return null}function $w($){return $[0]==="~"?NQ.join(ul.homedir(),$.slice(1)):$}function ol($){let U=U8(process.env.DOTENV_CONFIG_DEBUG||$&&$.debug),J=U8(process.env.DOTENV_CONFIG_QUIET||$&&$.quiet);if(U||!J)Uw("Loading env from encrypted .env.vault");let _=Y6._parseVault($),G=process.env;if($&&$.processEnv!=null)G=$.processEnv;return Y6.populate(G,_,$),{parsed:_}}function al($){let U=NQ.resolve(process.cwd(),".env"),J="utf8",_=process.env;if($&&$.processEnv!=null)_=$.processEnv;let G=U8(_.DOTENV_CONFIG_DEBUG||$&&$.debug),Q=U8(_.DOTENV_CONFIG_QUIET||$&&$.quiet);if($&&$.encoding)J=$.encoding;else if(G)bG("No encoding is specified. UTF-8 is used by default");let Y=[U];if($&&$.path)if(!Array.isArray($.path))Y=[$w($.path)];else{Y=[];for(let N of $.path)Y.push($w(N))}let X,V={};for(let N of Y)try{let B=Y6.parse(_F.readFileSync(N,{encoding:J}));Y6.populate(V,B,$)}catch(B){if(G)bG(`Failed to load ${N} ${B.message}`);X=B}let K=Y6.populate(_,V,$);if(G=U8(_.DOTENV_CONFIG_DEBUG||G),Q=U8(_.DOTENV_CONFIG_QUIET||Q),G||!Q){let N=Object.keys(K).length,B=[];for(let W of Y)try{let H=NQ.relative(process.cwd(),W);B.push(H)}catch(H){if(G)bG(`Failed to load ${W} ${H.message}`);X=H}Uw(`injecting env (${N}) from ${B.join(",")} ${ll(`-- tip: ${ml()}`)}`)}if(X)return{parsed:V,error:X};else return{parsed:V}}function tl($){if(Jw($).length===0)return Y6.configDotenv($);let U=Gw($);if(!U)return rl(`You set DOTENV_KEY but you are missing a .env.vault file at ${U}. Did you forget to build it?`),Y6.configDotenv($);return Y6._configVault($)}function el($,U){let J=Buffer.from(U.slice(-64),"hex"),_=Buffer.from($,"base64"),G=_.subarray(0,12),Q=_.subarray(-16);_=_.subarray(12,-16);try{let Y=xl.createDecipheriv("aes-256-gcm",J,G);return Y.setAuthTag(Q),`${Y.update(_)}${Y.final()}`}catch(Y){let X=Y instanceof RangeError,V=Y.message==="Invalid key length",K=Y.message==="Unsupported state or unable to authenticate data";if(X||V){let N=Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw N.code="INVALID_DOTENV_KEY",N}else if(K){let N=Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw N.code="DECRYPTION_FAILED",N}else throw Y}}function sl($,U,J={}){let _=Boolean(J&&J.debug),G=Boolean(J&&J.override),Q={};if(typeof U!=="object"){let Y=Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw Y.code="OBJECT_REQUIRED",Y}for(let Y of Object.keys(U))if(Object.prototype.hasOwnProperty.call($,Y)){if(G===!0)$[Y]=U[Y],Q[Y]=U[Y];if(_)if(G===!0)bG(`"${Y}" is already defined and WAS overwritten`);else bG(`"${Y}" is already defined and was NOT overwritten`)}else $[Y]=U[Y],Q[Y]=U[Y];return Q}var Y6={configDotenv:al,_configVault:ol,_parseVault:nl,config:tl,decrypt:el,parse:il,populate:sl};J5$.configDotenv=Y6.configDotenv;J5$._configVault=Y6._configVault;J5$._parseVault=Y6._parseVault;J5$.config=Y6.config;J5$.decrypt=Y6.decrypt;J5$.parse=Y6.parse;J5$.populate=Y6.populate;M1.exports=Y6});var Yw=D$((G5$,Qw)=>{var qU={};if(process.env.DOTENV_CONFIG_ENCODING!=null)qU.encoding=process.env.DOTENV_CONFIG_ENCODING;if(process.env.DOTENV_CONFIG_PATH!=null)qU.path=process.env.DOTENV_CONFIG_PATH;if(process.env.DOTENV_CONFIG_QUIET!=null)qU.quiet=process.env.DOTENV_CONFIG_QUIET;if(process.env.DOTENV_CONFIG_DEBUG!=null)qU.debug=process.env.DOTENV_CONFIG_DEBUG;if(process.env.DOTENV_CONFIG_OVERRIDE!=null)qU.override=process.env.DOTENV_CONFIG_OVERRIDE;if(process.env.DOTENV_CONFIG_DOTENV_KEY!=null)qU.DOTENV_KEY=process.env.DOTENV_CONFIG_DOTENV_KEY;Qw.exports=qU});var Vw=D$((_5$,Xw)=>{var Xd=/^dotenv_config_(encoding|path|quiet|debug|override|DOTENV_KEY)=(.+)$/;Xw.exports=function(U){let J=U.reduce(function(_,G){let Q=G.match(Xd);if(Q)_[Q[1]]=Q[2];return _},{});if(!("quiet"in J))J.quiet="true";return J}});var Kw=D$(()=>{(function(){_w().config(Object.assign({},Yw(),Vw()(process.argv)))})()});function zH($){return $.includes("-h")||$.includes("--help")}function SH(){return"Usage: vue-terminal run [--app goatchain|basic] [--route name] [--approvals auto|all] [--auto-approve|-y] [--cols N --rows N] [--record file] [--replay file] [--snapshot file] [--no-mouse] [--no-alt-screen] (default: --app goatchain --route home)"}function vH($,U){let J=U?.stdout,_=Number.isFinite(J?.columns)?Number(J?.columns):80,G=Number.isFinite(J?.rows)?Number(J?.rows):24,Q=_,Y=G,X=!1,V=!1,K="goatchain",N="home",B=null,W=null,H=null,F=!0,j=!0,P=null;for(let w=0;w<$.length;w++){let q=$[w];if(q==="--cols")Q=Number.parseInt($[++w]??"",10),X=!0;else if(q==="--rows")Y=Number.parseInt($[++w]??"",10),V=!0;else if(q==="--app"||q==="--example")K=String($[++w]??K);else if(q==="--route"||q==="--initial-route")N=String($[++w]??N);else if(q==="--approvals"||q==="--approval"){let S=String($[++w]??"").trim().toLowerCase();if(S==="auto")P="auto";else if(S==="all"||S==="on"||S==="yes"||S==="true"||S==="1")P="all"}else if(q==="--auto-approve"||q==="--yes"||q==="-y")P="all";else if(q==="--record")B=$[++w]??null;else if(q==="--replay")W=$[++w]??null;else if(q==="--snapshot")H=$[++w]??null;else if(q==="--no-mouse")F=!1;else if(q==="--no-alt-screen")j=!1}return Q=Math.max(10,Math.floor(Q||_)),Y=Math.max(5,Math.floor(Y||G)),{cols:Q,rows:Y,sizeLocked:X||V,app:K,initialRoute:N,recordPath:B,replayPath:W,snapshotPath:H,enableMouse:F,altScreen:j,approvals:P}}function TH($){let J=["# GoatChain error","","```text",$ instanceof Error?$.stack||$.message:String($),"```"].join(`
|
|
30
30
|
`);return{async*receiveMessage(_){yield{role:"assistant",content:J,metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}}}import{randomUUID as jd}from"node:crypto";async function*IH($){try{let U=$.toolContext?.approval?.decisions;if(U&&typeof $.session?.receiveWithApprovals==="function")yield*$.convertEventStream($.session.receiveWithApprovals(U,{toolContext:$.toolContext,...$.signal?{signal:$.signal}:null}));else yield*$.convertEventStream($.session.receive({toolContext:$.toolContext,...$.signal?{signal:$.signal}:null}))}catch(U){yield{role:"assistant",content:["# GoatChain error","","```text","Unable to resume after approval (no pending checkpoint found). This can happen if the session was recreated (e.g. after changing settings) before the approval was resolved. Please retry the last message.","",`debug: ${U instanceof Error?U.stack||U.message:String(U)}`,"```"].join(`
|
|
31
|
-
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}}function Zz($,U){if(!$||typeof $!=="object")return $;let J={};for(let[Y,X]of Object.entries(U))if(typeof X==="number"&&Number.isFinite(X))J[Y]=X;if(Object.keys(J).length===0)return $;let _=(Y)=>Y!=null&&typeof Y==="object"&&!Array.isArray(Y),G=(Y)=>{if(!_(Y))return;for(let[X,V]of Object.entries(J))if(!(X in Y))Y[X]=V},Q=(Y)=>{if(typeof Y!=="function")return Y;return(...X)=>{for(let V of X){if(!_(V))continue;if("body"in V&&_(V.body)){G(V.body);break}if("messages"in V||"model"in V||"input"in V||"prompt"in V){G(V);break}}return Y(...X)}};for(let Y of["request","createChatCompletion","chat","complete","responses","completions"])if(typeof $[Y]==="function")$[Y]=Q($[Y].bind($));return $}function CH($,U){let J=$({defaultModelId:U.modelId,baseUrl:U.baseUrl,apiKey:U.apiKey});return Zz(J,{temperature:U.temperature,top_p:U.topP}),J}function bH($){return{async list(){let U=await $.ensureSharedStateStore();if(!U)return[];let J=await $.sessionStorageKey(),_=await(U.listSessions?.()??[]),G=[];for(let Q of _)try{let Y=await U.load(Q,J);if(Y)G.push(Y)}catch{}return G},async get(U){let J=await $.ensureSharedStateStore();if(!J)return null;let _=String(U??"").trim();if(!_)return null;let G=await $.sessionStorageKey();try{return await J.load(_,G)??null}catch{return null}},async create(){let U=await $.ensureSharedStateStore();if(!U)return null;let J=await $.sessionStorageKey(),_=Date.now(),G=$.createId(),Q=$.createEmptySessionSnapshot(G,_);return await U.save(G,J,Q),Q},async destroy(U){let J=await $.ensureSharedStateStore();if(!J)return;let _=String(U??"").trim();if(!_)return;await J.deleteSession(_)},async createWithMessages(U){let J=await $.ensureSharedStateStore();if(!J)return null;let _=await $.sessionStorageKey(),G=Date.now(),Q=$.createId(),Y=$.createEmptySessionSnapshot(Q,G);return $.applyMessagesToSnapshot(Y,Array.isArray(U)?U:[],G),await J.save(Q,_,Y),Y}}}var Wz=["planMode","planModeMiddleware","parallelMode","parallelSubagentMiddleware","blockedTools","commitProcessed","_pendingUserInput"];function k3($){let U={};for(let[J,_]of Object.entries($))if(!Wz.includes(J))U[J]=_;return U}var Bz=1;function T6($,U){let J=U?.phase;if(!J)if(!$.shouldContinue)J="completed";else if($.pendingToolCalls.length>0)J="tool_execution";else J="llm_call";let _=U?.status;if(!_)if(J==="completed")_=`Completed: ${$.stopReason??"unknown"}`;else if(J==="tool_execution")_=`Executing tools: ${$.pendingToolCalls.map((Q)=>Q.toolCall.function.name).join(", ")}`;else if(J==="approval_pending")_="Waiting for user approval";else _=`Iteration ${$.iteration}: Calling LLM`;return{schemaVersion:Bz,sessionId:$.sessionId,agentName:U?.agentName,iteration:$.iteration,phase:J,status:_,modelConfig:U?.modelConfig,requestParams:U?.requestParams,messages:[...$.messages],pendingToolCalls:$.pendingToolCalls.map((G)=>({toolCall:{...G.toolCall},result:G.result,isError:G.isError})),currentResponse:$.currentResponse,currentThinking:$.currentThinking,shouldContinue:$.shouldContinue,stopReason:$.stopReason,lastModelStopReason:$.lastModelStopReason,usage:{...$.usage},metadata:k3($.metadata),savedAt:Date.now()}}function S8($){let U=$.schemaVersion??1;if(U!==1)throw Error(`Unsupported checkpoint schemaVersion: ${U}. Please migrate checkpoints or upgrade GoatChain.`);return{sessionId:$.sessionId,iteration:$.iteration,messages:[...$.messages],pendingToolCalls:$.pendingToolCalls.map((J)=>({toolCall:{...J.toolCall},result:J.result,isError:J.isError})),currentResponse:$.currentResponse,currentThinking:$.currentThinking,shouldContinue:$.shouldContinue,stopReason:$.stopReason,lastModelStopReason:$.lastModelStopReason,usage:{...$.usage},metadata:{...$.metadata}}}var __dirname="/Users/Simon/Github/GoatChain/node_modules/.
|
|
31
|
+
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}}function Zz($,U){if(!$||typeof $!=="object")return $;let J={};for(let[Y,X]of Object.entries(U))if(typeof X==="number"&&Number.isFinite(X))J[Y]=X;if(Object.keys(J).length===0)return $;let _=(Y)=>Y!=null&&typeof Y==="object"&&!Array.isArray(Y),G=(Y)=>{if(!_(Y))return;for(let[X,V]of Object.entries(J))if(!(X in Y))Y[X]=V},Q=(Y)=>{if(typeof Y!=="function")return Y;return(...X)=>{for(let V of X){if(!_(V))continue;if("body"in V&&_(V.body)){G(V.body);break}if("messages"in V||"model"in V||"input"in V||"prompt"in V){G(V);break}}return Y(...X)}};for(let Y of["request","createChatCompletion","chat","complete","responses","completions"])if(typeof $[Y]==="function")$[Y]=Q($[Y].bind($));return $}function CH($,U){let J=$({defaultModelId:U.modelId,baseUrl:U.baseUrl,apiKey:U.apiKey});return Zz(J,{temperature:U.temperature,top_p:U.topP}),J}function bH($){return{async list(){let U=await $.ensureSharedStateStore();if(!U)return[];let J=await $.sessionStorageKey(),_=await(U.listSessions?.()??[]),G=[];for(let Q of _)try{let Y=await U.load(Q,J);if(Y)G.push(Y)}catch{}return G},async get(U){let J=await $.ensureSharedStateStore();if(!J)return null;let _=String(U??"").trim();if(!_)return null;let G=await $.sessionStorageKey();try{return await J.load(_,G)??null}catch{return null}},async create(){let U=await $.ensureSharedStateStore();if(!U)return null;let J=await $.sessionStorageKey(),_=Date.now(),G=$.createId(),Q=$.createEmptySessionSnapshot(G,_);return await U.save(G,J,Q),Q},async destroy(U){let J=await $.ensureSharedStateStore();if(!J)return;let _=String(U??"").trim();if(!_)return;await J.deleteSession(_)},async createWithMessages(U){let J=await $.ensureSharedStateStore();if(!J)return null;let _=await $.sessionStorageKey(),G=Date.now(),Q=$.createId(),Y=$.createEmptySessionSnapshot(Q,G);return $.applyMessagesToSnapshot(Y,Array.isArray(U)?U:[],G),await J.save(Q,_,Y),Y}}}var Wz=["planMode","planModeMiddleware","parallelMode","parallelSubagentMiddleware","blockedTools","commitProcessed","_pendingUserInput"];function k3($){let U={};for(let[J,_]of Object.entries($))if(!Wz.includes(J))U[J]=_;return U}var Bz=1;function T6($,U){let J=U?.phase;if(!J)if(!$.shouldContinue)J="completed";else if($.pendingToolCalls.length>0)J="tool_execution";else J="llm_call";let _=U?.status;if(!_)if(J==="completed")_=`Completed: ${$.stopReason??"unknown"}`;else if(J==="tool_execution")_=`Executing tools: ${$.pendingToolCalls.map((Q)=>Q.toolCall.function.name).join(", ")}`;else if(J==="approval_pending")_="Waiting for user approval";else _=`Iteration ${$.iteration}: Calling LLM`;return{schemaVersion:Bz,sessionId:$.sessionId,agentName:U?.agentName,iteration:$.iteration,phase:J,status:_,modelConfig:U?.modelConfig,requestParams:U?.requestParams,messages:[...$.messages],pendingToolCalls:$.pendingToolCalls.map((G)=>({toolCall:{...G.toolCall},result:G.result,isError:G.isError})),currentResponse:$.currentResponse,currentThinking:$.currentThinking,shouldContinue:$.shouldContinue,stopReason:$.stopReason,lastModelStopReason:$.lastModelStopReason,usage:{...$.usage},metadata:k3($.metadata),savedAt:Date.now()}}function S8($){let U=$.schemaVersion??1;if(U!==1)throw Error(`Unsupported checkpoint schemaVersion: ${U}. Please migrate checkpoints or upgrade GoatChain.`);return{sessionId:$.sessionId,iteration:$.iteration,messages:[...$.messages],pendingToolCalls:$.pendingToolCalls.map((J)=>({toolCall:{...J.toolCall},result:J.result,isError:J.isError})),currentResponse:$.currentResponse,currentThinking:$.currentThinking,shouldContinue:$.shouldContinue,stopReason:$.stopReason,lastModelStopReason:$.lastModelStopReason,usage:{...$.usage},metadata:{...$.metadata}}}var __dirname="/Users/Simon/Github/GoatChain/node_modules/.bun/tiktoken@1.0.22/node_modules/tiktoken",hU=mH(),cH={};cH["./tiktoken_bg.js"]=hU;var xU=z$("path"),Cz=z$("fs"),lH=__dirname.split(xU.sep).reduce(($,U,J,_)=>{let G=_.slice(0,J+1).join(xU.sep)+xU.sep;if(!G.includes("node_modules"+xU.sep))$.unshift(xU.join(G,"node_modules","tiktoken","","./tiktoken_bg.wasm"));return $},[]);lH.unshift(xU.join(__dirname,"./tiktoken_bg.wasm"));var S3=null;for(let $ of lH)try{S3=Cz.readFileSync($);break}catch{}if(S3==null)throw Error("Missing tiktoken_bg.wasm");var bz=new WebAssembly.Module(S3),yz=new WebAssembly.Instance(bz,cH);hU.__wbg_set_wasm(yz.exports);var{get_encoding:v3,encoding_for_model:T3,get_encoding_name_for_model:gz,Tiktoken:uz}=hU;var xz="gpt-4o";function X1($,U){if(!$)return 0;let J=null;try{return J=T3(U??xz),J.encode($).length}catch(_){console.error("Error encoding text:",_);try{return J=v3("cl100k_base"),J.encode($).length}catch{return Math.ceil($.length/4)}}finally{J?.free()}}function dH($,U){if(typeof $==="string")return X1($,U);if(Array.isArray($))return $.reduce((J,_)=>{if(typeof _==="object"&&_!==null&&"text"in _)return J+X1(String(_.text),U);return J},0);return 0}function iH($,U){try{let J=JSON.stringify($);return X1(J,U)}catch{return hz($,U)}}function hz($,U){let _=4;if(_+=dH($.content,U),$.role==="assistant"&&$.tool_calls)for(let G of $.tool_calls){_+=X1(G.function.name,U);let Q=typeof G.function.arguments==="string"?G.function.arguments:JSON.stringify(G.function.arguments);_+=X1(Q,U),_+=10}if($.role==="tool"&&$.name)_+=X1($.name,U);if($.role==="assistant"&&$.reasoning_content)_+=X1($.reasoning_content,U);return _}function C8($,U){if(!$||$.length===0)return 0;try{let J=JSON.stringify($);return X1(J,U)}catch{return $.reduce((_,G)=>_+iH(G,U),3)}}var F6={CHECKPOINT:"checkpoint",COMPRESSION:"compression",SESSION:"session",COMPRESSION_SNAPSHOT:"compression-snapshot"};function b8($,U,J="first"){if(J==="first"){for(let _=0;_<$.length;_++)if($[_]?.role===U)return{index:_,message:$[_]}}else for(let _=$.length-1;_>=0;_--)if($[_]?.role===U)return{index:_,message:$[_]};return null}function y8($,U){if(U.length===0)return $;let J=[...$.messages];for(let _ of U)if(_.index>=0&&_.index<J.length)J[_.index]=_.message;return{...$,messages:J}}function I3($,U,J="[Previous conversation context]"){let _=[...$],G=_.findIndex((W)=>W.role==="system");if(G===-1)return _;let Q=_[G],Y=Q.content;if(!U||U.trim().length===0)return _;let V={type:"text",text:`${J}
|
|
32
32
|
|
|
33
33
|
${U}`},N=[...mz(Y,J),V],B={...Q,content:N};return _[G]=B,_}function mz($,U){let J=(_)=>{let G=_.indexOf(U);if(G>=0)return _.slice(0,G).trimEnd();return _};if(typeof $==="string"){let _=J($);return _.trim().length>0?[{type:"text",text:_}]:[]}if(Array.isArray($)){let _=[];for(let G of $){if(typeof G==="string"){let Q=J(G);if(Q.trim().length>0)_.push({type:"text",text:Q});continue}if(G&&typeof G==="object"&&"type"in G){let Q=G;if(Q.type==="text"){let Y=typeof Q.text==="string"?Q.text:"",X=J(Y);if(X.trim().length>0)_.push({...Q,text:X});continue}_.push(Q)}}return _}if($&&typeof $==="object"&&"type"in $){let _=$;if(_.type==="text"){let G=typeof _.text==="string"?_.text:"",Q=J(G);return Q.trim().length>0?[{..._,text:Q}]:[]}return[_]}return[]}function C3($,U){let J=[...$],_=-1;for(let K=J.length-1;K>=0;K--)if(J[K].role==="user"){_=K;break}if(_===-1){let K={role:"user",content:U};return[...J,K]}let G=J[_],Q=G.content,Y,X={type:"text",text:U};if(typeof Q==="string")Y=[{type:"text",text:Q},X];else if(Array.isArray(Q))Y=[...Q,X];else Y=[Q,X];let V={...G,content:Y};return J[_]=V,J}var nH="[Old tool result content cleared]",cz=`
|
|
34
34
|
Summarize the conversation context for future continuation.
|
|
@@ -595,7 +595,7 @@ assistant: Clients are marked as failed in the \`connectToServer\` function in s
|
|
|
595
595
|
</example>`,model:J,tools:U,stateStore:_});K.use(X),K.use(B5({maxTokens:128000,protectedTurns:2,model:J,stateStore:_})),X0("Agent initialized with tools:",Array.from(U.list().map((P)=>P.name))),X0("Agent initialized with middlewares:",K.middlewareNames.join(", "));let N=new w7(K,{debug:VF,maxIterations:1e4}),B=new Ow(N),W=Vd.toWeb(f6.stdin),H=Kd.toWeb(f6.stdout),F=aL(H,W);X0("Creating AgentSideConnection...");let j=new JF((P)=>{return X0("Agent connection established"),B.setConnection(P),B},F);X0("ACP Server ready and listening on stdio"),await j.closed,X0("Connection closed"),N.destroy()}var qd=import.meta.url===`file://${f6.argv[1]}`||f6.argv[1]?.endsWith("acp-server.ts")||f6.argv[1]?.endsWith("acp-server.js");if(qd)fw().catch(($)=>{console.error("[ACP Server] Fatal error:",$),f6.exit(1)});function Md(){let $=globalThis.process;return!!$&&typeof $?.versions?.node==="string"}function KF(){return globalThis.process?.env??{}}var Dw="plan-mode";function E1($){return String($??"").trim()||void 0}function qw($){let U=String($??"").trim();if(!U)return;let J=Number.parseFloat(U);return Number.isFinite(J)?J:void 0}function Ed($){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 Pd($,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 Ld($){return{id:String($?.id??""),type:"function",function:{name:String($?.function?.name??""),arguments:$?.function?.arguments}}}function wd($){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 NF($){if(!$)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map((U)=>String(U?.text??"")).join("");return String($)}function ZF($){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 jw($){if(!Md())throw Error("GoatChain embedded agent is Node-only");let U=$.debug===!0,J=$.cliTools!==!1,_=$.planMode===!0,G=$.subagents===!0,Q=E1($.stateDir||KF().GOATCHAIN_STATE_DIR||KF().GOATCHAIN_STATE_DIR),Y=null,X=_?"plan":"agent",V=null,K=null,N=null,B=null;function W(f,A){let T=f.filter((b)=>b.role!=="system"),z=(()=>{for(let b=T.length-1;b>=0;b--)if(T[b]?.role==="user")return b;return-1})(),R=String(A??"").trim(),I=z===T.length-1&&R.length>0,y=[];for(let b=0;b<T.length;b++){if(I&&b===z)continue;let c=T[b];if(!c)continue;if(c.role==="user")y.push({role:"user",content:NF(c.content)});else if(c.role==="assistant"){let e={role:"assistant",content:NF(c.content)};if(Array.isArray(c.tool_calls)&&c.tool_calls.length)e.tool_calls=c.tool_calls;y.push(e)}else if(c.role==="tool")y.push({role:"tool",tool_call_id:String(c.tool_call_id??""),content:NF(c.content),...c.metadata?.error===!0?{isError:!0}:{}})}return y}function H(f,A,T){try{if(!f||!Array.isArray(f.messages))return;let z=W(A,T);if(z.length===0)return;if(f.messages.length>=z.length)return;f.messages=z}catch{}}function F(f){let A=f?.env;if(!A||typeof A!=="object")return;let T=globalThis.process;if(!T?.env)return;for(let[z,R]of Object.entries(A)){let I=String(z??"").trim();if(!I)continue;let y=R==null?"":String(R);if(!y)delete T.env[I];else T.env[I]=y}}let j=new Map;async function P(){if(Y)return Y;if(Q&&typeof p1==="function")try{return Y=new p1({dir:Q,deleteOnComplete:!1}),Y}catch(f){if(U)console.warn("[goatchain-node] Failed to init FileStateStore:",f);Y=null}if(!Y&&typeof o1==="function")try{Y=new o1({deleteOnComplete:!1})}catch(f){if(U)console.warn("[goatchain-node] Failed to init InMemoryStateStore:",f);Y=null}return Y}function w(f,A){return{id:f,createdAt:A,state:{status:"active",updatedAt:A,lastActiveAt:A},context:{messages:[],messageCount:0,toolCallCount:0},stats:{usage:{promptTokens:0,completionTokens:0,totalTokens:0},responseCount:0}}}function q(f){if(!Array.isArray(f)||f.length===0)return;for(let A=f.length-1;A>=0;A--){let T=f[A],z=String(T?.role??"");if(z!=="user"&&z!=="assistant"&&z!=="system"&&z!=="tool")continue;let R=T?.content;if(typeof R==="string"){let I=R.replace(/\s+/g," ").trim();if(I)return I.slice(0,200)}if(Array.isArray(R)){let I=R.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 S(){let f=F6?.SESSION;return typeof f==="string"&&f.trim()?f:"session"}function v(){let f=KF();return{modelId:String(f.GOATCHAIN_MODEL||$.modelId),baseUrl:E1(f.GOATCHAIN_OPENAI_BASE_URL||f.OPENAI_BASE_URL||$.baseUrl),apiKey:E1(f.OPENAI_API_KEY||$.apiKey),temperature:qw(f.GOATCHAIN_TEMPERATURE),topP:qw(f.GOATCHAIN_TOP_P)}}function O(f){return JSON.stringify({modelId:f.modelId,baseUrl:f.baseUrl??null,apiKey:f.apiKey?"***":null,temperature:f.temperature??null,topP:f.topP??null})}async function D(f){await P();let A=new j1,T=(b)=>{if(!b)return;try{A.register(new b)}catch(c){if(U)console.warn("[goatchain-node] Failed to register tool:",b?.name??"(unknown)",c)}};if(T($2),T(Y2),T(X2),T(J2),T(a1),T(K2),T(N2),J)T(W2),T(U2),T(s1),T(e1),T(V2);let z=CH(HJ,f),R=cU({adapter:z}),I=[];if(typeof EJ==="function"){if(V=EJ({insertEveryIteration:!0}),X==="plan")I.push(V)}if(G&&typeof PJ==="function"&&B2)try{I.push(PJ({subagents:[B2],globalToolRegistry:A,model:R}))}catch(b){if(U)console.warn("[goatchain-node] Failed to init subagent middleware:",b)}return{agent:new u4({name:"GoatChain",systemPrompt:$.systemPrompt,model:R,tools:A,...Y?{stateStore:Y}:{},...I.length?{middleware:I}:{}}),tools:A}}async function E(){let f=v(),A=O(f);if(A!==B){let{agent:T,tools:z}=await D(f);K=T,N=z,B=A,j.clear()}}async function L(f,A){let T=E1(f),z=T?j.get(T):void 0;if(z&&A?.resumeOnly)return{sessionId:T,session:z.session};if(await E(),z)return{sessionId:T,session:z.session};let R=v(),I={...typeof R.temperature==="number"?{temperature:R.temperature}:{},...typeof R.topP==="number"?{topP:R.topP}:{}},y;if(T&&Y&&typeof K?.resumeSession==="function")try{y=await K.resumeSession(T,{requestParams:I})}catch{y=await K.createSession({sessionId:T,requestParams:I})}else if(T)y=await K.createSession({sessionId:T,requestParams:I});else y=await K.createSession({requestParams:I});let b=E1(y?.id)??E1(y?.sessionId)??T;if(!b)throw Error("GoatChain session id is missing");return j.set(b,{session:y}),{sessionId:b,session:y}}async function*k(f){for await(let A of f){if(A?.type==="subagent_event"){let R=A?.nestedEvent,I=M(R),y=E1(R?.sessionId);for(let b of I)yield{...b,metadata:{...b.metadata??{},...y?{session_id:y}:{},subagent:!0,subagentId:A?.subagentId,subagentType:A?.subagentType,taskDescription:A?.taskDescription,originalEventType:R?.type}};continue}let T=M(A),z=E1(A?.sessionId);for(let R of T)yield z?{...R,metadata:{...R.metadata??{},session_id:z}}:R}}function M(f){if(!f||typeof f!=="object")return[];switch(f.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(f.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(f.callId??""),toolName:f.toolName,argsTextDelta:f.argsTextDelta}}];case"tool_call_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_call_start",callId:String(f.callId??""),toolName:f.toolName}}];case"tool_call_end":return[{role:"assistant",content:"",tool_calls:[Ld(f.toolCall)],metadata:{originalEventType:"tool_call_end"}}];case"tool_output_start":return[{role:"assistant",content:"",metadata:{originalEventType:"tool_output_start",tool_call_id:String(f.tool_call_id??""),tool_name:String(f.toolName??f.tool_name??"")}}];case"tool_output_delta":return[{role:"assistant",content:String(f.delta??""),metadata:{originalEventType:"tool_output_delta",tool_call_id:String(f.tool_call_id??""),isStderr:f.isStderr}}];case"tool_result":let A=Boolean(f.isError||f.result?.isError===!0);return[{role:"tool",tool_call_id:String(f.tool_call_id??""),content:Array.isArray(f.result?.content)?f.result.content:Ed(f.result),metadata:{...A?{error:!0}:null,originalEventType:"tool_result",structuredContent:f.result?.structuredContent,rawResult:U?f.result:void 0}}];case"tool_skipped":return[{role:"assistant",content:`Tool skipped: ${String(f.toolName??"")} - ${String(f.reason??"")}`,metadata:{originalEventType:"tool_skipped"}}];case"tool_approval_requested":return[{role:"assistant",content:`Tool approval requested: ${String(f.toolName??"")}`,metadata:{approval_requested:!0,tool_call_id:String(f.tool_call_id??""),tool_name:String(f.toolName??""),risk_level:f.riskLevel,approval_args:f.args,originalEventType:"tool_approval_requested"}}];case"requires_action":{let T={requires_action:!0,kind:f.kind,tool_call_id:f.toolCallId,originalEventType:"requires_action"};if(f.kind==="ask_user"&&f.questions)T.questions=f.questions;return[{role:"assistant",content:`Action required: ${String(f.kind??"")}`,metadata:T}]}case"thinking_delta":return[{role:"assistant",content:String(f.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:f.usage}}];case"done":return[{role:"assistant",content:"",metadata:{done:!0,stopReason:f.stopReason,modelStopReason:f.modelStopReason,usage:f.usage,error:f.error,originalEventType:"done"}}];case"error":return[{role:"assistant",content:"",metadata:{done:!0,error:f.error??f.message??f,stopReason:"error",originalEventType:"error"}}];default:if(U)console.warn("[goatchain-node] Unhandled event:",f.type);return[]}}return{async*receiveMessage(f,A){try{F(A);let T=A?.signal,z=E1(A?.session_id),R=A?.resume===!0;if(!z&&R)throw Error("Cannot resume without a session id");let I=await L(z,{resumeOnly:R}),y=I.sessionId,b=I.session,c=Pd(b,T);try{let e=String(A?.cwd??"").trim();if(e&&N){for(let n of N?.list?.()??[])if(typeof n?.setCwd==="function")try{n.setCwd(e)}catch(i){if(U)console.warn("[goatchain-node] Failed to setCwd on tool:",n?.name,i)}}let G$=A?.toolContext,y$=wd(f),c$={};if(G$&&typeof G$==="object")Object.assign(c$,G$);if(Object.keys(y$).length>0)c$.askUser=c$.askUser??{},c$.askUser.answers={...c$.askUser.answers??{},...y$};let l$=[...f].reverse().find((n)=>n.role==="user"),O$=typeof l$?.content==="string"?l$.content:"";if(!Y)H(b,f,O$);if(R&&Object.keys(c$).length){yield*IH({session:b,toolContext:c$,signal:T,convertEventStream:k});let n=ZF(b);if(n)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:n,...y?{session_id:y}:{}}};return}if(O$.trim()){b.send(O$,Object.keys(c$).length?{toolContext:c$,...T?{signal:T}:null}:T?{signal:T}:void 0),yield*k(b.receive(T?{signal:T}:void 0));let n=ZF(b);if(n)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:n,...y?{session_id:y}:{}}};return}yield*k(b.receive(Object.keys(c$).length?{toolContext:c$,...T?{signal:T}:null}:T?{signal:T}:void 0));let h=ZF(b);if(h)yield{role:"assistant",content:"",metadata:{originalEventType:"usage_refresh",usage:h,...y?{session_id:y}:{}}}}finally{c()}}catch(T){yield{role:"assistant",content:["# GoatChain error","","```text",T instanceof Error?T.stack||T.message:String(T),"```"].join(`
|
|
597
597
|
`),metadata:{done:!0,error:!0,stopReason:"error",originalEventType:"done"}}}},__sessions:bH({ensureSharedStateStore:P,sessionStorageKey:S,createEmptySessionSnapshot:w,createId:()=>jd(),applyMessagesToSnapshot:(f,A,T)=>{f.context.messages=A,f.context.messageCount=A.length;let z=q(A);if(z)f.context.lastMessagePreview=z;f.state.updatedAt=T,f.state.lastActiveAt=T}}),setMode(f){if(X===f)return;if(X=f,!V||!K)return;let T=K.middlewares.filter((z)=>z.name!==Dw);if(K.clearMiddlewares(),f==="plan")K.use(V,Dw);for(let z of T)K.use(z.fn,z.name);j.clear()},getMode(){return X}}}function Mw($){let U=$.processEnv;try{return jw({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),TH(J)}}function X6($){return String($??"").trim()||void 0}function P2($){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 Rd($){let[{homedir:U},J]=await Promise.all([import("node:os"),import("node:path")]),_=X6($.GOATCHAIN_HOME);if(_)return J.resolve(_,"goatchain");let G=X6($.XDG_CONFIG_HOME);if(G)return J.resolve(G,"goatchain","goatchain");return J.resolve(U(),".goatchain","goatchain")}async function Ew($){let U=await Rd($),[{readFile:J},_]=await Promise.all([import("node:fs/promises"),import("node:path")]),G=_.join(U,"cache.json");try{let Q=await J(G,"utf8"),Y=JSON.parse(Q);if(Y&&typeof Y==="object"&&Y.version===1)return{dir:U,filePath:G,cache:Y}}catch{}return{dir:U,filePath:G,cache:{version:1,updatedAt:0}}}async function Pw($,U){let[{mkdir:J,writeFile:_,rename:G,chmod:Q},Y]=await Promise.all([import("node:fs/promises"),import("node:path")]),X=Y.dirname($);await J(X,{recursive:!0});let V=globalThis.process?.pid??"p",K=`${Date.now()}-${Math.random().toString(16).slice(2)}`,N=`${$}.${V}.${K}.tmp`,B=`${JSON.stringify(U,null,2)}
|
|
598
|
-
`;await _(N,B,{encoding:"utf8",mode:384}),await G(N,$);try{await Q($,384)}catch{}}async function Lw($){let U=X6("0.0.4-beta.
|
|
598
|
+
`;await _(N,B,{encoding:"utf8",mode:384}),await G(N,$);try{await Q($,384)}catch{}}async function Lw($){let U=X6("0.0.4-beta.9")??await Ad($.cwd),J=await Ew($.env),_=J.cache,G=_.settings??{},Q=X6(G.cwd),Y=Array.isArray(G.focusFiles)?G.focusFiles.map((V)=>String(V??"")).filter(Boolean):void 0,X={GOATCHAIN_VERSION:U??"dev",...$.env.GOATCHAIN_MODEL?{GOATCHAIN_MODEL:$.env.GOATCHAIN_MODEL}:{},...$.env.GOATCHAIN_CONTEXT_WINDOW?{GOATCHAIN_CONTEXT_WINDOW:$.env.GOATCHAIN_CONTEXT_WINDOW}:{},...$.env.GOATCHAIN_TEMPERATURE?{GOATCHAIN_TEMPERATURE:$.env.GOATCHAIN_TEMPERATURE}:{},...$.env.GOATCHAIN_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(!X.GOATCHAIN_MODEL&&X6(G.model))X.GOATCHAIN_MODEL=String(G.model);if(!X.GOATCHAIN_CONTEXT_WINDOW&&P2(G.contextWindow)!=null)X.GOATCHAIN_CONTEXT_WINDOW=String(G.contextWindow);if(!X.GOATCHAIN_TEMPERATURE&&P2(G.temperature)!=null)X.GOATCHAIN_TEMPERATURE=String(G.temperature);if(!X.GOATCHAIN_TOP_P&&P2(G.topP)!=null)X.GOATCHAIN_TOP_P=String(G.topP);if(!X.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="auto")X.GOATCHAIN_TOOL_APPROVALS="auto";if(!X.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="all")X.GOATCHAIN_TOOL_APPROVALS="all";if(!X.GOATCHAIN_TOOL_APPROVALS&&G.toolApprovals==="manual")X.GOATCHAIN_TOOL_APPROVALS="auto";if(!X.GOATCHAIN_OPENAI_BASE_URL&&X6(G.baseUrl))X.GOATCHAIN_OPENAI_BASE_URL=String(G.baseUrl);if(!X.OPENAI_API_KEY&&X6(G.apiKey))X.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:Q||".",env:X,...Y?.length?{focusFiles:Y}:{}},cacheDir:J.dir,cacheFile:J.filePath,cache:_}}async function Ad($){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(_),Q=typeof G?.version==="string"?G.version:null;return Q&&Q.trim()?Q.trim():null}catch{return null}}import{watch as FQ}from"vue";function G8($,U){let J=String($??"").replace(/\s+/g," ").trim();if(J.length<=U)return J;return`${J.slice(0,Math.max(0,U-1))}…`}function kd($){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 _8($){if(!$||typeof $!=="object")return"";let U=String($.role??"");if(U==="user")return kd($.content);if(U==="tool")return String($.result?.output??"");if(U==="assistant"){let J=Array.isArray($.parts)?$.parts:[],_=J.filter((Q)=>Q?.type==="markdown").map((Q)=>String(Q.markdown??"")).join(`
|
|
600
600
|
`);if(_.trim())return _;let G=J.find((Q)=>Q?.type==="status");return G?String(G.text??""):""}return""}function ww($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&G8(_8(G),999).length>0),_=J?_8(J):"";return G8(_||"New session",60)||"New session"}function Rw($){let J=(Array.isArray($)?$:[]).find((G)=>G&&typeof G==="object"&&G.role==="user"&&G8(_8(G),999).length>0),_=J?_8(J):"";return G8(_||"New session",120)||"New session"}function Aw($){let J=[...Array.isArray($)?$:[]].reverse().find((_)=>{if(!_||typeof _!=="object"||_.role!=="user")return!1;return G8(_8(_),999).length>0});return G8(J?_8(J):"",180)}function WQ($){return`${$}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}function WF($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function BQ($){if($==null)return"";if(typeof $==="string")return $;if(Array.isArray($))return $.map(BQ).join("");if(WF($)){if(typeof $.text==="string")return String($.text);if(String($.type??"")==="image")return"[image]";try{return JSON.stringify($)}catch{return String($)}}return String($)}function zd($){if(WF($))return $;if(typeof $==="string"){let U=$.trim();if(!U)return{};try{let J=JSON.parse(U);return WF(J)?J:{_raw:$}}catch{return{_raw:$}}}return{}}function kw($){let U=$?.context?.messages,J=Array.isArray(U)?U:[],_=[],G=new Map;for(let Q of J){let Y=String(Q?.role??"");if(Y==="user"){_.push({id:WQ("m"),role:"user",content:BQ(Q?.content)});continue}if(Y==="assistant"){let X=[],V=BQ(Q?.content);if(V)X.push({type:"markdown",markdown:V});let K=Array.isArray(Q?.tool_calls)?Q.tool_calls:[];for(let N of K){let B=String(N?.id??"").trim(),W=String(N?.function?.name??"tool"),H=zd(N?.function?.arguments);if(!B)continue;let F={id:B,name:W,arguments:H};X.push({type:"tool_call",call:F}),G.set(B,_.length)}_.push({id:WQ("m"),role:"assistant",parts:[{type:"status",text:""},...X]});continue}if(Y==="tool"){let X=String(Q?.tool_call_id??"").trim(),V=BQ(Q?.content),K=Q?.isError?"error":"success",N={id:X||WQ("tool"),output:V,status:K};_.push({id:WQ("m"),role:"tool",result:N});let B=X?G.get(X):void 0;if(B==null)continue;let W=_[B];if(!W||W.role!=="assistant")continue;_[B]={...W,parts:[...W.parts,{type:"tool_result",result:N}]};continue}}return _}function zw($){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]:[]),Q=G.length?G.map((Y)=>({id:Y.id,type:"function",function:{name:Y.name,arguments:Y.arguments}})):void 0;U.push({role:"assistant",content:_,...Q?{tool_calls:Q}:{}});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 Sw($){return String($?.id??"").trim()}function Sd($){return Number($?.state?.updatedAt??$?.state?.lastActiveAt??0)||0}function vw($){let U=$?.context?.messages;return Array.isArray(U)?U:[]}function vd($){let U=Number($?.context?.messageCount??0);if(Number.isFinite(U)&&U>=0)return U;return vw($).length}function Td($){let U=$?.stats?.usage;return U&&typeof U==="object"?U:null}function Tw($){let U=Sw($);if(!U)return null;let J=Sd($),_=vw($),G=X6($?.state?.title)??ww(_),Q=Rw(_),Y=X6($?.context?.lastMessagePreview)??Aw(_),X=vd($);return{id:U,updatedAt:J,title:G,summary:Q,messageCount:X,lastMessage:Y}}function Q8($,U){let J=Sw(U);if(J)$.state.sessionId=J;let _=kw(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=Td(U);if(G){let Q=Number(G.promptTokens),Y=Number(G.completionTokens);if(Number.isFinite(Q))$.state.usage.prompt_tokens=Q;if(Number.isFinite(Y))$.state.usage.completion_tokens=Y;if(Number.isFinite(Q)&&Number.isFinite(Y))$.state.usage.total_tokens=Q+Y;else{let X=Number(G.totalTokens);if(Number.isFinite(X))$.state.usage.total_tokens=X}}}function Iw($){let U=Array.isArray($)?$:[];return zw(U)}function Cw($){let U=$.store,J=U?.state?.context?.env??{},_=X6(J.GOATCHAIN_OPENAI_BASE_URL||J.OPENAI_BASE_URL),G=X6(J.OPENAI_API_KEY);return{version:1,updatedAt:Date.now(),settings:{cwd:X6(U?.state?.context?.cwd),focusFiles:U?.state?.context?.focusFiles??void 0,model:X6(U?.state?.config?.model),contextWindow:P2(U?.state?.config?.context_window),temperature:P2(U?.state?.config?.temperature),topP:P2(U?.state?.config?.top_p),baseUrl:_,apiKey:G,toolApprovals:U?.state?.approval?.mode==="all"?"all":"auto"},lastSessionId:X6(U?.state?.sessionId)||$.prev.lastSessionId}}function bw($,U){let J=null,_=!1,G=!1,Q=async()=>{if(_){G=!0;return}_=!0,G=!1;try{await $()}finally{if(_=!1,G)Y()}},Y=()=>{if(G=!0,J)clearTimeout(J);J=setTimeout(Q,Math.max(0,U||0))};return{schedule:Y}}function Id($){return String($?.id??"").trim()}function yw($){let U=null,J=$.sessionsBackend??null;return{sessions:J?{async list(){return(await J.list()).map(Tw).filter(Boolean)},async use(Q){let Y=String(Q??"").trim();if(!Y||!U)return;if(String(U.state.sessionId??"")===Y)return;let X=await J.get(Y);if(!X)return;Q8(U,X)},async createNew(){if(!U)return;let Q=await J.create();if(!Q)return;Q8(U,Q)},async delete(Q){let Y=String(Q??"").trim();if(!Y)return;if(await J.destroy(Y),U&&String(U.state.sessionId??"")===Y){let X=await J.create();if(X)Q8(U,X)}},async fork(Q){if(!U)return;let Y=Array.isArray(Q?.messages)?Q.messages:[];if(typeof J.createWithMessages!=="function"){let V=await J.create();if(V)U.state.sessionId=Id(V);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 X=await J.createWithMessages(Iw(Y));if(!X)return;Q8(U,X)}}:void 0,onStoreCreated:(Q)=>{if(U=Q,J){let X=String(Q.state.sessionId??"").trim();if(X)J.get(X).then((V)=>{if(V&&U)Q8(U,V)}).catch(()=>{})}let Y=bw(async()=>{try{let X=Cw({prev:$.cache,store:Q});await Pw($.cacheFile,X)}catch(X){console.warn("[goatchain] Failed to persist cache:",X)}},300);FQ(()=>Q.state.sessionId,Y.schedule),FQ(()=>Q.state.config,Y.schedule,{deep:!0}),FQ(()=>Q.state.context,Y.schedule,{deep:!0}),FQ(()=>Q.state.approval.mode,Y.schedule),Y.schedule()}}}async function BF($){let U=$.sessionsBackend,J=X6($.envSessionId);if(U&&J){if(await U.get(J))return J}return J}function gw(){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 uw from"node:path";function Cd($){return uw.join($,"state")}function bd($){$.env.GOATCHAIN_STATE_DIR=$.stateDir,$.context.env.GOATCHAIN_STATE_DIR=$.stateDir}async function FF($){let{context:U,cacheDir:J,cacheFile:_,cache:G}=await Lw({cwd:$.cwd,env:$.env}),Q=Cd(J);bd({env:$.env,context:U,stateDir:Q});let Y=Mw({context:U,processEnv:$.env,stateDir:Q}),X=Y?.__sessions??null,V=await BF({sessionsBackend:X,envSessionId:$.env.GOATCHAIN_SESSION_ID});if(V)$.env.GOATCHAIN_SESSION_ID=V,U.env.GOATCHAIN_SESSION_ID=V;let{sessions:K,onStoreCreated:N}=yw({cacheFile:_,cache:G,sessionsBackend:X});return{toolRunner:gw(),context:U,agent:Y,onStoreCreated:N,sessions:K}}import an from"node:fs";import{nextTick as lQ}from"vue";var xw=($=0)=>(U)=>`\x1B[${U+$}m`,hw=($=0)=>(U)=>`\x1B[${38+$};5;${U}m`,mw=($=0)=>(U,J,_)=>`\x1B[${38+$};2;${U};${J};${_}m`,v0={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]}},L7$=Object.keys(v0.modifier),yd=Object.keys(v0.color),gd=Object.keys(v0.bgColor),w7$=[...yd,...gd];function ud(){let $=new Map;for(let[U,J]of Object.entries(v0)){for(let[_,G]of Object.entries(J))v0[_]={open:`\x1B[${G[0]}m`,close:`\x1B[${G[1]}m`},J[_]=v0[_],$.set(G[0],G[1]);Object.defineProperty(v0,U,{value:J,enumerable:!1})}return Object.defineProperty(v0,"codes",{value:$,enumerable:!1}),v0.color.close="\x1B[39m",v0.bgColor.close="\x1B[49m",v0.color.ansi=xw(),v0.color.ansi256=hw(),v0.color.ansi16m=mw(),v0.bgColor.ansi=xw(10),v0.bgColor.ansi256=hw(10),v0.bgColor.ansi16m=mw(10),Object.defineProperties(v0,{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((Q)=>Q+Q).join("");let G=Number.parseInt(_,16);return[G>>16&255,G>>8&255,G&255]},enumerable:!1},hexToAnsi256:{value:(U)=>v0.rgbToAnsi256(...v0.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 X=U%36;J=Math.floor(U/36)/5,_=Math.floor(X/6)/5,G=X%6/5}let Q=Math.max(J,_,G)*2;if(Q===0)return 30;let Y=30+(Math.round(G)<<2|Math.round(_)<<1|Math.round(J));if(Q===2)Y+=60;return Y},enumerable:!1},rgbToAnsi:{value:(U,J,_)=>v0.ansi256ToAnsi(v0.rgbToAnsi256(U,J,_)),enumerable:!1},hexToAnsi:{value:(U)=>v0.ansi256ToAnsi(v0.hexToAnsi256(U)),enumerable:!1}}),v0}var xd=ud(),V6=xd;function Y8($){return $.replace(/\r\n/g,`
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goatchain-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.4-beta.
|
|
4
|
+
"version": "0.0.4-beta.9",
|
|
5
5
|
"description": "GoatChain CLI built on @simon_he/vue-tui",
|
|
6
|
-
"bin": {
|
|
7
|
-
"goatchain": "./cli.mjs"
|
|
8
|
-
},
|
|
9
6
|
"exports": {
|
|
10
7
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
13
10
|
},
|
|
14
11
|
"./cli": {
|
|
15
|
-
"
|
|
16
|
-
"
|
|
12
|
+
"types": "./dist/cli.d.ts",
|
|
13
|
+
"import": "./dist/cli.js"
|
|
17
14
|
}
|
|
18
15
|
},
|
|
19
16
|
"main": "./dist/index.js",
|
|
20
17
|
"types": "./dist/index.d.ts",
|
|
18
|
+
"bin": {
|
|
19
|
+
"goatchain": "./cli.mjs"
|
|
20
|
+
},
|
|
21
21
|
"files": [
|
|
22
|
-
"
|
|
23
|
-
"
|
|
22
|
+
"cli.mjs",
|
|
23
|
+
"dist"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "bun run build.mjs",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"release:npm": "bumpp --commit --no-tag --no-push && bun run build:npm && bun publish"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
+
"goatchain": "^workspace:..",
|
|
46
47
|
"semver": "^7.7.3",
|
|
47
48
|
"shiki": "^3.20.0",
|
|
48
49
|
"vue": "^3.4.0"
|