@aiiware/aii 0.17.26 → 0.17.27

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.
Files changed (2) hide show
  1. package/bin/aii +10 -10
  2. package/package.json +1 -1
package/bin/aii CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @aiiware/aii v0.17.26
3
+ * @aiiware/aii v0.17.27
4
4
  *
5
5
  * AI-powered CLI assistant for terminal productivity
6
6
  *
@@ -204,7 +204,7 @@ ${r.comment}`:r.comment}this.doc.range[2]=r.offset;break}default:this.errors.pus
204
204
  Open this URL to sign in:
205
205
  ${p.verify_url}
206
206
  `),n(p.verify_url),i(" Waiting for authentication... (press Ctrl+C to cancel)");let f=Math.max(1,p.interval||2)*1e3,h=i_e(p.expires_at,o());for(;;){try{let g=await c(p.poll_url);if(g.ok){let _=JSON.parse(g.text);if(_.status==="completed"&&_.api_key)return{apiKey:_.api_key};if(_.status==="expired")throw new Ca("The sign-in code expired. Run the command again to retry.")}}catch(g){if(g instanceof Ca)throw g}if(o()>=h)throw new Ca("Timed out waiting for sign-in. Run the command again to retry.");await s(f)}}var Ca,n_e,rd=D(()=>{"use strict";Ca=class extends Error{constructor(e){super(e),this.name="DeviceAuthError"}},n_e=3e5});var HU={};ye(HU,{configureLogger:()=>d1,debug:()=>j,error:()=>zU,formatError:()=>p1,info:()=>BU,logger:()=>P,success:()=>qU,warn:()=>GU});function d1(t){$f={...$f,...t}}function Uf(t){return $f.emojis?t+" ":""}function ql(t,e){return $f.colors?e(t):t}function j(t,...e){$f.debug&&console.debug(ql(`[DEBUG] ${t}`,m.gray),...e)}function BU(t,...e){console.log(t,...e)}function GU(t,...e){console.warn(ql(`${Uf("\u26A0\uFE0F")}${t}`,m.yellow),...e)}function zU(t,...e){console.error(ql(`${Uf("\u274C")}${t}`,m.red),...e)}function qU(t,...e){console.log(ql(`${Uf("\u2705")}${t}`,m.green),...e)}function p1(t){let e=[];return e.push(ql(`${Uf("\u274C")}${t.message}`,m.red)),t.suggestions&&t.suggestions.length>0&&(e.push(""),e.push(ql(`${Uf("\u{1F4A1}")}Solutions:`,m.yellow)),t.suggestions.forEach((r,n)=>{e.push(ql(` ${n+1}. ${r}`,m.gray))})),e.join(`
207
- `)}var a_e,$f,P,at=D(()=>{"use strict";Se();a_e={debug:!1,colors:!0,emojis:!0},$f={...a_e};P={debug:j,info:BU,warn:GU,error:zU,success:qU,formatError:p1,configure:d1}});function jU(t){return typeof t=="number"&&Number.isInteger(t)&&t>0?t:1}function m1(t,e){if(typeof t!="object"||t===null)return{kind:"malformed",reason:"frame is not an object"};let r=t.type;return typeof r!="string"?{kind:"malformed",reason:'frame has no string "type"'}:e.has(r)?{kind:"ok",frame:t}:{kind:"unknown",type:r,protocolVersion:jU(t.protocol_version)}}function YU(t){if(typeof t!="object"||t===null||typeof t.type=="string")return null;let e=t.error;return typeof e!="string"||e===""?null:{unknown_model:"That model is not available on Aii Cloud. Pick a model from your cloud dashboard (cloud.aiiware.com) or run with --local.",insufficient_credits:"Out of Aii Cloud credits. Top up to continue, or run with --local.",quota_exceeded:"Daily free-tier limit reached on Aii Cloud. Try again later, upgrade, or run with --local.",quota_check_failed:"Aii Cloud could not verify your quota \u2014 please retry.",worker_unavailable:"Aii Cloud is temporarily unavailable \u2014 please retry, or run with --local."}[e]??`Aii Cloud error: ${e}`}function rA(t){return t==null||typeof t=="object"}function h1(t){switch(t.type){case"tool_request":return rA(t.input);case"mcp_tool_request":return rA(t.params);case"tool_batch_request":{let e=t.tools;return e==null||Array.isArray(e)&&e.every(r=>r==null||typeof r=="object"&&rA(r.input))}default:return!0}}function g1(t){return jU(t)>2?"hard":"compatible"}function _1(t){return`This Aii Server speaks protocol v${t}, but your CLI speaks v2. Some responses may not work correctly. Update with: aii upgrade`}var WU,VU,f1,nA=D(()=>{"use strict";WU=new Set(["token","complete","error","mcp_query_tools","mcp_tool_request","reasoning","reasoning_label","web_search_started","web_search_completed","follow_ups","task.step.updated","task.artifact.added"]),VU=new Set(["session_started","turn_ready","token","iteration_tokens_usage","tool_request","tool_batch_request","tool_status","complete","error","mcp_tools_loaded","permission_request","permission_resolution","mcp_query_tools","mcp_tool_request","reasoning","reasoning_label","web_search_started","web_search_completed","follow_ups","task.step.updated","task.artifact.added"]),f1=new Set(["tool_request","tool_batch_request","mcp_tool_request"])});var oA={};ye(oA,{MCPConfigManager:()=>Jt,MCP_CATALOG:()=>Hl});import*as os from"fs";import*as E1 from"path";import*as sA from"os";var Hl,Jt,va=D(()=>{"use strict";Hl={github:{name:"GitHub",description:"GitHub API integration for repos, issues, PRs, and more",command:"npx",args:["-y","@modelcontextprotocol/server-github"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"${GITHUB_TOKEN}"},category:"development"},filesystem:{name:"Filesystem",description:"Read/write files on the local filesystem",command:"npx",args:["-y","@modelcontextprotocol/server-filesystem",sA.homedir()],category:"system"},"brave-search":{name:"Brave Search",description:"Web search using Brave Search API",command:"npx",args:["-y","@brave/brave-search-mcp-server"],env:{BRAVE_API_KEY:"${BRAVE_API_KEY}"},category:"search"},sqlite:{name:"SQLite",description:"Query SQLite databases",command:"uvx",args:["mcp-server-sqlite","--db-path","./database.db"],category:"database"},postgres:{name:"PostgreSQL",description:"Query PostgreSQL databases",command:"npx",args:["-y","@anthropic/mcp-server-postgres"],env:{DATABASE_URL:"${DATABASE_URL}"},category:"database"},"chrome-devtools":{name:"Chrome DevTools",description:"Control Chrome browser via DevTools protocol",command:"npx",args:["chrome-devtools-mcp@latest"],category:"browser"},memory:{name:"Memory",description:"Persistent memory storage for conversation context",command:"npx",args:["-y","@modelcontextprotocol/server-memory"],category:"utility"},puppeteer:{name:"Puppeteer",description:"Browser automation with Puppeteer",command:"npx",args:["-y","@anthropic/mcp-server-puppeteer"],category:"browser"}},Jt=class{configPath;constructor(e){this.configPath=e||E1.join(sA.homedir(),".aii","mcp_servers.json"),this.ensureConfigDir()}ensureConfigDir(){let e=E1.dirname(this.configPath);os.existsSync(e)||os.mkdirSync(e,{recursive:!0})}loadConfig(){if(!os.existsSync(this.configPath))return{mcpServers:{}};try{let e=os.readFileSync(this.configPath,"utf-8"),r=JSON.parse(e);return typeof r=="object"&&r!==null?r:{mcpServers:{}}}catch{return{mcpServers:{}}}}saveConfig(e){try{return this.ensureConfigDir(),os.writeFileSync(this.configPath,JSON.stringify(e,null,2),"utf-8"),!0}catch{return!1}}backupConfig(){if(!os.existsSync(this.configPath))return!0;try{let e=this.configPath+".backup";return os.copyFileSync(this.configPath,e),!0}catch{return!1}}getConfigPath(){return this.configPath}}});var l_e,c_e,u_e,d_e,p_e,m_e,f_e,jl,y1,ka,iA=D(()=>{"use strict";Se();l_e={name:"classic",label:"Classic",description:"Aii jellyfish blue-purple (default)",accentColorName:"#3B82F6",userInputTextColorName:"#93C5FD",colors:{accent:m.hex("#3B82F6"),userInput:m.hex("#3B82F6"),userInputText:m.hex("#93C5FD"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#A855F7"),link:m.hex("#3B82F6").underline,heading:m.hex("#A855F7").bold,filePath:m.hex("#3B82F6"),indicator:m.hex("#3B82F6")}},c_e={name:"brand",label:"Brand",description:"aiiware.com official palette",accentColorName:"#4E6BF5",userInputTextColorName:"#A5B4FC",colors:{accent:m.hex("#4E6BF5"),userInput:m.hex("#4E6BF5"),userInputText:m.hex("#A5B4FC"),success:m.hex("#28CA41"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#4E6BF5"),link:m.hex("#4E6BF5").underline,heading:m.hex("#4E6BF5").bold,filePath:m.hex("#4E6BF5"),indicator:m.hex("#4E6BF5")}},u_e={name:"teal",label:"Teal",description:"Original teal accent",accentColorName:"#00BCD4",userInputTextColorName:"#67E8F9",colors:{accent:m.hex("#00BCD4"),userInput:m.hex("#00BCD4"),userInputText:m.hex("#67E8F9"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#00BCD4"),link:m.hex("#00BCD4").underline,heading:m.hex("#00BCD4").bold,filePath:m.hex("#00BCD4"),indicator:m.hex("#00BCD4")}},d_e={name:"indigo",label:"Indigo",description:"Bright periwinkle-blue",accentColorName:"#6B8AFF",userInputTextColorName:"#A5B4FC",colors:{accent:m.hex("#6B8AFF"),userInput:m.hex("#6B8AFF"),userInputText:m.hex("#A5B4FC"),success:m.hex("#28CA41"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#6B8AFF"),link:m.hex("#6B8AFF").underline,heading:m.hex("#6B8AFF").bold,filePath:m.hex("#6B8AFF"),indicator:m.hex("#6B8AFF")}},p_e={name:"forest",label:"Forest",description:"Natural green",accentColorName:"#22C55E",userInputTextColorName:"#86EFAC",colors:{accent:m.hex("#22C55E"),userInput:m.hex("#22C55E"),userInputText:m.hex("#86EFAC"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#22C55E"),link:m.hex("#22C55E").underline,heading:m.hex("#22C55E").bold,filePath:m.hex("#22C55E"),indicator:m.hex("#22C55E")}},m_e={name:"amber",label:"Amber",description:"Warm orange-gold",accentColorName:"#F59E0B",userInputTextColorName:"#FCD34D",colors:{accent:m.hex("#F59E0B"),userInput:m.hex("#F59E0B"),userInputText:m.hex("#FCD34D"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#F59E0B"),link:m.hex("#F59E0B").underline,heading:m.hex("#F59E0B").bold,filePath:m.hex("#F59E0B"),indicator:m.hex("#F59E0B")}},f_e={name:"grayscale",label:"Grayscale",description:"Accessible, no colors",accentColorName:"white",userInputTextColorName:"#CBD5E1",colors:{accent:m.reset,userInput:m.reset,userInputText:m.hex("#CBD5E1"),success:m.reset,warning:m.reset,error:m.bold,muted:m.dim,dim:m.dim,code:m.reset,link:m.underline,heading:m.bold,filePath:m.reset,indicator:m.bold}},jl={classic:l_e,brand:c_e,teal:u_e,indigo:d_e,forest:p_e,amber:m_e,grayscale:f_e},y1="classic",ka=["classic","brand","teal","indigo","forest","amber","grayscale"]});var Yl={};ye(Yl,{ThemeManager:()=>_i,getAccentColorName:()=>ke,getThemeColors:()=>q,getUserInputTextColorName:()=>nd});function q(){return _i.getInstance().getColors()}function ke(){return _i.getInstance().getAccentColorName()}function nd(){return _i.getInstance().getUserInputTextColorName()}var _i,Aa=D(()=>{"use strict";iA();_i=class t{static instance=null;activeTheme;constructor(){this.activeTheme=jl[y1]}static getInstance(){return t.instance||(t.instance=new t),t.instance}getTheme(){return this.activeTheme}getColors(){return this.activeTheme.colors}getThemeName(){return this.activeTheme.name}setTheme(e){let r=jl[e];if(!r){let n=ka.join(", ");throw new Error(`Unknown theme: "${e}". Available themes: ${n}`)}this.activeTheme=r}isValidTheme(e){return e in jl}getAvailableThemes(){return ka.map(e=>jl[e])}getAccentColorName(){return this.activeTheme.accentColorName}getUserInputTextColorName(){return this.activeTheme.userInputTextColorName}reset(){this.activeTheme=jl[y1]}}});var dt=D(()=>{"use strict";iA();Aa()});import{resolve as h_e}from"path";function g_e(){let t=process.env.TERM??"",e=process.env.TERM_PROGRAM??"",r=process.env.COLORTERM??"",n=process.env.WT_SESSION??"",s=process.env.VSCODE_INJECTION??process.env.TERM_PROGRAM==="vscode";return e==="iTerm.app"||e==="Hyper"||e==="vscode"||e==="WezTerm"||e==="Alacritty"||n||s||t.includes("xterm-256color")||t.includes("screen-256color")||t.includes("tmux")||t==="xterm-kitty"||r==="truecolor"?!0:!(t==="dumb"||!process.stdout.isTTY)}function Bf(){return aA===null&&(aA=g_e()),aA}function __e(){return process.platform==="darwin"?"Cmd":"Ctrl"}function QU(){return KU||!Bf()?"":(KU=!0,` (${__e()}+Click to open)`)}function E_e(t,e){return Bf()?`\x1B]8;;${e}\x07${t}\x1B]8;;\x07`:t}function XU(t,e){let r=process.env.HOME??process.env.USERPROFILE??"",n=t;r&&t.startsWith(r)&&(n="~"+t.slice(r.length));let s=e?`${n}:${e}`:n;if(!Bf())return q().filePath(s);let o=q().accent(s),a=`file://${h_e(t)}`;return e!==void 0&&e>0&&(a+=`#L${e}`),E_e(o,a)}var aA,KU,JU=D(()=>{"use strict";dt();aA=null,KU=!1});var tB={};ye(tB,{VERSION:()=>Wl,colors:()=>L,formatCode:()=>A_e,formatPath:()=>zf,getActionIndicator:()=>k_e,padEndAnsi:()=>N_e,printAction:()=>y_e,printDivider:()=>eB,printError:()=>C_e,printExitSummary:()=>cA,printHeader:()=>v_e,printSuccess:()=>T_e,printToolComplete:()=>S_e,printToolFailed:()=>b_e,printToolResultCompact:()=>Da,printWarning:()=>w_e,shortenPath:()=>I_e});function Gf(t){return t.startsWith("/")||t.startsWith("~/")||t.startsWith("./")||t.startsWith("../")||/^[a-zA-Z]:\\/.test(t)||/\.(ts|tsx|js|jsx|json|md|py|go|rs|java|c|cpp|h|hpp|css|scss|html|xml|yaml|yml|toml|sh|bash|zsh)$/.test(t)||/^src\//.test(t)||/^lib\//.test(t)||/^test[s]?\//.test(t)}function y_e(t,e,r=console.log){let n=Gf(e)?zf(e):L.filePath(e);r(L.dim("\u25CB ")+m.bold(t)+" "+n)}function S_e(t,e,r=console.log){let n=Gf(e)?zf(e):L.filePath(e);r(L.success("\u2713 ")+m.bold(t)+" "+n)}function b_e(t,e,r,n=console.log){let s=Gf(e)?zf(e):L.filePath(e);n(L.error("\u2717 ")+m.bold(t)+" "+s),r&&n(L.dim(" \u2192 ")+L.error(r))}function Da(t,e,r=!0,n,s=console.log,o=!0){let i=r?L.success("\u25CF"):L.error("\u25CF"),a=60,l=e.length>a?e.slice(0,a-3)+"...":e;if(Gf(e)){let d=e.match(/:(\d+)$/),p=d?parseInt(d[1],10):void 0,f=d?e.replace(/:(\d+)$/,""):e;l=zf(f,p)}s(`${i} ${m.bold(t)}(${l})`);let c=o&&Gf(e)?L.dim(QU()):"",u=o&&!c&&!ZU?L.dim(" (ctrl+o to expand)"):"";if(u&&(ZU=!0),n){let d=r?L.dim:L.error;s(d(`\u2514 ${n}`)+c+u)}else{let d=r?"(No content)":"(Error)",p=r?L.dim:L.error;s(p(`\u2514 ${d}`)+c+u)}}function T_e(t){console.log(L.success("\u2713 ")+t)}function w_e(t){console.log(L.warning("\u26A0 ")+t)}function C_e(t){console.log(L.error("\u2717 ")+t)}function eB(t=60){console.log(L.dim("\u2500".repeat(t)))}function v_e(t){console.log(L.logo(t)),eB(t.length)}function k_e(t){return L.thinking(`[${t}]`)}function zf(t,e){if(Bf())return XU(t,e);let r=process.env.HOME??process.env.USERPROFILE??"",n=t;return r&&t.startsWith(r)&&(n="~"+t.slice(r.length)),e&&(n+=`:${e}`),L.filePath(n)}function A_e(t){return L.code(t)}function D_e(){return process.stdout.columns||80}function I_e(t,e=40){let r=process.env.HOME??process.env.USERPROFILE??"",n=t;if(r&&t.startsWith(r)&&(n="~"+t.slice(r.length)),n.length<=e)return n;let s=n.split("/").filter(i=>i.length>0);if(s.length>=2){let i=s.slice(-2).join("/");if(i.length<=e-4)return".../"+i}return".../"+(s[s.length-1]||s[s.length-2])}function R_e(t){return t.replace(/\x1b\[[0-9;]*m/g,"").length}function N_e(t,e){let r=R_e(t),n=Math.max(0,e-r);return t+" ".repeat(n)}function O_e(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return r>0?`${e}m ${r}s`:`${e}m`}function lA(t){return t>=1e3?`${(t/1e3).toFixed(1)}K`:t.toString()}function cA(t){let e=D_e(),r=Math.min(e-2,76),n=r-4,s=(g,_)=>{let E=g.replace(/\x1b\[[0-9;]*m/g,"").length;return g+" ".repeat(Math.max(0,_-E))},o=g=>L.border("\u2502")+" "+s(g,n)+" "+L.border("\u2502"),i=(g,_,E,y)=>{let T=Math.floor(n/2),w=L.dim(g.padEnd(15))+_,C=L.dim(E.padEnd(15))+y;return o(s(w,T)+C)},a=O_e(t.durationSeconds),l=lA(t.tokensIn),c=lA(t.tokensOut),u=`$${t.totalCost.toFixed(4)}`,d=t.cloud?`\u2601\uFE0F Cloud \xB7 ${t.model}`:`${t.provider}/${t.model.replace("claude-","").replace("-latest","")}`;console.log(""),console.log(L.border("\u250C"+"\u2500".repeat(r-2)+"\u2510")),console.log(o(L.logo("Session complete. \u{1FABC}"))),console.log(L.border("\u251C"+"\u2500".repeat(r-2)+"\u2524")),console.log(o(L.logo("Session Summary"))),console.log(o(L.dim("\u2500".repeat(15)))),console.log(i("Duration",a,"Tool Calls",t.toolCalls.toString())),console.log(i("Turns",t.turns.toString(),"Files Modified",t.filesModified.toString())),console.log(o("")),console.log(o(L.logo("Token Usage"))),console.log(o(L.dim("\u2500".repeat(11)))),console.log(i("Input",l,"Output",c));let p=t.cachedTokens??0;if(p>0){let g=Math.min(100,Math.round(100*p/Math.max(1,t.tokensIn)));console.log(o(L.dim("Cached".padEnd(15))+`${lA(p)} (${g}%)`))}let f=t.cacheSavings??0,h=f>0?L.dim(` \xB7 saved ~$${f.toFixed(4)} by prompt caching`):"";console.log(o(L.dim("Cost".padEnd(15))+u+h)),console.log(o("")),console.log(o(L.dim("Model: ")+L.model(d))),console.log(L.border("\u2514"+"\u2500".repeat(r-2)+"\u2518")),console.log("")}var Wl,L,ZU,Zt=D(()=>{"use strict";Se();JU();dt();Wl="0.17.26",L={get logo(){return q().accent.bold},get prompt(){return q().accent.bold},get model(){return q().accent},get success(){return q().success},get warning(){return q().warning},get error(){return q().error},get thinking(){return q().dim},get filePath(){return q().filePath},get code(){return q().code},get muted(){return q().muted},get dim(){return q().dim},get safe(){return q().success},get risky(){return q().warning},get destructive(){return q().error},get border(){return q().accent},get bannerBorder(){return q().accent}};ZU=!1});var is,sd,uA=D(()=>{"use strict";is={maxConcurrent:5,maxIterations:100,timeout:3e5,autoBackgroundTimeout:12e4,compressionLevel:"medium",permissionMode:"default"},sd={maxConcurrent:3,timeout:30*60*1e3,permissionMode:"dontAsk"}});var S1,dA=D(()=>{"use strict";S1=`You are an expert codebase explorer. Your task is to efficiently explore and understand codebases.
207
+ `)}var a_e,$f,P,at=D(()=>{"use strict";Se();a_e={debug:!1,colors:!0,emojis:!0},$f={...a_e};P={debug:j,info:BU,warn:GU,error:zU,success:qU,formatError:p1,configure:d1}});function jU(t){return typeof t=="number"&&Number.isInteger(t)&&t>0?t:1}function m1(t,e){if(typeof t!="object"||t===null)return{kind:"malformed",reason:"frame is not an object"};let r=t.type;return typeof r!="string"?{kind:"malformed",reason:'frame has no string "type"'}:e.has(r)?{kind:"ok",frame:t}:{kind:"unknown",type:r,protocolVersion:jU(t.protocol_version)}}function YU(t){if(typeof t!="object"||t===null||typeof t.type=="string")return null;let e=t.error;return typeof e!="string"||e===""?null:{unknown_model:"That model is not available on Aii Cloud. Pick a model from your cloud dashboard (cloud.aiiware.com) or run with --local.",insufficient_credits:"Out of Aii Cloud credits. Top up to continue, or run with --local.",quota_exceeded:"Daily free-tier limit reached on Aii Cloud. Try again later, upgrade, or run with --local.",quota_check_failed:"Aii Cloud could not verify your quota \u2014 please retry.",worker_unavailable:"Aii Cloud is temporarily unavailable \u2014 please retry, or run with --local."}[e]??`Aii Cloud error: ${e}`}function rA(t){return t==null||typeof t=="object"}function h1(t){switch(t.type){case"tool_request":return rA(t.input);case"mcp_tool_request":return rA(t.params);case"tool_batch_request":{let e=t.tools;return e==null||Array.isArray(e)&&e.every(r=>r==null||typeof r=="object"&&rA(r.input))}default:return!0}}function g1(t){return jU(t)>2?"hard":"compatible"}function _1(t){return`This Aii Server speaks protocol v${t}, but your CLI speaks v2. Some responses may not work correctly. Update with: aii upgrade`}var WU,VU,f1,nA=D(()=>{"use strict";WU=new Set(["token","complete","error","mcp_query_tools","mcp_tool_request","reasoning","reasoning_label","web_search_started","web_search_completed","follow_ups","task.step.updated","task.artifact.added"]),VU=new Set(["session_started","turn_ready","token","iteration_tokens_usage","tool_request","tool_batch_request","tool_status","complete","error","mcp_tools_loaded","permission_request","permission_resolution","mcp_query_tools","mcp_tool_request","reasoning","reasoning_label","web_search_started","web_search_completed","follow_ups","task.step.updated","task.artifact.added"]),f1=new Set(["tool_request","tool_batch_request","mcp_tool_request"])});var oA={};ye(oA,{MCPConfigManager:()=>Jt,MCP_CATALOG:()=>Hl});import*as os from"fs";import*as E1 from"path";import*as sA from"os";var Hl,Jt,va=D(()=>{"use strict";Hl={github:{name:"GitHub",description:"GitHub API integration for repos, issues, PRs, and more",command:"npx",args:["-y","@modelcontextprotocol/server-github"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"${GITHUB_TOKEN}"},category:"development"},filesystem:{name:"Filesystem",description:"Read/write files on the local filesystem",command:"npx",args:["-y","@modelcontextprotocol/server-filesystem",sA.homedir()],category:"system"},"brave-search":{name:"Brave Search",description:"Web search using Brave Search API",command:"npx",args:["-y","@brave/brave-search-mcp-server"],env:{BRAVE_API_KEY:"${BRAVE_API_KEY}"},category:"search"},sqlite:{name:"SQLite",description:"Query SQLite databases",command:"uvx",args:["mcp-server-sqlite","--db-path","./database.db"],category:"database"},postgres:{name:"PostgreSQL",description:"Query PostgreSQL databases",command:"npx",args:["-y","@anthropic/mcp-server-postgres"],env:{DATABASE_URL:"${DATABASE_URL}"},category:"database"},"chrome-devtools":{name:"Chrome DevTools",description:"Control Chrome browser via DevTools protocol",command:"npx",args:["chrome-devtools-mcp@latest"],category:"browser"},memory:{name:"Memory",description:"Persistent memory storage for conversation context",command:"npx",args:["-y","@modelcontextprotocol/server-memory"],category:"utility"},puppeteer:{name:"Puppeteer",description:"Browser automation with Puppeteer",command:"npx",args:["-y","@anthropic/mcp-server-puppeteer"],category:"browser"}},Jt=class{configPath;constructor(e){this.configPath=e||E1.join(sA.homedir(),".aii","mcp_servers.json"),this.ensureConfigDir()}ensureConfigDir(){let e=E1.dirname(this.configPath);os.existsSync(e)||os.mkdirSync(e,{recursive:!0})}loadConfig(){if(!os.existsSync(this.configPath))return{mcpServers:{}};try{let e=os.readFileSync(this.configPath,"utf-8"),r=JSON.parse(e);return typeof r=="object"&&r!==null?r:{mcpServers:{}}}catch{return{mcpServers:{}}}}saveConfig(e){try{return this.ensureConfigDir(),os.writeFileSync(this.configPath,JSON.stringify(e,null,2),"utf-8"),!0}catch{return!1}}backupConfig(){if(!os.existsSync(this.configPath))return!0;try{let e=this.configPath+".backup";return os.copyFileSync(this.configPath,e),!0}catch{return!1}}getConfigPath(){return this.configPath}}});var l_e,c_e,u_e,d_e,p_e,m_e,f_e,jl,y1,ka,iA=D(()=>{"use strict";Se();l_e={name:"classic",label:"Classic",description:"Aii jellyfish blue-purple (default)",accentColorName:"#3B82F6",userInputTextColorName:"#93C5FD",colors:{accent:m.hex("#3B82F6"),userInput:m.hex("#3B82F6"),userInputText:m.hex("#93C5FD"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#A855F7"),link:m.hex("#3B82F6").underline,heading:m.hex("#A855F7").bold,filePath:m.hex("#3B82F6"),indicator:m.hex("#3B82F6")}},c_e={name:"brand",label:"Brand",description:"aiiware.com official palette",accentColorName:"#4E6BF5",userInputTextColorName:"#A5B4FC",colors:{accent:m.hex("#4E6BF5"),userInput:m.hex("#4E6BF5"),userInputText:m.hex("#A5B4FC"),success:m.hex("#28CA41"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#4E6BF5"),link:m.hex("#4E6BF5").underline,heading:m.hex("#4E6BF5").bold,filePath:m.hex("#4E6BF5"),indicator:m.hex("#4E6BF5")}},u_e={name:"teal",label:"Teal",description:"Original teal accent",accentColorName:"#00BCD4",userInputTextColorName:"#67E8F9",colors:{accent:m.hex("#00BCD4"),userInput:m.hex("#00BCD4"),userInputText:m.hex("#67E8F9"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#00BCD4"),link:m.hex("#00BCD4").underline,heading:m.hex("#00BCD4").bold,filePath:m.hex("#00BCD4"),indicator:m.hex("#00BCD4")}},d_e={name:"indigo",label:"Indigo",description:"Bright periwinkle-blue",accentColorName:"#6B8AFF",userInputTextColorName:"#A5B4FC",colors:{accent:m.hex("#6B8AFF"),userInput:m.hex("#6B8AFF"),userInputText:m.hex("#A5B4FC"),success:m.hex("#28CA41"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#6B8AFF"),link:m.hex("#6B8AFF").underline,heading:m.hex("#6B8AFF").bold,filePath:m.hex("#6B8AFF"),indicator:m.hex("#6B8AFF")}},p_e={name:"forest",label:"Forest",description:"Natural green",accentColorName:"#22C55E",userInputTextColorName:"#86EFAC",colors:{accent:m.hex("#22C55E"),userInput:m.hex("#22C55E"),userInputText:m.hex("#86EFAC"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#22C55E"),link:m.hex("#22C55E").underline,heading:m.hex("#22C55E").bold,filePath:m.hex("#22C55E"),indicator:m.hex("#22C55E")}},m_e={name:"amber",label:"Amber",description:"Warm orange-gold",accentColorName:"#F59E0B",userInputTextColorName:"#FCD34D",colors:{accent:m.hex("#F59E0B"),userInput:m.hex("#F59E0B"),userInputText:m.hex("#FCD34D"),success:m.hex("#22C55E"),warning:m.hex("#EAB308"),error:m.hex("#EF4444"),muted:m.hex("#94A3B8"),dim:m.dim,code:m.hex("#F59E0B"),link:m.hex("#F59E0B").underline,heading:m.hex("#F59E0B").bold,filePath:m.hex("#F59E0B"),indicator:m.hex("#F59E0B")}},f_e={name:"grayscale",label:"Grayscale",description:"Accessible, no colors",accentColorName:"white",userInputTextColorName:"#CBD5E1",colors:{accent:m.reset,userInput:m.reset,userInputText:m.hex("#CBD5E1"),success:m.reset,warning:m.reset,error:m.bold,muted:m.dim,dim:m.dim,code:m.reset,link:m.underline,heading:m.bold,filePath:m.reset,indicator:m.bold}},jl={classic:l_e,brand:c_e,teal:u_e,indigo:d_e,forest:p_e,amber:m_e,grayscale:f_e},y1="classic",ka=["classic","brand","teal","indigo","forest","amber","grayscale"]});var Yl={};ye(Yl,{ThemeManager:()=>_i,getAccentColorName:()=>ke,getThemeColors:()=>q,getUserInputTextColorName:()=>nd});function q(){return _i.getInstance().getColors()}function ke(){return _i.getInstance().getAccentColorName()}function nd(){return _i.getInstance().getUserInputTextColorName()}var _i,Aa=D(()=>{"use strict";iA();_i=class t{static instance=null;activeTheme;constructor(){this.activeTheme=jl[y1]}static getInstance(){return t.instance||(t.instance=new t),t.instance}getTheme(){return this.activeTheme}getColors(){return this.activeTheme.colors}getThemeName(){return this.activeTheme.name}setTheme(e){let r=jl[e];if(!r){let n=ka.join(", ");throw new Error(`Unknown theme: "${e}". Available themes: ${n}`)}this.activeTheme=r}isValidTheme(e){return e in jl}getAvailableThemes(){return ka.map(e=>jl[e])}getAccentColorName(){return this.activeTheme.accentColorName}getUserInputTextColorName(){return this.activeTheme.userInputTextColorName}reset(){this.activeTheme=jl[y1]}}});var dt=D(()=>{"use strict";iA();Aa()});import{resolve as h_e}from"path";function g_e(){let t=process.env.TERM??"",e=process.env.TERM_PROGRAM??"",r=process.env.COLORTERM??"",n=process.env.WT_SESSION??"",s=process.env.VSCODE_INJECTION??process.env.TERM_PROGRAM==="vscode";return e==="iTerm.app"||e==="Hyper"||e==="vscode"||e==="WezTerm"||e==="Alacritty"||n||s||t.includes("xterm-256color")||t.includes("screen-256color")||t.includes("tmux")||t==="xterm-kitty"||r==="truecolor"?!0:!(t==="dumb"||!process.stdout.isTTY)}function Bf(){return aA===null&&(aA=g_e()),aA}function __e(){return process.platform==="darwin"?"Cmd":"Ctrl"}function QU(){return KU||!Bf()?"":(KU=!0,` (${__e()}+Click to open)`)}function E_e(t,e){return Bf()?`\x1B]8;;${e}\x07${t}\x1B]8;;\x07`:t}function XU(t,e){let r=process.env.HOME??process.env.USERPROFILE??"",n=t;r&&t.startsWith(r)&&(n="~"+t.slice(r.length));let s=e?`${n}:${e}`:n;if(!Bf())return q().filePath(s);let o=q().accent(s),a=`file://${h_e(t)}`;return e!==void 0&&e>0&&(a+=`#L${e}`),E_e(o,a)}var aA,KU,JU=D(()=>{"use strict";dt();aA=null,KU=!1});var tB={};ye(tB,{VERSION:()=>Wl,colors:()=>L,formatCode:()=>A_e,formatPath:()=>zf,getActionIndicator:()=>k_e,padEndAnsi:()=>N_e,printAction:()=>y_e,printDivider:()=>eB,printError:()=>C_e,printExitSummary:()=>cA,printHeader:()=>v_e,printSuccess:()=>T_e,printToolComplete:()=>S_e,printToolFailed:()=>b_e,printToolResultCompact:()=>Da,printWarning:()=>w_e,shortenPath:()=>I_e});function Gf(t){return t.startsWith("/")||t.startsWith("~/")||t.startsWith("./")||t.startsWith("../")||/^[a-zA-Z]:\\/.test(t)||/\.(ts|tsx|js|jsx|json|md|py|go|rs|java|c|cpp|h|hpp|css|scss|html|xml|yaml|yml|toml|sh|bash|zsh)$/.test(t)||/^src\//.test(t)||/^lib\//.test(t)||/^test[s]?\//.test(t)}function y_e(t,e,r=console.log){let n=Gf(e)?zf(e):L.filePath(e);r(L.dim("\u25CB ")+m.bold(t)+" "+n)}function S_e(t,e,r=console.log){let n=Gf(e)?zf(e):L.filePath(e);r(L.success("\u2713 ")+m.bold(t)+" "+n)}function b_e(t,e,r,n=console.log){let s=Gf(e)?zf(e):L.filePath(e);n(L.error("\u2717 ")+m.bold(t)+" "+s),r&&n(L.dim(" \u2192 ")+L.error(r))}function Da(t,e,r=!0,n,s=console.log,o=!0){let i=r?L.success("\u25CF"):L.error("\u25CF"),a=60,l=e.length>a?e.slice(0,a-3)+"...":e;if(Gf(e)){let d=e.match(/:(\d+)$/),p=d?parseInt(d[1],10):void 0,f=d?e.replace(/:(\d+)$/,""):e;l=zf(f,p)}s(`${i} ${m.bold(t)}(${l})`);let c=o&&Gf(e)?L.dim(QU()):"",u=o&&!c&&!ZU?L.dim(" (ctrl+o to expand)"):"";if(u&&(ZU=!0),n){let d=r?L.dim:L.error;s(d(`\u2514 ${n}`)+c+u)}else{let d=r?"(No content)":"(Error)",p=r?L.dim:L.error;s(p(`\u2514 ${d}`)+c+u)}}function T_e(t){console.log(L.success("\u2713 ")+t)}function w_e(t){console.log(L.warning("\u26A0 ")+t)}function C_e(t){console.log(L.error("\u2717 ")+t)}function eB(t=60){console.log(L.dim("\u2500".repeat(t)))}function v_e(t){console.log(L.logo(t)),eB(t.length)}function k_e(t){return L.thinking(`[${t}]`)}function zf(t,e){if(Bf())return XU(t,e);let r=process.env.HOME??process.env.USERPROFILE??"",n=t;return r&&t.startsWith(r)&&(n="~"+t.slice(r.length)),e&&(n+=`:${e}`),L.filePath(n)}function A_e(t){return L.code(t)}function D_e(){return process.stdout.columns||80}function I_e(t,e=40){let r=process.env.HOME??process.env.USERPROFILE??"",n=t;if(r&&t.startsWith(r)&&(n="~"+t.slice(r.length)),n.length<=e)return n;let s=n.split("/").filter(i=>i.length>0);if(s.length>=2){let i=s.slice(-2).join("/");if(i.length<=e-4)return".../"+i}return".../"+(s[s.length-1]||s[s.length-2])}function R_e(t){return t.replace(/\x1b\[[0-9;]*m/g,"").length}function N_e(t,e){let r=R_e(t),n=Math.max(0,e-r);return t+" ".repeat(n)}function O_e(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return r>0?`${e}m ${r}s`:`${e}m`}function lA(t){return t>=1e3?`${(t/1e3).toFixed(1)}K`:t.toString()}function cA(t){let e=D_e(),r=Math.min(e-2,76),n=r-4,s=(g,_)=>{let E=g.replace(/\x1b\[[0-9;]*m/g,"").length;return g+" ".repeat(Math.max(0,_-E))},o=g=>L.border("\u2502")+" "+s(g,n)+" "+L.border("\u2502"),i=(g,_,E,y)=>{let T=Math.floor(n/2),w=L.dim(g.padEnd(15))+_,C=L.dim(E.padEnd(15))+y;return o(s(w,T)+C)},a=O_e(t.durationSeconds),l=lA(t.tokensIn),c=lA(t.tokensOut),u=`$${t.totalCost.toFixed(4)}`,d=t.cloud?`\u2601\uFE0F Cloud \xB7 ${t.model}`:`${t.provider}/${t.model.replace("claude-","").replace("-latest","")}`;console.log(""),console.log(L.border("\u250C"+"\u2500".repeat(r-2)+"\u2510")),console.log(o(L.logo("Session complete. \u{1FABC}"))),console.log(L.border("\u251C"+"\u2500".repeat(r-2)+"\u2524")),console.log(o(L.logo("Session Summary"))),console.log(o(L.dim("\u2500".repeat(15)))),console.log(i("Duration",a,"Tool Calls",t.toolCalls.toString())),console.log(i("Turns",t.turns.toString(),"Files Modified",t.filesModified.toString())),console.log(o("")),console.log(o(L.logo("Token Usage"))),console.log(o(L.dim("\u2500".repeat(11)))),console.log(i("Input",l,"Output",c));let p=t.cachedTokens??0;if(p>0){let g=Math.min(100,Math.round(100*p/Math.max(1,t.tokensIn)));console.log(o(L.dim("Cached".padEnd(15))+`${lA(p)} (${g}%)`))}let f=t.cacheSavings??0,h=f>0?L.dim(` \xB7 saved ~$${f.toFixed(4)} by prompt caching`):"";console.log(o(L.dim("Cost".padEnd(15))+u+h)),console.log(o("")),console.log(o(L.dim("Model: ")+L.model(d))),console.log(L.border("\u2514"+"\u2500".repeat(r-2)+"\u2518")),console.log("")}var Wl,L,ZU,Zt=D(()=>{"use strict";Se();JU();dt();Wl="0.17.27",L={get logo(){return q().accent.bold},get prompt(){return q().accent.bold},get model(){return q().accent},get success(){return q().success},get warning(){return q().warning},get error(){return q().error},get thinking(){return q().dim},get filePath(){return q().filePath},get code(){return q().code},get muted(){return q().muted},get dim(){return q().dim},get safe(){return q().success},get risky(){return q().warning},get destructive(){return q().error},get border(){return q().accent},get bannerBorder(){return q().accent}};ZU=!1});var is,sd,uA=D(()=>{"use strict";is={maxConcurrent:5,maxIterations:100,timeout:3e5,autoBackgroundTimeout:12e4,compressionLevel:"medium",permissionMode:"default"},sd={maxConcurrent:3,timeout:30*60*1e3,permissionMode:"dontAsk"}});var S1,dA=D(()=>{"use strict";S1=`You are an expert codebase explorer. Your task is to efficiently explore and understand codebases.
208
208
 
209
209
  ## Core Capabilities
210
210
  You have access to these tools for codebase exploration:
@@ -3399,7 +3399,7 @@ Your answer (directly addressing the user's request):`,a=`${n}/v0/execute`,l={"C
3399
3399
  `}else{let y=bP(E,l.toolName);y?d+=y+`
3400
3400
  `:d+=JSON.stringify(_,null,2)+`
3401
3401
  `}}else d+=String(_)+`
3402
- `;else if(u.content){let _=bP(u.content,l.toolName);_?d=_:d=JSON.stringify(u.content,null,2)}let p=d.trim(),f=l.inputTokens||0,h=l.outputTokens||0,g=l.cost||0;if(g4e(t)&&p){s?.("Interpreting results..."),j(`LocalMCPExecutor: User request needs interpretation: "${t}"`);let _=await h4e(t,l.toolName,p,e,r,n);_&&(p=_,j("LocalMCPExecutor: Result interpreted successfully"))}return{success:!0,result:p,metadata:{toolName:l.toolName,serverName:u.serverName,inputTokens:f,outputTokens:h,cost:g,model:l.model}}}finally{await o.shutdown()}}var _4e,ew,U_=D(()=>{"use strict";un();yP();va();SP();Jl();Ao();at();_4e=8e3,ew=class{connections=new Map;toolToServer=new Map;initialized=!1;configManager;connectionManager=new F_;projectServers={};gate;constructor(){this.configManager=new Jt}setPermissionGate(e){this.gate=e}setProjectServers(e){this.projectServers={...e}}resolveServerConfig(e){let r=this.configManager.loadConfig().mcpServers?.[e];return r?r.enabled===!1?void 0:r:Object.hasOwn(this.projectServers,e)?this.projectServers[e]:void 0}async guardedConnect(e,r){let n=r._projectTrust;if(n&&!dd(n.projectRoot,"mcp",n.hash))throw new Error("unapproved project server");let s=r.timeout??_4e;await this.withTimeout(this.connectToServer(e,r),s)}async initialize(){if(this.initialized)return!0;try{let r=this.configManager.loadConfig().mcpServers||{};j(`LocalMCPExecutor: Initializing with ${Object.keys(r).length} servers`);let n=Object.entries(r).filter(([o,i])=>i.enabled===!1?(j(`LocalMCPExecutor: Skipping disabled server: ${o}`),!1):!0);for(let[o,i]of Object.entries(this.projectServers))r[o]||n.push([o,i]);for(let[o]of n)this.connectionManager.register(o);let s=n.map(([o,i])=>this.connectionManager.getOrConnect(o,()=>this.guardedConnect(o,i)));return await Promise.allSettled(s),this.initialized=!0,j(`LocalMCPExecutor: Initialized with ${this.connections.size} connections`),this.connections.size>0}catch(e){return j(`LocalMCPExecutor: Failed to initialize: ${e}`),!1}}async connectSingleServer(e){let r=this.connectionManager.getState(e);if(!r)return!1;if(r.status==="connected")return!0;let n=this.resolveServerConfig(e);return n?(await this.connectionManager.getOrConnect(e,()=>this.guardedConnect(e,n)),this.connectionManager.getStatus(e)==="connected"):!1}withTimeout(e,r){let n=new Promise((s,o)=>{setTimeout(()=>o(new Error(`Connection timed out after ${r}ms`)),r).unref()});return Promise.race([e,n])}async connectToServer(e,r){let n=r.command,s=Array.isArray(r.args)?r.args:[r.args||""],o={...process.env};if(r.env)for(let[p,f]of Object.entries(r.env)){let h=String(f).replace(/\$\{(\w+)\}/g,(g,_)=>process.env[_]||"");o[p]=h}j(`LocalMCPExecutor: Connecting to ${e}`),j(`LocalMCPExecutor: Command: ${n}`),j(`LocalMCPExecutor: Args: ${JSON.stringify(s)}`);let i=new d4e({command:n,args:s,env:o,stderr:"pipe"}),a=new u4e({name:"aii-cli",version:"0.1.0"},{capabilities:{}});await a.connect(i);let l=await a.listTools(),{tools:c,anyModified:u}=Uu(l.tools,e),d=c;u&&console.warn(Ly(e)),this.connections.set(e,{client:a,transport:i,tools:d});for(let p of d)this.toolToServer.set(p.name,e);this.connectionManager.setConnected(e,d),j(`LocalMCPExecutor: Connected to ${e}: discovered ${d.length} tools`)}getAllTools(){let e=[];for(let r of this.connections.values())e.push(...r.tools);return e}async selectTool(e,r,n,s){let o=this.getAllTools();if(o.length===0)return{success:!1,error:"No MCP tools available"};let i=o.map(u=>Ol(u)),a=`${r}/v0/mcp/select-tool`,l={"Content-Type":"application/json"};n&&(l.Authorization=`Bearer ${n}`);let c={user_request:e,tools:i};s&&(c.model=s),j(`LocalMCPExecutor: Calling ${a} for tool selection`);try{let u=await fetch(a,{method:"POST",headers:l,body:JSON.stringify(c)});if(!u.ok){let p=await u.text();return j(`LocalMCPExecutor: Server returned ${u.status}: ${p}`),{success:!1,error:`Server error: ${u.status}`}}let d=await u.json();return d.success?{success:!0,toolName:d.tool_name,arguments:d.arguments,confidence:d.confidence,reasoning:d.reasoning,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cost:d.cost,model:d.model}:{success:!1,error:d.error,reasoning:d.reasoning}}catch(u){return j(`LocalMCPExecutor: Tool selection request failed: ${u}`),{success:!1,error:String(u)}}}async executeTool(e,r,n){let s;if(n!==void 0){s=n;let u=this.connections.get(s);if(!u)return{success:!1,error:`Server '${s}' not connected`};if(!u.tools.some(d=>d.name===e))return{success:!1,serverName:s,error:`Tool '${e}' not found on server '${s}'`}}else{let u=this.toolToServer.get(e);if(!u)return{success:!1,error:`Tool '${e}' not found in any connected MCP server`};s=u}let o=this.connections.get(s);if(!o)return{success:!1,error:`Server '${s}' not connected`};j(`LocalMCPExecutor: Executing tool '${e}' on server '${s}'`);let i=`mcp__${s}__${e}`,a=`${s} \xB7 ${Object.hasOwn(this.projectServers,s)?"project":"global"} server`;if(!this.gate)return{success:!1,serverName:s,error:"MCP permission gate not configured (fail-closed)"};let l=await this.gate.authorize(i,s,r,a);if(!l.ok)return l.kind==="denied"&&await this.gate.afterCall(i,r,{success:!1,error:l.error},0),{success:!1,serverName:s,error:l.error};let c=Date.now();try{let u=await Promise.race([o.client.callTool({name:e,arguments:r}),new Promise((p,f)=>setTimeout(()=>f(new Error(`Tool '${e}' timed out after 30 seconds`)),3e4))]);j(`LocalMCPExecutor: Tool '${e}' result: isError=${u.isError}`);let d;if(u.isError){let p=Array.isArray(u.content)?u.content:[u.content];for(let f of p)if(f&&typeof f=="object"&&"text"in f){d=String(f.text);break}d=d||"Tool returned error (no details provided)",j(`LocalMCPExecutor: Tool '${e}' error: ${d}`)}return await this.gate.afterCall(i,r,{success:!u.isError,output:B_(u.content),error:d},Date.now()-c),{success:!u.isError,content:u.content,serverName:s,error:d}}catch(u){return j(`LocalMCPExecutor: Error executing tool '${e}': ${u}`),await this.gate.afterCall(i,r,{success:!1,error:String(u)},Date.now()-c),{success:!1,error:String(u),serverName:s}}}async shutdown(){j("LocalMCPExecutor: Shutting down");let e=[];for(let[r,n]of this.connections)e.push((async()=>{let s=n.transport.pid??null;try{await Z0(n.client,s),j(`LocalMCPExecutor: Closed connection to ${r}`)}catch(o){j(`LocalMCPExecutor: Error closing ${r}: ${o}`)}})());await Promise.race([Promise.all(e),new Promise(r=>setTimeout(r,5e3).unref())]),this.connections.clear(),this.toolToServer.clear(),this.initialized=!1,j("LocalMCPExecutor: Shutdown complete")}isInitialized(){return this.initialized}getConnectionCount(){return this.connections.size}}});import{EventEmitter as y4e}from"events";import{execSync as S4e}from"child_process";function b4e(t){try{return S4e("git rev-parse --abbrev-ref HEAD 2>/dev/null",{encoding:"utf-8",cwd:t}).trim()||void 0}catch{return}}function nie(t,e){let r=T4e[t];if(!r)return e;let n={};for(let[s,o]of Object.entries(e)){let i=r[s]??s;n[i]=o}return n}function io(t,e,r){return new tw(t,e,r)}var rie,T4e,tw,wP=D(()=>{"use strict";Se();nB();w1();iB();ko();Oc();GD();eS();Ti();Zt();ir();TT();tl();AT();Og();un();SJ();bJ();RT();at();nw();Xa();qb();Ci();Xte();Zte();vd();tre();Wc();wt();Doe();wc();Noe();rie={read_file:"Read",write_file:"Write",edit_file:"Edit",list_files:"Glob",search_code:"Grep",run_command:"Bash",get_file_info:"Read",web_search:"WebSearch",web_fetch:"WebFetch",skill:"Skill",task:"Task",todo_write:"TodoWrite",task_update:"TaskUpdate",task_list:"TaskList",ask_user_question:"AskUserQuestion"},T4e={read_file:{path:"file_path",file_path:"file_path",filename:"file_path"},list_files:{path:"path",pattern:"pattern",directory:"path"},search_code:{pattern:"pattern",path:"path",query:"pattern",directory:"path"},write_file:{path:"file_path",file_path:"file_path",filename:"file_path",content:"content",text:"content",data:"content"},run_command:{command:"command",cmd:"command",shell_command:"command"},skill:{skill:"skill",name:"skill",skill_name:"skill",args:"args",arguments:"args"},task:{subagent:"subagent",agent:"subagent",agent_name:"subagent",prompt:"prompt",task:"prompt",description:"prompt",run_in_background:"run_in_background",background:"run_in_background"}};tw=class extends y4e{state="idle";client;toolRegistry;config;interrupted=!1;portalPermissionSink;lastIterationInfo=null;toolPending=0;pauseRequested=!1;escHandler=null;activeToolAborts=new Set;skipNextInitialDraw=!1;mcpExecutor=null;activeMcpTools=[];deferralNoticeShown=!1;loopMode=!1;bgShellSpawnsThisTurn=0;stall=new IT;toolResultRenderer=new rl;middlewareChain=[];currentIteration=0;inIdleSuspendLoop=!1;backgroundCompletionQueue=[];constructor(e,r,n){super(),this.config={...oB,...e},this.toolRegistry=r??ys(),this.client=n??Ut()}setMcpExecutor(e){this.mcpExecutor=e}setPortalPermissionSink(e){this.portalPermissionSink=e}getMCPExecutor(){return this.mcpExecutor}onBackgroundAgentComplete(e,r,n,s,o){this.backgroundCompletionQueue.push({agentId:e,agentName:r,result:n,success:s,duration:o,kind:"subagent"})}onBackgroundShellComplete(e,r){this.backgroundCompletionQueue.push({agentId:e.id,agentName:e.label,result:r.output,success:r.success,duration:r.durationMs,kind:"shell",exitCode:r.exitCode,killedByLifetime:r.killedByLifetime,maxLifetimeMs:r.maxLifetimeMs})}injectBackgroundNotifications(e){if(this.backgroundCompletionQueue.length===0)return;let r=this.backgroundCompletionQueue.splice(0);for(let n of r)this.logBackgroundCompletion(n),e.messages.push({role:"user",content:cx(n),timestamp:Date.now()})}consumeBackgroundCompletions(e){if(this.backgroundCompletionQueue.length===0)return null;let r=this.backgroundCompletionQueue.splice(0);for(let s of r)this.logBackgroundCompletion(s);let n=ere(r);return e.messages.push({role:"user",content:n,timestamp:Date.now()}),n}logBackgroundCompletion(e){let r=Fa(),n=e.duration?`${(e.duration/1e3).toFixed(1)}s`:"unknown",s=e.kind==="shell",o=s?"job":"agent",i=s?`exited with code ${e.exitCode??"unknown"}`:e.success?"completed successfully":"failed",a=e.success?m.green("\u2713"):m.red("\u2717");r.log(""),r.log(` ${a} ${m.bold(`Background ${o} "${e.agentName}"`)} ${i} in ${m.dim(n)}`)}getState(){return this.state}isToolPending(){return this.toolPending>0}isPauseRequested(){return this.pauseRequested}markPauseRequested(){this.pauseRequested=!0}markSkipInitialDraw(){this.skipNextInitialDraw=!0}setLoopMode(e){this.loopMode=e,au()&&Ne().setLoopMode(e)}use(e){this.middlewareChain.push(e)}clearMiddleware(){this.middlewareChain=[]}setCurrentIteration(e){this.currentIteration=e}suspendStallDetection(){this.stall.suspend()}resumeStallDetection(){this.stall.resume()}ping(){this.client.ping()}setState(e){this.state=e,this.emit("stateChange",e)}interrupt(){this.interrupted=!0;for(let e of this.activeToolAborts)e.abort();this.client.disconnect()}async requestPause(){this.interrupted=!0,await this.client.requestGracefulClose(),this.emit("paused")}resetInterrupt(){this.interrupted=!1,this.pauseRequested=!1}isInterrupted(){return this.interrupted}buildTranscriptContent(e,r){if(e.length===0)return r;let n=[];for(let s of e)switch(s.type){case"text":s.content.trim()&&n.push(s.content);break;case"tool_call":{let o=s.toolName??"unknown",i=s.toolArgs??{},a=Object.entries(i).slice(0,3).map(([l,c])=>{let u=typeof c=="string"?c.slice(0,100):JSON.stringify(c).slice(0,100);return`${l}=${u}`}).join(", ");n.push(`
3402
+ `;else if(u.content){let _=bP(u.content,l.toolName);_?d=_:d=JSON.stringify(u.content,null,2)}let p=d.trim(),f=l.inputTokens||0,h=l.outputTokens||0,g=l.cost||0;if(g4e(t)&&p){s?.("Interpreting results..."),j(`LocalMCPExecutor: User request needs interpretation: "${t}"`);let _=await h4e(t,l.toolName,p,e,r,n);_&&(p=_,j("LocalMCPExecutor: Result interpreted successfully"))}return{success:!0,result:p,metadata:{toolName:l.toolName,serverName:u.serverName,inputTokens:f,outputTokens:h,cost:g,model:l.model}}}finally{await o.shutdown()}}var _4e,ew,U_=D(()=>{"use strict";un();yP();va();SP();Jl();Ao();at();_4e=8e3,ew=class{connections=new Map;toolToServer=new Map;initialized=!1;configManager;connectionManager=new F_;projectServers={};gate;constructor(){this.configManager=new Jt}setPermissionGate(e){this.gate=e}setProjectServers(e){this.projectServers={...e}}resolveServerConfig(e){let r=this.configManager.loadConfig().mcpServers?.[e];return r?r.enabled===!1?void 0:r:Object.hasOwn(this.projectServers,e)?this.projectServers[e]:void 0}async guardedConnect(e,r){let n=r._projectTrust;if(n&&!dd(n.projectRoot,"mcp",n.hash))throw new Error("unapproved project server");let s=r.timeout??_4e;await this.withTimeout(this.connectToServer(e,r),s)}async initialize(){if(this.initialized)return!0;try{let r=this.configManager.loadConfig().mcpServers||{};j(`LocalMCPExecutor: Initializing with ${Object.keys(r).length} servers`);let n=Object.entries(r).filter(([o,i])=>i.enabled===!1?(j(`LocalMCPExecutor: Skipping disabled server: ${o}`),!1):!0);for(let[o,i]of Object.entries(this.projectServers))r[o]||n.push([o,i]);for(let[o]of n)this.connectionManager.register(o);let s=n.map(([o,i])=>this.connectionManager.getOrConnect(o,()=>this.guardedConnect(o,i)));return await Promise.allSettled(s),this.initialized=!0,j(`LocalMCPExecutor: Initialized with ${this.connections.size} connections`),this.connections.size>0}catch(e){return j(`LocalMCPExecutor: Failed to initialize: ${e}`),!1}}async connectSingleServer(e){let r=this.connectionManager.getState(e);if(!r)return!1;if(r.status==="connected")return!0;let n=this.resolveServerConfig(e);return n?(await this.connectionManager.getOrConnect(e,()=>this.guardedConnect(e,n)),this.connectionManager.getStatus(e)==="connected"):!1}withTimeout(e,r){let n=new Promise((s,o)=>{setTimeout(()=>o(new Error(`Connection timed out after ${r}ms`)),r).unref()});return Promise.race([e,n])}async connectToServer(e,r){let n=r.command,s=Array.isArray(r.args)?r.args:[r.args||""],o={...process.env};if(r.env)for(let[p,f]of Object.entries(r.env)){let h=String(f).replace(/\$\{(\w+)\}/g,(g,_)=>process.env[_]||"");o[p]=h}j(`LocalMCPExecutor: Connecting to ${e}`),j(`LocalMCPExecutor: Command: ${n}`),j(`LocalMCPExecutor: Args: ${JSON.stringify(s)}`);let i=new d4e({command:n,args:s,env:o,stderr:"pipe"}),a=new u4e({name:"aii-cli",version:"0.1.0"},{capabilities:{}});await a.connect(i);let l=await a.listTools(),{tools:c,anyModified:u}=Uu(l.tools,e),d=c;u&&console.warn(Ly(e)),this.connections.set(e,{client:a,transport:i,tools:d});for(let p of d)this.toolToServer.set(p.name,e);this.connectionManager.setConnected(e,d),j(`LocalMCPExecutor: Connected to ${e}: discovered ${d.length} tools`)}getAllTools(){let e=[];for(let r of this.connections.values())e.push(...r.tools);return e}async selectTool(e,r,n,s){let o=this.getAllTools();if(o.length===0)return{success:!1,error:"No MCP tools available"};let i=o.map(u=>Ol(u)),a=`${r}/v0/mcp/select-tool`,l={"Content-Type":"application/json"};n&&(l.Authorization=`Bearer ${n}`);let c={user_request:e,tools:i};s&&(c.model=s),j(`LocalMCPExecutor: Calling ${a} for tool selection`);try{let u=await fetch(a,{method:"POST",headers:l,body:JSON.stringify(c)});if(!u.ok){let p=await u.text();return j(`LocalMCPExecutor: Server returned ${u.status}: ${p}`),{success:!1,error:`Server error: ${u.status}`}}let d=await u.json();return d.success?{success:!0,toolName:d.tool_name,arguments:d.arguments,confidence:d.confidence,reasoning:d.reasoning,inputTokens:d.input_tokens,outputTokens:d.output_tokens,cost:d.cost,model:d.model}:{success:!1,error:d.error,reasoning:d.reasoning}}catch(u){return j(`LocalMCPExecutor: Tool selection request failed: ${u}`),{success:!1,error:String(u)}}}async executeTool(e,r,n){let s;if(n!==void 0){s=n;let u=this.connections.get(s);if(!u)return{success:!1,error:`Server '${s}' not connected`};if(!u.tools.some(d=>d.name===e))return{success:!1,serverName:s,error:`Tool '${e}' not found on server '${s}'`}}else{let u=this.toolToServer.get(e);if(!u)return{success:!1,error:`Tool '${e}' not found in any connected MCP server`};s=u}let o=this.connections.get(s);if(!o)return{success:!1,error:`Server '${s}' not connected`};j(`LocalMCPExecutor: Executing tool '${e}' on server '${s}'`);let i=`mcp__${s}__${e}`,a=`${s} \xB7 ${Object.hasOwn(this.projectServers,s)?"project":"global"} server`;if(!this.gate)return{success:!1,serverName:s,error:"MCP permission gate not configured (fail-closed)"};let l=await this.gate.authorize(i,s,r,a);if(!l.ok)return l.kind==="denied"&&await this.gate.afterCall(i,r,{success:!1,error:l.error},0),{success:!1,serverName:s,error:l.error};let c=Date.now();try{let u=await Promise.race([o.client.callTool({name:e,arguments:r}),new Promise((p,f)=>setTimeout(()=>f(new Error(`Tool '${e}' timed out after 30 seconds`)),3e4))]);j(`LocalMCPExecutor: Tool '${e}' result: isError=${u.isError}`);let d;if(u.isError){let p=Array.isArray(u.content)?u.content:[u.content];for(let f of p)if(f&&typeof f=="object"&&"text"in f){d=String(f.text);break}d=d||"Tool returned error (no details provided)",j(`LocalMCPExecutor: Tool '${e}' error: ${d}`)}return await this.gate.afterCall(i,r,{success:!u.isError,output:B_(u.content),error:d},Date.now()-c),{success:!u.isError,content:u.content,serverName:s,error:d}}catch(u){return j(`LocalMCPExecutor: Error executing tool '${e}': ${u}`),await this.gate.afterCall(i,r,{success:!1,error:String(u)},Date.now()-c),{success:!1,error:String(u),serverName:s}}}async shutdown(){j("LocalMCPExecutor: Shutting down");let e=[];for(let[r,n]of this.connections)e.push((async()=>{let s=n.transport.pid??null;try{await Z0(n.client,s),j(`LocalMCPExecutor: Closed connection to ${r}`)}catch(o){j(`LocalMCPExecutor: Error closing ${r}: ${o}`)}})());await Promise.race([Promise.all(e),new Promise(r=>setTimeout(r,5e3).unref())]),this.connections.clear(),this.toolToServer.clear(),this.initialized=!1,j("LocalMCPExecutor: Shutdown complete")}isInitialized(){return this.initialized}getConnectionCount(){return this.connections.size}}});import{EventEmitter as y4e}from"events";import{execSync as S4e}from"child_process";function b4e(t){try{return S4e("git rev-parse --abbrev-ref HEAD 2>/dev/null",{encoding:"utf-8",cwd:t}).trim()||void 0}catch{return}}function nie(t,e){let r=T4e[t];if(!r)return e;let n={};for(let[s,o]of Object.entries(e)){let i=r[s]??s;n[i]=o}return n}function io(t,e,r){return new tw(t,e,r)}var rie,T4e,tw,wP=D(()=>{"use strict";Se();nB();w1();iB();ko();Oc();GD();eS();Ti();Zt();ir();TT();tl();AT();Og();un();SJ();bJ();RT();at();nw();Xa();qb();Ci();Xte();Zte();vd();tre();Wc();wt();Doe();wc();Noe();rie={read_file:"Read",write_file:"Write",edit_file:"Edit",list_files:"Glob",search_code:"Grep",run_command:"Bash",get_file_info:"Read",web_search:"WebSearch",web_fetch:"WebFetch",skill:"Skill",task:"Task",todo_write:"TodoWrite",task_update:"TaskUpdate",task_list:"TaskList",ask_user_question:"AskUserQuestion"},T4e={read_file:{path:"file_path",file_path:"file_path",filename:"file_path"},list_files:{path:"path",pattern:"pattern",directory:"path"},search_code:{pattern:"pattern",path:"path",query:"pattern",directory:"path"},write_file:{path:"file_path",file_path:"file_path",filename:"file_path",content:"content",text:"content",data:"content"},run_command:{command:"command",cmd:"command",shell_command:"command"},skill:{skill:"skill",name:"skill",skill_name:"skill",args:"args",arguments:"args"},task:{subagent:"subagent",agent:"subagent",agent_name:"subagent",prompt:"prompt",task:"prompt",description:"prompt",run_in_background:"run_in_background",background:"run_in_background"}};tw=class extends y4e{state="idle";client;toolRegistry;config;interrupted=!1;portalPermissionSink;lastIterationInfo=null;toolPending=0;pauseRequested=!1;escHandler=null;activeToolAborts=new Set;skipNextInitialDraw=!1;mcpExecutor=null;activeMcpTools=[];deferralNoticeShown=!1;loopMode=!1;bgShellSpawnsThisTurn=0;stall=new IT;toolResultRenderer=new rl;middlewareChain=[];currentIteration=0;inIdleSuspendLoop=!1;backgroundCompletionQueue=[];constructor(e,r,n){super(),this.config={...oB,...e},this.toolRegistry=r??ys(),this.client=n??Ut()}setMcpExecutor(e){this.mcpExecutor=e}setPortalPermissionSink(e){this.portalPermissionSink=e}formatToolAction(e,r){try{return this.toolRegistry.get(e)?.formatAction(r)??""}catch{return""}}getMCPExecutor(){return this.mcpExecutor}onBackgroundAgentComplete(e,r,n,s,o){this.backgroundCompletionQueue.push({agentId:e,agentName:r,result:n,success:s,duration:o,kind:"subagent"})}onBackgroundShellComplete(e,r){this.backgroundCompletionQueue.push({agentId:e.id,agentName:e.label,result:r.output,success:r.success,duration:r.durationMs,kind:"shell",exitCode:r.exitCode,killedByLifetime:r.killedByLifetime,maxLifetimeMs:r.maxLifetimeMs})}injectBackgroundNotifications(e){if(this.backgroundCompletionQueue.length===0)return;let r=this.backgroundCompletionQueue.splice(0);for(let n of r)this.logBackgroundCompletion(n),e.messages.push({role:"user",content:cx(n),timestamp:Date.now()})}consumeBackgroundCompletions(e){if(this.backgroundCompletionQueue.length===0)return null;let r=this.backgroundCompletionQueue.splice(0);for(let s of r)this.logBackgroundCompletion(s);let n=ere(r);return e.messages.push({role:"user",content:n,timestamp:Date.now()}),n}logBackgroundCompletion(e){let r=Fa(),n=e.duration?`${(e.duration/1e3).toFixed(1)}s`:"unknown",s=e.kind==="shell",o=s?"job":"agent",i=s?`exited with code ${e.exitCode??"unknown"}`:e.success?"completed successfully":"failed",a=e.success?m.green("\u2713"):m.red("\u2717");r.log(""),r.log(` ${a} ${m.bold(`Background ${o} "${e.agentName}"`)} ${i} in ${m.dim(n)}`)}getState(){return this.state}isToolPending(){return this.toolPending>0}isPauseRequested(){return this.pauseRequested}markPauseRequested(){this.pauseRequested=!0}markSkipInitialDraw(){this.skipNextInitialDraw=!0}setLoopMode(e){this.loopMode=e,au()&&Ne().setLoopMode(e)}use(e){this.middlewareChain.push(e)}clearMiddleware(){this.middlewareChain=[]}setCurrentIteration(e){this.currentIteration=e}suspendStallDetection(){this.stall.suspend()}resumeStallDetection(){this.stall.resume()}ping(){this.client.ping()}setState(e){this.state=e,this.emit("stateChange",e)}interrupt(){this.interrupted=!0;for(let e of this.activeToolAborts)e.abort();this.client.disconnect()}async requestPause(){this.interrupted=!0,await this.client.requestGracefulClose(),this.emit("paused")}resetInterrupt(){this.interrupted=!1,this.pauseRequested=!1}isInterrupted(){return this.interrupted}buildTranscriptContent(e,r){if(e.length===0)return r;let n=[];for(let s of e)switch(s.type){case"text":s.content.trim()&&n.push(s.content);break;case"tool_call":{let o=s.toolName??"unknown",i=s.toolArgs??{},a=Object.entries(i).slice(0,3).map(([l,c])=>{let u=typeof c=="string"?c.slice(0,100):JSON.stringify(c).slice(0,100);return`${l}=${u}`}).join(", ");n.push(`
3403
3403
  [Tool Call: ${o}(${a})]
3404
3404
  `);break}case"tool_result":{let o=s.toolName??"unknown",a=s.success??!0?"success":"error",l=s.content.length>2e3?s.content.slice(0,2e3)+`
3405
3405
  ... (truncated, ${s.content.length-2e3} more chars)`:s.content;n.push(`[Tool Result: ${o} (${a})]
@@ -3511,7 +3511,7 @@ To enter: cd ${s.path}`);break}case"list":{let s=await gl(n);if(s.length===0){co
3511
3511
  `);for(let o of s){let i=[];o.hasChanges&&i.push("modified"),o.hasCommits&&i.push("commits ahead");let a=i.length>0?` [${i.join(", ")}]`:"";console.log(` ${o.name}${a}`),console.log(` Branch: ${o.branch}`),console.log(` Path: ${o.path}`)}break}case"remove":{r||(console.error("Usage: aii worktree remove <name>"),process.exit(1));let s=await _l(r,n);switch(s.action){case"auto-removed":console.log(`Worktree '${r}' removed (no changes).`);break;case"removed":console.log(`Worktree '${r}' removed.`);break;case"kept":console.log(`Worktree '${r}' kept (${s.reason}).`);break}break}case"clean":{let{removed:s,kept:o}=await lw(n);s.length>0&&console.log(`Removed ${s.length} clean worktree(s): ${s.join(", ")}`),o.length>0&&console.log(`Kept ${o.length} worktree(s) with changes: ${o.join(", ")}`),s.length===0&&o.length===0&&console.log("No worktrees to clean.");break}default:console.error(`Unknown worktree action: ${e}`),console.error("Available: create, list, remove, clean"),process.exit(1)}}var Dle=D(()=>{"use strict";El()});var Rle={};ye(Rle,{handleSoul:()=>IGe});async function IGe(t,e){console.warn(m.yellow("\u26A0 'aii soul' is deprecated. Use 'aii persona' instead."));let r=t.subcommand??t.args[0]??"show";switch(r){case"help":await Ile(e);break;case"switch":{let n=t.subcommand?t.args[0]:t.args[1];n||(console.error(m.red("Usage: aii soul switch <name>")),console.error(m.gray(" Examples: aii soul switch doer")),console.error(m.gray(" aii soul switch clawsouls/academic-writer")),process.exit(1)),await RGe(n,e);break}case"show":{let s=(await e.load()).soul??"thinker",o=jo(s);console.log(m.bold("Active soul:"),`${o.owner}/${o.name}`),s!==`${o.owner}/${o.name}`&&console.log(m.gray(` (shorthand: ${s})`));break}default:console.error(m.red(`Unknown soul action: ${r}`)),await Ile(e),process.exit(1)}}async function Ile(t){let e=["thinker","doer","coder"],r="thinker";try{r=(await t.load()).soul??"thinker"}catch{}console.log(""),console.log(m.yellow(" \u26A0 Soul commands are deprecated. Use persona commands instead.")),console.log(L.logo(" Soul System")),console.log(""),console.log(` Active soul: ${L.model(r)}`),console.log(""),console.log(m.yellow(" BUILT-IN SOULS:"));for(let n of e){let s=n===r?m.green("\u25BA"):" ",o=n==="thinker"?"Patient and collaborative \u2014 thinks out loud, walks through reasoning, and helps you understand the why, not just the what":n==="doer"?"Direct and efficient \u2014 leads with the answer, says it once, says it right, and every sentence earns its place":"Your pair-programming partner \u2014 reads the codebase, references specific lines and symbols, and explains what changed and why";console.log(` ${s} ${L.model(n.padEnd(10))} ${o}`)}console.log(""),console.log(m.yellow(" USAGE:")),console.log(` ${m.green("aii soul")} Show this help`),console.log(` ${m.green("aii soul show")} Show active soul`),console.log(` ${m.green("aii soul switch <name>")} Switch to a different soul`),console.log(""),console.log(m.yellow(" EXAMPLES:")),console.log(m.dim(" aii soul show")),console.log(m.dim(" aii soul switch doer")),console.log(m.dim(" aii soul switch thinker")),console.log(m.dim(" aii soul switch coder")),console.log("")}async function RGe(t,e){let r=id[t]??t;console.warn(m.yellow(`\u26A0 'aii soul switch' is deprecated. Use 'aii persona use ${r}'`)),/^[a-z0-9/-]+$/.test(t)||(console.error(m.red(`Invalid soul name: "${t}"`)),console.error(m.gray("Names must be lowercase alphanumeric, hyphens, and optional owner/ prefix")),process.exit(1)),await e.load(),await e.set("soul",t);let n=jo(t);console.log(m.green(`Switched soul to: ${n.owner}/${n.name}`)),console.log(m.gray("Takes effect on next session."))}var Nle=D(()=>{"use strict";Se();ws();Zt();qn()});async function cF(t,e,r=fetch,n=1e4){let s=Ff(t),o=new AbortController,i=setTimeout(()=>o.abort(),n),a,l,c;try{let d=await r(`${s}/v1/credits/balance`,{headers:{Authorization:`Bearer ${e}`},signal:o.signal});a=d.ok,l=d.status,c=await d.text()}catch(d){throw d.name==="AbortError"?new Error(Rl(new URL(s).hostname)):d}finally{clearTimeout(i)}if(!a)throw l===401||l===403?new xm(l):new Error(`credits balance request failed (HTTP ${l})`);let u;try{u=JSON.parse(c)}catch{throw new Error("credits balance response was not valid JSON")}return{balance:typeof u.balance=="number"?u.balance:0,tier:typeof u.tier=="string"?u.tier:"unknown"}}var xm,Ole=D(()=>{"use strict";An();rd();xm=class extends Error{status;constructor(e){super(`Aii Cloud rejected the saved sign-in (HTTP ${e})`),this.status=e,this.name="CloudAuthError"}}});import{randomUUID as NGe}from"node:crypto";import{existsSync as xle,mkdirSync as OGe,readFileSync as xGe,writeFileSync as MGe,chmodSync as PGe}from"node:fs";import{homedir as LGe,hostname as FGe}from"node:os";import{join as Mle}from"node:path";function Ple(t={}){let e=t.configDir??Mle(LGe(),".aii"),r=Mle(e,$Ge),n=t.hostname??FGe,s=t.platform??(()=>process.platform),o=t.randomId??NGe,i;try{if(xle(r)){let l=JSON.parse(xGe(r,"utf8"));typeof l.id=="string"&&l.id.trim()&&(i=l.id.trim())}}catch{}let a={id:i??o(),name:UGe(n),os:s()};try{xle(e)||OGe(e,{recursive:!0}),MGe(r,JSON.stringify(a,null,2),{mode:384}),PGe(r,384)}catch(l){t.warn?.(`device.json not persisted (${l.message}); using an ephemeral id this run`)}return a}function UGe(t){try{return Array.from(t().trim()).slice(0,64).join("")||"unknown-device"}catch{return"unknown-device"}}var $Ge,Lle=D(()=>{"use strict";$Ge="device.json"});import{mkdirSync as BGe,readFileSync as $le,unlinkSync as Ule,writeFileSync as GGe}from"node:fs";import{homedir as zGe}from"node:os";import{join as Fle}from"node:path";function jGe(t){try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function Ble(t={}){let e=t.configDir??Fle(zGe(),".aii"),r=t.pid??process.pid,n=t.isPidAlive??jGe,s=Fle(e,qGe),o=JSON.stringify({pid:r,started_at:new Date().toISOString()});BGe(e,{recursive:!0});for(let i=0;i<HGe;i++){try{return GGe(s,o,{mode:384,flag:"wx"}),YGe(s,r)}catch(c){if(c.code!=="EEXIST")throw c}let a,l;try{let c=JSON.parse($le(s,"utf8"));typeof c.pid=="number"&&(a=c.pid),typeof c.started_at=="string"&&(l=c.started_at)}catch{}if(a!==void 0&&a!==r&&n(a))throw new Mm(a,l,s);try{Ule(s)}catch{}}throw new Mm(-1,void 0,s)}function YGe(t,e){return()=>{try{JSON.parse($le(t,"utf8")).pid===e&&Ule(t)}catch{}}}var qGe,HGe,Mm,Gle=D(()=>{"use strict";qGe="connect.lock",HGe=3,Mm=class extends Error{holderPid;constructor(e,r,n){super(`aii cloud connect is already running on this machine (pid ${e}`+(r?`, since ${r}`:"")+`). Only one connection per device \u2014 stop the other one first. If NO other \`aii cloud connect\` is running, delete ${n} and retry.`),this.name="ConnectLockError",this.holderPid=e}}});function JGe(t){let e=t.replace(/\/+$/,""),r=new URL(e);if((r.protocol==="ws:"||r.protocol==="http:")&&!Lf(r.hostname))throw new Pm(`Refusing to send the cloud key over an insecure (${r.protocol.replace(":","")}://) connection to ${r.hostname} \u2014 use wss://.`);return`${e}/v1/agent/connect`}function ZGe(t){switch(t){case"device_owned_by_another":return"This device is registered to another Aii Cloud account. It cannot be reused.";case"bad_register":case"register_failed":return"Aii Cloud rejected the device registration. Try `aii cloud login` again.";default:return`Aii Cloud control error: ${t??"unknown"}`}}function eze(t){let e=/Unexpected server response: (401|403)/.exec(t.message);return e?new Pm("Aii Cloud rejected this sign-in (HTTP "+e[1]+"). Run `aii cloud login` to reconnect."):t}async function qle(t,e,r,n){let s=n.sleep??(d=>new Promise(p=>setTimeout(p,d))),o=n.random??Math.random,i=n.print??(d=>process.stdout.write(d+`
3512
3512
  `)),a=JGe(t),l=n.maxReconnects??Number.POSITIVE_INFINITY,c=zle,u=0;for(;!n.stopSignal?.aborted;){try{(await rze(a,e,r,n,i)).registered&&(c=zle)}catch(d){if(d instanceof Pm)throw i(` \u2717 ${d.message}`),d;i(` Aii Cloud connection dropped (${d.message}); reconnecting\u2026`)}if(n.stopSignal?.aborted||(u+=1,u>=l))return;await tze(s,c*(.5+o()*.5),n.stopSignal),c=Math.min(c*2,VGe)}}function tze(t,e,r){return r?r.aborted?Promise.resolve():new Promise(n=>{let s=()=>n();r.addEventListener("abort",s,{once:!0}),t(e).then(()=>{r.removeEventListener("abort",s),n()})}):t(e)}function rze(t,e,r,n,s){let o=n.WebSocketImpl??ss,i=n.now??(()=>Date.now());return new Promise((a,l)=>{let c=new o(t,{handshakeTimeout:n.handshakeTimeoutMs??15e3,headers:{Authorization:`Bearer ${e}`}}),u,d,p=!1,f=i(),h=!1,g=()=>_();function _(E){if(!h){h=!0,u&&clearInterval(u),d&&clearTimeout(d),n.stopSignal?.removeEventListener("abort",g);try{c.close()}catch{}E?l(E):a({registered:p})}}n.stopSignal?.addEventListener("abort",g,{once:!0}),c.on("open",()=>{let E={type:Su.register,device_id:r.id,name:r.name,os:r.os};n.localModels&&n.localModels.length>0&&(E.models=n.localModels),c.send(JSON.stringify(E)),d=setTimeout(()=>{p||_(new Error("registration timed out"))},KGe)}),c.on("pong",()=>{f=i()}),c.on("message",E=>{let y;try{y=JSON.parse(String(E))}catch{return}switch(y.type){case Su.registered:p=!0,d&&clearTimeout(d),f=i(),s(` \u2713 ${r.name} connected to Aii Cloud \u2014 waiting for tasks. (Ctrl+C to disconnect)`),u=setInterval(()=>{if(c.ping&&i()-f>QGe){_(new Error("connection unresponsive (no pong)"));return}try{c.send(JSON.stringify({type:Su.heartbeat,device_id:r.id})),c.ping?.()}catch{}},WGe);break;case Su.dispatch:{if(y.dispatch_id)try{c.send(JSON.stringify({type:Su.dispatchAck,dispatch_id:y.dispatch_id,device_id:r.id}))}catch(T){s(` \u2717 could not ack dispatch ${y.dispatch_id} (${T.message}); skipping run`);break}if(y.task_id&&y.prompt){s(` \u2192 Running dispatched task ${y.task_id}`);let T={taskId:y.task_id,prompt:y.prompt,deviceId:r.id,dispatchId:y.dispatch_id,model:y.model,sendUp:w=>{try{c.send(w)}catch{}}};(async()=>n.onDispatch(T))().catch(w=>{w!==null&&typeof w=="object"&&w.dispatchFailureReported||s(` \u2717 dispatched run failed: ${ea(String(w?.message??w),200)}`)})}break}case Su.permissionResolution:{(async()=>n.onPermissionResolution?.({taskId:y.task_id,requestId:y.request_id,decision:y.decision,source:y.source}))().catch(()=>{});break}case Su.error:_(XGe.has(y.error??"")?new Pm(ZGe(y.error)):new Error(y.error??"control error"));break}}),c.on("close",()=>_()),c.on("error",E=>_(eze(E??new Error("control socket error"))))})}var WGe,zle,VGe,KGe,QGe,Su,XGe,Pm,Hle=D(()=>{"use strict";u1();rd();lu();WGe=25e3,zle=1e3,VGe=3e4,KGe=15e3,QGe=8e4,Su={register:"agent_register",registered:"agent_registered",heartbeat:"agent_heartbeat",dispatch:"agent_dispatch",dispatchAck:"agent_dispatch_ack",error:"agent_error",permissionResolution:"permission_resolution"},XGe=new Set(["device_owned_by_another","bad_register","register_failed"]),Pm=class extends Error{constructor(e){super(e),this.name="FatalControlError"}}});function TE(t,e){let r=ea(t,Number.MAX_SAFE_INTEGER);return r.length>e?r.slice(0,e)+"\u2026":r}var nze,jle,sze,oze,oC,Yle=D(()=>{"use strict";Oc();lu();Zt();RT();XA();t_();nze=80,jle=120,sze=120,oze=200;oC=class{print;now;formatActionDep;renderer=new rl;displayRegistry=null;controller=null;pendingById=new Map;pendingByName=new Map;startedAt=0;turnTools=0;tokenBase;usageTurnTokens;constructor(e={}){this.print=e.print??(r=>console.log(r)),this.now=e.now??Date.now,this.formatActionDep=e.formatAction}attach(e){this.controller!==e&&(this.controller&&this.detach(),this.controller=e,e.on("toolCall",this.handleToolCall),e.on("toolResultCompleted",this.handleToolResult),e.on("usage",this.handleUsage))}detach(){this.controller&&(this.controller.removeListener("toolCall",this.handleToolCall),this.controller.removeListener("toolResultCompleted",this.handleToolResult),this.controller.removeListener("usage",this.handleUsage),this.controller=null,this.pendingById.clear(),this.pendingByName.clear())}start(e,r){this.startedAt=this.now(),this.turnTools=0,this.usageTurnTokens=void 0,this.tokenBase=r?r.tokensIn+r.tokensOut:void 0,this.pendingById.clear(),this.pendingByName.clear(),this.print(` \u2192 ${TE(e,nze)}`)}finish(e,r,n){if(!e){this.print(` \u2717 failed: ${TE(n??"unknown error",oze)}`);return}let s=(Math.max(0,this.now()-this.startedAt)/1e3).toFixed(1),o=this.tokenBase!==void 0&&r?Math.max(0,r.tokensIn+r.tokensOut-this.tokenBase):this.usageTurnTokens,i=[`finished in ${s}s`,`${this.turnTools} tools`];o!==void 0&&i.push(`${o} tokens`),this.print(` \u2713 ${i.join(" \xB7 ")}`)}handleToolCall=(e,r,n)=>{let s=Ho[e]??e,o=Gc(e,r??{}),i=QA(s,o),l={target:TE(i??this.safeFormatAction(s,o),jle),args:o};if(n)this.pendingById.set(n,l);else{let c=this.pendingByName.get(s)??[];c.push(l),this.pendingByName.set(s,c)}};handleToolResult=(e,r,n)=>{this.turnTools+=1;let s;e&&this.pendingById.has(e)?(s=this.pendingById.get(e),this.pendingById.delete(e)):s=this.pendingByName.get(r)?.shift();let o=!!n?.success,i=n?.output||n?.error||"",a=this.renderer.summarize(r,s?.args??{},i,o),l=a!==void 0?TE(a,sze):void 0;Da(TE(r,jle),s?.target??"",o,l,c=>this.print(` ${c}`),!1)};handleUsage=(e,r,n,s)=>{this.usageTurnTokens=(s?.turnInputTokens??e)+(s?.turnOutputTokens??r)};safeFormatAction(e,r){try{return this.formatActionDep?this.formatActionDep(e,r):(this.displayRegistry??=ys(),this.displayRegistry.get(e)?.formatAction(r)??"")}catch{return""}}}});function dF(t,e){if(t.length<=e)return t;let r=t.slice(0,e);return/[\uD800-\uDBFF]$/.test(r)?r.slice(0,-1):r}var ize,uF,aze,iC,Wle=D(()=>{"use strict";t_();ize=64*1024,uF=1024*1024,aze=250;iC=class{send;taskId;dispatchId;model;controller=null;now;coalesceMs;setTimer;clearTimer;seq=0;segment=0;segmentBuf="";fullBuf="";pendingSep=!1;lastPublishAt=Number.NEGATIVE_INFINITY;timer=null;finished=!1;constructor(e,r,n,s,o={}){this.send=e,this.taskId=r,this.dispatchId=n,this.model=s,this.now=o.now??Date.now,this.coalesceMs=o.coalesceMs??aze,this.setTimer=o.setTimer??((i,a)=>{let l=setTimeout(i,a);return l.unref?.(),l}),this.clearTimer=o.clearTimer??(i=>clearTimeout(i))}attach(e){this.controller!==e&&(this.controller&&this.detach(),this.controller=e,e.on("token",this.onToken),e.on("toolCall",this.onToolCall),this.send(JSON.stringify({type:"agent_started",task_id:this.taskId,dispatch_id:this.dispatchId})))}detach(){this.controller&&(this.controller.removeListener("token",this.onToken),this.controller.removeListener("toolCall",this.onToolCall),this.controller=null,this.cancelTimer())}onToken=e=>{typeof e!="string"||e===""||this.finished||(this.pendingSep&&(this.fullBuf+=`
3513
3513
 
3514
- `,this.pendingSep=!1),this.fullBuf+=e,this.fullBuf.length>uF&&(this.fullBuf=dF(this.fullBuf,uF)),this.segmentBuf+=e,this.scheduleTextFlush())};onToolCall=(e,r,n)=>{if(this.finished)return;this.segmentBuf.length>0&&(this.publishText(!0),this.pendingSep=!0,this.segment+=1,this.segmentBuf="",this.cancelTimer());let s=Ho[e]??e??"tool";this.seq+=1,this.send(JSON.stringify({type:"agent_tool",task_id:this.taskId,seq:this.seq,tools:[s]}))};finish(e){if(this.finished)return;this.finished=!0,this.cancelTimer(),this.segmentBuf.length>0&&this.publishText(!0);let r=dF(e&&e.length>0?e:this.fullBuf,uF);this.send(JSON.stringify({type:"agent_complete",task_id:this.taskId,dispatch_id:this.dispatchId,answer:r,model:this.model}))}permissionRequest(e,r){this.finished||!e||this.send(JSON.stringify({type:"permission_request",task_id:this.taskId,request_id:e,tool_name:r.tool_name,action:r.action,risk:r.risk,...r.path?{path:r.path}:{},...r.detail?{detail:r.detail}:{}}))}error(e){this.finished||(this.finished=!0,this.cancelTimer(),this.send(JSON.stringify({type:"agent_error",task_id:this.taskId,dispatch_id:this.dispatchId,code:e||"error"})))}scheduleTextFlush(){let e=this.now()-this.lastPublishAt;if(e>=this.coalesceMs){this.publishText(!1);return}this.timer==null&&(this.timer=this.setTimer(()=>{this.timer=null,!this.finished&&this.segmentBuf.length>0&&this.publishText(!1)},this.coalesceMs-e))}publishText(e){this.cancelTimer(),this.seq+=1,this.lastPublishAt=this.now(),this.send(JSON.stringify({type:"agent_text",task_id:this.taskId,seq:this.seq,segment:this.segment,content:dF(this.segmentBuf,ize),done:e}))}cancelTimer(){this.timer!=null&&(this.clearTimer(this.timer),this.timer=null)}}});function Vle(){return{current:null}}function lze(t){return{role:"user",content:t,timestamp:Date.now()}}async function cze(t,e,r,n){se.hasInstance()||(se.getInstance(t.projectPath),await se.getInstance().discover()),Ae.getInstance().isInitialized()||Ae.getInstance().initialize({projectPath:t.projectPath,serverUrl:e,providerApiKey:r,provider:n}),zt.getInstance().initialize(t.projectPath);try{let{PersonaManager:s}=await Promise.resolve().then(()=>(wt(),Dt));await s.getInstance(t.projectPath).initialize()}catch{}}async function Kle(t,e,r){let n=r.current;if(!n||n.taskId!==t.taskId){r.current&&(uze(r.current),r.current=null);let s=!!t.model,o=s?{local:!0,model:t.model}:{},{provider:i,model:a,openrouterProvider:l,serverClient:c,serverUrl:u,llmApiKey:d,cloudMode:p}=await hE(o,e,{daemon:!0});if(!s&&!p)throw new Error("cloud mode is not configured (run `aii cloud login`)");let f=jn({projectPath:process.cwd(),provider:i,model:a,openrouterProvider:l,connectionMode:s?"local":"cloud",mode:"interactive"});await cze(f,u,d,i);let h=io({autoApprove:!1,streamOutput:!1,offline:!1},void 0,c);n={taskId:t.taskId,session:f,serverClient:c,controller:h,printer:new oC},r.current=n}if(n.printer.attach(n.controller),n.session.connectionMode==="local"&&t.sendUp){n.mirror?.detach(),n.mirror=new iC(t.sendUp,t.taskId,t.dispatchId??"",t.model??n.session.model??""),n.mirror.attach(n.controller);let s=n.mirror;n.controller.setPortalPermissionSink((o,i)=>s.permissionRequest(o,i))}n.serverClient.setCloudTaskId(t.taskId,t.deviceId),n.session.permissionCache.clear(),n.session.messages.push(lze(t.prompt)),n.session.stats.totalTurns++,n.printer.start(t.prompt,n.session.stats);try{await n.controller.run(t.prompt,n.session)}catch(s){throw n.printer.finish(!1,n.session.stats,s instanceof Error?s.message:String(s)),n.mirror?.error("LOCAL_RUN_FAILED"),s!==null&&typeof s=="object"&&(s.dispatchFailureReported=!0),s}n.printer.finish(!0,n.session.stats),n.mirror?.finish()}function uze(t){try{t.printer.detach(),t.mirror?.detach()}catch{}try{t.controller.dispose()}catch{}try{t.serverClient.disconnect()}catch{}}async function Qle(t,e,r){let{taskId:n,requestId:s,decision:o}=e;if(!s||o!=="allow"&&o!=="deny"&&o!=="always")return;let i=t.current;if(!i||n&&i.taskId!==n)return;let a=o==="deny"?"no":o==="always"?"always":"yes";if(r?.resolve){await r.resolve(s,a);return}(await Promise.resolve().then(()=>(_s(),Go))).resolvePermissionDialogFromRelay(s,a)}var Xle=D(()=>{"use strict";Ww();xc();jw();Yle();Wle();ls();js();kT()});async function Jle(t,e,r={}){let n=r.fetchImpl??fetch,s=new AbortController,o=setTimeout(()=>s.abort(),r.timeoutMs??5e3),i;try{i=await n(`${t.replace(/\/+$/,"")}/v0/models`,{headers:{"Aii-API-Key":e},signal:s.signal})}finally{clearTimeout(o)}if(!i.ok)throw new Error(`local backend /v0/models returned ${i.status}`);let a=await i.json(),l=[],c=new Set;for(let u of a.providers??[]){if(!u.name)continue;let d=u.name==="ollama";if(!(!d&&!u.configured))for(let p of u.models??[]){if(!p.name||!d&&!p.available)continue;let f=`${u.name}/`,h=p.name.startsWith(f)?p.name.slice(f.length):p.name,g=`${u.name}/${h}`;if(!c.has(g)&&(c.add(g),l.push(g),l.length>=64))return l}}return l}var Zle=D(()=>{"use strict"});var ece={};ye(ece,{handleCloud:()=>dze});async function dze(t,e){await e.load();let r=[t.subcommand,...t.args].filter(s=>typeof s=="string"&&s.length>0);switch(r.find(s=>!s.startsWith("-"))??"status"){case"login":await mze(e,r.includes("--force"));break;case"connect":await pze(e,r.includes("--local")||t.flags?.local===!0);break;case"status":await fze(e);break;case"help":default:hze();break}}async function pze(t,e=!1){if(!$n(t)){console.log(m.yellow(`
3514
+ `,this.pendingSep=!1),this.fullBuf+=e,this.fullBuf.length>uF&&(this.fullBuf=dF(this.fullBuf,uF)),this.segmentBuf+=e,this.scheduleTextFlush())};onToolCall=(e,r,n)=>{if(this.finished)return;this.segmentBuf.length>0&&(this.publishText(!0),this.pendingSep=!0,this.segment+=1,this.segmentBuf="",this.cancelTimer());let s=Ho[e]??e??"tool";this.seq+=1,this.send(JSON.stringify({type:"agent_tool",task_id:this.taskId,seq:this.seq,tools:[s]}))};finish(e){if(this.finished)return;this.finished=!0,this.cancelTimer(),this.segmentBuf.length>0&&this.publishText(!0);let r=dF(e&&e.length>0?e:this.fullBuf,uF);this.send(JSON.stringify({type:"agent_complete",task_id:this.taskId,dispatch_id:this.dispatchId,answer:r,model:this.model}))}permissionRequest(e,r){this.finished||!e||this.send(JSON.stringify({type:"permission_request",task_id:this.taskId,request_id:e,tool_name:r.tool_name,action:r.action,risk:r.risk,...r.path?{path:r.path}:{},...r.detail?{detail:r.detail}:{}}))}error(e){this.finished||(this.finished=!0,this.cancelTimer(),this.send(JSON.stringify({type:"agent_error",task_id:this.taskId,dispatch_id:this.dispatchId,code:e||"error"})))}scheduleTextFlush(){let e=this.now()-this.lastPublishAt;if(e>=this.coalesceMs){this.publishText(!1);return}this.timer==null&&(this.timer=this.setTimer(()=>{this.timer=null,!this.finished&&this.segmentBuf.length>0&&this.publishText(!1)},this.coalesceMs-e))}publishText(e){this.cancelTimer(),this.seq+=1,this.lastPublishAt=this.now(),this.send(JSON.stringify({type:"agent_text",task_id:this.taskId,seq:this.seq,segment:this.segment,content:dF(this.segmentBuf,ize),done:e}))}cancelTimer(){this.timer!=null&&(this.clearTimer(this.timer),this.timer=null)}}});function Vle(){return{current:null}}function lze(t){return{role:"user",content:t,timestamp:Date.now()}}async function cze(t,e,r,n){se.hasInstance()||(se.getInstance(t.projectPath),await se.getInstance().discover()),Ae.getInstance().isInitialized()||Ae.getInstance().initialize({projectPath:t.projectPath,serverUrl:e,providerApiKey:r,provider:n}),zt.getInstance().initialize(t.projectPath);try{let{PersonaManager:s}=await Promise.resolve().then(()=>(wt(),Dt));await s.getInstance(t.projectPath).initialize()}catch{}}async function Kle(t,e,r){let n=r.current;if(!n||n.taskId!==t.taskId){r.current&&(uze(r.current),r.current=null);let s=!!t.model,o=s?{local:!0,model:t.model}:{},{provider:i,model:a,openrouterProvider:l,serverClient:c,serverUrl:u,llmApiKey:d,cloudMode:p}=await hE(o,e,{daemon:!0});if(!s&&!p)throw new Error("cloud mode is not configured (run `aii cloud login`)");let f=jn({projectPath:process.cwd(),provider:i,model:a,openrouterProvider:l,connectionMode:s?"local":"cloud",mode:"interactive"});await cze(f,u,d,i);let h=io({autoApprove:!1,streamOutput:!1,offline:!1},void 0,c),g=new oC({formatAction:(_,E)=>h.formatToolAction(_,E)});n={taskId:t.taskId,session:f,serverClient:c,controller:h,printer:g},r.current=n}if(n.printer.attach(n.controller),n.session.connectionMode==="local"&&t.sendUp){n.mirror?.detach(),n.mirror=new iC(t.sendUp,t.taskId,t.dispatchId??"",t.model??n.session.model??""),n.mirror.attach(n.controller);let s=n.mirror;n.controller.setPortalPermissionSink((o,i)=>s.permissionRequest(o,i))}n.serverClient.setCloudTaskId(t.taskId,t.deviceId),n.session.permissionCache.clear(),n.session.messages.push(lze(t.prompt)),n.session.stats.totalTurns++,n.printer.start(t.prompt,n.session.stats);try{await n.controller.run(t.prompt,n.session)}catch(s){throw n.printer.finish(!1,n.session.stats,s instanceof Error?s.message:String(s)),n.mirror?.error("LOCAL_RUN_FAILED"),s!==null&&typeof s=="object"&&(s.dispatchFailureReported=!0),s}n.printer.finish(!0,n.session.stats),n.mirror?.finish()}function uze(t){try{t.printer.detach(),t.mirror?.detach()}catch{}try{t.controller.dispose()}catch{}try{t.serverClient.disconnect()}catch{}}async function Qle(t,e,r){let{taskId:n,requestId:s,decision:o}=e;if(!s||o!=="allow"&&o!=="deny"&&o!=="always")return;let i=t.current;if(!i||n&&i.taskId!==n)return;let a=o==="deny"?"no":o==="always"?"always":"yes";if(r?.resolve){await r.resolve(s,a);return}(await Promise.resolve().then(()=>(_s(),Go))).resolvePermissionDialogFromRelay(s,a)}var Xle=D(()=>{"use strict";Ww();xc();jw();Yle();Wle();ls();js();kT()});async function Jle(t,e,r={}){let n=r.fetchImpl??fetch,s=new AbortController,o=setTimeout(()=>s.abort(),r.timeoutMs??5e3),i;try{i=await n(`${t.replace(/\/+$/,"")}/v0/models`,{headers:{"Aii-API-Key":e},signal:s.signal})}finally{clearTimeout(o)}if(!i.ok)throw new Error(`local backend /v0/models returned ${i.status}`);let a=await i.json(),l=[],c=new Set;for(let u of a.providers??[]){if(!u.name)continue;let d=u.name==="ollama";if(!(!d&&!u.configured))for(let p of u.models??[]){if(!p.name||!d&&!p.available)continue;let f=`${u.name}/`,h=p.name.startsWith(f)?p.name.slice(f.length):p.name,g=`${u.name}/${h}`;if(!c.has(g)&&(c.add(g),l.push(g),l.length>=64))return l}}return l}var Zle=D(()=>{"use strict"});var ece={};ye(ece,{handleCloud:()=>dze});async function dze(t,e){await e.load();let r=[t.subcommand,...t.args].filter(s=>typeof s=="string"&&s.length>0);switch(r.find(s=>!s.startsWith("-"))??"status"){case"login":await mze(e,r.includes("--force"));break;case"connect":await pze(e,r.includes("--local")||t.flags?.local===!0);break;case"status":await fze(e);break;case"help":default:hze();break}}async function pze(t,e=!1){if(!$n(t)){console.log(m.yellow(`
3515
3515
  Not connected to Aii Cloud.`)),console.log(m.gray(" Run `aii cloud login` first, then `aii cloud connect`.\n")),process.exitCode=1;return}let r=sm(t)??nm,n=fl(t),s=Ple(),o;if(e){let g=(await t.load()).api?.url||"http://localhost:26169",_=t.getServerApiKey()||fE;try{o=await Jle(g,_)}catch(E){console.error(m.red(`
3516
3516
  \u2717 --local needs a running local backend, but ${g}/v0/models failed:`)),console.error(m.gray(` ${E instanceof Error?E.message:String(E)}`)),console.error(m.gray(` Start aii-server / ollama and retry, or drop --local for cloud dispatch.
3517
3517
  `)),process.exitCode=1;return}if(o.length===0){console.error(m.red(`
@@ -3539,7 +3539,7 @@ To enter: cd ${s.path}`);break}case"list":{let s=await gl(n);if(s.length===0){co
3539
3539
  `)),console.log(" aii cloud login Sign in to Aii Cloud (verifies an existing sign-in;"),console.log(" --force re-authenticates)"),console.log(" aii cloud connect Stay online to run tasks dispatched from the Portal"),console.log(" aii cloud status Show connection + credit balance"),console.log(m.gray(`
3540
3540
  \`aii cloud connect\` registers this machine so you can start a task from the
3541
3541
  web ("Run on \u25BE \xB7 this machine") and approve its tool calls from the Portal.
3542
- `))}var tce=D(()=>{"use strict";Se();om();rd();Ole();Lle();Gle();Hle();Xle();Zle();Ww()});var sce={};ye(sce,{handleUpgrade:()=>gze});import{execSync as rce}from"node:child_process";async function gze(t){let e=t.args[0]||null,r="0.17.26",n=e?`${nce}@${e}`:`${nce}@latest`;console.log(""),console.log(e?`Upgrading Aii CLI to v${e}...`:"Upgrading Aii CLI to latest..."),console.log(` Current version: ${r}`),console.log("");try{rce(`npm install -g ${n}`,{stdio:"inherit",timeout:12e4})}catch{console.error(`
3542
+ `))}var tce=D(()=>{"use strict";Se();om();rd();Ole();Lle();Gle();Hle();Xle();Zle();Ww()});var sce={};ye(sce,{handleUpgrade:()=>gze});import{execSync as rce}from"node:child_process";async function gze(t){let e=t.args[0]||null,r="0.17.27",n=e?`${nce}@${e}`:`${nce}@latest`;console.log(""),console.log(e?`Upgrading Aii CLI to v${e}...`:"Upgrading Aii CLI to latest..."),console.log(` Current version: ${r}`),console.log("");try{rce(`npm install -g ${n}`,{stdio:"inherit",timeout:12e4})}catch{console.error(`
3543
3543
  Upgrade failed. Try running with sudo or check npm permissions.`),console.error(` Manual: npm install -g ${n}`),process.exit(1)}try{let s=rce("aii --version 2>/dev/null",{encoding:"utf-8",timeout:1e4,stdio:"pipe"}).trim();console.log(""),console.log(s===r?`Already up to date (${r})`:`Upgraded: ${r} -> ${s}`)}catch{console.log(""),console.log("Installed. Restart your terminal to use the new version.")}}var nce,oce=D(()=>{"use strict";nce="@aiiware/aii"});var ice={};ye(ice,{handleSkillCmd:()=>Eze});function _ze(t){return t.userInvocable&&t.modelInvocable?"":t.userInvocable?"(CLI only)":t.modelInvocable?"(agent only)":"(disabled)"}async function Eze(t,e){let r=(t.subcommand??t.args[0]??"help").toLowerCase(),n=t.subcommand?t.args[0]:t.args[1]??null;switch(r){case"list":return yze();case"info":return Sze(n);case"install":return bze(n);case"help":default:return Tze()}}async function yze(){let{SkillManager:t}=await Promise.resolve().then(()=>(vo(),Xl)),e;if(t.hasInstance())e=t.getInstance();else{e=t.getInstance(process.cwd());let o;try{let{PersonaManager:i}=await Promise.resolve().then(()=>(wt(),Dt)),a=i.getInstance(process.cwd());await a.initialize(),a.isActive()&&(o=a.getActive()?.skillPaths)}catch{}await e.discover(o)}let r=e.getRegistry().getAll();if(r.length===0){console.log("No skills installed."),console.log(" Install one: aii skill install <owner/repo/skill>");return}let n=new Map;for(let o of r){let i=n.get(o.source)||[];i.push(o),n.set(o.source,i)}let s=["project-command","project","user","persona-bundled","universal","built-in","plugin","remote"];console.log(""),console.log(" Name Source Invocation Description"),console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");for(let o of s){let i=n.get(o);if(i)for(let a of i){let l=a.name.padEnd(18),c=a.source.padEnd(16),u=_ze(a).padEnd(14),d=(a.description||"").slice(0,34);console.log(` ${l}${c}${u}${d}`)}}console.log("")}async function Sze(t){if(!t){console.log("Usage: aii skill info <name>");return}let{SkillManager:e}=await Promise.resolve().then(()=>(vo(),Xl)),r;if(e.hasInstance())r=e.getInstance();else{r=e.getInstance(process.cwd());let s;try{let{PersonaManager:o}=await Promise.resolve().then(()=>(wt(),Dt)),i=o.getInstance(process.cwd());await i.initialize(),i.isActive()&&(s=i.getActive()?.skillPaths)}catch{}await r.discover(s)}let n=r.getRegistry().getByName(t);if(!n){let o=r.getRegistry().getAll().map(i=>i.name).join(", ");console.error(`Skill "${t}" not found.`),o&&console.error(`Available skills: ${o}`),process.exit(1)}console.log(""),console.log(` Name: ${n.name}`),console.log(` Source: ${n.source}`),console.log(` Description: ${n.description||"(none)"}`),console.log(` Invocable: ${[n.userInvocable?"user":"",n.modelInvocable?"model":""].filter(Boolean).join(" + ")||"none"}`),n.allowedTools?.length&&console.log(` Tools: ${n.allowedTools.join(" ")}`),console.log(` Path: ${n.path||"(embedded)"}`),console.log("")}async function bze(t){if(!t){console.log("Usage: aii skill install <owner/repo/skill>");return}let{SkillInstaller:e}=await Promise.resolve().then(()=>(lh(),$1)),r=new e({projectRoot:process.cwd()});try{let n=await r.install(t,{scope:"user"});n.success?(console.log(`Installed skill: ${n.skillName}`),n.installPath&&console.log(` Location: ${n.installPath}`)):(console.error(`Failed to install skill: ${n.error||"Unknown error"}`),process.exit(1))}catch(n){let s=n instanceof Error?n.message:String(n);console.error(`Failed to install skill: ${s}`),process.exit(1)}}function Tze(){let t=[""];t.push(m.cyan.bold(" Skill System")),t.push(""),t.push(m.yellow(" USAGE:")),t.push(` ${m.green("aii skill list")} List all available skills`),t.push(` ${m.green("aii skill info <name>")} Show details for a skill`),t.push(` ${m.green("aii skill install <ref>")} Install a skill from GitHub`),t.push(` ${m.green("aii skill help")} Show this help`),t.push(""),t.push(m.yellow(" EXAMPLES:")),t.push(m.dim(" aii skill list")),t.push(m.dim(" aii skill info commit")),t.push(m.dim(" aii skill install aiiware/aii-skills/skills/commit --user")),t.push(""),console.log(t.join(`
3544
3544
  `))}var ace=D(()=>{"use strict";Se()});var lce={};ye(lce,{handlePluginCmd:()=>wze});async function wze(t,e){let r=(t.subcommand??t.args[0]??"help").toLowerCase(),n=t.subcommand?t.args[0]:t.args[1]??null,s=t.subcommand?t.args.slice(1):t.args.slice(2);switch(r){case"install":return Cze(n,s);case"uninstall":case"remove":return vze(n);case"update":return kze(n);case"list":case"ls":return Aze();case"help":default:return Dze()}}async function Cze(t,e){if(!t){console.log("Usage: aii plugin install <owner/repo>");return}let{PluginInstaller:r}=await Promise.resolve().then(()=>(Ma(),Ql)),n=e.includes("--force")||e.includes("-f"),s=t,o;if(t.includes("@")){let a=t.lastIndexOf("@");s=t.slice(0,a),o=t.slice(a+1)}let i=new r({onProgress:a=>console.log(` ${m.dim(a)}`)});try{console.log(""),console.log(` Installing plugin from ${m.cyan(s)}...`),console.log("");let a=await i.install(s,{version:o,force:n});a.success?(console.log(""),console.log(` ${m.green("\u2713")} Plugin ${m.bold(a.pluginName)} v${a.version} installed`),console.log(` ${a.skillCount} skills available (use ${m.cyan("aii skill list")} to see them)`),a.installPath&&console.log(` Stored in ${m.dim(a.installPath)}`),console.log("")):(console.error(` ${m.red("\u2717")} ${a.error||"Unknown error"}`),process.exit(1))}catch(a){let l=a instanceof Error?a.message:String(a);console.error(` ${m.red("\u2717")} Failed to install plugin: ${l}`),process.exit(1)}}async function vze(t){if(!t){console.log("Usage: aii plugin uninstall <name>");return}let{PluginInstaller:e}=await Promise.resolve().then(()=>(Ma(),Ql)),r=new e;try{let n=await r.uninstall(t);n.success?(console.log(""),console.log(` ${m.green("\u2713")} Plugin ${m.bold(t)} uninstalled`),n.skillCount&&console.log(` ${n.skillCount} skills removed`),console.log("")):(console.error(` ${m.red("\u2717")} ${n.error||"Unknown error"}`),process.exit(1))}catch(n){let s=n instanceof Error?n.message:String(n);console.error(` ${m.red("\u2717")} Failed to uninstall plugin: ${s}`),process.exit(1)}}async function kze(t){if(!t){console.log("Usage: aii plugin update <name>");return}let{PluginInstaller:e}=await Promise.resolve().then(()=>(Ma(),Ql)),r=new e({onProgress:n=>console.log(` ${m.dim(n)}`)});try{console.log(""),console.log(` Checking for updates to ${m.cyan(t)}...`);let n=await r.update(t);n.success?(n.error?.includes("already up to date")?console.log(` ${m.green("\u2713")} ${n.error}`):(console.log(` ${m.green("\u2713")} Plugin ${m.bold(t)} updated to v${n.version}`),n.skillCount&&console.log(` ${n.skillCount} skills available`)),console.log("")):(console.error(` ${m.red("\u2717")} ${n.error||"Unknown error"}`),process.exit(1))}catch(n){let s=n instanceof Error?n.message:String(n);console.error(` ${m.red("\u2717")} Failed to update plugin: ${s}`),process.exit(1)}}async function Aze(){let{PluginManager:t}=await Promise.resolve().then(()=>(nh(),rh)),r=await new t().listInstalled();if(r.length===0){console.log(""),console.log(" No plugins installed."),console.log(` Install one: ${m.cyan("aii plugin install <owner/repo>")}`),console.log("");return}console.log(""),console.log(m.bold(" INSTALLED PLUGINS")),console.log(""),console.log(" Name Version Skills Installed"),console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");for(let n of r){let s=n.name.padEnd(18),o=`v${n.version}`.padEnd(12),i=String(n.skillCount).padEnd(8),a=new Date(n.installedAt).toLocaleDateString();console.log(` ${s}${o}${i}${a}`)}console.log("")}function Dze(){let t=[""];t.push(m.cyan.bold("Plugin System")),t.push(""),t.push(m.yellow("USAGE:")),t.push(` ${m.green("aii plugin install <source>")} Install a plugin from GitHub`),t.push(` ${m.green("aii plugin uninstall <name>")} Uninstall a plugin`),t.push(` ${m.green("aii plugin update <name>")} Update a plugin to latest`),t.push(` ${m.green("aii plugin list")} List installed plugins`),t.push(` ${m.green("aii plugin help")} Show this help`),t.push(""),t.push(m.yellow("EXAMPLES:")),t.push(m.dim(" aii plugin install aiiware/aii-skills")),t.push(m.dim(" aii plugin install aiiware/aii-skills@v0.1.0")),t.push(m.dim(" aii plugin list")),t.push(m.dim(" aii plugin update aii-skills")),t.push(m.dim(" aii plugin uninstall aii-skills")),t.push(""),console.log(t.join(`
3545
3545
  `))}var cce=D(()=>{"use strict";Se()});var uce={};ye(uce,{handlePersona:()=>Rze});function Ize(t){return process.stdin.isTTY?async({originId:e,event:r,command:n,index:s,total:o})=>{s===1&&(console.log(`
@@ -3562,7 +3562,7 @@ Upgrade failed. Try running with sudo or check npm permissions.`),console.error(
3562
3562
  ${t}
3563
3563
  </context>
3564
3564
 
3565
- ${e}`:e}var Te;(function(t){t[t.LOCAL=1]="LOCAL",t[t.SERVER=2]="SERVER"})(Te||(Te={}));var FC={translate:"clean",shell:"clean",shell_generate:"clean",mcp:"standard",explain:"standard",code_generate:"standard",code_review:"standard",summarize:"standard",research:"standard",_default:"standard"};function go(t,e,r,n){return t.clean?"clean":t.thinking||t.verbose?"thinking":t.standard?"standard":e&&r?.[e]?r[e]:e&&FC[e]?FC[e]:n||FC._default}var xE=[{name:"config",tier:Te.LOCAL},{name:"help",tier:Te.LOCAL},{name:"version",tier:Te.LOCAL},{name:"doctor",tier:Te.LOCAL},{name:"mcp",tier:Te.LOCAL},{name:"prompt",tier:Te.LOCAL},{name:"stats",tier:Te.LOCAL},{name:"history",tier:Te.LOCAL},{name:"query",tier:Te.SERVER},{name:"chat",tier:Te.SERVER},{name:"run",tier:Te.SERVER},{name:"agent",tier:Te.SERVER},{name:"loop",tier:Te.SERVER},{name:"telegram",tier:Te.SERVER},{name:"sessions",tier:Te.SERVER},{name:"install",tier:Te.LOCAL},{name:"worktree",tier:Te.LOCAL},{name:"soul",tier:Te.LOCAL},{name:"skill",tier:Te.LOCAL},{name:"plugin",tier:Te.LOCAL},{name:"persona",tier:Te.LOCAL},{name:"cloud",tier:Te.LOCAL},{name:"upgrade",tier:Te.LOCAL}];function qce(t){let e=new Map;for(let r of t){if(!r.name)throw new Error("CLI command descriptor is missing a name");if(r.tier!==Te.LOCAL&&r.tier!==Te.SERVER)throw new Error(`CLI command "${r.name}" has an invalid tier: ${String(r.tier)}`);for(let n of[r.name,...r.aliases??[]]){if(e.has(n))throw new Error(`Duplicate CLI command name/alias: "${n}"`);e.set(n,r)}}return e}var Hce=qce(xE);function XF(t){return Hce.get(t)?.tier}var R7e=Object.fromEntries(xE.map(t=>[t.name,t.tier]));var jce=new Set(xE.filter(t=>t.name!=="query").flatMap(t=>[t.name,...t.aliases??[]])),Yce="0.17.26",Wce=new Set(["--clean","--standard","--thinking","-v","--verbose","-d","--debug","--model","--openrouter-provider","--host","-y","--yes","--offline","-D","--direct","-i","--interactive","-c","--continue-chat","-n","--new-chat","--auto","--auto-background-timeout","--no-colors","--colors","--no-emojis","--emojis","--no-animations","--animations","--no-streaming","--streaming","--show-tokens","--show-cost","--output-format","--tools","--exclude-tools","--max-turns","--max-budget-usd","--bare","--append-system-prompt","--append-system-prompt-file","--no-project-config","--project-config","--local","-h","--help","-V","--version"]),Vce=new Set(["--model","--openrouter-provider","--host","-c","--continue-chat","--auto-background-timeout","--output-format","--tools","--exclude-tools","--max-turns","--max-budget-usd","--append-system-prompt","--append-system-prompt-file"]);function Kce(t){let e=[];for(let r=0;r<t.length;r++){if(Wce.has(t[r])){Vce.has(t[r])&&r++;continue}e.push(t[r])}return e}function Qce(t){if(t===void 0)return;let e=Number(t);if(!Number.isInteger(e)||e<0)throw new Error(`Invalid --max-turns "${t}": expected a non-negative integer`);return e}function Xce(t){if(t===void 0)return;let e=Number(t);if(!Number.isFinite(e)||e<0)throw new Error(`Invalid --max-budget-usd "${t}": expected a non-negative number`);return e}function Jce(){let t=new KF;return t.name("aii").description("AI-powered CLI assistant").version(Yce,"-V, --version","Show version number").helpOption(!1).enablePositionalOptions().argument("[query...]","Natural language query").option("--clean","Clean output mode (just the result)").option("--standard","Standard output mode (result + metrics)").option("--thinking","Thinking mode (full reasoning)").option("-v, --verbose","Verbose output (alias for --thinking)").option("-d, --debug","Debug output").option("--model <model>","Override LLM model (e.g., ollama/llama3.1:8b, deepseek/deepseek-chat)").option("--openrouter-provider <slug>","Pin OpenRouter requests to a specific backend provider").option("--host <host>","API server host:port").option("--local","Force the local backend for this run (ignore managed cloud)").option("-y, --yes","Auto-confirm shell commands").option("--offline","Offline mode (no web/MCP)").option("-D, --direct","Direct mode (bypass server intent recognition)").option("-i, --interactive","Interactive chat mode").option("-c, --continue-chat <id>","Continue chat session").option("-n, --new-chat","Force new chat session").option("--auto","Auto mode - auto-approve all actions").option("--auto-background-timeout <seconds>","Auto-convert foreground agents to background after N seconds (0 to disable)","120").option("--no-project-config","Skip project .aii/settings.json + settings.local.json and their deny rules for this session").option("--no-colors","Disable colored output").option("--no-emojis","Disable emoji icons").option("--no-animations","Disable animations").option("--no-streaming","Disable streaming").option("--show-tokens","Show token usage").option("--show-cost","Show cost estimates").option("--output-format <format>","Output format: json or stream-json (one-shot only)").option("--tools <list>",'Allowlist of tools (comma-separated, e.g., "Read,Bash,Edit")').option("--exclude-tools <list>",'Exclude tools (comma-separated, e.g., "WebSearch,WebFetch")').option("--max-turns <n>","Max ReAct iterations within a turn (0/unset = default 500)").option("--max-budget-usd <amount>","Stop before a new turn once cumulative est. cost reaches $amount").option("--bare","Result to stdout only; all status/chrome to stderr (one-shot)").option("--append-system-prompt <text>","Append additive instructions to this run").option("--append-system-prompt-file <path>","Append a workspace file of additive instructions to this run").option("-h, --help","Show help"),t.command("config").description("Configuration management").argument("[action]","Action: init, show, validate, set").argument("[key]","Config key (for set)").argument("[value]","Config value (for set)").allowUnknownOption().helpOption(!1).action(()=>{}),t.command("mcp").description("MCP server management").argument("[action]","Action: list, add, remove, status, etc.").argument("[rest...]","Server name and arguments").passThroughOptions().action(()=>{}),t.command("prompt").description("Prompt library").argument("[action]","Action: list, show, use, create").argument("[rest...]","Prompt name and arguments").allowUnknownOption().action(()=>{}),t.command("stats").description("Usage statistics").argument("[type]","Type: models, cost").action(()=>{}),t.command("history").description("Chat history").argument("[action]","Action: list, search, export, delete").argument("[query]","Search query or ID").action(()=>{}),t.command("doctor").description("System health check").action(()=>{}),t.command("install [target...]").description("Install or update Aii CLI, skills, or MCP servers").allowUnknownOption().helpOption(!1).action(()=>{}),t.command("chat").description("Interactive chat mode").action(()=>{}),t.command("agent").description("Interactive agent mode with tool execution").argument("[query...]","Optional query (non-interactive if provided)").action(()=>{}),t.command("loop").description("Autonomous agent loop (Ralph Wiggum pattern)").argument("[args...]","Loop arguments (prompt, --max, --verify, --budget, etc.)").allowUnknownOption().action(()=>{}),t.command("telegram").description("Telegram bot channel (chat with Aii from Telegram)").argument("[action]","Action: start, pair, status, unpair").argument("[args...]","Additional arguments").allowUnknownOption().action(()=>{}),t.command("sessions").description("Manage server sessions (list, info, resume, rename, delete)").argument("[action]","Action: list, info, resume, rename, delete").argument("[args...]","Additional arguments (session ID, name, etc.)").allowUnknownOption().action(()=>{}),t.command("worktree").description("Manage git worktrees for isolated development").argument("[action]","Action: create, list, remove, clean").argument("[name]","Worktree name (for create/remove)").allowUnknownOption().action(()=>{}),t.command("soul").description("Manage agent soul (personality & identity)").argument("[action]","Action: switch, show").argument("[name]","Soul name (for switch)").allowUnknownOption().action(()=>{}),t.command("cloud").description("Manage the Aii Cloud connection (login, connect, status)").argument("[action]","Action: login, connect, status").allowUnknownOption().action(()=>{}),t.command("skill").description("Manage AI skills").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("plugin").description("Manage skill plugins").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("persona").description("Manage workspace personas").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("upgrade").description("Update Aii CLI to latest version").argument("[version]","Target version (default: latest)").action(()=>{}),t.command("run").description("Run domain-specific operations").argument("<operation>","Operation (e.g., git commit)").argument("[args...]","Additional arguments").allowUnknownOption().action(()=>{}),t.command("help").description("display help for command").argument("[command]","Command to show help for").action(()=>{}),t.command("version").description("Show version number").action(()=>{}),t}async function JF(t){let e=Jce();e.exitOverride(),e.configureOutput({writeErr:()=>{}});let r="query",n,s=[];try{e.parse(t),s=e.args;let c=e.args[0];c&&jce.has(c)&&(r=c,n=e.args[1],s=e.args.slice(2))}catch(c){c instanceof VF&&(c.code==="commander.version"||c.code==="commander.helpDisplayed")&&process.exit(0),s=Kce(t.slice(2))}let o=e.opts(),i={clean:o.clean??!1,standard:o.standard??!1,thinking:o.thinking??!1,verbose:o.verbose??!1,debug:o.debug??!1,model:o.model,host:o.host,local:o.local??!1,openrouterProvider:o.openrouterProvider,yes:o.yes??!1,offline:o.offline??!1,direct:o.direct??!1,interactive:o.interactive??!1,continueChat:o.continueChat,newChat:o.newChat??!1,auto:o.auto??!1,quiet:!1,noProjectConfig:o.projectConfig===!1,autoBackgroundTimeout:(()=>{let c=parseInt(o.autoBackgroundTimeout??"120",10);return isNaN(c)||c===0?0:Math.max(30,Math.min(600,c))*1e3})(),noColors:!o.colors,noEmojis:!o.emojis,noAnimations:!o.animations,noStreaming:!o.streaming,showTokens:o.showTokens??!1,showCost:o.showCost??!1,outputFormat:o.outputFormat,tools:o.tools,excludeTools:o.excludeTools,maxTurns:Qce(o.maxTurns),maxBudgetUsd:Xce(o.maxBudgetUsd),bare:o.bare??!1,appendSystemPrompt:o.appendSystemPrompt,appendSystemPromptFile:o.appendSystemPromptFile,help:o.help??!1,version:o.version??!1},a;LC()&&(a=await QF()),(r==="chat"||i.interactive)&&(r="agent"),r==="query"&&!s.length&&!a&&(r="agent");let l;if(r==="query"&&s.length>0)l=s.join(" ");else if(r==="agent"){let c=[];n&&c.push(n),s.length>0&&c.push(...s),c.length>0&&(l=c.join(" "))}return{command:r,subcommand:n,args:s,flags:i,stdinContent:a,query:l}}function ZF(t){let e=XF(t.command)??Te.SERVER;switch(t.command){case"config":return Zce(t);case"mcp":return eue(t);case"prompt":return tue(t);case"stats":return rue(t);case"history":return nue(t);case"doctor":return{tier:Te.LOCAL,handler:"doctor",params:{}};case"install":return{tier:Te.LOCAL,handler:"install",params:{}};case"chat":return{tier:Te.SERVER,handler:"chat",params:{continueChat:t.flags.continueChat}};case"run":return oue(t);case"agent":return{tier:Te.SERVER,handler:"agent",params:{interactive:!t.query}};case"loop":return{tier:Te.SERVER,handler:"loop",params:{}};case"telegram":return{tier:Te.SERVER,handler:"telegram",params:{action:t.subcommand??t.args[0]??"start"}};case"sessions":return{tier:Te.SERVER,handler:"sessions",params:{action:t.subcommand??t.args[0]??"list"}};case"worktree":return{tier:Te.LOCAL,handler:"worktree",params:{action:t.subcommand??t.args[0]??"list",name:t.subcommand?t.args[0]:t.args[1]}};case"soul":return{tier:Te.LOCAL,handler:"soul",params:{action:t.subcommand??t.args[0]??"show",name:t.subcommand?t.args[0]:t.args[1]}};case"cloud":return{tier:Te.LOCAL,handler:"cloud",params:{action:t.subcommand??t.args[0]??"status"}};case"skill":return{tier:Te.LOCAL,handler:"skill",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"plugin":return{tier:Te.LOCAL,handler:"plugin",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"persona":return{tier:Te.LOCAL,handler:"persona",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"upgrade":return{tier:Te.LOCAL,handler:"upgrade",params:{version:t.args[0]||null}};case"help":return{tier:Te.LOCAL,handler:"help",params:{command:t.subcommand}};case"version":return{tier:Te.LOCAL,handler:"version",params:{}};case"query":default:return{tier:e,handler:"query",params:{query:t.query,stdinContent:t.stdinContent}}}}function Zce(t){let e=t.subcommand??t.args[0]??"show";return{tier:Te.LOCAL,handler:`config:${e}`,params:{key:t.args[0],value:t.args[1]}}}function eue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`mcp:${e}`,params:{name:t.args[0],args:t.args.slice(1)}}}function tue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`prompt:${e}`,params:{name:t.args[0],args:t.args.slice(1)}}}function rue(t){let e=t.subcommand??t.args[0];return{tier:Te.LOCAL,handler:e?`stats:${e}`:"stats",params:{}}}function nue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`history:${e}`,params:{query:t.args[0],id:t.args[0]}}}var sue=new Set(["--model","--host","--continue-chat","-c"]);function oue(t){let e=[];t.subcommand&&e.push(t.subcommand);let r=[];for(let s=0;s<t.args.length;s++){let o=t.args[s];if(sue.has(o)){s++;continue}o.startsWith("-")||r.push(o)}e.push(...r);let n=e.join(" ");return{tier:Te.SERVER,handler:"run",params:{operation:n}}}kt();qy();bo();Se();import{createInterface as L3e}from"readline";import{spawn as F3e}from"child_process";u1();An();rd();at();nA();var K4e={timeout:12e4,retries:3,retryDelay:1e3,handshakeTimeout:5e3};function Q4e(t,e){let r=new URL(t),n=r.protocol==="https:"?"wss:":"ws:";if(e){if(!(r.protocol==="https:"||r.protocol==="wss:")&&!Lf(r.hostname))throw new Error(`Refusing to send the cloud key over an insecure (${r.protocol}) connection to ${r.hostname} \u2014 use https/wss.`);return{url:`${n}//${r.host}/v1/ws/execute`,headers:{Authorization:`Bearer ${e}`}}}return{url:`${n}//${r.host}/ws/execute`}}var Rs=class{options;ws=null;activityTimeout=null;mcpExecutor=null;constructor(e){this.options={...K4e,...e}}async initializeMCP(){if(!this.mcpExecutor){let{ClientMCPExecutor:e}=await Promise.resolve().then(()=>(fd(),md)),{createHeadlessMcpGate:r}=await Promise.resolve().then(()=>(Ao(),La));this.mcpExecutor=new e,this.mcpExecutor.setPermissionGate(r()),await this.mcpExecutor.initialize(),j(`MCP executor initialized with ${this.mcpExecutor.getConnectionCount()} connections`)}}async executeRequest(e,r){let n=null,s=Q4e(this.options.url,this.options.cloudApiKey);for(let o=0;o<this.options.retries;o++)try{return await this.executeWithRetry(s,e,r)}catch(i){if(n=i instanceof Error?i:new Error(String(i)),j(`Attempt ${o+1} failed: ${n.message}`),n instanceof Lu||n.message.includes("Authentication"))throw n;if(this.options.cloudApiKey&&n instanceof Pu){let a=new URL(this.options.url);throw new yo(Rl(a.hostname),"CLOUD_UNREACHABLE")}if(o<this.options.retries-1){let a=this.options.retryDelay*Math.pow(2,o);j(`Retrying in ${a}ms...`),await this.sleep(a)}}throw n??new ya("Max retries exceeded")}async executeWithRetry(e,r,n){return new Promise((s,o)=>{let i=e.url;j(`Connecting to ${i}`);try{this.ws=new ss(i,{handshakeTimeout:this.options.handshakeTimeout,...e.headers?{headers:e.headers}:{}})}catch{let p=new URL(this.options.url);o(new Pu(p.hostname||"localhost",p.port||void 0));return}let a=!1,l=null,c=null,u=!1,d=p=>{a||(a=!0,this.cleanup(),o(p))};this.resetActivityTimeout(()=>{a||(this.cleanup(),o(new Sf("WebSocket activity",this.options.timeout)))}),this.ws.on("open",()=>{j("WebSocket connected, sending request"),this.ws?.send(JSON.stringify({...r,protocol_version:2}))}),this.ws.on("message",p=>{this.resetActivityTimeout(()=>{a||(this.cleanup(),o(new Sf("WebSocket activity",this.options.timeout)))});let f;try{f=JSON.parse(p.toString())}catch(_){let E=p?String(p):"<undefined>";j(`Failed to parse message: ${E}`),d(new Error(`Failed to parse server message: ${_.message}`));return}let h=m1(f,WU);if(h.kind==="malformed"){let _=YU(f);d(_?new Lu("cloud_error",_):new ya(`Malformed server frame: ${h.reason}`));return}if(h.kind==="unknown"){u||(u=!0,j(`Received an unrecognized frame type '${h.type}'; ignoring`));return}let g=h.frame;if(c===null&&g.protocol_version!==void 0&&(c=g1(g.protocol_version),c==="hard")){d(new ya(_1(g.protocol_version)));return}if(f1.has(g.type)&&!h1(g)){d(new ya(`Malformed ${g.type} payload`));return}this.handleMessage(g,n,_=>{a=!0,l=_,this.cleanup(),s(_)},_=>{a=!0,this.cleanup(),o(_)})}),this.ws.on("error",p=>{if(j(`WebSocket error: ${p.message}`),!a){a=!0,this.cleanup();let f=new URL(this.options.url);o(new Pu(f.hostname||"localhost",f.port||void 0))}}),this.ws.on("close",(p,f)=>{j(`WebSocket closed: ${p} ${f.toString()}`),a||(a=!0,this.cleanup(),l?s(l):o(new ya(`Connection closed unexpectedly: ${p}`)))})})}handleMessage(e,r,n,s){switch(e.type){case"token":{let o=e;r?.onToken?.(o.data);break}case"complete":{let o=e,i=o.metadata||{},a=this.convertServerMetadata(o),l={result:o.result,metadata:a,clientSideExecution:i.client_side_execution===!0,userRequest:i.user_request};r?.onComplete?.(l),n(l);break}case"error":{let o=e,i=new Lu(o.code,o.message);r?.onError?.(i),s(i);break}case"mcp_query_tools":{j("Received mcp_query_tools request"),this.handleMCPQueryTools(e);break}case"mcp_tool_request":{j("Received mcp_tool_request"),this.handleMCPToolRequest(e);break}default:j(`Unknown message type: ${e.type}`)}}convertServerMetadata(e){let r=e.metadata||{},n,s;r.tokens?(n=r.tokens.input,s=r.tokens.output):(n=r.input_tokens,s=r.output_tokens);let o=r.cost??r.cost_usd,i=r.execution_time??r.total_time;return{function_name:e.function_name,tokens_in:n,tokens_out:s,cost:typeof o=="number"?o:void 0,model:typeof r.model=="string"?r.model:void 0,provider:typeof r.provider=="string"?r.provider:void 0,execution_time:typeof i=="number"?i:void 0,task_id:typeof r.task_id=="string"?r.task_id:void 0,chat_url:typeof r.chat_url=="string"?r.chat_url:void 0}}async handleMCPQueryTools(e){try{if(!this.mcpExecutor){let{ClientMCPExecutor:n}=await Promise.resolve().then(()=>(fd(),md)),{createHeadlessMcpGate:s}=await Promise.resolve().then(()=>(Ao(),La));this.mcpExecutor=new n,this.mcpExecutor.setPermissionGate(s()),await this.mcpExecutor.initialize()}let r=await this.mcpExecutor.handleQueryTools(e);this.ws?.send(JSON.stringify(r))}catch(r){let n=r instanceof Error?r.message:String(r),s=r instanceof Error?r.stack:void 0;j(`Error handling mcp_query_tools: ${n}${s?`
3565
+ ${e}`:e}var Te;(function(t){t[t.LOCAL=1]="LOCAL",t[t.SERVER=2]="SERVER"})(Te||(Te={}));var FC={translate:"clean",shell:"clean",shell_generate:"clean",mcp:"standard",explain:"standard",code_generate:"standard",code_review:"standard",summarize:"standard",research:"standard",_default:"standard"};function go(t,e,r,n){return t.clean?"clean":t.thinking||t.verbose?"thinking":t.standard?"standard":e&&r?.[e]?r[e]:e&&FC[e]?FC[e]:n||FC._default}var xE=[{name:"config",tier:Te.LOCAL},{name:"help",tier:Te.LOCAL},{name:"version",tier:Te.LOCAL},{name:"doctor",tier:Te.LOCAL},{name:"mcp",tier:Te.LOCAL},{name:"prompt",tier:Te.LOCAL},{name:"stats",tier:Te.LOCAL},{name:"history",tier:Te.LOCAL},{name:"query",tier:Te.SERVER},{name:"chat",tier:Te.SERVER},{name:"run",tier:Te.SERVER},{name:"agent",tier:Te.SERVER},{name:"loop",tier:Te.SERVER},{name:"telegram",tier:Te.SERVER},{name:"sessions",tier:Te.SERVER},{name:"install",tier:Te.LOCAL},{name:"worktree",tier:Te.LOCAL},{name:"soul",tier:Te.LOCAL},{name:"skill",tier:Te.LOCAL},{name:"plugin",tier:Te.LOCAL},{name:"persona",tier:Te.LOCAL},{name:"cloud",tier:Te.LOCAL},{name:"upgrade",tier:Te.LOCAL}];function qce(t){let e=new Map;for(let r of t){if(!r.name)throw new Error("CLI command descriptor is missing a name");if(r.tier!==Te.LOCAL&&r.tier!==Te.SERVER)throw new Error(`CLI command "${r.name}" has an invalid tier: ${String(r.tier)}`);for(let n of[r.name,...r.aliases??[]]){if(e.has(n))throw new Error(`Duplicate CLI command name/alias: "${n}"`);e.set(n,r)}}return e}var Hce=qce(xE);function XF(t){return Hce.get(t)?.tier}var R7e=Object.fromEntries(xE.map(t=>[t.name,t.tier]));var jce=new Set(xE.filter(t=>t.name!=="query").flatMap(t=>[t.name,...t.aliases??[]])),Yce="0.17.27",Wce=new Set(["--clean","--standard","--thinking","-v","--verbose","-d","--debug","--model","--openrouter-provider","--host","-y","--yes","--offline","-D","--direct","-i","--interactive","-c","--continue-chat","-n","--new-chat","--auto","--auto-background-timeout","--no-colors","--colors","--no-emojis","--emojis","--no-animations","--animations","--no-streaming","--streaming","--show-tokens","--show-cost","--output-format","--tools","--exclude-tools","--max-turns","--max-budget-usd","--bare","--append-system-prompt","--append-system-prompt-file","--no-project-config","--project-config","--local","-h","--help","-V","--version"]),Vce=new Set(["--model","--openrouter-provider","--host","-c","--continue-chat","--auto-background-timeout","--output-format","--tools","--exclude-tools","--max-turns","--max-budget-usd","--append-system-prompt","--append-system-prompt-file"]);function Kce(t){let e=[];for(let r=0;r<t.length;r++){if(Wce.has(t[r])){Vce.has(t[r])&&r++;continue}e.push(t[r])}return e}function Qce(t){if(t===void 0)return;let e=Number(t);if(!Number.isInteger(e)||e<0)throw new Error(`Invalid --max-turns "${t}": expected a non-negative integer`);return e}function Xce(t){if(t===void 0)return;let e=Number(t);if(!Number.isFinite(e)||e<0)throw new Error(`Invalid --max-budget-usd "${t}": expected a non-negative number`);return e}function Jce(){let t=new KF;return t.name("aii").description("AI-powered CLI assistant").version(Yce,"-V, --version","Show version number").helpOption(!1).enablePositionalOptions().argument("[query...]","Natural language query").option("--clean","Clean output mode (just the result)").option("--standard","Standard output mode (result + metrics)").option("--thinking","Thinking mode (full reasoning)").option("-v, --verbose","Verbose output (alias for --thinking)").option("-d, --debug","Debug output").option("--model <model>","Override LLM model (e.g., ollama/llama3.1:8b, deepseek/deepseek-chat)").option("--openrouter-provider <slug>","Pin OpenRouter requests to a specific backend provider").option("--host <host>","API server host:port").option("--local","Force the local backend for this run (ignore managed cloud)").option("-y, --yes","Auto-confirm shell commands").option("--offline","Offline mode (no web/MCP)").option("-D, --direct","Direct mode (bypass server intent recognition)").option("-i, --interactive","Interactive chat mode").option("-c, --continue-chat <id>","Continue chat session").option("-n, --new-chat","Force new chat session").option("--auto","Auto mode - auto-approve all actions").option("--auto-background-timeout <seconds>","Auto-convert foreground agents to background after N seconds (0 to disable)","120").option("--no-project-config","Skip project .aii/settings.json + settings.local.json and their deny rules for this session").option("--no-colors","Disable colored output").option("--no-emojis","Disable emoji icons").option("--no-animations","Disable animations").option("--no-streaming","Disable streaming").option("--show-tokens","Show token usage").option("--show-cost","Show cost estimates").option("--output-format <format>","Output format: json or stream-json (one-shot only)").option("--tools <list>",'Allowlist of tools (comma-separated, e.g., "Read,Bash,Edit")').option("--exclude-tools <list>",'Exclude tools (comma-separated, e.g., "WebSearch,WebFetch")').option("--max-turns <n>","Max ReAct iterations within a turn (0/unset = default 500)").option("--max-budget-usd <amount>","Stop before a new turn once cumulative est. cost reaches $amount").option("--bare","Result to stdout only; all status/chrome to stderr (one-shot)").option("--append-system-prompt <text>","Append additive instructions to this run").option("--append-system-prompt-file <path>","Append a workspace file of additive instructions to this run").option("-h, --help","Show help"),t.command("config").description("Configuration management").argument("[action]","Action: init, show, validate, set").argument("[key]","Config key (for set)").argument("[value]","Config value (for set)").allowUnknownOption().helpOption(!1).action(()=>{}),t.command("mcp").description("MCP server management").argument("[action]","Action: list, add, remove, status, etc.").argument("[rest...]","Server name and arguments").passThroughOptions().action(()=>{}),t.command("prompt").description("Prompt library").argument("[action]","Action: list, show, use, create").argument("[rest...]","Prompt name and arguments").allowUnknownOption().action(()=>{}),t.command("stats").description("Usage statistics").argument("[type]","Type: models, cost").action(()=>{}),t.command("history").description("Chat history").argument("[action]","Action: list, search, export, delete").argument("[query]","Search query or ID").action(()=>{}),t.command("doctor").description("System health check").action(()=>{}),t.command("install [target...]").description("Install or update Aii CLI, skills, or MCP servers").allowUnknownOption().helpOption(!1).action(()=>{}),t.command("chat").description("Interactive chat mode").action(()=>{}),t.command("agent").description("Interactive agent mode with tool execution").argument("[query...]","Optional query (non-interactive if provided)").action(()=>{}),t.command("loop").description("Autonomous agent loop (Ralph Wiggum pattern)").argument("[args...]","Loop arguments (prompt, --max, --verify, --budget, etc.)").allowUnknownOption().action(()=>{}),t.command("telegram").description("Telegram bot channel (chat with Aii from Telegram)").argument("[action]","Action: start, pair, status, unpair").argument("[args...]","Additional arguments").allowUnknownOption().action(()=>{}),t.command("sessions").description("Manage server sessions (list, info, resume, rename, delete)").argument("[action]","Action: list, info, resume, rename, delete").argument("[args...]","Additional arguments (session ID, name, etc.)").allowUnknownOption().action(()=>{}),t.command("worktree").description("Manage git worktrees for isolated development").argument("[action]","Action: create, list, remove, clean").argument("[name]","Worktree name (for create/remove)").allowUnknownOption().action(()=>{}),t.command("soul").description("Manage agent soul (personality & identity)").argument("[action]","Action: switch, show").argument("[name]","Soul name (for switch)").allowUnknownOption().action(()=>{}),t.command("cloud").description("Manage the Aii Cloud connection (login, connect, status)").argument("[action]","Action: login, connect, status").allowUnknownOption().action(()=>{}),t.command("skill").description("Manage AI skills").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("plugin").description("Manage skill plugins").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("persona").description("Manage workspace personas").allowUnknownOption().passThroughOptions().action(()=>{}),t.command("upgrade").description("Update Aii CLI to latest version").argument("[version]","Target version (default: latest)").action(()=>{}),t.command("run").description("Run domain-specific operations").argument("<operation>","Operation (e.g., git commit)").argument("[args...]","Additional arguments").allowUnknownOption().action(()=>{}),t.command("help").description("display help for command").argument("[command]","Command to show help for").action(()=>{}),t.command("version").description("Show version number").action(()=>{}),t}async function JF(t){let e=Jce();e.exitOverride(),e.configureOutput({writeErr:()=>{}});let r="query",n,s=[];try{e.parse(t),s=e.args;let c=e.args[0];c&&jce.has(c)&&(r=c,n=e.args[1],s=e.args.slice(2))}catch(c){c instanceof VF&&(c.code==="commander.version"||c.code==="commander.helpDisplayed")&&process.exit(0),s=Kce(t.slice(2))}let o=e.opts(),i={clean:o.clean??!1,standard:o.standard??!1,thinking:o.thinking??!1,verbose:o.verbose??!1,debug:o.debug??!1,model:o.model,host:o.host,local:o.local??!1,openrouterProvider:o.openrouterProvider,yes:o.yes??!1,offline:o.offline??!1,direct:o.direct??!1,interactive:o.interactive??!1,continueChat:o.continueChat,newChat:o.newChat??!1,auto:o.auto??!1,quiet:!1,noProjectConfig:o.projectConfig===!1,autoBackgroundTimeout:(()=>{let c=parseInt(o.autoBackgroundTimeout??"120",10);return isNaN(c)||c===0?0:Math.max(30,Math.min(600,c))*1e3})(),noColors:!o.colors,noEmojis:!o.emojis,noAnimations:!o.animations,noStreaming:!o.streaming,showTokens:o.showTokens??!1,showCost:o.showCost??!1,outputFormat:o.outputFormat,tools:o.tools,excludeTools:o.excludeTools,maxTurns:Qce(o.maxTurns),maxBudgetUsd:Xce(o.maxBudgetUsd),bare:o.bare??!1,appendSystemPrompt:o.appendSystemPrompt,appendSystemPromptFile:o.appendSystemPromptFile,help:o.help??!1,version:o.version??!1},a;LC()&&(a=await QF()),(r==="chat"||i.interactive)&&(r="agent"),r==="query"&&!s.length&&!a&&(r="agent");let l;if(r==="query"&&s.length>0)l=s.join(" ");else if(r==="agent"){let c=[];n&&c.push(n),s.length>0&&c.push(...s),c.length>0&&(l=c.join(" "))}return{command:r,subcommand:n,args:s,flags:i,stdinContent:a,query:l}}function ZF(t){let e=XF(t.command)??Te.SERVER;switch(t.command){case"config":return Zce(t);case"mcp":return eue(t);case"prompt":return tue(t);case"stats":return rue(t);case"history":return nue(t);case"doctor":return{tier:Te.LOCAL,handler:"doctor",params:{}};case"install":return{tier:Te.LOCAL,handler:"install",params:{}};case"chat":return{tier:Te.SERVER,handler:"chat",params:{continueChat:t.flags.continueChat}};case"run":return oue(t);case"agent":return{tier:Te.SERVER,handler:"agent",params:{interactive:!t.query}};case"loop":return{tier:Te.SERVER,handler:"loop",params:{}};case"telegram":return{tier:Te.SERVER,handler:"telegram",params:{action:t.subcommand??t.args[0]??"start"}};case"sessions":return{tier:Te.SERVER,handler:"sessions",params:{action:t.subcommand??t.args[0]??"list"}};case"worktree":return{tier:Te.LOCAL,handler:"worktree",params:{action:t.subcommand??t.args[0]??"list",name:t.subcommand?t.args[0]:t.args[1]}};case"soul":return{tier:Te.LOCAL,handler:"soul",params:{action:t.subcommand??t.args[0]??"show",name:t.subcommand?t.args[0]:t.args[1]}};case"cloud":return{tier:Te.LOCAL,handler:"cloud",params:{action:t.subcommand??t.args[0]??"status"}};case"skill":return{tier:Te.LOCAL,handler:"skill",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"plugin":return{tier:Te.LOCAL,handler:"plugin",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"persona":return{tier:Te.LOCAL,handler:"persona",params:{action:t.args[0]||"help",target:t.args[1]||null,extraArgs:t.args.slice(2)}};case"upgrade":return{tier:Te.LOCAL,handler:"upgrade",params:{version:t.args[0]||null}};case"help":return{tier:Te.LOCAL,handler:"help",params:{command:t.subcommand}};case"version":return{tier:Te.LOCAL,handler:"version",params:{}};case"query":default:return{tier:e,handler:"query",params:{query:t.query,stdinContent:t.stdinContent}}}}function Zce(t){let e=t.subcommand??t.args[0]??"show";return{tier:Te.LOCAL,handler:`config:${e}`,params:{key:t.args[0],value:t.args[1]}}}function eue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`mcp:${e}`,params:{name:t.args[0],args:t.args.slice(1)}}}function tue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`prompt:${e}`,params:{name:t.args[0],args:t.args.slice(1)}}}function rue(t){let e=t.subcommand??t.args[0];return{tier:Te.LOCAL,handler:e?`stats:${e}`:"stats",params:{}}}function nue(t){let e=t.subcommand??t.args[0]??"list";return{tier:Te.LOCAL,handler:`history:${e}`,params:{query:t.args[0],id:t.args[0]}}}var sue=new Set(["--model","--host","--continue-chat","-c"]);function oue(t){let e=[];t.subcommand&&e.push(t.subcommand);let r=[];for(let s=0;s<t.args.length;s++){let o=t.args[s];if(sue.has(o)){s++;continue}o.startsWith("-")||r.push(o)}e.push(...r);let n=e.join(" ");return{tier:Te.SERVER,handler:"run",params:{operation:n}}}kt();qy();bo();Se();import{createInterface as L3e}from"readline";import{spawn as F3e}from"child_process";u1();An();rd();at();nA();var K4e={timeout:12e4,retries:3,retryDelay:1e3,handshakeTimeout:5e3};function Q4e(t,e){let r=new URL(t),n=r.protocol==="https:"?"wss:":"ws:";if(e){if(!(r.protocol==="https:"||r.protocol==="wss:")&&!Lf(r.hostname))throw new Error(`Refusing to send the cloud key over an insecure (${r.protocol}) connection to ${r.hostname} \u2014 use https/wss.`);return{url:`${n}//${r.host}/v1/ws/execute`,headers:{Authorization:`Bearer ${e}`}}}return{url:`${n}//${r.host}/ws/execute`}}var Rs=class{options;ws=null;activityTimeout=null;mcpExecutor=null;constructor(e){this.options={...K4e,...e}}async initializeMCP(){if(!this.mcpExecutor){let{ClientMCPExecutor:e}=await Promise.resolve().then(()=>(fd(),md)),{createHeadlessMcpGate:r}=await Promise.resolve().then(()=>(Ao(),La));this.mcpExecutor=new e,this.mcpExecutor.setPermissionGate(r()),await this.mcpExecutor.initialize(),j(`MCP executor initialized with ${this.mcpExecutor.getConnectionCount()} connections`)}}async executeRequest(e,r){let n=null,s=Q4e(this.options.url,this.options.cloudApiKey);for(let o=0;o<this.options.retries;o++)try{return await this.executeWithRetry(s,e,r)}catch(i){if(n=i instanceof Error?i:new Error(String(i)),j(`Attempt ${o+1} failed: ${n.message}`),n instanceof Lu||n.message.includes("Authentication"))throw n;if(this.options.cloudApiKey&&n instanceof Pu){let a=new URL(this.options.url);throw new yo(Rl(a.hostname),"CLOUD_UNREACHABLE")}if(o<this.options.retries-1){let a=this.options.retryDelay*Math.pow(2,o);j(`Retrying in ${a}ms...`),await this.sleep(a)}}throw n??new ya("Max retries exceeded")}async executeWithRetry(e,r,n){return new Promise((s,o)=>{let i=e.url;j(`Connecting to ${i}`);try{this.ws=new ss(i,{handshakeTimeout:this.options.handshakeTimeout,...e.headers?{headers:e.headers}:{}})}catch{let p=new URL(this.options.url);o(new Pu(p.hostname||"localhost",p.port||void 0));return}let a=!1,l=null,c=null,u=!1,d=p=>{a||(a=!0,this.cleanup(),o(p))};this.resetActivityTimeout(()=>{a||(this.cleanup(),o(new Sf("WebSocket activity",this.options.timeout)))}),this.ws.on("open",()=>{j("WebSocket connected, sending request"),this.ws?.send(JSON.stringify({...r,protocol_version:2}))}),this.ws.on("message",p=>{this.resetActivityTimeout(()=>{a||(this.cleanup(),o(new Sf("WebSocket activity",this.options.timeout)))});let f;try{f=JSON.parse(p.toString())}catch(_){let E=p?String(p):"<undefined>";j(`Failed to parse message: ${E}`),d(new Error(`Failed to parse server message: ${_.message}`));return}let h=m1(f,WU);if(h.kind==="malformed"){let _=YU(f);d(_?new Lu("cloud_error",_):new ya(`Malformed server frame: ${h.reason}`));return}if(h.kind==="unknown"){u||(u=!0,j(`Received an unrecognized frame type '${h.type}'; ignoring`));return}let g=h.frame;if(c===null&&g.protocol_version!==void 0&&(c=g1(g.protocol_version),c==="hard")){d(new ya(_1(g.protocol_version)));return}if(f1.has(g.type)&&!h1(g)){d(new ya(`Malformed ${g.type} payload`));return}this.handleMessage(g,n,_=>{a=!0,l=_,this.cleanup(),s(_)},_=>{a=!0,this.cleanup(),o(_)})}),this.ws.on("error",p=>{if(j(`WebSocket error: ${p.message}`),!a){a=!0,this.cleanup();let f=new URL(this.options.url);o(new Pu(f.hostname||"localhost",f.port||void 0))}}),this.ws.on("close",(p,f)=>{j(`WebSocket closed: ${p} ${f.toString()}`),a||(a=!0,this.cleanup(),l?s(l):o(new ya(`Connection closed unexpectedly: ${p}`)))})})}handleMessage(e,r,n,s){switch(e.type){case"token":{let o=e;r?.onToken?.(o.data);break}case"complete":{let o=e,i=o.metadata||{},a=this.convertServerMetadata(o),l={result:o.result,metadata:a,clientSideExecution:i.client_side_execution===!0,userRequest:i.user_request};r?.onComplete?.(l),n(l);break}case"error":{let o=e,i=new Lu(o.code,o.message);r?.onError?.(i),s(i);break}case"mcp_query_tools":{j("Received mcp_query_tools request"),this.handleMCPQueryTools(e);break}case"mcp_tool_request":{j("Received mcp_tool_request"),this.handleMCPToolRequest(e);break}default:j(`Unknown message type: ${e.type}`)}}convertServerMetadata(e){let r=e.metadata||{},n,s;r.tokens?(n=r.tokens.input,s=r.tokens.output):(n=r.input_tokens,s=r.output_tokens);let o=r.cost??r.cost_usd,i=r.execution_time??r.total_time;return{function_name:e.function_name,tokens_in:n,tokens_out:s,cost:typeof o=="number"?o:void 0,model:typeof r.model=="string"?r.model:void 0,provider:typeof r.provider=="string"?r.provider:void 0,execution_time:typeof i=="number"?i:void 0,task_id:typeof r.task_id=="string"?r.task_id:void 0,chat_url:typeof r.chat_url=="string"?r.chat_url:void 0}}async handleMCPQueryTools(e){try{if(!this.mcpExecutor){let{ClientMCPExecutor:n}=await Promise.resolve().then(()=>(fd(),md)),{createHeadlessMcpGate:s}=await Promise.resolve().then(()=>(Ao(),La));this.mcpExecutor=new n,this.mcpExecutor.setPermissionGate(s()),await this.mcpExecutor.initialize()}let r=await this.mcpExecutor.handleQueryTools(e);this.ws?.send(JSON.stringify(r))}catch(r){let n=r instanceof Error?r.message:String(r),s=r instanceof Error?r.stack:void 0;j(`Error handling mcp_query_tools: ${n}${s?`
3566
3566
  ${s}`:""}`),this.ws?.send(JSON.stringify({type:"mcp_query_tools_response",request_id:e.request_id||"unknown",success:!1,error:n,tools:[]}))}}async handleMCPToolRequest(e){try{if(!this.mcpExecutor){let{ClientMCPExecutor:n}=await Promise.resolve().then(()=>(fd(),md)),{createHeadlessMcpGate:s}=await Promise.resolve().then(()=>(Ao(),La));this.mcpExecutor=new n,this.mcpExecutor.setPermissionGate(s()),await this.mcpExecutor.initialize()}let r=await this.mcpExecutor.handleToolExecution(e);this.ws?.send(JSON.stringify(r))}catch(r){j(`Error handling mcp_tool_request: ${r}`),this.ws?.send(JSON.stringify({type:"mcp_tool_response",request_id:e.request_id||"unknown",success:!1,error:String(r)}))}}resetActivityTimeout(e){this.activityTimeout&&clearTimeout(this.activityTimeout),this.activityTimeout=setTimeout(e,this.options.timeout)}cleanup(){if(this.activityTimeout&&(clearTimeout(this.activityTimeout),this.activityTimeout=null),this.ws){try{this.ws.close()}catch(e){j(`WebSocket close error: ${e instanceof Error?e.message:String(e)}`)}this.ws=null}}async shutdownMCP(){this.mcpExecutor&&(await this.mcpExecutor.shutdown(),this.mcpExecutor=null)}disconnect(){this.cleanup()}sleep(e){return new Promise(r=>setTimeout(r,e))}};Se();import yw from"node:process";import Die from"node:process";import gw from"node:process";var X4e=(t,e,r,n)=>{if(r==="length"||r==="prototype"||r==="arguments"||r==="caller")return;let s=Object.getOwnPropertyDescriptor(t,r),o=Object.getOwnPropertyDescriptor(e,r);!J4e(s,o)&&n||Object.defineProperty(t,r,o)},J4e=function(t,e){return t===void 0||t.configurable||t.writable===e.writable&&t.enumerable===e.enumerable&&t.configurable===e.configurable&&(t.writable||t.value===e.value)},Z4e=(t,e)=>{let r=Object.getPrototypeOf(e);r!==Object.getPrototypeOf(t)&&Object.setPrototypeOf(t,r)},e8e=(t,e)=>`/* Wrapped ${t}*/
3567
3567
  ${e}`,t8e=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),r8e=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),n8e=(t,e,r)=>{let n=r===""?"":`with ${r.trim()}() `,s=e8e.bind(null,n,e.toString());Object.defineProperty(s,"name",r8e);let{writable:o,enumerable:i,configurable:a}=t8e;Object.defineProperty(t,"toString",{value:s,writable:o,enumerable:i,configurable:a})};function UP(t,e,{ignoreNonConfigurable:r=!1}={}){let{name:n}=t;for(let s of Reflect.ownKeys(e))X4e(t,e,s,r);return Z4e(t,e),n8e(t,e,n),t}var mw=new WeakMap,wie=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,n=0,s=t.displayName||t.name||"<anonymous>",o=function(...i){if(mw.set(o,++n),n===1)r=t.apply(this,i),t=void 0;else if(e.throw===!0)throw new Error(`Function \`${s}\` can only be called once`);return r};return UP(o,t),mw.set(o,n),o};wie.callCount=t=>{if(!mw.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return mw.get(t)};var Cie=wie;var mu=[];mu.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&mu.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&mu.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var fw=t=>!!t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function",BP=Symbol.for("signal-exit emitter"),GP=globalThis,s8e=Object.defineProperty.bind(Object),zP=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(GP[BP])return GP[BP];s8e(GP,BP,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,r){this.listeners[e].push(r)}removeListener(e,r){let n=this.listeners[e],s=n.indexOf(r);s!==-1&&(s===0&&n.length===1?n.length=0:n.splice(s,1))}emit(e,r,n){if(this.emitted[e])return!1;this.emitted[e]=!0;let s=!1;for(let o of this.listeners[e])s=o(r,n)===!0||s;return e==="exit"&&(s=this.emit("afterExit",r,n)||s),s}},hw=class{},o8e=t=>({onExit(e,r){return t.onExit(e,r)},load(){return t.load()},unload(){return t.unload()}}),qP=class extends hw{onExit(){return()=>{}}load(){}unload(){}},HP=class extends hw{#i=jP.platform==="win32"?"SIGINT":"SIGHUP";#r=new zP;#e;#s;#p;#t={};#o=!1;constructor(e){super(),this.#e=e,this.#t={};for(let r of mu)this.#t[r]=()=>{let n=this.#e.listeners(r),{count:s}=this.#r,o=e;if(typeof o.__signal_exit_emitter__=="object"&&typeof o.__signal_exit_emitter__.count=="number"&&(s+=o.__signal_exit_emitter__.count),n.length===s){this.unload();let i=this.#r.emit("exit",null,r),a=r==="SIGHUP"?this.#i:r;i||e.kill(e.pid,a)}};this.#p=e.reallyExit,this.#s=e.emit}onExit(e,r){if(!fw(this.#e))return()=>{};this.#o===!1&&this.load();let n=r?.alwaysLast?"afterExit":"exit";return this.#r.on(n,e),()=>{this.#r.removeListener(n,e),this.#r.listeners.exit.length===0&&this.#r.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#o){this.#o=!0,this.#r.count+=1;for(let e of mu)try{let r=this.#t[e];r&&this.#e.on(e,r)}catch{}this.#e.emit=(e,...r)=>this.#m(e,...r),this.#e.reallyExit=e=>this.#n(e)}}unload(){this.#o&&(this.#o=!1,mu.forEach(e=>{let r=this.#t[e];if(!r)throw new Error("Listener not defined for signal: "+e);try{this.#e.removeListener(e,r)}catch{}}),this.#e.emit=this.#s,this.#e.reallyExit=this.#p,this.#r.count-=1)}#n(e){return fw(this.#e)?(this.#e.exitCode=e||0,this.#r.emit("exit",this.#e.exitCode,null),this.#p.call(this.#e,this.#e.exitCode)):0}#m(e,...r){let n=this.#s;if(e==="exit"&&fw(this.#e)){typeof r[0]=="number"&&(this.#e.exitCode=r[0]);let s=n.call(this.#e,e,...r);return this.#r.emit("exit",this.#e.exitCode,null),s}else return n.call(this.#e,e,...r)}},jP=globalThis.process,{onExit:vie,load:Hft,unload:jft}=o8e(fw(jP)?new HP(jP):new qP);var kie=gw.stderr.isTTY?gw.stderr:gw.stdout.isTTY?gw.stdout:void 0,i8e=kie?Cie(()=>{vie(()=>{kie.write("\x1B[?25h")},{alwaysLast:!0})}):()=>{},Aie=i8e;var _w=!1,um={};um.show=(t=Die.stderr)=>{t.isTTY&&(_w=!1,t.write("\x1B[?25h"))};um.hide=(t=Die.stderr)=>{t.isTTY&&(Aie(),_w=!0,t.write("\x1B[?25l"))};um.toggle=(t,e)=>{t!==void 0&&(_w=t),_w?um.show(e):um.hide(e)};var YP=um;var J_=vt(WP(),1);Se();import ao from"node:process";function VP(){return ao.platform!=="win32"?ao.env.TERM!=="linux":!!ao.env.CI||!!ao.env.WT_SESSION||!!ao.env.TERMINUS_SUBLIME||ao.env.ConEmuTask==="{cmd::Cmder}"||ao.env.TERM_PROGRAM==="Terminus-Sublime"||ao.env.TERM_PROGRAM==="vscode"||ao.env.TERM==="xterm-256color"||ao.env.TERM==="alacritty"||ao.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var l8e={info:m.blue("\u2139"),success:m.green("\u2714"),warning:m.yellow("\u26A0"),error:m.red("\u2716")},c8e={info:m.blue("i"),success:m.green("\u221A"),warning:m.yellow("\u203C"),error:m.red("\xD7")},u8e=VP()?l8e:c8e,X_=u8e;Bb();var d8e=hc();function KP(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(d8e,"")}Bb();var p8e=hc();function QP(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(p8e,"")}function Oie(t){return t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}function xie(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function Mie(t){return t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9776&&t<=9783||t>=9800&&t<=9811||t===9855||t>=9866&&t<=9871||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t>=94192&&t<=94198||t>=94208&&t<=101589||t>=101631&&t<=101662||t>=101760&&t<=101874||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128728||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129674||t>=129678&&t<=129734||t===129736||t>=129741&&t<=129756||t>=129759&&t<=129770||t>=129775&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}function m8e(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}function Pie(t,{ambiguousAsWide:e=!1}={}){return m8e(t),xie(t)||Mie(t)||e&&Oie(t)?2:1}var $ie=vt(Fie(),1),f8e=new Intl.Segmenter,h8e=new RegExp("^\\p{Default_Ignorable_Code_Point}$","u");function XP(t,e={}){if(typeof t!="string"||t.length===0)return 0;let{ambiguousIsNarrow:r=!0,countAnsiEscapeCodes:n=!1}=e;if(n||(t=QP(t)),t.length===0)return 0;let s=0,o={ambiguousAsWide:!r};for(let{segment:i}of f8e.segment(t)){let a=i.codePointAt(0);if(!(a<=31||a>=127&&a<=159)&&!(a>=8203&&a<=8207||a===65279)&&!(a>=768&&a<=879||a>=6832&&a<=6911||a>=7616&&a<=7679||a>=8400&&a<=8447||a>=65056&&a<=65071)&&!(a>=55296&&a<=57343)&&!(a>=65024&&a<=65039)&&!h8e.test(i)){if((0,$ie.default)().test(i)){s+=2;continue}s+=Pie(a,o)}}return s}function JP({stream:t=process.stdout}={}){return!!(t&&t.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}import Uie from"node:process";function ZP(){let{env:t}=Uie,{TERM:e,TERM_PROGRAM:r}=t;return Uie.platform!=="win32"?e!=="linux":!!t.WT_SESSION||!!t.TERMINUS_SUBLIME||t.ConEmuTask==="{cmd::Cmder}"||r==="Terminus-Sublime"||r==="vscode"||e==="xterm-256color"||e==="alacritty"||e==="rxvt-unicode"||e==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}import Jo from"node:process";var g8e=3,eL=class{#i=0;start(){this.#i++,this.#i===1&&this.#r()}stop(){if(this.#i<=0)throw new Error("`stop` called more times than `start`");this.#i--,this.#i===0&&this.#e()}#r(){Jo.platform==="win32"||!Jo.stdin.isTTY||(Jo.stdin.setRawMode(!0),Jo.stdin.on("data",this.#s),Jo.stdin.resume())}#e(){Jo.stdin.isTTY&&(Jo.stdin.off("data",this.#s),Jo.stdin.pause(),Jo.stdin.setRawMode(!1))}#s(e){e[0]===g8e&&Jo.emit("SIGINT")}},_8e=new eL,tL=_8e;var E8e=vt(WP(),1),rL=class{#i=0;#r=!1;#e=0;#s=-1;#p=0;#t;#o;#n;#m;#h;#c;#u;#d;#g;#a;#l;color;constructor(e){typeof e=="string"&&(e={text:e}),this.#t={color:"cyan",stream:yw.stderr,discardStdin:!0,hideCursor:!0,...e},this.color=this.#t.color,this.spinner=this.#t.spinner,this.#h=this.#t.interval,this.#n=this.#t.stream,this.#c=typeof this.#t.isEnabled=="boolean"?this.#t.isEnabled:JP({stream:this.#n}),this.#u=typeof this.#t.isSilent=="boolean"?this.#t.isSilent:!1,this.text=this.#t.text,this.prefixText=this.#t.prefixText,this.suffixText=this.#t.suffixText,this.indent=this.#t.indent,yw.env.NODE_ENV==="test"&&(this._stream=this.#n,this._isEnabled=this.#c,Object.defineProperty(this,"_linesToClear",{get(){return this.#i},set(r){this.#i=r}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#s}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}))}get indent(){return this.#d}set indent(e=0){if(!(e>=0&&Number.isInteger(e)))throw new Error("The `indent` option must be an integer from 0 and up");this.#d=e,this.#f()}get interval(){return this.#h??this.#o.interval??100}get spinner(){return this.#o}set spinner(e){if(this.#s=-1,this.#h=void 0,typeof e=="object"){if(e.frames===void 0)throw new Error("The given spinner must have a `frames` property");this.#o=e}else if(!ZP())this.#o=J_.default.line;else if(e===void 0)this.#o=J_.default.dots;else if(e!=="default"&&J_.default[e])this.#o=J_.default[e];else throw new Error(`There is no built-in spinner named '${e}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#g}set text(e=""){this.#g=e,this.#f()}get prefixText(){return this.#a}set prefixText(e=""){this.#a=e,this.#f()}get suffixText(){return this.#l}set suffixText(e=""){this.#l=e,this.#f()}get isSpinning(){return this.#m!==void 0}#_(e=this.#a,r=" "){return typeof e=="string"&&e!==""?e+r:typeof e=="function"?e()+r:""}#E(e=this.#l,r=" "){return typeof e=="string"&&e!==""?r+e:typeof e=="function"?r+e():""}#f(){let e=this.#n.columns??80,r=this.#_(this.#a,"-"),n=this.#E(this.#l,"-"),s=" ".repeat(this.#d)+r+"--"+this.#g+"--"+n;this.#e=0;for(let o of KP(s).split(`
3568
3568
  `))this.#e+=Math.max(1,Math.ceil(XP(o,{countAnsiEscapeCodes:!0})/e))}get isEnabled(){return this.#c&&!this.#u}set isEnabled(e){if(typeof e!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#c=e}get isSilent(){return this.#u}set isSilent(e){if(typeof e!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#u=e}frame(){let e=Date.now();(this.#s===-1||e-this.#p>=this.interval)&&(this.#s=++this.#s%this.#o.frames.length,this.#p=e);let{frames:r}=this.#o,n=r[this.#s];this.color&&(n=m[this.color](n));let s=typeof this.#a=="string"&&this.#a!==""?this.#a+" ":"",o=typeof this.text=="string"?" "+this.text:"",i=typeof this.#l=="string"&&this.#l!==""?" "+this.#l:"";return s+n+o+i}clear(){if(!this.#c||!this.#n.isTTY)return this;this.#n.cursorTo(0);for(let e=0;e<this.#i;e++)e>0&&this.#n.moveCursor(0,-1),this.#n.clearLine(1);return(this.#d||this.lastIndent!==this.#d)&&this.#n.cursorTo(this.#d),this.lastIndent=this.#d,this.#i=0,this}render(){return this.#u?this:(this.clear(),this.#n.write(this.frame()),this.#i=this.#e,this)}start(e){return e&&(this.text=e),this.#u?this:this.#c?this.isSpinning?this:(this.#t.hideCursor&&YP.hide(this.#n),this.#t.discardStdin&&yw.stdin.isTTY&&(this.#r=!0,tL.start()),this.render(),this.#m=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#n.write(`- ${this.text}
@@ -3573,7 +3573,7 @@ ${e}`,t8e=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),r8e=Obj
3573
3573
  `+this.color(s,m.dim)}formatError(e){let r=[];return r.push(this.color(`${this.emoji("\u274C ")}${e.message}`,m.red)),e.suggestions&&e.suggestions.length>0&&(r.push(""),r.push(this.color(`${this.emoji("\u{1F4A1} ")}Solutions:`,m.yellow)),e.suggestions.forEach((n,s)=>{r.push(this.color(` ${s+1}. ${n}`,m.gray))})),r.join(`
3574
3574
  `)}formatConfig(e){let r=[];r.push(this.color(`${this.emoji("\u{1F4CB} ")}Current AII Configuration:`,L.model)),r.push(`- Config file: ${e.configFile}`),r.push(`- Storage path: ${e.storagePath}`),e.apiUrl&&r.push(`- Aii Server: ${e.apiUrl}`);let n=e.hasApiKey?this.color("\u2713",m.green):this.color("\u2717",m.red),s=e.model.startsWith(e.provider+"/")?e.model.slice(e.provider.length+1):e.model;if(r.push(`- LLM provider: ${e.provider} (${s}) - ${n}`),e.webSearch){let o=e.webSearch.enabled?this.color("\u2713",m.green):this.color("\u2717",m.red);r.push(`- Web search: ${e.webSearch.provider??"none"} - ${o}`)}return e.issues&&e.issues.length>0&&r.push(`- Configuration issues: ${e.issues.length}`),r.join(`
3575
3575
  `)}formatHealthCheck(e,r){let n=[],s=r?`Aii Doctor v${r}`:"Aii Doctor";n.push(this.color(s,L.model)),n.push("");let o=22;for(let l of e){let c=o-l.name.length-1,u=".".repeat(Math.max(2,c)),d,p;switch(l.status){case"ok":d="OK",p=m.green;break;case"warn":d="WARN",p=m.yellow;break;case"error":d="FAIL",p=m.red;break}let f=this.color(d,p),h=l.message?` (${l.message})`:"";n.push(` ${l.name} ${this.color(u,m.gray)} ${f}${h}`)}let i=e.filter(l=>l.status==="error").length,a=e.filter(l=>l.status==="warn").length;return n.push(""),i>0?n.push(` ${this.color(`${i} check${i>1?"s":""} failed.`,m.red)}`):a>0?n.push(` ${this.color("All checks passed with warnings.",m.yellow)}`):n.push(` ${this.color("All checks passed.",m.green)}`),n.join(`
3576
- `)}};function Un(t={}){return new iL(t)}An();lo();Se();import*as jie from"readline";An();lo();import*as Ns from"fs";import*as bw from"path";import*as Bie from"os";import*as pm from"fs";import{randomUUID as b8e}from"crypto";function lL(t,e,r=384){let n=`${t}.${process.pid}.${b8e()}.tmp`;try{pm.writeFileSync(n,e,{encoding:"utf-8",mode:r,flag:"wx"}),pm.renameSync(n,t)}catch(s){try{pm.unlinkSync(n)}catch{}throw s}}var Z_=bw.join(Bie.homedir(),".aii","conversations"),cL=bw.join(Z_,"current.json");function Tw(){Ns.existsSync(Z_)||Ns.mkdirSync(Z_,{recursive:!0,mode:448});try{Ns.chmodSync(Z_,448)}catch{}}function T8e(){return`conv_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}function w8e(t){let r=t.trim().replace(/\s+/g," ");return r.length>50&&(r=r.substring(0,50).trim()+"..."),r}function Gie(t){return bw.join(Z_,`${t}.json`)}function zie(){Tw();try{if(Ns.existsSync(cL)){let t=Ns.readFileSync(cL,"utf-8"),e=JSON.parse(t),r=Gie(e.id);if(Ns.existsSync(r)){let n=Ns.readFileSync(r,"utf-8");return JSON.parse(n)}}}catch{}return qie()}function qie(){Tw();let t={id:T8e(),title:"New Conversation",messages:[],createdAt:Date.now(),updatedAt:Date.now()};return eE(t),C8e(t.id),t}function eE(t){if(Tw(),t.title==="New Conversation"&&t.messages.length>0){let r=t.messages.find(n=>n.role==="user");r&&(t.title=w8e(r.content))}t.updatedAt=Date.now();let e=Gie(t.id);lL(e,JSON.stringify(t,null,2))}function C8e(t){Tw(),lL(cL,JSON.stringify({id:t}))}function Hie(){return qie()}Wc();var v8e="0.17.26",uL=class{configManager;parsed;running=!1;conversation;stats;formatter;effectiveProvider="";constructor(e,r){this.parsed=e,this.configManager=r,this.conversation=zie(),this.stats={startTime:Date.now(),totalRequests:0,cumulativeTokens:0,cumulativeCost:0},this.formatter=Un({colors:!e.flags.noColors,emojis:!e.flags.noEmojis})}async start(){for(this.running=!0,this.displayWelcome();this.running;)try{let e=await this.getUserInput();if(!e.trim()||await this.handleSpecialCommands(e))continue;this.conversation.messages.push({role:"user",content:e,timestamp:Date.now()}),eE(this.conversation),await this.processWithContext(e)}catch(e){if(e instanceof Error&&e.message==="EXIT")break;if(e instanceof Error&&e.message==="INTERRUPTED"){console.log(`
3576
+ `)}};function Un(t={}){return new iL(t)}An();lo();Se();import*as jie from"readline";An();lo();import*as Ns from"fs";import*as bw from"path";import*as Bie from"os";import*as pm from"fs";import{randomUUID as b8e}from"crypto";function lL(t,e,r=384){let n=`${t}.${process.pid}.${b8e()}.tmp`;try{pm.writeFileSync(n,e,{encoding:"utf-8",mode:r,flag:"wx"}),pm.renameSync(n,t)}catch(s){try{pm.unlinkSync(n)}catch{}throw s}}var Z_=bw.join(Bie.homedir(),".aii","conversations"),cL=bw.join(Z_,"current.json");function Tw(){Ns.existsSync(Z_)||Ns.mkdirSync(Z_,{recursive:!0,mode:448});try{Ns.chmodSync(Z_,448)}catch{}}function T8e(){return`conv_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}function w8e(t){let r=t.trim().replace(/\s+/g," ");return r.length>50&&(r=r.substring(0,50).trim()+"..."),r}function Gie(t){return bw.join(Z_,`${t}.json`)}function zie(){Tw();try{if(Ns.existsSync(cL)){let t=Ns.readFileSync(cL,"utf-8"),e=JSON.parse(t),r=Gie(e.id);if(Ns.existsSync(r)){let n=Ns.readFileSync(r,"utf-8");return JSON.parse(n)}}}catch{}return qie()}function qie(){Tw();let t={id:T8e(),title:"New Conversation",messages:[],createdAt:Date.now(),updatedAt:Date.now()};return eE(t),C8e(t.id),t}function eE(t){if(Tw(),t.title==="New Conversation"&&t.messages.length>0){let r=t.messages.find(n=>n.role==="user");r&&(t.title=w8e(r.content))}t.updatedAt=Date.now();let e=Gie(t.id);lL(e,JSON.stringify(t,null,2))}function C8e(t){Tw(),lL(cL,JSON.stringify({id:t}))}function Hie(){return qie()}Wc();var v8e="0.17.27",uL=class{configManager;parsed;running=!1;conversation;stats;formatter;effectiveProvider="";constructor(e,r){this.parsed=e,this.configManager=r,this.conversation=zie(),this.stats={startTime:Date.now(),totalRequests:0,cumulativeTokens:0,cumulativeCost:0},this.formatter=Un({colors:!e.flags.noColors,emojis:!e.flags.noEmojis})}async start(){for(this.running=!0,this.displayWelcome();this.running;)try{let e=await this.getUserInput();if(!e.trim()||await this.handleSpecialCommands(e))continue;this.conversation.messages.push({role:"user",content:e,timestamp:Date.now()}),eE(this.conversation),await this.processWithContext(e)}catch(e){if(e instanceof Error&&e.message==="EXIT")break;if(e instanceof Error&&e.message==="INTERRUPTED"){console.log(`
3577
3577
  \u26A0\uFE0F Interrupted. Type /exit to quit or continue chatting.`);continue}console.error(m.red(`
3578
3578
  \u274C Error: ${e instanceof Error?e.message:String(e)}`)),this.conversation.messages.length>0&&this.conversation.messages[this.conversation.messages.length-1].role==="user"&&(this.conversation.messages.pop(),eE(this.conversation))}}displayWelcome(){console.log("\u{1FABC} Entering interactive mode."),console.log(""),console.log("Controls:"),console.log(" \u2022 Enter - Send message"),console.log(" \u2022 End with \\ - Multi-line mode"),console.log(" \u2022 /exit - Quit chat"),console.log(" \u2022 /help - Show all commands"),console.log("")}getUserInput(){return new Promise((e,r)=>{let n=jie.createInterface({input:process.stdin,output:process.stdout}),s=[],o=!1,i=()=>{o=!0,n.close()},a=l=>{n.question(l,c=>{if(s.length===0&&c.trim().startsWith("/")){i(),e(c.trim());return}c.endsWith("\\")?(s.push(c.slice(0,-1)),a(" ")):(s.push(c),i(),e(s.join(`
3579
3579
  `).trim()))})};n.on("SIGINT",()=>{i(),r(new Error("INTERRUPTED"))}),n.on("close",()=>{o||r(new Error("EXIT"))}),a("> ")})}async handleSpecialCommands(e){let r=e.trim().toLowerCase();if(r.startsWith("/"))r=r.slice(1);else return!1;switch(r){case"exit":case"quit":return await this.handleExit(),!0;case"help":return this.displayHelp(),!0;case"clear":case"new":return this.clearConversation(),!0;case"history":return this.displayConversationHistory(),!0;case"stats":return this.displayStats(),!0;case"version":return this.displayVersion(),!0;default:return console.log(m.yellow(`Unknown command: /${r}. Type /help for available commands.`)),console.log(""),!0}}async processWithContext(e){let r=await this.configManager.load(),n=this.configManager.validate();if(!n.valid)throw new zr(n.issues.join(", "));let o=this.configManager.getServerApiKey()||"aii_sk_7WyvfQ0PRzufJ1G66Qn8Sm4gW9Tealpo6vOWDDUeiv4",i=_r(this.parsed.flags.model??""),a=Ur(i||void 0,r.llm.provider),l=Er(i||r.llm.model,a);this.effectiveProvider=a;let c=this.configManager.getApiKey(a);if(!c)throw new Ht(`Missing API key for provider: ${a}`);this.stats.totalRequests++;let u=Zo(!this.parsed.flags.noAnimations);u.start("");let d=ei({spinner:u,enabled:!this.parsed.flags.noStreaming}),p=this.conversation.messages.slice(-21,-1).map(y=>({role:y.role,content:y.content})),f={api_key:o,system_prompt:null,user_prompt:e,user_message:e,output_mode:"CLEAN",streaming:!this.parsed.flags.noStreaming,model:l,llm_provider:a,llm_api_key:c,provider_api_key:c,client_type:"cli",offline:this.parsed.flags.offline,conversation_history:p.length>0?p:void 0,soul:rn.getInstance().getSoulName()},h=this.parsed.flags.host?`http://${this.parsed.flags.host}`:r.api.url,g=new Rs({url:h}),_="",E=!1;try{let y=await g.executeRequest(f,{onToken:w=>{_+=w,E=!0,d.onToken(w)}});d.flush();let T=y.result||_;!E&&T&&console.log(T),console.log(""),y.metadata&&this.displayExecutionSummary(y.metadata),T&&(this.conversation.messages.push({role:"assistant",content:T,timestamp:Date.now()}),eE(this.conversation))}catch(y){throw u.stop(!0),y}finally{g.disconnect()}}displayExecutionSummary(e){let r=e.cost||0,n=e.tokens_in||0,s=e.tokens_out||0,o=n+s;this.stats.cumulativeTokens+=o,this.stats.cumulativeCost+=r;let i=e.provider,a=!i;console.log(this.formatter.formatExecutionSummary({provider:i||this.effectiveProvider,providerInferred:a,model:e.model,tokens_in:n,tokens_out:s,cost:r,execution_time:e.execution_time})),console.log("")}clearConversation(){this.conversation=Hie(),console.clear(),this.displayWelcome()}displayConversationHistory(){if(this.conversation.messages.length===0){console.log(`
@@ -4263,10 +4263,10 @@ ${r.yellow("CONFIG FILE:")}
4263
4263
  .aii/settings.json Project config (committed, restrict-only)
4264
4264
  .aii/settings.local.json Your local overrides (gitignored)
4265
4265
  ${r.gray("Skip both for a session with: aii --no-project-config")}
4266
- `)}import*as oi from"fs";Zt();async function ale(t,e){let r=Un({colors:!t.flags.noColors,emojis:!t.flags.noEmojis}),n=[],s=`${e.getConfigDir()}/config.yaml`;e.configExists()?n.push({name:"Config",status:"ok",message:s.replace(process.env.HOME||"","~")}):n.push({name:"Config",status:"warn",message:"Not found (using defaults)"});let o=await e.load();e.getApiKey()?n.push({name:"API Key",status:"ok",message:`${o.llm.provider}:${o.llm.model.replace(`${o.llm.provider}/`,"")}`}):n.push({name:"API Key",status:"error",message:`Not configured for ${o.llm.provider}`});let a=await f6e(o.api.url);n.push({name:"Aii Server",status:a.ok?"ok":"error",message:a.message});let l=`${e.getConfigDir()}/mcp_servers.json`;if(oi.existsSync(l))try{let f=oi.readFileSync(l,"utf-8"),h=JSON.parse(f),g=Object.keys(h.mcpServers??{}).length;g>0?n.push({name:"MCP Servers",status:"ok",message:`${g} configured`}):n.push({name:"MCP Servers",status:"warn",message:"Not configured"})}catch{n.push({name:"MCP Servers",status:"warn",message:"Invalid config"})}else n.push({name:"MCP Servers",status:"warn",message:"Not configured"});if(vw())try{let{execSync:f}=await import("child_process"),g=f("docker --version",{timeout:5e3,encoding:"utf-8"}).trim().match(/Docker version ([\d.]+)/);n.push({name:"Docker",status:"ok",message:g?`v${g[1]}`:"Installed"})}catch{n.push({name:"Docker",status:"ok",message:"Installed"})}else n.push({name:"Docker",status:"error",message:"Not installed (brew install --cask docker)"});vw()?kw()?n.push({name:"Docker Daemon",status:"ok",message:"Running"}):n.push({name:"Docker Daemon",status:"error",message:"Not running (open -a Docker)"}):n.push({name:"Docker Daemon",status:"warn",message:"N/A (Docker not installed)"});let c=process.version;parseInt(c.slice(1).split(".")[0],10)>=18?n.push({name:"Node.js",status:"ok",message:c}):n.push({name:"Node.js",status:"error",message:`${c} (requires >= 18)`});let d=await h6e();n.push(...d),console.log(r.formatHealthCheck(n,Wl)),n.some(f=>f.status==="error")&&process.exit(1)}async function f6e(t){try{let e=new AbortController,r=setTimeout(()=>e.abort(),3e3),n=await fetch(`${t}/api/status`,{signal:e.signal});if(clearTimeout(r),n.ok){let s=new URL(t);return{ok:!0,message:`${s.hostname}:${s.port||26169}`}}else return{ok:!1,message:`Not responding (${n.status})`}}catch(e){return e instanceof Error&&e.name==="AbortError"?{ok:!1,message:"Connection timeout"}:{ok:!1,message:"Not running"}}}async function h6e(){let t=[];try{let{getAiiHome:e}=await Promise.resolve().then(()=>(qn(),A1)),r=`${e()}/skills`;if(!oi.existsSync(r))return t;let n=oi.readdirSync(r,{withFileTypes:!0});for(let s of n){if(!s.isDirectory()||s.name.startsWith("."))continue;let o=`${r}/${s.name}/SKILL.md`;oi.existsSync(o)||t.push({name:"Skill Shadow",status:"warn",message:`~/.aii/skills/${s.name}/ has no SKILL.md \u2014 may shadow other skills`})}try{let{PersonaManager:s}=await Promise.resolve().then(()=>(wt(),Dt));if(s.hasInstance()&&s.getInstance().isActive()){let o=s.getInstance().getActive();if(o)for(let i of o.skillPaths){let a=i.split("/").pop()||"",l=`${r}/${a}`;oi.existsSync(l)&&oi.existsSync(`${l}/SKILL.md`)&&t.push({name:"Skill Shadow",status:"ok",message:`"${a}" user-authored shadows persona-bundled (intentional?)`})}}}catch{}}catch{}return t}Se();Zt();import{execSync as WL}from"node:child_process";var Zw="@aiiware/aii";async function lle(t){let e=t.args||[],r=t.subcommand||e[0]||"";if(t.flags.help||r==="help"||r==="--help"||e.includes("--help")){let n="0.17.26";console.log(""),console.log(L.logo(" Install")),console.log(""),console.log(` Current version: ${L.model(n)}`),console.log(""),console.log(m.yellow(" USAGE:")),console.log(` ${m.green("aii install")} Update to latest version`),console.log(` ${m.green("aii install <version>")} Install specific version`),console.log(` ${m.green("aii install skill <src>")} Install a skill package ${m.dim("(coming soon)")}`),console.log(` ${m.green("aii install mcp <name>")} Install an MCP server ${m.dim("(coming soon)")}`),console.log(""),console.log(m.yellow(" EXAMPLES:")),console.log(` ${m.green("aii install")} ${m.dim("# Self-update to latest")}`),console.log(` ${m.green("aii install 0.13.10")} ${m.dim("# Pin to specific version")}`),console.log("");return}if(r==="skill"){console.log("Skill installation coming soon. For now use: /skills install owner/repo");return}if(r==="mcp"){console.log("MCP installation coming soon. For now use: aii mcp install <server>");return}console.log("\x1B[33m\u26A0 `aii install` for self-update is deprecated. Use `aii upgrade` instead.\x1B[0m"),console.log(`\x1B[33m This alias will be removed in v0.16.x.\x1B[0m
4267
- `),await g6e(r)}async function g6e(t){let e="0.17.26",r=t&&t!=="latest"?t:"";if(console.log(""),r){console.log(`\u{1FABC} Installing Aii CLI v${r}...`),console.log("");try{WL(`npm install -g ${Zw}@${r}`,{stdio:"inherit",timeout:12e4})}catch{console.error(`
4266
+ `)}import*as oi from"fs";Zt();async function ale(t,e){let r=Un({colors:!t.flags.noColors,emojis:!t.flags.noEmojis}),n=[],s=`${e.getConfigDir()}/config.yaml`;e.configExists()?n.push({name:"Config",status:"ok",message:s.replace(process.env.HOME||"","~")}):n.push({name:"Config",status:"warn",message:"Not found (using defaults)"});let o=await e.load();e.getApiKey()?n.push({name:"API Key",status:"ok",message:`${o.llm.provider}:${o.llm.model.replace(`${o.llm.provider}/`,"")}`}):n.push({name:"API Key",status:"error",message:`Not configured for ${o.llm.provider}`});let a=await f6e(o.api.url);n.push({name:"Aii Server",status:a.ok?"ok":"error",message:a.message});let l=`${e.getConfigDir()}/mcp_servers.json`;if(oi.existsSync(l))try{let f=oi.readFileSync(l,"utf-8"),h=JSON.parse(f),g=Object.keys(h.mcpServers??{}).length;g>0?n.push({name:"MCP Servers",status:"ok",message:`${g} configured`}):n.push({name:"MCP Servers",status:"warn",message:"Not configured"})}catch{n.push({name:"MCP Servers",status:"warn",message:"Invalid config"})}else n.push({name:"MCP Servers",status:"warn",message:"Not configured"});if(vw())try{let{execSync:f}=await import("child_process"),g=f("docker --version",{timeout:5e3,encoding:"utf-8"}).trim().match(/Docker version ([\d.]+)/);n.push({name:"Docker",status:"ok",message:g?`v${g[1]}`:"Installed"})}catch{n.push({name:"Docker",status:"ok",message:"Installed"})}else n.push({name:"Docker",status:"error",message:"Not installed (brew install --cask docker)"});vw()?kw()?n.push({name:"Docker Daemon",status:"ok",message:"Running"}):n.push({name:"Docker Daemon",status:"error",message:"Not running (open -a Docker)"}):n.push({name:"Docker Daemon",status:"warn",message:"N/A (Docker not installed)"});let c=process.version;parseInt(c.slice(1).split(".")[0],10)>=18?n.push({name:"Node.js",status:"ok",message:c}):n.push({name:"Node.js",status:"error",message:`${c} (requires >= 18)`});let d=await h6e();n.push(...d),console.log(r.formatHealthCheck(n,Wl)),n.some(f=>f.status==="error")&&process.exit(1)}async function f6e(t){try{let e=new AbortController,r=setTimeout(()=>e.abort(),3e3),n=await fetch(`${t}/api/status`,{signal:e.signal});if(clearTimeout(r),n.ok){let s=new URL(t);return{ok:!0,message:`${s.hostname}:${s.port||26169}`}}else return{ok:!1,message:`Not responding (${n.status})`}}catch(e){return e instanceof Error&&e.name==="AbortError"?{ok:!1,message:"Connection timeout"}:{ok:!1,message:"Not running"}}}async function h6e(){let t=[];try{let{getAiiHome:e}=await Promise.resolve().then(()=>(qn(),A1)),r=`${e()}/skills`;if(!oi.existsSync(r))return t;let n=oi.readdirSync(r,{withFileTypes:!0});for(let s of n){if(!s.isDirectory()||s.name.startsWith("."))continue;let o=`${r}/${s.name}/SKILL.md`;oi.existsSync(o)||t.push({name:"Skill Shadow",status:"warn",message:`~/.aii/skills/${s.name}/ has no SKILL.md \u2014 may shadow other skills`})}try{let{PersonaManager:s}=await Promise.resolve().then(()=>(wt(),Dt));if(s.hasInstance()&&s.getInstance().isActive()){let o=s.getInstance().getActive();if(o)for(let i of o.skillPaths){let a=i.split("/").pop()||"",l=`${r}/${a}`;oi.existsSync(l)&&oi.existsSync(`${l}/SKILL.md`)&&t.push({name:"Skill Shadow",status:"ok",message:`"${a}" user-authored shadows persona-bundled (intentional?)`})}}}catch{}}catch{}return t}Se();Zt();import{execSync as WL}from"node:child_process";var Zw="@aiiware/aii";async function lle(t){let e=t.args||[],r=t.subcommand||e[0]||"";if(t.flags.help||r==="help"||r==="--help"||e.includes("--help")){let n="0.17.27";console.log(""),console.log(L.logo(" Install")),console.log(""),console.log(` Current version: ${L.model(n)}`),console.log(""),console.log(m.yellow(" USAGE:")),console.log(` ${m.green("aii install")} Update to latest version`),console.log(` ${m.green("aii install <version>")} Install specific version`),console.log(` ${m.green("aii install skill <src>")} Install a skill package ${m.dim("(coming soon)")}`),console.log(` ${m.green("aii install mcp <name>")} Install an MCP server ${m.dim("(coming soon)")}`),console.log(""),console.log(m.yellow(" EXAMPLES:")),console.log(` ${m.green("aii install")} ${m.dim("# Self-update to latest")}`),console.log(` ${m.green("aii install 0.13.10")} ${m.dim("# Pin to specific version")}`),console.log("");return}if(r==="skill"){console.log("Skill installation coming soon. For now use: /skills install owner/repo");return}if(r==="mcp"){console.log("MCP installation coming soon. For now use: aii mcp install <server>");return}console.log("\x1B[33m\u26A0 `aii install` for self-update is deprecated. Use `aii upgrade` instead.\x1B[0m"),console.log(`\x1B[33m This alias will be removed in v0.16.x.\x1B[0m
4267
+ `),await g6e(r)}async function g6e(t){let e="0.17.27",r=t&&t!=="latest"?t:"";if(console.log(""),r){console.log(`\u{1FABC} Installing Aii CLI v${r}...`),console.log("");try{WL(`npm install -g ${Zw}@${r}`,{stdio:"inherit",timeout:12e4})}catch{console.error(`
4268
4268
  \u274C Failed to install v${r}`),console.error(` Try manually: npm install -g ${Zw}@${r}`),process.exit(1)}}else{console.log("\u{1FABC} Updating Aii CLI to latest..."),console.log(` Current version: ${e}`),console.log("");try{WL(`npm install -g ${Zw}@latest`,{stdio:"inherit",timeout:12e4})}catch{console.error(`
4269
- \u274C Failed to update Aii CLI`),console.error(` Try manually: npm install -g ${Zw}@latest`),process.exit(1)}}try{let n=WL("aii --version 2>/dev/null",{encoding:"utf-8",timeout:1e4,stdio:"pipe"}).trim();console.log(""),console.log(n===e?`\u2713 Aii CLI is already up to date (${e})`:`\u2713 Aii CLI updated: ${e} \u2192 ${n}`)}catch{console.log(""),console.log("\u2713 Aii CLI installed. Restart your terminal to use the new version.")}}Se();var cle="0.17.26";function VL(t){let r=!t.flags.noColors?m:{cyan:n=>n,yellow:n=>n,gray:n=>n,green:n=>n};console.log(`
4269
+ \u274C Failed to update Aii CLI`),console.error(` Try manually: npm install -g ${Zw}@latest`),process.exit(1)}}try{let n=WL("aii --version 2>/dev/null",{encoding:"utf-8",timeout:1e4,stdio:"pipe"}).trim();console.log(""),console.log(n===e?`\u2713 Aii CLI is already up to date (${e})`:`\u2713 Aii CLI updated: ${e} \u2192 ${n}`)}catch{console.log(""),console.log("\u2713 Aii CLI installed. Restart your terminal to use the new version.")}}Se();var cle="0.17.27";function VL(t){let r=!t.flags.noColors?m:{cyan:n=>n,yellow:n=>n,gray:n=>n,green:n=>n};console.log(`
4270
4270
  ${r.cyan("AII")} - AI-powered CLI assistant v${cle}
4271
4271
 
4272
4272
  ${r.yellow("USAGE:")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiiware/aii",
3
- "version": "0.17.26",
3
+ "version": "0.17.27",
4
4
  "type": "module",
5
5
  "description": "🪼 AI-powered CLI assistant for terminal productivity",
6
6
  "author": "AiiWare <support@aiiware.com>",