🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@rushy/imperium-cli

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rushy/imperium-cli - npm Package Compare versions

Comparing version
0.6.16
to
0.6.17
+40
-39
dist/index.js

@@ -1,13 +0,13 @@

var Or=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var j=(e,t)=>{for(var r in t)Or(e,r,{get:t[r],enumerable:!0})};import I from"chalk";function Ct(e){D=e}function c(e){D.silent||console.log(e)}function w(e){D.silent||console.log(I.green("\u2714 ")+e)}function g(e){D.silent||console.log(I.yellow("\u26A0 ")+e)}function u(e){console.error(I.red("\u2716 ")+e)}function h(e){D.verbose&&!D.silent&&console.log(I.gray(" "+e))}function Fe(e){D.silent||console.log(I.dim(e))}function y(e){D.silent||console.log(`
`+I.bold.cyan(e))}function de(e){D.silent||e.forEach(t=>console.log(" \u2022 "+t))}var D,C=P(()=>{"use strict";D={}});import{distance as Ar}from"fastest-levenshtein";function pe(e,t,r=3){let n=e.toLowerCase();return t.map(o=>({match:o,distance:Ar(n,o.toLowerCase())})).filter(o=>o.distance/Math.max(n.length,o.match.length)<=jr).sort((o,s)=>o.distance-s.distance).slice(0,r)}function _e(e,t){let r=pe(e,t,1);return r.length===0?null:r[0].distance/Math.max(e.length,r[0].match.length)<=.3?r[0].match:null}function Ne(e){return _e(e,Dr)}function Ue(e){return _e(e,Fr)}var jr,Dr,Fr,Q=P(()=>{"use strict";jr=.45;Dr=["setup","add","list","search","inspect","update","remove","init","detect","validate"];Fr=[".claude",".github",".windsurf",".cursor",".agents"]});import{writeFileSync as fe,mkdirSync as U,existsSync as _r}from"fs";import{join as v}from"path";function ee(e){return Hr[e]||St}function ge(e,t,r){switch(e){case"claude":return v(t,"CLAUDE.md");case"github":return v(t,"copilot-instructions.md");case"windsurf":case"cursor":case"custom":return v(t,"rules",`${r}.md`)}}var Nr,Ur,zr,Gr,St,Hr,J=P(()=>{"use strict";C();Nr={scaffold(e){let t=[v(e,"rules"),v(e,"commands"),v(e,"agents"),v(e,"skills"),v(e,"todos")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){if(!(e.manifest.tags?.includes("agent")||e.manifest.tags?.includes("claude-agent")||e.manifest.targets?.includes("claude")&&e.manifest.kind==="skill"))return[];let n=[],i=v(t.rootDir,"agents");U(i,{recursive:!0});let o=v(i,`${e.manifest.name}.md`),s=["---",`name: ${e.manifest.name}`,`description: ${e.manifest.description}`,"---","",e.skillContent.trim()].join(`
`);return fe(o,s+`
`,"utf-8"),h(`Generated Claude agent file: ${o}`),n.push(o),n}},Ur={scaffold(e){let t=[v(e,"instructions"),v(e,"prompts")];t.forEach(n=>U(n,{recursive:!0}));let r=v(e,"copilot-instructions.md");return _r(r)||fe(r,`# Copilot Instructions
var Hr=Object.defineProperty;var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var F=(e,t)=>{for(var r in t)Hr(e,r,{get:t[r],enumerable:!0})};import I from"chalk";function Tt(e){j=e}function c(e){j.silent||console.log(e)}function w(e){j.silent||console.log(I.green("\u2714 ")+e)}function g(e){j.silent||console.log(I.yellow("\u26A0 ")+e)}function d(e){console.error(I.red("\u2716 ")+e)}function y(e){j.verbose&&!j.silent&&console.log(I.gray(" "+e))}function Ge(e){j.silent||console.log(I.dim(e))}function k(e){j.silent||console.log(`
`+I.bold.cyan(e))}function fe(e){j.silent||e.forEach(t=>console.log(" \u2022 "+t))}var j,C=x(()=>{"use strict";j={}});import{distance as Br}from"fastest-levenshtein";function ge(e,t,r=3){let n=e.toLowerCase();return t.map(s=>({match:s,distance:Br(n,s.toLowerCase())})).filter(s=>s.distance/Math.max(n.length,s.match.length)<=Kr).sort((s,o)=>s.distance-o.distance).slice(0,r)}function ze(e,t){let r=ge(e,t,1);return r.length===0?null:r[0].distance/Math.max(e.length,r[0].match.length)<=.3?r[0].match:null}function He(e){return ze(e,Wr)}function Be(e){return ze(e,Jr)}var Kr,Wr,Jr,Q=x(()=>{"use strict";Kr=.45;Wr=["setup","add","list","search","inspect","update","remove","init","detect","validate"];Jr=[".claude",".github",".windsurf",".cursor",".agents"]});import{writeFileSync as he,mkdirSync as U,existsSync as Vr}from"fs";import{dirname as Yr,join as $}from"path";function ee(e){return en[e]||Ot}function ye(e,t,r){switch(e){case"claude":return $(t,"CLAUDE.md");case"github":return $(t,"copilot-instructions.md");case"windsurf":case"cursor":case"custom":return $(t,"rules",`${r}.md`)}}var qr,Xr,Zr,Qr,Ot,en,J=x(()=>{"use strict";C();qr={scaffold(e){let t=[$(e,"rules"),$(e,"commands"),$(e,"agents"),$(e,"skills"),$(e,"todos")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){if(!(e.manifest.tags?.includes("agent")||e.manifest.tags?.includes("claude-agent")||e.manifest.targets?.includes("claude")&&e.manifest.kind==="skill"))return[];let n=[],i=$(t.rootDir,"agents");U(i,{recursive:!0});let s=$(i,`${e.manifest.name}.md`),o=["---",`name: ${e.manifest.name}`,`description: ${e.manifest.description}`,"---","",e.skillContent.trim()].join(`
`);return he(s,o+`
`,"utf-8"),y(`Generated Claude agent file: ${s}`),n.push(s),n}},Xr={scaffold(e){let t=$(Yr(e),".vscode"),r=[$(e,"instructions"),$(e,"prompts"),t];r.forEach(i=>U(i,{recursive:!0}));let n=$(e,"copilot-instructions.md");return Vr(n)||he(n,`# Copilot Instructions
Add project-wide instructions here.
`,"utf-8"),t},generateNativeFiles(e,t){let r=[],n=v(t.rootDir,"instructions");U(n,{recursive:!0});let i=v(n,`${e.manifest.name}.instructions.md`),o=["---",'applyTo: "**"',"---","",`# ${e.manifest.name}`,"",e.manifest.description,"",e.skillContent.trim()].join(`
`);return fe(i,o+`
`,"utf-8"),h(`Generated GitHub instructions file: ${i}`),r.push(i),r}},zr={scaffold(e){let t=[v(e,"skills"),v(e,"workflows")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){return[]}},Gr={scaffold(e){let t=[v(e,"rules")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){let r=[],n=v(t.rootDir,"rules");U(n,{recursive:!0});let i=v(n,`${e.manifest.name}.md`),o=[`# ${e.manifest.name}`,"",e.manifest.description,"",e.skillContent.trim()].join(`
`);return fe(i,o+`
`,"utf-8"),h(`Generated Cursor rule file: ${i}`),r.push(i),r}},St={scaffold(e){let t=[v(e,"skills")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(){return[]}},Hr={claude:Nr,github:Ur,windsurf:zr,cursor:Gr,custom:St}});var Et,Rt=P(()=>{"use strict";Et={claude:".claude",github:".github",windsurf:".agents",cursor:".cursor",custom:".agents"}});import{existsSync as ze}from"fs";import{resolve as T,join as H}from"path";import{input as Br,select as Lt,confirm as Kr}from"@inquirer/prompts";function te(e){return{".claude":"claude",".github":"github",".windsurf":"windsurf",".cursor":"cursor",".agents":"custom"}[e]||"custom"}function he(e=process.cwd()){return Wr.filter(t=>ze(T(e,t)))}async function $(e,t=process.cwd()){if(e.root){let n=T(t,e.root),i=e.target||te(e.root);if(!ze(n)&&!e.noFuzzy){let o=Ue(e.root);o&&ze(T(t,o))&&(g(`'${e.root}' not found \u2014 using '${o}' instead.`),n=T(t,o))}return{preset:i,rootDir:n,skillsDir:H(n,"skills")}}if(e.target){let n=Et[e.target]||`.${e.target}`,i=T(t,n);return{preset:e.target,rootDir:i,skillsDir:H(i,"skills")}}let r=he(t);if(r.length===1){if(!e.yes&&!await Kr({message:`Found ${r[0]}. Use it as the target?`,default:!0}))return await It(t);let n=T(t,r[0]);return{preset:te(r[0]),rootDir:n,skillsDir:H(n,"skills")}}if(r.length>1){if(e.yes){let o=T(t,r[0]);return{preset:te(r[0]),rootDir:o,skillsDir:H(o,"skills")}}let n=await Lt({message:"Found multiple agent folders. Which one should I use?",choices:r.map(o=>({name:o,value:o}))}),i=T(t,n);return{preset:te(n),rootDir:i,skillsDir:H(i,"skills")}}if(e.yes){let n=T(t,".claude");return{preset:"claude",rootDir:n,skillsDir:H(n,"skills")}}return await It(t)}async function It(e){let t=await Lt({message:"No agent folder detected. Which preset should I set up?",choices:[{name:".claude",value:".claude"},{name:".github",value:".github"},{name:".windsurf",value:".windsurf"},{name:".cursor",value:".cursor"},{name:"Custom folder",value:"__custom__"}]}),r=t;t==="__custom__"&&(r=await Br({message:"Enter the folder name:",default:".agents"}));let n=T(e,r);return{preset:te(r),rootDir:n,skillsDir:H(n,"skills")}}var Wr,F=P(()=>{"use strict";Rt();C();Q();Wr=[".claude",".github",".windsurf",".cursor",".agents"]});import{readFileSync as Jr,writeFileSync as Vr,existsSync as Yr,mkdirSync as qr}from"fs";import{join as Mt,dirname as Xr}from"path";function Tt(e,t){return{version:1,preset:t,root:e,packages:{},instructions:{}}}function E(e){let t=Mt(e,Ot);if(!Yr(t))return h(`No lockfile at ${t}, will create on write.`),Tt(e,null);try{let r=Jr(t,"utf-8"),n=JSON.parse(r);return n.instructions||(n.instructions={}),n}catch{return h(`Corrupt lockfile at ${t}, starting fresh.`),Tt(e,null)}}function L(e,t){let r=Mt(e,Ot);qr(Xr(r),{recursive:!0}),Vr(r,JSON.stringify(t,null,2)+`
`,"utf-8"),h(`Wrote lockfile to ${r}`)}function At(e,t){return{...e,packages:{...e.packages,[t.name]:t}}}function jt(e,t){let{[t]:r,...n}=e.packages;return{...e,packages:n}}function ye(e,t){return t in e.packages}function Dt(e,t){return{...e,instructions:{...e.instructions,[t.name]:t}}}function Ft(e,t){let{[t]:r,...n}=e.instructions;return{...e,instructions:n}}function _t(e,t){return t in e.instructions}var Ot,z=P(()=>{"use strict";C();Ot="imperium.lock.json"});import{readFileSync as Zr,writeFileSync as Qr,mkdirSync as en,existsSync as tn,statSync as rn,readdirSync as nn,rmSync as sn}from"fs";import{join as ke}from"path";import{homedir as on}from"os";import{createHash as an}from"crypto";function mn(){en(re,{recursive:!0})}function Nt(e){return an("sha256").update(e).digest("hex").slice(0,32)+".cache"}function we(e,t=cn){try{let r=ke(re,Nt(e));if(!tn(r))return null;let n=Zr(r,"utf-8"),i=JSON.parse(n);return Date.now()-i.ts>t?null:i.data}catch{return null}}function ve(e,t){try{mn();let r={url:e,data:t,ts:Date.now()};Qr(ke(re,Nt(e)),JSON.stringify(r),"utf-8"),un()}catch{}}function un(){try{let e=nn(re).filter(t=>t.endsWith(".cache")).map(t=>{let r=ke(re,t);return{file:r,mtime:rn(r).mtimeMs}}).sort((t,r)=>t.mtime-r.mtime);for(;e.length>ln;){let t=e.shift();sn(t.file,{force:!0})}}catch{}}var re,cn,ln,Ge=P(()=>{"use strict";re=ke(on(),".imperium","cache"),cn=300*1e3,ln=50});import{readFileSync as dn,writeFileSync as pn,existsSync as Ut,mkdirSync as fn,rmSync as gn}from"fs";import{join as zt}from"path";import{homedir as hn}from"os";import{createServer as yn}from"http";import{createHash as kn,randomBytes as Gt}from"crypto";function vn(){fn(Wt,{recursive:!0,mode:448})}function Ve(){try{if(!Ut(ne))return null;let e=dn(ne,"utf-8");return JSON.parse(e)}catch{return null}}function Jt(e){vn(),pn(ne,JSON.stringify(e,null,2),{encoding:"utf-8",mode:384})}function Be(){try{Ut(ne)&&gn(ne,{force:!0})}catch{}}function Pn(){return Gt(32).toString("base64url")}function $n(e){return kn("sha256").update(e).digest("base64url")}async function xn(e,t){let r=new URLSearchParams({client_id:We,scope:Je,code:e,redirect_uri:Kt,grant_type:"authorization_code",code_verifier:t}),n=await fetch(Bt,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!n.ok)throw new Error(`Token exchange failed (HTTP ${n.status})`);let i=await n.json(),o=Vt(i.id_token);return{accessToken:i.access_token,idToken:i.id_token??null,refreshToken:i.refresh_token??null,expiresAt:Date.now()+i.expires_in*1e3,email:o}}async function bn(e){let t=new URLSearchParams({client_id:We,scope:Je,refresh_token:e,grant_type:"refresh_token"}),r=await fetch(Bt,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:t.toString()});if(!r.ok)throw new Error(`Token refresh failed (HTTP ${r.status}). Run \`imperium login\` to re-authenticate.`);let n=await r.json(),i=Vt(n.id_token);return{accessToken:n.access_token,idToken:n.id_token??null,refreshToken:n.refresh_token??e,expiresAt:Date.now()+n.expires_in*1e3,email:i}}function Vt(e){if(!e)return null;try{let t=e.split(".")[1];if(!t)return null;let r=JSON.parse(Buffer.from(t,"base64url").toString("utf-8"));return r.email??r.preferred_username??null}catch{return null}}function Cn(e){return`<!DOCTYPE html>
`,"utf-8"),r},generateNativeFiles(e,t){let r=[],n=$(t.rootDir,"instructions");U(n,{recursive:!0});let i=$(n,`${e.manifest.name}.instructions.md`),s=["---",'applyTo: "**"',"---","",`# ${e.manifest.name}`,"",e.manifest.description,"",e.skillContent.trim()].join(`
`);return he(i,s+`
`,"utf-8"),y(`Generated GitHub instructions file: ${i}`),r.push(i),r}},Zr={scaffold(e){let t=[$(e,"skills"),$(e,"workflows")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){return[]}},Qr={scaffold(e){let t=[$(e,"rules")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(e,t){let r=[],n=$(t.rootDir,"rules");U(n,{recursive:!0});let i=$(n,`${e.manifest.name}.md`),s=[`# ${e.manifest.name}`,"",e.manifest.description,"",e.skillContent.trim()].join(`
`);return he(i,s+`
`,"utf-8"),y(`Generated Cursor rule file: ${i}`),r.push(i),r}},Ot={scaffold(e){let t=[$(e,"skills")];return t.forEach(r=>U(r,{recursive:!0})),t},generateNativeFiles(){return[]}},en={claude:qr,github:Xr,windsurf:Zr,cursor:Qr,custom:Ot}});var At,Ft=x(()=>{"use strict";At={claude:".claude",github:".github",windsurf:".agents",cursor:".cursor",custom:".agents"}});import{existsSync as Ke}from"fs";import{resolve as L,join as H}from"path";import{input as tn,select as Dt,confirm as rn}from"@inquirer/prompts";function te(e){return{".claude":"claude",".github":"github",".windsurf":"windsurf",".cursor":"cursor",".agents":"custom"}[e]||"custom"}function ke(e=process.cwd()){return nn.filter(t=>Ke(L(e,t)))}async function b(e,t=process.cwd()){if(e.root){let n=L(t,e.root),i=e.target||te(e.root);if(!Ke(n)&&!e.noFuzzy){let s=Be(e.root);s&&Ke(L(t,s))&&(g(`'${e.root}' not found \u2014 using '${s}' instead.`),n=L(t,s))}return{preset:i,rootDir:n,skillsDir:H(n,"skills")}}if(e.target){let n=At[e.target]||`.${e.target}`,i=L(t,n);return{preset:e.target,rootDir:i,skillsDir:H(i,"skills")}}let r=ke(t);if(r.length===1){if(!e.yes&&!await rn({message:`Found ${r[0]}. Use it as the target?`,default:!0}))return await jt(t);let n=L(t,r[0]);return{preset:te(r[0]),rootDir:n,skillsDir:H(n,"skills")}}if(r.length>1){if(e.yes){let s=L(t,r[0]);return{preset:te(r[0]),rootDir:s,skillsDir:H(s,"skills")}}let n=await Dt({message:"Found multiple agent folders. Which one should I use?",choices:r.map(s=>({name:s,value:s}))}),i=L(t,n);return{preset:te(n),rootDir:i,skillsDir:H(i,"skills")}}if(e.yes){let n=L(t,".claude");return{preset:"claude",rootDir:n,skillsDir:H(n,"skills")}}return await jt(t)}async function jt(e){let t=await Dt({message:"No agent folder detected. Which preset should I set up?",choices:[{name:".claude",value:".claude"},{name:".github",value:".github"},{name:".windsurf",value:".windsurf"},{name:".cursor",value:".cursor"},{name:"Custom folder",value:"__custom__"}]}),r=t;t==="__custom__"&&(r=await tn({message:"Enter the folder name:",default:".agents"}));let n=L(e,r);return{preset:te(r),rootDir:n,skillsDir:H(n,"skills")}}var nn,D=x(()=>{"use strict";Ft();C();Q();nn=[".claude",".github",".windsurf",".cursor",".agents"]});import{readFileSync as sn,writeFileSync as on,existsSync as an,mkdirSync as cn}from"fs";import{join as Nt,dirname as ln}from"path";function _t(e,t){return{version:1,preset:t,root:e,packages:{},instructions:{}}}function E(e){let t=Nt(e,Ut);if(!an(t))return y(`No lockfile at ${t}, will create on write.`),_t(e,null);try{let r=sn(t,"utf-8"),n=JSON.parse(r);return n.instructions||(n.instructions={}),n}catch{return y(`Corrupt lockfile at ${t}, starting fresh.`),_t(e,null)}}function M(e,t){let r=Nt(e,Ut);cn(ln(r),{recursive:!0}),on(r,JSON.stringify(t,null,2)+`
`,"utf-8"),y(`Wrote lockfile to ${r}`)}function Gt(e,t){return{...e,packages:{...e.packages,[t.name]:t}}}function zt(e,t){let{[t]:r,...n}=e.packages;return{...e,packages:n}}function we(e,t){return t in e.packages}function Ht(e,t){return{...e,instructions:{...e.instructions,[t.name]:t}}}function Bt(e,t){let{[t]:r,...n}=e.instructions;return{...e,instructions:n}}function Kt(e,t){return t in e.instructions}var Ut,G=x(()=>{"use strict";C();Ut="imperium.lock.json"});import{readFileSync as mn,writeFileSync as un,mkdirSync as dn,existsSync as pn,statSync as fn,readdirSync as gn,rmSync as hn}from"fs";import{join as ve}from"path";import{homedir as yn}from"os";import{createHash as kn}from"crypto";function Pn(){dn(re,{recursive:!0})}function Wt(e){return kn("sha256").update(e).digest("hex").slice(0,32)+".cache"}function Pe(e,t=wn){try{let r=ve(re,Wt(e));if(!pn(r))return null;let n=mn(r,"utf-8"),i=JSON.parse(n);return Date.now()-i.ts>t?null:i.data}catch{return null}}function $e(e,t){try{Pn();let r={url:e,data:t,ts:Date.now()};un(ve(re,Wt(e)),JSON.stringify(r),"utf-8"),$n()}catch{}}function $n(){try{let e=gn(re).filter(t=>t.endsWith(".cache")).map(t=>{let r=ve(re,t);return{file:r,mtime:fn(r).mtimeMs}}).sort((t,r)=>t.mtime-r.mtime);for(;e.length>vn;){let t=e.shift();hn(t.file,{force:!0})}}catch{}}var re,wn,vn,We=x(()=>{"use strict";re=ve(yn(),".imperium","cache"),wn=300*1e3,vn=50});import{readFileSync as xn,writeFileSync as bn,existsSync as Jt,mkdirSync as Cn,rmSync as Sn}from"fs";import{join as Vt}from"path";import{homedir as En}from"os";import{createServer as Rn}from"http";import{createHash as In,randomBytes as Yt}from"crypto";function Ln(){Cn(Qt,{recursive:!0,mode:448})}function Ze(){try{if(!Jt(ne))return null;let e=xn(ne,"utf-8");return JSON.parse(e)}catch{return null}}function er(e){Ln(),bn(ne,JSON.stringify(e,null,2),{encoding:"utf-8",mode:384})}function Ve(){try{Jt(ne)&&Sn(ne,{force:!0})}catch{}}function Tn(){return Yt(32).toString("base64url")}function On(e){return In("sha256").update(e).digest("base64url")}async function An(e,t){let r=new URLSearchParams({client_id:qe,scope:Xe,code:e,redirect_uri:Zt,grant_type:"authorization_code",code_verifier:t}),n=await fetch(Xt,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!n.ok)throw new Error(`Token exchange failed (HTTP ${n.status})`);let i=await n.json(),s=tr(i.id_token);return{accessToken:i.access_token,idToken:i.id_token??null,refreshToken:i.refresh_token??null,expiresAt:Date.now()+i.expires_in*1e3,email:s}}async function Fn(e){let t=new URLSearchParams({client_id:qe,scope:Xe,refresh_token:e,grant_type:"refresh_token"}),r=await fetch(Xt,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:t.toString()});if(!r.ok)throw new Error(`Token refresh failed (HTTP ${r.status}). Run \`imperium login\` to re-authenticate.`);let n=await r.json(),i=tr(n.id_token);return{accessToken:n.access_token,idToken:n.id_token??null,refreshToken:n.refresh_token??e,expiresAt:Date.now()+n.expires_in*1e3,email:i}}function tr(e){if(!e)return null;try{let t=e.split(".")[1];if(!t)return null;let r=JSON.parse(Buffer.from(t,"base64url").toString("utf-8"));return r.email??r.preferred_username??null}catch{return null}}function jn(e){return`<!DOCTYPE html>
<html lang="en">

@@ -67,3 +67,3 @@ <head>

</svg>
${Ke(e)}
${Ye(e)}
</p>

@@ -78,3 +78,3 @@ <div class="divider"></div>

</body>
</html>`}function Ke(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Pe(e,t){let r=Ke(e),n=t?Ke(t):void 0;return`<!DOCTYPE html>
</html>`}function Ye(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function xe(e,t){let r=Ye(e),n=t?Ye(t):void 0;return`<!DOCTYPE html>
<html lang="en">

@@ -111,29 +111,30 @@ <head>

</body>
</html>`}async function Yt(){let e=Pn(),t=$n(e),r=Gt(16).toString("hex"),n=new URLSearchParams({client_id:We,response_type:"code",redirect_uri:Kt,scope:Je,state:r,code_challenge:t,code_challenge_method:"S256",prompt:"select_account"}),i=`${wn}?${n}`;return new Promise((o,s)=>{let a=new Set,p=yn(async(k,x)=>{try{let b=new URL(k.url??"/",`http://localhost:${He}`);if(b.pathname!=="/callback"){x.writeHead(404),x.end("Not found");return}let R=b.searchParams.get("error");if(R){let bt=b.searchParams.get("error_description")??R;x.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),x.end(Pe("Login failed",bt)),f(),s(new Error(`Login failed: ${bt}`));return}if(b.searchParams.get("state")!==r){x.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),x.end(Pe("Invalid state","Possible CSRF attack. Please try again.")),f(),s(new Error("OAuth state mismatch \u2014 possible CSRF attack."));return}let xt=b.searchParams.get("code");if(!xt){x.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),x.end(Pe("No code received")),f(),s(new Error("No authorization code received."));return}let De=await xn(xt,e);Jt(De),x.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),x.end(Cn(De.email??"unknown")),f(),w(`Logged in as ${De.email??"unknown"}`),o()}catch(b){x.writeHead(500,{"Content-Type":"text/html; charset=utf-8"}),x.end(Pe("Error",b.message)),f(),s(b)}});p.on("connection",k=>{a.add(k),k.on("close",()=>a.delete(k))});let f=()=>{p.close();for(let k of a)k.destroy()};p.listen(He,"127.0.0.1",async()=>{c("Opening browser for Microsoft sign-in...");try{let{exec:k}=await import("child_process"),x=process.platform==="darwin"?`open "${i}"`:process.platform==="win32"?`start "" "${i}"`:`xdg-open "${i}"`;k(x)}catch{c(`Open this URL in your browser:
${i}`)}}),setTimeout(()=>{f(),s(new Error("Login timed out after 5 minutes. Please try again."))},300*1e3).unref()})}function qt(){Be(),w("Logged out successfully.")}function Xt(){let e=Ve();if(!e){c("Not logged in. Run `imperium login` to authenticate.");return}let t=Date.now()>e.expiresAt;if(t&&!e.refreshToken){c("Session expired. Run `imperium login` to re-authenticate.");return}if(c(`Logged in as ${e.email??"unknown"}`),e.email){let r=e.email.split("@")[1];c(`Domain: ${r}`)}t&&c("(token expired \u2014 will auto-refresh on next request)")}function V(){let e=Ve();return e?Date.now()<e.expiresAt||!!e.refreshToken:!1}async function Ye(){let e=Ve();if(!e)throw new Error("Not authenticated. Run `imperium login` first.");if(Date.now()<e.expiresAt)return e.idToken??e.accessToken;if(!e.refreshToken)throw Be(),new Error("Session expired with no refresh token. Run `imperium login` to re-authenticate.");try{let t=await bn(e.refreshToken);return!t.email&&e.email&&(t.email=e.email),Jt(t),t.idToken??t.accessToken}catch{throw Be(),new Error("Session expired. Run `imperium login` to re-authenticate.")}}var We,Ht,wn,Bt,Je,He,Kt,Wt,ne,qe=P(()=>{"use strict";C();We="952eb2a4-55db-4a95-baae-e744293a6b90",Ht="https://login.microsoftonline.com/organizations",wn=`${Ht}/oauth2/v2.0/authorize`,Bt=`${Ht}/oauth2/v2.0/token`,Je="openid email profile User.Read",He=9876,Kt=`http://localhost:${He}/callback`,Wt=zt(hn(),".imperium"),ne=zt(Wt,"auth.json")});import Xe from"gray-matter";import{createHash as Sn}from"crypto";function En(e){return Sn("sha256").update(e).digest("hex").slice(0,16)}async function er(e){let t=await Ye(),r=`${Zt}${e}`,n=await fetch(r,{headers:{Authorization:`Bearer ${t}`,"User-Agent":"imperium-cli"}});if(n.status===401)throw new Error("Authentication expired. Run `imperium login` to re-authenticate.");if(n.status===403)throw new Error("Access denied. Your email domain is not authorized for private content.");if(!n.ok)throw new Error(`Private registry error (HTTP ${n.status}): ${e}`);return n}async function Ze(e,t=Qt){let r=`imperium-private://${e}`,n=we(r,t);if(n!==null)return h("Private cache hit"),n;let o=await(await er(e)).text();return ve(r,o),o}async function $e(e,t=Qt){let r=await Ze(e,t);return JSON.parse(r)}async function Qe(e){return(await er(e)).text()}async function Rn(e){let t=new Map;try{let n=await Ye(),i=await fetch(`${Zt}/batch/download`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-Agent":"imperium-cli"},body:JSON.stringify({paths:e})});if(i.ok){let o=await i.json();for(let s of o.files)s.content!==null&&t.set(s.path,s.content);return t}h(`Batch download returned HTTP ${i.status}, falling back to parallel fetches`)}catch(n){h(`Batch download failed: ${n.message}, falling back to parallel fetches`)}let r=await Promise.all(e.map(async n=>{try{let i=await Qe(n);return{path:n,content:i}}catch{return{path:n,content:null}}}));for(let n of r)n.content!==null&&t.set(n.path,n.content);return t}async function xe(e){if(!V())return[];try{let r=(await $e("/registry.json")).packages.map(n=>({...n,source:"private"}));return e&&(r=r.filter(n=>n.kind===e)),r}catch(t){return h(`Private registry unavailable: ${t.message}`),[]}}async function tr(e){let t=await Ze(`/content/skills/${e}`),r=JSON.parse(t);if(r.length===0)throw new Error(`Private package '${e}' has no files.`);let n=r.find(b=>b.endsWith("SKILL.md"));if(!n)throw new Error(`Private package '${e}' is missing SKILL.md.`);let i=r.map(b=>`/content/skills/${e}/${b}`),o=await Rn(i),s=`/content/skills/${e}/${n}`,a=o.get(s);if(!a)throw new Error(`Failed to fetch SKILL.md for private package '${e}'.`);let{data:p,content:f}=Xe(a),d=p,k=r.map(b=>{let R=`/content/skills/${e}/${b}`;return{path:b,content:o.get(R)??""}}),x=k.map(b=>b.content).join("");return{manifest:{...d,name:d.name||e,kind:d.kind||"skill",version:d.version||"0.0.0",description:d.description||""},skillContent:f,files:k,checksum:En(x)}}async function rr(e){let t=await xe(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function nr(e){if(!V())return null;try{let t=await Ze(`/content/skills/${e}/SKILL.md`),{data:r,content:n}=Xe(t);return{manifest:{...r,name:r.name||e,kind:r.kind||"skill",version:r.version||"0.0.0",description:r.description||""},content:n}}catch{return null}}async function et(){if(!V())return[];try{return(await $e("/mcp-registry.json")).mcps}catch(e){return h(`Private MCP registry unavailable: ${e.message}`),[]}}async function ir(e){return(await et()).find(r=>r.name===e)??null}async function tt(){if(!V())return[];try{return(await $e("/instructions-registry.json")).instructions}catch(e){return h(`Private instructions registry unavailable: ${e.message}`),[]}}async function rt(e){return(await tt()).find(r=>r.name===e)??null}async function sr(e){let t=await Qe(`/content/instructions/${e}.md`),{data:r,content:n}=Xe(t);return{content:n.trim(),description:typeof r.description=="string"?r.description:""}}async function nt(){if(!V())return[];try{return(await $e("/preset-registry.json")).presets}catch(e){return h(`Private preset registry unavailable: ${e.message}`),[]}}async function it(e){return(await nt()).find(r=>r.name===e)??null}async function or(e,t){return Qe(`/content/presets/${e}/${t}`)}async function ar(e){return(await xe()).some(r=>r.name===e)}var Zt,Qt,cr=P(()=>{"use strict";qe();Ge();C();Zt="https://imperium-worker.alwayspurav.workers.dev",Qt=300*1e3});import{createHash as In}from"crypto";import st from"gray-matter";function G(){return{owner:Ln,repo:Tn,branch:Mn}}function _(e,t){return`https://raw.githubusercontent.com/${e.owner}/${e.repo}/${e.branch}/${t}`}function On(e){return`https://api.github.com/repos/${e.owner}/${e.repo}/git/trees/${e.branch}?recursive=1`}async function lr(e,t=3){let r;for(let n=1;n<=t;n++){let i=await fetch(e,{headers:{"User-Agent":"imperium-cli","Cache-Control":"no-cache"}});if(i.ok)return i;if(i.status===429||i.status>=500){let o=i.headers.get("retry-after"),s=o?parseInt(o,10)*1e3:Math.min(1e3*2**(n-1),8e3);if(n<t){g(`HTTP ${i.status} from GitHub (attempt ${n}/${t}). Retrying in ${s/1e3}s...`),await new Promise(a=>setTimeout(a,s));continue}}if(i.status===403){let o=i.headers.get("x-ratelimit-remaining")==="0"?"GitHub API rate limit exceeded. Try again later or set GITHUB_TOKEN.":`HTTP 403: ${e}`;throw new Error(o)}throw new Error(`HTTP ${i.status}: ${e}`)}throw r??new Error(`Failed to fetch ${e} after ${t} attempts`)}async function mr(e,t){let r=we(e,t);if(r!==null)return h("Cache hit"),r;let i=await(await lr(e)).text();return ve(e,i),i}async function ie(e,t){let r=await mr(e,t);return JSON.parse(r)}async function be(e){return(await lr(e)).text()}function An(e){return In("sha256").update(e).digest("hex").slice(0,16)}function jn(e){return _(e,"registry.json")}async function Dn(e){return ie(jn(e))}async function B(e,t){let r=G(),i=(await Dn(r)).packages.map(s=>({...s,source:"public"})),o=await xe(t);if(o.length>0){let s=new Set(i.map(a=>a.name));for(let a of o)s.has(a.name)||i.push({...a,source:"private"})}return t&&(i=i.filter(s=>s.kind===t)),i}async function Y(e,t){if(await ar(e))return tr(e);let r=G(),n=await ie(On(r),6e4);n.truncated&&g("GitHub tree API returned a truncated result \u2014 some packages may not be visible. Consider running `npx gitnexus analyze` to refresh the local index.");for(let i of ur){let o=`${i}/${e}/`,s=n.tree.filter(R=>R.type==="blob"&&R.path.startsWith(o));if(s.length===0)continue;let a=s.find(R=>R.path===`${o}SKILL.md`);if(!a)continue;let p=await be(_(r,a.path)),{data:f,content:d}=st(p),k=f,x=await Promise.all(s.map(async R=>{let $t=R.path===a.path?p:await be(_(r,R.path));return{path:R.path.replace(o,""),content:$t}})),b=x.map(R=>R.content).join("");return{manifest:{...k,name:k.name||e,kind:k.kind||dr[i]||"skill",version:k.version||"0.0.0",description:k.description||""},skillContent:d,files:x,checksum:An(b)}}throw new Error(`Package '${e}' not found in registry.`)}async function ot(e,t){let r=await B(t),n=e.toLowerCase(),i=r.filter(a=>a.name.toLowerCase().includes(n)||a.description.toLowerCase().includes(n)),o=await rr(e),s=new Set(i.map(a=>a.name));for(let a of o)s.has(a.name)||i.push({...a,source:"private"});return i}async function at(e,t){let r=await nr(e);if(r)return r;let n=G();for(let i of ur)try{let o=await mr(_(n,`${i}/${e}/SKILL.md`)),{data:s,content:a}=st(o);return{manifest:{...s,name:s.name||e,kind:s.kind||dr[i]||"skill",version:s.version||"0.0.0",description:s.description||""},content:a}}catch{continue}throw new Error(`Package '${e}' not found in registry.`)}function Fn(e){return _(e,"mcp-registry.json")}async function _n(e){return ie(Fn(e))}async function Ce(){let e=G(),r=(await _n(e)).mcps.map(o=>({...o,source:"public"})),n=await et(),i=new Set(r.map(o=>o.name));for(let o of n)i.has(o.name)||r.push({...o,source:"private"});return r}async function pr(e){let t=await Ce(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function ct(e){let t=await ir(e);if(t)return t;let n=(await Ce()).find(i=>i.name===e);if(!n)throw new Error(`MCP '${e}' not found in registry.`);return n}function Nn(e){return _(e,"preset-registry.json")}async function Un(e){return ie(Nn(e))}async function Se(){let e=G(),r=(await Un(e)).presets.map(o=>({...o,source:"public"})),n=await nt(),i=new Set(r.map(o=>o.name));for(let o of n)i.has(o.name)||r.push({...o,source:"private"});return r}async function fr(e){let t=await Se(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function Ee(e){let t=await it(e);if(t)return t;let n=(await Se()).find(i=>i.name===e);if(!n)throw new Error(`Setup preset '${e}' not found in registry.`);return n}async function gr(e,t){if(await it(e))return or(e,t);let n=G(),i=_(n,`content/presets/${e}/${t}`);return be(i)}function zn(e){return _(e,"instructions-registry.json")}async function Gn(e){return ie(zn(e))}async function se(){let e=G(),r=(await Gn(e)).instructions.map(o=>({...o,source:"public"})),n=await tt(),i=new Set(r.map(o=>o.name));for(let o of n)i.has(o.name)||r.push({...o,source:"private"});return r}async function lt(e){let t=await se(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function mt(e){let t=await rt(e);if(t)return t;let n=(await se()).find(i=>i.name===e);if(!n)throw new Error(`Instruction '${e}' not found in registry.`);return n}async function Re(e){if(await rt(e))return sr(e);let r=G(),n=_(r,`content/instructions/${e}.md`),i=await be(n),{data:o,content:s}=st(i);return{content:s.trim(),description:typeof o.description=="string"?o.description:""}}var Ln,Tn,Mn,ur,dr,M=P(()=>{"use strict";C();Ge();cr();Ln="RUSHYOP",Tn="imperium-cli",Mn="main";ur=["content/skills","content/references","content/presets"],dr={"content/skills":"skill","content/references":"reference","content/presets":"preset"}});import{writeFileSync as Hn,mkdirSync as Bn,existsSync as Kn,rmSync as Wn}from"fs";import{join as Ie,dirname as Jn}from"path";function oe(e,t,r){let n=Ie(t.skillsDir,e.manifest.name),i=[],o=E(t.rootDir);if(ye(o,e.manifest.name)&&!r.force&&!r.overwrite){let d=o.packages[e.manifest.name];if(d.checksum===e.checksum)return{name:e.manifest.name,installed:!1,skipped:!0,reason:`Already installed (v${d.version}). Use --force to reinstall.`,files:[]};if(r.preserve)return{name:e.manifest.name,installed:!1,skipped:!0,reason:"Updated version available but --preserve is set.",files:[]}}if(r.dryRun){let d=e.files.map(k=>Ie(n,k.path));return{name:e.manifest.name,installed:!1,skipped:!1,reason:"Dry run \u2014 no files written.",files:d}}let s=new Set;for(let d of e.files)s.add(Jn(Ie(n,d.path)));for(let d of s)Bn(d,{recursive:!0});for(let d of e.files){let k=Ie(n,d.path);Hn(k,d.content,"utf-8"),i.push(k),h(`Wrote ${k}`)}let a=new Date().toISOString(),p={name:e.manifest.name,kind:e.manifest.kind,version:e.manifest.version,source:"github:RUSHYOP/imperium-cli",checksum:e.checksum,installedPath:n,installedAt:a,lastSync:a},f=At(o,p);return f.preset=f.preset||t.preset,f.root=t.rootDir,L(t.rootDir,f),{name:e.manifest.name,installed:!0,skipped:!1,files:i}}function ut(e,t,r){let n=E(t.rootDir);if(!ye(n,e))return{removed:!1,reason:`Package '${e}' is not installed.`};let o=n.packages[e].installedPath;if(r.dryRun)return{removed:!1,reason:`Dry run \u2014 would remove ${o}`};Kn(o)&&(Wn(o,{recursive:!0}),h(`Removed ${o}`));let s=jt(n,e);return L(t.rootDir,s),{removed:!0}}var Le=P(()=>{"use strict";z();C()});var hr={};j(hr,{addCommand:()=>ae});import{confirm as Vn}from"@inquirer/prompts";function Yn(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}async function qn(e,t){if(t.noFuzzy)return e;try{return await Y(e),e}catch{try{let n=(await B(void 0,t.kind)).map(s=>s.name),i=pe(e,n);if(i.length===0)throw new Error(`Package '${e}' not found in registry.`);if(i.length===1&&i[0].distance<=2)return g(`'${e}' not found \u2014 using '${i[0].match}' instead.`),i[0].match;if(c(`'${e}' not found. Did you mean:`),i.forEach((s,a)=>c(` ${a+1}. ${s.match}`)),t.yes||await Vn({message:`Use '${i[0].match}'?`,default:!0}))return i[0].match;throw new Error(`No match selected for '${e}'.`)}catch(r){throw r}}}async function ae(e,t){return Xn(e,t)}async function Xn(e,t){let r;if(t.all)r=(await B(void 0,t.kind)).map(a=>a.name),y(`Installing all ${r.length} packages`);else if(t.fromFile){let{readFileSync:s}=await import("fs");r=s(t.fromFile,"utf-8").split(`
`).map(p=>p.trim()).filter(Boolean)}else r=Yn(e);if(r.length===0){u("No package names provided. Usage: imperium add <name...>"),process.exitCode=1;return}let n=[];for(let s of r)try{n.push(await qn(s,t))}catch(a){u(`${s}: ${a.message}`)}if(n.length===0){process.exitCode=1;return}let i=await $(t);c(`Fetching ${n.length} package(s)...`);let o=await Promise.allSettled(n.map(s=>Y(s)));for(let s=0;s<n.length;s++){let a=n[s],p=o[s];if(p.status==="rejected"){u(`${a}: ${p.reason?.message??p.reason}`);continue}let f=p.value;try{let d=oe(f,i,t);if(d.skipped){g(`${a}: ${d.reason}`);continue}if(t.dryRun){c(`${a}: would write ${d.files.length} files:`),d.files.forEach(k=>h(` ${k}`));continue}w(`${a} v${f.manifest.version} installed (${d.files.length} files)`)}catch(d){u(`${a}: ${d.message}`)}}}var Te=P(()=>{"use strict";M();Le();F();Q();M();C()});var q={};j(q,{addMcpsCommand:()=>dt,inspectMcpCommand:()=>si,listMcpsCommand:()=>ni,removeMcpsCommand:()=>ai,searchMcpsCommand:()=>ii});import{readFileSync as Zn,writeFileSync as Qn,existsSync as yr,mkdirSync as ei}from"fs";import{dirname as ti,join as kr}from"path";import{input as ri}from"@inquirer/prompts";import wr from"chalk";async function ni(e){y("Available MCPs");try{let t=await Ce();for(let r of t){let i=r.placeholders&&Object.keys(r.placeholders).length>0?" [requires config]":"",o=r.source==="private"?wr.magenta(" [private]"):"";c(` ${r.name}${i}${o}`),c(` ${r.description}`)}c(`
${t.length} MCP(s) available.`)}catch(t){u(`Failed to list MCPs: ${t.message}`),process.exitCode=1}}async function ii(e,t){y(`Searching MCPs for "${e}"`);try{let r=await pr(e);if(r.length===0){c("No matching MCPs found.");return}for(let n of r){let i=n.source==="private"?wr.magenta(" [private]"):"";c(` ${n.name}${i}`),c(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){u(`Failed to search MCPs: ${r.message}`),process.exitCode=1}}async function si(e,t){try{let r=await ct(e);if(y(`MCP: ${r.name}`),c(` Description: ${r.description}`),c(` Command: ${r.command}`),c(` Args: ${r.args.join(" ")}`),r.env&&Object.keys(r.env).length>0){c(" Env vars:");for(let[n,i]of Object.entries(r.env))c(` ${n}: ${i}`)}if(r.placeholders&&Object.keys(r.placeholders).length>0){c(" Required config:");for(let[n,i]of Object.entries(r.placeholders))c(` ${n} \u2014 ${i}`)}}catch(r){u(r.message),process.exitCode=1}}function vr(e){return yr(e)?JSON.parse(Zn(e,"utf-8")):{mcpServers:{}}}function Pr(e,t){ei(ti(e),{recursive:!0}),Qn(e,JSON.stringify(t,null,2)+`
`,"utf-8")}async function oi(e,t){if(!e.placeholders||Object.keys(e.placeholders).length===0)return{args:[...e.args],env:e.env?{...e.env}:{}};let r={};for(let[o,s]of Object.entries(e.placeholders))t.yes?(g(`Placeholder {{${o}}} left as-is (non-interactive mode)`),r[o]=`{{${o}}}`):r[o]=await ri({message:`${o}: ${s}`});let n=e.args.map(o=>{let s=o;for(let[a,p]of Object.entries(r))s=s.replace(`{{${a}}}`,p);return s}),i={};if(e.env)for(let[o,s]of Object.entries(e.env)){let a=s;for(let[p,f]of Object.entries(r))a=a.replace(`{{${p}}}`,f);i[o]=a}return{args:n,env:i}}async function dt(e,t){let r=e.flatMap(s=>s.split(",")).map(s=>s.trim()).filter(Boolean);if(r.length===0){u("No MCP names provided. Usage: imperium add mcps <name...>"),process.exitCode=1;return}let n=await $(t),i=kr(n.rootDir,".mcp.json"),o=vr(i);o.mcpServers||(o.mcpServers={});for(let s of r)try{let a=await ct(s);if(o.mcpServers[s]&&!t.force){g(`${s} already configured \u2014 use --force to overwrite`);continue}c(`Adding MCP: ${s}...`);let{args:p,env:f}=await oi(a,t),d={command:a.command,args:p};if(Object.keys(f).length>0&&(d.env=f),t.dryRun){c(`Would add to ${i}:`),c(` "${s}": ${JSON.stringify(d,null,2)}`);continue}o.mcpServers[s]=d,w(`${s} added`)}catch(a){u(`${s}: ${a.message}`)}t.dryRun||(Pr(i,o),w(`MCP config written to ${i}`))}async function ai(e,t){let r=e.flatMap(s=>s.split(",")).map(s=>s.trim()).filter(Boolean);if(r.length===0){u("No MCP names provided. Usage: imperium remove mcps <name...>"),process.exitCode=1;return}let n=await $(t),i=kr(n.rootDir,".mcp.json");if(!yr(i)){u(`No .mcp.json found at ${i}`),process.exitCode=1;return}let o=vr(i);o.mcpServers||(o.mcpServers={});for(let s of r){if(!o.mcpServers[s]){g(`${s} not found in .mcp.json`);continue}if(t.dryRun){c(`Would remove: ${s}`);continue}delete o.mcpServers[s],w(`${s} removed`)}t.dryRun||(Pr(i,o),w(`MCP config updated at ${i}`))}var K=P(()=>{"use strict";M();F();C()});var Me={};j(Me,{applyPreset:()=>pt,inspectPresetCommand:()=>gi,listPresetsCommand:()=>pi,searchPresetsCommand:()=>fi});import{writeFileSync as ci,mkdirSync as li,existsSync as mi}from"fs";import{join as ui,dirname as di}from"path";import $r from"chalk";async function pi(e){y("Available setup presets");try{let t=await Se();if(t.length===0){c("No setup presets available yet.");return}for(let r of t){let n=r.source==="private"?$r.magenta(" [private]"):"";c(` ${r.name} (${r.adapter})${n}`),c(` ${r.description}`),c(` ${r.skills.length} skills, ${r.mcps.length} MCPs, ${r.files.length} files`)}c(`
${t.length} preset(s) available.`)}catch(t){u(`Failed to list presets: ${t.message}`),process.exitCode=1}}async function fi(e,t){y(`Searching presets for "${e}"`);try{let r=await fr(e);if(r.length===0){c("No matching presets found.");return}for(let n of r){let i=n.source==="private"?$r.magenta(" [private]"):"";c(` ${n.name} (${n.adapter})${i}`),c(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){u(`Failed to search presets: ${r.message}`),process.exitCode=1}}async function gi(e,t){try{let r=await Ee(e);if(y(`Setup Preset: ${r.name}`),c(` Description: ${r.description}`),c(` Adapter: ${r.adapter}`),r.skills.length>0){c(" Skills:");for(let n of r.skills)c(` - ${n}`)}if(r.mcps.length>0){c(" MCPs:");for(let n of r.mcps)c(` - ${n}`)}if(r.files.length>0){c(" Files:");for(let n of r.files)c(` - ${n}`)}}catch(r){u(r.message),process.exitCode=1}}async function pt(e,t,r){if(e.skills.length>0&&(y(`Installing ${e.skills.length} skill(s) from preset`),await ae(e.skills,{...r,root:t,noFuzzy:!0})),e.mcps.length>0&&(y(`Configuring ${e.mcps.length} MCP(s) from preset`),await dt(e.mcps,{...r,root:t})),e.files.length>0){y(`Copying ${e.files.length} file(s) from preset`);for(let n of e.files)try{let i=await gr(e.name,n),o=ui(t,n);if(mi(o)&&!r.force){g(`${n} already exists \u2014 use --force to overwrite`);continue}if(r.dryRun){c(`Would write: ${o}`);continue}li(di(o),{recursive:!0}),ci(o,i,"utf-8"),h(` ${n}`)}catch(i){u(` ${n}: ${i.message}`)}r.dryRun||w(`${e.files.length} file(s) copied`)}}var ce=P(()=>{"use strict";M();C();Te();K()});var X={};j(X,{addInstructionsCommand:()=>ft,inspectInstructionCommand:()=>xi,listInstructionsCommand:()=>Pi,removeInstructionsCommand:()=>bi,searchInstructionsCommand:()=>$i});import{writeFileSync as hi,mkdirSync as yi,existsSync as xr,rmSync as ki}from"fs";import{createHash as wi}from"crypto";import{dirname as vi}from"path";import{confirm as br}from"@inquirer/prompts";import Cr from"chalk";async function Pi(e){y("Available Instructions");let t=await se();if(t.length===0){c("No instructions available in the registry.");return}for(let r of t){let n=r.source==="private"?Cr.magenta(" [private]"):"";c(` ${r.name}${n} ${r.description?"\u2014 "+r.description:""}`)}c(`
${t.length} instruction(s) available.`)}async function $i(e,t){y(`Searching instructions for "${e}"`);let r=await lt(e);if(r.length===0){c("No matching instructions found.");return}for(let n of r){let i=n.source==="private"?Cr.magenta(" [private]"):"";c(` ${n.name}${i} ${n.description?"\u2014 "+n.description:""}`)}}async function xi(e,t){let r=await mt(e),{content:n,description:i}=await Re(e);y(r.name),i&&c(`Description: ${i}`),c(""),c(n)}async function ft(e,t){if(e.length===0){u("No instruction names provided. Usage: imperium add instructions <name...>"),process.exitCode=1;return}let r=await $(t);for(let n of e)try{c(`Fetching instruction "${n}"...`);let{content:i,description:o}=await Re(n),s=ge(r.preset,r.rootDir,n),a=wi("sha256").update(i).digest("hex").slice(0,16),p=E(r.rootDir);if(_t(p,n)&&!t.force&&!t.overwrite&&p.instructions[n].checksum===a){g(`${n}: already installed (unchanged). Use --force to reinstall.`);continue}if(xr(s)&&!t.force&&!t.overwrite){if(t.yes)g(`Overwriting ${s}`);else if(!await br({message:`${s} already exists. Overwrite?`,default:!1})){c(`Skipped ${n}.`);continue}}if(t.dryRun){c(`Would write: ${s}`);continue}yi(vi(s),{recursive:!0}),hi(s,i+`
`,"utf-8");let f=Dt(E(r.rootDir),{name:n,description:o,source:"github:RUSHYOP/imperium-cli",checksum:a,installedPath:s,installedAt:new Date().toISOString()});L(r.rootDir,f),w(`Installed instruction "${n}" \u2192 ${s}`)}catch(i){u(`${n}: ${i.message}`)}}async function bi(e,t){if(e.length===0){u("No instruction names provided. Usage: imperium remove instructions <name...>"),process.exitCode=1;return}let r=await $(t);for(let n of e){let i=ge(r.preset,r.rootDir,n);if(!xr(i)){g(`Instruction file not found at ${i}, skipping.`);continue}if(!t.yes&&!t.force&&!await br({message:`Remove instruction file ${i}?`,default:!1})){c(`Skipped ${n}.`);continue}if(t.dryRun){c(`Would remove: ${i}`);continue}ki(i,{force:!0});let o=Ft(E(r.rootDir),n);L(r.rootDir,o),w(`Removed instruction "${n}" from ${i}`)}}var W=P(()=>{"use strict";M();J();F();z();C()});var Ir={};j(Ir,{setupCommand:()=>Ci});import{mkdirSync as Sr}from"fs";function Er(e){let t=e.replace(/^\./,"").toLowerCase();return Rr.includes(t)?t:"custom"}async function Ci(e,t){let r,n=null;if(t.preset){try{n=await Ee(t.preset)}catch(d){u(d.message),process.exitCode=1;return}r=e?Er(e):n.adapter}else if(e)r=Er(e);else{u("Provide an adapter name or --preset. Usage: imperium setup <adapter> [--preset <name>]"),process.exitCode=1;return}let i=r==="custom"||!Rr.includes(r),o={...t,target:i?"custom":r,root:i?t.root||e:void 0},s=await $(o),a=ee(s.preset);if(y(`Setting up ${s.preset}${n?` with preset "${n.name}"`:""}`),t.dryRun){c(`Would create: ${s.rootDir}`),n&&(c(`Would apply preset: ${n.name}`),c(` Skills: ${n.skills.join(", ")||"none"}`),c(` MCPs: ${n.mcps.join(", ")||"none"}`),c(` Files: ${n.files.length}`));return}Sr(s.rootDir,{recursive:!0}),Sr(s.skillsDir,{recursive:!0});let p=a.scaffold(s.rootDir);h("Created directories:"),p.forEach(d=>h(` ${d}`));let f=E(s.rootDir);f.preset=s.preset,f.root=s.rootDir,L(s.rootDir,f),w(`${s.preset} project scaffolded at ${s.rootDir}`),de([`Skills directory: ${s.skillsDir}`,`Lockfile: ${s.rootDir}/imperium.lock.json`]),n&&await pt(n,s.rootDir,t),t.with&&t.with.length>0&&await ae(t.with,{...t,root:s.rootDir}),t.instructions&&t.instructions.length>0&&await ft(t.instructions,{...t,root:s.rootDir})}var Rr,Lr=P(()=>{"use strict";J();F();z();C();Te();M();ce();W();Rr=["claude","github","windsurf","cursor","custom"]});var le={};j(le,{detectCommand:()=>Ii,inspectCommand:()=>Ri,listCommand:()=>Si,searchCommand:()=>Ei});import N from"chalk";async function Si(e,t){y("Available skills");try{let r=await B(void 0,e.kind);if(r.length===0){c("No packages found in registry.");return}let n=new Set;try{let s=await $({...e,yes:!0}),a=E(s.rootDir);n=new Set(Object.keys(a.packages))}catch{}let i=t===!0,o=Array.isArray(t)?new Set(t.map(s=>s.toLowerCase())):null;for(let s of r){let a=n.has(s.name)?N.green(" [installed]"):"",p=s.source==="private"?N.magenta(" [private]"):"",f=N.dim(`[${s.kind}]`);c(` ${N.bold(s.name)} ${f} v${s.version}${a}${p}`),(i||o?.has(s.name.toLowerCase()))&&Fe(` ${s.description}`)}c(`
${r.length} package(s) available.`)}catch(r){u(`Failed to list packages: ${r.message}`),process.exitCode=1}}async function Ei(e,t){y(`Searching for "${e}"`);try{let r=await ot(e);if(r.length===0){c("No matching packages found.");return}for(let n of r){let i=N.dim(`[${n.kind}]`),o=n.source==="private"?N.magenta(" [private]"):"";c(` ${N.bold(n.name)} ${i} v${n.version}${o}`),Fe(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){u(`Search failed: ${r.message}`),process.exitCode=1}}async function Ri(e,t){y(`Inspecting ${e}`);try{let{manifest:r,content:n}=await at(e);c(` Name: ${N.bold(r.name)}`),c(` Kind: ${r.kind}`),c(` Version: ${r.version}`),c(` Description: ${r.description}`),r.aliases?.length&&c(` Aliases: ${r.aliases.join(", ")}`),r.tags?.length&&c(` Tags: ${r.tags.join(", ")}`),r.targets?.length&&c(` Targets: ${r.targets.join(", ")}`),r.dependencies?.length&&c(` Deps: ${r.dependencies.join(", ")}`),r.author&&c(` Author: ${r.author}`),r.license&&c(` License: ${r.license}`);try{let i=await $({...t,yes:!0});c(`
</html>`}async function rr(){let e=Tn(),t=On(e),r=Yt(16).toString("hex"),n=new URLSearchParams({client_id:qe,response_type:"code",redirect_uri:Zt,scope:Xe,state:r,code_challenge:t,code_challenge_method:"S256",prompt:"select_account"}),i=`${Mn}?${n}`;return new Promise((s,o)=>{let a=new Set,m=Rn(async(h,v)=>{try{let P=new URL(h.url??"/",`http://localhost:${Je}`);if(P.pathname!=="/callback"){v.writeHead(404),v.end("Not found");return}let R=P.searchParams.get("error");if(R){let Lt=P.searchParams.get("error_description")??R;v.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),v.end(xe("Login failed",Lt)),p(),o(new Error(`Login failed: ${Lt}`));return}if(P.searchParams.get("state")!==r){v.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),v.end(xe("Invalid state","Possible CSRF attack. Please try again.")),p(),o(new Error("OAuth state mismatch \u2014 possible CSRF attack."));return}let Mt=P.searchParams.get("code");if(!Mt){v.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),v.end(xe("No code received")),p(),o(new Error("No authorization code received."));return}let Ue=await An(Mt,e);er(Ue),v.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),v.end(jn(Ue.email??"unknown")),p(),w(`Logged in as ${Ue.email??"unknown"}`),s()}catch(P){v.writeHead(500,{"Content-Type":"text/html; charset=utf-8"}),v.end(xe("Error",P.message)),p(),o(P)}});m.on("connection",h=>{a.add(h),h.on("close",()=>a.delete(h))});let p=()=>{m.close();for(let h of a)h.destroy()};m.listen(Je,"127.0.0.1",async()=>{c("Opening browser for Microsoft sign-in...");try{let{exec:h}=await import("child_process"),v=process.platform==="darwin"?`open "${i}"`:process.platform==="win32"?`start "" "${i}"`:`xdg-open "${i}"`;h(v)}catch{c(`Open this URL in your browser:
${i}`)}}),setTimeout(()=>{p(),o(new Error("Login timed out after 5 minutes. Please try again."))},300*1e3).unref()})}function nr(){Ve(),w("Logged out successfully.")}function ir(){let e=Ze();if(!e){c("Not logged in. Run `imperium login` to authenticate.");return}let t=Date.now()>e.expiresAt;if(t&&!e.refreshToken){c("Session expired. Run `imperium login` to re-authenticate.");return}if(c(`Logged in as ${e.email??"unknown"}`),e.email){let r=e.email.split("@")[1];c(`Domain: ${r}`)}t&&c("(token expired \u2014 will auto-refresh on next request)")}function V(){let e=Ze();return e?Date.now()<e.expiresAt||!!e.refreshToken:!1}async function Qe(){let e=Ze();if(!e)throw new Error("Not authenticated. Run `imperium login` first.");if(Date.now()<e.expiresAt)return e.idToken??e.accessToken;if(!e.refreshToken)throw Ve(),new Error("Session expired with no refresh token. Run `imperium login` to re-authenticate.");try{let t=await Fn(e.refreshToken);return!t.email&&e.email&&(t.email=e.email),er(t),t.idToken??t.accessToken}catch{throw Ve(),new Error("Session expired. Run `imperium login` to re-authenticate.")}}var qe,qt,Mn,Xt,Xe,Je,Zt,Qt,ne,et=x(()=>{"use strict";C();qe="952eb2a4-55db-4a95-baae-e744293a6b90",qt="https://login.microsoftonline.com/organizations",Mn=`${qt}/oauth2/v2.0/authorize`,Xt=`${qt}/oauth2/v2.0/token`,Xe="openid email profile User.Read",Je=9876,Zt=`http://localhost:${Je}/callback`,Qt=Vt(En(),".imperium"),ne=Vt(Qt,"auth.json")});import tt from"gray-matter";import{createHash as Dn}from"crypto";function _n(e){return Dn("sha256").update(e).digest("hex").slice(0,16)}async function ar(e){let t=await Qe(),r=`${sr}${e}`,n=await fetch(r,{headers:{Authorization:`Bearer ${t}`,"User-Agent":"imperium-cli"}});if(n.status===401)throw new Error("Authentication expired. Run `imperium login` to re-authenticate.");if(n.status===403)throw new Error("Access denied. Your email domain is not authorized for private content.");if(!n.ok)throw new Error(`Private registry error (HTTP ${n.status}): ${e}`);return n}async function rt(e,t=or){let r=`imperium-private://${e}`,n=Pe(r,t);if(n!==null)return y("Private cache hit"),n;let s=await(await ar(e)).text();return $e(r,s),s}async function be(e,t=or){let r=await rt(e,t);return JSON.parse(r)}async function Ce(e){return(await ar(e)).text()}async function cr(e){let t=new Map;try{let n=await Qe(),i=await fetch(`${sr}/batch/download`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-Agent":"imperium-cli"},body:JSON.stringify({paths:e})});if(i.ok){let s=await i.json();for(let o of s.files)o.content!==null&&t.set(o.path,o.content);return t}y(`Batch download returned HTTP ${i.status}, falling back to parallel fetches`)}catch(n){y(`Batch download failed: ${n.message}, falling back to parallel fetches`)}let r=await Promise.all(e.map(async n=>{try{let i=await Ce(n);return{path:n,content:i}}catch{return{path:n,content:null}}}));for(let n of r)n.content!==null&&t.set(n.path,n.content);return t}async function Se(e){if(!V())return[];try{let r=(await be("/registry.json")).packages.map(n=>({...n,source:"private"}));return e&&(r=r.filter(n=>n.kind===e)),r}catch(t){return y(`Private registry unavailable: ${t.message}`),[]}}async function lr(e){let t=await rt(`/content/skills/${e}`),r=JSON.parse(t);if(r.length===0)throw new Error(`Private package '${e}' has no files.`);let n=r.find(P=>P.endsWith("SKILL.md"));if(!n)throw new Error(`Private package '${e}' is missing SKILL.md.`);let i=r.map(P=>`/content/skills/${e}/${P}`),s=await cr(i),o=`/content/skills/${e}/${n}`,a=s.get(o);if(!a)throw new Error(`Failed to fetch SKILL.md for private package '${e}'.`);let{data:m,content:p}=tt(a),f=m,h=r.map(P=>{let R=`/content/skills/${e}/${P}`;return{path:P,content:s.get(R)??""}}),v=h.map(P=>P.content).join("");return{manifest:{...f,name:f.name||e,kind:f.kind||"skill",version:f.version||"0.0.0",description:f.description||""},skillContent:p,files:h,checksum:_n(v)}}async function mr(e){let t=await Se(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function ur(e){if(!V())return null;try{let t=await rt(`/content/skills/${e}/SKILL.md`),{data:r,content:n}=tt(t);return{manifest:{...r,name:r.name||e,kind:r.kind||"skill",version:r.version||"0.0.0",description:r.description||""},content:n}}catch{return null}}async function nt(){if(!V())return[];try{return(await be("/mcp-registry.json")).mcps}catch(e){return y(`Private MCP registry unavailable: ${e.message}`),[]}}async function dr(e){return(await nt()).find(r=>r.name===e)??null}async function it(){if(!V())return[];try{return(await be("/instructions-registry.json")).instructions}catch(e){return y(`Private instructions registry unavailable: ${e.message}`),[]}}async function st(e){return(await it()).find(r=>r.name===e)??null}async function pr(e){let t=await Ce(`/content/instructions/${e}.md`),{data:r,content:n}=tt(t);return{content:n.trim(),description:typeof r.description=="string"?r.description:""}}async function ot(){if(!V())return[];try{return(await be("/preset-registry.json")).presets}catch(e){return y(`Private preset registry unavailable: ${e.message}`),[]}}async function at(e){return(await ot()).find(r=>r.name===e)??null}async function fr(e,t){return Ce(`/content/presets/${e}/${t}`)}async function gr(e,t){let r=await Ce(`/content/mcp-bundles/${e}/${t}`),n=JSON.parse(r);if(n.length===0)throw new Error(`MCP bundle '${e}/${t}' has no files.`);let i=n.map(a=>`/content/mcp-bundles/${e}/${t}/${a}`),s=150,o=new Map;for(let a=0;a<i.length;a+=s){let m=i.slice(a,a+s),p=await cr(m);for(let[f,h]of p)o.set(f,h)}return n.map(a=>{let m=`/content/mcp-bundles/${e}/${t}/${a}`;return{path:a,content:o.get(m)??""}})}async function hr(e){return(await Se()).some(r=>r.name===e)}var sr,or,ct=x(()=>{"use strict";et();We();C();sr="https://imperium-worker.alwayspurav.workers.dev",or=300*1e3});import{createHash as Nn}from"crypto";import lt from"gray-matter";function z(){return{owner:Un,repo:Gn,branch:zn}}function _(e,t){return`https://raw.githubusercontent.com/${e.owner}/${e.repo}/${e.branch}/${t}`}function Hn(e){return`https://api.github.com/repos/${e.owner}/${e.repo}/git/trees/${e.branch}?recursive=1`}async function yr(e,t=3){let r;for(let n=1;n<=t;n++){let i=await fetch(e,{headers:{"User-Agent":"imperium-cli","Cache-Control":"no-cache"}});if(i.ok)return i;if(i.status===429||i.status>=500){let s=i.headers.get("retry-after"),o=s?parseInt(s,10)*1e3:Math.min(1e3*2**(n-1),8e3);if(n<t){g(`HTTP ${i.status} from GitHub (attempt ${n}/${t}). Retrying in ${o/1e3}s...`),await new Promise(a=>setTimeout(a,o));continue}}if(i.status===403){let s=i.headers.get("x-ratelimit-remaining")==="0"?"GitHub API rate limit exceeded. Try again later or set GITHUB_TOKEN.":`HTTP 403: ${e}`;throw new Error(s)}throw new Error(`HTTP ${i.status}: ${e}`)}throw r??new Error(`Failed to fetch ${e} after ${t} attempts`)}async function kr(e,t){let r=Pe(e,t);if(r!==null)return y("Cache hit"),r;let i=await(await yr(e)).text();return $e(e,i),i}async function ie(e,t){let r=await kr(e,t);return JSON.parse(r)}async function Ee(e){return(await yr(e)).text()}function Bn(e){return Nn("sha256").update(e).digest("hex").slice(0,16)}function Kn(e){return _(e,"registry.json")}async function Wn(e){return ie(Kn(e))}async function B(e,t){let r=z(),i=(await Wn(r)).packages.map(o=>({...o,source:"public"})),s=await Se(t);if(s.length>0){let o=new Set(i.map(a=>a.name));for(let a of s)o.has(a.name)||i.push({...a,source:"private"})}return t&&(i=i.filter(o=>o.kind===t)),i}async function Y(e,t){if(await hr(e))return lr(e);let r=z(),n=await ie(Hn(r),6e4);n.truncated&&g("GitHub tree API returned a truncated result \u2014 some packages may not be visible. Consider running `npx gitnexus analyze` to refresh the local index.");for(let i of wr){let s=`${i}/${e}/`,o=n.tree.filter(R=>R.type==="blob"&&R.path.startsWith(s));if(o.length===0)continue;let a=o.find(R=>R.path===`${s}SKILL.md`);if(!a)continue;let m=await Ee(_(r,a.path)),{data:p,content:f}=lt(m),h=p,v=await Promise.all(o.map(async R=>{let It=R.path===a.path?m:await Ee(_(r,R.path));return{path:R.path.replace(s,""),content:It}})),P=v.map(R=>R.content).join("");return{manifest:{...h,name:h.name||e,kind:h.kind||vr[i]||"skill",version:h.version||"0.0.0",description:h.description||""},skillContent:f,files:v,checksum:Bn(P)}}throw new Error(`Package '${e}' not found in registry.`)}async function mt(e,t){let r=await B(t),n=e.toLowerCase(),i=r.filter(a=>a.name.toLowerCase().includes(n)||a.description.toLowerCase().includes(n)),s=await mr(e),o=new Set(i.map(a=>a.name));for(let a of s)o.has(a.name)||i.push({...a,source:"private"});return i}async function ut(e,t){let r=await ur(e);if(r)return r;let n=z();for(let i of wr)try{let s=await kr(_(n,`${i}/${e}/SKILL.md`)),{data:o,content:a}=lt(s);return{manifest:{...o,name:o.name||e,kind:o.kind||vr[i]||"skill",version:o.version||"0.0.0",description:o.description||""},content:a}}catch{continue}throw new Error(`Package '${e}' not found in registry.`)}function Jn(e){return _(e,"mcp-registry.json")}async function Vn(e){return ie(Jn(e))}async function Re(){let e=z(),r=(await Vn(e)).mcps.map(s=>({...s,source:"public"})),n=await nt(),i=new Set(r.map(s=>s.name));for(let s of n)i.has(s.name)||r.push({...s,source:"private"});return r}async function Pr(e){let t=await Re(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function dt(e){let t=await dr(e);if(t)return t;let n=(await Re()).find(i=>i.name===e);if(!n)throw new Error(`MCP '${e}' not found in registry.`);return n}function Yn(e){return _(e,"preset-registry.json")}async function qn(e){return ie(Yn(e))}async function Ie(){let e=z(),r=(await qn(e)).presets.map(s=>({...s,source:"public"})),n=await ot(),i=new Set(r.map(s=>s.name));for(let s of n)i.has(s.name)||r.push({...s,source:"private"});return r}async function $r(e){let t=await Ie(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function Me(e){let t=await at(e);if(t)return t;let n=(await Ie()).find(i=>i.name===e);if(!n)throw new Error(`Setup preset '${e}' not found in registry.`);return n}async function xr(e,t){if(await at(e))return fr(e,t);let n=z(),i=_(n,`content/presets/${e}/${t}`);return Ee(i)}function Xn(e){return _(e,"instructions-registry.json")}async function Zn(e){return ie(Xn(e))}async function se(){let e=z(),r=(await Zn(e)).instructions.map(s=>({...s,source:"public"})),n=await it(),i=new Set(r.map(s=>s.name));for(let s of n)i.has(s.name)||r.push({...s,source:"private"});return r}async function pt(e){let t=await se(),r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r)||n.description.toLowerCase().includes(r))}async function ft(e){let t=await st(e);if(t)return t;let n=(await se()).find(i=>i.name===e);if(!n)throw new Error(`Instruction '${e}' not found in registry.`);return n}async function Le(e){if(await st(e))return pr(e);let r=z(),n=_(r,`content/instructions/${e}.md`),i=await Ee(n),{data:s,content:o}=lt(i);return{content:o.trim(),description:typeof s.description=="string"?s.description:""}}var Un,Gn,zn,wr,vr,T=x(()=>{"use strict";C();We();ct();Un="RUSHYOP",Gn="imperium-cli",zn="main";wr=["content/skills","content/references","content/presets"],vr={"content/skills":"skill","content/references":"reference","content/presets":"preset"}});import{writeFileSync as Qn,mkdirSync as ei,existsSync as ti,rmSync as ri}from"fs";import{join as Te,dirname as ni}from"path";function oe(e,t,r){let n=Te(t.skillsDir,e.manifest.name),i=[],s=E(t.rootDir);if(we(s,e.manifest.name)&&!r.force&&!r.overwrite){let f=s.packages[e.manifest.name];if(f.checksum===e.checksum)return{name:e.manifest.name,installed:!1,skipped:!0,reason:`Already installed (v${f.version}). Use --force to reinstall.`,files:[]};if(r.preserve)return{name:e.manifest.name,installed:!1,skipped:!0,reason:"Updated version available but --preserve is set.",files:[]}}if(r.dryRun){let f=e.files.map(h=>Te(n,h.path));return{name:e.manifest.name,installed:!1,skipped:!1,reason:"Dry run \u2014 no files written.",files:f}}let o=new Set;for(let f of e.files)o.add(ni(Te(n,f.path)));for(let f of o)ei(f,{recursive:!0});for(let f of e.files){let h=Te(n,f.path);Qn(h,f.content,"utf-8"),i.push(h),y(`Wrote ${h}`)}let a=new Date().toISOString(),m={name:e.manifest.name,kind:e.manifest.kind,version:e.manifest.version,source:"github:RUSHYOP/imperium-cli",checksum:e.checksum,installedPath:n,installedAt:a,lastSync:a},p=Gt(s,m);return p.preset=p.preset||t.preset,p.root=t.rootDir,M(t.rootDir,p),{name:e.manifest.name,installed:!0,skipped:!1,files:i}}function gt(e,t,r){let n=E(t.rootDir);if(!we(n,e))return{removed:!1,reason:`Package '${e}' is not installed.`};let s=n.packages[e].installedPath;if(r.dryRun)return{removed:!1,reason:`Dry run \u2014 would remove ${s}`};ti(s)&&(ri(s,{recursive:!0}),y(`Removed ${s}`));let o=zt(n,e);return M(t.rootDir,o),{removed:!0}}var Oe=x(()=>{"use strict";G();C()});var br={};F(br,{addCommand:()=>ae});import{confirm as ii}from"@inquirer/prompts";function si(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}async function oi(e,t){if(t.noFuzzy)return e;try{return await Y(e),e}catch{try{let n=(await B(void 0,t.kind)).map(o=>o.name),i=ge(e,n);if(i.length===0)throw new Error(`Package '${e}' not found in registry.`);if(i.length===1&&i[0].distance<=2)return g(`'${e}' not found \u2014 using '${i[0].match}' instead.`),i[0].match;if(c(`'${e}' not found. Did you mean:`),i.forEach((o,a)=>c(` ${a+1}. ${o.match}`)),t.yes||await ii({message:`Use '${i[0].match}'?`,default:!0}))return i[0].match;throw new Error(`No match selected for '${e}'.`)}catch(r){throw r}}}async function ae(e,t){return ai(e,t)}async function ai(e,t){let r;if(t.all)r=(await B(void 0,t.kind)).map(a=>a.name),k(`Installing all ${r.length} packages`);else if(t.fromFile){let{readFileSync:o}=await import("fs");r=o(t.fromFile,"utf-8").split(`
`).map(m=>m.trim()).filter(Boolean)}else r=si(e);if(r.length===0){d("No package names provided. Usage: imperium add <name...>"),process.exitCode=1;return}let n=[];for(let o of r)try{n.push(await oi(o,t))}catch(a){d(`${o}: ${a.message}`)}if(n.length===0){process.exitCode=1;return}let i=await b(t);c(`Fetching ${n.length} package(s)...`);let s=await Promise.allSettled(n.map(o=>Y(o)));for(let o=0;o<n.length;o++){let a=n[o],m=s[o];if(m.status==="rejected"){d(`${a}: ${m.reason?.message??m.reason}`);continue}let p=m.value;try{let f=oe(p,i,t);if(f.skipped){g(`${a}: ${f.reason}`);continue}if(t.dryRun){c(`${a}: would write ${f.files.length} files:`),f.files.forEach(h=>y(` ${h}`));continue}w(`${a} v${p.manifest.version} installed (${f.files.length} files)`)}catch(f){d(`${a}: ${f.message}`)}}}var Ae=x(()=>{"use strict";T();Oe();D();Q();T();C()});var q={};F(q,{addMcpsCommand:()=>wt,inspectMcpCommand:()=>pi,listMcpsCommand:()=>ui,removeMcpsCommand:()=>hi,searchMcpsCommand:()=>di});import{readFileSync as ci,writeFileSync as ht,existsSync as Fe,mkdirSync as Cr}from"fs";import{dirname as le,join as ce}from"path";import{execSync as li}from"child_process";import{input as mi}from"@inquirer/prompts";import Sr from"chalk";async function ui(e){k("Available MCPs");try{let t=await Re();for(let r of t){let i=r.placeholders&&Object.keys(r.placeholders).length>0?" [requires config]":"",s=r.source==="private"?Sr.magenta(" [private]"):"";c(` ${r.name}${i}${s}`),c(` ${r.description}`)}c(`
${t.length} MCP(s) available.`)}catch(t){d(`Failed to list MCPs: ${t.message}`),process.exitCode=1}}async function di(e,t){k(`Searching MCPs for "${e}"`);try{let r=await Pr(e);if(r.length===0){c("No matching MCPs found.");return}for(let n of r){let i=n.source==="private"?Sr.magenta(" [private]"):"";c(` ${n.name}${i}`),c(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){d(`Failed to search MCPs: ${r.message}`),process.exitCode=1}}async function pi(e,t){try{let r=await dt(e);if(k(`MCP: ${r.name}`),c(` Description: ${r.description}`),c(` Command: ${r.command}`),c(` Args: ${r.args.join(" ")}`),r.env&&Object.keys(r.env).length>0){c(" Env vars:");for(let[n,i]of Object.entries(r.env))c(` ${n}: ${i}`)}if(r.placeholders&&Object.keys(r.placeholders).length>0){c(" Required config:");for(let[n,i]of Object.entries(r.placeholders))c(` ${n} \u2014 ${i}`)}}catch(r){d(r.message),process.exitCode=1}}function yt(e){return e==="github"}function Er(e,t){return yt(t)?ce(le(e),".vscode","mcp.json"):ce(le(e),".mcp.json")}function kt(e){return yt(e)?"servers":"mcpServers"}function Rr(e,t){let r=kt(t);return Fe(e)?JSON.parse(ci(e,"utf-8")):{[r]:{}}}function Ir(e,t){Cr(le(e),{recursive:!0}),ht(e,JSON.stringify(t,null,2)+`
`,"utf-8")}function Mr(e,t){let r=kt(t);return e[r]??{}}function Lr(e,t,r){let n=kt(t);e[n]=r}async function fi(e,t){if(!e.placeholders||Object.keys(e.placeholders).length===0)return{args:[...e.args],env:e.env?{...e.env}:{}};let r={};for(let[s,o]of Object.entries(e.placeholders))t.yes?(g(`Placeholder {{${s}}} left as-is (non-interactive mode)`),r[s]=`{{${s}}}`):r[s]=await mi({message:`${s}: ${o}`});let n=e.args.map(s=>{let o=s;for(let[a,m]of Object.entries(r))o=o.replace(`{{${a}}}`,m);return o}),i={};if(e.env)for(let[s,o]of Object.entries(e.env)){let a=o;for(let[m,p]of Object.entries(r))a=a.replace(`{{${m}}}`,p);i[s]=a}return{args:n,env:i}}async function gi(e,t,r){if(t.bundles){for(let n of t.bundles){let i=ce(r,n.dest);if(Fe(i)){c(` Bundle ${n.name} already exists at ${n.dest}/, skipping`);continue}c(` Downloading bundle: ${n.name}...`);let s=await gr(e,n.name);for(let o of s){let a=ce(i,o.path);Cr(le(a),{recursive:!0}),ht(a,o.content,"utf-8")}if(w(` ${n.name}: ${s.length} files \u2192 ${n.dest}/`),n.postInstall){c(` Running: ${n.postInstall}...`);try{li(n.postInstall,{cwd:i,stdio:"inherit",timeout:12e4}),w(" Post-install complete")}catch(o){g(` Post-install failed: ${o.message}`)}}}if(t.configFile){let n=ce(r,t.configFile.path);Fe(n)||(ht(n,JSON.stringify(t.configFile.content,null,2)+`
`,"utf-8"),w(` Config written: ${t.configFile.path}`))}}}async function wt(e,t){let r=e.flatMap(m=>m.split(",")).map(m=>m.trim()).filter(Boolean);if(r.length===0){d("No MCP names provided. Usage: imperium add mcps <name...>"),process.exitCode=1;return}let n=await b(t),i=Er(n.rootDir,n.preset),s=le(n.rootDir),o=Rr(i,n.preset),a=Mr(o,n.preset);for(let m of r)try{let p=await dt(m);if(a[m]&&!t.force){g(`${m} already configured \u2014 use --force to overwrite`);continue}c(`Adding MCP: ${m}...`),p.bundles&&p.bundles.length>0&&!t.dryRun&&await gi(m,p,s);let{args:f,env:h}=await fi(p,t),v={command:p.command,args:f};if(Object.keys(h).length>0&&(v.env=h),t.dryRun){if(c(`Would add to ${i}:`),c(` "${m}": ${JSON.stringify(v,null,2)}`),p.bundles)for(let P of p.bundles)c(` Would install bundle: ${P.name} \u2192 ${P.dest}/`);continue}a[m]=v,w(`${m} added`)}catch(p){d(`${m}: ${p.message}`)}t.dryRun||(Lr(o,n.preset,a),Ir(i,o),w(`MCP config written to ${i}`))}async function hi(e,t){let r=e.flatMap(m=>m.split(",")).map(m=>m.trim()).filter(Boolean);if(r.length===0){d("No MCP names provided. Usage: imperium remove mcps <name...>"),process.exitCode=1;return}let n=await b(t),i=Er(n.rootDir,n.preset),s=yt(n.preset)?".vscode/mcp.json":".mcp.json";if(!Fe(i)){d(`No ${s} found at ${i}`),process.exitCode=1;return}let o=Rr(i,n.preset),a=Mr(o,n.preset);for(let m of r){if(!a[m]){g(`${m} not found in ${s}`);continue}if(t.dryRun){c(`Would remove: ${m}`);continue}delete a[m],w(`${m} removed`)}t.dryRun||(Lr(o,n.preset,a),Ir(i,o),w(`MCP config updated at ${i}`))}var K=x(()=>{"use strict";T();ct();D();C()});var je={};F(je,{applyPreset:()=>vt,inspectPresetCommand:()=>bi,listPresetsCommand:()=>$i,searchPresetsCommand:()=>xi});import{writeFileSync as yi,mkdirSync as ki,existsSync as wi}from"fs";import{join as vi,dirname as Pi}from"path";import Tr from"chalk";async function $i(e){k("Available setup presets");try{let t=await Ie();if(t.length===0){c("No setup presets available yet.");return}for(let r of t){let n=r.source==="private"?Tr.magenta(" [private]"):"";c(` ${r.name} (${r.adapter})${n}`),c(` ${r.description}`),c(` ${r.skills.length} skills, ${r.mcps.length} MCPs, ${r.files.length} files`)}c(`
${t.length} preset(s) available.`)}catch(t){d(`Failed to list presets: ${t.message}`),process.exitCode=1}}async function xi(e,t){k(`Searching presets for "${e}"`);try{let r=await $r(e);if(r.length===0){c("No matching presets found.");return}for(let n of r){let i=n.source==="private"?Tr.magenta(" [private]"):"";c(` ${n.name} (${n.adapter})${i}`),c(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){d(`Failed to search presets: ${r.message}`),process.exitCode=1}}async function bi(e,t){try{let r=await Me(e);if(k(`Setup Preset: ${r.name}`),c(` Description: ${r.description}`),c(` Adapter: ${r.adapter}`),r.skills.length>0){c(" Skills:");for(let n of r.skills)c(` - ${n}`)}if(r.mcps.length>0){c(" MCPs:");for(let n of r.mcps)c(` - ${n}`)}if(r.files.length>0){c(" Files:");for(let n of r.files)c(` - ${n}`)}}catch(r){d(r.message),process.exitCode=1}}async function vt(e,t,r){if(e.skills.length>0&&(k(`Installing ${e.skills.length} skill(s) from preset`),await ae(e.skills,{...r,root:t,noFuzzy:!0})),e.mcps.length>0&&(k(`Configuring ${e.mcps.length} MCP(s) from preset`),await wt(e.mcps,{...r,root:t})),e.files.length>0){k(`Copying ${e.files.length} file(s) from preset`);for(let n of e.files)try{let i=await xr(e.name,n),s=vi(t,n);if(wi(s)&&!r.force){g(`${n} already exists \u2014 use --force to overwrite`);continue}if(r.dryRun){c(`Would write: ${s}`);continue}ki(Pi(s),{recursive:!0}),yi(s,i,"utf-8"),y(` ${n}`)}catch(i){d(` ${n}: ${i.message}`)}r.dryRun||w(`${e.files.length} file(s) copied`)}}var me=x(()=>{"use strict";T();C();Ae();K()});var X={};F(X,{addInstructionsCommand:()=>Pt,inspectInstructionCommand:()=>Ti,listInstructionsCommand:()=>Mi,removeInstructionsCommand:()=>Oi,searchInstructionsCommand:()=>Li});import{writeFileSync as Ci,mkdirSync as Si,existsSync as Or,rmSync as Ei}from"fs";import{createHash as Ri}from"crypto";import{dirname as Ii}from"path";import{confirm as Ar}from"@inquirer/prompts";import Fr from"chalk";async function Mi(e){k("Available Instructions");let t=await se();if(t.length===0){c("No instructions available in the registry.");return}for(let r of t){let n=r.source==="private"?Fr.magenta(" [private]"):"";c(` ${r.name}${n} ${r.description?"\u2014 "+r.description:""}`)}c(`
${t.length} instruction(s) available.`)}async function Li(e,t){k(`Searching instructions for "${e}"`);let r=await pt(e);if(r.length===0){c("No matching instructions found.");return}for(let n of r){let i=n.source==="private"?Fr.magenta(" [private]"):"";c(` ${n.name}${i} ${n.description?"\u2014 "+n.description:""}`)}}async function Ti(e,t){let r=await ft(e),{content:n,description:i}=await Le(e);k(r.name),i&&c(`Description: ${i}`),c(""),c(n)}async function Pt(e,t){if(e.length===0){d("No instruction names provided. Usage: imperium add instructions <name...>"),process.exitCode=1;return}let r=await b(t);for(let n of e)try{c(`Fetching instruction "${n}"...`);let{content:i,description:s}=await Le(n),o=ye(r.preset,r.rootDir,n),a=Ri("sha256").update(i).digest("hex").slice(0,16),m=E(r.rootDir);if(Kt(m,n)&&!t.force&&!t.overwrite&&m.instructions[n].checksum===a){g(`${n}: already installed (unchanged). Use --force to reinstall.`);continue}if(Or(o)&&!t.force&&!t.overwrite){if(t.yes)g(`Overwriting ${o}`);else if(!await Ar({message:`${o} already exists. Overwrite?`,default:!1})){c(`Skipped ${n}.`);continue}}if(t.dryRun){c(`Would write: ${o}`);continue}Si(Ii(o),{recursive:!0}),Ci(o,i+`
`,"utf-8");let p=Ht(E(r.rootDir),{name:n,description:s,source:"github:RUSHYOP/imperium-cli",checksum:a,installedPath:o,installedAt:new Date().toISOString()});M(r.rootDir,p),w(`Installed instruction "${n}" \u2192 ${o}`)}catch(i){d(`${n}: ${i.message}`)}}async function Oi(e,t){if(e.length===0){d("No instruction names provided. Usage: imperium remove instructions <name...>"),process.exitCode=1;return}let r=await b(t);for(let n of e){let i=ye(r.preset,r.rootDir,n);if(!Or(i)){g(`Instruction file not found at ${i}, skipping.`);continue}if(!t.yes&&!t.force&&!await Ar({message:`Remove instruction file ${i}?`,default:!1})){c(`Skipped ${n}.`);continue}if(t.dryRun){c(`Would remove: ${i}`);continue}Ei(i,{force:!0});let s=Bt(E(r.rootDir),n);M(r.rootDir,s),w(`Removed instruction "${n}" from ${i}`)}}var W=x(()=>{"use strict";T();J();D();G();C()});var Nr={};F(Nr,{setupCommand:()=>Ai});import{mkdirSync as jr}from"fs";function Dr(e){let t=e.replace(/^\./,"").toLowerCase();return _r.includes(t)?t:"custom"}async function Ai(e,t){let r,n=null;if(t.preset){try{n=await Me(t.preset)}catch(f){d(f.message),process.exitCode=1;return}r=e?Dr(e):n.adapter}else if(e)r=Dr(e);else{d("Provide an adapter name or --preset. Usage: imperium setup <adapter> [--preset <name>]"),process.exitCode=1;return}let i=r==="custom"||!_r.includes(r),s={...t,target:i?"custom":r,root:i?t.root||e:void 0},o=await b(s),a=ee(o.preset);if(k(`Setting up ${o.preset}${n?` with preset "${n.name}"`:""}`),t.dryRun){c(`Would create: ${o.rootDir}`),n&&(c(`Would apply preset: ${n.name}`),c(` Skills: ${n.skills.join(", ")||"none"}`),c(` MCPs: ${n.mcps.join(", ")||"none"}`),c(` Files: ${n.files.length}`));return}jr(o.rootDir,{recursive:!0}),jr(o.skillsDir,{recursive:!0});let m=a.scaffold(o.rootDir);y("Created directories:"),m.forEach(f=>y(` ${f}`));let p=E(o.rootDir);p.preset=o.preset,p.root=o.rootDir,M(o.rootDir,p),w(`${o.preset} project scaffolded at ${o.rootDir}`),fe([`Skills directory: ${o.skillsDir}`,`Lockfile: ${o.rootDir}/imperium.lock.json`]),n&&await vt(n,o.rootDir,t),t.with&&t.with.length>0&&await ae(t.with,{...t,root:o.rootDir}),t.instructions&&t.instructions.length>0&&await Pt(t.instructions,{...t,root:o.rootDir})}var _r,Ur=x(()=>{"use strict";J();D();G();C();Ae();T();me();W();_r=["claude","github","windsurf","cursor","custom"]});var ue={};F(ue,{detectCommand:()=>_i,inspectCommand:()=>Di,listCommand:()=>Fi,searchCommand:()=>ji});import N from"chalk";async function Fi(e,t){k("Available skills");try{let r=await B(void 0,e.kind);if(r.length===0){c("No packages found in registry.");return}let n=new Set;try{let o=await b({...e,yes:!0}),a=E(o.rootDir);n=new Set(Object.keys(a.packages))}catch{}let i=t===!0,s=Array.isArray(t)?new Set(t.map(o=>o.toLowerCase())):null;for(let o of r){let a=n.has(o.name)?N.green(" [installed]"):"",m=o.source==="private"?N.magenta(" [private]"):"",p=N.dim(`[${o.kind}]`);c(` ${N.bold(o.name)} ${p} v${o.version}${a}${m}`),(i||s?.has(o.name.toLowerCase()))&&Ge(` ${o.description}`)}c(`
${r.length} package(s) available.`)}catch(r){d(`Failed to list packages: ${r.message}`),process.exitCode=1}}async function ji(e,t){k(`Searching for "${e}"`);try{let r=await mt(e);if(r.length===0){c("No matching packages found.");return}for(let n of r){let i=N.dim(`[${n.kind}]`),s=n.source==="private"?N.magenta(" [private]"):"";c(` ${N.bold(n.name)} ${i} v${n.version}${s}`),Ge(` ${n.description}`)}c(`
${r.length} result(s).`)}catch(r){d(`Search failed: ${r.message}`),process.exitCode=1}}async function Di(e,t){k(`Inspecting ${e}`);try{let{manifest:r,content:n}=await ut(e);c(` Name: ${N.bold(r.name)}`),c(` Kind: ${r.kind}`),c(` Version: ${r.version}`),c(` Description: ${r.description}`),r.aliases?.length&&c(` Aliases: ${r.aliases.join(", ")}`),r.tags?.length&&c(` Tags: ${r.tags.join(", ")}`),r.targets?.length&&c(` Targets: ${r.targets.join(", ")}`),r.dependencies?.length&&c(` Deps: ${r.dependencies.join(", ")}`),r.author&&c(` Author: ${r.author}`),r.license&&c(` License: ${r.license}`);try{let i=await b({...t,yes:!0});c(`
Install to: ${i.skillsDir}/${r.name}/`)}catch{}n.trim()&&(c(`
`+N.dim("\u2500".repeat(60))),c(n.trim()))}catch(r){u(`Inspect failed: ${r.message}`),process.exitCode=1}}async function Ii(e){y("Detecting agent folders");let t=he();if(t.length===0){c("No agent folders found in current directory.");return}c(`Found ${t.length} agent folder(s):`),de(t)}var me=P(()=>{"use strict";M();z();F();C()});var gt={};j(gt,{removeCommand:()=>Mi,updateCommand:()=>Ti});import{confirm as Li}from"@inquirer/prompts";function Tr(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}async function Ti(e,t){let r=await $(t),n=E(r.rootDir),i=Object.keys(n.packages),o=e.length>0?Tr(e):i;if(o.length===0){c("No packages installed to update.");return}y(`Updating ${o.length} package(s)`);for(let s of o){if(!n.packages[s]){g(`${s}: not installed, skipping.`);continue}try{c(`Checking ${s}...`);let a=await Y(s);if(a.checksum===n.packages[s].checksum){h(`${s}: already up to date.`);continue}oe(a,r,{...t,force:!0}).installed&&(w(`${s} updated to v${a.manifest.version}`),ee(r.preset).generateNativeFiles(a,r))}catch(a){u(`${s}: ${a.message}`)}}}async function Mi(e,t){let r=Tr(e);if(r.length===0){u("No package names provided. Usage: imperium remove <name...>"),process.exitCode=1;return}let n=await $(t);for(let i of r){if(!t.yes&&!t.force&&!await Li({message:`Remove '${i}' from ${n.rootDir}?`,default:!1})){c(`Skipped ${i}.`);continue}let o=ut(i,n,t);o.removed?w(`Removed ${i}`):g(`${i}: ${o.reason}`)}}var ht=P(()=>{"use strict";M();Le();z();J();F();C()});var kt={};j(kt,{initCommand:()=>ji,validateCommand:()=>Di});import{existsSync as yt,readFileSync as Oi}from"fs";import{join as Mr}from"path";import Ai from"gray-matter";async function ji(e){y("Initializing imperium");let t=await $(e);if(yt(Mr(t.rootDir,"imperium.lock.json"))&&!e.force){g(`Lockfile already exists at ${t.rootDir}/imperium.lock.json`),c("Use --force to reinitialize.");return}let r=E(t.rootDir);if(r.preset=t.preset,r.root=t.rootDir,e.dryRun){c(`Would create lockfile at ${t.rootDir}/imperium.lock.json`);return}L(t.rootDir,r),w(`Initialized imperium at ${t.rootDir}`)}async function Di(e){y("Validating installation");let t=await $(e),r=E(t.rootDir),n=Object.values(r.packages);if(n.length===0){c("No packages in lockfile. Nothing to validate.");return}let i=0;for(let o of n){if(!yt(o.installedPath)){u(`${o.name}: installed path missing (${o.installedPath})`),i++;continue}let s=Mr(o.installedPath,"SKILL.md");if(!yt(s)){g(`${o.name}: SKILL.md not found at ${s}`),i++;continue}try{let a=Oi(s,"utf-8"),{data:p}=Ai(a);p.name||(g(`${o.name}: SKILL.md missing 'name' field`),i++),p.kind||(g(`${o.name}: SKILL.md missing 'kind' field`),i++),p.version||(g(`${o.name}: SKILL.md missing 'version' field`),i++)}catch(a){g(`${o.name}: failed to parse SKILL.md \u2014 ${a.message}`),i++}}i===0?w(`All ${n.length} package(s) valid.`):g(`${i} issue(s) found across ${n.length} package(s).`)}var wt=P(()=>{"use strict";F();z();C()});var Oe={};j(Oe,{loginCommand:()=>Fi,logoutCommand:()=>_i,whoamiCommand:()=>Ni});async function Fi(){try{await Yt()}catch(e){u(`Login failed: ${e.message}`),process.exitCode=1}}function _i(){qt()}function Ni(){Xt()}var Ae=P(()=>{"use strict";qe();C()});C();Q();C();import{Command as Ui}from"commander";import{readFileSync as zi}from"fs";import{fileURLToPath as Gi}from"url";import{dirname as Hi,resolve as Bi}from"path";var Ki=Hi(Gi(import.meta.url)),Wi=JSON.parse(zi(Bi(Ki,"..","package.json"),"utf-8")),l={h:I.bold.cyan,cmd:I.bold.white,arg:I.yellow,flag:I.green,dim:I.dim,ex:I.gray,brand:I.bold.magenta,type:I.blue};function m(e,t){let n=e.split(/\s+/).map(i=>i==="$"?l.dim("$"):i==="imperium"?l.brand("imperium"):i.startsWith("-")?l.flag(i):i.startsWith("<")||i.startsWith("[")?l.arg(i):i).join(" ");return t?` ${n} ${l.dim(t)}`:` ${n}`}var S=new Ui;S.configureHelp({subcommandTerm(e){return l.cmd(e.name())+(e.usage()?" "+l.dim(e.usage()):"")},optionTerm(e){return l.flag(e.flags)},argumentTerm(e){return l.arg(e.name())}});S.name("imperium").description("A package manager for agent context \u2014 skills, MCPs, instructions, and presets.").version(Wi.version).addHelpText("after",()=>["",l.h("Getting Started"),` ${l.cmd("imperium setup claude")} Scaffold a new Claude project`,` ${l.cmd("imperium setup claude --preset fullstack")} Scaffold + apply a curated preset`,` ${l.cmd("imperium list skills")} Browse available skills`,` ${l.cmd("imperium add skills python-patterns")} Install a skill`,"",l.h("Resource Types"),` ${l.type("skills")} Skill packs, reference packs, and presets`,` ${l.type("mcps")} MCP server configurations`,` ${l.type("instructions")} Custom instruction files (CLAUDE.md, copilot-instructions.md, rules/)`,` ${l.type("presets")} Curated bundles (skills + MCPs + files)`,"",l.h("Explore"),` ${l.cmd("imperium list")} ${l.type("<type>")} List all items of a type`,` ${l.cmd("imperium search")} ${l.type("<type>")} ${l.arg("<query>")} Search by keyword`,` ${l.cmd("imperium inspect")} ${l.type("<type>")} ${l.arg("<name>")} View full details`,"",l.h("Install & Manage"),` ${l.cmd("imperium add")} ${l.type("<type>")} ${l.arg("<names...>")} Add skills or MCPs`,` ${l.cmd("imperium remove")} ${l.type("<type>")} ${l.arg("<names...>")} Remove skills or MCPs`,` ${l.cmd("imperium update")} ${l.arg("[skills...]")} Update installed skills`,"",l.h("Project"),` ${l.cmd("imperium setup")} ${l.arg("[adapter]")} Scaffold an adapter folder`,` ${l.cmd("imperium init")} Init lockfile`,` ${l.cmd("imperium detect")} Detect agent folders`,` ${l.cmd("imperium validate")} Validate installed skills`,"",l.h("Authentication"),` ${l.cmd("imperium login")} Sign in for private content`,` ${l.cmd("imperium logout")} Sign out`,` ${l.cmd("imperium whoami")} Show auth status`,"",l.dim(" Run ")+l.cmd("imperium <command> --help")+l.dim(" for full options and examples."),""].join(`
`));function Z(e){return e.option("--root <path>","Custom folder root").option("--target <preset>","Target preset: claude, github, windsurf, cursor, custom")}function je(e){return e.option("--force","Overwrite without asking").option("--dry-run","Preview changes only").option("-y, --yes","Skip confirmations").option("--no-fuzzy","Disable typo correction").option("--copy","Copy files instead of symlink").option("--symlink","Symlink where possible").option("--merge","Merge with existing files").option("--overwrite","Replace existing files").option("--preserve","Preserve user edits")}function vt(e){return e.option("--local <path>","Local registry path").option("--tag <version>","Version pin").option("--channel <channel>","Channel: stable, beta, dev")}function Pt(e){return e.option("--kind <kind>","Filter by kind: skill, reference, preset").option("--format <fmt>","Output format: md, yaml, json")}function O(e){return e.option("--verbose","Show file-by-file actions").option("--silent","Minimal output")}function Ji(e){return e.option("--include <pattern>","Include files/folders matching pattern").option("--exclude <pattern>","Exclude files/folders matching pattern")}function A(e){let t=e.opts(),r={root:t.root,target:t.target,force:t.force,dryRun:t.dryRun,yes:t.yes,noFuzzy:t.noFuzzy??!t.fuzzy,verbose:t.verbose,silent:t.silent,local:t.local,tag:t.tag,channel:t.channel,copy:t.copy,symlink:t.symlink,merge:t.merge,overwrite:t.overwrite,preserve:t.preserve,include:t.include,exclude:t.exclude,kind:t.kind,format:t.format};return Ct(r),r}var Vi={skills:"skills",skill:"skills",mcps:"mcps",mcp:"mcps",presets:"presets",preset:"presets",instructions:"instructions",instruction:"instructions"};function ue(e){let t=Vi[e.toLowerCase()];if(t)return t;u(`Unknown resource type '${e}'. Must be: skills, mcps, instructions, or presets`),process.exit(1)}{let e=S.command("setup [adapter]").description("Setup an adapter folder, optionally applying a curated setup preset").option("--preset <name>","Apply a setup preset (curated bundle of skills, MCPs, and files)").option("--with <skills...>","Also install these skills after scaffolding").option("--instructions <names...>","Also install these instruction files after scaffolding").action(async(t,r,n)=>{let i=A(n),{setupCommand:o}=await Promise.resolve().then(()=>(Lr(),Ir));await o(t,{...i,with:r.with,preset:r.preset,instructions:r.instructions})});Z(e),je(e),vt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium setup claude","Create .claude/ folder structure"),m("$ imperium setup claude --preset fullstack","Setup + apply a curated preset"),m("$ imperium setup --preset fullstack","Adapter inferred from preset"),m("$ imperium setup claude --with python-patterns","Setup + install a skill"),m("$ imperium setup claude --instructions my-rules","Setup + add instruction file"),m("$ imperium setup claude --preset fullstack --with extra-skill","Preset + extra skills"),m("$ imperium setup github","Create .github/copilot/ structure"),m("$ imperium setup claude --dry-run","Preview what would be created"),""].join(`
`))}{let e=S.command("add <type> [names...]").description("Add skills or MCPs to the project").option("--from-file <path>","Read names from a file (skills only)").option("--all","Add all from the registry (skills only)").option("--path <dir>","Target directory to install into").action(async(t,r,n,i)=>{let o=ue(t),s=A(i);if(n.path&&(s.root=n.path),o==="presets"){u("Presets can't be added individually. Use 'imperium setup --preset <name>' instead."),process.exitCode=1;return}if(o==="skills"){let{addCommand:a}=await Promise.resolve().then(()=>(Te(),hr));await a(r,{...s,fromFile:n.fromFile,all:n.all})}else if(o==="mcps"){let{addMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,s)}else{let{addInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,s)}});Z(e),je(e),vt(e),Ji(e),O(e),e.addHelpText("after",()=>["",l.h("Examples \u2014 Skills"),m("$ imperium add skills python-patterns","Add a single skill"),m("$ imperium add skills python-patterns django-tdd","Add multiple"),m("$ imperium add skills --all","Add all from registry"),m("$ imperium add skills --from-file skills.txt","From a file"),m("$ imperium add skills python-patterns --path .cursor","Custom folder"),"",l.h("Examples \u2014 MCPs"),m("$ imperium add mcps obsidian","Add an MCP server"),m("$ imperium add mcps obsidian atlassian miro-mcp","Add multiple"),m("$ imperium add mcps pdf-reader --force","Overwrite existing"),"",l.h("Examples \u2014 Instructions"),m("$ imperium add instructions my-rules","Add an instruction file"),m("$ imperium add instructions my-rules --force","Overwrite existing"),""].join(`
`))}{let e=S.command("list <type>").description("List available skills, MCPs, instructions, or setup presets").option("-d, --description [items...]","Show descriptions (optionally for specific items only)").action(async(t,r,n)=>{let i=ue(t),o=A(n);if(i==="skills"){let{listCommand:s}=await Promise.resolve().then(()=>(me(),le));await s(o,r.description)}else if(i==="mcps"){let{listMcpsCommand:s}=await Promise.resolve().then(()=>(K(),q));await s(o)}else if(i==="instructions"){let{listInstructionsCommand:s}=await Promise.resolve().then(()=>(W(),X));await s(o)}else{let{listPresetsCommand:s}=await Promise.resolve().then(()=>(ce(),Me));await s(o)}});Pt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium list skills","List all skills"),m("$ imperium list skills -d","With descriptions"),m("$ imperium list skills --kind reference","Only reference packs"),m("$ imperium list mcps","List MCP servers"),m("$ imperium list instructions","List instruction files"),m("$ imperium list presets","List setup presets"),""].join(`
`))}{let e=S.command("search <type> <query>").description("Search for skills, MCPs, instructions, or presets matching a keyword").action(async(t,r,n,i)=>{let o=ue(t),s=A(i);if(o==="skills"){let{searchCommand:a}=await Promise.resolve().then(()=>(me(),le));await a(r,s)}else if(o==="mcps"){let{searchMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,s)}else if(o==="instructions"){let{searchInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,s)}else{let{searchPresetsCommand:a}=await Promise.resolve().then(()=>(ce(),Me));await a(r,s)}});Pt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium search skills python","Search skills by keyword"),m('$ imperium search skills "api design"',"Search with a phrase"),m("$ imperium search mcps figma","Search MCPs by keyword"),m("$ imperium search instructions rules","Search instruction files"),m("$ imperium search presets design","Search setup presets"),""].join(`
`))}{let e=S.command("inspect <type> <name>").description("Show full metadata for a skill, MCP, instruction, or setup preset").action(async(t,r,n,i)=>{let o=ue(t),s=A(i);if(o==="skills"){let{inspectCommand:a}=await Promise.resolve().then(()=>(me(),le));await a(r,s)}else if(o==="mcps"){let{inspectMcpCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,s)}else if(o==="instructions"){let{inspectInstructionCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,s)}else{let{inspectPresetCommand:a}=await Promise.resolve().then(()=>(ce(),Me));await a(r,s)}});Pt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium inspect skills python-patterns","Skill metadata + content"),m("$ imperium inspect mcps obsidian","MCP server details"),m("$ imperium inspect instructions my-rules","Instruction file content"),m("$ imperium inspect presets rxd","Preset contents"),""].join(`
`))}{let e=S.command("update [skills...]").description("Update installed skills (all if none specified)").action(async(t,r,n)=>{let i=A(n),{updateCommand:o}=await Promise.resolve().then(()=>(ht(),gt));await o(t||[],i)});Z(e),je(e),vt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium update","Update all installed skills"),m("$ imperium update python-patterns","Update specific skill"),m("$ imperium update --dry-run","Preview changes"),""].join(`
`))}{let e=S.command("remove <type> <names...>").description("Remove installed skills, MCPs, or instructions").action(async(t,r,n,i)=>{let o=ue(t);if(o==="presets"){u("Presets can't be removed. Remove individual skills or MCPs instead."),process.exitCode=1;return}let s=A(i);if(o==="skills"){let{removeCommand:a}=await Promise.resolve().then(()=>(ht(),gt));await a(r,s)}else if(o==="mcps"){let{removeMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,s)}else{let{removeInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,s)}});Z(e),je(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium remove skills python-patterns","Remove a skill"),m("$ imperium remove skills python-patterns django-tdd","Remove multiple"),m("$ imperium remove mcps obsidian","Remove MCP from config"),m("$ imperium remove mcps obsidian atlassian","Remove multiple MCPs"),m("$ imperium remove instructions my-rules","Remove an instruction file"),""].join(`
`))}{let e=S.command("init").description("Initialize an imperium lockfile in the current target").action(async(t,r)=>{let n=A(r),{initCommand:i}=await Promise.resolve().then(()=>(wt(),kt));await i(n)});Z(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium init","Init lockfile in auto-detected folder"),m("$ imperium init --target claude","Init lockfile in .claude/"),""].join(`
`))}{let e=S.command("detect").description("Detect agent folders in the current directory").action(async(t,r)=>{let n=A(r),{detectCommand:i}=await Promise.resolve().then(()=>(me(),le));await i(n)});O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium detect","Scan for .claude, .github, .cursor, etc."),""].join(`
`))}{let e=S.command("validate").description("Validate installed skills against the lockfile").action(async(t,r)=>{let n=A(r),{validateCommand:i}=await Promise.resolve().then(()=>(wt(),kt));await i(n)});Z(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),m("$ imperium validate","Check installed skills match lockfile"),""].join(`
`))}S.command("login").description("Sign in with Microsoft to access private skills and content").action(async()=>{let{loginCommand:e}=await Promise.resolve().then(()=>(Ae(),Oe));await e()}).addHelpText("after",()=>["",l.h("Examples"),m("$ imperium login","Open browser for Microsoft sign-in"),""].join(`
`));S.command("logout").description("Clear stored authentication credentials").action(async()=>{let{logoutCommand:e}=await Promise.resolve().then(()=>(Ae(),Oe));e()}).addHelpText("after",()=>["",l.h("Examples"),m("$ imperium logout","Sign out and clear tokens"),""].join(`
`));S.command("whoami").description("Show current authentication status").action(async()=>{let{whoamiCommand:e}=await Promise.resolve().then(()=>(Ae(),Oe));e()}).addHelpText("after",()=>["",l.h("Examples"),m("$ imperium whoami","Show logged-in email and domain"),""].join(`
`));S.on("command:*",e=>{let t=e[0],r=Ne(t);r?(g(`Unknown command '${t}'. Did you mean '${r}'?`),u(`Run: imperium ${r}`)):u(`Unknown command '${t}'. Run 'imperium --help' for available commands.`),process.exitCode=1});async function Yi(e){await S.parseAsync(e||process.argv)}M();Le();J();J();z();F();Q();export{_e as bestMatch,he as detectAgentFolders,Re as fetchInstructionContent,Y as fetchPackage,Ne as fuzzyCommand,pe as fuzzyMatch,Ue as fuzzyPreset,ee as getAdapter,mt as getInstruction,ge as getInstructionPath,at as inspectPackage,oe as installPackage,ye as isInstalled,se as listInstructions,B as listPackages,S as program,E as readLockfile,ut as removePackage,$ as resolveTarget,Yi as run,lt as searchInstructions,ot as searchPackages,L as writeLockfile};
`+N.dim("\u2500".repeat(60))),c(n.trim()))}catch(r){d(`Inspect failed: ${r.message}`),process.exitCode=1}}async function _i(e){k("Detecting agent folders");let t=ke();if(t.length===0){c("No agent folders found in current directory.");return}c(`Found ${t.length} agent folder(s):`),fe(t)}var de=x(()=>{"use strict";T();G();D();C()});var $t={};F($t,{removeCommand:()=>Gi,updateCommand:()=>Ui});import{confirm as Ni}from"@inquirer/prompts";function Gr(e){return e.flatMap(t=>t.split(",")).map(t=>t.trim()).filter(Boolean)}async function Ui(e,t){let r=await b(t),n=E(r.rootDir),i=Object.keys(n.packages),s=e.length>0?Gr(e):i;if(s.length===0){c("No packages installed to update.");return}k(`Updating ${s.length} package(s)`);for(let o of s){if(!n.packages[o]){g(`${o}: not installed, skipping.`);continue}try{c(`Checking ${o}...`);let a=await Y(o);if(a.checksum===n.packages[o].checksum){y(`${o}: already up to date.`);continue}oe(a,r,{...t,force:!0}).installed&&(w(`${o} updated to v${a.manifest.version}`),ee(r.preset).generateNativeFiles(a,r))}catch(a){d(`${o}: ${a.message}`)}}}async function Gi(e,t){let r=Gr(e);if(r.length===0){d("No package names provided. Usage: imperium remove <name...>"),process.exitCode=1;return}let n=await b(t);for(let i of r){if(!t.yes&&!t.force&&!await Ni({message:`Remove '${i}' from ${n.rootDir}?`,default:!1})){c(`Skipped ${i}.`);continue}let s=gt(i,n,t);s.removed?w(`Removed ${i}`):g(`${i}: ${s.reason}`)}}var xt=x(()=>{"use strict";T();Oe();G();J();D();C()});var Ct={};F(Ct,{initCommand:()=>Bi,validateCommand:()=>Ki});import{existsSync as bt,readFileSync as zi}from"fs";import{join as zr}from"path";import Hi from"gray-matter";async function Bi(e){k("Initializing imperium");let t=await b(e);if(bt(zr(t.rootDir,"imperium.lock.json"))&&!e.force){g(`Lockfile already exists at ${t.rootDir}/imperium.lock.json`),c("Use --force to reinitialize.");return}let r=E(t.rootDir);if(r.preset=t.preset,r.root=t.rootDir,e.dryRun){c(`Would create lockfile at ${t.rootDir}/imperium.lock.json`);return}M(t.rootDir,r),w(`Initialized imperium at ${t.rootDir}`)}async function Ki(e){k("Validating installation");let t=await b(e),r=E(t.rootDir),n=Object.values(r.packages);if(n.length===0){c("No packages in lockfile. Nothing to validate.");return}let i=0;for(let s of n){if(!bt(s.installedPath)){d(`${s.name}: installed path missing (${s.installedPath})`),i++;continue}let o=zr(s.installedPath,"SKILL.md");if(!bt(o)){g(`${s.name}: SKILL.md not found at ${o}`),i++;continue}try{let a=zi(o,"utf-8"),{data:m}=Hi(a);m.name||(g(`${s.name}: SKILL.md missing 'name' field`),i++),m.kind||(g(`${s.name}: SKILL.md missing 'kind' field`),i++),m.version||(g(`${s.name}: SKILL.md missing 'version' field`),i++)}catch(a){g(`${s.name}: failed to parse SKILL.md \u2014 ${a.message}`),i++}}i===0?w(`All ${n.length} package(s) valid.`):g(`${i} issue(s) found across ${n.length} package(s).`)}var St=x(()=>{"use strict";D();G();C()});var De={};F(De,{loginCommand:()=>Wi,logoutCommand:()=>Ji,whoamiCommand:()=>Vi});async function Wi(){try{await rr()}catch(e){d(`Login failed: ${e.message}`),process.exitCode=1}}function Ji(){nr()}function Vi(){ir()}var _e=x(()=>{"use strict";et();C()});C();Q();C();import{Command as Yi}from"commander";import{readFileSync as qi}from"fs";import{fileURLToPath as Xi}from"url";import{dirname as Zi,resolve as Qi}from"path";var es=Zi(Xi(import.meta.url)),ts=JSON.parse(qi(Qi(es,"..","package.json"),"utf-8")),l={h:I.bold.cyan,cmd:I.bold.white,arg:I.yellow,flag:I.green,dim:I.dim,ex:I.gray,brand:I.bold.magenta,type:I.blue};function u(e,t){let n=e.split(/\s+/).map(i=>i==="$"?l.dim("$"):i==="imperium"?l.brand("imperium"):i.startsWith("-")?l.flag(i):i.startsWith("<")||i.startsWith("[")?l.arg(i):i).join(" ");return t?` ${n} ${l.dim(t)}`:` ${n}`}var S=new Yi;S.configureHelp({subcommandTerm(e){return l.cmd(e.name())+(e.usage()?" "+l.dim(e.usage()):"")},optionTerm(e){return l.flag(e.flags)},argumentTerm(e){return l.arg(e.name())}});S.name("imperium").description("A package manager for agent context \u2014 skills, MCPs, instructions, and presets.").version(ts.version).addHelpText("after",()=>["",l.h("Getting Started"),` ${l.cmd("imperium setup claude")} Scaffold a new Claude project`,` ${l.cmd("imperium setup claude --preset fullstack")} Scaffold + apply a curated preset`,` ${l.cmd("imperium list skills")} Browse available skills`,` ${l.cmd("imperium add skills python-patterns")} Install a skill`,"",l.h("Resource Types"),` ${l.type("skills")} Skill packs, reference packs, and presets`,` ${l.type("mcps")} MCP server configurations`,` ${l.type("instructions")} Custom instruction files (CLAUDE.md, copilot-instructions.md, rules/)`,` ${l.type("presets")} Curated bundles (skills + MCPs + files)`,"",l.h("Explore"),` ${l.cmd("imperium list")} ${l.type("<type>")} List all items of a type`,` ${l.cmd("imperium search")} ${l.type("<type>")} ${l.arg("<query>")} Search by keyword`,` ${l.cmd("imperium inspect")} ${l.type("<type>")} ${l.arg("<name>")} View full details`,"",l.h("Install & Manage"),` ${l.cmd("imperium add")} ${l.type("<type>")} ${l.arg("<names...>")} Add skills or MCPs`,` ${l.cmd("imperium remove")} ${l.type("<type>")} ${l.arg("<names...>")} Remove skills or MCPs`,` ${l.cmd("imperium update")} ${l.arg("[skills...]")} Update installed skills`,"",l.h("Project"),` ${l.cmd("imperium setup")} ${l.arg("[adapter]")} Scaffold an adapter folder`,` ${l.cmd("imperium init")} Init lockfile`,` ${l.cmd("imperium detect")} Detect agent folders`,` ${l.cmd("imperium validate")} Validate installed skills`,"",l.h("Authentication"),` ${l.cmd("imperium login")} Sign in for private content`,` ${l.cmd("imperium logout")} Sign out`,` ${l.cmd("imperium whoami")} Show auth status`,"",l.dim(" Run ")+l.cmd("imperium <command> --help")+l.dim(" for full options and examples."),""].join(`
`));function Z(e){return e.option("--root <path>","Custom folder root").option("--target <preset>","Target preset: claude, github, windsurf, cursor, custom")}function Ne(e){return e.option("--force","Overwrite without asking").option("--dry-run","Preview changes only").option("-y, --yes","Skip confirmations").option("--no-fuzzy","Disable typo correction").option("--copy","Copy files instead of symlink").option("--symlink","Symlink where possible").option("--merge","Merge with existing files").option("--overwrite","Replace existing files").option("--preserve","Preserve user edits")}function Et(e){return e.option("--local <path>","Local registry path").option("--tag <version>","Version pin").option("--channel <channel>","Channel: stable, beta, dev")}function Rt(e){return e.option("--kind <kind>","Filter by kind: skill, reference, preset").option("--format <fmt>","Output format: md, yaml, json")}function O(e){return e.option("--verbose","Show file-by-file actions").option("--silent","Minimal output")}function rs(e){return e.option("--include <pattern>","Include files/folders matching pattern").option("--exclude <pattern>","Exclude files/folders matching pattern")}function A(e){let t=e.opts(),r={root:t.root,target:t.target,force:t.force,dryRun:t.dryRun,yes:t.yes,noFuzzy:t.noFuzzy??!t.fuzzy,verbose:t.verbose,silent:t.silent,local:t.local,tag:t.tag,channel:t.channel,copy:t.copy,symlink:t.symlink,merge:t.merge,overwrite:t.overwrite,preserve:t.preserve,include:t.include,exclude:t.exclude,kind:t.kind,format:t.format};return Tt(r),r}var ns={skills:"skills",skill:"skills",mcps:"mcps",mcp:"mcps",presets:"presets",preset:"presets",instructions:"instructions",instruction:"instructions"};function pe(e){let t=ns[e.toLowerCase()];if(t)return t;d(`Unknown resource type '${e}'. Must be: skills, mcps, instructions, or presets`),process.exit(1)}{let e=S.command("setup [adapter]").description("Setup an adapter folder, optionally applying a curated setup preset").option("--preset <name>","Apply a setup preset (curated bundle of skills, MCPs, and files)").option("--with <skills...>","Also install these skills after scaffolding").option("--instructions <names...>","Also install these instruction files after scaffolding").action(async(t,r,n)=>{let i=A(n),{setupCommand:s}=await Promise.resolve().then(()=>(Ur(),Nr));await s(t,{...i,with:r.with,preset:r.preset,instructions:r.instructions})});Z(e),Ne(e),Et(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium setup claude","Create .claude/ folder structure"),u("$ imperium setup claude --preset fullstack","Setup + apply a curated preset"),u("$ imperium setup --preset fullstack","Adapter inferred from preset"),u("$ imperium setup claude --with python-patterns","Setup + install a skill"),u("$ imperium setup claude --instructions my-rules","Setup + add instruction file"),u("$ imperium setup claude --preset fullstack --with extra-skill","Preset + extra skills"),u("$ imperium setup github","Create .github/copilot/ structure"),u("$ imperium setup claude --dry-run","Preview what would be created"),""].join(`
`))}{let e=S.command("add <type> [names...]").description("Add skills or MCPs to the project").option("--from-file <path>","Read names from a file (skills only)").option("--all","Add all from the registry (skills only)").option("--path <dir>","Target directory to install into").action(async(t,r,n,i)=>{let s=pe(t),o=A(i);if(n.path&&(o.root=n.path),s==="presets"){d("Presets can't be added individually. Use 'imperium setup --preset <name>' instead."),process.exitCode=1;return}if(s==="skills"){let{addCommand:a}=await Promise.resolve().then(()=>(Ae(),br));await a(r,{...o,fromFile:n.fromFile,all:n.all})}else if(s==="mcps"){let{addMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,o)}else{let{addInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,o)}});Z(e),Ne(e),Et(e),rs(e),O(e),e.addHelpText("after",()=>["",l.h("Examples \u2014 Skills"),u("$ imperium add skills python-patterns","Add a single skill"),u("$ imperium add skills python-patterns django-tdd","Add multiple"),u("$ imperium add skills --all","Add all from registry"),u("$ imperium add skills --from-file skills.txt","From a file"),u("$ imperium add skills python-patterns --path .cursor","Custom folder"),"",l.h("Examples \u2014 MCPs"),u("$ imperium add mcps obsidian","Add an MCP server"),u("$ imperium add mcps obsidian atlassian miro-mcp","Add multiple"),u("$ imperium add mcps pdf-reader --force","Overwrite existing"),"",l.h("Examples \u2014 Instructions"),u("$ imperium add instructions my-rules","Add an instruction file"),u("$ imperium add instructions my-rules --force","Overwrite existing"),""].join(`
`))}{let e=S.command("list <type>").description("List available skills, MCPs, instructions, or setup presets").option("-d, --description [items...]","Show descriptions (optionally for specific items only)").action(async(t,r,n)=>{let i=pe(t),s=A(n);if(i==="skills"){let{listCommand:o}=await Promise.resolve().then(()=>(de(),ue));await o(s,r.description)}else if(i==="mcps"){let{listMcpsCommand:o}=await Promise.resolve().then(()=>(K(),q));await o(s)}else if(i==="instructions"){let{listInstructionsCommand:o}=await Promise.resolve().then(()=>(W(),X));await o(s)}else{let{listPresetsCommand:o}=await Promise.resolve().then(()=>(me(),je));await o(s)}});Rt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium list skills","List all skills"),u("$ imperium list skills -d","With descriptions"),u("$ imperium list skills --kind reference","Only reference packs"),u("$ imperium list mcps","List MCP servers"),u("$ imperium list instructions","List instruction files"),u("$ imperium list presets","List setup presets"),""].join(`
`))}{let e=S.command("search <type> <query>").description("Search for skills, MCPs, instructions, or presets matching a keyword").action(async(t,r,n,i)=>{let s=pe(t),o=A(i);if(s==="skills"){let{searchCommand:a}=await Promise.resolve().then(()=>(de(),ue));await a(r,o)}else if(s==="mcps"){let{searchMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,o)}else if(s==="instructions"){let{searchInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,o)}else{let{searchPresetsCommand:a}=await Promise.resolve().then(()=>(me(),je));await a(r,o)}});Rt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium search skills python","Search skills by keyword"),u('$ imperium search skills "api design"',"Search with a phrase"),u("$ imperium search mcps figma","Search MCPs by keyword"),u("$ imperium search instructions rules","Search instruction files"),u("$ imperium search presets design","Search setup presets"),""].join(`
`))}{let e=S.command("inspect <type> <name>").description("Show full metadata for a skill, MCP, instruction, or setup preset").action(async(t,r,n,i)=>{let s=pe(t),o=A(i);if(s==="skills"){let{inspectCommand:a}=await Promise.resolve().then(()=>(de(),ue));await a(r,o)}else if(s==="mcps"){let{inspectMcpCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,o)}else if(s==="instructions"){let{inspectInstructionCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,o)}else{let{inspectPresetCommand:a}=await Promise.resolve().then(()=>(me(),je));await a(r,o)}});Rt(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium inspect skills python-patterns","Skill metadata + content"),u("$ imperium inspect mcps obsidian","MCP server details"),u("$ imperium inspect instructions my-rules","Instruction file content"),u("$ imperium inspect presets rxd","Preset contents"),""].join(`
`))}{let e=S.command("update [skills...]").description("Update installed skills (all if none specified)").action(async(t,r,n)=>{let i=A(n),{updateCommand:s}=await Promise.resolve().then(()=>(xt(),$t));await s(t||[],i)});Z(e),Ne(e),Et(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium update","Update all installed skills"),u("$ imperium update python-patterns","Update specific skill"),u("$ imperium update --dry-run","Preview changes"),""].join(`
`))}{let e=S.command("remove <type> <names...>").description("Remove installed skills, MCPs, or instructions").action(async(t,r,n,i)=>{let s=pe(t);if(s==="presets"){d("Presets can't be removed. Remove individual skills or MCPs instead."),process.exitCode=1;return}let o=A(i);if(s==="skills"){let{removeCommand:a}=await Promise.resolve().then(()=>(xt(),$t));await a(r,o)}else if(s==="mcps"){let{removeMcpsCommand:a}=await Promise.resolve().then(()=>(K(),q));await a(r,o)}else{let{removeInstructionsCommand:a}=await Promise.resolve().then(()=>(W(),X));await a(r,o)}});Z(e),Ne(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium remove skills python-patterns","Remove a skill"),u("$ imperium remove skills python-patterns django-tdd","Remove multiple"),u("$ imperium remove mcps obsidian","Remove MCP from config"),u("$ imperium remove mcps obsidian atlassian","Remove multiple MCPs"),u("$ imperium remove instructions my-rules","Remove an instruction file"),""].join(`
`))}{let e=S.command("init").description("Initialize an imperium lockfile in the current target").action(async(t,r)=>{let n=A(r),{initCommand:i}=await Promise.resolve().then(()=>(St(),Ct));await i(n)});Z(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium init","Init lockfile in auto-detected folder"),u("$ imperium init --target claude","Init lockfile in .claude/"),""].join(`
`))}{let e=S.command("detect").description("Detect agent folders in the current directory").action(async(t,r)=>{let n=A(r),{detectCommand:i}=await Promise.resolve().then(()=>(de(),ue));await i(n)});O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium detect","Scan for .claude, .github, .cursor, etc."),""].join(`
`))}{let e=S.command("validate").description("Validate installed skills against the lockfile").action(async(t,r)=>{let n=A(r),{validateCommand:i}=await Promise.resolve().then(()=>(St(),Ct));await i(n)});Z(e),O(e),e.addHelpText("after",()=>["",l.h("Examples"),u("$ imperium validate","Check installed skills match lockfile"),""].join(`
`))}S.command("login").description("Sign in with Microsoft to access private skills and content").action(async()=>{let{loginCommand:e}=await Promise.resolve().then(()=>(_e(),De));await e()}).addHelpText("after",()=>["",l.h("Examples"),u("$ imperium login","Open browser for Microsoft sign-in"),""].join(`
`));S.command("logout").description("Clear stored authentication credentials").action(async()=>{let{logoutCommand:e}=await Promise.resolve().then(()=>(_e(),De));e()}).addHelpText("after",()=>["",l.h("Examples"),u("$ imperium logout","Sign out and clear tokens"),""].join(`
`));S.command("whoami").description("Show current authentication status").action(async()=>{let{whoamiCommand:e}=await Promise.resolve().then(()=>(_e(),De));e()}).addHelpText("after",()=>["",l.h("Examples"),u("$ imperium whoami","Show logged-in email and domain"),""].join(`
`));S.on("command:*",e=>{let t=e[0],r=He(t);r?(g(`Unknown command '${t}'. Did you mean '${r}'?`),d(`Run: imperium ${r}`)):d(`Unknown command '${t}'. Run 'imperium --help' for available commands.`),process.exitCode=1});async function is(e){await S.parseAsync(e||process.argv)}T();Oe();J();J();G();D();Q();export{ze as bestMatch,ke as detectAgentFolders,Le as fetchInstructionContent,Y as fetchPackage,He as fuzzyCommand,ge as fuzzyMatch,Be as fuzzyPreset,ee as getAdapter,ft as getInstruction,ye as getInstructionPath,ut as inspectPackage,oe as installPackage,we as isInstalled,se as listInstructions,B as listPackages,S as program,E as readLockfile,gt as removePackage,b as resolveTarget,is as run,pt as searchInstructions,mt as searchPackages,M as writeLockfile};
{
"name": "@rushy/imperium-cli",
"version": "0.6.16",
"version": "0.6.17",
"description": "A package manager for agent context — install skills, reference packs, and presets for any AI agent ecosystem.",

@@ -5,0 +5,0 @@ "type": "module",

Sorry, the diff of this file is too big to display