@compass-ai/nova 1.0.72 → 1.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +5 -5
- package/dist/index.js +2 -2
- package/package.json +2 -1
- package/scripts/preuninstall.mjs +99 -0
package/dist/cli.js
CHANGED
|
@@ -36,7 +36,7 @@ GFS4: `),console.error(i)});Tg[dv]||(RRt=global[dv]||[],WRt(Tg,RRt),Tg.close=(fu
|
|
|
36
36
|
see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:s,destStat:c}=await mie.checkPaths(i,t,"copy",n);if(await mie.checkParentPaths(i,s,t,"copy"),!await t3t(i,t,n))return;let m=fie.dirname(t);await OHr(m)||await MHr(m),await r3t(c,i,t,n)}async function t3t(i,t,n){return n.filter?n.filter(i,t):!0}async function r3t(i,t,n,s){let u=await(s.dereference?v1.stat:v1.lstat)(t);if(u.isDirectory())return jHr(u,i,t,n,s);if(u.isFile()||u.isCharacterDevice()||u.isBlockDevice())return JHr(u,i,t,n,s);if(u.isSymbolicLink())return XHr(i,t,n,s);throw u.isSocket()?new Error(`Cannot copy a socket file: ${t}`):u.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${t}`):new Error(`Unknown file: ${t}`)}async function JHr(i,t,n,s,c){if(!t)return e3t(i,n,s,c);if(c.overwrite)return await v1.unlink(s),e3t(i,n,s,c);if(c.errorOnExist)throw new Error(`'${s}' already exists`)}async function e3t(i,t,n,s){if(await v1.copyFile(t,n),s.preserveTimestamps){BHr(i.mode)&&await UHr(n,i.mode);let c=await v1.stat(t);await YHr(n,c.atime,c.mtime)}return v1.chmod(n,i.mode)}function BHr(i){return(i&128)===0}function UHr(i,t){return v1.chmod(i,t|128)}async function jHr(i,t,n,s,c){t||await v1.mkdir(s),await LHr(await v1.opendir(n),async u=>{let m=fie.join(n,u.name),g=fie.join(s,u.name);if(await t3t(m,g,c)){let{destStat:w}=await mie.checkPaths(m,g,"copy",c);await r3t(w,m,g,c)}}),t||await v1.chmod(s,i.mode)}async function XHr(i,t,n,s){let c=await v1.readlink(t);if(s.dereference&&(c=fie.resolve(process.cwd(),c)),!i)return v1.symlink(c,n);let u=null;try{u=await v1.readlink(n)}catch(m){if(m.code==="EINVAL"||m.code==="UNKNOWN")return v1.symlink(c,n);throw m}if(s.dereference&&(u=fie.resolve(process.cwd(),u)),c!==u){if(mie.isSrcSubdir(c,u))throw new Error(`Cannot copy '${c}' to a subdirectory of itself, '${u}'.`);if(mie.isSrcSubdir(u,c))throw new Error(`Cannot overwrite '${u}' with '${c}'.`)}return await v1.unlink(n),v1.symlink(c,n)}n3t.exports=HHr});var l3t=ze((RHn,c3t)=>{"use strict";var Zx=pO(),hie=Xi("path"),zHr=AT().mkdirsSync,QHr=WBe().utimesMillisSync,_ie=fO();function $Hr(i,t,n){typeof n=="function"&&(n={filter:n}),n=n||{},n.clobber="clobber"in n?!!n.clobber:!0,n.overwrite="overwrite"in n?!!n.overwrite:n.clobber,n.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
|
|
37
37
|
|
|
38
38
|
see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:s,destStat:c}=_ie.checkPathsSync(i,t,"copy",n);if(_ie.checkParentPathsSync(i,s,t,"copy"),n.filter&&!n.filter(i,t))return;let u=hie.dirname(t);return Zx.existsSync(u)||zHr(u),s3t(c,i,t,n)}function s3t(i,t,n,s){let u=(s.dereference?Zx.statSync:Zx.lstatSync)(t);if(u.isDirectory())return i7r(u,i,t,n,s);if(u.isFile()||u.isCharacterDevice()||u.isBlockDevice())return qHr(u,i,t,n,s);if(u.isSymbolicLink())return o7r(i,t,n,s);throw u.isSocket()?new Error(`Cannot copy a socket file: ${t}`):u.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${t}`):new Error(`Unknown file: ${t}`)}function qHr(i,t,n,s,c){return t?KHr(i,n,s,c):a3t(i,n,s,c)}function KHr(i,t,n,s){if(s.overwrite)return Zx.unlinkSync(n),a3t(i,t,n,s);if(s.errorOnExist)throw new Error(`'${n}' already exists`)}function a3t(i,t,n,s){return Zx.copyFileSync(t,n),s.preserveTimestamps&&e7r(i.mode,t,n),ZBe(n,i.mode)}function e7r(i,t,n){return t7r(i)&&r7r(n,i),n7r(t,n)}function t7r(i){return(i&128)===0}function r7r(i,t){return ZBe(i,t|128)}function ZBe(i,t){return Zx.chmodSync(i,t)}function n7r(i,t){let n=Zx.statSync(i);return QHr(t,n.atime,n.mtime)}function i7r(i,t,n,s,c){return t?o3t(n,s,c):s7r(i.mode,n,s,c)}function s7r(i,t,n,s){return Zx.mkdirSync(n),o3t(t,n,s),ZBe(n,i)}function o3t(i,t,n){let s=Zx.opendirSync(i);try{let c;for(;(c=s.readSync())!==null;)a7r(c.name,i,t,n)}finally{s.closeSync()}}function a7r(i,t,n,s){let c=hie.join(t,i),u=hie.join(n,i);if(s.filter&&!s.filter(c,u))return;let{destStat:m}=_ie.checkPathsSync(c,u,"copy",s);return s3t(m,c,u,s)}function o7r(i,t,n,s){let c=Zx.readlinkSync(t);if(s.dereference&&(c=hie.resolve(process.cwd(),c)),i){let u;try{u=Zx.readlinkSync(n)}catch(m){if(m.code==="EINVAL"||m.code==="UNKNOWN")return Zx.symlinkSync(c,n);throw m}if(s.dereference&&(u=hie.resolve(process.cwd(),u)),c!==u){if(_ie.isSrcSubdir(c,u))throw new Error(`Cannot copy '${c}' to a subdirectory of itself, '${u}'.`);if(_ie.isSrcSubdir(u,c))throw new Error(`Cannot overwrite '${u}' with '${c}'.`)}return c7r(c,n)}else return Zx.symlinkSync(c,n)}function c7r(i,t){return Zx.unlinkSync(t),Zx.symlinkSync(i,t)}c3t.exports=$Hr});var hve=ze((PHn,u3t)=>{"use strict";var l7r=dI().fromPromise;u3t.exports={copy:l7r(i3t()),copySync:l3t()}});var gie=ze((WHn,p3t)=>{"use strict";var d3t=pO(),u7r=dI().fromCallback;function d7r(i,t){d3t.rm(i,{recursive:!0,force:!0},t)}function p7r(i){d3t.rmSync(i,{recursive:!0,force:!0})}p3t.exports={remove:u7r(d7r),removeSync:p7r}});var I3t=ze((VHn,b3t)=>{"use strict";var f7r=dI().fromPromise,h3t=Vx(),_3t=Xi("path"),g3t=AT(),y3t=gie(),f3t=f7r(async function(t){let n;try{n=await h3t.readdir(t)}catch{return g3t.mkdirs(t)}return Promise.all(n.map(s=>y3t.remove(_3t.join(t,s))))});function m3t(i){let t;try{t=h3t.readdirSync(i)}catch{return g3t.mkdirsSync(i)}t.forEach(n=>{n=_3t.join(i,n),y3t.removeSync(n)})}b3t.exports={emptyDirSync:m3t,emptydirSync:m3t,emptyDir:f3t,emptydir:f3t}});var A3t=ze((ZHn,w3t)=>{"use strict";var m7r=dI().fromPromise,v3t=Xi("path"),L3=Vx(),x3t=AT();async function h7r(i){let t;try{t=await L3.stat(i)}catch{}if(t&&t.isFile())return;let n=v3t.dirname(i),s=null;try{s=await L3.stat(n)}catch(c){if(c.code==="ENOENT"){await x3t.mkdirs(n),await L3.writeFile(i,"");return}else throw c}s.isDirectory()?await L3.writeFile(i,""):await L3.readdir(n)}function _7r(i){let t;try{t=L3.statSync(i)}catch{}if(t&&t.isFile())return;let n=v3t.dirname(i);try{L3.statSync(n).isDirectory()||L3.readdirSync(n)}catch(s){if(s&&s.code==="ENOENT")x3t.mkdirsSync(n);else throw s}L3.writeFileSync(i,"")}w3t.exports={createFile:m7r(h7r),createFileSync:_7r}});var T3t=ze((MHn,E3t)=>{"use strict";var g7r=dI().fromPromise,k3t=Xi("path"),OV=Vx(),C3t=AT(),{pathExists:y7r}=MV(),{areIdentical:S3t}=fO();async function b7r(i,t){let n;try{n=await OV.lstat(t)}catch{}let s;try{s=await OV.lstat(i)}catch(m){throw m.message=m.message.replace("lstat","ensureLink"),m}if(n&&S3t(s,n))return;let c=k3t.dirname(t);await y7r(c)||await C3t.mkdirs(c),await OV.link(i,t)}function I7r(i,t){let n;try{n=OV.lstatSync(t)}catch{}try{let u=OV.lstatSync(i);if(n&&S3t(u,n))return}catch(u){throw u.message=u.message.replace("lstat","ensureLink"),u}let s=k3t.dirname(t);return OV.existsSync(s)||C3t.mkdirsSync(s),OV.linkSync(i,t)}E3t.exports={createLink:g7r(b7r),createLinkSync:I7r}});var D3t=ze((OHn,F3t)=>{"use strict";var YV=Xi("path"),yie=Vx(),{pathExists:v7r}=MV(),x7r=dI().fromPromise;async function w7r(i,t){if(YV.isAbsolute(i)){try{await yie.lstat(i)}catch(u){throw u.message=u.message.replace("lstat","ensureSymlink"),u}return{toCwd:i,toDst:i}}let n=YV.dirname(t),s=YV.join(n,i);if(await v7r(s))return{toCwd:s,toDst:i};try{await yie.lstat(i)}catch(u){throw u.message=u.message.replace("lstat","ensureSymlink"),u}return{toCwd:i,toDst:YV.relative(n,i)}}function A7r(i,t){if(YV.isAbsolute(i)){if(!yie.existsSync(i))throw new Error("absolute srcpath does not exist");return{toCwd:i,toDst:i}}let n=YV.dirname(t),s=YV.join(n,i);if(yie.existsSync(s))return{toCwd:s,toDst:i};if(!yie.existsSync(i))throw new Error("relative srcpath does not exist");return{toCwd:i,toDst:YV.relative(n,i)}}F3t.exports={symlinkPaths:x7r(w7r),symlinkPathsSync:A7r}});var R3t=ze((YHn,N3t)=>{"use strict";var G3t=Vx(),k7r=dI().fromPromise;async function C7r(i,t){if(t)return t;let n;try{n=await G3t.lstat(i)}catch{return"file"}return n&&n.isDirectory()?"dir":"file"}function S7r(i,t){if(t)return t;let n;try{n=G3t.lstatSync(i)}catch{return"file"}return n&&n.isDirectory()?"dir":"file"}N3t.exports={symlinkType:k7r(C7r),symlinkTypeSync:S7r}});var Z3t=ze((LHn,V3t)=>{"use strict";var E7r=dI().fromPromise,P3t=Xi("path"),oG=Vx(),{mkdirs:T7r,mkdirsSync:F7r}=AT(),{symlinkPaths:D7r,symlinkPathsSync:G7r}=D3t(),{symlinkType:N7r,symlinkTypeSync:R7r}=R3t(),{pathExists:P7r}=MV(),{areIdentical:W3t}=fO();async function W7r(i,t,n){let s;try{s=await oG.lstat(t)}catch{}if(s&&s.isSymbolicLink()){let[g,v]=await Promise.all([oG.stat(i),oG.stat(t)]);if(W3t(g,v))return}let c=await D7r(i,t);i=c.toDst;let u=await N7r(c.toCwd,n),m=P3t.dirname(t);return await P7r(m)||await T7r(m),oG.symlink(i,t,u)}function V7r(i,t,n){let s;try{s=oG.lstatSync(t)}catch{}if(s&&s.isSymbolicLink()){let g=oG.statSync(i),v=oG.statSync(t);if(W3t(g,v))return}let c=G7r(i,t);i=c.toDst,n=R7r(c.toCwd,n);let u=P3t.dirname(t);return oG.existsSync(u)||F7r(u),oG.symlinkSync(i,t,n)}V3t.exports={createSymlink:E7r(W7r),createSymlinkSync:V7r}});var U3t=ze((HHn,B3t)=>{"use strict";var{createFile:M3t,createFileSync:O3t}=A3t(),{createLink:Y3t,createLinkSync:L3t}=T3t(),{createSymlink:H3t,createSymlinkSync:J3t}=Z3t();B3t.exports={createFile:M3t,createFileSync:O3t,ensureFile:M3t,ensureFileSync:O3t,createLink:Y3t,createLinkSync:L3t,ensureLink:Y3t,ensureLinkSync:L3t,createSymlink:H3t,createSymlinkSync:J3t,ensureSymlink:H3t,ensureSymlinkSync:J3t}});var _ve=ze((JHn,j3t)=>{function Z7r(i,{EOL:t=`
|
|
39
|
-
`,finalEOL:n=!0,replacer:s=null,spaces:c}={}){let u=n?t:"";return JSON.stringify(i,s,c).replace(/\n/g,t)+u}function M7r(i){return Buffer.isBuffer(i)&&(i=i.toString("utf8")),i.replace(/^\uFEFF/,"")}j3t.exports={stringify:Z7r,stripBom:M7r}});var $3t=ze((BHn,Q3t)=>{var fU;try{fU=pO()}catch{fU=Xi("fs")}var gve=dI(),{stringify:X3t,stripBom:z3t}=_ve();async function O7r(i,t={}){typeof t=="string"&&(t={encoding:t});let n=t.fs||fU,s="throws"in t?t.throws:!0,c=await gve.fromCallback(n.readFile)(i,t);c=z3t(c);let u;try{u=JSON.parse(c,t?t.reviver:null)}catch(m){if(s)throw m.message=`${i}: ${m.message}`,m;return null}return u}var Y7r=gve.fromPromise(O7r);function L7r(i,t={}){typeof t=="string"&&(t={encoding:t});let n=t.fs||fU,s="throws"in t?t.throws:!0;try{let c=n.readFileSync(i,t);return c=z3t(c),JSON.parse(c,t.reviver)}catch(c){if(s)throw c.message=`${i}: ${c.message}`,c;return null}}async function H7r(i,t,n={}){let s=n.fs||fU,c=X3t(t,n);await gve.fromCallback(s.writeFile)(i,c,n)}var J7r=gve.fromPromise(H7r);function B7r(i,t,n={}){let s=n.fs||fU,c=X3t(t,n);return s.writeFileSync(i,c,n)}Q3t.exports={readFile:Y7r,readFileSync:L7r,writeFile:J7r,writeFileSync:B7r}});var K3t=ze((UHn,q3t)=>{"use strict";var yve=$3t();q3t.exports={readJson:yve.readFile,readJsonSync:yve.readFileSync,writeJson:yve.writeFile,writeJsonSync:yve.writeFileSync}});var bve=ze((jHn,rPt)=>{"use strict";var U7r=dI().fromPromise,MBe=Vx(),ePt=Xi("path"),tPt=AT(),j7r=MV().pathExists;async function X7r(i,t,n="utf-8"){let s=ePt.dirname(i);return await j7r(s)||await tPt.mkdirs(s),MBe.writeFile(i,t,n)}function z7r(i,...t){let n=ePt.dirname(i);MBe.existsSync(n)||tPt.mkdirsSync(n),MBe.writeFileSync(i,...t)}rPt.exports={outputFile:U7r(X7r),outputFileSync:z7r}});var iPt=ze((XHn,nPt)=>{"use strict";var{stringify:Q7r}=_ve(),{outputFile:$7r}=bve();async function q7r(i,t,n={}){let s=Q7r(t,n);await $7r(i,s,n)}nPt.exports=q7r});var aPt=ze((zHn,sPt)=>{"use strict";var{stringify:K7r}=_ve(),{outputFileSync:eJr}=bve();function tJr(i,t,n){let s=K7r(t,n);eJr(i,s,n)}sPt.exports=tJr});var cPt=ze((QHn,oPt)=>{"use strict";var rJr=dI().fromPromise,Mx=K3t();Mx.outputJson=rJr(iPt());Mx.outputJsonSync=aPt();Mx.outputJSON=Mx.outputJson;Mx.outputJSONSync=Mx.outputJsonSync;Mx.writeJSON=Mx.writeJson;Mx.writeJSONSync=Mx.writeJsonSync;Mx.readJSON=Mx.readJson;Mx.readJSONSync=Mx.readJsonSync;oPt.exports=Mx});var fPt=ze(($Hn,pPt)=>{"use strict";var nJr=Vx(),lPt=Xi("path"),{copy:iJr}=hve(),{remove:dPt}=gie(),{mkdirp:sJr}=AT(),{pathExists:aJr}=MV(),uPt=fO();async function oJr(i,t,n={}){let s=n.overwrite||n.clobber||!1,{srcStat:c,isChangingCase:u=!1}=await uPt.checkPaths(i,t,"move",n);await uPt.checkParentPaths(i,c,t,"move");let m=lPt.dirname(t);return lPt.parse(m).root!==m&&await sJr(m),cJr(i,t,s,u)}async function cJr(i,t,n,s){if(!s){if(n)await dPt(t);else if(await aJr(t))throw new Error("dest already exists.")}try{await nJr.rename(i,t)}catch(c){if(c.code!=="EXDEV")throw c;await lJr(i,t,n)}}async function lJr(i,t,n){return await iJr(i,t,{overwrite:n,errorOnExist:!0,preserveTimestamps:!0}),dPt(i)}pPt.exports=oJr});var yPt=ze((qHn,gPt)=>{"use strict";var hPt=pO(),YBe=Xi("path"),uJr=hve().copySync,_Pt=gie().removeSync,dJr=AT().mkdirpSync,mPt=fO();function pJr(i,t,n){n=n||{};let s=n.overwrite||n.clobber||!1,{srcStat:c,isChangingCase:u=!1}=mPt.checkPathsSync(i,t,"move",n);return mPt.checkParentPathsSync(i,c,t,"move"),fJr(t)||dJr(YBe.dirname(t)),mJr(i,t,s,u)}function fJr(i){let t=YBe.dirname(i);return YBe.parse(t).root===t}function mJr(i,t,n,s){if(s)return OBe(i,t,n);if(n)return _Pt(t),OBe(i,t,n);if(hPt.existsSync(t))throw new Error("dest already exists.");return OBe(i,t,n)}function OBe(i,t,n){try{hPt.renameSync(i,t)}catch(s){if(s.code!=="EXDEV")throw s;return hJr(i,t,n)}}function hJr(i,t,n){return uJr(i,t,{overwrite:n,errorOnExist:!0,preserveTimestamps:!0}),_Pt(i)}gPt.exports=pJr});var IPt=ze((KHn,bPt)=>{"use strict";var _Jr=dI().fromPromise;bPt.exports={move:_Jr(fPt()),moveSync:yPt()}});var Sy=ze((e7n,vPt)=>{"use strict";vPt.exports={...Vx(),...hve(),...I3t(),...U3t(),...cPt(),...AT(),...IPt(),...bve(),...MV(),...gie()}});var XPt={};Pp(XPt,{AGENTIC_AUTO_COMPACT_PERCENT:()=>TPt,AGENTIC_COST_HARD_CAP:()=>EPt,AGENTIC_COST_WARNING_THRESHOLD:()=>SPt,AGENTS_DIR:()=>kve,APP_DESCRIPTION:()=>HPt,APP_DISPLAY_NAME:()=>LPt,APP_NAME:()=>YPt,APP_TAGLINE:()=>JPt,APP_TAGLINE_UNLEASHED:()=>xJr,APP_VERSION:()=>Zve,AUTO_COMPACT_TRIGGER:()=>Dve,AUTO_SAVE_INTERVAL_MS:()=>vie,BACKUPS_DIR:()=>xve,BACKUP_RETENTION_DAYS:()=>gU,BINARY_EXTENSIONS:()=>jPt,CACHE_DIR:()=>xPt,CHAT_ARCHIVE_DIR:()=>HBe,CHAT_ARCHIVE_FILE_PREFIX:()=>gJr,CHAT_ARCHIVE_MAX_FILES:()=>UBe,CHAT_ARCHIVE_RETENTION_DAYS:()=>BBe,COMMANDS_DIR:()=>Ave,COMPACTION_MODEL:()=>Vve,CONFIG_FILE_NAME:()=>mO,CONSENT_EXPIRY_DAYS:()=>Gve,CONSENT_FILE_NAME:()=>Ive,CONSENT_VERSION:()=>BPt,CONTEXT_DIR:()=>wPt,CONTEXT_WINDOW_SAFETY_MARGIN:()=>wie,CONTEXT_WINDOW_WARNING_PERCENT:()=>APt,CREDENTIALS_FILE_NAME:()=>hU,DEFAULT_ANTHROPIC_TEMPERATURE:()=>lG,DEFAULT_CLASSIFIER_MODEL:()=>CPt,DEFAULT_CLASSIFIER_MODELS_BY_PROVIDER:()=>B3,DEFAULT_CONFIG:()=>uG,DEFAULT_COST_WARNING_THRESHOLD:()=>kPt,DEFAULT_HEURISTIC_FAST_PATH:()=>bJr,DEFAULT_MAX_AGENTIC_ITERATIONS:()=>gO,DEFAULT_MAX_ITERATIONS_PER_TASK:()=>cG,DEFAULT_MAX_TOKENS:()=>lw,DEFAULT_MODEL:()=>KA,DEFAULT_OLLAMA_TEMPERATURE:()=>qBe,DEFAULT_PERSONALITY_MODE:()=>fv,DEFAULT_STUCK_DETECTION_ENABLED:()=>FPt,DEFAULT_STUCK_DETECTION_THRESHOLD:()=>DPt,DEFAULT_UPDATE_NOTIFICATION_STYLE:()=>WPt,DEFAULT_USE_LLM_FIRST:()=>yJr,ENV_VARS:()=>pv,GLOBAL_COMPASS_DIR:()=>mU,HOOKS_DIR:()=>Sve,INDEX_DIR:()=>wve,LANGUAGE_EXTENSIONS:()=>UPt,LOGS_DIR:()=>vve,LOG_RETENTION_DAYS:()=>XBe,MAX_AGENT_DEPTH:()=>JBe,MAX_BACKUP_FILES:()=>yO,MAX_CACHE_SIZE_BYTES:()=>RPt,MAX_COMMAND_OUTPUT_TOKENS:()=>IU,MAX_DYNAMIC_STREAM_BLOCKS:()=>Rve,MAX_FILES_PER_OPERATION:()=>zBe,MAX_FILE_READ_TOKENS:()=>Pve,MAX_FILE_SIZE_BYTES:()=>QBe,MAX_FILE_TOKENS_REJECT_THRESHOLD:()=>Wve,MAX_HISTORY_LENGTH:()=>bU,MAX_INDEXED_FILES:()=>NPt,MAX_LINES_PER_SNIPPET:()=>vJr,MAX_MCP_TOOL_RESULT_TOKENS:()=>$Be,MAX_MEMORY_LINES:()=>J3,MAX_RETRY_ATTEMPTS:()=>VPt,MAX_SEARCH_RESULT_TOKENS:()=>GPt,MAX_SNIPPET_FILES:()=>IJr,MEMORY_DIR:()=>Tve,MEMORY_FILE_NAME:()=>LV,NOVA_LOCAL_MD_FILE_NAME:()=>Iie,NOVA_MD_FILE_NAME:()=>H3,PROJECTS_DIR:()=>_U,PROJECT_COMPASS_DIR:()=>lS,PROVIDERS:()=>dG,PROVIDER_ENV_VARS:()=>Aie,RETRY_BASE_DELAY_MS:()=>ZPt,RETRY_JITTER_FACTOR:()=>OPt,RETRY_MAX_DELAY_MS:()=>MPt,RULES_DIR:()=>Eve,SAVED_SESSIONS_DIR:()=>hO,SESSION_EXPIRY_DAYS:()=>jBe,SESSION_FILE_NAME:()=>bie,SHELL_COMMAND_MAX_TIMEOUT_MS:()=>xie,SHELL_COMMAND_TIMEOUT_MS:()=>yU,SKILLS_DIR:()=>Cve,SLIDING_WINDOW_MAX_MESSAGES:()=>Nve,TEMP_DIR:()=>_O,TOKEN_WARNING_THRESHOLD:()=>Fve,TOOL_READ_BLOCKLIST_DIRS:()=>Ove,TOOL_READ_BLOCKLIST_PATTERNS:()=>Mve,UPDATE_CHECK_INTERVAL_HOURS:()=>PPt,WORKTREES_DIR:()=>LBe});var mU,lS,mO,bie,Ive,hU,vve,xve,xPt,hO,wve,wPt,_O,Ave,kve,Cve,Sve,LBe,Eve,_U,Tve,H3,Iie,LV,J3,HBe,JBe,BBe,UBe,gJr,lw,Fve,Dve,APt,kPt,yJr,bJr,B3,CPt,IJr,vJr,gO,cG,SPt,EPt,TPt,FPt,DPt,jBe,gU,yO,XBe,Gve,vie,yU,xie,zBe,QBe,bU,Nve,Rve,Pve,Wve,IU,GPt,$Be,wie,NPt,RPt,KA,lG,qBe,Vve,fv,PPt,WPt,VPt,ZPt,MPt,OPt,uG,dG,pv,Aie,Zve,YPt,LPt,HPt,JPt,xJr,BPt,UPt,Mve,Ove,jPt,Td=it(()=>{"use strict";mU=".compass",lS=".compass",mO="config.json",bie="session.json",Ive="consent.json",hU="credentials.enc",vve="logs",xve="backups",xPt="cache",hO="saved-sessions",wve="index",wPt="context",_O="temp",Ave="commands",kve="agents",Cve="skills",Sve="hooks",LBe="worktrees",Eve="rules",_U="projects",Tve="memory",H3="NOVA.md",Iie="NOVA.local.md",LV="MEMORY.md",J3=200,HBe="chats",JBe=5,BBe=30,UBe=100,gJr="chat-",lw=16384,Fve=2e5,Dve=8e4,APt=80,kPt=10,yJr=!0,bJr=!0,B3={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},CPt="haiku",IJr=15,vJr=30,gO=200,cG=75,SPt=5,EPt=0,TPt=80,FPt=!0,DPt=3,jBe=30,gU=1,yO=100,XBe=7,Gve=365,vie=6e4,yU=12e4,xie=6e5,zBe=50,QBe=1024*1024,bU=100,Nve=80,Rve=15,Pve=8e3,Wve=4e4,IU=4e3,GPt=6e3,$Be=4e3,wie=90,NPt=1e5,RPt=500*1024*1024,KA="claude-sonnet-4-5-20250929",lG=1,qBe=.5,Vve="haiku",fv="verbose_analyst",PPt=4,WPt="banner",VPt=4,ZPt=1e3,MPt=16e3,OPt=.1,uG={anthropic:{model:KA,maxTokens:16384,temperature:lG},ollama:{model:"glm-4.7:cloud",endpoint:"https://ollama.com",maxTokens:16384,temperature:qBe},project:{rootDir:process.cwd(),ignorePatterns:["node_modules/**",".git/**","dist/**","build/**","out/**","coverage/**",".next/**",".nuxt/**",".output/**","*.log",".env*","*.lock","package-lock.json","yarn.lock","pnpm-lock.yaml",".DS_Store","Thumbs.db","*.min.js","*.min.css","*.map",".compass/**"],includePatterns:["**/*"],maxFileSize:QBe,indexOnStartup:!0},safety:{requireApproval:!0,autoApprovePatterns:[],blockedPatterns:[".env*","*.key","*.pem","*.p12","*.pfx","secrets/**","**/secrets/**","**/*.secret","**/credentials*","**/password*"],maxFilesPerOperation:zBe,backupBeforeModify:!0,shellCommandTimeout:yU,allowedShellCommands:["npm","npx","yarn","pnpm","git","node","tsc","eslint","prettier","jest","vitest","mocha","cargo","rustc","go","python","python3","pip","pip3","poetry","make","cmake","gradle","mvn","docker","kubectl","terraform","aws","gcloud","az","cat","ls","pwd","echo","head","tail","grep","find","wc","sort","uniq","diff","tree"],blockedShellCommands:["rm -rf /","rm -rf /*","rm -rf ~","rm -rf ~/*","sudo rm -rf",":(){:|:&};:","mkfs","dd if=/dev/zero","dd if=/dev/random","> /dev/sda","chmod -R 777 /","chown -R","wget | sh","curl | sh","wget | bash","curl | bash"]},ui:{},session:{autoSave:!0,autoSaveInterval:vie,maxHistoryLength:bU,autoCompactThreshold:8e4,sessionExpiryDays:jBe,unleash:!1},update:{checkOnStartup:!0,checkInterval:PPt,showNotifications:!0,notificationStyle:WPt,includePrerelease:!1},agentic:{maxIterations:gO,costWarningThreshold:SPt,costHardCap:EPt,autoCompactAtPercent:TPt,stuckDetectionEnabled:FPt,stuckDetectionThreshold:DPt,maxIterationsPerTask:cG}},dG=["anthropic","ollama","zai","minimax"],pv={API_KEY:"ANTHROPIC_API_KEY",COMPASS_API_KEY:"COMPASS_API_KEY",OLLAMA_API_KEY:"OLLAMA_API_KEY",ZAI_API_KEY:"ZAI_API_KEY",MINIMAX_API_KEY:"MINIMAX_API_KEY",MODEL:"COMPASS_MODEL",CONFIG_PATH:"COMPASS_CONFIG",DEBUG:"COMPASS_DEBUG",NO_COLOR:"NO_COLOR",FORCE_COLOR:"FORCE_COLOR",HOME:"HOME",USERPROFILE:"USERPROFILE",EXPERIMENTAL_AGENT_TEAMS:"COMPASS_EXPERIMENTAL_AGENT_TEAMS"},Aie={anthropic:pv.API_KEY,ollama:pv.OLLAMA_API_KEY,zai:pv.ZAI_API_KEY,minimax:pv.MINIMAX_API_KEY},Zve="1.0.72",YPt="compass",LPt="Compass CLI",HPt="AI-powered development assistance using Anthropic's Claude models",JPt="",xJr="Unguarded agentic assistant",BPt="1.0.0",UPt={".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".rb":"ruby",".go":"go",".rs":"rust",".java":"java",".kt":"kotlin",".scala":"scala",".cs":"csharp",".fs":"fsharp",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".c":"c",".h":"c",".hpp":"cpp",".swift":"swift",".php":"php",".pl":"perl",".pm":"perl",".sh":"bash",".bash":"bash",".zsh":"zsh",".fish":"fish",".ps1":"powershell",".sql":"sql",".r":"r",".R":"r",".lua":"lua",".vim":"vim",".el":"elisp",".clj":"clojure",".cljs":"clojure",".ex":"elixir",".exs":"elixir",".erl":"erlang",".hrl":"erlang",".hs":"haskell",".ml":"ocaml",".mli":"ocaml",".nim":"nim",".zig":"zig",".v":"v",".d":"d",".dart":"dart",".groovy":"groovy",".gradle":"groovy",".json":"json",".yaml":"yaml",".yml":"yaml",".toml":"toml",".xml":"xml",".html":"html",".htm":"html",".css":"css",".scss":"scss",".sass":"sass",".less":"less",".md":"markdown",".mdx":"markdown",".rst":"restructuredtext",".tex":"latex",".dockerfile":"dockerfile",".tf":"terraform",".hcl":"hcl",".proto":"protobuf",".graphql":"graphql",".gql":"graphql",".vue":"vue",".svelte":"svelte",".astro":"astro"},Mve=["package-lock.json","yarn.lock","pnpm-lock.yaml","composer.lock","Gemfile.lock","poetry.lock","Cargo.lock","go.sum","*.map","*.js.map","*.css.map","*.min.js","*.min.css","*.bundle.js","*.chunk.js","*.sql","*.csv","**/__snapshots__/**","**/fixtures/**/*.json","*.d.ts.map"],Ove=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],jPt=[".png",".jpg",".jpeg",".gif",".bmp",".ico",".webp",".svg",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".zip",".tar",".gz",".rar",".7z",".exe",".dll",".so",".dylib",".bin",".dat",".db",".sqlite",".sqlite3",".woff",".woff2",".ttf",".otf",".eot",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".flv",".class",".jar",".war",".ear",".pyc",".pyo",".o",".obj",".a",".lib"]});import wJr from"path";async function HV(i,t=XBe){if(!zPt.has(i)){zPt.add(i);try{if(!await kie.default.pathExists(i))return;let s=Date.now()-t*24*60*60*1e3,c=await kie.default.readdir(i);for(let u of c)try{let m=wJr.join(i,u),g=await kie.default.stat(m);g.isFile()&&g.mtimeMs<s&&await kie.default.unlink(m)}catch{}}catch{}}}var kie,zPt,Cie=it(()=>{"use strict";kie=Fa(Sy(),1);Td();zPt=new Set});import KBe from"path";import AJr from"os";var eUe,QPt,tUe,rUe,M,fs=it(()=>{"use strict";Kd();eUe=Fa(Sy(),1);Td();Cie();QPt={debug:0,info:1,warn:2,error:3,silent:4},tUe=class{config={level:"warn",fileOutput:!0,colorOutput:!0,timestamps:!0};logFilePath=null;logFileInitialized=!1;configure(t){this.config={...this.config,...t}}getConfig(){return{...this.config}}shouldLog(t){return QPt[t]>=QPt[this.config.level]}getGlobalCompassDir(){return KBe.join(AJr.homedir(),mU)}formatLogTimestamp(t){return t.toISOString()}async ensureLogFile(){if(this.logFilePath&&this.logFileInitialized)return this.logFilePath;let t=KBe.join(this.getGlobalCompassDir(),vve);try{await eUe.default.ensureDir(t)}catch{return this.config.fileOutput=!1,""}await HV(t);let n=new Date().toISOString().split("T")[0];return this.logFilePath=KBe.join(t,`compass-${n}.log`),this.logFileInitialized=!0,this.logFilePath}formatMessage(t,n,s){let c=[];if(this.config.timestamps&&c.push(`[${this.formatLogTimestamp(new Date)}]`),c.push(`[${t.toUpperCase().padEnd(5)}]`),c.push(n),s!==void 0)if(s instanceof Error)c.push(`
|
|
39
|
+
`,finalEOL:n=!0,replacer:s=null,spaces:c}={}){let u=n?t:"";return JSON.stringify(i,s,c).replace(/\n/g,t)+u}function M7r(i){return Buffer.isBuffer(i)&&(i=i.toString("utf8")),i.replace(/^\uFEFF/,"")}j3t.exports={stringify:Z7r,stripBom:M7r}});var $3t=ze((BHn,Q3t)=>{var fU;try{fU=pO()}catch{fU=Xi("fs")}var gve=dI(),{stringify:X3t,stripBom:z3t}=_ve();async function O7r(i,t={}){typeof t=="string"&&(t={encoding:t});let n=t.fs||fU,s="throws"in t?t.throws:!0,c=await gve.fromCallback(n.readFile)(i,t);c=z3t(c);let u;try{u=JSON.parse(c,t?t.reviver:null)}catch(m){if(s)throw m.message=`${i}: ${m.message}`,m;return null}return u}var Y7r=gve.fromPromise(O7r);function L7r(i,t={}){typeof t=="string"&&(t={encoding:t});let n=t.fs||fU,s="throws"in t?t.throws:!0;try{let c=n.readFileSync(i,t);return c=z3t(c),JSON.parse(c,t.reviver)}catch(c){if(s)throw c.message=`${i}: ${c.message}`,c;return null}}async function H7r(i,t,n={}){let s=n.fs||fU,c=X3t(t,n);await gve.fromCallback(s.writeFile)(i,c,n)}var J7r=gve.fromPromise(H7r);function B7r(i,t,n={}){let s=n.fs||fU,c=X3t(t,n);return s.writeFileSync(i,c,n)}Q3t.exports={readFile:Y7r,readFileSync:L7r,writeFile:J7r,writeFileSync:B7r}});var K3t=ze((UHn,q3t)=>{"use strict";var yve=$3t();q3t.exports={readJson:yve.readFile,readJsonSync:yve.readFileSync,writeJson:yve.writeFile,writeJsonSync:yve.writeFileSync}});var bve=ze((jHn,rPt)=>{"use strict";var U7r=dI().fromPromise,MBe=Vx(),ePt=Xi("path"),tPt=AT(),j7r=MV().pathExists;async function X7r(i,t,n="utf-8"){let s=ePt.dirname(i);return await j7r(s)||await tPt.mkdirs(s),MBe.writeFile(i,t,n)}function z7r(i,...t){let n=ePt.dirname(i);MBe.existsSync(n)||tPt.mkdirsSync(n),MBe.writeFileSync(i,...t)}rPt.exports={outputFile:U7r(X7r),outputFileSync:z7r}});var iPt=ze((XHn,nPt)=>{"use strict";var{stringify:Q7r}=_ve(),{outputFile:$7r}=bve();async function q7r(i,t,n={}){let s=Q7r(t,n);await $7r(i,s,n)}nPt.exports=q7r});var aPt=ze((zHn,sPt)=>{"use strict";var{stringify:K7r}=_ve(),{outputFileSync:eJr}=bve();function tJr(i,t,n){let s=K7r(t,n);eJr(i,s,n)}sPt.exports=tJr});var cPt=ze((QHn,oPt)=>{"use strict";var rJr=dI().fromPromise,Mx=K3t();Mx.outputJson=rJr(iPt());Mx.outputJsonSync=aPt();Mx.outputJSON=Mx.outputJson;Mx.outputJSONSync=Mx.outputJsonSync;Mx.writeJSON=Mx.writeJson;Mx.writeJSONSync=Mx.writeJsonSync;Mx.readJSON=Mx.readJson;Mx.readJSONSync=Mx.readJsonSync;oPt.exports=Mx});var fPt=ze(($Hn,pPt)=>{"use strict";var nJr=Vx(),lPt=Xi("path"),{copy:iJr}=hve(),{remove:dPt}=gie(),{mkdirp:sJr}=AT(),{pathExists:aJr}=MV(),uPt=fO();async function oJr(i,t,n={}){let s=n.overwrite||n.clobber||!1,{srcStat:c,isChangingCase:u=!1}=await uPt.checkPaths(i,t,"move",n);await uPt.checkParentPaths(i,c,t,"move");let m=lPt.dirname(t);return lPt.parse(m).root!==m&&await sJr(m),cJr(i,t,s,u)}async function cJr(i,t,n,s){if(!s){if(n)await dPt(t);else if(await aJr(t))throw new Error("dest already exists.")}try{await nJr.rename(i,t)}catch(c){if(c.code!=="EXDEV")throw c;await lJr(i,t,n)}}async function lJr(i,t,n){return await iJr(i,t,{overwrite:n,errorOnExist:!0,preserveTimestamps:!0}),dPt(i)}pPt.exports=oJr});var yPt=ze((qHn,gPt)=>{"use strict";var hPt=pO(),YBe=Xi("path"),uJr=hve().copySync,_Pt=gie().removeSync,dJr=AT().mkdirpSync,mPt=fO();function pJr(i,t,n){n=n||{};let s=n.overwrite||n.clobber||!1,{srcStat:c,isChangingCase:u=!1}=mPt.checkPathsSync(i,t,"move",n);return mPt.checkParentPathsSync(i,c,t,"move"),fJr(t)||dJr(YBe.dirname(t)),mJr(i,t,s,u)}function fJr(i){let t=YBe.dirname(i);return YBe.parse(t).root===t}function mJr(i,t,n,s){if(s)return OBe(i,t,n);if(n)return _Pt(t),OBe(i,t,n);if(hPt.existsSync(t))throw new Error("dest already exists.");return OBe(i,t,n)}function OBe(i,t,n){try{hPt.renameSync(i,t)}catch(s){if(s.code!=="EXDEV")throw s;return hJr(i,t,n)}}function hJr(i,t,n){return uJr(i,t,{overwrite:n,errorOnExist:!0,preserveTimestamps:!0}),_Pt(i)}gPt.exports=pJr});var IPt=ze((KHn,bPt)=>{"use strict";var _Jr=dI().fromPromise;bPt.exports={move:_Jr(fPt()),moveSync:yPt()}});var Sy=ze((e7n,vPt)=>{"use strict";vPt.exports={...Vx(),...hve(),...I3t(),...U3t(),...cPt(),...AT(),...IPt(),...bve(),...MV(),...gie()}});var XPt={};Pp(XPt,{AGENTIC_AUTO_COMPACT_PERCENT:()=>TPt,AGENTIC_COST_HARD_CAP:()=>EPt,AGENTIC_COST_WARNING_THRESHOLD:()=>SPt,AGENTS_DIR:()=>kve,APP_DESCRIPTION:()=>HPt,APP_DISPLAY_NAME:()=>LPt,APP_NAME:()=>YPt,APP_TAGLINE:()=>JPt,APP_TAGLINE_UNLEASHED:()=>xJr,APP_VERSION:()=>Zve,AUTO_COMPACT_TRIGGER:()=>Dve,AUTO_SAVE_INTERVAL_MS:()=>vie,BACKUPS_DIR:()=>xve,BACKUP_RETENTION_DAYS:()=>gU,BINARY_EXTENSIONS:()=>jPt,CACHE_DIR:()=>xPt,CHAT_ARCHIVE_DIR:()=>HBe,CHAT_ARCHIVE_FILE_PREFIX:()=>gJr,CHAT_ARCHIVE_MAX_FILES:()=>UBe,CHAT_ARCHIVE_RETENTION_DAYS:()=>BBe,COMMANDS_DIR:()=>Ave,COMPACTION_MODEL:()=>Vve,CONFIG_FILE_NAME:()=>mO,CONSENT_EXPIRY_DAYS:()=>Gve,CONSENT_FILE_NAME:()=>Ive,CONSENT_VERSION:()=>BPt,CONTEXT_DIR:()=>wPt,CONTEXT_WINDOW_SAFETY_MARGIN:()=>wie,CONTEXT_WINDOW_WARNING_PERCENT:()=>APt,CREDENTIALS_FILE_NAME:()=>hU,DEFAULT_ANTHROPIC_TEMPERATURE:()=>lG,DEFAULT_CLASSIFIER_MODEL:()=>CPt,DEFAULT_CLASSIFIER_MODELS_BY_PROVIDER:()=>B3,DEFAULT_CONFIG:()=>uG,DEFAULT_COST_WARNING_THRESHOLD:()=>kPt,DEFAULT_HEURISTIC_FAST_PATH:()=>bJr,DEFAULT_MAX_AGENTIC_ITERATIONS:()=>gO,DEFAULT_MAX_ITERATIONS_PER_TASK:()=>cG,DEFAULT_MAX_TOKENS:()=>lw,DEFAULT_MODEL:()=>KA,DEFAULT_OLLAMA_TEMPERATURE:()=>qBe,DEFAULT_PERSONALITY_MODE:()=>fv,DEFAULT_STUCK_DETECTION_ENABLED:()=>FPt,DEFAULT_STUCK_DETECTION_THRESHOLD:()=>DPt,DEFAULT_UPDATE_NOTIFICATION_STYLE:()=>WPt,DEFAULT_USE_LLM_FIRST:()=>yJr,ENV_VARS:()=>pv,GLOBAL_COMPASS_DIR:()=>mU,HOOKS_DIR:()=>Sve,INDEX_DIR:()=>wve,LANGUAGE_EXTENSIONS:()=>UPt,LOGS_DIR:()=>vve,LOG_RETENTION_DAYS:()=>XBe,MAX_AGENT_DEPTH:()=>JBe,MAX_BACKUP_FILES:()=>yO,MAX_CACHE_SIZE_BYTES:()=>RPt,MAX_COMMAND_OUTPUT_TOKENS:()=>IU,MAX_DYNAMIC_STREAM_BLOCKS:()=>Rve,MAX_FILES_PER_OPERATION:()=>zBe,MAX_FILE_READ_TOKENS:()=>Pve,MAX_FILE_SIZE_BYTES:()=>QBe,MAX_FILE_TOKENS_REJECT_THRESHOLD:()=>Wve,MAX_HISTORY_LENGTH:()=>bU,MAX_INDEXED_FILES:()=>NPt,MAX_LINES_PER_SNIPPET:()=>vJr,MAX_MCP_TOOL_RESULT_TOKENS:()=>$Be,MAX_MEMORY_LINES:()=>J3,MAX_RETRY_ATTEMPTS:()=>VPt,MAX_SEARCH_RESULT_TOKENS:()=>GPt,MAX_SNIPPET_FILES:()=>IJr,MEMORY_DIR:()=>Tve,MEMORY_FILE_NAME:()=>LV,NOVA_LOCAL_MD_FILE_NAME:()=>Iie,NOVA_MD_FILE_NAME:()=>H3,PROJECTS_DIR:()=>_U,PROJECT_COMPASS_DIR:()=>lS,PROVIDERS:()=>dG,PROVIDER_ENV_VARS:()=>Aie,RETRY_BASE_DELAY_MS:()=>ZPt,RETRY_JITTER_FACTOR:()=>OPt,RETRY_MAX_DELAY_MS:()=>MPt,RULES_DIR:()=>Eve,SAVED_SESSIONS_DIR:()=>hO,SESSION_EXPIRY_DAYS:()=>jBe,SESSION_FILE_NAME:()=>bie,SHELL_COMMAND_MAX_TIMEOUT_MS:()=>xie,SHELL_COMMAND_TIMEOUT_MS:()=>yU,SKILLS_DIR:()=>Cve,SLIDING_WINDOW_MAX_MESSAGES:()=>Nve,TEMP_DIR:()=>_O,TOKEN_WARNING_THRESHOLD:()=>Fve,TOOL_READ_BLOCKLIST_DIRS:()=>Ove,TOOL_READ_BLOCKLIST_PATTERNS:()=>Mve,UPDATE_CHECK_INTERVAL_HOURS:()=>PPt,WORKTREES_DIR:()=>LBe});var mU,lS,mO,bie,Ive,hU,vve,xve,xPt,hO,wve,wPt,_O,Ave,kve,Cve,Sve,LBe,Eve,_U,Tve,H3,Iie,LV,J3,HBe,JBe,BBe,UBe,gJr,lw,Fve,Dve,APt,kPt,yJr,bJr,B3,CPt,IJr,vJr,gO,cG,SPt,EPt,TPt,FPt,DPt,jBe,gU,yO,XBe,Gve,vie,yU,xie,zBe,QBe,bU,Nve,Rve,Pve,Wve,IU,GPt,$Be,wie,NPt,RPt,KA,lG,qBe,Vve,fv,PPt,WPt,VPt,ZPt,MPt,OPt,uG,dG,pv,Aie,Zve,YPt,LPt,HPt,JPt,xJr,BPt,UPt,Mve,Ove,jPt,Td=it(()=>{"use strict";mU=".compass",lS=".compass",mO="config.json",bie="session.json",Ive="consent.json",hU="credentials.enc",vve="logs",xve="backups",xPt="cache",hO="saved-sessions",wve="index",wPt="context",_O="temp",Ave="commands",kve="agents",Cve="skills",Sve="hooks",LBe="worktrees",Eve="rules",_U="projects",Tve="memory",H3="NOVA.md",Iie="NOVA.local.md",LV="MEMORY.md",J3=200,HBe="chats",JBe=5,BBe=30,UBe=100,gJr="chat-",lw=16384,Fve=2e5,Dve=8e4,APt=80,kPt=10,yJr=!0,bJr=!0,B3={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},CPt="haiku",IJr=15,vJr=30,gO=200,cG=75,SPt=5,EPt=0,TPt=80,FPt=!0,DPt=3,jBe=30,gU=1,yO=100,XBe=7,Gve=365,vie=6e4,yU=12e4,xie=6e5,zBe=50,QBe=1024*1024,bU=100,Nve=80,Rve=15,Pve=8e3,Wve=4e4,IU=4e3,GPt=6e3,$Be=4e3,wie=90,NPt=1e5,RPt=500*1024*1024,KA="claude-sonnet-4-5-20250929",lG=1,qBe=.5,Vve="haiku",fv="verbose_analyst",PPt=4,WPt="banner",VPt=4,ZPt=1e3,MPt=16e3,OPt=.1,uG={anthropic:{model:KA,maxTokens:16384,temperature:lG},ollama:{model:"glm-4.7:cloud",endpoint:"https://ollama.com",maxTokens:16384,temperature:qBe},project:{rootDir:process.cwd(),ignorePatterns:["node_modules/**",".git/**","dist/**","build/**","out/**","coverage/**",".next/**",".nuxt/**",".output/**","*.log",".env*","*.lock","package-lock.json","yarn.lock","pnpm-lock.yaml",".DS_Store","Thumbs.db","*.min.js","*.min.css","*.map",".compass/**"],includePatterns:["**/*"],maxFileSize:QBe,indexOnStartup:!0},safety:{requireApproval:!0,autoApprovePatterns:[],blockedPatterns:[".env*","*.key","*.pem","*.p12","*.pfx","secrets/**","**/secrets/**","**/*.secret","**/credentials*","**/password*"],maxFilesPerOperation:zBe,backupBeforeModify:!0,shellCommandTimeout:yU,allowedShellCommands:["npm","npx","yarn","pnpm","git","node","tsc","eslint","prettier","jest","vitest","mocha","cargo","rustc","go","python","python3","pip","pip3","poetry","make","cmake","gradle","mvn","docker","kubectl","terraform","aws","gcloud","az","cat","ls","pwd","echo","head","tail","grep","find","wc","sort","uniq","diff","tree"],blockedShellCommands:["rm -rf /","rm -rf /*","rm -rf ~","rm -rf ~/*","sudo rm -rf",":(){:|:&};:","mkfs","dd if=/dev/zero","dd if=/dev/random","> /dev/sda","chmod -R 777 /","chown -R","wget | sh","curl | sh","wget | bash","curl | bash"]},ui:{},session:{autoSave:!0,autoSaveInterval:vie,maxHistoryLength:bU,autoCompactThreshold:8e4,sessionExpiryDays:jBe,unleash:!1},update:{checkOnStartup:!0,checkInterval:PPt,showNotifications:!0,notificationStyle:WPt,includePrerelease:!1},agentic:{maxIterations:gO,costWarningThreshold:SPt,costHardCap:EPt,autoCompactAtPercent:TPt,stuckDetectionEnabled:FPt,stuckDetectionThreshold:DPt,maxIterationsPerTask:cG}},dG=["anthropic","ollama","zai","minimax"],pv={API_KEY:"ANTHROPIC_API_KEY",COMPASS_API_KEY:"COMPASS_API_KEY",OLLAMA_API_KEY:"OLLAMA_API_KEY",ZAI_API_KEY:"ZAI_API_KEY",MINIMAX_API_KEY:"MINIMAX_API_KEY",MODEL:"COMPASS_MODEL",CONFIG_PATH:"COMPASS_CONFIG",DEBUG:"COMPASS_DEBUG",NO_COLOR:"NO_COLOR",FORCE_COLOR:"FORCE_COLOR",HOME:"HOME",USERPROFILE:"USERPROFILE",EXPERIMENTAL_AGENT_TEAMS:"COMPASS_EXPERIMENTAL_AGENT_TEAMS"},Aie={anthropic:pv.API_KEY,ollama:pv.OLLAMA_API_KEY,zai:pv.ZAI_API_KEY,minimax:pv.MINIMAX_API_KEY},Zve="1.0.73",YPt="compass",LPt="Compass CLI",HPt="AI-powered development assistance using Anthropic's Claude models",JPt="",xJr="Unguarded agentic assistant",BPt="1.0.0",UPt={".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".rb":"ruby",".go":"go",".rs":"rust",".java":"java",".kt":"kotlin",".scala":"scala",".cs":"csharp",".fs":"fsharp",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".c":"c",".h":"c",".hpp":"cpp",".swift":"swift",".php":"php",".pl":"perl",".pm":"perl",".sh":"bash",".bash":"bash",".zsh":"zsh",".fish":"fish",".ps1":"powershell",".sql":"sql",".r":"r",".R":"r",".lua":"lua",".vim":"vim",".el":"elisp",".clj":"clojure",".cljs":"clojure",".ex":"elixir",".exs":"elixir",".erl":"erlang",".hrl":"erlang",".hs":"haskell",".ml":"ocaml",".mli":"ocaml",".nim":"nim",".zig":"zig",".v":"v",".d":"d",".dart":"dart",".groovy":"groovy",".gradle":"groovy",".json":"json",".yaml":"yaml",".yml":"yaml",".toml":"toml",".xml":"xml",".html":"html",".htm":"html",".css":"css",".scss":"scss",".sass":"sass",".less":"less",".md":"markdown",".mdx":"markdown",".rst":"restructuredtext",".tex":"latex",".dockerfile":"dockerfile",".tf":"terraform",".hcl":"hcl",".proto":"protobuf",".graphql":"graphql",".gql":"graphql",".vue":"vue",".svelte":"svelte",".astro":"astro"},Mve=["package-lock.json","yarn.lock","pnpm-lock.yaml","composer.lock","Gemfile.lock","poetry.lock","Cargo.lock","go.sum","*.map","*.js.map","*.css.map","*.min.js","*.min.css","*.bundle.js","*.chunk.js","*.sql","*.csv","**/__snapshots__/**","**/fixtures/**/*.json","*.d.ts.map"],Ove=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],jPt=[".png",".jpg",".jpeg",".gif",".bmp",".ico",".webp",".svg",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".zip",".tar",".gz",".rar",".7z",".exe",".dll",".so",".dylib",".bin",".dat",".db",".sqlite",".sqlite3",".woff",".woff2",".ttf",".otf",".eot",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".flv",".class",".jar",".war",".ear",".pyc",".pyo",".o",".obj",".a",".lib"]});import wJr from"path";async function HV(i,t=XBe){if(!zPt.has(i)){zPt.add(i);try{if(!await kie.default.pathExists(i))return;let s=Date.now()-t*24*60*60*1e3,c=await kie.default.readdir(i);for(let u of c)try{let m=wJr.join(i,u),g=await kie.default.stat(m);g.isFile()&&g.mtimeMs<s&&await kie.default.unlink(m)}catch{}}catch{}}}var kie,zPt,Cie=it(()=>{"use strict";kie=Fa(Sy(),1);Td();zPt=new Set});import KBe from"path";import AJr from"os";var eUe,QPt,tUe,rUe,M,fs=it(()=>{"use strict";Kd();eUe=Fa(Sy(),1);Td();Cie();QPt={debug:0,info:1,warn:2,error:3,silent:4},tUe=class{config={level:"warn",fileOutput:!0,colorOutput:!0,timestamps:!0};logFilePath=null;logFileInitialized=!1;configure(t){this.config={...this.config,...t}}getConfig(){return{...this.config}}shouldLog(t){return QPt[t]>=QPt[this.config.level]}getGlobalCompassDir(){return KBe.join(AJr.homedir(),mU)}formatLogTimestamp(t){return t.toISOString()}async ensureLogFile(){if(this.logFilePath&&this.logFileInitialized)return this.logFilePath;let t=KBe.join(this.getGlobalCompassDir(),vve);try{await eUe.default.ensureDir(t)}catch{return this.config.fileOutput=!1,""}await HV(t);let n=new Date().toISOString().split("T")[0];return this.logFilePath=KBe.join(t,`compass-${n}.log`),this.logFileInitialized=!0,this.logFilePath}formatMessage(t,n,s){let c=[];if(this.config.timestamps&&c.push(`[${this.formatLogTimestamp(new Date)}]`),c.push(`[${t.toUpperCase().padEnd(5)}]`),c.push(n),s!==void 0)if(s instanceof Error)c.push(`
|
|
40
40
|
${s.stack||s.message}`);else if(typeof s=="object")try{c.push(JSON.stringify(s,null,2))}catch{c.push(String(s))}else c.push(String(s));return c.join(" ")}colorize(t,n){if(!this.config.colorOutput)return n;switch(t){case"debug":return Y.gray(n);case"info":return Y.blue(n);case"warn":return Y.yellow(n);case"error":return Y.red(n);default:return n}}async writeToFile(t){if(this.config.fileOutput)try{let n=await this.ensureLogFile();n&&await eUe.default.appendFile(n,t+`
|
|
41
41
|
`)}catch{}}log(t,n,s){if(!this.shouldLog(t))return;let c=this.formatMessage(t,n,s),u=this.colorize(t,c);process.stderr.write(u+`
|
|
42
42
|
`),this.writeToFile(c).catch(()=>{})}debug(t,n){this.log("debug",t,n)}info(t,n){this.log("info",t,n)}warn(t,n){this.log("warn",t,n)}error(t,n){this.log("error",t,n)}output(t){console.log(t)}child(t){return new rUe(this,t)}setLevel(t){this.config.level=t}getLevel(){return this.config.level}setFileOutput(t){this.config.fileOutput=t}setColorOutput(t){this.config.colorOutput=t}setTimestamps(t){this.config.timestamps=t}getLogFilePath(){return this.logFilePath}isLevelEnabled(t){return this.shouldLog(t)}},rUe=class i{constructor(t,n){this.parent=t;this.prefix=n}debug(t,n){this.parent.debug(`[${this.prefix}] ${t}`,n)}info(t,n){this.parent.info(`[${this.prefix}] ${t}`,n)}warn(t,n){this.parent.warn(`[${this.prefix}] ${t}`,n)}error(t,n){this.parent.error(`[${this.prefix}] ${t}`,n)}child(t){return new i(this.parent,`${this.prefix}:${t}`)}},M=new tUe});var Lve={};Pp(Lve,{appendFile:()=>GJr,copy:()=>JV,createSymlink:()=>PJr,emptyDir:()=>FJr,ensureArchiveDir:()=>sUe,ensureDir:()=>_c,getArchiveDir:()=>Eie,getFileSize:()=>SJr,getFilesRecursive:()=>VJr,getModificationTime:()=>EJr,isDirectory:()=>Yve,isFile:()=>nUe,isReadable:()=>NJr,isSymlink:()=>CJr,isWritable:()=>RJr,listArchiveFiles:()=>BV,move:()=>kJr,pathExists:()=>Ls,readDir:()=>Sie,readDirWithTypes:()=>$Pt,readFileBuffer:()=>DJr,readSymlink:()=>WJr,remove:()=>J_,safeReadFile:()=>lf,safeReadJson:()=>gp,safeWriteFile:()=>mb,safeWriteJson:()=>Fg,stat:()=>fI,touch:()=>TJr,writeFileBuffer:()=>iUe});import uS from"path";async function lf(i,t={}){let{encoding:n="utf8",fallback:s}=t;try{return await mu.default.readFile(i,{encoding:n})}catch(c){if(c.code==="ENOENT")return s??null;throw M.error(`Failed to read file: ${i}`,c),c}}async function gp(i,t){try{let n=await lf(i);return n===null?t??null:JSON.parse(n)}catch(n){if(n instanceof SyntaxError&&(M.warn(`Invalid JSON in file: ${i}`,n),t!==void 0)||t!==void 0)return t;throw M.error(`Failed to parse JSON file: ${i}`,n),n}}async function mb(i,t,n={}){let{encoding:s="utf8",createDir:c=!0,atomic:u=!0,backup:m=!1,backupDir:g,mode:v}=n;try{if(c&&await mu.default.ensureDir(uS.dirname(i)),m&&await mu.default.pathExists(i)){let w=g?uS.join(g,uS.basename(i)+".bak"):i+".bak";g&&await mu.default.ensureDir(g),await mu.default.copy(i,w,{overwrite:!0}),M.debug(`Backup created: ${w}`)}if(u){let w=`${i}.tmp.${Date.now()}.${process.pid}`;try{await mu.default.writeFile(w,t,{encoding:s,mode:v}),await mu.default.rename(w,i)}catch(S){try{await mu.default.remove(w)}catch{}throw S}}else await mu.default.writeFile(i,t,{encoding:s,mode:v})}catch(w){throw M.error(`Failed to write file: ${i}`,w),w}}async function Fg(i,t,n={}){let s=JSON.stringify(t,null,2);await mb(i,s,n)}async function _c(i){await mu.default.ensureDir(i)}async function Ls(i){return mu.default.pathExists(i)}async function J_(i){await mu.default.remove(i)}async function JV(i,t,n){await mu.default.copy(i,t,n)}async function kJr(i,t,n){await mu.default.move(i,t,n)}async function fI(i){try{return await mu.default.stat(i)}catch(t){if(t.code==="ENOENT")return null;throw t}}async function Sie(i){try{return await mu.default.readdir(i)}catch(t){if(t.code==="ENOENT")return[];throw t}}async function $Pt(i){try{return await mu.default.readdir(i,{withFileTypes:!0})}catch(t){if(t.code==="ENOENT")return[];throw t}}async function Yve(i){try{return(await mu.default.stat(i)).isDirectory()}catch{return!1}}async function nUe(i){try{return(await mu.default.stat(i)).isFile()}catch{return!1}}async function CJr(i){try{return(await mu.default.lstat(i)).isSymbolicLink()}catch{return!1}}async function SJr(i){return(await fI(i))?.size??0}async function EJr(i){return(await fI(i))?.mtime??null}async function TJr(i){await mu.default.ensureFile(i);let t=new Date;await mu.default.utimes(i,t,t)}async function FJr(i){await mu.default.emptyDir(i)}async function DJr(i){try{return await mu.default.readFile(i)}catch(t){if(t.code==="ENOENT")return null;throw M.error(`Failed to read file as buffer: ${i}`,t),t}}async function iUe(i,t,n={}){let{createDir:s=!0,atomic:c=!0,backup:u=!1,backupDir:m,mode:g}=n;try{if(s&&await mu.default.ensureDir(uS.dirname(i)),u&&await mu.default.pathExists(i)){let v=m?uS.join(m,uS.basename(i)+".bak"):i+".bak";m&&await mu.default.ensureDir(m),await mu.default.copy(i,v,{overwrite:!0})}if(c){let v=`${i}.tmp.${Date.now()}.${process.pid}`;try{await mu.default.writeFile(v,t,{mode:g}),await mu.default.rename(v,i)}catch(w){try{await mu.default.remove(v)}catch{}throw w}}else await mu.default.writeFile(i,t,{mode:g})}catch(v){throw M.error(`Failed to write buffer to file: ${i}`,v),v}}async function GJr(i,t,n={}){let{encoding:s="utf8",createDir:c=!0}=n;try{c&&await mu.default.ensureDir(uS.dirname(i)),await mu.default.appendFile(i,t,{encoding:s})}catch(u){throw M.error(`Failed to append to file: ${i}`,u),u}}async function NJr(i){try{return await mu.default.access(i,mu.default.constants.R_OK),!0}catch{return!1}}async function RJr(i){try{return await mu.default.access(i,mu.default.constants.W_OK),!0}catch{try{let t=uS.dirname(i);return await mu.default.access(t,mu.default.constants.W_OK),!0}catch{return!1}}}async function PJr(i,t){await mu.default.ensureDir(uS.dirname(t)),await mu.default.symlink(i,t)}async function WJr(i){try{return await mu.default.readlink(i)}catch{return null}}async function VJr(i,t={}){let{maxDepth:n,filter:s}=t,c=[];async function u(m,g){if(n!==void 0&&g>n)return;let v=await $Pt(m);for(let w of v){let S=uS.join(m,w.name),D=uS.relative(i,S);w.isDirectory()?await u(S,g+1):w.isFile()&&(!s||s(D))&&c.push(D)}}return await Yve(i)&&await u(i,0),c}function Eie(i){return uS.join(i,lS,HBe)}async function sUe(i){let t=Eie(i);await mu.default.ensureDir(t)}async function BV(i){let t=Eie(i);try{return(await mu.default.readdir(t)).filter(s=>s.endsWith(".json")).sort()}catch(n){if(n.code==="ENOENT")return[];throw M.error(`Failed to list archive files: ${t}`,n),n}}var mu,yp=it(()=>{"use strict";mu=Fa(Sy(),1);fs();Td()});import pG from"path";import ZJr from"os";function Eo(){return pG.join(ZJr.homedir(),mU)}function qc(i){let t=i||process.cwd();return pG.join(t,lS)}function vU(i,t){let n=pG.resolve(t),s=pG.resolve(n,i);return s!==n&&!s.startsWith(n+pG.sep)?null:s}function UV(i,t){let n=pG.resolve(t),s=pG.resolve(i);return s===n||s.startsWith(n+pG.sep)}function qPt(i,t){return pG.relative(t,i)}function bO(i){return i.replace(/\\/g,"/")}function Hve(i,t){let n=bO(i);for(let s of t)if(MJr(s).test(n))return!0;return!1}function MJr(i){let t=i.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"{{GLOBSTAR}}"),t=t.replace(/\*/g,"[^/]*"),t=t.replace(/\?/g,"[^/]"),t=t.replace(/{{GLOBSTAR}}/g,".*"),new RegExp(`^${t}$`)}function IO(...i){return pG.resolve(...i)}var ep=it(()=>{"use strict";Td()});var iWt={};Pp(iWt,{ATTACHMENT_LIMITS:()=>kT,buildAttachmentContentBlock:()=>uUe,buildAttachmentContentBlocks:()=>Uve,buildMessageContent:()=>dUe,formatAttachmentInfo:()=>pUe,formatAttachmentsSummary:()=>fUe,getMimeType:()=>nWt,isDocumentFile:()=>Bve,isImageFile:()=>xU,isSupportedAttachment:()=>Jve,processAttachment:()=>cUe,processAttachments:()=>lUe,readAttachmentFile:()=>QJr,validateAttachment:()=>oUe,validateAttachmentFile:()=>zJr});import{readFile as HJr}from"fs/promises";import{existsSync as JJr,statSync as BJr}from"fs";import{extname as Tie,basename as UJr,resolve as jJr,isAbsolute as XJr}from"path";import{cwd as Fie}from"process";function Jve(i){return Tie(i).toLowerCase()in aUe}function xU(i){let t=Tie(i).toLowerCase();return[".png",".jpg",".jpeg",".gif",".webp"].includes(t)}function Bve(i){return Tie(i).toLowerCase()===".pdf"}function nWt(i){let t=Tie(i).toLowerCase();return aUe[t]||null}function oUe(i,t=Fie()){let n=XJr(i)?i:jJr(t,i);if(!JJr(n))return{valid:!1,error:`File not found: ${i}`};let s=BJr(n);if(!s.isFile())return{valid:!1,error:`Not a file: ${i}`};if(!Jve(n))return{valid:!1,error:`Unsupported file type: ${Tie(n)}. Supported types: ${Object.keys(aUe).join(", ")}`};if(s.size>kT.MAX_FILE_SIZE){let c=(s.size/1048576).toFixed(2),u=(kT.MAX_FILE_SIZE/(1024*1024)).toFixed(2);return{valid:!1,error:`File too large: ${c}MB (maximum ${u}MB)`}}return{valid:!0,resolvedPath:n}}async function cUe(i,t=Fie()){let n=oUe(i,t);if(!n.valid)throw new Error(n.error);let s=n.resolvedPath,c=nWt(s),u=UJr(s),m=await HJr(s),g=m.toString("base64");return{type:xU(s)?"image":"document",mimeType:c,data:g,filename:u,size:m.length,filePath:s}}async function lUe(i,t=Fie()){let n=[],s=[];if(i.length>kT.MAX_ATTACHMENTS)throw new Error(`Too many attachments: ${i.length} (maximum ${kT.MAX_ATTACHMENTS})`);for(let u of i)try{let m=await cUe(u,t);n.push(m)}catch(m){s.push({path:u,error:m instanceof Error?m.message:String(m)})}let c=n.reduce((u,m)=>u+m.size,0);if(c>kT.MAX_TOTAL_SIZE){let u=(c/1048576).toFixed(2),m=(kT.MAX_TOTAL_SIZE/(1024*1024)).toFixed(2);throw new Error(`Total attachment size too large: ${u}MB (maximum ${m}MB)`)}return{attachments:n,errors:s}}function uUe(i){return i.type==="image"?{type:"image",source:{type:"base64",media_type:i.mimeType,data:i.data}}:{type:"document",source:{type:"base64",media_type:i.mimeType,data:i.data}}}function Uve(i){return i.map(uUe)}function zJr(i,t=Fie()){return oUe(i,t)}async function QJr(i,t=Fie()){return cUe(i,t)}function dUe(i,t=[]){let n=[];i&&n.push({type:"text",text:i});for(let s of t)n.push(uUe(s));return n}function pUe(i){let t=(i.size/1048576).toFixed(2);return`${i.filename} (${i.type}, ${i.mimeType}, ${t}MB)`}function fUe(i){if(i.length===0)return"No attachments";let n=(i.reduce((m,g)=>m+g.size,0)/(1024*1024)).toFixed(2),s=i.filter(m=>m.type==="image").length,c=i.filter(m=>m.type==="document").length,u=[];return s>0&&u.push(`${s} image${s>1?"s":""}`),c>0&&u.push(`${c} document${c>1?"s":""}`),`${u.join(", ")} (${n}MB total)`}var kT,aUe,jV=it(()=>{"use strict";kT={MAX_FILE_SIZE:20*1024*1024,MAX_TOTAL_SIZE:100*1024*1024,MAX_ATTACHMENTS:20},aUe={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf"}});var uWt={};Pp(uWt,{decrypt:()=>Qve,decryptFernet:()=>zV,decryptObject:()=>dBr,encrypt:()=>zve,encryptObject:()=>uBr,generateChecksum:()=>lWt,generateRandomBytes:()=>KJr,generateSecureRandom:()=>aWt,generateToken:()=>oBr,generateUUID:()=>eBr,getMachineKey:()=>oWt,getMachineKeyAsync:()=>sBr,hash:()=>vO,hashBuffer:()=>rBr,hashPassword:()=>cBr,hashWithAlgorithm:()=>tBr,hmac:()=>nBr,hmacWithAlgorithm:()=>iBr,secureCompare:()=>cWt,secureCompareBuffers:()=>aBr,verifyChecksum:()=>pBr,verifyPassword:()=>lBr});import U0 from"crypto";import Die from"os";function Xve(i,t){return U0.pbkdf2Sync(i,t,qJr,$Jr,jve)}function zve(i,t){let n=U0.randomBytes(XV),s=U0.randomBytes(wU),c=Xve(t,n),u=U0.createCipheriv(sWt,c,s),m=u.update(i,"utf8","hex");m+=u.final("hex");let g=u.getAuthTag();return Buffer.concat([n,s,g,Buffer.from(m,"hex")]).toString("base64")}function Qve(i,t){let n=Buffer.from(i,"base64"),s=XV+wU+mUe+1;if(n.length<s)throw new Error("Invalid encrypted data: too short");let c=n.subarray(0,XV),u=n.subarray(XV,XV+wU),m=n.subarray(XV+wU,XV+wU+mUe),g=n.subarray(XV+wU+mUe),v=Xve(t,c),w=U0.createDecipheriv(sWt,v,u);w.setAuthTag(m);let S=w.update(g.toString("hex"),"hex","utf8");return S+=w.final("utf8"),S}function aWt(i=32){return U0.randomBytes(i).toString("hex")}function KJr(i){return U0.randomBytes(i)}function eBr(){return U0.randomUUID()}function vO(i){return U0.createHash(jve).update(i).digest("hex")}function tBr(i,t){return U0.createHash(t).update(i).digest("hex")}function rBr(i){return U0.createHash(jve).update(i).digest("hex")}function nBr(i,t){return U0.createHmac(jve,t).update(i).digest("hex")}function iBr(i,t,n){return U0.createHmac(n,t).update(i).digest("hex")}function oWt(){let i=[Die.hostname(),Die.platform(),Die.arch(),Die.userInfo().username,Die.homedir()];return vO(i.join(":"))}async function sBr(){return oWt()}function cWt(i,t){return i.length!==t.length?(U0.timingSafeEqual(Buffer.from(i),Buffer.from(i)),!1):U0.timingSafeEqual(Buffer.from(i),Buffer.from(t))}function aBr(i,t){return i.length!==t.length?!1:U0.timingSafeEqual(i,t)}function oBr(i=32){return U0.randomBytes(i).toString("base64url")}function cBr(i){let t=aWt(16),n=Xve(i,Buffer.from(t,"hex"));return{salt:t,hash:n.toString("hex")}}function lBr(i,t,n){let s=Xve(i,Buffer.from(t,"hex"));return cWt(s.toString("hex"),n)}function uBr(i,t){let n=JSON.stringify(i);return zve(n,t)}function dBr(i,t){let n=Qve(i,t);return JSON.parse(n)}function lWt(i){return vO(i).substring(0,8)}function pBr(i,t){return lWt(i)===t}function mBr(i){let t=U0.pbkdf2Sync(i,fBr,1e5,32,"sha256");return Buffer.from(t.toString("base64url"),"utf-8")}function zV(i,t){try{let n=mBr(t),s=Buffer.from(n.toString("utf-8"),"base64url"),u=Buffer.from(i,"base64url").toString("utf-8"),m=Buffer.from(u,"base64url");if(m.length<57)throw new Error(`Invalid Fernet token: too short (${m.length} bytes, need at least 57)`);let g=m[0];if(g!==128)throw new Error(`Invalid Fernet version: 0x${g.toString(16)} (expected 0x80)`);let v=m.subarray(9,25),w=m.subarray(25,m.length-32),S=m.subarray(m.length-32),D=s.subarray(0,16),F=s.subarray(16,32),G=m.subarray(0,m.length-32),V=U0.createHmac("sha256",D).update(G).digest();if(!U0.timingSafeEqual(S,V))throw new Error("Invalid Fernet token: HMAC verification failed");let H=U0.createDecipheriv("aes-128-cbc",F,v);H.setAutoPadding(!0);let K=H.update(w);return K=Buffer.concat([K,H.final()]),K.toString("utf-8")}catch(n){throw n instanceof Error?new Error(`Failed to decrypt Fernet token: ${n.message}`):new Error("Failed to decrypt Fernet token: Unknown error")}}var sWt,wU,XV,mUe,$Jr,qJr,jve,fBr,QV=it(()=>{"use strict";sWt="aes-256-gcm",wU=16,XV=32,mUe=16,$Jr=32,qJr=1e5,jve="sha256";fBr=Buffer.from("b-f2T&>)XPx2vI/I9N7CfYH@Dvdb<F","utf-8")});var wO={};Pp(wO,{CredentialStore:()=>Nie,createCredentialStore:()=>_Br,getCredentialStore:()=>wu});import Gie from"path";import xO from"os";import hBr from"crypto";async function ek(){if(dWt)return hUe;dWt=!0;try{let i=await import("keytar");return hUe=i.default||i,hUe}catch(i){return M.debug("Failed to load keytar native module:",i),null}}async function wu(){return Kve||(Kve=new Nie,await Kve.initialize()),Kve}function _Br(){return new Nie}var hUe,dWt,pWt,Ox,AU,$ve,qve,fWt,_Ue,Nie,Kve,hb=it(()=>{"use strict";QV();yp();ep();fs();Td();hUe=null,dWt=!1,pWt="keytar-available.json";Ox="compass-cli",AU="anthropic-api-key",$ve="compass-api-key",qve={anthropic:"anthropic-api-key",ollama:"ollama-api-key",zai:"zai-api-key",minimax:"minimax-api-key"},fWt="1.0",_Ue={anthropic:"anthropicApiKey",ollama:"ollamaApiKey",zai:"zaiApiKey",minimax:"minimaxApiKey"},Nie=class{useKeytar=!0;machineKey=null;initialized=!1;async initialize(){if(this.initialized)return;let t=`${xO.platform()}-${xO.arch()}`;try{let n=Gie.join(Eo(),pWt);if(await Ls(n)){let s=await lf(n);if(s){let c=JSON.parse(s);if(c.platform===t)if(c.available){if(await ek()){this.useKeytar=!0,this.initialized=!0,M.debug("Using system keychain (cached probe)");return}}else{this.useKeytar=!1,this.machineKey=await this.getMachineKey(),this.initialized=!0,M.debug("Using encrypted file storage (cached probe)");return}}}}catch{}try{let n=await ek();if(!n)throw new Error("Keytar module not available");let s=`${Ox}-test`,c="availability-test";await n.setPassword(s,c,"test"),await n.deletePassword(s,c),this.useKeytar=!0,M.debug("Using system keychain for credential storage")}catch(n){this.useKeytar=!1,M.debug("System keychain unavailable, using encrypted file storage",n),this.machineKey=await this.getMachineKey()}this.initialized=!0,this.saveKeytarCache(t).catch(n=>{M.debug("Failed to cache keytar probe result",n)})}async saveKeytarCache(t){let n=Eo();await _c(n);let s=Gie.join(n,pWt),c={available:this.useKeytar,platform:t,checkedAt:new Date().toISOString()};await mb(s,JSON.stringify(c))}async setApiKey(t){if(await this.ensureInitialized(),!t||typeof t!="string")throw new Error("API key must be a non-empty string");let n=t.trim();if(this.useKeytar)try{let s=await ek();if(s){await s.setPassword(Ox,AU,n),M.debug("API key stored in system keychain");return}}catch(s){M.warn("Failed to store in keychain, falling back to file storage",s)}await this.saveToFile({anthropicApiKey:n}),M.debug("API key stored in encrypted file")}async getApiKey(){await this.ensureInitialized();let t=process.env[pv.API_KEY];if(t&&t.trim())return M.debug("API key loaded from environment variable"),t.trim();if(this.useKeytar)try{let s=await ek();if(s){let c=await s.getPassword(Ox,AU);if(c)return M.debug("API key loaded from system keychain"),c}}catch(s){M.debug("Failed to read from keychain",s)}let n=await this.loadFromFile();return n?.anthropicApiKey?(M.debug("API key loaded from encrypted file"),n.anthropicApiKey):null}async deleteApiKey(){await this.ensureInitialized();let t=!0;if(this.useKeytar)try{let s=await ek();s&&await s.deletePassword(Ox,AU)&&M.debug("API key deleted from system keychain")}catch(s){M.debug("Failed to delete from keychain",s),t=!1}return await this.deleteFile()||(t=!1),t&&M.debug("API key deleted successfully"),t}async hasApiKey(){let t=await this.getApiKey();return t!==null&&t.length>0}async setCompassApiKey(t){if(await this.ensureInitialized(),!t||typeof t!="string")throw new Error("API key must be a non-empty string");let n=t.trim();if(this.useKeytar)try{let c=await ek();if(c){await c.setPassword(Ox,$ve,n),M.debug("Compass API key stored in system keychain");return}}catch(c){M.warn("Failed to store in keychain, falling back to file storage",c)}let s=await this.loadFromFile()||{};await this.saveToFile({...s,compassApiKey:n}),M.debug("Compass API key stored in encrypted file")}async getCompassApiKey(){await this.ensureInitialized();let t=process.env[pv.COMPASS_API_KEY];if(t&&t.trim())return M.debug("Compass API key loaded from environment variable"),t.trim();if(this.useKeytar)try{let s=await ek();if(s){let c=await s.getPassword(Ox,$ve);if(c)return M.debug("Compass API key loaded from system keychain"),c}}catch(s){M.debug("Failed to read from keychain",s)}let n=await this.loadFromFile();return n?.compassApiKey?(M.debug("Compass API key loaded from encrypted file"),n.compassApiKey):null}async deleteCompassApiKey(){await this.ensureInitialized();let t=!0;if(this.useKeytar)try{let n=await ek();n&&await n.deletePassword(Ox,$ve)&&M.debug("Compass API key deleted from system keychain")}catch(n){M.debug("Failed to delete from keychain",n),t=!1}try{let n=await this.loadFromFile();n?.compassApiKey&&(delete n.compassApiKey,await this.saveToFile(n),M.debug("Compass API key deleted from encrypted file"))}catch(n){M.error("Failed to delete Compass API key from file",n),t=!1}return t&&M.debug("Compass API key deleted successfully"),t}async hasCompassApiKey(){let t=await this.getCompassApiKey();return t!==null&&t.length>0}async setProviderApiKey(t,n){if(await this.ensureInitialized(),!n||typeof n!="string")throw new Error("API key must be a non-empty string");if(!dG.includes(t))throw new Error(`Invalid provider: ${t}. Must be one of: ${dG.join(", ")}`);let s=n.trim(),c=qve[t];if(this.useKeytar)try{let g=await ek();if(g){await g.setPassword(Ox,c,s),M.debug(`${t} API key stored in system keychain`);return}}catch(g){M.warn("Failed to store in keychain, falling back to file storage",g)}let u=await this.loadFromFile()||{},m=_Ue[t];await this.saveToFile({...u,[m]:s}),M.debug(`${t} API key stored in encrypted file`)}async getProviderApiKey(t){if(await this.ensureInitialized(),!dG.includes(t))return M.warn(`Invalid provider: ${t}`),null;let n=Aie[t],s=process.env[n];if(s&&s.trim())return M.debug(`${t} API key loaded from environment variable ${n}`),s.trim();let c=qve[t];if(this.useKeytar)try{let g=await ek();if(g){let v=await g.getPassword(Ox,c);if(v)return M.debug(`${t} API key loaded from system keychain`),v}}catch(g){M.debug(`Failed to read ${t} key from keychain`,g)}let u=await this.loadFromFile(),m=_Ue[t];return u?.[m]?(M.debug(`${t} API key loaded from encrypted file`),u[m]):null}async hasProviderApiKey(t){let n=await this.getProviderApiKey(t);return n!==null&&n.length>0}async deleteProviderApiKey(t){if(await this.ensureInitialized(),!dG.includes(t))return M.warn(`Invalid provider: ${t}`),!1;let n=!0,s=qve[t];if(this.useKeytar)try{let c=await ek();c&&await c.deletePassword(Ox,s)&&M.debug(`${t} API key deleted from system keychain`)}catch(c){M.debug(`Failed to delete ${t} key from keychain`,c),n=!1}try{let c=await this.loadFromFile(),u=_Ue[t];c?.[u]&&(delete c[u],await this.saveToFile(c),M.debug(`${t} API key deleted from encrypted file`))}catch(c){M.error(`Failed to delete ${t} API key from file`,c),n=!1}return n}async getConfiguredProviders(){let t=[];for(let n of dG)await this.hasProviderApiKey(n)&&t.push(n);return t}validateApiKeyFormat(t){if(!t||typeof t!="string")return!1;let n=t.trim();return!(n.length<20)}getStorageMethod(){return this.useKeytar?"keychain":"file"}isInitialized(){return this.initialized}async ensureInitialized(){this.initialized||await this.initialize()}async getMachineKey(){if(this.machineKey)return this.machineKey;let n=[xO.hostname(),xO.platform(),xO.arch(),xO.userInfo().username,xO.homedir()].join(":"),s=hBr.createHash("sha256").update(n).digest("hex");return this.machineKey=s,s}async saveToFile(t){let n=await this.getMachineKey(),s=JSON.stringify(t),c=zve(s,n),u={version:fWt,data:c,updatedAt:new Date().toISOString()},m=Eo();await _c(m);let g=Gie.join(m,hU);await mb(g,JSON.stringify(u,null,2)),M.debug("Credentials saved to encrypted file")}async loadFromFile(){let t=Gie.join(Eo(),hU);if(!await Ls(t))return null;try{let n=await lf(t);if(!n)return null;let s=JSON.parse(n);s.version!==fWt&&M.warn(`Credentials file version mismatch: ${s.version}`);let c=await this.getMachineKey(),u=Qve(s.data,c);return JSON.parse(u)}catch(n){return M.error("Failed to load credentials from file",n),null}}async deleteFile(){let t=Gie.join(Eo(),hU);try{return await Ls(t)&&(await J_(t),M.debug("Credentials file deleted")),!0}catch(n){return M.error("Failed to delete credentials file",n),!1}}async migrateToKeychain(){if(!this.useKeytar)return M.debug("Keychain not available, migration skipped"),!1;try{let t=await ek();if(!t)return M.debug("Keytar not available, migration skipped"),!1;let n=await this.loadFromFile();return n?.anthropicApiKey?await t.getPassword(Ox,AU)?(M.debug("Keychain already has credentials, skipping migration"),!0):(await t.setPassword(Ox,AU,n.anthropicApiKey),await this.deleteFile(),M.debug("Credentials migrated from file to system keychain"),!0):(M.debug("No file-based credentials to migrate"),!0)}catch(t){return M.error("Failed to migrate credentials to keychain",t),!1}}async clearAll(){if(await this.ensureInitialized(),this.useKeytar)try{let t=await ek();if(t){await t.deletePassword(Ox,AU),await t.deletePassword(Ox,$ve);for(let n of dG)await t.deletePassword(Ox,qve[n])}}catch(t){M.debug("Failed to clear keychain",t)}await this.deleteFile(),M.debug("All credentials cleared")}},Kve=null});var mWt=it(()=>{"use strict"});var gUe,dS,Rie=it(()=>{"use strict";gUe="1.0.0",dS={dataCollection:{title:"Data Collection",description:"Allow Compass to store conversation history and session data locally for improved functionality.",required:!0,defaultValue:!0},telemetry:{title:"Anonymous Telemetry",description:"Help improve Compass by sending anonymous usage statistics.",required:!1,defaultValue:!1},analytics:{title:"Analytics",description:"Allow collection of feature usage patterns to improve the product.",required:!1,defaultValue:!1},errorReporting:{title:"Error Reporting",description:"Automatically send error reports to help fix bugs.",required:!1,defaultValue:!0}}});var U3,$V=it(()=>{"use strict";U3=(c=>(c.MANUAL="manual",c.AUTO="auto",c.STRICT="strict",c.SMART="smart",c))(U3||{})});var hWt=it(()=>{"use strict"});var kU=it(()=>{"use strict"});var yUe={};Pp(yUe,{AGENT_SOURCE_PRIORITY:()=>Pie,compareAgentPriority:()=>IWt,createDefaultAgentDefinition:()=>yWt,getAgentSourcePriority:()=>e1e,isValidAgentFrontmatter:()=>r1e,isValidAgentPermissionMode:()=>t1e,isValidAgentSource:()=>_Wt,isValidCLIAgentConfig:()=>gWt,parseToolsList:()=>AO,serializeToolsList:()=>bWt});function t1e(i){return typeof i=="string"&&["default","acceptEditsAsk","bypassPermissions","plan","ignore","acceptEdits","dontAsk"].includes(i)}function _Wt(i){return typeof i=="string"&&["project","cli","user","builtin"].includes(i)}function r1e(i){if(typeof i!="object"||i===null)return!1;let t=i;return!(typeof t.name!="string"||t.name.length===0||typeof t.description!="string"||t.description.length===0||t.tools!==void 0&&typeof t.tools!="string"||t.disallowedTools!==void 0&&typeof t.disallowedTools!="string"||t.model!==void 0&&typeof t.model!="string"||t.permissionMode!==void 0&&!t1e(t.permissionMode)||t.skills!==void 0&&typeof t.skills!="string"||t.standalone!==void 0&&typeof t.standalone!="boolean"||t.mcpServers!==void 0&&typeof t.mcpServers!="string")}function gWt(i){if(typeof i!="object"||i===null)return!1;let t=i;return!(typeof t.description!="string"||typeof t.prompt!="string"||t.tools!==void 0&&!Array.isArray(t.tools)||t.disallowedTools!==void 0&&!Array.isArray(t.disallowedTools)||t.model!==void 0&&typeof t.model!="string"||t.permissionMode!==void 0&&!t1e(t.permissionMode)||t.skills!==void 0&&!Array.isArray(t.skills)||t.standalone!==void 0&&typeof t.standalone!="boolean"||t.mcpServers!==void 0&&!Array.isArray(t.mcpServers))}function yWt(i,t,n,s="builtin"){return{id:`${s}-${i}`,name:i,description:t,systemPrompt:n,source:s,permissionMode:"default",isActive:!0,rawFrontmatter:{name:i,description:t}}}function AO(i){if(!(!i||i.trim()===""))return i.split(",").map(t=>t.trim()).filter(t=>t.length>0)}function bWt(i){if(!(!i||i.length===0))return i.join(", ")}function e1e(i){return Pie.indexOf(i)}function IWt(i,t){return e1e(i.source)-e1e(t.source)}var Pie,Wie=it(()=>{"use strict";Pie=["builtin","user","cli","project"]});function Vie(){return{totalUsageTimeMs:0,lastRatingShownAt:null,lastRatingSubmittedAt:null,totalRatingsSubmitted:0,totalSessions:0,firstUsedAt:new Date().toISOString(),lastActivityAt:null}}function IUe(i){if(typeof i!="object"||i===null)return!1;let t=i;return typeof t.totalUsageTimeMs=="number"&&(t.lastRatingShownAt===null||typeof t.lastRatingShownAt=="string")&&(t.lastRatingSubmittedAt===null||typeof t.lastRatingSubmittedAt=="string")&&typeof t.totalRatingsSubmitted=="number"&&typeof t.totalSessions=="number"&&typeof t.firstUsedAt=="string"&&(t.lastActivityAt===null||typeof t.lastActivityAt=="string")}var bUe,vUe=it(()=>{"use strict";bUe={usageTimeThresholdMs:12e4,cooldownPeriodMs:864e5,activityWindowMs:12e4,cooldownMultiplier:1.5,maxCooldownPeriodMs:6048e5}});function n1e(i){return typeof i=="string"&&vWt.includes(i)}var vWt,xUe,wUe=it(()=>{"use strict";vWt=["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop"],xUe=["personal","project"]});function qV(i){if(!i||typeof i!="object")return!1;let t=i;return typeof t.version=="string"&&typeof t.id=="string"&&typeof t.sessionId=="string"&&typeof t.projectPath=="string"&&typeof t.startedAt=="string"&&typeof t.endedAt=="string"&&typeof t.messageCount=="number"&&typeof t.summary=="string"&&Array.isArray(t.messages)&&Array.isArray(t.topics)&&(Array.isArray(t.operations)||Array.isArray(t.toolsUsed)&&Array.isArray(t.filesModified)&&Array.isArray(t.filesRead))}var AUe=it(()=>{"use strict"});var xWt=it(()=>{"use strict"});var kO,AWt,kUe=it(()=>{"use strict";mWt();Rie();$V();hWt();kU();Wie();vUe();wUe();AUe();xWt();Td();kO="BASIC",AWt=["BASIC","PRO","MAX","ENTERPRISE","UNLIMITED"]});var a1e={};Pp(a1e,{CompassAuthService:()=>Zie,createCompassAuthService:()=>IBr,getCompassAuthService:()=>sm});function yBr(i){return i==="active"||i==="trial"||i==="no_subscription"||i==="expired"?i:(i&&M.warn(`Unknown plan_status value: '${i}', defaulting to 'no_subscription'`),"active")}function bBr(i){if(!i)return null;let t=i.toUpperCase();return AWt.includes(t)?t:(M.warn(`Unknown plan_type value: '${i}', defaulting to '${kO}'`),kO)}function sm(){return CUe||(CUe=new Zie),CUe}function IBr(){return new Zie}var s1e,Zie,CUe,Yx=it(()=>{"use strict";fs();kUe();s1e="https://api.compassap.ai";Zie=class{currentPlanStatus="no_subscription";currentPlanType=null;currentOrgName=null;superUser=!1;authenticated=!1;async validateApiKey(t){if(!t||typeof t!="string")throw new Error("API key must be a non-empty string");let n=t.trim();if(!n)throw new Error("API key cannot be empty");try{let s=`${s1e}/api/auth/validate-key`;M.debug("Validating Compass API key",{url:s});let c=await fetch(s,{method:"GET",headers:{"X-API-Key":n,"Content-Type":"application/json"}});if(!c.ok){let m=`API validation failed with status ${c.status}`;try{let g=await c.json();g.detail&&(m=g.detail)}catch{}throw M.error("Compass API key validation failed",{status:c.status}),new Error(m)}let u=await c.json();return M.debug("Compass API membership response",{url:s,response:JSON.stringify(u,null,2)}),this.currentPlanStatus=yBr(u.membership?.plan_status),this.currentPlanType=bBr(u.membership?.subscription?.plan_type),this.currentOrgName=u.membership?.org_name??null,this.superUser=u.user?.suser===!0,u.membership?.plan_status||M.debug("Compass API response missing plan_status field, defaulting to no_subscription"),this.authenticated=!0,M.debug("Compass API key validated successfully",{userId:u.user.id,username:u.user.username,planStatus:this.currentPlanStatus,planType:this.currentPlanType}),u}catch(s){if(s instanceof Error)throw M.error("Failed to validate Compass API key",s),s;let c="Failed to validate Compass API key: Unknown error";throw M.error(c),new Error(c)}}async isValidApiKey(t){try{return await this.validateApiKey(t),!0}catch{return!1}}getBaseUrl(){return s1e}getPlanStatus(){return this.currentPlanStatus}setPlanStatus(t){this.currentPlanStatus=t}getPlanType(){return this.currentPlanType}setPlanType(t){this.currentPlanType=t}isAuthenticated(){return this.authenticated}hasCompassKeyWithoutSubscription(){return this.authenticated&&this.currentPlanStatus==="no_subscription"}getOrgName(){return this.currentOrgName}isSuperUser(){return this.superUser}async getLLMConfig(t,n){if(!t||typeof t!="string")throw new Error("Model name must be a non-empty string");if(!n||typeof n!="string")throw new Error("Compass API key must be a non-empty string");let s=n.trim(),c=t.trim();if(!s)throw new Error("Compass API key cannot be empty");if(!c)throw new Error("Model name cannot be empty");try{let u=`${s1e}/api/tenant/v3/llms?model=${encodeURIComponent(c)}`;M.debug(`Fetching LLM config for model: ${c}`,{url:u});let m=await fetch(u,{method:"GET",headers:{"X-API-Key":s,"Content-Type":"application/json"}});if(M.debug("Received response from LLM config endpoint",{status:m.status,statusText:m.statusText,headers:Object.fromEntries(m.headers.entries())}),!m.ok){let v=`Failed to fetch LLM config with status ${m.status}`;try{let w=await m.json();M.error("API error response",{errorData:w}),w.detail&&(v=w.detail)}catch(w){M.debug("Failed to parse error response as JSON",w)}throw M.error("Failed to fetch LLM config",{status:m.status,model:c,errorMessage:v}),new Error(v)}let g=await m.json();return M.debug("LLM config fetched successfully",{model:g.model,api_type:g.api_type,base_url:g.base_url,has_api_key:!!g.api_key,api_key_preview:g.api_key?`${g.api_key.substring(0,20)}...`:"null"}),g}catch(u){if(u instanceof Error)throw M.error("Failed to fetch LLM config",u),u;let m="Failed to fetch LLM config: Unknown error";throw M.error(m),new Error(m)}}async trackUsage(t,n){if(!n||typeof n!="string")return null;try{let s=`${s1e}/api/ai/usage/track`,c=await fetch(s,{method:"POST",headers:{"X-API-Key":n.trim(),"Content-Type":"application/json"},body:JSON.stringify(t)});return c.ok?await c.json():null}catch{return null}}async fetchOllamaConfig(t){if(!t||typeof t!="string")return M.warn("Invalid Compass API key for Ollama config fetch"),null;let n=t.trim();if(!n)return M.warn("Empty Compass API key for Ollama config fetch"),null;let s="ollama/glm-4.7:cloud";M.debug("Attempting to fetch Ollama configuration",{model:s});try{let c=await this.getLLMConfig(s,n);if(c.api_key&&c.api_key.length>0)return M.info("Found valid Ollama configuration",{model:c.model,base_url:c.base_url,api_type:c.api_type}),{endpoint:"https://ollama.com",model:c.model,apiKey:c.api_key,available:!0}}catch(c){M.debug("Ollama configuration not available",{error:c})}return M.info("No available Ollama configuration found in Compass"),null}},CUe=null});var CWt=ze((TJn,kWt)=>{var CU=1e3,SU=CU*60,EU=SU*60,CO=EU*24,vBr=CO*7,xBr=CO*365.25;kWt.exports=function(i,t){t=t||{};var n=typeof i;if(n==="string"&&i.length>0)return wBr(i);if(n==="number"&&isFinite(i))return t.long?kBr(i):ABr(i);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(i))};function wBr(i){if(i=String(i),!(i.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(t){var n=parseFloat(t[1]),s=(t[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return n*xBr;case"weeks":case"week":case"w":return n*vBr;case"days":case"day":case"d":return n*CO;case"hours":case"hour":case"hrs":case"hr":case"h":return n*EU;case"minutes":case"minute":case"mins":case"min":case"m":return n*SU;case"seconds":case"second":case"secs":case"sec":case"s":return n*CU;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function ABr(i){var t=Math.abs(i);return t>=CO?Math.round(i/CO)+"d":t>=EU?Math.round(i/EU)+"h":t>=SU?Math.round(i/SU)+"m":t>=CU?Math.round(i/CU)+"s":i+"ms"}function kBr(i){var t=Math.abs(i);return t>=CO?o1e(i,t,CO,"day"):t>=EU?o1e(i,t,EU,"hour"):t>=SU?o1e(i,t,SU,"minute"):t>=CU?o1e(i,t,CU,"second"):i+" ms"}function o1e(i,t,n,s){var c=t>=n*1.5;return Math.round(i/n)+" "+s+(c?"s":"")}});var SUe=ze((FJn,SWt)=>{function CBr(i){n.debug=n,n.default=n,n.coerce=v,n.disable=m,n.enable=c,n.enabled=g,n.humanize=CWt(),n.destroy=w,Object.keys(i).forEach(S=>{n[S]=i[S]}),n.names=[],n.skips=[],n.formatters={};function t(S){let D=0;for(let F=0;F<S.length;F++)D=(D<<5)-D+S.charCodeAt(F),D|=0;return n.colors[Math.abs(D)%n.colors.length]}n.selectColor=t;function n(S){let D,F=null,G,V;function H(...K){if(!H.enabled)return;let ce=H,we=Number(new Date),je=we-(D||we);ce.diff=je,ce.prev=D,ce.curr=we,D=we,K[0]=n.coerce(K[0]),typeof K[0]!="string"&&K.unshift("%O");let et=0;K[0]=K[0].replace(/%([a-zA-Z%])/g,(Nt,wt)=>{if(Nt==="%%")return"%";et++;let mn=n.formatters[wt];if(typeof mn=="function"){let ur=K[et];Nt=mn.call(ce,ur),K.splice(et,1),et--}return Nt}),n.formatArgs.call(ce,K),(ce.log||n.log).apply(ce,K)}return H.namespace=S,H.useColors=n.useColors(),H.color=n.selectColor(S),H.extend=s,H.destroy=n.destroy,Object.defineProperty(H,"enabled",{enumerable:!0,configurable:!1,get:()=>F!==null?F:(G!==n.namespaces&&(G=n.namespaces,V=n.enabled(S)),V),set:K=>{F=K}}),typeof n.init=="function"&&n.init(H),H}function s(S,D){let F=n(this.namespace+(typeof D>"u"?":":D)+S);return F.log=this.log,F}function c(S){n.save(S),n.namespaces=S,n.names=[],n.skips=[];let D=(typeof S=="string"?S:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let F of D)F[0]==="-"?n.skips.push(F.slice(1)):n.names.push(F)}function u(S,D){let F=0,G=0,V=-1,H=0;for(;F<S.length;)if(G<D.length&&(D[G]===S[F]||D[G]==="*"))D[G]==="*"?(V=G,H=F,G++):(F++,G++);else if(V!==-1)G=V+1,H++,F=H;else return!1;for(;G<D.length&&D[G]==="*";)G++;return G===D.length}function m(){let S=[...n.names,...n.skips.map(D=>"-"+D)].join(",");return n.enable(""),S}function g(S){for(let D of n.skips)if(u(S,D))return!1;for(let D of n.names)if(u(S,D))return!0;return!1}function v(S){return S instanceof Error?S.stack||S.message:S}function w(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}SWt.exports=CBr});var EWt=ze((uw,c1e)=>{uw.formatArgs=EBr;uw.save=TBr;uw.load=FBr;uw.useColors=SBr;uw.storage=DBr();uw.destroy=(()=>{let i=!1;return()=>{i||(i=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();uw.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function SBr(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let i;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(i=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(i[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function EBr(i){if(i[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+i[0]+(this.useColors?"%c ":" ")+"+"+c1e.exports.humanize(this.diff),!this.useColors)return;let t="color: "+this.color;i.splice(1,0,t,"color: inherit");let n=0,s=0;i[0].replace(/%[a-zA-Z%]/g,c=>{c!=="%%"&&(n++,c==="%c"&&(s=n))}),i.splice(s,0,t)}uw.log=console.debug||console.log||(()=>{});function TBr(i){try{i?uw.storage.setItem("debug",i):uw.storage.removeItem("debug")}catch{}}function FBr(){let i;try{i=uw.storage.getItem("debug")||uw.storage.getItem("DEBUG")}catch{}return!i&&typeof process<"u"&&"env"in process&&(i=process.env.DEBUG),i}function DBr(){try{return localStorage}catch{}}c1e.exports=SUe()(uw);var{formatters:GBr}=c1e.exports;GBr.j=function(i){try{return JSON.stringify(i)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}});var EUe=ze((DJn,TWt)=>{"use strict";TWt.exports=(i,t=process.argv)=>{let n=i.startsWith("-")?"":i.length===1?"-":"--",s=t.indexOf(n+i),c=t.indexOf("--");return s!==-1&&(c===-1||s<c)}});var Mie=ze((GJn,DWt)=>{"use strict";var NBr=Xi("os"),FWt=Xi("tty"),pS=EUe(),{env:mI}=process,KV;pS("no-color")||pS("no-colors")||pS("color=false")||pS("color=never")?KV=0:(pS("color")||pS("colors")||pS("color=true")||pS("color=always"))&&(KV=1);"FORCE_COLOR"in mI&&(mI.FORCE_COLOR==="true"?KV=1:mI.FORCE_COLOR==="false"?KV=0:KV=mI.FORCE_COLOR.length===0?1:Math.min(parseInt(mI.FORCE_COLOR,10),3));function TUe(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function FUe(i,t){if(KV===0)return 0;if(pS("color=16m")||pS("color=full")||pS("color=truecolor"))return 3;if(pS("color=256"))return 2;if(i&&!t&&KV===void 0)return 0;let n=KV||0;if(mI.TERM==="dumb")return n;if(process.platform==="win32"){let s=NBr.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in mI)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(s=>s in mI)||mI.CI_NAME==="codeship"?1:n;if("TEAMCITY_VERSION"in mI)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(mI.TEAMCITY_VERSION)?1:0;if(mI.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in mI){let s=parseInt((mI.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(mI.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(mI.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(mI.TERM)||"COLORTERM"in mI?1:n}function RBr(i){let t=FUe(i,i&&i.isTTY);return TUe(t)}DWt.exports={supportsColor:RBr,stdout:TUe(FUe(!0,FWt.isatty(1))),stderr:TUe(FUe(!0,FWt.isatty(2)))}});var NWt=ze((hI,u1e)=>{var PBr=Xi("tty"),l1e=Xi("util");hI.init=LBr;hI.log=MBr;hI.formatArgs=VBr;hI.save=OBr;hI.load=YBr;hI.useColors=WBr;hI.destroy=l1e.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");hI.colors=[6,2,3,4,5,1];try{let i=Mie();i&&(i.stderr||i).level>=2&&(hI.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}hI.inspectOpts=Object.keys(process.env).filter(i=>/^debug_/i.test(i)).reduce((i,t)=>{let n=t.substring(6).toLowerCase().replace(/_([a-z])/g,(c,u)=>u.toUpperCase()),s=process.env[t];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),i[n]=s,i},{});function WBr(){return"colors"in hI.inspectOpts?!!hI.inspectOpts.colors:PBr.isatty(process.stderr.fd)}function VBr(i){let{namespace:t,useColors:n}=this;if(n){let s=this.color,c="\x1B[3"+(s<8?s:"8;5;"+s),u=` ${c};1m${t} \x1B[0m`;i[0]=u+i[0].split(`
|
|
@@ -157,7 +157,7 @@ If you understand the risks and have appropriate mitigations in place,
|
|
|
157
157
|
you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g.,
|
|
158
158
|
|
|
159
159
|
new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
160
|
-
`);this.baseURL=u.baseURL,this.timeout=u.timeout??uKe.DEFAULT_TIMEOUT,this.logger=u.logger??console;let m="warn";this.logLevel=m,this.logLevel=Iqe(u.logLevel,"ClientOptions.logLevel",this)??Iqe(Lae("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??m,this.fetchOptions=u.fetchOptions,this.maxRetries=u.maxRetries??2,this.fetch=u.fetch??bJt(),co(this,gCe,vJt,"f"),this._options=u,this.apiKey=typeof n=="string"?n:null,this.authToken=s}withOptions(t){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...t})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:t,nulls:n}){if(!(t.get("x-api-key")||t.get("authorization"))&&!(this.apiKey&&t.get("x-api-key"))&&!n.has("x-api-key")&&!(this.authToken&&t.get("authorization"))&&!n.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(t){return lu([await this.apiKeyAuth(t),await this.bearerAuth(t)])}async apiKeyAuth(t){if(this.apiKey!=null)return lu([{"X-Api-Key":this.apiKey}])}async bearerAuth(t){if(this.authToken!=null)return lu([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(t){return Object.entries(t).filter(([n,s])=>typeof s<"u").map(([n,s])=>{if(typeof s=="string"||typeof s=="number"||typeof s=="boolean")return`${encodeURIComponent(n)}=${encodeURIComponent(s)}`;if(s===null)return`${encodeURIComponent(n)}=`;throw new wc(`Cannot stringify type ${typeof s}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${OZ}`}defaultIdempotencyKey(){return`stainless-node-retry-${dqe()}`}makeStatusError(t,n,s,c){return xI.generate(t,n,s,c)}buildURL(t,n,s){let c=!oi(this,lKe,"m",nBt).call(this)&&s||this.baseURL,u=cJt(t)?new URL(t):new URL(c+(c.endsWith("/")&&t.startsWith("/")?t.slice(1):t)),m=this.defaultQuery();return lJt(m)||(n={...m,...n}),typeof n=="object"&&n&&!Array.isArray(n)&&(u.search=this.stringifyQuery(n)),u.toString()}_calculateNonstreamingTimeout(t){if(3600*t/128e3>600)throw new wc("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(t){}async prepareRequest(t,{url:n,options:s}){}get(t,n){return this.methodRequest("get",t,n)}post(t,n){return this.methodRequest("post",t,n)}patch(t,n){return this.methodRequest("patch",t,n)}put(t,n){return this.methodRequest("put",t,n)}delete(t,n){return this.methodRequest("delete",t,n)}methodRequest(t,n,s){return this.request(Promise.resolve(s).then(c=>({method:t,path:n,...c})))}request(t,n=null){return new u8(this,this.makeRequest(t,n,void 0))}async makeRequest(t,n,s){let c=await t,u=c.maxRetries??this.maxRetries;n==null&&(n=u),await this.prepareOptions(c);let{req:m,url:g,timeout:v}=await this.buildRequest(c,{retryCount:u-n});await this.prepareRequest(m,{url:g,options:c});let w="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),S=s===void 0?"":`, retryOf: ${s}`,D=Date.now();if(wI(this).debug(`[${w}] sending request`,hP({retryOfRequestLogID:s,method:c.method,url:g,options:c,headers:m.headers})),c.signal?.aborted)throw new Iv;let F=new AbortController,G=await this.fetchWithTimeout(g,m,v,F).catch(gae),V=Date.now();if(G instanceof globalThis.Error){let ce=`retrying, ${n} attempts remaining`;if(c.signal?.aborted)throw new Iv;let we=fP(G)||/timed? ?out/i.test(String(G)+("cause"in G?String(G.cause):""));if(n)return wI(this).info(`[${w}] connection ${we?"timed out":"failed"} - ${ce}`),wI(this).debug(`[${w}] connection ${we?"timed out":"failed"} (${ce})`,hP({retryOfRequestLogID:s,url:g,durationMs:V-D,message:G.message})),this.retryRequest(c,n,s??w);throw wI(this).info(`[${w}] connection ${we?"timed out":"failed"} - error; no more retries left`),wI(this).debug(`[${w}] connection ${we?"timed out":"failed"} (error; no more retries left)`,hP({retryOfRequestLogID:s,url:g,durationMs:V-D,message:G.message})),we?new oX:new MZ({cause:G})}let H=[...G.headers.entries()].filter(([ce])=>ce==="request-id").map(([ce,we])=>", "+ce+": "+JSON.stringify(we)).join(""),K=`[${w}${S}${H}] ${m.method} ${g} ${G.ok?"succeeded":"failed"} with status ${G.status} in ${V-D}ms`;if(!G.ok){let ce=await this.shouldRetry(G);if(n&&ce){let wt=`retrying, ${n} attempts remaining`;return await IJt(G.body),wI(this).info(`${K} - ${wt}`),wI(this).debug(`[${w}] response error (${wt})`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,durationMs:V-D})),this.retryRequest(c,n,s??w,G.headers)}let we=ce?"error; no more retries left":"error; not retryable";wI(this).info(`${K} - ${we}`);let je=await G.text().catch(wt=>gae(wt).message),et=Yke(je),xt=et?void 0:je;throw wI(this).debug(`[${w}] response error (${we})`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,message:xt,durationMs:Date.now()-D})),this.makeStatusError(G.status,et,xt,G.headers)}return wI(this).info(K),wI(this).debug(`[${w}] response start`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,durationMs:V-D})),{response:G,options:c,controller:F,requestLogID:w,retryOfRequestLogID:s,startTime:D}}getAPIList(t,n,s){return this.requestAPIList(n,s&&"then"in s?s.then(c=>({method:"get",path:t,...c})):{method:"get",path:t,...s})}requestAPIList(t,n){let s=this.makeRequest(n,null,void 0);return new wae(this,s,t)}async fetchWithTimeout(t,n,s,c){let{signal:u,method:m,...g}=n||{},v=this._makeAbort(c);u&&u.addEventListener("abort",v,{once:!0});let w=setTimeout(v,s),S=globalThis.ReadableStream&&g.body instanceof globalThis.ReadableStream||typeof g.body=="object"&&g.body!==null&&Symbol.asyncIterator in g.body,D={signal:c.signal,...S?{duplex:"half"}:{},method:"GET",...g};m&&(D.method=m.toUpperCase());try{return await this.fetch.call(void 0,t,D)}finally{clearTimeout(w)}}async shouldRetry(t){let n=t.headers.get("x-should-retry");return n==="true"?!0:n==="false"?!1:t.status===408||t.status===409||t.status===429||t.status>=500}async retryRequest(t,n,s,c){let u,m=c?.get("retry-after-ms");if(m){let v=parseFloat(m);Number.isNaN(v)||(u=v)}let g=c?.get("retry-after");if(g&&!u){let v=parseFloat(g);Number.isNaN(v)?u=Date.parse(g)-Date.now():u=v*1e3}if(!(u&&0<=u&&u<60*1e3)){let v=t.maxRetries??this.maxRetries;u=this.calculateDefaultRetryTimeoutMillis(n,v)}return await pJt(u),this.makeRequest(t,n-1,s)}calculateDefaultRetryTimeoutMillis(t,n){let u=n-t,m=Math.min(.5*Math.pow(2,u),8),g=1-Math.random()*.25;return m*g*1e3}calculateNonstreamingTimeout(t,n){if(36e5*t/128e3>6e5||n!=null&&t>n)throw new wc("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(t,{retryCount:n=0}={}){let s={...t},{method:c,path:u,query:m,defaultBaseURL:g}=s,v=this.buildURL(u,m,g);"timeout"in s&&dJt("timeout",s.timeout),s.timeout=s.timeout??this.timeout;let{bodyHeaders:w,body:S}=this.buildBody({options:s}),D=await this.buildHeaders({options:t,method:c,bodyHeaders:w,retryCount:n});return{req:{method:c,headers:D,...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&S instanceof globalThis.ReadableStream&&{duplex:"half"},...S&&{body:S},...this.fetchOptions??{},...s.fetchOptions??{}},url:v,timeout:s.timeout}}async buildHeaders({options:t,method:n,bodyHeaders:s,retryCount:c}){let u={};this.idempotencyHeader&&n!=="get"&&(t.idempotencyKey||(t.idempotencyKey=this.defaultIdempotencyKey()),u[this.idempotencyHeader]=t.idempotencyKey);let m=lu([u,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(c),...t.timeout?{"X-Stainless-Timeout":String(Math.trunc(t.timeout/1e3))}:{},...yJt(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(t),this._options.defaultHeaders,s,t.headers]);return this.validateHeaders(m),m.values}_makeAbort(t){return()=>t.abort()}buildBody({options:{body:t,headers:n}}){if(!t)return{bodyHeaders:void 0,body:void 0};let s=lu([n]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&s.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:Lke(t)}:oi(this,gCe,"f").call(this,{body:t,headers:s})}};uKe=Ng,gCe=new WeakMap,lKe=new WeakSet,nBt=function(){return this.baseURL!=="https://api.anthropic.com"};Ng.Anthropic=uKe;Ng.HUMAN_PROMPT=iBt;Ng.AI_PROMPT=sBt;Ng.DEFAULT_TIMEOUT=6e5;Ng.AnthropicError=wc;Ng.APIError=xI;Ng.APIConnectionError=MZ;Ng.APIConnectionTimeoutError=oX;Ng.APIUserAbortError=Iv;Ng.NotFoundError=dX;Ng.ConflictError=pX;Ng.RateLimitError=mX;Ng.BadRequestError=cX;Ng.AuthenticationError=lX;Ng.InternalServerError=hX;Ng.PermissionDeniedError=uX;Ng.UnprocessableEntityError=fX;Ng.toFile=Qke;mk=class extends Ng{constructor(){super(...arguments),this.completions=new _8(this),this.messages=new BZ(this),this.models=new y8(this),this.beta=new RT(this)}};mk.Completions=_8;mk.Messages=BZ;mk.Models=y8;mk.Beta=RT});var aBt=it(()=>{dKe();Tqe();jke();dKe();GG();lk()});var bCe={};Pp(bCe,{CLAUDE_MODELS:()=>k1,MODEL_ALIASES:()=>UZ,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>oBt,calculateModelCost:()=>hBt,compareModels:()=>_Bt,getAvailableAliases:()=>dBt,getAvailableModelIds:()=>uBt,getAvailableModels:()=>hk,getCheapestModel:()=>yBt,getDefaultModel:()=>fBt,getDefaultModelId:()=>mBt,getModelConfig:()=>df,getModelDescription:()=>yCe,getModelTier:()=>IBt,getModelsByCapability:()=>gBt,getMostCapableModel:()=>bBt,hasFullAccess:()=>cBt,isAnthropicModel:()=>lBt,isValidModel:()=>pBt,resolveModelId:()=>_0});function cBt(i){return i==="trial"||i==="active"}function _0(i){let t=i.toLowerCase();if(UZ[t])return UZ[t];for(let n of Object.keys(k1))if(n.toLowerCase()===t)return n;return i}function df(i){let t=_0(i);return k1[t]}function lBt(i){return df(i)?.provider==="anthropic"}function hk(){return Object.values(k1)}function uBt(){return Object.keys(k1)}function dBt(){return Object.keys(UZ)}function pBt(i){return _0(i)in k1}function fBt(){return k1["claude-sonnet-4-5-20250929"]}function mBt(){return"claude-sonnet-4-5-20250929"}function hBt(i,t,n){let s=df(i);if(!s)return null;let c=t/1e6*s.pricing.inputPricePerMillion,u=n/1e6*s.pricing.outputPricePerMillion;return c+u}function _Bt(i,t,n){let s=df(i),c=df(t);if(!s||!c)return 0;switch(n){case"price":return s.pricing.inputPricePerMillion-c.pricing.inputPricePerMillion;case"context":return c.contextWindow-s.contextWindow;case"speed":return c.pricing.inputPricePerMillion-s.pricing.inputPricePerMillion;default:return 0}}function gBt(i){return hk().filter(t=>t.capabilities[i])}function yBt(){return hk().reduce((t,n)=>n.pricing.inputPricePerMillion<t.pricing.inputPricePerMillion?n:t)}function bBt(){return k1["claude-opus-4-6"]}function IBt(i){let t=_0(i);if(t.includes("haiku"))return"economy";if(t.includes("sonnet"))return"balanced";if(t.includes("opus"))return"premium"}function yCe(i){let t=_0(i);if(t.includes("opus"))return"Most capable model - best for complex reasoning, analysis, and extended thinking";if(t.includes("sonnet"))return"Balanced performance and cost - ideal for most coding tasks";if(t.includes("haiku"))return"Fastest and most economical - great for quick responses and simple tasks";if(t.includes("glm-4.7"))return"OpenSource"}var oBt,k1,UZ,vv=it(()=>{"use strict";oBt=15e4;k1={"glm-5:cloud":{id:"glm-5:cloud",name:"Z.AI GLM 5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"glm-4.7:cloud":{id:"glm-4.7:cloud",name:"Z.AI GLM 4.7",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"minimax-m2.5:cloud":{id:"minimax-m2.5:cloud",name:"MiniMax M2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"kimi-k2.5:cloud":{id:"kimi-k2.5:cloud",name:"Kimi K2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"gemini-3-pro-preview":{id:"gemini-3-pro-preview",name:"Gemini 3 Pro",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-6":{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",name:"Claude Sonnet 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-opus-4-6":{id:"claude-opus-4-6",name:"Claude Opus 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",name:"Claude Haiku 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:8192,pricing:{inputPricePerMillion:1,outputPricePerMillion:5,cacheWrite5mPricePerMillion:1.25,cacheWrite1hPricePerMillion:2,cacheHitPricePerMillion:.1},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}}},UZ={sonnet:"claude-sonnet-4-6",opus:"claude-opus-4-6","sonnet-4.6":"claude-sonnet-4-6",sonnet46:"claude-sonnet-4-6","sonnet-4.5":"claude-sonnet-4-5-20250929",sonnet45:"claude-sonnet-4-5-20250929","opus-4.6":"claude-opus-4-6",opus46:"claude-opus-4-6","opus-4.5":"claude-opus-4-5-20251101",opus45:"claude-opus-4-5-20251101",haiku:"claude-haiku-4-5-20251001","glm-5":"glm-5:cloud","glm-4.7":"glm-4.7:cloud","minimax-m2.5":"minimax-m2.5:cloud","kimi-k2.5":"kimi-k2.5:cloud","gemini-3-pro":"gemini-3-pro-preview",fast:"claude-haiku-4-5-20251001",quick:"claude-haiku-4-5-20251001",smart:"claude-sonnet-4-5-20250929",balanced:"claude-sonnet-4-5-20250929",powerful:"claude-opus-4-6",best:"claude-opus-4-6",beyond:"glm-5:cloud",robust:"glm-4.7:cloud",deep:"kimi-k2.5:cloud",versatile:"minimax-m2.5:cloud",creative:"gemini-3-pro-preview",s:"claude-sonnet-4-5-20250929",o:"claude-opus-4-6",h:"claude-haiku-4-5-20251001",g:"glm-5:cloud",m:"minimax-m2.5:cloud",k:"kimi-k2.5:cloud",p:"gemini-3-pro-preview"}});function vBt(i,t=0){return(xv[i[t+0]]+xv[i[t+1]]+xv[i[t+2]]+xv[i[t+3]]+"-"+xv[i[t+4]]+xv[i[t+5]]+"-"+xv[i[t+6]]+xv[i[t+7]]+"-"+xv[i[t+8]]+xv[i[t+9]]+"-"+xv[i[t+10]]+xv[i[t+11]]+xv[i[t+12]]+xv[i[t+13]]+xv[i[t+14]]+xv[i[t+15]]).toLowerCase()}var xv,xBt=it(()=>{xv=[];for(let i=0;i<256;++i)xv.push((i+256).toString(16).slice(1))});import{randomFillSync as Kyn}from"node:crypto";function pKe(){return ICe>vCe.length-16&&(Kyn(vCe),ICe=0),vCe.slice(ICe,ICe+=16)}var vCe,ICe,wBt=it(()=>{vCe=new Uint8Array(256),ICe=vCe.length});import{randomUUID as ebn}from"node:crypto";var fKe,ABt=it(()=>{fKe={randomUUID:ebn}});function tbn(i,t,n){i=i||{};let s=i.random??i.rng?.()??pKe();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=s[6]&15|64,s[8]=s[8]&63|128,t){if(n=n||0,n<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let c=0;c<16;++c)t[n+c]=s[c];return t}return vBt(s)}function rbn(i,t,n){return fKe.randomUUID&&!t&&!i?fKe.randomUUID():tbn(i,t,n)}var cl,kBt=it(()=>{ABt();wBt();xBt();cl=rbn});var AI=it(()=>{kBt()});function ACe(i,t){return i!=="active"?CBt[i]:xCe[t??kO]??xCe[kO]}var Hae,wCe,mKe,hKe,nbn,ibn,sbn,abn,obn,cbn,lbn,ubn,xCe,CBt,_Ke,GX=it(()=>{"use strict";kUe();Hae=360*60*1e3,wCe=6,mKe="token-limits-usage.json",hKe=1,nbn={generalLimit:1e6,defaultPerModelLimit:3e5,perModelLimits:{"claude-opus-4-6":3e5,"claude-opus-4-5-20251101":3e5,"claude-sonnet-4-6":3e5,"claude-sonnet-4-5-20250929":3e5,"claude-haiku-4-5-20251001":3e5,"glm-5:cloud":7e5,"glm-4.7:cloud":7e5,"minimax-m2.5:cloud":7e5,"kimi-k2.5:cloud":7e5,"gemini-3-pro-preview":7e5}},ibn={generalLimit:15e4,defaultPerModelLimit:15e4,perModelLimits:{}},sbn={generalLimit:15e4,defaultPerModelLimit:15e4,perModelLimits:{}},abn={generalLimit:1/0,defaultPerModelLimit:8e4,perModelLimits:{"claude-opus-4-6":4e4,"claude-opus-4-5-20251101":4e4,"claude-sonnet-4-6":4e4,"claude-sonnet-4-5-20250929":4e4,"claude-haiku-4-5-20251001":8e4,"glm-5:cloud":8e4,"glm-4.7:cloud":8e4,"minimax-m2.5:cloud":8e4,"kimi-k2.5:cloud":8e4,"gemini-3-pro-preview":8e4}},obn={generalLimit:1/0,defaultPerModelLimit:5e5,perModelLimits:{"claude-opus-4-6":8e4,"claude-opus-4-5-20251101":8e4,"claude-sonnet-4-6":8e4,"claude-sonnet-4-5-20250929":8e4,"claude-haiku-4-5-20251001":2e5,"glm-5:cloud":5e5,"glm-4.7:cloud":5e5,"minimax-m2.5:cloud":5e5,"kimi-k2.5:cloud":5e5,"gemini-3-pro-preview":5e5}},cbn={generalLimit:1/0,defaultPerModelLimit:1e6,perModelLimits:{"claude-opus-4-6":2e5,"claude-opus-4-5-20251101":2e5,"claude-sonnet-4-6":2e5,"claude-sonnet-4-5-20250929":2e5,"claude-haiku-4-5-20251001":1e6,"glm-5:cloud":1e6,"glm-4.7:cloud":1e6,"minimax-m2.5:cloud":1e6,"kimi-k2.5:cloud":1e6,"gemini-3-pro-preview":1e6}},lbn={generalLimit:1/0,defaultPerModelLimit:5e6,perModelLimits:{"claude-opus-4-6":25e5,"claude-opus-4-5-20251101":25e5,"claude-sonnet-4-6":25e5,"claude-sonnet-4-5-20250929":25e5,"claude-haiku-4-5-20251001":5e6,"glm-5:cloud":5e6,"glm-4.7:cloud":5e6,"minimax-m2.5:cloud":5e6,"kimi-k2.5:cloud":5e6,"gemini-3-pro-preview":5e6}},ubn={generalLimit:1/0,defaultPerModelLimit:1/0,perModelLimits:{}},xCe=Object.freeze({BASIC:Object.freeze(abn),PRO:Object.freeze(obn),MAX:Object.freeze(cbn),ENTERPRISE:Object.freeze(lbn),UNLIMITED:Object.freeze(ubn)}),CBt=Object.freeze({trial:Object.freeze(nbn),no_subscription:Object.freeze(ibn),expired:Object.freeze(sbn),active:Object.freeze(xCe[kO])});_Ke=Object.freeze({trial:null,active:null,no_subscription:Object.freeze({pattern:/^claude-/,exceptions:[/haiku/]}),expired:Object.freeze({pattern:/^claude-/,exceptions:[/haiku/]})})});import gKe from"path";import dbn from"os";function Jae(){return{version:hKe,windowStart:Date.now(),providers:{}}}function bKe(i){return i.startsWith("claude-")?"anthropic":"ollama"}function kCe(i){let t=Date.now()-i.windowStart;return t>=Hae||t<0?Jae():i}function Bae(i){let t=0;for(let n of Object.values(i.providers))for(let s of Object.values(n))t+=s;return t}function CCe(i,t){let n=bKe(t);return i.providers[n]?.[t]??0}function pbn(i){if(!Array.isArray(i.generalBucket)||typeof i.modelBuckets!="object"||i.modelBuckets===null)return null;let t=i,n=Date.now(),s=n-Hae,c=Jae(),u=n;for(let[g,v]of Object.entries(t.modelBuckets)){if(!Array.isArray(v))continue;let w=bKe(g),S=0;for(let D of v)typeof D.tokens!="number"||typeof D.timestamp!="number"||D.timestamp<s||(S+=D.tokens,D.timestamp<u&&(u=D.timestamp));S>0&&(c.providers[w]||(c.providers[w]={}),c.providers[w][g]=S)}c.windowStart=u;let m=Bae(c);return M.info(`[TokenLimitStore] Migrated v2 usage data (${m.toLocaleString()} tokens) to v1 flat format.`),c}function IKe(){let i=gKe.join(dbn.homedir(),".compass");return new yKe(i)}var NX,yKe,vKe=it(()=>{"use strict";NX=Fa(Sy(),1);GX();fs();yKe=class{filePath;queue=Promise.resolve();constructor(t){this.filePath=gKe.join(t,mKe)}async recordUsage(t,n){if(!(!Number.isFinite(n)||n<=0))return this.enqueue(async()=>{let s=await this.load();s=kCe(s);let c=bKe(t);s.providers[c]||(s.providers[c]={}),s.providers[c][t]=(s.providers[c][t]??0)+n,await this.save(s)})}async loadState(){return this.enqueue(async()=>{let t=await this.load();return t=kCe(t),await this.save(t),t})}async getModelUsage(t){return this.enqueue(async()=>{let n=await this.load();return n=kCe(n),CCe(n,t)})}async getGeneralUsage(){return this.enqueue(async()=>{let t=await this.load();return t=kCe(t),Bae(t)})}enqueue(t){let n=this.queue.then(t);return this.queue=n.then(()=>{},()=>{}),n}async load(){try{if(!await NX.default.pathExists(this.filePath))return Jae();let n=await NX.default.readFile(this.filePath,"utf8"),s=JSON.parse(n);if(Array.isArray(s.generalBucket)){let c=pbn(s);if(c)return await this.save(c),c}return typeof s.windowStart=="number"&&typeof s.providers=="object"&&s.providers!==null?{version:1,windowStart:s.windowStart,providers:s.providers}:(M.warn(`[TokenLimitStore] Usage file at ${this.filePath} has unexpected shape \u2014 resetting.`),Jae())}catch(t){return M.warn(`[TokenLimitStore] Failed to read usage file (${String(t)}) \u2014 starting fresh.`),Jae()}}async save(t){try{await NX.default.ensureDir(gKe.dirname(this.filePath));let n=`${this.filePath}.${process.pid}.tmp`;await NX.default.writeFile(n,JSON.stringify(t,null,2),"utf8"),await NX.default.move(n,this.filePath,{overwrite:!0})}catch(n){M.warn(`[TokenLimitStore] Failed to save usage file: ${String(n)}`)}}}});var SBt={};Pp(SBt,{TokenTracker:()=>jae,createTokenTracker:()=>hbn,getTokenTracker:()=>Bm});import fbn from"path";async function Bm(){return Uae||(Uae=new jae,Uae.setLimitStore(IKe()),await Uae.initialize()),Uae}function hbn(){return new jae}var mbn,SCe,jae,Uae,NG=it(()=>{"use strict";AI();ep();yp();dh();fs();vv();Td();GX();vKe();mbn="token-usage.json",SCe={version:"1.0",sessions:[],currentSessionId:null,lastUpdated:""},jae=class{data;currentSession=null;warningThreshold;costWarningThreshold;initialized=!1;dirty=!1;tokenWarningEmitted=!1;costWarningEmitted=!1;constructor(){this.data={...SCe},this.warningThreshold=2e5,this.costWarningThreshold=10}async initialize(){this.initialized||(await this.load(),this.initialized=!0,M.debug("Token tracker initialized"))}startSession(t){let n=t||cl(),s=this.data.sessions.find(c=>c.sessionId===n);return s?(this.currentSession=s,this.data.currentSessionId=n,M.debug(`Resumed existing token tracking session: ${n}`),n):(this.tokenWarningEmitted=!1,this.costWarningEmitted=!1,this.currentSession={sessionId:n,startTime:qn(),calls:[],totals:this.createEmptyTokenUsage(),estimatedCost:this.createEmptyCostEstimate()},this.data.sessions.push(this.currentSession),this.data.currentSessionId=n,this.dirty=!0,M.debug(`Token tracking session started: ${n}`),n)}async recordUsage(t,n,s){this.currentSession||this.startSession();let c=this.calculateCost(n,t),u={id:cl(),timestamp:qn(),model:t,usage:{...n},cost:c,purpose:s};this.currentSession.calls.push(u),this.updateSessionTotals();let m=this.checkWarnings();for(let g of m)M.debug(g.message);this.dirty=!0,await this.save(),M.debug(`Recorded usage: ${n.inputTokens} in, ${n.outputTokens} out, ${c.totalCost.toFixed(4)} USD`)}getCurrentSessionUsage(){return this.currentSession}getSessionMetrics(){if(!this.currentSession||this.currentSession.calls.length===0)return null;let t=this.currentSession.calls,n=t.map(c=>c.usage.inputTokens),s=t.map(c=>c.usage.outputTokens);return{averageInputTokens:this.calculateAverage(n),averageOutputTokens:this.calculateAverage(s),peakInputTokens:Math.max(...n),peakOutputTokens:Math.max(...s),totalCalls:t.length,totalTokens:this.currentSession.totals.totalTokens,totalCost:this.currentSession.estimatedCost.totalCost}}getAllTimeStats(){let t=this.data.sessions.flatMap(m=>m.calls);if(t.length===0)return{averageInputTokens:0,averageOutputTokens:0,peakInputTokens:0,peakOutputTokens:0,totalCalls:0,totalTokens:0,totalCost:0};let n=t.map(m=>m.usage.inputTokens),s=t.map(m=>m.usage.outputTokens),c=this.data.sessions.reduce((m,g)=>m+g.totals.totalTokens,0),u=this.data.sessions.reduce((m,g)=>m+g.estimatedCost.totalCost,0);return{averageInputTokens:this.calculateAverage(n),averageOutputTokens:this.calculateAverage(s),peakInputTokens:Math.max(...n),peakOutputTokens:Math.max(...s),totalCalls:t.length,totalTokens:c,totalCost:u}}getStatsByPeriod(t,n=new Date){let s=t.getTime(),c=n.getTime(),u=this.data.sessions.flatMap(S=>S.calls.filter(D=>{let F=new Date(D.timestamp).getTime();return F>=s&&F<=c}));if(u.length===0)return{averageInputTokens:0,averageOutputTokens:0,peakInputTokens:0,peakOutputTokens:0,totalCalls:0,totalTokens:0,totalCost:0};let m=u.map(S=>S.usage.inputTokens),g=u.map(S=>S.usage.outputTokens),v=u.reduce((S,D)=>S+D.usage.totalTokens,0),w=u.reduce((S,D)=>S+D.cost.totalCost,0);return{averageInputTokens:this.calculateAverage(m),averageOutputTokens:this.calculateAverage(g),peakInputTokens:Math.max(...m),peakOutputTokens:Math.max(...g),totalCalls:u.length,totalTokens:v,totalCost:w}}getStatsByModel(){let t=new Map;for(let s of this.data.sessions)for(let c of s.calls){let u=t.get(c.model)||[];u.push(c),t.set(c.model,u)}let n=new Map;for(let[s,c]of t){if(c.length===0)continue;let u=c.map(w=>w.usage.inputTokens),m=c.map(w=>w.usage.outputTokens),g=c.reduce((w,S)=>w+S.usage.totalTokens,0),v=c.reduce((w,S)=>w+S.cost.totalCost,0);n.set(s,{averageInputTokens:this.calculateAverage(u),averageOutputTokens:this.calculateAverage(m),peakInputTokens:Math.max(...u),peakOutputTokens:Math.max(...m),totalCalls:c.length,totalTokens:g,totalCost:v})}return n}async endSession(){this.currentSession&&(this.currentSession.endTime=qn(),this.dirty=!0,await this.save(),M.debug(`Token tracking session ended: ${this.currentSession.sessionId}`),this.currentSession=null,this.data.currentSessionId=null)}async exportUsage(){return{...this.data,lastUpdated:qn()}}getSessionById(t){return this.data.sessions.find(n=>n.sessionId===t)||null}getSessions(t,n){let s=[...this.data.sessions];if(t){let c=t.getTime();s=s.filter(u=>new Date(u.startTime).getTime()>=c)}if(n){let c=n.getTime();s=s.filter(u=>new Date(u.startTime).getTime()<=c)}return s}setWarningThreshold(t){this.warningThreshold=t,this.tokenWarningEmitted=!1,M.debug(`Token warning threshold set to ${t}`)}getWarningThreshold(){return this.warningThreshold}setCostWarningThreshold(t){this.costWarningThreshold=t,this.costWarningEmitted=!1,M.debug(`Cost warning threshold set to $${t}`)}getCostWarningThreshold(){return this.costWarningThreshold}checkWarnings(){let t=[];if(!this.currentSession)return t;let n=this.currentSession.totals.totalTokens,s=this.currentSession.estimatedCost.totalCost;return n>=this.warningThreshold&&!this.tokenWarningEmitted?(this.tokenWarningEmitted=!0,t.push({type:"exceeded_threshold",message:`Token usage (${n.toLocaleString()}) has exceeded the warning threshold (${this.warningThreshold.toLocaleString()})`,currentValue:n,threshold:this.warningThreshold,severity:"warning"})):n>=this.warningThreshold*.8&&!this.tokenWarningEmitted&&t.push({type:"approaching_limit",message:`Token usage (${n.toLocaleString()}) is approaching the warning threshold (${this.warningThreshold.toLocaleString()})`,currentValue:n,threshold:this.warningThreshold,severity:"info"}),s>=this.costWarningThreshold&&!this.costWarningEmitted?(this.costWarningEmitted=!0,t.push({type:"high_cost",message:`Session cost ($${s.toFixed(2)}) has exceeded the warning threshold ($${this.costWarningThreshold.toFixed(2)})`,currentValue:s,threshold:this.costWarningThreshold,severity:"warning"})):s>=this.costWarningThreshold*.8&&!this.costWarningEmitted&&t.push({type:"high_cost",message:`Session cost ($${s.toFixed(2)}) is approaching the warning threshold ($${this.costWarningThreshold.toFixed(2)})`,currentValue:s,threshold:this.costWarningThreshold,severity:"info"}),t}_limitStore=null;setLimitStore(t){this._limitStore=t}getLimitStore(){if(!this._limitStore)throw new Error("[TokenTracker] TokenLimitStore not set \u2014 call setLimitStore() first.");return this._limitStore}resolveLimit(t,n,s){let c=ACe(n,s),u=c.perModelLimits[t]??c.defaultPerModelLimit;return{generalLimit:c.generalLimit,modelLimit:u}}async checkLimit(t,n,s){let u=await this.getLimitStore().loadState(),{generalLimit:m,modelLimit:g}=this.resolveLimit(t,n,s),v=Bae(u),w=CCe(u,t),S=Math.max(0,m-v),D=Math.max(0,g-w);return w>=g?{allowed:!1,generalRemaining:S,modelRemaining:0,reason:`Token limit exceeded for model "${t}". Used ${w.toLocaleString()} / ${g.toLocaleString()} tokens in the last ${wCe}h.`}:v>=m?{allowed:!1,generalRemaining:0,modelRemaining:D,reason:`Aggregate token limit exceeded. Used ${v.toLocaleString()} / ${m.toLocaleString()} tokens in the last ${wCe}h.`}:{allowed:!0,generalRemaining:S,modelRemaining:D}}async recordLimitUsage(t,n){try{await this.getLimitStore().recordUsage(t,n)}catch(s){M.warn(`[TokenTracker] Failed to record limit usage for ${t}: ${String(s)}`)}}async getUsageForModel(t){return this.getLimitStore().getModelUsage(t)}async getRemainingTokens(t,n,s){let{modelLimit:c}=this.resolveLimit(t,n,s),u=await this.getUsageForModel(t);return Math.max(0,c-u)}async clearAllData(){this.data={...SCe},this.currentSession=null,this.dirty=!0,await this.save(),M.info("All token usage data cleared")}async clearOldData(t){let n=new Date;n.setDate(n.getDate()-t);let s=n.getTime(),c=this.data.sessions.length;this.data.sessions=this.data.sessions.filter(m=>new Date(m.startTime).getTime()>=s);let u=c-this.data.sessions.length;return u>0&&(this.dirty=!0,await this.save(),M.info(`Cleared ${u} sessions older than ${t} days`)),u}calculateCost(t,n){let s=df(n);if(!s)return M.debug(`Unknown model for cost calculation: ${n}`),this.createEmptyCostEstimate();let c=t.inputTokens/1e6*s.pricing.inputPricePerMillion,u=t.outputTokens/1e6*s.pricing.outputPricePerMillion;return{inputCost:c,outputCost:u,totalCost:c+u,currency:"USD"}}updateSessionTotals(){if(!this.currentSession)return;let t=this.createEmptyTokenUsage(),n=this.createEmptyCostEstimate();for(let s of this.currentSession.calls)t.inputTokens+=s.usage.inputTokens,t.outputTokens+=s.usage.outputTokens,t.totalTokens+=s.usage.totalTokens,s.usage.cacheCreationInputTokens&&(t.cacheCreationInputTokens=(t.cacheCreationInputTokens||0)+s.usage.cacheCreationInputTokens),s.usage.cacheReadInputTokens&&(t.cacheReadInputTokens=(t.cacheReadInputTokens||0)+s.usage.cacheReadInputTokens),n.inputCost+=s.cost.inputCost,n.outputCost+=s.cost.outputCost,n.totalCost+=s.cost.totalCost;this.currentSession.totals=t,this.currentSession.estimatedCost=n}calculateAverage(t){if(t.length===0)return 0;let n=t.reduce((s,c)=>s+c,0);return Math.round(n/t.length)}createEmptyTokenUsage(){return{inputTokens:0,outputTokens:0,totalTokens:0}}createEmptyCostEstimate(){return{inputCost:0,outputCost:0,totalCost:0,currency:"USD"}}getFilePath(){return fbn.join(Eo(),mbn)}async load(){try{await _c(Eo());let t=this.getFilePath(),n=await gp(t);n&&(this.data={...SCe,...n},n.currentSessionId&&(this.currentSession=n.sessions.find(s=>s.sessionId===n.currentSessionId)||null),M.debug(`Loaded token usage data: ${this.data.sessions.length} sessions`))}catch(t){M.debug("Failed to load token usage data, starting fresh",t),this.data={...SCe}}}async save(){if(this.dirty)try{await _c(Eo());let t=this.getFilePath();this.data.lastUpdated=qn(),await Fg(t,this.data),this.dirty=!1,M.debug("Token usage data saved")}catch(t){M.error("Failed to save token usage data",t)}}async forceSave(){this.dirty=!0,await this.save()}},Uae=null});function Xae(i,t){let n=_Ke[t];if(!n||!n.pattern.test(i))return!1;for(let s of n.exceptions)if(s.test(i))return!1;return!0}function jZ(i,t){return Xae(i,t)?`Model "${i}" is not available on your current plan. Haiku and Ollama models are available. Upgrade for full access: https://app.compassap.ai/`:null}function ECe(i){let t=hk(),n=[];for(let u of t)Xae(u.id,i)||n.push(u);if(n.length===0)return null;let s=n.find(u=>/haiku/i.test(u.id));if(s)return s;let c=n.find(u=>u.provider==="anthropic");return c||n[0]}var zae=it(()=>{"use strict";GX();vv()});import EBt from"path";function RG(i){return TCe?i&&TCe.setProjectRoot(i):TCe=new wKe(i),TCe}var xKe,wKe,TCe,FCe=it(()=>{"use strict";xKe=Fa(Sy(),1);dh();fs();Cie();wKe=class{projectRoot;currentLogFile=null;logFileInitialized=!1;enabled=!0;sessionId=null;currentTraceId=null;traceCounter=0;constructor(t){this.projectRoot=t||process.cwd()}setSessionId(t){this.sessionId=t}getSessionId(){return this.sessionId}generateTraceId(){return this.traceCounter++,`tr_${this.traceCounter.toString().padStart(4,"0")}`}getCurrentTraceId(){return this.currentTraceId}setProjectRoot(t){this.projectRoot=t,this.currentLogFile=null,this.logFileInitialized=!1}setEnabled(t){this.enabled=t}getLogFilePath(){return this.currentLogFile}formatDateForFilename(t){let n=String(t.getDate()).padStart(2,"0"),s=String(t.getMonth()+1).padStart(2,"0"),c=String(t.getFullYear()).slice(-2);return`${n}-${s}-${c}`}async ensureLogFile(){if(this.currentLogFile&&this.logFileInitialized)return this.currentLogFile;let t=EBt.join(this.projectRoot,".compass",".logs");try{await xKe.default.ensureDir(t)}catch(s){return M.debug("Failed to create .logs directory",s),this.enabled=!1,""}await HV(t);let n=this.formatDateForFilename(new Date);return this.currentLogFile=EBt.join(t,`llm-${n}.jsonl`),this.logFileInitialized=!0,this.currentLogFile}async writeEntry(t){if(this.enabled)try{let n=await this.ensureLogFile();if(!n)return;let s=JSON.stringify(t)+`
|
|
160
|
+
`);this.baseURL=u.baseURL,this.timeout=u.timeout??uKe.DEFAULT_TIMEOUT,this.logger=u.logger??console;let m="warn";this.logLevel=m,this.logLevel=Iqe(u.logLevel,"ClientOptions.logLevel",this)??Iqe(Lae("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??m,this.fetchOptions=u.fetchOptions,this.maxRetries=u.maxRetries??2,this.fetch=u.fetch??bJt(),co(this,gCe,vJt,"f"),this._options=u,this.apiKey=typeof n=="string"?n:null,this.authToken=s}withOptions(t){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,authToken:this.authToken,...t})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:t,nulls:n}){if(!(t.get("x-api-key")||t.get("authorization"))&&!(this.apiKey&&t.get("x-api-key"))&&!n.has("x-api-key")&&!(this.authToken&&t.get("authorization"))&&!n.has("authorization"))throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(t){return lu([await this.apiKeyAuth(t),await this.bearerAuth(t)])}async apiKeyAuth(t){if(this.apiKey!=null)return lu([{"X-Api-Key":this.apiKey}])}async bearerAuth(t){if(this.authToken!=null)return lu([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(t){return Object.entries(t).filter(([n,s])=>typeof s<"u").map(([n,s])=>{if(typeof s=="string"||typeof s=="number"||typeof s=="boolean")return`${encodeURIComponent(n)}=${encodeURIComponent(s)}`;if(s===null)return`${encodeURIComponent(n)}=`;throw new wc(`Cannot stringify type ${typeof s}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${OZ}`}defaultIdempotencyKey(){return`stainless-node-retry-${dqe()}`}makeStatusError(t,n,s,c){return xI.generate(t,n,s,c)}buildURL(t,n,s){let c=!oi(this,lKe,"m",nBt).call(this)&&s||this.baseURL,u=cJt(t)?new URL(t):new URL(c+(c.endsWith("/")&&t.startsWith("/")?t.slice(1):t)),m=this.defaultQuery();return lJt(m)||(n={...m,...n}),typeof n=="object"&&n&&!Array.isArray(n)&&(u.search=this.stringifyQuery(n)),u.toString()}_calculateNonstreamingTimeout(t){if(3600*t/128e3>600)throw new wc("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600*1e3}async prepareOptions(t){}async prepareRequest(t,{url:n,options:s}){}get(t,n){return this.methodRequest("get",t,n)}post(t,n){return this.methodRequest("post",t,n)}patch(t,n){return this.methodRequest("patch",t,n)}put(t,n){return this.methodRequest("put",t,n)}delete(t,n){return this.methodRequest("delete",t,n)}methodRequest(t,n,s){return this.request(Promise.resolve(s).then(c=>({method:t,path:n,...c})))}request(t,n=null){return new u8(this,this.makeRequest(t,n,void 0))}async makeRequest(t,n,s){let c=await t,u=c.maxRetries??this.maxRetries;n==null&&(n=u),await this.prepareOptions(c);let{req:m,url:g,timeout:v}=await this.buildRequest(c,{retryCount:u-n});await this.prepareRequest(m,{url:g,options:c});let w="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),S=s===void 0?"":`, retryOf: ${s}`,D=Date.now();if(wI(this).debug(`[${w}] sending request`,hP({retryOfRequestLogID:s,method:c.method,url:g,options:c,headers:m.headers})),c.signal?.aborted)throw new Iv;let F=new AbortController,G=await this.fetchWithTimeout(g,m,v,F).catch(gae),V=Date.now();if(G instanceof globalThis.Error){let ce=`retrying, ${n} attempts remaining`;if(c.signal?.aborted)throw new Iv;let we=fP(G)||/timed? ?out/i.test(String(G)+("cause"in G?String(G.cause):""));if(n)return wI(this).info(`[${w}] connection ${we?"timed out":"failed"} - ${ce}`),wI(this).debug(`[${w}] connection ${we?"timed out":"failed"} (${ce})`,hP({retryOfRequestLogID:s,url:g,durationMs:V-D,message:G.message})),this.retryRequest(c,n,s??w);throw wI(this).info(`[${w}] connection ${we?"timed out":"failed"} - error; no more retries left`),wI(this).debug(`[${w}] connection ${we?"timed out":"failed"} (error; no more retries left)`,hP({retryOfRequestLogID:s,url:g,durationMs:V-D,message:G.message})),we?new oX:new MZ({cause:G})}let H=[...G.headers.entries()].filter(([ce])=>ce==="request-id").map(([ce,we])=>", "+ce+": "+JSON.stringify(we)).join(""),K=`[${w}${S}${H}] ${m.method} ${g} ${G.ok?"succeeded":"failed"} with status ${G.status} in ${V-D}ms`;if(!G.ok){let ce=await this.shouldRetry(G);if(n&&ce){let wt=`retrying, ${n} attempts remaining`;return await IJt(G.body),wI(this).info(`${K} - ${wt}`),wI(this).debug(`[${w}] response error (${wt})`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,durationMs:V-D})),this.retryRequest(c,n,s??w,G.headers)}let we=ce?"error; no more retries left":"error; not retryable";wI(this).info(`${K} - ${we}`);let je=await G.text().catch(wt=>gae(wt).message),et=Yke(je),xt=et?void 0:je;throw wI(this).debug(`[${w}] response error (${we})`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,message:xt,durationMs:Date.now()-D})),this.makeStatusError(G.status,et,xt,G.headers)}return wI(this).info(K),wI(this).debug(`[${w}] response start`,hP({retryOfRequestLogID:s,url:G.url,status:G.status,headers:G.headers,durationMs:V-D})),{response:G,options:c,controller:F,requestLogID:w,retryOfRequestLogID:s,startTime:D}}getAPIList(t,n,s){return this.requestAPIList(n,s&&"then"in s?s.then(c=>({method:"get",path:t,...c})):{method:"get",path:t,...s})}requestAPIList(t,n){let s=this.makeRequest(n,null,void 0);return new wae(this,s,t)}async fetchWithTimeout(t,n,s,c){let{signal:u,method:m,...g}=n||{},v=this._makeAbort(c);u&&u.addEventListener("abort",v,{once:!0});let w=setTimeout(v,s),S=globalThis.ReadableStream&&g.body instanceof globalThis.ReadableStream||typeof g.body=="object"&&g.body!==null&&Symbol.asyncIterator in g.body,D={signal:c.signal,...S?{duplex:"half"}:{},method:"GET",...g};m&&(D.method=m.toUpperCase());try{return await this.fetch.call(void 0,t,D)}finally{clearTimeout(w)}}async shouldRetry(t){let n=t.headers.get("x-should-retry");return n==="true"?!0:n==="false"?!1:t.status===408||t.status===409||t.status===429||t.status>=500}async retryRequest(t,n,s,c){let u,m=c?.get("retry-after-ms");if(m){let v=parseFloat(m);Number.isNaN(v)||(u=v)}let g=c?.get("retry-after");if(g&&!u){let v=parseFloat(g);Number.isNaN(v)?u=Date.parse(g)-Date.now():u=v*1e3}if(!(u&&0<=u&&u<60*1e3)){let v=t.maxRetries??this.maxRetries;u=this.calculateDefaultRetryTimeoutMillis(n,v)}return await pJt(u),this.makeRequest(t,n-1,s)}calculateDefaultRetryTimeoutMillis(t,n){let u=n-t,m=Math.min(.5*Math.pow(2,u),8),g=1-Math.random()*.25;return m*g*1e3}calculateNonstreamingTimeout(t,n){if(36e5*t/128e3>6e5||n!=null&&t>n)throw new wc("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 6e5}async buildRequest(t,{retryCount:n=0}={}){let s={...t},{method:c,path:u,query:m,defaultBaseURL:g}=s,v=this.buildURL(u,m,g);"timeout"in s&&dJt("timeout",s.timeout),s.timeout=s.timeout??this.timeout;let{bodyHeaders:w,body:S}=this.buildBody({options:s}),D=await this.buildHeaders({options:t,method:c,bodyHeaders:w,retryCount:n});return{req:{method:c,headers:D,...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&S instanceof globalThis.ReadableStream&&{duplex:"half"},...S&&{body:S},...this.fetchOptions??{},...s.fetchOptions??{}},url:v,timeout:s.timeout}}async buildHeaders({options:t,method:n,bodyHeaders:s,retryCount:c}){let u={};this.idempotencyHeader&&n!=="get"&&(t.idempotencyKey||(t.idempotencyKey=this.defaultIdempotencyKey()),u[this.idempotencyHeader]=t.idempotencyKey);let m=lu([u,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(c),...t.timeout?{"X-Stainless-Timeout":String(Math.trunc(t.timeout/1e3))}:{},...yJt(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(t),this._options.defaultHeaders,s,t.headers]);return this.validateHeaders(m),m.values}_makeAbort(t){return()=>t.abort()}buildBody({options:{body:t,headers:n}}){if(!t)return{bodyHeaders:void 0,body:void 0};let s=lu([n]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&s.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:Lke(t)}:oi(this,gCe,"f").call(this,{body:t,headers:s})}};uKe=Ng,gCe=new WeakMap,lKe=new WeakSet,nBt=function(){return this.baseURL!=="https://api.anthropic.com"};Ng.Anthropic=uKe;Ng.HUMAN_PROMPT=iBt;Ng.AI_PROMPT=sBt;Ng.DEFAULT_TIMEOUT=6e5;Ng.AnthropicError=wc;Ng.APIError=xI;Ng.APIConnectionError=MZ;Ng.APIConnectionTimeoutError=oX;Ng.APIUserAbortError=Iv;Ng.NotFoundError=dX;Ng.ConflictError=pX;Ng.RateLimitError=mX;Ng.BadRequestError=cX;Ng.AuthenticationError=lX;Ng.InternalServerError=hX;Ng.PermissionDeniedError=uX;Ng.UnprocessableEntityError=fX;Ng.toFile=Qke;mk=class extends Ng{constructor(){super(...arguments),this.completions=new _8(this),this.messages=new BZ(this),this.models=new y8(this),this.beta=new RT(this)}};mk.Completions=_8;mk.Messages=BZ;mk.Models=y8;mk.Beta=RT});var aBt=it(()=>{dKe();Tqe();jke();dKe();GG();lk()});var bCe={};Pp(bCe,{CLAUDE_MODELS:()=>k1,MODEL_ALIASES:()=>UZ,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>oBt,calculateModelCost:()=>hBt,compareModels:()=>_Bt,getAvailableAliases:()=>dBt,getAvailableModelIds:()=>uBt,getAvailableModels:()=>hk,getCheapestModel:()=>yBt,getDefaultModel:()=>fBt,getDefaultModelId:()=>mBt,getModelConfig:()=>df,getModelDescription:()=>yCe,getModelTier:()=>IBt,getModelsByCapability:()=>gBt,getMostCapableModel:()=>bBt,hasFullAccess:()=>cBt,isAnthropicModel:()=>lBt,isValidModel:()=>pBt,resolveModelId:()=>_0});function cBt(i){return i==="trial"||i==="active"}function _0(i){let t=i.toLowerCase();if(UZ[t])return UZ[t];for(let n of Object.keys(k1))if(n.toLowerCase()===t)return n;return i}function df(i){let t=_0(i);return k1[t]}function lBt(i){return df(i)?.provider==="anthropic"}function hk(){return Object.values(k1)}function uBt(){return Object.keys(k1)}function dBt(){return Object.keys(UZ)}function pBt(i){return _0(i)in k1}function fBt(){return k1["claude-sonnet-4-5-20250929"]}function mBt(){return"claude-sonnet-4-5-20250929"}function hBt(i,t,n){let s=df(i);if(!s)return null;let c=t/1e6*s.pricing.inputPricePerMillion,u=n/1e6*s.pricing.outputPricePerMillion;return c+u}function _Bt(i,t,n){let s=df(i),c=df(t);if(!s||!c)return 0;switch(n){case"price":return s.pricing.inputPricePerMillion-c.pricing.inputPricePerMillion;case"context":return c.contextWindow-s.contextWindow;case"speed":return c.pricing.inputPricePerMillion-s.pricing.inputPricePerMillion;default:return 0}}function gBt(i){return hk().filter(t=>t.capabilities[i])}function yBt(){return hk().reduce((t,n)=>n.pricing.inputPricePerMillion<t.pricing.inputPricePerMillion?n:t)}function bBt(){return k1["claude-opus-4-6"]}function IBt(i){let t=_0(i);if(t.includes("haiku"))return"economy";if(t.includes("sonnet"))return"balanced";if(t.includes("opus"))return"premium"}function yCe(i){let t=_0(i);if(t.includes("opus"))return"Most capable model - best for complex reasoning, analysis, and extended thinking";if(t.includes("sonnet"))return"Balanced performance and cost - ideal for most coding tasks";if(t.includes("haiku"))return"Fastest and most economical - great for quick responses and simple tasks";if(t.includes("glm-4.7"))return"OpenSource"}var oBt,k1,UZ,vv=it(()=>{"use strict";oBt=15e4;k1={"glm-5:cloud":{id:"glm-5:cloud",name:"Z.AI GLM 5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"glm-4.7:cloud":{id:"glm-4.7:cloud",name:"Z.AI GLM 4.7",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"minimax-m2.5:cloud":{id:"minimax-m2.5:cloud",name:"MiniMax M2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"kimi-k2.5:cloud":{id:"kimi-k2.5:cloud",name:"Kimi K2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"gemini-3-pro-preview":{id:"gemini-3-pro-preview",name:"Gemini 3 Pro",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-6":{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",name:"Claude Sonnet 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-opus-4-6":{id:"claude-opus-4-6",name:"Claude Opus 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",name:"Claude Haiku 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:1,outputPricePerMillion:5,cacheWrite5mPricePerMillion:1.25,cacheWrite1hPricePerMillion:2,cacheHitPricePerMillion:.1},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}}},UZ={sonnet:"claude-sonnet-4-6",opus:"claude-opus-4-6","sonnet-4.6":"claude-sonnet-4-6",sonnet46:"claude-sonnet-4-6","sonnet-4.5":"claude-sonnet-4-5-20250929",sonnet45:"claude-sonnet-4-5-20250929","opus-4.6":"claude-opus-4-6",opus46:"claude-opus-4-6","opus-4.5":"claude-opus-4-5-20251101",opus45:"claude-opus-4-5-20251101",haiku:"claude-haiku-4-5-20251001","glm-5":"glm-5:cloud","glm-4.7":"glm-4.7:cloud","minimax-m2.5":"minimax-m2.5:cloud","kimi-k2.5":"kimi-k2.5:cloud","gemini-3-pro":"gemini-3-pro-preview",fast:"claude-haiku-4-5-20251001",quick:"claude-haiku-4-5-20251001",smart:"claude-sonnet-4-5-20250929",balanced:"claude-sonnet-4-5-20250929",powerful:"claude-opus-4-6",best:"claude-opus-4-6",beyond:"glm-5:cloud",robust:"glm-4.7:cloud",deep:"kimi-k2.5:cloud",versatile:"minimax-m2.5:cloud",creative:"gemini-3-pro-preview",s:"claude-sonnet-4-5-20250929",o:"claude-opus-4-6",h:"claude-haiku-4-5-20251001",g:"glm-5:cloud",m:"minimax-m2.5:cloud",k:"kimi-k2.5:cloud",p:"gemini-3-pro-preview"}});function vBt(i,t=0){return(xv[i[t+0]]+xv[i[t+1]]+xv[i[t+2]]+xv[i[t+3]]+"-"+xv[i[t+4]]+xv[i[t+5]]+"-"+xv[i[t+6]]+xv[i[t+7]]+"-"+xv[i[t+8]]+xv[i[t+9]]+"-"+xv[i[t+10]]+xv[i[t+11]]+xv[i[t+12]]+xv[i[t+13]]+xv[i[t+14]]+xv[i[t+15]]).toLowerCase()}var xv,xBt=it(()=>{xv=[];for(let i=0;i<256;++i)xv.push((i+256).toString(16).slice(1))});import{randomFillSync as Kyn}from"node:crypto";function pKe(){return ICe>vCe.length-16&&(Kyn(vCe),ICe=0),vCe.slice(ICe,ICe+=16)}var vCe,ICe,wBt=it(()=>{vCe=new Uint8Array(256),ICe=vCe.length});import{randomUUID as ebn}from"node:crypto";var fKe,ABt=it(()=>{fKe={randomUUID:ebn}});function tbn(i,t,n){i=i||{};let s=i.random??i.rng?.()??pKe();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=s[6]&15|64,s[8]=s[8]&63|128,t){if(n=n||0,n<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let c=0;c<16;++c)t[n+c]=s[c];return t}return vBt(s)}function rbn(i,t,n){return fKe.randomUUID&&!t&&!i?fKe.randomUUID():tbn(i,t,n)}var cl,kBt=it(()=>{ABt();wBt();xBt();cl=rbn});var AI=it(()=>{kBt()});function ACe(i,t){return i!=="active"?CBt[i]:xCe[t??kO]??xCe[kO]}var Hae,wCe,mKe,hKe,nbn,ibn,sbn,abn,obn,cbn,lbn,ubn,xCe,CBt,_Ke,GX=it(()=>{"use strict";kUe();Hae=360*60*1e3,wCe=6,mKe="token-limits-usage.json",hKe=1,nbn={generalLimit:1e6,defaultPerModelLimit:3e5,perModelLimits:{"claude-opus-4-6":3e5,"claude-opus-4-5-20251101":3e5,"claude-sonnet-4-6":3e5,"claude-sonnet-4-5-20250929":3e5,"claude-haiku-4-5-20251001":3e5,"glm-5:cloud":7e5,"glm-4.7:cloud":7e5,"minimax-m2.5:cloud":7e5,"kimi-k2.5:cloud":7e5,"gemini-3-pro-preview":7e5}},ibn={generalLimit:15e4,defaultPerModelLimit:15e4,perModelLimits:{}},sbn={generalLimit:15e4,defaultPerModelLimit:15e4,perModelLimits:{}},abn={generalLimit:1/0,defaultPerModelLimit:8e4,perModelLimits:{"claude-opus-4-6":4e4,"claude-opus-4-5-20251101":4e4,"claude-sonnet-4-6":4e4,"claude-sonnet-4-5-20250929":4e4,"claude-haiku-4-5-20251001":8e4,"glm-5:cloud":8e4,"glm-4.7:cloud":8e4,"minimax-m2.5:cloud":8e4,"kimi-k2.5:cloud":8e4,"gemini-3-pro-preview":8e4}},obn={generalLimit:1/0,defaultPerModelLimit:5e5,perModelLimits:{"claude-opus-4-6":8e4,"claude-opus-4-5-20251101":8e4,"claude-sonnet-4-6":8e4,"claude-sonnet-4-5-20250929":8e4,"claude-haiku-4-5-20251001":2e5,"glm-5:cloud":5e5,"glm-4.7:cloud":5e5,"minimax-m2.5:cloud":5e5,"kimi-k2.5:cloud":5e5,"gemini-3-pro-preview":5e5}},cbn={generalLimit:1/0,defaultPerModelLimit:1e6,perModelLimits:{"claude-opus-4-6":2e5,"claude-opus-4-5-20251101":2e5,"claude-sonnet-4-6":2e5,"claude-sonnet-4-5-20250929":2e5,"claude-haiku-4-5-20251001":1e6,"glm-5:cloud":1e6,"glm-4.7:cloud":1e6,"minimax-m2.5:cloud":1e6,"kimi-k2.5:cloud":1e6,"gemini-3-pro-preview":1e6}},lbn={generalLimit:1/0,defaultPerModelLimit:5e6,perModelLimits:{"claude-opus-4-6":25e5,"claude-opus-4-5-20251101":25e5,"claude-sonnet-4-6":25e5,"claude-sonnet-4-5-20250929":25e5,"claude-haiku-4-5-20251001":5e6,"glm-5:cloud":5e6,"glm-4.7:cloud":5e6,"minimax-m2.5:cloud":5e6,"kimi-k2.5:cloud":5e6,"gemini-3-pro-preview":5e6}},ubn={generalLimit:1/0,defaultPerModelLimit:1/0,perModelLimits:{}},xCe=Object.freeze({BASIC:Object.freeze(abn),PRO:Object.freeze(obn),MAX:Object.freeze(cbn),ENTERPRISE:Object.freeze(lbn),UNLIMITED:Object.freeze(ubn)}),CBt=Object.freeze({trial:Object.freeze(nbn),no_subscription:Object.freeze(ibn),expired:Object.freeze(sbn),active:Object.freeze(xCe[kO])});_Ke=Object.freeze({trial:null,active:null,no_subscription:Object.freeze({pattern:/^claude-/,exceptions:[/haiku/]}),expired:Object.freeze({pattern:/^claude-/,exceptions:[/haiku/]})})});import gKe from"path";import dbn from"os";function Jae(){return{version:hKe,windowStart:Date.now(),providers:{}}}function bKe(i){return i.startsWith("claude-")?"anthropic":"ollama"}function kCe(i){let t=Date.now()-i.windowStart;return t>=Hae||t<0?Jae():i}function Bae(i){let t=0;for(let n of Object.values(i.providers))for(let s of Object.values(n))t+=s;return t}function CCe(i,t){let n=bKe(t);return i.providers[n]?.[t]??0}function pbn(i){if(!Array.isArray(i.generalBucket)||typeof i.modelBuckets!="object"||i.modelBuckets===null)return null;let t=i,n=Date.now(),s=n-Hae,c=Jae(),u=n;for(let[g,v]of Object.entries(t.modelBuckets)){if(!Array.isArray(v))continue;let w=bKe(g),S=0;for(let D of v)typeof D.tokens!="number"||typeof D.timestamp!="number"||D.timestamp<s||(S+=D.tokens,D.timestamp<u&&(u=D.timestamp));S>0&&(c.providers[w]||(c.providers[w]={}),c.providers[w][g]=S)}c.windowStart=u;let m=Bae(c);return M.info(`[TokenLimitStore] Migrated v2 usage data (${m.toLocaleString()} tokens) to v1 flat format.`),c}function IKe(){let i=gKe.join(dbn.homedir(),".compass");return new yKe(i)}var NX,yKe,vKe=it(()=>{"use strict";NX=Fa(Sy(),1);GX();fs();yKe=class{filePath;queue=Promise.resolve();constructor(t){this.filePath=gKe.join(t,mKe)}async recordUsage(t,n){if(!(!Number.isFinite(n)||n<=0))return this.enqueue(async()=>{let s=await this.load();s=kCe(s);let c=bKe(t);s.providers[c]||(s.providers[c]={}),s.providers[c][t]=(s.providers[c][t]??0)+n,await this.save(s)})}async loadState(){return this.enqueue(async()=>{let t=await this.load();return t=kCe(t),await this.save(t),t})}async getModelUsage(t){return this.enqueue(async()=>{let n=await this.load();return n=kCe(n),CCe(n,t)})}async getGeneralUsage(){return this.enqueue(async()=>{let t=await this.load();return t=kCe(t),Bae(t)})}enqueue(t){let n=this.queue.then(t);return this.queue=n.then(()=>{},()=>{}),n}async load(){try{if(!await NX.default.pathExists(this.filePath))return Jae();let n=await NX.default.readFile(this.filePath,"utf8"),s=JSON.parse(n);if(Array.isArray(s.generalBucket)){let c=pbn(s);if(c)return await this.save(c),c}return typeof s.windowStart=="number"&&typeof s.providers=="object"&&s.providers!==null?{version:1,windowStart:s.windowStart,providers:s.providers}:(M.warn(`[TokenLimitStore] Usage file at ${this.filePath} has unexpected shape \u2014 resetting.`),Jae())}catch(t){return M.warn(`[TokenLimitStore] Failed to read usage file (${String(t)}) \u2014 starting fresh.`),Jae()}}async save(t){try{await NX.default.ensureDir(gKe.dirname(this.filePath));let n=`${this.filePath}.${process.pid}.tmp`;await NX.default.writeFile(n,JSON.stringify(t,null,2),"utf8"),await NX.default.move(n,this.filePath,{overwrite:!0})}catch(n){M.warn(`[TokenLimitStore] Failed to save usage file: ${String(n)}`)}}}});var SBt={};Pp(SBt,{TokenTracker:()=>jae,createTokenTracker:()=>hbn,getTokenTracker:()=>Bm});import fbn from"path";async function Bm(){return Uae||(Uae=new jae,Uae.setLimitStore(IKe()),await Uae.initialize()),Uae}function hbn(){return new jae}var mbn,SCe,jae,Uae,NG=it(()=>{"use strict";AI();ep();yp();dh();fs();vv();Td();GX();vKe();mbn="token-usage.json",SCe={version:"1.0",sessions:[],currentSessionId:null,lastUpdated:""},jae=class{data;currentSession=null;warningThreshold;costWarningThreshold;initialized=!1;dirty=!1;tokenWarningEmitted=!1;costWarningEmitted=!1;constructor(){this.data={...SCe},this.warningThreshold=2e5,this.costWarningThreshold=10}async initialize(){this.initialized||(await this.load(),this.initialized=!0,M.debug("Token tracker initialized"))}startSession(t){let n=t||cl(),s=this.data.sessions.find(c=>c.sessionId===n);return s?(this.currentSession=s,this.data.currentSessionId=n,M.debug(`Resumed existing token tracking session: ${n}`),n):(this.tokenWarningEmitted=!1,this.costWarningEmitted=!1,this.currentSession={sessionId:n,startTime:qn(),calls:[],totals:this.createEmptyTokenUsage(),estimatedCost:this.createEmptyCostEstimate()},this.data.sessions.push(this.currentSession),this.data.currentSessionId=n,this.dirty=!0,M.debug(`Token tracking session started: ${n}`),n)}async recordUsage(t,n,s){this.currentSession||this.startSession();let c=this.calculateCost(n,t),u={id:cl(),timestamp:qn(),model:t,usage:{...n},cost:c,purpose:s};this.currentSession.calls.push(u),this.updateSessionTotals();let m=this.checkWarnings();for(let g of m)M.debug(g.message);this.dirty=!0,await this.save(),M.debug(`Recorded usage: ${n.inputTokens} in, ${n.outputTokens} out, ${c.totalCost.toFixed(4)} USD`)}getCurrentSessionUsage(){return this.currentSession}getSessionMetrics(){if(!this.currentSession||this.currentSession.calls.length===0)return null;let t=this.currentSession.calls,n=t.map(c=>c.usage.inputTokens),s=t.map(c=>c.usage.outputTokens);return{averageInputTokens:this.calculateAverage(n),averageOutputTokens:this.calculateAverage(s),peakInputTokens:Math.max(...n),peakOutputTokens:Math.max(...s),totalCalls:t.length,totalTokens:this.currentSession.totals.totalTokens,totalCost:this.currentSession.estimatedCost.totalCost}}getAllTimeStats(){let t=this.data.sessions.flatMap(m=>m.calls);if(t.length===0)return{averageInputTokens:0,averageOutputTokens:0,peakInputTokens:0,peakOutputTokens:0,totalCalls:0,totalTokens:0,totalCost:0};let n=t.map(m=>m.usage.inputTokens),s=t.map(m=>m.usage.outputTokens),c=this.data.sessions.reduce((m,g)=>m+g.totals.totalTokens,0),u=this.data.sessions.reduce((m,g)=>m+g.estimatedCost.totalCost,0);return{averageInputTokens:this.calculateAverage(n),averageOutputTokens:this.calculateAverage(s),peakInputTokens:Math.max(...n),peakOutputTokens:Math.max(...s),totalCalls:t.length,totalTokens:c,totalCost:u}}getStatsByPeriod(t,n=new Date){let s=t.getTime(),c=n.getTime(),u=this.data.sessions.flatMap(S=>S.calls.filter(D=>{let F=new Date(D.timestamp).getTime();return F>=s&&F<=c}));if(u.length===0)return{averageInputTokens:0,averageOutputTokens:0,peakInputTokens:0,peakOutputTokens:0,totalCalls:0,totalTokens:0,totalCost:0};let m=u.map(S=>S.usage.inputTokens),g=u.map(S=>S.usage.outputTokens),v=u.reduce((S,D)=>S+D.usage.totalTokens,0),w=u.reduce((S,D)=>S+D.cost.totalCost,0);return{averageInputTokens:this.calculateAverage(m),averageOutputTokens:this.calculateAverage(g),peakInputTokens:Math.max(...m),peakOutputTokens:Math.max(...g),totalCalls:u.length,totalTokens:v,totalCost:w}}getStatsByModel(){let t=new Map;for(let s of this.data.sessions)for(let c of s.calls){let u=t.get(c.model)||[];u.push(c),t.set(c.model,u)}let n=new Map;for(let[s,c]of t){if(c.length===0)continue;let u=c.map(w=>w.usage.inputTokens),m=c.map(w=>w.usage.outputTokens),g=c.reduce((w,S)=>w+S.usage.totalTokens,0),v=c.reduce((w,S)=>w+S.cost.totalCost,0);n.set(s,{averageInputTokens:this.calculateAverage(u),averageOutputTokens:this.calculateAverage(m),peakInputTokens:Math.max(...u),peakOutputTokens:Math.max(...m),totalCalls:c.length,totalTokens:g,totalCost:v})}return n}async endSession(){this.currentSession&&(this.currentSession.endTime=qn(),this.dirty=!0,await this.save(),M.debug(`Token tracking session ended: ${this.currentSession.sessionId}`),this.currentSession=null,this.data.currentSessionId=null)}async exportUsage(){return{...this.data,lastUpdated:qn()}}getSessionById(t){return this.data.sessions.find(n=>n.sessionId===t)||null}getSessions(t,n){let s=[...this.data.sessions];if(t){let c=t.getTime();s=s.filter(u=>new Date(u.startTime).getTime()>=c)}if(n){let c=n.getTime();s=s.filter(u=>new Date(u.startTime).getTime()<=c)}return s}setWarningThreshold(t){this.warningThreshold=t,this.tokenWarningEmitted=!1,M.debug(`Token warning threshold set to ${t}`)}getWarningThreshold(){return this.warningThreshold}setCostWarningThreshold(t){this.costWarningThreshold=t,this.costWarningEmitted=!1,M.debug(`Cost warning threshold set to $${t}`)}getCostWarningThreshold(){return this.costWarningThreshold}checkWarnings(){let t=[];if(!this.currentSession)return t;let n=this.currentSession.totals.totalTokens,s=this.currentSession.estimatedCost.totalCost;return n>=this.warningThreshold&&!this.tokenWarningEmitted?(this.tokenWarningEmitted=!0,t.push({type:"exceeded_threshold",message:`Token usage (${n.toLocaleString()}) has exceeded the warning threshold (${this.warningThreshold.toLocaleString()})`,currentValue:n,threshold:this.warningThreshold,severity:"warning"})):n>=this.warningThreshold*.8&&!this.tokenWarningEmitted&&t.push({type:"approaching_limit",message:`Token usage (${n.toLocaleString()}) is approaching the warning threshold (${this.warningThreshold.toLocaleString()})`,currentValue:n,threshold:this.warningThreshold,severity:"info"}),s>=this.costWarningThreshold&&!this.costWarningEmitted?(this.costWarningEmitted=!0,t.push({type:"high_cost",message:`Session cost ($${s.toFixed(2)}) has exceeded the warning threshold ($${this.costWarningThreshold.toFixed(2)})`,currentValue:s,threshold:this.costWarningThreshold,severity:"warning"})):s>=this.costWarningThreshold*.8&&!this.costWarningEmitted&&t.push({type:"high_cost",message:`Session cost ($${s.toFixed(2)}) is approaching the warning threshold ($${this.costWarningThreshold.toFixed(2)})`,currentValue:s,threshold:this.costWarningThreshold,severity:"info"}),t}_limitStore=null;setLimitStore(t){this._limitStore=t}getLimitStore(){if(!this._limitStore)throw new Error("[TokenTracker] TokenLimitStore not set \u2014 call setLimitStore() first.");return this._limitStore}resolveLimit(t,n,s){let c=ACe(n,s),u=c.perModelLimits[t]??c.defaultPerModelLimit;return{generalLimit:c.generalLimit,modelLimit:u}}async checkLimit(t,n,s){let u=await this.getLimitStore().loadState(),{generalLimit:m,modelLimit:g}=this.resolveLimit(t,n,s),v=Bae(u),w=CCe(u,t),S=Math.max(0,m-v),D=Math.max(0,g-w);return w>=g?{allowed:!1,generalRemaining:S,modelRemaining:0,reason:`Token limit exceeded for model "${t}". Used ${w.toLocaleString()} / ${g.toLocaleString()} tokens in the last ${wCe}h.`}:v>=m?{allowed:!1,generalRemaining:0,modelRemaining:D,reason:`Aggregate token limit exceeded. Used ${v.toLocaleString()} / ${m.toLocaleString()} tokens in the last ${wCe}h.`}:{allowed:!0,generalRemaining:S,modelRemaining:D}}async recordLimitUsage(t,n){try{await this.getLimitStore().recordUsage(t,n)}catch(s){M.warn(`[TokenTracker] Failed to record limit usage for ${t}: ${String(s)}`)}}async getUsageForModel(t){return this.getLimitStore().getModelUsage(t)}async getRemainingTokens(t,n,s){let{modelLimit:c}=this.resolveLimit(t,n,s),u=await this.getUsageForModel(t);return Math.max(0,c-u)}async clearAllData(){this.data={...SCe},this.currentSession=null,this.dirty=!0,await this.save(),M.info("All token usage data cleared")}async clearOldData(t){let n=new Date;n.setDate(n.getDate()-t);let s=n.getTime(),c=this.data.sessions.length;this.data.sessions=this.data.sessions.filter(m=>new Date(m.startTime).getTime()>=s);let u=c-this.data.sessions.length;return u>0&&(this.dirty=!0,await this.save(),M.info(`Cleared ${u} sessions older than ${t} days`)),u}calculateCost(t,n){let s=df(n);if(!s)return M.debug(`Unknown model for cost calculation: ${n}`),this.createEmptyCostEstimate();let c=t.inputTokens/1e6*s.pricing.inputPricePerMillion,u=t.outputTokens/1e6*s.pricing.outputPricePerMillion;return{inputCost:c,outputCost:u,totalCost:c+u,currency:"USD"}}updateSessionTotals(){if(!this.currentSession)return;let t=this.createEmptyTokenUsage(),n=this.createEmptyCostEstimate();for(let s of this.currentSession.calls)t.inputTokens+=s.usage.inputTokens,t.outputTokens+=s.usage.outputTokens,t.totalTokens+=s.usage.totalTokens,s.usage.cacheCreationInputTokens&&(t.cacheCreationInputTokens=(t.cacheCreationInputTokens||0)+s.usage.cacheCreationInputTokens),s.usage.cacheReadInputTokens&&(t.cacheReadInputTokens=(t.cacheReadInputTokens||0)+s.usage.cacheReadInputTokens),n.inputCost+=s.cost.inputCost,n.outputCost+=s.cost.outputCost,n.totalCost+=s.cost.totalCost;this.currentSession.totals=t,this.currentSession.estimatedCost=n}calculateAverage(t){if(t.length===0)return 0;let n=t.reduce((s,c)=>s+c,0);return Math.round(n/t.length)}createEmptyTokenUsage(){return{inputTokens:0,outputTokens:0,totalTokens:0}}createEmptyCostEstimate(){return{inputCost:0,outputCost:0,totalCost:0,currency:"USD"}}getFilePath(){return fbn.join(Eo(),mbn)}async load(){try{await _c(Eo());let t=this.getFilePath(),n=await gp(t);n&&(this.data={...SCe,...n},n.currentSessionId&&(this.currentSession=n.sessions.find(s=>s.sessionId===n.currentSessionId)||null),M.debug(`Loaded token usage data: ${this.data.sessions.length} sessions`))}catch(t){M.debug("Failed to load token usage data, starting fresh",t),this.data={...SCe}}}async save(){if(this.dirty)try{await _c(Eo());let t=this.getFilePath();this.data.lastUpdated=qn(),await Fg(t,this.data),this.dirty=!1,M.debug("Token usage data saved")}catch(t){M.error("Failed to save token usage data",t)}}async forceSave(){this.dirty=!0,await this.save()}},Uae=null});function Xae(i,t){let n=_Ke[t];if(!n||!n.pattern.test(i))return!1;for(let s of n.exceptions)if(s.test(i))return!1;return!0}function jZ(i,t){return Xae(i,t)?`Model "${i}" is not available on your current plan. Haiku and Ollama models are available. Upgrade for full access: https://app.compassap.ai/`:null}function ECe(i){let t=hk(),n=[];for(let u of t)Xae(u.id,i)||n.push(u);if(n.length===0)return null;let s=n.find(u=>/haiku/i.test(u.id));if(s)return s;let c=n.find(u=>u.provider==="anthropic");return c||n[0]}var zae=it(()=>{"use strict";GX();vv()});import EBt from"path";function RG(i){return TCe?i&&TCe.setProjectRoot(i):TCe=new wKe(i),TCe}var xKe,wKe,TCe,FCe=it(()=>{"use strict";xKe=Fa(Sy(),1);dh();fs();Cie();wKe=class{projectRoot;currentLogFile=null;logFileInitialized=!1;enabled=!0;sessionId=null;currentTraceId=null;traceCounter=0;constructor(t){this.projectRoot=t||process.cwd()}setSessionId(t){this.sessionId=t}getSessionId(){return this.sessionId}generateTraceId(){return this.traceCounter++,`tr_${this.traceCounter.toString().padStart(4,"0")}`}getCurrentTraceId(){return this.currentTraceId}setProjectRoot(t){this.projectRoot=t,this.currentLogFile=null,this.logFileInitialized=!1}setEnabled(t){this.enabled=t}getLogFilePath(){return this.currentLogFile}formatDateForFilename(t){let n=String(t.getDate()).padStart(2,"0"),s=String(t.getMonth()+1).padStart(2,"0"),c=String(t.getFullYear()).slice(-2);return`${n}-${s}-${c}`}async ensureLogFile(){if(this.currentLogFile&&this.logFileInitialized)return this.currentLogFile;let t=EBt.join(this.projectRoot,".compass",".logs");try{await xKe.default.ensureDir(t)}catch(s){return M.debug("Failed to create .logs directory",s),this.enabled=!1,""}await HV(t);let n=this.formatDateForFilename(new Date);return this.currentLogFile=EBt.join(t,`llm-${n}.jsonl`),this.logFileInitialized=!0,this.currentLogFile}async writeEntry(t){if(this.enabled)try{let n=await this.ensureLogFile();if(!n)return;let s=JSON.stringify(t)+`
|
|
161
161
|
`;await xKe.default.appendFile(n,s)}catch(n){M.debug("Failed to write audit log entry",n)}}async logSessionStart(t,n){this.sessionId=t,this.traceCounter=0}async logSessionEnd(t){await this.writeEntry({ts:qn(),type:"session_end",session_id:this.sessionId||t,description:"CLI session ended"})}async logUserInput(t,n=!1){}async logSystemPrompt(t){}async logLLMRequest(t,n){this.currentTraceId=this.generateTraceId(),await this.writeEntry({ts:qn(),type:"llm_request",session_id:this.sessionId||void 0,trace_id:this.currentTraceId,description:"LLM API request sent",data:{model:n.model,messageCount:t.length,messages:t,options:{system:n.system,maxTokens:n.maxTokens,temperature:n.temperature,toolCount:n.tools?.length||0},approximateInputTokens:this.estimateTokenCount(JSON.stringify(t)+(n.system||""))}})}async logLLMStreamStart(t){await this.writeEntry({ts:qn(),type:"llm_stream_start",session_id:this.sessionId||void 0,trace_id:this.currentTraceId||void 0,description:"LLM streaming response started",data:{model:t}})}async logLLMStreamChunk(t){t.length>0&&await this.writeEntry({ts:qn(),type:"llm_stream_chunk",session_id:this.sessionId||void 0,trace_id:this.currentTraceId||void 0,description:"LLM streaming chunk received",data:{chunk:t,length:t.length}})}async logLLMResponse(t,n,s,c){await this.writeEntry({ts:qn(),type:"llm_response",session_id:this.sessionId||void 0,trace_id:this.currentTraceId||void 0,description:"LLM response completed",data:{model:c,content:t,contentLength:t.length,usage:n,cost:s}})}async logLLMCall(t,n,s,c,u,m){this.currentTraceId=this.generateTraceId(),await this.writeEntry({ts:qn(),type:"llm_call",session_id:this.sessionId||void 0,trace_id:this.currentTraceId,description:"Complete LLM call",data:{model:m.model,systemPrompt:t||null,messages:n,response:s,usage:c,cost:u,options:{maxTokens:m.maxTokens,temperature:m.temperature,toolCount:m.tools?.length||0}}})}async logAgenticLoop(t){this.currentTraceId=this.generateTraceId(),await this.writeEntry({ts:qn(),type:"agentic_loop",session_id:this.sessionId||void 0,trace_id:this.currentTraceId,description:`Agentic loop completed: ${t.total_iterations} iterations, ${t.total_tool_calls} tool calls`,data:t})}async logError(t,n){await this.writeEntry({ts:qn(),type:"error",session_id:this.sessionId||void 0,trace_id:this.currentTraceId||void 0,description:"Error occurred during LLM interaction",data:{error:t,details:n}})}estimateTokenCount(t){return Math.ceil(t.length/4)}},TCe=null});function Qae(i){let{modelId:t,inputTokens:n,outputTokens:s,cacheWriteTokens:c=0,cacheReadTokens:u=0}=i,m=df(t);if(!m)return M.warn(`Cannot calculate cost: model not found: ${t}`),null;let{pricing:g}=m,v=n/1e6*g.inputPricePerMillion,w=s/1e6*g.outputPricePerMillion,S=g.cacheWrite5mPricePerMillion??g.inputPricePerMillion*_bn,D=c/1e6*S,F=g.cacheHitPricePerMillion??g.inputPricePerMillion*gbn,G=u/1e6*F,V=v+w+D+G;return{inputCost:v,outputCost:w,cacheCreationCost:D,cacheReadCost:G,totalCost:V,currency:"USD",calculatedAt:new Date().toISOString()}}function $ae(){return AKe||(AKe=new kKe),AKe}var _bn,gbn,kKe,AKe,CKe=it(()=>{"use strict";fs();vv();_bn=1.25,gbn=.1;kKe=class{entries=[];sessionStartTime;constructor(){this.sessionStartTime=new Date}recordCost(t,n,s,c,u="conversation",m){let g={amount:t,currency:n,timestamp:new Date,model:s,provider:c,callType:u,inputTokens:m?.inputTokens,outputTokens:m?.outputTokens,cacheCreationTokens:m?.cacheCreationTokens,cacheReadTokens:m?.cacheReadTokens};this.entries.push(g),M.debug("Cost entry recorded",{cost:t,currency:n,model:s,provider:c,callType:u,tokenUsage:m})}getSummary(){let t=this.entries.reduce((G,V)=>G+V.amount,0),n=this.entries.length>0?this.entries[0].currency:"USD",s=this.entries.filter(G=>G.callType==="conversation"),c=this.entries.filter(G=>G.callType==="compaction"),u=s.reduce((G,V)=>G+V.amount,0),m=c.reduce((G,V)=>G+V.amount,0),g=this.entries.reduce((G,V)=>G+(V.inputTokens||0),0),v=this.entries.reduce((G,V)=>G+(V.outputTokens||0),0),w=this.entries.reduce((G,V)=>G+(V.cacheCreationTokens||0),0),S=this.entries.reduce((G,V)=>G+(V.cacheReadTokens||0),0),D=s.reduce((G,V)=>G+(V.inputTokens||0),0),F=s.reduce((G,V)=>G+(V.outputTokens||0),0);return{totalCost:t,conversationCost:u,compactionCost:m,currency:n,callCount:this.entries.length,conversationCallCount:s.length,compactionCallCount:c.length,entries:[...this.entries],sessionStartTime:this.sessionStartTime,totalInputTokens:g,totalOutputTokens:v,totalCacheCreationTokens:w,totalCacheReadTokens:S,conversationInputTokens:D,conversationOutputTokens:F}}reset(){this.entries=[],this.sessionStartTime=new Date,M.debug("Cost tracker reset")}getFormattedTotal(){let t=this.getSummary();return`${t.currency==="USD"?"$":""}${t.totalCost.toFixed(4)}`}},AKe=null});function rs(){return SKe||(SKe=new EKe),SKe}var EKe,SKe,Zd=it(()=>{"use strict";EKe=class{handlers=new Map;on(t,n){return this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(n),()=>{this.off(t,n)}}once(t,n){let s=c=>{this.off(t,s),n(c)};return this.on(t,s)}off(t,n){let s=this.handlers.get(t);s&&s.delete(n)}emit(t,n){let s=this.handlers.get(t);if(s)for(let c of s)try{let u=c(n);u instanceof Promise&&u.catch(m=>{console.error(`Async error in event handler for ${String(t)}:`,m)})}catch(u){console.error(`Error in event handler for ${String(t)}:`,u)}}removeAllListeners(t){t?this.handlers.delete(t):this.handlers.clear()}listenerCount(t){return this.handlers.get(t)?.size||0}eventNames(){return Array.from(this.handlers.keys()).filter(t=>this.handlers.get(t).size>0)}hasListeners(t){return this.listenerCount(t)>0}},SKe=null});var FBt=ze(PG=>{"use strict";Object.defineProperty(PG,"__esModule",{value:!0});PG.__setModuleDefault=PG.__createBinding=void 0;PG.__classPrivateFieldSet=ybn;PG.__classPrivateFieldGet=bbn;PG.__exportStar=Ibn;PG.__importStar=vbn;function ybn(i,t,n,s,c){if(s==="m")throw new TypeError("Private method is not writable");if(s==="a"&&!c)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?i!==t||!c:!t.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return s==="a"?c.call(i,n):c?c.value=n:t.set(i,n),n}function bbn(i,t,n,s){if(n==="a"&&!s)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?i!==t||!s:!t.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?s:n==="a"?s.call(i):s?s.value:t.get(i)}var FKe=Object.create?function(i,t,n,s){s===void 0&&(s=n);var c=Object.getOwnPropertyDescriptor(t,n);(!c||("get"in c?!t.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(i,s,c)}:function(i,t,n,s){s===void 0&&(s=n),i[s]=t[n]};PG.__createBinding=FKe;function Ibn(i,t){for(var n in i)n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n)&&FKe(t,i,n)}var TBt=Object.create?function(i,t){Object.defineProperty(i,"default",{enumerable:!0,value:t})}:function(i,t){i.default=t};PG.__setModuleDefault=TBt;var TKe=function(i){return TKe=Object.getOwnPropertyNames||function(t){var n=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(n[n.length]=s);return n},TKe(i)};function vbn(i){if(i&&i.__esModule)return i;var t={};if(i!=null)for(var n=TKe(i),s=0;s<n.length;s++)n[s]!=="default"&&FKe(t,i,n[s]);return TBt(t,i),t}});var DBt=ze(qae=>{"use strict";Object.defineProperty(qae,"__esModule",{value:!0});qae.castToError=void 0;qae.isAbortError=xbn;function xbn(i){return typeof i=="object"&&i!==null&&("name"in i&&i.name==="AbortError"||"message"in i&&String(i.message).includes("FetchRequestCanceledException"))}var wbn=i=>{if(i instanceof Error)return i;if(typeof i=="object"&&i!==null){try{if(Object.prototype.toString.call(i)==="[object Error]"){let t=new Error(i.message,i.cause?{cause:i.cause}:{});return i.stack&&(t.stack=i.stack),i.cause&&!t.cause&&(t.cause=i.cause),i.name&&(t.name=i.name),t}}catch{}try{return new Error(JSON.stringify(i))}catch{}}return new Error(i)};qae.castToError=wbn});var NKe=ze(fh=>{"use strict";Object.defineProperty(fh,"__esModule",{value:!0});fh.InternalServerError=fh.RateLimitError=fh.UnprocessableEntityError=fh.ConflictError=fh.NotFoundError=fh.PermissionDeniedError=fh.AuthenticationError=fh.BadRequestError=fh.APIConnectionTimeoutError=fh.APIConnectionError=fh.APIUserAbortError=fh.APIError=fh.AnthropicError=void 0;var Abn=DBt(),DCe=class extends Error{};fh.AnthropicError=DCe;var _k=class i extends DCe{constructor(t,n,s,c){super(`${i.makeMessage(t,n,s)}`),this.status=t,this.headers=c,this.requestID=c?.get("request-id"),this.error=n}static makeMessage(t,n,s){let c=n?.message?typeof n.message=="string"?n.message:JSON.stringify(n.message):n?JSON.stringify(n):s;return t&&c?`${t} ${c}`:t?`${t} status code (no body)`:c||"(no status code or body)"}static generate(t,n,s,c){if(!t||!c)return new Kae({message:s,cause:(0,Abn.castToError)(n)});let u=n;return t===400?new GCe(t,u,s,c):t===401?new NCe(t,u,s,c):t===403?new RCe(t,u,s,c):t===404?new PCe(t,u,s,c):t===409?new WCe(t,u,s,c):t===422?new VCe(t,u,s,c):t===429?new ZCe(t,u,s,c):t>=500?new MCe(t,u,s,c):new i(t,u,s,c)}};fh.APIError=_k;var DKe=class extends _k{constructor({message:t}={}){super(void 0,void 0,t||"Request was aborted.",void 0)}};fh.APIUserAbortError=DKe;var Kae=class extends _k{constructor({message:t,cause:n}){super(void 0,void 0,t||"Connection error.",void 0),n&&(this.cause=n)}};fh.APIConnectionError=Kae;var GKe=class extends Kae{constructor({message:t}={}){super({message:t??"Request timed out."})}};fh.APIConnectionTimeoutError=GKe;var GCe=class extends _k{};fh.BadRequestError=GCe;var NCe=class extends _k{};fh.AuthenticationError=NCe;var RCe=class extends _k{};fh.PermissionDeniedError=RCe;var PCe=class extends _k{};fh.NotFoundError=PCe;var WCe=class extends _k{};fh.ConflictError=WCe;var VCe=class extends _k{};fh.UnprocessableEntityError=VCe;var ZCe=class extends _k{};fh.RateLimitError=ZCe;var MCe=class extends _k{};fh.InternalServerError=MCe});var RKe=ze(rp=>{"use strict";Object.defineProperty(rp,"__esModule",{value:!0});rp.pop=rp.safeJSON=rp.maybeCoerceBoolean=rp.maybeCoerceFloat=rp.maybeCoerceInteger=rp.coerceBoolean=rp.coerceFloat=rp.coerceInteger=rp.validatePositiveInteger=rp.ensurePresent=rp.isReadonlyArray=rp.isArray=rp.isAbsoluteURL=void 0;rp.maybeObj=Ebn;rp.isEmptyObj=Tbn;rp.hasOwn=Fbn;rp.isObj=Dbn;var eoe=NKe(),kbn=/^[a-z][a-z0-9+.-]*:/i,Cbn=i=>kbn.test(i);rp.isAbsoluteURL=Cbn;var Sbn=i=>(rp.isArray=Array.isArray,(0,rp.isArray)(i));rp.isArray=Sbn;rp.isReadonlyArray=rp.isArray;function Ebn(i){return typeof i!="object"?{}:i??{}}function Tbn(i){if(!i)return!0;for(let t in i)return!1;return!0}function Fbn(i,t){return Object.prototype.hasOwnProperty.call(i,t)}function Dbn(i){return i!=null&&typeof i=="object"&&!Array.isArray(i)}var Gbn=i=>{if(i==null)throw new eoe.AnthropicError(`Expected a value to be given but received ${i} instead.`);return i};rp.ensurePresent=Gbn;var Nbn=(i,t)=>{if(typeof t!="number"||!Number.isInteger(t))throw new eoe.AnthropicError(`${i} must be an integer`);if(t<0)throw new eoe.AnthropicError(`${i} must be a positive integer`);return t};rp.validatePositiveInteger=Nbn;var Rbn=i=>{if(typeof i=="number")return Math.round(i);if(typeof i=="string")return parseInt(i,10);throw new eoe.AnthropicError(`Could not coerce ${i} (type: ${typeof i}) into a number`)};rp.coerceInteger=Rbn;var Pbn=i=>{if(typeof i=="number")return i;if(typeof i=="string")return parseFloat(i);throw new eoe.AnthropicError(`Could not coerce ${i} (type: ${typeof i}) into a number`)};rp.coerceFloat=Pbn;var Wbn=i=>typeof i=="boolean"?i:typeof i=="string"?i==="true":!!i;rp.coerceBoolean=Wbn;var Vbn=i=>{if(i!=null)return(0,rp.coerceInteger)(i)};rp.maybeCoerceInteger=Vbn;var Zbn=i=>{if(i!=null)return(0,rp.coerceFloat)(i)};rp.maybeCoerceFloat=Zbn;var Mbn=i=>{if(i!=null)return(0,rp.coerceBoolean)(i)};rp.maybeCoerceBoolean=Mbn;var Obn=i=>{try{return JSON.parse(i)}catch{return}};rp.safeJSON=Obn;var Ybn=(i,t)=>{let n=i[t];return delete i[t],n};rp.pop=Ybn});var RBt=ze(toe=>{"use strict";Object.defineProperty(toe,"__esModule",{value:!0});toe.concatBytes=Lbn;toe.encodeUTF8=Hbn;toe.decodeUTF8=Jbn;function Lbn(i){let t=0;for(let c of i)t+=c.length;let n=new Uint8Array(t),s=0;for(let c of i)n.set(c,s),s+=c.length;return n}var GBt;function Hbn(i){let t;return(GBt??(t=new globalThis.TextEncoder,GBt=t.encode.bind(t)))(i)}var NBt;function Jbn(i){let t;return(NBt??(t=new globalThis.TextDecoder,NBt=t.decode.bind(t)))(i)}});var WBt=ze(RX=>{"use strict";Object.defineProperty(RX,"__esModule",{value:!0});RX.fromBase64=RX.toBase64=void 0;var PBt=NKe(),Bbn=RBt(),Ubn=i=>{if(!i)return"";if(typeof globalThis.Buffer<"u")return globalThis.Buffer.from(i).toString("base64");if(typeof i=="string"&&(i=(0,Bbn.encodeUTF8)(i)),typeof btoa<"u")return btoa(String.fromCharCode.apply(null,i));throw new PBt.AnthropicError("Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined")};RX.toBase64=Ubn;var jbn=i=>{if(typeof globalThis.Buffer<"u"){let t=globalThis.Buffer.from(i,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(typeof atob<"u"){let t=atob(i),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return n}throw new PBt.AnthropicError("Cannot decode base64 string; Expected `Buffer` or `atob` to be defined")};RX.fromBase64=jbn});var VBt=ze(OCe=>{"use strict";Object.defineProperty(OCe,"__esModule",{value:!0});OCe.readEnv=void 0;var Xbn=i=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[i]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(i)?.trim()};OCe.readEnv=Xbn});var OBt=ze(b8=>{"use strict";Object.defineProperty(b8,"__esModule",{value:!0});b8.formatRequestDetails=b8.parseLogLevel=void 0;b8.loggerFor=MBt;var zbn=RKe(),LCe={off:0,error:200,warn:300,info:400,debug:500},Qbn=(i,t,n)=>{if(i){if((0,zbn.hasOwn)(LCe,i))return i;MBt(n).warn(`${t} was set to ${JSON.stringify(i)}, expected one of ${JSON.stringify(Object.keys(LCe))}`)}};b8.parseLogLevel=Qbn;function roe(){}function YCe(i,t,n){return!t||LCe[i]>LCe[n]?roe:t[i].bind(t)}var $bn={error:roe,warn:roe,info:roe,debug:roe},ZBt=new WeakMap;function MBt(i){let t=i.logger,n=i.logLevel??"off";if(!t)return $bn;let s=ZBt.get(t);if(s&&s[0]===n)return s[1];let c={error:YCe("error",t,n),warn:YCe("warn",t,n),info:YCe("info",t,n),debug:YCe("debug",t,n)};return ZBt.set(t,[n,c]),c}var qbn=i=>(i.options&&(i.options={...i.options},delete i.options.headers),i.headers&&(i.headers=Object.fromEntries((i.headers instanceof Headers?[...i.headers]:Object.entries(i.headers)).map(([t,n])=>[t,t.toLowerCase()==="x-api-key"||t.toLowerCase()==="authorization"||t.toLowerCase()==="cookie"||t.toLowerCase()==="set-cookie"?"***":n]))),"retryOfRequestLogID"in i&&(i.retryOfRequestLogID&&(i.retryOf=i.retryOfRequestLogID),delete i.retryOfRequestLogID),i);b8.formatRequestDetails=qbn});var YBt=ze(noe=>{"use strict";Object.defineProperty(noe,"__esModule",{value:!0});noe.uuid4=void 0;var Kbn=function(){let{crypto:i}=globalThis;if(i?.randomUUID)return noe.uuid4=i.randomUUID.bind(i),i.randomUUID();let t=new Uint8Array(1),n=i?()=>i.getRandomValues(t)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,s=>(+s^n()&15>>+s/4).toString(16))};noe.uuid4=Kbn});var LBt=ze(HCe=>{"use strict";Object.defineProperty(HCe,"__esModule",{value:!0});HCe.sleep=void 0;var eIn=i=>new Promise(t=>setTimeout(t,i));HCe.sleep=eIn});var HBt=ze(XZ=>{"use strict";Object.defineProperty(XZ,"__esModule",{value:!0});var PX=FBt();PX.__exportStar(RKe(),XZ);PX.__exportStar(WBt(),XZ);PX.__exportStar(VBt(),XZ);PX.__exportStar(OBt(),XZ);PX.__exportStar(YBt(),XZ);PX.__exportStar(LBt(),XZ)});var JBt=ze(PKe=>{"use strict";Object.defineProperty(PKe,"__esModule",{value:!0});PKe.transformJSONSchema=nIn;var Iw=HBt(),tIn=new Set(["date-time","time","date","duration","email","hostname","uri","ipv4","ipv6","uuid"]);function rIn(i){return JSON.parse(JSON.stringify(i))}function nIn(i){let t=rIn(i);return I8(t)}function I8(i){let t={},n=(0,Iw.pop)(i,"$ref");if(n!==void 0)return t.$ref=n,t;let s=(0,Iw.pop)(i,"$defs");if(s!==void 0){let S={};t.$defs=S;for(let[D,F]of Object.entries(s))S[D]=I8(F)}let c=(0,Iw.pop)(i,"type"),u=(0,Iw.pop)(i,"anyOf"),m=(0,Iw.pop)(i,"oneOf"),g=(0,Iw.pop)(i,"allOf");if(Array.isArray(u))t.anyOf=u.map(S=>I8(S));else if(Array.isArray(m))t.anyOf=m.map(S=>I8(S));else if(Array.isArray(g))t.allOf=g.map(S=>I8(S));else{if(c===void 0)throw new Error("JSON schema must have a type defined if anyOf/oneOf/allOf are not used");t.type=c}let v=(0,Iw.pop)(i,"description");v!==void 0&&(t.description=v);let w=(0,Iw.pop)(i,"title");if(w!==void 0&&(t.title=w),c==="object"){let S=(0,Iw.pop)(i,"properties")||{};t.properties=Object.fromEntries(Object.entries(S).map(([F,G])=>[F,I8(G)])),(0,Iw.pop)(i,"additionalProperties"),t.additionalProperties=!1;let D=(0,Iw.pop)(i,"required");D!==void 0&&(t.required=D)}else if(c==="string"){let S=(0,Iw.pop)(i,"format");S!==void 0&&tIn.has(S)?t.format=S:S!==void 0&&(i.format=S)}else if(c==="array"){let S=(0,Iw.pop)(i,"items");S!==void 0&&(t.items=I8(S));let D=(0,Iw.pop)(i,"minItems");D!==void 0&&(D===0||D===1)?t.minItems=D:D!==void 0&&(i.minItems=D)}if(Object.keys(i).length>0){let S=t.description;t.description=(S?S+`
|
|
162
162
|
|
|
163
163
|
`:"")+"{"+Object.entries(i).map(([D,F])=>`${D}: ${JSON.stringify(F)}`).join(", ")+"}"}return t}});function WKe(i,t=!0){if(i)return t?[{type:"text",text:i,cache_control:{type:"ephemeral"}}]:i}async function bp(){return VKe||(VKe=new ZKe),VKe}var BBt,iIn,ZKe,VKe,vw=it(()=>{"use strict";aBt();Yx();vv();Td();hb();NG();zae();FCe();CKe();fs();Zd();BBt=Fa(JBt(),1);iIn={maxRetries:4,baseDelayMs:1e3,maxDelayMs:16e3,jitterFactor:.1},ZKe=class{clients=new Map;currentModel=KA;eventEmitter;retryConfig;initialized=!1;apiKey=null;providerApiKeys=new Map;constructor(t){this.eventEmitter=rs(),this.retryConfig={...iIn,...t}}getModelProvider(t){let n=_0(t);return df(n)?.provider||"anthropic"}async getApiKeyForProvider(t){if(this.providerApiKeys.has(t))return this.providerApiKeys.get(t);let s=await(await wu()).getProviderApiKey(t);return s&&this.providerApiKeys.set(t,s),s}resolveBaseUrl(t){let n=_0(t),s=df(n);return process.env.COMPASS_ANTHROPIC_BASE_URL||s?.baseUrl||"https://api.anthropic.com"}getClientForModel(t){let n=this.resolveBaseUrl(t),s=this.getModelProvider(t),c=`${n}:${s}`;if(this.clients.has(c))return this.clients.get(c);let u=this.providerApiKeys.get(s)||this.apiKey;if(!u)throw new Error(`API key not available for provider '${s}'. Call initialize() first or configure the API key.`);let m=n.includes("ollama")||s==="ollama",g=new mk({apiKey:u,baseURL:n,defaultHeaders:m?{Authorization:"Bearer "+u}:{}});return this.clients.set(c,g),M.debug(`Created new client for provider '${s}' at base URL: ${n}`),g}async initialize(){if(this.initialized&&this.apiKey)return!0;try{let t=await wu(),n=await t.getApiKey();if(!n)return M.warn("No default API key found. Please configure your Anthropic API key."),!1;this.apiKey=n,this.providerApiKeys.set("anthropic",n);let s=await t.getConfiguredProviders();for(let c of s){let u=await t.getProviderApiKey(c);u&&(this.providerApiKeys.set(c,u),M.debug(`Loaded API key for provider: ${c}`))}return this.getClientForModel(this.currentModel),this.initialized=!0,M.info(`Initialized with API keys for providers: ${Array.from(this.providerApiKeys.keys()).join(", ")}`),!0}catch(t){return M.error("Failed to initialize Anthropic client",t),!1}}isInitialized(){return this.initialized&&this.apiKey!==null}getCurrentModel(){let t=df(this.currentModel);return t||(M.warn(`Current model ${this.currentModel} not found, falling back to default`),k1[KA])}getCurrentModelId(){return this.currentModel}setModel(t){let n=_0(t),s=df(n);if(!s)return M.warn(`Unknown model: ${t}`),!1;let c=this.currentModel,u=this.getModelProvider(c),m=s.provider||"anthropic";if(this.currentModel=s.id,c!==this.currentModel){if(this.apiKey||this.providerApiKeys.has(m))try{this.getClientForModel(this.currentModel)}catch(g){return M.warn(`Failed to create client for new model (provider: ${m}). API key may not be configured.`,g),this.currentModel=c,!1}this.eventEmitter.emit("model-switched",{model:s}),u!==m?M.info(`Switched from ${u}/${c} to ${m}/${s.name} (${s.id})`):M.info(`Switched model from ${c} to ${s.name} (${s.id})`)}return!0}async setModelAsync(t){let n=_0(t),s=df(n);if(!s)return M.warn(`Unknown model: ${t}`),!1;let c=s.provider||"anthropic";return!this.providerApiKeys.has(c)&&!await this.getApiKeyForProvider(c)?(M.warn(`No API key configured for provider '${c}'. Cannot switch to model ${t}.`),!1):this.setModel(t)}async*streamMessage(t,n={}){if(!this.apiKey){yield{type:"error",error:"Client not initialized. Call initialize() first."};return}let s=sm(),c=s.isSuperUser(),u=n.model?df(_0(n.model))||this.getCurrentModel():this.getCurrentModel();if(!c){let je=s.getPlanStatus(),et=jZ(u.id,je);if(et){let xt=ECe(je);if(xt)M.warn(`Model "${u.id}" unavailable on current plan \u2014 falling back to "${xt.id}"`),u=xt;else{yield{type:"error",error:et};return}}try{let xt=await Bm(),Nt=s.getPlanType(),wt=await xt.checkLimit(u.id,je,Nt);if(!wt.allowed){yield{type:"error",error:`${wt.reason}
|
|
@@ -3730,7 +3730,7 @@ GFS4: `),console.error(i)});Wg[Ev]||(Gor=global[Ev]||[],Ror(Wg,Gor),Wg.close=(fu
|
|
|
3730
3730
|
Try running with %s or get access `,Y.cyan("sudo"))+`
|
|
3731
3731
|
to the local update config store via
|
|
3732
3732
|
`+Y.cyan(Bct(" sudo chown -R $USER:$(id -gn $USER) %s ",jz));GY.on("exit",()=>{console.error(UP(n,{textAlignment:"center"}))})}}check(){!this.config||this.config.get("optOut")||this.#i||(this.update=this.config.get("update"),this.update&&(this.update.current=this.#r,this.config.delete("update")),!(Date.now()-this.config.get("lastUpdateCheck")<this.#n)&&$Vn(GY.execPath,[rdr.join(KVn,"check.js"),JSON.stringify(this.#t)],{detached:!0,stdio:"ignore"}).unref())}async fetchInfo(){let{distTag:t}=this.#t,n=await yct(this._packageName,{version:t});return{latest:n,current:this.#r,type:(0,ndr.default)(this.#r,n)??t,name:this._packageName}}notify(t){let n=!this._shouldNotifyInNpmScript&&Xlr;if(!GY.stdout.isTTY||n||!this.update||!(0,idr.default)(this.update.latest,this.update.current))return this;t={isGlobal:cur,...t};let s=t.isGlobal?`npm i -g ${this._packageName}`:`npm i ${this._packageName}`,c="Update available "+Y.dim("{currentVersion}")+Y.reset(" \u2192 ")+Y.green("{latestVersion}")+`
|
|
3733
|
-
Run `+Y.cyan("{updateCommand}")+" to update",u=t.message||c;t.boxenOptions??={padding:1,margin:1,textAlignment:"center",borderColor:"yellow",borderStyle:"round"};let m=UP(Jct(u,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:s}),t.boxenOptions);return t.defer===!1?console.error(m):GY.on("exit",()=>{console.error(m)}),this}}});function Uct(i){let t=new fle(i);return t.check(),t}var adr=it(()=>{sdr()});var Qct={};Pp(Qct,{UpdateService:()=>mle,checkAndNotifyUpdates:()=>oZn,checkUpdateStatus:()=>udr,default:()=>pZn,displayDiscreteUpdateStatus:()=>uZn,getUpdateService:()=>jT,manualUpdateCheck:()=>cZn,performAutoUpdateOnStartup:()=>dZn});import{readFile as tZn}from"fs/promises";import zct from"path";import{fileURLToPath as rZn}from"url";async function jT(i){return Xct||(Xct=await mle.create(i)),Xct}async function oZn(i){let t=await jT(i),n=await t.checkForUpdates();return n.updateAvailable&&t.displayUpdateNotification(n),n}async function cZn(){let i=await jT();M.output(""),M.output(Y.cyan("Checking for updates..."));let t=await i.checkForUpdates(!0);return t.error?M.output(Y.red(`Failed to check for updates: ${t.error}`)):t.updateAvailable?i.displayUpdateNotification(t):(M.output(""),M.output(Y.green(`You are on the latest version (${t.currentVersion})`)),M.output("")),t}function lZn(i){switch(i){case"major":return Y.red("\u25CF");case"minor":return Y.yellow("\u25CF");case"patch":return Y.green("\u25CF");case"prerelease":return Y.magenta("\u25CF");default:return Y.cyan("\u25CF")}}async function udr(i){let t=await jT(i),n=t.getVersionInfo(),s=n.packageName,c=n.currentVersion;M.debug("Update check: querying npm registry",{packageName:s,currentVersion:c});try{let u=await t.checkForUpdates();if(M.debug("Update check: npm registry response",{updateAvailable:u.updateAvailable,latestVersion:u.latestVersion,updateType:u.updateType,error:u.error}),u.error){let m=`npm i -g ${s}`;return{type:"error",message:Y.red("\u2717")+Y.dim(" Update check failed. Manual upgrade: ")+Y.cyan(m),currentVersion:c,packageName:s,manualCommand:m}}if(u.updateAvailable&&u.latestVersion){let m=lZn(u.updateType),g=`npm i -g ${s}@${u.latestVersion}`;return{type:"available",message:m+Y.dim(" Update available: ")+Y.dim(c)+Y.dim(" \u2192 ")+Y.bold(u.latestVersion)+Y.dim(` (${g})`),currentVersion:c,latestVersion:u.latestVersion,packageName:s,manualCommand:g}}return{type:"up-to-date",message:"",currentVersion:c,packageName:s}}catch{let m=`npm i -g ${s}`;return{type:"error",message:Y.red("\u2717")+Y.dim(" Update check failed. Manual upgrade: ")+Y.cyan(m),currentVersion:c,packageName:s,manualCommand:m}}}async function uZn(i){M.debug("Update check: starting discrete update status check");let t=await udr(i);return M.debug("Update check: completed",{type:t.type,currentVersion:t.currentVersion,latestVersion:t.latestVersion,packageName:t.packageName}),t.type==="available"?(M.debug(`Update check: new version available (${t.latestVersion})`),console.log(t.message)):t.type==="error"?(M.debug("Update check: error occurred, showing manual upgrade command"),console.log(t.message)):t.type==="up-to-date"&&M.debug("Update check: already on latest version, no notification shown"),t}async function dZn(i,t=!1){M.debug("Auto-update: starting startup update check",{force:t});let n=await jT(i),s=n.getVersionInfo();try{let c=await n.checkForUpdates(t);if(M.debug("Auto-update: check completed",{updateAvailable:c.updateAvailable,currentVersion:c.currentVersion,latestVersion:c.latestVersion}),!c.updateAvailable||!c.latestVersion)return M.debug("Auto-update: no update available"),{updated:!1};let u=s.currentVersion,m=c.latestVersion,g=await n.detectPackageManager();return M.debug("Auto-update: detected package manager",{packageManager:g}),await n.performUpdate(g)?{updated:!0,fromVersion:u,toVersion:m}:(M.debug("Auto-update: update failed"),{updated:!1,error:"Update failed, continuing with current version"})}catch(c){let u=c instanceof Error?c.message:"Unknown error";return M.debug("Auto-update: error during update",{error:u}),console.log(Y.yellow(`\u26A0 Auto-update check failed: ${u}`)),console.log(Y.dim(` You can manually update with: npm i -g ${s.packageName}`)),console.log(""),{updated:!1,error:u}}}var oDe,odr,cdr,ldr,nZn,iZn,jct,sZn,aZn,mle,Xct,pZn,cDe=it(()=>{"use strict";adr();aDe();Kd();oDe=Fa(mct(),1);U8();ep();yp();fs();odr="@compass-ai/nova",cdr="1.0.
|
|
3733
|
+
Run `+Y.cyan("{updateCommand}")+" to update",u=t.message||c;t.boxenOptions??={padding:1,margin:1,textAlignment:"center",borderColor:"yellow",borderStyle:"round"};let m=UP(Jct(u,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:s}),t.boxenOptions);return t.defer===!1?console.error(m):GY.on("exit",()=>{console.error(m)}),this}}});function Uct(i){let t=new fle(i);return t.check(),t}var adr=it(()=>{sdr()});var Qct={};Pp(Qct,{UpdateService:()=>mle,checkAndNotifyUpdates:()=>oZn,checkUpdateStatus:()=>udr,default:()=>pZn,displayDiscreteUpdateStatus:()=>uZn,getUpdateService:()=>jT,manualUpdateCheck:()=>cZn,performAutoUpdateOnStartup:()=>dZn});import{readFile as tZn}from"fs/promises";import zct from"path";import{fileURLToPath as rZn}from"url";async function jT(i){return Xct||(Xct=await mle.create(i)),Xct}async function oZn(i){let t=await jT(i),n=await t.checkForUpdates();return n.updateAvailable&&t.displayUpdateNotification(n),n}async function cZn(){let i=await jT();M.output(""),M.output(Y.cyan("Checking for updates..."));let t=await i.checkForUpdates(!0);return t.error?M.output(Y.red(`Failed to check for updates: ${t.error}`)):t.updateAvailable?i.displayUpdateNotification(t):(M.output(""),M.output(Y.green(`You are on the latest version (${t.currentVersion})`)),M.output("")),t}function lZn(i){switch(i){case"major":return Y.red("\u25CF");case"minor":return Y.yellow("\u25CF");case"patch":return Y.green("\u25CF");case"prerelease":return Y.magenta("\u25CF");default:return Y.cyan("\u25CF")}}async function udr(i){let t=await jT(i),n=t.getVersionInfo(),s=n.packageName,c=n.currentVersion;M.debug("Update check: querying npm registry",{packageName:s,currentVersion:c});try{let u=await t.checkForUpdates();if(M.debug("Update check: npm registry response",{updateAvailable:u.updateAvailable,latestVersion:u.latestVersion,updateType:u.updateType,error:u.error}),u.error){let m=`npm i -g ${s}`;return{type:"error",message:Y.red("\u2717")+Y.dim(" Update check failed. Manual upgrade: ")+Y.cyan(m),currentVersion:c,packageName:s,manualCommand:m}}if(u.updateAvailable&&u.latestVersion){let m=lZn(u.updateType),g=`npm i -g ${s}@${u.latestVersion}`;return{type:"available",message:m+Y.dim(" Update available: ")+Y.dim(c)+Y.dim(" \u2192 ")+Y.bold(u.latestVersion)+Y.dim(` (${g})`),currentVersion:c,latestVersion:u.latestVersion,packageName:s,manualCommand:g}}return{type:"up-to-date",message:"",currentVersion:c,packageName:s}}catch{let m=`npm i -g ${s}`;return{type:"error",message:Y.red("\u2717")+Y.dim(" Update check failed. Manual upgrade: ")+Y.cyan(m),currentVersion:c,packageName:s,manualCommand:m}}}async function uZn(i){M.debug("Update check: starting discrete update status check");let t=await udr(i);return M.debug("Update check: completed",{type:t.type,currentVersion:t.currentVersion,latestVersion:t.latestVersion,packageName:t.packageName}),t.type==="available"?(M.debug(`Update check: new version available (${t.latestVersion})`),console.log(t.message)):t.type==="error"?(M.debug("Update check: error occurred, showing manual upgrade command"),console.log(t.message)):t.type==="up-to-date"&&M.debug("Update check: already on latest version, no notification shown"),t}async function dZn(i,t=!1){M.debug("Auto-update: starting startup update check",{force:t});let n=await jT(i),s=n.getVersionInfo();try{let c=await n.checkForUpdates(t);if(M.debug("Auto-update: check completed",{updateAvailable:c.updateAvailable,currentVersion:c.currentVersion,latestVersion:c.latestVersion}),!c.updateAvailable||!c.latestVersion)return M.debug("Auto-update: no update available"),{updated:!1};let u=s.currentVersion,m=c.latestVersion,g=await n.detectPackageManager();return M.debug("Auto-update: detected package manager",{packageManager:g}),await n.performUpdate(g)?{updated:!0,fromVersion:u,toVersion:m}:(M.debug("Auto-update: update failed"),{updated:!1,error:"Update failed, continuing with current version"})}catch(c){let u=c instanceof Error?c.message:"Unknown error";return M.debug("Auto-update: error during update",{error:u}),console.log(Y.yellow(`\u26A0 Auto-update check failed: ${u}`)),console.log(Y.dim(` You can manually update with: npm i -g ${s.packageName}`)),console.log(""),{updated:!1,error:u}}}var oDe,odr,cdr,ldr,nZn,iZn,jct,sZn,aZn,mle,Xct,pZn,cDe=it(()=>{"use strict";adr();aDe();Kd();oDe=Fa(mct(),1);U8();ep();yp();fs();odr="@compass-ai/nova",cdr="1.0.73",ldr="1.0.0",nZn=rZn(import.meta.url),iZn=zct.dirname(nZn),jct=zct.resolve(iZn,"../../package.json"),sZn="update-cache.json",aZn={checkOnStartup:!0,checkInterval:4,showNotifications:!0,notificationStyle:"banner",includePrerelease:!1},mle=class i{config;cache;cacheFilePath;packageJson;constructor(t,n){this.config=t,this.packageJson=n,this.cacheFilePath=zct.join(Eo(),sZn),this.cache={history:[],cacheVersion:ldr}}static async create(t){let n={...aZn,...t},s={name:odr,version:cdr};try{if(M.debug("Update service: resolving package.json",{path:jct}),await Ls(jct)){let u=await tZn(jct,"utf-8"),m=JSON.parse(u);s={name:m.name||odr,version:m.version||cdr},M.debug("Update service: loaded package.json",{name:s.name,version:s.version,source:"package.json"})}else M.debug("Update service: package.json not found, using fallback",{name:s.name,version:s.version,source:"fallback"})}catch(u){M.debug("Update service: failed to read package.json, using fallback",{error:u instanceof Error?u.message:"unknown error",name:s.name,version:s.version})}let c=new i(n,s);return await c.loadCache(),c}async loadCache(){try{if(await _c(Eo()),await Ls(this.cacheFilePath)){let t=await gp(this.cacheFilePath);t&&t.cacheVersion===ldr&&(this.cache=t)}}catch(t){M.debug("Failed to load update cache",t)}}async saveCache(){try{await _c(Eo()),await Fg(this.cacheFilePath,this.cache)}catch(t){M.debug("Failed to save update cache",t)}}async checkForUpdates(t=!1){let n={updateAvailable:!1,currentVersion:this.packageJson.version,checkedAt:new Date().toISOString()};try{if(!t&&this.cache.lastCheck)if(this.cache.lastCheck.currentVersion!==this.packageJson.version)M.debug("Cache invalidated - installed version changed",{cachedVersion:this.cache.lastCheck.currentVersion,installedVersion:this.packageJson.version});else{let u=new Date(this.cache.lastCheck.checkedAt).getTime(),m=this.config.checkInterval*60*60*1e3;if(Date.now()-u<m)return M.debug("Skipping update check - within interval"),this.cache.lastCheck}M.debug("Checking for updates...");let c=await Uct({pkg:this.packageJson,updateCheckInterval:0}).fetchInfo();return c&&c.latest&&oDe.default.gt(c.latest,this.packageJson.version)?(n.updateAvailable=!0,n.latestVersion=c.latest,n.updateType=this.mapUpdateType(c.type||"patch"),n.releaseNotesUrl=`https://dev.azure.com/oakpeak-devops/Kore/_git/Kore-CLI?version=GTv${c.latest}`,!this.config.includePrerelease&&oDe.default.prerelease(c.latest)&&(n.updateAvailable=!1,n.latestVersion=void 0,n.updateType=void 0)):c&&c.latest&&oDe.default.lt(c.latest,this.packageJson.version)&&M.debug("Current version is newer than npm registry",{currentVersion:this.packageJson.version,registryVersion:c.latest}),this.cache.lastCheck=n,await this.saveCache(),n}catch(s){return n.error=s instanceof Error?s.message:"Failed to check for updates",M.debug("Update check failed",s),n}}mapUpdateType(t){switch(t){case"major":return"major";case"minor":return"minor";case"patch":return"patch";case"prerelease":return"prerelease";default:return"patch"}}displayUpdateNotification(t){if(!t.updateAvailable||!t.latestVersion||!this.config.showNotifications||this.config.notificationStyle==="silent")return;let n=this.formatNotification(t);console.log(n),this.updateNotificationState(t.latestVersion)}formatNotification(t){let{currentVersion:n,latestVersion:s,updateType:c}=t;switch(this.config.notificationStyle){case"minimal":return this.formatMinimalNotification(n,s,c);case"detailed":return this.formatDetailedNotification(n,s,c,t.releaseNotesUrl);default:return this.formatBannerNotification(n,s,c)}}formatMinimalNotification(t,n,s){let c=this.getUpdateTypeColor(s);return Y.gray(`Update available: ${t} -> `)+c(n)+Y.gray(` (npm i -g ${this.packageJson.name})`)}formatBannerNotification(t,n,s){let c=this.getUpdateTypeColor(s),u=s?` (${s})`:"",m=[`Update available! ${Y.dim(t)} ${Y.reset("\u2192")} ${c(n)}${Y.dim(u)}`,"",`Run ${Y.cyan(`npm i -g ${this.packageJson.name}`)} to update`].join(`
|
|
3734
3734
|
`);return UP(m,{padding:1,margin:1,borderStyle:"round",borderColor:this.getUpdateTypeBorderColor(s),title:"Compass CLI Update",titleAlignment:"center"})}formatDetailedNotification(t,n,s,c){let u=this.getUpdateTypeColor(s),m=s?s.charAt(0).toUpperCase()+s.slice(1):"New",g=["",Y.bold.cyan(` ${m} Update Available!`),"",` ${Y.gray("Current version:")} ${t}`,` ${Y.gray("Latest version:")} ${u(n)}`,""];c&&(g.push(` ${Y.gray("Release notes:")} ${Y.underline.blue(c)}`),g.push("")),g.push(` ${Y.gray("To update, run:")} ${Y.cyan(`npm i -g ${this.packageJson.name}`)}`),g.push("");let v=g.join(`
|
|
3735
3735
|
`);return UP(v,{padding:0,margin:1,borderStyle:"double",borderColor:this.getUpdateTypeBorderColor(s)})}getUpdateTypeColor(t){switch(t){case"major":return Y.red;case"minor":return Y.yellow;case"patch":return Y.green;case"prerelease":return Y.magenta;default:return Y.cyan}}getUpdateTypeBorderColor(t){switch(t){case"major":return"red";case"minor":return"yellow";case"patch":return"green";case"prerelease":return"magenta";default:return"cyan"}}async updateNotificationState(t){let n=this.cache.notificationState;n&&n.version===t?n.showCount++:this.cache.notificationState={version:t,notifiedAt:new Date().toISOString(),dismissed:!1,showCount:1},await this.saveCache()}async dismissNotification(){this.cache.notificationState&&(this.cache.notificationState.dismissed=!0,this.cache.notificationState.dismissedAt=new Date().toISOString(),await this.saveCache())}async performUpdate(t="npm"){let n=await this.checkForUpdates(!0);if(!n.updateAvailable||!n.latestVersion)return M.output(Y.green("You are already on the latest version!")),!0;let s=this.packageJson.version,c=n.latestVersion;M.output(""),M.output(Y.cyan(`Updating Compass CLI from ${s} to ${c}...`)),M.output("");try{let u=this.getUpdateCommand(t);M.output(Y.gray(`Running: ${u}`)),M.output("");let{stdout:m}=await SI(u,{shell:!0});return m&&M.output(m),await this.recordUpdateHistory(s,c,!0,t),M.output(""),M.output(Y.green(`Successfully updated to version ${c}!`)),M.output(Y.gray("Please restart Compass CLI to use the new version.")),M.output(""),!0}catch(u){let m=u instanceof Error?u.message:"Update failed";return await this.recordUpdateHistory(s,c,!1,t,m),M.output(""),M.output(Y.red(`Update failed: ${m}`)),M.output(""),M.output(Y.gray("You can try updating manually:")),M.output(Y.cyan(` ${this.getUpdateCommand(t)}`)),M.output(""),!1}}getUpdateCommand(t){let n=this.packageJson.name;switch(t){case"yarn":return`yarn global add ${n}`;case"pnpm":return`pnpm add -g ${n}`;default:return`npm install -g ${n}`}}async recordUpdateHistory(t,n,s,c,u){let m={fromVersion:t,toVersion:n,updatedAt:new Date().toISOString(),success:s,method:c,error:u};this.cache.history.push(m),this.cache.history.length>10&&(this.cache.history=this.cache.history.slice(-10)),s&&(this.cache.notificationState=void 0),await this.saveCache()}getUpdateHistory(){return[...this.cache.history]}getLastCheckResult(){return this.cache.lastCheck}getConfig(){return{...this.config}}async updateConfig(t){this.config={...this.config,...t}}getVersionInfo(){return{currentVersion:this.packageJson.version,packageName:this.packageJson.name,lastCheck:this.cache.lastCheck,updateAvailable:this.cache.lastCheck?.updateAvailable??!1,latestVersion:this.cache.lastCheck?.latestVersion}}async detectPackageManager(){try{let{stdout:t}=await SI("yarn",["global","list","--depth=0"],{shell:!0,reject:!1});if(t&&t.includes(this.packageJson.name))return"yarn"}catch{}try{let{stdout:t}=await SI("pnpm",["list","-g","--depth=0"],{shell:!0,reject:!1});if(t&&t.includes(this.packageJson.name))return"pnpm"}catch{}return"npm"}},Xct=null;pZn=mle});import{useState as ddr,useEffect as pdr}from"react";import{Box as sQ,Text as NY}from"ink";import{jsx as XT,jsxs as fdr}from"react/jsx-runtime";var hle,mdr=it(()=>{"use strict";Uz();hle=({version:i,tagline:t,animated:n=!1,mini:s=!1,theme:c="default",model:u,unleashed:m,planStatus:g,orgName:v})=>{let[w,S]=ddr(!n),[,D]=ddr(0);if(pdr(()=>{if(n&&!w){let V=setTimeout(()=>{S(!0)},100);return()=>clearTimeout(V)}},[n,w]),pdr(()=>{if(n&&w){let V=setInterval(()=>{D(H=>(H+1)%3)},500);return()=>clearInterval(V)}},[n,w]),!w)return null;if(s)return XT(sQ,{flexDirection:"column",children:XT(NY,{children:pFe(i)})});let F=CM({version:i,tagline:t,model:u,unleashed:m,planStatus:g,orgName:v});return XT(sQ,{flexDirection:"column",children:(()=>{switch(c){case"minimal":return XT(sQ,{flexDirection:"column",children:XT(NY,{dimColor:!0,children:F})});case"colorful":return fdr(sQ,{flexDirection:"column",children:[XT(NY,{children:F}),fdr(sQ,{marginTop:1,children:[XT(NY,{color:"magenta",children:"\u2728 "}),XT(NY,{color:"cyan",children:"Ready to assist with your development tasks"}),XT(NY,{color:"magenta",children:" \u2728"})]})]});default:return XT(sQ,{flexDirection:"column",children:XT(NY,{children:F})})}})()})}});import fZn,{useState as mZn,useEffect as hZn}from"react";import{Text as _Zn,useInput as gZn}from"ink";function yZn({value:i,placeholder:t="",focus:n=!0,mask:s,highlightPastedText:c=!1,showCursor:u=!0,onChange:m,onSubmit:g}){let[v,w]=mZn({cursorOffset:(i||"").length,cursorWidth:0}),{cursorOffset:S,cursorWidth:D}=v;hZn(()=>{w(K=>{if(!n||!u)return K;let ce=i||"";return K.cursorOffset>ce.length-1?{cursorOffset:ce.length,cursorWidth:0}:K})},[i,n,u]);let F=c?D:0,G=s?s.repeat(i.length):i,V=G,H=t?Y.grey(t):void 0;if(u&&n){H=t.length>0?Y.inverse(t[0])+Y.grey(t.slice(1)):Y.inverse(" "),V=G.length>0?"":Y.inverse(" ");let K=0;for(let ce of G)V+=K>=S-F&&K<=S?Y.inverse(ce):ce,K++;G.length>0&&S===G.length&&(V+=Y.inverse(" "))}return gZn((K,ce)=>{if(ce.upArrow||ce.downArrow||ce.ctrl&&K==="c"||ce.tab||ce.shift&&ce.tab)return;if(ce.return){g&&g(i);return}let we=S,je=i,et=0;ce.leftArrow?u&&we--:ce.rightArrow?u&&we++:ce.backspace||ce.delete?S>0&&(je=i.slice(0,S-1)+i.slice(S,i.length),we--):(je=i.slice(0,S)+K+i.slice(S,i.length),we+=K.length,K.length>1&&(et=K.length)),S<0&&(we=0),S>i.length&&(we=i.length),w({cursorOffset:we,cursorWidth:et}),je!==i&&m(je)},{isActive:n}),fZn.createElement(_Zn,null,t?G.length>0?V:H:V)}var RY,$ct=it(()=>{Kd();RY=yZn});import{useState as zT,useCallback as QT}from"react";import{Box as Vc,Text as Ss,useInput as _dr}from"ink";import{jsx as Qi,jsxs as Ll}from"react/jsx-runtime";var hdr,gdr,ydr=it(()=>{"use strict";$ct();Rie();G8();hb();Yx();Uz();QV();fs();hdr=({onChoice:i})=>(_dr(t=>{let n=t.toLowerCase();n==="y"||n==="yes"?i(!0):(n==="n"||n==="no")&&i(!1)}),null),gdr=({onComplete:i,onCancel:t})=>{let[n,s]=zT("welcome"),[c,u]=zT({dataCollection:!0,telemetry:!1,analytics:!1,errorReporting:!0}),[m,g]=zT(""),[v,w]=zT(""),[S,D]=zT(""),[F,G]=zT("glm-5:cloud"),[V,H]=zT(!1),[K,ce]=zT("idle"),[we,je]=zT("anthropic"),[et,xt]=zT(null),[Nt,wt]=zT(!1);_dr((es,Ui)=>{if(Ui.escape){t();return}n==="welcome"&&Ui.return&&s("consent"),n==="compassApiKey"&&!Nt&&es.toLowerCase()==="s"&&Nr(),n==="providerApiKeys"&&!Nt&&we==="ollama"&&es.toLowerCase()==="s"&&ti()});let mn=QT(es=>{if(!es){t();return}u(Ui=>({...Ui,dataCollection:!0})),s("telemetry")},[t]),ur=QT(es=>{u(Ui=>({...Ui,telemetry:es,analytics:es})),s("compassApiKey")},[]),Nr=QT(()=>{s("providerApiKeys"),je("anthropic")},[]),qt=QT(es=>{g(es),et&&xt(null)},[et]),Oi=QT(es=>{w(es),et&&xt(null)},[et]),wi=QT(es=>{D(es),et&&xt(null)},[et]),Ut=QT(async es=>{let Ui=es.trim();if(!Ui){xt("Compass API key is required");return}wt(!0),s("validating"),xt(null);try{let ha=sm();await ha.validateApiKey(Ui),await(await wu()).setCompassApiKey(Ui);let El=null;M.info("Attempting to fetch Anthropic API key from Compass backend");try{M.debug("Calling getLLMConfig with model: claude-sonnet-4-5-20250929");let Ti=await ha.getLLMConfig("claude-sonnet-4-5-20250929",Ui);if(M.debug("LLM config received",{hasConfig:!!Ti,hasApiKey:!!Ti?.api_key,model:Ti?.model,apiType:Ti?.api_type,encryptedKeyLength:Ti?.api_key?.length||0}),Ti&&Ti.api_key){M.info("Encrypted API key found, attempting decryption");try{M.debug("Starting Fernet decryption with password: CLAUDE"),El=zV(Ti.api_key,"CLAUDE"),M.info("\u2713 Anthropic API key successfully decrypted",{keyLength:El.length})}catch(dn){let Ql=dn instanceof Error?dn.message:"Unknown error";M.error("Failed to decrypt Anthropic API key",{error:Ql})}}else M.warn("No API key found in LLM config response")}catch(Ti){let dn=Ti instanceof Error?Ti.message:"Unknown error";M.error("Failed to fetch LLM config from Compass backend",{error:dn})}El&&w(El);let oo=null,St=!1;M.info("Attempting to fetch Ollama configuration from Compass backend"),ce("idle");try{let Ti=await ha.fetchOllamaConfig(Ui);if(Ti&&Ti.available){if(M.info("Ollama configuration found from Compass",{model:Ti.model,endpoint:Ti.endpoint}),G(Ti.model),St=!0,Ti.apiKey)try{M.debug("Starting Fernet decryption for Ollama API key with password: OLLAMA"),oo=zV(Ti.apiKey,"OLLAMA"),M.info("\u2713 Ollama API key successfully decrypted",{keyLength:oo.length})}catch(dn){let Ql=dn instanceof Error?dn.message:"Unknown error";M.error("Failed to decrypt Ollama API key",{error:Ql})}H(!0),ce("success"),oo&&D(oo)}else M.info("No Ollama configuration available from Compass"),ce("not_available")}catch(Ti){let dn=Ti instanceof Error?Ti.message:"Unknown error";M.error("Failed to fetch Ollama config from Compass backend",{error:dn}),ce("failed")}wt(!1),El&&St?(s("providerApiKeys"),je("done"),setTimeout(()=>{yn(El||"",oo||"")},1e3)):El?(s("providerApiKeys"),je("ollama")):(s("providerApiKeys"),je("anthropic"))}catch(ha){let Yo=ha instanceof Error?ha.message:"Failed to validate Compass API key";xt(Yo),s("compassApiKey"),wt(!1)}},[c,i]),yn=QT(async(es,Ui)=>{wt(!0),s("validating"),xt(null);let ha=es??v,Yo=Ui??S;try{let El=await wu();ha.trim()&&(await El.setApiKey(ha.trim()),await El.setProviderApiKey("anthropic",ha.trim())),Yo.trim()&&await El.setProviderApiKey("ollama",Yo.trim()),await(await PS()).grantConsent(c),s("complete"),setTimeout(()=>{i()},1500)}catch(El){let oo=El instanceof Error?El.message:"Failed to save settings";xt(oo),s("providerApiKeys")}finally{wt(!1)}},[c,i,v,S]),ti=QT(()=>{yn(v,"")},[yn,v]),Wt=QT(async es=>{let Ui=es.trim();if(!Ui){xt("Anthropic API key is required to use Compass");return}if(!(await wu()).validateApiKeyFormat(Ui)){xt('Invalid API key format. Anthropic API keys should start with "sk-ant-"');return}w(Ui),xt(null),je("ollama")},[]),Zs=QT(async es=>{let Ui=es.trim();D(Ui),xt(null),yn(v,Ui)},[yn,v]),ri=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Ss,{children:Vce()}),Ll(Vc,{marginTop:1,flexDirection:"column",children:[Qi(Ss,{children:"This wizard will help you set up Compass for first-time use."}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Press "}),Qi(Ss,{color:"cyan",bold:!0,children:"Enter"}),Qi(Ss,{dimColor:!0,children:" to continue "})]})]})]}),xo=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u{1F4CB} Step 1: Data Collection Consent"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{bold:!0,children:dS.dataCollection.title}),Qi(Vc,{marginTop:1,children:Qi(Ss,{wrap:"wrap",children:dS.dataCollection.description})})]}),Qi(Vc,{marginBottom:1,children:Qi(Ss,{dimColor:!0,children:"This consent is required for Compass to store conversation history, session data, and configuration locally on your machine."})}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"What we store locally:"}),Qi(Ss,{children:" \u2022 Conversation history for context"}),Qi(Ss,{children:" \u2022 Session state and preferences"}),Qi(Ss,{children:" \u2022 Token usage statistics"}),Qi(Ss,{children:" \u2022 File operation backups"})]}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{children:"Do you consent to local data collection? "}),Qi(Ss,{color:"green",bold:!0,children:"[Y]es"}),Qi(Ss,{children:" / "}),Qi(Ss,{color:"red",bold:!0,children:"[N]o"})]}),Qi(hdr,{onChoice:mn})]}),Us=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u{1F4CA} Step 2: Anonymous Telemetry (Optional)"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{bold:!0,children:dS.telemetry.title}),Qi(Vc,{marginTop:1,children:Qi(Ss,{wrap:"wrap",children:dS.telemetry.description})})]}),Qi(Vc,{marginBottom:1,children:Qi(Ss,{dimColor:!0,children:"This is completely optional and helps us improve Compass. No personal data or code content is ever collected."})}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"What anonymous telemetry includes:"}),Qi(Ss,{children:" \u2022 Feature usage patterns (which commands are used)"}),Qi(Ss,{children:" \u2022 Error rates and types (not error content)"}),Qi(Ss,{children:" \u2022 Performance metrics"}),Qi(Ss,{dimColor:!0,children:"What is never collected:"}),Qi(Ss,{color:"green",children:" \u2713 Your code or file contents"}),Qi(Ss,{color:"green",children:" \u2713 Conversation content"}),Qi(Ss,{color:"green",children:" \u2713 API keys or credentials"})]}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{children:"Enable anonymous telemetry? "}),Qi(Ss,{color:"green",bold:!0,children:"[Y]es"}),Qi(Ss,{children:" / "}),Qi(Ss,{color:"yellow",bold:!0,children:"[N]o"})]}),Qi(hdr,{onChoice:ur})]}),Vp=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u{1F511} Step 3: Compass API Key"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{children:"Enter your Compass API key to authenticate with Compass services."}),Qi(Vc,{marginTop:1,children:Qi(Ss,{dimColor:!0,children:"Get your API key from your Compass account settings."})})]}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"Your API key will be:"}),Qi(Ss,{color:"green",children:" \u2713 Stored securely using system keychain when available"}),Qi(Ss,{color:"green",children:" \u2713 Encrypted with AES-256 as fallback"}),Qi(Ss,{color:"green",children:" \u2713 Validated against Compass authentication service"})]}),Ll(Vc,{marginTop:1,flexDirection:"column",children:[Ll(Vc,{children:[Qi(Ss,{bold:!0,children:"Compass API Key: "}),!Nt&&Qi(RY,{value:m,onChange:qt,onSubmit:Ut,mask:"*",placeholder:"Enter your Compass API key..."}),Nt&&Qi(Ss,{dimColor:!0,children:"Validating..."})]}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Press "}),Qi(Ss,{color:"cyan",children:"Enter"}),Qi(Ss,{dimColor:!0,children:" to continue or "}),Qi(Ss,{color:"yellow",bold:!0,children:"S"}),Qi(Ss,{dimColor:!0,children:" to skip"})]})]}),et&&Qi(Vc,{marginTop:1,children:Ll(Ss,{color:"red",children:["\u274C ",et]})})]}),wo=()=>we==="anthropic"?Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u{1F511} Step 4: Provider API Keys - Anthropic"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{children:"Enter your Anthropic API key to enable Claude models."}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Get your API key at: "}),Qi(Ss,{color:"blue",underline:!0,children:"https://console.anthropic.com/"})]})]}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"Your API key will be:"}),Qi(Ss,{color:"green",children:" \u2713 Stored securely using system keychain when available"}),Qi(Ss,{color:"green",children:" \u2713 Encrypted with AES-256 as fallback"}),Qi(Ss,{color:"green",children:" \u2713 Never transmitted except to Anthropic's API"})]}),Ll(Vc,{marginTop:1,flexDirection:"column",children:[Ll(Vc,{children:[Qi(Ss,{bold:!0,children:"Anthropic API Key: "}),!Nt&&Qi(RY,{value:v,onChange:Oi,onSubmit:Wt,mask:"*",placeholder:"sk-ant-api03-..."}),Nt&&Qi(Ss,{dimColor:!0,children:"Processing..."})]}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Press "}),Qi(Ss,{color:"cyan",children:"Enter"}),Qi(Ss,{dimColor:!0,children:" to continue to Ollama configuration"})]})]}),et&&Qi(Vc,{marginTop:1,children:Ll(Ss,{color:"red",children:["\u274C ",et]})})]}):we==="ollama"?Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u{1F511} Step 4: Provider API Keys - Ollama (Optional)"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{children:"Enter your Ollama API key for cloud-hosted Ollama models."}),Qi(Vc,{marginTop:1,children:Qi(Ss,{dimColor:!0,children:"This is optional - skip if you don't use Ollama cloud services."})})]}),V&&Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"green",padding:1,marginBottom:1,children:[Qi(Ss,{color:"green",bold:!0,children:"\u2713 Ollama configuration auto-fetched from Compass"}),Ll(Ss,{dimColor:!0,children:["Model: ",S?"*** (configured)":F]})]}),!V&&K==="failed"&&Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",padding:1,marginBottom:1,children:[Qi(Ss,{color:"yellow",bold:!0,children:"\u26A0 Could not fetch Ollama config from Compass"}),Qi(Ss,{dimColor:!0,children:"You can configure it manually below."})]}),!V&&K==="not_available"&&Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"No Ollama configuration available from Compass."}),Qi(Ss,{dimColor:!0,children:"You can skip this step if you don't need Ollama."})]}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{dimColor:!0,children:"Ollama models available:"}),Qi(Ss,{children:" \u2022 GLM 4.7 (Z.AI's large language model)"}),Qi(Ss,{children:" \u2022 MiniMax M2.1"}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Your API key will be:"}),Qi(Ss,{color:"green",children:" \u2713 Stored securely using system keychain when available"}),Qi(Ss,{color:"green",children:" \u2713 Used when switching to Ollama-based models"})]})]}),v&&Qi(Vc,{marginBottom:1,children:Qi(Ss,{color:"green",children:"\u2713 Anthropic API key configured"})}),Ll(Vc,{marginTop:1,flexDirection:"column",children:[Ll(Vc,{children:[Qi(Ss,{bold:!0,children:"Ollama API Key: "}),!Nt&&Qi(RY,{value:S,onChange:wi,onSubmit:Zs,mask:"*",placeholder:"Enter Ollama API key (optional)..."}),Nt&&Qi(Ss,{dimColor:!0,children:"Processing..."})]}),Ll(Vc,{marginTop:1,children:[Qi(Ss,{dimColor:!0,children:"Press "}),Qi(Ss,{color:"cyan",children:"Enter"}),Qi(Ss,{dimColor:!0,children:" to finish or "}),Qi(Ss,{color:"yellow",bold:!0,children:"S"}),Qi(Ss,{dimColor:!0,children:" to skip"})]})]}),et&&Qi(Vc,{marginTop:1,children:Ll(Ss,{color:"red",children:["\u274C ",et]})})]}):null,Ra=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"cyan",children:"\u23F3 Saving Settings..."})}),Qi(Ss,{dimColor:!0,children:"Validating API key and storing credentials securely..."})]}),zs=()=>Ll(Vc,{flexDirection:"column",children:[Qi(Vc,{marginBottom:1,children:Qi(Ss,{bold:!0,color:"green",children:"\u2705 Setup Complete!"})}),Ll(Vc,{flexDirection:"column",marginBottom:1,children:[Qi(Ss,{children:"Compass has been configured successfully."}),Qi(Vc,{marginTop:1,children:Qi(Ss,{dimColor:!0,children:"Starting interactive session..."})})]}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:1,marginBottom:1,children:[Qi(Ss,{bold:!0,children:"API Keys Configured:"}),Qi(Ss,{color:"green",children:" \u2713 Anthropic - Claude models ready"}),V?Qi(Ss,{color:"green",children:" \u2713 Ollama - Auto-fetched from Compass (GLM/MiniMax/Kimi/Gemini models ready)"}):S.trim()?Qi(Ss,{color:"green",children:" \u2713 Ollama - GLM/MiniMax/Kimi/Gemini models ready"}):Qi(Ss,{dimColor:!0,children:" \u25CB Ollama - Not configured (optional)"})]}),Ll(Vc,{flexDirection:"column",borderStyle:"round",borderColor:"green",padding:1,children:[Qi(Ss,{bold:!0,children:"Quick Tips:"}),Qi(Ss,{children:" \u2022 Type natural language requests to interact with Compass"}),Ll(Ss,{children:[" \u2022 Use ",Qi(Ss,{color:"cyan",children:"/help"})," to see available commands"]}),Ll(Ss,{children:[" \u2022 Use ",Qi(Ss,{color:"cyan",children:"/model"})," to switch between models"]}),Ll(Ss,{children:[" \u2022 Use ",Qi(Ss,{color:"cyan",children:"/exit"})," to quit Compass"]})]})]});return Ll(Vc,{flexDirection:"column",padding:1,children:[n!=="welcome"&&(()=>{let es=["Welcome","Consent","Telemetry","Compass Key","API Keys","Complete"],Ui={welcome:0,consent:1,telemetry:2,compassApiKey:3,providerApiKeys:4,validating:4,complete:5}[n];return Qi(Vc,{marginBottom:2,children:es.map((ha,Yo)=>Ll(Vc,{children:[Ll(Ss,{color:Yo===Ui?"cyan":Yo<Ui?"green":"gray",bold:Yo===Ui,children:[Yo<Ui?"\u2713":Yo===Ui?"\u25CF":"\u25CB"," ",ha]}),Yo<es.length-1&&Qi(Ss,{dimColor:!0,children:" \u2192 "})]},ha))})})(),n==="welcome"&&ri(),n==="consent"&&xo(),n==="telemetry"&&Us(),n==="compassApiKey"&&Vp(),n==="providerApiKeys"&&wo(),n==="validating"&&Ra(),n==="complete"&&zs(),n!=="complete"&&n!=="validating"&&Ll(Vc,{marginTop:2,children:[Qi(Ss,{dimColor:!0,children:"Press "}),Qi(Ss,{color:"yellow",children:"Esc"}),Qi(Ss,{dimColor:!0,children:" at any time to cancel setup"})]})]})}});import bdr from"path";async function xdr(){return lDe||(lDe=new qct,await lDe.load()),lDe}var Idr,vdr,qct,lDe,wdr=it(()=>{"use strict";ep();yp();Idr="command-history.json",vdr=1e3,qct=class{entries=[];position=-1;currentInput="";async load(){let t=bdr.join(Eo(),Idr);if(await Ls(t)){let n=await gp(t);n?.entries&&(this.entries=n.entries)}}async save(){let t=bdr.join(Eo(),Idr),n={entries:this.entries,lastUpdated:new Date().toISOString()};await Fg(t,n)}add(t){let n=t.trim();n&&(this.entries.length>0&&this.entries[this.entries.length-1]===n||(this.entries.push(n),this.entries.length>vdr&&(this.entries=this.entries.slice(-vdr)),this.position=-1,this.currentInput=""))}previous(t){return this.entries.length===0?null:(this.position===-1&&(this.currentInput=t),this.position<this.entries.length-1&&this.position++,this.entries[this.entries.length-1-this.position])}next(){return this.position<=0?(this.position=-1,this.currentInput):(this.position--,this.entries[this.entries.length-1-this.position])}resetPosition(){this.position=-1,this.currentInput=""}search(t){let n=t.toLowerCase();return this.entries.filter(s=>s.toLowerCase().includes(n)).reverse()}reverseSearch(t,n){let s=n??this.entries.length-1,c=t.toLowerCase();for(let u=s;u>=0;u--)if(this.entries[u].toLowerCase().includes(c))return{entry:this.entries[u],index:u};return null}getAll(){return[...this.entries]}getRecent(t=10){return this.entries.slice(-t).reverse()}clear(){this.entries=[],this.position=-1,this.currentInput=""}get length(){return this.entries.length}},lDe=null});async function Adr(i){if(i.type!=="slash"||!i.command)return{handled:!1,error:"Not a slash command"};let t=uDe.get(i.command);if(!t)return M.warn(`Unknown slash command: /${i.command}`),{handled:!1,error:`Unknown command: /${i.command}`};let n=Date.now();try{M.debug(`Executing slash command: /${t.name}`,{args:i.args});let s=await t.handler(i.args),c=Date.now()-n;return M.debug(`Slash command completed: /${t.name}`,{duration:c}),s&&typeof s=="object"&&"handled"in s?s:{handled:!0}}catch(s){let c=s instanceof Error?s.message:"Unknown error";throw M.error(`Error executing /${t.name}: ${c}`,s),s}}function Bp(i){uDe.register(i)}function _le(){return uDe}function kdr(i){let t=uDe.get(i);if(!t)return null;let n=[`/${t.name}`,` ${t.description}`];if(t.aliases&&t.aliases.length>0&&n.push(` Aliases: ${t.aliases.map(s=>`/${s}`).join(", ")}`),t.usage&&n.push(` Usage: ${t.usage}`),t.examples&&t.examples.length>0){n.push(" Examples:");for(let s of t.examples)n.push(` ${s}`)}return n.join(`
|
|
3736
3736
|
`)}var Kct,uDe,b0=it(()=>{"use strict";fs();Kct=class{commands=new Map;aliases=new Map;register(t){if(!t.name||typeof t.name!="string")throw new Error("Command definition must have a valid name");if(!t.handler||typeof t.handler!="function")throw new Error(`Command '${t.name}' must have a valid handler function`);let n=t.name.toLowerCase();if(this.commands.set(n,{...t,name:n}),t.aliases&&Array.isArray(t.aliases))for(let s of t.aliases){let c=s.toLowerCase();this.aliases.set(c,n)}M.debug(`Registered slash command: /${n}`)}unregister(t){let n=t.toLowerCase(),s=this.commands.get(n);if(!s)return!1;if(this.commands.delete(n),s.aliases)for(let c of s.aliases)this.aliases.delete(c.toLowerCase());return M.debug(`Unregistered slash command: /${n}`),!0}get(t){let n=t.toLowerCase(),s=this.aliases.get(n);return s?this.commands.get(s):this.commands.get(n)}has(t){let n=t.toLowerCase();return this.commands.has(n)||this.aliases.has(n)}getAll(){return Array.from(this.commands.values())}getCommandNames(){let t=Array.from(this.commands.keys()),n=Array.from(this.aliases.keys());return[...new Set([...t,...n])].sort()}getCommandsByCategory(){let t=new Map,n={help:"Help & Info",tokens:"Help & Info",context:"Help & Info",config:"Help & Info",clear:"Session",compact:"Session",save:"Session",load:"Session",reset:"Session",exit:"Session",quit:"Session",model:"Model & Tokens",approve:"Approval",files:"Files",index:"Files",export:"Export"};for(let s of this.commands.values()){let c=n[s.name]||"Other";t.has(c)||t.set(c,[]),t.get(c).push(s)}return t}clear(){this.commands.clear(),this.aliases.clear(),M.debug("Cleared all slash commands from registry")}get size(){return this.commands.size}getCommandsRequiringLLM(){return Array.from(this.commands.values()).filter(t=>t.requiresLLM===!0)}getLocalOnlyCommands(){return Array.from(this.commands.values()).filter(t=>t.requiresLLM!==!0)}getCommandsInCategory(t){return Array.from(this.commands.values()).filter(n=>n.category===t)}getOfflineCommands(){return Array.from(this.commands.values()).filter(t=>t.canRunOffline!==!1&&t.requiresLLM!==!0)}requiresLLM(t){return this.get(t)?.requiresLLM===!0}canRunOffline(t){let n=this.get(t);return n?n.canRunOffline!==!1&&n.requiresLLM!==!0:!1}},uDe=new Kct});import elt from"path";function Cdr(){return hk().map(t=>{let n=t.id.includes("sonnet-4-6")?"sonnet-4.6":t.id.includes("sonnet-4-5")?"sonnet-4.5":t.id.includes("opus-4-6")?"opus-4.6":t.id.includes("opus-4-5")?"opus-4.5":t.id.includes("glm-4.7")?"glm-4.7":t.id.includes("glm-5")?"glm-5":t.id.includes("minimax-m2.5")?"minimax-m2.5":t.id.includes("kimi-k2.5")?"kimi-k2.5":t.id.includes("gemini-3-pro")?"gemini-3-pro":t.id.includes("haiku")?"haiku":t.id,s=sm().getPlanStatus(),c=jZ(t.id,s);return{value:n,display:n,description:yCe(n)||t.name,type:"model",executeOnComplete:!0,...c&&{disabled:!0,disabledReason:c}}})}async function Sdr(i,t,n=process.cwd(),s={}){let c={...bZn,...s},u=i.slice(0,t);if(u.startsWith("/"))return xZn(u,c);let m=u.lastIndexOf("@");if(m!==-1){let g=u.slice(m+1);return CZn(g,n,c)}return[]}function xZn(i,t){let s=_le().getAll(),c=i.slice(1).toLowerCase();if(c==="model")return Cdr();let u=c.indexOf(" ");if(u!==-1){let g=c.slice(0,u),v=c.slice(u+1);return wZn(g,v,t)}return s.filter(g=>g.name.toLowerCase().startsWith(c)).sort((g,v)=>g.name.localeCompare(v.name)).slice(0,t.maxResults).map(g=>({value:`/${g.name}`,display:`/${g.name}`,description:g.description,type:"command",executeOnComplete:g.executeOnComplete}))}function wZn(i,t,n){let s=t.toLowerCase().trim();switch(i){case"model":return gle(Cdr(),s,n.maxResults).map(c=>({...c,executeOnComplete:!0}));case"approve":return gle(IZn,s,n.maxResults);case"export":return gle(vZn,s,n.maxResults);case"help":return AZn(s,n.maxResults);case"load":case"save":return[];case"files":case"context":return kZn(s,n.maxResults);default:return[]}}function AZn(i,t){return gle([{value:"commands",display:"commands",description:"List all available commands",type:"value"},{value:"model",display:"model",description:"Help with model selection",type:"value"},{value:"files",display:"files",description:"Help with file operations",type:"value"},{value:"session",display:"session",description:"Help with session management",type:"value"},{value:"approval",display:"approval",description:"Help with approval modes",type:"value"},{value:"tokens",display:"tokens",description:"Help with token tracking",type:"value"},{value:"export",display:"export",description:"Help with exporting conversations",type:"value"}],i,t)}function kZn(i,t){return gle([{value:"*.ts",display:"*.ts",description:"TypeScript files",type:"value"},{value:"*.tsx",display:"*.tsx",description:"TypeScript React files",type:"value"},{value:"*.js",display:"*.js",description:"JavaScript files",type:"value"},{value:"*.json",display:"*.json",description:"JSON files",type:"value"},{value:"src/**",display:"src/**",description:"All files in src directory",type:"value"},{value:"**/*.test.*",display:"**/*.test.*",description:"All test files",type:"value"}],i,t)}async function CZn(i,t,n){try{let s=i.replace(/\\/g,"/"),c=s.lastIndexOf("/");return c!==-1?Edr(s,c,t,n):SZn(s,t,n)}catch{return[]}}async function Edr(i,t,n,s){let c=elt.join(n,i.slice(0,t)),u=i.slice(t+1);if(!await Ls(c))return[];let m=u?`${u}*`:"*",g=await Nh(m,{cwd:c,dot:s.includeHidden,mark:!0,ignore:s.excludePatterns,maxDepth:1}),v=i.slice(0,t+1);return g.slice(0,s.maxResults).map(w=>{let S=w.endsWith("/")||w.endsWith("\\"),D=w.replace(/[/\\]$/,"");return{value:`@${v}${w}`,display:D,description:S?"\u{1F4C1}":void 0,type:S?"directory":"file"}})}async function SZn(i,t,n){if(!i)return Edr("",-1,t,{...n,maxResults:n.maxResults});let s=i.toLowerCase(),c=`**/*${i}*`;return(await Nh(c,{cwd:t,dot:n.includeHidden,ignore:n.excludePatterns,nodir:!1,maxDepth:10})).map(v=>{let w=v.replace(/\\/g,"/"),S=elt.basename(w),D=S.toLowerCase(),F=w.toLowerCase(),G=0;S.replace(/\.[^.]*$/,"").toLowerCase()===s&&(G+=1e3),D===s&&(G+=900),D.startsWith(s)&&(G+=500),D.includes(s)&&(G+=100);let H=w.split("/");return H.some(K=>K.toLowerCase().startsWith(s))&&(G+=50),F.includes(s)&&(G+=10),G-=H.length,{file:w,fileName:S,score:G}}).filter(v=>v.score>0).sort((v,w)=>w.score-v.score).slice(0,n.maxResults).map(({file:v,fileName:w})=>{let S=v.endsWith("/")||v.endsWith("\\");return{value:`@${v}`,display:w,description:S?`Directory: ${v}`:`${EZn(w)}: ${v}`,type:S?"directory":"file"}})}function EZn(i){let t=elt.extname(i).toLowerCase();return{".ts":"TypeScript file",".tsx":"TypeScript React file",".js":"JavaScript file",".jsx":"JavaScript React file",".json":"JSON file",".md":"Markdown file",".css":"CSS stylesheet",".scss":"SCSS stylesheet",".html":"HTML file",".yaml":"YAML file",".yml":"YAML file",".xml":"XML file",".svg":"SVG image",".png":"PNG image (attachable)",".jpg":"JPEG image (attachable)",".jpeg":"JPEG image (attachable)",".gif":"GIF image (attachable)",".webp":"WebP image (attachable)",".pdf":"PDF document (attachable)",".txt":"Text file",".sh":"Shell script",".py":"Python file",".rb":"Ruby file",".go":"Go file",".rs":"Rust file",".java":"Java file",".c":"C file",".cpp":"C++ file",".h":"Header file",".sql":"SQL file",".env":"Environment file",".gitignore":"Git ignore file",".dockerignore":"Docker ignore file",".eslintrc":"ESLint config",".prettierrc":"Prettier config"}[t]||"File"}function gle(i,t,n){if(!t)return i.slice(0,n);let s=t.toLowerCase();return i.filter(c=>c.value.toLowerCase().startsWith(s)).slice(0,n)}function yle(i,t,n){let s=i.slice(0,t),c=i.slice(t),u,m;switch(n.type){case"command":u=s.lastIndexOf("/"),m=n.value;break;case"file":case"directory":u=s.lastIndexOf("@"),m=n.value;break;default:{s.trim()==="/model"&&n.type==="model"?(u=0,m=`/model ${n.value}`):(u=s.lastIndexOf(" ")+1,m=n.value);break}}u<0&&(u=0);let g=i.slice(0,u)+m+c,v=u+m.length;return{newInput:g,newCursorPosition:v}}function Tdr(i,t){let n=i.slice(0,t);if(n.startsWith("/"))return!0;if(n.includes("@")){let s=n.lastIndexOf("@");return!n.slice(s+1).includes(" ")}return!1}var bZn,IZn,vZn,Fdr=it(()=>{"use strict";mw();b0();yp();vv();Yx();zae();bZn={maxResults:20,includeHidden:!1,excludePatterns:["node_modules/**",".git/**","dist/**","build/**"]};IZn=[{value:"manual",display:"manual",description:"Require approval for all file changes",type:"mode"},{value:"auto",display:"auto",description:"Auto-approve safe changes based on patterns",type:"mode"},{value:"strict",display:"strict",description:"Require approval for all operations including reads",type:"mode"}],vZn=[{value:"md",display:"md",description:"Markdown format - readable documentation",type:"value"},{value:"json",display:"json",description:"JSON format - structured data export",type:"value"},{value:"html",display:"html",description:"HTML format - web-viewable export",type:"value"}]});import tlt,{useState as jP,useCallback as dDe,useEffect as pDe,useRef as PY}from"react";import{Box as W1,Text as sd,useInput as TZn,useStdin as FZn}from"ink";import{Fragment as ble,jsx as mh,jsxs as Wp}from"react/jsx-runtime";function Ddr(i,t,n){if(i.length===0)return-1;let s=n==="down"?1:-1,c=(t+s+i.length)%i.length;for(let u=0;u<i.length;u++){if(!i[c]?.disabled)return c;c=(c+s+i.length)%i.length}return-1}function DZn(i){return i.findIndex(t=>!t.disabled)}function GZn(i){switch(i){case"auto":return"\u26A1";case"strict":return"\u{1F512}";case"smart":return"\u{1F9E0}";case"manual":default:return"\u270B"}}function NZn(i){switch(i){case"auto":return"yellow";case"strict":return"red";case"smart":return"cyan";case"manual":default:return"green"}}var RZn,PZn,Gdr,Ndr=it(()=>{"use strict";$V();dh();wdr();Fdr();fs();RZn=tlt.memo(({completions:i,selectedCompletion:t,currentModel:n})=>{let s=i.length>0&&i[0].type==="model",c=process.stdout.rows||24,u=Math.max(8,Math.min(20,Math.floor(c*.4))),m=0;if(i.length>u){let w=Math.floor(u/2);m=Math.max(0,Math.min(t-w,i.length-u))}let g=Math.min(m+u,i.length),v=i.slice(m,g);return Wp(W1,{flexDirection:"column",marginBottom:1,children:[s&&n&&Wp(W1,{marginBottom:0,paddingX:1,children:[mh(sd,{dimColor:!0,children:"Current model: "}),mh(sd,{bold:!0,color:"cyan",children:n})]}),Wp(W1,{borderStyle:"round",borderColor:"gray",flexDirection:"column",paddingX:1,children:[m>0&&Wp(sd,{dimColor:!0,children:[" \u2191 ",m," more above"]}),v.map((w,S)=>{let D=m+S,F=w.disabled===!0,G=D===t;return Wp(W1,{children:[Wp(sd,{color:F?"gray":G?"cyan":void 0,bold:G&&!F,dimColor:F,children:[G&&!F?"\u276F ":" ",w.display]}),F&&mh(sd,{color:"gray",children:" \u{1F512}"}),w.description&&Wp(sd,{dimColor:!0,children:[" - ",w.description]}),F&&w.disabledReason&&Wp(sd,{color:"gray",italic:!0,children:[" (",w.disabledReason,")"]})]},w.value)}),g<i.length&&Wp(sd,{dimColor:!0,children:[" \u2193 ",i.length-g," more below"]})]}),Wp(sd,{dimColor:!0,children:["Tab to complete \u2022 \u2191\u2193 to navigate \u2022 Esc to close ",i.length>u&&`(${t+1}/${i.length})`]})]})}),PZn=({approvalMode:i,tokenCount:t,model:n,activeAgentName:s,onSubmit:c,onPaste:u,disabled:m=!1,isProcessing:g=!1,placeholder:v="Type or paste your message...",projectRoot:w=process.cwd(),showStatusBar:S=!0,promptSymbol:D="\u276F",maxLength:F=1e5,maxDisplayLines:G=50,suggestionOffer:V,onInputChange:H})=>{let[K,ce]=jP(""),[we,je]=jP(0),[et,xt]=jP(null),[Nt,wt]=jP([]),[mn,ur]=jP(0),[Nr,qt]=jP(!1),[Oi,wi]=jP(null),[Ut,yn]=jP(!1),[ti,Wt]=jP(process.stdout.columns||80),Zs=PY(!1),ri=PY(0),xo=PY(""),Us=PY(null),Vp=PY(K),wo=PY(we),Ra=dDe(_o=>{Vp.current=_o,ce(_o),H?.(_o)},[H]),zs=dDe(_o=>{wo.current=_o,je(_o)},[]),{isRawModeSupported:Ur}=FZn();pDe(()=>{let _o=!0;async function Uo(){let Yt=await xdr();_o&&xt(Yt)}return Uo(),()=>{_o=!1}},[]),pDe(()=>{let _o=()=>{Wt(process.stdout.columns||80)};return process.stdout.on("resize",_o),()=>{process.stdout.off("resize",_o)}},[]),pDe(()=>{let _o=Us.current;if(Us.current=K,_o==null||_o===K)return;let Uo=K.split(`
|
|
@@ -4211,7 +4211,7 @@ Please move to the next pending task and continue execution.`;KS+=lm,Us(um=>{let
|
|
|
4211
4211
|
`);if(s===0)return n=G,s=G.length,t.call(this,v,w,S);let V=Math.max(G.length,n.length),H=0;for(let je=0;je<V;je++)(je>=G.length||je>=n.length||G[je]!==n[je])&&H++;if(H===0)return n=G,s=G.length,typeof w=="function"?w():typeof S=="function"&&S(),!0;let K="",ce=s-1;for(let je=0;je<V;je++){let et=je<G.length,xt=je<n.length;if(!(et&&xt&&G[je]===n[je])){if(je<ce)K+=`\x1B[${ce-je}A\r`,ce=je;else if(je>ce){if(je<s)K+=`\x1B[${je-ce}B\r`;else{ce<s-1&&(K+=`\x1B[${s-1-ce}B`,ce=s-1);let Nt=je-ce;for(let wt=0;wt<Nt;wt++)K+=`
|
|
4212
4212
|
`;K+="\r"}ce=je}else K+="\r";et?K+=G[je]+"\x1B[K":K+="\x1B[2K"}}let we=G.length-1;if(ce<we)if(we<s)K+=`\x1B[${we-ce}B`;else{ce<s-1&&(K+=`\x1B[${s-1-ce}B`,ce=s-1);let je=we-ce;for(let et=0;et<je;et++)K+=`
|
|
4213
4213
|
`}else ce>we&&(K+=`\x1B[${ce-we}A`);return n=G,s=G.length,t.call(this,K,w,S)},()=>{i.write=t,process.stderr.write=g,i.off("resize",m)}}var kdt=it(()=>{"use strict"});var R_r={};Pp(R_r,{checkSetupRequired:()=>F_r,createSetupCommand:()=>D_r,default:()=>sLn,displaySetupStatus:()=>Sdt,executeSetupCommand:()=>iLn,reconfigureSetup:()=>Edt,runInteractiveSetup:()=>Cdt,validateStoredApiKeys:()=>Tdt});async function F_r(){try{let t=await(await PS()).getStatus(),n=await wu(),s=await n.hasCompassApiKey(),c=await n.hasApiKey(),u=!t.isValid,m=!s,g=!c,v=t.daysUntilExpiry!==null&&t.daysUntilExpiry<=0,w=t.needsRenewal;return{required:u||g,missingConsent:u,missingCompassApiKey:m,missingApiKey:g,consentExpired:v,consentNeedsRenewal:w}}catch(i){return M.error("Failed to check setup status",i),{required:!0,missingConsent:!0,missingCompassApiKey:!0,missingApiKey:!0,consentExpired:!1,consentNeedsRenewal:!1}}}async function Cdt(){await _c(Eo()),console.log(CM(nLn)),console.log(Vce()),console.log(Y.bold.cyan("\u2501\u2501\u2501 First-Time Setup Wizard \u2501\u2501\u2501")),console.log(""),console.log(Y.gray("This wizard will help you configure Compass for first-time use.")),console.log(Y.gray("Press Ctrl+C at any time to cancel.")),console.log(""),console.log(Y.bold.white("\u{1F4CB} Step 1: Data Collection Consent")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.bold(dS.dataCollection.title)),console.log(Y.gray(dS.dataCollection.description)),console.log(""),console.log(Y.gray("This consent is required for Compass to function.")),console.log("");let{dataCollectionConsent:i}=await Gg.prompt([{type:"confirm",name:"dataCollectionConsent",message:"Do you consent to local data collection?",default:!0}]);if(!i)throw console.log(""),console.log(Y.yellow("\u26A0\uFE0F Data collection consent is required to use Compass.")),console.log(Y.gray(" Setup cancelled.")),console.log(""),new Error("Setup cancelled: Data collection consent is required");console.log(""),console.log(Y.bold.white("\u{1F4CA} Step 2: Anonymous Telemetry (Optional)")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.bold(dS.telemetry.title)),console.log(Y.gray(dS.telemetry.description)),console.log(""),console.log(Y.gray("This is completely optional and helps improve Compass.")),console.log(Y.gray("No personal data or code content is ever collected.")),console.log("");let{telemetryConsent:t}=await Gg.prompt([{type:"confirm",name:"telemetryConsent",message:"Enable anonymous telemetry?",default:!1}]);console.log(""),console.log(Y.bold.white("\u{1F41B} Step 3: Error Reporting (Optional)")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.bold(dS.errorReporting.title)),console.log(Y.gray(dS.errorReporting.description)),console.log("");let{errorReportingConsent:n}=await Gg.prompt([{type:"confirm",name:"errorReportingConsent",message:"Enable automatic error reporting?",default:!0}]),s={dataCollection:!0,telemetry:t,analytics:t,errorReporting:n};console.log(""),console.log(Y.bold.white("\u{1F511} Step 4: Compass API Key (Optional)")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("The Compass API key enables:")),console.log(Y.gray(" \u2022 Usage tracking and cost management")),console.log(Y.gray(" \u2022 Automatic retrieval of API keys from your Compass account")),console.log(""),console.log(Y.yellow("This step is OPTIONAL - you can skip it if you don't have a Compass account.")),console.log("");let c=await wu(),u=sm(),{skipCompassKey:m}=await Gg.prompt([{type:"confirm",name:"skipCompassKey",message:"Skip Compass API key configuration?",default:!1}]),g="";if(m)console.log(Y.yellow(" Skipping Compass API key configuration."));else{console.log(""),console.log(Y.gray("Get your API key from your Compass account settings.")),console.log(Y.gray("Your API key will be stored securely using system keychain or encrypted file.")),console.log("");let{key:F}=await Gg.prompt([{type:"password",name:"key",message:"Enter your Compass API key:",mask:"*",validate:async G=>{let V=G.trim();if(!V)return"Please enter a valid API key or go back and choose to skip.";try{return console.log(Y.gray(`
|
|
4214
|
-
Validating API key...`)),await u.validateApiKey(V),console.log(Y.green(" \u2713 API key validated successfully")),!0}catch(H){return`API key validation failed: ${H instanceof Error?H.message:"Invalid API key"}`}}}]);g=F}let v=null;if(g&&g.trim()){console.log(""),console.log(Y.gray("Checking for Anthropic API key in your Compass account...")),M.info("Attempting to fetch Anthropic API key from Compass backend");try{M.debug("Calling getLLMConfig with model: claude-sonnet-4-5-20250929");let F=await u.getLLMConfig("claude-sonnet-4-5-20250929",g.trim());if(M.debug("LLM config received",{hasConfig:!!F,hasApiKey:!!F?.api_key,model:F?.model,apiType:F?.api_type,encryptedKeyLength:F?.api_key?.length||0}),F&&F.api_key){console.log(Y.gray(" \u2713 Found encrypted API key in your account")),M.info("Encrypted API key found, attempting decryption");try{M.debug("Starting Fernet decryption with password: CLAUDE"),v=zV(F.api_key,"CLAUDE"),M.info("\u2713 Anthropic API key successfully decrypted",{keyLength:v.length}),console.log(Y.green(" \u2713 Anthropic API key retrieved from your Compass account"))}catch(G){let V=G instanceof Error?G.message:"Unknown error";M.error("Failed to decrypt Anthropic API key",{error:V}),console.log(Y.yellow(" \u26A0 Failed to decrypt API key from Compass account")),console.log(Y.gray(` Reason: ${V}`)),v=null}}else M.warn("No API key found in LLM config response"),console.log(Y.yellow(" \u26A0 No Anthropic API key found in your Compass account"))}catch(F){let G=F instanceof Error?F.message:"Unknown error";M.error("Failed to fetch LLM config from Compass backend",{error:G}),console.log(Y.yellow(" \u26A0 Could not retrieve API key from Compass account")),console.log(Y.gray(` Reason: ${G}`)),v=null}}else console.log(""),console.log(Y.yellow("Skipping Compass API key configuration"));let w;if(v)w=v,console.log(""),console.log(Y.gray("Skipping Anthropic API key entry (already configured in your Compass account)"));else{console.log(""),console.log(Y.bold.white("\u{1F511} Step 5: Anthropic API Key")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("Enter your Anthropic API key to enable Claude integration.")),console.log(Y.gray("Get your API key at: ")+Y.blue.underline("https://console.anthropic.com/")),console.log(""),console.log(Y.gray("Your API key will be:")),console.log(Y.green(" \u2713 Stored securely using system keychain when available")),console.log(Y.green(" \u2713 Encrypted with AES-256 as fallback")),console.log(Y.green(" \u2713 Never transmitted except to Anthropic's API")),console.log("");let{apiKey:F}=await Gg.prompt([{type:"password",name:"apiKey",message:"Enter your Anthropic API key:",mask:"*",validate:G=>{let V=G.trim();return V?c.validateApiKeyFormat(V)?!0:'Invalid API key format. Anthropic API keys should start with "sk-ant-"':"API key is required to use Compass"}}]);w=F}console.log(""),console.log(Y.bold.white("\u{1F50C} Step 6: Additional Providers (Optional)")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("You can configure API keys for additional providers:")),console.log(Y.gray(" \u2022 Ollama - for local/cloud Ollama models")),console.log(Y.gray(" \u2022 Z.AI - for Z.AI GLM models")),console.log(Y.gray(" \u2022 MiniMax - for MiniMax models")),console.log(""),console.log(Y.yellow('This step is OPTIONAL - you can configure these later with "compass setup --api-key".')),console.log("");let{configureAdditionalProviders:S}=await Gg.prompt([{type:"confirm",name:"configureAdditionalProviders",message:"Configure API keys for additional providers now?",default:!1}]),D=[];if(S){let F=["ollama","zai","minimax"];for(let G of F){console.log("");let{configure:V}=await Gg.prompt([{type:"confirm",name:"configure",message:`Configure ${G.toUpperCase()} API key?`,default:!1}]);if(V){let{providerKey:H}=await Gg.prompt([{type:"password",name:"providerKey",message:`Enter your ${G.toUpperCase()} API key:`,mask:"*",validate:K=>K.trim()?!0:"Please enter an API key or skip this provider."}]);D.push({provider:G,apiKey:H.trim()}),console.log(Y.green(` \u2713 ${G.toUpperCase()} API key captured`))}}}console.log(""),console.log(Y.gray("Saving settings..."));try{g&&g.trim()&&(await c.setCompassApiKey(g.trim()),M.info("Compass API key saved successfully")),await c.setApiKey(w.trim()),await c.setProviderApiKey("anthropic",w.trim()),M.info("Anthropic API key saved successfully");for(let{provider:V,apiKey:H}of D)await c.setProviderApiKey(V,H),M.info(`${V} API key saved successfully`);await(await PS()).grantConsent(s),M.info("Consent saved successfully"),rs().emit("consent-changed",{granted:!0}),console.log(""),console.log(Y.green.bold("\u2705 Setup Complete!")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("Compass has been configured successfully.")),console.log(""),console.log(Y.bold.white("Quick Tips:")),console.log(Y.gray(" \u2022 Run ")+Y.cyan("compass")+Y.gray(" to start an interactive session")),console.log(Y.gray(" \u2022 Type natural language requests to interact with Nova")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/help")+Y.gray(" to see available commands")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/model")+Y.gray(" to switch between models")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/exit")+Y.gray(" to exit Nova")),console.log(""),console.log(Y.gray("Your consent settings:")),console.log(Y.gray(" \u2022 Data Collection: ")+Y.green("Enabled (required)")),console.log(Y.gray(" \u2022 Telemetry: ")+(t?Y.green("Enabled"):Y.yellow("Disabled"))),console.log(Y.gray(" \u2022 Error Reporting: ")+(n?Y.green("Enabled"):Y.yellow("Disabled"))),console.log(""),console.log(Y.gray("API keys configured:")),console.log(Y.gray(" \u2022 Anthropic: ")+Y.green("Configured")),g&&g.trim()&&console.log(Y.gray(" \u2022 Compass: ")+Y.green("Configured"));for(let{provider:V}of D)console.log(Y.gray(` \u2022 ${V.charAt(0).toUpperCase()+V.slice(1)}: `)+Y.green("Configured"));console.log(""),console.log(Y.gray("You can modify these settings anytime with ")+Y.cyan("compass consent")+Y.gray(".")),console.log(Y.gray("To configure more API keys, run ")+Y.cyan("compass setup --api-key")+Y.gray(".")),console.log("")}catch(F){throw M.error("Failed to save setup settings",F),console.log(""),console.log(Y.red("\u274C Failed to save settings")),F instanceof Error&&console.log(Y.red(` ${F.message}`)),F}}async function Sdt(){let i=await F_r(),t=await wu();console.log(""),console.log(Y.bold.white("\u{1F527} Setup Status")),console.log(Y.dim("\u2500".repeat(50)));let n=i.missingConsent?Y.red("\u2717"):Y.green("\u2713"),s=i.missingConsent?Y.red("Not configured"):i.consentExpired?Y.yellow("Expired"):i.consentNeedsRenewal?Y.yellow("Needs renewal"):Y.green("Valid");console.log(` ${Y.gray("Consent:")} ${n} ${s}`);let c=i.missingCompassApiKey?Y.yellow("\u25CB"):Y.green("\u2713"),u=i.missingCompassApiKey?Y.yellow("Not configured (optional)"):Y.green("Configured");console.log(` ${Y.gray("Compass API Key:")} ${c} ${u}`),console.log(""),console.log(Y.bold.white(" Provider API Keys:"));let m=i.missingApiKey?Y.red("\u2717"):Y.green("\u2713"),g=i.missingApiKey?Y.red("Not configured"):Y.green("Configured");console.log(` ${Y.gray("Anthropic:")} ${m} ${g}`);let v=["ollama","zai","minimax"];for(let w of v){let S=await t.hasProviderApiKey(w),D=S?Y.green("\u2713"):Y.yellow("\u25CB"),F=S?Y.green("Configured"):Y.yellow("Not configured"),G=w.charAt(0).toUpperCase()+w.slice(1);console.log(` ${Y.gray(`${G}:`)}${" ".repeat(11-G.length)}${D} ${F}`)}console.log(""),i.required?(console.log(Y.yellow("\u26A0\uFE0F Setup is required before using Compass.")),console.log(Y.gray(' Run "compass setup" to configure.'))):(console.log(Y.green("\u2705 Compass is fully configured and ready to use.")),console.log(Y.gray(' Run "compass" to start an interactive session.'))),console.log("")}async function Edt(i){if(await _c(Eo()),i.consent){console.log(""),console.log(Y.bold.white("\u{1F4CB} Reconfigure Consent Settings")),console.log(Y.dim("\u2500".repeat(50))),console.log("");let{dataCollection:t}=await Gg.prompt([{type:"confirm",name:"dataCollection",message:"Enable data collection (required)?",default:!0}]);if(!t){console.log(Y.yellow("\u26A0\uFE0F Data collection is required. Keeping current settings."));return}let{telemetry:n}=await Gg.prompt([{type:"confirm",name:"telemetry",message:"Enable anonymous telemetry?",default:!1}]),{errorReporting:s}=await Gg.prompt([{type:"confirm",name:"errorReporting",message:"Enable error reporting?",default:!0}]),c={dataCollection:!0,telemetry:n,analytics:n,errorReporting:s};await(await PS()).grantConsent(c),console.log(Y.green("\u2705 Consent settings updated"))}if(i.apiKey){console.log(""),console.log(Y.bold.white("\u{1F511} Reconfigure API Keys")),console.log(Y.dim("\u2500".repeat(50))),console.log("");let t=await wu();console.log(Y.gray("Available providers:")),console.log(Y.gray(" 1. Anthropic (default for Claude models)")),console.log(Y.gray(" 2. Ollama (for Ollama/cloud models)")),console.log(Y.gray(" 3. Z.AI (for Z.AI GLM models)")),console.log(Y.gray(" 4. MiniMax (for MiniMax models)")),console.log("");let n=[{name:"Anthropic",value:"anthropic"},{name:"Ollama",value:"ollama"},{name:"Z.AI",value:"zai"},{name:"MiniMax",value:"minimax"}],{selectedProviders:s}=await Gg.prompt([{type:"checkbox",name:"selectedProviders",message:"Select which providers to configure:",choices:n,default:["anthropic"]}]);for(let c of s){if(console.log(""),await t.hasProviderApiKey(c)){let{confirm:g}=await Gg.prompt([{type:"confirm",name:"confirm",message:`${c.toUpperCase()} API key is already configured. Replace it?`,default:!1}]);if(!g){console.log(Y.gray(`${c.toUpperCase()} API key unchanged.`));continue}}let{apiKey:m}=await Gg.prompt([{type:"password",name:"apiKey",message:`Enter your ${c.toUpperCase()} API key:`,mask:"*",validate:g=>{let v=g.trim();return v?c==="anthropic"&&!t.validateApiKeyFormat(v)?'Invalid API key format. Anthropic keys should start with "sk-ant-"':!0:"API key is required"}}]);await t.setProviderApiKey(c,m.trim()),c==="anthropic"&&await t.setApiKey(m.trim()),console.log(Y.green(`\u2705 ${c.toUpperCase()} API key updated`))}}}function D_r(){return new qA("setup").description("Run first-time setup wizard for consent and API key configuration").option("--status","Display current setup status without running wizard").option("--consent","Reconfigure consent settings only").option("--api-key","Reconfigure API key only").option("--non-interactive","Run in non-interactive mode (requires environment variables)").option("--compass-key <compass-api-key>","Configure Compass API key non-interactively").option("--validate-key","Validate the stored Compass API key without modifying anything").action(async t=>{try{if(t.status){await Sdt();return}if(t.validateKey){await Tdt();return}if(t.compassKey){await G_r(t.compassKey);return}if(t.consent||t.apiKey){await Edt({consent:t.consent,apiKey:t.apiKey});return}if(t.nonInteractive){await N_r();return}await Cdt()}catch(n){n instanceof Error&&n.message.includes("cancelled")&&process.exit(0),M.error("Setup command failed",n),console.error(Y.red("\u274C Setup failed")),n instanceof Error&&console.error(Y.red(` ${n.message}`)),process.exit(1)}})}async function Tdt(){let i=await wu(),t=sm(),n=!1,s=!1;if(console.log(Y.bold.white("Validating stored API keys...")),console.log(""),await i.hasCompassApiKey())try{let g=await i.getCompassApiKey();if(!g)console.log(Y.red(" \u2717 Compass: Failed to retrieve stored key")),s=!0;else{let v=await t.validateApiKey(g);console.log(Y.green(` \u2713 Compass: Valid (${v.user?.email||"authenticated"})`)),n=!0}}catch(g){let v=g instanceof Error?g.message:"Unknown error";console.log(Y.red(` \u2717 Compass: Invalid (${v})`)),s=!0}else console.log(Y.yellow(" \u25CB Compass: Not configured"));if(await i.hasApiKey())try{let g=await i.getApiKey();g?i.validateApiKeyFormat(g)?(console.log(Y.green(" \u2713 Anthropic: Valid format")),n=!0):(console.log(Y.red(' \u2717 Anthropic: Invalid key format (expected "sk-ant-" prefix)')),s=!0):(console.log(Y.red(" \u2717 Anthropic: Failed to retrieve stored key")),s=!0)}catch(g){let v=g instanceof Error?g.message:"Unknown error";console.log(Y.red(` \u2717 Anthropic: Error (${v})`)),s=!0}else console.log(Y.yellow(" \u25CB Anthropic: Not configured"));let m=["ollama","zai","minimax"];for(let g of m)await i.hasProviderApiKey(g)&&(console.log(Y.green(` \u2713 ${g.charAt(0).toUpperCase()+g.slice(1)}: Configured`)),n=!0);console.log(""),n?s?(console.log(Y.yellow("\u26A0 Some API keys are invalid or missing")),console.log(Y.gray(' Run "nova setup --api-key" to reconfigure.')),process.exit(1)):console.log(Y.green("\u2705 All configured API keys are valid")):(console.log(Y.red("\u274C No valid API keys found")),console.log(Y.gray(' Run "nova setup" to configure API keys.')),process.exit(1))}async function G_r(i){let t=i.trim();if(!t)throw console.log(Y.red("\u274C Compass API key cannot be empty")),new Error("Compass API key cannot be empty");console.log(Y.gray("Validating Compass API key..."));let n=await sm();try{let c=await n.validateApiKey(t);console.log(Y.green(`\u2713 API key validated (${c.user?.email||"authenticated"})`))}catch(c){let u=c instanceof Error?c.message:"Invalid API key";throw console.log(Y.red(`\u274C API key validation failed: ${u}`)),new Error(`Compass API key validation failed: ${u}`)}await(await wu()).setCompassApiKey(t),console.log(Y.green("\u2713 Compass API key saved")),console.log(""),console.log(Y.green("\u2705 Compass API key configured successfully")),console.log("")}async function N_r(){console.log(Y.gray("Running setup in non-interactive mode...")),console.log("");let i=process.env.ANTHROPIC_API_KEY;if(!i)throw console.log(Y.red("\u274C ANTHROPIC_API_KEY environment variable is required")),console.log(Y.gray(" Set the environment variable and try again.")),new Error("ANTHROPIC_API_KEY environment variable is required");let t=await wu();if(!t.validateApiKeyFormat(i))throw console.log(Y.red("\u274C Invalid API key format in ANTHROPIC_API_KEY")),new Error("Invalid API key format");await _c(Eo());let n=process.env.COMPASS_TELEMETRY==="true",s=process.env.COMPASS_ERROR_REPORTING!=="false",c={dataCollection:!0,telemetry:n,analytics:n,errorReporting:s};await t.setApiKey(i),console.log(Y.green("\u2713 API key configured")),await(await PS()).grantConsent(c),console.log(Y.green("\u2713 Consent configured")),rs().emit("consent-changed",{granted:!0}),console.log(""),console.log(Y.green("\u2705 Non-interactive setup complete")),console.log("")}async function iLn(i={}){if(i.status){await Sdt();return}if(i.validateKey){await Tdt();return}if(i.compassKey){await G_r(i.compassKey);return}if(i.consent||i.apiKey){await Edt({consent:i.consent,apiKey:i.apiKey});return}if(i.nonInteractive){await N_r();return}await Cdt()}var nLn,sLn,P_r=it(()=>{"use strict";uO();Kd();sX();G8();hb();Yx();fs();yp();ep();Uz();Rie();Zd();QV();nLn="1.0.72";sLn=D_r});var V_r={};Pp(V_r,{createConfigCommand:()=>W_r,default:()=>hLn});function Fdt(i,t=""){let n={};for(let[s,c]of Object.entries(i)){let u=t?`${t}.${s}`:s;c!==null&&typeof c=="object"&&!Array.isArray(c)?Object.assign(n,Fdt(c,u)):n[u]=c}return n}function aLn(i,t){let n=t.split("."),s=i;for(let c of n){if(s===null||typeof s!="object")return;s=s[c]}return s}function oLn(i,t,n){let s=t.split("."),c=i;for(let u=0;u<s.length-1;u++){let m=s[u];(!(m in c)||typeof c[m]!="object")&&(c[m]={}),c=c[m]}c[s[s.length-1]]=n}function cLn(i){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1;let t=Number(i);return!isNaN(t)&&i.trim()!==""?t:i.includes(",")?i.split(",").map(n=>n.trim()):i}function Ule(i){return i==null?Y.gray("not set"):typeof i=="boolean"?i?Y.green("true"):Y.red("false"):typeof i=="number"?Y.yellow(i.toString()):Array.isArray(i)?i.length===0?Y.gray("[]"):Y.cyan(`[${i.join(", ")}]`):typeof i=="string"?i.startsWith("sk-ant-")?Y.gray("\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"+i.slice(-4)):Y.white(i):Y.white(JSON.stringify(i))}async function lLn(){let i=Q_();await i.load();let t=i.getConfig();console.log(""),console.log(Y.bold.white("\u2699\uFE0F Compass Configuration")),console.log(Y.dim("\u2500".repeat(50)));let n=[{name:"Anthropic",key:"anthropic"},{name:"Project",key:"project"},{name:"Safety",key:"safety"},{name:"UI",key:"ui"},{name:"Session",key:"session"}];for(let s of n){console.log(""),console.log(Y.bold.cyan(`\u2501\u2501\u2501 ${s.name} \u2501\u2501\u2501`));let c=t[s.key],u=Fdt(c);for(let[m,g]of Object.entries(u)){let v=Y.gray(`${s.key}.${m}:`),w=Ule(g);console.log(` ${v} ${w}`)}}console.log(""),console.log(Y.dim("\u2500".repeat(50))),console.log(Y.gray('Use "compass config <key>" to view a specific setting')),console.log(Y.gray('Use "compass config <key> <value>" to modify a setting')),console.log(Y.gray('Use "compass config --set-api-key" to configure API key')),console.log("")}async function uLn(i){let t=Q_();await t.load();let n=t.getConfig(),s=aLn(n,i);if(s===void 0){console.log(Y.yellow(`Configuration key not found: ${i}`)),console.log(""),console.log(Y.gray("Available top-level keys:")),console.log(Y.gray(" anthropic, project, safety, ui, session"));return}if(typeof s=="object"&&s!==null&&!Array.isArray(s)){console.log(""),console.log(Y.bold.cyan(`${i}:`));let c=Fdt(s);for(let[u,m]of Object.entries(c))console.log(` ${Y.gray(u+":")} ${Ule(m)}`);console.log("")}else console.log(`${Y.gray(i+":")} ${Ule(s)}`)}async function dLn(i,t,n){let s=Q_();if(await s.load(),i==="anthropic.model"){let m=_0(t);if(!df(m)){console.log(Y.red(`Invalid model: ${t}`)),console.log(""),console.log(Y.gray("Available models:"));for(let[v,w]of Object.entries(k1))console.log(Y.gray(` ${v} (${w.name})`));console.log(""),console.log(Y.gray("Aliases:"));for(let[v,w]of Object.entries(UZ))console.log(Y.gray(` ${v} \u2192 ${w}`));return}t=m}let c=cLn(t),u={};oLn(u,i,c);try{n.global?(await s.saveGlobal(u),console.log(Y.green(`\u2705 Global configuration updated: ${i} = ${Ule(c)}`))):(await s.saveProject(process.cwd(),u),console.log(Y.green(`\u2705 Project configuration updated: ${i} = ${Ule(c)}`)))}catch(m){let g=m instanceof Error?m.message:"Unknown error";console.log(Y.red(`\u274C Failed to save configuration: ${g}`)),M.error("Failed to save configuration",m)}}async function pLn(){let i=await wu();if(await i.hasApiKey()){let{confirm:s}=await Gg.prompt([{type:"confirm",name:"confirm",message:"An API key is already configured. Do you want to replace it?",default:!1}]);if(!s){console.log(Y.gray("API key unchanged."));return}}let{apiKey:n}=await Gg.prompt([{type:"password",name:"apiKey",message:"Enter your Anthropic API key:",mask:"*",validate:s=>s.trim()?!0:"API key is required"}]);try{await i.setApiKey(n),console.log(Y.green("\u2705 API key saved successfully"))}catch(s){let c=s instanceof Error?s.message:"Unknown error";console.log(Y.red(`\u274C Failed to save API key: ${c}`)),M.error("Failed to save API key",s)}}function fLn(){console.log(""),console.log(Y.bold.white("\u{1F916} Available Models")),console.log(Y.dim("\u2500".repeat(50)));for(let[i,t]of Object.entries(k1))console.log(""),console.log(Y.bold.cyan(t.name)),console.log(` ${Y.gray("ID:")} ${i}`),console.log(` ${Y.gray("Context Window:")} ${t.contextWindow.toLocaleString()} tokens`),console.log(` ${Y.gray("Max Output:")} ${t.maxOutputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Input Price:")} $${t.pricing.inputPricePerMillion}/M tokens`),console.log(` ${Y.gray("Output Price:")} $${t.pricing.outputPricePerMillion}/M tokens`);console.log(""),console.log(Y.bold.white("Aliases")),console.log(Y.dim("\u2500".repeat(50)));for(let[i,t]of Object.entries(UZ)){let n=k1[t];console.log(` ${Y.yellow(i)} \u2192 ${n?.name||t}`)}console.log("")}async function mLn(i){if(!i.force){let{confirm:n}=await Gg.prompt([{type:"confirm",name:"confirm",message:i.global?"Reset global configuration to defaults?":"Reset project configuration to defaults?",default:!1}]);if(!n){console.log(Y.gray("Configuration unchanged."));return}}let t=Q_();try{i.global?(await t.saveGlobal({}),console.log(Y.green("\u2705 Global configuration reset to defaults"))):(await t.saveProject(process.cwd(),{}),console.log(Y.green("\u2705 Project configuration reset to defaults")))}catch(n){let s=n instanceof Error?n.message:"Unknown error";console.log(Y.red(`\u274C Failed to reset configuration: ${s}`)),M.error("Failed to reset configuration",n)}}function W_r(){return new qA("config").description("View or modify configuration settings").argument("[key]","Configuration key to view or set").argument("[value]","New value to set").option("-g, --global","Apply to global configuration").option("--set-api-key","Interactively set the API key").option("--list-models","List available models and aliases").option("--reset","Reset configuration to defaults").option("--force","Skip confirmation prompts").action(async(t,n,s)=>{try{if(s.setApiKey){await pLn();return}if(s.listModels){fLn();return}if(s.reset){await mLn({global:s.global,force:s.force});return}t?n?await dLn(t,n,{global:s.global}):await uLn(t):await lLn()}catch(c){let u=c instanceof Error?c.message:"Unknown error";console.log(Y.red(`\u274C Config command failed: ${u}`)),M.error("Config command failed",c),process.exit(1)}})}var hLn,Z_r=it(()=>{"use strict";uO();Kd();sX();OG();hb();fs();vv();hLn=W_r});var H_r={};Pp(H_r,{createLogsCommand:()=>L_r,default:()=>ILn});import XY from"path";import _Ln from"readline";function M_r(i,t=!1){let n=gLn[i.level]||Y.white,s=Y_r[i.event]||"\u2022",c=new Date(i.ts).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit"}),u=`${Y.gray(c)} ${n(s)} ${Y.bold(n(i.event))} ${Y.gray(`[${i.component}]`)}`;if(t&&i.data){let m=JSON.stringify(i.data,null,2).split(`
|
|
4214
|
+
Validating API key...`)),await u.validateApiKey(V),console.log(Y.green(" \u2713 API key validated successfully")),!0}catch(H){return`API key validation failed: ${H instanceof Error?H.message:"Invalid API key"}`}}}]);g=F}let v=null;if(g&&g.trim()){console.log(""),console.log(Y.gray("Checking for Anthropic API key in your Compass account...")),M.info("Attempting to fetch Anthropic API key from Compass backend");try{M.debug("Calling getLLMConfig with model: claude-sonnet-4-5-20250929");let F=await u.getLLMConfig("claude-sonnet-4-5-20250929",g.trim());if(M.debug("LLM config received",{hasConfig:!!F,hasApiKey:!!F?.api_key,model:F?.model,apiType:F?.api_type,encryptedKeyLength:F?.api_key?.length||0}),F&&F.api_key){console.log(Y.gray(" \u2713 Found encrypted API key in your account")),M.info("Encrypted API key found, attempting decryption");try{M.debug("Starting Fernet decryption with password: CLAUDE"),v=zV(F.api_key,"CLAUDE"),M.info("\u2713 Anthropic API key successfully decrypted",{keyLength:v.length}),console.log(Y.green(" \u2713 Anthropic API key retrieved from your Compass account"))}catch(G){let V=G instanceof Error?G.message:"Unknown error";M.error("Failed to decrypt Anthropic API key",{error:V}),console.log(Y.yellow(" \u26A0 Failed to decrypt API key from Compass account")),console.log(Y.gray(` Reason: ${V}`)),v=null}}else M.warn("No API key found in LLM config response"),console.log(Y.yellow(" \u26A0 No Anthropic API key found in your Compass account"))}catch(F){let G=F instanceof Error?F.message:"Unknown error";M.error("Failed to fetch LLM config from Compass backend",{error:G}),console.log(Y.yellow(" \u26A0 Could not retrieve API key from Compass account")),console.log(Y.gray(` Reason: ${G}`)),v=null}}else console.log(""),console.log(Y.yellow("Skipping Compass API key configuration"));let w;if(v)w=v,console.log(""),console.log(Y.gray("Skipping Anthropic API key entry (already configured in your Compass account)"));else{console.log(""),console.log(Y.bold.white("\u{1F511} Step 5: Anthropic API Key")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("Enter your Anthropic API key to enable Claude integration.")),console.log(Y.gray("Get your API key at: ")+Y.blue.underline("https://console.anthropic.com/")),console.log(""),console.log(Y.gray("Your API key will be:")),console.log(Y.green(" \u2713 Stored securely using system keychain when available")),console.log(Y.green(" \u2713 Encrypted with AES-256 as fallback")),console.log(Y.green(" \u2713 Never transmitted except to Anthropic's API")),console.log("");let{apiKey:F}=await Gg.prompt([{type:"password",name:"apiKey",message:"Enter your Anthropic API key:",mask:"*",validate:G=>{let V=G.trim();return V?c.validateApiKeyFormat(V)?!0:'Invalid API key format. Anthropic API keys should start with "sk-ant-"':"API key is required to use Compass"}}]);w=F}console.log(""),console.log(Y.bold.white("\u{1F50C} Step 6: Additional Providers (Optional)")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("You can configure API keys for additional providers:")),console.log(Y.gray(" \u2022 Ollama - for local/cloud Ollama models")),console.log(Y.gray(" \u2022 Z.AI - for Z.AI GLM models")),console.log(Y.gray(" \u2022 MiniMax - for MiniMax models")),console.log(""),console.log(Y.yellow('This step is OPTIONAL - you can configure these later with "compass setup --api-key".')),console.log("");let{configureAdditionalProviders:S}=await Gg.prompt([{type:"confirm",name:"configureAdditionalProviders",message:"Configure API keys for additional providers now?",default:!1}]),D=[];if(S){let F=["ollama","zai","minimax"];for(let G of F){console.log("");let{configure:V}=await Gg.prompt([{type:"confirm",name:"configure",message:`Configure ${G.toUpperCase()} API key?`,default:!1}]);if(V){let{providerKey:H}=await Gg.prompt([{type:"password",name:"providerKey",message:`Enter your ${G.toUpperCase()} API key:`,mask:"*",validate:K=>K.trim()?!0:"Please enter an API key or skip this provider."}]);D.push({provider:G,apiKey:H.trim()}),console.log(Y.green(` \u2713 ${G.toUpperCase()} API key captured`))}}}console.log(""),console.log(Y.gray("Saving settings..."));try{g&&g.trim()&&(await c.setCompassApiKey(g.trim()),M.info("Compass API key saved successfully")),await c.setApiKey(w.trim()),await c.setProviderApiKey("anthropic",w.trim()),M.info("Anthropic API key saved successfully");for(let{provider:V,apiKey:H}of D)await c.setProviderApiKey(V,H),M.info(`${V} API key saved successfully`);await(await PS()).grantConsent(s),M.info("Consent saved successfully"),rs().emit("consent-changed",{granted:!0}),console.log(""),console.log(Y.green.bold("\u2705 Setup Complete!")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray("Compass has been configured successfully.")),console.log(""),console.log(Y.bold.white("Quick Tips:")),console.log(Y.gray(" \u2022 Run ")+Y.cyan("compass")+Y.gray(" to start an interactive session")),console.log(Y.gray(" \u2022 Type natural language requests to interact with Nova")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/help")+Y.gray(" to see available commands")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/model")+Y.gray(" to switch between models")),console.log(Y.gray(" \u2022 Use ")+Y.cyan("/exit")+Y.gray(" to exit Nova")),console.log(""),console.log(Y.gray("Your consent settings:")),console.log(Y.gray(" \u2022 Data Collection: ")+Y.green("Enabled (required)")),console.log(Y.gray(" \u2022 Telemetry: ")+(t?Y.green("Enabled"):Y.yellow("Disabled"))),console.log(Y.gray(" \u2022 Error Reporting: ")+(n?Y.green("Enabled"):Y.yellow("Disabled"))),console.log(""),console.log(Y.gray("API keys configured:")),console.log(Y.gray(" \u2022 Anthropic: ")+Y.green("Configured")),g&&g.trim()&&console.log(Y.gray(" \u2022 Compass: ")+Y.green("Configured"));for(let{provider:V}of D)console.log(Y.gray(` \u2022 ${V.charAt(0).toUpperCase()+V.slice(1)}: `)+Y.green("Configured"));console.log(""),console.log(Y.gray("You can modify these settings anytime with ")+Y.cyan("compass consent")+Y.gray(".")),console.log(Y.gray("To configure more API keys, run ")+Y.cyan("compass setup --api-key")+Y.gray(".")),console.log("")}catch(F){throw M.error("Failed to save setup settings",F),console.log(""),console.log(Y.red("\u274C Failed to save settings")),F instanceof Error&&console.log(Y.red(` ${F.message}`)),F}}async function Sdt(){let i=await F_r(),t=await wu();console.log(""),console.log(Y.bold.white("\u{1F527} Setup Status")),console.log(Y.dim("\u2500".repeat(50)));let n=i.missingConsent?Y.red("\u2717"):Y.green("\u2713"),s=i.missingConsent?Y.red("Not configured"):i.consentExpired?Y.yellow("Expired"):i.consentNeedsRenewal?Y.yellow("Needs renewal"):Y.green("Valid");console.log(` ${Y.gray("Consent:")} ${n} ${s}`);let c=i.missingCompassApiKey?Y.yellow("\u25CB"):Y.green("\u2713"),u=i.missingCompassApiKey?Y.yellow("Not configured (optional)"):Y.green("Configured");console.log(` ${Y.gray("Compass API Key:")} ${c} ${u}`),console.log(""),console.log(Y.bold.white(" Provider API Keys:"));let m=i.missingApiKey?Y.red("\u2717"):Y.green("\u2713"),g=i.missingApiKey?Y.red("Not configured"):Y.green("Configured");console.log(` ${Y.gray("Anthropic:")} ${m} ${g}`);let v=["ollama","zai","minimax"];for(let w of v){let S=await t.hasProviderApiKey(w),D=S?Y.green("\u2713"):Y.yellow("\u25CB"),F=S?Y.green("Configured"):Y.yellow("Not configured"),G=w.charAt(0).toUpperCase()+w.slice(1);console.log(` ${Y.gray(`${G}:`)}${" ".repeat(11-G.length)}${D} ${F}`)}console.log(""),i.required?(console.log(Y.yellow("\u26A0\uFE0F Setup is required before using Compass.")),console.log(Y.gray(' Run "compass setup" to configure.'))):(console.log(Y.green("\u2705 Compass is fully configured and ready to use.")),console.log(Y.gray(' Run "compass" to start an interactive session.'))),console.log("")}async function Edt(i){if(await _c(Eo()),i.consent){console.log(""),console.log(Y.bold.white("\u{1F4CB} Reconfigure Consent Settings")),console.log(Y.dim("\u2500".repeat(50))),console.log("");let{dataCollection:t}=await Gg.prompt([{type:"confirm",name:"dataCollection",message:"Enable data collection (required)?",default:!0}]);if(!t){console.log(Y.yellow("\u26A0\uFE0F Data collection is required. Keeping current settings."));return}let{telemetry:n}=await Gg.prompt([{type:"confirm",name:"telemetry",message:"Enable anonymous telemetry?",default:!1}]),{errorReporting:s}=await Gg.prompt([{type:"confirm",name:"errorReporting",message:"Enable error reporting?",default:!0}]),c={dataCollection:!0,telemetry:n,analytics:n,errorReporting:s};await(await PS()).grantConsent(c),console.log(Y.green("\u2705 Consent settings updated"))}if(i.apiKey){console.log(""),console.log(Y.bold.white("\u{1F511} Reconfigure API Keys")),console.log(Y.dim("\u2500".repeat(50))),console.log("");let t=await wu();console.log(Y.gray("Available providers:")),console.log(Y.gray(" 1. Anthropic (default for Claude models)")),console.log(Y.gray(" 2. Ollama (for Ollama/cloud models)")),console.log(Y.gray(" 3. Z.AI (for Z.AI GLM models)")),console.log(Y.gray(" 4. MiniMax (for MiniMax models)")),console.log("");let n=[{name:"Anthropic",value:"anthropic"},{name:"Ollama",value:"ollama"},{name:"Z.AI",value:"zai"},{name:"MiniMax",value:"minimax"}],{selectedProviders:s}=await Gg.prompt([{type:"checkbox",name:"selectedProviders",message:"Select which providers to configure:",choices:n,default:["anthropic"]}]);for(let c of s){if(console.log(""),await t.hasProviderApiKey(c)){let{confirm:g}=await Gg.prompt([{type:"confirm",name:"confirm",message:`${c.toUpperCase()} API key is already configured. Replace it?`,default:!1}]);if(!g){console.log(Y.gray(`${c.toUpperCase()} API key unchanged.`));continue}}let{apiKey:m}=await Gg.prompt([{type:"password",name:"apiKey",message:`Enter your ${c.toUpperCase()} API key:`,mask:"*",validate:g=>{let v=g.trim();return v?c==="anthropic"&&!t.validateApiKeyFormat(v)?'Invalid API key format. Anthropic keys should start with "sk-ant-"':!0:"API key is required"}}]);await t.setProviderApiKey(c,m.trim()),c==="anthropic"&&await t.setApiKey(m.trim()),console.log(Y.green(`\u2705 ${c.toUpperCase()} API key updated`))}}}function D_r(){return new qA("setup").description("Run first-time setup wizard for consent and API key configuration").option("--status","Display current setup status without running wizard").option("--consent","Reconfigure consent settings only").option("--api-key","Reconfigure API key only").option("--non-interactive","Run in non-interactive mode (requires environment variables)").option("--compass-key <compass-api-key>","Configure Compass API key non-interactively").option("--validate-key","Validate the stored Compass API key without modifying anything").action(async t=>{try{if(t.status){await Sdt();return}if(t.validateKey){await Tdt();return}if(t.compassKey){await G_r(t.compassKey);return}if(t.consent||t.apiKey){await Edt({consent:t.consent,apiKey:t.apiKey});return}if(t.nonInteractive){await N_r();return}await Cdt()}catch(n){n instanceof Error&&n.message.includes("cancelled")&&process.exit(0),M.error("Setup command failed",n),console.error(Y.red("\u274C Setup failed")),n instanceof Error&&console.error(Y.red(` ${n.message}`)),process.exit(1)}})}async function Tdt(){let i=await wu(),t=sm(),n=!1,s=!1;if(console.log(Y.bold.white("Validating stored API keys...")),console.log(""),await i.hasCompassApiKey())try{let g=await i.getCompassApiKey();if(!g)console.log(Y.red(" \u2717 Compass: Failed to retrieve stored key")),s=!0;else{let v=await t.validateApiKey(g);console.log(Y.green(` \u2713 Compass: Valid (${v.user?.email||"authenticated"})`)),n=!0}}catch(g){let v=g instanceof Error?g.message:"Unknown error";console.log(Y.red(` \u2717 Compass: Invalid (${v})`)),s=!0}else console.log(Y.yellow(" \u25CB Compass: Not configured"));if(await i.hasApiKey())try{let g=await i.getApiKey();g?i.validateApiKeyFormat(g)?(console.log(Y.green(" \u2713 Anthropic: Valid format")),n=!0):(console.log(Y.red(' \u2717 Anthropic: Invalid key format (expected "sk-ant-" prefix)')),s=!0):(console.log(Y.red(" \u2717 Anthropic: Failed to retrieve stored key")),s=!0)}catch(g){let v=g instanceof Error?g.message:"Unknown error";console.log(Y.red(` \u2717 Anthropic: Error (${v})`)),s=!0}else console.log(Y.yellow(" \u25CB Anthropic: Not configured"));let m=["ollama","zai","minimax"];for(let g of m)await i.hasProviderApiKey(g)&&(console.log(Y.green(` \u2713 ${g.charAt(0).toUpperCase()+g.slice(1)}: Configured`)),n=!0);console.log(""),n?s?(console.log(Y.yellow("\u26A0 Some API keys are invalid or missing")),console.log(Y.gray(' Run "nova setup --api-key" to reconfigure.')),process.exit(1)):console.log(Y.green("\u2705 All configured API keys are valid")):(console.log(Y.red("\u274C No valid API keys found")),console.log(Y.gray(' Run "nova setup" to configure API keys.')),process.exit(1))}async function G_r(i){let t=i.trim();if(!t)throw console.log(Y.red("\u274C Compass API key cannot be empty")),new Error("Compass API key cannot be empty");console.log(Y.gray("Validating Compass API key..."));let n=await sm();try{let c=await n.validateApiKey(t);console.log(Y.green(`\u2713 API key validated (${c.user?.email||"authenticated"})`))}catch(c){let u=c instanceof Error?c.message:"Invalid API key";throw console.log(Y.red(`\u274C API key validation failed: ${u}`)),new Error(`Compass API key validation failed: ${u}`)}await(await wu()).setCompassApiKey(t),console.log(Y.green("\u2713 Compass API key saved")),console.log(""),console.log(Y.green("\u2705 Compass API key configured successfully")),console.log("")}async function N_r(){console.log(Y.gray("Running setup in non-interactive mode...")),console.log("");let i=process.env.ANTHROPIC_API_KEY;if(!i)throw console.log(Y.red("\u274C ANTHROPIC_API_KEY environment variable is required")),console.log(Y.gray(" Set the environment variable and try again.")),new Error("ANTHROPIC_API_KEY environment variable is required");let t=await wu();if(!t.validateApiKeyFormat(i))throw console.log(Y.red("\u274C Invalid API key format in ANTHROPIC_API_KEY")),new Error("Invalid API key format");await _c(Eo());let n=process.env.COMPASS_TELEMETRY==="true",s=process.env.COMPASS_ERROR_REPORTING!=="false",c={dataCollection:!0,telemetry:n,analytics:n,errorReporting:s};await t.setApiKey(i),console.log(Y.green("\u2713 API key configured")),await(await PS()).grantConsent(c),console.log(Y.green("\u2713 Consent configured")),rs().emit("consent-changed",{granted:!0}),console.log(""),console.log(Y.green("\u2705 Non-interactive setup complete")),console.log("")}async function iLn(i={}){if(i.status){await Sdt();return}if(i.validateKey){await Tdt();return}if(i.compassKey){await G_r(i.compassKey);return}if(i.consent||i.apiKey){await Edt({consent:i.consent,apiKey:i.apiKey});return}if(i.nonInteractive){await N_r();return}await Cdt()}var nLn,sLn,P_r=it(()=>{"use strict";uO();Kd();sX();G8();hb();Yx();fs();yp();ep();Uz();Rie();Zd();QV();nLn="1.0.73";sLn=D_r});var V_r={};Pp(V_r,{createConfigCommand:()=>W_r,default:()=>hLn});function Fdt(i,t=""){let n={};for(let[s,c]of Object.entries(i)){let u=t?`${t}.${s}`:s;c!==null&&typeof c=="object"&&!Array.isArray(c)?Object.assign(n,Fdt(c,u)):n[u]=c}return n}function aLn(i,t){let n=t.split("."),s=i;for(let c of n){if(s===null||typeof s!="object")return;s=s[c]}return s}function oLn(i,t,n){let s=t.split("."),c=i;for(let u=0;u<s.length-1;u++){let m=s[u];(!(m in c)||typeof c[m]!="object")&&(c[m]={}),c=c[m]}c[s[s.length-1]]=n}function cLn(i){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1;let t=Number(i);return!isNaN(t)&&i.trim()!==""?t:i.includes(",")?i.split(",").map(n=>n.trim()):i}function Ule(i){return i==null?Y.gray("not set"):typeof i=="boolean"?i?Y.green("true"):Y.red("false"):typeof i=="number"?Y.yellow(i.toString()):Array.isArray(i)?i.length===0?Y.gray("[]"):Y.cyan(`[${i.join(", ")}]`):typeof i=="string"?i.startsWith("sk-ant-")?Y.gray("\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"+i.slice(-4)):Y.white(i):Y.white(JSON.stringify(i))}async function lLn(){let i=Q_();await i.load();let t=i.getConfig();console.log(""),console.log(Y.bold.white("\u2699\uFE0F Compass Configuration")),console.log(Y.dim("\u2500".repeat(50)));let n=[{name:"Anthropic",key:"anthropic"},{name:"Project",key:"project"},{name:"Safety",key:"safety"},{name:"UI",key:"ui"},{name:"Session",key:"session"}];for(let s of n){console.log(""),console.log(Y.bold.cyan(`\u2501\u2501\u2501 ${s.name} \u2501\u2501\u2501`));let c=t[s.key],u=Fdt(c);for(let[m,g]of Object.entries(u)){let v=Y.gray(`${s.key}.${m}:`),w=Ule(g);console.log(` ${v} ${w}`)}}console.log(""),console.log(Y.dim("\u2500".repeat(50))),console.log(Y.gray('Use "compass config <key>" to view a specific setting')),console.log(Y.gray('Use "compass config <key> <value>" to modify a setting')),console.log(Y.gray('Use "compass config --set-api-key" to configure API key')),console.log("")}async function uLn(i){let t=Q_();await t.load();let n=t.getConfig(),s=aLn(n,i);if(s===void 0){console.log(Y.yellow(`Configuration key not found: ${i}`)),console.log(""),console.log(Y.gray("Available top-level keys:")),console.log(Y.gray(" anthropic, project, safety, ui, session"));return}if(typeof s=="object"&&s!==null&&!Array.isArray(s)){console.log(""),console.log(Y.bold.cyan(`${i}:`));let c=Fdt(s);for(let[u,m]of Object.entries(c))console.log(` ${Y.gray(u+":")} ${Ule(m)}`);console.log("")}else console.log(`${Y.gray(i+":")} ${Ule(s)}`)}async function dLn(i,t,n){let s=Q_();if(await s.load(),i==="anthropic.model"){let m=_0(t);if(!df(m)){console.log(Y.red(`Invalid model: ${t}`)),console.log(""),console.log(Y.gray("Available models:"));for(let[v,w]of Object.entries(k1))console.log(Y.gray(` ${v} (${w.name})`));console.log(""),console.log(Y.gray("Aliases:"));for(let[v,w]of Object.entries(UZ))console.log(Y.gray(` ${v} \u2192 ${w}`));return}t=m}let c=cLn(t),u={};oLn(u,i,c);try{n.global?(await s.saveGlobal(u),console.log(Y.green(`\u2705 Global configuration updated: ${i} = ${Ule(c)}`))):(await s.saveProject(process.cwd(),u),console.log(Y.green(`\u2705 Project configuration updated: ${i} = ${Ule(c)}`)))}catch(m){let g=m instanceof Error?m.message:"Unknown error";console.log(Y.red(`\u274C Failed to save configuration: ${g}`)),M.error("Failed to save configuration",m)}}async function pLn(){let i=await wu();if(await i.hasApiKey()){let{confirm:s}=await Gg.prompt([{type:"confirm",name:"confirm",message:"An API key is already configured. Do you want to replace it?",default:!1}]);if(!s){console.log(Y.gray("API key unchanged."));return}}let{apiKey:n}=await Gg.prompt([{type:"password",name:"apiKey",message:"Enter your Anthropic API key:",mask:"*",validate:s=>s.trim()?!0:"API key is required"}]);try{await i.setApiKey(n),console.log(Y.green("\u2705 API key saved successfully"))}catch(s){let c=s instanceof Error?s.message:"Unknown error";console.log(Y.red(`\u274C Failed to save API key: ${c}`)),M.error("Failed to save API key",s)}}function fLn(){console.log(""),console.log(Y.bold.white("\u{1F916} Available Models")),console.log(Y.dim("\u2500".repeat(50)));for(let[i,t]of Object.entries(k1))console.log(""),console.log(Y.bold.cyan(t.name)),console.log(` ${Y.gray("ID:")} ${i}`),console.log(` ${Y.gray("Context Window:")} ${t.contextWindow.toLocaleString()} tokens`),console.log(` ${Y.gray("Max Output:")} ${t.maxOutputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Input Price:")} $${t.pricing.inputPricePerMillion}/M tokens`),console.log(` ${Y.gray("Output Price:")} $${t.pricing.outputPricePerMillion}/M tokens`);console.log(""),console.log(Y.bold.white("Aliases")),console.log(Y.dim("\u2500".repeat(50)));for(let[i,t]of Object.entries(UZ)){let n=k1[t];console.log(` ${Y.yellow(i)} \u2192 ${n?.name||t}`)}console.log("")}async function mLn(i){if(!i.force){let{confirm:n}=await Gg.prompt([{type:"confirm",name:"confirm",message:i.global?"Reset global configuration to defaults?":"Reset project configuration to defaults?",default:!1}]);if(!n){console.log(Y.gray("Configuration unchanged."));return}}let t=Q_();try{i.global?(await t.saveGlobal({}),console.log(Y.green("\u2705 Global configuration reset to defaults"))):(await t.saveProject(process.cwd(),{}),console.log(Y.green("\u2705 Project configuration reset to defaults")))}catch(n){let s=n instanceof Error?n.message:"Unknown error";console.log(Y.red(`\u274C Failed to reset configuration: ${s}`)),M.error("Failed to reset configuration",n)}}function W_r(){return new qA("config").description("View or modify configuration settings").argument("[key]","Configuration key to view or set").argument("[value]","New value to set").option("-g, --global","Apply to global configuration").option("--set-api-key","Interactively set the API key").option("--list-models","List available models and aliases").option("--reset","Reset configuration to defaults").option("--force","Skip confirmation prompts").action(async(t,n,s)=>{try{if(s.setApiKey){await pLn();return}if(s.listModels){fLn();return}if(s.reset){await mLn({global:s.global,force:s.force});return}t?n?await dLn(t,n,{global:s.global}):await uLn(t):await lLn()}catch(c){let u=c instanceof Error?c.message:"Unknown error";console.log(Y.red(`\u274C Config command failed: ${u}`)),M.error("Config command failed",c),process.exit(1)}})}var hLn,Z_r=it(()=>{"use strict";uO();Kd();sX();OG();hb();fs();vv();hLn=W_r});var H_r={};Pp(H_r,{createLogsCommand:()=>L_r,default:()=>ILn});import XY from"path";import _Ln from"readline";function M_r(i,t=!1){let n=gLn[i.level]||Y.white,s=Y_r[i.event]||"\u2022",c=new Date(i.ts).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit"}),u=`${Y.gray(c)} ${n(s)} ${Y.bold(n(i.event))} ${Y.gray(`[${i.component}]`)}`;if(t&&i.data){let m=JSON.stringify(i.data,null,2).split(`
|
|
4215
4215
|
`).map((g,v)=>v===0?g:` ${g}`).join(`
|
|
4216
4216
|
`);u+=`
|
|
4217
4217
|
${Y.dim(m)}`}else if(i.data){let m=Object.keys(i.data);if(m.length>0){let g=m.slice(0,3).map(v=>{let w=i.data[v];return typeof w=="string"&&w.length>30?`${v}=${w.substring(0,27)}...`:`${v}=${w}`}).join(", ");u+=` ${Y.dim(g)}`}}return u}async function Ddt(i){let t=[];if(!await zY.default.pathExists(i))return t;let n=zY.default.createReadStream(i),s=_Ln.createInterface({input:n,crlfDelay:1/0});for await(let c of s)if(c.trim())try{t.push(JSON.parse(c))}catch{}return t}function O_r(i){let t=XY.join(qc(i),".logs"),n=new Date,s=String(n.getDate()).padStart(2,"0"),c=String(n.getMonth()+1).padStart(2,"0"),u=String(n.getFullYear()).slice(-2);return XY.join(t,`system-${s}-${c}-${u}.jsonl`)}async function yLn(i){let t=XY.join(qc(i),".logs");return await zY.default.pathExists(t)?(await zY.default.readdir(t)).filter(s=>s.startsWith("system-")&&s.endsWith(".jsonl")).sort().reverse():[]}function bLn(i){let t={},n={debug:0,info:0,warn:0,error:0};for(let c of i)t[c.event]=(t[c.event]||0)+1,n[c.level]++;console.log(""),console.log(Y.bold.cyan("\u{1F4CA} Event Summary")),console.log(Y.dim("\u2500".repeat(50))),console.log(` ${Y.gray("Total Events:")} ${i.length}`),console.log(` ${Y.blue("Info:")} ${n.info}`),console.log(` ${Y.yellow("Warn:")} ${n.warn}`),console.log(` ${Y.red("Error:")} ${n.error}`),console.log(` ${Y.gray("Debug:")} ${n.debug}`),console.log(""),console.log(Y.bold("By Type:"));let s=Object.entries(t).sort((c,u)=>u[1]-c[1]).slice(0,10);for(let[c,u]of s){let m=Y_r[c]||"\u2022";console.log(` ${m} ${c}: ${u}`)}console.log("")}function L_r(){let i=new qA("logs");return i.description("View system event logs for debugging and auditing").argument("[action]","Action: tail, errors, filter, summary, list, path","tail").option("-n, --lines <number>","Number of lines to show","30").option("-f, --filter <pattern>","Filter by event type, level, or component").option("-v, --verbose","Show verbose output with full event data").option("--json","Output in JSON format").option("--file <filename>","Specify log file to read (from .compass/.logs/)").action(async(t,n)=>{try{let s=process.cwd(),c=O_r(s);if(n.file){let u=XY.join(qc(s),".logs");c=XY.join(u,n.file)}switch(t.toLowerCase()){case"list":case"ls":{let u=await yLn(s);if(console.log(""),console.log(Y.bold.cyan("\u{1F4C1} Available Log Files")),console.log(Y.dim("\u2500".repeat(50))),u.length===0)console.log(Y.gray(" No log files found.")),console.log(Y.gray(" Logs are created when you start a session."));else for(let m of u){let g=XY.join(qc(s),".logs",m),w=((await zY.default.stat(g)).size/1024).toFixed(1),S=g===O_r(s);console.log(` ${S?Y.green("*"):" "} ${m} ${Y.gray(`(${w} KB)`)}`)}console.log("");break}case"tail":case"t":default:{let u=parseInt(n.lines)||30,m=await Ddt(c);if(n.filter){let v=n.filter.toLowerCase();m=m.filter(w=>w.event.toLowerCase().includes(v)||w.level.toLowerCase()===v||w.component.toLowerCase().includes(v))}let g=m.slice(-u);if(n.json){console.log(JSON.stringify(g,null,2));return}if(console.log(""),console.log(Y.bold.cyan(`\u{1F4CB} System Event Logs ${n.filter?`(filtered: ${n.filter})`:""}`)),console.log(Y.dim("\u2500".repeat(60))),g.length===0)console.log(Y.gray(" No events recorded yet.")),console.log(Y.gray(" Events will appear as you interact with the system."));else{for(let v of g)console.log(M_r(v,n.verbose));m.length>u&&console.log(Y.gray(` ... showing last ${u} of ${m.length} events`))}console.log("");break}case"errors":case"e":{let m=(await Ddt(c)).filter(g=>g.level==="error"||g.level==="warn");if(n.json){console.log(JSON.stringify(m,null,2));return}if(console.log(""),console.log(Y.bold.cyan("\u26A0\uFE0F Errors and Warnings")),console.log(Y.dim("\u2500".repeat(60))),m.length===0)console.log(Y.green(" No errors or warnings recorded."));else{let g=m.slice(-parseInt(n.lines)||-30);for(let v of g)console.log(M_r(v,!0));m.length>30&&console.log(Y.gray(` ... and ${m.length-30} more`))}console.log("");break}case"summary":case"s":{let u=await Ddt(c);if(n.json){let m={debug:0,info:0,warn:0,error:0},g={};for(let v of u)g[v.event]=(g[v.event]||0)+1,m[v.level]++;console.log(JSON.stringify({total:u.length,byLevel:m,byType:g},null,2));return}bLn(u);break}case"path":case"p":{let u=XY.join(qc(s),".logs");console.log(""),console.log(Y.bold.cyan("\u{1F4CD} Log File Locations")),console.log(Y.dim("\u2500".repeat(50))),console.log(` ${Y.gray("Logs Directory:")} ${u}`),console.log(` ${Y.gray("Current File:")} ${c}`),console.log(` ${Y.gray("Exists:")} ${await zY.default.pathExists(c)?Y.green("Yes"):Y.yellow("No")}`),console.log("");break}case"help":case"h":{console.log(""),console.log(Y.bold.cyan("compass logs - System Event Log Viewer")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.bold("Usage:")),console.log(` ${Y.yellow("compass logs")} Show last 30 events`),console.log(` ${Y.yellow("compass logs tail -n 50")} Show last 50 events`),console.log(` ${Y.yellow("compass logs errors")} Show errors and warnings`),console.log(` ${Y.yellow("compass logs summary")} Show event statistics`),console.log(` ${Y.yellow("compass logs list")} List available log files`),console.log(` ${Y.yellow("compass logs path")} Show log file location`),console.log(""),console.log(Y.bold("Options:")),console.log(` ${Y.yellow("-n, --lines <N>")} Number of events to show`),console.log(` ${Y.yellow("-f, --filter <X>")} Filter by type/level/component`),console.log(` ${Y.yellow("-v, --verbose")} Show full event data`),console.log(` ${Y.yellow("--json")} Output in JSON format`),console.log(` ${Y.yellow("--file <name>")} Read specific log file`),console.log(""),console.log(Y.bold("Examples:")),console.log(Y.gray(" compass logs --filter error")),console.log(Y.gray(" compass logs --filter bash_executed -v")),console.log(Y.gray(" compass logs summary --json")),console.log(Y.gray(" compass logs --file system-01-01-25.jsonl")),console.log("");break}}}catch(s){M.error("Logs command failed",s),console.error(Y.red("\u274C Failed to read system event logs")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i}var zY,gLn,Y_r,ILn,J_r=it(()=>{"use strict";uO();Kd();zY=Fa(Sy(),1);fs();ep();gLn={debug:Y.gray,info:Y.blue,warn:Y.yellow,error:Y.red},Y_r={session_start:"\u25B6",session_end:"\u25A0",bash_executed:"$",file_read:"\u{1F4D6}",file_write:"\u{1F4DD}",file_delete:"\u{1F5D1}",file_rename:"\u{1F4CB}",tool_executed:"\u{1F527}",tool_registered:"\u2795",tool_failed:"\u274C",config_changed:"\u2699",provider_changed:"\u{1F504}",model_changed:"\u{1F916}",mcp_connected:"\u{1F50C}",mcp_disconnected:"\u{1F50C}",mcp_error:"\u26A0",workflow_started:"\u25B6",workflow_completed:"\u2713",workflow_failed:"\u2717",step_started:"\u2192",step_completed:"\u2713",step_failed:"\u2717",approval_requested:"\u2753",approval_granted:"\u2713",approval_denied:"\u2717",approval_timeout:"\u23F0",context_loaded:"\u{1F4E5}",context_saved:"\u{1F4E4}",context_compacted:"\u{1F5DC}",rate_limited:"\u{1F6AB}",retry_attempted:"\u{1F504}",api_error:"\u26A0",cache_hit:"\u{1F4BE}",cache_miss:"\u{1F4A8}",error:"\u274C"};ILn=L_r});var U_r={};Pp(U_r,{createMCPCommand:()=>B_r,default:()=>xLn});function vLn(i){let t={};for(let n of i){let[s,...c]=n.split("=");s&&c.length>0&&(t[s]=c.join("="))}return t}function Gdt(i){switch(i){case"http":return Y.cyan("HTTP");case"sse":return Y.yellow("SSE");case"stdio":return Y.green("stdio");default:return Y.gray(i)}}function Ndt(i){switch(i){case"local":return Y.blue("local");case"project":return Y.magenta("project");case"user":return Y.cyan("user");default:return Y.gray(i)}}function B_r(){let i=new qA("mcp").description("Manage Model Context Protocol (MCP) servers").enablePositionalOptions().passThroughOptions().addHelpText("after",`
|
|
@@ -4305,7 +4305,7 @@ The \`enter_plan_mode\` tool will generate a structured plan including:
|
|
|
4305
4305
|
`);let g=tgr.createInterface({input:process.stdin,terminal:!1}),v=new Xle({stream:process.stdout,maxQueueSize:1e3}),w=G=>{let V=JSON.stringify(G);iy.debug("Sending message",{data:G}),v.write(V).catch(H=>{iy.error("BackpressureWriter write failed",{error:H.message})})},S=G=>{w(G)},D=new Xdt(w);u.setConnection(D),g.on("line",async G=>{if(G.trim()){iy.debug("Raw incoming message",{line:G.substring(0,500)});try{let V=JSON.parse(G);if(V.jsonrpc!=="2.0"){iy.warn("Invalid JSON-RPC version",{message:V}),V.id!==void 0&&S({jsonrpc:"2.0",id:V.id,error:{code:-32600,message:"Invalid Request"}});return}if(V.method==="ping"&&V.id!==void 0){let ce=JSON.stringify({jsonrpc:"2.0",id:V.id,result:{status:"ok"}})+`
|
|
4306
4306
|
`;process.stdout.write(ce);return}if(("result"in V||"error"in V)&&!V.method){iy.info("Received response",{id:V.id,hasResult:"result"in V,hasError:"error"in V}),V.id!==void 0&&V.id!==null&&D.handleResponse(V.id,V.result,V.error);return}if(!V.method){iy.warn("Message has no method field",{message:V}),V.id!==void 0&&S({jsonrpc:"2.0",id:V.id,error:{code:-32600,message:"Invalid Request: missing method"}});return}let K=V.id===void 0;iy.info("Received message",{type:K?"notification":"request",method:V.method,id:V.id,params:V.params});try{let ce=await GLn(u,V.method,V.params);iy.debug("Message handled successfully",{method:V.method,id:V.id}),K||S({jsonrpc:"2.0",id:V.id,result:ce})}catch(ce){let we=ce instanceof Error?ce.message:String(ce);if(we.startsWith("Unknown method:")||we.startsWith("Unsupported method:")?iy.warn("Unsupported ACP method",{method:V.method,params:V.params}):iy.error("Message handler error",{method:V.method,error:we}),!K){let je=typeof ce?.code=="number"?ce.code:-32601,et=ce?.data,xt=ce?.authMethods;S({jsonrpc:"2.0",id:V.id,error:{code:je,message:we,...et?{data:et}:{},...xt?{authMethods:xt}:{}}})}}}catch(V){iy.error("JSON parse error",{error:V,line:G.substring(0,200)}),S({jsonrpc:"2.0",id:null,error:{code:-32700,message:"Parse error"}})}}});let F=async()=>{iy.info("Shutting down ACP server"),await u.shutdown(),await v.flush().catch(()=>{}),v.dispose(),g.close(),process.exit(0)};process.on("SIGINT",F),process.on("SIGTERM",F),process.on("uncaughtException",G=>{iy.error("Uncaught exception in ACP server",{error:G.message,stack:G.stack})}),process.on("unhandledRejection",G=>{let V=G instanceof Error?G.message:String(G);iy.error("Unhandled rejection in ACP server",{error:V})}),g.on("error",G=>{iy.error("Readline error",{error:G.message})}),g.on("close",()=>{iy.info("Input stream closed"),F()}),iy.info("ACP server ready")}),i}async function GLn(i,t,n){let s=n||{};switch(t){case"initialize":return i.initialize({protocolVersion:s.protocolVersion||1,clientCapabilities:s.clientCapabilities});case"authenticate":return i.authenticate({methodId:s.methodId||"",credentials:s.credentials});case"session/new":case"newSession":return i.newSession({cwd:IO(s.cwd||process.cwd()),mcpServers:s.mcpServers||[]});case"session/load":case"loadSession":return i.loadSession({sessionId:s.sessionId,cwd:IO(s.cwd||process.cwd()),mcpServers:s.mcpServers||[]});case"session/list":case"listSessions":case"unstable_listSessions":return i.listSessions({cwd:s.cwd,cursor:s.cursor});case"session/fork":case"forkSession":case"unstable_forkSession":return i.forkSession({sessionId:s.sessionId,cwd:s.cwd||process.cwd(),mcpServers:s.mcpServers});case"session/resume":case"resumeSession":case"unstable_resumeSession":return i.resumeSession({sessionId:s.sessionId,cwd:s.cwd||process.cwd(),mcpServers:s.mcpServers});case"session/setModel":case"session/set_model":return i.setSessionModel({sessionId:s.sessionId,modelId:s.modelId||s.model});case"session/setMode":case"session/set_mode":return i.setSessionMode({sessionId:s.sessionId,modeId:s.modeId||s.mode});case"session/update":return NLn(i,s);case"prompt":case"session/prompt":return i.prompt({sessionId:s.sessionId,prompt:s.prompt||[]});case"cancel":case"session/cancel":return await i.cancel({sessionId:s.sessionId}),{};case"ping":return{status:"ok"};default:throw new Error(`Unsupported method: ${t}`)}}async function NLn(i,t){let n=t.sessionId,s=t.update;if(!s)return iy.warn("Session update missing update field",{params:t}),{_meta:{}};let c=s.kind;switch(iy.info("Handling session update",{sessionId:n,kind:c,update:s}),c){case"model":{let u=s.model;if(u)return i.setSessionModel({sessionId:n,modelId:u});break}case"mode":{let u=s.mode;if(u)return i.setSessionMode({sessionId:n,modeId:u});break}default:iy.debug("Unhandled session update kind",{kind:c,update:s})}return{_meta:{}}}var iy,Xdt,ngr=it(()=>{"use strict";uO();fs();ep();egr();iy=M.child("ACPCommand"),Xdt=class{pendingRequests=new Map;requestId=0;writeMessage;constructor(t){this.writeMessage=t}async sessionUpdate(t){this.sendNotification("session/update",t)}async requestPermission(t){return await this.sendRequest("permission/request",t)}writeTextFile(t){this.sendNotification("file/write",t)}sendNotification(t,n){let s={jsonrpc:"2.0",method:t,params:n};this.writeMessage(s)}sendRequest(t,n){return new Promise((s,c)=>{let u=`server-${++this.requestId}`;this.pendingRequests.set(u,{resolve:s,reject:c});let m={jsonrpc:"2.0",id:u,method:t,params:n};this.writeMessage(m),setTimeout(()=>{this.pendingRequests.has(u)&&(this.pendingRequests.delete(u),c(new Error("Request timeout")))},300*1e3)})}handleResponse(t,n,s){let c=this.pendingRequests.get(t);c&&(this.pendingRequests.delete(t),s?c.reject(new Error(String(s))):c.resolve(n))}}});uO();fs();yp();ep();Td();import RLn from"path";var KPt=Fa(Sy(),1);Td();fs();import OJr from"node:fs";import YJr from"path";function eWt(i){return YJr.join(i,lS,_O)}async function tWt(i){let t=eWt(i);try{await KPt.default.remove(t),M.debug("Deleted .compass/temp directory",{tempDir:t})}catch(n){M.debug("Failed to delete .compass/temp directory",{tempDir:t,error:n})}}function LJr(i){let t=eWt(i);try{OJr.rmSync(t,{recursive:!0,force:!0})}catch{}}function rWt(i){let t=!1,n=()=>{t||(t=!0,LJr(i))};process.on("exit",n);let s=()=>{n(),process.exit()};process.on("SIGINT",s),process.on("SIGTERM",s)}Kd();import PLn from"os";function WLn(i){let t=i.replace(/\\/g,"/").replace(/\/$/,""),n=PLn.homedir().replace(/\\/g,"/").replace(/\/$/,"");if(t.toLowerCase()===n.toLowerCase())return!0;let s=/^[a-z]:\/?users\/[^/]+$/i,c=/^\/users\/[^/]+$/i,u=/^\/home\/[^/]+$/i;return s.test(t)||c.test(t)||u.test(t)}function RQ(i){return i.cwd?IO(i.cwd):process.cwd()}async function igr(i,t){let n=[],s=[],{validateAttachmentFile:c,readAttachmentFile:u}=await Promise.resolve().then(()=>(jV(),iWt));for(let m of i)try{await c(m,t);let g=await u(m);n.push(g),M.info(`Processed attachment: ${m}`)}catch(g){let v=g instanceof Error?g.message:String(g);s.push(`${m}: ${v}`),M.error(`Failed to process attachment: ${m}`,g)}if(s.length>0){console.error(Y.red(`
|
|
4307
4307
|
\u274C Failed to process ${s.length} attachment(s):`));for(let m of s)console.error(Y.red(` ${m}`));console.error(Y.gray(`
|
|
4308
|
-
Supported formats: PNG, JPG, JPEG, GIF, WEBP, PDF`)),console.error(Y.gray("Maximum file size: 20MB per file"))}return n}var zle="1.0.72",VLn="compass",ZLn="AI-powered development assistance using Anthropic's Claude models";function MLn(){let i=new qA;i.name(VLn).description(ZLn).version(zle,"-v, --version","Display version number").helpOption("-h, --help","Display help information"),i.command("start",{isDefault:!0}).description("Start interactive Compass session").argument("[prompt]","Initial prompt to start the session with").option("-p, --print <query>","Run query in non-interactive mode (SDK mode) and exit").option("-a, --attachment <paths...>","Attach files (images/PDFs) to the prompt").option("-c, --continue","Continue the most recent conversation in current directory").option("--cwd <path>","Run in a specific project directory").option("--skip-setup","Skip the setup wizard even if not configured").option("--compass-key <key>","Compass API key for authentication").option("--anthropic-key <key>","Anthropic API key (optional if already configured)").option("--no-banner","Skip the ASCII art banner").option("--no-update-check","Skip the update check on startup").option("--force-update-check","Force update check (ignore cache interval)").option("--verbose","Enable verbose logging (info level)").option("--debug","Enable debug logging").option("--agents <json>",`JSON object defining agents for this session (e.g., '{"name": {"description": "...", "prompt": "..."}}')`).option("--agent <name>","Run with a specific agent (applies its system prompt, model, and tool restrictions)").option("--standalone-agent","Use only the agent's system prompt, excluding the default CLI system prompt").option("-w, --worktree [name]","Run in an isolated git worktree (auto-named if no name given)").option("--unleash","Start in unguarded mode (removes safety guardrails) - USE WITH CAUTION").action(async(n,s)=>{try{let c=process.env.COMPASS_DEBUG,u=process.env.COMPASS_VERBOSE,m=c&&c.toLowerCase()!=="false"&&c!=="0",g=u&&u.toLowerCase()!=="false"&&u!=="0";if(s.debug||m?M.configure({level:"debug"}):(s.verbose||g)&&M.configure({level:"info"}),s.compassKey||s.anthropicKey){let{getCredentialStore:wt}=await Promise.resolve().then(()=>(hb(),wO)),{getCompassAuthService:mn}=await Promise.resolve().then(()=>(Yx(),a1e)),ur=await wt();if(s.compassKey)try{M.debug("Validating Compass API key from CLI parameter"),await mn().validateApiKey(s.compassKey),await ur.setCompassApiKey(s.compassKey),M.debug("Compass API key from CLI parameter validated and stored"),console.log(Y.green("\u2713 Compass API key validated and stored"))}catch(Nr){M.error("Failed to validate Compass API key",Nr),console.error(Y.red("\u274C Invalid Compass API key")),Nr instanceof Error&&console.error(Y.red(` ${Nr.message}`)),process.exit(1)}if(s.anthropicKey)try{if(M.debug("Storing Anthropic API key from CLI parameter"),!ur.validateApiKeyFormat(s.anthropicKey))throw new Error('Invalid API key format. Anthropic API keys should start with "sk-ant-"');await ur.setApiKey(s.anthropicKey),M.debug("Anthropic API key from CLI parameter stored"),console.log(Y.green("\u2713 Anthropic API key stored"))}catch(Nr){M.error("Failed to store Anthropic API key",Nr),console.error(Y.red("\u274C Invalid Anthropic API key")),Nr instanceof Error&&console.error(Y.red(` ${Nr.message}`)),process.exit(1)}console.log("")}let v=RQ(s),w;if(s.worktree!==void 0){let{setupWorktree:wt}=await Promise.resolve().then(()=>(uqe(),lqe)),mn=typeof s.worktree=="string"?s.worktree:void 0;w=await wt(v,mn??!0),console.log(Y.cyan(`\u{1F33F} Worktree "${w.name}" created`)),console.log(Y.gray(` Path: ${w.worktreePath}`)),console.log(Y.gray(` Branch: ${w.branchName}`)),console.log(""),v=w.worktreePath}if(await tWt(v),rWt(v),WLn(v)){console.log(""),console.log(Y.yellow("\u26A0\uFE0F Warning: Running from a user home directory")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray(`Directory: ${v}`)),console.log(""),console.log(Y.gray("User home directories typically contain many files and folders.")),console.log(Y.gray("This can cause slow indexing and high memory usage.")),console.log(""),console.log(Y.gray("Recommendation: Navigate to a specific project folder before")),console.log(Y.gray("starting the CLI, or use the --cwd option to specify a project directory.")),console.log("");let wt=(await Promise.resolve().then(()=>(sX(),cqe))).default,{proceed:mn}=await wt.prompt([{type:"confirm",name:"proceed",message:"Do you want to continue anyway?",default:!1}]);mn||(console.log(""),console.log(Y.gray("Exiting. Please navigate to a project directory and try again.")),console.log(""),process.exit(0)),console.log("")}let{readStdin:S}=await Promise.resolve().then(()=>(lY(),not)),D=await S();if(s.agents||s.agent){let{initializeAgentManager:wt}=await Promise.resolve().then(()=>(t2(),cY));await wt(v,s.agents)}if(s.print){let wt;if(s.agent){let{getAgentByName:Nr}=await Promise.resolve().then(()=>(t2(),cY));wt=await Nr(s.agent),wt||(console.error(Y.red(`\u274C Agent "${s.agent}" not found`)),console.error(Y.gray(" Available agents: explore, code-reviewer, debugger, planner")),console.error(Y.gray(" Or define custom agents with --agents")),process.exit(1)),M.debug(`Running with agent: ${wt.name} (${wt.source})`)}let{runSDKQuery:mn}=await Promise.resolve().then(()=>(lY(),not)),ur=await mn({query:s.print,pipedInput:D,projectRoot:v,continueSession:s.continue||!1,debug:s.debug||m,cliAgentsJson:s.agents,agentConfig:wt,standaloneAgent:s.standaloneAgent||wt?.standalone,attachments:s.attachment?await igr(s.attachment,v):void 0});process.exit(ur.exitCode);return}await _c(Eo());try{let{getTempFileService:wt,TEMP_DIR:mn,PREVIEW_TEMP_DIR:ur}=await Promise.resolve().then(()=>(fit(),Srr)),Nr=wt(),qt=IO(v,lS,mn,ur);Nr.setTempDir(qt),await Nr.initialize()}catch{M.debug("TempFileService initialization skipped")}if(s.banner!==!1){let{renderBanner:wt}=await Promise.resolve().then(()=>(Uz(),iot)),{getModelConfig:mn}=await Promise.resolve().then(()=>(vv(),bCe)),{DEFAULT_MODEL:ur,SESSION_FILE_NAME:Nr}=await Promise.resolve().then(()=>(Td(),XPt)),qt=ur;try{let Ut=RLn.join(qc(v),Nr),yn=await gp(Ut);yn?.state?.currentModel&&(qt=yn.state.currentModel)}catch{}let wi=mn(qt)?.name??qt;console.log(wt({version:zle,model:wi,unleashed:s.unleash||!1}))}process.platform!=="win32"&&process.getuid?.()!==0&&(console.log(Y.blue("\u2139 Running without elevated permissions")),console.log(Y.gray(" For the best experience on macOS/Linux, consider starting with: sudo nova")),console.log("")),v!==process.cwd()&&(console.log(Y.cyan(`\u{1F4C1} Working directory: ${v}`)),console.log(""));let F=s.forceUpdateCheck===!0;if(M.debug("CLI startup: about to check for updates",{updateCheckEnabled:s.updateCheck!==!1,forceUpdateCheck:F}),s.updateCheck!==!1)try{M.debug("CLI startup: calling performAutoUpdateOnStartup");let{performAutoUpdateOnStartup:wt}=await Promise.resolve().then(()=>(cDe(),Qct)),mn=await wt(void 0,F);M.debug("CLI startup: update check completed",{updated:mn.updated}),mn.updated&&(M.debug("CLI startup: auto-update successful, exiting for restart"),console.log(""),console.log("Update complete! Please run the CLI again to use the new version."),console.log(""),process.exit(0))}catch(wt){M.debug("Update check failed",wt)}let[G,V,H,K]=await Promise.all([Promise.resolve().then(()=>(t2(),cY)),Promise.resolve().then(()=>(Yz(),Rat)),Promise.resolve().then(()=>(uFe(),tot)),Promise.resolve().then(()=>(KEe(),Xnt))]);G.setProjectRoot(v),V.setSkillProjectRoot(v),H.setCommandsProjectRoot(v),K.setHooksProjectRoot(v);let[{render:ce},we,{App:je},{installDiffRenderer:et}]=await Promise.all([import("ink"),import("react"),Promise.resolve().then(()=>(wdt(),xdt)),Promise.resolve().then(()=>(kdt(),Adt))]),xt=et(),{waitUntilExit:Nt}=ce(we.createElement(je,{version:zle,skipSetup:s.skipSetup,projectRoot:v,showBanner:!1,smartMode:s.smart,initialPrompt:n,continueSession:s.continue||!1,cliAgentsJson:s.agents,unleashMode:s.unleash||!1,initialAttachments:s.attachment?await igr(s.attachment,v):void 0}));if(await Nt(),xt(),w){let{cleanupWorktree:wt}=await Promise.resolve().then(()=>(uqe(),lqe));await wt(w)}}catch(c){M.error("Failed to start Compass",c),console.error(Y.red("\u274C Failed to start Compass")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("setup").description("Run first-time setup wizard for consent and API key configuration").option("--compass-key <key>","Compass API key for authentication").option("--anthropic-key <key>","Anthropic API key (optional if already configured)").option("--validate-key","Validate all stored API keys without modifying anything").action(async n=>{try{if(await _c(Eo()),n.validateKey){let{validateStoredApiKeys:S}=await Promise.resolve().then(()=>(P_r(),R_r));await S();return}if(n.compassKey||n.anthropicKey){let{getCredentialStore:S}=await Promise.resolve().then(()=>(hb(),wO)),{getCompassAuthService:D}=await Promise.resolve().then(()=>(Yx(),a1e)),F=await S();if(n.compassKey)try{console.log(Y.gray("Validating Compass API key..."));let G=D();if(await G.validateApiKey(n.compassKey),await F.setCompassApiKey(n.compassKey),console.log(Y.green("\u2713 Compass API key validated and stored")),!n.anthropicKey)try{console.log(Y.gray("Fetching Anthropic API key from Compass account..."));let V=await G.getLLMConfig("claude-sonnet-4-5-20250929",n.compassKey.trim());if(V?.api_key){let{decryptFernet:H}=await Promise.resolve().then(()=>(QV(),uWt)),K=H(V.api_key,"CLAUDE");await F.setApiKey(K),await F.setProviderApiKey("anthropic",K),console.log(Y.green("\u2713 Anthropic API key retrieved and stored"))}else console.log(Y.yellow("\u26A0 No Anthropic API key found in Compass account")),console.log(Y.gray(" Use --anthropic-key to provide one manually"))}catch(V){let H=V instanceof Error?V.message:"Unknown error";console.log(Y.yellow(`\u26A0 Could not retrieve Anthropic API key: ${H}`)),console.log(Y.gray(" Use --anthropic-key to provide one manually"))}}catch(G){M.error("Failed to validate Compass API key",G),console.error(Y.red("\u274C Invalid Compass API key")),G instanceof Error&&console.error(Y.red(` ${G.message}`)),process.exit(1)}if(n.anthropicKey)try{if(console.log(Y.gray("Storing Anthropic API key...")),!F.validateApiKeyFormat(n.anthropicKey))throw new Error('Invalid API key format. Anthropic API keys should start with "sk-ant-"');await F.setApiKey(n.anthropicKey),console.log(Y.green("\u2713 Anthropic API key stored"))}catch(G){M.error("Failed to store Anthropic API key",G),console.error(Y.red("\u274C Invalid Anthropic API key")),G instanceof Error&&console.error(Y.red(` ${G.message}`)),process.exit(1)}console.log("");return}let{renderBanner:s}=await Promise.resolve().then(()=>(Uz(),iot));console.log(s(zle));let[{render:c},u,{App:m},{installDiffRenderer:g}]=await Promise.all([import("ink"),import("react"),Promise.resolve().then(()=>(wdt(),xdt)),Promise.resolve().then(()=>(kdt(),Adt))]),v=g(),{waitUntilExit:w}=c(u.createElement(m,{version:zle,showBanner:!1}));await w(),v()}catch(s){M.error("Setup failed",s),console.error(Y.red("\u274C Setup failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("init").description("Initialize Compass in the current project directory").option("--cwd <path>","Run in a specific project directory").option("-f, --force","Overwrite existing .compass directory").action(async n=>{try{let s=RQ(n),c=qc(s);if(await Ls(c)){if(!n.force){console.log(Y.yellow("\u26A0\uFE0F Compass is already initialized in this project.")),console.log(Y.gray(" Use --force to reinitialize."));return}console.log(Y.gray("Reinitializing Compass..."))}await _c(c),await _c(`${c}/backups`),await _c(`${c}/cache`),await _c(`${c}/context`),console.log(Y.green("\u2705 Initialized Compass in current project")),console.log(Y.gray(` Created ${c}/`)),console.log(""),console.log(Y.gray("Next steps:")),console.log(Y.gray(` 1. Run "compass setup" if you haven't configured your API key`)),console.log(Y.gray(' 2. Run "compass" to start an interactive session'))}catch(s){M.error("Init failed",s),console.error(Y.red("\u274C Failed to initialize Compass")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}});let t=(n,s,c)=>{let u,m=new qA(n).description(s).allowUnknownOption(!0).allowExcessArguments(!0);m.hook("preAction",async()=>{u=await c()}),m.action(async()=>{u&&await u.parseAsync(["node",...process.argv.slice(process.argv.indexOf(n))])}),i.addCommand(m)};return t("config","Manage Compass configuration",async()=>{let{createConfigCommand:n}=await Promise.resolve().then(()=>(Z_r(),V_r));return n()}),t("logs","View and manage Compass logs",async()=>{let{createLogsCommand:n}=await Promise.resolve().then(()=>(J_r(),H_r));return n()}),t("mcp","Manage MCP server connections",async()=>{let{createMCPCommand:n}=await Promise.resolve().then(()=>(j_r(),U_r));return n()}),t("acp","Manage ACP connections",async()=>{let{createACPCommand:n}=await Promise.resolve().then(()=>(ngr(),rgr));return n()}),i.command("consent").description("Manage consent settings for data collection and telemetry").argument("[action]","Action to perform: status, review, revoke","status").action(async n=>{try{let{getConsentManager:s}=await Promise.resolve().then(()=>(G8(),Stt)),c=await s();switch(n.toLowerCase()){case"status":{let u=await c.getStatus();if(console.log(""),console.log(Y.bold.white("\u{1F4CB} Consent Status")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Valid:")} ${u.isValid?Y.green("Yes"):Y.red("No")}`),console.log(` ${Y.gray("Version:")} ${u.version||Y.gray("N/A")}`),console.log(` ${Y.gray("Granted:")} ${u.grantedAt?new Date(u.grantedAt).toLocaleDateString():Y.gray("N/A")}`),console.log(` ${Y.gray("Expires:")} ${u.expiresAt?new Date(u.expiresAt).toLocaleDateString():Y.gray("N/A")}`),u.daysUntilExpiry!==null){let m=u.daysUntilExpiry>30?"green":u.daysUntilExpiry>7?"yellow":"red";console.log(` ${Y.gray("Days until expiry:")} ${Y[m](u.daysUntilExpiry.toString())}`)}u.consent&&(console.log(""),console.log(Y.bold.white(" Settings:")),console.log(` ${Y.gray("Data Collection:")} ${u.consent.dataCollection?Y.green("Enabled"):Y.red("Disabled")}`),console.log(` ${Y.gray("Telemetry:")} ${u.consent.telemetry?Y.green("Enabled"):Y.yellow("Disabled")}`),console.log(` ${Y.gray("Analytics:")} ${u.consent.analytics?Y.green("Enabled"):Y.yellow("Disabled")}`),console.log(` ${Y.gray("Error Reporting:")} ${u.consent.errorReporting?Y.green("Enabled"):Y.yellow("Disabled")}`)),u.needsRenewal&&(console.log(""),console.log(Y.yellow('\u26A0\uFE0F Consent needs renewal. Run "compass setup" to update.'))),console.log("");break}case"review":{let u=c.getHistory();if(console.log(""),console.log(Y.bold.white("\u{1F4DC} Consent History")),console.log(Y.dim("\u2500".repeat(40))),u.length===0)console.log(Y.gray(" No consent records found."));else for(let m of u.slice(-5))console.log(` ${Y.gray("ID:")} ${m.id.slice(0,8)}...`),console.log(` ${Y.gray("Version:")} ${m.version}`),console.log(` ${Y.gray("Granted:")} ${new Date(m.grantedAt).toLocaleString()}`),console.log(Y.dim(" \u2500".repeat(20)));console.log("");break}case"revoke":{console.log(""),console.log(Y.yellow("\u26A0\uFE0F Revoking consent will delete all stored data.")),console.log(Y.gray(" This action cannot be undone.")),console.log(""),await c.revokeConsent(),console.log(Y.green("\u2705 Consent revoked and data cleaned up")),console.log(Y.gray(' Run "compass setup" to reconfigure.')),console.log("");break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: status, review, revoke")),process.exit(1)}}catch(s){M.error("Consent command failed",s),console.error(Y.red("\u274C Consent command failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("tokens").description("View token usage statistics and cost estimates").option("--export","Export usage data as JSON").option("--session","Show current session usage only").option("--reset","Reset token usage statistics").action(async n=>{try{let{getTokenTracker:s}=await Promise.resolve().then(()=>(NG(),SBt)),c=await s();if(n.export){let m=await c.exportUsage();console.log(JSON.stringify(m,null,2));return}if(n.reset){console.log(Y.yellow("\u26A0\uFE0F This will reset all token usage statistics.")),console.log(Y.gray(" Feature not yet implemented."));return}if(n.session){let m=c.getCurrentSessionUsage();if(!m){console.log(Y.gray("No active session."));return}console.log(""),console.log(Y.bold.white("\u{1F4CA} Current Session Token Usage")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Session ID:")} ${m.sessionId.slice(0,8)}...`),console.log(` ${Y.gray("Started:")} ${new Date(m.startTime).toLocaleString()}`),console.log(` ${Y.gray("API Calls:")} ${m.calls.length}`),console.log(` ${Y.gray("Input Tokens:")} ${m.totals.inputTokens.toLocaleString()}`),console.log(` ${Y.gray("Output Tokens:")} ${m.totals.outputTokens.toLocaleString()}`),console.log(` ${Y.gray("Total Tokens:")} ${Y.bold(m.totals.totalTokens.toLocaleString())}`),console.log(` ${Y.gray("Estimated Cost:")} ${Y.green("$"+m.estimatedCost.totalCost.toFixed(4))}`),console.log("");return}let u=c.getAllTimeStats();console.log(""),console.log(Y.bold.white("\u{1F4CA} Token Usage Statistics")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Total API Calls:")} ${u.totalCalls.toLocaleString()}`),console.log(` ${Y.gray("Total Tokens:")} ${u.totalTokens.toLocaleString()}`),console.log(` ${Y.gray("Total Cost:")} ${Y.green("$"+u.totalCost.toFixed(4))}`),console.log(""),console.log(Y.bold.white(" Averages per Call:")),console.log(` ${Y.gray("Input:")} ${u.averageInputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Output:")} ${u.averageOutputTokens.toLocaleString()} tokens`),console.log(""),console.log(Y.bold.white(" Peak Usage:")),console.log(` ${Y.gray("Input:")} ${u.peakInputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Output:")} ${u.peakOutputTokens.toLocaleString()} tokens`),console.log("")}catch(s){M.error("Tokens command failed",s),console.error(Y.red("\u274C Tokens command failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("data").description("Manage stored data (GDPR compliance)").argument("[action]","Action to perform: list, export, delete","list").option("--cwd <path>","Run in a specific project directory").option("-o, --output <file>","Output file for export").action(async(n,s)=>{try{let{getConsentManager:c}=await Promise.resolve().then(()=>(G8(),Stt)),u=await c();switch(n.toLowerCase()){case"list":{console.log(""),console.log(Y.bold.white("\u{1F4C1} Stored Data")),console.log(Y.dim("\u2500".repeat(40)));let m=Eo(),g=qc(RQ(s));console.log(Y.bold.cyan(" Global Data:")),console.log(` ${Y.gray("Location:")} ${m}`),console.log(` ${Y.gray("Contents:")} config, credentials, consent, token usage, logs`),await Ls(g)&&(console.log(""),console.log(Y.bold.cyan(" Project Data:")),console.log(` ${Y.gray("Location:")} ${g}`),console.log(` ${Y.gray("Contents:")} session state, backups, cache, context index`)),console.log(""),console.log(Y.gray('Use "compass data export" to export all data')),console.log(Y.gray('Use "compass consent revoke" to delete all data')),console.log("");break}case"export":{let m=await u.exportUserData(),g=JSON.stringify(m,null,2);if(s.output){let{safeWriteFile:v}=await Promise.resolve().then(()=>(yp(),Lve));await v(s.output,g),console.log(Y.green(`\u2705 Data exported to ${s.output}`))}else console.log(g);break}case"delete":{console.log(Y.yellow('\u26A0\uFE0F To delete all data, use "compass consent revoke"'));break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: list, export, delete")),process.exit(1)}}catch(c){M.error("Data command failed",c),console.error(Y.red("\u274C Data command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("cache").description("Manage cached data").argument("[action]","Action to perform: clear, status","status").option("--cwd <path>","Run in a specific project directory").action(async(n,s)=>{try{let c=qc(RQ(s)),u=`${c}/cache`,m=`${c}/context`;switch(n.toLowerCase()){case"status":{console.log(""),console.log(Y.bold.white("\u{1F4BE} Cache Status")),console.log(Y.dim("\u2500".repeat(40))),await Ls(u)?(console.log(` ${Y.gray("Cache directory:")} ${u}`),console.log(` ${Y.green("\u2713")} Cache directory exists`)):console.log(` ${Y.gray("Cache directory:")} ${Y.yellow("Not initialized")}`),await Ls(m)?(console.log(` ${Y.gray("Context index:")} ${m}`),console.log(` ${Y.green("\u2713")} Context index exists`)):console.log(` ${Y.gray("Context index:")} ${Y.yellow("Not initialized")}`),console.log(""),console.log(Y.gray('Use "compass cache clear" to clear all cached data')),console.log("");break}case"clear":{let g=!1;await Ls(u)&&(await J_(u),await _c(u),console.log(Y.green("\u2705 Cache cleared")),g=!0),await Ls(m)&&(await J_(m),await _c(m),console.log(Y.green("\u2705 Context index cleared")),g=!0),g||console.log(Y.gray("No cache to clear."));break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: status, clear")),process.exit(1)}}catch(c){M.error("Cache command failed",c),console.error(Y.red("\u274C Cache command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("update").description("Check for and install updates").argument("[action]","Action to perform: check, install, history","check").option("-f, --force","Force update check (ignore interval)").option("--npm","Use npm for installation").option("--yarn","Use yarn for installation").option("--pnpm","Use pnpm for installation").action(async(n,s)=>{try{let{getUpdateService:c}=await Promise.resolve().then(()=>(cDe(),Qct)),u=await c();switch(n.toLowerCase()){case"check":{console.log(""),console.log(Y.cyan("Checking for updates..."));let m=await u.checkForUpdates(s.force);m.error?console.log(Y.red(`Failed to check for updates: ${m.error}`)):m.updateAvailable&&m.latestVersion?u.displayUpdateNotification(m):(console.log(""),console.log(Y.green(`You are on the latest version (${m.currentVersion})`)),console.log(""));break}case"install":{let m=s.npm?"npm":s.yarn?"yarn":s.pnpm?"pnpm":await u.detectPackageManager();await u.performUpdate(m);break}case"history":{let m=u.getUpdateHistory();if(console.log(""),console.log(Y.bold.cyan("Update History")),console.log(Y.dim("\u2500".repeat(40))),m.length===0)console.log(""),console.log(Y.gray(" No update history recorded.")),console.log("");else{console.log("");for(let g of m.slice().reverse()){let v=g.success?Y.green("\u2713"):Y.red("\u2717"),w=g.success?Y.green:Y.red;console.log(` ${v} ${Y.gray(new Date(g.updatedAt).toLocaleDateString())}`),console.log(` ${Y.gray("From:")} ${g.fromVersion} ${Y.gray("\u2192")} ${w(g.toVersion)}`),console.log(` ${Y.gray("Method:")} ${g.method}`),g.error&&console.log(` ${Y.red("Error:")} ${g.error}`),console.log("")}}break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: check, install, history")),process.exit(1)}}catch(c){M.error("Update command failed",c),console.error(Y.red("\u274C Update command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("reset").description("Reset Compass to factory settings").option("--cwd <path>","Run in a specific project directory").option("-f, --force","Skip confirmation prompt").option("--global","Reset global settings only").option("--project","Reset project settings only").action(async n=>{try{if(!n.force){console.log(""),console.log(Y.red("\u26A0\uFE0F WARNING: This will delete all Compass data!")),console.log(Y.gray(" This action cannot be undone.")),console.log(""),console.log(Y.gray(" Use --force to confirm this action.")),console.log("");return}if(n.project&&!n.global){let u=qc(RQ(n));await Ls(u)?(await J_(u),console.log(Y.green("\u2705 Project settings reset"))):console.log(Y.gray("No project settings to reset."));return}if(n.global&&!n.project){let u=Eo();await Ls(u)?(await J_(u),console.log(Y.green("\u2705 Global settings reset"))):console.log(Y.gray("No global settings to reset."));return}let s=Eo(),c=qc(RQ(n));await Ls(s)&&await J_(s),await Ls(c)&&await J_(c),console.log(Y.green("\u2705 Compass has been reset to factory settings")),console.log(Y.gray(' Run "compass setup" to reconfigure.'))}catch(s){M.error("Reset failed",s),console.error(Y.red("\u274C Reset failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i}async function OLn(){try{let i=MLn();process.on("uncaughtException",t=>{M.error("Uncaught exception",t),console.error(Y.red("\u274C An unexpected error occurred")),t instanceof Error&&console.error(Y.red(` ${t.message}`)),process.exit(1)}),process.on("unhandledRejection",t=>{M.error("Unhandled rejection",t),console.error(Y.red("\u274C An unexpected error occurred")),t instanceof Error&&console.error(Y.red(` ${t.message}`)),process.exit(1)}),await i.parseAsync(process.argv)}catch(i){M.error("CLI error",i),console.error(Y.red("\u274C CLI error")),i instanceof Error&&console.error(Y.red(` ${i.message}`)),process.exit(1)}}OLn();
|
|
4308
|
+
Supported formats: PNG, JPG, JPEG, GIF, WEBP, PDF`)),console.error(Y.gray("Maximum file size: 20MB per file"))}return n}var zle="1.0.73",VLn="compass",ZLn="AI-powered development assistance using Anthropic's Claude models";function MLn(){let i=new qA;i.name(VLn).description(ZLn).version(zle,"-v, --version","Display version number").helpOption("-h, --help","Display help information"),i.command("start",{isDefault:!0}).description("Start interactive Compass session").argument("[prompt]","Initial prompt to start the session with").option("-p, --print <query>","Run query in non-interactive mode (SDK mode) and exit").option("-a, --attachment <paths...>","Attach files (images/PDFs) to the prompt").option("-c, --continue","Continue the most recent conversation in current directory").option("--cwd <path>","Run in a specific project directory").option("--skip-setup","Skip the setup wizard even if not configured").option("--compass-key <key>","Compass API key for authentication").option("--anthropic-key <key>","Anthropic API key (optional if already configured)").option("--no-banner","Skip the ASCII art banner").option("--no-update-check","Skip the update check on startup").option("--force-update-check","Force update check (ignore cache interval)").option("--verbose","Enable verbose logging (info level)").option("--debug","Enable debug logging").option("--agents <json>",`JSON object defining agents for this session (e.g., '{"name": {"description": "...", "prompt": "..."}}')`).option("--agent <name>","Run with a specific agent (applies its system prompt, model, and tool restrictions)").option("--standalone-agent","Use only the agent's system prompt, excluding the default CLI system prompt").option("-w, --worktree [name]","Run in an isolated git worktree (auto-named if no name given)").option("--unleash","Start in unguarded mode (removes safety guardrails) - USE WITH CAUTION").action(async(n,s)=>{try{let c=process.env.COMPASS_DEBUG,u=process.env.COMPASS_VERBOSE,m=c&&c.toLowerCase()!=="false"&&c!=="0",g=u&&u.toLowerCase()!=="false"&&u!=="0";if(s.debug||m?M.configure({level:"debug"}):(s.verbose||g)&&M.configure({level:"info"}),s.compassKey||s.anthropicKey){let{getCredentialStore:wt}=await Promise.resolve().then(()=>(hb(),wO)),{getCompassAuthService:mn}=await Promise.resolve().then(()=>(Yx(),a1e)),ur=await wt();if(s.compassKey)try{M.debug("Validating Compass API key from CLI parameter"),await mn().validateApiKey(s.compassKey),await ur.setCompassApiKey(s.compassKey),M.debug("Compass API key from CLI parameter validated and stored"),console.log(Y.green("\u2713 Compass API key validated and stored"))}catch(Nr){M.error("Failed to validate Compass API key",Nr),console.error(Y.red("\u274C Invalid Compass API key")),Nr instanceof Error&&console.error(Y.red(` ${Nr.message}`)),process.exit(1)}if(s.anthropicKey)try{if(M.debug("Storing Anthropic API key from CLI parameter"),!ur.validateApiKeyFormat(s.anthropicKey))throw new Error('Invalid API key format. Anthropic API keys should start with "sk-ant-"');await ur.setApiKey(s.anthropicKey),M.debug("Anthropic API key from CLI parameter stored"),console.log(Y.green("\u2713 Anthropic API key stored"))}catch(Nr){M.error("Failed to store Anthropic API key",Nr),console.error(Y.red("\u274C Invalid Anthropic API key")),Nr instanceof Error&&console.error(Y.red(` ${Nr.message}`)),process.exit(1)}console.log("")}let v=RQ(s),w;if(s.worktree!==void 0){let{setupWorktree:wt}=await Promise.resolve().then(()=>(uqe(),lqe)),mn=typeof s.worktree=="string"?s.worktree:void 0;w=await wt(v,mn??!0),console.log(Y.cyan(`\u{1F33F} Worktree "${w.name}" created`)),console.log(Y.gray(` Path: ${w.worktreePath}`)),console.log(Y.gray(` Branch: ${w.branchName}`)),console.log(""),v=w.worktreePath}if(await tWt(v),rWt(v),WLn(v)){console.log(""),console.log(Y.yellow("\u26A0\uFE0F Warning: Running from a user home directory")),console.log(Y.dim("\u2500".repeat(50))),console.log(""),console.log(Y.gray(`Directory: ${v}`)),console.log(""),console.log(Y.gray("User home directories typically contain many files and folders.")),console.log(Y.gray("This can cause slow indexing and high memory usage.")),console.log(""),console.log(Y.gray("Recommendation: Navigate to a specific project folder before")),console.log(Y.gray("starting the CLI, or use the --cwd option to specify a project directory.")),console.log("");let wt=(await Promise.resolve().then(()=>(sX(),cqe))).default,{proceed:mn}=await wt.prompt([{type:"confirm",name:"proceed",message:"Do you want to continue anyway?",default:!1}]);mn||(console.log(""),console.log(Y.gray("Exiting. Please navigate to a project directory and try again.")),console.log(""),process.exit(0)),console.log("")}let{readStdin:S}=await Promise.resolve().then(()=>(lY(),not)),D=await S();if(s.agents||s.agent){let{initializeAgentManager:wt}=await Promise.resolve().then(()=>(t2(),cY));await wt(v,s.agents)}if(s.print){let wt;if(s.agent){let{getAgentByName:Nr}=await Promise.resolve().then(()=>(t2(),cY));wt=await Nr(s.agent),wt||(console.error(Y.red(`\u274C Agent "${s.agent}" not found`)),console.error(Y.gray(" Available agents: explore, code-reviewer, debugger, planner")),console.error(Y.gray(" Or define custom agents with --agents")),process.exit(1)),M.debug(`Running with agent: ${wt.name} (${wt.source})`)}let{runSDKQuery:mn}=await Promise.resolve().then(()=>(lY(),not)),ur=await mn({query:s.print,pipedInput:D,projectRoot:v,continueSession:s.continue||!1,debug:s.debug||m,cliAgentsJson:s.agents,agentConfig:wt,standaloneAgent:s.standaloneAgent||wt?.standalone,attachments:s.attachment?await igr(s.attachment,v):void 0});process.exit(ur.exitCode);return}await _c(Eo());try{let{getTempFileService:wt,TEMP_DIR:mn,PREVIEW_TEMP_DIR:ur}=await Promise.resolve().then(()=>(fit(),Srr)),Nr=wt(),qt=IO(v,lS,mn,ur);Nr.setTempDir(qt),await Nr.initialize()}catch{M.debug("TempFileService initialization skipped")}if(s.banner!==!1){let{renderBanner:wt}=await Promise.resolve().then(()=>(Uz(),iot)),{getModelConfig:mn}=await Promise.resolve().then(()=>(vv(),bCe)),{DEFAULT_MODEL:ur,SESSION_FILE_NAME:Nr}=await Promise.resolve().then(()=>(Td(),XPt)),qt=ur;try{let Ut=RLn.join(qc(v),Nr),yn=await gp(Ut);yn?.state?.currentModel&&(qt=yn.state.currentModel)}catch{}let wi=mn(qt)?.name??qt;console.log(wt({version:zle,model:wi,unleashed:s.unleash||!1}))}process.platform!=="win32"&&process.getuid?.()!==0&&(console.log(Y.blue("\u2139 Running without elevated permissions")),console.log(Y.gray(" For the best experience on macOS/Linux, consider starting with: sudo nova")),console.log("")),v!==process.cwd()&&(console.log(Y.cyan(`\u{1F4C1} Working directory: ${v}`)),console.log(""));let F=s.forceUpdateCheck===!0;if(M.debug("CLI startup: about to check for updates",{updateCheckEnabled:s.updateCheck!==!1,forceUpdateCheck:F}),s.updateCheck!==!1)try{M.debug("CLI startup: calling performAutoUpdateOnStartup");let{performAutoUpdateOnStartup:wt}=await Promise.resolve().then(()=>(cDe(),Qct)),mn=await wt(void 0,F);M.debug("CLI startup: update check completed",{updated:mn.updated}),mn.updated&&(M.debug("CLI startup: auto-update successful, exiting for restart"),console.log(""),console.log("Update complete! Please run the CLI again to use the new version."),console.log(""),process.exit(0))}catch(wt){M.debug("Update check failed",wt)}let[G,V,H,K]=await Promise.all([Promise.resolve().then(()=>(t2(),cY)),Promise.resolve().then(()=>(Yz(),Rat)),Promise.resolve().then(()=>(uFe(),tot)),Promise.resolve().then(()=>(KEe(),Xnt))]);G.setProjectRoot(v),V.setSkillProjectRoot(v),H.setCommandsProjectRoot(v),K.setHooksProjectRoot(v);let[{render:ce},we,{App:je},{installDiffRenderer:et}]=await Promise.all([import("ink"),import("react"),Promise.resolve().then(()=>(wdt(),xdt)),Promise.resolve().then(()=>(kdt(),Adt))]),xt=et(),{waitUntilExit:Nt}=ce(we.createElement(je,{version:zle,skipSetup:s.skipSetup,projectRoot:v,showBanner:!1,smartMode:s.smart,initialPrompt:n,continueSession:s.continue||!1,cliAgentsJson:s.agents,unleashMode:s.unleash||!1,initialAttachments:s.attachment?await igr(s.attachment,v):void 0}));if(await Nt(),xt(),w){let{cleanupWorktree:wt}=await Promise.resolve().then(()=>(uqe(),lqe));await wt(w)}}catch(c){M.error("Failed to start Compass",c),console.error(Y.red("\u274C Failed to start Compass")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("setup").description("Run first-time setup wizard for consent and API key configuration").option("--compass-key <key>","Compass API key for authentication").option("--anthropic-key <key>","Anthropic API key (optional if already configured)").option("--validate-key","Validate all stored API keys without modifying anything").action(async n=>{try{if(await _c(Eo()),n.validateKey){let{validateStoredApiKeys:S}=await Promise.resolve().then(()=>(P_r(),R_r));await S();return}if(n.compassKey||n.anthropicKey){let{getCredentialStore:S}=await Promise.resolve().then(()=>(hb(),wO)),{getCompassAuthService:D}=await Promise.resolve().then(()=>(Yx(),a1e)),F=await S();if(n.compassKey)try{console.log(Y.gray("Validating Compass API key..."));let G=D();if(await G.validateApiKey(n.compassKey),await F.setCompassApiKey(n.compassKey),console.log(Y.green("\u2713 Compass API key validated and stored")),!n.anthropicKey)try{console.log(Y.gray("Fetching Anthropic API key from Compass account..."));let V=await G.getLLMConfig("claude-sonnet-4-5-20250929",n.compassKey.trim());if(V?.api_key){let{decryptFernet:H}=await Promise.resolve().then(()=>(QV(),uWt)),K=H(V.api_key,"CLAUDE");await F.setApiKey(K),await F.setProviderApiKey("anthropic",K),console.log(Y.green("\u2713 Anthropic API key retrieved and stored"))}else console.log(Y.yellow("\u26A0 No Anthropic API key found in Compass account")),console.log(Y.gray(" Use --anthropic-key to provide one manually"))}catch(V){let H=V instanceof Error?V.message:"Unknown error";console.log(Y.yellow(`\u26A0 Could not retrieve Anthropic API key: ${H}`)),console.log(Y.gray(" Use --anthropic-key to provide one manually"))}}catch(G){M.error("Failed to validate Compass API key",G),console.error(Y.red("\u274C Invalid Compass API key")),G instanceof Error&&console.error(Y.red(` ${G.message}`)),process.exit(1)}if(n.anthropicKey)try{if(console.log(Y.gray("Storing Anthropic API key...")),!F.validateApiKeyFormat(n.anthropicKey))throw new Error('Invalid API key format. Anthropic API keys should start with "sk-ant-"');await F.setApiKey(n.anthropicKey),console.log(Y.green("\u2713 Anthropic API key stored"))}catch(G){M.error("Failed to store Anthropic API key",G),console.error(Y.red("\u274C Invalid Anthropic API key")),G instanceof Error&&console.error(Y.red(` ${G.message}`)),process.exit(1)}console.log("");return}let{renderBanner:s}=await Promise.resolve().then(()=>(Uz(),iot));console.log(s(zle));let[{render:c},u,{App:m},{installDiffRenderer:g}]=await Promise.all([import("ink"),import("react"),Promise.resolve().then(()=>(wdt(),xdt)),Promise.resolve().then(()=>(kdt(),Adt))]),v=g(),{waitUntilExit:w}=c(u.createElement(m,{version:zle,showBanner:!1}));await w(),v()}catch(s){M.error("Setup failed",s),console.error(Y.red("\u274C Setup failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("init").description("Initialize Compass in the current project directory").option("--cwd <path>","Run in a specific project directory").option("-f, --force","Overwrite existing .compass directory").action(async n=>{try{let s=RQ(n),c=qc(s);if(await Ls(c)){if(!n.force){console.log(Y.yellow("\u26A0\uFE0F Compass is already initialized in this project.")),console.log(Y.gray(" Use --force to reinitialize."));return}console.log(Y.gray("Reinitializing Compass..."))}await _c(c),await _c(`${c}/backups`),await _c(`${c}/cache`),await _c(`${c}/context`),console.log(Y.green("\u2705 Initialized Compass in current project")),console.log(Y.gray(` Created ${c}/`)),console.log(""),console.log(Y.gray("Next steps:")),console.log(Y.gray(` 1. Run "compass setup" if you haven't configured your API key`)),console.log(Y.gray(' 2. Run "compass" to start an interactive session'))}catch(s){M.error("Init failed",s),console.error(Y.red("\u274C Failed to initialize Compass")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}});let t=(n,s,c)=>{let u,m=new qA(n).description(s).allowUnknownOption(!0).allowExcessArguments(!0);m.hook("preAction",async()=>{u=await c()}),m.action(async()=>{u&&await u.parseAsync(["node",...process.argv.slice(process.argv.indexOf(n))])}),i.addCommand(m)};return t("config","Manage Compass configuration",async()=>{let{createConfigCommand:n}=await Promise.resolve().then(()=>(Z_r(),V_r));return n()}),t("logs","View and manage Compass logs",async()=>{let{createLogsCommand:n}=await Promise.resolve().then(()=>(J_r(),H_r));return n()}),t("mcp","Manage MCP server connections",async()=>{let{createMCPCommand:n}=await Promise.resolve().then(()=>(j_r(),U_r));return n()}),t("acp","Manage ACP connections",async()=>{let{createACPCommand:n}=await Promise.resolve().then(()=>(ngr(),rgr));return n()}),i.command("consent").description("Manage consent settings for data collection and telemetry").argument("[action]","Action to perform: status, review, revoke","status").action(async n=>{try{let{getConsentManager:s}=await Promise.resolve().then(()=>(G8(),Stt)),c=await s();switch(n.toLowerCase()){case"status":{let u=await c.getStatus();if(console.log(""),console.log(Y.bold.white("\u{1F4CB} Consent Status")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Valid:")} ${u.isValid?Y.green("Yes"):Y.red("No")}`),console.log(` ${Y.gray("Version:")} ${u.version||Y.gray("N/A")}`),console.log(` ${Y.gray("Granted:")} ${u.grantedAt?new Date(u.grantedAt).toLocaleDateString():Y.gray("N/A")}`),console.log(` ${Y.gray("Expires:")} ${u.expiresAt?new Date(u.expiresAt).toLocaleDateString():Y.gray("N/A")}`),u.daysUntilExpiry!==null){let m=u.daysUntilExpiry>30?"green":u.daysUntilExpiry>7?"yellow":"red";console.log(` ${Y.gray("Days until expiry:")} ${Y[m](u.daysUntilExpiry.toString())}`)}u.consent&&(console.log(""),console.log(Y.bold.white(" Settings:")),console.log(` ${Y.gray("Data Collection:")} ${u.consent.dataCollection?Y.green("Enabled"):Y.red("Disabled")}`),console.log(` ${Y.gray("Telemetry:")} ${u.consent.telemetry?Y.green("Enabled"):Y.yellow("Disabled")}`),console.log(` ${Y.gray("Analytics:")} ${u.consent.analytics?Y.green("Enabled"):Y.yellow("Disabled")}`),console.log(` ${Y.gray("Error Reporting:")} ${u.consent.errorReporting?Y.green("Enabled"):Y.yellow("Disabled")}`)),u.needsRenewal&&(console.log(""),console.log(Y.yellow('\u26A0\uFE0F Consent needs renewal. Run "compass setup" to update.'))),console.log("");break}case"review":{let u=c.getHistory();if(console.log(""),console.log(Y.bold.white("\u{1F4DC} Consent History")),console.log(Y.dim("\u2500".repeat(40))),u.length===0)console.log(Y.gray(" No consent records found."));else for(let m of u.slice(-5))console.log(` ${Y.gray("ID:")} ${m.id.slice(0,8)}...`),console.log(` ${Y.gray("Version:")} ${m.version}`),console.log(` ${Y.gray("Granted:")} ${new Date(m.grantedAt).toLocaleString()}`),console.log(Y.dim(" \u2500".repeat(20)));console.log("");break}case"revoke":{console.log(""),console.log(Y.yellow("\u26A0\uFE0F Revoking consent will delete all stored data.")),console.log(Y.gray(" This action cannot be undone.")),console.log(""),await c.revokeConsent(),console.log(Y.green("\u2705 Consent revoked and data cleaned up")),console.log(Y.gray(' Run "compass setup" to reconfigure.')),console.log("");break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: status, review, revoke")),process.exit(1)}}catch(s){M.error("Consent command failed",s),console.error(Y.red("\u274C Consent command failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("tokens").description("View token usage statistics and cost estimates").option("--export","Export usage data as JSON").option("--session","Show current session usage only").option("--reset","Reset token usage statistics").action(async n=>{try{let{getTokenTracker:s}=await Promise.resolve().then(()=>(NG(),SBt)),c=await s();if(n.export){let m=await c.exportUsage();console.log(JSON.stringify(m,null,2));return}if(n.reset){console.log(Y.yellow("\u26A0\uFE0F This will reset all token usage statistics.")),console.log(Y.gray(" Feature not yet implemented."));return}if(n.session){let m=c.getCurrentSessionUsage();if(!m){console.log(Y.gray("No active session."));return}console.log(""),console.log(Y.bold.white("\u{1F4CA} Current Session Token Usage")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Session ID:")} ${m.sessionId.slice(0,8)}...`),console.log(` ${Y.gray("Started:")} ${new Date(m.startTime).toLocaleString()}`),console.log(` ${Y.gray("API Calls:")} ${m.calls.length}`),console.log(` ${Y.gray("Input Tokens:")} ${m.totals.inputTokens.toLocaleString()}`),console.log(` ${Y.gray("Output Tokens:")} ${m.totals.outputTokens.toLocaleString()}`),console.log(` ${Y.gray("Total Tokens:")} ${Y.bold(m.totals.totalTokens.toLocaleString())}`),console.log(` ${Y.gray("Estimated Cost:")} ${Y.green("$"+m.estimatedCost.totalCost.toFixed(4))}`),console.log("");return}let u=c.getAllTimeStats();console.log(""),console.log(Y.bold.white("\u{1F4CA} Token Usage Statistics")),console.log(Y.dim("\u2500".repeat(40))),console.log(` ${Y.gray("Total API Calls:")} ${u.totalCalls.toLocaleString()}`),console.log(` ${Y.gray("Total Tokens:")} ${u.totalTokens.toLocaleString()}`),console.log(` ${Y.gray("Total Cost:")} ${Y.green("$"+u.totalCost.toFixed(4))}`),console.log(""),console.log(Y.bold.white(" Averages per Call:")),console.log(` ${Y.gray("Input:")} ${u.averageInputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Output:")} ${u.averageOutputTokens.toLocaleString()} tokens`),console.log(""),console.log(Y.bold.white(" Peak Usage:")),console.log(` ${Y.gray("Input:")} ${u.peakInputTokens.toLocaleString()} tokens`),console.log(` ${Y.gray("Output:")} ${u.peakOutputTokens.toLocaleString()} tokens`),console.log("")}catch(s){M.error("Tokens command failed",s),console.error(Y.red("\u274C Tokens command failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i.command("data").description("Manage stored data (GDPR compliance)").argument("[action]","Action to perform: list, export, delete","list").option("--cwd <path>","Run in a specific project directory").option("-o, --output <file>","Output file for export").action(async(n,s)=>{try{let{getConsentManager:c}=await Promise.resolve().then(()=>(G8(),Stt)),u=await c();switch(n.toLowerCase()){case"list":{console.log(""),console.log(Y.bold.white("\u{1F4C1} Stored Data")),console.log(Y.dim("\u2500".repeat(40)));let m=Eo(),g=qc(RQ(s));console.log(Y.bold.cyan(" Global Data:")),console.log(` ${Y.gray("Location:")} ${m}`),console.log(` ${Y.gray("Contents:")} config, credentials, consent, token usage, logs`),await Ls(g)&&(console.log(""),console.log(Y.bold.cyan(" Project Data:")),console.log(` ${Y.gray("Location:")} ${g}`),console.log(` ${Y.gray("Contents:")} session state, backups, cache, context index`)),console.log(""),console.log(Y.gray('Use "compass data export" to export all data')),console.log(Y.gray('Use "compass consent revoke" to delete all data')),console.log("");break}case"export":{let m=await u.exportUserData(),g=JSON.stringify(m,null,2);if(s.output){let{safeWriteFile:v}=await Promise.resolve().then(()=>(yp(),Lve));await v(s.output,g),console.log(Y.green(`\u2705 Data exported to ${s.output}`))}else console.log(g);break}case"delete":{console.log(Y.yellow('\u26A0\uFE0F To delete all data, use "compass consent revoke"'));break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: list, export, delete")),process.exit(1)}}catch(c){M.error("Data command failed",c),console.error(Y.red("\u274C Data command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("cache").description("Manage cached data").argument("[action]","Action to perform: clear, status","status").option("--cwd <path>","Run in a specific project directory").action(async(n,s)=>{try{let c=qc(RQ(s)),u=`${c}/cache`,m=`${c}/context`;switch(n.toLowerCase()){case"status":{console.log(""),console.log(Y.bold.white("\u{1F4BE} Cache Status")),console.log(Y.dim("\u2500".repeat(40))),await Ls(u)?(console.log(` ${Y.gray("Cache directory:")} ${u}`),console.log(` ${Y.green("\u2713")} Cache directory exists`)):console.log(` ${Y.gray("Cache directory:")} ${Y.yellow("Not initialized")}`),await Ls(m)?(console.log(` ${Y.gray("Context index:")} ${m}`),console.log(` ${Y.green("\u2713")} Context index exists`)):console.log(` ${Y.gray("Context index:")} ${Y.yellow("Not initialized")}`),console.log(""),console.log(Y.gray('Use "compass cache clear" to clear all cached data')),console.log("");break}case"clear":{let g=!1;await Ls(u)&&(await J_(u),await _c(u),console.log(Y.green("\u2705 Cache cleared")),g=!0),await Ls(m)&&(await J_(m),await _c(m),console.log(Y.green("\u2705 Context index cleared")),g=!0),g||console.log(Y.gray("No cache to clear."));break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: status, clear")),process.exit(1)}}catch(c){M.error("Cache command failed",c),console.error(Y.red("\u274C Cache command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("update").description("Check for and install updates").argument("[action]","Action to perform: check, install, history","check").option("-f, --force","Force update check (ignore interval)").option("--npm","Use npm for installation").option("--yarn","Use yarn for installation").option("--pnpm","Use pnpm for installation").action(async(n,s)=>{try{let{getUpdateService:c}=await Promise.resolve().then(()=>(cDe(),Qct)),u=await c();switch(n.toLowerCase()){case"check":{console.log(""),console.log(Y.cyan("Checking for updates..."));let m=await u.checkForUpdates(s.force);m.error?console.log(Y.red(`Failed to check for updates: ${m.error}`)):m.updateAvailable&&m.latestVersion?u.displayUpdateNotification(m):(console.log(""),console.log(Y.green(`You are on the latest version (${m.currentVersion})`)),console.log(""));break}case"install":{let m=s.npm?"npm":s.yarn?"yarn":s.pnpm?"pnpm":await u.detectPackageManager();await u.performUpdate(m);break}case"history":{let m=u.getUpdateHistory();if(console.log(""),console.log(Y.bold.cyan("Update History")),console.log(Y.dim("\u2500".repeat(40))),m.length===0)console.log(""),console.log(Y.gray(" No update history recorded.")),console.log("");else{console.log("");for(let g of m.slice().reverse()){let v=g.success?Y.green("\u2713"):Y.red("\u2717"),w=g.success?Y.green:Y.red;console.log(` ${v} ${Y.gray(new Date(g.updatedAt).toLocaleDateString())}`),console.log(` ${Y.gray("From:")} ${g.fromVersion} ${Y.gray("\u2192")} ${w(g.toVersion)}`),console.log(` ${Y.gray("Method:")} ${g.method}`),g.error&&console.log(` ${Y.red("Error:")} ${g.error}`),console.log("")}}break}default:console.log(Y.red(`Unknown action: ${n}`)),console.log(Y.gray("Available actions: check, install, history")),process.exit(1)}}catch(c){M.error("Update command failed",c),console.error(Y.red("\u274C Update command failed")),c instanceof Error&&console.error(Y.red(` ${c.message}`)),process.exit(1)}}),i.command("reset").description("Reset Compass to factory settings").option("--cwd <path>","Run in a specific project directory").option("-f, --force","Skip confirmation prompt").option("--global","Reset global settings only").option("--project","Reset project settings only").action(async n=>{try{if(!n.force){console.log(""),console.log(Y.red("\u26A0\uFE0F WARNING: This will delete all Compass data!")),console.log(Y.gray(" This action cannot be undone.")),console.log(""),console.log(Y.gray(" Use --force to confirm this action.")),console.log("");return}if(n.project&&!n.global){let u=qc(RQ(n));await Ls(u)?(await J_(u),console.log(Y.green("\u2705 Project settings reset"))):console.log(Y.gray("No project settings to reset."));return}if(n.global&&!n.project){let u=Eo();await Ls(u)?(await J_(u),console.log(Y.green("\u2705 Global settings reset"))):console.log(Y.gray("No global settings to reset."));return}let s=Eo(),c=qc(RQ(n));await Ls(s)&&await J_(s),await Ls(c)&&await J_(c),console.log(Y.green("\u2705 Compass has been reset to factory settings")),console.log(Y.gray(' Run "compass setup" to reconfigure.'))}catch(s){M.error("Reset failed",s),console.error(Y.red("\u274C Reset failed")),s instanceof Error&&console.error(Y.red(` ${s.message}`)),process.exit(1)}}),i}async function OLn(){try{let i=MLn();process.on("uncaughtException",t=>{M.error("Uncaught exception",t),console.error(Y.red("\u274C An unexpected error occurred")),t instanceof Error&&console.error(Y.red(` ${t.message}`)),process.exit(1)}),process.on("unhandledRejection",t=>{M.error("Unhandled rejection",t),console.error(Y.red("\u274C An unexpected error occurred")),t instanceof Error&&console.error(Y.red(` ${t.message}`)),process.exit(1)}),await i.parseAsync(process.argv)}catch(i){M.error("CLI error",i),console.error(Y.red("\u274C CLI error")),i instanceof Error&&console.error(Y.red(` ${i.message}`)),process.exit(1)}}OLn();
|
|
4309
4309
|
/*! Bundled license information:
|
|
4310
4310
|
|
|
4311
4311
|
safe-buffer/index.js:
|