@compass-ai/nova 1.0.77 → 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/cli.js +687 -628
  2. package/dist/index.js +8 -6
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var ixr=Object.create;var wme=Object.defineProperty;var sxr=Object.getOwnPropertyDescriptor;var axr=Object.getOwnPropertyNames;var oxr=Object.getPrototypeOf,cxr=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),Mw=(i,r)=>{for(var n in r)wme(i,n,{get:r[n],enumerable:!0})},vvt=(i,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of axr(r))!cxr.call(i,l)&&l!==n&&wme(i,l,{get:()=>r[l],enumerable:!(o=sxr(r,l))||o.enumerable});return i};var So=(i,r,n)=>(n=i!=null?ixr(oxr(i)):{},vvt(r||!i||!i.__esModule?wme(n,"default",{value:i,enumerable:!0}):n,i)),lxr=i=>vvt(wme({},"__esModule",{value:!0}),i);function uxr(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 dxr(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 pxr(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 fxr(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 mxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r=="object"&&r!==null}function _xr(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 hxr(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 gxr(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 yxr(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 Ixr(){return{dataCollection:Ame.dataCollection.defaultValue,telemetry:Ame.telemetry.defaultValue,analytics:Ame.analytics.defaultValue,errorReporting:Ame.errorReporting.defaultValue}}function bxr(){return{dataCollection:!0,telemetry:!0,analytics:!0,errorReporting:!0}}function vxr(){return{dataCollection:!0,telemetry:!1,analytics:!1,errorReporting:!1}}var AMe,Ame,SMe=Jt(()=>{"use strict";AMe="1.0.0",Ame={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 CH,TH=Jt(()=>{"use strict";CH=(l=>(l.MANUAL="manual",l.AUTO="auto",l.STRICT="strict",l.SMART="smart",l))(CH||{})});function wxr(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 Axr(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 Sxr(i){return["major","minor","patch","prerelease","build"].includes(i)}function Exr(i){return["banner","minimal","detailed","silent"].includes(i)}var xxr,Avt=Jt(()=>{"use strict";xxr={checkOnStartup:!0,checkInterval:4,showNotifications:!0,notificationStyle:"banner",includePrerelease:!1}});var Gq,EMe,Sme,Nq=Jt(()=>{"use strict";Gq=(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))(Gq||{}),EMe=(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))(EMe||{}),Sme=(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))(Sme||{})});var Gvt={};Mw(Gvt,{AGENT_SOURCE_PRIORITY:()=>Fq,compareAgentPriority:()=>Tvt,createDefaultAgentDefinition:()=>kvt,getAgentSourcePriority:()=>Eme,isValidAgentFrontmatter:()=>Cme,isValidAgentPermissionMode:()=>kme,isValidAgentSource:()=>Svt,isValidCLIAgentConfig:()=>Evt,parseToolsList:()=>ED,serializeToolsList:()=>Cvt});function kme(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 Cme(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&&!kme(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&&!kme(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 Eme(i){return Fq.indexOf(i)}function Tvt(i,r){return Eme(i.source)-Eme(r.source)}var Fq,Tme=Jt(()=>{"use strict";Fq=["builtin","user","cli","project"]});function Cxr(){return{totalUsageTimeMs:0,lastRatingShownAt:null,lastRatingSubmittedAt:null,totalRatingsSubmitted:0,totalSessions:0,firstUsedAt:new Date().toISOString(),lastActivityAt:null}}function Txr(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 kxr,Nvt=Jt(()=>{"use strict";kxr={usageTimeThresholdMs:12e4,cooldownPeriodMs:864e5,activityWindowMs:12e4,cooldownMultiplier:1.5,maxCooldownPeriodMs:6048e5}});function Nme(i){return typeof i=="string"&&Fvt.includes(i)}function Gxr(i){return typeof i=="string"&&["personal","project"].includes(i)}function Nxr(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 kMe(i){return Gme.indexOf(i)}function Fxr(i,r){return kMe(i.source)-kMe(r.source)}var Fvt,Gme,CMe=Jt(()=>{"use strict";Fvt=["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop"],Gme=["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,GMe=Jt(()=>{"use strict";TMe="1.0"});var NMe,Rvt=Jt(()=>{"use strict";NMe=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 Rq,kD,GH,Fme,FMe,Wq,RMe,WMe,Rxr,NH,ZMe,Wxr,VMe,PMe,DMe,MMe,YMe,OMe,Zq,HMe,sZ,Rme,AN,aZ,Wvt,_C,JMe,LMe,Zxr,Vxr,oZ,Pxr,Wme,Dxr,Mxr,Yxr,Oxr,Hxr,Jxr,Zvt,Vq,FH,Vvt,XMe,Zme,Pq,Vme,Pvt,Dvt,Dq,Lxr,UMe,QMe,Mq,Xxr,Mvt,Uxr,Qxr,jxr,Yw,SN,Yvt,jMe,zv,Bxr,zxr,qxr,$xr,Kxr,ewr,EN,kN,EI,Pme,twr,rwr,nwr,iwr,swr,BMe,zMe,awr,cd=Jt(()=>{"use strict";Rq=".compass",kD=".compass",GH="config.json",Fme="session.json",FMe="consent.json",Wq="credentials.enc",RMe="logs",WMe="backups",Rxr="cache",NH="saved-sessions",ZMe="index",Wxr="context",VMe="temp",PMe="commands",DMe="agents",MMe="skills",YMe="hooks",OMe="rules",Zq="projects",HMe="memory",sZ="NOVA.md",Rme="NOVA.local.md",AN="MEMORY.md",aZ=200,Wvt="chats",_C=16384,JMe=2e5,LMe=8e4,Zxr=80,Vxr=10,oZ={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},Pxr="haiku",Wme=200,Dxr=75,Mxr=5,Yxr=0,Oxr=80,Hxr=!0,Jxr=3,Zvt=30,Vq=1,FH=100,Vvt=7,XMe=365,Zme=6e4,Pq=12e4,Vme=6e5,Pvt=50,Dvt=1024*1024,Dq=100,Lxr=15,UMe=8e3,QMe=4e4,Mq=4e3,Xxr=6e3,Mvt=4e3,Uxr=90,Qxr=1e5,jxr=500*1024*1024,Yw="claude-sonnet-4-5-20250929",SN=1,Yvt=.5,jMe="haiku",zv="professional",Bxr=4,zxr="banner",qxr=4,$xr=1e3,Kxr=16e3,ewr=.1,EN={anthropic:{model:Yw,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:Pq,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:Zme,maxHistoryLength:Dq,autoCompactThreshold:8e4,sessionExpiryDays:Zvt,unleash:!1},update:{checkOnStartup:!0,checkInterval:Bxr,showNotifications:!0,notificationStyle:zxr,includePrerelease:!1},agentic:{maxIterations:Wme,costWarningThreshold:Mxr,costHardCap:Yxr,autoCompactAtPercent:Oxr,stuckDetectionEnabled:Hxr,stuckDetectionThreshold:Jxr,maxIterationsPerTask:Dxr}},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"},Pme={anthropic:EI.API_KEY,ollama:EI.OLLAMA_API_KEY,zai:EI.ZAI_API_KEY,minimax:EI.MINIMAX_API_KEY},twr="1.0.77",rwr="Compass CLI",nwr="",iwr="1.0.0",swr={".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"},BMe=["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"],zMe=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],awr=[".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 CD,Ovt,Dme=Jt(()=>{"use strict";xvt();SMe();TH();Avt();Nq();Tme();Nvt();CMe();GMe();Rvt();cd();CD="BASIC",Ovt=["BASIC","PRO","MAX","ENTERPRISE","UNLIMITED"]});var qMe={};Mw(qMe,{CLAUDE_MODELS:()=>Ow,MODEL_ALIASES:()=>Yq,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>Hvt,calculateModelCost:()=>zvt,compareModels:()=>qvt,getAvailableAliases:()=>Uvt,getAvailableModelIds:()=>Xvt,getAvailableModels:()=>cZ,getCheapestModel:()=>Kvt,getDefaultModel:()=>jvt,getDefaultModelId:()=>Bvt,getModelConfig:()=>i_,getModelDescription:()=>Mme,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(Yq[r])return Yq[r];for(let n of Object.keys(Ow))if(n.toLowerCase()===r)return n;return i}function i_(i){let r=yy(i);return Ow[r]}function Lvt(i){return i_(i)?.provider==="anthropic"}function cZ(){return Object.values(Ow)}function Xvt(){return Object.keys(Ow)}function Uvt(){return Object.keys(Yq)}function Qvt(i){return yy(i)in Ow}function jvt(){return Ow["claude-sonnet-4-5-20250929"]}function Bvt(){return"claude-sonnet-4-5-20250929"}function zvt(i,r,n){let o=i_(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=i_(i),l=i_(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 Ow["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 Mme(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,Ow,Yq,US=Jt(()=>{"use strict";Hvt=15e4;Ow={"glm-5:cloud":{id:"glm-5:cloud",name:"Z.AI GLM 5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"glm-4.7:cloud":{id:"glm-4.7:cloud",name:"Z.AI GLM 4.7",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"minimax-m2.5:cloud":{id:"minimax-m2.5:cloud",name:"MiniMax M2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"kimi-k2.5:cloud":{id:"kimi-k2.5:cloud",name:"Kimi K2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"gemini-3-pro-preview":{id:"gemini-3-pro-preview",name:"Gemini 3 Pro",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-6":{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",name:"Claude Sonnet 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-opus-4-6":{id:"claude-opus-4-6",name:"Claude Opus 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",name:"Claude Haiku 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:1,outputPricePerMillion:5,cacheWrite5mPricePerMillion:1.25,cacheWrite1hPricePerMillion:2,cacheHitPricePerMillion:.1},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}}},Yq={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 owr(){let i=new Map;for(let r of RH){let n=i.get(r.category)||[];n.push(r),i.set(r.category,n)}return i}var Oq,$Me,KMe,RH,e9e=Jt(()=>{"use strict";Oq={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}},$Me=36e5,KMe=3e3,RH=[{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 t9e,Yme,Hq,r9e,Jq,Ome,Hme,CN,Lq=Jt(()=>{"use strict";t9e="Schedule.md",Yme="sched-",Hq=8,r9e=["active","paused","completed"],Jq=`# Scheduled Tasks
1
+ var ixr=Object.create;var wme=Object.defineProperty;var sxr=Object.getOwnPropertyDescriptor;var axr=Object.getOwnPropertyNames;var oxr=Object.getPrototypeOf,cxr=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),Mw=(i,r)=>{for(var n in r)wme(i,n,{get:r[n],enumerable:!0})},vvt=(i,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of axr(r))!cxr.call(i,l)&&l!==n&&wme(i,l,{get:()=>r[l],enumerable:!(o=sxr(r,l))||o.enumerable});return i};var So=(i,r,n)=>(n=i!=null?ixr(oxr(i)):{},vvt(r||!i||!i.__esModule?wme(n,"default",{value:i,enumerable:!0}):n,i)),lxr=i=>vvt(wme({},"__esModule",{value:!0}),i);function uxr(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 dxr(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 pxr(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 fxr(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 mxr(i){if(typeof i!="object"||i===null)return!1;let r=i;return typeof r=="object"&&r!==null}function _xr(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 hxr(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 gxr(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 yxr(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 Ixr(){return{dataCollection:Ame.dataCollection.defaultValue,telemetry:Ame.telemetry.defaultValue,analytics:Ame.analytics.defaultValue,errorReporting:Ame.errorReporting.defaultValue}}function bxr(){return{dataCollection:!0,telemetry:!0,analytics:!0,errorReporting:!0}}function vxr(){return{dataCollection:!0,telemetry:!1,analytics:!1,errorReporting:!1}}var AMe,Ame,SMe=Jt(()=>{"use strict";AMe="1.0.0",Ame={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 CH,TH=Jt(()=>{"use strict";CH=(l=>(l.MANUAL="manual",l.AUTO="auto",l.STRICT="strict",l.SMART="smart",l))(CH||{})});function wxr(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 Axr(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 Sxr(i){return["major","minor","patch","prerelease","build"].includes(i)}function Exr(i){return["banner","minimal","detailed","silent"].includes(i)}var xxr,Avt=Jt(()=>{"use strict";xxr={checkOnStartup:!0,checkInterval:4,showNotifications:!0,notificationStyle:"banner",includePrerelease:!1}});var Gq,EMe,Sme,Nq=Jt(()=>{"use strict";Gq=(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))(Gq||{}),EMe=(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))(EMe||{}),Sme=(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))(Sme||{})});var Gvt={};Mw(Gvt,{AGENT_SOURCE_PRIORITY:()=>Fq,compareAgentPriority:()=>Tvt,createDefaultAgentDefinition:()=>kvt,getAgentSourcePriority:()=>Eme,isValidAgentFrontmatter:()=>Cme,isValidAgentPermissionMode:()=>kme,isValidAgentSource:()=>Svt,isValidCLIAgentConfig:()=>Evt,parseToolsList:()=>ED,serializeToolsList:()=>Cvt});function kme(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 Cme(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&&!kme(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&&!kme(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 Eme(i){return Fq.indexOf(i)}function Tvt(i,r){return Eme(i.source)-Eme(r.source)}var Fq,Tme=Jt(()=>{"use strict";Fq=["builtin","user","cli","project"]});function Cxr(){return{totalUsageTimeMs:0,lastRatingShownAt:null,lastRatingSubmittedAt:null,totalRatingsSubmitted:0,totalSessions:0,firstUsedAt:new Date().toISOString(),lastActivityAt:null}}function Txr(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 kxr,Nvt=Jt(()=>{"use strict";kxr={usageTimeThresholdMs:12e4,cooldownPeriodMs:864e5,activityWindowMs:12e4,cooldownMultiplier:1.5,maxCooldownPeriodMs:6048e5}});function Nme(i){return typeof i=="string"&&Fvt.includes(i)}function Gxr(i){return typeof i=="string"&&["personal","project"].includes(i)}function Nxr(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 kMe(i){return Gme.indexOf(i)}function Fxr(i,r){return kMe(i.source)-kMe(r.source)}var Fvt,Gme,CMe=Jt(()=>{"use strict";Fvt=["PreToolUse","PostToolUse","UserPromptSubmit","Notification","Stop"],Gme=["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,GMe=Jt(()=>{"use strict";TMe="1.0"});var NMe,Rvt=Jt(()=>{"use strict";NMe=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 Rq,kD,GH,Fme,FMe,Wq,RMe,WMe,Rxr,NH,ZMe,Wxr,VMe,PMe,DMe,MMe,YMe,OMe,Zq,HMe,sZ,Rme,AN,aZ,Wvt,_C,JMe,LMe,Zxr,Vxr,oZ,Pxr,Wme,Dxr,Mxr,Yxr,Oxr,Hxr,Jxr,Zvt,Vq,FH,Vvt,XMe,Zme,Pq,Vme,Pvt,Dvt,Dq,Lxr,UMe,QMe,Mq,Xxr,Mvt,Uxr,Qxr,jxr,Yw,SN,Yvt,jMe,zv,Bxr,zxr,qxr,$xr,Kxr,ewr,EN,kN,EI,Pme,twr,rwr,nwr,iwr,swr,BMe,zMe,awr,cd=Jt(()=>{"use strict";Rq=".compass",kD=".compass",GH="config.json",Fme="session.json",FMe="consent.json",Wq="credentials.enc",RMe="logs",WMe="backups",Rxr="cache",NH="saved-sessions",ZMe="index",Wxr="context",VMe="temp",PMe="commands",DMe="agents",MMe="skills",YMe="hooks",OMe="rules",Zq="projects",HMe="memory",sZ="NOVA.md",Rme="NOVA.local.md",AN="MEMORY.md",aZ=200,Wvt="chats",_C=16384,JMe=2e5,LMe=8e4,Zxr=80,Vxr=10,oZ={anthropic:"haiku",ollama:"glm-4.7:cloud",zai:"glm-4.7:cloud",minimax:"glm-4.7:cloud"},Pxr="haiku",Wme=200,Dxr=75,Mxr=5,Yxr=0,Oxr=80,Hxr=!0,Jxr=3,Zvt=30,Vq=1,FH=100,Vvt=7,XMe=365,Zme=6e4,Pq=12e4,Vme=6e5,Pvt=50,Dvt=1024*1024,Dq=100,Lxr=15,UMe=8e3,QMe=4e4,Mq=4e3,Xxr=6e3,Mvt=4e3,Uxr=90,Qxr=1e5,jxr=500*1024*1024,Yw="claude-sonnet-4-5-20250929",SN=1,Yvt=.5,jMe="haiku",zv="professional",Bxr=4,zxr="banner",qxr=4,$xr=1e3,Kxr=16e3,ewr=.1,EN={anthropic:{model:Yw,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:Pq,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:Zme,maxHistoryLength:Dq,autoCompactThreshold:8e4,sessionExpiryDays:Zvt,unleash:!1},update:{checkOnStartup:!0,checkInterval:Bxr,showNotifications:!0,notificationStyle:zxr,includePrerelease:!1},agentic:{maxIterations:Wme,costWarningThreshold:Mxr,costHardCap:Yxr,autoCompactAtPercent:Oxr,stuckDetectionEnabled:Hxr,stuckDetectionThreshold:Jxr,maxIterationsPerTask:Dxr}},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"},Pme={anthropic:EI.API_KEY,ollama:EI.OLLAMA_API_KEY,zai:EI.ZAI_API_KEY,minimax:EI.MINIMAX_API_KEY},twr="1.0.78",rwr="Compass CLI",nwr="",iwr="1.0.0",swr={".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"},BMe=["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"],zMe=["node_modules",".git","dist","build","out","coverage",".next",".nuxt",".output",".cache",".parcel-cache","vendor","__pycache__",".pytest_cache","target","bin","obj"],awr=[".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 CD,Ovt,Dme=Jt(()=>{"use strict";xvt();SMe();TH();Avt();Nq();Tme();Nvt();CMe();GMe();Rvt();cd();CD="BASIC",Ovt=["BASIC","PRO","MAX","ENTERPRISE","UNLIMITED"]});var qMe={};Mw(qMe,{CLAUDE_MODELS:()=>Ow,MODEL_ALIASES:()=>Yq,NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT:()=>Hvt,calculateModelCost:()=>zvt,compareModels:()=>qvt,getAvailableAliases:()=>Uvt,getAvailableModelIds:()=>Xvt,getAvailableModels:()=>cZ,getCheapestModel:()=>Kvt,getDefaultModel:()=>jvt,getDefaultModelId:()=>Bvt,getModelConfig:()=>i_,getModelDescription:()=>Mme,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(Yq[r])return Yq[r];for(let n of Object.keys(Ow))if(n.toLowerCase()===r)return n;return i}function i_(i){let r=yy(i);return Ow[r]}function Lvt(i){return i_(i)?.provider==="anthropic"}function cZ(){return Object.values(Ow)}function Xvt(){return Object.keys(Ow)}function Uvt(){return Object.keys(Yq)}function Qvt(i){return yy(i)in Ow}function jvt(){return Ow["claude-sonnet-4-5-20250929"]}function Bvt(){return"claude-sonnet-4-5-20250929"}function zvt(i,r,n){let o=i_(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=i_(i),l=i_(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 Ow["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 Mme(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,Ow,Yq,US=Jt(()=>{"use strict";Hvt=15e4;Ow={"glm-5:cloud":{id:"glm-5:cloud",name:"Z.AI GLM 5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"glm-4.7:cloud":{id:"glm-4.7:cloud",name:"Z.AI GLM 4.7",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"minimax-m2.5:cloud":{id:"minimax-m2.5:cloud",name:"MiniMax M2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"kimi-k2.5:cloud":{id:"kimi-k2.5:cloud",name:"Kimi K2.5",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!1}},"gemini-3-pro-preview":{id:"gemini-3-pro-preview",name:"Gemini 3 Pro",provider:"ollama",baseUrl:"https://ollama.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-6":{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",name:"Claude Sonnet 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:3,outputPricePerMillion:15,cacheWrite5mPricePerMillion:3.75,cacheWrite1hPricePerMillion:6,cacheHitPricePerMillion:.3},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}},"claude-opus-4-6":{id:"claude-opus-4-6",name:"Claude Opus 4.6",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:5,outputPricePerMillion:25,cacheWrite5mPricePerMillion:6.25,cacheWrite1hPricePerMillion:10,cacheHitPricePerMillion:.5},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!0,complexityClassification:!0}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",name:"Claude Haiku 4.5",provider:"anthropic",baseUrl:"https://api.anthropic.com",contextWindow:2e5,maxOutputTokens:16384,pricing:{inputPricePerMillion:1,outputPricePerMillion:5,cacheWrite5mPricePerMillion:1.25,cacheWrite1hPricePerMillion:2,cacheHitPricePerMillion:.1},capabilities:{vision:!0,toolUse:!0,streaming:!0,extendedThinking:!1,complexityClassification:!0}}},Yq={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 owr(){let i=new Map;for(let r of RH){let n=i.get(r.category)||[];n.push(r),i.set(r.category,n)}return i}var Oq,$Me,KMe,RH,e9e=Jt(()=>{"use strict";Oq={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}},$Me=36e5,KMe=3e3,RH=[{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 t9e,Yme,Hq,r9e,Jq,Ome,Hme,CN,Lq=Jt(()=>{"use strict";t9e="Schedule.md",Yme="sched-",Hq=8,r9e=["active","paused","completed"],Jq=`# 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.
@@ -2211,6 +2211,8 @@ You can create and manage scheduled tasks for the user. Tasks are stored in \`Sc
2211
2211
  - **Searching code**: Prefer \`search_code\` over \`execute_command\` with grep
2212
2212
  - **Reading files**: Prefer \`read_file\`/\`read_multiple_files\` over \`execute_command\` with cat
2213
2213
  - **Multiple files**: Use \`read_multiple_files\` when examining related files together
2214
+ - **Writing files**: Prefer \`write_file\` over \`execute_command\` with echo, Set-Content, Out-File, or redirects
2215
+ - **Editing files**: Prefer \`edit_file\` over \`execute_command\` with sed, awk, or string replacement scripts
2214
2216
  - **Git info**: Prefer \`git_status\`/\`git_diff\`/\`git_log\` over raw git commands
2215
2217
 
2216
2218
  When providing code, use proper formatting with code blocks.
@@ -2260,7 +2262,7 @@ or can reasonably be inferred from context. IF there are no relevant tools or th
2260
2262
  supply these values; otherwise proceed with the tool calls. If the user provides a specific value for a parameter (for example provided in quotes),
2261
2263
  make sure to use that value EXACTLY. DO NOT make up values for or ask about optional parameters. Carefully analyze descriptive terms in the request
2262
2264
  as they may indicate required parameter values that should be included even if not explicitly quoted.
2263
- `});var XVt=Jt(()=>{"use strict"});var UVt=Jt(()=>{"use strict"});var F4=Jt(()=>{"use strict";Q7e();VVt();PVt();DVt();MVt();LVt();Uye();lXe();XVt();UVt()});import qVt from"path";function n5(){return fXe||(fXe=new Fee),fXe}function a8r(){return new Fee}var Ey,$Vt,Fee,fXe,kg=Jt(()=>{"use strict";O_();Y_();Ja();wm();ZN();ef();Wp();Ey=(le=>(le.FILE_READ="file_read",le.FILE_WRITE="file_write",le.FILE_DELETE="file_delete",le.FILE_RENAME="file_rename",le.COMMAND_EXEC="command_exec",le.CODE_ANALYSIS="code_analysis",le.CODE_GENERATION="code_generation",le.REFACTORING="refactoring",le.TESTING="testing",le.DEBUGGING="debugging",le.DOCUMENTATION="documentation",le.SEARCH="search",le.PLANNING="planning",le.APPROVAL_REQUEST="approval_request",le.CUSTOM="custom",le))(Ey||{}),$Vt=(E=>(E.PLANNED="planned",E.PENDING_APPROVAL="pending_approval",E.APPROVED="approved",E.REJECTED="rejected",E.IN_PROGRESS="in_progress",E.COMPLETED="completed",E.FAILED="failed",E.CANCELLED="cancelled",E))($Vt||{}),Fee=class{actions=new Map;chains=new Map;currentChainId=null;projectRoot=process.cwd();recordAction(r,n,o,l){let p={id:ya(),type:r,status:l?.requiresApproval?"pending_approval":"planned",description:n,reasoning:l?.reasoning,parameters:o,expectedOutcome:l?.expectedOutcome,parentActionId:l?.parentActionId,relatedActions:[],createdAt:sn(),metadata:l?.metadata};if(l?.requiresApproval&&(p.approval={required:!0}),this.actions.set(p.id,p),this.currentChainId){let E=this.chains.get(this.currentChainId);E&&E.actions.push(p)}return K.debug(`Action recorded: ${n} (${p.id})`),aa().emit("action-recorded",{action:p}),o_().recordOperation({type:"action_recorded",description:`LLM action: ${n}`,status:"completed",details:{actionId:p.id,actionType:r,parameters:o}}),p}startActionChain(r,n,o){let l={id:ya(),name:r,description:n,actions:[],createdAt:sn(),status:"active",metadata:o};return this.chains.set(l.id,l),this.currentChainId=l.id,K.info(`Action chain started: ${r} (${l.id})`),aa().emit("action-chain-started",{chain:l}),l}endActionChain(r,n="completed"){let o=this.chains.get(r);if(!o)throw new Error(`Action chain not found: ${r}`);o.status=n,this.currentChainId===r&&(this.currentChainId=null),K.info(`Action chain ended: ${o.name} (${r}) - ${n}`),aa().emit("action-chain-ended",{chain:o,status:n})}updateActionStatus(r,n){let o=this.actions.get(r);if(!o)throw new Error(`Action not found: ${r}`);let l=o.status;o.status=n,n==="in_progress"&&!o.startedAt&&(o.startedAt=sn()),(n==="completed"||n==="failed"||n==="cancelled")&&!o.completedAt&&(o.completedAt=sn(),o.startedAt&&(o.duration=new Date(o.completedAt).getTime()-new Date(o.startedAt).getTime())),K.debug(`Action status updated: ${r} - ${l} -> ${n}`),aa().emit("action-status-changed",{action:o,oldStatus:l,status:n})}recordApproval(r,n,o,l){let p=this.actions.get(r);if(!p)throw new Error(`Action not found: ${r}`);p.approval||(p.approval={required:!0}),p.approval.granted=n,p.approval.decidedAt=sn(),p.approval.decidedBy=o,p.approval.rejectionReason=l,p.status=n?"approved":"rejected",K.info(`Action approval recorded: ${r} - ${n?"Approved":"Rejected"}`),aa().emit("action-approval",{action:p,granted:n})}recordResult(r,n){let o=this.actions.get(r);if(!o)throw new Error(`Action not found: ${r}`);o.result=n,o.status=n.success?"completed":"failed",o.completedAt||(o.completedAt=sn(),o.startedAt&&(o.duration=new Date(o.completedAt).getTime()-new Date(o.startedAt).getTime())),K.info(`Action result recorded: ${r} - ${n.success?"Success":"Failed"}`),aa().emit("action-result",{action:o,result:n}),o_().recordOperation({type:n.success?"action_completed":"action_failed",description:`${o.description}`,status:n.success?"completed":"failed",details:{actionId:o.id,actionType:o.type,duration:o.duration,result:n}})}linkActions(r,n){let o=this.actions.get(r),l=this.actions.get(n);if(!o||!l)throw new Error("One or both actions not found");o.relatedActions.includes(n)||o.relatedActions.push(n),l.relatedActions.includes(r)||l.relatedActions.push(r),K.debug(`Actions linked: ${r} <-> ${n}`)}getAction(r){return this.actions.get(r)}getActionChain(r){return this.chains.get(r)}getAllActions(){return Array.from(this.actions.values())}getAllChains(){return Array.from(this.chains.values())}getActionsByStatus(r){return Array.from(this.actions.values()).filter(n=>n.status===r)}getActionsByType(r){return Array.from(this.actions.values()).filter(n=>n.type===r)}getPendingApprovals(){return this.getActionsByStatus("pending_approval")}getCurrentChain(){return this.currentChainId&&this.chains.get(this.currentChainId)||null}getStatistics(){let r=Array.from(this.actions.values()),n={planned:0,pending_approval:0,approved:0,rejected:0,in_progress:0,completed:0,failed:0,cancelled:0},o={},l=0,p=0;r.forEach(q=>{n[q.status]++,o[q.type]||(o[q.type]=0),o[q.type]++,q.status==="completed"&&q.duration&&(l+=q.duration,p++)});let h=n.completed,b=n.failed,E=h+b,N=E>0?h/E*100:0,W=p>0?l/p:0,H=null,M=0;return Object.entries(o).forEach(([q,ue])=>{ue>M&&(M=ue,H=q)}),{totalActions:r.length,byStatus:n,byType:o,successRate:N,averageDuration:W,mostCommonType:H}}async persist(r){let n=r||this.projectRoot,o=lu(n);await Tl(o);let l=qVt.join(o,"action-log.json"),p={actions:Array.from(this.actions.values()),chains:Array.from(this.chains.values()),timestamp:sn()};await M_(l,p),K.debug("Action log persisted to disk")}async load(r){let n=r||this.projectRoot,o=qVt.join(lu(n),"action-log.json");if(!await ra(o))return!1;try{let l=await ld(o);return l?(this.actions.clear(),this.chains.clear(),l.actions.forEach(p=>{this.actions.set(p.id,p)}),l.chains.forEach(p=>{this.chains.set(p.id,p)}),K.info("Action log loaded from disk"),!0):!1}catch(l){return K.error("Failed to load action log",l),!1}}clear(){this.actions.clear(),this.chains.clear(),this.currentChainId=null,K.info("Action log cleared")}export(){return{actions:Array.from(this.actions.values()),chains:Array.from(this.chains.values())}}setProjectRoot(r){this.projectRoot=r}},fXe=null});var lPt={};Mw(lPt,{areHooksEnabled:()=>ZJ,default:()=>_8r,discoverHooks:()=>Wee,executeHooks:()=>R4,executeNotificationHooks:()=>sPt,executePostToolUseHooks:()=>Zee,executePreToolUseHooks:()=>$ye,executeStopHooks:()=>aPt,executeUserPromptSubmitHooks:()=>iPt,getActiveHooks:()=>oPt,getHooksForEvent:()=>xXe,getHooksProjectRoot:()=>rPt,getPersonalHooksDir:()=>yXe,getProjectHooksDir:()=>gXe,hasHooksForEvent:()=>cPt,invalidateHookCache:()=>vXe,parseHookFile:()=>bXe,parseHookFrontmatter:()=>IXe,setHooksEnabled:()=>nPt,setHooksProjectRoot:()=>tPt});import Ree from"path";function gXe(){return Ree.join(lu(qye),YMe)}function yXe(){return Ree.join(qo(),YMe)}function tPt(i){qye!==i&&(qye=i,vXe())}function rPt(){return qye}function nPt(i){hXe=i,K.debug(`Hooks ${i?"enabled":"disabled"}`)}function ZJ(){return hXe}function IXe(i){let r=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=i.match(r);if(!n)return{frontmatter:{},script:i};let[,o,l]=n,p={},h=o.split(/\r?\n/),b=null,E=null;for(let N of h){if(!N.trim()||N.trim().startsWith("#"))continue;if(N.match(/^\s+-\s+/)){if(b&&E!==null){let M=N.replace(/^\s+-\s+/,"").trim().replace(/^["']|["']$/g,"");E.push(M)}continue}let W=N.match(/^([a-zA-Z-]+):\s*(.*)$/);if(W){b&&E!==null&&(p[b]=E);let[,H,M]=W;if(b=H,M.trim()==="")E=[];else{E=null;let q=M.trim();q=q.replace(/^["']|["']$/g,""),q==="true"&&(q=!0),q==="false"&&(q=!1),H==="timeout"&&!isNaN(Number(q))&&(q=Number(q)),p[H]=q}}}return b&&E!==null&&(p[b]=E),{frontmatter:p,script:l.trim()}}function l8r(i,r){if(i.description)return i.description;let n=r.split(/\r?\n/);for(let o of n){let l=o.trim();if(!l.startsWith("#!")){if(l.startsWith("#"))return l.slice(1).trim();if(l)break}}return"Custom hook"}function u8r(i,r){let o=Ree.relative(r,i).split(Ree.sep),l=o[0].replace(/\.(yaml|yml|md)$/i,"");return Nme(l)?l:o.length>=2&&Nme(o[0])?o[0]:null}async function bXe(i,r,n){try{let o=await _Xe.default.readFile(i,"utf-8"),{frontmatter:l,script:p}=IXe(o),h=u8r(i,n);if(!h)return K.warn(`Could not determine event type for hook: ${i}`),null;let E=Ree.basename(i).replace(/\.(yaml|yml|md)$/i,""),N=E===h?"default":E,W=l8r(l,p);return{id:`${r}-${h}-${N}`,name:N,event:h,filePath:i,source:r,frontmatter:l,script:p,description:W,isActive:!0}}catch(o){return K.warn(`Failed to parse hook file: ${i}`,o),null}}async function KVt(i,r){let n=[];if(!await _Xe.default.pathExists(i))return n;try{let o=await pm("**/*.{yaml,yml,md}",{cwd:i,nodir:!0,absolute:!0});for(let l of o){let p=await bXe(l,r,i);p&&(n.push(p),K.debug(`Discovered ${r} hook: ${p.event}/${p.name}`,{path:l}))}}catch(o){K.warn(`Failed to discover hooks in ${i}`,o)}return n}function d8r(i){let r={personal:[],project:[]},n={PreToolUse:[],PostToolUse:[],UserPromptSubmit:[],Notification:[],Stop:[]};for(let p of i)r[p.source].push(p);let o=new Map;for(let p of Gme)for(let h of r[p]){let b=`${h.event}-${h.name}`;o.set(b,h)}let l=[];for(let p of i){let h=`${p.event}-${p.name}`,b=o.get(h)?.id===p.id;p.isActive=b,b&&(l.push(p),n[p.event].push(p))}return{all:i,active:l,byEvent:n,bySource:r}}async function Wee(i=!1){if(!i&&zye&&Date.now()-mXe<o8r)return zye;let r=[],n=await KVt(yXe(),"personal");r.push(...n);let o=await KVt(gXe(),"project");r.push(...o);let l=d8r(r);return zye=l,mXe=Date.now(),K.info(`Discovered ${l.active.length} active hooks (${l.all.length} total)`),l}function vXe(){zye=null,mXe=0}function ePt(i,r){let n=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`,"i").test(r)}function p8r(i,r,n){let{frontmatter:o}=i;if(!o.tools||o.tools.length===0)return!0;if(!o.tools.some(p=>ePt(p,r)))return!1;if(!o.match||Object.keys(o.match).length===0)return!0;for(let[p,h]of Object.entries(o.match)){let b=n[p];if(b===void 0||!ePt(h,String(b)))return!1}return!0}function f8r(i,r){let n={HOOK_EVENT:r.event,HOOK_NAME:i.name,HOOK_CWD:r.projectRoot,HOOK_SESSION_ID:r.sessionId};if(r.tool){n.TOOL_NAME=r.tool.name,n.TOOL_CALL_ID=r.tool.callId,n.TOOL_INPUT=JSON.stringify(r.tool.input);for(let[o,l]of Object.entries(r.tool.input)){let p=`TOOL_INPUT_${o.toUpperCase().replace(/[^A-Z0-9]/g,"_")}`;n[p]=String(l)}r.event==="PostToolUse"&&(n.TOOL_OUTPUT=JSON.stringify(r.tool.output),n.TOOL_SUCCESS=String(r.tool.success??!0),r.tool.error&&(n.TOOL_ERROR=r.tool.error))}return r.userPrompt!==void 0&&(n.USER_PROMPT=r.userPrompt),n}async function m8r(i,r){let n=Date.now();if(i.frontmatter.enabled===!1)return{hookId:i.id,success:!0,exitCode:0,stdout:"",stderr:"",duration:0,skipped:!0,skipReason:"Hook is disabled"};if((r.event==="PreToolUse"||r.event==="PostToolUse")&&r.tool&&!p8r(i,r.tool.name,r.tool.input))return{hookId:i.id,success:!0,exitCode:0,stdout:"",stderr:"",duration:0,skipped:!0,skipReason:"Hook does not match tool"};let o=f8r(i,r),l=process.platform==="win32",p=l?"cmd.exe":"/bin/bash",h=l?["/c"]:["-c"];try{K.debug(`Executing hook: ${i.id}`,{event:r.event});let b=i.frontmatter.timeout??c8r,E=await sA(p,[...h,i.script],{cwd:r.projectRoot,env:{...process.env,...o},timeout:b,reject:!1,shell:!1}),N=Date.now()-n;return{hookId:i.id,success:E.exitCode===0,exitCode:E.exitCode??1,stdout:E.stdout||"",stderr:E.stderr||"",duration:N,skipped:!1}}catch(b){let E=Date.now()-n,N=b instanceof Error?b.message:"Hook execution failed";return K.error(`Hook execution failed: ${i.id}`,b),{hookId:i.id,success:!1,exitCode:1,stdout:"",stderr:"",duration:E,skipped:!1,error:N}}}async function R4(i,r){let n=Date.now();if(!hXe)return{event:i,allowed:!0,results:[],totalDuration:0};let o={...r,event:i},p=(await Wee()).byEvent[i];if(p.length===0)return{event:i,allowed:!0,results:[],totalDuration:0};let h=[],b=!1,E;for(let W of p){let H=await m8r(W,o);if(h.push(H),i==="PreToolUse"&&!H.success&&!H.skipped){b=!0,E=H.stderr.trim()||H.stdout.trim()||`Blocked by hook: ${W.name}`,K.info(`Tool blocked by hook ${W.id}: ${E}`);break}}let N=Date.now()-n;return{event:i,allowed:!b,blockMessage:E,results:h,totalDuration:N}}async function $ye(i,r,n,o,l){let p=await R4("PreToolUse",{projectRoot:o,sessionId:l,tool:{name:i,callId:r,input:n}});return{allowed:p.allowed,blockMessage:p.blockMessage}}async function Zee(i,r,n,o,l,p,h,b){await R4("PostToolUse",{projectRoot:h,sessionId:b,tool:{name:i,callId:r,input:n,output:o,success:l,error:p}})}async function iPt(i,r,n){let o=await R4("UserPromptSubmit",{projectRoot:r,sessionId:n,userPrompt:i});return{allowed:o.allowed,blockMessage:o.blockMessage}}async function sPt(i,r,n){await R4("Notification",{projectRoot:r,sessionId:n,notification:i})}async function aPt(i,r){await R4("Stop",{projectRoot:i,sessionId:r})}async function oPt(){return(await Wee()).active}async function xXe(i){return(await Wee()).byEvent[i]}async function cPt(i){return(await xXe(i)).length>0}var _Xe,zye,mXe,o8r,qye,hXe,c8r,_8r,wXe=Jt(()=>{"use strict";_Xe=So(Yb(),1);ex();mee();ef();cd();Ja();CMe();zye=null,mXe=0,o8r=5e3,qye=process.cwd(),hXe=!0,c8r=3e4;_8r={getProjectHooksDir:gXe,getPersonalHooksDir:yXe,setHooksProjectRoot:tPt,getHooksProjectRoot:rPt,setHooksEnabled:nPt,areHooksEnabled:ZJ,discoverHooks:Wee,invalidateHookCache:vXe,parseHookFrontmatter:IXe,parseHookFile:bXe,executeHooks:R4,executePreToolUseHooks:$ye,executePostToolUseHooks:Zee,executeUserPromptSubmitHooks:iPt,executeNotificationHooks:sPt,executeStopHooks:aPt,getActiveHooks:oPt,getHooksForEvent:xXe,hasHooksForEvent:cPt}});function nx(){return AXe||(AXe=new Vee),AXe}function h8r(){return new Vee}var Vee,AXe,VJ=Jt(()=>{"use strict";O_();Ja();kg();wm();$v();wXe();Vee=class i{tools=new Map;projectRoot=process.cwd();registerTool(r,n,o,l,p){this.tools.has(r)&&K.warn(`Tool ${r} is already registered, overwriting`);let h={definition:{name:r,description:n,input_schema:o},handler:l,actionType:p?.actionType,requiresApproval:p?.requiresApproval??!1,category:p?.category,tags:p?.tags,displayName:p?.displayName,disabled:p?.disabled??!1,silent:p?.silent??!1};this.tools.set(r,h),K.debug(`Tool registered: ${r}${p?.category?` (${p.category})`:""}`),aa().emit("tool-registered",{name:r,definition:h.definition})}unregisterTool(r){let n=this.tools.delete(r);return n&&(K.info(`Tool unregistered: ${r}`),aa().emit("tool-unregistered",{name:r})),n}getTool(r){return this.tools.get(r)}getDisplayName(r){let n=this.tools.get(r);return n?.displayName?n.displayName:r.split("_").map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join(" ")}getAllTools(){return Array.from(this.tools.values())}static MCP_EQUIVALENTS={};getToolDefinitions(r){let n=Array.from(this.tools.values());return r?.includeDisabled||(n=n.filter(o=>!o.disabled)),r?.category&&(n=n.filter(o=>o.category===r.category)),r?.tags&&(n=n.filter(o=>r.tags.some(l=>o.tags?.includes(l)))),r?.hideMCPDuplicates!==!1&&(n=this.filterMCPDuplicates(n)),n.map(o=>o.definition)}filterMCPDuplicates(r){let n=r.filter(l=>l.category==="mcp"||l.definition.name.startsWith("mcp_")).map(l=>l.definition.name.toLowerCase());if(n.length===0)return r;let o=new Set;for(let[l,p]of Object.entries(i.MCP_EQUIVALENTS))for(let h of p)if(n.some(E=>E.includes(h.toLowerCase()))){o.add(l),K.debug(`Hiding built-in tool '${l}' - MCP equivalent available (pattern: ${h})`);break}return o.size===0?r:r.filter(l=>!o.has(l.definition.name))}getToolsByCategory(r){return Array.from(this.tools.values()).filter(n=>n.category===r)}getCategories(){let r=new Set;return this.tools.forEach(n=>{n.category&&r.add(n.category)}),Array.from(r)}async executeTool(r,n,o){let l=this.tools.get(r);if(!l){let M=`Tool not found: ${r}`;return K.error(M),{success:!1,error:M,executionId:ya()}}let p=ya(),h={executionId:p,projectRoot:o?.projectRoot||this.projectRoot,toolCallId:o?.toolCallId,abortSignal:o?.abortSignal,metadata:o?.metadata},b=Date.now(),E=n5(),N=E.recordAction(l.actionType||"custom",`Execute tool: ${r}`,n,{requiresApproval:l.requiresApproval,metadata:{toolName:r,executionId:p}}).id,W=aa();l.silent?K.debug(`Silent tool event suppressed (started): ${r}`):W.emit("tool-execution-started",{name:r,executionId:p,input:n});let H=this.sanitizePathInputs(l,n);try{if(ZJ()){let ue=await $ye(r,h.toolCallId||p,H,h.projectRoot);if(!ue.allowed){let le=Date.now()-b,Qe=ue.blockMessage||`Tool ${r} blocked by hook`;return K.info(`Tool blocked by PreToolUse hook: ${r}`,{blockMessage:Qe}),E.recordResult(N,{success:!1,error:{message:Qe,retryable:!1}}),jo().logToolExecuted({name:r,executionId:p,success:!1,duration_ms:le,input:H,error:Qe}),W.emit("tool-execution-blocked",{name:r,executionId:p,blockMessage:Qe,duration:le}),{success:!1,error:Qe,duration:le,executionId:p}}}E.updateActionStatus(N,"in_progress");let M=await l.handler(H,h),q=Date.now()-b;return E.recordResult(N,{success:!0,data:M,output:`Tool ${r} executed successfully`}),K.debug(`Tool executed successfully: ${r} in ${q}ms`),jo().logToolExecuted({name:r,executionId:p,success:!0,duration_ms:q,input:H,output:typeof M=="string"?M:JSON.stringify(M)}),ZJ()&&Zee(r,h.toolCallId||p,H,M,!0,void 0,h.projectRoot).catch(ue=>{K.warn(`PostToolUse hook failed for ${r}`,ue)}),l.silent?K.debug(`Silent tool event suppressed (completed): ${r}`):W.emit("tool-execution-completed",{name:r,executionId:p,data:M,duration:q}),{success:!0,data:M,duration:q,executionId:p}}catch(M){let q=Date.now()-b,ue=M instanceof Error?M.message:String(M);return E.recordResult(N,{success:!1,error:{message:ue,retryable:this.isRetryableError(M)}}),this.isUserInputError(M)?K.warn(`Tool ${r} failed (user input): ${ue}`):K.error(`Tool execution failed: ${r}`,M),jo().logToolExecuted({name:r,executionId:p,success:!1,duration_ms:q,input:H,error:ue}),ZJ()&&Zee(r,h.toolCallId||p,H,void 0,!1,ue,h.projectRoot).catch(le=>{K.warn(`PostToolUse hook failed for ${r}`,le)}),W.emit("tool-execution-failed",{name:r,executionId:p,error:ue,duration:q}),{success:!1,error:ue,duration:q,executionId:p}}}isRetryableError(r){if(r instanceof Error){let n=r.message.toLowerCase();if(n.includes("timeout")||n.includes("econnrefused")||n.includes("enotfound")||n.includes("network")||n.includes("ebusy")||n.includes("locked"))return!0}return!1}isUserInputError(r){if(r instanceof Error){let n=r.message.toLowerCase();if(n.includes("file not found")||n.includes("not found")||n.includes("enoent")||n.includes("no such file")||n.includes("invalid")||n.includes("validation")||n.includes("required")||n.includes("permission denied")||n.includes("eacces"))return!0}return!1}static PATH_PROPERTY_NAMES=new Set(["path","directory","source","destination"]);sanitizePathInputs(r,n){let o=r.definition.input_schema;if(!o||typeof o!="object"||!("properties"in o))return n;let l=o.properties;if(!l)return n;let p=!1,h={...n};for(let[b,E]of Object.entries(h)){let N=l[b];if(N){if(i.PATH_PROPERTY_NAMES.has(b)&&N.type==="string"&&typeof E=="string"){let W=E.trim().replace(/^["']|["']$/g,"");W!==E&&(h[b]=W,p=!0,K.debug(`Sanitized path input '${b}': "${E}" -> "${W}"`))}if(b==="paths"&&N.type==="array"&&Array.isArray(E)){let W=E.map(M=>typeof M=="string"?M.trim().replace(/^["']|["']$/g,""):M);W.some((M,q)=>M!==E[q])&&(h[b]=W,p=!0,K.debug(`Sanitized paths array input '${b}'`))}}}return p?h:n}hasTool(r){return this.tools.has(r)}requiresApproval(r){return this.tools.get(r)?.requiresApproval??!1}setProjectRoot(r){this.projectRoot=r,K.debug(`Tool registry project root set to: ${r}`)}clear(){let r=this.tools.size;this.tools.clear(),K.info(`Cleared ${r} registered tools`),aa().emit("tools-cleared",{count:r})}export(){return{tools:Array.from(this.tools.entries()).map(([n,o])=>({name:n,description:o.definition.description,category:o.category,tags:o.tags,requiresApproval:o.requiresApproval}))}}},AXe=null});function eIe(i){return i.replace(/\\/g,"/").toLowerCase()}function SXe(i){return vYe(i)}function EXe(i,r){let n=eIe(i),o=SXe(r);Kye.set(n,{contentHash:o,trackedAt:Date.now(),path:i}),K.debug(`[FileHashTracker] Tracked file: ${i} (hash: ${o.substring(0,8)}...)`)}function Pee(i,r){let n=eIe(i),o=SXe(r);Kye.set(n,{contentHash:o,trackedAt:Date.now(),path:i}),K.debug(`[FileHashTracker] Updated hash for: ${i} (hash: ${o.substring(0,8)}...)`)}async function kXe(i){let r=eIe(i),n=Kye.get(r);if(!n)return K.debug(`[FileHashTracker] File not tracked, skipping validation: ${i}`),{valid:!0,wasTracked:!1};try{let l=await(await import("fs/promises")).readFile(i,"utf-8"),p=SXe(l);if(p!==n.contentHash)throw K.warn(`[FileHashTracker] File modified externally: ${i} (expected: ${n.contentHash.substring(0,8)}..., got: ${p.substring(0,8)}...)`),new i5(i,n.contentHash,p);return K.debug(`[FileHashTracker] File integrity validated: ${i}`),{valid:!0,wasTracked:!0,currentHash:p,expectedHash:n.contentHash}}catch(o){throw o instanceof i5?o:o.code==="ENOENT"?(K.warn(`[FileHashTracker] File was deleted externally: ${i}`),new i5(i,n.contentHash,"<file deleted>")):o}}function CXe(i){let r=eIe(i);Kye.delete(r),K.debug(`[FileHashTracker] Untracked file: ${i}`)}var i5,Kye,TXe=Jt(()=>{"use strict";k$();Ja();i5=class extends Error{filePath;expectedHash;actualHash;constructor(r,n,o){super(`File "${r}" was modified externally since it was last read. Please re-read the file before making changes.`),this.name="FileModifiedExternallyError",this.filePath=r,this.expectedHash=n,this.actualHash=o}toToolResponse(){return{success:!1,error:"FILE_MODIFIED_EXTERNALLY",message:this.message,filePath:this.filePath,suggestion:"Re-read the file using read_file before attempting to edit it again."}}},Kye=new Map});import g8r from"path";function uPt(i,r,n=3){let o=i.split(`
2265
+ `});var XVt=Jt(()=>{"use strict"});var UVt=Jt(()=>{"use strict"});var F4=Jt(()=>{"use strict";Q7e();VVt();PVt();DVt();MVt();LVt();Uye();lXe();XVt();UVt()});import qVt from"path";function n5(){return fXe||(fXe=new Fee),fXe}function a8r(){return new Fee}var Ey,$Vt,Fee,fXe,kg=Jt(()=>{"use strict";O_();Y_();Ja();wm();ZN();ef();Wp();Ey=(le=>(le.FILE_READ="file_read",le.FILE_WRITE="file_write",le.FILE_DELETE="file_delete",le.FILE_RENAME="file_rename",le.COMMAND_EXEC="command_exec",le.CODE_ANALYSIS="code_analysis",le.CODE_GENERATION="code_generation",le.REFACTORING="refactoring",le.TESTING="testing",le.DEBUGGING="debugging",le.DOCUMENTATION="documentation",le.SEARCH="search",le.PLANNING="planning",le.APPROVAL_REQUEST="approval_request",le.CUSTOM="custom",le))(Ey||{}),$Vt=(E=>(E.PLANNED="planned",E.PENDING_APPROVAL="pending_approval",E.APPROVED="approved",E.REJECTED="rejected",E.IN_PROGRESS="in_progress",E.COMPLETED="completed",E.FAILED="failed",E.CANCELLED="cancelled",E))($Vt||{}),Fee=class{actions=new Map;chains=new Map;currentChainId=null;projectRoot=process.cwd();recordAction(r,n,o,l){let p={id:ya(),type:r,status:l?.requiresApproval?"pending_approval":"planned",description:n,reasoning:l?.reasoning,parameters:o,expectedOutcome:l?.expectedOutcome,parentActionId:l?.parentActionId,relatedActions:[],createdAt:sn(),metadata:l?.metadata};if(l?.requiresApproval&&(p.approval={required:!0}),this.actions.set(p.id,p),this.currentChainId){let E=this.chains.get(this.currentChainId);E&&E.actions.push(p)}return K.debug(`Action recorded: ${n} (${p.id})`),aa().emit("action-recorded",{action:p}),o_().recordOperation({type:"action_recorded",description:`LLM action: ${n}`,status:"completed",details:{actionId:p.id,actionType:r,parameters:o}}),p}startActionChain(r,n,o){let l={id:ya(),name:r,description:n,actions:[],createdAt:sn(),status:"active",metadata:o};return this.chains.set(l.id,l),this.currentChainId=l.id,K.info(`Action chain started: ${r} (${l.id})`),aa().emit("action-chain-started",{chain:l}),l}endActionChain(r,n="completed"){let o=this.chains.get(r);if(!o)throw new Error(`Action chain not found: ${r}`);o.status=n,this.currentChainId===r&&(this.currentChainId=null),K.info(`Action chain ended: ${o.name} (${r}) - ${n}`),aa().emit("action-chain-ended",{chain:o,status:n})}updateActionStatus(r,n){let o=this.actions.get(r);if(!o)throw new Error(`Action not found: ${r}`);let l=o.status;o.status=n,n==="in_progress"&&!o.startedAt&&(o.startedAt=sn()),(n==="completed"||n==="failed"||n==="cancelled")&&!o.completedAt&&(o.completedAt=sn(),o.startedAt&&(o.duration=new Date(o.completedAt).getTime()-new Date(o.startedAt).getTime())),K.debug(`Action status updated: ${r} - ${l} -> ${n}`),aa().emit("action-status-changed",{action:o,oldStatus:l,status:n})}recordApproval(r,n,o,l){let p=this.actions.get(r);if(!p)throw new Error(`Action not found: ${r}`);p.approval||(p.approval={required:!0}),p.approval.granted=n,p.approval.decidedAt=sn(),p.approval.decidedBy=o,p.approval.rejectionReason=l,p.status=n?"approved":"rejected",K.info(`Action approval recorded: ${r} - ${n?"Approved":"Rejected"}`),aa().emit("action-approval",{action:p,granted:n})}recordResult(r,n){let o=this.actions.get(r);if(!o)throw new Error(`Action not found: ${r}`);o.result=n,o.status=n.success?"completed":"failed",o.completedAt||(o.completedAt=sn(),o.startedAt&&(o.duration=new Date(o.completedAt).getTime()-new Date(o.startedAt).getTime())),K.info(`Action result recorded: ${r} - ${n.success?"Success":"Failed"}`),aa().emit("action-result",{action:o,result:n}),o_().recordOperation({type:n.success?"action_completed":"action_failed",description:`${o.description}`,status:n.success?"completed":"failed",details:{actionId:o.id,actionType:o.type,duration:o.duration,result:n}})}linkActions(r,n){let o=this.actions.get(r),l=this.actions.get(n);if(!o||!l)throw new Error("One or both actions not found");o.relatedActions.includes(n)||o.relatedActions.push(n),l.relatedActions.includes(r)||l.relatedActions.push(r),K.debug(`Actions linked: ${r} <-> ${n}`)}getAction(r){return this.actions.get(r)}getActionChain(r){return this.chains.get(r)}getAllActions(){return Array.from(this.actions.values())}getAllChains(){return Array.from(this.chains.values())}getActionsByStatus(r){return Array.from(this.actions.values()).filter(n=>n.status===r)}getActionsByType(r){return Array.from(this.actions.values()).filter(n=>n.type===r)}getPendingApprovals(){return this.getActionsByStatus("pending_approval")}getCurrentChain(){return this.currentChainId&&this.chains.get(this.currentChainId)||null}getStatistics(){let r=Array.from(this.actions.values()),n={planned:0,pending_approval:0,approved:0,rejected:0,in_progress:0,completed:0,failed:0,cancelled:0},o={},l=0,p=0;r.forEach(q=>{n[q.status]++,o[q.type]||(o[q.type]=0),o[q.type]++,q.status==="completed"&&q.duration&&(l+=q.duration,p++)});let h=n.completed,b=n.failed,E=h+b,N=E>0?h/E*100:0,W=p>0?l/p:0,H=null,M=0;return Object.entries(o).forEach(([q,ue])=>{ue>M&&(M=ue,H=q)}),{totalActions:r.length,byStatus:n,byType:o,successRate:N,averageDuration:W,mostCommonType:H}}async persist(r){let n=r||this.projectRoot,o=lu(n);await Tl(o);let l=qVt.join(o,"action-log.json"),p={actions:Array.from(this.actions.values()),chains:Array.from(this.chains.values()),timestamp:sn()};await M_(l,p),K.debug("Action log persisted to disk")}async load(r){let n=r||this.projectRoot,o=qVt.join(lu(n),"action-log.json");if(!await ra(o))return!1;try{let l=await ld(o);return l?(this.actions.clear(),this.chains.clear(),l.actions.forEach(p=>{this.actions.set(p.id,p)}),l.chains.forEach(p=>{this.chains.set(p.id,p)}),K.info("Action log loaded from disk"),!0):!1}catch(l){return K.error("Failed to load action log",l),!1}}clear(){this.actions.clear(),this.chains.clear(),this.currentChainId=null,K.info("Action log cleared")}export(){return{actions:Array.from(this.actions.values()),chains:Array.from(this.chains.values())}}setProjectRoot(r){this.projectRoot=r}},fXe=null});var lPt={};Mw(lPt,{areHooksEnabled:()=>ZJ,default:()=>_8r,discoverHooks:()=>Wee,executeHooks:()=>R4,executeNotificationHooks:()=>sPt,executePostToolUseHooks:()=>Zee,executePreToolUseHooks:()=>$ye,executeStopHooks:()=>aPt,executeUserPromptSubmitHooks:()=>iPt,getActiveHooks:()=>oPt,getHooksForEvent:()=>xXe,getHooksProjectRoot:()=>rPt,getPersonalHooksDir:()=>yXe,getProjectHooksDir:()=>gXe,hasHooksForEvent:()=>cPt,invalidateHookCache:()=>vXe,parseHookFile:()=>bXe,parseHookFrontmatter:()=>IXe,setHooksEnabled:()=>nPt,setHooksProjectRoot:()=>tPt});import Ree from"path";function gXe(){return Ree.join(lu(qye),YMe)}function yXe(){return Ree.join(qo(),YMe)}function tPt(i){qye!==i&&(qye=i,vXe())}function rPt(){return qye}function nPt(i){hXe=i,K.debug(`Hooks ${i?"enabled":"disabled"}`)}function ZJ(){return hXe}function IXe(i){let r=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,n=i.match(r);if(!n)return{frontmatter:{},script:i};let[,o,l]=n,p={},h=o.split(/\r?\n/),b=null,E=null;for(let N of h){if(!N.trim()||N.trim().startsWith("#"))continue;if(N.match(/^\s+-\s+/)){if(b&&E!==null){let M=N.replace(/^\s+-\s+/,"").trim().replace(/^["']|["']$/g,"");E.push(M)}continue}let W=N.match(/^([a-zA-Z-]+):\s*(.*)$/);if(W){b&&E!==null&&(p[b]=E);let[,H,M]=W;if(b=H,M.trim()==="")E=[];else{E=null;let q=M.trim();q=q.replace(/^["']|["']$/g,""),q==="true"&&(q=!0),q==="false"&&(q=!1),H==="timeout"&&!isNaN(Number(q))&&(q=Number(q)),p[H]=q}}}return b&&E!==null&&(p[b]=E),{frontmatter:p,script:l.trim()}}function l8r(i,r){if(i.description)return i.description;let n=r.split(/\r?\n/);for(let o of n){let l=o.trim();if(!l.startsWith("#!")){if(l.startsWith("#"))return l.slice(1).trim();if(l)break}}return"Custom hook"}function u8r(i,r){let o=Ree.relative(r,i).split(Ree.sep),l=o[0].replace(/\.(yaml|yml|md)$/i,"");return Nme(l)?l:o.length>=2&&Nme(o[0])?o[0]:null}async function bXe(i,r,n){try{let o=await _Xe.default.readFile(i,"utf-8"),{frontmatter:l,script:p}=IXe(o),h=u8r(i,n);if(!h)return K.warn(`Could not determine event type for hook: ${i}`),null;let E=Ree.basename(i).replace(/\.(yaml|yml|md)$/i,""),N=E===h?"default":E,W=l8r(l,p);return{id:`${r}-${h}-${N}`,name:N,event:h,filePath:i,source:r,frontmatter:l,script:p,description:W,isActive:!0}}catch(o){return K.warn(`Failed to parse hook file: ${i}`,o),null}}async function KVt(i,r){let n=[];if(!await _Xe.default.pathExists(i))return n;try{let o=await pm("**/*.{yaml,yml,md}",{cwd:i,nodir:!0,absolute:!0});for(let l of o){let p=await bXe(l,r,i);p&&(n.push(p),K.debug(`Discovered ${r} hook: ${p.event}/${p.name}`,{path:l}))}}catch(o){K.warn(`Failed to discover hooks in ${i}`,o)}return n}function d8r(i){let r={personal:[],project:[]},n={PreToolUse:[],PostToolUse:[],UserPromptSubmit:[],Notification:[],Stop:[]};for(let p of i)r[p.source].push(p);let o=new Map;for(let p of Gme)for(let h of r[p]){let b=`${h.event}-${h.name}`;o.set(b,h)}let l=[];for(let p of i){let h=`${p.event}-${p.name}`,b=o.get(h)?.id===p.id;p.isActive=b,b&&(l.push(p),n[p.event].push(p))}return{all:i,active:l,byEvent:n,bySource:r}}async function Wee(i=!1){if(!i&&zye&&Date.now()-mXe<o8r)return zye;let r=[],n=await KVt(yXe(),"personal");r.push(...n);let o=await KVt(gXe(),"project");r.push(...o);let l=d8r(r);return zye=l,mXe=Date.now(),K.info(`Discovered ${l.active.length} active hooks (${l.all.length} total)`),l}function vXe(){zye=null,mXe=0}function ePt(i,r){let n=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`,"i").test(r)}function p8r(i,r,n){let{frontmatter:o}=i;if(!o.tools||o.tools.length===0)return!0;if(!o.tools.some(p=>ePt(p,r)))return!1;if(!o.match||Object.keys(o.match).length===0)return!0;for(let[p,h]of Object.entries(o.match)){let b=n[p];if(b===void 0||!ePt(h,String(b)))return!1}return!0}function f8r(i,r){let n={HOOK_EVENT:r.event,HOOK_NAME:i.name,HOOK_CWD:r.projectRoot,HOOK_SESSION_ID:r.sessionId};if(r.tool){n.TOOL_NAME=r.tool.name,n.TOOL_CALL_ID=r.tool.callId,n.TOOL_INPUT=JSON.stringify(r.tool.input);for(let[o,l]of Object.entries(r.tool.input)){let p=`TOOL_INPUT_${o.toUpperCase().replace(/[^A-Z0-9]/g,"_")}`;n[p]=String(l)}r.event==="PostToolUse"&&(n.TOOL_OUTPUT=JSON.stringify(r.tool.output),n.TOOL_SUCCESS=String(r.tool.success??!0),r.tool.error&&(n.TOOL_ERROR=r.tool.error))}return r.userPrompt!==void 0&&(n.USER_PROMPT=r.userPrompt),n}async function m8r(i,r){let n=Date.now();if(i.frontmatter.enabled===!1)return{hookId:i.id,success:!0,exitCode:0,stdout:"",stderr:"",duration:0,skipped:!0,skipReason:"Hook is disabled"};if((r.event==="PreToolUse"||r.event==="PostToolUse")&&r.tool&&!p8r(i,r.tool.name,r.tool.input))return{hookId:i.id,success:!0,exitCode:0,stdout:"",stderr:"",duration:0,skipped:!0,skipReason:"Hook does not match tool"};let o=f8r(i,r),l=process.platform==="win32",p=l?"cmd.exe":"/bin/bash",h=l?["/c"]:["-c"];try{K.debug(`Executing hook: ${i.id}`,{event:r.event});let b=i.frontmatter.timeout??c8r,E=await sA(p,[...h,i.script],{cwd:r.projectRoot,env:{...process.env,...o},timeout:b,reject:!1,shell:!1}),N=Date.now()-n;return{hookId:i.id,success:E.exitCode===0,exitCode:E.exitCode??1,stdout:E.stdout||"",stderr:E.stderr||"",duration:N,skipped:!1}}catch(b){let E=Date.now()-n,N=b instanceof Error?b.message:"Hook execution failed";return K.error(`Hook execution failed: ${i.id}`,b),{hookId:i.id,success:!1,exitCode:1,stdout:"",stderr:"",duration:E,skipped:!1,error:N}}}async function R4(i,r){let n=Date.now();if(!hXe)return{event:i,allowed:!0,results:[],totalDuration:0};let o={...r,event:i},p=(await Wee()).byEvent[i];if(p.length===0)return{event:i,allowed:!0,results:[],totalDuration:0};let h=[],b=!1,E;for(let W of p){let H=await m8r(W,o);if(h.push(H),i==="PreToolUse"&&!H.success&&!H.skipped){b=!0,E=H.stderr.trim()||H.stdout.trim()||`Blocked by hook: ${W.name}`,K.info(`Tool blocked by hook ${W.id}: ${E}`);break}}let N=Date.now()-n;return{event:i,allowed:!b,blockMessage:E,results:h,totalDuration:N}}async function $ye(i,r,n,o,l){let p=await R4("PreToolUse",{projectRoot:o,sessionId:l,tool:{name:i,callId:r,input:n}});return{allowed:p.allowed,blockMessage:p.blockMessage}}async function Zee(i,r,n,o,l,p,h,b){await R4("PostToolUse",{projectRoot:h,sessionId:b,tool:{name:i,callId:r,input:n,output:o,success:l,error:p}})}async function iPt(i,r,n){let o=await R4("UserPromptSubmit",{projectRoot:r,sessionId:n,userPrompt:i});return{allowed:o.allowed,blockMessage:o.blockMessage}}async function sPt(i,r,n){await R4("Notification",{projectRoot:r,sessionId:n,notification:i})}async function aPt(i,r){await R4("Stop",{projectRoot:i,sessionId:r})}async function oPt(){return(await Wee()).active}async function xXe(i){return(await Wee()).byEvent[i]}async function cPt(i){return(await xXe(i)).length>0}var _Xe,zye,mXe,o8r,qye,hXe,c8r,_8r,wXe=Jt(()=>{"use strict";_Xe=So(Yb(),1);ex();mee();ef();cd();Ja();CMe();zye=null,mXe=0,o8r=5e3,qye=process.cwd(),hXe=!0,c8r=3e4;_8r={getProjectHooksDir:gXe,getPersonalHooksDir:yXe,setHooksProjectRoot:tPt,getHooksProjectRoot:rPt,setHooksEnabled:nPt,areHooksEnabled:ZJ,discoverHooks:Wee,invalidateHookCache:vXe,parseHookFrontmatter:IXe,parseHookFile:bXe,executeHooks:R4,executePreToolUseHooks:$ye,executePostToolUseHooks:Zee,executeUserPromptSubmitHooks:iPt,executeNotificationHooks:sPt,executeStopHooks:aPt,getActiveHooks:oPt,getHooksForEvent:xXe,hasHooksForEvent:cPt}});function nx(){return AXe||(AXe=new Vee),AXe}function h8r(){return new Vee}var Vee,AXe,VJ=Jt(()=>{"use strict";O_();Ja();kg();wm();$v();wXe();Vee=class i{tools=new Map;projectRoot=process.cwd();registerTool(r,n,o,l,p){this.tools.has(r)&&K.warn(`Tool ${r} is already registered, overwriting`);let h={definition:{name:r,description:n,input_schema:o},handler:l,actionType:p?.actionType,requiresApproval:p?.requiresApproval??!1,category:p?.category,tags:p?.tags,displayName:p?.displayName,disabled:p?.disabled??!1,silent:p?.silent??!1};this.tools.set(r,h),K.debug(`Tool registered: ${r}${p?.category?` (${p.category})`:""}`),aa().emit("tool-registered",{name:r,definition:h.definition})}unregisterTool(r){let n=this.tools.delete(r);return n&&(K.info(`Tool unregistered: ${r}`),aa().emit("tool-unregistered",{name:r})),n}getTool(r){return this.tools.get(r)}getDisplayName(r){let n=this.tools.get(r);return n?.displayName?n.displayName:r.split("_").map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join(" ")}getAllTools(){return Array.from(this.tools.values())}static MCP_EQUIVALENTS={};getToolDefinitions(r){let n=Array.from(this.tools.values());return r?.includeDisabled||(n=n.filter(o=>!o.disabled)),r?.category&&(n=n.filter(o=>o.category===r.category)),r?.tags&&(n=n.filter(o=>r.tags.some(l=>o.tags?.includes(l)))),r?.hideMCPDuplicates!==!1&&(n=this.filterMCPDuplicates(n)),n.map(o=>o.definition)}filterMCPDuplicates(r){let n=r.filter(l=>l.category==="mcp"||l.definition.name.startsWith("mcp_")).map(l=>l.definition.name.toLowerCase());if(n.length===0)return r;let o=new Set;for(let[l,p]of Object.entries(i.MCP_EQUIVALENTS))for(let h of p)if(n.some(E=>E.includes(h.toLowerCase()))){o.add(l),K.debug(`Hiding built-in tool '${l}' - MCP equivalent available (pattern: ${h})`);break}return o.size===0?r:r.filter(l=>!o.has(l.definition.name))}getToolsByCategory(r){return Array.from(this.tools.values()).filter(n=>n.category===r)}getCategories(){let r=new Set;return this.tools.forEach(n=>{n.category&&r.add(n.category)}),Array.from(r)}async executeTool(r,n,o){let l=this.tools.get(r);if(!l){let M=`Tool not found: ${r}`;return K.error(M),{success:!1,error:M,executionId:ya()}}let p=ya(),h={executionId:p,projectRoot:o?.projectRoot||this.projectRoot,toolCallId:o?.toolCallId,abortSignal:o?.abortSignal,metadata:o?.metadata,sessionId:o?.sessionId},b=Date.now(),E=n5(),N=E.recordAction(l.actionType||"custom",`Execute tool: ${r}`,n,{requiresApproval:l.requiresApproval,metadata:{toolName:r,executionId:p}}).id,W=aa();l.silent?K.debug(`Silent tool event suppressed (started): ${r}`):W.emit("tool-execution-started",{name:r,executionId:p,input:n,sessionId:h.sessionId});let H=this.sanitizePathInputs(l,n);try{if(ZJ()){let ue=await $ye(r,h.toolCallId||p,H,h.projectRoot);if(!ue.allowed){let le=Date.now()-b,Qe=ue.blockMessage||`Tool ${r} blocked by hook`;return K.info(`Tool blocked by PreToolUse hook: ${r}`,{blockMessage:Qe}),E.recordResult(N,{success:!1,error:{message:Qe,retryable:!1}}),jo().logToolExecuted({name:r,executionId:p,success:!1,duration_ms:le,input:H,error:Qe}),W.emit("tool-execution-blocked",{name:r,executionId:p,blockMessage:Qe,duration:le}),{success:!1,error:Qe,duration:le,executionId:p}}}E.updateActionStatus(N,"in_progress");let M=await l.handler(H,h),q=Date.now()-b;return E.recordResult(N,{success:!0,data:M,output:`Tool ${r} executed successfully`}),K.debug(`Tool executed successfully: ${r} in ${q}ms`),jo().logToolExecuted({name:r,executionId:p,success:!0,duration_ms:q,input:H,output:typeof M=="string"?M:JSON.stringify(M)}),ZJ()&&Zee(r,h.toolCallId||p,H,M,!0,void 0,h.projectRoot).catch(ue=>{K.warn(`PostToolUse hook failed for ${r}`,ue)}),l.silent?K.debug(`Silent tool event suppressed (completed): ${r}`):W.emit("tool-execution-completed",{name:r,executionId:p,data:M,duration:q,sessionId:h.sessionId}),{success:!0,data:M,duration:q,executionId:p}}catch(M){let q=Date.now()-b,ue=M instanceof Error?M.message:String(M);return E.recordResult(N,{success:!1,error:{message:ue,retryable:this.isRetryableError(M)}}),this.isUserInputError(M)?K.warn(`Tool ${r} failed (user input): ${ue}`):K.error(`Tool execution failed: ${r}`,M),jo().logToolExecuted({name:r,executionId:p,success:!1,duration_ms:q,input:H,error:ue}),ZJ()&&Zee(r,h.toolCallId||p,H,void 0,!1,ue,h.projectRoot).catch(le=>{K.warn(`PostToolUse hook failed for ${r}`,le)}),W.emit("tool-execution-failed",{name:r,executionId:p,error:ue,duration:q,sessionId:h.sessionId}),{success:!1,error:ue,duration:q,executionId:p}}}isRetryableError(r){if(r instanceof Error){let n=r.message.toLowerCase();if(n.includes("timeout")||n.includes("econnrefused")||n.includes("enotfound")||n.includes("network")||n.includes("ebusy")||n.includes("locked"))return!0}return!1}isUserInputError(r){if(r instanceof Error){let n=r.message.toLowerCase();if(n.includes("file not found")||n.includes("not found")||n.includes("enoent")||n.includes("no such file")||n.includes("invalid")||n.includes("validation")||n.includes("required")||n.includes("permission denied")||n.includes("eacces"))return!0}return!1}static PATH_PROPERTY_NAMES=new Set(["path","directory","source","destination"]);sanitizePathInputs(r,n){let o=r.definition.input_schema;if(!o||typeof o!="object"||!("properties"in o))return n;let l=o.properties;if(!l)return n;let p=!1,h={...n};for(let[b,E]of Object.entries(h)){let N=l[b];if(N){if(i.PATH_PROPERTY_NAMES.has(b)&&N.type==="string"&&typeof E=="string"){let W=E.trim().replace(/^["']|["']$/g,"");W!==E&&(h[b]=W,p=!0,K.debug(`Sanitized path input '${b}': "${E}" -> "${W}"`))}if(b==="paths"&&N.type==="array"&&Array.isArray(E)){let W=E.map(M=>typeof M=="string"?M.trim().replace(/^["']|["']$/g,""):M);W.some((M,q)=>M!==E[q])&&(h[b]=W,p=!0,K.debug(`Sanitized paths array input '${b}'`))}}}return p?h:n}hasTool(r){return this.tools.has(r)}requiresApproval(r){return this.tools.get(r)?.requiresApproval??!1}setProjectRoot(r){this.projectRoot=r,K.debug(`Tool registry project root set to: ${r}`)}clear(){let r=this.tools.size;this.tools.clear(),K.info(`Cleared ${r} registered tools`),aa().emit("tools-cleared",{count:r})}export(){return{tools:Array.from(this.tools.entries()).map(([n,o])=>({name:n,description:o.definition.description,category:o.category,tags:o.tags,requiresApproval:o.requiresApproval}))}}},AXe=null});function eIe(i){return i.replace(/\\/g,"/").toLowerCase()}function SXe(i){return vYe(i)}function EXe(i,r){let n=eIe(i),o=SXe(r);Kye.set(n,{contentHash:o,trackedAt:Date.now(),path:i}),K.debug(`[FileHashTracker] Tracked file: ${i} (hash: ${o.substring(0,8)}...)`)}function Pee(i,r){let n=eIe(i),o=SXe(r);Kye.set(n,{contentHash:o,trackedAt:Date.now(),path:i}),K.debug(`[FileHashTracker] Updated hash for: ${i} (hash: ${o.substring(0,8)}...)`)}async function kXe(i){let r=eIe(i),n=Kye.get(r);if(!n)return K.debug(`[FileHashTracker] File not tracked, skipping validation: ${i}`),{valid:!0,wasTracked:!1};try{let l=await(await import("fs/promises")).readFile(i,"utf-8"),p=SXe(l);if(p!==n.contentHash)throw K.warn(`[FileHashTracker] File modified externally: ${i} (expected: ${n.contentHash.substring(0,8)}..., got: ${p.substring(0,8)}...)`),new i5(i,n.contentHash,p);return K.debug(`[FileHashTracker] File integrity validated: ${i}`),{valid:!0,wasTracked:!0,currentHash:p,expectedHash:n.contentHash}}catch(o){throw o instanceof i5?o:o.code==="ENOENT"?(K.warn(`[FileHashTracker] File was deleted externally: ${i}`),new i5(i,n.contentHash,"<file deleted>")):o}}function CXe(i){let r=eIe(i);Kye.delete(r),K.debug(`[FileHashTracker] Untracked file: ${i}`)}var i5,Kye,TXe=Jt(()=>{"use strict";k$();Ja();i5=class extends Error{filePath;expectedHash;actualHash;constructor(r,n,o){super(`File "${r}" was modified externally since it was last read. Please re-read the file before making changes.`),this.name="FileModifiedExternallyError",this.filePath=r,this.expectedHash=n,this.actualHash=o}toToolResponse(){return{success:!1,error:"FILE_MODIFIED_EXTERNALLY",message:this.message,filePath:this.filePath,suggestion:"Re-read the file using read_file before attempting to edit it again."}}},Kye=new Map});import g8r from"path";function uPt(i,r,n=3){let o=i.split(`
2264
2266
  `),l=r.split(`
2265
2267
  `),p=l[0].trim();if(!p||p.length<5)return[];let h=[];for(let b=0;b<o.length;b++){let N=o[b].trim(),W=p.split(/\s+/).filter(M=>M.length>3),H=W.filter(M=>N.toLowerCase().includes(M.toLowerCase()));if(H.length>=Math.max(1,W.length*.5)){let M=H.length/Math.max(W.length,1),q=Math.max(0,b),ue=Math.min(o.length,b+Math.min(l.length,3)),le=o.slice(q,ue).join(`
2266
2268
  `);h.push({lineNumber:b+1,preview:le.slice(0,100)+(le.length>100?"...":""),similarity:M})}}return h.sort((b,E)=>E.similarity-b.similarity).slice(0,n)}function dPt(i){let r=i.replace(/\\/g,"/").toLowerCase(),n=g8r.basename(i).toLowerCase();if(r.includes("/.compass/")||r.startsWith(".compass/")||r.includes("/.claude/")||r.startsWith(".claude/"))return{blocked:!1};for(let o of zMe){let l=o.toLowerCase();if(r.includes(`/${l}/`)||r.includes(`\\${l}\\`)||r.startsWith(`${l}/`)||r.startsWith(`${l}\\`))return{blocked:!0,reason:`File is in blocklisted directory '${o}'. These directories contain generated/vendored code that would bloat context without providing useful information.`}}for(let o of BMe){let l=o.toLowerCase();if(!l.includes("*")&&!l.includes("/")){if(n===l)return{blocked:!0,reason:`File '${n}' is blocklisted. These files are typically very large and don't provide useful information for code understanding.`}}else if(l.startsWith("*.")){let p=l.slice(1);if(n.endsWith(p))return{blocked:!0,reason:`Files matching '${o}' are blocklisted. These are typically generated files that would bloat context.`}}else if(l.includes("/")){let p=l.replace(/\*\*/g,"").replace(/\*/g,"");if(r.includes(p))return{blocked:!0,reason:`Files in '${o}' are blocklisted as they typically contain large generated content.`}}}return{blocked:!1}}function W4(i,r,n){let o=rf(i);if(o<=r)return{content:i,wasTruncated:!1,originalTokens:o,truncatedTokens:o};let l=U7e(i,r,`
@@ -3243,7 +3245,7 @@ ${H}
3243
3245
  ${o.map((p,h)=>`#${h+1}: ${p}`).join(`
3244
3246
  `)}`:`${i}
3245
3247
 
3246
- [Resolved after ${n} attempts. Previous errors: ${l}]`}function QDt(i,r){let n=new Set;for(let p of i){let h=p.toLowerCase();UDt[h]&&n.add(UDt[h]),n.add(h)}let o=r.getToolDefinitions({includeDisabled:!0}),l=new Set;for(let p of o){let h=p.name.toLowerCase(),b=r.getDisplayName(p.name).toLowerCase();(n.has(h)||n.has(b))&&l.add(p.name)}return l}function tLr(i,r){if(eLr.has(i))return!0;if(i==="execute_command"){let n=String(r.command||"").trim().toLowerCase();return[/^git\s+(status|diff|log|show|branch|tag)/,/^ls\b/,/^cat\b/,/^echo\b/,/^pwd\b/,/^whoami\b/,/^which\b/,/^where\b/,/^node\s+--version/,/^npm\s+(list|ls|view|show)/,/^yarn\s+(list|info)/,/^pnpm\s+list/,/^python\s+--version/,/^java\s+-version/].some(l=>l.test(n))}return!1}async function jDt(i,r,n){let o=Date.now(),l=!1,p=!1;try{let h=await n.executeTool(i.name,i.input,{projectRoot:r,toolCallId:i.id}),b=Date.now()-o;if(h.success){let E=h.data,N=E?.success===!1&&(String(E?.error||"").toLowerCase().includes("rejected by user")||String(E?.error||"").toLowerCase().includes("rejected"));return(E?.planCancelled===!0||E?.endTurn===!0)&&(p=!0,K.info(`End turn signalled by ${i.name}`)),N?(l=!0,{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${E?.error||"Operation rejected by user"}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:String(E?.error||"Operation rejected by user"),duration_ms:b},userRejected:l,endTurn:p}):(K.debug(`Tool ${i.name} succeeded in ${b}ms`),{toolResult:{type:"tool_result",tool_use_id:i.id,content:JSON.stringify(h.data,null,2)},toolRecord:{name:i.name,input:i.input,result:h.data,success:!0,duration_ms:b},userRejected:l,endTurn:p})}else return(h.error?.toLowerCase().includes("rejected by user")||h.error?.toLowerCase().includes("rejected"))&&(l=!0),K.debug(`Tool ${i.name} failed: ${h.error}`),{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${h.error}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:h.error,duration_ms:b},userRejected:l,endTurn:p}}catch(h){let b=Date.now()-o,E=h instanceof Error?h.message:"Tool execution failed";return K.error(`Tool ${i.name} threw error`,h),{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${E}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:E,duration_ms:b},userRejected:l,endTurn:p}}}async function BDt(i,r){let n=nx(),o=!1,l=!1;if(i.every(h=>tLr(h.name,h.input))&&i.length>1){K.debug(`Executing ${i.length} tools in parallel: ${i.map(W=>W.name).join(", ")}`);let h=i.map(W=>jDt(W,r,n)),b=await Promise.all(h),E=[],N=[];for(let W of b)E.push(W.toolResult),N.push(W.toolRecord),W.userRejected&&(o=!0),W.endTurn&&(l=!0);return{results:E,records:N,userRejected:o,endTurn:l}}else{i.length>1&&K.debug(`Executing ${i.length} tools sequentially (contains write operations)`);let h=[],b=[];for(let E of i){K.debug(`Executing tool: ${E.name}`);let N=await jDt(E,r,n);h.push(N.toolResult),b.push(N.toolRecord),N.userRejected&&(o=!0),N.endTurn&&(l=!0)}return{results:h,records:b,userRejected:o,endTurn:l}}}async function CIe(i){let{query:r,pipedInput:n,attachments:o,projectRoot:l,continueSession:p,debug:h,autoApprove:b=!0,cliAgentsJson:E,agentConfig:N,standaloneAgent:W,callbacks:H,silent:M=!1}=i,q=gt=>{H?.onTextChunk&&H.onTextChunk(gt),M||process.stdout.write(gt)},ue=gt=>{H?.onStatusUpdate&&H.onStatusUpdate(gt)},le=(gt,cr,br)=>{H?.onToolStart&&H.onToolStart(gt,cr,br)},Qe=(gt,cr,br,on,Jr)=>{H?.onToolComplete&&H.onToolComplete(gt,cr,br,on,Jr)},Be=gt=>{H?.onError&&H.onError(gt),M||process.stderr.write(Dn.red(`Error: ${gt}
3248
+ [Resolved after ${n} attempts. Previous errors: ${l}]`}function QDt(i,r){let n=new Set;for(let p of i){let h=p.toLowerCase();UDt[h]&&n.add(UDt[h]),n.add(h)}let o=r.getToolDefinitions({includeDisabled:!0}),l=new Set;for(let p of o){let h=p.name.toLowerCase(),b=r.getDisplayName(p.name).toLowerCase();(n.has(h)||n.has(b))&&l.add(p.name)}return l}function tLr(i,r){if(eLr.has(i))return!0;if(i==="execute_command"){let n=String(r.command||"").trim().toLowerCase();return[/^git\s+(status|diff|log|show|branch|tag)/,/^ls\b/,/^cat\b/,/^echo\b/,/^pwd\b/,/^whoami\b/,/^which\b/,/^where\b/,/^node\s+--version/,/^npm\s+(list|ls|view|show)/,/^yarn\s+(list|info)/,/^pnpm\s+list/,/^python\s+--version/,/^java\s+-version/].some(l=>l.test(n))}return!1}async function jDt(i,r,n,o){let l=Date.now(),p=!1,h=!1;try{let b=await n.executeTool(i.name,i.input,{projectRoot:r,toolCallId:i.id,sessionId:o}),E=Date.now()-l;if(b.success){let N=b.data,W=N?.success===!1&&(String(N?.error||"").toLowerCase().includes("rejected by user")||String(N?.error||"").toLowerCase().includes("rejected"));return(N?.planCancelled===!0||N?.endTurn===!0)&&(h=!0,K.info(`End turn signalled by ${i.name}`)),W?(p=!0,{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${N?.error||"Operation rejected by user"}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:String(N?.error||"Operation rejected by user"),duration_ms:E},userRejected:p,endTurn:h}):(K.debug(`Tool ${i.name} succeeded in ${E}ms`),{toolResult:{type:"tool_result",tool_use_id:i.id,content:JSON.stringify(b.data,null,2)},toolRecord:{name:i.name,input:i.input,result:b.data,success:!0,duration_ms:E},userRejected:p,endTurn:h})}else return(b.error?.toLowerCase().includes("rejected by user")||b.error?.toLowerCase().includes("rejected"))&&(p=!0),K.debug(`Tool ${i.name} failed: ${b.error}`),{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${b.error}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:b.error,duration_ms:E},userRejected:p,endTurn:h}}catch(b){let E=Date.now()-l,N=b instanceof Error?b.message:"Tool execution failed";return K.error(`Tool ${i.name} threw error`,b),{toolResult:{type:"tool_result",tool_use_id:i.id,content:`Error: ${N}`,is_error:!0},toolRecord:{name:i.name,input:i.input,result:null,success:!1,error:N,duration_ms:E},userRejected:p,endTurn:h}}}async function BDt(i,r,n){let o=nx(),l=!1,p=!1;if(i.every(b=>tLr(b.name,b.input))&&i.length>1){K.debug(`Executing ${i.length} tools in parallel: ${i.map(H=>H.name).join(", ")}`);let b=i.map(H=>jDt(H,r,o,n)),E=await Promise.all(b),N=[],W=[];for(let H of E)N.push(H.toolResult),W.push(H.toolRecord),H.userRejected&&(l=!0),H.endTurn&&(p=!0);return{results:N,records:W,userRejected:l,endTurn:p}}else{i.length>1&&K.debug(`Executing ${i.length} tools sequentially (contains write operations)`);let b=[],E=[];for(let N of i){K.debug(`Executing tool: ${N.name}`);let W=await jDt(N,r,o,n);b.push(W.toolResult),E.push(W.toolRecord),W.userRejected&&(l=!0),W.endTurn&&(p=!0)}return{results:b,records:E,userRejected:l,endTurn:p}}}async function CIe(i){let{query:r,pipedInput:n,attachments:o,projectRoot:l,continueSession:p,debug:h,autoApprove:b=!0,cliAgentsJson:E,agentConfig:N,standaloneAgent:W,callbacks:H,silent:M=!1}=i,q=gt=>{H?.onTextChunk&&H.onTextChunk(gt),M||process.stdout.write(gt)},ue=gt=>{H?.onStatusUpdate&&H.onStatusUpdate(gt)},le=(gt,cr,br)=>{H?.onToolStart&&H.onToolStart(gt,cr,br)},Qe=(gt,cr,br,on,Jr)=>{H?.onToolComplete&&H.onToolComplete(gt,cr,br,on,Jr)},Be=gt=>{H?.onError&&H.onError(gt),M||process.stderr.write(Dn.red(`Error: ${gt}
3247
3249
  `))};h&&K.configure({level:"debug"});try{if(i.isSubagent){K.debug("Running in subagent mode - skipping singleton re-initialization");let cs=await G0();if(!cs.isInitialized())return Be("Subagent: API client not initialized."),{success:!1,content:"",error:"Subagent: API client not initialized.",exitCode:1};let{resolveModelId:Yd,getModelConfig:Ou}=await Promise.resolve().then(()=>(US(),qMe)),Lh;i.model&&(Lh=i.model.modelId,K.debug(`Subagent using session model: ${i.model.providerId}/${Lh}`)),N?.model&&N.model!=="inherit"&&(Lh=Yd(N.model),K.debug(`Subagent using agent model: ${N.model} \u2192 ${Lh}`));let zb=Lh&&Ou(Lh)||cs.getCurrentModel(),Gm=nx(),Nm=Gm.getToolDefinitions();if(N?.allowedTools&&N.allowedTools.length>0){let ko=QDt(N.allowedTools,Gm);Nm=Nm.filter(DI=>ko.has(DI.name)),K.debug(`Subagent filtered tools (${Nm.length} matched): ${Nm.map(DI=>DI.name).join(", ")}`)}let Wy=await lF({projectRoot:l}).getProjectSummary(),Zy;if(W&&N?.systemPrompt)Zy=N.systemPrompt;else{let ko=o_(),DI=ko.getEffectivePersonalityMode(),La=i.unguardedMode??ko.getUnguardedMode(),eT;if(La)try{eT=await wye()}catch(Lo){K.debug("Failed to generate system utilities section",Lo)}Zy=Bye({projectSummary:Wy?{formatted:Wy.formatted}:null,workingDirectory:l,modelName:zb.name,modelId:zb.id,personalityMode:DI,unguardedMode:La,systemUtilitiesSection:eT}),N?.systemPrompt&&(Zy=`${N.systemPrompt}
3248
3250
 
3249
3251
  ---
@@ -3265,7 +3267,7 @@ ${r}`);let nu=Ir;if(o&&o.length>0){let ko=xUe(o);nu=[{type:"text",text:Ir},...ko
3265
3267
 
3266
3268
  *(Turn budget exceeded)*`,i.onBudgetExceeded&&i.onBudgetExceeded("turns");break}if(Ad.tokensUsed>=Ad.maxTokens){PI=Hu+`
3267
3269
 
3268
- *(Token budget exceeded)*`,i.onBudgetExceeded&&i.onBudgetExceeded("tokens");break}}H?.onIterationStart&&H.onIterationStart(L5,Xh);let ko=await cs.createAgenticMessage(sf,{system:Zy,tools:Nm,maxTokens:16384,model:Lh,abortSignal:i.abortSignal},Ad=>{Hu+=Ad,X5||(X5=!0),q(Ad)},Ad=>{Ad.type==="tool_start"?le(Ad.name,Ad.id,{}):Ad.type==="tool_complete"&&Qe(Ad.name,Ad.id,Ad.input,!0)});if(i.budget){let Ad=ko.usage.inputTokens+ko.usage.outputTokens;i.budget.tokensUsed+=Ad,i.budget.turnsUsed=L5}if(ko.stopReason==="max_tokens"){sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:"Continue from where you left off."});continue}if(ko.stopReason!=="tool_use"||ko.toolUseBlocks.length===0){PI=Hu;break}let{results:DI,records:La,endTurn:eT}=await BDt(ko.toolUseBlocks,l);if(i.processId){let{getAgentSpawner:Ad}=await Promise.resolve().then(()=>(MC(),pF));if(Ad().getProcess(i.processId)?.status==="cancelled"){sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:DI}),PI=Hu+`
3270
+ *(Token budget exceeded)*`,i.onBudgetExceeded&&i.onBudgetExceeded("tokens");break}}H?.onIterationStart&&H.onIterationStart(L5,Xh);let ko=await cs.createAgenticMessage(sf,{system:Zy,tools:Nm,maxTokens:16384,model:Lh,abortSignal:i.abortSignal},Ad=>{Hu+=Ad,X5||(X5=!0),q(Ad)},Ad=>{Ad.type==="tool_start"?le(Ad.name,Ad.id,{}):Ad.type==="tool_complete"&&Qe(Ad.name,Ad.id,Ad.input,!0)});if(i.budget){let Ad=ko.usage.inputTokens+ko.usage.outputTokens;i.budget.tokensUsed+=Ad,i.budget.turnsUsed=L5}if(ko.stopReason==="max_tokens"){sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:"Continue from where you left off."});continue}if(ko.stopReason!=="tool_use"||ko.toolUseBlocks.length===0){PI=Hu;break}let{results:DI,records:La,endTurn:eT}=await BDt(ko.toolUseBlocks,l,i.sessionId);if(i.processId){let{getAgentSpawner:Ad}=await Promise.resolve().then(()=>(MC(),pF));if(Ad().getProcess(i.processId)?.status==="cancelled"){sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:DI}),PI=Hu+`
3269
3271
 
3270
3272
  *(Process cancelled)*`;break}}let Lo=ko.toolUseBlocks.length===1,Fa=Lo?ko.toolUseBlocks[0]:null,X_=Lo?DI[0]:null,tT=Lo?La[0]:null;if(Lo&&Fa&&Rm&&LDt(Fa.name,Fa.input,Rm)&&X_&&tT){let Ad=X_.is_error===!0,Rg=X_.content;Ad&&(Rm.attemptCount++,Rm.previousErrors.push(kIe(Rg)));let _1=XDt(Rg,Ad,Rm.attemptCount,Rm.previousErrors.slice(0,-1)),Hd={...X_,content:_1};sf.pop(),sf.pop(),sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:[Hd]}),Ad||(Rm=null)}else if(sf.push({role:"assistant",content:ko.contentBlocks}),sf.push({role:"user",content:DI}),Lo&&tT&&!tT.success){let Ad=Fa.input;Rm={toolName:Fa.name,targetPath:Ad.path,attemptCount:1,previousErrors:[kIe(tT.error||"Unknown error")]}}else Rm=null;if(eT){K.info("End turn signalled \u2014 stopping subagent agentic loop"),PI=Hu;break}if(L5>=Xh){PI=Hu+`
3271
3273
 
@@ -3321,7 +3323,7 @@ If you attempt to make code changes without first calling \`enter_plan_mode\`, y
3321
3323
 
3322
3324
  *(Token budget exceeded)*`,i.onBudgetExceeded&&i.onBudgetExceeded("tokens");break}let nu=(Ir.tokensUsed/Ir.maxTokens*100).toFixed(1),sf=(Ir.turnsUsed/Ir.maxTurns*100).toFixed(1);K.debug(`Budget status: ${Ir.tokensUsed}/${Ir.maxTokens} tokens (${nu}%), ${Ir.turnsUsed}/${Ir.maxTurns} turns (${sf}%)`)}H?.onIterationStart&&H.onIterationStart(wd,m1),gt(`API CALL START (iteration ${wd})`);let cs=await cr.createAgenticMessage(an,{system:cc,tools:ru,maxTokens:16384,abortSignal:i.abortSignal},Ir=>{Ng+=Ir,Et||(Et=!0),q(Ir)},Ir=>{if(Ir.type==="tool_start"){let nu=xa.isSilentTool(Ir.name);K.debug(`Tool started: ${Ir.name}${nu?" (silent)":""}`),nu||(le(Ir.name,Ir.id,{}),Et&&!M&&process.stderr.write(Dn.dim(`
3323
3325
  [Executing: ${Ir.name}]
3324
- `)))}else Ir.type==="tool_complete"&&(xa.isSilentTool(Ir.name)||Qe(Ir.name,Ir.id,Ir.input,!0))});if(gt(`API CALL DONE (iteration ${wd}, stopReason=${cs.stopReason})`),K.debug(`Response stop_reason: ${cs.stopReason}, tool calls: ${cs.toolUseBlocks.length}`),fm.inputTokens+=cs.usage.inputTokens,fm.outputTokens+=cs.usage.outputTokens,fm.totalTokens+=cs.usage.totalTokens,Gg.inputCost+=cs.cost.inputCost,Gg.outputCost+=cs.cost.outputCost,Gg.totalCost+=cs.cost.totalCost,i.budget){let Ir=cs.usage.inputTokens+cs.usage.outputTokens;i.budget.tokensUsed+=Ir,i.budget.turnsUsed=wd,K.debug(`Budget updated: +${Ir} tokens this turn, total: ${i.budget.tokensUsed}/${i.budget.maxTokens}`),i.budget.tokensUsed>=i.budget.maxTokens&&K.warn(`Token budget exceeded after API call: ${i.budget.tokensUsed}/${i.budget.maxTokens}`)}if(cs.stopReason==="max_tokens"){K.warn("Response truncated due to max_tokens - prompting continuation"),Bb.push({iteration:wd,llm_call:{messages_count:an.length,response_text:cs.textContent,tool_calls_count:0,usage:cs.usage,cost:cs.cost},tool_calls:[],stop_reason:cs.stopReason}),an.push({role:"assistant",content:cs.contentBlocks}),an.push({role:"user",content:"Continue from where you left off."});continue}if(cs.stopReason!=="tool_use"||cs.toolUseBlocks.length===0){Bb.push({iteration:wd,llm_call:{messages_count:an.length,response_text:cs.textContent,tool_calls_count:0,usage:cs.usage,cost:cs.cost},tool_calls:[],stop_reason:cs.stopReason}),Yu=Ng;break}ue(`Running ${cs.toolUseBlocks.length} tool(s)`);for(let Ir of cs.toolUseBlocks)xa.isSilentTool(Ir.name)?K.debug(`Silent tool suppressed from UI: ${Ir.name}`):le(Ir.name,Ir.id,Ir.input);let{results:Yd,records:Ou,userRejected:Lh,endTurn:zb}=await BDt(cs.toolUseBlocks,l);Ui+=Ou.length;for(let Ir=0;Ir<Ou.length;Ir++){let nu=Ou[Ir],sf=cs.toolUseBlocks[Ir];!xa.isSilentTool(nu.name)||!nu.success?Qe(nu.name,sf.id,nu.result,nu.success,nu.error):K.debug(`Silent tool result suppressed from UI: ${nu.name}`)}if(i.processId){let{getAgentSpawner:Ir}=await Promise.resolve().then(()=>(MC(),pF));Ir().getProcess(i.processId)?.status==="cancelled"&&(K.info(`Process ${i.processId} was cancelled during tool execution - stopping`),zb=!0,Yu=Ng+`
3326
+ `)))}else Ir.type==="tool_complete"&&(xa.isSilentTool(Ir.name)||Qe(Ir.name,Ir.id,Ir.input,!0))});if(gt(`API CALL DONE (iteration ${wd}, stopReason=${cs.stopReason})`),K.debug(`Response stop_reason: ${cs.stopReason}, tool calls: ${cs.toolUseBlocks.length}`),fm.inputTokens+=cs.usage.inputTokens,fm.outputTokens+=cs.usage.outputTokens,fm.totalTokens+=cs.usage.totalTokens,Gg.inputCost+=cs.cost.inputCost,Gg.outputCost+=cs.cost.outputCost,Gg.totalCost+=cs.cost.totalCost,i.budget){let Ir=cs.usage.inputTokens+cs.usage.outputTokens;i.budget.tokensUsed+=Ir,i.budget.turnsUsed=wd,K.debug(`Budget updated: +${Ir} tokens this turn, total: ${i.budget.tokensUsed}/${i.budget.maxTokens}`),i.budget.tokensUsed>=i.budget.maxTokens&&K.warn(`Token budget exceeded after API call: ${i.budget.tokensUsed}/${i.budget.maxTokens}`)}if(cs.stopReason==="max_tokens"){K.warn("Response truncated due to max_tokens - prompting continuation"),Bb.push({iteration:wd,llm_call:{messages_count:an.length,response_text:cs.textContent,tool_calls_count:0,usage:cs.usage,cost:cs.cost},tool_calls:[],stop_reason:cs.stopReason}),an.push({role:"assistant",content:cs.contentBlocks}),an.push({role:"user",content:"Continue from where you left off."});continue}if(cs.stopReason!=="tool_use"||cs.toolUseBlocks.length===0){Bb.push({iteration:wd,llm_call:{messages_count:an.length,response_text:cs.textContent,tool_calls_count:0,usage:cs.usage,cost:cs.cost},tool_calls:[],stop_reason:cs.stopReason}),Yu=Ng;break}ue(`Running ${cs.toolUseBlocks.length} tool(s)`);for(let Ir of cs.toolUseBlocks)xa.isSilentTool(Ir.name)?K.debug(`Silent tool suppressed from UI: ${Ir.name}`):le(Ir.name,Ir.id,Ir.input);let{results:Yd,records:Ou,userRejected:Lh,endTurn:zb}=await BDt(cs.toolUseBlocks,l,i.sessionId);Ui+=Ou.length;for(let Ir=0;Ir<Ou.length;Ir++){let nu=Ou[Ir],sf=cs.toolUseBlocks[Ir];!xa.isSilentTool(nu.name)||!nu.success?Qe(nu.name,sf.id,nu.result,nu.success,nu.error):K.debug(`Silent tool result suppressed from UI: ${nu.name}`)}if(i.processId){let{getAgentSpawner:Ir}=await Promise.resolve().then(()=>(MC(),pF));Ir().getProcess(i.processId)?.status==="cancelled"&&(K.info(`Process ${i.processId} was cancelled during tool execution - stopping`),zb=!0,Yu=Ng+`
3325
3327
 
3326
3328
  *(Process cancelled)*`)}Lh&&K.info("Operation rejected - continuing agentic loop so LLM can respond"),Bb.push({iteration:wd,llm_call:{messages_count:an.length,response_text:cs.textContent,tool_calls_count:cs.toolUseBlocks.length,usage:cs.usage,cost:cs.cost},tool_calls:Ou,stop_reason:cs.stopReason});let Gm=cs.toolUseBlocks.length===1,Nm=Gm?cs.toolUseBlocks[0]:null,Od=Gm?Yd[0]:null,Wy=Gm?Ou[0]:null;if(Gm&&Nm&&ms&&LDt(Nm.name,Nm.input,ms)&&Od&&Wy){let Ir=Od.is_error===!0,nu=Od.content;Ir&&(ms.attemptCount++,ms.previousErrors.push(kIe(nu)));let sf=XDt(nu,Ir,ms.attemptCount,ms.previousErrors.slice(0,-1)),ni={...Od,content:sf};an.pop(),an.pop(),an.push({role:"assistant",content:cs.contentBlocks}),an.push({role:"user",content:[ni]}),K.debug(`Tool retry detected: ${Nm.name} attempt ${ms.attemptCount} (replaced previous)`),Ir||(ms=null)}else if(an.push({role:"assistant",content:cs.contentBlocks}),an.push({role:"user",content:Yd}),Gm&&Wy&&!Wy.success){let Ir=Nm.input;ms={toolName:Nm.name,targetPath:Ir.path,attemptCount:1,previousErrors:[kIe(Wy.error||"Unknown error")]},K.debug(`Tool retry tracking started: ${Nm.name}`)}else ms=null;if(zb){K.info("End turn signalled \u2014 stopping agentic loop"),Yu||(Yu=Ng);break}if(wd>=m1){K.warn("Agentic loop reached maximum iterations"),Yu=Ng+`
3327
3329
 
@@ -3787,7 +3789,7 @@ ${r}`),o.push({role:"user",content:b}),o}estimateTaskTokens(r,n,o){let l=rf(r);f
3787
3789
  `)}zS();var rqe=[{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"]}]}],tpn=[{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 e7t(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(`
3788
3790
  `)}function rpn(){try{let{getCustomCommands:i}=(KLt(),lxr($Lt)),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 npn(){let i=[...rqe],r=rpn();r&&i.push(r);let n=i.map(e7t);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(`
3789
3791
  `)}function ipn(i){let r=i.startsWith("/")?i:`/${i}`,o=rqe.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(`
3790
- `)}F4();var w7n="1.0.77",A7n="compass-cli",S7n="AI-powered development assistance using Anthropic's Claude models";export{Jme as ACTIVE_PLAN_TYPE_LIMITS,Fq as AGENT_SOURCE_PRIORITY,S7n as APP_DESCRIPTION,rwr as APP_DISPLAY_NAME,A7n as APP_NAME,nwr as APP_TAGLINE,twr as APP_VERSION,BLt as ASCII_BANNER,LMe as AUTO_COMPACT_TRIGGER,Zme as AUTO_SAVE_INTERVAL_MS,Fee as ActionLogger,$Vt as ActionStatus,Ey as ActionType,Qhe as AnthropicClient,B_e as ApprovalManager,CH as ApprovalMode,WMe as BACKUPS_DIR,Vq as BACKUP_RETENTION_DAYS,awr as BINARY_EXTENSIONS,q_e as BackupManager,Rxr as CACHE_DIR,Oq as CATEGORY_INFO,TMe as CHAT_ARCHIVE_VERSION,Ow as CLAUDE_MODELS,tpn as CLI_COMMANDS,Udn as COMPASS_ICON,GH as CONFIG_FILE_NAME,XMe as CONSENT_EXPIRY_DAYS,FMe as CONSENT_FILE_NAME,iwr as CONSENT_VERSION,Wxr as CONTEXT_DIR,Uxr as CONTEXT_WINDOW_SAFETY_MARGIN,Zxr as CONTEXT_WINDOW_WARNING_PERCENT,Wq as CREDENTIALS_FILE_NAME,CN as CRON_DAY_NAMES,Ome as CRON_PRESETS,H_e as ChatArchivalService,Uee as ComplexityClassifier,N_e as ConfigManager,P_e as ConsentManager,O_e as CredentialStore,Hme as DAY_NAME_TO_CRON,SN as DEFAULT_ANTHROPIC_TEMPERATURE,Pxr as DEFAULT_CLASSIFIER_MODEL,oZ as DEFAULT_CLASSIFIER_MODELS_BY_PROVIDER,EN as DEFAULT_CONFIG,Vxr as DEFAULT_COST_WARNING_THRESHOLD,_C as DEFAULT_MAX_TOKENS,Yw as DEFAULT_MODEL,Yvt as DEFAULT_OLLAMA_TEMPERATURE,zv as DEFAULT_PERSONALITY_MODE,CD as DEFAULT_PLAN_TYPE,kxr as DEFAULT_RATING_CONFIG,Jq as DEFAULT_SCHEDULE_HEADER,xxr as DEFAULT_UPDATE_CONFIG,Lme as DISABLED_MODELS,EI as ENV_VARS,Oee as EnhancedContextGatherer,Z_e as EventEmitter,Gq as ExecutionMode,G4t as ExecutionStrategy,Rq as GLOBAL_COMPASS_DIR,XK as GitService,Fvt as HOOK_EVENTS,Gme as HOOK_SOURCE_PRIORITY,Ixe as HistoryManager,ZMe as INDEX_DIR,sre as InteractiveClarifier,C4t as IssueCategory,k4t as IssueSeverity,swr as LANGUAGE_EXTENSIONS,RMe as LOGS_DIR,tte as LogInterpreter,FH as MAX_BACKUP_FILES,jxr as MAX_CACHE_SIZE_BYTES,Mq as MAX_COMMAND_OUTPUT_TOKENS,Lxr as MAX_DYNAMIC_STREAM_BLOCKS,Pvt as MAX_FILES_PER_OPERATION,UMe as MAX_FILE_READ_TOKENS,Dvt as MAX_FILE_SIZE_BYTES,Dq as MAX_HISTORY_LENGTH,Qxr as MAX_INDEXED_FILES,aZ as MAX_MEMORY_LINES,qxr as MAX_RETRY_ATTEMPTS,Xxr as MAX_SEARCH_RESULT_TOKENS,HMe as MEMORY_DIR,AN as MEMORY_FILE_NAME,Yq as MODEL_ALIASES,Rme as NOVA_LOCAL_MD_FILE_NAME,sZ as NOVA_MD_FILE_NAME,Hvt as NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT,s9e as PLAN_LIMITS,Zq as PROJECTS_DIR,kD as PROJECT_COMPASS_DIR,kN as PROVIDERS,Pme as PROVIDER_ENV_VARS,are as PlanGenerator,$xr as RETRY_BASE_DELAY_MS,ewr as RETRY_JITTER_FACTOR,Kxr as RETRY_MAX_DELAY_MS,Uq as ROLLING_WINDOW_HOURS,Xq as ROLLING_WINDOW_MS,OMe as RULES_DIR,NH as SAVED_SESSIONS_DIR,t9e as SCHEDULE_FILE_NAME,Zvt as SESSION_EXPIRY_DAYS,Fme as SESSION_FILE_NAME,Vme as SHELL_COMMAND_MAX_TIMEOUT_MS,Pq as SHELL_COMMAND_TIMEOUT_MS,rqe as SLASH_COMMANDS,RH as SYSTEM_UTILITIES,J_e as SessionManager,xye as ShellExecutor,jVt as StepStatus,Nee as StepTracker,BVt as StepType,Yme as TASK_ID_PREFIX,Hq as TASK_ID_RANDOM_LENGTH,r9e as TASK_STATUSES,VMe as TEMP_DIR,n9e as TOKEN_LIMITS_STORE_FILENAME,i9e as TOKEN_LIMITS_STORE_VERSION,gwr as TOKEN_LIMIT_MESSAGES,cwr as TOKEN_LIMIT_WARNING_THRESHOLD_PERCENT,JMe as TOKEN_WARNING_THRESHOLD,zMe as TOOL_READ_BLOCKLIST_DIRS,BMe as TOOL_READ_BLOCKLIST_PATTERNS,EMe as TaskExecutionStatus,zVt as TaskStatus,CYe as TokenLimitEnforcer,NMe as TokenLimitExceededError,L_e as TokenLimitStore,j_e as TokenTracker,Vee as ToolRegistry,$Me as UTILITY_DETECTION_CACHE_TTL,KMe as UTILITY_DETECTION_TIMEOUT,Ovt as VALID_PLAN_TYPES,w7n as VERSION,ore as Verifier,q7e as WORKFLOW_PROMPTS,rte as WorkflowManager,cre as WorkflowOrchestrator,Sme as WorkflowPhase,T4t as WorkflowState,Jdn as applyCompletion,_Or as applyPatch,fOr as areIdentical,jHr as calculateContextUsagePercent,zvt as calculateModelCost,XHr as calculateRemainingTokens,CGr as colorByStatus,uOr as colorizeDiff,Tvt as compareAgentPriority,Fxr as compareHookPriority,qvt as compareModels,RN as copy,a8r as createActionLogger,T$ as createChatArchivalService,vJr as createComplexityClassifier,kvt as createDefaultAgentDefinition,Ixr as createDefaultConsent,Cxr as createDefaultRatingState,V8r as createEnhancedContextGatherer,bxr as createFullConsent,wVr as createGitService,bdn as createInteractiveClarifier,SLr as createLogInterpreter,vxr as createMinimalConsent,xdn as createPlanGenerator,s8r as createStepTracker,R$ as createTokenLimitStore,h8r as createToolRegistry,Adn as createVerifier,kLr as createWorkflowManager,Edn as createWorkflowOrchestrator,bYe as decrypt,IYe as encrypt,Tl as ensureDir,JHr as estimateConversationTokens,LHr as estimateSystemPromptTokens,rf as estimateTokens,Gdn as executeSlashCommand,zze as extractCodeBlocks,Bze as extractMentions,ipn as formatCommandHelp,xGr as formatCost,yGr as formatDate,IGr as formatDuration,vGr as formatFileSize,npn as formatFullHelp,e7t as formatHelpCategory,kGr as formatList,ZSt as formatPercent,EGr as formatProgressBar,bGr as formatRelativeTime,sn as formatTimestamp,wGr as formatTokenCount,QHr as formatTokenDisplay,k4 as generateDiff,dOr as generateDiffSummary,VGr as generateSecureRandom,pOr as generateWordDiff,n5 as getActionLogger,Eme as getAgentSourcePriority,G0 as getAnthropicClient,hh as getApprovalManager,Uvt as getAvailableAliases,Xvt as getAvailableModelIds,cZ as getAvailableModels,EZ as getBackupManager,Dkr as getBasename,mOr as getChangedLineCount,Kvt as getCheapestModel,RJ as getCodebaseIndexer,Zdn as getCompletions,Qee as getComplexityClassifier,LD as getConfigManager,_Ye as getConsentManager,lF as getContextBuilder,BHr as getContextUsageColor,n8r as getConversationCompactor,k0 as getCredentialStore,jvt as getDefaultModel,Bvt as getDefaultModelId,Hee as getEnhancedContextGatherer,aa as getEventEmitter,Pkr as getExtension,aF as getFileService,qo as getGlobalCompassDir,Ndn as getHistoryManager,kMe as getHookSourcePriority,Uze as getInteractiveClarifier,eQe as getLogInterpreter,i_ as getModelConfig,Mme as getModelDescription,t1t as getModelTier,X_e as getModelTokens,$vt as getModelsByCapability,e1t as getMostCapableModel,fxe as getPlanGenerator,lu as getProjectCompassDir,Zkr as getRelativePath,o_ as getSessionManager,Sy as getShellExecutor,eqe as getSlashCommandRegistry,r5 as getStepTracker,wye as getSystemUtilitiesPromptSection,H3t as getSystemUtilityDetector,Xdn as getTaskProcessor,RI as getTokenTracker,nx as getToolRegistry,owr as getUtilitiesByCategory,jze as getVerifier,ELr as getWorkflowManager,Sdn as getWorkflowOrchestrator,Jvt as hasFullAccess,vYe as hash,PGr as hmac,oA as interpolateTemplate,Lvt as isAnthropicModel,S$ as isDirectory,C_e as isFile,OD as isPathWithin,Cme as isValidAgentFrontmatter,kme as isValidAgentPermissionMode,Svt as isValidAgentSource,dxr as isValidAnthropicConfig,Evt as isValidCLIAgentConfig,iZ as isValidChatArchive,uxr as isValidCompassConfig,gxr as isValidConfigFile,wvt as isValidConsent,yxr as isValidConsentRecord,Nme as isValidHookEvent,Nxr as isValidHookFrontmatter,Gxr as isValidHookSource,Qvt as isValidModel,Exr as isValidNotificationStyle,pxr as isValidProjectConfig,Txr as isValidRatingState,fxr as isValidSafetyConfig,_xr as isValidSessionConfig,Tdn as isValidSlashCommand,mxr as isValidUIConfig,wxr as isValidUpdateCheckResult,Axr as isValidUpdateConfig,hxr as isValidUpdateSettingsConfig,Sxr as isValidUpdateType,K as logger,f$ as matchesPattern,Vkr as normalizeSeparators,SGr as padString,JLt as parseArgs,Cdn as parseInput,ED as parseToolsList,ra as pathExists,i8 as readDir,MUe as registerBuiltInTools,Kze as registerSlashCommand,E0 as remove,Bdn as renderBanner,zdn as renderMiniBanner,qdn as renderWelcome,G$ as resetIfExpired,Rkr as resolveGlobalPath,yy as resolveModelId,a9e as resolvePlanLimits,Wkr as resolveProjectPath,Qu as safeReadFile,ld as safeReadJson,S0 as safeWriteFile,M_ as safeWriteJson,YD as sanitizePath,DGr as secureCompare,Cvt as serializeToolsList,vy as stat,F$ as sumAllUsage,yZ as toForwardSlashes,AGr as truncate,UHr as wouldExceedContext};
3792
+ `)}F4();var w7n="1.0.78",A7n="compass-cli",S7n="AI-powered development assistance using Anthropic's Claude models";export{Jme as ACTIVE_PLAN_TYPE_LIMITS,Fq as AGENT_SOURCE_PRIORITY,S7n as APP_DESCRIPTION,rwr as APP_DISPLAY_NAME,A7n as APP_NAME,nwr as APP_TAGLINE,twr as APP_VERSION,BLt as ASCII_BANNER,LMe as AUTO_COMPACT_TRIGGER,Zme as AUTO_SAVE_INTERVAL_MS,Fee as ActionLogger,$Vt as ActionStatus,Ey as ActionType,Qhe as AnthropicClient,B_e as ApprovalManager,CH as ApprovalMode,WMe as BACKUPS_DIR,Vq as BACKUP_RETENTION_DAYS,awr as BINARY_EXTENSIONS,q_e as BackupManager,Rxr as CACHE_DIR,Oq as CATEGORY_INFO,TMe as CHAT_ARCHIVE_VERSION,Ow as CLAUDE_MODELS,tpn as CLI_COMMANDS,Udn as COMPASS_ICON,GH as CONFIG_FILE_NAME,XMe as CONSENT_EXPIRY_DAYS,FMe as CONSENT_FILE_NAME,iwr as CONSENT_VERSION,Wxr as CONTEXT_DIR,Uxr as CONTEXT_WINDOW_SAFETY_MARGIN,Zxr as CONTEXT_WINDOW_WARNING_PERCENT,Wq as CREDENTIALS_FILE_NAME,CN as CRON_DAY_NAMES,Ome as CRON_PRESETS,H_e as ChatArchivalService,Uee as ComplexityClassifier,N_e as ConfigManager,P_e as ConsentManager,O_e as CredentialStore,Hme as DAY_NAME_TO_CRON,SN as DEFAULT_ANTHROPIC_TEMPERATURE,Pxr as DEFAULT_CLASSIFIER_MODEL,oZ as DEFAULT_CLASSIFIER_MODELS_BY_PROVIDER,EN as DEFAULT_CONFIG,Vxr as DEFAULT_COST_WARNING_THRESHOLD,_C as DEFAULT_MAX_TOKENS,Yw as DEFAULT_MODEL,Yvt as DEFAULT_OLLAMA_TEMPERATURE,zv as DEFAULT_PERSONALITY_MODE,CD as DEFAULT_PLAN_TYPE,kxr as DEFAULT_RATING_CONFIG,Jq as DEFAULT_SCHEDULE_HEADER,xxr as DEFAULT_UPDATE_CONFIG,Lme as DISABLED_MODELS,EI as ENV_VARS,Oee as EnhancedContextGatherer,Z_e as EventEmitter,Gq as ExecutionMode,G4t as ExecutionStrategy,Rq as GLOBAL_COMPASS_DIR,XK as GitService,Fvt as HOOK_EVENTS,Gme as HOOK_SOURCE_PRIORITY,Ixe as HistoryManager,ZMe as INDEX_DIR,sre as InteractiveClarifier,C4t as IssueCategory,k4t as IssueSeverity,swr as LANGUAGE_EXTENSIONS,RMe as LOGS_DIR,tte as LogInterpreter,FH as MAX_BACKUP_FILES,jxr as MAX_CACHE_SIZE_BYTES,Mq as MAX_COMMAND_OUTPUT_TOKENS,Lxr as MAX_DYNAMIC_STREAM_BLOCKS,Pvt as MAX_FILES_PER_OPERATION,UMe as MAX_FILE_READ_TOKENS,Dvt as MAX_FILE_SIZE_BYTES,Dq as MAX_HISTORY_LENGTH,Qxr as MAX_INDEXED_FILES,aZ as MAX_MEMORY_LINES,qxr as MAX_RETRY_ATTEMPTS,Xxr as MAX_SEARCH_RESULT_TOKENS,HMe as MEMORY_DIR,AN as MEMORY_FILE_NAME,Yq as MODEL_ALIASES,Rme as NOVA_LOCAL_MD_FILE_NAME,sZ as NOVA_MD_FILE_NAME,Hvt as NO_SUBSCRIPTION_DAILY_TOKEN_LIMIT,s9e as PLAN_LIMITS,Zq as PROJECTS_DIR,kD as PROJECT_COMPASS_DIR,kN as PROVIDERS,Pme as PROVIDER_ENV_VARS,are as PlanGenerator,$xr as RETRY_BASE_DELAY_MS,ewr as RETRY_JITTER_FACTOR,Kxr as RETRY_MAX_DELAY_MS,Uq as ROLLING_WINDOW_HOURS,Xq as ROLLING_WINDOW_MS,OMe as RULES_DIR,NH as SAVED_SESSIONS_DIR,t9e as SCHEDULE_FILE_NAME,Zvt as SESSION_EXPIRY_DAYS,Fme as SESSION_FILE_NAME,Vme as SHELL_COMMAND_MAX_TIMEOUT_MS,Pq as SHELL_COMMAND_TIMEOUT_MS,rqe as SLASH_COMMANDS,RH as SYSTEM_UTILITIES,J_e as SessionManager,xye as ShellExecutor,jVt as StepStatus,Nee as StepTracker,BVt as StepType,Yme as TASK_ID_PREFIX,Hq as TASK_ID_RANDOM_LENGTH,r9e as TASK_STATUSES,VMe as TEMP_DIR,n9e as TOKEN_LIMITS_STORE_FILENAME,i9e as TOKEN_LIMITS_STORE_VERSION,gwr as TOKEN_LIMIT_MESSAGES,cwr as TOKEN_LIMIT_WARNING_THRESHOLD_PERCENT,JMe as TOKEN_WARNING_THRESHOLD,zMe as TOOL_READ_BLOCKLIST_DIRS,BMe as TOOL_READ_BLOCKLIST_PATTERNS,EMe as TaskExecutionStatus,zVt as TaskStatus,CYe as TokenLimitEnforcer,NMe as TokenLimitExceededError,L_e as TokenLimitStore,j_e as TokenTracker,Vee as ToolRegistry,$Me as UTILITY_DETECTION_CACHE_TTL,KMe as UTILITY_DETECTION_TIMEOUT,Ovt as VALID_PLAN_TYPES,w7n as VERSION,ore as Verifier,q7e as WORKFLOW_PROMPTS,rte as WorkflowManager,cre as WorkflowOrchestrator,Sme as WorkflowPhase,T4t as WorkflowState,Jdn as applyCompletion,_Or as applyPatch,fOr as areIdentical,jHr as calculateContextUsagePercent,zvt as calculateModelCost,XHr as calculateRemainingTokens,CGr as colorByStatus,uOr as colorizeDiff,Tvt as compareAgentPriority,Fxr as compareHookPriority,qvt as compareModels,RN as copy,a8r as createActionLogger,T$ as createChatArchivalService,vJr as createComplexityClassifier,kvt as createDefaultAgentDefinition,Ixr as createDefaultConsent,Cxr as createDefaultRatingState,V8r as createEnhancedContextGatherer,bxr as createFullConsent,wVr as createGitService,bdn as createInteractiveClarifier,SLr as createLogInterpreter,vxr as createMinimalConsent,xdn as createPlanGenerator,s8r as createStepTracker,R$ as createTokenLimitStore,h8r as createToolRegistry,Adn as createVerifier,kLr as createWorkflowManager,Edn as createWorkflowOrchestrator,bYe as decrypt,IYe as encrypt,Tl as ensureDir,JHr as estimateConversationTokens,LHr as estimateSystemPromptTokens,rf as estimateTokens,Gdn as executeSlashCommand,zze as extractCodeBlocks,Bze as extractMentions,ipn as formatCommandHelp,xGr as formatCost,yGr as formatDate,IGr as formatDuration,vGr as formatFileSize,npn as formatFullHelp,e7t as formatHelpCategory,kGr as formatList,ZSt as formatPercent,EGr as formatProgressBar,bGr as formatRelativeTime,sn as formatTimestamp,wGr as formatTokenCount,QHr as formatTokenDisplay,k4 as generateDiff,dOr as generateDiffSummary,VGr as generateSecureRandom,pOr as generateWordDiff,n5 as getActionLogger,Eme as getAgentSourcePriority,G0 as getAnthropicClient,hh as getApprovalManager,Uvt as getAvailableAliases,Xvt as getAvailableModelIds,cZ as getAvailableModels,EZ as getBackupManager,Dkr as getBasename,mOr as getChangedLineCount,Kvt as getCheapestModel,RJ as getCodebaseIndexer,Zdn as getCompletions,Qee as getComplexityClassifier,LD as getConfigManager,_Ye as getConsentManager,lF as getContextBuilder,BHr as getContextUsageColor,n8r as getConversationCompactor,k0 as getCredentialStore,jvt as getDefaultModel,Bvt as getDefaultModelId,Hee as getEnhancedContextGatherer,aa as getEventEmitter,Pkr as getExtension,aF as getFileService,qo as getGlobalCompassDir,Ndn as getHistoryManager,kMe as getHookSourcePriority,Uze as getInteractiveClarifier,eQe as getLogInterpreter,i_ as getModelConfig,Mme as getModelDescription,t1t as getModelTier,X_e as getModelTokens,$vt as getModelsByCapability,e1t as getMostCapableModel,fxe as getPlanGenerator,lu as getProjectCompassDir,Zkr as getRelativePath,o_ as getSessionManager,Sy as getShellExecutor,eqe as getSlashCommandRegistry,r5 as getStepTracker,wye as getSystemUtilitiesPromptSection,H3t as getSystemUtilityDetector,Xdn as getTaskProcessor,RI as getTokenTracker,nx as getToolRegistry,owr as getUtilitiesByCategory,jze as getVerifier,ELr as getWorkflowManager,Sdn as getWorkflowOrchestrator,Jvt as hasFullAccess,vYe as hash,PGr as hmac,oA as interpolateTemplate,Lvt as isAnthropicModel,S$ as isDirectory,C_e as isFile,OD as isPathWithin,Cme as isValidAgentFrontmatter,kme as isValidAgentPermissionMode,Svt as isValidAgentSource,dxr as isValidAnthropicConfig,Evt as isValidCLIAgentConfig,iZ as isValidChatArchive,uxr as isValidCompassConfig,gxr as isValidConfigFile,wvt as isValidConsent,yxr as isValidConsentRecord,Nme as isValidHookEvent,Nxr as isValidHookFrontmatter,Gxr as isValidHookSource,Qvt as isValidModel,Exr as isValidNotificationStyle,pxr as isValidProjectConfig,Txr as isValidRatingState,fxr as isValidSafetyConfig,_xr as isValidSessionConfig,Tdn as isValidSlashCommand,mxr as isValidUIConfig,wxr as isValidUpdateCheckResult,Axr as isValidUpdateConfig,hxr as isValidUpdateSettingsConfig,Sxr as isValidUpdateType,K as logger,f$ as matchesPattern,Vkr as normalizeSeparators,SGr as padString,JLt as parseArgs,Cdn as parseInput,ED as parseToolsList,ra as pathExists,i8 as readDir,MUe as registerBuiltInTools,Kze as registerSlashCommand,E0 as remove,Bdn as renderBanner,zdn as renderMiniBanner,qdn as renderWelcome,G$ as resetIfExpired,Rkr as resolveGlobalPath,yy as resolveModelId,a9e as resolvePlanLimits,Wkr as resolveProjectPath,Qu as safeReadFile,ld as safeReadJson,S0 as safeWriteFile,M_ as safeWriteJson,YD as sanitizePath,DGr as secureCompare,Cvt as serializeToolsList,vy as stat,F$ as sumAllUsage,yZ as toForwardSlashes,AGr as truncate,UHr as wouldExceedContext};
3791
3793
  /*! Bundled license information:
3792
3794
 
3793
3795
  typescript/lib/typescript.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compass-ai/nova",
3
- "version": "1.0.77",
3
+ "version": "1.0.78",
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",