@compass-ai/nova 1.0.70 → 1.0.71
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/README.md +36 -1
- package/dist/cli.js +4 -4
- package/dist/index.js +2 -2
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -263,7 +263,42 @@ nova reset --force
|
|
|
263
263
|
COMPASS_DEBUG=true nova
|
|
264
264
|
```
|
|
265
265
|
|
|
266
|
-
##
|
|
266
|
+
## Uninstalling
|
|
267
|
+
|
|
268
|
+
To uninstall Nova:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npm uninstall -g @compass-ai/nova
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
During uninstall, you'll be prompted to optionally remove your user data stored in `~/.compass/`. This directory contains:
|
|
275
|
+
|
|
276
|
+
- Configuration settings
|
|
277
|
+
- API credentials (encrypted)
|
|
278
|
+
- Conversation history and saved sessions
|
|
279
|
+
- Project memories
|
|
280
|
+
- Custom commands, agents, and skills
|
|
281
|
+
- Token usage tracking
|
|
282
|
+
|
|
283
|
+
**By default, this data is preserved** so you can reinstall Nova later without losing your settings.
|
|
284
|
+
|
|
285
|
+
### Complete Removal
|
|
286
|
+
|
|
287
|
+
To remove Nova and all user data in one step:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# The uninstall prompt will ask if you want to delete ~/.compass
|
|
291
|
+
npm uninstall -g @compass-ai/nova
|
|
292
|
+
# Answer 'y' when prompted
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Or manually remove data after uninstalling:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
rm -rf ~/.compass
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Contributing
|
|
267
302
|
|
|
268
303
|
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
|
|
269
304
|
|
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.70",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.71",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(`
|
|
@@ -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.71",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.70";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.71";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.70",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.71",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:
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var exr=Object.create;var Eme=Object.defineProperty;var txr=Object.getOwnPropertyDescriptor;var rxr=Object.getOwnPropertyNames;var nxr=Object.getPrototypeOf,ixr=Object.prototype.hasOwnProperty;var Us=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(r,n)=>(typeof require<"u"?require:r)[n]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Jt=(i,r)=>()=>(i&&(r=i(i=0)),r);var dt=(i,r)=>()=>(r||i((r={exports:{}}).exports,r),r.exports),Hw=(i,r)=>{for(var n in r)Eme(i,n,{get:r[n],enumerable:!0})},vvt=(i,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of rxr(r))!ixr.call(i,l)&&l!==n&&Eme(i,l,{get:()=>r[l],enumerable:!(o=txr(r,l))||o.enumerable});return i};var So=(i,r,n)=>(n=i!=null?exr(nxr(i)):{},vvt(r||!i||!i.__esModule?Eme(n,"default",{value:i,enumerable:!0}):n,i)),sxr=i=>vvt(Eme({},"__esModule",{value:!0}),i);function axr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.anthropic=="object"&&r.anthropic!==null&&typeof r.ollama=="object"&&r.ollama!==null&&typeof r.project=="object"&&r.project!==null&&typeof r.safety=="object"&&r.safety!==null&&typeof r.ui=="object"&&r.ui!==null&&typeof r.session=="object"&&r.session!==null&&typeof r.update=="object"&&r.update!==null&&typeof r.agentic=="object"&&r.agentic!==null}function oxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.model=="string"&&typeof r.maxTokens=="number"&&typeof r.temperature=="number"}function cxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.rootDir=="string"&&Array.isArray(r.ignorePatterns)&&Array.isArray(r.includePatterns)&&typeof r.maxFileSize=="number"&&typeof r.indexOnStartup=="boolean"}function lxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.requireApproval=="boolean"&&Array.isArray(r.autoApprovePatterns)&&Array.isArray(r.blockedPatterns)&&typeof r.maxFilesPerOperation=="number"&&typeof r.backupBeforeModify=="boolean"&&typeof r.shellCommandTimeout=="number"&&Array.isArray(r.allowedShellCommands)&&Array.isArray(r.blockedShellCommands)}function uxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r=="object"&&r!==null}function dxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.autoSave=="boolean"&&typeof r.autoSaveInterval=="number"&&typeof r.maxHistoryLength=="number"&&typeof r.autoCompactThreshold=="number"&&typeof r.sessionExpiryDays=="number"}function pxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.checkOnStartup=="boolean"&&typeof r.checkInterval=="number"&&typeof r.showNotifications=="boolean"&&typeof r.notificationStyle=="string"&&["banner","minimal","detailed","silent"].includes(r.notificationStyle)&&typeof r.includePrerelease=="boolean"}function fxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.version=="string"&&typeof r.config=="object"&&r.config!==null}var xvt=Jt(()=>{"use strict"});function wvt(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.dataCollection=="boolean"&&typeof r.telemetry=="boolean"&&typeof r.analytics=="boolean"&&typeof r.errorReporting=="boolean"}function mxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.id=="string"&&typeof r.version=="string"&&typeof r.grantedAt=="string"&&typeof r.expiresAt=="string"&&wvt(r.consent)}function _xr(){return{dataCollection:kme.dataCollection.defaultValue,telemetry:kme.telemetry.defaultValue,analytics:kme.analytics.defaultValue,errorReporting:kme.errorReporting.defaultValue}}function hxr(){return{dataCollection:!0,telemetry:!0,analytics:!0,errorReporting:!0}}function gxr(){return{dataCollection:!0,telemetry:!1,analytics:!1,errorReporting:!1}}var SMe,kme,EMe=Jt(()=>{"use strict";SMe="1.0.0",kme={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 kH,CH=Jt(()=>{"use strict";kH=(l=>(l.MANUAL="manual",l.AUTO="auto",l.STRICT="strict",l.SMART="smart",l))(kH||{})});function Ixr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.updateAvailable=="boolean"&&typeof r.currentVersion=="string"&&typeof r.checkedAt=="string"}function bxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.checkOnStartup=="boolean"&&typeof r.checkInterval=="number"&&typeof r.showNotifications=="boolean"&&typeof r.notificationStyle=="string"&&typeof r.includePrerelease=="boolean"}function vxr(i){return["major","minor","patch","prerelease","build"].includes(i)}function xxr(i){return["banner","minimal","detailed","silent"].includes(i)}var yxr,Avt=Jt(()=>{"use strict";yxr={checkOnStartup:!0,checkInterval:4,showNotifications:!0,notificationStyle:"banner",includePrerelease:!1}});var Rq,kMe,Cme,Wq=Jt(()=>{"use strict";Rq=(b=>(b.DIRECT="direct",b.CLARIFICATION="clarification",b.TODO_LIST="todo_list",b.PLAN="plan",b.PLAN_ADOPT="plan_adopt",b.NO_ACTION="no_action",b.SPAWN_AGENT="spawn_agent",b))(Rq||{}),kMe=(b=>(b.PENDING="pending",b.IN_PROGRESS="in_progress",b.PAUSED="paused",b.COMPLETED="completed",b.FAILED="failed",b.SKIPPED="skipped",b.ROLLED_BACK="rolled_back",b))(kMe||{}),Cme=(W=>(W.IDLE="idle",W.CONTEXT_GATHERING="context_gathering",W.COMPLEXITY_ASSESSMENT="complexity_assessment",W.CLARIFICATION="clarification",W.PLAN_GENERATION="plan_generation",W.PLAN_REVIEW="plan_review",W.EXECUTION="execution",W.VERIFICATION="verification",W.COMPLETED="completed",W.FAILED="failed",W))(Cme||{})});var Tvt={};Hw(Tvt,{AGENT_SOURCE_PRIORITY:()=>Zq,compareAgentPriority:()=>Gvt,createDefaultAgentDefinition:()=>kvt,getAgentSourcePriority:()=>Gme,isValidAgentFrontmatter:()=>Nme,isValidAgentPermissionMode:()=>Tme,isValidAgentSource:()=>Svt,isValidCLIAgentConfig:()=>Evt,parseToolsList:()=>ED,serializeToolsList:()=>Cvt});function Tme(i){return typeof i=="string"&&["default","acceptEditsAsk","bypassPermissions","plan","ignore","acceptEdits","dontAsk"].includes(i)}function Svt(i){return typeof i=="string"&&["project","cli","user","builtin"].includes(i)}function Nme(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(typeof r.name!="string"||r.name.length===0||typeof r.description!="string"||r.description.length===0||r.tools!==void 0&&typeof r.tools!="string"||r.disallowedTools!==void 0&&typeof r.disallowedTools!="string"||r.model!==void 0&&typeof r.model!="string"||r.permissionMode!==void 0&&!Tme(r.permissionMode)||r.skills!==void 0&&typeof r.skills!="string"||r.standalone!==void 0&&typeof r.standalone!="boolean"||r.mcpServers!==void 0&&typeof r.mcpServers!="string")}function Evt(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(typeof r.description!="string"||typeof r.prompt!="string"||r.tools!==void 0&&!Array.isArray(r.tools)||r.disallowedTools!==void 0&&!Array.isArray(r.disallowedTools)||r.model!==void 0&&typeof r.model!="string"||r.permissionMode!==void 0&&!Tme(r.permissionMode)||r.skills!==void 0&&!Array.isArray(r.skills)||r.standalone!==void 0&&typeof r.standalone!="boolean"||r.mcpServers!==void 0&&!Array.isArray(r.mcpServers))}function kvt(i,r,n,o="builtin"){return{id:`${o}-${i}`,name:i,description:r,systemPrompt:n,source:o,permissionMode:"default",isActive:!0,rawFrontmatter:{name:i,description:r}}}function ED(i){if(!(!i||i.trim()===""))return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function Cvt(i){if(!(!i||i.length===0))return i.join(", ")}function Gme(i){return Zq.indexOf(i)}function Gvt(i,r){return Gme(i.source)-Gme(r.source)}var Zq,Fme=Jt(()=>{"use strict";Zq=["builtin","user","cli","project"]});function Axr(){return{totalUsageTimeMs:0,lastRatingShownAt:null,lastRatingSubmittedAt:null,totalRatingsSubmitted:0,totalSessions:0,firstUsedAt:new Date().toISOString(),lastActivityAt:null}}function Sxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.totalUsageTimeMs=="number"&&(r.lastRatingShownAt===null||typeof r.lastRatingShownAt=="string")&&(r.lastRatingSubmittedAt===null||typeof r.lastRatingSubmittedAt=="string")&&typeof r.totalRatingsSubmitted=="number"&&typeof r.totalSessions=="number"&&typeof r.firstUsedAt=="string"&&(r.lastActivityAt===null||typeof r.lastActivityAt=="string")}var wxr,Nvt=Jt(()=>{"use strict";wxr={usageTimeThresholdMs:12e4,cooldownPeriodMs:864e5,activityWindowMs:12e4,cooldownMultiplier:1.5,maxCooldownPeriodMs:6048e5}});function Wme(i){return typeof i=="string"&&Fvt.includes(i)}function Exr(i){return typeof i=="string"&&["personal","project"].includes(i)}function kxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(r.description!==void 0&&typeof r.description!="string"||r.enabled!==void 0&&typeof r.enabled!="boolean"||r.tools!==void 0&&!Array.isArray(r.tools)||r.match!==void 0&&typeof r.match!="object"||r.timeout!==void 0&&typeof r.timeout!="number")}function CMe(i){return Rme.indexOf(i)}function Cxr(i,r){return CMe(i.source)-CMe(r.source)}var Fvt,Rme,GMe=Jt(()=>{"use strict";Fvt=["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop"],Rme=["personal","project"]});function iZ(i){if(!i||typeof i!="object")return!1;let r=i;return typeof r.version=="string"&&typeof r.id=="string"&&typeof r.sessionId=="string"&&typeof r.projectPath=="string"&&typeof r.startedAt=="string"&&typeof r.endedAt=="string"&&typeof r.messageCount=="number"&&typeof r.summary=="string"&&Array.isArray(r.messages)&&Array.isArray(r.topics)&&(Array.isArray(r.operations)||Array.isArray(r.toolsUsed)&&Array.isArray(r.filesModified)&&Array.isArray(r.filesRead))}var TMe,NMe=Jt(()=>{"use strict";TMe="1.0"});var FMe,Rvt=Jt(()=>{"use strict";FMe=class i extends Error{scope;provider;model;limitValue;currentUsage;resetAt;constructor(r){let o=new Date(r.resetAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),l=r.scope==="model"?`model "${r.model}"`:`provider "${r.provider}"`;super(`Daily token limit exceeded for ${l}. Used ${r.currentUsage.toLocaleString()} / ${r.limitValue.toLocaleString()} tokens. Resets at ${o}.`),this.name="TokenLimitExceededError",this.scope=r.scope,this.provider=r.provider,this.model=r.model,this.limitValue=r.limitValue,this.currentUsage=r.currentUsage,this.resetAt=r.resetAt,Object.setPrototypeOf(this,i.prototype)}}});var Vq,kD,GH,Zme,RMe,Pq,WMe,ZMe,Gxr,TH,VMe,Txr,PMe,DMe,MMe,YMe,OMe,HMe,Dq,JMe,sZ,Vme,CD,aZ,Wvt,yC,LMe,XMe,Nxr,Fxr,oZ,Rxr,Pme,Wxr,Zxr,Vxr,Pxr,Dxr,Mxr,Zvt,Mq,NH,Vvt,UMe,Dme,Yq,Mme,Pvt,Dvt,Oq,Yxr,QMe,jMe,Hq,Oxr,Mvt,Hxr,Jxr,Lxr,Jw,SN,Yvt,BMe,t1,Xxr,Uxr,Qxr,jxr,Bxr,zxr,EN,kN,EI,Yme,qxr,$xr,Kxr,ewr,twr,zMe,qMe,rwr,od=Jt(()=>{"use strict";Vq=".compass",kD=".compass",GH="config.json",Zme="session.json",RMe="consent.json",Pq="credentials.enc",WMe="logs",ZMe="backups",Gxr="cache",TH="saved-sessions",VMe="index",Txr="context",PMe="temp",DMe="commands",MMe="agents",YMe="skills",OMe="hooks",HMe="rules",Dq="projects",JMe="memory",sZ="NOVA.md",Vme="NOVA.local.md",CD="MEMORY.md",aZ=200,Wvt="chats",yC=16384,LMe=2e5,XMe=8e4,Nxr=80,Fxr=10,oZ={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},Rxr="haiku",Pme=200,Wxr=75,Zxr=5,Vxr=0,Pxr=80,Dxr=!0,Mxr=3,Zvt=30,Mq=1,NH=100,Vvt=7,UMe=365,Dme=6e4,Yq=12e4,Mme=6e5,Pvt=50,Dvt=1024*1024,Oq=100,Yxr=15,QMe=8e3,jMe=4e4,Hq=4e3,Oxr=6e3,Mvt=4e3,Hxr=90,Jxr=1e5,Lxr=500*1024*1024,Jw="claude-sonnet-4-5-20250929",SN=1,Yvt=.5,BMe="haiku",t1="verbose_analyst",Xxr=4,Uxr="banner",Qxr=4,jxr=1e3,Bxr=16e3,zxr=.1,EN={anthropic:{model:Jw,maxTokens:16384,temperature:SN},ollama:{model:"glm-4.7:cloud",endpoint:"https://ollama.com",maxTokens:16384,temperature:Yvt},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:Dvt,indexOnStartup:!0},safety:{requireApproval:!0,autoApprovePatterns:[],blockedPatterns:[".env*","*.key","*.pem","*.p12","*.pfx","secrets/**","**/secrets/**","**/*.secret","**/credentials*","**/password*"],maxFilesPerOperation:Pvt,backupBeforeModify:!0,shellCommandTimeout:Yq,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:Dme,maxHistoryLength:Oq,autoCompactThreshold:8e4,sessionExpiryDays:Zvt,unleash:!1},update:{checkOnStartup:!0,checkInterval:Xxr,showNotifications:!0,notificationStyle:Uxr,includePrerelease:!1},agentic:{maxIterations:Pme,costWarningThreshold:Zxr,costHardCap:Vxr,autoCompactAtPercent:Pxr,stuckDetectionEnabled:Dxr,stuckDetectionThreshold:Mxr,maxIterationsPerTask:Wxr}},kN=["anthropic","ollama","zai","minimax"],EI={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"},Yme={anthropic:EI.API_KEY,ollama:EI.OLLAMA_API_KEY,zai:EI.ZAI_API_KEY,minimax:EI.MINIMAX_API_KEY},qxr="1.0.70",$xr="Compass CLI",Kxr="",ewr="1.0.0",twr={".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"},zMe=["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"],qMe=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],rwr=[".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"]});var GD,Ovt,Ome=Jt(()=>{"use strict";xvt();EMe();CH();Avt();Wq();Fme();Nvt();GMe();NMe();Rvt();od();GD="BASIC",Ovt=["BASIC","PRO","MAX","ENTERPRISE","UNLIMITED"]});var $Me={};Hw($Me,{CLAUDE_MODELS:()=>Lw,MODEL_ALIASES:()=>Jq,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>Hvt,calculateModelCost:()=>zvt,compareModels:()=>qvt,getAvailableAliases:()=>Uvt,getAvailableModelIds:()=>Xvt,getAvailableModels:()=>cZ,getCheapestModel:()=>Kvt,getDefaultModel:()=>jvt,getDefaultModelId:()=>Bvt,getModelConfig:()=>n_,getModelDescription:()=>Hme,getModelTier:()=>t1t,getModelsByCapability:()=>$vt,getMostCapableModel:()=>e1t,hasFullAccess:()=>Jvt,isAnthropicModel:()=>Lvt,isValidModel:()=>Qvt,resolveModelId:()=>yy});function Jvt(i){return i==="trial"||i==="active"}function yy(i){let r=i.toLowerCase();if(Jq[r])return Jq[r];for(let n of Object.keys(Lw))if(n.toLowerCase()===r)return n;return i}function n_(i){let r=yy(i);return Lw[r]}function Lvt(i){return n_(i)?.provider==="anthropic"}function cZ(){return Object.values(Lw)}function Xvt(){return Object.keys(Lw)}function Uvt(){return Object.keys(Jq)}function Qvt(i){return yy(i)in Lw}function jvt(){return Lw["claude-sonnet-4-5-20250929"]}function Bvt(){return"claude-sonnet-4-5-20250929"}function zvt(i,r,n){let o=n_(i);if(!o)return null;let l=r/1e6*o.pricing.inputPricePerMillion,p=n/1e6*o.pricing.outputPricePerMillion;return l+p}function qvt(i,r,n){let o=n_(i),l=n_(r);if(!o||!l)return 0;switch(n){case"price":return o.pricing.inputPricePerMillion-l.pricing.inputPricePerMillion;case"context":return l.contextWindow-o.contextWindow;case"speed":return l.pricing.inputPricePerMillion-o.pricing.inputPricePerMillion;default:return 0}}function $vt(i){return cZ().filter(r=>r.capabilities[i])}function Kvt(){return cZ().reduce((r,n)=>n.pricing.inputPricePerMillion<r.pricing.inputPricePerMillion?n:r)}function e1t(){return Lw["claude-opus-4-6"]}function t1t(i){let r=yy(i);if(r.includes("haiku"))return"economy";if(r.includes("sonnet"))return"balanced";if(r.includes("opus"))return"premium"}function Hme(i){let r=yy(i);if(r.includes("opus"))return"Most capable model - best for complex reasoning, analysis, and extended thinking";if(r.includes("sonnet"))return"Balanced performance and cost - ideal for most coding tasks";if(r.includes("haiku"))return"Fastest and most economical - great for quick responses and simple tasks";if(r.includes("glm-4.7"))return"OpenSource"}var Hvt,Lw,Jq,BS=Jt(()=>{"use strict";Hvt=15e4;Lw={"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}}},Jq={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 nwr(){let i=new Map;for(let r of FH){let n=i.get(r.category)||[];n.push(r),i.set(r.category,n)}return i}var Lq,KMe,e9e,FH,t9e=Jt(()=>{"use strict";Lq={network:{label:"Network Tools",priority:1},media:{label:"Media Tools",priority:2},development:{label:"Development Tools",priority:3},compression:{label:"Compression Tools",priority:4},text:{label:"Text Processing Tools",priority:5},file:{label:"File Tools",priority:6},system:{label:"System Tools",priority:7}},KMe=36e5,e9e=3e3,FH=[{command:"curl",name:"cURL",category:"network",description:"Transfer data with URLs",decisionRule:"Use for downloading files, making HTTP requests, testing APIs",useCases:["curl -O https://example.com/file.zip",'curl -X POST -d "data" https://api.example.com',"curl -I https://example.com (headers only)"]},{command:"wget",name:"wget",category:"network",description:"Non-interactive network downloader",decisionRule:"Use for downloading files, especially recursive downloads",useCases:["wget https://example.com/file.zip","wget -r https://example.com/docs/","wget -c https://example.com/large.zip (resume)"]},{command:"ssh",name:"SSH",category:"network",description:"Secure shell remote login",decisionRule:"Use for remote server access and secure connections",useCases:["ssh user@host","ssh -L 8080:localhost:80 user@host (tunnel)"]},{command:"ping",name:"Ping",category:"network",description:"Test network connectivity",decisionRule:"Use to check if a host is reachable",useCases:["ping example.com","ping -c 4 example.com (4 packets)"]},{command:"nslookup",name:"nslookup",category:"network",description:"Query DNS records",decisionRule:"Use for DNS lookups and troubleshooting",useCases:["nslookup example.com","nslookup -type=MX example.com"]},{command:"dig",name:"dig",category:"network",description:"DNS lookup utility",decisionRule:"Use for detailed DNS queries",useCases:["dig example.com","dig +short example.com","dig example.com MX"]},{command:"netstat",name:"netstat",category:"network",description:"Network statistics",decisionRule:"Use to view network connections and listening ports",useCases:["netstat -an (all connections)","netstat -tlnp (listening TCP ports)"]},{command:"ffmpeg",name:"FFmpeg",category:"media",description:"Audio/video conversion and processing",decisionRule:"Use for any audio/video conversion, extraction, or manipulation",useCases:["ffmpeg -i input.mp4 output.mp3 (extract audio)","ffmpeg -i input.mp4 -vn -acodec copy output.aac","ffmpeg -i input.mp4 -ss 00:01:00 -t 30 clip.mp4 (trim)"]},{command:"convert",name:"ImageMagick",category:"media",description:"Image conversion and manipulation",decisionRule:"Use for image format conversion, resizing, effects",useCases:["convert input.png output.jpg","convert input.png -resize 50% output.png","convert *.png output.pdf (combine to PDF)"]},{command:"yt-dlp",name:"yt-dlp",category:"media",description:"Video/audio downloader",decisionRule:"Use for downloading videos from YouTube and other sites",useCases:["yt-dlp https://youtube.com/watch?v=...","yt-dlp -x --audio-format mp3 URL (audio only)"]},{command:"git",name:"Git",category:"development",description:"Version control system",decisionRule:"Use for all version control operations",useCases:["git status","git diff","git log --oneline -10"]},{command:"node",name:"Node.js",category:"development",description:"JavaScript runtime",decisionRule:"Use for running JavaScript files or REPL",useCases:["node script.js",'node -e "console.log(1+1)"']},{command:"npm",name:"npm",category:"development",description:"Node.js package manager",decisionRule:"Use for JavaScript package management",useCases:["npm install package","npm run script","npm init -y"]},{command:"python",name:"Python",category:"development",description:"Python interpreter",decisionRule:"Use for running Python scripts or quick computations",useCases:["python script.py",'python -c "print(2**10)"']},{command:"pip",name:"pip",category:"development",description:"Python package manager",decisionRule:"Use for Python package installation",useCases:["pip install package","pip list","pip freeze > requirements.txt"]},{command:"docker",name:"Docker",category:"development",description:"Container platform",decisionRule:"Use for container operations",useCases:["docker ps","docker run -it ubuntu bash","docker build -t myapp ."]},{command:"code",name:"VS Code",category:"development",description:"Visual Studio Code editor",decisionRule:"Use to open files/folders in VS Code",useCases:["code .","code file.js"]},{command:"jq",name:"jq",category:"development",description:"JSON processor",decisionRule:"Use for parsing, filtering, and transforming JSON",useCases:["cat data.json | jq '.field'","jq '.items[] | .name' data.json","curl api.example.com | jq '.'"]},{command:"7z",name:"7-Zip",category:"compression",description:"High compression archiver",decisionRule:"Use for creating/extracting archives, especially 7z format",useCases:["7z x archive.7z","7z a archive.7z folder/"]},{command:"tar",name:"tar",category:"compression",description:"Archive utility",decisionRule:"Use for tar archives, common on Unix systems",useCases:["tar -xzf archive.tar.gz","tar -czf archive.tar.gz folder/","tar -tvf archive.tar (list contents)"]},{command:"zip",name:"zip",category:"compression",description:"Compress files into ZIP format",decisionRule:"Use for creating ZIP archives",useCases:["zip archive.zip file1 file2","zip -r archive.zip folder/"]},{command:"unzip",name:"unzip",category:"compression",description:"Extract ZIP archives",decisionRule:"Use for extracting ZIP files",useCases:["unzip archive.zip","unzip -l archive.zip (list contents)","unzip archive.zip -d destination/"]},{command:"gzip",name:"gzip",category:"compression",description:"GNU compression utility",decisionRule:"Use for gzip compression/decompression",useCases:["gzip file","gzip -d file.gz","gzip -k file (keep original)"]},{command:"grep",name:"grep",category:"text",description:"Search text patterns",decisionRule:"Use for searching patterns in files",useCases:['grep "pattern" file','grep -r "pattern" folder/','grep -i "pattern" file (case insensitive)']},{command:"sed",name:"sed",category:"text",description:"Stream editor",decisionRule:"Use for text transformations and substitutions",useCases:["sed 's/old/new/g' file","sed -i 's/old/new/g' file (in-place)"]},{command:"awk",name:"awk",category:"text",description:"Pattern scanning and processing",decisionRule:"Use for column-based text processing",useCases:["awk '{print $1}' file","awk -F: '{print $1}' /etc/passwd"]},{command:"find",name:"find",category:"file",description:"Search for files",decisionRule:"Use for finding files by name, type, date, etc.",useCases:['find . -name "*.js"',"find . -type f -mtime -7 (modified last 7 days)"]},{command:"rsync",name:"rsync",category:"file",description:"Fast file synchronization",decisionRule:"Use for copying/syncing files with progress and resume",useCases:["rsync -av source/ dest/","rsync -avz source/ user@host:dest/"]},{command:"pandoc",name:"Pandoc",category:"system",description:"Universal document converter",decisionRule:"Use for converting between document formats",useCases:["pandoc input.md -o output.pdf","pandoc input.docx -o output.html"]},{command:"htop",name:"htop",category:"system",description:"Interactive process viewer",decisionRule:"Use for monitoring system resources",useCases:["htop"]},{command:"btop",name:"btop",category:"system",description:"Resource monitor",decisionRule:"Use for monitoring system resources with better UI",useCases:["btop"]},{command:"lsof",name:"lsof",category:"system",description:"List open files",decisionRule:"Use to find which process is using a file or port",useCases:["lsof -i :8080 (what is using port 8080)","lsof /path/to/file"]}]});var r9e,Jme,Xq,n9e,Uq,Lme,Xme,CN,Qq=Jt(()=>{"use strict";r9e="Schedule.md",Jme="sched-",Xq=8,n9e=["active","paused","completed"],Uq=`# Scheduled Tasks
|
|
1
|
+
var exr=Object.create;var Eme=Object.defineProperty;var txr=Object.getOwnPropertyDescriptor;var rxr=Object.getOwnPropertyNames;var nxr=Object.getPrototypeOf,ixr=Object.prototype.hasOwnProperty;var Us=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(r,n)=>(typeof require<"u"?require:r)[n]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Jt=(i,r)=>()=>(i&&(r=i(i=0)),r);var dt=(i,r)=>()=>(r||i((r={exports:{}}).exports,r),r.exports),Hw=(i,r)=>{for(var n in r)Eme(i,n,{get:r[n],enumerable:!0})},vvt=(i,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of rxr(r))!ixr.call(i,l)&&l!==n&&Eme(i,l,{get:()=>r[l],enumerable:!(o=txr(r,l))||o.enumerable});return i};var So=(i,r,n)=>(n=i!=null?exr(nxr(i)):{},vvt(r||!i||!i.__esModule?Eme(n,"default",{value:i,enumerable:!0}):n,i)),sxr=i=>vvt(Eme({},"__esModule",{value:!0}),i);function axr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.anthropic=="object"&&r.anthropic!==null&&typeof r.ollama=="object"&&r.ollama!==null&&typeof r.project=="object"&&r.project!==null&&typeof r.safety=="object"&&r.safety!==null&&typeof r.ui=="object"&&r.ui!==null&&typeof r.session=="object"&&r.session!==null&&typeof r.update=="object"&&r.update!==null&&typeof r.agentic=="object"&&r.agentic!==null}function oxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.model=="string"&&typeof r.maxTokens=="number"&&typeof r.temperature=="number"}function cxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.rootDir=="string"&&Array.isArray(r.ignorePatterns)&&Array.isArray(r.includePatterns)&&typeof r.maxFileSize=="number"&&typeof r.indexOnStartup=="boolean"}function lxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.requireApproval=="boolean"&&Array.isArray(r.autoApprovePatterns)&&Array.isArray(r.blockedPatterns)&&typeof r.maxFilesPerOperation=="number"&&typeof r.backupBeforeModify=="boolean"&&typeof r.shellCommandTimeout=="number"&&Array.isArray(r.allowedShellCommands)&&Array.isArray(r.blockedShellCommands)}function uxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r=="object"&&r!==null}function dxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.autoSave=="boolean"&&typeof r.autoSaveInterval=="number"&&typeof r.maxHistoryLength=="number"&&typeof r.autoCompactThreshold=="number"&&typeof r.sessionExpiryDays=="number"}function pxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.checkOnStartup=="boolean"&&typeof r.checkInterval=="number"&&typeof r.showNotifications=="boolean"&&typeof r.notificationStyle=="string"&&["banner","minimal","detailed","silent"].includes(r.notificationStyle)&&typeof r.includePrerelease=="boolean"}function fxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.version=="string"&&typeof r.config=="object"&&r.config!==null}var xvt=Jt(()=>{"use strict"});function wvt(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.dataCollection=="boolean"&&typeof r.telemetry=="boolean"&&typeof r.analytics=="boolean"&&typeof r.errorReporting=="boolean"}function mxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.id=="string"&&typeof r.version=="string"&&typeof r.grantedAt=="string"&&typeof r.expiresAt=="string"&&wvt(r.consent)}function _xr(){return{dataCollection:kme.dataCollection.defaultValue,telemetry:kme.telemetry.defaultValue,analytics:kme.analytics.defaultValue,errorReporting:kme.errorReporting.defaultValue}}function hxr(){return{dataCollection:!0,telemetry:!0,analytics:!0,errorReporting:!0}}function gxr(){return{dataCollection:!0,telemetry:!1,analytics:!1,errorReporting:!1}}var SMe,kme,EMe=Jt(()=>{"use strict";SMe="1.0.0",kme={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 kH,CH=Jt(()=>{"use strict";kH=(l=>(l.MANUAL="manual",l.AUTO="auto",l.STRICT="strict",l.SMART="smart",l))(kH||{})});function Ixr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.updateAvailable=="boolean"&&typeof r.currentVersion=="string"&&typeof r.checkedAt=="string"}function bxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.checkOnStartup=="boolean"&&typeof r.checkInterval=="number"&&typeof r.showNotifications=="boolean"&&typeof r.notificationStyle=="string"&&typeof r.includePrerelease=="boolean"}function vxr(i){return["major","minor","patch","prerelease","build"].includes(i)}function xxr(i){return["banner","minimal","detailed","silent"].includes(i)}var yxr,Avt=Jt(()=>{"use strict";yxr={checkOnStartup:!0,checkInterval:4,showNotifications:!0,notificationStyle:"banner",includePrerelease:!1}});var Rq,kMe,Cme,Wq=Jt(()=>{"use strict";Rq=(b=>(b.DIRECT="direct",b.CLARIFICATION="clarification",b.TODO_LIST="todo_list",b.PLAN="plan",b.PLAN_ADOPT="plan_adopt",b.NO_ACTION="no_action",b.SPAWN_AGENT="spawn_agent",b))(Rq||{}),kMe=(b=>(b.PENDING="pending",b.IN_PROGRESS="in_progress",b.PAUSED="paused",b.COMPLETED="completed",b.FAILED="failed",b.SKIPPED="skipped",b.ROLLED_BACK="rolled_back",b))(kMe||{}),Cme=(W=>(W.IDLE="idle",W.CONTEXT_GATHERING="context_gathering",W.COMPLEXITY_ASSESSMENT="complexity_assessment",W.CLARIFICATION="clarification",W.PLAN_GENERATION="plan_generation",W.PLAN_REVIEW="plan_review",W.EXECUTION="execution",W.VERIFICATION="verification",W.COMPLETED="completed",W.FAILED="failed",W))(Cme||{})});var Tvt={};Hw(Tvt,{AGENT_SOURCE_PRIORITY:()=>Zq,compareAgentPriority:()=>Gvt,createDefaultAgentDefinition:()=>kvt,getAgentSourcePriority:()=>Gme,isValidAgentFrontmatter:()=>Nme,isValidAgentPermissionMode:()=>Tme,isValidAgentSource:()=>Svt,isValidCLIAgentConfig:()=>Evt,parseToolsList:()=>ED,serializeToolsList:()=>Cvt});function Tme(i){return typeof i=="string"&&["default","acceptEditsAsk","bypassPermissions","plan","ignore","acceptEdits","dontAsk"].includes(i)}function Svt(i){return typeof i=="string"&&["project","cli","user","builtin"].includes(i)}function Nme(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(typeof r.name!="string"||r.name.length===0||typeof r.description!="string"||r.description.length===0||r.tools!==void 0&&typeof r.tools!="string"||r.disallowedTools!==void 0&&typeof r.disallowedTools!="string"||r.model!==void 0&&typeof r.model!="string"||r.permissionMode!==void 0&&!Tme(r.permissionMode)||r.skills!==void 0&&typeof r.skills!="string"||r.standalone!==void 0&&typeof r.standalone!="boolean"||r.mcpServers!==void 0&&typeof r.mcpServers!="string")}function Evt(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(typeof r.description!="string"||typeof r.prompt!="string"||r.tools!==void 0&&!Array.isArray(r.tools)||r.disallowedTools!==void 0&&!Array.isArray(r.disallowedTools)||r.model!==void 0&&typeof r.model!="string"||r.permissionMode!==void 0&&!Tme(r.permissionMode)||r.skills!==void 0&&!Array.isArray(r.skills)||r.standalone!==void 0&&typeof r.standalone!="boolean"||r.mcpServers!==void 0&&!Array.isArray(r.mcpServers))}function kvt(i,r,n,o="builtin"){return{id:`${o}-${i}`,name:i,description:r,systemPrompt:n,source:o,permissionMode:"default",isActive:!0,rawFrontmatter:{name:i,description:r}}}function ED(i){if(!(!i||i.trim()===""))return i.split(",").map(r=>r.trim()).filter(r=>r.length>0)}function Cvt(i){if(!(!i||i.length===0))return i.join(", ")}function Gme(i){return Zq.indexOf(i)}function Gvt(i,r){return Gme(i.source)-Gme(r.source)}var Zq,Fme=Jt(()=>{"use strict";Zq=["builtin","user","cli","project"]});function Axr(){return{totalUsageTimeMs:0,lastRatingShownAt:null,lastRatingSubmittedAt:null,totalRatingsSubmitted:0,totalSessions:0,firstUsedAt:new Date().toISOString(),lastActivityAt:null}}function Sxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r.totalUsageTimeMs=="number"&&(r.lastRatingShownAt===null||typeof r.lastRatingShownAt=="string")&&(r.lastRatingSubmittedAt===null||typeof r.lastRatingSubmittedAt=="string")&&typeof r.totalRatingsSubmitted=="number"&&typeof r.totalSessions=="number"&&typeof r.firstUsedAt=="string"&&(r.lastActivityAt===null||typeof r.lastActivityAt=="string")}var wxr,Nvt=Jt(()=>{"use strict";wxr={usageTimeThresholdMs:12e4,cooldownPeriodMs:864e5,activityWindowMs:12e4,cooldownMultiplier:1.5,maxCooldownPeriodMs:6048e5}});function Wme(i){return typeof i=="string"&&Fvt.includes(i)}function Exr(i){return typeof i=="string"&&["personal","project"].includes(i)}function kxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return!(r.description!==void 0&&typeof r.description!="string"||r.enabled!==void 0&&typeof r.enabled!="boolean"||r.tools!==void 0&&!Array.isArray(r.tools)||r.match!==void 0&&typeof r.match!="object"||r.timeout!==void 0&&typeof r.timeout!="number")}function CMe(i){return Rme.indexOf(i)}function Cxr(i,r){return CMe(i.source)-CMe(r.source)}var Fvt,Rme,GMe=Jt(()=>{"use strict";Fvt=["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop"],Rme=["personal","project"]});function iZ(i){if(!i||typeof i!="object")return!1;let r=i;return typeof r.version=="string"&&typeof r.id=="string"&&typeof r.sessionId=="string"&&typeof r.projectPath=="string"&&typeof r.startedAt=="string"&&typeof r.endedAt=="string"&&typeof r.messageCount=="number"&&typeof r.summary=="string"&&Array.isArray(r.messages)&&Array.isArray(r.topics)&&(Array.isArray(r.operations)||Array.isArray(r.toolsUsed)&&Array.isArray(r.filesModified)&&Array.isArray(r.filesRead))}var TMe,NMe=Jt(()=>{"use strict";TMe="1.0"});var FMe,Rvt=Jt(()=>{"use strict";FMe=class i extends Error{scope;provider;model;limitValue;currentUsage;resetAt;constructor(r){let o=new Date(r.resetAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),l=r.scope==="model"?`model "${r.model}"`:`provider "${r.provider}"`;super(`Daily token limit exceeded for ${l}. Used ${r.currentUsage.toLocaleString()} / ${r.limitValue.toLocaleString()} tokens. Resets at ${o}.`),this.name="TokenLimitExceededError",this.scope=r.scope,this.provider=r.provider,this.model=r.model,this.limitValue=r.limitValue,this.currentUsage=r.currentUsage,this.resetAt=r.resetAt,Object.setPrototypeOf(this,i.prototype)}}});var Vq,kD,GH,Zme,RMe,Pq,WMe,ZMe,Gxr,TH,VMe,Txr,PMe,DMe,MMe,YMe,OMe,HMe,Dq,JMe,sZ,Vme,CD,aZ,Wvt,yC,LMe,XMe,Nxr,Fxr,oZ,Rxr,Pme,Wxr,Zxr,Vxr,Pxr,Dxr,Mxr,Zvt,Mq,NH,Vvt,UMe,Dme,Yq,Mme,Pvt,Dvt,Oq,Yxr,QMe,jMe,Hq,Oxr,Mvt,Hxr,Jxr,Lxr,Jw,SN,Yvt,BMe,t1,Xxr,Uxr,Qxr,jxr,Bxr,zxr,EN,kN,EI,Yme,qxr,$xr,Kxr,ewr,twr,zMe,qMe,rwr,od=Jt(()=>{"use strict";Vq=".compass",kD=".compass",GH="config.json",Zme="session.json",RMe="consent.json",Pq="credentials.enc",WMe="logs",ZMe="backups",Gxr="cache",TH="saved-sessions",VMe="index",Txr="context",PMe="temp",DMe="commands",MMe="agents",YMe="skills",OMe="hooks",HMe="rules",Dq="projects",JMe="memory",sZ="NOVA.md",Vme="NOVA.local.md",CD="MEMORY.md",aZ=200,Wvt="chats",yC=16384,LMe=2e5,XMe=8e4,Nxr=80,Fxr=10,oZ={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},Rxr="haiku",Pme=200,Wxr=75,Zxr=5,Vxr=0,Pxr=80,Dxr=!0,Mxr=3,Zvt=30,Mq=1,NH=100,Vvt=7,UMe=365,Dme=6e4,Yq=12e4,Mme=6e5,Pvt=50,Dvt=1024*1024,Oq=100,Yxr=15,QMe=8e3,jMe=4e4,Hq=4e3,Oxr=6e3,Mvt=4e3,Hxr=90,Jxr=1e5,Lxr=500*1024*1024,Jw="claude-sonnet-4-5-20250929",SN=1,Yvt=.5,BMe="haiku",t1="verbose_analyst",Xxr=4,Uxr="banner",Qxr=4,jxr=1e3,Bxr=16e3,zxr=.1,EN={anthropic:{model:Jw,maxTokens:16384,temperature:SN},ollama:{model:"glm-4.7:cloud",endpoint:"https://ollama.com",maxTokens:16384,temperature:Yvt},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:Dvt,indexOnStartup:!0},safety:{requireApproval:!0,autoApprovePatterns:[],blockedPatterns:[".env*","*.key","*.pem","*.p12","*.pfx","secrets/**","**/secrets/**","**/*.secret","**/credentials*","**/password*"],maxFilesPerOperation:Pvt,backupBeforeModify:!0,shellCommandTimeout:Yq,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:Dme,maxHistoryLength:Oq,autoCompactThreshold:8e4,sessionExpiryDays:Zvt,unleash:!1},update:{checkOnStartup:!0,checkInterval:Xxr,showNotifications:!0,notificationStyle:Uxr,includePrerelease:!1},agentic:{maxIterations:Pme,costWarningThreshold:Zxr,costHardCap:Vxr,autoCompactAtPercent:Pxr,stuckDetectionEnabled:Dxr,stuckDetectionThreshold:Mxr,maxIterationsPerTask:Wxr}},kN=["anthropic","ollama","zai","minimax"],EI={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"},Yme={anthropic:EI.API_KEY,ollama:EI.OLLAMA_API_KEY,zai:EI.ZAI_API_KEY,minimax:EI.MINIMAX_API_KEY},qxr="1.0.71",$xr="Compass CLI",Kxr="",ewr="1.0.0",twr={".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"},zMe=["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"],qMe=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],rwr=[".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"]});var GD,Ovt,Ome=Jt(()=>{"use strict";xvt();EMe();CH();Avt();Wq();Fme();Nvt();GMe();NMe();Rvt();od();GD="BASIC",Ovt=["BASIC","PRO","MAX","ENTERPRISE","UNLIMITED"]});var $Me={};Hw($Me,{CLAUDE_MODELS:()=>Lw,MODEL_ALIASES:()=>Jq,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>Hvt,calculateModelCost:()=>zvt,compareModels:()=>qvt,getAvailableAliases:()=>Uvt,getAvailableModelIds:()=>Xvt,getAvailableModels:()=>cZ,getCheapestModel:()=>Kvt,getDefaultModel:()=>jvt,getDefaultModelId:()=>Bvt,getModelConfig:()=>n_,getModelDescription:()=>Hme,getModelTier:()=>t1t,getModelsByCapability:()=>$vt,getMostCapableModel:()=>e1t,hasFullAccess:()=>Jvt,isAnthropicModel:()=>Lvt,isValidModel:()=>Qvt,resolveModelId:()=>yy});function Jvt(i){return i==="trial"||i==="active"}function yy(i){let r=i.toLowerCase();if(Jq[r])return Jq[r];for(let n of Object.keys(Lw))if(n.toLowerCase()===r)return n;return i}function n_(i){let r=yy(i);return Lw[r]}function Lvt(i){return n_(i)?.provider==="anthropic"}function cZ(){return Object.values(Lw)}function Xvt(){return Object.keys(Lw)}function Uvt(){return Object.keys(Jq)}function Qvt(i){return yy(i)in Lw}function jvt(){return Lw["claude-sonnet-4-5-20250929"]}function Bvt(){return"claude-sonnet-4-5-20250929"}function zvt(i,r,n){let o=n_(i);if(!o)return null;let l=r/1e6*o.pricing.inputPricePerMillion,p=n/1e6*o.pricing.outputPricePerMillion;return l+p}function qvt(i,r,n){let o=n_(i),l=n_(r);if(!o||!l)return 0;switch(n){case"price":return o.pricing.inputPricePerMillion-l.pricing.inputPricePerMillion;case"context":return l.contextWindow-o.contextWindow;case"speed":return l.pricing.inputPricePerMillion-o.pricing.inputPricePerMillion;default:return 0}}function $vt(i){return cZ().filter(r=>r.capabilities[i])}function Kvt(){return cZ().reduce((r,n)=>n.pricing.inputPricePerMillion<r.pricing.inputPricePerMillion?n:r)}function e1t(){return Lw["claude-opus-4-6"]}function t1t(i){let r=yy(i);if(r.includes("haiku"))return"economy";if(r.includes("sonnet"))return"balanced";if(r.includes("opus"))return"premium"}function Hme(i){let r=yy(i);if(r.includes("opus"))return"Most capable model - best for complex reasoning, analysis, and extended thinking";if(r.includes("sonnet"))return"Balanced performance and cost - ideal for most coding tasks";if(r.includes("haiku"))return"Fastest and most economical - great for quick responses and simple tasks";if(r.includes("glm-4.7"))return"OpenSource"}var Hvt,Lw,Jq,BS=Jt(()=>{"use strict";Hvt=15e4;Lw={"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}}},Jq={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 nwr(){let i=new Map;for(let r of FH){let n=i.get(r.category)||[];n.push(r),i.set(r.category,n)}return i}var Lq,KMe,e9e,FH,t9e=Jt(()=>{"use strict";Lq={network:{label:"Network Tools",priority:1},media:{label:"Media Tools",priority:2},development:{label:"Development Tools",priority:3},compression:{label:"Compression Tools",priority:4},text:{label:"Text Processing Tools",priority:5},file:{label:"File Tools",priority:6},system:{label:"System Tools",priority:7}},KMe=36e5,e9e=3e3,FH=[{command:"curl",name:"cURL",category:"network",description:"Transfer data with URLs",decisionRule:"Use for downloading files, making HTTP requests, testing APIs",useCases:["curl -O https://example.com/file.zip",'curl -X POST -d "data" https://api.example.com',"curl -I https://example.com (headers only)"]},{command:"wget",name:"wget",category:"network",description:"Non-interactive network downloader",decisionRule:"Use for downloading files, especially recursive downloads",useCases:["wget https://example.com/file.zip","wget -r https://example.com/docs/","wget -c https://example.com/large.zip (resume)"]},{command:"ssh",name:"SSH",category:"network",description:"Secure shell remote login",decisionRule:"Use for remote server access and secure connections",useCases:["ssh user@host","ssh -L 8080:localhost:80 user@host (tunnel)"]},{command:"ping",name:"Ping",category:"network",description:"Test network connectivity",decisionRule:"Use to check if a host is reachable",useCases:["ping example.com","ping -c 4 example.com (4 packets)"]},{command:"nslookup",name:"nslookup",category:"network",description:"Query DNS records",decisionRule:"Use for DNS lookups and troubleshooting",useCases:["nslookup example.com","nslookup -type=MX example.com"]},{command:"dig",name:"dig",category:"network",description:"DNS lookup utility",decisionRule:"Use for detailed DNS queries",useCases:["dig example.com","dig +short example.com","dig example.com MX"]},{command:"netstat",name:"netstat",category:"network",description:"Network statistics",decisionRule:"Use to view network connections and listening ports",useCases:["netstat -an (all connections)","netstat -tlnp (listening TCP ports)"]},{command:"ffmpeg",name:"FFmpeg",category:"media",description:"Audio/video conversion and processing",decisionRule:"Use for any audio/video conversion, extraction, or manipulation",useCases:["ffmpeg -i input.mp4 output.mp3 (extract audio)","ffmpeg -i input.mp4 -vn -acodec copy output.aac","ffmpeg -i input.mp4 -ss 00:01:00 -t 30 clip.mp4 (trim)"]},{command:"convert",name:"ImageMagick",category:"media",description:"Image conversion and manipulation",decisionRule:"Use for image format conversion, resizing, effects",useCases:["convert input.png output.jpg","convert input.png -resize 50% output.png","convert *.png output.pdf (combine to PDF)"]},{command:"yt-dlp",name:"yt-dlp",category:"media",description:"Video/audio downloader",decisionRule:"Use for downloading videos from YouTube and other sites",useCases:["yt-dlp https://youtube.com/watch?v=...","yt-dlp -x --audio-format mp3 URL (audio only)"]},{command:"git",name:"Git",category:"development",description:"Version control system",decisionRule:"Use for all version control operations",useCases:["git status","git diff","git log --oneline -10"]},{command:"node",name:"Node.js",category:"development",description:"JavaScript runtime",decisionRule:"Use for running JavaScript files or REPL",useCases:["node script.js",'node -e "console.log(1+1)"']},{command:"npm",name:"npm",category:"development",description:"Node.js package manager",decisionRule:"Use for JavaScript package management",useCases:["npm install package","npm run script","npm init -y"]},{command:"python",name:"Python",category:"development",description:"Python interpreter",decisionRule:"Use for running Python scripts or quick computations",useCases:["python script.py",'python -c "print(2**10)"']},{command:"pip",name:"pip",category:"development",description:"Python package manager",decisionRule:"Use for Python package installation",useCases:["pip install package","pip list","pip freeze > requirements.txt"]},{command:"docker",name:"Docker",category:"development",description:"Container platform",decisionRule:"Use for container operations",useCases:["docker ps","docker run -it ubuntu bash","docker build -t myapp ."]},{command:"code",name:"VS Code",category:"development",description:"Visual Studio Code editor",decisionRule:"Use to open files/folders in VS Code",useCases:["code .","code file.js"]},{command:"jq",name:"jq",category:"development",description:"JSON processor",decisionRule:"Use for parsing, filtering, and transforming JSON",useCases:["cat data.json | jq '.field'","jq '.items[] | .name' data.json","curl api.example.com | jq '.'"]},{command:"7z",name:"7-Zip",category:"compression",description:"High compression archiver",decisionRule:"Use for creating/extracting archives, especially 7z format",useCases:["7z x archive.7z","7z a archive.7z folder/"]},{command:"tar",name:"tar",category:"compression",description:"Archive utility",decisionRule:"Use for tar archives, common on Unix systems",useCases:["tar -xzf archive.tar.gz","tar -czf archive.tar.gz folder/","tar -tvf archive.tar (list contents)"]},{command:"zip",name:"zip",category:"compression",description:"Compress files into ZIP format",decisionRule:"Use for creating ZIP archives",useCases:["zip archive.zip file1 file2","zip -r archive.zip folder/"]},{command:"unzip",name:"unzip",category:"compression",description:"Extract ZIP archives",decisionRule:"Use for extracting ZIP files",useCases:["unzip archive.zip","unzip -l archive.zip (list contents)","unzip archive.zip -d destination/"]},{command:"gzip",name:"gzip",category:"compression",description:"GNU compression utility",decisionRule:"Use for gzip compression/decompression",useCases:["gzip file","gzip -d file.gz","gzip -k file (keep original)"]},{command:"grep",name:"grep",category:"text",description:"Search text patterns",decisionRule:"Use for searching patterns in files",useCases:['grep "pattern" file','grep -r "pattern" folder/','grep -i "pattern" file (case insensitive)']},{command:"sed",name:"sed",category:"text",description:"Stream editor",decisionRule:"Use for text transformations and substitutions",useCases:["sed 's/old/new/g' file","sed -i 's/old/new/g' file (in-place)"]},{command:"awk",name:"awk",category:"text",description:"Pattern scanning and processing",decisionRule:"Use for column-based text processing",useCases:["awk '{print $1}' file","awk -F: '{print $1}' /etc/passwd"]},{command:"find",name:"find",category:"file",description:"Search for files",decisionRule:"Use for finding files by name, type, date, etc.",useCases:['find . -name "*.js"',"find . -type f -mtime -7 (modified last 7 days)"]},{command:"rsync",name:"rsync",category:"file",description:"Fast file synchronization",decisionRule:"Use for copying/syncing files with progress and resume",useCases:["rsync -av source/ dest/","rsync -avz source/ user@host:dest/"]},{command:"pandoc",name:"Pandoc",category:"system",description:"Universal document converter",decisionRule:"Use for converting between document formats",useCases:["pandoc input.md -o output.pdf","pandoc input.docx -o output.html"]},{command:"htop",name:"htop",category:"system",description:"Interactive process viewer",decisionRule:"Use for monitoring system resources",useCases:["htop"]},{command:"btop",name:"btop",category:"system",description:"Resource monitor",decisionRule:"Use for monitoring system resources with better UI",useCases:["btop"]},{command:"lsof",name:"lsof",category:"system",description:"List open files",decisionRule:"Use to find which process is using a file or port",useCases:["lsof -i :8080 (what is using port 8080)","lsof /path/to/file"]}]});var r9e,Jme,Xq,n9e,Uq,Lme,Xme,CN,Qq=Jt(()=>{"use strict";r9e="Schedule.md",Jme="sched-",Xq=8,n9e=["active","paused","completed"],Uq=`# Scheduled Tasks
|
|
2
2
|
|
|
3
3
|
> Managed by Nova. Each task below runs on a cron schedule.
|
|
4
4
|
> Edit manually or use the schedule tools to manage tasks.
|
|
@@ -3749,7 +3749,7 @@ ${r}`),o.push({role:"user",content:b}),o}estimateTaskTokens(r,n,o){let l=Kp(r);f
|
|
|
3749
3749
|
`)}KS();var nqe=[{name:"Sessions",description:"Commands for managing your conversation session",commands:[{name:"/clear",description:"Reset session to clean state",usage:"/clear",aliases:["/reset","/restart"]},{name:"/compact",description:"Summarize conversation to reduce token usage",usage:"/compact"},{name:"/export",description:"Export conversation to file",usage:"/export [format]",examples:["/export md","/export json","/export html"],hidden:!0},{name:"/exit",description:"Exit Compass",usage:"/exit",aliases:["/quit","/q"]}]},{name:"Model & Tokens",description:"Commands for model selection and token tracking",commands:[{name:"/model",description:"Switch between models",usage:"/model [name]",examples:["/model","/model sonnet","/model opus","/model haiku"]},{name:"/tokens",description:"Display token usage statistics",usage:"/tokens"},{name:"/context",description:"Show context window usage",usage:"/context"}]},{name:"File Operations",description:"Commands for file management and indexing",commands:[{name:"/files",description:"List indexed project files",usage:"/files [pattern]",examples:["/files","/files *.ts","/files src/"]},{name:"/index",description:"Reindex project files",usage:"/index"}]},{name:"Approval & Safety",description:"Commands for approval mode management",commands:[{name:"/approve",description:"Toggle approval mode",usage:"/approve [mode]",examples:["/approve","/approve auto","/approve manual"]}]},{name:"Help & Config",description:"Commands for help and configuration",commands:[{name:"/help",description:"Show this help menu",usage:"/help [topic]",examples:["/help","/help model","/help files"]},{name:"/config",description:"Display current configuration",usage:"/config"}]},{name:"Updates",description:"Commands for checking and installing updates",commands:[{name:"/update",description:"Check for and install updates",usage:"/update [check|install|history|version]",examples:["/update","/update check","/update install","/update history"],aliases:["/upgrade","/up"]}]},{name:"Cleanup",description:"Commands for cleaning up stored data",commands:[{name:"/purge",description:"Delete logs, backups, chats, and plans from .compass",usage:"/purge [--force|--help]",examples:["/purge","/purge --force"],aliases:["/cleanup"]}]}],jdn=[{name:"Setup & Configuration",description:"Commands for initial setup and configuration",commands:[{name:"setup",description:"Run first-time setup wizard",usage:"compass setup"},{name:"init",description:"Initialize Compass in current project",usage:"compass init"},{name:"config",description:"View or modify configuration",usage:"compass config [key] [value]",examples:["compass config","compass config model sonnet"]}]},{name:"Data Management",description:"Commands for managing stored data",commands:[{name:"tokens",description:"View token usage history",usage:"compass tokens [--export]"},{name:"consent",description:"Manage consent settings",usage:"compass consent [status|review|revoke]"},{name:"data",description:"Manage stored data",usage:"compass data [list|export|delete]"},{name:"cache",description:"Clear cached data",usage:"compass cache clear"},{name:"reset",description:"Reset to factory settings",usage:"compass reset [--force]"}]},{name:"Updates",description:"Commands for checking and installing updates",commands:[{name:"update",description:"Check for and install updates",usage:"compass update [check|install|history]",examples:["compass update","compass update check","compass update install","compass update history"]}]}];function zLt(i){let r=i.commands.filter(o=>!o.hidden);if(r.length===0)return"";let n=["",Dn.bold.cyan(`\u2501\u2501\u2501 ${i.name} \u2501\u2501\u2501`),Dn.gray(i.description),""];for(let o of r){if(n.push(` ${Dn.yellow(o.name)}`),n.push(` ${Dn.white(o.description)}`),o.usage&&n.push(` ${Dn.gray("Usage:")} ${Dn.dim(o.usage)}`),o.aliases&&o.aliases.length>0&&n.push(` ${Dn.gray("Aliases:")} ${Dn.dim(o.aliases.join(", "))}`),o.examples&&o.examples.length>0){n.push(` ${Dn.gray("Examples:")}`);for(let l of o.examples)n.push(` ${Dn.dim(l)}`)}n.push("")}return n.join(`
|
|
3750
3750
|
`)}function Bdn(){try{let{getCustomCommands:i}=(BLt(),sxr(jLt)),r=i();return!r||r.length===0?null:{name:"Custom Commands",description:"User-defined commands from .compass/commands/ or ~/.compass/commands/",commands:r.map(o=>{let l=o.namespace?`${o.scope}:${o.namespace}`:o.scope;return{name:`/${o.name}`,description:`${o.description} (${l})`,usage:o.frontmatter["argument-hint"]?`/${o.name} ${o.frontmatter["argument-hint"]}`:`/${o.name}`}})}}catch{return null}}function zdn(){let i=[...nqe],r=Bdn();r&&i.push(r);let n=i.map(zLt);return["",Dn.bold.white("Compass CLI - Interactive Commands"),Dn.gray("Use these commands during an interactive session"),...n,Dn.dim("\u2500".repeat(50)),Dn.gray("Tip: Type any natural language request to interact with Compass"),""].join(`
|
|
3751
3751
|
`)}function qdn(i){let r=i.startsWith("/")?i:`/${i}`,o=nqe.flatMap(p=>p.commands).find(p=>p.name===r||p.name===i||p.aliases?.includes(i)||p.aliases?.includes(r));if(!o)return null;let l=["",Dn.bold.cyan(o.name),Dn.white(o.description),""];if(o.usage&&(l.push(Dn.gray("Usage:")),l.push(` ${o.usage}`),l.push("")),o.aliases&&o.aliases.length>0&&(l.push(Dn.gray("Aliases:")),l.push(` ${o.aliases.join(", ")}`),l.push("")),o.examples&&o.examples.length>0){l.push(Dn.gray("Examples:"));for(let p of o.examples)l.push(` ${Dn.dim("$")} ${p}`);l.push("")}return l.join(`
|
|
3752
|
-
`)}F4();var p7n="1.0.
|
|
3752
|
+
`)}F4();var p7n="1.0.71",f7n="compass-cli",m7n="AI-powered development assistance using Anthropic's Claude models";export{Ume as ACTIVE_PLAN_TYPE_LIMITS,Zq as AGENT_SOURCE_PRIORITY,m7n as APP_DESCRIPTION,$xr as APP_DISPLAY_NAME,f7n as APP_NAME,Kxr as APP_TAGLINE,qxr as APP_VERSION,XLt as ASCII_BANNER,XMe as AUTO_COMPACT_TRIGGER,Dme as AUTO_SAVE_INTERVAL_MS,Zee as ActionLogger,$Vt as ActionStatus,ZI as ActionType,zhe as AnthropicClient,$_e as ApprovalManager,kH as ApprovalMode,ZMe as BACKUPS_DIR,Mq as BACKUP_RETENTION_DAYS,rwr as BINARY_EXTENSIONS,ehe as BackupManager,Gxr as CACHE_DIR,Lq as CATEGORY_INFO,TMe as CHAT_ARCHIVE_VERSION,Lw as CLAUDE_MODELS,jdn as CLI_COMMANDS,Mdn as COMPASS_ICON,GH as CONFIG_FILE_NAME,UMe as CONSENT_EXPIRY_DAYS,RMe as CONSENT_FILE_NAME,ewr as CONSENT_VERSION,Txr as CONTEXT_DIR,Hxr as CONTEXT_WINDOW_SAFETY_MARGIN,Nxr as CONTEXT_WINDOW_WARNING_PERCENT,Pq as CREDENTIALS_FILE_NAME,CN as CRON_DAY_NAMES,Lme as CRON_PRESETS,X_e as ChatArchivalService,Bee as ComplexityClassifier,W_e as ConfigManager,Y_e as ConsentManager,L_e as CredentialStore,Xme as DAY_NAME_TO_CRON,SN as DEFAULT_ANTHROPIC_TEMPERATURE,Rxr as DEFAULT_CLASSIFIER_MODEL,oZ as DEFAULT_CLASSIFIER_MODELS_BY_PROVIDER,EN as DEFAULT_CONFIG,Fxr as DEFAULT_COST_WARNING_THRESHOLD,yC as DEFAULT_MAX_TOKENS,Jw as DEFAULT_MODEL,Yvt as DEFAULT_OLLAMA_TEMPERATURE,t1 as DEFAULT_PERSONALITY_MODE,GD as DEFAULT_PLAN_TYPE,wxr as DEFAULT_RATING_CONFIG,Uq as DEFAULT_SCHEDULE_HEADER,yxr as DEFAULT_UPDATE_CONFIG,Qme as DISABLED_MODELS,EI as ENV_VARS,Lee as EnhancedContextGatherer,D_e as EventEmitter,Rq as ExecutionMode,E4t as ExecutionStrategy,Vq as GLOBAL_COMPASS_DIR,jK as GitService,Fvt as HOOK_EVENTS,Rme as HOOK_SOURCE_PRIORITY,xxe as HistoryManager,VMe as INDEX_DIR,cre as InteractiveClarifier,A4t as IssueCategory,w4t as IssueSeverity,twr as LANGUAGE_EXTENSIONS,WMe as LOGS_DIR,ite as LogInterpreter,NH as MAX_BACKUP_FILES,Lxr as MAX_CACHE_SIZE_BYTES,Hq as MAX_COMMAND_OUTPUT_TOKENS,Yxr as MAX_DYNAMIC_STREAM_BLOCKS,Pvt as MAX_FILES_PER_OPERATION,QMe as MAX_FILE_READ_TOKENS,Dvt as MAX_FILE_SIZE_BYTES,Oq as MAX_HISTORY_LENGTH,Jxr as MAX_INDEXED_FILES,aZ as MAX_MEMORY_LINES,Qxr as MAX_RETRY_ATTEMPTS,Oxr as MAX_SEARCH_RESULT_TOKENS,JMe as MEMORY_DIR,CD as MEMORY_FILE_NAME,Jq as MODEL_ALIASES,Vme as NOVA_LOCAL_MD_FILE_NAME,sZ as NOVA_MD_FILE_NAME,Hvt as NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT,a9e as PLAN_LIMITS,Dq as PROJECTS_DIR,kD as PROJECT_COMPASS_DIR,kN as PROVIDERS,Yme as PROVIDER_ENV_VARS,lre as PlanGenerator,jxr as RETRY_BASE_DELAY_MS,zxr as RETRY_JITTER_FACTOR,Bxr as RETRY_MAX_DELAY_MS,Bq as ROLLING_WINDOW_HOURS,jq as ROLLING_WINDOW_MS,HMe as RULES_DIR,TH as SAVED_SESSIONS_DIR,r9e as SCHEDULE_FILE_NAME,Zvt as SESSION_EXPIRY_DAYS,Zme as SESSION_FILE_NAME,Mme as SHELL_COMMAND_MAX_TIMEOUT_MS,Yq as SHELL_COMMAND_TIMEOUT_MS,nqe as SLASH_COMMANDS,FH as SYSTEM_UTILITIES,U_e as SessionManager,Sye as ShellExecutor,jVt as StepStatus,Wee as StepTracker,BVt as StepType,Jme as TASK_ID_PREFIX,Xq as TASK_ID_RANDOM_LENGTH,n9e as TASK_STATUSES,PMe as TEMP_DIR,i9e as TOKEN_LIMITS_STORE_FILENAME,s9e as TOKEN_LIMITS_STORE_VERSION,fwr as TOKEN_LIMIT_MESSAGES,iwr as TOKEN_LIMIT_WARNING_THRESHOLD_PERCENT,LMe as TOKEN_WARNING_THRESHOLD,qMe as TOOL_READ_BLOCKLIST_DIRS,zMe as TOOL_READ_BLOCKLIST_PATTERNS,kMe as TaskExecutionStatus,zVt as TaskStatus,GYe as TokenLimitEnforcer,FMe as TokenLimitExceededError,Q_e as TokenLimitStore,q_e as TokenTracker,Mee as ToolRegistry,KMe as UTILITY_DETECTION_CACHE_TTL,e9e as UTILITY_DETECTION_TIMEOUT,Ovt as VALID_PLAN_TYPES,p7n as VERSION,ure as Verifier,$7e as WORKFLOW_PROMPTS,ste as WorkflowManager,dre as WorkflowOrchestrator,Cme as WorkflowPhase,S4t as WorkflowState,Vdn as applyCompletion,dOr as applyPatch,lOr as areIdentical,LHr as calculateContextUsagePercent,zvt as calculateModelCost,OHr as calculateRemainingTokens,ATr as colorByStatus,aOr as colorizeDiff,Gvt as compareAgentPriority,Cxr as compareHookPriority,qvt as compareModels,RN as copy,t8r as createActionLogger,F$ as createChatArchivalService,hJr as createComplexityClassifier,kvt as createDefaultAgentDefinition,_xr as createDefaultConsent,Axr as createDefaultRatingState,N8r as createEnhancedContextGatherer,hxr as createFullConsent,IVr as createGitService,fdn as createInteractiveClarifier,yLr as createLogInterpreter,gxr as createMinimalConsent,_dn as createPlanGenerator,e8r as createStepTracker,V$ as createTokenLimitStore,d8r as createToolRegistry,gdn as createVerifier,bLr as createWorkflowManager,Idn as createWorkflowOrchestrator,vYe as decrypt,bYe as encrypt,Cl as ensureDir,MHr as estimateConversationTokens,YHr as estimateSystemPromptTokens,Kp as estimateTokens,wdn as executeSlashCommand,qze as extractCodeBlocks,zze as extractMentions,qdn as formatCommandHelp,yTr as formatCost,mTr as formatDate,_Tr as formatDuration,gTr as formatFileSize,zdn as formatFullHelp,zLt as formatHelpCategory,wTr as formatList,ZSt as formatPercent,xTr as formatProgressBar,hTr as formatRelativeTime,sn as formatTimestamp,ITr as formatTokenCount,JHr as formatTokenDisplay,k4 as generateDiff,oOr as generateDiffSummary,FTr as generateSecureRandom,cOr as generateWordDiff,n5 as getActionLogger,Gme as getAgentSourcePriority,Ay as getAnthropicClient,hh as getApprovalManager,Uvt as getAvailableAliases,Xvt as getAvailableModelIds,cZ as getAvailableModels,EZ as getBackupManager,Wkr as getBasename,uOr as getChangedLineCount,Kvt as getCheapestModel,RJ as getCodebaseIndexer,Cdn as getCompletions,zee as getComplexityClassifier,i8 as getConfigManager,hYe as getConsentManager,lF as getContextBuilder,XHr as getContextUsageColor,KHr as getConversationCompactor,S0 as getCredentialStore,jvt as getDefaultModel,Bvt as getDefaultModelId,Xee as getEnhancedContextGatherer,aa as getEventEmitter,Rkr as getExtension,aF as getFileService,$o as getGlobalCompassDir,Adn as getHistoryManager,CMe as getHookSourcePriority,Qze as getInteractiveClarifier,tQe as getLogInterpreter,n_ as getModelConfig,Hme as getModelDescription,t1t as getModelTier,j_e as getModelTokens,$vt as getModelsByCapability,e1t as getMostCapableModel,hxe as getPlanGenerator,ou as getProjectCompassDir,Nkr as getRelativePath,a_ as getSessionManager,Ey as getShellExecutor,tqe as getSlashCommandRegistry,r5 as getStepTracker,Eye as getSystemUtilitiesPromptSection,H3t as getSystemUtilityDetector,Ddn as getTaskProcessor,Jb as getTokenTracker,sx as getToolRegistry,nwr as getUtilitiesByCategory,Bze as getVerifier,ILr as getWorkflowManager,ydn as getWorkflowOrchestrator,Jvt as hasFullAccess,xYe as hash,RTr as hmac,uA as interpolateTemplate,Lvt as isAnthropicModel,C$ as isDirectory,N_e as isFile,HD as isPathWithin,Nme as isValidAgentFrontmatter,Tme as isValidAgentPermissionMode,Svt as isValidAgentSource,oxr as isValidAnthropicConfig,Evt as isValidCLIAgentConfig,iZ as isValidChatArchive,axr as isValidCompassConfig,fxr as isValidConfigFile,wvt as isValidConsent,mxr as isValidConsentRecord,Wme as isValidHookEvent,kxr as isValidHookFrontmatter,Exr as isValidHookSource,Qvt as isValidModel,xxr as isValidNotificationStyle,cxr as isValidProjectConfig,Sxr as isValidRatingState,lxr as isValidSafetyConfig,dxr as isValidSessionConfig,xdn as isValidSlashCommand,uxr as isValidUIConfig,Ixr as isValidUpdateCheckResult,bxr as isValidUpdateConfig,pxr as isValidUpdateSettingsConfig,vxr as isValidUpdateType,K as logger,h$ as matchesPattern,Fkr as normalizeSeparators,vTr as padString,MLt as parseArgs,vdn as parseInput,ED as parseToolsList,na as pathExists,n8 as readDir,YUe as registerBuiltInTools,eqe as registerSlashCommand,A0 as remove,Hdn as renderBanner,Jdn as renderMiniBanner,Ldn as renderWelcome,R$ as resetIfExpired,Gkr as resolveGlobalPath,yy as resolveModelId,o9e as resolvePlanLimits,Tkr as resolveProjectPath,Lu as safeReadFile,cd as safeReadJson,w0 as safeWriteFile,M_ as safeWriteJson,OD as sanitizePath,WTr as secureCompare,Cvt as serializeToolsList,vy as stat,Z$ as sumAllUsage,yZ as toForwardSlashes,bTr as truncate,HHr as wouldExceedContext};
|
|
3753
3753
|
/*! Bundled license information:
|
|
3754
3754
|
|
|
3755
3755
|
typescript/lib/typescript.js:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@compass-ai/nova",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.71",
|
|
4
4
|
"description": "AI-powered development assistant that brings advanced language models directly to your terminal",
|
|
5
5
|
"bin": {
|
|
6
6
|
"nova": "dist/cli.js",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"release:js:publish": "node scripts/publish.mjs --js --publish",
|
|
29
29
|
"release:js:obfuscate": "node scripts/publish.mjs --js --obfuscate",
|
|
30
30
|
"release:js:obfuscate:publish": "node scripts/publish.mjs --js --obfuscate --publish",
|
|
31
|
-
"release:js:dry": "node scripts/publish.mjs --js --publish --dry-run"
|
|
31
|
+
"release:js:dry": "node scripts/publish.mjs --js --publish --dry-run",
|
|
32
|
+
"preuninstall": "node scripts/preuninstall.mjs"
|
|
32
33
|
},
|
|
33
34
|
"keywords": [
|
|
34
35
|
"compass",
|